1

我想實現編寫程序的遺傳算法,試圖解決特定的問題。.Net中的遺傳算法 - 可變染色體 - 異形飛船場景

'程序'不過是一個函數列表,將由一個健身函數進行評估,所以我可以知道什麼是最好的'程序'。這個序列對我來說並不會改變,不會影響健身評估。

大收穫,我試圖弄清楚的是,被調用函數列表應該是可變的,像可變cromossomes號。 我有需要調用的函數,帶有可變參數,還有可調用函數COULD(可選),以及可變參數。

我已經找到那些偉大的GA框架,但是我真正的新基因編程,我不知道什麼是用於該問題的最佳框架:

所以,想象一下這個問題:

  • 在一個開放的領域,比如二維空間,一個外星飛船需要從A點走到B點在最短的時間內。但該程序不知道B點在哪裏。
  • 您可以將開放領域想象成一個網格,就像棋盤一樣,但是更大(100X100)。
  • 開闊場地可能有障礙物。飛船應儘量避免。
  • 該程序必須執行一些功能,如選擇飛船的模型和填充氣體。
  • 然後太空船可以執行如的功能,前後左右
  • 宇宙飛船也可以使用超高速,這就像運輸到網格中的任何點。
  • 可選函數可以被多次調用,但如果它像一種突變一樣工作,那麼它就會很好,只有5%的時間。
  • 所有使用的功能和參數都會影響健身評估。
  • 函數的順序不影響適應性評估。

爲了更好undertanding,如果我能描述我的輸入爲JSON,這將是這樣的:

{ 
    "FixedFunctions":[ 
     {"Name":"ChooseModel", "Parameters":[{"Name":"Type", "MinValue":1, "MaxValue":5,"Step":1}]}, 
     {"Name":"FillUp", "Parameters":[{"Name":"Litters", "MinValue":1, "MaxValue":100,"Step":2}]} 
     ] 
    "OptionalFunctions":[ 
     {"Name":"GoFront", "Parameters":[{"Name":"Steps", "MinValue":1, "MaxValue":50,"Step":5}]}, 
     {"Name":"GoBack", "Parameters":[{"Name":"Steps", "MinValue":1, "MaxValue":50,"Step":2}]}, 
     {"Name":"GoRight", "Parameters":[{"Name":"Steps", "MinValue":1, "MaxValue":25,"Step":2}]}, 
     {"Name":"GoLeft", "Parameters":[{"Name":"Steps", "MinValue":1, "MaxValue":25,"Step":2}]}, 
     {"Name":"HyperTeleport", "Parameters":[ 
      {"Name":"PointX", "MinValue":1, "MaxValue":100,"Step":2}, 
      {"Name":"PointY", "MinValue":1, "MaxValue":100,"Step":2}]} 
     ] 
} 

所以cromossome可能是一些簡單的東西複雜:

- [ChooseModel(1), FillUp(30), HyperTeleport(3,5), GoBack(50)] 
- [ChooseModel(3), FillUp(60), HyperTeleport(20,50), GoRight(2)] 
- [ChooseModel(4), FillUp(40), GoFront(10), GoRight(2), GoLeft(30), GoBack(80), HyperTeleport(20,30), GoRight(5)] 
... 

所以我在這裏尋求幫助。解決我的問題的最佳方法是什麼? 我發現的所有例子都是關於固定大小的cromossomes的,但是在我的問題中,我有可變數量的選項。使用Heuristiclab會很棒,因爲我可以暫停並繼續,如同查看操作指引。

非常感謝你,如果你讀到這裏!

對不起,很長的文章。 'O'

+0

不可能用於此目的的「常規」算法,如A *,寬度優先搜索,深度優先搜索....? – viceriel

+0

我想我可以,但是我的功能和參數有很多可能性。不可能訪問每個節點。這就是爲什麼我想着遺傳編程。適者生存。我能做與BFS DFS類似的事嗎? –

+0

可能不是,但是對於尋路任務來說這些算法會比遺傳算法更好,所以您可以使用這些算法中的一些尋路和遺傳算法來完成剩餘任務。 – viceriel

回答

0

這是一個非常好的教程,在JavaScript中的機器學習實現,它引導火箭繞過障礙。這幾乎正​​是你想要實現的項目https://www.youtube.com/watch?v=bGz7mv2vD6g

它詳細解釋瞭如何設置基於健身的火箭路徑的演變。該算法爲數組添加值,這是火箭爲避開障礙而採取的步驟。

每一輪火箭的路徑陣列都會根據上一輪最成功的路線進行更新。隨着時間的推移,路徑會改善

+1

非常好的教程。看到這段視頻後,我正在想像開發自己的基因引擎,就像Daniel一樣,但是在c#中,並且專注於我的問題。我只是不知道什麼是隨機化每個參數(函數及其參數)的最佳方法。我應該生成X隨機染色體,可變和隨機基因(參數)?檢查隨機染色體是否已被評估並不是更好,如果是,請問另一個隨機染色體?謝謝! –