![]() |
MATLAB实现遗传算法 如何画出进化代数和适应值的图?急求
MATLAB实现遗传算法 如何画出进化代数和适应值的图?急求
|
回复: MATLAB实现遗传算法 如何画出进化代数和适应值的图?急求
测试函数如:F=x^3-60*x^2+900*x+100;
真的很急,忘大神指教 |
回复: MATLAB实现遗传算法 如何画出进化代数和适应值的图?急求
[QUOTE=ai_hinemon;58748]MATLAB实现遗传算法 如何画出进化代数和适应值的图?急求[/QUOTE]
function[xv,fv]=GA(fitness,a,b,NP,NG,pc,pm,eps) %待优化的目标函数:fitness %自变量下界:a %自变量上界:b %种群个体数:NP %最大进化代数:NG %杂交概率:pc %自变量概率:pm %自变量离散精度:eps %目标函数取最小值时的自变量值:xm %目标函数的最小值:fv |
回复: MATLAB实现遗传算法 如何画出进化代数和适应值的图?急求
[QUOTE=ai_hinemon;58750]function[xv,fv]=GA(fitness,a,b,NP,NG,pc,pm,eps)
%待优化的目标函数:fitness %自变量下界:a %自变量上界:b %种群个体数:NP %最大进化代数:NG %杂交概率:pc %自变量概率:pm %自变量离散精度:eps %目标函数取最小值时的自变量值:xm %目标函数的最小值:fv[/QUOTE] L=ceil(log2((b-a)/eps+1)); %根据离散精度,确定二进制编码需要的码长 x=zeros(NP,L); for i=1:NP x(i,:)=Initial(L);%种群初始化 fx(i)=fitness(Dec(a,b,x(i,:),L)); %个体适应值 end for k=1:NG sumfx=sum(fx); %所有个体适应值之和 px=fx/sumfx; %所有个体适应值的平均值 ppx=0; ppx(1)=px(1); for i=2:NP %用于轮盘赌策略的累加 ppx(i)=ppx(i-1)+px(i); end for i=1:NP sita=rand(); for n=1:NP if sita<=ppx(n) SelFather=n; %根据轮盘赌策略确定的父亲 break; end |
回复: MATLAB实现遗传算法 如何画出进化代数和适应值的图?急求
[QUOTE=ai_hinemon;58751]L=ceil(log2((b-a)/eps+1)); %根据离散精度,确定二进制编码需要的码长
x=zeros(NP,L); for i=1:NP x(i,:)=Initial(L);%种群初始化 fx(i)=fitness(Dec(a,b,x(i,:),L)); %个体适应值 end for k=1:NG sumfx=sum(fx); %所有个体适应值之和 px=fx/sumfx; %所有个体适应值的平均值 ppx=0; ppx(1)=px(1); for i=2:NP %用于轮盘赌策略的累加 ppx(i)=ppx(i-1)+px(i); end for i=1:NP sita=rand(); for n=1:NP if sita<=ppx(n) SelFather=n; %根据轮盘赌策略确定的父亲 break; end[/QUOTE] end Selmother=floor(rand()*(NP-1))+1; %随机选择母亲 posCut=floor(rand()*(L-2))+1; %随机选择交叉点 r1=rand(); if r1<=pc %交叉 nx(i,1:posCut)=x(SelFather,1:posCut); nx(i,(posCut+1):L)=x(Selmother,(posCut+1):L); r2=rand(); if r2<=pm %变异 posMut=round(rand()*(L-1)+1); nx(i,posMut)=~nx(i,posMut); end |
回复: MATLAB实现遗传算法 如何画出进化代数和适应值的图?急求
[QUOTE=ai_hinemon;58752]end
Selmother=floor(rand()*(NP-1))+1; %随机选择母亲 posCut=floor(rand()*(L-2))+1; %随机选择交叉点 r1=rand(); if r1<=pc %交叉 nx(i,1:posCut)=x(SelFather,1:posCut); nx(i,(posCut+1):L)=x(Selmother,(posCut+1):L); r2=rand(); if r2<=pm %变异 posMut=round(rand()*(L-1)+1); nx(i,posMut)=~nx(i,posMut); end[/QUOTE] else nx(i,:)=x(SelFather,:); end end x=nx; for i=1:NP |
回复: MATLAB实现遗传算法 如何画出进化代数和适应值的图?急求
[QUOTE=ai_hinemon;58753]else
nx(i,:)=x(SelFather,:); end end x=nx; for i=1:NP[/QUOTE] fx(i)=fitness(Dec(a,b,x(i,:),L));%子代适应值 end end fv=-inf; for i=1:NP fitx=fitness(Dec(a,b,x(i,:),L)); |
回复: MATLAB实现遗传算法 如何画出进化代数和适应值的图?急求
[QUOTE=ai_hinemon;58754]fx(i)=fitness(Dec(a,b,x(i,:),L));%子代适应值
end end fv=-inf; for i=1:NP fitx=fitness(Dec(a,b,x(i,:),L));[/QUOTE] if fitx>fv fv=fitx; %取个体中的最好值作为最终结果 xv=Dec(a,b,x(i,:),L); end end function result=Initial(length) %初始化函数 for i=1:length r=rand(); result(i)=round(r); end function y=Dec(a,b,x,L) %二进制编码转换为十进制编码 base=2.^((L-1):-1:0); y=dot(base,x); y=a+y*(b-a)/(2^L-1); %[xv,fv]=GA(@fitness,0,30,50,100,0.9,0.04,0.01) |
所有时间均为北京时间。现在的时间是 19:51。 |
Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.