当前位置:首页 >> 高中教育 >>

6 第六章 Matlab实现遗传算法


Matlab实现遗传算法
学 院:设计艺术学院

课程名称:计算机辅助工业设计 授课班级:2013级工业设计研究生

MATLAB 技术

Contents
1
遗传算法的基础知识

2

Matlab工具箱实现GA

3

/>
Matlab函数调用实现GA

4

Matlab编程实现GA

一.遗传算法的基础知识
遗传算法( Genetic Algorithm :GA)是一种寻 求函数(问题)最优解的数学方法。 基本原理是:模拟自然界生物繁衍过程中基因重 组与进化的自然过程,把待解决问题的参数编成 二进制码或十进制码(也可编成其他进制码), 即基因,若干基因组成一个染色体(个体),许 多染色体进行类似于自然选择、配对交叉和变异 的运算,经过多次重复迭代(即世代遗传)直至 得到最后的优化结果。

一.遗传算法的基础知识
遗传算法的流程

一.遗传算法的基础知识
随机产生种群
M i n f ( x ) ? x1 ? x 2 ? 0 ? xi ? 1 1 x ? 1 x3 x3

一.遗传算法的基础知识
编码与解码 个体(染色体)

基因型 1000101110110101000111
解码

编码

表现型:0.637197

一.遗传算法的基础知识
适应度函数(Fitness Function)

定义:度量个体适应度的函数。 在某种程度上来说,适应度函数就相当 于实际问题的目标函数,只是它只求最小 值,因此,当实际问题是求最大值时,需要 做相应转换。

一.遗传算法的基础知识
选择(Slection)

选择(或称为复制)是在种群中选择 适应度高(函数更加优化)的个体产生新的 种群的过程。遗传算法中的选择操作就是用 来确定如何从父代群体中按某种方法选取哪 些个体遗传到下一代群体中的一种遗传运 算,用来确定重组或交叉个体。如轮盘赌选 择,随机竞争选择等

一.遗传算法的基础知识
交叉(Crossover)

?交叉是按较大的概率从群体中选择两个个 体,交换两个个体的某个或某些位。如单点 交叉,多点交叉等。
例如: 交叉前: 个体1:00000|01110000000010000 00000| 00000|00000111111000101 个体2:11100|00000111111000101 11100|01110000000010000 11100| 交叉后 :

一.遗传算法的基础知识
变异(Mutation) ? 以较小的概率对个体编码串上的某个或某些位值进 行改变,如二进制编码中0”变为“1”,“1”变为 “0”,进而生成新个体。 ? 它决定了遗传算法的局部搜索能力,同时保持种群 的多样性。交叉运算和变异运算的相互配合,共同 完成对搜索空间的全局搜索和局部搜索。

二.Matlab工具箱实现GA
?打开工具箱: ? 键入命令:gatool ? 点击命令:

二.Matlab工具箱实现GA
1

2 3

4

二.Matlab工具箱实现GA
第1部分:定义函数句柄

?在Fitness Function中输入一个计算适应 度函数的.M文件函数的句柄(handle),以 调用文件中函数。格式:@test(与相应的M 文件名一致) ?在 Number of variance中输入变量个 数

二.Matlab工具箱实现GA
生成.M文件

?定义 对应的函数:编辑并生成适应度函数 的.M文件——便于工具箱使用时调用。
? 格式: function z=test(x) z=具体函数 注意事项:一个函数中变量只能是X1,X2,……,不能是 x,y,z;.M文件名无需与函数名 对应。
英文,自由命名

二.Matlab工具箱实现GA
第2部分:约束条件
? Linear inequalities(线性不等式):A*x <= b 。其中A是矩阵,b是列向 量,书写格式如A中填写[1,2,3;12,3,43;1,23,4],b中填写[5;4;7]; ? Linear equalities (线性等式): Aeq*x = beq 。其中Aeq是矩阵,beq是 列向量,格式同上; ? Bounds (边界):变量的最小和最大值。矩阵形式表示,负无穷大为-Inf,正 无穷大为Inf。 ? Nonlinear constraint function(非线性限制函数) :类似于“Fitness Function”中的输入,首先生成对应的.M文件,此处输入函数的句柄,调用其中 的(非线性限制)函数。 ? 格式为: function [c,ceq]=game(x) c(1) = (x(1)^2)/9 + (x(2)^2)/4 - 1; ceq = [ ];
2 x1 2 x2

? ?1 ? ? ?1? 0 9 4 9 4 不 等 式 必 须 是“ ? 0” 等 式 不 等 式 都 必 须 返 回 , 若 无 则 为 “ []”

2 x1

2 x2

二.Matlab工具箱实现GA
第3部分:运算参数

参数的设置主要影响到运算过程的速度和运算结果的 精准性,两者在很多时候是相互矛盾的。 运算参数有很多,均有缺省值,一般都不需要修改。各 个参数选项的详细信息在参考书中有详细介绍,另外在工具 箱操作界面的右侧也有相应的英文介绍。

二.Matlab工具箱实现GA
第4部分:运行显示

?Plot对话框:运算过程的图形显示界面,可 同时选择多项,在运算过程中将显示对应的 运算过程。比如:best fitness将显示每一 代中最佳适应度的函数值;Scores将显示 每一代所有个体的取值等。

二.Matlab工具箱实现GA
第4部分:运行命令和结果

?Run solver ? Use random states from previous run:重复 运算上一次运算过程—运算结果一致。 ? Start、Pause、Stop:开始、暂停、停止。 ? Status and results:状态和结果。提示是 否正常计算,以及正常运算的最优结果。 ? Final point:最优结果时的参数值。

二.Matlab工具箱实现GA
Export to Workspace
将当前问题和参数设置 保存到Matlab工作空间 保存当前问题和参数时 将当前结果的相关信息也 也保存,下次运行保存的 问题时,初始种群为此次 结果的最后种群,而不是重 新产生新种群

将当前的结果 保存到Matlab 工作空间

将当前的参 数设置保存到 Matlab工作空间

三.Matlab函数调用实现GA
?Matlab的GA函数
[x fval] = ga(@fitnessfun, nvars, [],[],[],[],[],[],[], options);
fitnessfcn — Fitness function nvars — Number of variables for the problem Aineq — Matrix for inequality constraints Bineq — Vector for inequality constraints Aeq — Matrix for equality constraints Beq — Vector for equality constraints LB — Lower bound on x UB — Upper bound on x nonlcon — Nonlinear constraint Function options — Options structure

min f ( x) ? ? ? Aineq x ? Bineq ? ? Aeq x ? Beq ? ?a ? x ? b ?e x sin( x2 ) ? ln x ? c ?

三.Matlab函数调用实现GA
?Matlab的GA函数
x = ga(fitnessfcn,nvars) x = ga(fitnessfcn,nvars,A,b) x = ga(fitnessfcn,nvars,A,b,Aeq,beq) x = ga(fitnessfcn,nvars,A,b,Aeq,beq,LB,UB) x = ga(fitnessfcn,nvars,A,b,Aeq,beq,LB,UB,nonlcon) x = ga(fitnessfcn,nvars,A,b,Aeq,beq,LB,UB,nonlcon,options) x = ga(problem) [x, fval] = ga(...) [x, fval, exitflag] = ga(...)

三.Matlab函数调用实现GA
?GA函数调用步骤
第一步:编写适应度函数; 第二步:对GA参数进行设置; options = gaoptimset(‘参数名’, 参数值, …, ‘参数名’, 参数值) 例:options = gaoptimset('PopulationSize', 100) 第三步:调用GA函数; [x fval] = ga(@fitnessfun, nvars) [x fval exitflag output population scores] = ga(@fitnessfcn, nvars) [x fval] = ga(@fitnessfun, nvars, [],[],[],[],[],[],[],options);
specify any linear equality, linear inequality, or nonlinear constraints

三.Matlab函数调用实现GA
?调用GA函数求例1的最大值 (见ga_eg1.m)
第一步:编写适应度函数; function y=fit1(x) y=-(2*x+10*sin(5*x)+7*cos(4*x)); 第二步:设置参数 options = gaoptimset('PopulationSize',100,'PopulationType','doubleVector','PlotFcns' ,{@gaplotbestf,@gaplotbestindiv,@gaplotexpectation,@gaplotstopping}) 第三步:调用GA函数 [x fval]=ga(@fit1,1,[],[],[],[],0,10,[],options); 最后还原 y=-1*fit1(x)%最小值还原为最大值 figure; fplot('2*x+10*sin(5*x)+7*cos(4*x)',[0 10]) hold on plot(x,y,'*')

三.Matlab函数调用实现GA
? 求下列优化问题
2 f ( x1 , x2 ) ? 0.5* x12 ? x2 ? x1 x2 ? 2 x1 ? 6 x2

min f ( x) ? ? ?? 1 1? ?2? ? x1 ? ? ? ?? ? ? ? ?1 2 ? ? ? ? ? 2 ? x2 ? ? ? ? ? 2 1? ? ?3? ? ?? ? x ? 0, x ? 0 ? 1 2

三.Matlab函数调用实现
?调用GA函数求解(见ga_eg2.m)
function ga_eg2 A = [1 1;-1 2; 2 1]; b = [2; 2; 3]; lb = zeros(2,1); [x,fval,exitflag] = ga(@lincontest6,2,A,b,[],[],lb); mesh_lincontest6; hold on; plot3(x(1),x(2),fval,'r*'); function mesh_lincontest6 m=10;n=1000; x=-n:m:n; y=-n:m:n; z= 0.5*(ones(length(x),1)*x).^2 + (ones(length(y),1)*y).^2 ... -(ones(length(x),1)*x).*(ones(length(y),1)*y) -2*(ones(... length(x),1)*x) - 6*(ones(length(y),1)*y); mesh(x,y,z)

三.Matlab函数调用实现
?调用GA函数求解(见ga_eg2.m)

四.Matlab编程实现GA
pop=initpop(popsize,chromlength); %随机产生初始群体

? 主程序
%遗传算法主程序 function My_GA global Cmin; Cmin=-10^6; popsize=50; %群体大小 Gene=20; chromlength=20; %字符串长 度(个体长度) pc=0.8; %交叉概率 pm=0.01; %变异概率 Xmax=10; Xmin=0;

for i=1:Gene %20为迭代次数 [objvalue]=calobjvalue(pop,chromlength,Xmax,Xmin); %计算目标函数 fitvalue=calfitvalue(objvalue); %计算群体中每个个体的适应度 [newpop]=selection(pop,fitvalue); %复制 [newpop]=crossover(newpop,pc); %交叉 [newpop]=mutation(newpop,pm); %变异 [bestindividual,bestfit]=best(pop,fitvalue); %求出群体中适应值最大的 个体及其适应值 x(i)=decodechrom(bestindividual,1,chromlength)*10/(2^chromlength-1); %最佳个体解码 y(i)=bestfit+Cmin; %最佳个体适应度 y_mean(i)=mean(fitvalue+Cmin); %第i代平均适应度 pop=newpop; end fplot('2*x+10*sin(5*x)+7*cos(4*x)',[0 10]) hold on plot(x,y,'r*') hold off

四.Matlab编程实现GA
? 初始化(编码)
% initpop.m函数的功能是实现群体的初始化,popsize表示群体的大小, chromlength表示染色体的长度(二值数的长度), % 长度大小取决于变量的二进制编码的长度(在本例中取20位)。 %Name: initpop.m function pop=initpop(popsize,chromlength) pop=round(rand(popsize,chromlength)); % rand随机产生每个单元为 {0,1} 行数为popsize,列数为chromlength的矩阵, % round对矩阵的每个单元进行取整。这样产生的初始种群。

四.Matlab编程实现GA
? 将二进制数转化为十进制数
将二进制数转化为十进制数 %产生 [2^n 2^(n-1) ... 1] 的行向量,然后求和,将二进制转化为十进制 function pop2=decodebinary(pop) [px,py]=size(pop); %求pop行和列数 for i=1:py pop1(:,i)=2.^(py-i).*pop(:,i); end pop2=sum(pop1,2); %求pop1的每行之和 function pop2=decodechrom(pop,spoint,length) pop1=pop(:,spoint:spoint+length-1); pop2=decodebinary(pop1);

四.Matlab编程实现GA
? 计算目标函数值
计算目标函数值 % calobjvalue.m函数的功能是实现目标函数的计算,其公式采用本文示 例仿真,可根据不同优化问题予以修改。 %遗传算法子程序 %Name: calobjvalue.m %实现目标函数的计算 function [objvalue]=calobjvalue(pop,chromlength,Xmax,Xmin) temp1=decodechrom(pop,1,chromlength); %将pop每行转化成十进制数 x=temp1*(Xmax-Xmin)/(2^chromlength-1); %将十进制域 中的数转化为变 量域 的数 objvalue=2*x+10*sin(5*x)+7*cos(4*x); %计算目标函数值

四.Matlab编程实现GA
? 计算个体的适应值
function fitvalue=calfitvalue(objvalue) global Cmin; fitvalue=objvalue-Cmin;

四.Matlab编程实现GA
? 选择复制
function [newpop]=selection(pop,fitvalue) %程序中采用赌轮盘选择法选择实现 totalfit=sum(fitvalue); %求适应值之和 fitvalue=fitvalue/totalfit; %单个个体被选择的概率 fitvalue=cumsum(fitvalue); %如 fitvalue=[1 2 3 4],则 cumsum(fitvalue)=[1 3 6 10] [px,py]=size(pop); ms=sort(rand(px,1)); %从小到大排列 fitin=1; newin=1; while newin<=px %蒙特卡洛方法抽样 if(ms(newin))<fitvalue(fitin) newpop(newin,:)=pop(fitin,:); newin=newin+1; else fitin=fitin+1; end end

四.Matlab编程实现GA
? 交叉
function [newpop]=crossover(pop,pc) [px,py]=size(pop); newpop=ones(size(pop)); for i=1:2:px-1 if(rand<pc) cpoint=round(rand*py); newpop(i,:)=[pop(i,1:cpoint),pop(i+1,cpoint+1:py)]; newpop(i+1,:)=[pop(i+1,1:cpoint),pop(i,cpoint+1:py)]; else newpop(i,:)=pop(i); newpop(i+1,:)=pop(i+1); end end

四.Matlab编程实现GA
? 变异
function [newpop]=mutation(pop,pm) [px,py]=size(pop); newpop=ones(size(pop)); for i=1:px if(rand<pm) mpoint=round(rand*py); if mpoint<=0 mpoint=1; end newpop(i,:)=pop(i,:); end else newpop(i,:)=pop(i,:); end if any(newpop(i,mpoint))==0 newpop(i,mpoint)=1; else newpop(i,mpoint)=0; end

四.Matlab编程实现GA
? 求出群体中最大的适应值及其个体
function [bestindividual, bestfit] … =best(pop, fitvalue) [px,py]=size(pop); bestindividual=pop(1,:); bestfit=fitvalue(1); for i=2:px if fitvalue(i)>bestfit bestindividual=pop(i,:); bestfit=fitvalue(i); end end 或 function [bestindividual, bestfit]=… best(pop, fitvalue) [bestfit,m_indx]=max(fitvalue); bestindividual=pop(m_indx,:);

四.Matlab编程实现GA
? 结果见My_GA.m


相关文章:
遗传算法及其MATLAB实现
遗传算法及其 MATLAB 实现主要参考书: MATLAB 6.5 辅助优化计算与设计 飞思科技产品研发中心编著 飞思科技产品研发中心编著 电子工业出版社 2003.1 陈国良等编著 ...
遗传算法matlab程序实例
[0 1e-4];end if nargin==6, pMutation=0.1;pInversion=0.15;options=...地理 书画美术 花鸟鱼虫 相关专业回答 问题:遗传算法matlab 代码实现是什么?...
实验六 小波分析及遗传算法
实验六 小波分析及遗传算法_数学_自然科学_专业资料...3. 基于 MATLAB,请自行选择一个一维信号,采用 DB3...6 -6.2 0 20 40 60 80 100 120 Generation ...
遗传算法及其MATLAB程序
遗传算法及其 MATLAB 实现主要参考书: MATLAB 6.5 辅助优化计算与设计 飞思科技产品研发中心编著 电子工业出版社 2003.1 遗传算法及其应用 陈国良等编著 人民邮电...
遗传算法的原理及MATLAB程序实现
遗传算法的原理及MATLAB程序实现_数学_自然科学_专业资料。首先描述了遗传算法的基本...6. 由于遗传基因串码的不连续性, 所以遗传算法处理非连续混合整数规划时 有其...
遗传算法的MATLAB实现实例
遗传算法MATLAB实现实例_计算机软件及应用_IT/计算机_专业资料。遗传算法(Genetic...(5) 右侧遗传算法选项全部默认设置 (6) 点击 start 后,程序运行结果为 (7)...
多目标遗传算法代码
多目标遗传算法代码_计算机软件及应用_IT/计算机_...V = 6; case 2 M = 3; V = 12; case 3 ..., used only to manipulate easily in % MATLAB. ...
遗传算法MATLAB仿真程序
遗传算法MATLAB仿真程序_工程科技_专业资料。遗传算法MATLAB仿真程序%...使其随机的分布 在工作空间 %** 6 即为自变量范围 function ini_velocity=ini...
第七章 遗传算法应用举例
本章通过一些例子,介绍如何利用第五 章提供的遗传算法通用函数,编写 MATLAB 程序...? ? ? 2 3 6* N 2* N 3 ?k k ?1 N ?1 2 一个实现本目标函数...
遗传算法选取最优参数MATLAB程序
5. 6. 7. 利用 GA 参数寻优函数(分类问题):gaSVMcgForClass [bestCVaccuracy...基于Matlab的遗传算法程... 3页 免费 用matlab实现遗传算法程... 3页 免费...
更多相关标签:
遗传算法matlab实现 | 遗传算法的matlab实现 | 用matlab实现遗传算法 | 遗传算法matlab程序 | matlab遗传算法工具箱 | matlab 遗传算法 | matlab遗传算法实例 | matlab遗传算法代码 |