原 粒子群演算法 PSO 的簡單應用

2021-08-26 02:24:02 字數 2488 閱讀 8212

目錄:

1.3 流程圖

2. 簡單的pso例子(python 實現)

參考資料

之前寫到優化的基本思想,裡面提到了智慧型演算法。目前有些學者對這些演算法並不認可,但是實際使用中,在維度比較低的情況下,群智慧型演算法確實能以很高的找到近似解。

這篇以我最熟悉的pso開始,以demo的方式來**群智慧型演算法的使用。

pso是粒子群優化演算法(–particle swarm optimization)的英文縮寫,是一種基於種群的隨機優化技術,由eberhart和kennedy於2023年提出。粒子群演算法模仿昆蟲、獸群、鳥群和魚群等的群集行為,這些群體按照一種合作的方式尋找食物,群體中的每個成員通過學習它自身的經驗和其他成員的經驗來不斷改變其搜尋模式。

1.2.1 簡述

每個尋優的問題解都被想像成乙隻鳥,稱為「粒子」。所有粒子都在乙個d維空間進行搜尋。

- 所有的粒子都由乙個fitness-function確定適應值以判斷目前的位置好壞。

- 每乙個粒子必須賦予記憶功能,能記住所搜尋到的最佳位置。

- 每乙個粒子還有乙個速度以決定飛行的距離和方向。這個速度根據它本身的飛行經驗以及同伴的飛行經驗進行動態調整。

1.2.2 基本pso演算法

st=>start: 開始

e=>end: 結束

init=>operation: 初始化粒子種群

fit=>operation: 計算適應度

update=>operation: 按全域性最優和歷史最優迭代粒子位置

cond=>condition: 滿足結束條件?

st->init->fit->updata->cond

cond(yes)->e

cond(no)->fit

import numpy as np

deffun

(vars):

x, y = vars

if0<= x <= 2 * np.pi and

0<= y <= 2 * np.pi:

return -np.cos(x) - np.sin(y) + 10

else:

return -10

# 返回乙個達不到的小值

這裡我們注意到,在邊界處理上,我們返回了乙個較小值,而並非負無窮(-inf),是為了避免出現速度很大導致的越界。

然後我們可以呼叫snowland-algorithm工具包,進行求解

# 使用前請安裝檔案

# pip install snowland-algorithm

# 確保版本號大於0.0.2

from slapy.swarm.pso import psoengine

if __name__ == '__main__':

engine = psoengine(vmax=0.01, bound=[[0, 2 * np.pi]], min_fitness_value=-1, dim=2, fitness_function=fun, steps=100)

engine.run()

x, y = engine.gbest.indv

print('計算得到的最大值是', fun(engine.gbest.indv))

print('x取值是:', x, 'y取值是:', y)

完整**

def

fun(x):

x = x[0]

# 評價函式if2

<= x <= 4:

return

1 / (np.abs(x + x * np.sin(x) - np.sqrt(x)) + 1)

else:

return -1

# 返回乙個達不到的小值

在這裡,我們用了乙個減函式1/abs(·)的形式把接近0表示出來,當然也可以使用跟其他函式。在在分母處+1,為了防止分母為0導致評價變成無窮。

完整**

- 例3: 優化問題 {m

ax=x

+yst

.x2+

y2≤1

x>0y

>

0 {ma

x=x+

yst.

x2+y

2≤1x

>0y

>

0

def

fun(vars):

# 評價函式

x, y = vars

if0<= x <= 1

and0

<= y <= 1:

if x ** 2 + y ** 2 > 1:

return -2

return x + y

else:

return -2

# 返回乙個達不到的小值

把約束條件寫在評價函式內即可。注意,經驗表明,約束排除的點的區間不應該大於整個區間的1/3.如果約束過多,需要考慮縮小變數的範圍,否則可能影響迭代效果。

完整**

粒子群(pso)演算法

一 粒子群演算法的概念 粒子群優化演算法 pso particle swarm optimization 是一種進化計算技術 evolutionary computation 源於對鳥群捕食的行為研究。粒子群優化演算法的基本思想 是通過群體中個體之間的協作和資訊共享來尋找最優解 pso的優勢 在於簡...

粒子群演算法 PSO

1995年美國社會心理學家kennedy和電氣工程師eberhart共同提出粒子群優化演算法 particle swarm optimization,pso pso演算法的基本思想利用生物學家heppner的生物群體模型,模擬鳥類覓食過程。鳥類飛行過程相互交流,當乙個鳥飛向棲息地時,其他鳥兒也會跟著...

粒子群優化演算法 PSO

粒子群優化演算法 pso particle swarm optimization 是一種進化計算技術 evolutionary computation 源於對鳥群捕食的行為研究。粒子群優化演算法的基本思想 是通過群體中個體之間的協作和資訊共享來尋找最優解 pso的優勢 在於簡單容易實現並且沒有許多引...