我在matlab中使用NSGA-II将矩阵用作多目标优化的初始种群。我的染色体载体(C)的大小是1x192
,每个基因必须在0<=gene<=40
范围内,基因必须是整数。规则是6个基因的分组总和必须小于或等于40.即:
sum(reshape(6,[]))<=40
我使用以下代码,但它输出的是全零种群矩阵(种群矩阵= 500条染色体的垂直连接)或不符合规则的矩阵:
X=zeros(500,192);
while i<501
r=randi(40,6,32);
if nnz(((sum(r))./40)>1)==0
X(i,:)=reshape(r,1,[]);
i=i+1;
clear r;
else
clear r;
end
end
退出while循环也是永远的。 我在这做错了什么?还有其他方法可以做到吗?
我也试过这个:
i=1;
while i<17500
r=randi([1,40],6,1);
s=sum(r);
if s<=40
X(:,i)=r;
i=i+1;
else
clear r;
end
end
X=unique(X','rows')';
A=X(:,randperm(size(X,2)));
A=X(randperm(size(X,1)),:);
以上尝试创建将重构为填充矩阵的随机列。但这些数字正在重复;即在17500(删除重复列后的16448)列中没有出现数字37和40.我有什么方法可以优化生成的随机数的扩散?
@ 0×90
我有一个名为“染色体”的载体,大小为1x192
,每个连续的6个成员组(称为表型)必须总和为40或更少。为了更清楚:
也就是说,每个P必须是0到40范围内的整数,并且每个表型的总和必须<= 40。我需要500条这样的染色体。
我希望现在有意义。 &GT;&LT;