遗 传 算 法 详 解 ( 含 M A T L A B 代 码 )
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
美国 MathWorks《Genetic Algorithm and Direct Search Toolbox 》 (GADS 遗传算法和直接搜索工具箱)
6.2 例 2:求解最值问题 求解以下问题 函数图像为 最大值大约在 x=1.5 附近取得。 (1)在 LINGO 中求解: (2)? 在 MATLAB 中求解: 第一种方法:使用 GA 工具箱 注意:GA 工具箱默认求最小值!若要求最大值,需要加上负号! 代码实现如下: %主程序代码,本程序采用遗传算法接力进化, %将上次进化结束后得到的最终种群作为下次输入的初始种群 %主程序代码, close all; clear all;
for j=1:2:popsize %选择操作 seln=selection(population,cumsump); %交叉操作 scro=crossover(population,seln,pcrossover); scnew(j,:)=scro(1,:); scnew(j+1,:)=scro(2,:); %变异操作 smnew(j,:)=mutation(scnew(j,:),pmutation); smnew(j+1,:)=mutation(scnew(j+1,:),pmutation); population=smnew; %产生了新的种群 %计算新种群的适应度 [Fitvalue,cumsump]=fitnessfun(population); %记录当前代最好的适应度和平均适应度 [fmax,nmax]=max(Fitvalue); fmean=mean(Fitvalue); ymax(Generation)=fmax; ymean(Generation)=fmean; %记录当前代的最佳染色体个体 x=transform2to10(population(nmax,:));
% 进化的代数 % 初始的种群 options=gaoptimset('Generations',T); [x,fval,reason,output,final_pop]=ga(@fitnessfun,1,option s); %进行第二次接力进化 options1=gaoptimset('Generations',T,'InitialPopulation', final_pop,'PlotFcns',@gaplotbestf); [x,fval,reason,output,final_pop]=ga(@fitnessfun,1,option s1); BestFval=-fval % 适应度函数 function f = fitnessfun(x)
scro(1,:)=population(seln(1),:); scro(2,:)=population(seln(2),:); %子程序:计算适应度函数, 函数名称存储为 fitnessfun function [Fitvalue,cumsump]=fitnessfun(population); global BitLength
%计算如果满足求解精度至少需要多长的染色体
BitLength=ceil(log2((boundsend-boundsbegin)'
.-
precision));
popsize=50; %初始种群大小
Generationnmax=100; %最大代数
pcrossover=0.90; %交配概率
pmutation=0.09; %变异概率
chb=round(rand*(BitLength-2))+1; %在[1,BitLength-1]范围 内随机产生一个交叉位
scro(1,:)=[population(seln(1),1:chb) population(seln(2),chb+1:BitLength)];
scro(2,:)=[population(seln(2),1:chb) population(seln(1),chb+1:BitLength)];
(4) 按交叉概率 Pc 进行交叉操作,生产新的个体; (5) 按变异概率 Pm 进行变异操作,生产新的个体; (6) 输出种群中适应度值最优的染色体作为问题的满意解 或最优解。 ? 具体讲解 遗传算法的具体实现 如何进行编码? 如何产生初始种群? 如何定义适应函数? 如何进行遗传操作(复制、交叉、变异)? 如何产生下一代种群? 如何定义停止准则?? 6.例题解析 6.1 例 1:求解多变量多约束非线性规划问题 求解以下问题的解 函数图像: ? 这题属于规划类问题,我们可以用 LINGO 来求解。 (1)? 在 LINGO 中求解: 那么在遗传算法里面我们要怎么样去解决它呢? (2)? 在 MATLAB 中求解(GA 工具箱求解): 这里使用到的是 MATLAB 自带的 GA 工具箱,即 GADS 工具箱。 遗传工具箱共有四大版本,分别是
g1=1.5+x(1)*x(2)-x(1)-x(2); g2=-x(1)*x(2)-10; if (g10|g20) f=exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1);; %主程序:
%用遗传算法求解 y=200*exp(-0.05*x).*sin(x)在[-2 2]区间上
代码实现如下: %主程序代码,本程序采用遗传算法接力进化, %将上次进化结束后得到的最终种群作为下次输入的初始种群 close all; clear all; %进化的代数 optionsOrigin=gaoptimset('Generations',T); [x,fval,reason,output,finnal_pop]=ga(@fitnessfun,2,optio nsOrigin); %进行第二次接力进化 options1=gaoptimset('Generations',T,'InitialPopulation', finnal_pop,'PlotFcns',@gaplotbestf); [x,fval,reason,output,finnal_pop,trace]=ga(@fitnessfun,2 ,options1); BestFval=fval % 适应度函数 function f = fun(x)
%自变量取值范围是[-2 2],需要把经过遗传运算的最佳染色体 整合到[-2 2]区间
xx=boundsbegin+x*(boundsend-boundsbegin)-(power((boundsend) ,BitLength)-1);
xmax(Generation)=xx; Generation=Generation+1 Generation=Generation-1; Bestpopulation=xx Besttargetfunvalue=targetfun(xx) %绘制经过遗传运算后的适应度曲线。一般地,如果进化过程中种 群的平均适应度与最大适 %应度在曲线上有相互趋同的形态,表示算法收敛进行得很顺利, 没有出现震荡;在这种前 %提下,最大适应度个体连续若干代都没有发生进化表明种群已经 成熟。 figure(1); hand1=plot(1:Generation,ymax); set(hand1,'linestyle','-','linewidth',1.8,'marker','*',' markersize',6) hand2=plot(1:Generation,ymean); set(hand2,'color','r','linestyle','-','linewidth',1.8.
英国 Sheffield《genetic arithmetic toolbox》(GATBX 遗传算 法工具箱)
中国陈益《simple genetic algorithms laboratory》(SGALAB 简单遗传算法实验室)
美国 NCSU-IE《Genetic Algorithm Optimization Tool》(GAOT 遗传算法优化工具箱)
if(x-2|x2) f=-200*exp(-0.05*x)*sin(x); 生成结果如下: 要点:适应度函数的选取 第二种方法:使用 GA 工具箱 GUI(有可能在将来的版本中移除) 这里我给大家实际演示一下。 第三种方法:自定义实现遗传算法 接下来就步入正题了,因为工具箱提供的功能有限,很多时候不 能很好地满足我们的需要,那我们怎么自己实现一个遗传算法呢?
的最大值
clear all;
close all;
global BitLength
global boundsbegin
global boundsend
bounds=[-2 2];%一维自变量的取值范围
precision=0.0001; %运算精度
boundsbegin=bounds(:,1);
Baidu Nhomakorabea
boundsend=bounds(:,2);
%产生初始种群
population=round(rand(popsize,BitLength));
%计算适应度,返回适应度 Fitvalue 和累积概率 cumsump
[Fitvalue,cumsump]=fitnessfun(population);
Generation=1; while GenerationGenerationnmax+1
'marker','h','markersize',6) xlabel(' 进 化 代 数 ');ylabel(' 最 大 - 平 均 适 应 度 ');xlim([1 Generationnmax]); legend('最大适应度','平均适应度'); box off;hold off; %子程序:新种群交叉操作,函数名称存储为 crossover.m function scro=crossover(population,seln,pc); BitLength=size(population,2); pcc=IfCroIfMut(pc); %根据交叉概率决定是否进行交叉操作,1 则是,0 则否 if pcc==1
遗传算法详解(LINGO 及 MatlabGA 工具箱求解实现)
【给力追-女视频】【企鹅:10⒈б .x.⒐⒌⒉⒍】
遗传算法 遗传算法是一种基于生物界自然群体遗传进化机制的自适应全局 优化概率搜索算法。它与传统算法不同,不依赖梯度信息,而是通过 模拟自然进化过程来搜索最优解。 例子:兔子的遗传进化 ? 有人说,现代医学阻碍了人类的进化?你怎么看? 2.发展历程 3.应用领域 4.适用问题 全局最优化问题(用其他优化方法较难求解,通常选择 GA 和 LINGO) 5.算法详解 5.1 对应关系 生物进化 遗传算法 适应函数 适者生存 适应函数值最大的解被保留的概率最大 问题的一个解 解的编码 编码的元素
根据适应函数选择的一组解 交叉(交配) 以一定的方式由双亲产生后代的过程 编码的某些分量发生变化的过程 了解了上面的对应关系之后,我们再一起来看遗传算法究竟是怎 么实现的。 5.2 算法思想 遗传算法是从代表问题可能潜在解集的一个种群(population) 开始的,而一个种群则由经过基因编码(coding)的一定数目的个 体(individual)组成。每个个体实际上是染色体(chromosome)带有特 征的实体。为了简化,往往采用二进制编码。对种群反复进行选择 (selection)、交叉(crossover)、变异(mutation)操作,估计各个体 的适应值(fitness),根据”适者生存、优胜劣汰”的进化规则,产 生最好的种群,使适应性好的个体比适应性差的个体有更多的繁殖机 会。最后把末代种群中的最优个体经过解码(decoding),可以获得满 足要求的最优解。 5.3 流程图描述 5.4 伪代码描述 (1) 随机产生初始种群; (2) 计算种群体中每个个体的适应度值,判断是否满足停 止条件,若不满足,则转第(3)步,否则转第(7)步; (3) 按由个体适应值所决定的某个规则选择将进入下一代
6.2 例 2:求解最值问题 求解以下问题 函数图像为 最大值大约在 x=1.5 附近取得。 (1)在 LINGO 中求解: (2)? 在 MATLAB 中求解: 第一种方法:使用 GA 工具箱 注意:GA 工具箱默认求最小值!若要求最大值,需要加上负号! 代码实现如下: %主程序代码,本程序采用遗传算法接力进化, %将上次进化结束后得到的最终种群作为下次输入的初始种群 %主程序代码, close all; clear all;
for j=1:2:popsize %选择操作 seln=selection(population,cumsump); %交叉操作 scro=crossover(population,seln,pcrossover); scnew(j,:)=scro(1,:); scnew(j+1,:)=scro(2,:); %变异操作 smnew(j,:)=mutation(scnew(j,:),pmutation); smnew(j+1,:)=mutation(scnew(j+1,:),pmutation); population=smnew; %产生了新的种群 %计算新种群的适应度 [Fitvalue,cumsump]=fitnessfun(population); %记录当前代最好的适应度和平均适应度 [fmax,nmax]=max(Fitvalue); fmean=mean(Fitvalue); ymax(Generation)=fmax; ymean(Generation)=fmean; %记录当前代的最佳染色体个体 x=transform2to10(population(nmax,:));
% 进化的代数 % 初始的种群 options=gaoptimset('Generations',T); [x,fval,reason,output,final_pop]=ga(@fitnessfun,1,option s); %进行第二次接力进化 options1=gaoptimset('Generations',T,'InitialPopulation', final_pop,'PlotFcns',@gaplotbestf); [x,fval,reason,output,final_pop]=ga(@fitnessfun,1,option s1); BestFval=-fval % 适应度函数 function f = fitnessfun(x)
scro(1,:)=population(seln(1),:); scro(2,:)=population(seln(2),:); %子程序:计算适应度函数, 函数名称存储为 fitnessfun function [Fitvalue,cumsump]=fitnessfun(population); global BitLength
%计算如果满足求解精度至少需要多长的染色体
BitLength=ceil(log2((boundsend-boundsbegin)'
.-
precision));
popsize=50; %初始种群大小
Generationnmax=100; %最大代数
pcrossover=0.90; %交配概率
pmutation=0.09; %变异概率
chb=round(rand*(BitLength-2))+1; %在[1,BitLength-1]范围 内随机产生一个交叉位
scro(1,:)=[population(seln(1),1:chb) population(seln(2),chb+1:BitLength)];
scro(2,:)=[population(seln(2),1:chb) population(seln(1),chb+1:BitLength)];
(4) 按交叉概率 Pc 进行交叉操作,生产新的个体; (5) 按变异概率 Pm 进行变异操作,生产新的个体; (6) 输出种群中适应度值最优的染色体作为问题的满意解 或最优解。 ? 具体讲解 遗传算法的具体实现 如何进行编码? 如何产生初始种群? 如何定义适应函数? 如何进行遗传操作(复制、交叉、变异)? 如何产生下一代种群? 如何定义停止准则?? 6.例题解析 6.1 例 1:求解多变量多约束非线性规划问题 求解以下问题的解 函数图像: ? 这题属于规划类问题,我们可以用 LINGO 来求解。 (1)? 在 LINGO 中求解: 那么在遗传算法里面我们要怎么样去解决它呢? (2)? 在 MATLAB 中求解(GA 工具箱求解): 这里使用到的是 MATLAB 自带的 GA 工具箱,即 GADS 工具箱。 遗传工具箱共有四大版本,分别是
g1=1.5+x(1)*x(2)-x(1)-x(2); g2=-x(1)*x(2)-10; if (g10|g20) f=exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1);; %主程序:
%用遗传算法求解 y=200*exp(-0.05*x).*sin(x)在[-2 2]区间上
代码实现如下: %主程序代码,本程序采用遗传算法接力进化, %将上次进化结束后得到的最终种群作为下次输入的初始种群 close all; clear all; %进化的代数 optionsOrigin=gaoptimset('Generations',T); [x,fval,reason,output,finnal_pop]=ga(@fitnessfun,2,optio nsOrigin); %进行第二次接力进化 options1=gaoptimset('Generations',T,'InitialPopulation', finnal_pop,'PlotFcns',@gaplotbestf); [x,fval,reason,output,finnal_pop,trace]=ga(@fitnessfun,2 ,options1); BestFval=fval % 适应度函数 function f = fun(x)
%自变量取值范围是[-2 2],需要把经过遗传运算的最佳染色体 整合到[-2 2]区间
xx=boundsbegin+x*(boundsend-boundsbegin)-(power((boundsend) ,BitLength)-1);
xmax(Generation)=xx; Generation=Generation+1 Generation=Generation-1; Bestpopulation=xx Besttargetfunvalue=targetfun(xx) %绘制经过遗传运算后的适应度曲线。一般地,如果进化过程中种 群的平均适应度与最大适 %应度在曲线上有相互趋同的形态,表示算法收敛进行得很顺利, 没有出现震荡;在这种前 %提下,最大适应度个体连续若干代都没有发生进化表明种群已经 成熟。 figure(1); hand1=plot(1:Generation,ymax); set(hand1,'linestyle','-','linewidth',1.8,'marker','*',' markersize',6) hand2=plot(1:Generation,ymean); set(hand2,'color','r','linestyle','-','linewidth',1.8.
英国 Sheffield《genetic arithmetic toolbox》(GATBX 遗传算 法工具箱)
中国陈益《simple genetic algorithms laboratory》(SGALAB 简单遗传算法实验室)
美国 NCSU-IE《Genetic Algorithm Optimization Tool》(GAOT 遗传算法优化工具箱)
if(x-2|x2) f=-200*exp(-0.05*x)*sin(x); 生成结果如下: 要点:适应度函数的选取 第二种方法:使用 GA 工具箱 GUI(有可能在将来的版本中移除) 这里我给大家实际演示一下。 第三种方法:自定义实现遗传算法 接下来就步入正题了,因为工具箱提供的功能有限,很多时候不 能很好地满足我们的需要,那我们怎么自己实现一个遗传算法呢?
的最大值
clear all;
close all;
global BitLength
global boundsbegin
global boundsend
bounds=[-2 2];%一维自变量的取值范围
precision=0.0001; %运算精度
boundsbegin=bounds(:,1);
Baidu Nhomakorabea
boundsend=bounds(:,2);
%产生初始种群
population=round(rand(popsize,BitLength));
%计算适应度,返回适应度 Fitvalue 和累积概率 cumsump
[Fitvalue,cumsump]=fitnessfun(population);
Generation=1; while GenerationGenerationnmax+1
'marker','h','markersize',6) xlabel(' 进 化 代 数 ');ylabel(' 最 大 - 平 均 适 应 度 ');xlim([1 Generationnmax]); legend('最大适应度','平均适应度'); box off;hold off; %子程序:新种群交叉操作,函数名称存储为 crossover.m function scro=crossover(population,seln,pc); BitLength=size(population,2); pcc=IfCroIfMut(pc); %根据交叉概率决定是否进行交叉操作,1 则是,0 则否 if pcc==1
遗传算法详解(LINGO 及 MatlabGA 工具箱求解实现)
【给力追-女视频】【企鹅:10⒈б .x.⒐⒌⒉⒍】
遗传算法 遗传算法是一种基于生物界自然群体遗传进化机制的自适应全局 优化概率搜索算法。它与传统算法不同,不依赖梯度信息,而是通过 模拟自然进化过程来搜索最优解。 例子:兔子的遗传进化 ? 有人说,现代医学阻碍了人类的进化?你怎么看? 2.发展历程 3.应用领域 4.适用问题 全局最优化问题(用其他优化方法较难求解,通常选择 GA 和 LINGO) 5.算法详解 5.1 对应关系 生物进化 遗传算法 适应函数 适者生存 适应函数值最大的解被保留的概率最大 问题的一个解 解的编码 编码的元素
根据适应函数选择的一组解 交叉(交配) 以一定的方式由双亲产生后代的过程 编码的某些分量发生变化的过程 了解了上面的对应关系之后,我们再一起来看遗传算法究竟是怎 么实现的。 5.2 算法思想 遗传算法是从代表问题可能潜在解集的一个种群(population) 开始的,而一个种群则由经过基因编码(coding)的一定数目的个 体(individual)组成。每个个体实际上是染色体(chromosome)带有特 征的实体。为了简化,往往采用二进制编码。对种群反复进行选择 (selection)、交叉(crossover)、变异(mutation)操作,估计各个体 的适应值(fitness),根据”适者生存、优胜劣汰”的进化规则,产 生最好的种群,使适应性好的个体比适应性差的个体有更多的繁殖机 会。最后把末代种群中的最优个体经过解码(decoding),可以获得满 足要求的最优解。 5.3 流程图描述 5.4 伪代码描述 (1) 随机产生初始种群; (2) 计算种群体中每个个体的适应度值,判断是否满足停 止条件,若不满足,则转第(3)步,否则转第(7)步; (3) 按由个体适应值所决定的某个规则选择将进入下一代