📄 acs4fun.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 + -