📄 cross.m
字号:
function population=cross(population,pc,populationNum,codeLength,fitness)
% 交换操作 (选择交换个体的方法也是轮盘法)
%顺序累计群体内各个体的适应度,得相应的累计值fitnessSum(i),最后一个累计值为s(populationNum)
fitnessSum=cumsum(fitness); % cumsum 为求列元素的累计和函数
for j=1:2:populationNum*pc
r1=rand*fitnessSum(populationNum); %在[0,fitnessSum(populationNum)]区间内产生均匀分布的随机数 r1
while 1
r2=rand*fitnessSum(populationNum);
if r2~=r1
break;
end
end %在[0,fitnessSum(populationNum)]区间内产生均匀分布的随机数 r2 且 r2~=r1
ii=1;
jj=1;
for i=1:populationNum
if fitnessSum(i)>=r1
ii=i;
break;
end %依次用fitnessSum(i)与r1,比较,第一个出现fitnessSum(i)大于或等于r1的个体i被选为交换对象,
if fitnessSum(i)>=r2
jj=i;
break;
end %依次用fitnessSum(i)与r2,比较,第一个出现fitnessSum(i)大于或等于r2的个体i被选为交换对象,
end
swappoint=ceil(rand*(codeLength-1)); %在[1,codeLength-1]区间产生均匀分布的随机整数,作为交换点位置
temp=population(ii,(swappoint+1):codeLength);
population(ii,(swappoint+1):codeLength)= population(jj,(swappoint+1):codeLength);
population(jj,(swappoint+1):codeLength)= temp; %执行交换
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -