資源簡介
并行化實現了PSO算法,大大提高了算法的尋優效果。基于OpenMP和MPI兩種方法實現。

代碼片段和文件信息
//粒子群PSO算法
#include
#include
#include
#include??
#include
#include
#define PI?3.141592653589
#define?P_num?40000?????????? //粒子數目
#define?dim?30 ???????//維度
#define?N???10 ??//?每條進程執行數目
#define?low?-100??????????? ??//搜索域范圍
#define?high?100
#define?iter_num?1000
#define?V_max?20?????????? //速度范圍
#define?c1?1.5 //更新速度時的加速常量
#define?c2?1.5 //更新速度時的加速常量
#define?w?0.5 //更新速度時的權重
#define?alp?1 //更新位置時的權重
double?particle[P_num][dim];???????????//個體位置集合
double?particle_loc_best[P_num][dim];??//每個個體局部最優向量
double?particle_loc_fit[P_num];????????//個體的局部最優適應度有局部最優向量計算而來
double?particle_glo_best[dim];?????????//全局最優向量
double?gfit;???????????????????????????//全局最優適應度有全局最優向量計算而來
double?particle_v[P_num][dim];?????????//記錄每個個體的當前代速度向量
double?particle_fit[P_num];????????????//記錄每個粒子的當前代適應度
/*時間函數*/
double?mytime()
{
????double?ts?=?0.0;
????struct?timeval?mt;
????gettimeofday(&mt(struct?timezone*)0);
????ts?=?(double)(mt.tv_sec+mt.tv_usec*1.0e-6);
????return?(ts);
}
int?get_rand(int?comm_sz){
??srand((unsigned)time(NULL));
??return?rand()%(P_num/comm_sz);
}
double?Sphere(double?a[])
{
int?i;
double?sum=0.0;
for(i=0;?i {
sum+=a[i]*a[i];
}
return?sum;
}
double?Rosenbrock(double?a[])
{
int?i;
double?sum=0.0;
for(i=0;i {
????????sum+=?100*(a[i+1]-a[i]*a[i])*(a[i+1]-a[i]*a[i])+(a[i]-1)*(a[i]-1);
}
?? ????return?sum;
}
double?Rastrigin(double?a[])
{
int?i;
double?sum=0.0;
for(i=0;i {
sum+=a[i]*a[i]-10.0*cos(2*PI*a[i])+10.0;
}
return?sum;
}
double?fitness(double?a[])?????????????//適應度函數
{
return?Rastrigin(a);
}
/*初始化粒子,包括初始化速度,位置,各自的適應度以及*/
void?initial()
{
int?ij;
for(i=0;?i {
for(j=0;?j {
particle[i][j]?=?low+(high-low)*1.0*rand()/RAND_MAX;????//初始化群體位置隨機
particle_loc_best[i][j]?=?particle[i][j];???????????????//將當前最優結果寫入局部最優集合
particle_v[i][j]?=?-V_max+2*V_max*1.0*rand()/RAND_MAX;????//初始化速度
}
}
for(i=0;?i {
particle_fit[i]?=?fitness(particle[i]);
particle_loc_fit[i]?=?particle_fit[i]; //當前局部適應度
}
gfit?=?particle_loc_fit[0];?????? //初始化全局最優適應度
j=0;
for(i=1;?i {
if(particle_loc_fit[i] {
gfit?=?particle_loc_fit[i];
j?=?i; //記錄下標
}
}
for(i=0;?i {
particle_glo_best[i]?=?particle_loc_best[j][i];
}
}
/*更新位置函數*/
void?renew_particle(int?aint?b)
{
int?ij;
for(i=a;?i {
for(j=0;?j {
particle[i][j]?+=??alp*particle_v[i][j];????
if(particle[i][j]?>?high)
{
particle[i][j]?=?high;
}
if(particle[i][j]? {
particle[i][j]?=?low;
}
}
}
}
/*更新粒子速度*/
void?renew_var(int?aint?bint?*m)
{
int?i?j;
for(i=a;i {
particle_fit[i]?=?fitness(particle[i]); //計算該粒子適應度
if(particle_fit[i]?
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????????44??2019-05-23?16:30??pso并行化算法\PSO_MPI\.vs\ProjectSettings.json
????..A..H.?????15872??2019-05-23?16:30??pso并行化算法\PSO_MPI\.vs\PSO_MPI\v15\.suo
?????文件?????262144??2019-05-23?16:30??pso并行化算法\PSO_MPI\.vs\PSO_MPI\v15\Browse.VC.db
?????文件??????77824??2019-05-23?16:30??pso并行化算法\PSO_MPI\.vs\slnx.sqlite
?????文件?????????78??2019-05-23?16:30??pso并行化算法\PSO_MPI\.vs\VSWorkspaceState.json
?????文件??????18240??2018-06-14?13:41??pso并行化算法\PSO_MPI\pso
?????文件???????6493??2018-06-14?13:41??pso并行化算法\PSO_MPI\pso.c
?????文件??????13568??2018-06-14?13:47??pso并行化算法\PSO_MPI\pso_1
?????文件???????4155??2018-06-14?13:48??pso并行化算法\PSO_MPI\pso_1.c
?????文件?????????52??2018-06-15?12:25??pso并行化算法\PSO_MPI\說明.txt
????..A..H.?????41984??2019-01-11?10:25??pso并行化算法\PSO_OpenMP\.vs\PSO_OpenMP\v15\.suo
?????文件?????270336??2019-01-11?10:25??pso并行化算法\PSO_OpenMP\.vs\PSO_OpenMP\v15\Browse.VC.db
?????文件?????393216??2019-01-11?10:13??pso并行化算法\PSO_OpenMP\.vs\PSO_OpenMP\v15\ipch\49029d25808f1cdb.ipch
?????文件????3670016??2018-06-15?10:18??pso并行化算法\PSO_OpenMP\.vs\PSO_OpenMP\v15\ipch\9620af6784343d4.ipch
?????文件????3670016??2018-06-14?11:42??pso并行化算法\PSO_OpenMP\.vs\PSO_OpenMP\v15\ipch\d137cd0d19fb87cd.ipch
?????文件??????46592??2018-06-14?11:42??pso并行化算法\PSO_OpenMP\Debug\PSO_OpenMP.exe
?????文件?????771888??2018-06-14?11:42??pso并行化算法\PSO_OpenMP\Debug\PSO_OpenMP.ilk
?????文件?????700416??2018-06-14?11:42??pso并行化算法\PSO_OpenMP\Debug\PSO_OpenMP.pdb
?????文件????????352??2019-01-11?10:17??pso并行化算法\PSO_OpenMP\PSO_OpenMP\Debug\PSO_OpenMP.log
?????文件??????22921??2018-06-14?11:42??pso并行化算法\PSO_OpenMP\PSO_OpenMP\Debug\PSO_OpenMP.obj
?????文件????2883584??2018-06-14?08:47??pso并行化算法\PSO_OpenMP\PSO_OpenMP\Debug\PSO_OpenMP.pch
?????文件???????1886??2018-06-14?11:42??pso并行化算法\PSO_OpenMP\PSO_OpenMP\Debug\PSO_OpenMP.tlog\CL.command.1.tlog
?????文件???????7682??2018-06-14?11:42??pso并行化算法\PSO_OpenMP\PSO_OpenMP\Debug\PSO_OpenMP.tlog\CL.read.1.tlog
?????文件???????1564??2018-06-14?11:42??pso并行化算法\PSO_OpenMP\PSO_OpenMP\Debug\PSO_OpenMP.tlog\CL.write.1.tlog
?????文件???????1592??2018-06-14?11:42??pso并行化算法\PSO_OpenMP\PSO_OpenMP\Debug\PSO_OpenMP.tlog\li
?????文件???????3954??2018-06-14?11:42??pso并行化算法\PSO_OpenMP\PSO_OpenMP\Debug\PSO_OpenMP.tlog\li
?????文件????????838??2018-06-14?11:42??pso并行化算法\PSO_OpenMP\PSO_OpenMP\Debug\PSO_OpenMP.tlog\li
?????文件????????233??2018-06-14?11:42??pso并行化算法\PSO_OpenMP\PSO_OpenMP\Debug\PSO_OpenMP.tlog\PSO_OpenMP.lastbuildstate
?????文件???????6088??2018-06-14?08:47??pso并行化算法\PSO_OpenMP\PSO_OpenMP\Debug\stdafx.obj
?????文件?????101376??2018-06-14?11:42??pso并行化算法\PSO_OpenMP\PSO_OpenMP\Debug\vc141.idb
............此處省略27個文件信息
- 上一篇:暴力破解MD5解密工具
- 下一篇:P2P、網貸后臺原型
評論
共有 條評論