我使用矩阵作为使用NSGA-II在matlab中的多目标优化的初始总体。我的染色体载体(C)的大小为1x192
,每个基因必须在0<=gene<=40
的范围内,基因必须是整数。的规则是,6个基因分组的总和必须小于或等于40.that是:根据规则使用随机整数填充矩阵
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个这样的染色体。
我希望现在有道理。 > <
我基本上是试图建立一个'6x32'矩阵的元素是整数成员范围[0,40],使得矩阵中的每一列的总和至多为40 – 2013-03-27 22:01:21
你如何想要分配每一行中的元素?如果每行的总和是有限的,那么其中的值将不会统一分布... – 2013-03-27 22:56:20
不是行,每个生成的列的总和必须为40.每个整数至少必须等于[0,40 ]但我主要看到整数低于30. – 2013-03-28 18:36:48