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