计算函数的最大值matlab,用遗传算法求函数的最大值MATLAB程序.pdf

用遗传算法求函数的最大值MATLAB程序

2 MATLAB

利用遗传算法求解 f(x) = x ,0≤ x≤ 31的最大值。 程序如下:

clear

clc

total=1; %总的进化代数

Num=0;

MaN1=0;

MaN2=0;

flag=0;

N1=initialize();

N2=initialize();

N3=initialize();

N4=initialize();

%复制-reproduction

while 1

while 1

DecN1=BinToDec(N1);%计算适配度

DecN2=BinToDec(N2);

DecN3=BinToDec(N3);

DecN4=BinToDec(N4);

f1=DecN1^2;

f2=DecN2^2;

f3=DecN3^2;

f4=DecN4^2;

ttt=[f1,f2,f3,f4];

if flag==0

MaN1=max(ttt);

else

MaN2=max(ttt);

end

if MaN1==MaN2

Num=Num+1;

else

Num=0;

end

sum=f1+f2+f3+f4;

aver=sum/4;

n1=round(f1/aver); %实际得到的复制个数

n2=round(f2/aver);

n3=round(f3/aver);

n4=round(f4/aver);

N=n1+n2+n3+n4; %总的复制个数

if N~=4 %引入N:保持原种群大小不变

N1=initialize();

N2=initialize();

N3=initialize();

N4=initialize();

total=1;

Num=0;

MaN1=0;

MaN2=0;

flag=0;

continue;

else

break;

end

end

temp1=cal(N1,n1);

temp2=cal(N2,n2);

temp3=cal(N3,n3);

temp4=cal(N4,n4);

M=[temp1;temp2;temp3;temp4];

N1=M(1,:);

N2=M(2,:);

N3=M(3,:);

N4=M(4,:);

%交叉-crossover

while 1

p=floor(1000*rand);

if p>1

break;

else

continue;

end

end

k=mod(p,3);

switch k

case0

[N1,N2,N3,N4,ps]=crossover(N1,N2,N3,N4);

case1

[N1,N3,N2,N4,ps]=crossover(N1,N3,N2,N4);

case2

[N1,N4,N2,N3,ps]=crossover(N1,N4,N2,N3);

end

%变异-mutation

U=[N1,N2,N3,N4];

pos=mod(floor(1000*rand),20)+1;

if U(1,pos)==0

U(1,pos)=1;

else

U(1,pos)=0;

end

N1=U(1,1:5);

N2=U(1,6:10);

N3=U(1,11:15);

N4=U(1,16:20);

%遗传算法结束条件:连续10代最大值均保持一致

if Num==10

disp('进化代

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值