91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 4KB
    文件類型: .rar
    金幣: 2
    下載: 0 次
    發(fā)布日期: 2021-05-06
  • 語言: C/C++
  • 標(biāo)簽: GA??遺傳算法??

資源簡介

遺傳算法 C++實現(xiàn) 控制臺演示版本 附有詳盡注釋 注:因為是單數(shù)浮點數(shù)編碼,所以未使用基因重組函數(shù) 如果看完仍然不懂,歡迎參看本人博客的一篇關(guān)于GA的文章 http://blog.csdn.net/emiyasstar__/article/details/6938608

資源截圖

代碼片段和文件信息

#include

#include
#include?
#include?
#include
#include“GA.h“

using?namespace?std;


//srand((unsigned)?time(NULL));

double?random()
{
double?randNum;
randNum=rand()*1.0/RAND_MAX;
return?randNum;
}

?GenAlg::GenAlg()
{

}



void?GenAlg::init(int?popsize?double?MutRate?double?CrossRate?int?GenLenghtdouble?LeftPointdouble?RightPoint)

{

popSize?=?popsize;

mutationRate?=?MutRate;

crossoverRate?=?CrossRate;

chromoLength?=?GenLenght;

totalFitness?=?0;

generation?=?0;

//fittestGenome?=?0;

bestFitness?=?0.0;

worstFitness?=?99999999;

averageFitness?=?0;

maxPerturbation=0.004;

leftPoint=LeftPoint;

rightPoint=RightPoint;

//清空種群容器,以初始化

vecPop.clear();

for?(int?i=0;?i
{?????

//類的構(gòu)造函數(shù)已經(jīng)把適應(yīng)性評分初始化為0

vecPop.push_back(Genome());

//把所有的基因編碼初始化為函數(shù)區(qū)間內(nèi)的隨機數(shù)。

for?(int?j=0;?j
{

vecPop[i].vecGenome.push_back(random()?*?

(rightPoint?-?leftPoint)?+?leftPoint);

}

}

}

void?GenAlg::Reset()
{
totalFitness=0;
//bestFitness=0;
????//worstFitness=9999;
averageFitness=0;

}

void?GenAlg::CalculateBestWorstAvTot()
{
for?(int?i=0;?i
{

//累計適應(yīng)性分?jǐn)?shù).
totalFitness+=?vecPop[i].fitness;

if(vecPop[i].fitness>=bestFitness)
{
bestFitness=vecPop[i].fitness;
fittestGenome=vecPop[i];
}

if(vecPop[i].fitness<=worstFitness)
worstFitness=vecPop[i].fitness;

}

averageFitness=totalFitness/popSize;



}



Genome?GenAlg::?GetChromoRoulette()

{

//產(chǎn)生一個0到人口總適應(yīng)性評分總和之間的隨機數(shù).

//中m_dTotalFitness記錄了整個種群的適應(yīng)性分?jǐn)?shù)總和)

double?Slice?=?(random())?*?totalFitness;

//這個基因?qū)⒊休d轉(zhuǎn)盤所選出來的那個個體.

Genome?TheChosenOne;

//累計適應(yīng)性分?jǐn)?shù)的和.

double?FitnessSoFar?=?0;

//遍歷總?cè)丝诶锩娴拿恳粭l染色體。

for?(int?i=0;?i
{

//累計適應(yīng)性分?jǐn)?shù).

FitnessSoFar?+=?vecPop[i].fitness;

//如果累計分?jǐn)?shù)大于隨機數(shù)就選擇此時的基因.

if?(FitnessSoFar?>=?Slice)

{

TheChosenOne?=?vecPop[i];

break;

}

}

//返回轉(zhuǎn)盤選出來的個體基因

return?TheChosenOne;

}

void?GenAlg::Mutate(vector?&chromo)
{

//遵循預(yù)定的突變概率對基因進行突變

for?(int?i=0;?i
{

//如果發(fā)生突變的話

if?(random()?
{

//使該權(quán)值增加或者減少一個很小的隨機數(shù)值

chromo[i]?+=?((random()-0.5)?*?maxPerturbation);

//保證袋鼠不至于跳出自然保護區(qū).

if(chromo[i]?
{

chromo[i]?=?rightPoint;

}

else?if(chromo[i]?>?rightPoint)

{

chromo[i]?=?leftPoint;

}

//以上代碼非基因變異的一般性代碼只是用來保證基因編碼的可行性。

}


}
}

//此函數(shù)產(chǎn)生新的一代見證著整個進化的全過程.

//以父代種群的基因組容器作為參數(shù)傳進去該函數(shù)將往該容器里放入新一代的基因組(當(dāng)然是經(jīng)過了優(yōu)勝劣汰的)

void?GenAlg::Epoch(vector?&vecNewPop)

{

//用類的成員變量來儲存父代的基因組(在此之前m_vecPop儲存的是不帶估值的所有基因組)

vecPop?=?vecNewPop;

//初始化相關(guān)變量

Reset();

//為相關(guān)變量賦值

CalculateBestWorstAvTot();

//清空裝載新種群的容器

vecNewPop.clear();???????

//產(chǎn)生新一代的

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----

?????文件???????5847??2011-11-05?15:26??GA遺傳算法\GA.cpp

?????文件???????2929??2011-11-05?15:09??GA遺傳算法\GA.h

?????文件????????566??2011-11-05?15:23??GA遺傳算法\main.cpp

?????目錄??????????0??2011-11-05?15:25??GA遺傳算法

-----------?---------??----------?-----??----

?????????????????9342????????????????????4


評論

共有 條評論