Пример #1
0
bool HybridComp::loadRotation(){
    string s;
	char a[100];
	sprintf(a,"%d",m_numDim);
	strcat(a,"Dim.txt");
	s=a;
	s.insert(0,m_name+"_RotM_");

	s.insert(0,"Problem/FunctionOpt/Data/");//probDataPath
	s.insert(0,Global::g_arg[param_workingDir]);
	ifstream in;
	in.open(s.c_str());
	if(in.fail()){

		for(int i=0;i<m_numFuncs;i++){

			if(IS_PROBLEM_NAME(m_id,"FUN_Com")||IS_PROBLEM_NAME(m_id,"FUN_Com_CEC05")){
				 mpp_f[i]->getRotation()->identity();
			}else{
				mpp_f[i]->getRotation()->randomize(Program_Problem);
				mpp_f[i]->getRotation()->generateRotationMatrix(mpp_f[i]->getConditionNumber(),Program_Problem);
			}
		}
		ofstream out(s.c_str());
		for(int i=0;i<m_numFuncs;i++) mpp_f[i]->getRotation()->Print(out);
		out.close();
	}else{
	    for(int i=0;i<m_numFuncs;i++)	mpp_f[i]->getRotation()->Read_Data(in);
	}

	for(int i=0;i<m_numFuncs;i++)	mpp_f[i]->setRotationFlag(true);
	in.close();
    return true;
}
Пример #2
0
void FWeierstrass::initialize(){

    setOriginalGlobalOpt();

	if(IS_PROBLEM_NAME(m_id,"FUN_Weierstrass")){
	
	}else if(IS_PROBLEM_NAME(m_id,"FUN_R_Weierstrass")){
		setConditionNumber(2);
            loadRotation();
	}else if(IS_PROBLEM_NAME(m_id,"FUN_RS_Weierstrass")){
		setConditionNumber(5);
            loadTranslation();
            loadRotation();
	}else if(IS_PROBLEM_NAME(m_id,"FUN_RS_Weierstrass_CEC05")){
		setConditionNumber(5);
            loadTranslation();
            loadRotation();
             setBias(90);
	}else {
		throw myException("Error: please check the problem ID@FWeierstrass::initialize");
	}

    setGlobalOpt();
    setAccuracy(1.0e-2);

}
Пример #3
0
void FAckley::initialize(){

    setOriginalGlobalOpt();

	if(IS_PROBLEM_NAME(m_id,"FUN_Ackley")||IS_PROBLEM_NAME(m_id,"FUN_Ackley_Noisy")){	}
	else if(IS_PROBLEM_NAME(m_id,"FUN_S_Ackley")){
		loadTranslation();
	}else if(IS_PROBLEM_NAME(m_id,"FUN_R_Ackley")){
		 setConditionNumber(2);
         loadRotation();
	}else if(IS_PROBLEM_NAME(m_id,"FUN_RS_Ackley")){
		setConditionNumber(100);
        loadTranslation();
        loadRotation();
	}else if(IS_PROBLEM_NAME(m_id,"FUN_RS_Ackley_Bound_CEC05")){
		setConditionNumber(100);
        loadTranslation();
        loadRotation();
        setBias(-140);

	}else if(IS_PROBLEM_NAME(m_id,"FUN_S_Ackley_CEC08")){
		setBias(-140);
            loadTranslation();
	}else{
		throw myException("Error: please check the problem ID@FAckley::initialize()");
	}

    setGlobalOpt();
}
Пример #4
0
HybridComp::HybridComp(const int rId, const int rDimNumber,  string& rName):Problem(rId,rDimNumber,rName,1),\
	BenchmarkFunction(rId,rDimNumber,rName,1){

    allocateMemory(m_numDim,m_numFuncs);
    if(IS_PROBLEM_NAME(m_id,"FUN_RH_Com_noBounds_F25_CEC05"))  {
          setSearchRange(2, 5);
		  for(int i=0;i<m_numDim; ++i)   m_searchRange[i].m_flag = false;
     }
     else  setSearchRange(-5,5);
    m_heightNormalizeSeverity=2000.;
    initialize();
}
Пример #5
0
HybridComp::HybridComp(ParamMap &v):Problem((v[param_proId]), (v[param_numDim]),(v[param_proName]),1),\
	BenchmarkFunction((v[param_proId]), (v[param_numDim]),(v[param_proName]),1){

    allocateMemory(m_numDim,m_numFuncs);
    if(IS_PROBLEM_NAME(m_id,"FUN_RH_Com_noBounds_F25_CEC05"))  {
          setSearchRange(2, 5);
		  for(int i=0;i<m_numDim; ++i)   m_searchRange[i].m_flag = false;
     }
     else  setSearchRange(-5,5);
    m_heightNormalizeSeverity=2000.;
    initialize();
}
Пример #6
0
void FSchwefel_2_22::initialize() {

    setOriginalGlobalOpt();

    if(IS_PROBLEM_NAME(m_id,"FUN_Schwefel_2_22")||IS_PROBLEM_NAME(m_id,"FUN_Schwefel_2_22_Noisy")) {

    } else if(IS_PROBLEM_NAME(m_id,"FUN_S_Schwefel_2_22")) {
        loadTranslation();

    } else if(IS_PROBLEM_NAME(m_id,"FUN_R_Schwefel_2_22")) {
        setConditionNumber(2);
        loadRotation();
    } else if(IS_PROBLEM_NAME(m_id,"FUN_RS_Schwefel_2_22")) {
        setConditionNumber(2);
        loadTranslation();
        loadRotation();
    } else {
        throw myException("Error: please check the problem ID@FSchwefel_2_22::initialize");
    }
    setGlobalOpt();

}
Пример #7
0
void FSchwefel::initialize()
{
	vector<double> v(m_numDim,420.9687);
    setOriginalGlobalOpt(0,&v);

	if(IS_PROBLEM_NAME(m_id,"FUN_Schwefel")||IS_PROBLEM_NAME(m_id,"FUN_Schwefel_Noisy")){
	}else if(IS_PROBLEM_NAME(m_id,"FUN_S_Schwefel")){
		loadTranslation();
	}else if(IS_PROBLEM_NAME(m_id,"FUN_R_Schwefel")){
		setConditionNumber(2);
        loadRotation();
	}else if(IS_PROBLEM_NAME(m_id,"FUN_RS_Schwefel")){
		 setConditionNumber(2);
        loadTranslation();
        loadRotation();
	}else{
		throw myException("Error: please check the problem ID@FSchwefel::initialize");
	}
	
    setGlobalOpt(0,&v);
    setAccuracy(1.0e-2);

}
Пример #8
0
CPSORSwarm::CPSORSwarm(ParamMap &v):Swarm(),MultiPopulationCont<CPSORSubSwarm>((v[param_subPopSize]),(v[param_overlapDgre])),\
	m_subSize(7){
	m_name="ALG_CPSOR";
	if(IS_PROBLEM_NAME(Global::ms_curProId,"DYN_CONT_MovingPeak")){
		m_diversityDegree=1-exp(-0.2*pow(CAST_PROBLEM_DYN_CONT->getNumberofPeak(),0.45));
		m_initialSize =300*(1-exp(-0.33*pow(CAST_PROBLEM_DYN_CONT->getNumberofPeak(),0.5)));
	}else{
		m_diversityDegree=0.8;
		m_initialSize =100;
	}
	initialize();
	m_algPar<<"Initial population size: "<<m_initialSize<<"; sub-population size: "<<m_subSize<<"; Overlap degree:"<<v[param_overlapDgre]<<";"<<"; Diversity degree:"<<m_diversityDegree<<";";
    
}
Пример #9
0
void FSchwefel_1_2::evaluate__(double const *x,vector<double>& obj){

    double s1=0,s2=0;

    if(IS_PROBLEM_NAME(m_id,"FUN_Schwefel_1_2_Noisy") ||IS_PROBLEM_NAME(m_id,"FUN_S_Schwefel_1_2_Noisy")){
        double noise;
        for(int i=0;i<m_numDim;i++){
            for(int j=0;j<=i;j++){
                noise=0.01*Global::msp_global->mp_uniformPro->Next();
                s1+=(x[j]+noise);
            }
            s2+=s1*s1;
            s1=0;
        }
    }
    else if(IS_PROBLEM_NAME(m_id,"FUN_S_Schwefel_1_2_Noisy_CEC05") ) {
          for(int i=0;i<m_numDim;i++){
               for(int j=0;j<=i;j++)
                    s1+=x[j];
               s2+=s1*s1;
               s1=0;
          }
		  s2 *= (1.0 + 0.4 * fabs(Global::msp_global->mp_normalPro->Next()));
    }
    else{
        for(int i=0;i<m_numDim;i++){
		for(int j=0;j<=i;j++)
			s1+=x[j];
		s2+=s1*s1;
		s1=0;
        }
    }

 obj[0]= s2+m_bias;

}
Пример #10
0
void HybridComp::SetUpFRH_Com_CEC05(){
	string fname[m_numFuncs];
	unsigned fid[m_numFuncs];
	for(int i=0;i<m_numFuncs;i++){
		mp_height[i]=100*i;

	}
	fname[0]="FUN_Ackley";			fname[1]="FUN_Ackley";
	fname[2]="FUN_Rastrigin";		fname[3]="FUN_Rastrigin";
	fname[4]="FUN_Sphere";			fname[5]="FUN_Sphere";
	fname[6]="FUN_Weierstrass";		fname[7]="FUN_Weierstrass";
	fname[8]="FUN_Griewank";		fname[9]="FUN_Griewank";

	if(IS_PROBLEM_NAME( m_id,"FUN_RH_Com_NarrowBasin_CEC05"))   {
	    mp_stretchSeverity[0]=0.1*5./32;
		mp_convergeSeverity[0]=0.1;
	}else{
        mp_stretchSeverity[0]=2.*5./32;
		mp_convergeSeverity[0]=1.;
	}
	for(int i=0;i<m_numFuncs;i++)   fid[i]=Global::msm_pro[fname[i]];
    setFunction(fid,fname);


    mpp_f[0]->setSearchRange(-32,32);   mpp_f[1]->setSearchRange(-32,32);
	mpp_f[2]->setSearchRange(-5,5);     mpp_f[3]->setSearchRange(-5,5);
	mpp_f[4]->setSearchRange(-100,100); mpp_f[5]->setSearchRange(-100,100);
    mpp_f[6]->setSearchRange(-0.5,0.5); mpp_f[7]->setSearchRange(-0.5,0.5);
	mpp_f[8]->setSearchRange(-60,60); mpp_f[9]->setSearchRange(-60,60);

	mp_stretchSeverity[1]=5./32;
	mp_stretchSeverity[2]=2.;		mp_stretchSeverity[3]=1.;
	mp_stretchSeverity[4]=2*5./100;  mp_stretchSeverity[5]=5./100;
	mp_stretchSeverity[6]=20.;	mp_stretchSeverity[7]=10.;
	mp_stretchSeverity[8]=2.*5/60;  mp_stretchSeverity[9]=5./60;

	mp_convergeSeverity[1]=2.;
	mp_convergeSeverity[2]=1.5;	mp_convergeSeverity[3]=1.5;
	mp_convergeSeverity[4]=1.;  mp_convergeSeverity[5]=1.;
	mp_convergeSeverity[6]=1.5;	mp_convergeSeverity[7]=1.5;
	mp_convergeSeverity[8]=2.;  mp_convergeSeverity[9]=2.;

    for(int i=0;i<m_numFuncs;i++){
		mpp_f[i]->setScale(mp_stretchSeverity[i]);
	}
	setBias(10.);
}
Пример #11
0
void FSchwefel_2_22::evaluate__(double const *x,vector<double>& obj) {

    double s1=0,s2=1.;
    if(IS_PROBLEM_NAME(m_id,"FUN_Schwefel_2_22_Noisy")) {
        double noise;
        for(int i=0; i<m_numDim; i++) {
            noise=0.01*Global::msp_global->mp_uniformPro->Next();
            s1+=fabs(x[i]+noise);
            s2*=fabs(x[i]+noise);
        }

    } else {
        for(int i=0; i<m_numDim; i++) {
            s1+=fabs(x[i]);
            s2*=fabs(x[i]);
        }
    }

    obj[0]= s1+s2+m_bias;


}
Пример #12
0
void FAckley::evaluate__(double const *x,vector<double>& obj){

	double s1=0,s2=0;

	if(IS_PROBLEM_NAME(m_id,"FUN_Ackley_Noisy")){

        double noise;
        for(int i=0;i<m_numDim;i++){
            noise=0.01*Global::msp_global->mp_uniformPro->Next();
            s1+=(x[i]+noise)*(x[i]+noise);
            s2+=cos(2*OFEC_PI*(x[i]+noise));
        }
	}else{
        for(int i=0;i<m_numDim;i++){
		s1+=x[i]*x[i];
		s2+=cos(2*OFEC_PI*x[i]);
        }
	}

	obj[0]= -20*exp(-0.2*sqrt(s1/m_numDim))-exp(s2/m_numDim)+20+OFEC_E+m_bias;

}
Пример #13
0
void DynamicProblem::change(){

	m_changeCounter++;
	switch(getChangeType()){
	case CT_Random:
		randomChange();
		break;
	case CT_Recurrent:
		recurrentChange();
		break;
	case CT_RecurrentNoisy:
		recurrentNoisyChange();
		break;
	case CT_SmallStep:
		smallStepChange();
		break;
	case CT_LargeStep:
		largeStepChange();
		break;
	case CT_Chaotic:
		chaoticChange();
		break;
	default :
		break;
	}

    if(m_flagDimensionChange){
		
        if(m_numDim==msc_MinDimensionNumber)
        m_dirDimensionChange=true;
        if(m_numDim==msc_MaxDimensionNumber)
        m_dirDimensionChange=false;

        if(m_dirDimensionChange==true) {
			m_dimNumberTemp+=1;
        }else {
			m_dimNumberTemp-=1;
        }
        changeDimension();
    }

    if(m_flagNumPeaksChange){
		if(m_numPeaksChangeMode==1||m_numPeaksChangeMode==2){
			if((unsigned int)m_numPeaks>=msc_MaxNumPeaks-1) m_dirNumPeaksChange=false;
			if((unsigned int)m_numPeaks<=msc_MinNumPeaks+1) m_dirNumPeaksChange=true;
			int step=0;
			 
			if(IS_PROBLEM_NAME(m_id,"DYN_CONT_CompositionDBG")) step=2;
			else if(IS_PROBLEM_NAME(m_id,"DYN_CONT_RotationDBG")) step=2;
			else if(IS_PROBLEM_NAME(m_id,"DYN_CONT_MovingPeak")) step=2;
			else step=2;

			if(m_numPeaksChangeMode==2){
				step=Global::msp_global->getRandInt(step/2,5*step/2,Program_Problem);
			}
			
			if(m_dirNumPeaksChange==true){
				if(m_numPeaks+step<=msc_MaxNumPeaks)		m_numPeaksTemp=m_numPeaks+step;
				else m_numPeaksTemp=msc_MaxNumPeaks;
			}else{ 
				if(m_numPeaks-step>=msc_MinNumPeaks)		m_numPeaksTemp=m_numPeaks-step;
				else m_numPeaksTemp=msc_MinNumPeaks;
			}
		}else{
			//random change
			m_numPeaksTemp=Global::msp_global->getRandInt(msc_MinNumPeaks,msc_MaxNumPeaks,Program_Problem);
		}
        changeNumPeaks();
    }

	
    if(mSingleObj::getSingleObj()!=nullptr){
		vector<double> gOpt;
		if(Global::msp_global->mp_problem->getObjGlobalOpt(gOpt)){
		   mSingleObj::getSingleObj()->addGOpt(Global::msp_global->m_runId,gOpt[0]);
		}else{
			cout<<"err"<<endl;
		}
	}
	
	#ifdef OFEC_DEMON
		msp_buffer->updateFitnessLandsacpe_();
	#endif
	
}
Пример #14
0
void HybridComp::setFunction(unsigned * rId, string rFucs[]){
    BasicFunc f;

	if(IS_PROBLEM_NAME(m_id,"FUN_RH_Com_F21_CEC05")||IS_PROBLEM_NAME(m_id,"FUN_RH_Com_HighConNumMatrix_F22_CEC05")\
		||IS_PROBLEM_NAME(m_id,"FUN_Noncont_RH_Com_F23_CEC05")){
		f["FUN_Expanded_Scaffer_F6_CEC05"]=&createFunction<FScaffer_F6>;
        f["FUN_Rastrigin"]=&createFunction<FRastrigin>;
        f["FUN_Griewank_Rosenbrock_F13_CEC05"]=&createFunction<FGriewank>;
        f["FUN_Weierstrass"]=&createFunction<FWeierstrass>;
        f["FUN_Griewank"]=&createFunction<FGriewank>;
	}else if(IS_PROBLEM_NAME(m_id,"FUN_RH_Com_F24_CEC05")||IS_PROBLEM_NAME(m_id,"FUN_RH_Com_noBounds_F25_CEC05")){
		f["FUN_Weierstrass"]=&createFunction<FWeierstrass>;
        f["FUN_Expanded_Scaffer_F6_CEC05"]=&createFunction<FScaffer_F6>;
        f["FUN_Griewank_Rosenbrock_F13_CEC05"]=&createFunction<FGriewank>;
        f["FUN_Ackley"]=&createFunction<FAckley>;
        f["FUN_Rastrigin"]=&createFunction<FRastrigin>;
        f["FUN_Griewank"]=&createFunction<FGriewank>;
        f["FUN_Noncont_Expanded_Scaffer_F6_CEC05"]=&createFunction<FScaffer_F6>;
        f["FUN_Noncont_Rastrigin"]=&createFunction<FNoncont_Rastrigin>;
        f["FUN_Elliptic"]=&createFunction<FElliptic>;
        f["FUN_Sphere_Noisy_CEC05"]=&createFunction<FSphere>;
	}else {
		f["FUN_Sphere"]=&createFunction<FSphere>;
        f["FUN_Rastrigin"]=&createFunction<FRastrigin>;
        f["FUN_Weierstrass"]=&createFunction<FWeierstrass>;
        f["FUN_Griewank"]=&createFunction<FGriewank>;
        f["FUN_Ackley"]=&createFunction<FAckley>;
            // f["Scaffer"]=&createFunction<FScaffer>;
	}

    for(int i=0;i<m_numFuncs;i++){
		mpp_f[i]=dynamic_cast<BenchmarkFunction*>(f[rFucs[i]](rId[i],m_numDim,rFucs[i]));
        mpp_f[i]->setBias(0);
    }

	if(IS_PROBLEM_NAME(m_id,"FUN_R_Com")||IS_PROBLEM_NAME(m_id,"FUN_H_Com_CEC05")||IS_PROBLEM_NAME(m_id,"FUN_H_Com_Noisy_CEC05")||\
		IS_PROBLEM_NAME(m_id,"FUN_RH_Com_F21_CEC05")||IS_PROBLEM_NAME(m_id,"FUN_Noncont_RH_Com_F23_CEC05")){
		for(int i=0;i<m_numFuncs;i++) mpp_f[i]->setConditionNumber(2.);
	}else if(IS_PROBLEM_NAME(m_id,"FUN_RH_Com_HighConNumMatrix_F22_CEC05")){
		mpp_f[0]->setConditionNumber(10); mpp_f[1]->setConditionNumber(20);
        mpp_f[2]->setConditionNumber(50);mpp_f[3]->setConditionNumber(100);
        mpp_f[4]->setConditionNumber(200);mpp_f[5]->setConditionNumber(1000);
        mpp_f[6]->setConditionNumber(2000);mpp_f[7]->setConditionNumber(3000);
        mpp_f[8]->setConditionNumber(4000);mpp_f[9]->setConditionNumber(5000);
	}else if(IS_PROBLEM_NAME(m_id,"FUN_RH_Com_CEC05")||IS_PROBLEM_NAME(m_id,"FUN_RH_Com_NarrowBasin_CEC05")||IS_PROBLEM_NAME(m_id,"FUN_RH_Com_Bound_CEC05")){
		mpp_f[0]->setConditionNumber(2); mpp_f[1]->setConditionNumber(3);
        mpp_f[2]->setConditionNumber(2);mpp_f[3]->setConditionNumber(3);
        mpp_f[4]->setConditionNumber(2);mpp_f[5]->setConditionNumber(3);
        mpp_f[6]->setConditionNumber(20);mpp_f[7]->setConditionNumber(30);
        mpp_f[8]->setConditionNumber(200);mpp_f[9]->setConditionNumber(300);
	}else if(IS_PROBLEM_NAME(m_id,"FUN_RH_Com_F24_CEC05")||IS_PROBLEM_NAME(m_id,"FUN_RH_Com_noBounds_F25_CEC05")){
		mpp_f[0]->setConditionNumber(100); mpp_f[1]->setConditionNumber(50);
		mpp_f[2]->setConditionNumber(30);mpp_f[3]->setConditionNumber(10);
		mpp_f[4]->setConditionNumber(5);mpp_f[5]->setConditionNumber(5);
		mpp_f[6]->setConditionNumber(4);mpp_f[7]->setConditionNumber(3);
		mpp_f[8]->setConditionNumber(2);mpp_f[9]->setConditionNumber(2);
	}else{
		for(int i=0;i<m_numFuncs;i++) mpp_f[i]->setConditionNumber(2.);
	}

}
Пример #15
0
 void HybridComp::evaluate__(double  const *x,vector<double>& obj_){
     double * x_ = new double[m_numDim];
      if(IS_PROBLEM_NAME(m_id,"FUN_Noncont_RH_Com_F23_CEC05")) {
           for(int j=0;j<m_numDim; ++j) {
               double trans = mpp_f[0]->getTranslation()[j];
               if(fabs(x[j] - trans) >= 0.5) {
                    double xTemp = 2.0 * x[j];
                    int intPart = int(xTemp);
                    double decimalPart = xTemp - intPart;
                    if(xTemp <= 0 && decimalPart >= 0.5) xTemp = intPart - 1;
                    else if(decimalPart < 0.5) xTemp = intPart;
                    else xTemp = intPart + 1;
                    x_[j] = xTemp / 2.0;
               }
               else x_[j] = x[j];
           }
      }
	  else copy(x,x+m_numDim,x_); 
    vector<double> weight(m_numFuncs,0);
	for(int i=0;i<m_numFuncs;i++){ // calculate mp_weight for each function
		for(int j=0;j<m_numDim;j++) {
			weight[i]+=(x_[j]-mpp_f[i]->getTranslation()[j])*(x_[j]-mpp_f[i]->getTranslation()[j]);
		}
		weight[i]=exp(-sqrt(weight[i]/(2*m_numDim*mp_convergeSeverity[i]*mp_convergeSeverity[i])));
	}
	vector<double> fit(m_numFuncs);
	CodeVReal s(m_numDim,m_numObj);
	for(int i=0;i<m_numFuncs;i++){ // calculate objective value for each function
		copy(x_,x_+m_numDim,s.m_x.begin());
		mpp_f[i]->BenchmarkFunction::evaluate_(s,false);
		fit[i]=s.m_obj[0];
		if(mp_fmax[i]!=0)
		fit[i]=m_heightNormalizeSeverity*fit[i]/fabs(mp_fmax[i]);
	}

	double sumw=0,wmax;
	wmax=*max_element(weight.begin(),weight.end());
	for(int i=0;i<m_numFuncs;i++) {
		if(weight[i]!=wmax) {
			weight[i]=weight[i]*(1-pow(wmax,10));
		}
	}
     int sameWmax_N = 0;
     for(int i=0; i<m_numFuncs; ++i) {
          if(weight[i] == wmax) ++sameWmax_N;
     }
     int i=m_numFuncs-1;
     while(sameWmax_N > 1 && i >= 0) {
          if(wmax == weight[i]) {
               weight[i] = 0;
               --sameWmax_N;
          }
          --i;
     }

	for(int i=0;i<m_numFuncs;i++)
		sumw+=weight[i];
	for(int i=0;i<m_numFuncs;i++)
		weight[i]/=sumw;

	double obj=0;
	for(int i=0;i<m_numFuncs;i++) {
		obj+=weight[i]*(fit[i]+mp_height[i]);
	}

	delete[] x_;
	x_=0;

	if(IS_PROBLEM_NAME(m_id,"FUN_H_Com_Noisy_CEC05")) obj_[0]= obj*(1+0.2*fabs(Global::msp_global->mp_normalPro->Next()))+m_bias;
	else	obj_[0]=obj+m_bias;

 }
Пример #16
0
void HybridComp::initialize(){

	 m_originalGlobalOpt.flagGloObj()=false;
	 m_originalGlobalOpt.flagLoc()=false;

	if(IS_PROBLEM_NAME(m_id,"FUN_Com")||IS_PROBLEM_NAME(m_id,"FUN_R_Com")){
		setUpFCom();
	}else if(IS_PROBLEM_NAME(m_id,"FUN_Com_CEC05")||IS_PROBLEM_NAME(m_id,"FUN_H_Com_CEC05")||IS_PROBLEM_NAME(m_id,"FUN_H_Com_Noisy_CEC05")){
		SetUpFCom_CEC05();
	}else if(IS_PROBLEM_NAME(m_id,"FUN_RH_Com_CEC05")||IS_PROBLEM_NAME(m_id,"FUN_RH_Com_NarrowBasin_CEC05")||\
		IS_PROBLEM_NAME(m_id,"FUN_RH_Com_Bound_CEC05")){
		SetUpFRH_Com_CEC05();
	}else if(IS_PROBLEM_NAME(m_id,"FUN_RH_Com_F21_CEC05")||IS_PROBLEM_NAME(m_id,"FUN_RH_Com_HighConNumMatrix_F22_CEC05")||\
		IS_PROBLEM_NAME(m_id,"FUN_Noncont_RH_Com_F23_CEC05")){
		SetUpFRH001_Com_CEC05();
	}else if(IS_PROBLEM_NAME(m_id,"FUN_RH_Com_F24_CEC05")||IS_PROBLEM_NAME(m_id,"FUN_RH_Com_noBounds_F25_CEC05")){
		 SetUpFRH002_Com_CEC05();
	}else {
		 throw myException("Error: please check the problem ID@HybridComp::initialize");
	}

    loadTranslation();
    loadRotation();

	CodeVReal x(m_numDim,m_numObj);
    for(int i=0;i<m_numFuncs;i++){
        for(int j=0;j<m_numDim;j++){ // calculate the estimate max value of funciton i
            x[j]=m_searchRange[j].m_upper;
            x[j]/=mp_stretchSeverity[i];
        }		
		mpp_f[i]->BenchmarkFunction::evaluate_(x,false);
		mp_fmax[i]=x.m_obj[0];
     }
    
	vector<double> v(m_numDim,0);
	m_globalOpt.setNumOpts(1);
    setGlobalOpt(0,&v,mpp_f[0]->getTranslation());
    setAccuracy(1.0e-3);
	setDisAccuracy(0.1);
}
Пример #17
0
bool HybridComp::loadTranslation(){
	string s;
	stringstream ss;
	ss<<m_numDim<<"Dim.txt";
	s=ss.str();
	s.insert(0,m_name+"_Opt_");

	s.insert(0,"Problem/FunctionOpt/Data/");//probDataPath
	s.insert(0,Global::g_arg[param_workingDir]);
	ifstream in;
	in.open(s.c_str());

	if(in.fail()){
		if(IS_PROBLEM_NAME(m_id,"FUN_RH_Com_CEC05")||IS_PROBLEM_NAME(m_id,"FUN_RH_Com_NarrowBasin_CEC05")){
			for(int i=0;i<m_numFuncs-1;i++)
			for(int j=0;j<m_numDim;j++){
				mpp_f[i]->getTranslation()[j]=m_searchRange[j].m_lower +(m_searchRange[j].m_upper-m_searchRange[j].m_lower)*(1-Global::msp_global->mp_uniformPro->Next());
			}

			for(int j=0;j<m_numDim;j++){
				mpp_f[m_numFuncs-1]->getTranslation()[j]=0;
			}
		}else if(IS_PROBLEM_NAME(m_id,"FUN_RH_Com_Bound_CEC05")){
			for(int i=0;i<m_numFuncs-1;i++)
			for(int j=0;j<m_numDim;j++){
				if(i==0&&(j+1)%2==0) mpp_f[i]->getTranslation()[j]=m_searchRange[j].m_upper;
				else mpp_f[i]->getTranslation()[j]=m_searchRange[j].m_lower +(m_searchRange[j].m_upper-m_searchRange[j].m_lower)*(1-Global::msp_global->mp_uniformPro->Next());
			}

			for(int j=0;j<m_numDim;j++){
				mpp_f[m_numFuncs-1]->getTranslation()[j]=0;
			}
		}else if(IS_PROBLEM_NAME(m_id,"FUN_RH_Com_noBounds_F25_CEC05")){
			for(int j=0;j<m_numDim;j++){
				mpp_f[0]->getTranslation()[j]= -5.0 +(7.0)*(Global::msp_global->mp_uniformPro->Next());
               }

			for(int i=1;i<m_numFuncs-1;i++)
			for(int j=0;j<m_numDim;j++){
				mpp_f[i]->getTranslation()[j]=m_searchRange[j].m_lower +(m_searchRange[j].m_upper-m_searchRange[j].m_lower)*(1-Global::msp_global->mp_uniformPro->Next());
			}

			for(int j=0;j<m_numDim;j++){
				mpp_f[m_numFuncs-1]->getTranslation()[j]=0;
			}
		}else{
			for(int i=0;i<m_numFuncs;i++)
			for(int j=0;j<m_numDim;j++){
				mpp_f[i]->getTranslation()[j]=m_searchRange[j].m_lower +(m_searchRange[j].m_upper-m_searchRange[j].m_lower)*(1-Global::msp_global->mp_uniformPro->Next());
            }
		}

		
		ofstream out(s.c_str());
		for(int i=0;i<m_numFuncs;i++){
			for(int j=0;j<m_numDim;j++)
				out<<mpp_f[i]->getTranslation()[j]<<" ";
				out<<endl;
		}
		out.close();

	}else{
        for(int i=0;i<m_numFuncs;i++){
			for(int j=0;j<m_numDim;j++) {
				in>>mpp_f[i]->getTranslation()[j];
			}
		}
	}
	in.close();

    for(int i=0;i<m_numFuncs;i++)	mpp_f[i]->setTranlationFlag(true);

    return true;
}