pop为100×36的矩阵,npop数值是100;function newPop = crossover(pop, nPop, pCross) newPop = pop; for i = 1:2:nPop if rand < pCross i1 = randi(nPop); i2 = randi(nPop); c = randi(size(pop,2)-1)+1; newPop(i,:) = [pop(i1,1:c), pop(i2,c:end)]; newPop(i+1,:) = [pop(i2,1:c), pop(i1,c:end)]; end end end这个代码哪里错了,怎么修改
时间: 2023-06-11 09:08:50 浏览: 99
基于NSGAII的多目标优化算法matlab仿真+仿真录像
5星 · 资源好评率100%
这个代码有几个错误:
1. 在定义变量 `c` 时,`1` 应该是 `+`,表示将 c 后面的部分连接在 i1 的前面,即 `c+1`。
2. 在交叉时,应该是 `i+1` 而非 `i 1`,即将第二个子代索引改为 `i+1`。
下面是修改后的代码:
```
function newPop = crossover(pop, nPop, pCross)
newPop = pop;
for i = 1:2:nPop
if rand < pCross
i1 = randi(nPop);
i2 = randi(nPop);
c = randi(size(pop,2)-1) + 1;
newPop(i,:) = [pop(i1,1:c), pop(i2,c:end)];
newPop(i+1,:) = [pop(i2,1:c), pop(i1,c:end)];
end
end
end
```
阅读全文