📄 parswarm.h
字号:
#pragma once
#ifndef _CPARSWARM_H_
#define _CPARSWARM_H_
#include "Particle.h"
class CParSwarm
{
protected:
CParticle *Particle; //微粒群数组
int PNum; //微粒个数
int GBestIndex; //最好微粒索引
double W; //惯性权重
double C1; //加速度系数1
double C2; //加速度系数2
double *PosUp; //微粒坐标上界数组
double *PosDown; //微粒坐标下界数组
double *Vmax; //微粒最大速度数组
void Initialize(); //初始化群体
void CalFit(); //计算全体适合度 Calfit调用的是GetFit()虚函数
virtual void ParticleFly(); //微粒飞翔,产生新一代微粒
//通讯函数,返回值为false时,系统停止优化 bool (*Com)(double, double*, double**, int);
bool (*Com)(double, //最优微粒适合度
double*, //最优微粒坐标数组
double**, //所有微粒坐标指针数组
int); //当前最优微粒索引
public:
//构造函数
CParSwarm(); //空构造函数
CParSwarm(int dim, //微粒维数
int num); //微粒个数
//析构函数
~CParSwarm();
void SetPosUp(double*); //设置微粒坐标上界
void SetPosDown(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; // bool (*Com)(double, double*, double**, int);
}; //设置通讯函数
//计算特定微粒坐标所对应适合度,必须由派生的实际PSO类定义,以便计算适合度
virtual double GetFit(CParticle&)=0;
//运行类进行优化
CParticle& Run(int max); //按最多次数限制运行PSO
CParticle& Run(double fit); //按最佳适合度目标运行PSO
double GetBest(double*); //获得最优微粒适合度和坐标
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -