粒子群演算法(一)
(一)背景介紹
1.1、人工生命
人工生命:研究具有某些生命基本特徵的人工系統。包括兩方面的內容: 1、研究如何利用計算技術研究生物現象; 2、研究如何利用生物技術研究計算問題。 此處關注的是第二點。已有很多源於生物現象的計算技巧,例如神經網絡和遺傳演算法。現在討論另一種生物系統統---社會系統:由簡單個體組成的群落和環境及個體之間的相互行為。1.2、群智慧
模擬系統利用區域性資訊從而可以產生不可預測的群行為。經常能夠看到成群的鳥、魚或者浮游生物。這些生物的聚集行為有利於它們覓食和逃避捕食者。它們的群落動輒以十、百、千甚至萬計,並且經常不存在一個統一的指揮者。它們是如何完成聚集、移動這些功能呢?
對鳥群行為的模擬:Reynolds、Heppner和Grenader提出鳥群行為的模擬。他們發現鳥群在行進中會突然同步的改變方向,散開或聚集等。那麼一定有某種潛在的能力或規則保證了這些同步的行為。這些科學家都認為上述行為是基於不可預知的鳥類社會行為中的群體動態學。在這些早期的模型中僅僅依賴個體間距的操作,也就是說,這種同步是鳥群中個體之間努力保持最優距離的結果。
對魚群行為的研究:生物社會學家E.O.Wilson對魚群進行了研究,提出:“至少在理論上,魚群的個體成員能夠受益於群體中其他個體在尋找食物過程中的發現和以前的經驗,這種受益超過了個體之間的競爭所帶來的利益消耗”。這說明,同種生物之間資訊的社會共享能夠帶來好處,這是PSO的基礎。
(二)粒子群演算法的歷史
粒子群演算法源於複雜適應系統(Complex Adaptive System,CAS)。CAS理論於1994年正式提出,CAS中的成員稱為主體。比如研究鳥群系統,每個鳥在這個系統中就稱為主體。主體有適應性,它能夠與環境及其他的主體進行交流,並且根據交流的過程“學習”或“積累經驗”改變自身結構與行為。整個系統的演變或進化包括:新層次的產生(小鳥的出生);分化和多樣性的出現(鳥群中的鳥分成許多小的群);新主題的出現(鳥尋找食物過程中,不斷髮現新的食物)。所以CAS系統中的主體具有4個基本特點(這些特點是粒子群演算法發展變化的依據
- 首先,主體是主動的、活動的。
- 主體與環境及其他主體是相互影響、相互作用的,這種影響是系統發展變化的主要動力。
- 環境的影響是巨集觀的,主體之間的影響是微觀的,巨集觀與微觀要有機結合。
- 最後,整個系統可能還要受一些隨機因素的影響。
粒子群演算法就是對一個CAS系統--鳥群社會系統的研究得出的。
粒子群演算法(Particle Swarm Optimization, PSO)最早是由Eberhart和Kennedy於1995年提出,它的基本概念源於對鳥群覓食行為的研究。設想這樣一個場景:一群鳥在隨機搜尋食物,在這個區域裡只有一塊食物,所有的鳥都不知道食物在哪裡,但是它們知道當前的位置離食物還有多遠。那麼找到食物的最優策略是什麼呢?最簡單有效的就是搜尋目前離食物最近的鳥的周圍區域。
PSO演算法就從這種生物種群行為特性中得到啟發並用於求解優化問題。在PSO中,每個優化問題的潛在解都可以想象成d維搜尋空間上的一個點,稱之為“粒子”(Particle),所有粒子都有一個被目標函式決定的適應值(Fitness Value ),每個粒子還有一個速度決定他們飛翔的方向和距離,然後粒子們就追隨當前的最優粒子在解空間中搜索。Reynolds對鳥群飛行的研究發現。鳥僅是追蹤它有限數量的鄰居但最終的整體結果是整個鳥群好像在一箇中心的控制下.即複雜的全域性行為是由簡單規則的相互作用引起的。
(三)
(四)粒子群演算法的具體描述
PSO演算法就是模擬一群鳥尋找食物的過程,每個鳥就是PSO中的粒子,也就是求解問題的可能解,這些鳥在尋找食物的過程中,不停改變自己在空中飛行的位置與速度。可以觀察一下,鳥群在尋找食物的過程中,開始鳥群比較分散,逐漸這些鳥就會聚成一群,這個群忽高忽低、忽左忽右,直到最後找到食物。這個過程可以轉化為一個數學問題。尋找函式y=1-cos(3*x)*exp(-x)的在[0,4]最大值。該函式的圖形如下:
當x=0.9350-0.9450,達到最大值y=1.3706。為了得到該函式的最大值,在[0,4]之間隨機的灑一些點,為了演示,放置兩個點,並且計算這兩個點的函式值,同時給這兩個點設定在[0,4]之間的一個速度。下面這些點就會按照一定的公式更改自己的位置,到達新位置後,再計算這兩個點的值,然後再按照一定的公式更新自己的位置。直到最後在y=1.3706這個點停止自己的更新。這個過程與粒子群演算法作為對照如下:
- 這兩個點就是粒子群演算法中的粒子。
- 該函式的最大值就是鳥群中的食物。
- 計算兩個點函式值就是粒子群演算法中的適應值,計算用的函式就是粒子群演算法中的適應度函式。
- 更新自己位置的公式就是粒子群演算法中的位置速度更新公式。
下面演示一下這個演算法執行一次的大概過程:
第一次初始化
第一次更新位置
第二次更新位置
第21次更新
最後的結果(30次迭代)
最後所有的點都集中在最大值的地方。