我想實現編寫程序的遺傳算法,試圖解決特定的問題。.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'
不可能用於此目的的「常規」算法,如A *,寬度優先搜索,深度優先搜索....? – viceriel
我想我可以,但是我的功能和參數有很多可能性。不可能訪問每個節點。這就是爲什麼我想着遺傳編程。適者生存。我能做與BFS DFS類似的事嗎? –
可能不是,但是對於尋路任務來說這些算法會比遺傳算法更好,所以您可以使用這些算法中的一些尋路和遺傳算法來完成剩餘任務。 – viceriel