本文you清華大學碩士大神金天撰寫,歡迎大家轉載,不過請保留這段版權信息,對本文內容有疑問歡迎聯(lián)系作者微信:jintianiloveu探討焕蹄,多謝合作~
導語
差分進化算法是一種尋優(yōu)算法,提出時間比遺傳算法阀溶,粒子群算法晚腻脏,但是我在實現(xiàn)差分進化算法的時候看不出任何牛逼之處,唯一我覺得牛逼的一點是不像遺傳算法一樣使用二進制編碼令人頭大银锻,實數(shù)編碼好理解一點永品,而且變異,交叉击纬,選擇這三大過程也很簡單鼎姐。本篇文章就是傳授老夫多年的科研裝逼手藝,如果覺得好掉弛,可以小小的贊一下症见,嘿嘿喂走。
洪荒初始-差分進化算法的步驟
差分進化算法和遺傳算法沒有任何區(qū)別殃饿,如果你甚至沒有聽過遺傳算法沒有關系,它只有簡單的以下幾步:
- 初始化
對于像進化差分這樣的貪婪算法來說芋肠,首先需要形成一個初始種群乎芳,就像采花高手一樣一開始喜歡廣撒網,網撒的好才不會有漏網之魚帖池。 - 變異
變異針對個體級別奈惑,變異的原理就是
h_i = x_g_without_i[1] + f*(x_g_without_i[2] - x_g_without_i[3])
這里的h_i指的是對上一代種群中第i個個體進行變異,變異方法是從上一代種群中睡汹,除了第i個個體以外的剩下個體中隨機抽取三個肴甸,按照上面的公式得到第i個的變異個體。
- 交叉
交叉操作主要針對每個個體囚巴,我們優(yōu)化的函數(shù)可能有多個變量原在,也就是多目標優(yōu)化,一個擁有x彤叉,y庶柿,z,w秽浇,f浮庐,g,b柬焕,k....這樣超多變量的函數(shù)給你優(yōu)化审残,你要是用高等數(shù)學的方法來尋找指定區(qū)間上的最優(yōu)點基本上不太可能梭域,這時候我們就需要進化差分算法,每個個體的元素個數(shù)就是要優(yōu)化的多目標數(shù)搅轿。 - 選擇
選擇操作當然就是根據(jù)適應度函數(shù)來決定我選取變異交叉后的個體還是保留原來的個體 - 迭代
重復之前的操作碰辅。
差分進化算法詳細講解
上面只是給大家一個感性的認識,真正你看了上面就理解了進化差分算法要么你牛逼要么我牛逼介时,不過為了把算法解釋清楚没宾,我決定在詳細講解一下
共識
首先我們要明確我們要優(yōu)化什么?優(yōu)化的量是什么沸柔?怎么跟差分進化算法里面的東西對應起來循衰?
我們要優(yōu)化的東西無非就是一個函數(shù),這個函數(shù)可能只有一個變量褐澎,也可能有兩個会钝,當然更多的情況是有很多參數(shù),比如一個量子對撞機控制系統(tǒng)工三,影響因素就很多迁酸,當然我們的進化算法還無法牛逼到處理辣么復雜的問題。
而函數(shù)的參數(shù)就是我們算法里面的個體俭正,參數(shù)的個數(shù)就是個體的元素個數(shù)奸鬓。對,就是這樣掸读。
還有啥
還有啥要說的呢串远,基本上沒有了,小學生應該也懂了儿惫,好了開始上代碼
Talk is cheap澡罚, show me the code
接下來開源進化差分算法的代碼,用python實現(xiàn)的喲肾请,如果代碼中有任何問題歡迎加我微信:jintianiloveu或者加入文章結尾二維碼群留搔。