进化算法程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

进化算法作业

1全局优化问题

(1) min

f1x 4x:2.1x: 1 x f x1x24x f 4x;

st . 5 x i5,i 1,2

一.程序

(1)主函数:mai n.m

clear all;

clc;

popsize=60; %种群规模

chromlength=34; %二进制编码,编码精度为0.0001,所以串长I为17

pc=0.7; %杂交概率

pm=0.1; %变异概率

t=0; %进化代数初始为0

pop=in itpop(popsize,chromle ngth); % 随机产生初始种群

while t<500 %迭代次数

t=t+1;

[objvalue]=calobjvalue(pop); % 计算目标函数值

fitvalue=calfitvalue(objvalue); %计算群体中每个个体的适应度

[best in dividual,bestfit]=best(pop,fitvalue); %求出群体中适应度最大的个体及其适应度值

x1仁decodechrom(besti ndividual,1,14); % 将二进制数转换为十进制数

x22=decodechrom(besti ndividual,15,14);

x1(t)=-5+10*x11/(pow2(14)-1); %将二值域中的数转换为变量域的数

x2(t)=-5+10*x22/(pow2(14)-1);

y(t)=4*x1(t)A2-2.1*x1(t)A4+1/3*x1(t)A6+x1(t)*x2(t)-4*x2(t)A2+4*x2(t)A4; % 计算最佳个体的目标函数值

[n ewpop1]=select ion( pop,fitvalue); % 选择算子

[n ewpop2]=crossover( newpop1,pc); % 交叉算子

[n ewpop3]=mutati on(n ewpop2,pm); % 变异算子

objvalue1=calobjvalue (n ewpop3(1,:));

if objvalue1>y(t)

newpop3(1,:)=best in dividual; % 保留最佳个体

end

pop=newpop3; %产生新种群

end

y; %每代的最佳目标函数值

x1; %每代的最佳目标函数值对应的自变量

x2;

[gy,k]=min(y) %gy 为全局最优值,k 为最优值对应的进化代数

此问题的全局最优值f min 1.0316。

gx1=x1(k) %全局最优值对应的自变量

gx2=x2(k)

plot(y) %最优值收敛曲线

title(' 收敛性曲线');

xlabel(' 进化代数');

ylabel(' 函数值'); axis([0,500,-1.5,1.5]);

(2)初始种群:initpop.m

function pop=initpop(popsize,chromlength)

pop=round(rand(popsize,chromlength)); %rand 随机产生[0,1] 区间的一个小数,rand 四舍五入取整

end

(3)计算目标函数值::calobjvalue.m function [objvalue] =calobjvalue( pop )

temp1=decodechrom(pop,1,14);

temp2=decodechrom(pop,15,14); x1=-5+(10*temp1)/(pow2(14)-1); %将二值域中的数转化为变量域中的数

x2=-5+(10*temp2)/(pow2(14)-1);

0bjvalue=4*x1.A2-2.1*x1.A4+1/3*x1.A6+x1.*x2-4*x2.A2+4*x2.A4; % 计算目标函数

end

a.二进制转换为十进制:decodechrom.m

functi0n temp=dec0dechr0m(p0p,sp0int,length )

pop1=pop(:,spoint:spoint+length-1); %按变量个数分组转换,spoint 为起始点,length 为一个变量的长度

temp=decodebinary(pop1);

end

b.求二进制串对应的十进制数:decodeb in ary.m

function temp =decodebinary( pop)

[px,py]=size(pop); %求pop 行数和列数

for i=1:py

pop1(:,i)=24(py-i).*pop(:,i);

end

temp=sum(pop1,2); %每一行求和

end

(4)计算个体适应度:calfitvalue.m function fitvalue= calfitvalue( objvalue )

fitvalue=1./(1+exp(objvalue));

end

(5)种群中最大适应度个体及其值:best.m function [bestindividual,bestfit] = best(pop,fitvalue ) [px,py]=size(pop);

bestindividual=pop(1,:); bestfit=fitvalue(1);

for i=2:px;

if fitvalue>bestfit

bestindividual=pop(i,:); best=fitvalue(i);

end

end

end

(6)选择算子:selection.m

function [newpop1]=selection(pop,fitvalue) totalfit=sum(fitvalue); % 适应度和

ps=fitvalue./totalfit; %单个个体被选择的概率pss=cumsum(ps); % 前几项累积和

[px,py]=size(pop); ms=sort(rand(px,1)); %随机产生px 个0,1 之间的数,并按升序排列fitin=1; newin=1;

while newin<=px if(ms(newin)

newpop1(newin,:)=pop(fitin,:); newin=newin+1;

else

fitin=fitin+1;

end

end

end

(7)交叉算子:crossover.m

function [newpop2] = crossover( pop,pc ) [px,py]=size(pop);

newpop2=ones(size(pop));

for i=1:2:px-1

if rand

newpop2(i,:)=[pop(i,1:cpoint),pop(i+1,cpoint+1:py)]; %交换相邻两个个体交叉位之后的基因newpop2(i+1,:)=[pop(i+1,1:cpoint),pop(i,cpoint+1:py)];

相关文档
最新文档