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 _moTS_h
00037 #define _moTS_h
00038
00039 #include <eoEvalFunc.h>
00040
00041 #include <moAlgo.h>
00042 #include <moSolContinue.h>
00043 #include <moTSMoveLoopExpl.h>
00044
00046
00049 template < class M >
00050 class moTS:public moAlgo < typename M::EOType >
00051 {
00053 typedef typename M::EOType EOT;
00054
00056 typedef typename EOT::Fitness Fitness;
00057
00058 public:
00059
00061
00072 moTS (moMoveInit < M > & _move_initializer, moNextMove < M > & _next_move_generator,
00073 moMoveIncrEval < M > & _incremental_evaluation, moTabuList < M > & _tabu_list,
00074 moAspirCrit < M > & _aspiration_criterion, moSolContinue < EOT > & _continue,
00075 eoEvalFunc < EOT > & _full_evaluation):
00076 move_explorer ( *new moTSMoveLoopExpl < M >(_move_initializer, _next_move_generator, _incremental_evaluation,
00077 _tabu_list,_aspiration_criterion) ),
00078 continu (_continue), full_evaluation (_full_evaluation)
00079 {}
00080
00082
00089 moTS (moMoveExpl < M > & _move_explorer, moSolContinue < EOT > & _continue, eoEvalFunc < EOT > & _full_evaluation):
00090 move_explorer (_move_explorer), continu (_continue), full_evaluation (_full_evaluation)
00091 {}
00092
00094
00102 bool operator ()(EOT & _solution)
00103 {
00104 M move;
00105
00106 EOT best_solution, new_solution;
00107
00108 if ( _solution.invalid () )
00109 {
00110 full_evaluation (_solution);
00111 }
00112
00113 best_solution=_solution;
00114
00115
00116 new_solution=_solution;
00117
00118 continu.init ();
00119
00120 do
00121 {
00122 move_explorer (_solution, new_solution);
00123
00124
00125 if (new_solution.fitness() > _solution.fitness())
00126 {
00127 best_solution = new_solution;
00128 }
00129
00130 _solution = new_solution;
00131 }
00132 while ( continu (_solution) );
00133
00134 _solution = best_solution;
00135
00136 return true;
00137 }
00138
00139 private:
00140
00142 moMoveExpl < M > & move_explorer;
00143
00145 moSolContinue < EOT > & continu;
00146
00148 eoEvalFunc < EOT > & full_evaluation;
00149 };
00150
00151 #endif