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

📄 xx1.h

📁 一个遗传算法的程序
💻 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 + -