0

我使用矩阵作为在 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条这样的染色体。

我希望现在有意义。><

4

1 回答 1

1

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

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

r =

     3     3
     2     2
     4     4
于 2013-03-27T19:41:53.187 回答