【问题标题】:filling a matrix with random integers from a range according to a rule根据规则用范围内的随机整数填充矩阵
【发布时间】:2013-03-27 19:37:23
【问题描述】:

我将矩阵用作在 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(含)范围内的整数,并且每个表型的总和必须

我希望现在有意义。 >

【问题讨论】:

  • 我实际上是在尝试创建一个6x32 矩阵,其元素是 [0,40] 范围内的整数成员,这样矩阵的每一列的总和最多为 40。跨度>
  • 你希望每一行的元素如何分布?如果每一行的总和是有限的,那么其中的值将不会均匀分布...
  • 不是行,每个生成列的总和必须是 40。必须至少有 [0,40] 中的每个整数的可比数量,但我大多看到低于 30 的整数。
  • 每列是否允许重复值?
  • 是的,只要它们使列的总和等于或小于 40。

标签: matlab random while-loop


【解决方案1】:

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

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

r =

     3     3
     2     2
     4     4

【讨论】:

  • 我尝试了 randi([1,4],3,2) 的东西,但它仍然没有退出 while 循环。最重要的是,我的 Matlab 崩溃了 T_T。
  • 为什么要循环执行?
  • 我必须使用满足规则的向量来填充大小为 500 x 192 的人口矩阵。没有循环我怎么能做到这一点?
  • 如果您可以重写您的问题,我们可能会为您提供帮助。
  • 我添加了解释(图片)。希望现在更好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-20
  • 2013-01-07
  • 1970-01-01
相关资源
最近更新 更多