亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? gatsp.h

?? 《游戲編程中的人工智能技術》一書中4
?? H
字號:
#ifndef GATSP_H
#define GATSP_H

/////////////////////////////////////////////////////////////////////////
//
//		File: gaTSP.h
//
//		Author: Mat Buckland
//
//		Desc: The genetic algorithm class definition to solve the traveling
//          salesman problem.
//
/////////////////////////////////////////////////////////////////////////

#include <vector>
#include <windows.h>
#include <algorithm>

#include "defines.h"
#include "CmapTSP.h"
#include "utils.h"

using namespace std;

//used in GrabPermutation and in PBX crossover. Tests if an 
//integer is already contained in a vector of integers
bool TestNumber(const vector<int> &vec, const int &number);

//---------------------------------------------------------
// define a genome type for the travelling salesman
// problem.
//---------------------------------------------------------
struct SGenome
{
	//the city tour
	vector<int>		vecCities;
	
	//its fitness
  double			  dFitness;


	//ctor
	SGenome():dFitness(0){}
	
	SGenome(int nc): dFitness(0)
	{
		vecCities = GrabPermutation(nc);
	}

	//creates a random tour of the cities
	vector<int>	GrabPermutation( int &limit);

	//overload '<' used for sorting
	friend bool operator<(const SGenome& lhs, const SGenome& rhs)
	{
		return (lhs.dFitness < rhs.dFitness);
	}	
};


//-----------------------------------------------------------------------
// enumerations for the operator, scaling and selection types 
//-----------------------------------------------------------------------

enum			MutationType{EM, DM, SM, IM};

enum			CrossoverType{PMX, OBX, PBX};

enum      ScaleType{NONE, RANK, SIGMA, BOLTZMANN};

enum      SelectionType{ROULETTE, TOURNAMENT, ALT_TOURNAMENT, SUS};

//------------------------------------------------------------------------
//	The permutation GA class definition
//------------------------------------------------------------------------
class CgaTSP
{
private:

	vector<SGenome>		m_vecPopulation;

	//instance of the map class
	CmapTSP*			m_pMap;

	double				m_dMutationRate;

	double				m_dCrossoverRate;

	//total fitness of the entire population
	double				m_dTotalFitness;
	
	//the shortest tour found so far
	double				m_dShortestRoute;

	//the worst tour found so far
	double				m_dLongestRoute;

	//The best fitness score of the most recent generation
	double				m_dBestFitness;

	//The worst fitness score of the most recent generation
	double				m_dWorstFitness;

	//The average fitness of the most recent generation
	double				m_dAverageFitness;

	//number of genomes in the population
	int					  m_iPopSize;

	//length of chromosome
	int					  m_iChromoLength;

	//the fittest member of the most recent generation
	int					  m_iFittestGenome;

	//keeps track of which generation we are in
	int					  m_iGeneration;
	
	//lets us know if the current run is in progress
	//used in our rendering function
	bool				  m_bStarted;

	//lets us know if the genomes have been sorted
	//in order of fitness (just a time saver really
	//to prevent unnecessary sorting)
	bool			  	m_bSorted;

  //toggles elitism on/off
  bool          m_bElitism;

  //current boltzmann temperature
  double        m_dBoltzmannTemp;

  //if we are using sigma scaling this holds the current
  //value of sigma. If sigma reaches 0 then all the
  //population are identical so the run is halted
  double        m_dSigma;

  //local copy of the application handle
  HWND        m_hWnd;


	//Mutation Operators

					//Exchange Mutation
	void			MutateEM(vector<int> &chromo);
					//Dispacement Mutation
	void			MutateDM(vector<int> &chromo);
					//Scramble Mutation
	void			MutateSM(vector<int> &chromo);
					//Insertion Mutation
	void			MutateIM(vector<int> &chromo);


	//mutate function controller
	void			Mutate(vector<int> &chromo, MutationType &type);

	MutationType			m_MutationType;

	//Crossover Operators

					//Partially Matched Crossover
	void			CrossoverPMX(const vector<int> &mum, 
								         const vector<int> &dad, 
								         vector<int>	     &baby1, 
			 		 	 		         vector<int>	     &baby2);
						
					//Order Based Crossover
	void			CrossoverOBX(const vector<int> &mum, 
								         const vector<int> &dad, 
								         vector<int>	     &baby1, 
								         vector<int>	     &baby2);

					//Position Based Crossover
	void			CrossoverPBX(const vector<int> &mum, 
								         const vector<int> &dad, 
								         vector<int>	     &baby1, 
								         vector<int>	     &baby2);

  //this calls one of the above based on the CrossoverType 
  void CgaTSP::Crossover(const vector<int>	&mum, 
							           const vector<int>	&dad, 
							           vector<int>        &baby1, 
							           vector<int>        &baby2,
                         CrossoverType      type);

	CrossoverType			m_CrossoverType;


	//Selection and scaling Operators
	 
	SGenome&		RouletteWheelSelection();
  void        SUSSelection(vector<SGenome> &NewPop); //**CHECK
  SGenome&    TournamentSelection(int NumToTry);
  SGenome&    AlternativeTournamentSelection();

  SelectionType m_SelectionType;

	void			  GrabNBest(const int				 NBest,
							          const int		     NumCopies,
							          vector<SGenome>  &vecNewPop);

	void			  FitnessScaleRank(vector<SGenome> &pop);
  void        FitnessScaleSigma(vector<SGenome> &pop);
  void        FitnessScaleBoltzmann(vector<SGenome> &pop);
  void        FitnessScaleSwitch();

  ScaleType     m_ScaleType;


	//methods used in the fitness functions

	void			CalculatePopulationsFitness();

	void			CalculateBestWorstAvTot();
	

  //other methods
	void			Reset();

	void			CreateStartingPopulation();



public:

	CgaTSP(double	       mut_rat,
		     double	       cross_rat,
		     int		       pop_size,
		     int		       NumCities,
		     MutationType	 mo,
		     CrossoverType co,
         ScaleType     st,
         SelectionType select,
		     int		       map_width,
		     int		       map_height,
         HWND          hwnd): m_dMutationRate(mut_rat),
							                m_dCrossoverRate(cross_rat),
							                m_iPopSize(pop_size),
							                m_iFittestGenome(0),
							                m_dBestFitness(-999999),
							                m_dWorstFitness(99999999),
							                m_dAverageFitness(0),
							                m_iGeneration(0),
							                m_dShortestRoute(999999999),
							                m_dLongestRoute(0),
							                m_iChromoLength(NumCities),
							                m_bStarted(false),
							                m_bSorted(false),
							                m_MutationType(mo),
							                m_CrossoverType(co),
                              m_ScaleType(st),
                              m_SelectionType(select),
                              m_bElitism(true),
                              m_dBoltzmannTemp(NUM_CITIES * 2),
                              m_dSigma(1),
                              m_hWnd(hwnd)
	{
		//set up the map
		m_pMap = new CmapTSP(map_width,
							           map_height,
							           NumCities);
		
		CreateStartingPopulation();

	}


	~CgaTSP()
	{
		delete m_pMap;
	}


  void			Epoch();

	void			Run(HWND hwnd);

  void      Render(HDC surface, int cx, int cy)const;

  //called if user resizes the client area
  void      Resize(int cxClient, int cyClient)
  {
    m_pMap->Resize(cxClient, cyClient);
  }

	//accessor methods
	void			Stop(){m_bStarted = false;}
  bool      Started()const{return m_bStarted;}
  void      SetSelectionMethod(SelectionType s){m_SelectionType = s;}
  void      SetScalingMethod(ScaleType s){m_ScaleType = s;}
  void      SetMutation(MutationType m){m_MutationType = m;}
  void      SetCrossover(CrossoverType c){m_CrossoverType = c;}
  void      SetElitism(bool arg){m_bElitism = arg;}

};


#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产亚洲欧洲997久久综合 | 精品国产伦一区二区三区观看方式| 中文字幕乱码日本亚洲一区二区| 国产精品亚洲午夜一区二区三区 | 91极品美女在线| 亚洲中国最大av网站| 欧美日韩精品电影| 免费成人av在线播放| 欧美精品一区男女天堂| 成人午夜看片网址| 五月综合激情婷婷六月色窝| 日韩女优毛片在线| 91蝌蚪porny成人天涯| 亚洲综合一区二区| 国产午夜亚洲精品不卡| 一本大道久久精品懂色aⅴ| 日韩国产精品久久久| 国产精品美女一区二区在线观看| 欧美色国产精品| 国产黄色精品网站| 日韩电影在线免费观看| 国产精品不卡一区| 久久免费精品国产久精品久久久久| 日本国产一区二区| 不卡欧美aaaaa| 国产精品资源在线看| 日韩精品电影在线| 亚洲国产va精品久久久不卡综合| 久久久久青草大香线综合精品| 91福利区一区二区三区| 福利91精品一区二区三区| 日日夜夜精品视频免费| 亚洲自拍另类综合| 亚洲精品中文在线| 亚洲国产aⅴ成人精品无吗| 亚洲精品国产精品乱码不99| 国产精品久久久久婷婷| 中文字幕亚洲一区二区av在线| 欧美精品一区二区在线观看| 久久综合九色综合久久久精品综合| 精品sm捆绑视频| 国产亚洲欧美中文| 亚洲欧美日韩一区二区| 一区二区三区鲁丝不卡| 中文字幕乱码亚洲精品一区| 17c精品麻豆一区二区免费| 亚洲精品成人天堂一二三| 亚洲制服丝袜av| 国产激情一区二区三区桃花岛亚洲| 免费在线看成人av| 极品瑜伽女神91| 色婷婷久久99综合精品jk白丝| 欧洲一区二区av| 2024国产精品| 午夜不卡在线视频| 99久久免费精品| 欧美videos大乳护士334| 国产精品久久久久久久午夜片 | 国产精品丝袜久久久久久app| 亚洲天堂免费在线观看视频| 麻豆91免费观看| 欧美人xxxx| 午夜精品一区二区三区电影天堂| 国产乱妇无码大片在线观看| 欧美精品久久一区| 国产精品丝袜久久久久久app| 热久久一区二区| 在线看日本不卡| 久久久www成人免费毛片麻豆 | 91精品国产色综合久久久蜜香臀| 久久久精品黄色| 国产成人av一区二区| 欧美一二区视频| 六月丁香婷婷色狠狠久久| 欧美日韩aaa| 青娱乐精品在线视频| 欧美日韩视频不卡| 亚洲精选一二三| 欧美日韩国产小视频在线观看| 亚洲国产精品人人做人人爽| 色婷婷av一区| 日本美女一区二区三区视频| 欧美日韩国产精品成人| 人人狠狠综合久久亚洲| 国产午夜精品一区二区三区嫩草| 肉肉av福利一精品导航| 日韩欧美不卡一区| 成人国产精品免费观看动漫| 中文字幕在线播放不卡一区| 成人精品免费看| 亚洲成人自拍一区| 欧美大片在线观看一区二区| 国产精品一二三| 午夜国产精品一区| 欧美国产精品v| 在线看不卡av| 国产成人av自拍| 亚洲福利视频一区| 国产精品污www在线观看| 日本丶国产丶欧美色综合| 精品一区二区三区在线观看 | 久久久久久日产精品| 91亚洲男人天堂| 国内欧美视频一区二区| 国产欧美精品一区aⅴ影院| 成人免费视频免费观看| 裸体在线国模精品偷拍| 亚洲一卡二卡三卡四卡五卡| 国产日韩精品一区| 日韩欧美区一区二| 欧美亚洲国产bt| 91女厕偷拍女厕偷拍高清| 国产毛片一区二区| 久久超碰97中文字幕| 日韩av中文在线观看| 亚洲国产成人精品视频| 亚洲私人影院在线观看| 中文字幕乱码一区二区免费| 精品国产凹凸成av人网站| 欧美酷刑日本凌虐凌虐| 91精品国产综合久久久久久久久久| 97se亚洲国产综合自在线不卡| 成人精品高清在线| 99精品视频一区| 色猫猫国产区一区二在线视频| 91福利区一区二区三区| 欧美性大战久久久久久久| 欧美专区亚洲专区| 欧美成人性福生活免费看| 欧美一级欧美三级在线观看| 欧美电影一区二区三区| 欧美不卡激情三级在线观看| 国产精品久久久久久久久免费樱桃 | 欧美电影免费提供在线观看| 久久久久久亚洲综合影院红桃| 中文字幕精品三区| 日本vs亚洲vs韩国一区三区| 国产一区二区调教| 91蜜桃在线免费视频| 欧美一区二区精品| 亚洲九九爱视频| 国产成人精品影视| 91超碰这里只有精品国产| 久久精品男人的天堂| 美女视频一区在线观看| 成人福利在线看| 欧美日韩黄色一区二区| 国产女人aaa级久久久级 | 精品国产免费人成在线观看| 亚洲女同女同女同女同女同69| 国产剧情av麻豆香蕉精品| 欧美午夜精品理论片a级按摩| 国产欧美久久久精品影院| 亚洲va中文字幕| 欧美中文字幕不卡| 国产精品电影一区二区三区| 国产精品中文字幕欧美| 91麻豆精品国产自产在线| 亚洲精品福利视频网站| 日本高清不卡视频| 自拍偷拍欧美激情| 欧美亚洲愉拍一区二区| 亚洲一区在线观看视频| 91福利视频在线| 日韩成人免费看| 日韩一区二区在线看| 国产一区二区看久久| 日韩欧美激情一区| 日本成人中文字幕| 久久久久久久久久久久久女国产乱| 五月天激情综合| 久久蜜桃av一区二区天堂| 成人性视频免费网站| 亚洲欧美日韩久久| 欧美精品v国产精品v日韩精品| 青青草成人在线观看| 国产精品视频第一区| 欧美日韩亚洲综合在线| 美腿丝袜在线亚洲一区 | 中文字幕av资源一区| 欧美主播一区二区三区美女| 久久se这里有精品| 中文字幕一区二区三区四区 | 日韩欧美视频一区| 国产一区二区0| 偷拍一区二区三区四区| 国产香蕉久久精品综合网| 欧美日韩国产高清一区二区三区 | 99久久伊人网影院| 自拍偷拍欧美激情| 久久久一区二区| 欧美一区日本一区韩国一区| a级高清视频欧美日韩| 另类欧美日韩国产在线| 亚洲国产裸拍裸体视频在线观看乱了 | 亚洲国产一区二区三区 | 日韩精品中文字幕在线不卡尤物 | 久久国产精品露脸对白| 亚洲国产视频一区| 亚洲午夜激情网站|