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

📄 syspara.cpp

📁 基于GPS的多目标优化及动态多目标优化源代码 里面 包含MOP, DMOP的程序
💻 CPP
字号:
// SysPara.cpp: implementation of the SysPara class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "RTDMOEA.h"
#include "SysPara.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

SysPara::SysPara()
{
	
}

SysPara::~SysPara()
{
	
}

BOOL SysPara::ReadParameters(const char *Section)
{
    CSolution_GeneLength = GetInt(Section,"CSolution_GeneLength");
	CSolution_OBJectiveNum = GetInt(Section,"CSolution_OBJectiveNum");
    CSolution_ChangeTypePolicy= GetInt(Section,"CSolution_ChangeTypePolicy");
    RTCGPS_PopSize= GetInt(Section,"RTCGPS_PopSize") ; 
    RTCGPS_BetterPolicy=GetInt(Section,"RTCGPS_BetterPolicy"); 
    RTCGPS_PopTypeInitPolicy=GetInt(Section,"RTCGPS_PopTypeInitPolicy");
	/************************************************************************/
	/* 算法策略                                                             */
	/*         1: 使用超变异策略,并使用Delta变异算子                        */
	/*         2: 使用超变异策略,使用随机变异算子                           */
	/*         3: 使用超变异策略,Baseline和Scale自适应                      */
	/*         4: 使用记忆体策略,固定Baseline和Scale                        */
	/*         5: 使用记忆体策略,Baseline和Scale自适应                      */
	/*         6: 使用向量预测策略来适应Baseline和Scale                     */
	/************************************************************************/
	
	RTCGPS_AlgorithmPolicy=GetInt(Section,"RTCGPS_AlgorithmPolicy"); 
	/************************************************************************/
	/* 精英空间的策略                                                       */
	/*         1: 利用精英空间中的解                                        */
	/*         2: 废弃精英空间中的解                                        */
	/************************************************************************/
	RTCGPS_ElitistPolicy=GetInt(Section,"RTCGPS_ElitistPolicy") ;
	RTCGPS_EliteSpaceFirst=GetInt(Section,"RTCGPS_EliteSpaceFirst") ;
	/************************************************************************/
	/* 生成器策略                                                           */
	/*         1: CGPS:采用邻居交叉                                         */
	/*         2: CGPS:采用随机邻居交叉                                     */
	/*         3: CGPS:采用邻居双交叉                                       */
	/*         4: CGPS:采用随机邻居双交叉                                   */
	/*         5: CGPS:采用郭涛算法                                         */
	/*         9: DGPS:                                                     */
	/************************************************************************/
	RTCGPS_GeneratorPolicy=GetInt(Section,"RTCGPS_GeneratorPolicy");
	
	RTCGPS_HyperMutationRate=GetDbl(Section,"RTCGPS_HyperMutationRate");
	/************************************************************************/
	/* DGPS中的变量                                                         */
	/************************************************************************/
	RTCGPS_lamda=GetDbl(Section,"RTCGPS_lamda");
	RTCGPS_CrossoverNum=GetInt(Section,"RTCGPS_CrossoverNum");
	/************************************************************************/
	/* 郭涛算法中的变量                                                     */
	/************************************************************************/
	RTCGPS_ParentsNum=GetInt(Section,"RTCGPS_ParentsNum");
	
	/************************************************************************/
/* 处理普通多目标优化的变量,用来控制是否停机                           */
/************************************************************************/
RTCGPS_StopGenerationNum=GetInt(Section,"RTCGPS_StopGenerationNum");

	RTCGPS_ChangeGenerationNum=GetInt(Section,"RTCGPS_ChangeGenerationNum");
	RTCGPS_CrossoverLowerLimit=GetDbl(Section,"RTCGPS_CrossoverLowerLimit");
	RTCGPS_CrossoverUpperLimit=GetDbl(Section,"RTCGPS_CrossoverUpperLimit");
	RTCGPS_DeltaLowerLimit=GetDbl(Section,"RTCGPS_DeltaLowerLimit");
	RTCGPS_DeltaUpperLimit=GetDbl(Section,"RTCGPS_DeltaUpperLimit");
	RTCGPS_RunGenerationNumber=GetInt(Section,"RTCGPS_RunGenerationNumber");
	
	GetDblArray(Section,"CElitistSet_Scale",&CElitistSet_Scale[0],CSolution_OBJectiveNum);
	GetDblArray(Section,"CElitistSet_Baseline",&CElitistSet_Baseline[0],CSolution_OBJectiveNum);
	
	CElitistSet_Location=GetDbl(Section,"CElitistSet_Location");
	
	/********************************************************/
	/*****             指定每个维度需要多少个点    **********/
	/********************************************************/
	//int CElitistSet_PointNum[MAX_OBJECTIVENUM];
	GetIntArray(Section,"CElitistSet_PointNum",&CElitistSet_PointNum[0],CSolution_OBJectiveNum-1);
	return TRUE;
}

//DEL BOOL SysPara::SetConfigFileName(char * Name)
//DEL {
//DEL    ConfigFileName= (CString)Name;
//DEL    return TRUE;
//DEL }

double SysPara::GetDbl(const char *Section, const char *Item)
{
	char temp[1024];
	memset(temp,0,1024);
    int len= GetPrivateProfileString(  Section,   Item,   "0",   temp,   1023,  ConfigFileName  );
	return atof(temp); 
}

BOOL SysPara::GetDblArray(const char *Section, const char *Item, double * Array, int ItemCount)
{
	char temp[1024];
	memset(temp,0,1024);
    int len= GetPrivateProfileString(  Section,   Item,   "0",   temp,   1023,  ConfigFileName  );
	int i=0;
	char *p= temp;
	int j=0;
	char a[128];
	while (i<ItemCount)
	{
		if ((*p==',') ||(*p==0))
		{ 
			a[j]=0;
			Array[i]= atof(a);
			j=0;
			i++;
			p++;
			continue;
		}
		else
		{
			a[j++]=*p;
			p++;
			continue;
		}
	}
    return true; 
}

int SysPara::GetInt(const char *Section, const char *Item)
{
    return (int)GetPrivateProfileInt(  Section,   Item,   0,  ConfigFileName  );
}

BOOL SysPara::GetIntArray(const char *Section, const char *Item, int * Array, int ItemCount)
{
	char temp[1024];
	memset(temp,0,1024);
    int len= GetPrivateProfileString(  Section,   Item,   "0",   temp,   1023,  ConfigFileName  );
	int i=0;
	char *p= temp;
	int j=0;
	char a[128];
	while (i<ItemCount)
	{
		if ((*p==',') ||(*p==0))
		{ 
			a[j]=0;
			Array[i]= atoi(a);
			j=0;
			i++;
			p++;
			continue;
		}
		else
		{
			a[j++]=*p;
			p++;
			continue;
		}
	}
    return true; 
}

void SysPara::Init(char *FileName)
{
	ConfigFileName= (CString)FileName;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -