⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 examples.cpp

📁 基于GPS的多目标优化及动态多目标优化源代码 里面 包含MOP, DMOP的程序
💻 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 + -