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

📄 acs4fun.h

📁 这是一个用C++编写的
💻 H
字号:
#ifndef ACS4FUN_CHEAT_H_
#define ACS4FUN_CHEAT_H_
#include <stdio.h>
#include <iostream>

#define USE_CHAOS		0		//混沌序列取代随机数
#define CHAOTIC_SEARCH	1		//嵌入混沌搜索算法   1表示嵌入,其他表示不嵌入
#define RANDOM_SEARCH	0		//这个random_search是为了和混沌搜索相比较,因此要上面一个宏也定义为1时这个宏才起作用
#define CHAOTIC_CYCLE	50
#define CHAOS_INIT_VAL	0.7783//0.61803398874989	/////////?????
#define CHAOS_MU		4.0	/////////
#define RATIO_FUN		1		//使用哪一个尺度变换公式,从0开始计算,目前只能取值0,1这两个

#define WRITE_RAW_DATA	0
#define SPEED_TEST		0
#define GLOBAL_UPDATE	1     //1 stand for the global update used on the global best ant and 2 on the iterative best ant

#define NUM_Layers		30
#define NUM_Ants		20
#define RADIX			10
#define MAX_FIT_ALLOWED	1000000
#define PI				3.1415926
class CAcs4Fun
{
private:
	void setfun(int n);
	int NoFun;
public:
	int NIters;
	double PSelMax;
	double Alpha;
	double Tau0;
	double Rho;

	int NLayers,NAnts,NVariants,Radix;
	int NRecordedResults;

	double globalbestfit;
	int bestiter;
	double **ph;
	double *fit;			//存储每只蚂蚁的评价值(与函数值相关, 但不一定等于函数值)
	int *globalbestant,**ant;
	double *y;			//存储每只蚂蚁对应的函数值
	double **x;			//直接解码得到的自变量的值
	double **x_real;		//真实的自变量值
	double *globalbestx;
	double *globalbestx_real;
	double globalbesty;
	int pointpos;		//变量中小数点的位置
	double *chaos_last_val;	//用于为每只蚂蚁/每层?产生混沌序列

	double *cs_last_val;									//混沌搜索中使用
	double *cx,*localbestx,*cx_real,*localbestx_real;		//混沌搜索中使用

	double xmin,xmax,xmin_t,xmax_t;
	double ymin,ymax,ymin_t,ymax_t;

	bool bWriteResult;
	bool bWriteAllData;
	//bool bWriteIterBest;
	double MaxRecordFit;

//	CAcs4Fun_Cheat(int pNIters, double pPSelMax, double pAlpha, double pRho, double pTau0);
	CAcs4Fun(int pNIters=500, int pNLayers=30, int ppointpos=0, 
				int pNAnts=20, int pNFun=6,int pRadix=10, double pPSelMax=0.8, 
				double pAlpha=0.2, double pRho=0.2, double pTau0=0.01);
	~CAcs4Fun();

	void initvars();
	void start();

	void calcfit();
	double f(double xx[]);
	void decode ();
	double decode(int xx[], int pointpos, int startpos, int endpos);
	void xtrans();
	void ytrans();

	void WriteResult(int iter, int antNo);
	void WriteResult2(int NoAnt);

	double Random(int AntNo);
	void Chaotic_Search(int NoAnt, int iter);

	FILE *fout;


	///////////////////测试函数////////////////////
	double SphereModel(double xx[]);
	double Schwefel2_22(double xx[]);
	double Schwefel1_2(double xx[]);
	double Schwefel2_21(double xx[]);
	double Rosenbrock(double xx[]);
	double Step(double xx[]);
	double QuarticNoise(double xx[]);
	double Schwefel2_26(double xx[]);
	double Rastrigin(double xx[]);
	double Ackley(double xx[]);
	double Griewank(double xx[]);
	double Penalized(double xx[]);
	double Penalized2(double xx[]);
	double Foxholes(double xx[]);
	double Kowalik(double xx[]);
	double SixHumpCamelBack(double xx[]);
	double Branin(double xx[]);
	double GoldsteinPrice(double xx[]);
	double Hartman(double xx[]);
	double Hartman2(double xx[]);
	double Shekel(double xx[]);

	double Schaffer(double xx[]);
	double F_1(double xx[]);
	double function_test(double xx[]);

	double B2(double xx[]);				//25
	double MartinGaddy(double xx[]);

	double BalujaF3(double xx[]);
	double BalujaF1(double xx[]);
	//29-
	double peeks(double xx[]);		//用于多维函数优化的蚁群算法
									//最大化问题,最大值 8.1...
};

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -