《Java遺傳演算法程式設計》 1 7 搜尋空間

2021-09-23 16:13:02 字數 2853 閱讀 7392

在電腦科學中,如果處理優化問題時有許多候選解需要搜尋,我們就稱解的集合是「搜尋空間」。搜尋空間內每個特定的點就是給定問題的乙個候選解。在這個搜尋空間中有距離的概念,相比位置遠離的解,位置彼此靠近的解更可能表現出相似的特徵。為了理解這些距離在搜尋空間中如何組織,請考慮下面使用二進位制遺傳表示的例子:

「101」與「111」只差1。這是因為只要有1個變化(0翻轉到1),就能從「101」變成「111」。這意味著這些解在搜尋空間中的空間距離僅為1。

另一方面,「000」與「111」是有3處不同。這就是說距離為3,在搜尋空間「000」與「111」相距為3。

因為變化較少的一些解彼此較近,所以搜尋空間中解的距離可以用來提供一種相似性,說明另乙個解的特徵相似。許多搜尋演算法經常將這種理解作為一種策略,以改善搜尋結果。

1.7.1 適應度景觀

如果搜尋空間內發現的候選解標上其個體的適應度水平,我們就可以將搜尋空間看成「適應度景觀」。圖1-1提供了乙個例子,說明二維適應度景**起來如何。

適應度景觀的橫軸是我們要優化的值,豎軸是對應的適應度值。需要指出,這通常是對實際情況的過度簡化。大多數真實世界的應用程式都有多個值需要優化,會生成多維適應度景觀。

在上面的例子中,可以看到搜尋空間中的每個候選解的適應度值。這很容易看到最適應解的位置,但是,要在現實中做到這一點,搜尋空間中每個候選解都需要求出適應度函式的值。對於複雜的問題,搜尋空間呈指數式增長,計算每個解的適應度值是不合理的。在這種情況下,搜尋演算法負責找到最佳解的可能位置,同時又受到限制,僅看到搜尋空間的一小部分。圖1-2所示是搜尋演算法通常會看到什麼的乙個例子。

請考慮一種演算法,它要搜尋十億個(1 000 000 000)可能解構成的搜尋空間。即使每個解只需要1秒來對適應度求值和賦值,它仍然需要超過30年,才能搜尋每個可能的解!如果我們不知道搜尋空間中每個解的適應度值,我們就無法確切地知道最佳解在**。在這種情況下,唯一合理的方法是採用一種搜尋演算法,它能在可用的時間內發現足夠好的解。在這些條件下,一般來說,遺傳演算法和進化演算法能夠非常有效地發現可行的、接近最佳的解。

在搜尋空間進行搜尋時,遺傳演算法使用種群的方法。作為其搜尋策略的一部分,遺傳演算法假設兩個評分不錯的解可以組合,形成乙個更適應的後代。這個過程可以在適應度景觀(圖1-3)中看出來。

遺傳演算法中的變異運算元讓我們搜尋特定候選解的近鄰。變異應用於乙個基因時,其值隨機地改變。這可以表示成在搜尋空間(見圖1-4)中跨出一步。

在這兩個交叉和變異的例子中,得到的解都有可能比原來親代的適應度更差(見圖1-5)。

在這種情況下,如果解的表現足夠差,它最終會在選擇過程中從基因庫刪除。個體候選解小的負面變化是可以接受的,只要種群平均趨勢指向更適應的解。

1.7.2 區域性最優

實現優化演算法時,必須考慮乙個障礙,即該演算法能否很好地逃離搜尋空間的區域性最優位置。為了更好地表現什麼是區域性最優,請參考圖1-6。

在這裡,我們可以看到適應度景觀中的兩座小山,它們峰值略微不同。正如前面提到的,優化演算法不能夠看到整個適應度景觀,相反,它能做得最好的是找一些解,它認為這些解很可能處於搜尋空間的最佳位置。正是因為這種特點,優化演算法通常能在不知不覺中專注於查詢搜尋空間的次優部分。

如果實現使用乙個簡單的登山演算法來解決任何足夠複雜的問題,這個問題很快就會引起注意。乙個簡單登山演算法沒有任何內建的方法來處理區域性最優,因此往往會在搜尋空間的區域性最優區域中終止其搜尋。乙個簡單的隨機登山演算法相當於沒有種群和交叉的遺傳演算法。該演算法相當容易理解,它從搜尋空間中的隨機點開始,然後評估相鄰的解,嘗試找到更好的解。如果登山演算法在相鄰位置找到了更好的解,它會移動到新位置,並再次重新啟動搜尋過程。通過在搜尋空間中找到的任何一座山向上爬,這個過程會逐漸找到更好的解,它因而得名「登山演算法」。如果登山演算法再也找不到更好的解,它就假設是在山頂,並停止搜尋。

圖1-7展示了登山演算法的典型搜尋過程。

圖1-7表明,簡單登山演算法在搜尋空間的區域性最優區域開始搜尋時,如何很容易返回乙個區域性最優解。

雖然目前還無法實現在不首先求值整個搜尋空間的情況下,確保避免區域性最優,但該演算法有許多變種,可以幫助避免區域性最優。其中乙個最基本而有效的方法,稱為「隨機重啟登山」,就是從隨機起始位置多次執行登山演算法,然後返回它在不同執行中找到的最佳解。這種優化方法比較容易實現,而且有效性令人驚訝。其他方法諸如模擬退火方法[參見kirkpatrick,gelatt,and vecchi (1983)]和禁忌搜尋[參見glover(1989)和glover(1990)],它們對登山演算法進行了微小改變,都有助於減少區域性最優。

經過幾代後,種群就開始一致走向前幾代發現的最優解。這是因為不太適合的解會在選擇過程中移除,讓位給交叉和變異(見圖1-9)產生的新解。

變異運算元也起到了逃離區域性最優的作用。變異允許乙個解從當前位置跳到搜尋空間的另乙個位置。這個過程往往會導致在搜尋空間的較優區域中發現更適合的解。

《Java遺傳演算法程式設計》 2 9 小結

在本章中,你已經學會了實現遺傳演算法的基本知識。本章開頭的偽 提供了乙個通用的概念模型,針對本書其餘部分所有要實現的遺傳演算法 每個遺傳演算法將初始化並評估種群,然後進入乙個迴圈,進行交叉 變異和再評估。僅當終止條件滿足時,才退出迴圈。在本章中,你建立了遺傳演算法的支援元件,尤其是individua...

《Java遺傳演算法程式設計》 2 10 練習

1 執行遺傳演算法幾次,觀察進化過程的隨機性。它通常需要多少代來找到這個問題的乙個解?2 擴大和減小種群規模。減小種群規模如何影響演算法的速度?它是否也影響找到乙個解需要的世代數?擴大種群規模如何影響演算法的速度?它如何影響找到乙個解需要的世代數?3 將變異率設定為0。這將如何影響遺傳演算法尋找解的...

《Java遺傳演算法程式設計》 2 6 交叉方法

在交叉過程中,除了用不同的選擇方法,還有可用不同的方法在兩個個體之間交換遺傳資訊。不同的問題具有不太一樣的特點,採用特定的交叉方法更好。例如,全一 問題只要求完全由1構成的字串。字串 00111 與字串 10101 具有相同的適應度值,因為它們都包含3個1。對於這種型別的遺傳演算法,情況並非總是如此...