2010-02-17 50 views
1

我有一個理解演化算法的問題。我嘗試過多次使用這種技術,但我總是遇到同樣的問題:退化進入模擬退火。退化爲模擬退火的進化算法問題:突變太小?

可以說,我的初始羣體,使用健身括號中是:

A(7),B(9),C(14),d後(19)

交配和突變我有以下孩子:

AB(8.3),AC(12.2),AD(14.1),BC(11),BD(14.7),CD(17)

消除最弱後,我們得到

A,AB,B,AC

下一回合,AB會再次交配,結果8左右,將AC推出。接下來再次轉向AB,再將B推出(假設變異主要在> 1範圍內改變適應度)。

現在,經過短短的幾輪之後,泳池就會充滿最初最適合的候選人(A,B)和這兩個(AB)的突變。無論初始池的大小如何,都會發生這種情況,只需要更長的時間。比如說,初始人口數爲50人需要50轉,然後所有其他人都被淘汰,從而將整個裝置變成更復雜的模擬退火。一開始我還與自己進行了認真的對話,使問題更加惡化。

那麼,我錯過了什麼?我的突變率太小了,如果我增加它們,它會消失嗎?

以下是我正在使用它的項目: http://stefan.schallerl.com/simuan-grid-grad/ 是啊,代碼是越野車和界面很爛,但我懶得修復它現在 - 和小心,它可能會鎖定您的瀏覽器。更好地使用chrome,甚至認爲firefox不會比chrome慢一次(可能圖像比較的追蹤值得回報,耶!)。如果有人有興趣,the code can be found here

在這裏,我剛剛放棄了ev-alg的想法,並進行了模擬退火。

ps:我甚至不確定模擬退火 - 它就像演化算法,只是人口規模爲1,對吧?

回答

3

你似乎在做的是產生所有可能的後代,然後選擇適者生存。這既沒有效率(因爲你產生的候選人數量比你需要的多),並且會導致過早收斂。

相反,你應該產生剛好夠的後代,以取代人口爲下一代。選擇適當的候選人作爲父母(有利於更健康的人),然後如果你保留後代並丟棄父母,你應該有相同數量的個人,你開始(目前超過elitism) - 這是你的下一代。重複,直到您的終止條件得到滿足。

在上一節中「有利於個人鉗工」的資格是故意含糊其辭。有很多不同的方法可以選擇。看起來你正在選擇嚴格適合的個人。這是截斷選擇。它只對某些類型的問題非常有效。因爲你無情地挑選較弱的個體,它往往會導致早熟收斂。

理想情況下,你想給一個較弱的個體生存,因爲如果搭配合適的合作伙伴或以正確的方式突變可能潛在地產生合適的後代的一些機會。這就是爲什麼大多數選擇策略是概率性的。例如,roulette wheel selection爲每個個體分配一個與其健康分數成比例的概率。所以更健康的個體會更經常地存活下來,但弱小的個體仍然有一些小機會。

選擇通常是與更換,因此同一個人可能會選擇爲父母不止一次爲給定的一代。

另一種常用的選擇策略是tournament selection。您可能對我編寫的描述different selection strategies and elitism的文檔感興趣。

+0

非常感謝,我會看看! – stefs 2010-02-18 06:34:36

1

在進化算法中,你不一定會與其他人中的每個人都生成一個更大的後代。確定育種階段結果的方法很多,但最基本的方法是對所有元素進行適應性處理,並將它們用作權重,以隨機選擇每個成員的夥伴。這通常結束於下一代具有與之前的羣體相同數量的成員,儘管一些交配方案最終得到更多(基於關於手頭問題的某種推理),並且剔除最低值(對於某種類型域特定推理)。對於大多數問題,你也會拋棄前一代。

另外,您的健身需要根據生殖目標來確定,並且對於每種情況都可以充分地推導出來,這是非常具有挑戰性的。

+0

也許我可以發表評論......什麼是你的目標和你的進化算法是如何設置的(不,我不看你發佈的代碼鏈接)。至於退化到模擬退火,您需要稍微更好地理解這些概念。 SA和EA都需要涉及下一個節點選擇的隨機性,否則它們將對給定的一組輸入提供相同的結果,這對於發現那些以識別而聞名的隱藏解決方案來說並不有用。 – 2010-02-17 21:04:53