遗传算法的Matlab实现讲解
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
bestfit=fitvalue(i);
end
end
精选版课件ppt
12
Matlab编程实现GA
❖ 结果见My_GA.m
精选版课件ppt
13
Matlab函数调用实现GA
• Matlab的GA函数
[x fval] = ga(@fitnessfun, nvars, [],[],[],[],[],[],[], options);
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);
或 function [bestindividual, bestfit]=… best(pop, fitvalue) [bestfit,m_indx]=max(fitvalue); bestindividual=pop(m_indx,:);
if fitvalue(i)>bestfit
bestindividual=pop(i,:);
精选版课件ppt
3
Matlab编程实现GA
❖ 主程序
%遗传算法主程序 function My_GA global Cmin; Cmin=-10^6; popsize=50; %群体大小 Gene=20; chromlength=20; %字符串长
度(个体长度) pc=0.8; %交叉概率 pm=0.01; %变异概率 Xmax=10; Xmin=0;
精选版课件ppt
5
Matlab编程实现GA
❖ 将二进制数转化为十进制数
将二进制数转化为十进制数 %产生 [2^n 2^(n-1) ... 1] 的行向量,然后求和,将二进制转化为十进制 function pop2=decodebinary(pop) [px,py]=size(pop); %求pop行和列数 for i=1:py
end
fplot('2*x+10*sin(5*x)+7*cos(4*x)',[0 10])
hold on
plot(x,y,精'r*选') 版课件ppt
4
hold off
Matlab编程实现GA
❖ 初始化(编码)
% initpop.m函数的功能是实现群体的初始化,popsize表示群体的大小, chromlength表示染色体的长度(二值数lab编程实现GA
❖ 选择复制
function [newpop]=selection(pop,fitvalue) %程序中采用赌轮盘选择法选择实现
totalfit=sum(fitvalue); %求适应值之和
fitvalue=fitvalue/totalfit; %单个个体被选择的概率
m in f (x) ?
A ineq x B ineq
A
eq
x
B eq
a x b
e x s i n ( x 2 ) l n x c
精选版课件ppt
14
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(...)
y=-(2*x+10*sin(5*x)+7*cos(4*x)); 第二步:设置参数
options = gaoptimset('PopulationSize',100,'PopulationType','doubleVector','PlotFcns', {@gaplotbestf,@gaplotbestindiv,@gaplotexpectation,@gaplotstopping})
精选版课件ppt
6
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); %将十进制域 中的数转化为变
[newpop]=selection(pop,fitvalue); %复制
[newpop]=crossover(newpop,pc); %交叉
[newpop]=mutation(newpop,pm); %变异
[bestindividual,bestfit]=best(pop,fitvalue); %求出群体中适应值最大的 个体及其适应值
数学建模专题之
遗传算法的MATLAB实现
精选版课件ppt
1
Contents I
1
Matlab编程实现GA
2
Matlab函数调用实现GA
3
Matlab工具箱实现GA
精选版课件ppt
2
Matlab编程实现GA
❖ 例1:计算目标函数值函数
f(x)2x 1 0sin (5x)7co s(4x) x [0 ,1 0 ] m axf(x)?
x(i)=decodechrom(bestindividual,1,chromlength)*10/(2^chromlength-1); %最佳个体解码
y(i)=bestfit+Cmin; %最佳个体适应度
y_mean(i)=mean(fitvalue+Cmin); %第i代平均适应度
pop=newpop;
% 长度大小取决于变量的二进制编码的长度(在本例中取20位)。 %Name: initpop.m
function pop=initpop(popsize,chromlength) pop=round(rand(popsize,chromlength)); % rand随机产生每个单元为 {0,1}
行数为popsize,列数为chromlength的矩阵, % round对矩阵的每个单元进行取整。这样产生的初始种群。
量域 的数
objvalue=2*x+10*sin(5*x)+7*cos(4*x); %计算目标函数值
精选版课件ppt
7
Matlab编程实现GA
❖ 计算个体的适应值
function fitvalue=calfitvalue(objvalue) global Cmin; fitvalue=objvalue-Cmin;
pop=initpop(popsize,chromlength); %随机产生初始群体
for i=1:Gene %20为迭代次数
[objvalue]=calobjvalue(pop,chromlength,Xmax,Xmin); %计算目标函数
fitvalue=calfitvalue(objvalue); %计算群体中每个个体的适应度
if(ms(newin))<fitvalue(fitin)
newpop(newin,:)=pop(fitin,:);
newin=newin+1;
else
fitin=fitin+1;
end
精选版课件ppt
9
end
Matlab编程实现GA
❖ 交叉
function [newpop]=crossover(pop,pc)
specify any linear equality, linear inequality, or nonlinear constraints
精选版课件ppt
16
Matlab函数调用实现GA
• 调用GA函数求例1的最大值 (见ga_eg1.m)
第一步:编写适应度函数;
function y=fit1(x)
if(rand<pm) mpoint=round(rand*py); if mpoint<=0 mpoint=1; end
if any(newpop(i,mpoint))==0 newpop(i,mpoint)=1;
else newpop(i,mpoint)=0;
end else
newpop(i,:)=pop(i,:); end end
精选版课件ppt
15
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);
[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)];
newpop(i,:)=pop(i,:); 精选版课件ppt
11
Matlab编程实现GA
❖ 求出群体中最大的适应值及其个体
function [bestindividual, bestfit] … =best(pop, fitvalue) [px,py]=size(pop); bestindividual=pop(1,:); bestfit=fitvalue(1); for i=2:px
else
newpop(i,:)=pop(i);
newpop(i+1,:)=pop(i+1);
end
精选版课件ppt
10
end
Matlab编程实现GA
❖ 变异
function [newpop]=mutation(pop,pm) [px,py]=size(pop); newpop=ones(size(pop)); for i=1:px
第三步:调用GA函数
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 %蒙特卡洛方法抽样
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