遗传算法 matlab 代码
2008-02-11 16:13
function youhuafun
D=code;
N=50; % Tunable
maxgen=50; % Tunable
crossrate=0.5; %Tunable
muterate=0.08; %Tunable
generation=1;
num = length(D);
fatherrand=randint(num,N,3);
score = zeros(maxgen,N);
while generation<=maxgen
ind=randperm(N-2)+2; % 随机配对交叉
A=fatherrand(:,ind(1:(N-2)/2));
B=fatherrand(:,ind((N-2)/2+1:end));
% 多点交叉
rnd=rand(num,(N-2)/2);
ind=rnd tmp=A(ind);
A(ind)=B(ind);
B(ind)=tmp;
% % 两点交叉
% for kk=1:(N-2)/2
% rndtmp=randint(1,1,num)+1;
% tmp=A(1:rndtmp,kk);
% A(1:rndtmp,kk)=B(1:rndtmp,kk);
% B(1:rndtmp,kk)=tmp;
% end
fatherrand=[fatherrand(:,1:2),A,B];
% 变异
rnd=rand(num,N);
ind=rnd [m,n]=size(ind);
tmp=randint(m,n,2)+1;
tmp(:,1:2)=0;
fatherrand=tmp+fatherrand;
fatherrand=mod(fatherrand,3);
% fatherrand(ind)=tmp;
%评价、选择
scoreN=scorefun(fatherrand,D);% 求得 N 个个体的评价函数
score(generation,:)=scoreN;
[scoreSort,scoreind]=sort(scoreN);
评论0