#ifdef MPI // \****************************************************** // Datei ParSolver.h // Autor: Peter Unruh, basierend auf der PG-Version // \****************************************************** #ifndef SA_ParSolver_H #define SA_ParSolver_H //#include #include #include #include "constants.h" #include "SA_ParScheduler.h" #include "SA_Solver.h" #include "parrandom.h" // Zufallszahlen #include "SA_Problem.h" // \****************************************************** // Klasse SA_ParSolver : // Koordination von dem gesamten SA-Prozess // \****************************************************** class SA_ParSolver: public SA_Solver { protected: // enum WriteFctT {STREAM,PATH}; // ob stream- oder pfad-Basierte Funktionen fuer das Schreiben der Best // // Loesung genommen werden // WriteFctT WriteFct; //enum OvwrtMode {NEVER,BETTER,ALWAYS}; // Wann soll bestehende Loesungsdatei ueberschrieben werden // OvwrtMode OverwriteSolution; // int VerboseMode; // 0 - only very basic information // // 3 - some more info, for example subchain data // 4 - even more info, int BroadcastBest; // =1 <=> Am Ende der Berechnung wird die beste gefundene Loesung an alle verschickt // time_t FileReadTime, // Zeit fuer Einlesen der Problemdaten // InitialSolutionTime, // fuer das Finden der Initialloesung // SATime, // fuer das Annealing-Prozess // PostprocTime; // for the Postprocessing SA_ParScheduler *Cooler; // Der verwendete Scheduler // Problem * P; // Das zu loesendes Problem // Solution * State, // Zustand der Algorithmus // * BestSolution; // Beste bis jetzt gefundene Loesung // void (Problem::*GetInitialSolution_fp)(Solution &); // Welche Methode fuer die bestimmung der Startloesung genommen wird // char * Algorithm; // der verwendete SA-Algorithm protected: void SetScheduler(SA_ParScheduler *); public: SA_ParSolver(SA_Problem&); virtual ~SA_ParSolver(); // int ReadConfig(std::istream &); // void InitStates(); // Startloesungen erzeugen und ggf. ausgeben int TestProblemImplementation(); float SeqSimAnn(); //virtual void ShowConfig(); // Testausgabe der Konfiguration void ShowConfig(); virtual void OutputStatistics(std::ostream &, MPI_Comm); // Statistiken des Laufs in ein stream schreiben (Mit ENDL!) virtual void CreateLog(std::ostream &, MPI_Comm) = 0; void WriteLog(bool write,MPI_Comm , MPI_Comm); // Statistik(en) der Laeufe nacheinander in die Logdatei schreiben void WriteSolutionParallel(MPI_Comm); // Die bester aller Loesungen hinschreiben; // in comm stehen alle Knoten, die jeweils verschiedene BestSolution haben koennen. virtual void BcastBestSolution(MPI_Comm comm); //virtual float RunAnnealing(); // den gewaehlten SA-Algo ausfuehren // float SeqSimAnn(); // Der sequenielle Annealing-Algorithm //virtual int TestProblemImplementation(); // provisorisch void SetDataFileName(char* name) { DataFileName = new char[strlen(name)+1]; strcpy(DataFileName,name); } char* GetDataFileName() { return DataFileName; } }; #endif #endif // MPI