本文參照:
給出了一種c++解決的方法,非常簡單,希望與大家共同交流。目前我的疑惑是,在粒子群演算法中的那些引數應該如何選取?
1.慣性係數採用了線性變化的形式,在一開始注重大範圍搜尋,w值比較大為0.9,最後注重區域性走索,w為0.4。(**上說0.9到0.4)。
2.通過查閱**,c1和c2的取值應該在1.5到2之間,而且通常而言,應該一開始c1比較大,後期c2比較大。
3.慣性引數可以採用線性變化,也可以用指數函式,有相關**的。
4.速度限幅決定了精度大小。
5.第二份**,嘗試用粒子群演算法解決多峰問題,並且得到比較好的結果。
#include "iostream"
#include "algorithm"
#include "vector"
#include "random"
#include "iterator"
using namespace std;
#define max_count 500
#define max_m 0.9
#define min_m 0.4
double fitness_function(double x)
class seed
seed& operator=(const seed& s)
double get_speed()
~seed() {};
double speed = 0.5;//速度
double w = 0.9;//慣性係數
double c1 = 1.5;//認知係數
double c2 = 2;//社會係數
double present = 1;//當前位置
double pbest = 0;
};double find_max(double a, double b)
int main()
double gbest;
for (int j = 0; j < max_count; j++)
v[seed_num-1].w = max_m - (max_m - min_m)*j / max_count;
for (int i = 0; i < seed_num;i++)
for (int i = 0; i < seed_num; i++)
cout << gbest << endl;
} //cout << v[0].present << " " << v[1].present << " " << max << endl;
while (1);
return 0;
}
第二個粒子群演算法,用於解決多峰情況。
//粒子群演算法
#include "iostream"
#include "algorithm"
#include "vector"
#include "random"
#include "iterator"
using namespace std;
#define max_count 200
#define max_m 0.9
#define min_m 0.4
#define vmax 0.5
#define n_limit 0
#define p_limit 9
double fitness_function(double x)
class seed
seed& operator=(const seed& s)
double get_speed()
~seed() {};
double speed = 0.9;//速度
double w = max_m;//慣性係數
double c1 = 1.25;//認知係數
double c2 = 1.8;//社會係數
double present = 1;//當前位置
double pbest = 0;
};double find_max(double a, double b)
int main()
double gbest;
for (int j = 0; j < max_count; j++)
v[seed_num-1].w = max_m - (max_m - min_m)*j / max_count;
for (int i = 0; i < seed_num;i++)
}cout << gbest << endl;
while (1);
return 0;
}
粒子群優化演算法 粒子群演算法
粒子群演算法 particle swarm optimization,pso 屬於進化演算法的一種,該演算法最初是受到飛鳥集群活動的規律性啟發,進而利用群體智慧型建立的乙個簡化模型。粒子群演算法在對動物集群活動行為觀察基礎上,利用群體中的個體對資訊的共享使整個群體的運動在問題求解空間中產生從無序到有...
粒子群演算法
如前所述,pso模擬鳥群的捕食行為。設想這樣乙個場景 一群鳥在隨機搜尋食物。在這個區域裡只有一塊食物。所有的鳥都不知道食物在那裡。但是他們知道當前的位置離食物還有多遠。那麼找到食物的最優策略是什麼呢。最簡單有效的就是搜尋目前離食物最近的鳥的周圍區域。pso從這種模型中得到啟示並用於解決優化問題。ps...
粒子群演算法
一 粒子群演算法的歷史 粒子群演算法源於複雜適應系統 complex adaptive system,cas cas理論於1994年正式提出,cas中的成員稱為主體。比如研究鳥群系統,每個鳥在這個系統中就稱為主體。主體有適應性,它能夠與環境及其他的主體進行交流,並且根據交流的過程 學習 或 積累經驗...