數(shù)學建模之粒子群算法(PSO)

1.概念理解

Boid(bird-bid)模型
①沖突避免(collision avoidance):群體在一定空間移動拨黔,個體有自己的移動意志舔示,但不能影響其他個體移動,避免碰撞與爭執(zhí)算行。
②速度匹配(velocity matching):個體必須配合中心移動速度努释,不管在方向、距離與速率上都必須相互配合疫鹊。
③群體中心(flock centering):個體將會向群體中心移動袖瞻,配合群體中心向目標前進。

粒子群算法(particle swarm optimization,PSO)就是依托該模型尋找最優(yōu)值的拆吆。
群鳥覓食與人類決策的過程很相似聋迎。人在決策的時候通常會綜合兩種重要的信息:①自己的經(jīng)驗②別人的經(jīng)驗。同樣的锈拨,群鳥在覓食的時候砌庄,每只鳥一開始都不知道食物在哪里羹唠,但是通過群內(nèi)信息共享和個體覓食經(jīng)驗的積累奕枢,它們會自發(fā)聚集成一個群落,每只鳥能記住自己找到的最好位置佩微,稱為“局部最優(yōu)”缝彬,還能記住群鳥整個整體能找到的最好位置,稱為“全局最優(yōu)”哺眯,整個鳥群的覓食中心都趨向全局最優(yōu)移動谷浅,這在生物學上稱之為“同步效應”

在群鳥覓食模型中奶卓,每個個體都可以被看成一個粒子一疯,則鳥群可以被看成一個粒子群。

2.算法實現(xiàn)步驟

①初始化粒子群(速度和位置)夺姑、慣性因子墩邀、加速常數(shù)、最大迭代次數(shù)和算法終止的最小允許誤差盏浙。
②計算每個粒子的初始適應值眉睹。
③找出個體和群體最優(yōu)值和對應的位置。
④更新每個粒子的速度和位置废膘,分別依據(jù)公式(8-1)竹海、(8-2)

⑤比較當前各粒子的適應值是否比歷史局部最優(yōu)值好,如果好丐黄,就更新粒子的局部最優(yōu)值和對應位置斋配。
⑥找出當前粒子群眾的全局最優(yōu)值和對應的位置。
⑦重復步驟4~6,直到滿足設定的最小誤差或達到最大迭代次數(shù)艰争。
⑧輸出粒子群全局最優(yōu)值和對應位置十偶,以及各粒子的局部最優(yōu)值和對應位置。

3.舉例

function main()
    clc;clear all;close all;
    tic;                             %程序運行計時
    E0=0.001;                        %允許誤差
    MaxNum=100;                      %粒子最大迭代次數(shù)
    narvs=1;                         %目標函數(shù)的自變量個數(shù)
    particlesize=30;                 %粒子群規(guī)模
    c1=2;                            %每個粒子的個體學習因子园细,也稱為加速常數(shù)
    c2=2;                            %每個粒子的社會學習因子惦积,也稱為加速常數(shù)
    w=0.6;                           %慣性因子
    vmax=0.8;                        %粒子的最大飛翔速度
    x=-5+10*rand(particlesize,narvs);%粒子所在的位置
    v=2*rand(particlesize,narvs);    %粒子的飛翔速度
    %目標函數(shù)是:y=1+(2.1*(1-x+2*x.^2).*exp(-x.^2/2))
    fitness=@(x)1/(1+(2.1*(1-x+2*x.^2).*exp(-x.^2/2))); %定義適應度函數(shù)
    for i=1:particlesize
        for j=1:narvs
            f(i)=fitness(x(i,j));
        end
    end
    personalbest_x=x;
    personalbest_faval=f;
    [globalbest_faval, i]=min(personalbest_faval);
    globalbest_x=personalbest_x(i,:);
    k=1;
    while k<=MaxNum
        for i=1:particlesize
            for j=1:narvs
                f(i)=fitness(x(i,j));
            end
            if f(i)<personalbest_faval(i) %判斷當前位置是否是歷史上最佳位置
                personalbest_faval(i)=f(i);
                personalbest_x(i,:)=x(i,:);
            end
        end
        [globalbest_faval, i]=min(personalbest_faval);
        globalbest_x=personalbest_x(i,:);
        for i=1:particlesize %更新粒子群里每個個體的最新位置
            v(i,:)=w*v(i,:)+c1*rand*(personalbest_x(i,:)-x(i,:))...
                +c2*rand*(globalbest_x-x(i,:));
            for j=1:narvs    %判斷粒子的飛翔速度是否超過了最大飛翔速度
                if v(i,j)>vmax
                    v(i,j)=vmax;
                elseif v(i,j)<-vmax
                    v(i,j)=-vmax;
                end
            end
            x(i,:)=x(i,:)+v(i,:);
        end
        if abs(globalbest_faval)<E0,break,end
        k=k+1;
    end
    Value1=1/globalbest_faval-1; Value1=num2str(Value1);
    % strcat指令可以實現(xiàn)字符的組合輸出
    disp(strcat('the maximum value','=',Value1));
    % 輸出最大值所在的橫坐標位置
    Value2=globalbest_x; Value2=num2str(Value2);
    disp(strcat('the corresponding coordinate','=',Value2));
    x=-5:0.01:5;
    y=2.1*(1-x+2*x.^2).*exp(-x.^2/2);
    plot(x,y,'m-','linewidth',3);
    hold on;
    plot(globalbest_x,1/globalbest_faval-1,'kp','linewidth',4);
    legend('目標函數(shù)','搜索到的最大值');xlabel('x');ylabel('y');grid on;
    toc;                          %和上面的tic配合計算程序運行時間 

輸出

the maximum value=5.1985
the corresponding coordinate=-1.1617
歷時 3.184141 秒。
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末猛频,一起剝皮案震驚了整個濱河市狮崩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鹿寻,老刑警劉巖睦柴,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異毡熏,居然都是意外死亡坦敌,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進店門痢法,熙熙樓的掌柜王于貴愁眉苦臉地迎上來狱窘,“玉大人,你說我怎么就攤上這事财搁≌赫ǎ” “怎么了?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵尖奔,是天一觀的道長搭儒。 經(jīng)常有香客問我,道長提茁,這世上最難降的妖魔是什么淹禾? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮茴扁,結果婚禮上铃岔,老公的妹妹穿的比我還像新娘。我一直安慰自己丹弱,他們只是感情好德撬,可當我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著躲胳,像睡著了一般蜓洪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上坯苹,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天隆檀,我揣著相機與錄音,去河邊找鬼。 笑死恐仑,一個胖子當著我的面吹牛泉坐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播裳仆,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼腕让,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了歧斟?” 一聲冷哼從身側響起纯丸,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎静袖,沒想到半個月后觉鼻,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡队橙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年坠陈,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片捐康。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡仇矾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出吹由,到底是詐尸還是另有隱情若未,我是刑警寧澤朱嘴,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布倾鲫,位于F島的核電站,受9級特大地震影響萍嬉,放射性物質發(fā)生泄漏乌昔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一壤追、第九天 我趴在偏房一處隱蔽的房頂上張望磕道。 院中可真熱鬧,春花似錦行冰、人聲如沸溺蕉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽疯特。三九已至,卻和暖如春肛走,著一層夾襖步出監(jiān)牢的瞬間漓雅,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留邻吞,地道東北人组题。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像抱冷,于是被迫代替她去往敵國和親崔列。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,689評論 2 354

推薦閱讀更多精彩內(nèi)容