📄 ga-old.m
字号:
function f
clear all;
clc;
format short
ps=10;
sl=30;
flag=1;
gen=1;
maxs=100;
chs=round(rand(ps,sl));
chsc=zeros(ps,sl);
fitf=zeros(1,ps);
fitf1=zeros(1,ps);
sel=zeros(1,ps);
% while (flag>0)&(gen<1000)
sumf=0;
for i=1:1:ps
a1=chs(i,1:15);
a2=chs(i,16:30);
par=zeros(1,2);
for j=1:1:15
par(1,1)=par(1,1)+a1(1,j)*pow2(j-1);
end
for j=1:1:15
par(1,2)=par(1,2)+a2(1,j)*pow2(j-1);
end
m=pow2(15)-1;
x1=-5+par(1,1)/m*10;
x2=-5+par(1,2)/m*10;
fitf(1,i)=x1^2+x2^2;
if (fitf(1,i)<maxs)
maxs=fitf(1,i);
opt=[x1 x2 fitf(1,i)];
end
if (fitf(1,i)<=0.001)
flag=-1;
opt
gen
break;
else
sumf=sumf+fitf(1,i);
end
if (flag<0)
break;
end
end
%***************************************************************************************************
%***************************************************************************************************
if(flag>0)
%the first select.
sumf=sumf-fitf(1,ps);
for i=1:1:ps-1
x=round(rand(1)*32767);
sum=round(sumf);
rr=rem(x,sum);
n=1;
ba=1;
partsum=0;
while ((partsum<rr)&(n<ps-1))
partsum=partsum+fitf(1,n);
ba=n;
n=n+1;
end
sel(1,i)=ba
end
%***************************************************************************************************
%***************************************************************************************************
%reproduce
fitf=fitf
for i=1:1:ps-1
for j=1:1:sl
chsmc(i,j)=chs(sel(1,i),j);
end
fitf1(1,i)=fitf(1,sel(1,i));
end
fitf=fitf1
%***************************************************************************************************
%***************************************************************************************************
%select before crossover
for i=1:1:ps-1
x=round(rand(1)*32767);
sum=round(sumf);
rr=rem(x,sum)+1;
n=1;
partsum=0;
while((partsum<rr)&(n<=ps-1))
partsum=partsum+fitf(1,n);
bba=n;
n=n+1;
end
sel(1,i)=bba;
end
%***************************************************************************************************
%***************************************************************************************************
%crossover
maxs=max(fitf);
for i=1:1:ps/2-1
parent1=sel(1,i);
parent2=sel(1,ps-1-i);
child1=i;
child2=ps-1-i;
pc=0.8;
randnum=rand(1);
site1=round(rand(1)*sl);
for j=1:1:sl
if (j<site1)
chs(child1,j)=chsc(parent1,j);
chs(child2,j)=chsc(parent2,j);
else
chs(child1,j)=chsc(parent2,j);
chs(child2,j)=chsc(parent1,j);
end
end
end
%***************************************************************************************************
%***************************************************************************************************
%mutation
pm=0.05;
for i=1:1:ps-1
for j=1:1:sl
randnum=rand(1);
if (randnum<pm)
chs(i,j)=chs(i,j);
end
end
end
end
% gen=gen+1
% end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -