SFLA混合蛙跳算法


SFLA=SCE+PSO

SCE: shuffled complex evolution algorithm(Duan 1992) = CRS(controlled radom search Price 1978)+Competive evolution(Holland 1975)+shuffling

一、前言

1.1  SCE(混合復雜進化方法)的一些重要特征

  • SCE算法背后的理念是將全局搜索作為自然進化的過程。人口被划分為幾個社區(綜合體),每個社區都被允許獨立發展。經過定義的進化數量后,復合體被迫混合,新的群落通過洗牌過程形成。這一策略有助於通過共享每個社區獨立獲得的信息和屬性來改進解決方案。
  • 一個社區的每一個成員(complex)都是一個潛在的父母,有能力參與到一個繁殖過程中。
    在每一個進化步驟中,只考慮復雜的子集(complex),即所謂的子復合體(subcomplexes)。
    子復合體就像一對父母,除非有兩個以上的成員。

  • 為了確保進化過程具有競爭性,需要有更高的可能性,讓更好的父母為下一代后代做出貢獻。
    三角形概率分布(triangular probability distribution)的使用確保了這一公平。

  • 單純型算法(Nelder和Mead 1965)是一種直接搜索方法,用來生成后代,例如進化子復合體(subcomplexes)。
    這個策略使用包含在子復合體中的信息來指導改進方向的進化。

  • 后代也會在可行的空間內隨機地引入,以確保進化過程不會被困在貧窮地區,或錯過解決方案空間的有希望的區域。
  • 每一個新的后代都取代了目前最壞的子復合體(subcomplex),而不是整個種群中最糟糕的一點。
    這種替換確保每個社區成員至少有一個機會在被丟棄或替換之前進行改進。
    因此,社區中所包含的信息都沒有被忽略。

  • SCE方法的設計是為了改進CRS方法(即全局采樣和復雜演化)的最佳特征,通過整合競爭進化和復雜洗牌法的強大概念。
    這兩種技術都有助於確保樣例中包含的信息能夠有效地被充分利用。它們還確保信息集不會退化。

1.2  粒子群優化方法的一些重要特性

  • 粒子群的優化是來自於對社會行為的模擬; 群體行為的同步行為被認為是鳥類努力維持自身與鄰里之間的最佳距離的一種功能。
  • 在PSO中,粒子(鳥)在飛行過程中經歷了一段記憶的進化過程。
    每個粒子都根據自己的飛行經驗和同伴的飛行經驗調整飛行狀態。

  • 一群粒子(鳥)是由位置和速度隨機初始化的。
    每個粒子都被看作是d維空間中的一個點。

    • 第i個粒子被表示為 XI=(xi1,xi2,…,Xi)
    • 第i個粒子的最佳位置(給出最佳的健康值的位置)被記錄並表示為PI=(pi1,pi2,…,piD)
    • 粒子群中所有粒子中最好粒子的指數由Pg表示。
      粒子i的位置變化速率(速度)表示為VI=(vi1,vi2,…,viD)

  • 每個粒子的性能都是根據特定於問題的預定義的適應性函數來測量的。
  • 粒子的速度和位置通過以下公式改變:
    •  

    • c1和c2是兩個正的常量,rand1()和rand2()是0到1的隨機數,w是慣性權重。
    • 公式1為:粒子的新速度是根據它先前的速度從它自己最好的經驗(位置)到當前位置的距離團隊的最佳經驗
    • 然后粒子根據方程(2)飛向一個新的位置。
    • 用慣性權重w來控制以前的歷史速度對當前速度的影響。它指導了全局(范圍廣泛)和局部(附近)“飛行點”的探索能力之間的平衡。
    • 更大的慣性權重w促進了全局探索(尋找新的區域),而較小的慣性權重則傾向於促進局部探索,從而對當前的搜索區域進行微調。

二、混合蛙跳算法——模因元啟發式算法

2.1  虛擬的青蛙種群  

  每個個體都有一個相關的適應值來衡量個體的優秀。

  在SFLA中,個體並不那么重要,而種群被看作是mems的宿主,也就是一個記憶載體。每個宿主都帶有一個單一的meme(由memotype(s)組成。
  正如前面所提到的,mems(模因)和memotypes(記憶體)分別與基因和染色體相似。

2.2  原理

  想想一群青蛙在沼澤中跳躍,沼澤在離散的地方有很多石頭,青蛙可以跳過這些石頭來找到最大數量的可用食物。青蛙被允許互相交流,這樣他們就可以利用別人的信息來改進他們的模因。在每個模因中,青蛙被其他青蛙的想法感染,因此他們經歷了一個模因進化。模因進化提高了個體模因的質量,並提高了個體青蛙對目標的表現。

  為了確保感染過程具有競爭性,需要有更好的模因(思想)的青蛙比那些思想貧乏的青蛙更能促進新思想的發展。用三角形概率分布選擇青蛙為更好的想法提供了競爭優勢。在進化過程中,青蛙可能會根據memeplex的信息或整個種群中最好的信息改變它們的模因。

2.3  詳細介紹

SFLA是確定性和隨機方法的結合。
確定性策略允許算法有效地使用響應表面信息來指導啟發式搜索,就像在PSO中一樣。隨機元素確保了搜索模式的靈活性和健壯性。

搜索的開始是一群隨機選擇的青蛙,覆蓋了整個沼澤。
人口被划分為幾個平行的社區(memeplexe),它們被允許獨立地發展,以在不同的方向上搜索空間。
在每一種記憶中,青蛙都被其他青蛙的想法所感染;因此他們經歷了一場記憶進化。

記憶的進化提高了個體的模因的質量,並提高了個體蛙在目標上的表現。

為了確保感染過程具有競爭性,需要有更好的模因(想法)的青蛙比那些想法不佳的青蛙對新想法的發展做出更大的貢獻。

在進化過程中,青蛙可能會利用從記憶中獲得的信息或者整個種群中最好的信息來改變它們的迷因。
memotype(s)的增量變化對應於跳躍的步長,而新的模因與青蛙的新位置相對應。

當一只青蛙改進了它的位置后,它就被返回給了社區。
從位置變化中獲得的信息可以立即得到進一步改進。
這種對新信息的瞬時可訪問性將這種方法與GA分離開來,GA需要在新的見解可用之前對整個種群進行修改。

再一次,青蛙的視覺表現被用來做類比,但是,在思想的傳播上,這個類比可以是發明者或研究人員改進一個概念或工程師迭代地推進一個設計。

 

算法運行完設定的模因進化步驟之后,模因組之間開始以混合的形式進行信息的交
換,這一混合過程與復合型混合演化算法類似。混合的過程也就是信息在不同模因組之
間的傳遞過程混合步驟通過每一個模因組中的青蛙與其它模因組中的青蛙進行交流,提
高了模因質量,此外,還保證了青蛙族群的進化過程朝着所有可能性進行,避免了算法
陷入局部最優解。混合過程之后,每一個模因組中的信息都被重置,局部搜索過程以及
混合過程會一直進行下去直到預設的收斂條件被滿足。

三、steps

全局搜索

step 0  Initialize. 選擇m和n。其中m是模因memeplexes的數量, n是 is 每個模因中青蛙的數量。在沼澤中總樣本大小為F=mn。
step 1 生成一個虛擬人口。虛擬青蛙U(1), U(2), U(3), ..., U(F)

step 2 青蛙排序。對F型青蛙進行排序,以降低其性能值。儲存在X隊列中。記錄下最好的青蛙的位置 PX =U(1) 。

step 3 分區青蛙into memeplexes。將數組X分割成 m個memeplexes Y1,Y2,…Ym,每一個都含有n個青蛙。

step 4 每個memplexes的內存演化。發展每個memeplex Yk,k = 1,…m 根據下面概述的青蛙跳躍算法。
step 5 重組模因。在每個memeplex中都有一個定義數量的memetic演化步驟,然后替換Y1…Ym 用X表示,X = {Yk,k = 1, .., m}。排序X以降低性能值。更新人口最佳青蛙的位置PX。

step 6 檢查收斂。如果收斂條件滿足,停止。否則,返回到步驟3。通常情況下,當至少一只青蛙攜帶着“最好的記憶模式”時,決定何時停止的決定是連續的時間循環。或者,可以定義一個最大的函數評估總數。

局部搜索:跳蛙算法

在全局搜索的第4步,每個memeplex的演化都獨立地持續了N次。在memeplexes進化后,算法返回到對全局探索的重組。下面是對每個memeplex的局部搜索的詳細信息。
step 0 設置im = 0,在這里我計算memeplex的數量,並將與memeplexes的總數m比較。
           設置iN為= 0,iN用於計算進化步驟的數目,將與在每個memeplex中完成的步驟的最大數字N進行比較。
step 1 im=im+1

step 2 iN=iN+1

step 3 構造一個submemeplex。青蛙的目標是通過改進它們的模因來達到最優的想法。正如前面所提到的,他們可以從Yim或全球最好的青蛙中改編出最好的青蛙的想法。關於memeplex最好的選擇,並不總是希望使用最好的青蛙,因為青蛙的傾向是集中在那只可能是局部最優的青蛙。因此,我們考慮了一個稱為submemeplex的memeplex的子集。submemeplex選擇策略是給具有較高的性能值的青蛙賦予更高的權重,而對具有較低性能值的青蛙的權重較小。權重是用三角形概率分布來分配的。

pj = 2(n + 1 − j)/n(n + 1), j = 1,...,n,這樣,在一個memeplex中,具有最佳性能的青蛙將被選中為子memeplex的最高概率p1=2/(n+1),而最差性能的青蛙的概率最低,即pn=2/n(n+1)。

在這里,q不同的青蛙隨機從每一個模內的n個青蛙中挑選出來,形成子memeplex陣列Z。子memeplex被排序,以便青蛙按降低的性能排列(iq = 1,…,q)。記錄最好的(iq=1)青蛙的位置和最壞的(iq=q)青蛙的位置作為PB和PW的位置。submemeplex的概念如圖1所示。

step 4 改善最差的青蛙的位置。子模因中表現最差的青蛙的步驟和新位置的計算方法:

    步長 S = min{int[rand(PB − PW)], Smax} for a positive step,
          = max{int[rand(PB − PW)], −Smax} for a negative step,

    rand是一個隨機數字在范圍[0,1],而Smax是被感染后被青蛙允許通過的最大步長。注意,步驟大小的維度與決策變量的數量相等。然后計算新的位置:

      U(q) = PW + S.   (4)

    如果U(q)在可行的空間Ω內,計算新的性能值f(q)。否則就到第5步。

    如果新的f(q)比舊的f(q)更好。如果進化產生了一個好處,那么用新的U(q)替換舊的U(q),然后進入第7步。否則就到第5步。

      圖2顯示了一個在submemeplex內的memetic進化(感染)的例子。

     

 

 

————————————————————————————————————————————————————————

每只青蛙都有一種模因meme,每一種模因都有五種記憶類型memotypes。例如,如果隨機數是0.7,Smax的組件都是3,那么第一個memotype根據(1+min{int[rand(4-1)],3}=3)而改變,第三個memotype根據(5+max{int[rand(2-5)],-3}=3)來改變。

step5 如果第4步不能產生更好的結果,那么步驟和新位置就會被計算出來:

    step size S = min{int[rand(PX − PW)], Smax} for a positive step,
          = max{int[rand(PX − PW)], −Smax} for a negative step,

   新位置用公式4計算。

   如果U(q)在可行的空間Ω內,計算新的性能值f(q)。否則去第6步。

      如果新的f(q)比舊的f(q)更好,也就是說,如果進化產生了一個好處,那么用新的U(q)替換舊的U(q),然后進入第7步。否則就到第6步。

step 6 審查制度。如果新位置是不可行的,或者沒有比舊的位置好,那么有缺陷的模因的傳播就會被隨機生成一個新的青蛙r在一個可行的位置上,以取代新位置不適合進步的青蛙。

計算f(r)並設置U(q)=r和f(q)=f(r)。

step 7 升級memeplex。在submemeplex中最糟糕的青蛙的記憶改變之后,在Z的原始位置上替換為Yim。對Yim進行排序,以降低性能價值。

Step 8 If iN < N, 去第2步.

Step 9 If im < m, 去第1步. 否則,返回到全局搜索,以重新洗牌memeplexes。

局部搜索的步驟4和5在哲學上與PSO相似。一只青蛙的下降方向被識別出來,青蛙被移動到那個方向。然而,在這里,由於全局搜索也引入了洗牌操作,只有局部最小值被使用,而不是完整的最好種群(步驟4),除非沒有改進(步驟5)。由於下降方向是隱式應用的,所以執行一個線性搜索而不是隨機的步驟可能會更有效果,但是這里采用了更簡單的方法。

(a)虛擬青蛙的初始數量(在時間循環1的開始);
(b)獨立進化的memeplexes(在時間循環1結束時);
(c)洗好的青蛙(在第二次循環的開始);
(d)獨立進化的memeplexes(在時間循環2結束時)。

 

在圖3(a)中,在沼澤的邊界中隨機選擇了15個有不同模因的虛擬青蛙。它們分別被分成三組,分別用開放的三角形、全正方形和圓的圓圈表示。在每一種記憶中,表現不佳的青蛙都受到表現更好的青蛙的影響,並提高了它們的模因。

在一個時間循環中,允許有足夠的N個memetic進化周期,以確保memeplex中的所有青蛙都有機會鍛煉他們的想法。圖3(b)顯示了在一次循環結束時青蛙的位置。可以看出,每個memeplexes都是獨立進化的,並導致了三個不同的本地搜索。

在進化過程中,有可能找到一只青蛙,它的想法不適合這個群體,它會觸發審查制度,並產生一個新的虛擬青蛙,它有一組新的memes。
在圖3(b)中,由滿方格表示的memeplex中圈出的青蛙是一個審查的例子。

 經過N個進化周期后,青蛙被重組以形成新的memeplexes,如圖3(c)所示。新的memeplexes現在有了各種不同的想法。同樣,memeplexes是獨立於預先定義的幾個周期的。圖3(d)顯示了在另一個時間循環結束時的3個memeplexes。所有的memeplexes(除了一些青蛙)都聚集在沼澤的最佳位置附近。最終,所有的青蛙都將被唯一的最優方案所感染,這代表了最佳的問題解決方案。

 

圖4(a)-(f)顯示了實際問題的算法的進展(DeJong的F5函數(稍后給出詳細信息))。在搜索的最后,青蛙會趨向於同質化。圖中青蛙的位置是根據它們的memes來定義的。在食物搜索的開始(時間循環1),青蛙被隨機地分散在沼澤里(從-66到+66)。未知的最佳食物點(在圖4(a)中顯示的是一個開放的恆星,這是他們的最終目標。

隨着時間的推移,青蛙已經被更好的想法感染,開始采用一些共同的想法並開始圍繞局部最優(圖4b)。隨着進化和洗牌的繼續,青蛙開始探索更多的新想法(時間循環6、10和15)(圖4(c)-(e))。最后,在第20環,所有的青蛙都被相同的意識形態所感染,並聚集在最佳位置。

四、參數優化

與所有啟發式一樣,參數選擇對SFLA的性能至關重要。
SFLA有五個參數: memeplexes的數量m,memeplex中青蛙的數量n, submemeplex中青蛙的數量q,在兩個連續的洗牌之間的memeplex中N的進化或感染步驟,以及在進化過程中被允許的最大步長Smax。
在這個元啟發式的發展過程中,沒有明確的理論基礎來決定參數值的選擇。

根據經驗,樣本容量F(memeplexes的數字m乘以每個memeplex中青蛙的數量n)通常是最重要的參數。F的適當值與問題的復雜性有關。

找到全局(或接近全局)的最優的概率隨着樣本容量的增大而增加。然而,隨着樣例大小的增加,實現目標的函數評估的數量會增加,從而使計算變得更加繁重。此外,在選擇m時,重要的是要確保n不是太小。

如果在每個模因中有太少的青蛙,則丟失了局部模因進化策略的優勢。算法性能對q的響應是,當在子模因中選擇的青蛙太少時,信息交換速度慢,導致解的時間更長。另一方面,當有太多的青蛙被選中時,青蛙就會被不想要的想法感染,這些想法會觸發審查現象,從而延長搜索時間。

第四個參數N,可以取任何大於1的值。如果N很小,memeplexes將經常被打亂,減少了局部范圍的想法交流。另一方面,如果N很大,那么每個memeplex將被壓縮為一個局部優化。

第五個參數,Smax,是被感染后被青蛙所允許的最大的步長。Smax實際上是控制SFLA全局探索能力的一個約束條件。將Smax設置為一個小值會降低全局探測能力,從而使算法更傾向於局部搜索。
另一方面,一個大的Smax可能會導致缺少實際的優化,因為它沒有經過微調。

五、實驗評估

對於每個測試問題,總共執行了20次運行SFLA參數的不同組合的運行。
在每一次運行中,停止的標准是至少有一只青蛙會在連續10次循環(洗牌)中攜帶“迄今為止最好的記憶模式”。
在95%的運行中,標准被滿足了,盡管在運行和問題之間需要的功能評估的數量是不同的。

為了進行比較,測試函數還可以使用基於ga的優化器Evolver(1997)來解決。不同的初始基因組合,種群數量,交叉和突變率,每個組合運行20次。在每一次運行中,停止的標准是,最好的函數值是連續10代不會改變的。在20%的情況下,GA沒有找到最優值。圖5總結了SFLA和GA對測試函數的比較。垂直條表示在成功運行中找到全局最優值的平均次數。

為了對SFLA進行更健壯的測試,我們選擇使用SFLA和GA(見附錄A),選擇並解決了另一組具有離散變量的六種成熟的測試函數。
這些函數和SFLA參數選擇的影響比第一組更詳細地分析了SFLA在尋找全局最佳解決方案時的魯棒性,以及在尋找全局解決方案所需的函數評估的數量方面的效率。

不同的參數值改變了聚合到全局最優值的機會,但也會改變所需的函數評估的數量。
因此,計算成本和成功的概率之間的妥協是必要的。

  • 在實驗中,memeplexes的m值在10到50之間變化,增量為10。從70到100,增量為30。
  • 在每一種memeplex中青蛙的數量n是10、20,30、40、50、70、100、150、200和300。
  • 在submemeplex中,青蛙的數量q在5到20之間變化,增量為5,洗牌階段的N從5增加到35,增量為5。

除了Simpleton25和Simpleton50問題之外,所有問題都使用了相同的參數范圍。研究發現,從10到100的m值,Simpleton25和Simpleton 50的最優值很難實現。因此,對於這兩個問題m的范圍被擴展到300。

———————————————————————————————————————————————————————————— 

第一步:確定種群規模F,子種群數量m,每個子種群中的青蛙個數n,每個子種群局部搜索的最大迭代次數N。F=mn。

第二步:計算每只青蛙的適應度

第三步:將青蛙的適應度按降序排列

第四步:將F只青蛙按照一定規則,分別放在m個子群中

第五步:用模因算法進行局部搜索

第六步:青蛙在不同的子種群間跳躍,更新自己的信息,重新匯合

第七步:構造下一代新種群

第八步:滿足停止條件輸出最優解,否則回到第二步

每只青蛙表示一個可行解。每個子群分別進行局部搜索。

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM