我使用矩阵作为在 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。有什么方法可以优化生成的随机数的分布?
@0x90 我有一个向量,称为“染色体”,大小1x192
和每个连续的 6 个成员组(称为表型)的总和必须为 40 或更少。为了更清楚:
也就是说,每个 P 必须是 0 到 40(含)范围内的整数,并且每个表型的总和必须 <=40。我需要500条这样的染色体。
我希望现在有意义。><