0

我有一個問題,我想用遺傳算法(GA)來解決。你可以把它簡化爲以下問題:Genetic Algortihm - 可變長度優化的策略

我想優化公司,這意味着,在汽車數量車型的拼車。我已經有一個健身功能calcFitness(carList),它評估給定的設置,如'商務車,運輸車'或'商務車,商務車,運輸車'。現在,問題是,如何使用GA來解決這個可變長度問題。

我有四個想法,你怎麼能解決這些問題一般爲:(?不知道,如果可能的話)

  1. 也許在某種程度上實現GA允許可變長度的染色體,並在單次運行解決問題
  2. 估算最大可行數量的汽車(例如20輛),併爲1到20的每個汽車插槽號碼運行固定長度的GA並比較20個結果
  3. 與#2類似,但沒有固定的上限: 1輛車,並增加插槽的數量,直到增加的數字的最佳解決方案比前面的更差olution(基於梯度的方法)
  4. 兩個堆疊的固定長度氣:父GA是用於優化汽車槽另一GA的,並在其適應度函數優化這些時隙的assignement數量單獨負責叫做

你對這些一般方法有什麼看法?對於這些可變長度的情況,GA有沒有其他想法或可能的替代方案

回答

1

可變長度當然是可能的,並且這個問題似乎是最自然的表示。爲什麼會是一個問題?唯一的實質性差異將是交叉操作。雖然單點是微不足道的(你只需在a之內選擇一個點,在b之內的一個點,並自動獲得一個可變長度的後代),但連續交叉通常更好,這需要更多的直覺和可變長度。但是,這可以在進行徹底的單獨測試後實施。

準備好你的算法可能會發現,染色體越好,它可以產生更好的結果(在某些情況下)。你不會像在遺傳程序設計中那樣得到指數膨脹(基因型是樹而不是線性序列),但染色體長度可能開始不舒服地增長。您可能需要在健身功能中考慮這一點,或者您可以通過立即拒絕超過某個限制的候選人來模擬像#2這樣的解決方案。

+0

謝謝你的回答。連續交叉是什麼意思?你會允許突變來改變染色體長度嗎? – nkxandroid

+1

是的,但是有幫助的特定形式取決於問題。例如,在我目前的遺傳算法中,我有多個基因添加,刪除,k個基因被l個基因取代,......但其中很大一部分是針對該領域的。通常,它應該足以一次修改(變更,添加,刪除)一個。 –

+1

連續交叉=沒有預定數量的交叉點。在固定長度上,這將會在每個位置上翻轉有偏見的硬幣,不管是否交叉。 –