?? adaptivega.cpp
字號:
// AdaptiveGA.cpp: implementation of the CAdaptiveGA class.
//
//////////////////////////////////////////////////////////////////////
#include "AdaptiveGA.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CAdaptiveGA::CAdaptiveGA()
{
}
void CAdaptiveGA::ChangeMutationP()
{
m_dMutationP=m_dMutationP+m_dDeltMutationP;
return;
}
void CAdaptiveGA::RestoreMutationP()
{
m_dMutationP=m_dOldMutationP;
return;
}
/********************************************************/
/* INITIAL WAREHOUSE */
/* 基因倉庫初始化函數 */
/*********************************************************/
void CAdaptiveGA::InitialGenBase(int size1)
{
m_GenBase.Initial(size1);
return;
}
/********************************************************/
/* RETAIN GOOD GENE */
/* 優良基因保存函數 */
/*********************************************************/
void CAdaptiveGA::RetainGoodGen(void)
{int i;
m_GenBase.AddIndividual(m_lpParents[m_iMaxLocation]);
for(i=0;i<m_iPopuSize;i++)
{
if(m_lpParents[i].m_dFitness>m_dAverageFitness)
m_GenBase.AddIndividual(m_lpParents[i]);
}
return;
}
/********************************************************/
/* RECALL GOOD GENE */
/* 優良基因輸出函數 */
/*********************************************************/
void CAdaptiveGA::RecallGoodGen(int size1)
{
int i,j;
j=0;
for(i=0;i<m_iPopuSize;i++)
{
if(m_lpParents[i].m_dFitness<m_GenBase.m_lpGAUnite[j].m_dFitness)
{
m_lpParents[i]=m_GenBase.m_lpGAUnite[j];
j++;
}
if(j>=size1) break;
}
return;
}
void CAdaptiveGA::BeginProc(int popusize,double crossingp,double mutationp,
double deltmutationp,double setaffinity,int warehousesize)
{
Initial(popusize,mutationp,crossingp);
m_dOldMutationP=m_dMutationP;
m_dDeltMutationP=deltmutationp;
m_dSetAffinity=setaffinity;
m_GenBase.Initial(warehousesize);
Statistic();
CalcuAffinity();
RetainGoodGen();
m_dOldAverageFitness=m_dAverageFitness;
return;
}
void CAdaptiveGA::Proc()
{
if(m_dAffinity<m_dSetAffinity) ChangeMutationP();
else RestoreMutationP();
Generation();
NextGeneration();
Statistic();
RetainGoodGen();
// if(m_dAverageFitness<m_dOldAverageFitness)
{
RecallGoodGen(m_GenBase.m_iWarehouseSize);
Statistic();
}
CalcuAffinity();
//cin>>k;
ReportGeneration();
m_dOldAverageFitness=m_dAverageFitness;
return;
}
void CAdaptiveGA::EndProc()
{
FreeSpace();
return;
}
CAdaptiveGA::~CAdaptiveGA()
{
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -