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

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

?? cgenalg.cpp

?? 智能掃雷工 AI 遺傳算法 人工神經(jīng)網(wǎng)絡(luò)
?? CPP
字號(hào):
#include "CGenAlg.h"




//-----------------------------------constructor-------------------------
//
//	sets up the population with random floats
//
//-----------------------------------------------------------------------
CGenAlg::CGenAlg(int	  popsize,
                 double	MutRat,
                 double	CrossRat,
                 int	  numweights) :	m_iPopSize(popsize),
                                      m_dMutationRate(MutRat),
										                  m_dCrossoverRate(CrossRat),
										                  m_iChromoLength(numweights),
										                  m_dTotalFitness(0),
										                  m_cGeneration(0),
										                  m_iFittestGenome(0),
										                  m_dBestFitness(0),
										                  m_dWorstFitness(99999999),
										                  m_dAverageFitness(0)
{
	//initialise population with chromosomes consisting of random
	//weights and all fitnesses set to zero
	for (int i=0; i<m_iPopSize; ++i)
	{
		m_vecPop.push_back(SGenome());

		for (int j=0; j<m_iChromoLength; ++j)
		{
			m_vecPop[i].vecWeights.push_back(RandomClamped());
		}
	}
}


//---------------------------------Mutate--------------------------------
//
//	mutates a chromosome by perturbing its weights by an amount not 
//	greater than CParams::dMaxPerturbation
//-----------------------------------------------------------------------
void CGenAlg::Mutate(vector<double> &chromo)
{
	//traverse the chromosome and mutate each weight dependent
	//on the mutation rate
	for (int i=0; i<chromo.size(); ++i)
	{
		//do we perturb this weight?
		if (RandFloat() < m_dMutationRate)
		{
			//add or subtract a small value to the weight
			chromo[i] += (RandomClamped() * CParams::dMaxPerturbation);
		}
	}
}

//----------------------------------GetChromoRoulette()------------------
//
//	returns a chromo based on roulette wheel sampling
//
//-----------------------------------------------------------------------
SGenome CGenAlg::GetChromoRoulette()
{
	//generate a random number between 0 & total fitness count
	double Slice = (double)(RandFloat() * m_dTotalFitness);

	//this will be set to the chosen chromosome
	SGenome TheChosenOne;
	
	//go through the chromosones adding up the fitness so far
	double FitnessSoFar = 0;
	
	for (int i=0; i<m_iPopSize; ++i)
	{
		FitnessSoFar += m_vecPop[i].dFitness;
		
		//if the fitness so far > random number return the chromo at 
		//this point
		if (FitnessSoFar >= Slice)
		{
			TheChosenOne = m_vecPop[i];

			break;
		}
		
	}

	return TheChosenOne;
}
	
//-------------------------------------Crossover()-----------------------
//	
//  given parents and storage for the offspring this method performs
//	crossover according to the GAs crossover rate
//-----------------------------------------------------------------------
void CGenAlg::Crossover(const vector<double> &mum,
                        const vector<double> &dad,
                        vector<double>       &baby1,
                        vector<double>       &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;
	}

	//determine a crossover point
	int cp = RandInt(0, m_iChromoLength - 1);

	//create the offspring
	for (int i=0; i<cp; ++i)
	{
		baby1.push_back(mum[i]);
		baby2.push_back(dad[i]);
	}

	for (int i=cp; i<mum.size(); ++i)
	{
		baby1.push_back(dad[i]);
		baby2.push_back(mum[i]);
	}
	
	
	return;
}

//-----------------------------------Epoch()-----------------------------
//
//	takes a population of chromosones and runs the algorithm through one
//	 cycle.
//	Returns a new population of chromosones.
//
//-----------------------------------------------------------------------
vector<SGenome> CGenAlg::Epoch(vector<SGenome> &old_pop)
{
	//assign the given population to the classes population
  m_vecPop = old_pop;

  //reset the appropriate variables
  Reset();

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

  //calculate best, worst, average and total fitness
	CalculateBestWorstAvTot();
  
  //create a temporary vector to store new chromosones
	vector <SGenome> vecNewPop;

	//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 (!(CParams::iNumCopiesElite * CParams::iNumElite % 2))
	{
		GrabNBest(CParams::iNumElite, CParams::iNumCopiesElite, vecNewPop);
	}
	

	//now we enter the GA loop
	
	//repeat until a new population is generated
	while (vecNewPop.size() < m_iPopSize)
	{
		//grab two chromosones
		SGenome mum = GetChromoRoulette();
		SGenome dad = GetChromoRoulette();

		//create some offspring via crossover
		vector<double>		baby1, baby2;

		Crossover(mum.vecWeights, dad.vecWeights, baby1, baby2);

		//now we mutate
		Mutate(baby1);
		Mutate(baby2);

		//now copy into vecNewPop population
		vecNewPop.push_back(SGenome(baby1, 0));
		vecNewPop.push_back(SGenome(baby2, 0));
	}

	//finished so assign new pop back into m_vecPop
	m_vecPop = vecNewPop;

	return m_vecPop;
}


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

//-----------------------CalculateBestWorstAvTot-----------------------	
//
//	calculates the fittest and weakest genome and the average/total 
//	fitness scores
//---------------------------------------------------------------------
void CGenAlg::CalculateBestWorstAvTot()
{
	m_dTotalFitness = 0;
	
	double HighestSoFar = 0;
	double LowestSoFar  = 9999999;
	
	for (int i=0; i<m_iPopSize; ++i)
	{
		//update fittest if necessary
		if (m_vecPop[i].dFitness > HighestSoFar)
		{
			HighestSoFar	 = m_vecPop[i].dFitness;
			
			m_iFittestGenome = i;

			m_dBestFitness	 = HighestSoFar;
		}
		
		//update worst if necessary
		if (m_vecPop[i].dFitness < LowestSoFar)
		{
			LowestSoFar = m_vecPop[i].dFitness;
			
			m_dWorstFitness = LowestSoFar;
		}
		
		m_dTotalFitness	+= m_vecPop[i].dFitness;
		
		
	}//next chromo
	
	m_dAverageFitness = m_dTotalFitness / m_iPopSize;
}

//-------------------------Reset()------------------------------
//
//	resets all the relevant variables ready for a new generation
//--------------------------------------------------------------
void CGenAlg::Reset()
{
	m_dTotalFitness		= 0;
	m_dBestFitness		= 0;
	m_dWorstFitness		= 9999999;
	m_dAverageFitness	= 0;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本中文字幕一区二区有限公司| 亚洲免费av高清| 国产九色sp调教91| 久久精品亚洲麻豆av一区二区| 蜜桃av一区二区三区| www国产成人免费观看视频 深夜成人网| 久久福利资源站| 久久精品人人做人人爽人人| 成人高清av在线| 一个色综合av| 日韩欧美一级片| 国产精华液一区二区三区| 国产精品视频一二三区| 一本大道久久a久久精二百| 天堂资源在线中文精品| 精品国产一区久久| 91在线观看地址| 首页欧美精品中文字幕| 久久蜜臀中文字幕| 91同城在线观看| 久久国产生活片100| 欧美国产成人精品| 欧美日韩精品一区二区| 国产乱一区二区| 一级做a爱片久久| 久久午夜羞羞影院免费观看| 91在线国内视频| 久久精品免费观看| 亚洲激情五月婷婷| 精品国产精品网麻豆系列| 色综合中文字幕国产 | 欧美亚一区二区| 老鸭窝一区二区久久精品| 中文字幕五月欧美| 91精品国产黑色紧身裤美女| 国产成都精品91一区二区三| 亚洲国产毛片aaaaa无费看| 欧美大片在线观看一区| 色诱亚洲精品久久久久久| 九色|91porny| 午夜欧美大尺度福利影院在线看| 久久免费看少妇高潮| 欧美日韩卡一卡二| 99久久精品国产一区二区三区| 青青国产91久久久久久| 亚洲美女屁股眼交| 久久久久国产精品免费免费搜索| 欧美日韩国产精品成人| 91网址在线看| 丰满放荡岳乱妇91ww| 免费高清在线一区| 天天操天天色综合| 一级女性全黄久久生活片免费| 中文欧美字幕免费| 精品成人免费观看| 日韩欧美亚洲一区二区| 欧美日韩精品专区| 欧美写真视频网站| 91麻豆福利精品推荐| 国产福利视频一区二区三区| 久久国产精品露脸对白| 日本一区中文字幕| 亚洲国产美女搞黄色| 一区二区三区**美女毛片| 国产精品久久国产精麻豆99网站| 久久精品人人做人人综合| 欧美videos中文字幕| 91精品国产欧美一区二区| 欧美精选在线播放| 欧美午夜片在线观看| 欧美在线短视频| 色婷婷激情一区二区三区| 91在线观看免费视频| 91在线码无精品| 91视频观看免费| 91免费看视频| 91黄视频在线| 欧美亚洲日本国产| 欧美三级蜜桃2在线观看| 欧洲亚洲精品在线| 欧美伊人久久大香线蕉综合69| 欧美综合天天夜夜久久| 欧美日韩一级视频| 91精品国产麻豆| 亚洲精品在线观看网站| 久久久久久久久久久电影| 国产婷婷一区二区| 中文无字幕一区二区三区 | 91视频.com| 欧洲av一区二区嗯嗯嗯啊| 欧美日韩成人高清| 日韩一区二区三区高清免费看看| 91精品国产综合久久精品| 欧美一区二区三区四区五区| 精品久久人人做人人爽| 国产亚洲一区二区在线观看| 欧美国产一区在线| 亚洲美女在线一区| 日本午夜精品视频在线观看| 久久99精品国产.久久久久| 国产成人在线免费观看| eeuss鲁片一区二区三区| 欧美三级视频在线观看| 欧美成人性战久久| 国产精品欧美一级免费| 亚洲午夜私人影院| 国产原创一区二区| 色屁屁一区二区| 日韩女优毛片在线| 国产精品乱码人人做人人爱 | 蜜桃久久久久久久| 成人涩涩免费视频| 欧美日韩国产一级片| 欧美成人高清电影在线| 中文字幕一区二区三区不卡在线| 亚洲一区在线视频观看| 日韩 欧美一区二区三区| 成人精品一区二区三区中文字幕| 在线观看国产日韩| 久久欧美中文字幕| 亚洲主播在线播放| 国产精品自拍三区| 欧美日韩中文字幕一区二区| 欧美精品一区二区三区高清aⅴ | 亚洲一区二区三区小说| 国产在线国偷精品免费看| 日本道免费精品一区二区三区| 日韩欧美你懂的| 亚洲综合自拍偷拍| 国产电影精品久久禁18| 制服丝袜亚洲精品中文字幕| 国产精品日韩成人| 激情综合色播五月| 欧美乱妇15p| 国产精品区一区二区三| 激情深爱一区二区| 欧美男女性生活在线直播观看| 国产精品色在线| 久久99精品久久久久久国产越南| 在线观看91视频| 亚洲视频在线一区二区| 国产精品 欧美精品| 日韩欧美色电影| 日韩精品一级二级| 欧美在线你懂得| 亚洲品质自拍视频网站| 风间由美性色一区二区三区| 欧美成va人片在线观看| 亚洲已满18点击进入久久| av亚洲精华国产精华| 日本一区二区三区电影| 久久国产精品72免费观看| 5月丁香婷婷综合| 亚洲一区二区免费视频| 91蜜桃视频在线| 中文字幕一区在线观看| 国产激情视频一区二区三区欧美 | 国产成人aaa| 久久久亚洲综合| 国产乱子伦一区二区三区国色天香 | av亚洲产国偷v产偷v自拍| 国产午夜亚洲精品理论片色戒| 久久99深爱久久99精品| 欧美一级午夜免费电影| 青青草97国产精品免费观看无弹窗版| 欧美天堂一区二区三区| 亚洲成人1区2区| 欧美老女人第四色| 亚洲风情在线资源站| 欧美精选午夜久久久乱码6080| 亚洲福利一区二区| 欧美一区二区三区人| 免费观看成人鲁鲁鲁鲁鲁视频| 日韩欧美一级在线播放| 精品一二三四在线| 日本一区二区在线不卡| 成人高清免费观看| 亚洲精品第一国产综合野| 欧美日韩三级一区| 日本中文一区二区三区| 久久亚洲二区三区| 不卡一区二区在线| 亚洲精选视频免费看| 欧美日韩日日摸| 另类成人小视频在线| 久久九九久久九九| 色噜噜狠狠成人网p站| 五月天久久比比资源色| 精品国产免费人成电影在线观看四季| 国产乱码精品一区二区三区av | 国产精品一区二区久久不卡| 国产精品久久久久久久浪潮网站| 色综合久久精品| 日韩国产精品大片| 26uuu色噜噜精品一区二区| 成人精品gif动图一区| 亚洲图片欧美视频| 精品国产乱码久久久久久夜甘婷婷 | 亚洲欧洲av在线| 欧美妇女性影城|