📄 ga.m
字号:
clear all
Pc=0.25;
Pm=0.01;
M=10;
TT=1000;
U=zeros(M,33);
t1=(12.1+3)/(2^18-1);
t2=(5.8-4.1)/(2^15-1);
U=round(rand(M,33));
for p=1:1:TT
for i=1:1:M
sum1=0;
sum2=0;
for j=1:1:18
sum1=sum1+U(i,j)*(2^(18-j));
end
x1(i)=-3.0+sum1*t1;
for k=19:1:33
sum2=sum2+U(i,k)*(2^(33-k));
end
x2(i)=4.1+sum2*t2;
end
for i=1:1:M
EU(i)= 21.5+x1(i)*sin(4*pi*x1(i))+x2(i)*sin(20*pi*x2(i));
end
[MAX,CC]=max(EU);
best=U(CC,:)
%选择
sum0=0;
for i=1:1:M
sum0=sum0+EU(i);
end
for i=1:1:M
PU(i)=EU(i)/sum0;
end
QU=cumsum(PU);
QU0=[0 QU];
for i=1:1:M
TU(i,:)=U(length(find(rand>=QU0)),:);
end
%交叉
c1=fix(32*rand(1));
for i=1:2:M-1
if rand<Pc
for j=c1+1:1:33
u=TU(i,j);
TU(i,j)=TU(i+1,j);
TU(i+1,j)=u;
end
end
end
%变异
for i=1:1:M
for j=1:1:33
if rand<Pm
if TU(i,j)==0
TU(i,j)=1;
else TU(i,j)=0;
end
end
end
end
U=TU;
U(M,:)=best;
end
x1(CC)
x2(CC)
best
MAX
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -