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), move_explorer_memory_allocation(true)
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), move_explorer_memory_allocation(false)
00091 {}
00092
00094 ~moTS()
00095 {
00096 if(move_explorer_memory_allocation)
00097 {
00098 delete(move_explorer);
00099 }
00100 }
00101
00103
00111 bool operator ()(EOT & _solution)
00112 {
00113 M move;
00114
00115 EOT best_solution, new_solution;
00116
00117 if ( _solution.invalid () )
00118 {
00119 full_evaluation (_solution);
00120 }
00121
00122 best_solution=_solution;
00123
00124
00125 new_solution=_solution;
00126
00127 continu.init ();
00128
00129 do
00130 {
00131 (*move_explorer) (_solution, new_solution);
00132
00133
00134 if (new_solution.fitness() > _solution.fitness())
00135 {
00136 best_solution = new_solution;
00137 }
00138
00139 _solution = new_solution;
00140 }
00141 while ( continu (_solution) );
00142
00143 _solution = best_solution;
00144
00145 return true;
00146 }
00147
00148 private:
00149
00151 moMoveExpl < M > * move_explorer;
00152
00154 moSolContinue < EOT > & continu;
00155
00157 eoEvalFunc < EOT > & full_evaluation;
00158
00160 bool move_explorer_memory_allocation;
00161 };
00162
00163 #endif