- 6
- 0
- 约2.39千字
- 约 3页
- 2019-07-08 发布于江西
- 举报
#includeiostream
#include fstream
#includecmath
#include ctime
#include string
#include iomanip
#include cstdlib
using namespace std;
#include ran_number.h
const double pi=3.1415926;
const int num=60; //粒子群规模
const int T=2000;//最大迭代次数
//*******适应度函数********//
double func(double x)
{
double f = x*sin(10*x*pi)+2.0;
f=1.0/f;
return f;
}
//---------------------主程序----------------------//
void main (int argc, char* argv[])
{
double ran; // 随机变量
RandomNumber rand;
double c1=2.05, c2=2.05; //学习因子
double d1=0.2,d2=0.7; //控制因子
double ws=0.9, we=0.4; //最大最小惯性权重
double x_down=-1.0, x_up=2.0; // 粒子空间上下界
double w; //惯性权重
int m=2; //迭代次数
double Vmax; //粒子最大速度
double x[num]; //粒子位置(控制参数)
double v[num]; //粒子速度
double g[num]; //粒子适应度
double pbest[num]; //粒子个体最好值
double pbest_x[num]; //粒子个体最好位置
double gbest ; //粒子群体最好值
double gbest_x; //粒子群体最好位置
Vmax = (x_up-x_down)/8;
//------------ 初始化粒子群:位置、速度、个体最优值及群体最优值---------- //
for( int i=0; i num; i++ )
{
pbest[i]=0.0;
ran = rand.fRandom();
x[i] = x_down + ( x_up - x_down ) * ran; //初始化粒子
v[i] = Vmax * ( 2*ran - 1 ); //初始化粒子速度
pbest[i] = func(x[i]);
pbest_x[i] = x[i];
}
gbest=pbest[0];
gbest_x=x[0];
//-----------------第一次迭代得到的群体最优----------------------//
for ( i=0; inum; i++) // for 粒子数循环
{
if ( pbest[i] gbest )
{
gbest = pbest[i];
gbest_x =pbest_x[i];
}
}
//---------------- 共 T 次迭代过程 ---------------------//
while( m = T ) //迭代次数循环
{
w = (ws-we-d1) * exp(1/(1+d2*(m-1)/T)); //惯性权重
// cout m= m ; w= w endl;
for ( i=0; inum; i++ ) // 粒子数循环
{
g[i] = 0.0;
ran = rand.fRandom();
v[i] = w * v[i] + c1 * ran * ( pbest_x[i] - x[i] ) + c2 * ran * ( gbest_x - x[i] );
x[i] += v[i];
if( x[i] x_down ) { x[i] = x_down;}// cout 到下界 endl; }
if(x[
原创力文档

文档评论(0)