遗传算法参数调整实验报告(精)
遗传算法实验报告

桂林理工大学实验报告班级计算机11-1班学号姓名同组实验者无实验名称日期2014年 5 月30日一、实验目的:用遗传算法求f(x)=x*sin(10*pi*x)+1.0的最大值,其中x区间为 [-1 2] 。
二、实验内容:初始化(编码);实现目标函数的计算:将pop每行转化成十进制数,将二值域中的数转化为变量域的数,计算目标函数值;随机产生初始群体;计算目标函数值;计算群体中每个个体的适应度;保存每次迭代最大适应值对应的x,y,用于绘图演示;计算最大值及其位置;计算最大值对应的x值。
三、程序清单:%遗传算法主程序clearclcpopsize=20; %群体大小chromlength=10; %字符串长度(个体长度)pc=0.6; %交叉概率pm=0.001; %变异概率pop=initpop(popsize,chromlength); %随机产生初始群体for i=1:200 %20为迭代次数[objvalue]=calobjvalue(pop); %计算目标函数值fitvalue=objvalue; %计算群体中每个个体的适应度% fitvalue=calfitvalue(objvalue);%依概率选择遗传操作之一r1=ceil(3*rand);switch r1case 1newpop=selection(pop,fitvalue); %复制case 2newpop=crossover(pop,pc); %交叉case 3newpop=mutation(pop,pc); %变异end[bestindividual,bestfit]=best(pop,fitvalue); % 群体中最大的适应值及其个体y(i)=bestfit; %保存每次迭代最大适应值对应的x,y,用于绘图演示x(i)=-1+decodebinary(bestindividual)*3/1023;pop=newpop;endfplot('x.*sin(10*pi*x)+1.0',[-1 2])hold onplot(x,y,'r*')hold off[ymax index]=max(y); %计算最大值及其位置xmax=x(index)%计算最大值对应的x值ymax四、运行结果:五、心得体会:本次试验着重针对代码的改写,通过改写代码以及思考对遗传算法有了一定的了解,跟同学讨论学会了二值域转换为变量域的方法。
遗传算法实验报告

遗传算法实验报告遗传算法实验报告引言:遗传算法是一种模拟生物进化过程的优化算法,通过模拟自然选择、遗传变异和交叉等操作,逐步优化问题的解。
本实验旨在探究遗传算法在解决优化问题中的应用,并通过实验验证其效果。
一、实验背景遗传算法最早由美国科学家约翰·霍兰德于20世纪60年代提出,其灵感来源于达尔文的进化论。
遗传算法通过基因编码、适应度评估、选择、交叉和变异等操作,模拟了进化过程中的遗传和变异,从而找到问题的最优解。
二、实验目的本实验旨在通过遗传算法解决一个经典的优化问题,验证其在解决实际问题中的有效性。
同时,对遗传算法的参数设置和操作过程进行调整和优化,以提高算法的性能。
三、实验步骤1. 问题定义:选择一个经典的优化问题,例如旅行商问题(TSP)或背包问题。
2. 解空间建模:将问题的解表示为染色体,设计基因编码方式。
3. 适应度函数定义:根据问题的特点,设计一个能够评估染色体解的适应度函数。
4. 初始化种群:随机生成一组初始染色体,作为种群。
5. 选择操作:根据适应度函数,选择一部分较优秀的染色体作为父代。
6. 交叉操作:通过交叉操作,生成新的子代染色体。
7. 变异操作:对子代染色体进行变异操作,引入新的基因变异。
8. 适应度评估:计算新的子代染色体的适应度。
9. 父代替换:根据适应度函数,选择一部分较优秀的子代染色体替换掉父代染色体。
10. 终止条件判断:判断是否满足终止条件,若满足则结束算法,否则返回步骤5。
11. 输出结果:输出最优解及其适应度值。
四、实验结果与分析通过实验,我们得到了一组优化问题的最优解,并计算出其适应度值。
通过观察实验结果,我们可以发现遗传算法在解决优化问题中的有效性。
同时,我们还可以通过调整遗传算法的参数和操作过程,进一步提高算法的性能。
五、实验总结通过本次实验,我们深入了解了遗传算法的原理和应用。
遗传算法作为一种优化算法,具有较强的适应性和鲁棒性,在解决实际问题中具有广泛的应用前景。
遗传算法实验报告

人工智能实验报告遗传算法实验报告一、问题描述对遗传算法的选择操作,设种群规模为4,个体用二进制编码,适应度函数,x的取值区间为[0,30]。
若遗传操作规定如下:(1)选择概率为100%,选择算法为轮盘赌算法;(2)交叉概率为1,交叉算法为单点交叉,交叉顺序按个体在种群中的顺序;(3)变异几率为0请编写程序,求取函数在区间[0,30]的最大值。
二、方法原理遗传算法:遗传算法是借鉴生物界自然选择和群体进化机制形成的一种全局寻优算法。
与传统的优化算法相比,遗传算法具有如下优点:不是从单个点,而是从多个点构成的群体开始搜索;在搜索最优解过程中,只需要由目标函数值转换得来的适应值信息,而不需要导数等其它辅助信息;搜索过程不易陷入局部最优点。
目前,该算法已渗透到许多领域,并成为解决各领域复杂问题的有力工具。
在遗传算法中,将问题空间中的决策变量通过一定编码方法表示成遗传空间的一个个体,它是一个基因型串结构数据;同时,将目标函数值转换成适应值,它用来评价个体的优劣,并作为遗传操作的依据。
遗传操作包括三个算子:选择、交叉和变异。
选择用来实施适者生存的原则,即把当前群体中的个体按与适应值成比例的概率复制到新的群体中,构成交配池(当前代与下一代之间的中间群体)。
选择算子的作用效果是提高了群体的平均适应值。
由于选择算子没有产生新个体,所以群体中最好个体的适应值不会因选择操作而有所改进。
交叉算子可以产生新的个体,它首先使从交配池中的个体随机配对,然后将两两配对的个体按某种方式相互交换部分基因。
变异是对个体的某一个或某一些基因值按某一较小概率进行改变。
从产生新个体的能力方面来说,交叉算子是产生新个体的主要方法,它决定了遗传算法的全局搜索能力;而变异算子只是产生新个体的辅助方法,但也必不可少,因为它决定了遗传算法的局部搜索能力。
交叉和变异相配合,共同完成对搜索空间的全局和局部搜索。
三、实现过程(1)编码:使用二进制编码,随机产生一个初始种群。
遗传算法实验报告豆

遗传算法实验报告豆实验报告:遗传算法在问题求解中的应用1. 引言遗传算法是一种模拟自然进化过程的优化算法,适用于解决复杂的优化问题。
在遗传算法中,通过模拟“遗传、变异、选择”等进化过程,逐渐进化出最优解。
本实验旨在通过编写代码,使用遗传算法解决一个优化问题,并对结果进行评估与分析。
2. 实验目标本实验要求使用遗传算法解决一个函数极值求解问题。
具体要求如下:- 目标函数:f(x) = 3x^4 - 4x^3 - 12x^2 + 2x + 6- 变量范围:-10 <= x <= 10- 求解目标:找到使得f(x)取得最大值的x的取值。
3. 实验步骤本次实验采用Python语言编写代码,使用遗传算法进行求解。
具体步骤如下:(1)初始化种群:随机生成一定数量的个体,并将其编码成二进制串表示。
(2)选择操作:通过计算适应度函数值,按照一定的策略选择个体。
这里采用轮盘赌选择策略,适应度越高的个体被选中的概率越大。
(3)交叉操作:随机选择两个个体,按照一定的概率进行交叉操作。
采用单点交叉的方法,将两个个体的某一位进行交换。
(4)变异操作:对选中的个体按照一定的概率进行变异操作。
这里采用单点变异的方法,随机选择一个位点进行变异。
(5)迭代操作:重复上述步骤,直到满足终止条件(迭代次数达到设定值或者达到了较好的适应度值)为止。
4. 实验结果与分析经过运行1000次实验,并进行统计,得到了一组实验结果。
最终,遗传算法找到了一个较好的近似解,f(x)取得最大值时的x的取值为2.976,并且f(x)取得的最大值为102.441。
下面对结果进行详细分析。
4.1. 初始种群影响初始种群的选择对于遗传算法的收敛速度和找到全局最优解的准确性都有一定的影响。
本次实验,我们随机生成了一定数量的个体作为初始种群,经过实验发现,初始种群越大,算法在相同条件下的迭代次数越少,收敛速度越快。
4.2. 参数选择遗传算法中的参数选择也对算法求解效果有一定影响。
遗传算法实验报告

遗传算法实验报告遗传算法实验报告引言:遗传算法是一种模拟自然选择和遗传机制的优化算法,它通过模拟基因的变异和交叉来寻找问题的最优解。
本实验旨在通过编写遗传算法程序,探索其在求解优化问题中的应用。
一、实验背景遗传算法最初是为了模拟达尔文的进化论而提出的。
通过模拟自然界中的进化过程,遗传算法可以逐步优化解空间,找到问题的最优解。
遗传算法适用于各种优化问题,如旅行商问题、背包问题等。
二、实验目的本实验旨在通过编写遗传算法程序,研究其在求解优化问题中的效果。
具体目标如下:1. 熟悉遗传算法的基本原理和流程;2. 实现一个简单的遗传算法程序;3. 运用该程序求解一个具体的优化问题。
三、实验步骤1. 确定问题:选择一个具体的优化问题,如旅行商问题;2. 设计编码方式:将问题转化为遗传算法可以处理的编码形式,如二进制编码;3. 初始化种群:随机生成一定数量的个体作为初始种群;4. 评估适应度:根据问题的目标函数,计算每个个体的适应度;5. 选择操作:根据适应度选择优秀的个体作为父代,采用轮盘赌等方法进行选6. 交叉操作:对选出的父代进行交叉操作,生成新的个体;7. 变异操作:对新个体进行变异操作,引入随机性;8. 更新种群:将原种群和新生成的个体合并,更新种群;9. 判断终止条件:判断是否满足终止条件,如达到最大迭代次数或找到最优解;10. 输出结果:输出找到的最优解。
四、实验结果本实验选择旅行商问题作为优化问题进行求解。
旅行商问题是一个经典的组合优化问题,目标是找到一条最短路径,使得旅行商可以依次访问一系列城市并回到起点。
经过多次实验,得到了如下结果:- 初始种群大小为100个个体;- 迭代次数为1000次;- 交叉概率为0.8,变异概率为0.01;- 最优解为路径长度为1000的路径。
五、实验分析通过对遗传算法的实验结果进行分析,可以得出以下结论:1. 遗传算法能够在一定程度上寻找到问题的最优解,但并不能保证一定找到全局最优解;2. 实验中的参数设置对算法的性能有很大影响,不同的参数设置可能导致不同的结果;3. 遗传算法适用于解决各种优化问题,但对于复杂问题可能需要更多的优化和六、实验总结通过本次实验,我们深入了解了遗传算法的原理和应用。
遗传算法实验报告

实验一 二进制编码函数优化一、实验目的根据给出的数学模型,利用遗传算法求解,并用C 语言编程实现。
采用二进制编码方式,通过不断调整种群规模、进化代数、交叉因子和变异因子等参数,对目标函数进行优化求解。
重点:掌握二进制编码的编程过程。
二、实验仪器Acer Aspire V5-472G ,Windows 7 旗舰版,64位操作系统 Intel(R) Core(TM) i5-3337 CPU @1.8GHz 1.80 GHz Microsoft Visual C++ 6.0 Microsoft Office Excel 2016三、实验内容及步骤采用二进制编码方式优化如下测试函数: (1) De Jong 函数F1:极小点f 1(0, 0, 0)=0。
(2) De Jong 函数F2:极小点f 2(1,1) = 0。
(3) De Jong 函数F3:对于]0.5,12.5[--∈i x 区域内的每一个点,它都取全局极小值30),,,,(543213-=x x x x x f 。
要求:对每一个测试函数,分析不同的种群规模(20~100)、交叉概率(0.4~0.99)和变异概率(0.0001~0.1)对优化结果的影响,试确定最佳参数组合。
四、实验报告(1) 根据De Jong函数F1:极小点f1(0, 0, 0)=0。
给定Cmax=100,MaxGeneration=100,在此基础上改变A:Popsize(20、60、100)、B:Pc(0.3、0.6、0.9)、C:Pm(0.1、0.05、0.001)等参数,设计一个3因素3水平的正交实验,根据正交实验表进行实验。
将正交实验因素和实验结果整合成一个正交实验表,如表1.1.1所示。
其中M表示best达到0的最小迭代数,N代表Average的收敛性,收敛为1,不收敛为0。
对实验结果M、N两项参数进行分析,得到均值响应表,如表1.1.2所示。
表1.1.1 函数F1正交实验表表1.1.2 函数F1均值响应表通过分析均值响应表,得到较优的组合为A1B1C2和A1B1C1。
遗传算法实验报告

13349035计算机系黄定帮
一、实验背景
遗传算法(Genetic Algorithm)又叫基因进化算法,是一种模拟遗传继承和达尔文适者生存原理的随机搜索算法。由于其结构简单,鲁棒性强,适用于并行处理以及高效实用等特点,对于传统搜索算法难以解决的非线性函数优化等问题具有明显的优势,因而在提出之后立即受到了各国学者的广泛关注,无论是理论研究还是应用研究都成了十分热门的课题。
图1函数的三维图
实验要求:
1.通过修改“演化程序prog.cpp”文件里的代码evaluation函数,将适应值目标函数定义为上述函数。
2.将原程序中的参数改为:种群规模100,迭代次数为500,pc=0.7,pm=0.07。适当修改代码使得该算法运行30次,求平均数。
3.探究参数pc和pm对实验结果的影响:分别设pc=0.1,0.2,0.3….,0.9。pm=0.01,0.02,0.03,…0.09,对每一组参数组合在函数上运行30次,基于30次的平均结果作图进行分析。
int main(void)
{
srand(time(NULL));
int num =0;
int i,j;
if ((galog = fopen("galog.txt","w"))==NULL){ exit(1); }
for( pm =0.01;pm <0.095;pm =pm +0.01)
for( pc=0.1;pc<0.95;pc=pc+0.1){
elitist();
}
sum=sum+population[POPSIZE].fitness;
if(j==29)
fprintf(galog,"%3.4f ",sum/30.0);
遗传算法实验报告

1.定义种群和个体定义种群为S , 种群数N=50, 其中x,y 是染色体中的两个基因组。
2. 算法设计(1)确定编码设计由于原函数的变量取值包含负数,不方便进行编码,所以将原函数的变量进行转换,从[-10 10]转换成[0 20],相应的,函数也要进行变换。
根据要求分辨率为0.0001,即编码范围至少为[0 200000],设编码位数为n+1,则20/(2^(n+1)-1)<=0.0001,所以求得n=18。
因此将变量域[0 20]离散化为二值域[0 2^18-1]即[0 262143],若由a, b 代表随机二值数,则x=20*a/262143, y=20*b/262143。
(2)确定目标函数和适应度函数由于所求目标函数值包含负数,若直接当做适应度函数值,负数无法被选择,会产生一定的不公平现象,故采用下界构造法,将函数值整体上移,使得被选择的机会相对公平。
而且由于变量域进行了变化,故目标函数为sin(10)sin(10)(,)*11010x y f x y x y --=+-- 而适应度函数,还要将负值转化为零(一般采用下界构造法后没有负值)。
(3)产生种群Init 函数实现种群的初始化,函数变量为种群规模N 以及染色体位数length 。
采用随机函数rand 生成随机矩阵,并使用round 函数对产生的随机数进行四舍五入,即进行二值化操作,每一行代表一个个体。
(4)选择复制选择和复制操作是可以决定哪些个体可以进入下一代。
选择的方法通常有轮盘赌选择法、锦标赛选择法、随机遍历选择法等。
由于相对来说轮盘赌选择法编程简单,故本次采用轮盘赌选择法,但是这里采用连续均匀分布的随机函数unifrnd ,可以提高公平性。
根据方程i f i i i sumf f P f ==∑ 1)计算fsum 和Pi2)产生{0,1}的随机数,求s=unifrnd(0,1,1,36)*fsum3) 求fi 和>=s 中最小的个体并选择复制。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
遗传算法参数调整实验报告
算法设计:
编码方案:遍历序列 适应度函数:遍历路程 遗传算子设计:
选择算子:精英保留+轮盘赌
交叉算子:Pxover ,顺序交叉、双亲双子,
变异算子:Pmutation ,随机选择序列中一个染色体(城市)与其相邻染色体交换
首先,我们改编了我们的程序,将主函数嵌套在多层迭代之内,从外到内依此为:
过程中,我们的程序将记录每一次运行时种群逐代进化(收敛)的情况,并另外记录总体测试结果。
测试环境:
AMD Athlon64 3000+ (Overclock to 2.4GHz)
目标:寻求最优Px 、Pm 组合 方式:popsize = 50
maxgen = 500 \ 10000 \ 15000 Px = 0.1~0.9(0.05) Pm = 0.01~0.1(0.01) count = 50
测试情况:运行近2万次,时间约30小时,产生数据文件总共5.8GB
测试结果:Px, Pm 对收敛结果的影响,用灰度表示结果适应度,黑色为适应度最低
结论:Px = 0.1
,Pm = 0.01为最优,并刷新最优结果19912(之前以为是20310),但20000次测试中最优解只出现4次,程序需要改进。
Maxgen = 5000
Pm=0.01 Px = 0.1
Maxgen = 10000
0.1
0.9
Px = 0.1 0.9
0.1
目标:改进程序,再寻求最优参数
方式:1、改进变异函数,只保留积极变异;
2、扩大测试范围,增大参数步进
popsize = 100 \ 200 \ 400 \ 800
maxgen = 10000
Px = 0.1 \ 0.5 \ 0.9
Pm = 0.01 \ 0.04 \ 0.07 \ 0.1
count = 30
测试情况:运行1200次,时间8小时,产生数据文件600MB
测试结果:
结论:Px = 0.1,Pm = 0.01仍为最优,收敛情况大有改善,10000代基本收敛到22000附近,并多次达到最优解19912。
变异函数的修改加快了整体收敛速度。
但是收敛情况对Pm并不敏感。
另外,单个种群在遗传过程中收敛速度的统计,将是下一步的目标。
目标:以单个种群的进化情况为对象,研究种群人口数对收敛速度的影响。
方式:1、修改程序,不以遗传代数作为迭代结束控制,而改为以达到目标适应度为结束,统计遗传的代数。
2、固定Px = 0.1,Pm = 0.01 popsize = 100 \ 200 \ 400 count = 100
Target Fitness = 20000 \ 21000
测试情况:以20000为目标,运行300次,时间2小时,产生数据文件600MB 以21000为目标,运行300次,时间1小时,产生数据文件280MB
测试结果:(1)目标适应度 20000以下
(2) 目标适应度 21000以下
popsize = 100时,成功 75/100 次
popsize = 200时,成功 81/100 次
popsize = 400时,成功 86/100 次
结论:增加种群人口对整体收敛速度有提高作用,但同一数量级内的变化效果不明显
109.7403 置信度(95.0%)
100 观测数 2078362 求和 23135 最大值 19912 最小值 3223 区域 305881.8 方差 20466
众数 20822 中位数 20783.62 平均 popsize=100 成功:13次 80.70299215
100
2062864
21793 19912 1881 165424.9398
20847 20590 20628.64 popsize=400 成功:13次
90.6743112
100
2071380
22240 19912 2328 208828.7273
20225
20682.5 20713.8 popsize=200 成功:12次
测试总结
⏹Px, Pm的值减小时,随机性减小,算子中的“择优”功能(如轮盘赌方法)发挥作用更大,所以
收敛性较好。
⏹种群人口数增加时,由于产生一些优秀个体的概率增加,使收敛速度有所加快,但是到收敛后
期因为随机性大,不见得更容易达到最优结果。
⏹末期收敛最优比前期快速下降更难实现和优化!。