學習粒子群最佳化(PSO)程式設計

陳慶瀚

E-mail : pierre@isu.edu.tw

 

 

 

粒子群最佳化(Particle Swarm Optimization, PSO)是一種以族群動力學為基礎的最佳化方法,它的概念來自社會行為的模擬。在一個社會化的族群中,個體的行為不但會受到個體過去經驗和認知的影響,同時也會受到整體社會行為影響。在PSO每個粒子在搜尋空間中個自擁有其速度,並且根據自我過去經驗與群體行為進行機率事的搜尋策略調整,PSO相似於傳統式遺傳演算法突變的機制,但和典型的突變不同的地方在於它並非完全隨機的,從很多的研究結果顯示PSO可以快速的在問題空間找出最佳解,對於動態系統提供了一個高度適應性的最佳化方法。其演算法描述如下:

 

步驟1 問題的形式化。將D個參數最佳化的問題視為一個D維的求解空間,定義一個具有個粒子的族群,每個粒子的位置及速率均為D維的向量。

步驟2初始化。以隨機方式設定每個粒子的位置及其速率。

步驟3將粒子的位置代入求解問題評估函數以求得每個粒子的評估值。

步驟 4每一個粒子的評估值與該粒子所經歷的最佳評估值比較,假若新的評估值比粒子的最佳評估值佳,則以新的位置及評估值取代粒子的最佳解位置及評估值。

步驟 5每一個粒子的最佳評估值與群體的最佳評估值比較,假若粒子的最佳評估值比群體的最佳評估值佳,則以粒子的最佳解位置及評估值取代所有粒子的最佳解位置及評估值。

步驟 6使用下列式子改變個體的速率並移動粒子位置:

     

                   

其中為粒子的位置,為粒子的速度,為粒子最佳解位置,為所有粒子的最佳解位置,-11的亂數值,

步驟 7重複步驟3~步驟6,直到群體的最佳評估值符合我們的需求。

 

 

 


最精簡的PSO程式碼範例


 

#include <fstream.h>

#include <stdlib.h>

#include"randgen.h"

#define Dim 2  // Dimension of problem's search space

#define NumParticle 40  // Number of particles in population

#define max_cycle 100  // Maximum iteration cycle

#define C1 1.5

#define C2 1.5

 

void main()

{

// Variable Declaration

  float xLo[Dim],xHi[Dim];    // Lower bound and upper bound for each dimension

  float v[Dim][NumParticle],  //current velocity of particle

        x[Dim][NumParticle],  //current position of particle

        individual_optimal_fit[NumParticle], //individual optimal fitness

        individual_optimal_x[Dim][NumParticle], // individual optimal position

        social_optimal_fit,   // social optimal fitness     

        social_optimal_x[Dim]; // social optimal position

  fRan32 rand(123456789); // random number generator

 

// Initialization

  xLo[0]=-5;xHi[0]=5;xLo[1]=-5;xHi[1]=5;

  for(int i=0;i<Dim;i++)for(int j=0;j<NumParticle;j++)

  {

    x[i][j]=individual_optimal_x[i][j]=rand.Next(xLo[i],xHi[i]);

    v[i][j]=rand.Next(xLo[i]/20.,xHi[i]/20.);     

  }  

  for(int j=0;j<NumParticle;j++)individual_optimal_fit[j]=x[0][j]*x[0][j]+x[1][j]*x[1][j];

  social_optimal_fit=individual_optimal_fit[0];

  

// Optimization

  float fitness;

  for(int cycle=0;cycle<max_cycle;cycle++)

  {

    for(int j=0;j<NumParticle;j++)// Evaluate each particle

    {

      fitness=x[0][j]*x[0][j]+x[1][j]*x[1][j]; // evaluation function

      if(fitness>individual_optimal_fit[j])// Replace the individual optimal position

      {

        individual_optimal_fit[j]=fitness;

        individual_optimal_x[0][j]=x[0][j];

        individual_optimal_x[1][j]=x[1][j];    

      }      

    }

    for(int j=0;j<NumParticle;j++)// Replace the social optimal position

    {

       if(individual_optimal_fit[j]>social_optimal_fit)

       {

          social_optimal_fit=individual_optimal_fit[j];

          social_optimal_x[0]=individual_optimal_x[0][j];

          social_optimal_x[1]=individual_optimal_x[1][j];          

       }     

    }

    for(int i=0;i<Dim;i++)for(int j=0;j<NumParticle;j++)// Modify the velocity and position of particle

    {

       v[i][j]=v[i][j]+C1*rand.Next(-1.,1.)*(individual_optimal_x[i][j]-x[i][j])

              +C2*rand.Next(-1.,1.)*(social_optimal_x[i]-x[i][j]);

       x[i][j]=x[i][j]+v[i][j];

       if(x[i][j]>xHi[i])x[i][j]=xHi[i];

       if(x[i][j]<xLo[i])x[i][j]=xLo[i];

    }

  }

  ofstream out("result.txt");

  cout<<social_optimal_x[0]<<"\t"<<social_optimal_x[1]<<"\t"<<social_optimal_fit<<endl;

  out<<social_optimal_x[0]<<"\t"<<social_optimal_x[1]<<"\t"<<social_optimal_fit<<endl;

  system("PAUSE");   

}

謝孟媛 dvd -
情趣用品 -
飛鳥遊戲 -
遊戲基地 -
PATEK PHILIPPE -
xyz資訊工作坊 -
xyz軟體王 -
英文老師 -
沛納海 -
xyz軟體下載倉庫 -
基測試題 -
CARTIER 卡地亞 -
林晟數學 -
PIAGET -
費洛蒙情定 -
xyz -
軟體大補帖 -
高國華補習班 -
game淘 -
ps2台片 -
wii超級瑪莉攻略 -
情定費洛蒙 -
wii價格2011 -
xbox 360台片 -
tvgame360 -
愛馬仕 -
春藥專賣店 -
ps3價錢 2011 -
ps2遊戲王 -
wii遊戲片專賣店 -
百達翡麗 PATEK PHILIPPE -
壯陽藥品哪買 -
海賊王 -
春藥王 -
xyz軟體下載倉庫 -
壯陽食物 -
xbox360 -
催情藥 -
TISSOT 天梭 -
ps2遊戲燒錄 -
威而剛哪裡買 -
一夜情婦 -
xbox 360台片專賣 -
國中基測題庫 -
無雙遊戲網 -
xyz軟體王 -
ps2遊戲片80元 -
基測 -
xyz軟體王下載 -
GUCCI 古馳 -
南一題庫網 -
COACH -
LOUIS VUITTON -
wii超級瑪莉 -
wii價格2011 -
魔法老師 -
催情藥專賣店 -
國小翰林題庫網 -
wii遊戲片專賣店 -
遊戲天堂 -
寶格麗 -
金榜之路 -
wii遊戲片80元 -
xbox 360遊戲片 -
wii遊戲載點 -
人類費洛蒙情定 -
xbox 360台片專賣 -
催情王 -
xyz軟體之家 -
ps2遊戲片80元 -
情色小站 -
微風廣場 -
情慾之夜 -
民視文化 -
xbox360 -
蔻馳 -
ps2遊戲燒錄 -
ps3遊戲片 -
龍騰高中題庫 -
ps3台片 -
威而剛 -
ps3價錢 2011 -
軟體王下載 -
蕭邦 CHOPARD -
龍騰 -
催情藥 -
威而剛哪裡買 -
基測題目 -
HERMES 愛馬仕 -
情定費洛蒙 -
ps2台片 -
ps3遊戲片 -
wii瑪莉兄弟遊戲 -
江詩丹頓 Vacheron Constantin -
wii超級瑪莉 -
wii遊戲片在ho99小舖 -
春藥王 -
歷屆基測試題 -
窮人軟體 -
威而柔哪裡買 -
蕭邦 -
翰林題庫網 -
一夜情婦 -
wii遊戲下載 -
xbox 360遊戲 -
壯陽食物 -
ps2遊戲片 -
sogo百貨 -
台灣情色網 -
xyz軟體王下載 -
lv2011官方網 -
wii遊戲片專賣店 -
xbox 360價錢 -
歐米茄 -
雷達錶 RADO -
xyz資訊工坊 -
儒林補習班 -
壯陽藥品 -
xyz軟體王 -
窮人遊戲 -
ps2遊戲下載 -
ps3台片 -
德周 -
sogo百貨 -
費洛蒙情定 -
壯陽藥品哪買 -
催情王 -
春藥哪裡買 -
lv2011夏季新款 -
情趣用品 -
中友百貨 -
史萊姆的第一個家 -
情色論壇 -
萬寶龍 MONT BLANC -
萬國 -
ps2遊戲下載 -
春藥哪裡買 -
xyz資訊工作坊 -
龍騰文化 -
太平洋百貨 -
軟體王 -
xbox 360台片專賣 -
ps3遊戲片在ho99小舖 -
壯陽藥 -
xyz軟體銀行 -
xbox360台片 -
魔法24 -
wii遊戲片80元 -
XYZ資訊工坊 -
CARTIER -
春藥網 -
壯陽 -
xyz 軟體補給站 -
微風廣場 -
lv2011新款型錄 -
xbox 360遊戲 -
費洛蒙 -
卡地亞 -
wii遊戲下載 -
窮人天碟 -
春藥專賣店 -
gucci2011專賣店旗艦店 -
迪奧 -
CHANEL -
xyz軟體大本營 -
xbox 360遊戲片在ho99小舖 -
台北郵購網 -
BURBERRY 巴寶莉 -
伯爵 -
遠東百貨 -
陳希 -
費洛蒙mx -
時間廣場 -
漢神百貨 -
情色論壇 -
傳政 -
軟體 -
寶格麗 BVLGARI -
名牌包俱樂部 -
時間廣場 -
威而柔 -
wii瑪莉兄弟遊戲 -
lv名牌包專賣店 -
xyz軟體大本營 -
威而柔哪裡買 -
伯爵 PIAGET -
xyz軟體銀行 -
ps3遊戲下載 -
wii超級瑪莉歐 -
無名套裝 -
xyz軟體下載倉庫 -
江詩丹頓 -
林晟 -
ps3遊戲片在ho99小舖 -
威而剛 -
費洛蒙mx -
xyz軟體之家 -
HERMES -
林晟超理解數學 -
謝孟媛 -