📄 cross.m
字号:
function [ crossed ] = cross(CR,newpop)
% soultion is permutation
% input is "newpop" is the population after roultte wheel generation
% output is m*n single_point crossed array
t=size(newpop);
crossed=[];
for i=1:t(1)
rr=rand(1,1);
if rr<CR
r(i)=1;
else
r(i)=0;
end
end
while rem(sum(r),2)==1
z=round(1+(t(1)-1)*rand(1,1));
if r(z)==0
r(z)=1;
end
end
netpool=[];
rempool=[];
for i=1:t(1)
if r(i)==1;
netpool=[netpool;newpop(i,:)];
else
rempool=[rempool;newpop(i,:)];
end
end
netpool
rempool
% if sum(r)==t(1)
% netpool=newpop;
% end
% until now "netpool" is m*n array for crossing(m should be even)
D=size(netpool);
j=D(2);
u=1;
uu=1;
while uu<=D(1)/2
c(1,:)=netpool(u,:);
c(2,:)=netpool(u+1,:);
z=round(1+(j-1)*rand(1,1));
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if z<j-1
for i=1:z
new(1,i)= c(1,i);
new(2,i)= c(2,i);
end
%%%%%%%%%%%%%%%%%%%% cross new(1)
cm1=c(1,:);
cm2=c(2,:);
L=length(c);
for p=1:L
v(p)=0;
for q=z+1:L
if cm2(p)==cm1(q)
v(p)=1;
end
end
end
tt=[];
for pp=1:L
if v(pp)==1
tt=[tt,cm2(1,pp)];
end
end
vv=1;
for i=z+1:j
new(1,i)=tt(vv);
vv=vv+1;
end
%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%% cross new(2)
cm1=c(1,:);
cm2=c(2,:);
for p=1:L
v(p)=0;
for q=z+1:L
if cm1(p)==cm2(q)
v(p)=1;
end
end
end
tt=[];
for pp=1:L
if v(pp)==1
tt=[tt,cm1(1,pp)];
end
end
vv=1;
for i=z+1:j
new(2,i)=tt(vv);
vv=vv+1;
end
%%%%%%%%%%%%%%%%%%%%
else
new=c;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
crossed=[crossed;new];
u=u+2;
uu=uu+1;
end
crossed=[crossed;rempool];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -