2017-03-23 39 views
0

我已經開始實現自己的遺傳算法,並且正處於決定如何爲新一代選擇父母的階段。我已經做了一些閱讀,似乎有很多不同的方式去做。從人羣中選擇多少個人? (遺傳算法)

我知道各種選擇技巧(比賽,輪盤賭),但我似乎無法找到的信息正好是應該選擇多少個父母。

初始人口規模,我會處理的將是50-75個人之間的任何地方。我想也許是爲下一代選擇了一半的人口,所以每一代人口減少了一半,不知道這是否是最好的途徑。

任何建議將是偉大的。

+1

決定有多少父母選擇遺傳算法聽起來像是一個更好的問題http://ai.stackexchange.com/。目前你似乎沒有任何問題來實現你的算法,如果你這樣做,請編輯你的問題,使其更清晰。 – PJvG

+2

最有效的人口在很大程度上取決於問題和算法。有效的人口規模可以通過實驗找到。你也可以實例化你的算法的多個版本,使用不同的人口規模(兩個作品的性能很好),並行運行它們。 – martijnn2008

回答

2

我作爲碩士學位研究的一部分參加了遺傳算法課程。

正如@et_l所說的,每個迭代中人口的大小通常應該是相同的大小,所以沒有任何意義的是,每一代人需要的解決方案越來越少(如你所說,將人口減少一半)。 50-75人口也很小。我建議你的人口至少有100個解決方案。

有多少家長選擇完全取決於你。你可以選擇你的全部人口,或只有少數。父母的數量通常隻影響你的人口會多快地收斂到一個單一的解決方案。通常,你選擇的父母越少,你收斂的速度越快。

現在說(舉個例子)你選擇100人口的前10位解決方案作爲下一代的父母。你殺了其他90人,並保持前10名。(注意,你也殺了多少人,這並不總是需要成爲你的人口中沒有達到頂峯的那部分併成爲父母)。

接下來,您將結合您的10位家長創建新解決方案。有很多方法可以結合。在這一步,重要的是讓你的人口恢復到你的人口的初始規模,這是100人。你可以選擇讓你的10位父母留在你的新一代,或殺死他們,並有一個完全由100個孩子組成的人口由10位家長組成,而不是由10位家長+ 90位兒童組成。

或者,您現在也可以在您的新人羣中執行一些突變以獲得更多種類的解決方案。無論你是否完全由你自己決定,我建議試試看看這可能會產生什麼樣的影響。如果您選擇包含突變,通常只有一小部分人羣會發生突變。

最後你有你的新的人口,如果你喜歡,你可以開始另一個迭代。繼續做迭代,直到你得到滿意的解決方案。

我希望我已經清楚地知道有很多方法來實現遺傳算法,並且需要一些實驗來找出哪些實現最適合您的具體問題。

+0

感謝您的回覆,爲我清除了很多東西:) – samcp20

1

我沒有遺傳算法的經驗,但閱讀[Wikipedia page](https://en.m.wikipedia.org/wiki/Genetic_algorithm)我可以看到,每個迭代的人口通常應該是相同的大小。在那裏提到的終止條件包括固定次數的迭代和適合一代中最佳解決方案(個人)的最小值。理論上你應該能夠繼續迭代,使更多的世代更多,直到你滿足終止條件。

考慮到這種理解,你現在可以用計算你需要多少父母才能生成新一代。請注意,您是從上一代的選擇父母產生使用遺傳算新的一個(通常是個交叉和突變以及它們的組合)。您不會將自己選定的個人用作新一代,因爲這會導致解決方案無法發展。因此,要計算需要的父母數量,您需要確定您有多少父母用於生成一個孩子(「經典」方法爲2,但這不是必需的)。通常情況下,你不會使用同一組(夫妻)的父母創建多個孩子。但我猜測(因爲在維基頁面中沒有提到)你會在幾個不同的組(夫妻)中使用特定的父母來創建不同的孩子。對於每個創建的孩子,您可能也沒有固定數量的父母(例如,對於一個孩子,只能使用一個父母)。

讓我們假設你正在使用完全相同2家長爲每個孩子,你是不是使用同一對夫婦多次,但使用的是在多夫婦每個父生成多個孩子。要創建大小爲y的人口,您需要選擇x父母,以使(x choose 2) = (x!)/(2!(x-2)!) = (x•(x-1)/2) = (1/2)(x^2 - x)大於或等於y。用您要求的人口數量替代y並解決x

一個我注意到更多相關的事情,就是在wiki頁面他們寫道,通常選擇的人口規模在數百或數千,所以50-75您選擇的尺寸顯得非常小。

1

每一代cicle在於選擇父母的N多(不管你認爲合適的。最好的數量取決於問題2是通常的),十字交叉,變異的孩子(只有一%的機會),並替代一些人口與他們(這是一個普遍的做法,以維持人口的規模)。你要求最後一個。

一個簡單的策略是替代整個人口每一代cicle。另一個只能取代N個最差的個體。其他可能有N個隨機個體......