根据规则从范围填充具有随机整数的矩阵

时间:2013-03-27 19:37:23

标签: matlab random while-loop

我在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或更少。为了更清楚: problem details 也就是说,每个P必须是0到40范围内的整数,并且每个表型的总和必须<= 40。我需要500条这样的染色体。

我希望现在有意义。 &GT;&LT;

1 个答案:

答案 0 :(得分:1)

您应该使用randi([min,max],n,m)randint将被弃用。

>> r = randi([1,4],3,2)

r =

     3     3
     2     2
     4     4