請問如何實現MPI並行粒子群演算法?該怎麼改?

2021-09-21 07:30:04 字數 2531 閱讀 7312

/*

取得最大值

*/#include

#include

#include

#include

#include

#define c1 1.49445 //加速度因子一般是根據大量實驗所得

#define c2 1.49445

#define maxgen 2000 // 迭代次數

#define sizepop 800 // 種群規模

#define popmax 10 // 個體最大取值

#define popmin -10 // 個體最小取值

#define vmax 0.5 // 速度最大值

#define vmin -0.5 //速度最小值

#define dim 10 // 粒子的維數

double pop[sizepop][dim]; // 定義種群陣列

double v[sizepop][dim]; // 定義種群速度陣列

double fitness[sizepop]; // 定義種群的適應度陣列

double result[maxgen]; //定義存放每次迭代種群最優值的陣列

double pbest[sizepop][dim]; // 個體極值的位置

double gbest[dim]; //群體極值的位置

double fitnesspbest[sizepop]; //個體極值適應度的值

double fitnessgbest; // 群體極值適應度值

double genbest[maxgen][dim]; //每一代最優值取值粒子

//適應度函式
double func(double * arr, int n)

return fitness;

// 種群初始化

void pop_init(void)

fitness[i] = func(pop[i], dim); //計算適應度函式值}}

// max()函式定義

double * max(double * fit, int size)

}best_fit_index[0] = index;

best_fit_index[1] = max;

return best_fit_index;

}// 迭代尋優

void pso_func(void)

// 個體極值位置

for (int i = 0; i < sizepop; i++)

}// 個體極值適應度值

for (int i = 0; i < sizepop; i++)

//群體極值適應度值

double bestfitness = *(best_fit_index + 1);

fitnessgbest = bestfitness;

//迭代尋優

for (int i = 0; i < maxgen; i++)

fitness[j] = func(pop[j], dim); //新粒子的適應度值

} for (int j = 0; j < sizepop; j++)

fitnesspbest[j] = fitness[j];

} // 群體極值更新

if (fitness[j] < fitnessgbest)

}for (int k = 0; k < dim; k++)

result[i] = fitnessgbest; // 每代的最優值記錄到陣列

}

// 主函式

int main(int argc,char**ar**)

mpi_barrier(mpi_comm_world);

for (m = 0; m < 10; m++) }}

}mpi_bcast(&j, 1, mpi_int, 0, mpi_comm_world);

mpi_bcast(gbest, dim, mpi_double, j, mpi_comm_world);

mpi_finalize();

best_arr = max(result, maxgen);

best_gen_number = *best_arr;

best = *(best_arr + 1);

printf(「迭代了%d次,在第%d次取到最優值,最優值為:%lf.\n」, maxgen, best_gen_number + 1, best);

printf(「取到最優值的位置為(%lf,%lf).\n」, genbest[best_gen_number][0], genbest[best_gen_number][1]);

finish = clock(); //結束時間

double duration = (double)(finish - start) / clocks_per_sec; // 程式執行時間

printf(「程式執行耗時:%lf\n」, duration);

system(「pause」);

return 0;

}

粒子群演算法python實現

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

粒子群演算法簡單實現

pso演算法相關定義 pso中的每個粒子p包含兩個向量 x,v o位置向量x 粒子在解空間中的當前位置 x x1,x2,xdim o速度向量v 粒子在解空間中的飛行速度 v v1,v2,vdim pbest 粒子自身的歷史最優位置 gbest 群體全域性最優向量 粒子速度與位置更新 p.v omeg...

粒子群演算法實現之python

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