// \****************************************************** // file SA_MIRScheduler.h // \****************************************************** #ifndef SA_MIRScheduler_H #define SA_MIRScheduler_H //#include #include #include "constants.h" #include "SA_ParScheduler.h" // \****************************************************** // Class SA_MIRScheduler : // \****************************************************** class SA_MIRScheduler : public SA_ParScheduler { private: SA_Output samiroutput; public: virtual int Accept(float new_cost); // prueft und fuehrt einen Uebergang ggf. durch; zaehlt Updates virtual int Equilibrium(); // true <=> iteration number on this temperature step as calculated virtual int Frozen(); // true <=> total iteration number as requested virtual void UpdateTemperature(); // geometric update: T_n+1 = Alpha * T_n virtual void WarmingUp(SA_Problem&, SA_Solution& s, SA_Solution& b, MPI_Comm comm = MPI_COMM_SELF); // parameter: // - in s: initial solution // returns: // - in b best seen solution // purposes: // - calculation of start and end temperature // - measuring SA-accept and SA-reset times void SetDesiredRunLength(int); // requested total iteration number // setup the schedule for this number of iterations int GetDesiredRunLength(void) {return DesiredRunLength;} int ReadConfig(std::istream &); void ShowConfig(std::ostream &); void CreateLog(std::ostream &, MPI_Comm comm = MPI_COMM_SELF); // without endl befor or after! void OutputSubchainStatistics(std::ostream &); // without endl befor or after! void UpdateEminEmax(float); // store new cost difference void UpdateTsTf(void); // set start and end temperature as in configuration-file or after WarmingUp SA_MIRScheduler(); ~SA_MIRScheduler(); SA_Output *GetSchedulerOutput(); // void SetTbest(float tbest) {Tbest = tbest;} private: // user parameters float initialT, // start temperature endT, // end temperature Alpha_user, // temperature reduction factor Betta; // subchain enlarging factor float Ts,Tf, // start and end temperature Tsteps, // number of temperature levels rlakt, // length of the actual temperature level Alpha, // temperature reduction factor, used in optimization Run_Betta; // subchain enlarging factor, used in optimization int DesiredRunLength, // number of iterations IterationNumber; // ... over all float dEmax, // maximum cost difference dEmin; // minimum cost difference float Treset, // reset temperature to this value Tbest, // found last best solution by this temperature Temperature_Reset; // true <=> temperature will be resetted double time_reset, // time for (GetNeighbor,GetCost,ResetSolution) time_accept; // time for (GetNeighbor,GetCost,UpdateSolution) }; #endif