00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef UDINE_STRATEGY
00022 #define UDINE_STRATEGY
00023
00024 #include <cmath>
00025 #include <ctime>
00026 #include <iostream>
00027 #include <fstream>
00028 #include <sstream>
00029 #include <string>
00030 #include <utility>
00031
00032 #include <ilcplex/ilocplex.h>
00033
00034 #include "neighbourhood.h"
00035 #include "model.h"
00036
00037 ILOSTLBEGIN
00038
00039 namespace Udine {
00040
00041 class StrategyI : public IloCplex::IncumbentCallbackI {
00042
00043 protected:
00044 IloEnv env;
00045 Config &config;
00046 Model &model;
00047
00048
00049 public:
00050 StrategyI(IloEnv &environment, Model& s, Config &configuration)
00051 : IloCplex::IncumbentCallbackI(environment), env(environment), model(s), config(configuration) {}
00052
00053 virtual int sumMissingCourseDays();
00054 virtual int sumSingletonChecks();
00055 virtual int sumMissingSeats();
00056 virtual int sumExtraRoomsUsed();
00057
00058 virtual void logNeighbrouhood(Neighbourhood def);
00059 virtual Neighbourhood getFixDayNeighbourhood();
00060 virtual Neighbourhood getFixPeriodNeighbourhood();
00061 virtual void runDiver(Neighbourhood definition);
00062 virtual void main() = 0;
00063 virtual void finishOff() = 0;
00064
00065 };
00066
00067
00068
00069
00070 class AnytimeStrategyI : public StrategyI {
00071 public:
00072 ILOCOMMONCALLBACKSTUFF(AnytimeStrategy)
00073 AnytimeStrategyI(IloEnv &environment, Model& s, Config &configuration)
00074 : StrategyI(environment, s, configuration) {
00075 }
00076 virtual void main();
00077 virtual void finishOff();
00078 };
00079 IloCplex::Callback AnytimeStrategy(IloEnv &env, Model& s, Config &config);
00080
00081
00082
00083
00084 class ContractStrategyI : public StrategyI {
00085 protected:
00086 Neighbourhoods fixDayNeighbs;
00087 Neighbourhoods fixPeriodNeighbs;
00088 public:
00089 ILOCOMMONCALLBACKSTUFF(ContractStrategy)
00090 ContractStrategyI(IloEnv &environment, Model& s, Config &configuration)
00091 : StrategyI(environment, s, configuration) {
00092 }
00093 virtual void main();
00094 virtual void finishOff();
00095 };
00096 IloCplex::Callback ContractStrategy(IloEnv &env, Model& s, Config &config);
00097
00098
00099
00100
00101 class SolutionSavingStrategyI : public StrategyI {
00102 public:
00103 ILOCOMMONCALLBACKSTUFF(SolutionSavingStrategy)
00104 SolutionSavingStrategyI(IloEnv &environment, Model& s, Config &configuration)
00105 : StrategyI(environment, s, configuration) {
00106 }
00107 virtual void main();
00108 virtual void finishOff();
00109 };
00110 IloCplex::Callback SolutionSavingStrategy(IloEnv &env, Model& s, Config &config);
00111
00112
00113
00114 class SolutionPolishingStrategyI : public StrategyI {
00115 protected:
00116 Neighbourhoods fixPeriodNeighbs;
00117 public:
00118 ILOCOMMONCALLBACKSTUFF(SolutionPolishingStrategy)
00119 SolutionPolishingStrategyI(IloEnv &environment, Model& s, Config &configuration)
00120 : StrategyI(environment, s, configuration) {
00121 }
00122 virtual void main();
00123 virtual void finishOff();
00124 };
00125 IloCplex::Callback SolutionPolishingStrategy(IloEnv &env, Model& s, Config &config);
00126
00127 }
00128
00129 #endif // UDINE STRATEGY