粒子群優化演算法(pso:particle swarm optimization) 是一種進化計算技術(evolutionary computation)。
源於對鳥群捕食的行為研究。粒子群優化演算法的基本思想:是通過群體中個體之間的協作和資訊共享來尋找最優解.
pso的優勢:在於簡單容易實現並且沒有許多引數的調節。目前已被廣泛應用於函式優化、神經網路訓練、模糊系統控制以及其他遺傳演算法的應用領域。
鳥被抽象為沒有質量和體積的微粒(點),並延伸到n維空間,粒子i在n維空間的位置表示為向量xi=(x1,x2,…,xn),飛行速度表示為向量vi=(v1,v2,…,vn)。每個粒子都有乙個由目標函式決定的適應值(fitness value),並且知道自己到目前為止發現的最好位置(pbest)和現在的位置xi。這個可以看作是粒子自己的飛行經驗。除此之外,每個粒子還知道到目前為止整個群體中所有粒子發現的最好位置(gbest)(gbest是pbest中的最好值),這個可以看作是粒子同伴的經驗。粒子就是通過自己的經驗和同伴中最好的經驗來決定下一步的運動。
pso初始化為一群隨機粒子(隨機解)。然後通過迭代找到最優解。在每一次的迭代中,粒子通過跟蹤兩個「極值」(pbest,gbest)來更新自己。在找到這兩個最優值後,粒子通過下面的公式來更新自己的速度和位置。
公式(1)的第一部分稱為【記憶項】,表示上次速度大小和方向的影響;公式(1)的第二部分稱為【自身認知項】,是從當前點指向粒子自身最好點的乙個向量,表示粒子的動作**於自己經驗的部分;公式(1)的第三部分稱為【群體認知項】,是乙個從當前點指向種群最好點的向量,反映了粒子間的協同合作和知識共享。粒子就是通過自己的經驗和同伴中最好的經驗來決定下一步的運動。
以上面兩個公式為基礎,形成了pso的標準形式。
公式(2)和 公式(3)被視為標準pso演算法。
/***
* 計算y=-x(x-1)的最大值
* 取值範圍x--[-2,2]
* @author breezedust
* */
public class psotest
system.out.println("start gbest:"+gbest);
}public double getmax(double a,double b)
//粒子群演算法
public void pso(int max)
fitnessfunction();
//更新個體極值和群體極值
for(int j=0;jgbest) gbest=pbest[j];
system.out.println(x[j]+" "+v[j]);
}system.out.println("*****="+(i+1)+"*****=gbest:"+gbest);}}
public static void main(string args)
}
輸出結果
start gbest:0.0
-0.4 0.1
0.0 -10.751668729351186
*****=1*****=gbest:0.0
-0.6822365786740794 -0.2822365786740793
0.0 -5.375834364675593
*****=2*****=gbest:0.0
-0.5822365786740794 0.1
0.0 -2.6879171823377965
*****=3*****=gbest:0.0
-0.48223657867407943 0.1
-1.3439585911688983 -1.3439585911688983
*****=4*****=gbest:0.0
-0.38223657867407945 0.1
-1.2439585911688982 0.1
*****=5*****=gbest:0.0
-0.47659030560462123 -0.09435372693054181
-1.143958591168898 0.1
*****=6*****=gbest:0.0
-0.37659030560462126 0.1
-1.043958591168898 0.1
*****=7*****=gbest:0.0
-0.2765903056046213 0.1
-0.943958591168898 0.1
*****=8*****=gbest:0.0
-0.27903394174424034 -0.0024436361396190653
-0.843958591168898 0.1
*****=9*****=gbest:0.0
-0.38899022876058803 -0.10995628701634769
-0.7439585911688981 0.1
*****=10*****=gbest:0.0
-0.35250959144436234 0.03648063731622572
-0.6439585911688981 0.1
*****=11*****=gbest:0.0
........
........
........
........
0.9999990975760489 -1.556071309835406e-6
*****=98*****=gbest:1.0
1.0000000029937202 4.411275849326098e-9
1.0000001827158205 1.085139771533034e-6
*****=99*****=gbest:1.0
0.9999999993730952 -3.6206249540206964e-9
1.0000001197322141 -6.298360633295484e-8
*****=100*****=gbest:1.0
結果分析
我們可以從列印的資料看出來,剛開始x[0]和x[1]分散在最大值兩邊,然後x[0]和x[1]逐漸聚集到1的周圍,這裡,我們已經收斂到x=1這個地方了,這正是我們要求的最大值,其最大值為1,下面是**過程。
1.初始狀態
2.第二次x[1]向左邊移動了
3.最後,兩點聚集在1上,上面多個圈是他們聚集的過程,可以看出來,聚集過程是個越來越密集的過程。
認識多種群遺傳演算法
多種群遺傳演算法是自己寫 用的智慧型演算法,遺傳演算法的高階版。其流程圖如下 其中sga即為普通的標準遺傳演算法,可見多種群遺傳演算法中展開的多種群由不同控制引數的sga來保持種群的差異化。控制引數為交叉概率p c和變異概率p m,其值決定了演算法全域性搜尋和區域性搜尋能力的均衡,可按下式計算 式中...
種群競爭模型
種群競爭模型是當兩個種群為爭奪同一食物 和生存空間相互競爭時,常見的結局是,優勝劣汰。使用種群競爭模型可以描述兩個種群相互競爭的過程,分析產生各種結局的條件。種群競爭模型 import numpy as np import matplotlib.pyplot as plt from scipy.in...
數學模型演算法實現之種群競爭模型
fun.m function dx fun t,x,r1,r2,n1,n2,s1,s2 r1 1 r2 1 n1 100 n2 100 s1 0.5 s2 2 dx r1 x 1 1 x 1 n1 s1 x 2 n2 r2 x 2 1 s2 x 1 n1 x 2 n2 p3.m h 0.1 所取時間...