你說你不知道的錯誤,直到運行小波變換後,但是這很好。您只需爲GA生成的每個人運行小波變換。那些錯誤較低的人被認爲是更合適的,並以更大的可能性存活下來。這可能非常緩慢,但至少在概念上,這是主意。
讓我們定義一個染色體數據類型,其中包含一對編碼值,一個用於頻率,另一個用於阻尼參數。不要太擔心他們現在的編碼方式,如果你願意的話,假設它是兩個雙打數組。重要的是你有辦法從染色體中獲得數值。現在,我只是通過名稱來引用它們,但是可以用二進制來表示它們,例如雙精度數組等等。染色體類型的另一個成員是存儲其適應度的雙精度值。我們可以很明顯地產生隨機頻率和阻尼值,所以我們來創建一個說100個隨機染色體。我們不知道如何設置他們的健身,但沒關係。首先將它設置爲零。爲了設置真實的適應值,我們將不得不爲每個100個參數設置運行一次小波變換。
for Chromosome chr in population
chr.fitness = run_wavelet_transform(chr.frequency, chr.damping)
end
現在我們有100個可能的小波變換,每一個計算錯誤,儲存在我們的一套名爲。剩下的就是選擇適合人羣的成員,培育它們,並讓人口中的鉗工成員和後代能夠存活下一代。
while not done
offspring = new_population()
while count(offspring) < N
parent1, parent2 = select_parents(population)
child1, child2 = do_crossover(parent1, parent2)
mutate(child1)
mutate(child2)
child1.fitness = run_wavelet_transform(child1.frequency, child1.damping)
child2.fitness = run_wavelet_transform(child2.frequency, child2.damping)
offspring.add(child1)
offspring.add(child2)
end while
population = merge(population, offspring)
end while
還有一堆不同的方式做單個步驟一樣select_parents
,do_crossover
,mutate
和merge
這裏,但GA的基本結構保持幾乎相同。你只需要爲每一個新的後代運行一個全新的小波分解。
感謝您的回答。 \t 我對GA和搜索方法不夠了解。我剛剛編輯了我的帖子,以確保我的問題清楚,請查看我的編輯,並幫助我實施GA或其他搜索方法。感謝負載。 – Electricman
我認爲你朋友的想法應該沒問題。所有你需要的遺傳算法都是一種說法,一種解決方案比另一種解決方案更好,並且似乎最小化重建誤差對此很不錯。 GAs不是唯一的選擇 - 簡單的本地搜索方法可以有效,也可以進行模擬退火或禁忌搜索,但鏈接圖中的整體圖片對我來說看起來很合理。 – deong
謝謝。你會解釋一下這些搜索方法嗎?或者介紹一些我可以學習的東西。 – Electricman