00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 #ifndef _moILS_h
00037 #define _moILS_h
00038
00039 #include <eoEvalFunc.h>
00040
00041 #include <moHC.h>
00042 #include <moTS.h>
00043 #include <moSA.h>
00044
00046
00049 template < class M >
00050 class moILS:public moAlgo < typename M::EOType >
00051 {
00053 typedef typename M::EOType EOT;
00054
00056 typedef typename EOT::Fitness Fitness;
00057
00058 public:
00059
00061
00070 moILS (moAlgo<EOT> & _algorithm, moSolContinue <EOT> & _continue, moComparator<EOT> & _acceptance_criterion,
00071 eoMonOp<EOT> & _perturbation, eoEvalFunc<EOT> & _full_evaluation):
00072 algorithm(_algorithm), continu(_continue), acceptance_criterion(_acceptance_criterion),
00073 perturbation(_perturbation), full_evaluation(_full_evaluation)
00074 {}
00075
00077
00087 moILS (moMoveInit < M > & _move_initializer, moNextMove < M > & _next_move_generator,
00088 moMoveIncrEval < M > & _incremental_evaluation, moMoveSelect < M > & _move_selection,
00089 moSolContinue <EOT> & _continue, moComparator<EOT> & _acceptance_criterion,
00090 eoMonOp<EOT> & _perturbation, eoEvalFunc<EOT> & _full_evaluation):
00091 algorithm( *new moHC<M>(_move_initializer, _next_move_generator, _incremental_evaluation, _move_selection, _full_evaluation) ),
00092 continu(_continue), acceptance_criterion(_acceptance_criterion), perturbation(_perturbation), full_evaluation(_full_evaluation)
00093 {}
00094
00096
00108 moILS (moMoveInit <M> & _move_initializer, moNextMove <M> & _next_move_generator,
00109 moMoveIncrEval <M> & _incremental_evaluation, moTabuList <M> & _tabu_list,
00110 moAspirCrit <M> & _aspiration_criterion, moSolContinue <EOT> & _moTS_continue,
00111 moSolContinue <EOT> & _continue, moComparator<EOT> & _acceptance_criterion, eoMonOp<EOT> & _perturbation,
00112 eoEvalFunc<EOT> & _full_evaluation):
00113 algorithm( *new moTS<M>(_move_initializer, _next_move_generator, _incremental_evaluation, _tabu_list, _aspiration_criterion,
00114 _moTS_continue, _full_evaluation) ),
00115 continu(_continue), acceptance_criterion(_acceptance_criterion), perturbation(_perturbation), full_evaluation(_full_evaluation)
00116 {}
00117
00119
00130 moILS (moRandMove<M> & _random_move_generator, moMoveIncrEval <M> & _incremental_evaluation, moSolContinue <EOT> & _moSA_continue,
00131 double _initial_temperature, moCoolingSchedule & _cooling_schedule, moSolContinue <EOT> & _continue,
00132 moComparator<EOT> & _acceptance_criterion, eoMonOp<EOT> & _perturbation, eoEvalFunc<EOT> & _full_evaluation):
00133 algorithm( *new moSA<M>(_random_move_generator, _incremental_evaluation, _moSA_continue, _initial_temperature,
00134 _cooling_schedule, _full_evaluation) ),
00135 continu(_continue), acceptance_criterion(_acceptance_criterion), perturbation(_perturbation), full_evaluation(_full_evaluation)
00136 {}
00137
00139
00146 bool operator()(EOT & _solution)
00147 {
00148 EOT _solution_saved=_solution;
00149
00150 continu.init ();
00151
00152
00153
00154
00155 algorithm(_solution);
00156
00157 if ( acceptance_criterion(_solution, _solution_saved) )
00158 {
00159 _solution_saved=_solution;
00160
00161 }
00162 else
00163 {
00164 _solution=_solution_saved;
00165 }
00166
00167 while ( continu (_solution) )
00168 {
00169 perturbation(_solution);
00170 full_evaluation(_solution);
00171
00172 algorithm(_solution);
00173
00174 if ( acceptance_criterion(_solution, _solution_saved) )
00175 {
00176 _solution_saved=_solution;
00177 }
00178 else
00179 {
00180 _solution=_solution_saved;
00181 }
00182 }
00183
00184 return true;
00185 }
00186
00187 private:
00188
00190 moAlgo<EOT> & algorithm;
00191
00193 moSolContinue<EOT> & continu;
00194
00196 moComparator<EOT> & acceptance_criterion;
00197
00199 eoMonOp<EOT> & perturbation;
00200
00202 eoEvalFunc<EOT> & full_evaluation;
00203 };
00204
00205 #endif