⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 parswarm.h

📁 标准的粒子群优化算法,visual c++.net环境下编写的代码,有助于学习和理解粒子群算法
💻 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 + -