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

合集下载

遗传算法实验报告

遗传算法实验报告

桂林理工大学实验报告班级计算机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.⽤Matlab编制另⼀个主程序Genetic2.m,求例1的在第⼆种终⽌条件下的最优解.提⽰:⼀个可能的函数调⽤形式以及相应的结果为:[Count,Result,BestMember]=Genetic2(22,6,'-x*x+2*x+0.5',-1,2,-2,0.01,0.00001) % 附录1 Genetic2.mfunction[Count,Result,BestMember]=Genetic2(MumberLength,MemberNumber,FunctionFitness,MinX,MaxX,Fmin,MutationProbability,Precision)Population=PopulationInitialize(MumberLength,MemberNumber);Error=Precision+1;global Count;global CurrentBest;Count=1;PopulationCode=Population;PopulationFitness=Fitness(PopulationCode,FunctionFitness,MinX,MaxX,MumberLength); %⽤于计算群体中每⼀个染⾊体的⽬标函数值PopulationFitnessF=FitnessF(PopulationFitness,Fmin); %⽤于计算每个染⾊体的适应函数值PopulationProbability=Probability(PopulationFitnessF); %⽤于计算群体中每个染⾊体的⼊选概率[Population,CurrentBest,EachGenMaxFitness]=Elitist(PopulationCode,PopulationFitness ,MumberLength); %⽤到最佳个体保存⽅法(“优胜劣汰”思想)EachMaxFitness(Count)=EachGenMaxFitness;MaxFitness(Count)=CurrentBest(length(CurrentBest));while Error>PrecisionNewPopulation=Select(Population,PopulationProbability,MemberNumber);Population=NewPopulation;NewPopulation=Crossing(Population,FunctionFitness,MinX,MaxX,MumberLength);Population=NewPopulation;NewPopulation=Mutation(Population,MutationProbability);Population=NewPopulation;PopulationFitness=Fitness(Population,FunctionFitness,MinX,MaxX,MumberLength);PopulationFitnessF=FitnessF(PopulationFitness,Fmin);PopulationProbability=Probability(PopulationFitnessF);Count=Count+1;[NewPopulation,CurrentBest,EachGenMaxFitness]=Elitist(Population,PopulationFitness, MumberLength); EachMaxFitness(Count)=EachGenMaxFitness;MaxFitness(Count)=CurrentBest(length(CurrentBest));Error=sum(abs(PopulationProbability-mean(PopulationProbability)));实验七遗传算法Population=NewPopulation;endDim=size(Population);Result=ones(2,Dim(1));for i=1:Dim(1)Result(1,i)=Translate(Population(i,:),MinX,MaxX,MumberLength);endResult(2,:)=PopulationFitness;BestMember(1,1)=Translate(CurrentBest(1:MumberLength),MinX,MaxX,MumberLength); BestMember(2,1)=CurrentBest(MumberLength+1);close allsubplot(211)plot(EachMaxFitness)subplot(212)plot(MaxFitness)>> [Count,Result,BestMember]=Genetic2(22,6,'-x*x+2*x+0.5',-1,2,-2,0.01,0.00001) Count = 11Result =0.9748 0.9748 0.9748 0.9748 0.9748 0.97481.4994 1.4994 1.4994 1.4994 1.4994 1.4994BestMember =0.97481.4994123456789101112345678910112.按照例2的具体要求,⽤遗传算法求上述例2的最优解.>> [Count,Result,BestMember]=Genetic1(20,6,'-x*x+x+3',0,2,1,0.01,50)实验七遗传算法50Result =0.6880 0.6880 0.6880 0.6880 0.6880 0.68803.2146 3.2146 3.2146 3.2146 3.2146 3.2146 BestMember =0.68803.2146051015202530354045503.附录9⼦程序Crossing.m中的第8⾏⾄第13⾏的程序表明,当Dim(1)>=3时,将交换数组Population的最后两⾏,即交换最后⾯的两个个体.其⽬的是什么?4.设2f x x∈-,要设定求解精度到15位⼩数.=--+,求max(),[2,2]f x x x()41>> [Count,Result,BestMember]=Genetic2(22,6,'-x*x-4*x+1',-2,2,-12,0.01,1e-15)Count =15Result =-1.8728 -1.8728 -1.8728 -1.8728 -1.8728 -1.87284.9838 4.9838 4.9838 4.9838 4.9838 4.9838 BestMember =-1.87284.9838实验七遗传算法4.854.94.9555.050510154.98384.9838 4.98384.98384.98384.9838。

遗传算法实验报告

遗传算法实验报告

遗传算法实验报告一、实验目的遗传算法是一种基于自然选择和遗传机制的优化算法,本次实验的主要目的是深入理解遗传算法的原理和工作机制,并通过实际编程实现来解决特定的优化问题,观察其性能和效果。

二、实验原理遗传算法模拟了生物进化的过程,通过对一组潜在的解决方案(称为个体或染色体)进行选择、交叉和变异操作,逐步迭代优化,以找到最优或近似最优的解。

在遗传算法中,每个个体都由一组基因表示,这些基因对应于问题的参数。

适应度函数用于评估每个个体的优劣程度,适应度高的个体更有可能被选择进行繁殖,产生下一代个体。

选择操作通常基于个体的适应度比例,适应度高的个体有更高的概率被选中。

交叉操作将两个父代个体的基因部分组合,生成新的子代个体。

变异操作则以一定的概率随机改变个体的某些基因,以增加种群的多样性。

三、实验环境本次实验使用 Python 编程语言,主要依赖的库有 numpy 用于数组操作,matplotlib 用于结果可视化。

四、实验步骤1、问题定义确定要优化的问题,例如求解函数的最大值或最小值,或者在给定约束条件下寻找最优的参数组合。

定义适应度函数,用于衡量每个个体的优劣。

2、编码方案确定如何将问题的解编码为染色体的形式。

常见的编码方式有二进制编码、实数编码等。

3、初始化种群随机生成一定数量的初始个体,组成初始种群。

4、选择操作根据个体的适应度计算选择概率,使用轮盘赌选择或其他选择方法选择父代个体。

5、交叉操作对选中的父代个体进行交叉,生成子代个体。

6、变异操作以一定的概率对个体的基因进行变异。

7、迭代更新重复进行选择、交叉和变异操作,生成新的种群,直到满足终止条件(如达到最大迭代次数或找到满意的解)。

8、结果分析对最终得到的最优个体进行解码,得到问题的解。

分析遗传算法的性能,如收敛速度、解的质量等。

五、实验结果与分析以求解函数 f(x) = x^2 在区间 0, 10 上的最大值为例,进行了遗传算法的实验。

1、适应度函数定义适应度函数直接采用目标函数 f(x) = x^2 ,即适应度越高,函数值越大。

关于遗传算法的实验报告

关于遗传算法的实验报告

关于遗传算法的实验报告一、实验目的:理解和掌握遗传算法的应用及意义,能用一门自己擅长的语言实现遗传算法的基本功能,在此基础上进一步理解和巩固对遗传算法的重要,以便在今后的学习和工作中能有效的运用和借鉴!需要指出的是遗传算法并不是能保证所得到的就是最佳的答案但通过一定的方法可以将误差控制在一定的范围内!二、实验原理和题目:1.遗传算法是一种基于空间搜索的算法,它通过自然选择、遗传、变异等操作以及达尔文的适者生存的理论,模拟自然进化过程来寻找所求问题的答案。

其求解过程是个最优化的过程。

一般遗传算法的主要步骤如下:(1)随机产生一个确定长度的特征字符串组成的初始种群。

(2)对该字符串种群迭代地执行下面的步骤a和步骤b,直到满足停止准则为止:a计算种群中每个个体字符串的适应值;b应用复制、交叉和变异等遗传算子产生下一代种群。

(3)把在后代中表现的最好的个体字符串指定为遗传算法的执行结果,即为问题的一个解。

2.通过编码、设置种群、设置适应度函数、遗传操作、解码产生需要的解。

f(x)=x*sin(x)+1,x∈[0,2π],求解f(x)的最大值和最小值。

三、实验条件硬件:微型计算机。

语言:本实验选用的为C++语言。

四、实验内容:建造针对f(x)的遗传算法程序,然后进行运行求解。

五、实验步骤:1. 确定基本功能:本实验是实现f(x)的最大值和最小值的求解。

2. 对f(x)进行编码:用一个二进制矢量表示一个染色体,由染色体来代表变量x的实数值,这里精度取小数点后6位数,变量x的域长为2π,整个区间被分为2π*1000000个等长的区间。

由于2π*1000000在23位二进制数的表示范围呢,所以,编码长度为23位。

3. 设计适应度函数:由于要求f(x)的最值,所以适应度函数可根据f(x)做适当的改变。

最大值:f(x)=x*sin(x)+5;最小值:f(x)=1/(x*sin(x)+5 );4. 针对f(x)的设计并且实现遗传算法程序:遗传操作主要包括复制、交叉和变异。

遗传算法的实验报告

遗传算法的实验报告

遗传算法的仿真一.实验目的1.了解遗传算法的原理2.学习Matlab遗传算法工具箱的使用3.使用Matlab进行遗传算法的仿真二.实验设备1.计算机2.Matlab软件三.实验内容和步骤要求:计算目标函数值函数:()()[]2,1x=xxfπ。

x+0.2∈*10sin-1.建立目标函数文件。

在Matlab命令窗口中,选择“file”→“new”→“M-file”,命名为ft.m,然后在新建的窗口中输入如下内容:%目标函数function y=ft(x)y=x.*sin(10*pi*x)+2;2.分别建立相应的子函数文件。

1)计算适应度和累计概率函数在Matlab命令窗口中,选择“file”→“new”→“M-file”,命名为objf.m,然后在新建的窗口中输入如下内容:function [f,p]=objf(s) %计算适应度函数r=size(s); %读取种群大小inn=r(1); %有inn个个体bn=r(2); %个体长度为bnfor i=1:innx=n2to10(s(i,:)); %将二进制转换为十进制xx=-1.0+x*3/(power(2,bn)-1); %转化为[-1,2]区间的实数f(i)=ft(xx); %计算函数值,即适应度endf=f';%计算选择概率fsum=0;for i=1:innfsum=fsum+f(i)*f(i);endfor i=1:innps(i)=f(i)*f(i)/fsum;%计算累积概率p(1)=ps(1);for i=2:innp(i)=p(i-1)+ps(i);endp=p';end2)选择操作函数在Matlab命令窗口中,选择“file”→“new”→“M-file”,命名为sel.m,然后在新建的窗口中输入如下内容:function seln=sel(s,p)%“选择”操作inn=size(p,1);for i=1:2 %从种群中选择两个个体r=rand;%产生一个随机数prand=p-r;j=1;while prand(j)<0j=j+1;endseln(i)=j; %选中个体的序号end3)交叉操作函数在Matlab命令窗口中,选择“file”→“new”→“M-file”,命名为cro.m,然后在新建的窗口中输入如下内容:function scro=cro(s,seln,pc) %“交叉”操作r=size(s);inn=r(1);bn=r(2);pcc=pro(pc); %根据交叉概率决定是否进行交叉操作,1则是,0则。

遗传算法试验报告

遗传算法试验报告

智能优化计算课程试验报告实验要求:用遗传算法解决下面函数的极小值问题:遗传算法的具体实施策略不限,最好用MATLAB,上交内容包括源程序和运行结果实验内容:目标函数是一个含有30维变量的复杂型超越函数,决定使用MA TLAB7.0下的遗传函数工具箱来寻找函数最小值。

一.函数编辑在m文件下编辑目标函数:function y =fun(x);y = zeros(size(x,1),1); %产生一个列向量,(种群数)*1,作为预留解空间[xSize, Dim] = size(x); %xSize:种群数; Dim:变量x的维数indices = repmat(1:Dim, xSize, 1); %生成函数中i的空间矩阵,(种群数)*(变量维数)y = sum(((x.^2) / 4000)')' - prod(cos(x ./ sqrt(indices))')' + 1; %函数表达式,此处均采用矩阵点乘的形式二.遗传算法参数设置通过gatool(遗传算法工具箱)设置参数,运行程序,选择合适参数。

Number of variables(变量维数):30Population size:100Initial range:[-600;600]Selection function (选择函数): tournament(锦标赛); tournament size:2Mutation function (变异函数): Uniform(); Rate:0.05Crossover function: Intermediate; Ratio: 0.05Generrations: 5000; Stall generations: Inf; Stall time limite: InfFitness function is vectorized: on其余均为工具箱默认参数。

三.运行程序将设置好参数的算法程序运行30次运行,最佳运行结果为:3.4937e-010x1~x30取值:1.0e-004 *-0.0097 0.0017 0.0587 -0.0250 0.0765 0.0391 -0.0824 0.0653 -0.0539 -0.3470 -0.1078 0.4388 0.0223 0.0363 0.0003 0.0228 -0.0481 -0.4491 -0.5006 -0.2514 0.0608 -0.1022 0.3454 0.11460.0768 -0.0203 0.0910 -0.0571 0.0065 -0.138450010001500200025003000350040004500500005001000GenerationF i t n e s s v a l ue Best: 3.4999e-010 Mean: 15.0886010203040506070809010005001000Fitness of Each Individual四.保存遗传算法程序将在工具箱中编辑好的算法导出为m 函数并保存:function [X,FVAL,REASON,OUTPUT,POPULATION,SCORES] = untitled%% This is an auto generated M file to do optimization with the Genetic Algorithm and % Direct Search Toolbox. Use GAOPTIMSET for default GA options structure.%%Fitness functionfitnessFunction = @fun;%%Number of Variablesnvars = 30;%Start with default optionsoptions = gaoptimset;%%Modify some parametersoptions = gaoptimset(options,'PopInitRange' ,[-600 ; 600 ]);options = gaoptimset(options,'PopulationSize' ,100);options = gaoptimset(options,'Generations' ,5000);options = gaoptimset(options,'StallGenLimit' ,Inf);options = gaoptimset(options,'StallTimeLimit' ,Inf);options = gaoptimset(options,'PlotInterval' ,30);options = gaoptimset(options,'SelectionFcn' ,{ @selectiontournament 2 }); options = gaoptimset(options,'CrossoverFcn' ,{ @crossoverintermediate 0.05 }); options = gaoptimset(options,'MutationFcn' ,{ @mutationuniform 0.05 });options = gaoptimset(options,'Display' ,'off');options = gaoptimset(options,'PlotFcns' ,{ @gaplotbestf });options = gaoptimset(options,'Vectorized' ,'on');%%Run GA[X,FVAL,REASON,OUTPUT,POPULATION,SCORES] = ga(fitnessFunction,nvars,options);以上结果亦可在m文件中直接运行获得。

遗传算法参数设置

遗传算法参数设置

遗传算法参数设置遗传算法是一种基于生物进化原理的优化算法,通过模拟自然选择、交叉、变异等过程,寻找最优解或近似最优解。

遗传算法的性能和效果受到参数设置的影响,下面将介绍几个常用的参数设置以及其影响。

1. 种群大小(Population Size):种群大小是指每一代个体的数量。

通常情况下,种群大小越大,算法的全局能力越强,但计算复杂度也会增加。

种群大小的选择应根据问题的复杂度和计算资源进行权衡。

2. 交叉率(Crossover Rate):交叉率指的是进行交叉操作的概率。

交叉是通过将两个个体的染色体进行交换、重组来产生新的个体。

适当增加交叉率可以增强种群的多样性,有利于全局,但交叉率过高可能会导致收敛速度变慢。

3. 变异率(Mutation Rate):变异率指的是进行变异操作的概率。

变异是通过对个体的染色体进行随机扰动来产生新的个体。

适当增加变异率可以增加种群的多样性,有助于避免陷入局部最优解,但变异率过高可能会导致过程过于随机。

4. 选择方法(Selection Method):选择方法是指如何选择下一代个体的过程。

常用的选择方法有轮盘赌选择、竞争选择、排序选择等。

选择方法的选择取决于问题的特性和算法的要求。

例如,轮盘赌选择适用于连续型优化问题,而竞争选择适用于离散型优化问题。

5. 停止准则(Termination Criterion):停止准则用于确定算法何时终止。

常见的停止准则有达到最大迭代次数、求解误差小于一些阈值等。

合理的停止准则可以避免计算资源的浪费,并确保获得足够好的近似最优解。

6. 编码方式(Encoding):编码方式指的是将问题转化为染色体的表示形式。

常用的编码方式有二进制编码、整数编码、浮点数编码等。

合适的编码方式应能准确地表示问题的信息并与遗传操作相兼容。

除了上述参数外,遗传算法还有许多其他参数可以进行调整,例如交叉算子、变异算子、选择算子的设计、适应度函数的定义等等。

遗传算法优化与参数调节

遗传算法优化与参数调节

遗传算法优化与参数调节遗传算法是一种基于生物进化原理的优化方法,因其适用于寻找多维、非线性、多模态问题的最优解而被广泛应用。

在实际应用中,参数的调节是遗传算法成功应用的必要条件之一。

本文将探讨遗传算法的优化过程以及参数调节的重要性。

一、遗传算法的优化过程遗传算法是一种模拟自然选择和遗传机制的优化算法。

其过程模拟了生物进化中的遗传、交叉、变异和适应度选择。

遗传算法的优化过程可分为以下几个步骤:1. 初始化种群:随机生成一定数量的个体作为初始种群。

2. 适应度评估:根据问题的特定评价函数,对每个个体进行适应度评估,并确定其在种群中的适应程度。

3. 选择:通过选择算子,按照适应度大小保留优秀的个体,并丢弃适应度较差的个体。

4. 交叉:从选择的个体中随机选择两个进行交叉操作,生成新的子代个体。

5. 变异:对新生成的子代进行变异操作,引入随机性,增加种群的多样性。

6. 替换:用子代替换原始种群中适应度较差的个体。

7. 循环迭代:重复执行上述步骤,直到满足结束条件。

二、参数调节的重要性在遗传算法中,参数的选择对算法的性能和优化结果具有重要影响。

参数调节的目标是找到一个合适的参数组合,以在有限时间内找到接近最优解的解决方案。

1. 种群大小:种群大小决定了算法的搜索空间,较小的种群可能导致局部最优解,而较大的种群则会增加计算时间。

合适的种群大小可以平衡搜索的广度和深度。

2. 交叉率:交叉是遗传算法中生成新个体的关键操作。

较低的交叉率可能导致收敛速度较慢,较高的交叉率则可能导致种群过度收敛在某个局部最优解上。

在实际应用中,根据问题的性质和实验经验选择合适的交叉率是必要的。

3. 变异率:变异是遗传算法中引入新的个体,增加种群多样性的操作。

合适的变异率可以避免算法陷入局部最优解,但过高的变异率可能导致种群的收敛速度过慢。

4. 选择策略:选择算子决定了哪些个体将会被选择为下一代的父代个体。

不同的选择策略适用于不同的问题。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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的值减小时,随机性减小,算子中的“择优”功能(如轮盘赌方法)发挥作用更大,所以
收敛性较好。

⏹种群人口数增加时,由于产生一些优秀个体的概率增加,使收敛速度有所加快,但是到收敛后
期因为随机性大,不见得更容易达到最优结果。

⏹末期收敛最优比前期快速下降更难实现和优化!。

相关文档
最新文档