例子種群演算法

2021-08-29 20:47:35 字數 3565 閱讀 9943

粒子群優化演算法(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 所取時間...