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
00037 #ifndef __moHCMoveLoopExpl_h
00038 #define __moHCMoveLoopExpl_h
00039
00040 #include "moMoveLoopExpl.h"
00041
00042 #include "moMoveInit.h"
00043 #include "moNextMove.h"
00044 #include "moMoveIncrEval.h"
00045 #include "moMoveSelect.h"
00046
00048 template < class M > class moHCMoveLoopExpl:public moMoveLoopExpl < M >
00049 {
00050
00052 typedef typename M::EOType EOT;
00053
00055 typedef typename M::EOType::Fitness Fitness;
00056
00057 public:
00058
00060
00068 moHCMoveLoopExpl (moMoveInit < M > &__move_init, moNextMove < M > &__next_move, moMoveIncrEval < M > &__incr_eval, moMoveSelect < M > &__move_select):
00069
00070 move_init (__move_init),
00071 next_move (__next_move),
00072 incr_eval (__incr_eval), move_select (__move_select)
00073 {
00074
00075 }
00076
00078
00084 void operator () (const EOT & __old_sol, EOT & __new_sol)
00085 {
00086
00087 M move;
00088
00089
00090 move_init (move, __old_sol);
00091
00092
00093 move_select.init (__old_sol.fitness ());
00094
00095 while (move_select.update (move, incr_eval (move, __old_sol))
00096 && next_move (move, __old_sol));
00097
00098 try
00099 {
00100
00101 M best_move;
00102
00103 Fitness best_move_fit;
00104
00105 move_select (best_move, best_move_fit);
00106 __new_sol.fitness (best_move_fit);
00107 best_move (__new_sol);
00108
00109 }
00110 catch (EmptySelection & __ex)
00111 {
00112
00113
00114 }
00115 }
00116
00117 private:
00118
00120 moMoveInit < M > &move_init;
00121
00123 moNextMove < M > &next_move;
00124
00126 moMoveIncrEval < M > &incr_eval;
00127
00129 moMoveSelect < M > &move_select;
00130
00131 };
00132
00133 #endif