// \****************************************************** // Datei EasyScheduler.h // Autor: Peter Unruh, basierend auf der PG-Version // \****************************************************** #ifndef SA_SeqEasyScheduler_H #define SA_SeqEasyScheduler_H //#include "iostream.h" #include "iostream" #include "constants.h" #include "SA_Scheduler.h" // \****************************************************** // Klasse EasyScheduler : // cooling schedule, Statistiken // \****************************************************** class SA_SeqEasyScheduler : public SA_Scheduler { SA_Output saseqeasyoutput; // char strictshortstr[11]; // not needed in parallel !? REMOVE ? protected: float CoolingRatio, // T(n+1) = T(0)*exp(CoolingRatio,n) MinAccRatio, // if >=0 frozen_count will be incremented bei AcceptRatio < MinAccRatio subchainfactor; // the multiplier for the subchainlength // bool StrictShort; // should the length of subchain be shortened strictly (/ncluster) // or not (/sqr(ncluster) ). unsigned long MaxChainLength, // Maximale laenge der Teilkette MaxChainLength0,// - // - bei Anzahl der Cluster == 1 frozen_count, frozen_limit; float * LastSolutions, // Ein Puffer fuer Frozen-Bestimmung FrozenSum, // Summe der letzten Loesungen Mean; // Mittelwert der letzten Loesungen int pos; // erste freie Position im Puffer int full; // TRUE <=> Puffer voll void Enqueue(); // public: SA_SeqEasyScheduler(); ~SA_SeqEasyScheduler(); virtual SA_Output *GetSchedulerOutput(); int ReadConfig(std::istream &); virtual int Equilibrium(); virtual void UpdateTemperature(); virtual int Frozen(); void SetCoolingRatio(float a) {CoolingRatio = a;} void SetFrozenLimit(unsigned long lim); virtual void ShowConfig(std::ostream & ); // Hier :: falls nicht in .cfg-Datei gesetzt, subchainlengt und initialtemperature ermittel void WarmingUp(SA_Problem & P, SA_Solution &s, SA_Solution &b); }; #endif