【发布时间】: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