我使用矩陣作爲使用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