1. 程式人生 > >標準粒子群演算法(PSO)

標準粒子群演算法(PSO)

2.1 粒子群演算法思想的起源

      粒子群優化(Particle Swarm Optimization, PSO)演算法是Kennedy和Eberhart受人工生命研究結果的啟發、通過模擬鳥群覓食過程中的遷徙和群聚行為而提出的一種基於群體智慧的全域性隨機搜尋演算法,自然界中各種生物體均具有一定的群體行為,而人工生命的主要研究領域之一是探索自然界生物的群體行為,從而在計算機上構建其群體模型。自然界中的鳥群和魚群的群體行為一直是科學家的研究興趣,生物學家Craig Reynolds在1987年提出了一個非常有影響的鳥群聚集模型,在他的模擬中,每一個個體遵循:

      (1) 避免與鄰域個體相沖撞;

      (2) 匹配鄰域個體的速度;

      (3) 飛向鳥群中心,且整個群體飛向目標。

      模擬中僅利用上面三條簡單的規則,就可以非常接近的模擬出鳥群飛行的現象。1995年,美國社會心理學家James Kennedy和電氣工程師Russell Eberhart共同提出了粒子群演算法,其基本思想是受對鳥類群體行為進行建模與模擬的研究結果的啟發。他們的模型和模擬演算法主要對Frank Heppner的模型進行了修正,以使粒子飛向解空間並在最好解處降落。Kennedy在他的書中描述了粒子群演算法思想的起源。

2.2 演算法原理

     PSO從這種模型中得到啟示並用於解決優化問題。PSO 中,每個優化問題的潛在解都是搜尋空間中的一隻鳥,稱之為粒子。所有的粒子都有一個由被優化的函式決定的適值( fitness value) ,每個粒子還有一個速度決定它們飛翔的方向和距離。然後粒子們就追隨當前的最優粒子在解空間中搜索。

PSO初始化為一群隨機粒子(隨機解),然後通過迭代找到最優解。在每一次迭代中,粒子通過跟蹤兩個極值來更新自己;第一個就是粒子本身所找到的最優解,這個解稱為個體極值;另一個極值是整個種群目前找到的最優解,這個極值是全域性極值。另外也可以不用整個種群而只是用其中一部分作為粒子的鄰居,那麼在所有鄰居中的極值就是區域性極值。

    假設在一個clip_image002維的目標搜尋空間中,有clip_image004個粒子組成一個群落,其中第clip_image006個粒子表示為一個clip_image002[1]維的向量

clip_image009clip_image011

     第clip_image006[1]個粒子的“飛行 ”速度也是一個clip_image002[2]維的向量,記為

clip_image013clip_image015

     第clip_image006[2]個粒子迄今為止搜尋到的最優位置稱為個體極值,記為

clip_image018clip_image011[1]

     整個粒子群迄今為止搜尋到的最優位置為全域性極值,記為

clip_image021

      在找到這兩個最優值時,粒子根據如下的公式(2-1)和( 2-2)來更新自己的速度和位置:

clip_image023 (2-1)

clip_image025 (2-2)

     其中:clip_image027clip_image029為學習因子,也稱加速常數(acceleration constant),w為慣性因子,clip_image031clip_image033為[0,1]範圍內的均勻隨機數。式(2-1)右邊由三部分組成,第一部分為“慣性(inertia)”或“動量(momentum)”部分,反映了粒子的運動“習慣(habit)”,代表粒子有維持自己先前速度的趨勢;第二部分為“認知(cognition)”部分,反映了粒子對自身歷史經驗的記憶(memory)或回憶(remembrance),代表粒子有向自身歷史最佳位置逼近的趨勢;第三部分為“社會(social)”部分,反映了粒子間協同合作與知識共享的群體歷史經驗,代表粒子有向群體或鄰域歷史最佳位置逼近的趨勢, clip_image035,clip_image037是粒子的速度,clip_image039clip_image041是常數,由使用者設定用來限制粒子的速度。clip_image031[1]clip_image033[1]是介於clip_image045之間的隨機數。

2.3 標準粒子群演算法流程

    演算法的流程如下:

     Step1:初始化粒子群,包括群體規模clip_image004[1],每個粒子的位置clip_image048和速度clip_image050

     Step2:計算每個粒子的適應度值clip_image052

    Step3: 對每個粒子,用它的適應度值clip_image052[1]和個體極值clip_image054比較,如果clip_image056 ,則用clip_image058替換掉clip_image054[1]

    Step4: 對每個粒子,用它的適應度值clip_image058[1]和全域性極值clip_image061比較,如果clip_image056[1]則用clip_image052[2]clip_image061[1]

    Step5: 根據公式(2-1),(2-2)更新粒子的速度clip_image050[1]和位置clip_image048[1] ;

    Step6: 如果滿足結束條件(誤差足夠好或到達最大迴圈次數)退出,否則返回Step2。

clip_image065

圖2-1. PSO演算法流程圖

2.4 特點

       1、式(2-1)中第1部分可理解為粒子先前的速度或慣性;第2部份可理解為粒子的“認知”行為,表示粒子本身的思考能力;第3部分可理解為粒子的“社會”行為,表示粒子之間的資訊共享與相互合作。公式(2-2) 表示了粒子在求解空間中,由於相互影響導致的運動位置調整。整個求解過程中,加速因子clip_image027[1]clip_image029[1]和最大速度clip_image041[1]共同維護粒子對全域性和區域性搜尋能力的平衡。

       2、粒子群優化演算法初期,其解群隨進化代數表現了更強的隨機性,正是由於其產生了下一代解群的較大的隨機性,以及每代所有解的“資訊”的共享性和各個解的“自我素質”的提高。

       3、PSO 的一個優勢就是採用實數編碼,不需要像遺傳演算法一樣採用二進位制編碼(或者採用針對實數的遺傳操作) 。例如對於問題clip_image072求解, 粒子可以直接編碼為clip_image074 ,而適應度函式就是clip_image076 。

       4、粒子具有“記clip_image074[1]憶”的特性,它們通過“自我”學習和向“他人”學習,使其下一代解有針對性的從“先輩”那裡繼承更多的資訊,從而能在較短的時間內找到最優解。

       5、與遺傳演算法相比,粒子群優化演算法的資訊共享機制是很不同的:在遺傳演算法中,染色體互相共享資訊,所以整個種群的移動是比較均勻的向最優區域移動;在粒子群優化演算法中,資訊流動是單向的,即只有clip_image061[2]將資訊給其他的粒子,這使得整個搜尋更新過程跟隨當前解。

2.5 慣性權重線性遞減的粒子群演算法(PSO-W)

      探索是偏離原來的尋優軌跡去尋找一個更好的解,探索能力是一個演算法的全域性搜尋能力。開發是利用一個好的解,繼續原來的尋優軌跡去搜索更好的解,它是演算法的區域性搜尋能力。如何確定區域性搜尋能力和全域性搜尋能力的比例,對一個問題的求解過程很重要。1998年,Yuhui Shi[9]提出了帶有慣性權重的改進粒子群演算法。其進化過程為:

clip_image078 (2-3)

clip_image080 (2-4)

       在式(2-1)中,第一部分表示粒子先前的速度,用於保證演算法的全域性收斂效能;第二部分、第三部分則是使演算法具有區域性收斂能力。可以看出,式(2-3)中慣性權重clip_image082表示在多大程度上保留原來的速度。clip_image082[1]較大,全域性收斂能力強,區域性收斂能力弱;clip_image082[2]較小,區域性收斂能力強,全域性收斂能力弱。

clip_image084時,式(2-3)與式(2-1)完全一樣,表明帶慣性權重的粒子群演算法是基本粒子群演算法的擴充套件。實驗結果表明,clip_image082[3]clip_image086之間時,PSO演算法有更快的收斂速度,而當clip_image088時,演算法則易陷入區域性極值。

      由於較大的權重因子有利於跳出區域性最小點,便於全域性搜尋,而較小的慣性因子則有利於對當前的搜尋區域進行精確區域性搜尋,以利於演算法收斂,因此針對PSO演算法容易早熟以及演算法後期易在全域性最優解附近產生振盪現象,可以採用線性變化的權重,讓慣性權重從最大值clip_image090線性減小到最小值clip_image092。隨演算法迭代次數的變化公式為:

clip_image094 (2-5)

其中,clip_image090[1],clip_image092[1]分別表示clip_image098的最大值和最小值,t表示當前迭代步數,clip_image100表示最大迭代步數,通常取clip_image102,clip_image104.

2.6 帶收縮因子的粒子群演算法(PSO-X)

      學習因子cl和c2決定了微粒本身經驗資訊和其他微粒的經驗資訊對微粒執行軌跡的影響,反映了微粒群之間的資訊交流。設定c1較大的值,會使微粒過多地在區域性範圍內徘徊,而較大的c2的值,則又會促使微粒過早收斂到區域性最小值。微粒有效地控制微粒的飛行速度,使演算法達到全域性探測與區域性開採兩者間的有效平衡,Clerc構造了引入收縮因子的PSO模型,採用了壓縮因子,這種調整方法通過合適選取引數,可確保PSO演算法的收斂性,並可取消對速度的邊界限制。速度公式如下:

clip_image106 (2-6)

其中clip_image108稱為收縮因子,clip_image110clip_image112,且clip_image114

2.7測試模擬函式

    用2個單峰函式和2個多峰函式來測試以上三種演算法,求函式的最小值,

1.單峰函式-Sphere Model

函式表示式 clip_image116

全域性最優值 clip_image118

函式維數為2時的模型為:

clip_image120clip_image122

Sphere Model Schwefel’s Problem2.22

2.單峰函式 Schwefel’s Problem2.22

函式表示式 clip_image124

全域性最優值 clip_image126

3.病態函式Generalized Rosenbrock

函式表示式 clip_image128

全域性最優值 clip_image130

clip_image132 clip_image134

Generalized Rosenbrock Generalized Rastrigin

4.多峰函式Generalized Rastrigin 函式

函式表示式 clip_image136

全域性最優值 clip_image138

2.8測試結果

初始條件為粒子群數目為20,每個粒子維數為20,迭代1000次

clip_image140

圖2-2單峰函式Sphere Model 測試結果

clip_image142

圖2-3單峰函式Schwefel’s Problem2.22 測試結果

clip_image144

圖2-4病態函式Generalized Rosenbrock 測試結果

clip_image146

圖2-5多峰函式Generalized Rastrigin測試結果

表2-1 基本粒子群演算法、慣性權重線減粒子群演算法,帶收縮因子粒子群演算法輸出結果

函式

PSO

PS0-W

PSO-X

單峰

函式

clip_image148

最優值

0.0021(好解)

2.56E-05(好解)

2.45E-04(好解)

均值

0.0233

0.0084

0.0041

clip_image150

最優值

0.1129(差解)

0.0754(好解)

0.0849(好解)

均值

0.3304

0.1275

0.1011

病態函式

clip_image152

最優值

8.5907(差解)

7.7378(差解)

8.2623(差解)

均值

9.9060

8.4721

8.5427

多峰函式

clip_image154

最優值

1.2151(差解)

1.2344(差解)

0.8977(差解)

均值

3.4962

1.678

1.209

2.9測試結論

       從上圖2-2~2-5及表一我們可以知道,以上三種粒子群演算法,只對於單峰函式且非病態方程才能取得最優解,迭代次數越多,種群數目越多,得到的精度就會越高,但同時也會延長運算的時間,所以迭代次數和種群數需設定好,並且相對來說慣性權重線性遞減的粒子群演算法找到的解是最好的。

      然而對於多峰函式以及病態方程,以上三種粒子群演算法無法取得最好的解,無論是增加迭代次數還是種群數目,精度都不會有太大的改變,這就是基本粒子群一個最大的缺點,即容易陷入區域性最優解的位置,演算法容易早熟,對多峰函式或病態函式無法找到最優解,所以我們可以得出慣性權重線減粒子群演算法,帶收縮因子粒子群演算法改進的效果意義不大,演算法沒有本質上的改變,精度也無法提高很多。

      由於在我們實際生活中,大部份的優化問題都是多峰函式或病態函式,為了克服基本粒子群演算法的缺陷,我研究了以下四種改進的粒子群演算法:基於混沌思想改進的粒子群演算法、基於遺傳思想改進的混合粒子群演算法、基於免疫記憶和濃度機制改進的混合粒子群演算法.

相關推薦

標準粒子演算法PSOmatlab實現

標準PSO演算法的核心公式如下: 其中,w,c1,c2是預置好的: w稱為慣性權重,大小一般在[0.5,1.5]。 c1,c2稱為學習因子,一般取值[1,4],通常設定的c1=c2,但是c1與c2不必完全相同。 此實驗是在二維空間尋找最小值,設定多峰函式: z = x^2 + y-7c

標準粒子演算法PSO

2.1 粒子群演算法思想的起源       粒子群優化(Particle Swarm Optimization, PSO)演算法是Kennedy和Eberhart受人工生命研究結果的啟發、通過模擬鳥群覓食過程中的遷徙和群聚行為而提出的一種基於群體智慧的全域性隨機搜尋演算法,自然界中各種生物體均具有一定的

【尋優演算法粒子演算法PSO 引數尋優的python實現

【尋優演算法】粒子群演算法(PSO) 引數尋優的python實現 一、演算法原理 1、粒子群演算法的名詞解釋 2、粒子更新 二、PSO演算法引數尋優的python實現 參考資料 粒子群優化演算法(Particle

PSO】離散粒子演算法DPSO和離散二進位制粒子演算法BPSO

1. 什麼是離散粒子群演算法?普通粒子群演算法(Particle Swarm Optimization Algorithm,PSO)的粒子初始位置、更新速度都是連續函式,與之對應,位置和速度更新均為離散

【尋優演算法】量子粒子演算法QPSO 引數尋優的python實現

【尋優演算法】量子粒子群演算法(QPSO) 引數尋優的python實現 一、粒子群演算法的缺點 二、量子粒子群演算法 三、QPSO演算法的python實現 參考資料 一、粒子群演算法的缺點 本人之前的博文(參考資料【1】)已經詳細

粒子演算法

(一)背景介紹 1.1、人工生命 人工生命:研究具有某些生命基本特徵的人工系統。包括兩方面的內容:   1、研究如何利用計算技術研究生物現象;   2、研究如何利用生物技術研究計算問題。   此處關注的是第二點。已有很多源於生物現象的計算技巧,例如神經網絡和遺傳

粒子優化演算法PSO簡介及MATLAB實現

目錄 粒子群優化演算法概述 • 粒子群優化(PSO, particle swarm optimization)演算法是計算智慧領域,除了蟻群演算法,魚群演算法之外的一種群體智慧的優化演算法,該演算法最早由Kennedy和Eberhart在1995年提出的,

matlab學習筆記1——粒子優化演算法PSO的程式實現

     本文內容參考matlab R2016a完全自學一本通。     粒子群優化演算法(PSO)屬於進化演算法的一種,它從隨機解出發,通過迭代找到最優解。該演算法通過適應度來評價解的品質,並通過追隨當前搜尋到的最優值來尋找全域性最優。     假設在一個D維的目標搜尋空間

【智慧演算法粒子演算法Particle Swarm Optimization超詳細解析+入門程式碼例項講解

喜歡的話可以掃碼關注我們的公眾號哦,更多精彩盡在微信公眾號【程式猿聲】 01 演算法起源 粒子群優化演算法(PSO)是一種進化計算技術(evolutionary computation),1995 年由Eberhart 博士和kennedy 博士提出,源於對鳥群捕食的行為研究 。該演算法最初是受到飛鳥叢集

基本粒子優化演算法PSO的matlab實現

粒子群優化演算法是一種模擬鳥群社會行為的群體搜素演算法。它分為全域性最佳粒子優化和區域性最佳粒子優化,對於全域性最佳PSO,或者叫做gbest PSO,每個粒子的鄰域都是整個群,其演算法虛擬碼如下: 建立並初始化一個n維的粒子群 repeat for 每個粒子i=

粒子演算法(5)-----標準粒子演算法的實現

function [Result,OnLine,OffLine,MinMaxMeanAdapt]=PsoProcess(SwarmSize,ParticleSize,ParticleScope,InitFunc,StepFindFunc,AdaptFunc,IsStep,IsDraw,LoopCount,Is

進化演算法粒子PSO

概述: 正如其他的那些進化演算法一樣,粒子群演算法的靈感同樣來自於大自然。它由Eberhart和Kennedy共同提出的,其基本思想來自於他們早期對許多鳥類的群體行為進行建模模擬研究結果的啟發。 假設在一塊廣袤無垠的棲息地上有一群自由自在的鳥兒和一堆豐盛的食

【原】總tucao粒子演算法(PSO)解決旅行商問題(TSP)

粒子群演算法(PSO)是一套比較經典的演算法, 旅行商問題(TSP)同樣是一個經典的問題。如果想用PSO去解決TSP問題的話,那麼應該如何去解決呢? 初看之下一陣欣喜,因為我發現,如果按照論文中的方法能夠成功的話,那麼包括布穀鳥,螢火蟲都可以通過類似的辦法

PSO解決TSP問題粒子演算法解決旅行商問題--python實現

歡迎私戳關注這位大神! 有任何問題歡迎私戳我->給我寫信 首先來看一下什麼是TSP: The travelling salesman problem (TSP) asks the following question: "Given a list

MATLAB粒子優化演算法實現PSO

PSO(PSO——Particle Swarm Optimization)(基於種群的隨機優化技術演算法) 粒子群演算法模仿昆蟲、獸群、鳥群和魚群等的群集行為,這些群體按照一種合作的方式尋找食物,群體

C語言實現粒子算法PSO

計算 default img 第一個元素 1.4 best 實驗 atl 說過 上一回說了基本粒子群算法的實現,並且給出了C語言代碼。這一篇主要講解影響粒子群算法的一個重要參數---w。我們已經說過粒子群算法的核心的兩個公式為: Vid(k+1)=w*Vid(k)+c1*r

基於粒子演算法的概率神經網路實現多分類PSO_PNN

基於粒子群演算法的概率神經網路實現多分類:用粒子群演算法(PSO)實現概率神經網路中(PNN)的引數spread的最優化,並用PNN實現訓練並測試多類別資料,多分類效果很棒,有需要請聯絡[email protected],需要一定費用。

MATLAB R2018a 全域性優化工具箱學習粒子演算法

MATLAB R2018a全域性優化工具箱學習(三)粒子群演算法   粒子群演算法是無導數的一種演算法.PSO從這種模型中得到啟示並用於解決優化問題。在粒子群演算法中,每個優化問題的潛在解都是搜尋空間中的一隻鳥,稱之為粒子。所有的粒子都有一個由被優化的函式決定的適值(適應值),每個粒子

粒子演算法的matlab實現

clc;clear;close all; %% 初始化種群 f= @(x)x .* sin(x) .* cos(2 * x) - 2 * x .* sin(3 * x); % 函式表示式 figure(1);ezplot(f,[0,0.01,20]); N = 50;

粒子演算法的matlab實現

      上一次的部落格中我將粒子群的搜尋過程可視化了,並將其轉存為了gif格式檔案,這個過程我先在這裡給大家講一下: 1.首先pause(),是在每次繪圖之後暫停一段時間,單位是秒,再進行下一次繪圖; 2.而當要轉存為gif檔案時,這其實就是一種無聲的視訊檔案,因此我們