粒子群演算法python實現

2021-06-09 03:36:00 字數 3693 閱讀 7975

1、 概述

粒子群演算法作為一種優化演算法,在很多領域都有應用。所謂優化,我的理解是對乙個問題求出它足夠好的解,目前的優化演算法有很多,如蟻群演算法、遺傳演算法等。粒子群演算法相對於這些演算法來說,它更簡單,而且有很快的收斂速度。

2、 演算法描述

舉乙個優化問題的例子,若求

粒子群演算法思想**於實際生活中鳥捕食的過程。假設在乙個n

維的空間中,有一群鳥(

m只)在捕食,食物位於

n維空間的某個點上,對於第

i只鳥某一時刻來說,有兩個向量描述,乙個是鳥的位置向量

)。假設鳥能夠判斷乙個位置的好壞,所謂「好壞」,就是離食物更近了還是更遠了。鳥在捕食的過程中會根據自己的經驗以及鳥群中的其他鳥的位置決定自己的速度,根據當前的位置和速度,可以得到下一刻的位置,這樣每只鳥通過向自己和鳥群學習不斷的更新自己的速度位置,最終找到食物,或者離食物足夠近的點。更新速度和位置的表示式如下。

更新速度:

對應的python實現如下:

import random

import copy

birds=int(raw_input('enter count of bird: '))

xcount=int(raw_input('enter count of x: '))

pos=

speed=

bestpos=

birdsbestpos=

w=0.8

c1=2

c2=2

r1=0.6

r2=0.3

for i in range(birds):

def generaterandvec(list):

for i in range(xcount):

def caldis(list):

dis=0.0

for i in list:

dis+=i**2

return dis

for i in range(birds): #initial all birds' pos,speed

generaterandvec(pos[i])

generaterandvec(speed[i])

bestpos[i]=copy.deepcopy(pos[i])

def findbirdsmostpos():

best=caldis(bestpos[0])

index=0

for i in range(birds):

temp=caldis(bestpos[i])

if temp

enter count of bird: 30

enter count of x: 5

6300.0

6300.0

5286.56

253.7792

253.7792

169.750784

169.750784

29.27174656

29.27174656

14.3572668416

14.3572668416

10.7095755489

10.7095755489

10.4166336974

10.4166336974

10.3952346067

10.3952346067

10.38162211

10.38162211

10.38162211

10.38162211

10.38162211

10.38162211

10.3816078435

10.3816078435

10.3815990193

10.3815990193

10.3815990193

10.3815990193

10.3815990193

10.3815990193

10.3815990038

8.61600314002

6.75814610104

0.697031173541

0.697031173541

0.586257672539

0.319653330666

0.308201304448

0.277551198357

0.152964935388

0.11330877896

0.0897094795931

0.0849797134585

0.0824510053969

0.0824510053969

0.0817642679444

0.0293278926344

0.0101946030255

0.0101946030255

0.00880640894843

0.00517872172034

0.00517872172034

0.00517872172034

0.00517872172034

0.00517872172034

0.00514217487311

0.00511832820187

0.00510609755302

0.00510609755302

0.00510609755302

0.0039233096712

0.00319253923712

0.00142224947992

0.000847531318472

0.000682710187325

0.000126289737569

0.000126289737569

0.000109415873528

0.000109415873528

0.000106080598721

0.000106080598721

0.000105801137376

0.000105801137376

0.000105654750511

0.000105654750511

0.000105654750511

0.000105654750511

0.000105654750511

0.000105654750511

0.000105653808938

0.000105653808938

0.000105653808938

7.63547737464e-05

2.56599311271e-05

6.88805040513e-06

6.88805040513e-06

2.93943099726e-07

2.93943099726e-07

2.93943099726e-07

1.65997040259e-07

1.49983822855e-07

1.45620647032e-07

1.30809105417e-07

1.30631326401e-07

1.29726054702e-07

1.2360770395e-07

1.2360770395e-07

1.2360770395e-07

1.23467030689e-07

粒子群演算法實現之python

python實現粒子群演算法 粒子群演算法 pso 又可以叫做鳥群演算法,是學者觀察模仿鳥群的行為而發展的一種智慧型搜尋演算法,和遺傳演算法一樣,也是一種群智慧型演算法。總的來說,粒子群演算法也是一種進化演算法,粒子分布在空間中,粒子在空間中的座標組成的向量可以看做成遺傳演算法中的個體,或者是鳥群中...

粒子群演算法的python實現

粒子群演算法主要是求解路徑最優化這一類的問題,具體內容可以檢視其它資料。第一次接觸粒子群是在 高階人工智慧 這門課上,當時課堂上布置了乙個求解多項式最優解的問題,正好同時也在學習python這門語言,於是在課下實現了求解 也算是第一段個人正式的python 吧,如下 import random c1...

粒子群優化演算法 粒子群演算法

粒子群演算法 particle swarm optimization,pso 屬於進化演算法的一種,該演算法最初是受到飛鳥集群活動的規律性啟發,進而利用群體智慧型建立的乙個簡化模型。粒子群演算法在對動物集群活動行為觀察基礎上,利用群體中的個體對資訊的共享使整個群體的運動在問題求解空間中產生從無序到有...