• 大小: 1.55MB
    文件类型: .rar
    金币: 2
    下载: 0 次
    发布日期: 2024-01-30
  • 语言: 其他
  • 标签: 并行算法  PSO  

资源简介

并行化实现了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] < low)
{
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] < p

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件         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\link.command.1.tlog

     文件       3954  2018-06-14 11:42  pso并行化算法\PSO_OpenMP\PSO_OpenMP\Debug\PSO_OpenMP.tlog\link.read.1.tlog

     文件        838  2018-06-14 11:42  pso并行化算法\PSO_OpenMP\PSO_OpenMP\Debug\PSO_OpenMP.tlog\link.write.1.tlog

     文件        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个文件信息

评论

共有 条评论