2016-04-25 153 views
0

我做如下遺傳算法的代碼...如何避免遺傳算法輸出中重複值?

lb = [1 1 1 1 1 1 1 1 1 1]; 
ub = [10 10 10 10 10 10 10 10 10 10]; 
intCon = 1:10; 
[x,fval] = ga(FitnessFunction,10,[],[],[],[],lb,ub,[],intCon,options) 

我得到輸出 「X」 爲大小[1 10]舉例如下一個矢量...

(my output eg:) x = 4  3  3  2  9  4  4  6  1  1 

但我需要得到一個輸出爲例,

(what i want eg:) x = 2 10 3 8 1 6 4 9 5 7 

這就是我不應該得到重複的值,我的outputx應該是如果大小[110] ... ...但我的輸出我得到重複值...請有人告訴我h要刪除重複...我應該設置任何選項,...請做回覆....

+0

您必須將這樣的約束條件編碼到您的「FitnessFunction」中,因此我懷疑除非您編輯您的問題以包含其代碼,否則任何人都無法建議您。 – Dan

+0

您需要的是一種映射功能,可將您的唯一編號排列轉換爲單個編號。我前一陣子(見第4頁圖2)https://arxiv.org/ftp/arxiv/papers/0810/0810.3671.pdf,但這可能是一個非常糟糕的解決方案。這看起來是進一步研究的一個更好的起點:http://www.2ality.com/2013/03/permutations.html否則可能這些http://stackoverflow.com/questions/14212030/number-to-unique-permutation -a-sequence-containing-duplicates或http://stackoverflow.com/questions/1506078/fast-permutation-number-permutation-mapping-algorithms – Dan

回答

1

如果您的輸出是基於最小化適應度函數與遺傳算法我有你最快的版本您的適應度函數:

分鐘(總和(X)-a)^ 2

以 「a」 等於n不同數字的總和(即,從1到10的55例) 這意味着每當您的輸出總和與「a」不同時,解決方案的成本將以二次方式增加。

感謝我的經驗,我可以告訴你,精英成員之間的交叉可以創造大量的窮人解決方案。我建議你用隨機數或染色體之間的切換增加突變因子。

我不知道爲什麼你實際上使用遺傳算法來做到這一點,還有許多其他算法以更快的方式找到解決方案。