粒子群演算法是一門新興演算法,此演算法與遺傳演算法有很多相似之處,其收斂於全域性最優解的概率很大。
①相較於傳統演算法計算速度非常快,全域性搜尋能力也很強;
②pso對於種群大小不十分敏感,所以初始種群設為500-1000,速度影響也不大;
③粒子群演算法適用於連續函式極值問題,對於非線性、多峰問題均有較強的全域性搜尋能力。
作為舉例說明,本文將用粒子群演算法,求解rastrigin函式f(x)=x²-10*cos(2πx)+10在區間[-6,6]的極小值。
先用matlab畫出這個函式的影象,便於我們直觀地觀察:
該函式的全域性最小值為0,在x=0處取得
下面,用c#實現求極值。測試環境vs2015
using system;
using system.linq;
using system.threading;
namespace pso_functiontest
;//位置邊界設定
public
static
double
vlimit =
newdouble[2
];//速度邊界設定
public
static
int generation;
//迭代次數
static
void
main
(string
args)
//遍歷每個粒子
for(
int j =
0; j < popsize; j++)}
if(g_fitness>p_fitness.
min())
double w =
newdouble()
; w= wmax -
(wmax - wmin)
* i / generation;
//線性遞減慣性權重
for(
int j =
0; j < popsize; j++)if
(v[j]
)//位置更新
x0[j]
= x0[j]
+ v[j]
;//位置限制
if(x0[j]
>xlimit[1]
)if(x0[j]
< xlimit[0]
)}} console.
writeline
("目標函式的全域性最小值是:\n出現在x=處"
, g_fitness.
tostring
("f3"
), x_gbest.
tostring
("f3"))
; console.
readkey()
;}///
/// 函式表示式
///
/// 自變數
/// 函式值
public
static
double
func
(double variable)
//初始化引數
public
static
void
initialize
(int popsize,
outdouble
x0,outdouble
x_pbest,
outdouble
p_fitness,
outdouble x_gbest,
outdouble g_fitness,
outdouble
v )x0 = x;
v = v0;
x_pbest = x;
p_fitness = p_fit;
x_gbest = gbest;
g_fitness = g_fit;}}
}
除錯執行,得到如下結果:
演算法執行結果基本正確
本人初學,歡迎各位指正!!!
粒子群優化演算法 粒子群演算法
粒子群演算法 particle swarm optimization,pso 屬於進化演算法的一種,該演算法最初是受到飛鳥集群活動的規律性啟發,進而利用群體智慧型建立的乙個簡化模型。粒子群演算法在對動物集群活動行為觀察基礎上,利用群體中的個體對資訊的共享使整個群體的運動在問題求解空間中產生從無序到有...
粒子群優化演算法
粒子群優化演算法 1.概念 粒子群優化演算法 pso 是一種進化計算技術。源於對鳥群捕食的行為研究。粒子群優化演算法的基本思想 是通過群體中個體之間的協作和資訊共享來尋找最優解 pso的優勢 在於簡單容易實現並且沒有許多引數的調節。目前已被廣泛應用於函式優化 神經網路訓練 模糊系統控制以及其他遺傳演...
粒子群優化演算法
與ga演算法比較 粒子群優化 clc,clear all x 0 0.01 4 y hanshu x figure plot x,y hold on w 1 慣性因子 c1 2 c2 2 maxgen 30 迭代次數 sizepop 5 粒子個數 vmax 1 vmin 1 速度限制 popmax ...