#ifdef MPI //#include //#include #include #include #include //#include #include #include "SA_EasyScheduler.h" SA_EasyScheduler::SA_EasyScheduler(): SA_ClusteringScheduler(), CoolingRatio(0.9), subchainfactor(1.0), SubChainReduct(true), MinAccRatio(LOWER_ACCEPTANCE_RATIO), MaxChainLength(0), MaxChainLength0(0), frozen_count(0), frozen_limit(5), pos(0),full(0),FrozenSum(0),Mean(0), saeasyoutput("SA_EasyScheduler","SA_Output.rsc") {//debug(SA_EasyScheduler::Konstruktor ,myrank); saeasyoutput.EnableLevelNumbers(false); saeasyoutput.EnableIdentifier(true); saeasyoutput.SetOutputLevel(10); saeasyoutput.AddVariable(1,SA_FLOAT, &CoolingRatio); saeasyoutput.AddVariable(2,SA_FLOAT, &MinAccRatio); saeasyoutput.AddVariable(3,SA_FLOAT, &subchainfactor); saeasyoutput.AddVariable(4,SA_BYTE, &SubChainReduct); saeasyoutput.AddVariable(5,SA_LONG, &MaxChainLength); saeasyoutput.AddVariable(6,SA_LONG, &MaxChainLength0); saeasyoutput.AddVariable(7,SA_LONG, &frozen_count); saeasyoutput.AddVariable(8,SA_LONG, &frozen_limit); // strcpy(strictshortstr,"strict "); saeasyoutput.AddVariable(9,SA_STRING, SubChainReductStr); saeasyoutput.SetPreviousOutput(SA_ClusteringScheduler::GetSchedulerOutput()); LastSolutions = new float[frozen_limit]; for (int i=0; i < frozen_limit; i++) LastSolutions[i] = 0; } // \****************************************************** // Destruktor // \****************************************************** SA_EasyScheduler::~SA_EasyScheduler() {//debug(SA_EasyScheduler::Destruktor , myrank); delete [] LastSolutions; } SA_Output * SA_EasyScheduler::GetSchedulerOutput() { return(&saeasyoutput); } // \****************************************************** // Methode ReadConfig - Liest die Konfigurations- // daten ( geklammert mit '{' '}' ) aus dem istream // \****************************************************** int SA_EasyScheduler::ReadConfig(std::istream & config) {//debug(SA_EasyScheduler::ReadConfig , myrank); char text[BUFLEN]; config >> text; if ( strcmp(text,"{") != 0) { std::cout << "In SA_EasyScheduler::ReadConfig: config file section does not begin with {!\n"; return FALSE; } while (config >> text && ( strcmp(text,"}") != 0 )) { if (strcmp(text, "SA_Scheduler") == 0) { if ( ! SA_Scheduler::ReadConfig(config) ) { std::cout <<"ReadConfing for Scheduler failed!\n"; return 0; } } else if (strcmp(text, "coolingratio") == 0) { config >> text; SetCoolingRatio( atof(text) ); } else if (strcmp(text, "frozenlimit") == 0) { config >> text; SetFrozenLimit( atol(text) ); } else if (strcmp(text, "minaccratio") == 0) { config >> text; MinAccRatio = atof(text); if ( MinAccRatio < 0 || MinAccRatio >= 1) { std::cout <<"In SA_EasyScheduler::ReadConfig: bad value "<< MinAccRatio<<" for minaccratio specified!\n"; MinAccRatio = -1; } } else if (strcmp(text, "subchainlength") == 0) { config >> text; MaxChainLength = MaxChainLength0 = atol(text); } else if (strcmp(text, "subchainfactor") == 0) { config >> text; subchainfactor = atof(text); } else if (strcmp(text, "subchainreduction") == 0) { config >> text; std::cerr << "DBG: ==================> " << text << std::endl; if (strcmp(text, "linear") == 0 || strcmp(text, "sqrt") == 0 || strcmp(text,"none")) { strcpy(SubChainReductStr,text); SubChainReduct = LINEAR; if (strcmp(text, "sqrt") == 0) { SubChainReduct = SQUAREROOT; } else if (strcmp(text,"none")) { SubChainReduct = NONE; } } else { strcpy(SubChainReductStr,"linear"); SubChainReduct = LINEAR; std::cout <<"In SA_EasyScheduler::ReadConfig: bad value "<< text<<" for subchainlength specified! Leaving default \"linear\"\n"; } } else if (strcmp(text, "verboselevel") == 0) { config >> text; saeasyoutput.SetOutputLevel(atoi(text)); } else { std::cout <<"In SA_EasyScheduler::ReadConfig: unrecognized keyword \""<