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

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

?? gatsp.cpp

?? 《游戲編程中的人工智能技術(shù)》一書中4
?? CPP
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
  for (int i=0; i<N; ++i)
  {
    int ThisTry = RandInt(0, m_iPopSize-1);

    if (m_vecPopulation[ThisTry].dFitness > BestFitnessSoFar)
    {
      ChosenOne = ThisTry;

      BestFitnessSoFar = m_vecPopulation[ThisTry].dFitness;
    }
  }

  //return the champion
  return m_vecPopulation[ChosenOne];
}

//-------------------------- AlternativeTournamentSelection---------------
//
//  variation of tournament selection described in chapter 5 of the book
//------------------------------------------------------------------------
SGenome& CgaTSP::AlternativeTournamentSelection()
{
  //allocate two indexes into the population
  int g1 = RandInt(0, m_vecPopulation.size()-1);
  int g2 = RandInt(0, m_vecPopulation.size()-1);

  //make sure they are different
  while(g1 == g2)
  {
    g2 = RandInt(0, m_vecPopulation.size()-1);
  }

  //grab a random number between 0 and 1
  float Rand = RandFloat();

  //now return the chosen individual based on CTOURNAMENT
  if(Rand < CTOURNAMENT)
  {
    //return the fitter of the two
    if (m_vecPopulation[g1].dFitness > m_vecPopulation[g2].dFitness)
    {
      return m_vecPopulation[g1];
    }
    else
    {
      return m_vecPopulation[g2];
    }
  }

  else
  {
    //return the weaker
    if (m_vecPopulation[g1].dFitness < m_vecPopulation[g2].dFitness)
    {
      return m_vecPopulation[g1];
    }
    else
    {
      return m_vecPopulation[g2];
    }
  }
}

//-----------------------------ChooseSection----------------------------
//
//	given a max span size and a min span size, this will calculate a 
//  random beginning and end point within the span. Used mainly in 
//  mutation and crossover operators
//----------------------------------------------------------------------
void ChooseSection(int       &beg,
                   int       &end,
                   const int max_span,
                   const int min_span)
{
	
	beg = RandInt(0, max_span-min_span);
	
	end = beg;
	
	//find an end
	while (end <= beg)
	{
		end = RandInt(0, max_span);
	}
}
//---------------------------MutateEM-----------------------------
//
//	Mutates the chromosome by choosing two random genes and swapping
//	their position.
//-----------------------------------------------------------------
void CgaTSP::MutateEM(vector<int> &chromo)
{
	//return dependent upon mutation rate
	if (RandFloat() > m_dMutationRate) return;

	//choose first gene
	int pos1 = RandInt(0, chromo.size()-1);

	//choose second
	int pos2 = pos1;

	while (pos1 == pos2)
	{
		pos2 = RandInt(0, chromo.size()-1);
	}

	//swap their positions
	swap(chromo[pos1], chromo[pos2]);
}

//--------------------------MutateIM------------------------------
//
//	Chooses a random gene and inserts displaced back into the
//	chromosome
//-----------------------------------------------------------------
void CgaTSP::MutateIM(vector<int> &chromo)
{
	//return dependent upon mutation rate
	if (RandFloat() > m_dMutationRate) return;

	//create an iterator for us to work with
	vector<int>::iterator curPos;

	//choose a gene to move
	curPos = chromo.begin() + RandInt(0, chromo.size()-1);

	//keep a note of the genes value
	int CityNumber = *curPos;

	//remove from the chromosome
	chromo.erase(curPos);

	//move the iterator to the insertion location
	curPos = chromo.begin() + RandInt(0, chromo.size()-1);

	chromo.insert(curPos, CityNumber);
}
//------------------------MutateSM--------------------------------
//
//	chooses a random start and point then scrambles the genes 
//	between them
//----------------------------------------------------------------
void CgaTSP::MutateSM(vector<int> &chromo)
{
	//return dependent upon mutation rate
	if (RandFloat() > m_dMutationRate) return;

	//first we choose a section of the chromosome
	const int MinSpanSize = 3;

	//these will hold the beginning and end points of the span
  int beg, end;

	ChooseSection(beg, end, chromo.size()-1, MinSpanSize);

	int span = end - beg;

	//now we just swap randomly chosen genes with the beg/end
	//range a few times to scramble them
	int NumberOfSwapsRqd = span;

	while(--NumberOfSwapsRqd)
	{
		vector<int>::iterator gene1 = chromo.begin();
		vector<int>::iterator gene2 = chromo.begin();

		//choose two loci within the range
		advance(gene1, beg + RandInt(0, span));
		advance(gene2, beg + RandInt(0, span));

		//exchange them
		swap(*gene1, *gene2);
		
	}//repeat
}

//-------------------------MutateDM-------------------------------------
//
//	Select two random points, grab the chunk of chromosome between them 
//	and then insert it back into the chromosome in a random position 
//	displaced from the original.
//----------------------------------------------------------------------
void CgaTSP::MutateDM(vector<int> &chromo)
{
	//return dependent upon mutation rate
	if (RandFloat() > m_dMutationRate) return;

	//first we choose a section of the chromosome
	const int MinSpanSize = 3;
	
	//these will hold the beginning and end points of the span
  int beg, end;
	
	ChooseSection(beg, end, chromo.size()-1, MinSpanSize);

	//setup iterators for our beg/end points
	vector<int>::iterator SectionStart = chromo.begin() + beg;
	vector<int>::iterator SectionEnd   = chromo.begin() + end;

	//hold on to the section we are moving
	vector<int> TheSection;
	TheSection.assign(SectionStart, SectionEnd);

	//erase from current position
	chromo.erase(SectionStart, SectionEnd);

	//move an iterator to a random insertion location
	vector<int>::iterator curPos;
	curPos = chromo.begin() + RandInt(0, chromo.size()-1);

	//re-insert the section
	chromo.insert(curPos, TheSection.begin(), TheSection.end());
	
}

//---------------------------Mutate-----------------------------
//
//	feeds the chromo into the correct mutation function according
//	to its type
//--------------------------------------------------------------
void CgaTSP::Mutate(vector<int> &chromo, MutationType &type)
{
	switch (type)
	{
	case EM:

		MutateEM(chromo);
		
		break;

	case SM:

		MutateSM(chromo);

		break;

	case IM:

		MutateIM(chromo);
		
		break;

  case DM:

		MutateDM(chromo);
		
		break;

	default: break;
	}//end switch
}

//-------------------------CrossoverPMX---------------------------------
//
// crossover operator based on 'partially matched crossover' as 
// defined in the text
//-------------------------------------------------------------------
void CgaTSP::CrossoverPMX(	const vector<int>	&mum, 
							              const vector<int>	&dad, 
							              vector<int>			&baby1, 
							              vector<int>			&baby2)
{
	baby1 = mum;
	baby2 = dad;
	
	//just return dependent on the crossover rate or if the
	//chromosomes are the same.
	if ( (RandFloat() > m_dCrossoverRate) || (mum == dad)) 
	{
		return;
	}

	//first we choose a section of the chromosome
	int beg = RandInt(0, mum.size()-2);
	
	int end = beg;
	
	//find an end
	while (end <= beg)
	{
		end = RandInt(0, mum.size()-1);
	}

	//now we iterate through the matched pairs of genes from beg
	//to end swapping the places in each child
	vector<int>::iterator posGene1, posGene2;

	for (int pos = beg; pos < end+1; ++pos)
	{
		//these are the genes we want to swap
		int gene1 = mum[pos];
		int gene2 = dad[pos];

		if (gene1 != gene2)
		{
			//find and swap them in baby1
			posGene1 = find(baby1.begin(), baby1.end(), gene1);
			posGene2 = find(baby1.begin(), baby1.end(), gene2);

			swap(*posGene1, *posGene2);

			//and in baby2
			posGene1 = find(baby2.begin(), baby2.end(), gene1);
			posGene2 = find(baby2.begin(), baby2.end(), gene2);
			
			swap(*posGene1, *posGene2);
		}
		
	}//next pair
}	

//-------------------------CrossoverOBX---------------------------------
//
// Order Based operator as described in Chapter 5
//-------------------------------------------------------------------
void CgaTSP::CrossoverOBX(	const vector<int>	&mum, 
							              const vector<int>	&dad, 
							              vector<int>			&baby1, 
							              vector<int>			&baby2)
{
  baby1 = mum;
	baby2 = dad;
	
	//just return dependent on the crossover rate or if the
	//chromosomes are the same.
	if ( (RandFloat() > m_dCrossoverRate) || (mum == dad)) 
	{
		return;
	}
 
  //holds the chosen cities
  vector<int> tempCities;

  //holds the positions of the chosen cities
  vector<int> positions;

  //first city position
  int Pos = RandInt(0, mum.size()-2);

  //keep adding random cities until we can add no more
  //record the positions as we go
  while (Pos < mum.size())
  {
    positions.push_back(Pos);

    tempCities.push_back(mum[Pos]);

    //next city
    Pos += RandInt(1, mum.size()-Pos);
  }

  //so now we have n amount of cities from mum in the tempCities
  //vector we can impose their order in dad.
  int cPos = 0;

  for (int cit=0; cit<baby2.size(); ++cit)
  {
    for (int i=0; i<tempCities.size(); ++i)
    {
      if (baby2[cit]==tempCities[i])
      {
         baby2[cit] = tempCities[cPos];

         ++cPos;

         break;
      }
    }
  }

   //now vice versa
  tempCities.clear();
  cPos = 0;

  //first grab the cities from the same positions in dad
  for(int i=0; i<positions.size(); ++i)
  {
    tempCities.push_back(dad[positions[i]]);
  }

  //and impose their order in mum
  for (cit=0; cit<baby1.size(); ++cit)
  {
    for (int i=0; i<tempCities.size(); ++i)
    {
      if (baby1[cit]==tempCities[i])
      {
         baby1[cit] = tempCities[cPos];

         ++cPos;

         break;
      }
    }
  }    
}

//----------------------- CrossoverPBX -----------------------------------
//
//  Position Based Crossover as described in Chapter 5
//------------------------------------------------------------------------
void CgaTSP::CrossoverPBX(	const vector<int>	&mum, 
							              const vector<int>	&dad, 
							              vector<int>			&baby1, 
							              vector<int>			&baby2)
{	
	//Return dependent on the crossover rate or if the
	//chromosomes are the same.

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
九九精品一区二区| 国产午夜亚洲精品午夜鲁丝片| 欧美视频在线观看一区二区| 91麻豆文化传媒在线观看| 99精品欧美一区二区蜜桃免费| 91欧美一区二区| 欧美色爱综合网| 日韩网站在线看片你懂的| 精品电影一区二区| 国产日韩av一区二区| 国产精品视频麻豆| 国产精品激情偷乱一区二区∴| 综合亚洲深深色噜噜狠狠网站| 一区二区在线观看av| 午夜精品福利视频网站| 老司机精品视频导航| 国产成人av福利| 97精品视频在线观看自产线路二| 91成人免费电影| 91麻豆精品国产无毒不卡在线观看| 欧美一区二区三区四区久久| 欧美日韩免费高清一区色橹橹| 欧美精品三级日韩久久| 欧美精品一二三区| 久久亚洲免费视频| 综合在线观看色| 日韩中文字幕不卡| 国产一区福利在线| av毛片久久久久**hd| 欧美日韩视频在线一区二区| 欧美刺激午夜性久久久久久久| 国产亚洲福利社区一区| 91精品国产91久久久久久一区二区 | 亚洲美女屁股眼交3| 日韩精品电影一区亚洲| 成人综合婷婷国产精品久久 | 久久免费的精品国产v∧| 国产精品久久夜| 日日摸夜夜添夜夜添亚洲女人| 韩国v欧美v亚洲v日本v| 色婷婷av一区二区三区之一色屋| 91精品国产综合久久久久久| 2023国产精品| 中文字幕一区二区视频| 青青草国产成人av片免费| 成人激情文学综合网| 欧美日韩综合色| 欧美激情中文字幕| 午夜婷婷国产麻豆精品| 国产黄色精品视频| 欧美日韩国产高清一区| 国产精品久久久久婷婷| 日本aⅴ亚洲精品中文乱码| 成人激情免费网站| 欧美大片一区二区三区| 一区二区三区日本| 国产成人小视频| 91精品国产黑色紧身裤美女| 18成人在线观看| 国产精品主播直播| 欧美日韩成人高清| 综合中文字幕亚洲| 国产精品456| 欧美一区二区免费| 亚洲一区二区三区四区五区中文| 国产一区二区三区高清播放| 在线视频一区二区免费| 国产色综合一区| 狠狠色狠狠色综合| 制服丝袜av成人在线看| 国产精品国产馆在线真实露脸 | 色综合久久中文字幕综合网| 欧美精品一区二区三区蜜桃视频| 午夜久久久久久久久久一区二区| 91蝌蚪porny九色| 国产夜色精品一区二区av| 男人的天堂久久精品| 欧美日韩精品高清| 国产日韩在线不卡| 日韩国产成人精品| 欧美日韩综合色| 亚洲精品成人少妇| www.欧美日韩国产在线| 国产日韩欧美精品电影三级在线| 狠狠色丁香久久婷婷综| 91精品国产91久久综合桃花| 五月婷婷欧美视频| 精品视频在线视频| 亚洲黄色av一区| 99久久99久久精品国产片果冻| 国产女人18水真多18精品一级做| 国精品**一区二区三区在线蜜桃| 欧美一级艳片视频免费观看| 日韩黄色免费电影| 欧美日韩国产123区| 亚洲18女电影在线观看| 欧美综合天天夜夜久久| 亚洲一区视频在线观看视频| 在线观看精品一区| 国产精品国产自产拍在线| 国产盗摄女厕一区二区三区| 国产亚洲欧美在线| 国产成人精品aa毛片| 国产精品日日摸夜夜摸av| 成人黄色在线视频| 亚洲人成网站精品片在线观看 | 2021国产精品久久精品| 国产一区欧美二区| 国产视频一区二区在线| 顶级嫩模精品视频在线看| 亚洲欧洲国产专区| 91在线观看视频| 一区二区三区成人在线视频| 欧美最猛性xxxxx直播| 亚洲成人免费在线观看| 欧美日韩亚洲丝袜制服| 亚洲一区二区三区自拍| 制服视频三区第一页精品| 精品一区二区三区视频| 久久精品亚洲精品国产欧美kt∨ | 久久福利资源站| 91精品国产黑色紧身裤美女| 国产一区久久久| 中文字幕一区二区三区蜜月| 色综合久久久久综合99| 午夜不卡av免费| 欧美日韩成人一区| 韩国av一区二区三区| 国产欧美日韩综合精品一区二区| 972aa.com艺术欧美| 亚洲成人三级小说| 久久综合久色欧美综合狠狠| 成人h精品动漫一区二区三区| 亚洲欧美日韩综合aⅴ视频| 欧美日韩亚洲另类| 韩国成人精品a∨在线观看| 国产精品五月天| 91视频91自| 日本欧美韩国一区三区| 国产调教视频一区| 在线观看国产日韩| 国产一区二区三区香蕉| 亚洲精品视频一区| 日韩一区二区免费在线电影 | 欧美一区二区三区精品| 国产精品夜夜爽| 樱桃国产成人精品视频| 精品久久久久久无| 91香蕉视频在线| 久久精品国产精品亚洲红杏| 久久久av毛片精品| 国产成人一区在线| 亚洲地区一二三色| 亚洲国产精品av| 678五月天丁香亚洲综合网| 不卡在线视频中文字幕| 婷婷中文字幕一区三区| 国产精品毛片久久久久久久| 欧美久久久久久久久久| 99精品欧美一区二区蜜桃免费| 日韩制服丝袜先锋影音| 亚洲欧美在线另类| 日韩亚洲欧美一区| 色中色一区二区| 国产精品自在在线| 午夜精品一区二区三区电影天堂 | 亚洲人亚洲人成电影网站色| 日韩丝袜情趣美女图片| 日本精品视频一区二区三区| 国产一区二区三区日韩| 日韩综合小视频| 亚洲日本欧美天堂| 久久久久久久久岛国免费| 56国语精品自产拍在线观看| 97se亚洲国产综合自在线| 99热国产精品| www.亚洲免费av| jiyouzz国产精品久久| 粉嫩av亚洲一区二区图片| 国产大陆精品国产| 懂色av一区二区三区蜜臀| 丁香婷婷综合激情五月色| 成人免费三级在线| 成人妖精视频yjsp地址| 粉嫩高潮美女一区二区三区| 懂色av一区二区在线播放| 粉嫩久久99精品久久久久久夜| 成人免费观看视频| 成人免费黄色大片| 91免费在线看| 色综合久久综合网| 欧美午夜电影网| 91精品国产高清一区二区三区蜜臀| 91精品免费观看| 日韩欧美亚洲另类制服综合在线| 日韩免费在线观看| 久久久不卡网国产精品二区| 欧美国产日韩一二三区| 亚洲欧洲日产国码二区| 亚洲综合av网|