📄 xx1.h
字号:
// XX1.h: interface for the XX1 class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_XX1_H__E1186026_512C_4AF7_9791_922AD39C743D__INCLUDED_)
#define AFX_XX1_H__E1186026_512C_4AF7_9791_922AD39C743D__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#define NVARS 200
#define Pi 3.14159265
#define MAXPOPSIZE 1000
#include <afxtempl.h>
typedef struct tagGAPARAMS{
int iSSW; //=0 停止计算状态;1:正在进化计算;2:进化计算暂停;3:正在Monte Carlo
//计算;4:Monte Carlo计算暂停。在进化计算暂停状态时,才可以启动Monte Carlo 计算
HWND hWnd;
BOOL bResultNotProcessed;
BOOL bSorted;
//一般参数
int iSaveType;
int iRepeatNumber,iSubpopNum;
double dSubpopRadius;
int iMaxOptimaNum;
int iNoNewNum;
long lMaxFunCall;
int iMuteType,iReproduceType;
int iESType;
//子种群参数
int iMu,iLumda,iKapa;//μλκ
int iTuneInterval;//σ调节间隔代数
double dSigma0,dMinSigma,dSigmaCoe;
long lMaxNoEvolveGen;
long lMaxGeneration;
long lBreakPos;
int iResultInterval;
//函数参数
int iFunSel;//函数选择编号
int iVarNum;//变量个数
double dLower,dUpper;
double dOptima,dAccuracy;
long lMonteCarloNum;
BOOL bMonteCarloSave;
}GAPARAMS;
class CIndividual
{
public:
double Gene[NVARS];
double Eta[NVARS];
double Fitness;
int GeneSel;
static int FunSel;
static int VarNum;
static long int FuncallCount;
static int MuteType;
static int ReproduceType;
static double Tu;
static double Tup;
static double Upper[NVARS],Lower[NVARS];
static double Sigma[NVARS],Mu[NVARS];
public:
double Evaluate(void);
void Initialize(void);
void RandInd(void);
void Limit(void);
void GaussMutate(CIndividual &src,double sigma);
void CESGaussMutate(CIndividual &src);
void TwowayMutate(CIndividual &src,double sigma);
void TwowayUniformMutate(CIndividual &src);
void AllGeneMutate(CIndividual &src,double sigma);
void UniformMutate(CIndividual &src);
void UniformMutate(CIndividual &src,double a[],double b[]);
static void Setup(int funsel,int varnum,int mutetype,int reproducetype);
static void Setup(GAPARAMS &gapara);
static void SetRange(double up[],double low[]);
static void SetRange(double up,double low);
CIndividual(void);
double IndDistance(CIndividual &ind);
int FindNearestInd(CIndividual ind[],int num);
};
typedef CArray<CIndividual,CIndividual &> COptimArray;
class CPopulation
{
public:
CIndividual *Ind;
int GeneLo,GeneHi;
double PreBest;
double Sigma;
long Generation;
long NoEvolveGen;
int PopState; //0停止进化,其他可以进化
// bool MaxFlag;
static int N1,N2,N3;//对应μλκ
static int PopSize;
static double Sigma0,SigmaMin;
static double SigmaCoe;
static int ESType;
static int TuneInterval;
static long int MaxGeneration;
static long int MaxNoEvolveGen;
static double Optima,Accuracy,Radius;
static int StopFlag;
static COptimArray OptimArray;
static int MaxOptimaNum,OptimaNum;
static int MaxNoNewOptima,NoNewOptima;
public:
CPopulation();
static void Setup(int mu,int lamda,int kap,double sigma0,double sigmamin,double sigmacoe,
int tuneinterval,long int maxgen,long int maxnoevgen,double optima,
double accuracy,double radius,int maxoptimanum=100,int nonewnum=100,int estype=0);
static void Setup(GAPARAMS &gapara);
static void Modify(GAPARAMS &gapara);
static int AddOptima(CIndividual &ind);
static void SortOptima(void);
static void InitializeAll(void);
static CIndividual& GetBestInd(int num);
static double GetOptima(int num);
~CPopulation(){delete []Ind;}
void Sort(void);
void Evaluate(void);
void Initialize(void);
void Fresh(void);
void FreshNew(void);
void Reproduce(void);
};
class CNiche
{
public:
CNiche(CIndividual &ind1,CIndividual &ind2);
CIndividual Ind[4];
double A[NVARS],B[NVARS];
void TwoWayEvolve(long int maxgen);
void Sort(void);
};
enum GARESULTTYPE{
GA_START,GA_INPROGRESS,GA_ENDONCEOK,GA_ENDONCEFALSE,GA_ENDALL,GA_ENDFORCED
};
typedef struct tagGARESULT{
GARESULTTYPE enumResultType;
double MeanFitness,StdFitness,MaxFitness,MinFitness;
double MeanGeneration,StdGeneration,MaxGeneration,MinGeneration;
double MeanFunCall,StdFunCall,MaxFunCall,MinFunCall;
double MeanTime,StdTime,MaxTime,MinTime;
double AverageOptimaNum;
int RepeatNum;
int any;
}GARESULT;
typedef struct tagMCResult{
double Sigma0,Sigma,SigmaMin;
double *pd,*pav;
long *pl;
}MCRESULT;
double Randval(double,double);
double GaussX(double u,double sigma);
void Xover(int,int);
void Swap(double *x,double *y);
void Swap(CIndividual *p1,CIndividual *p2);
void StartPartAdjust(CPopulation *pPopu);
void LearnRule(CIndividual &src);
int GetGAPara(GAPARAMS &gaParams);
int SaveGAPara(GAPARAMS &gaParams);
UINT GACalculate(LPVOID lParam);
void StatisticProc(int n,double &aver,double aver2,double &std);
UINT MonteCarloCal(LPVOID pParam);
#endif // !defined(AFX_XX1_H__E1186026_512C_4AF7_9791_922AD39C743D__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -