欢迎来到天天文库
浏览记录
ID:40646220
大小:15.51 KB
页数:6页
时间:2019-08-05
《粒子群算法(C语言版本)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、粒子群算法//PSO.cpp:Definestheentrypointfortheconsoleapplication.//#include"stdafx.h"#include"stdio.h"#include"stdlib.h"#include"time.h"#include"math.h"#definerdint(i)(rand()%(int)(i))/*随机数的定义*/#definerdft()(double)((double)rdint(16384)/(16383.0))#definernd(a,b)(
2、rdint((int)(b)-(int)(a)+1)+(int)(a))#definePOPSIZE20#defineDIMENSION12 /* 目标函数中所含变量x的个数 */#defineDIMENSION26 //约束条件的个数doubleW=1.0;doubleC1=1.8;doubleC2=1.8;doubleVMAX=3.0;doubleXMIN=2.0;doubleXMAX=4.0;doubleP[DIMENSION1];doublePBEST;doubleH,K;doubleg[DIMEN
3、SION2];//约束条件的值structindi{ doublenumber[DIMENSION1]; doublebest[DIMENSION1]; doublebestfitness; doublefitness; doublespeed[DIMENSION1];}individual[POPSIZE];voidinitiate(void);voidcalculation(intnumber);voidglobalbest(intnumber);voidlocalbest(intnumber);voidj
4、udge(intnum);voidjudge(intnum){ /* 6个约束条件 */ g[0]=4*individual[num].number[0]-individual[num].number[1]; g[1]=individual[num].number[1]-10*individual[num].number[0]; g[2]=-2*K*individual[num].number[1]+3*3.14*pow(individual[num].number[0],3); g[3]=-50
5、*K*individual[num].number[1]+75*3.14*pow(individual[num].number[0],3); g[4]=-H+3.98*individual[num].number[1]; g[5]=3*pow(individual[num].number[1],3)-2000*pow(individual[num].number[0],4);}voidinitiate(){ inti,j; for(i=0;i6、j=0;j7、ft(); for(i=0;i8、 inti; judge(number);//进行判断,如果不在可行域内就不对粒子的历史最优值进行更新 boolbTrue=g[0]<=0&&g[1]<=0&&g[2]<=0&&g[3]<=0&&g[4]<=0&&g[5]<=0; if(individual[number].bestfitness>individual[number].fitness&&bTrue) { for(i=
6、j=0;j7、ft(); for(i=0;i8、 inti; judge(number);//进行判断,如果不在可行域内就不对粒子的历史最优值进行更新 boolbTrue=g[0]<=0&&g[1]<=0&&g[2]<=0&&g[3]<=0&&g[4]<=0&&g[5]<=0; if(individual[number].bestfitness>individual[number].fitness&&bTrue) { for(i=
7、ft(); for(i=0;i8、 inti; judge(number);//进行判断,如果不在可行域内就不对粒子的历史最优值进行更新 boolbTrue=g[0]<=0&&g[1]<=0&&g[2]<=0&&g[3]<=0&&g[4]<=0&&g[5]<=0; if(individual[number].bestfitness>individual[number].fitness&&bTrue) { for(i=
8、 inti; judge(number);//进行判断,如果不在可行域内就不对粒子的历史最优值进行更新 boolbTrue=g[0]<=0&&g[1]<=0&&g[2]<=0&&g[3]<=0&&g[4]<=0&&g[5]<=0; if(individual[number].bestfitness>individual[number].fitness&&bTrue) { for(i=
此文档下载收益归作者所有