優(yōu)化算法筆記(七)差分進化算法

1. 差分進化算法簡介

(以下描述扯饶,均不是學術(shù)用語,僅供大家快樂的閱讀)
  差分進化算法(Differential Evolution Algorithm砰琢,DE)是一種基于群體的進化算法胡桨,它模擬了群體中的個體的合作與競爭的過程。算法原理簡單烫堤,控制參數(shù)少荣赶,只有交叉概率和縮放比例因子,魯棒性強鸽斟,易于實現(xiàn)拔创。
  差分進化算法中,每一個個體的基因表示待求問題的一個候選解富蓄。每次迭代將先進行變異操作剩燥,選擇一個或多個個體的基因作為基,然后選擇不同的個體的差分來構(gòu)成差分基因立倍,最后將作為基的基因與差分基因相加來得出新的個體躏吊。交叉操作將新的個體將于父代的對應個體交叉,然后進行選擇操作帐萎,比較交叉后的個體與父代的對應個體比伏,選擇較優(yōu)的個體保留至下一代。在迭代完成之后將選擇種群中最優(yōu)個體的基因作為解疆导。
  差分進化算法可以算是我所使用過的優(yōu)化算法中大魔王級別的算法赁项,雖然它每個方面都沒有強到離譜,但是綜合起來的效果好于大多數(shù)算法。它就像一個每個科目都能考到90分(百分制)的學生悠菜,雖然沒門課都不是最優(yōu)秀的舰攒,但是論綜合,論總分悔醋,它有極大的概率是第一名摩窃。


(兩位(正經(jīng))魔王,一位宇宙帝王芬骄,一位蟻王猾愿,蟻王更符合差分進化算法,因為他可以不斷的吞食其他個體并吸收他們的能力從而不斷變強账阻,是不是和優(yōu)化算法很像蒂秘?富堅老賊還是狠)

  在我研究優(yōu)化算法的小路上,我的目標就是找到一個能打敗大魔王或是能在大多數(shù)方面壓制魔王的算法淘太。

2. 算法流程

這次的主角就選魔王軍吧(或者蟻王軍姻僧,為了與蟻群算法區(qū)別還是叫魔王軍吧),個體則稱之為魔王兵蒲牧。
  魔王兵的能力取決于它們的基因撇贺,它們可以根據(jù)環(huán)境或者需要改變自己的基因使得自己更加強大,更方便的處理問題冰抢,問題的維度與基因維度相同松嘶。
     X_i^t=(x_{i,1}^t,x_{i,2}^t,...,x_{i,D}^t)
  表示第i個魔王兵在進化了第t次后的基因,該個體有D位基因晒屎。
與遺傳算法同為進化算法的差分進化算法喘蟆,它們的操作(算子)也都非常相似的缓升,都是交叉鼓鲁,變異和選擇,流程也幾乎一樣(遺傳算法先交叉后變異港谊,差分進化算法先變異后交叉)骇吭。

2.1變異

說到差分進化算法中的變異,我就想到一句論語“三人行歧寺,必有我?guī)熝稍镎衿渖普叨鴱闹洳簧普叨闹笨稹龙致!?/strong>,其實這句論語已經(jīng)向我們說明了差分進化算法的整個流程:
  “三人行顷链,必有我?guī)熝伞薄儺惸看徊妗?br>   “擇其善者而從之,其不善者而改之”——選擇。
  差分進化算法中榛了,當一個魔王兵變異時在讶,它會先找來3個小伙伴,當然是隨機找來3個小伙伴霜大,避免同化构哺。在一個小伙伴的基因上加上另外兩個小伙伴基因之差作為自己的目標基因。其變異公式如下:
      U_i=X_{r1}+F(X_{r2}-X_{r3}),i\ne r1\ne r2\ne r3
  表示第i個魔王兵找到了編號為r1战坤、r2和r3的三個魔王兵曙强,當然了i、r1湖笨、r2旗扑、r3為互不相同的整數(shù),F(xiàn)為縮放比例因子慈省,通常 臀防,一般取F=0.5。U_i為第i個魔王兵交叉后的目標基因圖紙边败,不過這是個半成品袱衷,再經(jīng)過交叉后,目標基因圖紙才算完成笑窜。
  其實現(xiàn)在我們已經(jīng)有了5個基因圖紙了U_i,X_i,X_{r1},X_{r2},X_{r3}致燥,接下來將進行交叉操作。由于變異操作排截,差分進化算法的種群中個體數(shù)至少為4嫌蚤,即魔王軍中至少有4個小兵。

2.2交叉

交叉操作中断傲,魔王兵i會將目標基因圖紙 U_i^t=(u_{i,1}^t,u_{i,2}^t,...,u_{i,D}^t)進行加工得到 V_i^t=(v_{i,1}^t,v_{i,2}^t,...,v_{i,D}^t)脱吱,加工過程如下:
v_{i,d}=\begin{cases} u_{i,d},rand(0,1)<CR \ \ or\ \ d = d_{rand} \\ x_{i,d},rand(0,1) else \end{cases}
  其中 。 為交叉概率认罩,其值越大箱蝠,發(fā)生交叉的概率越大,一般取 垦垂。 d_{rand}為{1,2,…,D}中的隨機整數(shù)宦搬,其作用是保證交叉操作中至少有一維基因來自變異操作產(chǎn)生的基因,不能讓交叉操作的努力白費劫拗。
  從公式上可以看出交叉操作實際上是從變異操作得出的基因圖紙上選擇至少一位基因來替換自己的等位基因间校,得到最終的基因圖紙。

2.3選擇

選擇操作相對簡單页慷,魔王兵i拿到了最終的基因圖紙 V_i^t=(v_{i,1}^t,v_{i,2}^t,...,v_{i,D}^t)憔足,大喊一聲聂渊,進化吧,魔王兵i的基因改變了四瘫。它拿出了能力測量器fitness function,如果發(fā)現(xiàn)自己變強了汉嗽,那么就將基因 保留到下一代,否則它選擇放棄進化找蜜,讓自己還原成 X_i^t=(x_{i,1}^t,x_{i,2}^t,...,x_{i,D}^t)饼暑。

3. 實驗初步

實驗又來啦,還是那個實驗f(x_1,x_2)=(x_1-a)^2+(x_2-b)^2洗做,簡單弓叛、易算、好畫圖诚纸。
  實驗1:參數(shù)如下

參數(shù)
問題維度(維度) 2
小兵數(shù)量(種群數(shù)) 20
進化次數(shù)(最大迭代次數(shù)) 50
CR(交叉率) 0.3
F(放縮因子) 0.5
取值范圍 (-100撰筷,100)
實驗次數(shù) 10

  圖中可以看出在第20代時,群體已經(jīng)非常集中了畦徘,在來看看最終得出的結(jié)果毕籽。

最優(yōu)值 1.0917867028293985E-8
最差值 2.9361020954274757E-6
平均值 5.847453820715603E-7

這結(jié)果真是好到令人發(fā)指,惡魔在心中低語“把其他的優(yōu)化算法都丟掉吧”井辆。不過別往心里去关筒,任何算法都有優(yōu)缺點,天下沒有免費的午餐杯缺,要想獲得某種能力必須付出至少相應的代價蒸播。
實驗2:
將交叉率CR設為0,即每次交叉只選擇保留一位變異基因。

參數(shù)
問題維度(維度) 2
小兵數(shù)量(種群數(shù)) 20
進化次數(shù)(最大迭代次數(shù)) 50
CR(交叉率) 0.0
F(放縮因子) 0.5
取值范圍 (-100萍肆,100)
實驗次數(shù) 10

看看了看圖袍榆,感覺跟實驗1中相比沒有什么變化,那我們再來看看結(jié)果塘揣。

最優(yōu)值 2.922699066690564E-10
最差值 1.5170095944418442E-7
平均值 1.9533094363773728E-8

結(jié)果總體來說比實驗1好了一個數(shù)量級包雀。為什么呢?個人感覺應該是每次只改變一位基因的局部搜索能力比改變多位基因更強勿负。下面我們將交叉率CR設為1來看看是否是這樣馏艾。
  實驗3:
  將交叉率CR設為1,即每次交叉只選擇保留一位原有基因劳曹。

參數(shù)
問題維度(維度) 2
小兵數(shù)量(種群數(shù)) 20
進化次數(shù)(最大迭代次數(shù)) 50
CR(交叉率) 1.0
F(放縮因子) 0.5
取值范圍 (-100奴愉,100)
實驗次數(shù) 10

實驗3的圖與實驗1和實驗2相比好像也沒什么差別,只是收斂速度好像快了那么一點點。再來看看結(jié)果铁孵。

最優(yōu)值 1.247729854010192E-10
最差值 2.3424955950460443E-8
平均值 4.089766498652818E-9

發(fā)現(xiàn)結(jié)果比實驗2的結(jié)果還要好锭硼?那說明了實驗2我得出的結(jié)論是可能是錯誤的,交叉率在該問題上對差分進化算法的影響不大蜕劝,它們結(jié)果的差異可能只是運氣的差異檀头,畢竟是概率算法轰异。
  實驗4:
  將變異放縮因子設為0,即變異只與一個個體有關(guān)暑始。

參數(shù)
問題維度(維度) 2
小兵數(shù)量(種群數(shù)) 20
進化次數(shù)(最大迭代次數(shù)) 50
CR(交叉率) 0.3
F(放縮因子) 0.0
取值范圍 (-100搭独,100)
實驗次數(shù) 10

收斂速度依然很快,不過怎么感覺結(jié)果不對廊镜,而且個體收斂的路徑好像遺傳算法牙肝,當F=0,時嗤朴,差分進化算法退化為了沒有變異配椭、選擇操作的遺傳算法,結(jié)果一定不會太好雹姊。

最優(yōu)值 0.453120676982517
最差值 286.3408283178992
平均值 106.1719276191775

果然如此股缸。下面我們再看看F=2時的實驗。
  實驗5:
  將變異放縮因子設為2吱雏。

參數(shù)
問題維度(維度) 2
小兵數(shù)量(種群數(shù)) 20
進化次數(shù)(最大迭代次數(shù)) 50
CR(交叉率) 0.3
F(放縮因子) 2.0
取值范圍 (-100敦姻,100)
實驗次數(shù) 10

實驗5的圖可以明顯看出,群體的收斂速度要慢了許多歧杏,到第50代時替劈,種群還未完全收斂于一點,那么在50代時其結(jié)果也不會很好得滤,畢竟算法還未收斂就停止進化了陨献。

參數(shù)
最優(yōu)值 0.003982238947037151
最差值 1.1517176365886543
平均值 0.23692008026134745

結(jié)果不算很好但也算相對穩(wěn)定。

通過上面5個實驗懂更,我們大致了解了差分進化算法的兩個參數(shù)的作用眨业。
  交叉率CR,影響基因取自變異基因的比例沮协,由于至少要保留一位自己的基因和變異的基因?qū)е翪R在該問題上對算法性能的影響不大(這個問題比較簡單龄捡,維度較低,影響不大)慷暂。
  變異放縮因子F聘殖,影響群體的收斂速度,F(xiàn)越大收斂速度越慢行瑞,F(xiàn)絕對值越小收斂速度越快奸腺,當F=0是群體之間只會交換基因,不會變異基因血久。

4. 探究與改進

差分進化算法大魔王已經(jīng)如此強大了突照,那么還有什么可以改進的呢?當然有下面一一道來氧吐。
  方案1.將3人行修改為5人行讹蘑,以及推廣到2n+1人行末盔。
  實驗6:
  將3人行修改為5人行,變異公式如下:
  U_i=X_{r1}+F_1(X_{r2}-X_{r3})+F_2(X_{r4}-X_{r5})

參數(shù)
問題維度(維度) 2
小兵數(shù)量(種群數(shù)) 20
進化次數(shù)(最大迭代次數(shù)) 50
CR(交叉率) 0.3
F1(放縮因子) 0.5
F2(放縮因子) 0.5
取值范圍 (-100座慰,100)
實驗次數(shù) 10

五人行的實驗圖看起來好像與之前并沒有太大的變化陨舱,我們再來看看結(jié)果。

參數(shù)
最優(yōu)值 1.7892717650452213E-8
最差值 4.573249741855863E-6
平均值 1.0415260793972972E-6

結(jié)果沒有明顯提升版仔,反而感覺比之前的結(jié)果差了隅忿。反思一下五人行的優(yōu)缺點,優(yōu)點邦尊,取值范圍更大背桐,缺點,情況太多蝉揍,減慢搜索速度链峭。


  上圖為U_i=X_A+F(X_C-X_B)(這里的公式不顯示?)的情況又沾,其中ABCD為平行四邊形AD=DE弊仪,U可以取到AE上的任一點。

  上圖為 U_i=X_A+F_1(X_C-X_B)+F_2(X_G-X_F)(這里的公式不顯示杖刷?)的情況励饵,其中ABCD為平行四邊形AD=DE,AFGH為平行四邊形滑燃,AIJE為平行四邊形役听,AH=HI, U可以取到平行四邊形AIJE上的任一點。
  對于交叉操作來所表窘,“五人行”的選擇更多典予,搜索能力應該更強,但這個問題的適應度函數(shù)過于簡單乐严,可能無法發(fā)揮其優(yōu)勢瘤袖,所以此時“五人行”的結(jié)果差于“三人行”的結(jié)果。
  方案2昂验,變異放縮因子隨機化
  第3節(jié)中我們可以明顯看出變異放縮因子F對差分進化算法的影響明顯大于交叉率CR,F能影響算法的收斂速度捂敌。注意到差分進化算法沒有跳出局部最優(yōu)的操作,如果算法收斂太快容易陷入局部最優(yōu)既琴,而收斂太慢又會影響求解速度占婉。因此我向隨機化F來均衡一下算法的收斂速度。
  實驗7:
  F取值為(0,2)內(nèi)的隨機數(shù)呛梆。

參數(shù)
問題維度(維度) 2
小兵數(shù)量(種群數(shù)) 20
進化次數(shù)(最大迭代次數(shù)) 50
CR(交叉率) 0.3
F(放縮因子) (0,2)
取值范圍 (-100锐涯,100)
實驗次數(shù) 10

可以看出算法的收斂速度比之前的變慢了一點磕诊,再看看結(jié)果填物。

參數(shù)
最優(yōu)值 1.002461804484959E-8
最差值 1.5000010808013516E-4
平均值 2.5148494598068475E-5

比之前差纹腌。


  探究過程中失敗是難免的,F(xiàn)為(0,2)內(nèi)的隨機數(shù)滞磺,那么F的期望為1升薯,其收斂速度變慢導致結(jié)果變差也是難免,畢竟最大迭代次數(shù)只有50击困,而且適應度函數(shù)過于簡單涎劈。
  方案3:為差分進化算法新增跳出局部最優(yōu)的操作。
  這個方案沒有試驗阅茶,差分進化算法是否需要該操作還是未知數(shù)蛛枚?差分進化算法有著優(yōu)秀的搜索能力,那么跳出局部最優(yōu)能力是否需要呢脸哀?一個攻擊能力超強的戰(zhàn)士是否需要加強防御能力呢蹦浦?
  其實我認為還是必要的,因為現(xiàn)在我們需要用優(yōu)化算法去解決的實際問題大多是動態(tài)的而不是實驗中的靜態(tài)還是撞蜂,在處理動態(tài)問題時盲镶,一點跳出局部最優(yōu)能力能夠讓優(yōu)化算法快速做出反應而不是再緩慢的進化。只是如何給差分進化算法優(yōu)雅的添加跳出局部最優(yōu)性能的方案還沒有想到蝌诡。

5. 總結(jié)

差分進化算法的學習在此也告一段落溉贿。差分進化算法很強大,也很簡單浦旱、簡潔宇色,算法的描述都充滿了美感,不愧是大魔王颁湖。不過這里并不是結(jié)束代兵,這只是個開始,終將找到打敗大魔王的方法爷狈,讓新的魔王誕生植影。
  由于差分進化算法足夠強,而文中實驗的問題較為簡單導致算法的改進甚至越改越差(其實我也不知道改的如何涎永,需要大量實驗驗證)思币。在遙遠的將來,也會有更加復雜的問題來檢驗魔王的能力羡微,總之谷饿,后會無期。
  以下指標純屬個人yy,僅供參考

指標 星數(shù)
復雜度 ★★★☆☆☆☆☆☆☆
收斂速度 ★★★★★★★★☆☆
全局搜索 ★★★★★★★★☆☆
局部搜索 ★★★★★★★★☆☆
優(yōu)化性能 ★★★★★★★★☆☆
跳出局部最優(yōu) ☆☆☆☆☆☆☆☆☆☆
改進點 ★★☆☆☆☆☆☆☆☆

目錄
上一篇 優(yōu)化算法筆記(六)遺傳算法
下一篇 優(yōu)化算法筆記(八)人工蜂群算法

優(yōu)化算法matlab實現(xiàn)(七)差分進化算法matlab實現(xiàn)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載妈倔,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者博投。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市盯蝴,隨后出現(xiàn)的幾起案子毅哗,更是在濱河造成了極大的恐慌听怕,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件虑绵,死亡現(xiàn)場離奇詭異尿瞭,居然都是意外死亡,警方通過查閱死者的電腦和手機翅睛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門声搁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人捕发,你說我怎么就攤上這事疏旨。” “怎么了扎酷?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵充石,是天一觀的道長。 經(jīng)常有香客問我霞玄,道長骤铃,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任坷剧,我火速辦了婚禮惰爬,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘惫企。我一直安慰自己撕瞧,他們只是感情好,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布狞尔。 她就那樣靜靜地躺著丛版,像睡著了一般。 火紅的嫁衣襯著肌膚如雪偏序。 梳的紋絲不亂的頭發(fā)上页畦,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天,我揣著相機與錄音研儒,去河邊找鬼豫缨。 笑死,一個胖子當著我的面吹牛端朵,可吹牛的內(nèi)容都是我干的好芭。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼冲呢,長吁一口氣:“原來是場噩夢啊……” “哼舍败!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起希痴,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤纸巷,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后熙兔,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體弛说,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡挽懦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年翰意,在試婚紗的時候發(fā)現(xiàn)自己被綠了木人。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡冀偶,死狀恐怖醒第,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情进鸠,我是刑警寧澤稠曼,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站客年,受9級特大地震影響霞幅,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜量瓜,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一司恳、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧绍傲,春花似錦扔傅、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至杠纵,卻和暖如春荠耽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背比藻。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工骇塘, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人韩容。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓款违,卻偏偏與公主長得像,于是被迫代替她去往敵國和親群凶。 傳聞我的和親對象是個殘疾皇子插爹,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容