📄 pso.h
字号:
//PSO头文件PSO.hpp如下:
//Header __PSO_H
//Purpose Provide a class for particle swarm optimization
//Platform Visual C++ 7.0
//Date 2002.4.29
//Author Liu Kang
//群微粒算法:本算法用群微粒算法求目标函数的最小值
//本算法使用步骤
// (1)派生自己的群微粒类,类中必须定义double GetFit(PARTICLE&)方法,用来计算每个微粒的适合度
// (2)生成派生类实例,并在构造函数中指明微粒坐标维数和群体个数
// (2)设置微粒坐标上界数组和下界数组,并用SetXup与SetXdown设置微粒坐标上下界
// (3)用SetVmax方法设置微粒最大速度
// (4)设置可选参数:C1,C2,W和通讯函数
// (5)采用Run方法进行优化运算,优化后用GetBest方法获得最优个体适合度和坐标
#ifndef __PSO_H
#define __PSO_H
//微粒类
class PARTICLE
{
public:
double *X; //微粒的坐标数组
double *V; //微粒的速度数组
double *XBest; //微粒的最好位置数组
int Dim; //微粒的维数
double Fit; //微粒适合度
double FitBest; //微粒最好位置适合度
//构造函数
PARTICLE(); //空构造函数
PARTICLE(int n); //维数为参数的构造函数
//析构函数
~PARTICLE();
void SetDim(int d); //设置微粒的维数
};
//定义群粒子类
class PSO
{
protected:
PARTICLE *Particle; //微粒群数组
int PNum; //微粒个数
int GBestIndex; //最好微粒索引
double W; //惯性权重
double C1; //加速度系数1
double C2; //加速度系数2
double *Xup; //微粒坐标上界数组
double *Xdown; //微粒坐标下界数组
double *Vmax; //微粒最大速度数组
void Initialize(); //初始化群体
void CalFit(); //计算全体适合度
virtual void ParticleFly(); //微粒飞翔,产生新一代微粒
//通讯函数,返回值为false时,系统停止优化
bool (*Com)(double, //最优微粒适合度
double*, //最优微粒坐标数组
double**, //所有微粒坐标指针数组
int); //当前最优微粒索引
public:
//构造函数
PSO(); //空构造函数
PSO(int dim, //微粒维数
int num); //微粒个数
//析构函数
~PSO();
void SetXup(double*); //设置微粒坐标上界
void SetXdown(double*); //设置微粒坐标下界
void SetVmax(double*); //设置微粒最大速度,以数组为参数
void SetVmax(double); //设置微粒最大速度,以上下界百分比为参数
void SetW(double w){W= w;}; //设置权重
void SetC1(double c){C1=c;};//设置C1
void SetC2(double c){C2=c;};//设置C2
void SetCom(void *p){Com=(bool(*)(double,double*,double**,int))p;};//设置通讯函数
//计算特定微粒坐标所对应适合度,必须由派生的实际PSO类定义,以便计算适合度
virtual double GetFit(PARTICLE&)=0;
//运行类进行优化
PARTICLE& Run(int max); //按最多次数限制运行PSO
PARTICLE& Run(double fit); //按最佳适合度目标运行PSO
double GetBest(double*); //获得最优微粒适合度和坐标
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -