今天給大家介紹一種優(yōu)化算法。 粒子群優(yōu)化算法,也叫作鳥群算法,英文簡(jiǎn)稱PSO算法。 現(xiàn)在假設(shè)這樣一個(gè)問題,在一個(gè)空間內(nèi),有一定數(shù)量的鳥群,在這個(gè)空間中的某個(gè)位置存放了食物,但是鳥群中的鳥不知道什么位置存放了食物,僅知道其當(dāng)前位置與食物的距離,問題就是我們的鳥群需要在最快的時(shí)間內(nèi)找到食物的位置。 算法是這樣定義的,首先對(duì)于鳥群中的鳥,其所擁有的變量有三個(gè),第一,是其當(dāng)前的位置信息。第二,是其速度,這個(gè)速度(包含速度大小和速度方向)就決定了下一時(shí)刻該鳥的位置。然后,對(duì)于鳥群中的每個(gè)鳥,其在搜尋食物過中所經(jīng)歷的最好位置(也就是距離食物的最近位置)記為pbest;對(duì)于整個(gè)種群,其每次整體遷移的過程中,總會(huì)有一個(gè)鳥距離食物的距離最近,那么我們記這個(gè)鳥在這一時(shí)刻的位置為gbest。其次,對(duì)于速度的定義是這樣的 其中這個(gè)i就是第i個(gè)小鳥。 對(duì)于這里的一些名詞,我們簡(jiǎn)單解釋一下: w 為非負(fù)數(shù),稱為慣性因子。 c1和c2稱為加速常數(shù)。c1c1是根據(jù)個(gè)體自身的經(jīng)驗(yàn)進(jìn)行判斷的常數(shù);c2c2根據(jù)群體的經(jīng)驗(yàn) r1和r2為[0,1]范圍內(nèi)變換的隨機(jī)數(shù)。 a 稱為約束因子,目的是控制速度的權(quán)重。 然后我們?nèi)挝粫r(shí)間,那么下一時(shí)刻的位置就變成了上一時(shí)刻的位置加上一時(shí)刻的速度。 最后,粒子的位置坐標(biāo)對(duì)應(yīng)于所求的目標(biāo)函數(shù)的函數(shù)值,也就是適應(yīng)度值。粒子群中的粒子中適應(yīng)度值最好的那個(gè)粒子的坐標(biāo)就是目標(biāo)函數(shù)的解。 基于這些,我們的鳥群就可以找到食物了。 現(xiàn)在讓我們化身為鳥群里的小鳥,來進(jìn)行一次搜尋食物之旅。 假設(shè)現(xiàn)在有三只小鳥: 第一只叫坤坤,第二只叫凡凡,第三只叫帶帶大師兄。 現(xiàn)在進(jìn)行搜索,凡凡,坤坤,大師兄,在森林里漫無目的的飛啊飛。 每隔一段時(shí)間,坤坤,凡凡還有大師兄拿出手機(jī)互通電話,共享各自的位置。 然后坤坤和凡凡發(fā)現(xiàn)大師兄距離食物最近,就決定向大師兄那個(gè)方向飛去。 就這樣,坤坤和凡凡準(zhǔn)備開始向大師兄靠攏。 但是凡凡想起來自己有一次的位置比大師兄現(xiàn)在的這個(gè)位置更好,他不知道怎么辦,所以三個(gè)人就在微信群里商量,就有了上面的速度公式。 然后,經(jīng)過不斷的調(diào)整,三只鳥兒會(huì)向食物方向聚集,達(dá)到目標(biāo)。 對(duì)于我們的實(shí)際應(yīng)用來說,我現(xiàn)在有一個(gè)需要優(yōu)化的函數(shù)(一般是優(yōu)化函數(shù)的最小值),有五個(gè)自變量,那么我們的每個(gè)鳥兒的位置就會(huì)有五個(gè),每個(gè)鳥兒的速度也會(huì)有五個(gè),那么我們的適應(yīng)值就是將五個(gè)自變量帶入優(yōu)化函數(shù)所得到的函數(shù)值。鳥群一共有三只鳥,那么我的鳥群所構(gòu)成的數(shù)組就是一個(gè)三行五列的數(shù)組。 以下是粒子群的算法流程: |
|