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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? cgalander.cpp

?? 《游戲編程中的人工智能技術(shù)》書中源代碼和可執(zhí)行文件
?? CPP
字號(hào):
#include "CgaLander.h"

//----------------------CreateStartPopulation---------------------------
//
//-----------------------------------------------------------------------
void CgaLander::CreateStartPopulation()
{
	//clear existing population
	m_vecPop.clear();
	
	for (int i=0; i<m_iPopSize; i++)
	{
		m_vecPop.push_back(SGenome(CHROMO_LENGTH));
	}

	//reset all variables
	m_iGeneration		 = 0;
	m_iFittestGenome	 = 0;
	m_dBestFitness  = 0;
	m_dTotalFitness = 0;
}

//-------------------------GrabNBest----------------------------------
//
//	This works like an advanced form of elitism by inserting NumCopies
//  copies of the NBest most fittest genomes into a population vector
//--------------------------------------------------------------------
void CgaLander::GrabNBest(int	            NBest,
					                const int	      NumCopies,
					                vector<SGenome>	&vecPop)
{
	//add the required amount of copies of the n most fittest 
	//to the supplied vector
	while(NBest--)
	{
		for (int i=0; i<NumCopies; ++i)
		{
			vecPop.push_back(m_vecPop[(m_iPopSize - 1) - NBest]);
		}
	}
}

//--------------------------RouletteWheelSelection-----------------
//
//	selects a member of the population by using roulette wheel 
//	selection as described in the text.
//------------------------------------------------------------------
SGenome& CgaLander::RouletteWheelSelection()
{
	double fSlice	= RandFloat() * m_dTotalFitness;
	
	double cfTotal	= 0.0;
	
	int	SelectedGenome = 0;
	
	for (int i=0; i<m_iPopSize; ++i)
	{
		
		cfTotal += m_vecPop[i].dFitness;
		
		if (cfTotal > fSlice) 
		{
			SelectedGenome = i;

			break;
		}
	}
	
	return m_vecPop[SelectedGenome];
}


//----------------------------Mutate---------------------------------
//
//--------------------------------------------------------------------
void CgaLander::Mutate(vector<SGene> &vecActions)
{

	for (int gene=0; gene<vecActions.size(); ++gene)
  {
    //do we mutate the action?
	  if (RandFloat() < m_dMutationRate)
	  {
      vecActions[gene].action = (action_type)RandInt(0,3);

	  }

	  //do we mutate the duration?
	  if (RandFloat() < m_dMutationRate/2)
	  {
      vecActions[gene].duration += RandomClamped()*MAX_MUTATION_DURATION;

      //clamp the duration
      Clamp(vecActions[gene].duration, 0, MAX_ACTION_DURATION);
	  }

  }//next gene
}


//--------------------------- CrossoverMulti -----------------------------
//
//  This function performs multipoint crossover on the genes. That is to
//  say for each chromosome where crossover is to be performed we determine
//  a swap rate and iterate through each chromosome swap over individual
//  genes where appropriate. 
//-------------------------------------------------------------------------
void CgaLander::CrossoverMulti( const vector<SGene> &mum,
						                    const vector<SGene> &dad,
						                    vector<SGene>       &baby1,
						                    vector<SGene>	     &baby2)
{
  //just return parents as offspring dependent on the rate
	//or if parents are the same
	if ( (RandFloat() > m_dCrossoverRate) || (mum == dad)) 
	{
		baby1 = mum;
		baby2 = dad;

		return;
	}
    
  //first determine a swapping rate for this chromosome
  float SwapRate = RandFloat()*CHROMO_LENGTH;

  for (int gene=0; gene<mum.size(); ++gene)
  {
    if (RandFloat() < SwapRate)
    {
      //switch the genes at this point
      baby1.push_back(dad[gene]);
      baby2.push_back(mum[gene]);
    
    }

    else
    {
      //just copy into offspring 
      baby1.push_back(mum[gene]);
      baby2.push_back(dad[gene]);
    }
  }//next gene
}

//------------------------------ UpdatePop -----------------------------
//
//----------------------------------------------------------------------
void CgaLander::UpdatePop(vector<SGenome> &vOldPop)
{
  m_vecPop = vOldPop;

  vOldPop = Epoch();

}

//--------------------------------Epoch---------------------------------
//
//	This is the workhorse of the GA. It first updates the fitness
//	scores of the population then creates a new population of
//	genomes using the Selection, Crossover and Mutation operators
//	we have discussed
//----------------------------------------------------------------------
vector<SGenome> CgaLander::Epoch()
{
	
	//create some storage for the baby genomes 
	vector<SGenome> vecBabyGenomes;

  //sort the population (for scaling and elitism)
  sort(m_vecPop.begin(), m_vecPop.end());

  CalculateBestWorstAvTot();

	//Now to add a little elitism we shall add in some copies of the
	//fittest genomes. Make sure we add an EVEN number or the roulette wheel
	//sampling will crash
	if (!(NUM_COPIES_ELITE * NUM_ELITE % 2))
	{
		GrabNBest(NUM_ELITE, NUM_COPIES_ELITE, vecBabyGenomes);
	}


	while (vecBabyGenomes.size() < m_iPopSize)
	{
		//select 2 parents
	  SGenome mum = RouletteWheelSelection();
		SGenome dad = RouletteWheelSelection();
   
		//operator - crossover
		SGenome baby1, baby2;
    
		CrossoverMulti(mum.vecActions,
                   dad.vecActions,
                   baby1.vecActions,
                   baby2.vecActions);

		//operator - mutate
		Mutate(baby1.vecActions);
		Mutate(baby2.vecActions);

		//add to new population
		vecBabyGenomes.push_back(baby1);
		vecBabyGenomes.push_back(baby2);
	}

	//copy babies back into starter population
	m_vecPop = vecBabyGenomes;

	//increment the generation counter
	++m_iGeneration;

  return m_vecPop;
}

//-----------------------CalculateBestWorstAvTot-----------------------	
//
//	calculates the fittest and weakest genome and the average/total 
//	fitness scores. Assumes the genomes have been sorted
//---------------------------------------------------------------------
void CgaLander::CalculateBestWorstAvTot()
{
	m_dTotalFitness = 0;
		
	for (int i=0; i<m_iPopSize; ++i)
	{
		m_dTotalFitness	+= m_vecPop[i].dFitness;		
	}//next chromo
	
	m_dAverageFitness = m_dTotalFitness / m_iPopSize;

  m_iFittestGenome = 0;
  m_dBestFitness   = m_vecPop[m_iPopSize - 1].dFitness;
  m_dWorstFitness  = m_vecPop[0].dFitness;

}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩影院精彩在线| 日韩一区二区视频| 欧美人与禽zozo性伦| 884aa四虎影成人精品一区| 精品国产电影一区二区| 国产精品三级av| 亚洲一区二区成人在线观看| 麻豆成人91精品二区三区| 成人免费不卡视频| 欧美日韩一区二区三区四区 | 亚洲6080在线| 麻豆精品蜜桃视频网站| 成人深夜在线观看| 欧美日韩国产系列| 国产欧美一区二区三区鸳鸯浴 | 一区二区三区国产豹纹内裤在线| 五月天激情综合| 韩国欧美国产一区| 一本久道久久综合中文字幕| 日韩一二在线观看| 自拍av一区二区三区| 日本va欧美va精品| av成人动漫在线观看| 日韩一区二区在线观看视频播放| 国产校园另类小说区| 亚洲第一狼人社区| 国产成人精品免费看| 91精品麻豆日日躁夜夜躁| 国产精品―色哟哟| 奇米亚洲午夜久久精品| 欧美最猛性xxxxx直播| 久久综合狠狠综合久久综合88 | 欧美一区二视频| 中文字幕不卡一区| 老汉av免费一区二区三区| 色成年激情久久综合| 久久先锋影音av鲁色资源| 亚洲国产精品久久艾草纯爱| 成人午夜视频在线观看| 91精品婷婷国产综合久久性色| 中文字幕一区二区三区不卡在线| 麻豆国产精品官网| 欧美精品久久一区| 中文字幕一区二区三区四区| 黄页网站大全一区二区| 欧美区在线观看| 亚洲欧美韩国综合色| 国产高清不卡一区二区| 日韩一区二区中文字幕| 五月天亚洲婷婷| 欧美在线免费播放| 亚洲手机成人高清视频| 国产精品亚洲成人| 精品久久人人做人人爱| 日韩在线a电影| 欧美伦理视频网站| 亚洲自拍偷拍九九九| 91浏览器入口在线观看| 国产精品情趣视频| 国产成人综合在线| 久久久午夜精品| 国产一区二区视频在线播放| 精品国产91亚洲一区二区三区婷婷 | 日本中文在线一区| 欧美日韩亚洲综合| 一区二区三区精密机械公司| 91久久人澡人人添人人爽欧美| 中文字幕不卡三区| av综合在线播放| 国产精品美女久久久久av爽李琼 | 亚洲天堂成人在线观看| 国产成人aaa| 国产精品三级av| 99国内精品久久| 亚洲欧美另类小说| 一本色道久久综合亚洲精品按摩| 亚洲视频免费看| 色爱区综合激月婷婷| 又紧又大又爽精品一区二区| 色综合视频一区二区三区高清| 亚洲欧洲99久久| 91蜜桃免费观看视频| 亚洲欧美二区三区| 日本福利一区二区| 视频一区二区中文字幕| 91精品国产综合久久久蜜臀图片 | 久久精品在这里| 丰满亚洲少妇av| 中文字幕一区二区三区四区| 色婷婷精品久久二区二区蜜臀av| 一区二区三区波多野结衣在线观看| 在线观看日韩电影| 日韩福利视频网| 久久久久久亚洲综合影院红桃| 国产自产高清不卡| 国产精品久久二区二区| 91国偷自产一区二区开放时间| 一区二区三区成人| 欧美一区日韩一区| 国产成人av资源| 亚洲欧洲中文日韩久久av乱码| 欧美日韩视频不卡| 久久99久久久欧美国产| 欧美国产日韩a欧美在线观看| av亚洲产国偷v产偷v自拍| 亚洲综合999| 精品久久国产老人久久综合| 国产精品一二三| 亚洲免费观看高清在线观看| 欧美肥胖老妇做爰| 国产高清精品网站| 亚洲图片有声小说| 日韩亚洲欧美一区| 成人国产免费视频| 天天影视网天天综合色在线播放| 精品国产露脸精彩对白| 一本大道久久a久久精品综合| 石原莉奈在线亚洲三区| 国产亚洲精品7777| 91成人在线观看喷潮| 国产在线麻豆精品观看| 伊人一区二区三区| 久久久久国产精品麻豆ai换脸 | 亚洲综合一二区| 久久婷婷国产综合国色天香| 色成年激情久久综合| 久久电影网电视剧免费观看| 亚洲欧美激情小说另类| 2020国产精品| 欧美色欧美亚洲另类二区| 国产传媒一区在线| 日韩av一区二| 自拍偷拍亚洲综合| 久久久久久久性| 欧美精品v国产精品v日韩精品| 高潮精品一区videoshd| 日韩黄色片在线观看| 亚洲私人黄色宅男| 久久精品欧美日韩精品 | 国内成人免费视频| 亚洲国产日韩a在线播放性色| 欧美经典三级视频一区二区三区| 欧美猛男超大videosgay| 不卡av免费在线观看| 久久精品国产精品亚洲红杏| 亚洲一区电影777| 国产精品久久福利| 国产欧美一区二区精品性色超碰| 欧美肥大bbwbbw高潮| 色婷婷综合久久久久中文| 国产成人a级片| 黑人精品欧美一区二区蜜桃| 亚洲第一电影网| 亚洲欧美二区三区| 中文字幕在线一区二区三区| 久久欧美中文字幕| 欧美一二三四区在线| 欧美日韩色一区| 一本色道久久综合狠狠躁的推荐| 盗摄精品av一区二区三区| 麻豆91在线观看| 青青草97国产精品免费观看无弹窗版| 亚洲一区二区三区免费视频| 亚洲欧美日韩在线播放| 中文字幕制服丝袜一区二区三区| 久久精品亚洲精品国产欧美| 精品欧美一区二区三区精品久久| 欧美浪妇xxxx高跟鞋交| 欧美日精品一区视频| 欧美做爰猛烈大尺度电影无法无天| 91亚洲男人天堂| 99视频国产精品| 97久久超碰国产精品电影| 成人免费毛片app| 成人免费看片app下载| 波多野结衣精品在线| 成人丝袜18视频在线观看| 成人动漫一区二区三区| 成人精品国产一区二区4080| 粉嫩av一区二区三区| 成人免费av资源| 不卡一区在线观看| 99免费精品在线观看| 91在线免费视频观看| 在线精品国精品国产尤物884a| 色婷婷激情综合| 欧美午夜影院一区| 欧美日韩免费不卡视频一区二区三区| 欧美色窝79yyyycom| 欧美绝品在线观看成人午夜影视| 欧美精品tushy高清| 欧美一区二区久久久| 日韩欧美国产1| 久久人人爽爽爽人久久久| 国产欧美日韩激情| 综合电影一区二区三区| 亚洲一级二级在线| 日韩 欧美一区二区三区| 精品一区二区精品| 国产99久久精品|