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

📄 wsgenalogrith.h

📁 开发环境:Visual C++ .net2003 功能:利用遗传算法求解TSP问题。
💻 H
字号:
#pragma once
#include "WSTSP.h"
#include "WSRandom.h"

typedef std::vector<CityInfo> CityInfoOfMembersVector;
typedef struct stAdaptInfo
{
	FLOAT m_AdaptProbability;
	FLOAT m_DestFunctionValue;
}AdaptInfo, *PAdaptInfo;

class WSGeneticAlogrith
{
private:
public:
	CityInfo m_BaseCityInfo;
	CityInfoOfMembersVector m_pCityInfoOfMembers;//还是弄成容器比较好
	PAdaptInfo m_pAdaptInfo;

private:
	PCHAR m_oFileName;

	//种群大小
	INT m_MemberNum;

	//终止准则
	INT m_ComputeTime;//计算时间
	INT m_ComputeGenerates;//计算代数
	INT m_TimesOfNatureEnd;//设定自然终止的运行次数
	BOOL m_EndInNature;//自然终止,若50代之内无更好解出现,则认为其已结束
	

	//变异概率
	FLOAT m_CrossProbability;
	FLOAT m_VarProbability;

public:
	WSGeneticAlogrith(void);
	~WSGeneticAlogrith(void);

public:
	static BOOL EqualVector(PINT _A, PINT _B, INT _VertorLen);


	//MODE=1:限定计算代数
	//MODE=2:限定计算时间
	//MODE=3:自然终止
	BOOL Initial(INT _Mode, PCHAR _iFileName, PCHAR _oFileName, INT _Compute_GeneratesORTimeORNatureTimes, INT _MemberNum = 50, FLOAT _CrossProbability = 0.8, FLOAT _VarProbability = 0.05);
	BOOL StartCompute(INT _AdaptMode = 3, INT _CrossMode = 2, INT _VariteMode = 1);

	BOOL ShowCityOrders();
	BOOL Show(CityOrderDef _Order);

private:
	BOOL Initial(PCHAR _FileName, PCHAR _oFileName, INT _MemberNum = 0, INT _ComputeTime = 0, BOOL _EndInNature = FALSE, 
				INT _ComputeGenerates = 0, INT _TimesOfNatureEnd = 50, FLOAT _CrossProbability = 0.8, FLOAT _VarProbability = 0.05);
	BOOL MakeBaseCityInfo(PCHAR _FileName);
	VOID GenInitialCityInfoOfMembers();

	VOID CalculateAdapt(INT _Mode);	
	//CalculateAdapt之模式0:选取种群中比较好的个体;那些差的个体均被删除/淘汰.
	VOID CalculateAdapt_CutTrai();
	//CalculateAdapt之模式1:执行自己定义的所谓轮赌法;
	//采用轮赌法重新选取个体产生新的群体,选取后的种群大小不变.
	VOID CalculateAdapt_WSBetRing();
	//CalculateAdapt之模式2:执行比较标准的轮赌法;
	//采用轮赌法重新选取个体产生新的群体,选取后的种群大小不变.
	VOID CalculateAdapt_BetRing();
	//CalculateAdapt之模式3:加入移民,防止早熟
	VOID CalculateAdapt_Immigrant();

	BOOL MakeCross(INT _Mode);
	//MakeCross之模式0:产生的新个体将直接添加到种群中,不会删除双亲
	BOOL MakeCross_NoreplaceParent();
	//MakeCross之模式1;将产生的个体替代双亲
	BOOL MakeCross_ReplaceParent();
	//MakeCross之模式2:使用了贪心的交叉算法
	BOOL MakeCross_Greedy();

	BOOL MakeVariate(INT _Mode);
	//MakeVariate之模式0:使用新产生的变异个体替代原个体
	BOOL MakeVariate_Normal();
	//MakeVariate之模式1:采用贪心的算法,先判断变异的个体是否要好,若好,这替代原个体;否则,不替换。
	BOOL MakeVariate_Greedy();
public:
	BOOL OneGenerate(INT _AdaptMode, INT _CrossMode, INT _VariteMode);	
	void ShowBestRouteInfo();
};

⌨️ 快捷键说明

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