📄 examples.cpp
字号:
// Examples.cpp: implementation of the CExamples class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "RTDMOEA.h"
#include "Examples.h"
#include "RTCGPS.h"
#include "RTCGPSKUR.h"
#include "RTCGPSFDA1.h"
#include "RTCGPSFDA2.h"
#include "RTCGPSFDA3.h"
#include "RTCGPSFDA4.h"
#include "RTCGPSFDA5.h"
#include "RTCGPSMOP.h"
#include "ElitistSet.h"
#include <time.h>
#include "random.h"
#include "mmsystem.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
//CString CExamples::ProblemInfo;
CExamples::CExamples()
{
MOP_IsOriginal=TRUE;
MOP_isShowGenes=FALSE;
mSysPara.Init("./DMConfig.INI");
}
void CExamples::PrintPopInfo(RTCGPS *pGPS)
{
// int i,j;
// CSolution *p_temp;
// //进行处理,输出Pareto 前沿点
// if (!MOP_IsOriginal)
// {
// //正向处理
// BOOL isDominated=TRUE;
// p_temp = (CSolution *)pGPS->m_Elist.ElitistSpace[0];
// for (i=1;i<pGPS->m_Elist.ElitistSpace.GetSize();i++)
// {
// isDominated= TRUE;
// for (int j =0; j< CSolution::OBJectiveNum ;j++)
// {
// if (p_temp->Objective[j] >((CSolution *)pGPS->m_Elist.ElitistSpace[i])->Objective[j] )
// {
// isDominated= FALSE;
// p_temp= (CSolution *)pGPS->m_Elist.ElitistSpace[i];
// break;
// }
// }
// if (isDominated) ((CSolution *)pGPS->m_Elist.ElitistSpace[i])->Slope =10000;
// }
// //反向处理
// p_temp = (CSolution *)pGPS->m_Elist.ElitistSpace[pGPS->m_Elist.ElitistSpace.GetSize()-1];
// for (i=pGPS->m_Elist.ElitistSpace.GetSize()-2;i<0;i--)
// {
// isDominated= TRUE;
// for (int j =0; j< CSolution::OBJectiveNum ;j++)
// {
// if (p_temp->Objective[j] >((CSolution *)pGPS->m_Elist.ElitistSpace[i])->Objective[j] )
// {
// isDominated= FALSE;
// p_temp= (CSolution *)pGPS->m_Elist.ElitistSpace[i];
// break;
// }
// }
// if (isDominated) ((CSolution *)pGPS->m_Elist.ElitistSpace[i])->Slope =10000;
// }
// }
/* 开始输出结果 */
/* for (i=0;i<pGPS->m_Elist.ElitistSpace.GetSize();i++)
{
p_temp = (CSolution *)pGPS->m_Elist.ElitistSpace.GetAt(i);
if (p_temp->Distance <100) continue;
//打印 目标
for (j=0;j<CSolution::OBJectiveNum;j++)
printf("%0.7f ",p_temp->Objective[j]);
//打印 基因
if (MOP_isShowGenes)
{
for ( j=0;j<CSolution::GetGeneLength();j++)
printf("%0.7f ",p_temp->Gene[j]);
}
printf("\n");
}
*/
}
void CExamples::PrintTimeInfo()
{
//打印问题标志
printf("******** MOP %s **********\n",RTCGPS::ProblemName);
//打印评价次数
printf( "Number of Evaluation: %d \n", RTCGPS::EvaluationNum);
//打印开始时间
printf( "The start time is: %s, %d \n", ascStartTime,intStartTime );
//打印结束时间
printf( "The end time is: %s, %d \n", ascEndTime,intEndTime );
//打印时间差
printf( "Time Elapsed: %d\n", intEndTime-intStartTime );
//打印随机种子
printf( "The Random Seed is: %d\n", RandomSeed );
}
void CExamples::StartTiming()
{
//取得开始时间
struct tm * newtime;
time_t aclock;
time( &aclock );
newtime = localtime( &aclock );
//开始的时间整数
intStartTime = timeGetTime();
sprintf(ascStartTime, "%s", asctime( newtime ));
RandomSeed= (int)time(NULL);
CRandom::RandomInit(RandomSeed);
// CRandom::RandomInit(110);
}
void CExamples::EndTiming()
{
//取得结束时间
struct tm * newtime;
time_t aclock;
time( &aclock );
newtime = localtime( &aclock );
//结束的时间整数
intEndTime = timeGetTime();
sprintf(ascEndTime, "%s", asctime( newtime ));
}
CExamples::~CExamples()
{
}
void CExamples::PrintSolution(CSolution &mSolution)
{
//Print the Objectives
for (int j=0;j<CSolution::OBJectiveNum;j++)
printf("Objective%d: %0.14f \n",j,mSolution.Objective[j]);
printf("\n");
//Print the Genes
for ( j=0;j<CSolution::GetGeneLength();j++)
printf("Gene[%6d]: %0.14f \n",j,mSolution.Gene[j]);
printf("\n");
}
//DEL void CExamples::RunRTCGPSKUR()
//DEL {
//DEL ProblemInfo="KUR";
//DEL CSolution::SetGeneLength(3);
//DEL // CElitistSet::SuggestionMin[0] =-21;
//DEL // CElitistSet::SuggestionMax[0] =10;
//DEL // CElitistSet::SuggestionMin[1] =-21;
//DEL // CElitistSet::SuggestionMax[1] =5;
//DEL CElitistSet::SlopeDistance[0]=0.000001;
//DEL CElitistSet::Location =10000;
//DEL RTCGPS::PopSize =100;
//DEL
//DEL // char *pchar="KUR";
//DEL // RTCGPS::ParetoFileName=pchar ;
//DEL
//DEL
//DEL CSolution::ChangeTypePolicy =TRUE;
//DEL RTCGPS::BetterPolicy =2;
//DEL RTCGPS::PopTypeInitPolicy =0;
//DEL
//DEL /*
//DEL CElitistSet::SuggestionMax[0] =10;
//DEL CElitistSet::SuggestionMax[1] =10;
//DEL CGPSKUR::PopSize =100;
//DEL CElitistSet::SlopeDistance=0.00001;
//DEL CElitistSet::Location =10000;
//DEL */
//DEL RTCGPSKUR m_GPS;
//DEL m_GPS.CrossoverLowerLimit = -2.0;
//DEL m_GPS.CrossoverUpperLimit =2.0;
//DEL m_GPS.DeltaLowerLimit = -1.0;
//DEL m_GPS.DeltaUpperLimit =1.0;
//DEL
//DEL m_GPS.InitPop();
//DEL m_GPS.RunGeneration(2000);
//DEL PrintPopInfo(&m_GPS);
//DEL }
void CExamples::RunRTCGPSFDA1()
{
/* strcpy(RTCGPS::ProblemName,"FDA1");
CSolution::SetGeneLength(20);
CSolution::OBJectiveNum =2;
CSolution::ChangeTypePolicy =FALSE;
RTCGPS::PopSize =300;
RTCGPS::BetterPolicy =2;
RTCGPS::PopTypeInitPolicy =1;
RTCGPS::AlgorithmPolicy=1;
RTCGPS::ElitistPolicy =1;
RTCGPS::EliteSpaceFirst =TRUE;
RTCGPS::GeneratorPolicy=1;
RTCGPS::HyperMutationRate =0.2;
RTCGPS::lamda=0.6;
RTCGPS::CrossoverNum=25; //应当设置为PopSize/(ObjectiveNum +1) * Constant(<1)
// RTCGPS::ParentsNum =10;
RTCGPS::ChangeGenerationNum =1000;
CElitistSet::Location =10000;
CElitistSet::Baseline[0]=0;
CElitistSet::Baseline[1]=0;
CElitistSet::Scale[0]=1;
CElitistSet::Scale[1]=1;
CElitistSet::PointNum[0]=200;
RTCGPSFDA1 m_GPS;
m_GPS.CrossoverLowerLimit = -0.1;
m_GPS.CrossoverUpperLimit =1.2;
m_GPS.DeltaLowerLimit = -0.5;
m_GPS.DeltaUpperLimit =0.5;
*/
strcpy(RTCGPS::ProblemName,"FDA1");
mSysPara.ReadParameters("FDA1");
SetStaticPara(&mSysPara);
RTCGPSFDA1 m_GPS;
SetRunParam(&m_GPS,&mSysPara);
m_GPS.InitPop();
m_GPS.RunGeneration(mSysPara.RTCGPS_RunGenerationNumber);
// m_GPS.InitPop();
// m_GPS.RunGeneration(10000);
PrintPopInfo(&m_GPS);
}
void CExamples::RunRTCGPSFDA2()
{
strcpy(RTCGPS::ProblemName,"FDA2");
mSysPara.ReadParameters("FDA2");
SetStaticPara(&mSysPara);
RTCGPSFDA2 m_GPS;
SetRunParam(&m_GPS,&mSysPara);
m_GPS.InitPop();
m_GPS.RunGeneration(mSysPara.RTCGPS_RunGenerationNumber);
PrintPopInfo(&m_GPS);
}
void CExamples::RunRTCGPSFDA3()
{
strcpy(RTCGPS::ProblemName,"FDA3");
mSysPara.ReadParameters("FDA3");
SetStaticPara(&mSysPara);
RTCGPSFDA3 m_GPS;
SetRunParam(&m_GPS,&mSysPara);
m_GPS.InitPop();
m_GPS.RunGeneration(mSysPara.RTCGPS_RunGenerationNumber);
PrintPopInfo(&m_GPS);
}
void CExamples::RunRTCGPSFDA4()
{
strcpy(RTCGPS::ProblemName,"FDA4");
mSysPara.ReadParameters("FDA4");
SetStaticPara(&mSysPara);
RTCGPSFDA4 m_GPS;
SetRunParam(&m_GPS,&mSysPara);
m_GPS.InitPop();
m_GPS.RunGeneration(mSysPara.RTCGPS_RunGenerationNumber);
PrintPopInfo(&m_GPS);
}
void CExamples::RunRTCGPSFDA5()
{
strcpy(RTCGPS::ProblemName,"FDA5");
mSysPara.ReadParameters("FDA5");
SetStaticPara(&mSysPara);
RTCGPSFDA5 m_GPS;
SetRunParam(&m_GPS,&mSysPara);
m_GPS.InitPop();
m_GPS.RunGeneration(mSysPara.RTCGPS_RunGenerationNumber);
PrintPopInfo(&m_GPS);
}
void CExamples::SetRunParam( RTCGPS *pGPS, SysPara *pSysPara)
{
pGPS->CrossoverLowerLimit= pSysPara->RTCGPS_CrossoverLowerLimit;
pGPS->CrossoverUpperLimit= pSysPara->RTCGPS_CrossoverUpperLimit;
pGPS->DeltaLowerLimit= pSysPara->RTCGPS_DeltaLowerLimit;
pGPS->DeltaUpperLimit= pSysPara->RTCGPS_DeltaUpperLimit;
}
void CExamples::SetStaticPara(SysPara *pSysPara)
{
// ProblemInfo="FDA1";
CSolution::SetGeneLength(pSysPara->CSolution_GeneLength);
CSolution::OBJectiveNum =pSysPara->CSolution_OBJectiveNum;
CElitistSet::Location =pSysPara->CElitistSet_Location;
for (int i=0;i<pSysPara->CSolution_OBJectiveNum;i++ )
{
CElitistSet::Baseline[i]=pSysPara->CElitistSet_Baseline[i];
CElitistSet::Scale[i]=pSysPara->CElitistSet_Scale[i];
CElitistSet::PointNum[i]=pSysPara->CElitistSet_PointNum[i];
}
RTCGPS::PopSize =pSysPara->RTCGPS_PopSize;
RTCGPS::AlgorithmPolicy=pSysPara->RTCGPS_AlgorithmPolicy;
RTCGPS::HyperMutationRate =pSysPara->RTCGPS_HyperMutationRate;
RTCGPS::ElitistPolicy =pSysPara->RTCGPS_ElitistPolicy;
RTCGPS::GeneratorPolicy=pSysPara->RTCGPS_GeneratorPolicy;
RTCGPS::lamda=pSysPara->RTCGPS_lamda;
RTCGPS::CrossoverNum=pSysPara->RTCGPS_CrossoverNum;//25; //应当设置为PopSize/(ObjectiveNum +1) * Constant(<1)
if (pSysPara->RTCGPS_EliteSpaceFirst==1)
RTCGPS::EliteSpaceFirst =TRUE;
else
RTCGPS::EliteSpaceFirst =FALSE;
if (pSysPara->CSolution_ChangeTypePolicy==1)
CSolution::ChangeTypePolicy =TRUE;
else
CSolution::ChangeTypePolicy =FALSE;
RTCGPS::BetterPolicy =pSysPara->RTCGPS_BetterPolicy;
RTCGPS::PopTypeInitPolicy =pSysPara->RTCGPS_PopTypeInitPolicy;
RTCGPS::ChangeGenerationNum =pSysPara->RTCGPS_ChangeGenerationNum;
RTCGPS::StopGenerationNum =pSysPara->RTCGPS_StopGenerationNum;
}
void CExamples::RunMOP(char *PName, int Problemid )
{
strcpy(RTCGPS::ProblemName, PName);
mSysPara.ReadParameters(PName);
SetStaticPara(&mSysPara);
RTCGPSMOP m_GPS;
m_GPS.PID = Problemid;
SetRunParam(&m_GPS,&mSysPara);
m_GPS.InitPop();
m_GPS.RunGeneration(mSysPara.RTCGPS_RunGenerationNumber);
PrintPopInfo(&m_GPS);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -