日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

PSO 粒子群优化算法

發布時間:2023/12/10 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PSO 粒子群优化算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

粒子群優化算法(PSO)

Particle Swarm Optimization

1、 算法起源

粒子群優化算法(PSO)是一種進化計算技術(evolutionary computation),1995 年由Eberhart 博士和kennedy 博士提出,源于對鳥群捕食的行為研究 。該算法最初是受到飛鳥集群活動的規律性啟發,進而利用群體智能建立的一個簡化模型。粒子群算法在對動物集群活動行為觀察基礎上,利用群體中的個體對信息的共享使整個群體的運動在問題求解空間中產生從無序到有序的演化過程,從而獲得最優解。

2、 算法描述

2.1、 百科定義

粒子群算法,也稱粒子群優化算法或鳥群覓食算法(Particle Swarm Optimization),縮寫為 PSO, 是近年來由J. Kennedy和R. C. Eberhart等開發的一種新的進化算法(Evolutionary Algorithm - EA)。PSO 算法屬于進化算法的一種,和模擬退火算法相似,它也是從隨機解出發,通過迭代尋找最優解,它也是通過適應度來評價解的品質,但它比遺傳算法規則更為簡單,它沒有遺傳算法的“交叉”(Crossover) 和“變異”(Mutation) 操作,它通過追隨當前搜索到的最優值來尋找全局最優。這種算法以其實現容易、精度高、收斂快等優點引起了學術界的重視,并且在解決實際問題中展示了其優越性。粒子群算法是一種并行算法。

2.2、 通俗點描述

如同前面的描述,PSO模擬的是鳥群的捕食行為。設想這樣一個場景:一群鳥在隨機搜索食物。在這個區域里只有一塊食物。所有的鳥都不知道食物在那里。但是他們知道當前的位置離食物還有多遠。那么找到食物的最優策略是什么呢。最簡單有效的就是搜尋目前離食物最近的鳥的周圍區域。

鳥群在整個搜尋的過程中,通過相互傳遞各自的信息,讓其他的鳥知道自己的位置,通過這樣的協作,來判斷自己找到的是不是最優解,同時也將最優解的信息傳遞給整個鳥群,最終,整個鳥群都能聚集在食物源周圍,即找到了最優解。

PSO中,每個優化問題的解都是搜索空間中的一只鳥。我們稱之為“粒子”。所有的粒子都有一個由被優化的函數決定的適應值(fitness value),每個粒子還有一個速度決定他們飛翔的方向和距離。然后粒子們就追隨當前的最優粒子在解空間中搜索。

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

3、 粒子的屬性

3.1 算法核心

粒子群算法通過設計一種無質量的粒子來模擬鳥群中的鳥,粒子僅具有兩個屬性:速度和位置,速度代表移動的快慢,位置代表移動的方向。

鳥被抽象為沒有質量和體積的微粒(點),并延伸到N維空間,粒子i在N維空間的位置表示為矢量Xi=(x1,x2,…,xN),飛行速度表示為矢量Vi=(v1,v2,…,vN)。每個粒子都有一個由目標函數決定的適應值(fitness value),并且知道自己到目前為止發現的最好位置(pbest)和現在的位置Xi。這個可以看作是粒子自己的飛行經驗。除此之外,每個粒子還知道到目前為止整個群體中所有粒子發現的最好位置(gbest)(gbest是pbest中的最好值),這個可以看作是粒子同伴的經驗。粒子就是通過自己的經驗和同伴中最好的經驗來決定下一步的運動。

3.2 速度和位置的更新

PSO初始化為一群隨機粒子(隨機解)。然后通過迭代找到最優解。在每一次的迭代中,粒子通過跟蹤兩個“極值”(pbest,gbest)來更新自己。在找到這兩個最優值后,粒子通過下面的公式來更新自己的速度和位置。

第①部分稱為【記憶項】,表示上次速度大小和方向的影響;

第②部分稱為【自身認知項】,是從當前點指向粒子自身最好點的一個矢量,表示粒子的動作來源于自己經驗的部分;

第③部分稱為【群體認知項】,是一個從當前點指向種群最好點的矢量,反映了粒子間的協同合作和知識共享。粒子就是通過自己的經驗和同伴中最好的經驗來決定下一步的運動。

以上面兩個公式為基礎,再來看一個公式:

4、 標準PSO算法流程

4.1、 標準PSO算法的流程

1)初始化一群微粒(群體規模為N),包括隨機位置和速度;

2)評價每個微粒的適應度;

3)對每個微粒,將其適應值與其經過的最好位置pbest作比較,如果較好,則將其作為當前的最好位置pbest;

4)對每個微粒,將其適應值與其經過的最好位置gbest作比較,如果較好,則將其作為當前的最好位置gbest;

5)根據公式(2)、(3)調整微粒速度和位置;

6)未達到結束條件則轉第2)步。

迭代終止條件根據具體問題一般選為最大迭代次數Gk或(和)微粒群迄今為止搜索到的最優位置滿足預定最小適應閾值。

4.2、 PSO流程圖解

4.3、 學習因子c1、c2分析

公式(2)和(3)中pbest和gbest分別表示微粒群的局部和全局最優位置。

  • 當C1=0時,則粒子沒有了認知能力,變為只有社會的模型(social-only):

vi=ω×vi+c2×rand()×(gbesti?xi)v_i = \omega × v_i+c_2 × rand() × (gbest_i - x_i) vi?=ω×vi?+c2?×rand()×(gbesti??xi?)

? 稱為全局PSO算法。粒子有擴展搜索空間的能力,具有較快的收斂速度,但由于缺少局部搜 索,對于復雜問題 比標準PSO 更易陷入局部最優。

  • 當C2=0時,則粒子之間沒有社會信息,模型變為只有認知(cognition-only)模型:

vi=ω×vi+c1×rand()×(pbesti?xi)v_i = \omega × v_i+c_1 × rand() × (pbest_i - x_i) vi?=ω×vi?+c1?×rand()×(pbesti??xi?)

? 稱為局部PSO算法。由于個體之間沒有信息的交流,整個群體相當于多個粒子進行盲目的隨 機搜索,收斂速度慢,因而得到最優解的可能性小。

5、代碼實操

找到三維圖示的最高點坐標:

% 函數表達式 function y = fit( x )y = 3*(1-x(1)).^2.*exp(-(x(1).^2) - (x(2)+1).^2) - 10*(x(1)/5 - x(1).^3 - x(2).^5).*exp(-x(1).^2-x(2).^2) - 1/3*exp(-(x(1)+1).^2 - x(2).^2); end % main.m clc clear close all %% 參數初始化 c1 = 1.5; % 學習因子 c2 = 1.5; w=0.7; % 慣性權重 D=2; % 粒子維度 maxgen = 20; % 迭代次數 sizepop = 5; % 種群大小 Vmax = 1.5; % 速度的范圍 Vmin = -1.5; popmax = 3; % 搜索的范圍 popmin = -3; %% 種群初始化 for i = 1:sizepop% 隨機產生一個種群pop(i,:) = rand(1,D)*2*popmax-popmax; % 初始化位置V(i,:) = 0.5 * rands(1,D); % 初始化速度% 適應度計算fitness(i) = fit(pop(i,:)); end %% 個體極值和群體極值 [bestfitness,bestindex] = max(fitness); % 默認將第一代的最大適應度值設置為最佳 zbest = pop(bestindex,:); % 全局最佳 gbest = pop; % 個體最佳 fitnessgbest = fitness; % 個體最佳適應度值 fitnesszbest = bestfitness; % 全局最佳適應度值 %% 迭代尋優 for i = 1: maxgenfor j = 1:sizepop% 速度更新V(j,:) = w*V(j,:) + c1*rand*(gbest(j,:) - pop(j,:)) + c2*rand*(zbest - pop(j,:)); % 速度越界檢查V(j,find(V(j,:)>Vmax)) = Vmax; V(j,find(V(j,:)<Vmin)) = Vmin;% 種群更新pop(j,:) = pop(j,:) + V(j,:);% 個體范圍越界檢查pop(j,find(pop(j,:)>popmax)) = popmax;pop(j,find(pop(j,:)<popmin)) = popmin;% 適應度值計算fitness(j) = fit(pop(j,:)); endfor j = 1:sizepop% 個體最優更新if fitness(j) > fitnessgbest(j)gbest(j,:) = pop(j,:);fitnessgbest(j) = fitness(j);end% 全局最優更新if fitness(j) > fitnesszbestzbest = pop(j,:);fitnesszbest = fitness(j);endend % 記錄每一代的最優值bestx(i) = zbest(1);besty(i) = zbest(2);yy(i) = fitnesszbest; disp(['迭代次數:',num2str(i),',最大值為:',num2str(yy(i)),',坐標:',num2str(bestx(i)),',',num2str(besty(i))]); end %% 輸出結果并繪圖x = -3:0.01:3; y = -3:0.01:3; [X,Y]=meshgrid(x,y); z = 3*(1-X).^2.*exp(-(X.^2) - (Y+1).^2) - 10*(X/5 - X.^3 - Y.^5).*exp(-X.^2-Y.^2) - 1/3*exp(-(X+1).^2 - Y.^2); mesh(x,y,z); hold on plot3(bestx,besty,yy,'r.','MarkerSize',10);

輸出結果:

紅點為每輪迭代的最優粒子點。

總結

以上是生活随笔為你收集整理的PSO 粒子群优化算法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。