From f87c4fc8b8f182d179b9da4bcb2f64f2013cfd7c Mon Sep 17 00:00:00 2001 From: legrand Date: Wed, 4 Jul 2007 13:49:30 +0000 Subject: [PATCH] tag on mo-1.0 04072007 git-svn-id: svn://scm.gforge.inria.fr/svnroot/paradiseo@507 331e1502-861f-0410-8da2-ba01fb791d7f --- .../paradiseo-mo/AUTHORS | 1 + .../paradiseo-mo/ChangeLog | 0 .../paradiseo-mo/Makefile.am | 28 + tags/paradiseo-1.0-04072007/paradiseo-mo/NEWS | 0 .../paradiseo-mo/README | 69 + .../paradiseo-mo/autogen.sh | 154 + .../paradiseo-mo/cleaner | 7 + .../paradiseo-mo/configure.in | 55 + .../paradiseo-mo/docs/Doxyfile | 1268 ++ .../paradiseo-mo/docs/Makefile.am | 5 + .../paradiseo-mo/docs/html/annotated.html | 70 + .../docs/html/class_empty_selection.html | 54 + .../paradiseo-mo/docs/html/classes.html | 54 + .../paradiseo-mo/docs/html/classmo_algo.html | 65 + .../docs/html/classmo_aspir_crit-members.html | 43 + .../docs/html/classmo_aspir_crit.html | 95 + .../docs/html/classmo_aspir_crit.png | Bin 0 -> 1805 bytes .../classmo_best_impr_select-members.html | 48 + .../docs/html/classmo_best_impr_select.html | 191 + .../docs/html/classmo_best_impr_select.png | Bin 0 -> 1074 bytes .../docs/html/classmo_cooling_schedule.html | 62 + .../docs/html/classmo_cooling_schedule.png | Bin 0 -> 1297 bytes ..._exponential_cooling_schedule-members.html | 45 + .../classmo_exponential_cooling_schedule.html | 153 + .../classmo_exponential_cooling_schedule.png | Bin 0 -> 928 bytes .../classmo_first_impr_select-members.html | 50 + .../docs/html/classmo_first_impr_select.html | 222 + .../docs/html/classmo_first_impr_select.png | Bin 0 -> 1067 bytes .../classmo_gen_sol_continue-members.html | 46 + .../docs/html/classmo_gen_sol_continue.html | 182 + .../docs/html/classmo_gen_sol_continue.png | Bin 0 -> 900 bytes .../docs/html/classmo_h_c-members.html | 55 + .../paradiseo-mo/docs/html/classmo_h_c.html | 238 + .../paradiseo-mo/docs/html/classmo_h_c.png | Bin 0 -> 1507 bytes .../classmo_h_c_move_loop_expl-members.html | 49 + .../docs/html/classmo_h_c_move_loop_expl.html | 200 + .../docs/html/classmo_h_c_move_loop_expl.png | Bin 0 -> 1569 bytes ...ssmo_impr_best_fit_aspir_crit-members.html | 47 + .../classmo_impr_best_fit_aspir_crit.html | 138 + .../html/classmo_impr_best_fit_aspir_crit.png | Bin 0 -> 1309 bytes .../classmo_it_rand_next_move-members.html | 47 + .../docs/html/classmo_it_rand_next_move.html | 180 + .../docs/html/classmo_it_rand_next_move.png | Bin 0 -> 1033 bytes .../html/classmo_l_s_check_point-members.html | 45 + .../docs/html/classmo_l_s_check_point.html | 155 + ...assmo_linear_cooling_schedule-members.html | 45 + .../html/classmo_linear_cooling_schedule.html | 153 + .../html/classmo_linear_cooling_schedule.png | Bin 0 -> 859 bytes .../docs/html/classmo_move-members.html | 43 + .../paradiseo-mo/docs/html/classmo_move.html | 68 + .../docs/html/classmo_move_expl.html | 66 + .../docs/html/classmo_move_expl.png | Bin 0 -> 1884 bytes .../docs/html/classmo_move_incr_eval.html | 63 + .../docs/html/classmo_move_init.html | 63 + .../docs/html/classmo_move_loop_expl.html | 66 + .../docs/html/classmo_move_loop_expl.png | Bin 0 -> 2000 bytes .../html/classmo_move_select-members.html | 45 + .../docs/html/classmo_move_select.html | 153 + .../docs/html/classmo_move_select.png | Bin 0 -> 1886 bytes .../docs/html/classmo_next_move.html | 64 + .../docs/html/classmo_next_move.png | Bin 0 -> 1050 bytes .../html/classmo_no_aspir_crit-members.html | 44 + .../docs/html/classmo_no_aspir_crit.html | 142 + .../docs/html/classmo_no_aspir_crit.png | Bin 0 -> 1254 bytes .../classmo_rand_impr_select-members.html | 48 + .../docs/html/classmo_rand_impr_select.html | 227 + .../docs/html/classmo_rand_impr_select.png | Bin 0 -> 1076 bytes .../docs/html/classmo_rand_move.html | 63 + .../docs/html/classmo_s_a-members.html | 58 + .../paradiseo-mo/docs/html/classmo_s_a.html | 216 + .../paradiseo-mo/docs/html/classmo_s_a.png | Bin 0 -> 1521 bytes ...classmo_simple_move_tabu_list-members.html | 51 + .../html/classmo_simple_move_tabu_list.html | 283 + .../html/classmo_simple_move_tabu_list.png | Bin 0 -> 1368 bytes ...smo_simple_solution_tabu_list-members.html | 51 + .../classmo_simple_solution_tabu_list.html | 316 + .../classmo_simple_solution_tabu_list.png | Bin 0 -> 1376 bytes .../html/classmo_sol_continue-members.html | 43 + .../docs/html/classmo_sol_continue.html | 94 + .../docs/html/classmo_sol_continue.png | Bin 0 -> 913 bytes .../docs/html/classmo_t_s-members.html | 58 + .../paradiseo-mo/docs/html/classmo_t_s.html | 276 + .../paradiseo-mo/docs/html/classmo_t_s.png | Bin 0 -> 1503 bytes .../classmo_t_s_move_loop_expl-members.html | 51 + .../docs/html/classmo_t_s_move_loop_expl.html | 218 + .../docs/html/classmo_t_s_move_loop_expl.png | Bin 0 -> 1577 bytes .../docs/html/classmo_tabu_list-members.html | 46 + .../docs/html/classmo_tabu_list.html | 173 + .../docs/html/classmo_tabu_list.png | Bin 0 -> 1770 bytes .../paradiseo-mo/docs/html/doxygen.css | 358 + .../paradiseo-mo/docs/html/doxygen.png | Bin 0 -> 1281 bytes .../paradiseo-mo/docs/html/files.html | 63 + .../paradiseo-mo/docs/html/ftv2blank.png | Bin 0 -> 174 bytes .../paradiseo-mo/docs/html/ftv2doc.png | Bin 0 -> 255 bytes .../docs/html/ftv2folderclosed.png | Bin 0 -> 259 bytes .../paradiseo-mo/docs/html/ftv2folderopen.png | Bin 0 -> 261 bytes .../paradiseo-mo/docs/html/ftv2lastnode.png | Bin 0 -> 233 bytes .../paradiseo-mo/docs/html/ftv2link.png | Bin 0 -> 358 bytes .../paradiseo-mo/docs/html/ftv2mlastnode.png | Bin 0 -> 160 bytes .../paradiseo-mo/docs/html/ftv2mnode.png | Bin 0 -> 194 bytes .../paradiseo-mo/docs/html/ftv2node.png | Bin 0 -> 235 bytes .../paradiseo-mo/docs/html/ftv2plastnode.png | Bin 0 -> 165 bytes .../paradiseo-mo/docs/html/ftv2pnode.png | Bin 0 -> 200 bytes .../paradiseo-mo/docs/html/ftv2vertline.png | Bin 0 -> 229 bytes .../paradiseo-mo/docs/html/functions.html | 285 + .../docs/html/functions_func.html | 158 + .../docs/html/functions_type.html | 72 + .../docs/html/functions_vars.html | 169 + .../paradiseo-mo/docs/html/hierarchy.html | 146 + .../paradiseo-mo/docs/html/index.html | 11 + .../docs/html/index_8h-source.html | 35 + .../paradiseo-mo/docs/html/installdox | 117 + .../paradiseo-mo/docs/html/main.html | 40 + .../paradiseo-mo/docs/html/mo_8h-source.html | 75 + .../docs/html/mo_algo_8h-source.html | 52 + .../docs/html/mo_aspir_crit_8h-source.html | 59 + .../html/mo_best_impr_select_8h-source.html | 100 + .../html/mo_cooling_schedule_8h-source.html | 52 + ...xponential_cooling_schedule_8h-source.html | 68 + .../html/mo_first_impr_select_8h-source.html | 107 + .../html/mo_gen_sol_continue_8h-source.html | 79 + .../docs/html/mo_h_c_8h-source.html | 133 + .../html/mo_h_c_move_loop_expl_8h-source.html | 116 + ...mo_impr_best_fit_aspir_crit_8h-source.html | 97 + .../html/mo_it_rand_next_move_8h-source.html | 93 + .../html/mo_l_s_check_point_8h-source.html | 81 + .../mo_linear_cooling_schedule_8h-source.html | 68 + .../docs/html/mo_move_8h-source.html | 55 + .../docs/html/mo_move_expl_8h-source.html | 55 + .../html/mo_move_incr_eval_8h-source.html | 55 + .../docs/html/mo_move_init_8h-source.html | 53 + .../html/mo_move_loop_expl_8h-source.html | 52 + .../docs/html/mo_move_select_8h-source.html | 73 + .../docs/html/mo_next_move_8h-source.html | 54 + .../docs/html/mo_no_aspir_crit_8h-source.html | 64 + .../html/mo_rand_impr_select_8h-source.html | 104 + .../docs/html/mo_rand_move_8h-source.html | 52 + .../docs/html/mo_s_a_8h-source.html | 151 + .../mo_simple_move_tabu_list_8h-source.html | 141 + ...o_simple_solution_tabu_list_8h-source.html | 148 + .../docs/html/mo_sol_continue_8h-source.html | 55 + .../docs/html/mo_t_s_8h-source.html | 171 + .../html/mo_t_s_move_loop_expl_8h-source.html | 135 + .../docs/html/mo_tabu_list_8h-source.html | 68 + .../paradiseo-mo/docs/html/search.idx | Bin 0 -> 342580 bytes .../paradiseo-mo/docs/html/search.php | 381 + .../paradiseo-mo/docs/html/tab_b.gif | Bin 0 -> 35 bytes .../paradiseo-mo/docs/html/tab_l.gif | Bin 0 -> 706 bytes .../paradiseo-mo/docs/html/tab_r.gif | Bin 0 -> 2585 bytes .../paradiseo-mo/docs/html/tabs.css | 102 + .../paradiseo-mo/docs/html/tree.html | 250 + .../paradiseo-mo/docs/latex/FreeSans.ttf | Bin 0 -> 22932 bytes .../paradiseo-mo/docs/latex/Makefile | 39 + .../paradiseo-mo/docs/latex/annotated.tex | 34 + .../docs/latex/class_empty_selection.tex | 21 + .../paradiseo-mo/docs/latex/classmo_algo.tex | 29 + .../docs/latex/classmo_aspir_crit.eps | 215 + .../docs/latex/classmo_aspir_crit.tex | 46 + .../docs/latex/classmo_best_impr_select.eps | 209 + .../docs/latex/classmo_best_impr_select.tex | 105 + .../docs/latex/classmo_cooling_schedule.eps | 215 + .../docs/latex/classmo_cooling_schedule.tex | 27 + .../classmo_exponential_cooling_schedule.eps | 209 + .../classmo_exponential_cooling_schedule.tex | 85 + .../docs/latex/classmo_first_impr_select.eps | 209 + .../docs/latex/classmo_first_impr_select.tex | 118 + .../docs/latex/classmo_gen_sol_continue.eps | 209 + .../docs/latex/classmo_gen_sol_continue.tex | 102 + .../paradiseo-mo/docs/latex/classmo_h_c.eps | 221 + .../paradiseo-mo/docs/latex/classmo_h_c.tex | 116 + .../docs/latex/classmo_h_c_move_loop_expl.eps | 215 + .../docs/latex/classmo_h_c_move_loop_expl.tex | 100 + .../classmo_impr_best_fit_aspir_crit.eps | 209 + .../classmo_impr_best_fit_aspir_crit.tex | 80 + .../docs/latex/classmo_it_rand_next_move.eps | 209 + .../docs/latex/classmo_it_rand_next_move.tex | 98 + .../docs/latex/classmo_l_s_check_point.tex | 79 + .../latex/classmo_linear_cooling_schedule.eps | 209 + .../latex/classmo_linear_cooling_schedule.tex | 85 + .../paradiseo-mo/docs/latex/classmo_move.tex | 35 + .../docs/latex/classmo_move_expl.eps | 221 + .../docs/latex/classmo_move_expl.tex | 29 + .../docs/latex/classmo_move_incr_eval.tex | 29 + .../docs/latex/classmo_move_init.tex | 29 + .../docs/latex/classmo_move_loop_expl.eps | 221 + .../docs/latex/classmo_move_loop_expl.tex | 29 + .../docs/latex/classmo_move_select.eps | 219 + .../docs/latex/classmo_move_select.tex | 77 + .../docs/latex/classmo_next_move.eps | 209 + .../docs/latex/classmo_next_move.tex | 29 + .../docs/latex/classmo_no_aspir_crit.eps | 209 + .../docs/latex/classmo_no_aspir_crit.tex | 68 + .../docs/latex/classmo_rand_impr_select.eps | 209 + .../docs/latex/classmo_rand_impr_select.tex | 126 + .../docs/latex/classmo_rand_move.tex | 29 + .../paradiseo-mo/docs/latex/classmo_s_a.eps | 221 + .../paradiseo-mo/docs/latex/classmo_s_a.tex | 110 + .../latex/classmo_simple_move_tabu_list.eps | 209 + .../latex/classmo_simple_move_tabu_list.tex | 147 + .../classmo_simple_solution_tabu_list.eps | 209 + .../classmo_simple_solution_tabu_list.tex | 165 + .../docs/latex/classmo_sol_continue.eps | 209 + .../docs/latex/classmo_sol_continue.tex | 46 + .../paradiseo-mo/docs/latex/classmo_t_s.eps | 221 + .../paradiseo-mo/docs/latex/classmo_t_s.tex | 132 + .../docs/latex/classmo_t_s_move_loop_expl.eps | 215 + .../docs/latex/classmo_t_s_move_loop_expl.tex | 108 + .../docs/latex/classmo_tabu_list.eps | 215 + .../docs/latex/classmo_tabu_list.tex | 81 + .../paradiseo-mo/docs/latex/doxygen.sty | 78 + .../paradiseo-mo/docs/latex/hierarchy.tex | 89 + .../paradiseo-mo/docs/latex/main.tex | 5 + .../paradiseo-mo/docs/latex/refman.tex | 70 + .../docs/man/man3/EmptySelection.3 | 23 + .../paradiseo-mo/docs/man/man3/moAlgo.3 | 27 + .../paradiseo-mo/docs/man/man3/moAspirCrit.3 | 46 + .../docs/man/man3/moBestImprSelect.3 | 117 + .../docs/man/man3/moCoolingSchedule.3 | 27 + .../man/man3/moExponentialCoolingSchedule.3 | 90 + .../docs/man/man3/moFirstImprSelect.3 | 130 + .../docs/man/man3/moGenSolContinue.3 | 105 + .../paradiseo-mo/docs/man/man3/moHC.3 | 132 + .../docs/man/man3/moHCMoveLoopExpl.3 | 113 + .../docs/man/man3/moImprBestFitAspirCrit.3 | 90 + .../docs/man/man3/moItRandNextMove.3 | 108 + .../docs/man/man3/moLSCheckPoint.3 | 83 + .../docs/man/man3/moLinearCoolingSchedule.3 | 90 + .../paradiseo-mo/docs/man/man3/moMove.3 | 35 + .../paradiseo-mo/docs/man/man3/moMoveExpl.3 | 29 + .../docs/man/man3/moMoveIncrEval.3 | 27 + .../paradiseo-mo/docs/man/man3/moMoveInit.3 | 27 + .../docs/man/man3/moMoveLoopExpl.3 | 29 + .../paradiseo-mo/docs/man/man3/moMoveSelect.3 | 84 + .../paradiseo-mo/docs/man/man3/moNextMove.3 | 29 + .../docs/man/man3/moNoAspirCrit.3 | 71 + .../docs/man/man3/moRandImprSelect.3 | 137 + .../paradiseo-mo/docs/man/man3/moRandMove.3 | 27 + .../paradiseo-mo/docs/man/man3/moSA.3 | 130 + .../docs/man/man3/moSimpleMoveTabuList.3 | 160 + .../docs/man/man3/moSimpleSolutionTabuList.3 | 176 + .../docs/man/man3/moSolContinue.3 | 46 + .../paradiseo-mo/docs/man/man3/moTS.3 | 158 + .../docs/man/man3/moTSMoveLoopExpl.3 | 125 + .../paradiseo-mo/docs/man/man3/moTabuList.3 | 85 + .../paradiseo-mo/docs/mo.doxytag | 1082 ++ .../paradiseo-mo/src/Makefile.am | 1 + .../paradiseo-mo/src/index.h | 26 + .../paradiseo-mo/src/mo | 6 + .../paradiseo-mo/src/mo.h | 46 + .../paradiseo-mo/src/moAlgo.h | 26 + .../paradiseo-mo/src/moAspirCrit.h | 37 + .../paradiseo-mo/src/moBestImprSelect.h | 93 + .../paradiseo-mo/src/moCoolingSchedule.h | 27 + .../src/moExponentialCoolingSchedule.h | 55 + .../paradiseo-mo/src/moFirstImprSelect.h | 104 + .../paradiseo-mo/src/moGenSolContinue.h | 69 + .../paradiseo-mo/src/moHC.h | 133 + .../paradiseo-mo/src/moHCMoveLoopExpl.h | 108 + .../paradiseo-mo/src/moImprBestFitAspirCrit.h | 84 + .../paradiseo-mo/src/moItRandNextMove.h | 84 + .../paradiseo-mo/src/moLSCheckPoint.h | 66 + .../src/moLinearCoolingSchedule.h | 55 + .../paradiseo-mo/src/moMove.h | 32 + .../paradiseo-mo/src/moMoveExpl.h | 29 + .../paradiseo-mo/src/moMoveIncrEval.h | 32 + .../paradiseo-mo/src/moMoveInit.h | 28 + .../paradiseo-mo/src/moMoveLoopExpl.h | 26 + .../paradiseo-mo/src/moMoveSelect.h | 65 + .../paradiseo-mo/src/moNextMove.h | 29 + .../paradiseo-mo/src/moNoAspirCrit.h | 48 + .../paradiseo-mo/src/moRandImprSelect.h | 104 + .../paradiseo-mo/src/moRandMove.h | 26 + .../paradiseo-mo/src/moSA.h | 149 + .../paradiseo-mo/src/moSimpleMoveTabuList.h | 126 + .../src/moSimpleSolutionTabuList.h | 135 + .../paradiseo-mo/src/moSolContinue.h | 33 + .../paradiseo-mo/src/moTS.h | 180 + .../paradiseo-mo/src/moTSMoveLoopExpl.h | 132 + .../paradiseo-mo/src/moTabuList.h | 56 + .../paradiseo-mo/tutorial/Lesson1/Makefile.am | 20 + .../tutorial/Lesson1/hill_climbing | Bin 0 -> 469340 bytes .../tutorial/Lesson1/hill_climbing.cpp | 68 + .../paradiseo-mo/tutorial/Lesson2/Makefile.am | 20 + .../paradiseo-mo/tutorial/Lesson2/tabu_search | Bin 0 -> 558361 bytes .../tutorial/Lesson2/tabu_search.cpp | 69 + .../paradiseo-mo/tutorial/Lesson3/Makefile.am | 20 + .../tutorial/Lesson3/simulated_annealing | Bin 0 -> 470656 bytes .../tutorial/Lesson3/simulated_annealing.cpp | 66 + .../paradiseo-mo/tutorial/Makefile.am | 1 + .../tutorial/examples/Makefile.am | 1 + .../tutorial/examples/tsp/Makefile.am | 1 + .../tutorial/examples/tsp/benchs/ali535.tsp | 536 + .../tutorial/examples/tsp/benchs/eil101.tsp | 102 + .../tutorial/examples/tsp/benchs/pr2392.tsp | 2393 +++ .../tutorial/examples/tsp/benchs/readme | 35 + .../tutorial/examples/tsp/benchs/rl5915.tsp | 5916 +++++++ .../tutorial/examples/tsp/benchs/usa13509.tsp | 13510 ++++++++++++++++ .../tutorial/examples/tsp/src/Makefile.am | 31 + .../tutorial/examples/tsp/src/city_swap.cpp | 24 + .../tutorial/examples/tsp/src/city_swap.h | 29 + .../tutorial/examples/tsp/src/edge_xover.cpp | 142 + .../tutorial/examples/tsp/src/edge_xover.h | 47 + .../tutorial/examples/tsp/src/graph.cpp | 90 + .../tutorial/examples/tsp/src/graph.h | 30 + .../tutorial/examples/tsp/src/libtsp.a | Bin 0 -> 1699484 bytes .../tutorial/examples/tsp/src/mix.h | 25 + .../tutorial/examples/tsp/src/order_xover.cpp | 94 + .../tutorial/examples/tsp/src/order_xover.h | 32 + .../examples/tsp/src/part_route_eval.cpp | 27 + .../examples/tsp/src/part_route_eval.h | 37 + .../examples/tsp/src/part_two_opt_init.cpp | 20 + .../examples/tsp/src/part_two_opt_init.h | 29 + .../examples/tsp/src/part_two_opt_next.cpp | 32 + .../examples/tsp/src/part_two_opt_next.h | 28 + .../examples/tsp/src/partial_mapped_xover.cpp | 93 + .../examples/tsp/src/partial_mapped_xover.h | 31 + .../tutorial/examples/tsp/src/route.h | 19 + .../tutorial/examples/tsp/src/route_eval.cpp | 26 + .../tutorial/examples/tsp/src/route_eval.h | 30 + .../tutorial/examples/tsp/src/route_init.cpp | 38 + .../tutorial/examples/tsp/src/route_init.h | 28 + .../tutorial/examples/tsp/src/route_valid.cpp | 43 + .../tutorial/examples/tsp/src/route_valid.h | 19 + .../tutorial/examples/tsp/src/two_opt.cpp | 47 + .../tutorial/examples/tsp/src/two_opt.h | 36 + .../examples/tsp/src/two_opt_incr_eval.cpp | 28 + .../examples/tsp/src/two_opt_incr_eval.h | 27 + .../examples/tsp/src/two_opt_init.cpp | 18 + .../tutorial/examples/tsp/src/two_opt_init.h | 29 + .../examples/tsp/src/two_opt_next.cpp | 32 + .../tutorial/examples/tsp/src/two_opt_next.h | 28 + .../examples/tsp/src/two_opt_rand.cpp | 20 + .../tutorial/examples/tsp/src/two_opt_rand.h | 28 + .../examples/tsp/src/two_opt_tabu_list.cpp | 58 + .../examples/tsp/src/two_opt_tabu_list.h | 38 + 335 files changed, 50131 insertions(+) create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/AUTHORS create mode 100755 tags/paradiseo-1.0-04072007/paradiseo-mo/ChangeLog create mode 100755 tags/paradiseo-1.0-04072007/paradiseo-mo/Makefile.am create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/NEWS create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/README create mode 100755 tags/paradiseo-1.0-04072007/paradiseo-mo/autogen.sh create mode 100755 tags/paradiseo-1.0-04072007/paradiseo-mo/cleaner create mode 100755 tags/paradiseo-1.0-04072007/paradiseo-mo/configure.in create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/Doxyfile create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/Makefile.am create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/annotated.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/class_empty_selection.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classes.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_algo.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_aspir_crit-members.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_aspir_crit.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_aspir_crit.png create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_best_impr_select-members.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_best_impr_select.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_best_impr_select.png create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_cooling_schedule.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_cooling_schedule.png create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_exponential_cooling_schedule-members.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_exponential_cooling_schedule.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_exponential_cooling_schedule.png create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_first_impr_select-members.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_first_impr_select.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_first_impr_select.png create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_gen_sol_continue-members.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_gen_sol_continue.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_gen_sol_continue.png create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_h_c-members.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_h_c.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_h_c.png create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_h_c_move_loop_expl-members.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_h_c_move_loop_expl.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_h_c_move_loop_expl.png create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_impr_best_fit_aspir_crit-members.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_impr_best_fit_aspir_crit.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_impr_best_fit_aspir_crit.png create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_it_rand_next_move-members.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_it_rand_next_move.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_it_rand_next_move.png create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_l_s_check_point-members.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_l_s_check_point.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_linear_cooling_schedule-members.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_linear_cooling_schedule.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_linear_cooling_schedule.png create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_move-members.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_move.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_move_expl.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_move_expl.png create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_move_incr_eval.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_move_init.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_move_loop_expl.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_move_loop_expl.png create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_move_select-members.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_move_select.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_move_select.png create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_next_move.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_next_move.png create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_no_aspir_crit-members.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_no_aspir_crit.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_no_aspir_crit.png create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_rand_impr_select-members.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_rand_impr_select.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_rand_impr_select.png create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_rand_move.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_s_a-members.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_s_a.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_s_a.png create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_simple_move_tabu_list-members.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_simple_move_tabu_list.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_simple_move_tabu_list.png create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_simple_solution_tabu_list-members.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_simple_solution_tabu_list.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_simple_solution_tabu_list.png create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_sol_continue-members.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_sol_continue.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_sol_continue.png create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_t_s-members.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_t_s.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_t_s.png create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_t_s_move_loop_expl-members.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_t_s_move_loop_expl.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_t_s_move_loop_expl.png create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_tabu_list-members.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_tabu_list.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_tabu_list.png create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/doxygen.css create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/doxygen.png create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/files.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/ftv2blank.png create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/ftv2doc.png create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/ftv2folderclosed.png create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/ftv2folderopen.png create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/ftv2lastnode.png create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/ftv2link.png create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/ftv2mlastnode.png create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/ftv2mnode.png create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/ftv2node.png create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/ftv2plastnode.png create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/ftv2pnode.png create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/ftv2vertline.png create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/functions.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/functions_func.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/functions_type.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/functions_vars.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/hierarchy.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/index.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/index_8h-source.html create mode 100755 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/installdox create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/main.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_8h-source.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_algo_8h-source.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_aspir_crit_8h-source.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_best_impr_select_8h-source.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_cooling_schedule_8h-source.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_exponential_cooling_schedule_8h-source.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_first_impr_select_8h-source.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_gen_sol_continue_8h-source.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_h_c_8h-source.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_h_c_move_loop_expl_8h-source.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_impr_best_fit_aspir_crit_8h-source.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_it_rand_next_move_8h-source.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_l_s_check_point_8h-source.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_linear_cooling_schedule_8h-source.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_move_8h-source.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_move_expl_8h-source.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_move_incr_eval_8h-source.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_move_init_8h-source.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_move_loop_expl_8h-source.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_move_select_8h-source.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_next_move_8h-source.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_no_aspir_crit_8h-source.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_rand_impr_select_8h-source.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_rand_move_8h-source.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_s_a_8h-source.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_simple_move_tabu_list_8h-source.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_simple_solution_tabu_list_8h-source.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_sol_continue_8h-source.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_t_s_8h-source.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_t_s_move_loop_expl_8h-source.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_tabu_list_8h-source.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/search.idx create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/search.php create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/tab_b.gif create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/tab_l.gif create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/tab_r.gif create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/tabs.css create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/tree.html create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/FreeSans.ttf create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/Makefile create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/annotated.tex create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/class_empty_selection.tex create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_algo.tex create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_aspir_crit.eps create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_aspir_crit.tex create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_best_impr_select.eps create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_best_impr_select.tex create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_cooling_schedule.eps create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_cooling_schedule.tex create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_exponential_cooling_schedule.eps create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_exponential_cooling_schedule.tex create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_first_impr_select.eps create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_first_impr_select.tex create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_gen_sol_continue.eps create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_gen_sol_continue.tex create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_h_c.eps create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_h_c.tex create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_h_c_move_loop_expl.eps create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_h_c_move_loop_expl.tex create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_impr_best_fit_aspir_crit.eps create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_impr_best_fit_aspir_crit.tex create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_it_rand_next_move.eps create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_it_rand_next_move.tex create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_l_s_check_point.tex create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_linear_cooling_schedule.eps create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_linear_cooling_schedule.tex create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_move.tex create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_move_expl.eps create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_move_expl.tex create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_move_incr_eval.tex create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_move_init.tex create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_move_loop_expl.eps create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_move_loop_expl.tex create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_move_select.eps create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_move_select.tex create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_next_move.eps create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_next_move.tex create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_no_aspir_crit.eps create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_no_aspir_crit.tex create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_rand_impr_select.eps create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_rand_impr_select.tex create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_rand_move.tex create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_s_a.eps create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_s_a.tex create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_simple_move_tabu_list.eps create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_simple_move_tabu_list.tex create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_simple_solution_tabu_list.eps create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_simple_solution_tabu_list.tex create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_sol_continue.eps create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_sol_continue.tex create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_t_s.eps create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_t_s.tex create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_t_s_move_loop_expl.eps create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_t_s_move_loop_expl.tex create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_tabu_list.eps create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_tabu_list.tex create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/doxygen.sty create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/hierarchy.tex create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/main.tex create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/refman.tex create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/EmptySelection.3 create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moAlgo.3 create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moAspirCrit.3 create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moBestImprSelect.3 create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moCoolingSchedule.3 create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moExponentialCoolingSchedule.3 create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moFirstImprSelect.3 create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moGenSolContinue.3 create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moHC.3 create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moHCMoveLoopExpl.3 create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moImprBestFitAspirCrit.3 create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moItRandNextMove.3 create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moLSCheckPoint.3 create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moLinearCoolingSchedule.3 create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moMove.3 create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moMoveExpl.3 create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moMoveIncrEval.3 create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moMoveInit.3 create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moMoveLoopExpl.3 create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moMoveSelect.3 create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moNextMove.3 create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moNoAspirCrit.3 create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moRandImprSelect.3 create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moRandMove.3 create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moSA.3 create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moSimpleMoveTabuList.3 create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moSimpleSolutionTabuList.3 create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moSolContinue.3 create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moTS.3 create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moTSMoveLoopExpl.3 create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moTabuList.3 create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/docs/mo.doxytag create mode 100755 tags/paradiseo-1.0-04072007/paradiseo-mo/src/Makefile.am create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/src/index.h create mode 100755 tags/paradiseo-1.0-04072007/paradiseo-mo/src/mo create mode 100755 tags/paradiseo-1.0-04072007/paradiseo-mo/src/mo.h create mode 100755 tags/paradiseo-1.0-04072007/paradiseo-mo/src/moAlgo.h create mode 100755 tags/paradiseo-1.0-04072007/paradiseo-mo/src/moAspirCrit.h create mode 100755 tags/paradiseo-1.0-04072007/paradiseo-mo/src/moBestImprSelect.h create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/src/moCoolingSchedule.h create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/src/moExponentialCoolingSchedule.h create mode 100755 tags/paradiseo-1.0-04072007/paradiseo-mo/src/moFirstImprSelect.h create mode 100755 tags/paradiseo-1.0-04072007/paradiseo-mo/src/moGenSolContinue.h create mode 100755 tags/paradiseo-1.0-04072007/paradiseo-mo/src/moHC.h create mode 100755 tags/paradiseo-1.0-04072007/paradiseo-mo/src/moHCMoveLoopExpl.h create mode 100755 tags/paradiseo-1.0-04072007/paradiseo-mo/src/moImprBestFitAspirCrit.h create mode 100755 tags/paradiseo-1.0-04072007/paradiseo-mo/src/moItRandNextMove.h create mode 100755 tags/paradiseo-1.0-04072007/paradiseo-mo/src/moLSCheckPoint.h create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/src/moLinearCoolingSchedule.h create mode 100755 tags/paradiseo-1.0-04072007/paradiseo-mo/src/moMove.h create mode 100755 tags/paradiseo-1.0-04072007/paradiseo-mo/src/moMoveExpl.h create mode 100755 tags/paradiseo-1.0-04072007/paradiseo-mo/src/moMoveIncrEval.h create mode 100755 tags/paradiseo-1.0-04072007/paradiseo-mo/src/moMoveInit.h create mode 100755 tags/paradiseo-1.0-04072007/paradiseo-mo/src/moMoveLoopExpl.h create mode 100755 tags/paradiseo-1.0-04072007/paradiseo-mo/src/moMoveSelect.h create mode 100755 tags/paradiseo-1.0-04072007/paradiseo-mo/src/moNextMove.h create mode 100755 tags/paradiseo-1.0-04072007/paradiseo-mo/src/moNoAspirCrit.h create mode 100755 tags/paradiseo-1.0-04072007/paradiseo-mo/src/moRandImprSelect.h create mode 100755 tags/paradiseo-1.0-04072007/paradiseo-mo/src/moRandMove.h create mode 100755 tags/paradiseo-1.0-04072007/paradiseo-mo/src/moSA.h create mode 100755 tags/paradiseo-1.0-04072007/paradiseo-mo/src/moSimpleMoveTabuList.h create mode 100755 tags/paradiseo-1.0-04072007/paradiseo-mo/src/moSimpleSolutionTabuList.h create mode 100755 tags/paradiseo-1.0-04072007/paradiseo-mo/src/moSolContinue.h create mode 100755 tags/paradiseo-1.0-04072007/paradiseo-mo/src/moTS.h create mode 100755 tags/paradiseo-1.0-04072007/paradiseo-mo/src/moTSMoveLoopExpl.h create mode 100755 tags/paradiseo-1.0-04072007/paradiseo-mo/src/moTabuList.h create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/Lesson1/Makefile.am create mode 100755 tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/Lesson1/hill_climbing create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/Lesson1/hill_climbing.cpp create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/Lesson2/Makefile.am create mode 100755 tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/Lesson2/tabu_search create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/Lesson2/tabu_search.cpp create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/Lesson3/Makefile.am create mode 100755 tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/Lesson3/simulated_annealing create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/Lesson3/simulated_annealing.cpp create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/Makefile.am create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/Makefile.am create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/Makefile.am create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/benchs/ali535.tsp create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/benchs/eil101.tsp create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/benchs/pr2392.tsp create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/benchs/readme create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/benchs/rl5915.tsp create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/benchs/usa13509.tsp create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/Makefile.am create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/city_swap.cpp create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/city_swap.h create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/edge_xover.cpp create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/edge_xover.h create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/graph.cpp create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/graph.h create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/libtsp.a create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/mix.h create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/order_xover.cpp create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/order_xover.h create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/part_route_eval.cpp create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/part_route_eval.h create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/part_two_opt_init.cpp create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/part_two_opt_init.h create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/part_two_opt_next.cpp create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/part_two_opt_next.h create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/partial_mapped_xover.cpp create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/partial_mapped_xover.h create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/route.h create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/route_eval.cpp create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/route_eval.h create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/route_init.cpp create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/route_init.h create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/route_valid.cpp create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/route_valid.h create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/two_opt.cpp create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/two_opt.h create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/two_opt_incr_eval.cpp create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/two_opt_incr_eval.h create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/two_opt_init.cpp create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/two_opt_init.h create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/two_opt_next.cpp create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/two_opt_next.h create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/two_opt_rand.cpp create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/two_opt_rand.h create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/two_opt_tabu_list.cpp create mode 100644 tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/two_opt_tabu_list.h diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/AUTHORS b/tags/paradiseo-1.0-04072007/paradiseo-mo/AUTHORS new file mode 100644 index 000000000..6bb4943d4 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/AUTHORS @@ -0,0 +1 @@ +Documentation : boisson@lifl.fr diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/ChangeLog b/tags/paradiseo-1.0-04072007/paradiseo-mo/ChangeLog new file mode 100755 index 000000000..e69de29bb diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/Makefile.am b/tags/paradiseo-1.0-04072007/paradiseo-mo/Makefile.am new file mode 100755 index 000000000..f691c2558 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/Makefile.am @@ -0,0 +1,28 @@ +SUBDIRS = docs src tutorial + +CXX=g++ + +AM_CXXFLAGS =\ + -Wall\ + -Werror\ + -Wno-deprecated\ + -ansi\ + -pedantic + +clean_all: clean_aux clean_doc + -@make clean + -@(rm -rf acconfig.h acinclude.m4 aclocal.m4 autom4te.cache copying install news readme stamp* texput.log authors todo;\ + rm -f configure config.* CO* dep* INST* install-sh miss* mkins* Makefile Makefile.in;\ + cd docs; rm -rf Makefile Makefile.in; cd ../src ; rm -rf Makefile Makefile.in; cd ../tutorial; rm -rf Makefile Makefile.in;\ + cd examples; rm -f Makefile Makefile.in; cd tsp ; rm -f Makefile Makefile.in; cd src ; rm -rf .deps/ Makefile Makefile.in;\ + cd ../../../Lesson1 ; rm -rf .deps/ Makefile Makefile.in; cd ../Lesson2 ; rm -rf .deps/ Makefile Makefile.in ; cd ../Lesson3 ;\ + rm -rf .deps/ Makefile Makefile.in) + +clean_aux: + -@find . \( -name "*~" -o -name "*.old" -o -name "#*" -o -name "*.bak" \) -print -exec rm -rf \{\} \; + +doc: + -@(cd docs; make doc) + +clean_doc: + -@(cd docs; make clean-local) diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/NEWS b/tags/paradiseo-1.0-04072007/paradiseo-mo/NEWS new file mode 100644 index 000000000..e69de29bb diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/README b/tags/paradiseo-1.0-04072007/paradiseo-mo/README new file mode 100644 index 000000000..fff2b2694 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/README @@ -0,0 +1,69 @@ + PARADISEO-MO README FILE +======================================================================= + +======================================================================= + +Welcome to PARADISEO-MO (Moving Objects), one of the extension of Evolving Objects library. + +================================================================== + BUILDING PARADISEO-MO +================================================================== +The basic installation procedure goes the following: + +Go to your build-directory and run + ./autogen --with-EOdir=$(EO_SRC) + make + make doc + +where $(SRCDIR) is the top-level source directory of Paradiseo-eo (Evoling Object), i.e. where +the sources where unpacked. + +To clean everything, in the simply run + make clean_all + +=================================================================== + DIRECTORY STRUCTURE +=================================================================== +After unpacking the archive file, you should end up with the following +structure: + +.../ The MAIN PARADISEO-MO directory, created when unpacking. + | + +-- src SOURCE directory Contains most PARADISEO-MO .h files. + | + | + +-- doc DOCUMENTATION directory (generated by Doxygen). + | | + | +- html HTML files - start at index.html. + | | + | +- latex latex files - use to generate Postcript doc. + | | + | +- man Unix man format documentation. + | + | + +-- tutorial TUTORIAL with lessons + | + +-examples APPLICATIONS - one directory per separate application. + | | + | +- tsp traveling salesman problem example. + | | + | +-src sources files for the lesson examples using the tsp. + | | + | +-benchs TSP Instance files. + | + +-Lesson1 How make a Hill Climbing on the TSP example. + | | + | +-benchs TSP Instance files. + | + +-Lesson2 How make a Tabu Search on the TSP example. + | | + | +-benchs TSP Instance files. + | + +-Lesson3 How make a Simulated Annealing on the TSP example. + | + +-benchs TSP Instance files. +=================================================================== + NOTES +=================================================================== + +Mailing list : paradiseo-help@lists.gforge.inria.fr diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/autogen.sh b/tags/paradiseo-1.0-04072007/paradiseo-mo/autogen.sh new file mode 100755 index 000000000..0a4e95695 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/autogen.sh @@ -0,0 +1,154 @@ +#!/bin/sh +# Run this to generate all the initial makefiles, etc. + +srcdir=`dirname $0` +PKG_NAME="the package." + +DIE=0 + +(autoconf --version) < /dev/null > /dev/null 2>&1 || { + echo + echo "**Error**: You must have \`autoconf' installed to." + echo "Download the appropriate package for your distribution," + echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/" + DIE=1 +} + +(grep "^AM_PROG_LIBTOOL" $srcdir/configure.in >/dev/null) && { + (libtool --version) < /dev/null > /dev/null 2>&1 || { + echo + echo "**Error**: You must have \`libtool' installed." + echo "Get ftp://ftp.gnu.org/pub/gnu/libtool-1.2d.tar.gz" + echo "(or a newer version if it is available)" + DIE=1 + } +} + +grep "^AM_GNU_GETTEXT" $srcdir/configure.in >/dev/null && { + grep "sed.*POTFILES" $srcdir/configure.in >/dev/null || \ + (gettext --version) < /dev/null > /dev/null 2>&1 || { + echo + echo "**Error**: You must have \`gettext' installed." + echo "Get ftp://alpha.gnu.org/gnu/gettext-0.10.35.tar.gz" + echo "(or a newer version if it is available)" + DIE=1 + } +} + +grep "^AM_GNOME_GETTEXT" $srcdir/configure.in >/dev/null && { + grep "sed.*POTFILES" $srcdir/configure.in >/dev/null || \ + (gettext --version) < /dev/null > /dev/null 2>&1 || { + echo + echo "**Error**: You must have \`gettext' installed." + echo "Get ftp://alpha.gnu.org/gnu/gettext-0.10.35.tar.gz" + echo "(or a newer version if it is available)" + DIE=1 + } +} + +(automake --version) < /dev/null > /dev/null 2>&1 || { + echo + echo "**Error**: You must have \`automake' installed." + echo "Get ftp://ftp.gnu.org/pub/gnu/automake-1.3.tar.gz" + echo "(or a newer version if it is available)" + DIE=1 + NO_AUTOMAKE=yes +} + +(doxygen --version) < /dev/null > /dev/null 2>&1 || { + echo + echo "**WARNING**: You need to have \`doxygen' to generate the documentation." + echo "Download the appropriate package for your distribution," + echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/" +} + +# if no automake, don't bother testing for aclocal +test -n "$NO_AUTOMAKE" || (aclocal --version) < /dev/null > /dev/null 2>&1 || { + echo + echo "**Error**: Missing \`aclocal'. The version of \`automake'" + echo "installed doesn't appear recent enough." + echo "Get ftp://ftp.gnu.org/pub/gnu/automake-1.3.tar.gz" + echo "(or a newer version if it is available)" + DIE=1 +} + +if test "$DIE" -eq 1; then + exit 1 +fi + +if test -z "$*"; then + echo "**Warning**: I am going to run \`configure' with no arguments." + echo "If you wish to pass any to it, please specify them on the" + echo \`$0\'" command line." + echo +fi + +case $CC in +xlc ) + am_opt=--include-deps;; +esac + +for coin in `find $srcdir -name configure.in -print` +do + dr=`dirname $coin` + if test -f $dr/NO-AUTO-GEN; then + echo skipping $dr -- flagged as no auto-gen + else + echo processing $dr + macrodirs=`sed -n -e 's,AM_ACLOCAL_INCLUDE(\(.*\)),\1,gp' < $coin` + ( cd $dr + aclocalinclude="$ACLOCAL_FLAGS" + for k in $macrodirs; do + if test -d $k; then + aclocalinclude="$aclocalinclude -I $k" + ##else + ## echo "**Warning**: No such directory \`$k'. Ignored." + fi + done + if grep "^AM_GNU_GETTEXT" configure.in >/dev/null; then + if grep "sed.*POTFILES" configure.in >/dev/null; then + : do nothing -- we still have an old unmodified configure.in + else + echo "Creating $dr/aclocal.m4 ..." + test -r $dr/aclocal.m4 || touch $dr/aclocal.m4 + echo "Running gettextize... Ignore non-fatal messages." + echo "no" | gettextize --force --copy + echo "Making $dr/aclocal.m4 writable ..." + test -r $dr/aclocal.m4 && chmod u+w $dr/aclocal.m4 + fi + fi + if grep "^AM_GNOME_GETTEXT" configure.in >/dev/null; then + echo "Creating $dr/aclocal.m4 ..." + test -r $dr/aclocal.m4 || touch $dr/aclocal.m4 + echo "Running gettextize... Ignore non-fatal messages." + echo "no" | gettextize --force --copy + echo "Making $dr/aclocal.m4 writable ..." + test -r $dr/aclocal.m4 && chmod u+w $dr/aclocal.m4 + fi + if grep "^AM_PROG_LIBTOOL" configure.in >/dev/null; then + echo "Running libtoolize..." + libtoolize --force --copy + fi + echo "Running aclocal $aclocalinclude ..." + aclocal $aclocalinclude + if grep "^AM_CONFIG_HEADER" configure.in >/dev/null; then + echo "Running autoheader..." + autoheader + fi + echo "Running automake --gnu $am_opt ..." + automake --add-missing --gnu $am_opt + echo "Running autoconf ..." + autoconf + ) + fi +done + +#conf_flags="--enable-maintainer-mode --enable-compile-warnings" #--enable-iso-c + +if test x$NOCONFIGURE = x; then + echo Running $srcdir/configure $conf_flags "$@" ... + $srcdir/configure $conf_flags "$@" \ + && echo Now type \`make\' to compile $PKG_NAME +else + echo Skipping configure process. +fi diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/cleaner b/tags/paradiseo-1.0-04072007/paradiseo-mo/cleaner new file mode 100755 index 000000000..1e5c8c5ba --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/cleaner @@ -0,0 +1,7 @@ +(rm -rf acconfig.h acinclude.m4 aclocal.m4 autom4te.cache copying install news readme stamp* texput.log authors todo;\ +rm -f configure config.* CO* dep* INST* install-sh miss* mkins* Makefile Makefile.in;\ +cd docs; rm -rf Makefile Makefile.in; cd ../src ; rm -rf Makefile Makefile.in; cd ../tutorial; rm -rf Makefile Makefile.in;\ +cd examples; rm -f Makefile Makefile.in; cd tsp ; rm -f Makefile Makefile.in; cd src ; rm -rf .deps/ Makefile Makefile.in;\ +cd ../../../Lesson1 ; rm -rf .deps/ Makefile Makefile.in; cd ../Lesson2 ; rm -rf .deps/ Makefile Makefile.in ; cd ../Lesson3 ;\ +rm -rf .deps/ Makefile Makefile.in) +find . \( -name "*~" -o -name "*.old" -o -name "#*" -o -name "*.bak" -o -name "*.o" \) -print -exec rm -rf \{\} \; diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/configure.in b/tags/paradiseo-1.0-04072007/paradiseo-mo/configure.in new file mode 100755 index 000000000..7f365a782 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/configure.in @@ -0,0 +1,55 @@ +AC_INIT(configure.in) +AM_INIT_AUTOMAKE(paradiseo-mo, 0.1) + +dnl Autoconf 2.6 or higher compatibility +AC_DEFUN([AC_DATAROOTDIR_CHECKED]) + +AC_ISC_POSIX +AC_PROG_CXX +AM_PROG_CC_STDC +AC_HEADER_STDC +#AC_CXX_HAVE_SSTREAM +AC_PROG_RANLIB + +AC_PROG_INSTALL +AC_PROG_LN_S +AC_PROG_MAKE_SET + +AC_C_CONST +AC_C_INLINE +AC_TYPE_SIZE_T + +AC_SUBST(EO_DIR) + +dnl EO +AC_ARG_WITH(EOdir, + --with-EOdir : Giving the path of the EO tree., + dnl Well done :-) + EO_DIR="$withval" + if test ! -d $EO_DIR + then + echo "" + echo "# --with-EOdir Invalid directory $withval" + exit 1 + fi, + dnl Bouhhhh !!!! + echo "" + echo "# You forgot to give the path of the EO tree !" + echo "# Please write something like ... './configure --with-EOdir=\$HOME/eo'" + exit 1 + ) + +AC_OUTPUT([ +Makefile +src/Makefile +docs/Makefile +tutorial/Makefile +tutorial/examples/Makefile +tutorial/examples/tsp/Makefile +tutorial/examples/tsp/src/Makefile +tutorial/Lesson1/Makefile +tutorial/Lesson2/Makefile +tutorial/Lesson3/Makefile +]) + +echo "Type 'make doc' for building documentation" diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/Doxyfile b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/Doxyfile new file mode 100644 index 000000000..9c63e3962 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/Doxyfile @@ -0,0 +1,1268 @@ +# Doxyfile 1.5.2 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project +# +# All text after a hash (#) is considered a comment and will be ignored +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" ") + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file that +# follow. The default is UTF-8 which is also the encoding used for all text before +# the first occurrence of this tag. Doxygen uses libiconv (or the iconv built into +# libc) for the transcoding. See http://www.gnu.org/software/libiconv for the list of +# possible encodings. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the project. + +PROJECT_NAME = PARADISEO-MO + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = 0.1 + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, +# Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian, +# Italian, Japanese, Japanese-en (Japanese with English messages), Korean, +# Korean-en, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian, +# Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = NO + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful is your file systems +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like the Qt-style comments (thus requiring an +# explicit @brief command for a brief description. + +JAVADOC_AUTOBRIEF = YES + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the DETAILS_AT_TOP tag is set to YES then Doxygen +# will output the detailed description near the top, like JavaDoc. +# If set to NO, the detailed description appears after the member +# documentation. + +DETAILS_AT_TOP = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 8 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for Java. +# For instance, namespaces will be presented as packages, qualified scopes +# will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to +# include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. + +CPP_CLI_SUPPORT = NO + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = NO + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = YES + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = YES + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = YES + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = YES + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = NO + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = NO + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or define consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and defines in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +# If the sources in your project are distributed over multiple directories +# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy +# in the documentation. The default is NO. + +SHOW_DIRECTORIES = NO + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from the +# version control system). Doxygen will invoke the program by executing (via +# popen()) the command , where is the value of +# the FILE_VERSION_FILTER tag, and is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = YES + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be abled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = NO + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = ../src/ + +# This tag can be used to specify the character encoding of the source files that +# doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default +# input encoding. Doxygen uses libiconv (or the iconv built into libc) for the transcoding. +# See http://www.gnu.org/software/libiconv for the list of possible encodings. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx +# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py + +FILE_PATTERNS = *.cpp \ + *.h + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or +# directories that are symbolic links (a Unix filesystem feature) are excluded +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the output. +# The symbol name can be a fully qualified name, a word, or if the wildcard * is used, +# a substring. Examples: ANamespace, AClass, AClass::ANamespace, ANamespace::*Test + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = * + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER +# is applied to all files. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = YES + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C and C++ comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES (the default) +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = YES + +# If the REFERENCES_RELATION tag is set to YES (the default) +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = YES + +# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) +# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from +# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will +# link to the source code. Otherwise they will link to the documentstion. + +REFERENCES_LINK_SOURCE = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = YES + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 3 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = mo + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# stylesheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + +HTML_ALIGN_MEMBERS = YES + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + +DISABLE_INDEX = NO + +# This tag can be used to set the number of enum values (range [1..20]) +# that doxygen will group on one line in the generated HTML documentation. + +ENUM_VALUES_PER_LINE = 4 + +# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be +# generated containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, +# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are +# probably better off using the HTML help feature. + +GENERATE_TREEVIEW = YES + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = YES + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, a4wide, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4wide + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = NO + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = NO + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = YES + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. This is useful +# if you want to understand what is going on. On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = NO + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# in the INCLUDE_PATH (see below) will be search if a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all function-like macros that are alone +# on a line, have an all uppercase name, and do not end with a semicolon. Such +# function macros are typically used for boiler-plate code, and will confuse +# the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. +# Optionally an initial location of the external documentation +# can be added for each tagfile. The format of a tag file without +# this location is as follows: +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths or +# URLs. If a location is present for each tag, the installdox tool +# does not have to be run to correct the links. +# Note that each tag file must have a unique name +# (where the name does NOT include the path) +# If a tag file is not located in the directory in which doxygen +# is run, you must also specify the path to the tagfile here. + +TAGFILES = ../../paradiseo-eo/doc/eo.doxytag=../../../paradiseo-eo/doc/html + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = mo.doxytag + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option is superseded by the HAVE_DOT option below. This is only a +# fallback. It is recommended to install and use dot, since it yields more +# powerful graphs. + +CLASS_DIAGRAMS = YES + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see http://www.mcternan.me.uk/mscgen/) to +# produce the chart and insert it in the documentation. The MSCGEN_PATH tag allows you to +# specify the directory where the mscgen tool resides. If left empty the tool is assumed to +# be found in the default search path. + +MSCGEN_PATH = + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = NO + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will +# generate a call dependency graph for every global function or class method. +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable call graphs for selected +# functions only using the \callgraph command. + +CALL_GRAPH = NO + +# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then doxygen will +# generate a caller dependency graph for every global function or class method. +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable caller graphs for selected +# functions only using the \callergraph command. + +CALLER_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are png, jpg, or gif +# If left blank png will be used. + +DOT_IMAGE_FORMAT = png + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The MAX_DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of +# nodes that will be shown in the graph. If the number of nodes in a graph +# becomes larger than this value, doxygen will truncate the graph, which is +# visualized by representing a node as a red box. Note that doxygen will always +# show the root nodes and its direct children regardless of this setting. + +DOT_GRAPH_MAX_NODES = 50 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, which results in a white background. +# Warning: Depending on the platform used, enabling this option may lead to +# badly anti-aliased labels on the edges of a graph (i.e. they become hard to +# read). + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = NO + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- + +# The SEARCHENGINE tag specifies whether or not a search engine should be +# used. If set to NO the values of all tags below this one will be ignored. + +SEARCHENGINE = YES diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/Makefile.am b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/Makefile.am new file mode 100644 index 000000000..bad00ad7c --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/Makefile.am @@ -0,0 +1,5 @@ +doc: + -@doxygen Doxyfile + +clean-local: + rm -rf html latex man diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/annotated.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/annotated.html new file mode 100644 index 000000000..2f2d6a87a --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/annotated.html @@ -0,0 +1,70 @@ + + +PARADISEO-MO: Class List + + + + +
+ +
+ +

PARADISEO-MO Class List

Here are the classes, structs, unions and interfaces with brief descriptions: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EmptySelectionSpecial class that describes the case of no selection
moAlgo< EOT >Description of an algorithm of the paradiseo-mo library
moAspirCrit< M >Description of the conditions in which a tabu move could be accepted
moBestImprSelect< M >One of the possible moMoveSelect
moCoolingScheduleThis class gives the description of a cooling schedule
moExponentialCoolingScheduleOne of the possible moCoolingSchedule
moFirstImprSelect< M >One possible moMoveSelect
moGenSolContinue< EOT >One possible stop criterion for a solution-based heuristic
moHC< M >Hill Climbing (HC)
moHCMoveLoopExpl< M >Iterative explorer used by a moHC
moImprBestFitAspirCrit< M >One of the possible moAspirCrit
moItRandNextMove< M >One of the possible moNextMove
moLinearCoolingScheduleOne of the possible moCoolingSchedule
moLSCheckPoint< M >Class which allows a checkpointing system
moMove< EOT >Definition of a move
moMoveExpl< M >Description of a move (moMove) explorer
moMoveIncrEval< M >(generally) Efficient evaluation function based a move and a solution
moMoveInit< M >Move (moMove) initializer
moMoveLoopExpl< M >Class which describes an iterative explorer
moMoveSelect< M >Class that describes a move selector (moMove)
moNextMove< M >Class which allows to generate a new move (moMove)
moNoAspirCrit< M >One of the possible aspiration criterion (moAspirCrit)
moRandImprSelect< M >One of the possible moMove selector (moMoveSelect)
moRandMove< M >Random move generator
moSA< M >Simulated Annealing (SA)
moSimpleMoveTabuList< M >Class describing a move tabu list with a limited memory
moSimpleSolutionTabuList< M >Class describing a solution tabu list with limited length
moSolContinue< EOT >Class that describes a stop criterion for a solution-based heuristic
moTabuList< M >Class describing a tabu list that a moTS uses
moTS< M >Tabu Search (TS)
moTSMoveLoopExpl< M >Explorer for a Tabu Search algorithm
+
Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/class_empty_selection.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/class_empty_selection.html new file mode 100644 index 000000000..88c52083e --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/class_empty_selection.html @@ -0,0 +1,54 @@ + + +PARADISEO-MO: EmptySelection Class Reference + + + + +
+ +
+ +

EmptySelection Class Reference

Special class that describes the case of no selection. +More... +

+#include <moMoveSelect.h> +

+ + +
+


Detailed Description

+Special class that describes the case of no selection. +

+This class is used as an exception that can be thrown if a solution selector has completly failed. +

+ +

+Definition at line 21 of file moMoveSelect.h.


The documentation for this class was generated from the following file: +
Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classes.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classes.html new file mode 100644 index 000000000..724c87249 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classes.html @@ -0,0 +1,54 @@ + + +PARADISEO-MO: Alphabetical List + + + + +
+ +
+ +

PARADISEO-MO Class Index

A | B | C | E | F | G | H | I | L | M | N | R | S | T

+ +
  A  
+
moHC   
  N  
+
moAlgo   moHCMoveLoopExpl   moNextMove   
moAspirCrit   
  I  
+
moNoAspirCrit   
  B  
+
moImprBestFitAspirCrit   
  R  
+
moBestImprSelect   moItRandNextMove   moRandImprSelect   
  C  
+
  L  
+
moRandMove   
moCoolingSchedule   moLinearCoolingSchedule   
  S  
+
  E  
+
moLSCheckPoint   moSA   
EmptySelection   
  M  
+
moSimpleMoveTabuList   
moExponentialCoolingSchedule   moMove   moSimpleSolutionTabuList   
  F  
+
moMoveExpl   moSolContinue   
moFirstImprSelect   moMoveIncrEval   
  T  
+
  G  
+
moMoveInit   moTabuList   
moGenSolContinue   moMoveLoopExpl   moTS   
  H  
+
moMoveSelect   moTSMoveLoopExpl   

A | B | C | E | F | G | H | I | L | M | N | R | S | T

+


Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_algo.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_algo.html new file mode 100644 index 000000000..01ab016fb --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_algo.html @@ -0,0 +1,65 @@ + + +PARADISEO-MO: moAlgo< EOT > Class Template Reference + + + + +
+ +
+ +

moAlgo< EOT > Class Template Reference

Description of an algorithm of the paradiseo-mo library. +More... +

+#include <moAlgo.h> +

+

Inheritance diagram for moAlgo< EOT >: +

+ +eoMonOp< EOT > +eoOp< EOType > +eoUF< EOT &, bool > +eoFunctorBase + +List of all members. + +
+

Detailed Description

+

template<class EOT>
+ class moAlgo< EOT >

+ +Description of an algorithm of the paradiseo-mo library. +

+moHC, moTS and moSA are 3 examples of algorithm of the paradiseo-mo library. +

+ +

+Definition at line 21 of file moAlgo.h.


The documentation for this class was generated from the following file: +
Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_aspir_crit-members.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_aspir_crit-members.html new file mode 100644 index 000000000..15b401bcd --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_aspir_crit-members.html @@ -0,0 +1,43 @@ + + +PARADISEO-MO: Member List + + + + +
+ +
+ +

moAspirCrit< M > Member List

This is the complete list of members for moAspirCrit< M >, including all inherited members.

+ + + + + +
functor_category()eoBF< const M &, const M::EOType::Fitness &, bool > [static]
init()=0moAspirCrit< M > [pure virtual]
operator()(const M &, const M::EOType::Fitness &)=0eoBF< const M &, const M::EOType::Fitness &, bool > [pure virtual]
~eoBF()eoBF< const M &, const M::EOType::Fitness &, bool > [virtual]
~eoFunctorBase()eoFunctorBase [virtual]


Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_aspir_crit.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_aspir_crit.html new file mode 100644 index 000000000..7c070161c --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_aspir_crit.html @@ -0,0 +1,95 @@ + + +PARADISEO-MO: moAspirCrit< M > Class Template Reference + + + + +
+ +
+ +

moAspirCrit< M > Class Template Reference

Description of the conditions in which a tabu move could be accepted. +More... +

+#include <moAspirCrit.h> +

+

Inheritance diagram for moAspirCrit< M >: +

+ +eoBF< const M &, const M::EOType::Fitness &, bool > +eoFunctorBase +moImprBestFitAspirCrit< M > +moNoAspirCrit< M > + +List of all members. + + + + + +

Public Member Functions

virtual void init ()=0
 Procedure which initialises all that needs a aspiration criterion.
+

Detailed Description

+

template<class M>
+ class moAspirCrit< M >

+ +Description of the conditions in which a tabu move could be accepted. +

+It is only a description... An object that herits from this class is needed to be used in a moTS. See moNoAspriCrit for example. +

+ +

+Definition at line 22 of file moAspirCrit.h.


Member Function Documentation

+ +
+
+
+template<class M>
+ + + + + + + + +
virtual void moAspirCrit< M >::init (  )  [pure virtual]
+
+
+ +

+Procedure which initialises all that needs a aspiration criterion. +

+It can be possible that this procedure do nothing... +

+Implemented in moImprBestFitAspirCrit< M >, and moNoAspirCrit< M >. +

+

+


The documentation for this class was generated from the following file: +
Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_aspir_crit.png b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_aspir_crit.png new file mode 100644 index 0000000000000000000000000000000000000000..b57b8778692c145f9b6876cca861b2d4e4130e15 GIT binary patch literal 1805 zcmbtVdpML?7@x|+Ql`SDsVK{=ZRx8fLYQ)ou~WuvG1F9bYSD->j3HFS64q|`lv`y- z=`qw;V=jzow@mqJLhcRHVAdcEq1(((wfE=QXaCqg&N;vHKIgpWch38J-;;R|>!GW& zK?eqd>3Z&W#lc|93)NVtu|nN@=c8Y#hxG@&{oGV4l^Uv4!t(ONd1~~&35CMMpHw62 z=`tz~>kHdA)_V*F)2#4xb@GcZnJV>(duF@FOvd4U;cpwv;4B{kiAEh5q5_zlHRzgQZnw2q$?_}*+bYRCwgs@B!3op#)Q=keZA4)B;+QL@@H-$l?g=3?pYJTTB> z9z6ZIMQFX9;5@{3aGGXW$ypjlSL)-r+3ct@+c7_E#DF-e*ut_qzfB`hLg#!k(ZdN@hn3bPjVKRS2;k*Yg z=jwh_3Mni}3ectss%?QHi!3Hqc^d6_;?yvUDky6#61mA|I26Qd`_{y4Ft!zbCFKCl zoMta><7OWjoYC%i#qk68)aNgP%so(9z0hsU`lBXg*2J)E)`JsjQq5d>Bza+QVStbv zCu!i!=Dw|a8>x5>Om9iP5~lyRpteNQ=e5`yZG+pROO|N5Pt^*jsY*=+jzoQ7w27*n z7PIk3l9!cZZwc7o1m7sIuNOIzT82L%D9YN$lL)EW;dLdImX_sT7}Dss&^7RD z_gB&q8kGm0Dx@9UH&Iu75xdBZKT@gz+C7Kwpgi;9amo~`bD%L`Ge|cEFBnbEhYsWOntr0u^Q5XL9;$k^UCA87>INvY)%-YIX zycYGj>BuIN3e^9GinNj$)m;T~$rOGeCSO$>n^t1_)ejhh_s2Kh!i=+BuJ;@rgnM3% z+_vz5$wTnj%C);mk_ieHN$^G2E!|?bbY5#NE(I8lH0}J_R%d_jDNWPjoLX8?Obg>i zza_cBz&NGQ9-q}6kZgjyVWZuD^~ljSjoSuUgOQm>;h(ZI2K>X9HFq+QIU6cR{J{2~ zWD~${;+;=sVgVPwVmm^9ULqBXm^|mtUnr=yc)fMn05VPpoPNX3fCT1qaPU$mF^NC# zJMYjgGFlx@r`k-&XoB8tvISmt6^9y=&@qc^{VeQB7wOXD34$Y^ybh$@lMJ)Wru0It zuCwa8Tv*9Fb#M#|;x?sQ^^k6&Q$|@Mb8DUZEcJ&wL`Z1EXg}#XAGA}LT!ewRlP3&u zdtN`}RRhEja3@>oo59!^8$=Lr02di$=OM4Yx+OLp&zof}B|VJq!zT=WdFfQ+JY7O~ z6(96QaO@ovP>mPS(xiS_G(V4SytoJ^T>HMZOYVrEaXaY_jOQ$|RH?+-$Q=$vyx3{1 z + +PARADISEO-MO: Member List + + + + +
+ +
+ +

moBestImprSelect< M > Member List

This is the complete list of members for moBestImprSelect< M >, including all inherited members.

+ + + + + + + + + + +
best_fitmoBestImprSelect< M > [private]
best_movemoBestImprSelect< M > [private]
first_timemoBestImprSelect< M > [private]
Fitness typedefmoBestImprSelect< M >
functor_category()eoBF< M &, M::EOType::Fitness &, void > [static]
init(const Fitness &__fit)moBestImprSelect< M > [inline, virtual]
operator()(M &__move, Fitness &__fit)moBestImprSelect< M > [inline, virtual]
update(const M &__move, const Fitness &__fit)moBestImprSelect< M > [inline, virtual]
~eoBF()eoBF< M &, M::EOType::Fitness &, void > [virtual]
~eoFunctorBase()eoFunctorBase [virtual]


Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_best_impr_select.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_best_impr_select.html new file mode 100644 index 000000000..0c780f98a --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_best_impr_select.html @@ -0,0 +1,191 @@ + + +PARADISEO-MO: moBestImprSelect< M > Class Template Reference + + + + +
+ +
+ +

moBestImprSelect< M > Class Template Reference

One of the possible moMoveSelect. +More... +

+#include <moBestImprSelect.h> +

+

Inheritance diagram for moBestImprSelect< M >: +

+ +moMoveSelect< M > +eoBF< M &, M::EOType::Fitness &, void > +eoFunctorBase + +List of all members. + + + + + + + + + + + + + + + + + + + + + + + + + +

Public Types

+typedef M::EOType::Fitness Fitness
 Alias for the fitness.

Public Member Functions

+void init (const Fitness &__fit)
 Procedure which initialise the exploration.
bool update (const M &__move, const Fitness &__fit)
 Function that indicates if the current move has not improved the fitness.
void operator() (M &__move, Fitness &__fit) throw (EmptySelection)
 Procedure which saved the best move and fitness.

Private Attributes

+bool first_time
 Allowing to know if at least one move has been generated.
+M best_move
 The best move.
+Fitness best_fit
 The best fitness.
+

Detailed Description

+

template<class M>
+ class moBestImprSelect< M >

+ +One of the possible moMoveSelect. +

+All neighbors are considered, and the movement which enables the best improvement is selected. +

+ +

+Definition at line 22 of file moBestImprSelect.h.


Member Function Documentation

+ +
+
+
+template<class M>
+ + + + + + + + + + + + + + + + + + +
bool moBestImprSelect< M >::update (const M &  __move,
const Fitness __fit 
) [inline, virtual]
+
+
+ +

+Function that indicates if the current move has not improved the fitness. +

+If the given fitness enables an improvment, the move (moMove) and the fitness linked to this move are saved.

+

Parameters:
+ + + +
__move a move.
__fit a fitness linked to the move.
+
+
Returns:
TRUE if the move does not improve the fitness.
+ +

+Implements moMoveSelect< M >. +

+Definition at line 47 of file moBestImprSelect.h. +

+References moBestImprSelect< M >::best_fit, moBestImprSelect< M >::best_move, and moBestImprSelect< M >::first_time. +

+

+ +

+
+
+template<class M>
+ + + + + + + + + + + + + + + + + + +
void moBestImprSelect< M >::operator() (M &  __move,
Fitness __fit 
) throw (EmptySelection) [inline, virtual]
+
+
+ +

+Procedure which saved the best move and fitness. +

+

Parameters:
+ + + +
__move the current move (result of the procedure).
__fit the current fitness (result of the procedure).
+
+
Exceptions:
+ + +
EmptySelection if no move has improved the fitness.
+
+ +

+Implements eoBF< M &, M::EOType::Fitness &, void >. +

+Definition at line 68 of file moBestImprSelect.h. +

+References moBestImprSelect< M >::best_fit, moBestImprSelect< M >::best_move, and moBestImprSelect< M >::first_time. +

+

+


The documentation for this class was generated from the following file: +
Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_best_impr_select.png b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_best_impr_select.png new file mode 100644 index 0000000000000000000000000000000000000000..e803a39a43bee14670efe218d4fc1ad1dcdaf15e GIT binary patch literal 1074 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K54zMr-Ny)Vxn%%7hy z0muU50|yRNANv0U$Ym@E@(X5gcy=R=fr0sir;B4q#hkaZ1E*pQZ}DCqV~hWq?(;8{P}zz9zWjATvPMs=QD=8-2xzKWN?nT zWWVFZzhb-$3>%nMTv3YrC;Wf*QqviEGk%%f>X9;I5nlO~`RxQX zdmGoH{q-z260#V4-dM04IG3=?SIjeqf1`BE-#eSxuSbOBuVmQtOE}iFufy(n633YX zpBNnUR9k0-NX>FQvq`9Wic~{P(c+yf54aM(P1G}HNtp9 zB(vT@FP=n+SCI!~obNHLF;#f#b8k)K3|5z;GN(Rv7<+z_y52a4eY)`GC7D4*hTMmm zm!@Qk+2qgnUYK1M|9OM(gU=Gu(-%9-ovRZInSM3=*7RQnOb5zYU;Nv;=Qsc4a`qQ` zw@aZ!Tnlmtg4uUJ{Lz(SV0duDYxS#hTLRWz-pcg&DZ`bF33F0Aq!hmFJJhQj4T{QFDJBzzEpa0-%hT<2~Hbxo?FkDYpcy4DBeREA?fQ32MSp`dPTpmsbZ@-8@vXVEL#~)zMFlJP3`C0pjaD43l@X5Z9EUk?yr&LXz(^R5WN`8 z>(jb-9b`s* literal 0 HcmV?d00001 diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_cooling_schedule.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_cooling_schedule.html new file mode 100644 index 000000000..3b0d4ffc6 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_cooling_schedule.html @@ -0,0 +1,62 @@ + + +PARADISEO-MO: moCoolingSchedule Class Reference + + + + +
+ +
+ +

moCoolingSchedule Class Reference

This class gives the description of a cooling schedule. +More... +

+#include <moCoolingSchedule.h> +

+

Inheritance diagram for moCoolingSchedule: +

+ +eoUF< double &, bool > +eoFunctorBase +moExponentialCoolingSchedule +moLinearCoolingSchedule + +List of all members. + +
+

Detailed Description

+This class gives the description of a cooling schedule. +

+It is only a description... An object that herits from this class is needed to be used in a moSA. See moExponentialCoolingSchedule or moLinearCoolingSchedule for example. +

+ +

+Definition at line 22 of file moCoolingSchedule.h.


The documentation for this class was generated from the following file: +
Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_cooling_schedule.png b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_cooling_schedule.png new file mode 100644 index 0000000000000000000000000000000000000000..f60c26373fa68cbc49fdab1b9f4dacd895aa4613 GIT binary patch literal 1297 zcmeAS@N?(olHy`uVBq!ia0y~yU~B=h53n!;$#1%xdO%7dz$e7@|Ns9$=Kuc(=Fd-< z0AzvjfddDs5B+}v;Z(`AHYO&doWqW(-4yA8N)&sR>aossi7 zDMsMaWAzq^3&(gB*_xJeBxpt9C0+?C)z?RVsY9*E6e`3HrgIKbi2;HrIr)ybrHoo z|J8gJTHNE(4q@i_&i^TgVPT`fc{YKl8Rwb~I1)rMf>tY5ZCAK+<9D={APe7Ajzip9 zGsC9%eKk(DdAE5n)BE+8!c^~G+4An>3F(FJ*NRr%*W3N}z*nd1H*Ia6`Zw7>*ICz} z(D}%SrQ>bU^Sj&1IsUmenm2t)wYsHKwQHUD3QuE}{pp+^7uiMSbu9SRkdR*H67k3A zpzuO(fhk^94_ADjp3Qx5yP5NgUuQhT5-cYav@&{xtFT}Fe(=U`ql|~!m2xwmGCy#= zSHEPF*RS8oC9V4p8@N1p`d4=<2UEKj%fkfK@B2A}HTt$6;=0Ok=x?))v_po%iOuLy zE@0nsTslNDam}0ftM9jO+*Gg1!EO@vZ9U7whGVDxO;wP&5OH(APz$q^_V4hf0*B<( z|6T%o89>#4=X12qH2XJA^#9XU8b1F%E?@Iw`>$A2`!4qtQAejMyzvz1TVcww`5Q~V zmvP6-k4`r=>t!S#Z}jWCCh(>B+qR_p-5lL-`>$X4eCm1X**hN{TV|fBUCwbVG1$m) zck-X+4a<8ue+Jh21!}F{*s$!*L@PDbD^ubGt4sPCjynF1n{i1Zs(R;p9!KX-6N++c zZXGX~{ABZ-NzuQIXGj?>^HVjpefUR`F-d!pw!z*MpgP4Zf*&qE`Rp=B&Caqej5pN2 z<=^bsO)Uno=AuWv>mO7LGTvVDA1n;>cu`JW=h0O%aYSt^xm^1y3 z9{&;>!IgeyYERVezHhz2{&e4U0h4q0pU>l-yDt5z#9YafOsdQ$nWy}&b1Kkolr=xu zWpc#k><%T#UokVnc+1blIk>$I=i0Jny+;XKL(tJh<}O;_<|>`pGT+eTYFXQr;`!%x z-wdC7PU%G#NA*6>bU~h+`S#5lp3lB=>-rupp%!JKme{?l3qSO^FRUvPUKaA7;Y&Bq V`EVhDmB8|g!PC{xWt~$(695jyPS^kd literal 0 HcmV?d00001 diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_exponential_cooling_schedule-members.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_exponential_cooling_schedule-members.html new file mode 100644 index 000000000..a85992409 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_exponential_cooling_schedule-members.html @@ -0,0 +1,45 @@ + + +PARADISEO-MO: Member List + + + + +
+ +
+ +

moExponentialCoolingSchedule Member List

This is the complete list of members for moExponentialCoolingSchedule, including all inherited members.

+ + + + + + + +
functor_category()eoUF< double &, bool > [static]
moExponentialCoolingSchedule(double __threshold, double __ratio)moExponentialCoolingSchedule [inline]
operator()(double &__temp)moExponentialCoolingSchedule [inline, virtual]
ratiomoExponentialCoolingSchedule [private]
thresholdmoExponentialCoolingSchedule [private]
~eoFunctorBase()eoFunctorBase [virtual]
~eoUF()eoUF< double &, bool > [virtual]


Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_exponential_cooling_schedule.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_exponential_cooling_schedule.html new file mode 100644 index 000000000..0e9539fff --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_exponential_cooling_schedule.html @@ -0,0 +1,153 @@ + + +PARADISEO-MO: moExponentialCoolingSchedule Class Reference + + + + +
+ +
+ +

moExponentialCoolingSchedule Class Reference

One of the possible moCoolingSchedule. +More... +

+#include <moExponentialCoolingSchedule.h> +

+

Inheritance diagram for moExponentialCoolingSchedule: +

+ +moCoolingSchedule +eoUF< double &, bool > +eoFunctorBase + +List of all members. + + + + + + + + + + + + + + + +

Public Member Functions

 moExponentialCoolingSchedule (double __threshold, double __ratio)
 Simple constructor.
bool operator() (double &__temp)
 Function which proceeds to the cooling.

Private Attributes

+double threshold
 The temperature threhold.
+double ratio
 The decreasing factor of the temperature.
+

Detailed Description

+One of the possible moCoolingSchedule. +

+An other very simple cooling schedule, the temperature decrease according to a ratio while the temperature is greater than a given threshold. +

+ +

+Definition at line 22 of file moExponentialCoolingSchedule.h.


Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
moExponentialCoolingSchedule::moExponentialCoolingSchedule (double  __threshold,
double  __ratio 
) [inline]
+
+
+ +

+Simple constructor. +

+

Parameters:
+ + + +
__threshold the threshold.
__ratio the ratio used to descrease the temperature.
+
+ +

+Definition at line 31 of file moExponentialCoolingSchedule.h. +

+

+


Member Function Documentation

+ +
+
+ + + + + + + + + +
bool moExponentialCoolingSchedule::operator() (double &  __temp  )  [inline, virtual]
+
+
+ +

+Function which proceeds to the cooling. +

+It decreases the temperature and indicates if it is greater than the threshold.

+

Parameters:
+ + +
__temp the current temperature.
+
+
Returns:
if the new temperature (current temperature * ratio) is greater than the threshold.
+ +

+Implements eoUF< double &, bool >. +

+Definition at line 41 of file moExponentialCoolingSchedule.h. +

+References ratio, and threshold. +

+

+


The documentation for this class was generated from the following file: +
Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_exponential_cooling_schedule.png b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_exponential_cooling_schedule.png new file mode 100644 index 0000000000000000000000000000000000000000..02c711475435533e49c9c1d63701878b8f0800f9 GIT binary patch literal 928 zcmV;R17G}!P)`4{zn*)gaNpRs2#{_Xhy zP_$^W;+yz2hbAj6hqm!4tUIg{nTA9dEr8LC82LPa$DHCvXrLrMl33y$f!8lh+S|zi zKJXsWt%Q&2|6mf6W*F#GO!e{!Qy2_xXG_xO>h={ZCrO8UKp^i})dAOt6r| z5Br~huEftfit&wqZ+`FRlg9GZI^kaYU$1BLU$3u6^Pe6+#y7t4jc4R7@!R>xvKtg_DOA=m+h)TK@v&+z`AHXR;!l!Q$tT27HAG_R5G%guqDkr6=TDNG z@@Xc%6?)s`pQMY*6gbLffekC8T$GQK|119N1~dL7d5RW^;~Jk2K2&LyU*BM{{;~AW z#`*=TxTf{*`kzYwQ`%jV|1}V(3I>gzsDT#o1L;OB@zYqo{|n$6|NFl%e&+9+@&6yc z_wz~b=c{}1P5=BX|LO5#eB&G6_{KNB@s0m{e((2-r@wz0|2&^^YFkdzQ)6ydttNhv z+0}!8VP}6V*7iebK7<+pCanmnnIytBEUo7Z>Az z=Y)!L(wZ&~oOJUf(6OEec-dPFbdbJii9^{J!uJpjJTlJn(kd?6?R6K@ke&b%BMbs| zdeP;2Ve*{lf5?Px?R++6$>*Jx{BXlG7`FL(e_mkb^RX}Zu3m-m*8P)e znO|(f73W* + +PARADISEO-MO: Member List + + + + +
+ +
+ +

moFirstImprSelect< M > Member List

This is the complete list of members for moFirstImprSelect< M >, including all inherited members.

+ + + + + + + + + + + + +
best_fitmoFirstImprSelect< M > [private]
best_movemoFirstImprSelect< M > [private]
Fitness typedefmoFirstImprSelect< M >
functor_category()eoBF< M &, M::EOType::Fitness &, void > [static]
init(const Fitness &__fit)moFirstImprSelect< M > [inline, virtual]
init_fitmoFirstImprSelect< M > [private]
operator()(M &__move, Fitness &__fit)moFirstImprSelect< M > [inline, virtual]
update(const M &__move, const typename M::EOType::Fitness &__fit)moFirstImprSelect< M > [inline]
moMoveSelect::update(const M &__move, const Fitness &__fit)=0moMoveSelect< M > [pure virtual]
validmoFirstImprSelect< M > [private]
~eoBF()eoBF< M &, M::EOType::Fitness &, void > [virtual]
~eoFunctorBase()eoFunctorBase [virtual]


Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_first_impr_select.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_first_impr_select.html new file mode 100644 index 000000000..b15b1b5ab --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_first_impr_select.html @@ -0,0 +1,222 @@ + + +PARADISEO-MO: moFirstImprSelect< M > Class Template Reference + + + + +
+ +
+ +

moFirstImprSelect< M > Class Template Reference

One possible moMoveSelect. +More... +

+#include <moFirstImprSelect.h> +

+

Inheritance diagram for moFirstImprSelect< M >: +

+ +moMoveSelect< M > +eoBF< M &, M::EOType::Fitness &, void > +eoFunctorBase + +List of all members. + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Public Types

+typedef M::EOType::Fitness Fitness
 Alias for the fitness.

Public Member Functions

virtual void init (const Fitness &__fit)
 Procedure which initialise the exploration.
bool update (const M &__move, const typename M::EOType::Fitness &__fit)
 Function that indicates if the current move has not improved the fitness.
void operator() (M &__move, Fitness &__fit) throw (EmptySelection)
 Procedure which saved the best move and fitness.

Private Attributes

+bool valid
 Allow to know if at least one move has improved the solution.
+M best_move
 Best stored movement.
+Fitness init_fit
 Initial fitness.
+Fitness best_fit
 Best stored fitness.
+

Detailed Description

+

template<class M>
+ class moFirstImprSelect< M >

+ +One possible moMoveSelect. +

+The neighborhood is explored until a move enables an improvment of the current solution. +

+ +

+Definition at line 23 of file moFirstImprSelect.h.


Member Function Documentation

+ +
+
+
+template<class M>
+ + + + + + + + + +
virtual void moFirstImprSelect< M >::init (const Fitness __fit  )  [inline, virtual]
+
+
+ +

+Procedure which initialise the exploration. +

+It save the current fitness as the initial value for the fitness. +

+Implements moMoveSelect< M >. +

+Definition at line 35 of file moFirstImprSelect.h. +

+References moFirstImprSelect< M >::init_fit, and moFirstImprSelect< M >::valid. +

+

+ +

+
+
+template<class M>
+ + + + + + + + + + + + + + + + + + +
bool moFirstImprSelect< M >::update (const M &  __move,
const typename M::EOType::Fitness &  __fit 
) [inline]
+
+
+ +

+Function that indicates if the current move has not improved the fitness. +

+If the given fitness enables an improvment, the move (moMove) should be applied to the current solution.

+

Parameters:
+ + + +
__move a move.
__fit a fitness linked to the move.
+
+
Returns:
TRUE if the move does not improve the fitness.
+ +

+Definition at line 52 of file moFirstImprSelect.h. +

+References moFirstImprSelect< M >::best_fit, moFirstImprSelect< M >::best_move, moFirstImprSelect< M >::init_fit, and moFirstImprSelect< M >::valid. +

+

+ +

+
+
+template<class M>
+ + + + + + + + + + + + + + + + + + +
void moFirstImprSelect< M >::operator() (M &  __move,
Fitness __fit 
) throw (EmptySelection) [inline, virtual]
+
+
+ +

+Procedure which saved the best move and fitness. +

+

Parameters:
+ + + +
__move the current move (result of the procedure).
__fit the current fitness (result of the procedure).
+
+
Exceptions:
+ + +
EmptySelection if no move has improved the fitness.
+
+ +

+Implements eoBF< M &, M::EOType::Fitness &, void >. +

+Definition at line 76 of file moFirstImprSelect.h. +

+References moFirstImprSelect< M >::best_fit, moFirstImprSelect< M >::best_move, and moFirstImprSelect< M >::valid. +

+

+


The documentation for this class was generated from the following file: +
Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_first_impr_select.png b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_first_impr_select.png new file mode 100644 index 0000000000000000000000000000000000000000..a2a1234c8817927ee34de29656b933c61a3cce65 GIT binary patch literal 1067 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K54zMr-Ny)Vxn%%7hy z0muU50|yRNANv0U$Ym@E@(X5gcy=R=fr0s;r;B4q#hkaZ1Ir#O@VGvn|I_VOqmA{9 zn*sZG{a5AT;AAfJdvinY?3cnQ^=XW;+>Ueh9De)$LD6qxe%<|y3=QH89V@IRCp}%y zlp*W6@l@^A$&4!ZD);z@mFpZj=``oe8BPc7jJeqildiuw#u%|lRdJ%5!u(V7BK9yj zNU^4$WXQ1;So^t@;i9{2qnHA}V^^z*XO$Ym^WD`v3w|ElJ?Z098G-84vImx02ApL| z{3@(FDZTMo!-NnhLk`cX+aeQP)(gybyzy@Dmjo&AOVLsdi~dzyed4b2_v}@H z6^&2%8hpHpOjnwfG)JVUn(6B@%zWZj%zJ?MK#p>(`+^rCt2De+^PVoNVV|HMz<5E< zo8?57@$)^W^ST#yGg$AAkIXyPw&2SIkF16#CzTA$ogH)=uEw!y)Si=d$TKvz{lehQ z5>|XbCE}xEiL*8LjM@{{4XW%*=AB$^`CxOyidoJ_kTvPyTwCD_O|Sn*Ek=DEnUV_&&cLze5V ze%(^PZM)BHi<$V|_=;@!b%qJKZ@i*-!ky-Ruqn5SU2AblOffNg2-Z z7I}&{*cHC1?OdR<_NAPQZOYfIbzk=CvaDx5vo88qVrK*M9Qj6}>gzeFrtC3=Hm2-0 zKfm_wN{VG)75QLgyvT9gr+dSkKn}dlz*Day|L^FNyNqq8%ML>cbw!XIGLT_kaPX;^ zU&o1tNe3KOi18-A>+KRIifK#+e`EdMRp)DM|P6OtM3nZJx(<{{y{Y1y&h z6%2V?p^P@FH+Uu}Psm%(-0^(Yf@w<|_sms&E8KLK;oV(Er+0_=yjf%(yy5WSW(Z~Y zZke#-`I7@i+$9`Mh7_-RyiNcB literal 0 HcmV?d00001 diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_gen_sol_continue-members.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_gen_sol_continue-members.html new file mode 100644 index 000000000..a842dd4da --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_gen_sol_continue-members.html @@ -0,0 +1,46 @@ + + +PARADISEO-MO: Member List + + + + +
+ +
+ +

moGenSolContinue< EOT > Member List

This is the complete list of members for moGenSolContinue< EOT >, including all inherited members.

+ + + + + + + + +
functor_category()eoUF< const EOT &, bool > [static]
init()moGenSolContinue< EOT > [inline, virtual]
maxNumGenmoGenSolContinue< EOT > [private]
moGenSolContinue(unsigned int __maxNumGen)moGenSolContinue< EOT > [inline]
numGenmoGenSolContinue< EOT > [private]
operator()(const EOT &__sol)moGenSolContinue< EOT > [inline, virtual]
~eoFunctorBase()eoFunctorBase [virtual]
~eoUF()eoUF< const EOT &, bool > [virtual]


Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_gen_sol_continue.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_gen_sol_continue.html new file mode 100644 index 000000000..622d63d91 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_gen_sol_continue.html @@ -0,0 +1,182 @@ + + +PARADISEO-MO: moGenSolContinue< EOT > Class Template Reference + + + + +
+ +
+ +

moGenSolContinue< EOT > Class Template Reference

One possible stop criterion for a solution-based heuristic. +More... +

+#include <moGenSolContinue.h> +

+

Inheritance diagram for moGenSolContinue< EOT >: +

+ +moSolContinue< EOT > +eoUF< const EOT &, bool > +eoFunctorBase + +List of all members. + + + + + + + + + + + + + + + + + + +

Public Member Functions

 moGenSolContinue (unsigned int __maxNumGen)
 Simple constructor.
bool operator() (const EOT &__sol)
 Function that activates the stop criterion.
void init ()
 Procedure which allows to initialise the generation counter.

Private Attributes

+unsigned int maxNumGen
 Iteration maximum number.
+unsigned int numGen
 Iteration current number.
+

Detailed Description

+

template<class EOT>
+ class moGenSolContinue< EOT >

+ +One possible stop criterion for a solution-based heuristic. +

+The stop criterion corresponds to a maximum number of iteration. +

+ +

+Definition at line 21 of file moGenSolContinue.h.


Constructor & Destructor Documentation

+ +
+
+
+template<class EOT>
+ + + + + + + + + +
moGenSolContinue< EOT >::moGenSolContinue (unsigned int  __maxNumGen  )  [inline]
+
+
+ +

+Simple constructor. +

+

Parameters:
+ + +
__maxNumGen the maximum number of generation.
+
+ +

+Definition at line 30 of file moGenSolContinue.h. +

+

+


Member Function Documentation

+ +
+
+
+template<class EOT>
+ + + + + + + + + +
bool moGenSolContinue< EOT >::operator() (const EOT &  __sol  )  [inline, virtual]
+
+
+ +

+Function that activates the stop criterion. +

+Increments the counter and returns TRUE if the current number of iteration is lower than the given maximum number of iterations.

+

Parameters:
+ + +
__sol the current solution.
+
+
Returns:
TRUE or FALSE according to the current generation number.
+ +

+Implements eoUF< const EOT &, bool >. +

+Definition at line 44 of file moGenSolContinue.h. +

+References moGenSolContinue< EOT >::maxNumGen, and moGenSolContinue< EOT >::numGen. +

+

+ +

+
+
+template<class EOT>
+ + + + + + + + +
void moGenSolContinue< EOT >::init (  )  [inline, virtual]
+
+
+ +

+Procedure which allows to initialise the generation counter. +

+It can also be used to reset the iteration counter. +

+Implements moSolContinue< EOT >. +

+Definition at line 54 of file moGenSolContinue.h. +

+References moGenSolContinue< EOT >::numGen. +

+

+


The documentation for this class was generated from the following file: +
Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_gen_sol_continue.png b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_gen_sol_continue.png new file mode 100644 index 0000000000000000000000000000000000000000..b40e349915ec015116a4058123385084528f5689 GIT binary patch literal 900 zcmV-~1AF|5P)0VafoeG-BfN03LISn_zKv<|0WZT?x2eIiy+T z54gZJ=Sv6|Ro|Emr@3)zTW`-59a81gJ=dq|4fnaMJx-tBGy0P5;*R?heVcwDvDS zLuk3hzR6q&H7Pa@9=Sya2-N^ew#|?Wpc5#x?ormat+(2WEmy$8&7(r*G2_m<68dt51`A^Ux2X1BBYYSzidM&#WI_h?&9s zBKNdE`Dz&Vs@zrY`BmQ~pXZu?ww8OfelV_ajcZ)v8rQhSm00y%eYO8Dj63D(;w0q7 zN*V(PjAR{8TF-MZ-A3HTz^O*Sz-S=7_{c8kd^rl$^?+j6u!okG7ooZ*+25j&U7!bC zguKEmsI3#~@-u3Doa_K~T*4VQudE8NYL-t(gxLX+w?W~R~2W3yLEc&+f!jPNl0^t_akP9H#qYg0P`i!~D-BgAH zcT{hB9{DbPz2Sx?dv2$1(+@{|qqK2z(gcqCS6YM{RK)fwY|{_9e@FfB`(a$;zK6T$ aJ^vq0?UF9hobA5=0000B1NQ literal 0 HcmV?d00001 diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_h_c-members.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_h_c-members.html new file mode 100644 index 000000000..852b0790e --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_h_c-members.html @@ -0,0 +1,55 @@ + + +PARADISEO-MO: Member List + + + + +
+ +
+ +

moHC< M > Member List

This is the complete list of members for moHC< M >, including all inherited members.

+ + + + + + + + + + + + + + + + + +
className() consteoMonOp< M::EOType > [virtual]
eoMonOp()eoMonOp< M::EOType >
eoOp(OpType _type)eoOp< EOType >
eoOp(const eoOp &_eop)eoOp< EOType >
EOT typedefmoHC< M > [private]
Fitness typedefmoHC< M > [private]
full_evalmoHC< M > [private]
functor_category()eoUF< M::EOType &, bool > [static]
getType() consteoOp< EOType >
moHC(moMoveInit< M > &__move_init, moNextMove< M > &__next_move, moMoveIncrEval< M > &__incr_eval, moMoveSelect< M > &__move_select, eoEvalFunc< EOT > &__full_eval)moHC< M > [inline]
moHC(moMoveExpl< M > &__move_expl, eoEvalFunc< EOT > &__full_eval)moHC< M > [inline]
move_explmoHC< M > [private]
operator()(EOT &__sol)moHC< M > [inline, virtual]
OpType enum nameeoOp< EOType >
~eoFunctorBase()eoFunctorBase [virtual]
~eoOp()eoOp< EOType > [virtual]
~eoUF()eoUF< M::EOType &, bool > [virtual]


Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_h_c.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_h_c.html new file mode 100644 index 000000000..da648b5dd --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_h_c.html @@ -0,0 +1,238 @@ + + +PARADISEO-MO: moHC< M > Class Template Reference + + + + +
+ +
+ +

moHC< M > Class Template Reference

Hill Climbing (HC). +More... +

+#include <moHC.h> +

+

Inheritance diagram for moHC< M >: +

+ +moAlgo< M::EOType > +eoMonOp< M::EOType > +eoOp< EOType > +eoUF< M::EOType &, bool > +eoFunctorBase + +List of all members. + + + + + + + + + + + + + + + + + + + + + + + + + +

Public Member Functions

 moHC (moMoveInit< M > &__move_init, moNextMove< M > &__next_move, moMoveIncrEval< M > &__incr_eval, moMoveSelect< M > &__move_select, eoEvalFunc< EOT > &__full_eval)
 Full constructor.
 moHC (moMoveExpl< M > &__move_expl, eoEvalFunc< EOT > &__full_eval)
 Light constructor.
bool operator() (EOT &__sol)
 Function which launches the HC.

Private Types

+typedef M::EOType EOT
 Alias for the type.
+typedef EOT::Fitness Fitness
 Alias for the fitness.

Private Attributes

+moMoveExpl< M > & move_expl
 Complete exploration of the neighborhood.
+eoEvalFunc< EOT > & full_eval
 A full evaluation function.
+

Detailed Description

+

template<class M>
+ class moHC< M >

+ +Hill Climbing (HC). +

+Class which describes the algorithm for a hill climbing. +

+ +

+Definition at line 26 of file moHC.h.


Constructor & Destructor Documentation

+ +
+
+
+template<class M>
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
moHC< M >::moHC (moMoveInit< M > &  __move_init,
moNextMove< M > &  __next_move,
moMoveIncrEval< M > &  __incr_eval,
moMoveSelect< M > &  __move_select,
eoEvalFunc< EOT > &  __full_eval 
) [inline]
+
+
+ +

+Full constructor. +

+All the boxes are given in order the HC to use a moHCMoveLoopExpl.

+

Parameters:
+ + + + + + +
__move_init a move initialiser.
__next_move a neighborhood explorer.
__incr_eval a (generally) efficient evaluation function.
__move_select a move selector.
__full_eval a full evaluation function.
+
+ +

+Definition at line 53 of file moHC.h. +

+

+ +

+
+
+template<class M>
+ + + + + + + + + + + + + + + + + + +
moHC< M >::moHC (moMoveExpl< M > &  __move_expl,
eoEvalFunc< EOT > &  __full_eval 
) [inline]
+
+
+ +

+Light constructor. +

+This constructor allow to use another moMoveExpl (generally not a moHCMoveLoopExpl).

+

Parameters:
+ + + +
__move_expl a complete explorer.
__full_eval a full evaluation function.
+
+ +

+Definition at line 67 of file moHC.h. +

+

+


Member Function Documentation

+ +
+
+
+template<class M>
+ + + + + + + + + +
bool moHC< M >::operator() (EOT __sol  )  [inline, virtual]
+
+
+ +

+Function which launches the HC. +

+The HC has to improve a current solution. As the moSA and the mo TS, it can be used for HYBRIDATION in an evolutionnary algorithm.

+

Parameters:
+ + +
__sol a current solution to improve.
+
+
Returns:
TRUE.
+ +

+Implements eoUF< M::EOType &, bool >. +

+Definition at line 82 of file moHC.h. +

+References moHC< M >::full_eval, and moHC< M >::move_expl. +

+

+


The documentation for this class was generated from the following file: +
Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_h_c.png b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_h_c.png new file mode 100644 index 0000000000000000000000000000000000000000..6a4aadb1edb175af9af669e32b1b3817d6762449 GIT binary patch literal 1507 zcmcJPdo+t8I6OoY%#;I48~B+Y0{E`v?XPJ7Otz5TuCyx;fvKHq z>-@A=r0SAm`E!wMVE69Q54rn--d>+l_c@Ul%Fg>Rg@v+`g?sEqyl^E+H%fX^hj+3g z`WDMDQe#+FvR`rXm8N7MQ?;|t9nc|1`vE3Bx+!LYIk-z+s3?SUTbKgRa_2_k`F?!_ z06OM2YDH%6C?Ox{Kb;(FzI3K$6~?c1;hITkh{M54n_OtCU5CTeC)*gSC7nqGcysS!oxl(0T%rYSPpHLz6FzW%-X4&2d0&C2e9W8p;;olw--SxIOr`WT;P3Pboe_55ruEN;poMZL#s(WAMW^W88RGxkzEr#xE*(8|OA<=BSX7Bitl`J0N6q2CLv^YA+IHRhCmk1#O@grnXqJgXT zJeOywzdHMd}l(Piu7BM9QG9j2i?;$6w6A#dHsX zBh`IjeC9UBEt8S9e1mk9=z1WMguxwjs3t5uC8kLu3RpCO~-I zShxm^{%sk`Gr*czeG5H|WKRu4?v20gOyCgR8tgp}1D>0<ckBAk&T3ch4uQ(&; z)t$=_L-+jLB*23Lc$FWaL7Hd)Z*dySZvo8TQj>o`^Ud`&&$GX^ezcHMLi@L4$?zspl z!1*A~v-(6{(<)-+z&CM`&uI7~;KBfWtLSO~{wP?`YRxo|#Cy8V(({~6=4|`T`;e}J znx-`eEBRdH<5ck6y^58ucm0=BybnnF8-5LuJ=ZqxCbl+HGEe1ya7Z1<`)zHE^U4K- zqing_#>(PIyfSw#p>Zs%lzRPIXsxu>n_Mce3rG{us1OH3`IafVF?wF|kz(bj+N5}R z?tt}jTwiBOS9MMPdVT40K1^Xj;pxdcc;m~m2O@H5hhCxUJy%6VM5WvP<3b6CyNnC& zbW0t+5~qEZSHAqdql_9j>8jC$rs_#-WQQgOol=MkF(`=*otTIfim#U6N*ij#u>ZyJ z=QsWpKW2vSD(pz$6isW&Lp<9{&vs*UePQ&sYh^WBF!PKD + +PARADISEO-MO: Member List + + + + +
+ +
+ +

moHCMoveLoopExpl< M > Member List

This is the complete list of members for moHCMoveLoopExpl< M >, including all inherited members.

+ + + + + + + + + + + +
EOT typedefmoHCMoveLoopExpl< M > [private]
Fitness typedefmoHCMoveLoopExpl< M > [private]
functor_category()eoBF< const M::EOType &, M::EOType &, void > [static]
incr_evalmoHCMoveLoopExpl< M > [private]
moHCMoveLoopExpl(moMoveInit< M > &__move_init, moNextMove< M > &__next_move, moMoveIncrEval< M > &__incr_eval, moMoveSelect< M > &__move_select)moHCMoveLoopExpl< M > [inline]
move_initmoHCMoveLoopExpl< M > [private]
move_selectmoHCMoveLoopExpl< M > [private]
next_movemoHCMoveLoopExpl< M > [private]
operator()(const EOT &__old_sol, EOT &__new_sol)moHCMoveLoopExpl< M > [inline, virtual]
~eoBF()eoBF< const M::EOType &, M::EOType &, void > [virtual]
~eoFunctorBase()eoFunctorBase [virtual]


Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_h_c_move_loop_expl.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_h_c_move_loop_expl.html new file mode 100644 index 000000000..197b880f6 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_h_c_move_loop_expl.html @@ -0,0 +1,200 @@ + + +PARADISEO-MO: moHCMoveLoopExpl< M > Class Template Reference + + + + +
+ +
+ +

moHCMoveLoopExpl< M > Class Template Reference

Iterative explorer used by a moHC. +More... +

+#include <moHCMoveLoopExpl.h> +

+

Inheritance diagram for moHCMoveLoopExpl< M >: +

+ +moMoveLoopExpl< M > +moMoveExpl< M > +eoBF< const M::EOType &, M::EOType &, void > +eoFunctorBase + +List of all members. + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Public Member Functions

 moHCMoveLoopExpl (moMoveInit< M > &__move_init, moNextMove< M > &__next_move, moMoveIncrEval< M > &__incr_eval, moMoveSelect< M > &__move_select)
 Constructor.
void operator() (const EOT &__old_sol, EOT &__new_sol)
 Procedure which launches the explorer.

Private Types

+typedef M::EOType EOT
 Alias for the type.
+typedef M::EOType::Fitness Fitness
 Alias for the fitness.

Private Attributes

+moMoveInit< M > & move_init
 Move initialiser.
+moNextMove< M > & next_move
 Neighborhood explorer.
+moMoveIncrEval< M > & incr_eval
 (generally) Efficient evaluation.
+moMoveSelect< M > & move_select
 Move selector.
+

Detailed Description

+

template<class M>
+ class moHCMoveLoopExpl< M >

+ +Iterative explorer used by a moHC. +

+ +

+Definition at line 23 of file moHCMoveLoopExpl.h.


Constructor & Destructor Documentation

+ +
+
+
+template<class M>
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
moHCMoveLoopExpl< M >::moHCMoveLoopExpl (moMoveInit< M > &  __move_init,
moNextMove< M > &  __next_move,
moMoveIncrEval< M > &  __incr_eval,
moMoveSelect< M > &  __move_select 
) [inline]
+
+
+ +

+Constructor. +

+All the boxes have to be specified.

+

Parameters:
+ + + + + +
__move_init the move initialiser.
__next_move the neighborhood explorer.
__incr_eval (generally) efficient evaluation function.
__move_select the move selector.
+
+ +

+Definition at line 43 of file moHCMoveLoopExpl.h. +

+

+


Member Function Documentation

+ +
+
+
+template<class M>
+ + + + + + + + + + + + + + + + + + +
void moHCMoveLoopExpl< M >::operator() (const EOT __old_sol,
EOT __new_sol 
) [inline, virtual]
+
+
+ +

+Procedure which launches the explorer. +

+The exploration starts from an old solution and provides a new solution.

+

Parameters:
+ + + +
__old_sol the current solution.
__new_sol the new_sol (result of the procedure).
+
+ +

+Implements eoBF< const M::EOType &, M::EOType &, void >. +

+Definition at line 59 of file moHCMoveLoopExpl.h. +

+References moHCMoveLoopExpl< M >::incr_eval, moHCMoveLoopExpl< M >::move_init, moHCMoveLoopExpl< M >::move_select, and moHCMoveLoopExpl< M >::next_move. +

+

+


The documentation for this class was generated from the following file: +
Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_h_c_move_loop_expl.png b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_h_c_move_loop_expl.png new file mode 100644 index 0000000000000000000000000000000000000000..8c76fd46e7d798861365f4696569afed1df2dafc GIT binary patch literal 1569 zcmcJPe>Br;9LJ|nnJFr?ZaAltOH)GA53Mbk((x;?*@n!TpHmkplzy?f#=Sb`XT`Wk z_T9|AYje3V+0~db#jIOti6M&IF~73i-P<|$^zZGQ`^WP<@6UPuc%J9|dB2`)f8S#e zBd8Gw1cG=S_Xq%i^z3zdL4UPwcK->Ir&}!jy#vu&tyU+s+BPOL{H9L*GuqnPF12e% zbfw<;0N+y})adg_5Xhj>%i~C3%AF5)2>HWy8_*o)qWOCer-BrDbRL)&W|}&#>ypDe z+grWYeA^sq?klR>)JbG0#mH@cPR`6fvlg++i9u2XjO3j#BEVd#@{=Nf;qkL^$<6V$SGB1-KMw9y< z;0eW!1kUQ>ri1tnmvP>x2{1H_aUC7v2bCnL2XTt0zqW!Yrx;Y1b!w{-*t-W2H zRT*Lx?--Rrp0lnbVv(=zum$PE6mn6E)0B1Asb8!fRrUGDh*Rx*-cWn*Q$M`Dr|yze zw_M>-%9K9SPhztf$~}Rv8K*ZA@Ikb*n93c|Xc$QnQmQag&%Mjw&s8B$TUHjPkpQjg-oG;-^Wf& zKt&3t!#plOlVJ57hR)54tbjqVS^JNTa5ES~6E(|Pf^maH4!?;tdhPKuH_o|x`@X?Q6>nR^lv54Uu+ z@LO0`J~+YGQ{2L)zN5O;*$~UHweS*7ecz`Sn({~4I&hfkiBDd-)U@F16l5n)L`LRk zH$EE^wcOAQ`r2TA8RZ+a^g84b((KZ@kp>nySf--Mn!Ja8W%gIIhaiBQYAmkWYM^hy zzG8RAuC=?;3nwxFtc|uvrW1pq1@MqAS&locofU)=xnZPK<65(uFUgRLoFZ!Q;O@8- zF@3XhfokFkPK1Vqb%y7_pI5Uh-|<@(Jg;9O%;}Isj>;Cn#z0ycKS03|V&G=8PPr35hVBrMiRTFsBxxa)l6W&Kk*fAw5z1 za#&n4fSG)9h$D68awHm3w|#52Y%hn%$i}E#PehkKTdfg`PRG1`3Pt*;qBxPm@uP#W z^t-Cr&h;bPH|E(gdpA%73(@kP2`BMG`Q+49Tt~yAscOG?6B#(c$-xlnt&%9XtMxoB zMag8ay{Bvh12O!DTh@6|fW38ThD@Bec_92CB58kwN+MN9gmsLihleTQmRxMi4AoW$ z^=UGcC#B&tx>)&Yxw=INhWe!&151ZBT5gXb;$L_)7L2viP}&d}qWjN5UT9yBdiU@f Fe*v>R + +PARADISEO-MO: Member List + + + + +
+ +
+ +

moImprBestFitAspirCrit< M > Member List

This is the complete list of members for moImprBestFitAspirCrit< M >, including all inherited members.

+ + + + + + + + + +
best_fitmoImprBestFitAspirCrit< M > [private]
first_timemoImprBestFitAspirCrit< M > [private]
Fitness typedefmoImprBestFitAspirCrit< M >
functor_category()eoBF< const M &, const M::EOType::Fitness &, bool > [static]
init()moImprBestFitAspirCrit< M > [inline, virtual]
moImprBestFitAspirCrit()moImprBestFitAspirCrit< M > [inline]
operator()(const M &__move, const Fitness &__fit)moImprBestFitAspirCrit< M > [inline, virtual]
~eoBF()eoBF< const M &, const M::EOType::Fitness &, bool > [virtual]
~eoFunctorBase()eoFunctorBase [virtual]


Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_impr_best_fit_aspir_crit.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_impr_best_fit_aspir_crit.html new file mode 100644 index 000000000..fd162933a --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_impr_best_fit_aspir_crit.html @@ -0,0 +1,138 @@ + + +PARADISEO-MO: moImprBestFitAspirCrit< M > Class Template Reference + + + + +
+ +
+ +

moImprBestFitAspirCrit< M > Class Template Reference

One of the possible moAspirCrit. +More... +

+#include <moImprBestFitAspirCrit.h> +

+

Inheritance diagram for moImprBestFitAspirCrit< M >: +

+ +moAspirCrit< M > +eoBF< const M &, const M::EOType::Fitness &, bool > +eoFunctorBase + +List of all members. + + + + + + + + + + + + + + + + + + + + + + +

Public Types

+typedef M::EOType::Fitness Fitness
 Alias for the fitness.

Public Member Functions

moImprBestFitAspirCrit ()
 Contructor.
+void init ()
 Initialisation procedure.
bool operator() (const M &__move, const Fitness &__fit)
 Function that indicates if the fit is better that the already saved fit.

Private Attributes

+Fitness best_fit
 Best fitness found until now.
+bool first_time
 Indicates that a fitness has been already saved or not.
+

Detailed Description

+

template<class M>
+ class moImprBestFitAspirCrit< M >

+ +One of the possible moAspirCrit. +

+This criterion is satisfied when a given fitness is the best ever considered. +

+ +

+Definition at line 22 of file moImprBestFitAspirCrit.h.


Member Function Documentation

+ +
+
+
+template<class M>
+ + + + + + + + + + + + + + + + + + +
bool moImprBestFitAspirCrit< M >::operator() (const M &  __move,
const Fitness __fit 
) [inline, virtual]
+
+
+ +

+Function that indicates if the fit is better that the already saved fit. +

+The first time, the function only saved the current move and fitness.

+

Parameters:
+ + + +
__move a move.
__fit a fitnes linked to the move.
+
+
Returns:
TRUE the first time and if __fit > best_fit, else FALSE.
+ +

+Implements eoBF< const M &, const M::EOType::Fitness &, bool >. +

+Definition at line 52 of file moImprBestFitAspirCrit.h. +

+References moImprBestFitAspirCrit< M >::best_fit, and moImprBestFitAspirCrit< M >::first_time. +

+

+


The documentation for this class was generated from the following file: +
Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_impr_best_fit_aspir_crit.png b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_impr_best_fit_aspir_crit.png new file mode 100644 index 0000000000000000000000000000000000000000..9cb9fec170c3e9eeb1355d4cccde67b34ec76d9a GIT binary patch literal 1309 zcmeAS@N?(olHy`uVBq!ia0y~yU~~hr53n!;$*%P4n}C!=fKQ0)|NsAi%>Vxn%%7hy z0muU50|yRNANv0U$Ym@E@(X5gcy=R=fq`YSr;B4q#hkZu0_QC<;5qg%b>8ed3U{U7 z#AVEX_Rl?HlG;)QEiaMXll{}#ytwNxwFLgG{T z*>Pr+SM2l}mLrp2|FQ*I&APb1>7skB!Mwl6O4`}VYk$7K6l-fx_uqE*gMC&Be}4V5 zlYY3aD&ftdG@!DBFBT_!2{ibnAyF&RV+Yp_6Mn(klU~oT%Q?2@noN%zP@b2jS&F{Lj zg|e4b_k1m@JH4W}Mq2)<+do$2lfD0vUO#MARn~g;=FiG#hOLfe`w~K~Gd$=j+~%5b zJ*i5wcST=Ert&A_^Tliban9V6v`V2a>U*1@RCcS((##3Y*LJ$C+QwsjscECiguI24 zPRq|obZR9R1B2<>n(W6b#HQ+)&0=+LJUpwP+s#q4=jt+Lb=JzG9xImTGhVVi*K?C6 zHsa8x9_1*OoYOKwTfSTrjyE>yIcB)MN4)UNmZT-6GMgnc%p_F*nLd4XY*fO&3cf}raKI~zjKZR+^PPgPI zlP>?zBwoA&Y6zinFzRrg=Z56=Hl?`zJt z-+S-gWj{iIk@zdY=6CN)zMuOO|1X>$ykj-dvOKVm|7;z5cl;Y2Ab9Z)ZFneOmZwt?eC`Z&&4> z8!f8)-CDIiq_1wQ17S~30-_kjg9=vU$rSqz%&nrFH-8Am?a=UHj zTsiky<%!2VQ_eDOk#$eDG45N^o%YbN_`(^pg~gvY?)aOr?sZYEj+w<rqSiX$?nA{#?TZ6JdV_0&;kxGHWUzpr})bO7C zzh$l|+v0AZdHx35m>F_%WtK3w$3=aa6IEH5b4$+ViQ}=5&Jy>_Sy68aWnQsebg|jj zXIQASY{$}x?5YpM(qtO@d77qGR6qJ!sN{LcxlN7xN48{Q%Bjo)GZJRq%vA7@nHe>& z*(bBoXRg~@#e_*Lmln@C!l0k1qmr!pi2Zr;C7mg$$vO)@Jy^KO(RtO$4f3B9l7q}7 zo>?@V`OCWaT*1jH?FzCIlXKV9PxAYfCe!SQ-7EKjCd6_ zFXp<@`K9ZQ2VMW9ezr7rUB8V-e{k||p<|*S@5=7h1p0UWzGW4=5#jcaaq5EXa~XfN Rt^mt222WQ%mvv4FO#m^ZbiM!p literal 0 HcmV?d00001 diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_it_rand_next_move-members.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_it_rand_next_move-members.html new file mode 100644 index 000000000..32711f707 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_it_rand_next_move-members.html @@ -0,0 +1,47 @@ + + +PARADISEO-MO: Member List + + + + +
+ +
+ +

moItRandNextMove< M > Member List

This is the complete list of members for moItRandNextMove< M >, including all inherited members.

+ + + + + + + + + +
EOT typedefmoItRandNextMove< M > [private]
functor_category()eoBF< M &, const M::EOType &, bool > [static]
max_itermoItRandNextMove< M > [private]
moItRandNextMove(moRandMove< M > &__rand_move, unsigned int __max_iter)moItRandNextMove< M > [inline]
num_itermoItRandNextMove< M > [private]
operator()(M &__move, const EOT &__sol)moItRandNextMove< M > [inline, virtual]
rand_movemoItRandNextMove< M > [private]
~eoBF()eoBF< M &, const M::EOType &, bool > [virtual]
~eoFunctorBase()eoFunctorBase [virtual]


Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_it_rand_next_move.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_it_rand_next_move.html new file mode 100644 index 000000000..887277531 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_it_rand_next_move.html @@ -0,0 +1,180 @@ + + +PARADISEO-MO: moItRandNextMove< M > Class Template Reference + + + + +
+ +
+ +

moItRandNextMove< M > Class Template Reference

One of the possible moNextMove. +More... +

+#include <moItRandNextMove.h> +

+

Inheritance diagram for moItRandNextMove< M >: +

+ +moNextMove< M > +eoBF< M &, const M::EOType &, bool > +eoFunctorBase + +List of all members. + + + + + + + + + + + + + + + + + + + + + + +

Public Member Functions

 moItRandNextMove (moRandMove< M > &__rand_move, unsigned int __max_iter)
 The constructor.
bool operator() (M &__move, const EOT &__sol)
 Generation of a new move.

Private Types

+typedef M::EOType EOT
 Alias for the type.

Private Attributes

+moRandMove< M > & rand_move
 A move generator (generally randomly).
+unsigned int max_iter
 Iteration maximum number.
+unsigned int num_iter
 Iteration current number.
+

Detailed Description

+

template<class M>
+ class moItRandNextMove< M >

+ +One of the possible moNextMove. +

+This class is a move (moMove) generator with a bound for the maximum number of iterations. +

+ +

+Definition at line 22 of file moItRandNextMove.h.


Constructor & Destructor Documentation

+ +
+
+
+template<class M>
+ + + + + + + + + + + + + + + + + + +
moItRandNextMove< M >::moItRandNextMove (moRandMove< M > &  __rand_move,
unsigned int  __max_iter 
) [inline]
+
+
+ +

+The constructor. +

+Parameters only for initialising the attributes.

+

Parameters:
+ + + +
__rand_move the random move generator.
__max_iter the iteration maximum number.
+
+ +

+Definition at line 37 of file moItRandNextMove.h. +

+

+


Member Function Documentation

+ +
+
+
+template<class M>
+ + + + + + + + + + + + + + + + + + +
bool moItRandNextMove< M >::operator() (M &  __move,
const EOT __sol 
) [inline, virtual]
+
+
+ +

+Generation of a new move. +

+If the maximum number is not already reached, the current move is forgotten and remplaced by another one.

+

Parameters:
+ + + +
__move the current move.
__sol the current solution.
+
+
Returns:
FALSE if the maximum number of iteration is reached, else TRUE.
+ +

+Implements eoBF< M &, const M::EOType &, bool >. +

+Definition at line 52 of file moItRandNextMove.h. +

+References moItRandNextMove< M >::max_iter, moItRandNextMove< M >::num_iter, and moItRandNextMove< M >::rand_move. +

+

+


The documentation for this class was generated from the following file: +
Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_it_rand_next_move.png b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_it_rand_next_move.png new file mode 100644 index 0000000000000000000000000000000000000000..52d789f145d7d145d603b66de936fa5f1454de94 GIT binary patch literal 1033 zcmV+k1or!hP)006)Q0{{R3E+{xi0000OP)t-s|Ns90 z00960z@MLBkN^MxkN^Mxkifved&2+Z00001bW%=J06^y0W&i*KpGibPRCt{2+gXyM zFbn`t`)9r_-9VgRYUV=ymHQuIuof=?(vUbqr;w|c;5IyDE9nFk;qPhfcla}%)!cUb zVFQ3>i%Kv42fH_@^wM(ZIGg5p=jf0nB*NSSn7a|P%>#JMa65yuU^bHUeTQ+I` z3>>zBW4F@~8+EqNdN+Aa z$i&=3lIOhM1oW;vAK%<|+wFJTXTC>%seQe+`={E!Zr8MLx35duSIu*`-FDk;x7~Kz zZMWTad#rutXaB2SZ*lufJC_@%RJusNCtAHAj?Fj8<@07XG{ft0SM09jkV)Qi zy$peJU_LRD4w@D<12S~m=F|Sx)={}K#^r*}CgW@Ith1p}TDufK%*p!^<*%vExs8&l z2+#MtDO-28)={Q9=P=b0iygAFK}$?>%4TDe0JUIK>`B(Uv#n~RM`(A%8jsijZQNi> zr2**y8k@8>NfLh_HxICCot^oe&A7%rb#o5At!viUrB=0K6O}qzQ={FEdv(3Fyhyg- zWmH{no7uvsUDg|I!8h02G7#DdM3LvWMPKtA>?F4G{QGvKy1l4{ zZx!oy+6Suoi&vP<^B(_tj=N{+r~EH*`wI4%?~%{^Z1AbJ*T=49Up3F&cH3>Y-FDk; zx7~Kz?XmWmpZ%|Ty~XXHY&Tbk?b`i)TkjoVV`E!=s&DJPFW6ia;mVlYOv5z-Q9y5_ zGH<+%AeD}K6A@W$tdvm1w5rvvd#QHW6E-H-UzWCnYxXYum`zgmVw?1)sXQA1I@4CQ z+Jzss(Y9NAvSlvz__+DbzzZAOHyOkTPj|O0sUf0}q z+wEuUGv6bh`Ptx8ZLg1A%f4!!yY05yZoBQa+ittPqF`N#4Y>%IH!lmpDqLP!~l5Moy6?kJn{1|(7V$;!XR z*pQh#s}gt00Z0B3b(6nR&|!gpiOIck4$s9MgW0m)sWWq!VQEXaW + +PARADISEO-MO: Member List + + + + +
+ +
+ +

moLSCheckPoint< M > Member List

This is the complete list of members for moLSCheckPoint< M >, including all inherited members.

+ + + + + + + +
add(eoBF< const M &, const typename M::EOType &, void > &__f)moLSCheckPoint< M > [inline]
funcmoLSCheckPoint< M > [private]
functor_category()eoBF< const M &, const M::EOType &, void > [static]
operator()(const M &__move, const typename M::EOType &__sol)moLSCheckPoint< M > [inline]
eoBF< const M &, const M::EOType &, void >::operator()(const M &, const M::EOType &)=0eoBF< const M &, const M::EOType &, void > [pure virtual]
~eoBF()eoBF< const M &, const M::EOType &, void > [virtual]
~eoFunctorBase()eoFunctorBase [virtual]


Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_l_s_check_point.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_l_s_check_point.html new file mode 100644 index 000000000..9ab9d2106 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_l_s_check_point.html @@ -0,0 +1,155 @@ + + +PARADISEO-MO: moLSCheckPoint< M > Class Template Reference + + + + +
+ +
+ +

moLSCheckPoint< M > Class Template Reference

Class which allows a checkpointing system. +More... +

+#include <moLSCheckPoint.h> +

+

Inheritance diagram for moLSCheckPoint< M >: +

+ +eoBF< const M &, const M::EOType &, void > +eoFunctorBase + +List of all members. + + + + + + + + + + + + +

Public Member Functions

void operator() (const M &__move, const typename M::EOType &__sol)
 Function which launches the checkpointing.
void add (eoBF< const M &, const typename M::EOType &, void > &__f)
 Procedure which add a new function to the function vector.

Private Attributes

+std::vector< eoBF< const M &,
+ const typename M::EOType &,
+ void > * > 
func
 vector of function
+

Detailed Description

+

template<class M>
+ class moLSCheckPoint< M >

+ +Class which allows a checkpointing system. +

+Thanks to this class, at each iteration, additionnal function can be used (and not only one). +

+ +

+Definition at line 21 of file moLSCheckPoint.h.


Member Function Documentation

+ +
+
+
+template<class M>
+ + + + + + + + + + + + + + + + + + +
void moLSCheckPoint< M >::operator() (const M &  __move,
const typename M::EOType &  __sol 
) [inline]
+
+
+ +

+Function which launches the checkpointing. +

+Each saved function is used on the current move and the current solution.

+

Parameters:
+ + + +
__move a move.
__sol a solution.
+
+ +

+Definition at line 34 of file moLSCheckPoint.h. +

+References moLSCheckPoint< M >::func. +

+

+ +

+
+
+template<class M>
+ + + + + + + + + +
void moLSCheckPoint< M >::add (eoBF< const M &, const typename M::EOType &, void > &  __f  )  [inline]
+
+
+ +

+Procedure which add a new function to the function vector. +

+The new function is added at the end of the vector.

Parameters:
+ + +
__f a new function to add.
+
+ +

+Definition at line 49 of file moLSCheckPoint.h. +

+References moLSCheckPoint< M >::func. +

+

+


The documentation for this class was generated from the following file: +
Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_linear_cooling_schedule-members.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_linear_cooling_schedule-members.html new file mode 100644 index 000000000..d390064f5 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_linear_cooling_schedule-members.html @@ -0,0 +1,45 @@ + + +PARADISEO-MO: Member List + + + + +
+ +
+ +

moLinearCoolingSchedule Member List

This is the complete list of members for moLinearCoolingSchedule, including all inherited members.

+ + + + + + + +
functor_category()eoUF< double &, bool > [static]
moLinearCoolingSchedule(double __threshold, double __quantity)moLinearCoolingSchedule [inline]
operator()(double &__temp)moLinearCoolingSchedule [inline, virtual]
quantitymoLinearCoolingSchedule [private]
thresholdmoLinearCoolingSchedule [private]
~eoFunctorBase()eoFunctorBase [virtual]
~eoUF()eoUF< double &, bool > [virtual]


Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_linear_cooling_schedule.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_linear_cooling_schedule.html new file mode 100644 index 000000000..54d25a153 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_linear_cooling_schedule.html @@ -0,0 +1,153 @@ + + +PARADISEO-MO: moLinearCoolingSchedule Class Reference + + + + +
+ +
+ +

moLinearCoolingSchedule Class Reference

One of the possible moCoolingSchedule. +More... +

+#include <moLinearCoolingSchedule.h> +

+

Inheritance diagram for moLinearCoolingSchedule: +

+ +moCoolingSchedule +eoUF< double &, bool > +eoFunctorBase + +List of all members. + + + + + + + + + + + + + + + +

Public Member Functions

 moLinearCoolingSchedule (double __threshold, double __quantity)
 Simple constructor.
bool operator() (double &__temp)
 Function which proceeds to the cooling.

Private Attributes

+double threshold
 The temperature threhold.
+double quantity
 The quantity that allows the temperature to decrease.
+

Detailed Description

+One of the possible moCoolingSchedule. +

+An another very simple cooling schedule, the temperature decrease according to a quantity while the temperature is greater than a threshold. +

+ +

+Definition at line 22 of file moLinearCoolingSchedule.h.


Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
moLinearCoolingSchedule::moLinearCoolingSchedule (double  __threshold,
double  __quantity 
) [inline]
+
+
+ +

+Simple constructor. +

+

Parameters:
+ + + +
__threshold the threshold.
__quantity the quantity used to descrease the temperature.
+
+ +

+Definition at line 31 of file moLinearCoolingSchedule.h. +

+

+


Member Function Documentation

+ +
+
+ + + + + + + + + +
bool moLinearCoolingSchedule::operator() (double &  __temp  )  [inline, virtual]
+
+
+ +

+Function which proceeds to the cooling. +

+It decreases the temperature and indicates if it is greater than the threshold.

+

Parameters:
+ + +
__temp the current temperature.
+
+
Returns:
if the new temperature (current temperature - quantity) is greater than the threshold.
+ +

+Implements eoUF< double &, bool >. +

+Definition at line 41 of file moLinearCoolingSchedule.h. +

+References quantity, and threshold. +

+

+


The documentation for this class was generated from the following file: +
Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_linear_cooling_schedule.png b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_linear_cooling_schedule.png new file mode 100644 index 0000000000000000000000000000000000000000..51f1257538ad7247802e98643b97b19b6d5b4174 GIT binary patch literal 859 zcmV-h1El006)Q0{{R3aTRq$0000OP)t-s|Ns90 z00960z@MLBkN^MxkN^Mxkifved&2+Z00001bW%=J06^y0W&i*J@kvBMRCt{2no)A& zAPk1h%RVFBK;9d)7wS{)e}qMVKscD%4&5YEsZ$4J@kO9a9R6YXoNUX-I@SIf@JE3F zpn6oicoo@GB5_jm}5Yugkb_iN*;a-h#96X^>Q5n zA!aG;1jM|C!Mh#@hA}$B7MP~Yxl&WKafa&{7}poO#rbv(DK~KgJhg_Z%7k%T@KCC9 zTtfmnRpm#_fCjt-occ?cV`ONMm5!rf-3ew(`t?tk!5Cs9{@R(G>&;(FsLy z5zRqO8P+OCu$Hh31jvJmQ;8VCTQw^U6runDbcV3@fLQ`s5qrQ)EE%rNly@>r96FNW za1BAPA<7~S*D#kW%xb->GQa35gOEp6K5P4$2LoOMPJfI}f6zY*Xu8b= zo6R$z0S#zC0~*kP?+Bd!gY)%&V;e9TRqdwAB-vT}O>YcThiY)^JOd=&@yixn&SOy8 zyC=pfqOG9O2i8M16$p(}miEY$xoRXjPCflZ;-t06Iq5Xcpvof~p7uHq>>ek21lT=J z^bqi<8E^)0`eStZgZ^1S(`_c$Y@PuPXg~uR(0~SfM<7hL#m}9HGvHjH3;!FwgW~XR z^=@LNEDUpy~d}QT|0xsp2TQ + +PARADISEO-MO: Member List + + + + +
+ +
+ +

moMove< EOT > Member List

This is the complete list of members for moMove< EOT >, including all inherited members.

+ + + + + +
EOType typedefmoMove< EOT >
functor_category()eoUF< EOT &, void > [static]
operator()(EOT &)=0eoUF< EOT &, void > [pure virtual]
~eoFunctorBase()eoFunctorBase [virtual]
~eoUF()eoUF< EOT &, void > [virtual]


Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_move.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_move.html new file mode 100644 index 000000000..b69c45b62 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_move.html @@ -0,0 +1,68 @@ + + +PARADISEO-MO: moMove< EOT > Class Template Reference + + + + +
+ +
+ +

moMove< EOT > Class Template Reference

Definition of a move. +More... +

+#include <moMove.h> +

+

Inheritance diagram for moMove< EOT >: +

+ +eoUF< EOT &, void > +eoFunctorBase + +List of all members. + + + + + +

Public Types

+typedef EOT EOType
 Alias for the type.
+

Detailed Description

+

template<class EOT>
+ class moMove< EOT >

+ +Definition of a move. +

+A move transforms a solution to another close solution. It describes how a solution can be modified to another one. +

+ +

+Definition at line 23 of file moMove.h.


The documentation for this class was generated from the following file: +
Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_move_expl.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_move_expl.html new file mode 100644 index 000000000..fef0b120b --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_move_expl.html @@ -0,0 +1,66 @@ + + +PARADISEO-MO: moMoveExpl< M > Class Template Reference + + + + +
+ +
+ +

moMoveExpl< M > Class Template Reference

Description of a move (moMove) explorer. +More... +

+#include <moMoveExpl.h> +

+

Inheritance diagram for moMoveExpl< M >: +

+ +eoBF< const M::EOType &, M::EOType &, void > +eoFunctorBase +moMoveLoopExpl< M > +moHCMoveLoopExpl< M > +moTSMoveLoopExpl< M > + +List of all members. + +
+

Detailed Description

+

template<class M>
+ class moMoveExpl< M >

+ +Description of a move (moMove) explorer. +

+Only a description...See moMoveLoopExpl. +

+ +

+Definition at line 21 of file moMoveExpl.h.


The documentation for this class was generated from the following file: +
Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_move_expl.png b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_move_expl.png new file mode 100644 index 0000000000000000000000000000000000000000..66c1602bb04d70818190b561768c8297e0e2f84b GIT binary patch literal 1884 zcmbW2YgAKL7RLi(C#CZ6!5F|Q)`m6(Z_C3nK`iAV%3~oAAQHF=A__8s=na)XM#L(h z26QNmf)Jpf7~oO~N#!OWj=VGo1ju6mjq)&%5Gh0;20|ufb(XF*{nGhxerunz_B!Y6 zv-f|W+@QdHCdO9AC=|-XcfWTC3S}6jx79{#^yJ%M^$RFWP(bKjold7Wb-GptBl?=& zS{<#et?B>Ljq9fdP)HyF_3bOkF%;^9IbUy&(6hIcB{4~re>3;7ra3>jmmDoKtN{~x zo%;Qnbn8VE4Ycy9@9Sf&Tr%pN3`R@|ZdaeJPf6kK8W+2N+&_mJp5rfeb_znadV%JH zYdwC$>_)H$6M1qdM6;2&!b4sabAA|FLeO^xEJ%e;!Ss*5OsxEL)Bbx`kfS?AW{JzoA*(19NZ`UG;%B+SN~#BV8Gj~ zzvo-oB>K6r+*7T6n+Bn0jL0!R*JPIgXnEHEiTmFJEBGx&I?0B2r&si23Fn_uHlT^x z0awR#HQc~b$*q~;IuBf$8MrVDMbl0D)X>2q`y&y<$m8}7CRtECc{+un@FW61T&(T> zSW+3|w_`R)>=HJ%Jai-YB?wJ44MxyegqZI2F^9RAUi!tr1NcSt32=&c0LciH9+@{TaOPA zo@Z(nBIm&bbLZQE1;Lm2XB~#7TamdKrt>Ywk(<69BBn#h<8<0p_m@DVSS!Qbm*c7$K_k*nMPmS8teB4L&|r+Qr6XV-q^6`k|;JHcdM7e;dUFV z+~f+wWXJT4@XmRwrOr2or6P;U!8QM2Gg6v6Rvem9&W$l>*AEJgc3tKLj2t){i=G$^ z6Kh(ij3vaU1JsL)8tyh}e?+%m@6C9~oq^ zSODFOBKXG~J}%z%D&oT3d}IFH!;PXONeATZ!SyvtNVPY*tw42p8TvTnqKvk5O%KMHoHxiuFq>R+&a2(IK0 z&p?koHNeTVaO*J9TD5B-kW9wfQ?If5uwey2!MQ;HUzS|!fMUj;!-~^s{B8(jld(>p zoM6xV6K;`nM-@d>;#TvqgOj7zFq9g~(RFm$k)r_!s;4Y*4PnVZYrm@c`#EsypKT2Ta&}6248YRT6v|0<4PkU61ZpZ^dQS$+$dahOIKHU2D&Y(16&#Hh}PcxBlv6W$b2+P88Mz!%!u`UvVUz9P0@b9GH4OjWtN z-L*@q3NSvM^=71JA`Zmm9h4^WtmDgTs4Lkr=-*W^W-x^KxT~zrPBBzRZoi%)T{d&? zD}0m_X-B2=2#erz4OIiXIm%@)sB+Il{I-bb+Z{@)CBdOPVkfzO-4QEdUteIzBfI;g zV+5@>`{8G+NqkW+d9SXwnIzw0|1?WuU0OCPiyNHHo~kA3ze1Gn-av2IGdk-(;*yhP literal 0 HcmV?d00001 diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_move_incr_eval.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_move_incr_eval.html new file mode 100644 index 000000000..9deeff9f9 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_move_incr_eval.html @@ -0,0 +1,63 @@ + + +PARADISEO-MO: moMoveIncrEval< M > Class Template Reference + + + + +
+ +
+ +

moMoveIncrEval< M > Class Template Reference

(generally) Efficient evaluation function based a move and a solution. +More... +

+#include <moMoveIncrEval.h> +

+

Inheritance diagram for moMoveIncrEval< M >: +

+ +eoBF< const M &, const M::EOType &, M::EOType::Fitness > +eoFunctorBase + +List of all members. + +
+

Detailed Description

+

template<class M>
+ class moMoveIncrEval< M >

+ +(generally) Efficient evaluation function based a move and a solution. +

+From a move and a solution, it computes a new fitness that could be associated to the solution if this one is updated. +

+ +

+Definition at line 24 of file moMoveIncrEval.h.


The documentation for this class was generated from the following file: +
Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_move_init.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_move_init.html new file mode 100644 index 000000000..e64a935f2 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_move_init.html @@ -0,0 +1,63 @@ + + +PARADISEO-MO: moMoveInit< M > Class Template Reference + + + + +
+ +
+ +

moMoveInit< M > Class Template Reference

Move (moMove) initializer. +More... +

+#include <moMoveInit.h> +

+

Inheritance diagram for moMoveInit< M >: +

+ +eoBF< M &, const M::EOType &, void > +eoFunctorBase + +List of all members. + +
+

Detailed Description

+

template<class M>
+ class moMoveInit< M >

+ +Move (moMove) initializer. +

+Class which allows to initiase a move. Only a description... An object that herits from this class needs to be designed to be used. +

+ +

+Definition at line 22 of file moMoveInit.h.


The documentation for this class was generated from the following file: +
Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_move_loop_expl.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_move_loop_expl.html new file mode 100644 index 000000000..35f2bd9ad --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_move_loop_expl.html @@ -0,0 +1,66 @@ + + +PARADISEO-MO: moMoveLoopExpl< M > Class Template Reference + + + + +
+ +
+ +

moMoveLoopExpl< M > Class Template Reference

Class which describes an iterative explorer. +More... +

+#include <moMoveLoopExpl.h> +

+

Inheritance diagram for moMoveLoopExpl< M >: +

+ +moMoveExpl< M > +eoBF< const M::EOType &, M::EOType &, void > +eoFunctorBase +moHCMoveLoopExpl< M > +moTSMoveLoopExpl< M > + +List of all members. + +
+

Detailed Description

+

template<class M>
+ class moMoveLoopExpl< M >

+ +Class which describes an iterative explorer. +

+Only a description... moHCMoveLoopExpl and moTSMoveLoopExpl are exemples of class that are a moMoveLoopExpl. +

+ +

+Definition at line 21 of file moMoveLoopExpl.h.


The documentation for this class was generated from the following file: +
Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_move_loop_expl.png b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_move_loop_expl.png new file mode 100644 index 0000000000000000000000000000000000000000..82d725cec160ec109fdc0604bc0692bb3176ad12 GIT binary patch literal 2000 zcmbVNc~H~W77m*rVqjE61QoU7fn?w^Jd!qaliS_nLB6ZeD|F1W_o(K ztykZw4uL?{yMN#3V4)<7sTOhe>eo98t(4m==~jak`|IphikcR%(AGj#sz;=@wM(MC}muiExY;E zR%m29A4!Vbpud3qh&S=h9SfNtt9=l&cGWNApXXcG!0P{#l61ycXxXFU2xzT>eWx~c z&ZqNQbjsL)DRf_$oGlR!HcsIg{@PTLy11qGv0>$N<|WZf4Tj#W0J30Kx`3VTq1x16Bv)nVqGPS z1MK$VZ=w0SN3$Y&IJ^XY!3@GvN15RGXK>+jId$Jyw)CQ~Pp2z4es`#B-Iz39sxhK2 zaavfKXA{(?l?fp~mS+^f)Fi3@65wgD^V^`QL7cQN1z-Y`c; z4>jqe`Ql8#1WjQ1!(_u#Vh3W#c-z5}tPde)t4&zgc|&gMtC2y`0i!u*Yz=<&c#{SB z=i|URC*iWc?#VX*J}vB!}m4nkii$)pst2QaA|uwbSFy37+;Fq@&C)dJcc~ zjiC@y+XYRb=Q;h$%rOvB^Awfa^A^z(?_9m?&Q#3bSwt) zG$taQ)e5*#05*d0uy|L69!HoxUv$Z>2A-9zwRvQ^<^(`QFXzE@(;L^Q<{Ui?HB?v} zq{DO<9lnkEcti_9Mo^5dhiy{s=o=w?>e7^PiQ2$@K!PCTT{K{oR}I4Sj-|$+#adxM zuGLf9MawzP_iG-xFmN5Tws~86@mFQW;9TETvZ_-_1P~DP)tyt(`>RH^C}DkHsvIsd-AixjA+^2`nXsJ#W_y9E`F$o&)45-1oQi|Nl{(FkusHA_)v{f{#F&Lf8T7Fc#Aty_u#r53Nc z^LCsaVjRYG9QDB~)Dam{3y~AaW{*`Cs2{}*Oeg?>spyB?%iUuCzDGBywm3L`(#-r* z`GXkrw-P1?c|Lo9m>O>?g5(d>(0Z!2igC> z%}YA%mScZk-XkACv$>N5D@=*sxd zy?5y1dI46<7r(BI5ac@&Vrb7acJ!n>{BE;9fClyL11yn_o+LLujDxd}Q8ny+MtEey ze$pMulHP7k*7HH#=O~%qurD$?LEe7G?0r;IQn@Hms7~Y4^-U`l$H&Q!;z-V5#m`` zscWQ5oq;dyP?&)qCj#ACucq0L`&XNz0gz=ye^D7^7|70K3U%2#`E)U+C3 zN?rZUzyt-LwpBjlcQ;vNC0%&mk9}#xJ*b&^Eq_|Ew}WBqL^rybd$qc2zI9L-0OWcz znG=};utXZkMv|Iy)9zVy6NUHcqH5nKoH$+U5A0dLzl{YXAcu*F9fjS*yn>VV=P;Cg zOlr?!MZ~evh;H+IF#Q6z*(OQ9*2T)R%hTKTR8(z#LAA*LxvWr9Wj{1(^NZKge8yAN uRj(gSsowd;zwCS;$8xqC1;GQZuPD@14v_iYK`rv{7vhfaZ~>iyQ~wJzu){0> literal 0 HcmV?d00001 diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_move_select-members.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_move_select-members.html new file mode 100644 index 000000000..2a85d934b --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_move_select-members.html @@ -0,0 +1,45 @@ + + +PARADISEO-MO: Member List + + + + +
+ +
+ +

moMoveSelect< M > Member List

This is the complete list of members for moMoveSelect< M >, including all inherited members.

+ + + + + + + +
Fitness typedefmoMoveSelect< M >
functor_category()eoBF< M &, M::EOType::Fitness &, void > [static]
init(const Fitness &__fit)=0moMoveSelect< M > [pure virtual]
operator()(M &, M::EOType::Fitness &)=0eoBF< M &, M::EOType::Fitness &, void > [pure virtual]
update(const M &__move, const Fitness &__fit)=0moMoveSelect< M > [pure virtual]
~eoBF()eoBF< M &, M::EOType::Fitness &, void > [virtual]
~eoFunctorBase()eoFunctorBase [virtual]


Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_move_select.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_move_select.html new file mode 100644 index 000000000..9de2782c8 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_move_select.html @@ -0,0 +1,153 @@ + + +PARADISEO-MO: moMoveSelect< M > Class Template Reference + + + + +
+ +
+ +

moMoveSelect< M > Class Template Reference

Class that describes a move selector (moMove). +More... +

+#include <moMoveSelect.h> +

+

Inheritance diagram for moMoveSelect< M >: +

+ +eoBF< M &, M::EOType::Fitness &, void > +eoFunctorBase +moBestImprSelect< M > +moFirstImprSelect< M > +moRandImprSelect< M > + +List of all members. + + + + + + + + + + + + +

Public Types

+typedef M::EOType::Fitness Fitness
 Alias for the fitness.

Public Member Functions

virtual void init (const Fitness &__fit)=0
 Procedure which initialises all that the move selector needs including the initial fitness.
virtual bool update (const M &__move, const Fitness &__fit)=0
 Function which updates the best solutions.
+

Detailed Description

+

template<class M>
+ class moMoveSelect< M >

+ +Class that describes a move selector (moMove). +

+It iteratively considers some moves (moMove) and their associated fitnesses. The best move is so regularly updated. At any time, it could be accessed. +

+ +

+Definition at line 32 of file moMoveSelect.h.


Member Function Documentation

+ +
+
+
+template<class M>
+ + + + + + + + + +
virtual void moMoveSelect< M >::init (const Fitness __fit  )  [pure virtual]
+
+
+ +

+Procedure which initialises all that the move selector needs including the initial fitness. +

+In order to know the fitness of the solution, for which the neighborhood will be soon explored

+

Parameters:
+ + +
__fit the current fitness.
+
+ +

+Implemented in moBestImprSelect< M >, moFirstImprSelect< M >, and moRandImprSelect< M >. +

+

+ +

+
+
+template<class M>
+ + + + + + + + + + + + + + + + + + +
virtual bool moMoveSelect< M >::update (const M &  __move,
const Fitness __fit 
) [pure virtual]
+
+
+ +

+Function which updates the best solutions. +

+

Parameters:
+ + + +
__move a new move.
__fit a fitness linked to the new move.
+
+
Returns:
a boolean that expresses the need to resume the exploration.
+ +

+Implemented in moBestImprSelect< M >, and moRandImprSelect< M >. +

+

+


The documentation for this class was generated from the following file: +
Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_move_select.png b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_move_select.png new file mode 100644 index 0000000000000000000000000000000000000000..10bda515a7357fea269e9504ccda8891cc87c296 GIT binary patch literal 1886 zcmcIlc~BBq97gjBLd^xm3y&Rks zExe*c%{0wwbOCP-vJ}g*WAhF}VcB-J-Ddh@|7d5v_rC9&_nY_L%=>=x&SSiGgMnH= z0002q4S0IY#Xb-Uae=^XXOUO`GQ%-#bii9{lm5=nb$X;8jYeID)Y?a3XI7g8$| z>+R(OKu(RG000yg_P9A8NWAv`8a77YsEV59iqO2XJGKYe4j!yE5e0Vmc%JgK%^yX! z@}bWQ*U3yAGEObn=&c!G0T+T4R_C`1Y+aYr#ml<)5l`FyM)VG%YR3%1oKb+i`)C$1 zym7y0c=N6ztj+`yvYDK@!XwjXEa_F|2B&@`X`vjbI-Q6k<4A~~#6LR6u##6kan8!* zO=s-!l&wV0EW$-o^O8rd;hiSKMh;1UQg$o2;gm;=gDlF@CpR!Ei7m$CMkjGRQYU! zFqwYgD^LVdOIj8fNbuE%q9+ucL8`93vJX_5082S@(+m$T8;J-fV_Jmo5B~H8XW6mb?vphRa?$L2?2z5B~ow~gEP`urNoG|94>BFsIxhZMlm7pi{ardNb}I%y$=ygV{~8BlM9uB z)DB0YZ(|nLZ0NcjcJRX$T<9qJKDK^p+P}}1=@nnyn7IfvK~uDBu?tOxxo?khpj=H~ zjKMn7KKh)2Me*P#o`@K7n)yETG8^Bc{<0I;&B0`@#bNe8S&S4d$9J#3ndfQ3P@y;o z_r~gY?z1v$X_AuL(*0J|CZRA?R-1C{8d~%}kO-$n^uuI=mHhBFtfp#hScdjrr1!r( z^}j;20+)p?a6e?5-Vv?kx0*^1{sLvUGh;eCGv>myN~6dLxGUILY4kNp1`>t0)#ogT z;SRBSr1D!Eh;O%Pn33^XsCzWMmpOSPe|Act-hPHy+A8sG>ooKreBc8Nrsp4$pEk0-nAKd6w7sy79p`yAA|27eE$@2NGb^n9#QnN&!= zahYCyq|c(IAqa9EM`I116eZPDcAA(0^N7cE&IdPHomBG45v0|y1}p4wI>$pHccM)a zJo;*1rgqg48bS(D_0nx8S|aSW0>6P7a#R|apst@um3L34P@4Y?{$~<8|A%J7gYLPz z_F~)RA237eJC0KKv@w@ee?+~V6idcA`^_u z#&KDTU&mc!Eyl}%7Div0c;Gozeyh!+GN+-X<7Aqy4KsC1T^n$-r%|0-JPe-FADjR= z<1p4N8BQDdS?p;4vvIUOan{1!knPIVyDhXNR@HXuG%ghqN^D+iipzE`9TLYRCtFoU z-;@L#M2ubZT2N$@0cz>4W{bTgG5l9%X(U4@YS@gF~z10??UPjX)JCVJfYXxeLWv;sm94*&Q6c?(j&o zJ4t!|Y0s)d&KUNA`tH%CKt7-C|L{~?g!MbJtYSIh<04^M;#o2AvZUoFSXZ)oR(W>o z(do9^jTEtWop_g{$&|W0GB`SHk(DFZmy?cNP#Xjt*Wrz5JodfC{S8V%sH&;ZluDVS z(2N?`g5UrS69OOMVuqs(@_G~wn;w$vYS>P^M<7VA>_@J;sL~TI_(47DE?+!NzeBcr z{<=9|NRp=s@p8224Kiebwf*wGYoN6(e2xh#9}i+x5xzF(6C^KQ1b9FZ1gl65=8g|ph-P> literal 0 HcmV?d00001 diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_next_move.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_next_move.html new file mode 100644 index 000000000..9cb87e57e --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_next_move.html @@ -0,0 +1,64 @@ + + +PARADISEO-MO: moNextMove< M > Class Template Reference + + + + +
+ +
+ +

moNextMove< M > Class Template Reference

Class which allows to generate a new move (moMove). +More... +

+#include <moNextMove.h> +

+

Inheritance diagram for moNextMove< M >: +

+ +eoBF< M &, const M::EOType &, bool > +eoFunctorBase +moItRandNextMove< M > + +List of all members. + +
+

Detailed Description

+

template<class M>
+ class moNextMove< M >

+ +Class which allows to generate a new move (moMove). +

+Useful for the explorer (for moTS or moHC). Does nothing... An object that herits from this class needs to be designed for being used. +

+ +

+Definition at line 22 of file moNextMove.h.


The documentation for this class was generated from the following file: +
Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_next_move.png b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_next_move.png new file mode 100644 index 0000000000000000000000000000000000000000..f0527341dc80bb1e925f3d8355dfe85aabed29c4 GIT binary patch literal 1050 zcmV+#1m*jQP)006)Q0{{R3E+{xi0000OP)t-s|Ns90 z00960z@MLBkN^MxkN^Mxkifved&2+Z00001bW%=J06^y0W&i*Kut`KgRCt{2+-q*5 zFc1J>__M#6xxsLPYWG5sR_gtau*}Pk04Wr+G-9k&2^R2Sdzz+9?C#HH<)iyOURA;l z`(*)uVvABO{s+4@DAm$@*LF5d?VVbOA|VlS4Ioz|vMoEvKFw_gC&6tbt>LQyX}50D z_8!=6gS6c*Lv6J2o@&Qa?CJDnyK7tfoO^((SZrjYwrSm#Sil`I_r38Zdx=l>S>s*A zIiV0!4QZUqcoWcBao)a!9d_7f+gE-@K2#pZ4u4ns*XKR$&(Fs#?YqW#*kOkqcGzKu z9d_7Zhuzk`@_+xk-fs!}N}JOSlrmjpKO-&P5Xa(&^!7R5Mt{D04#n>IybE@fa$r)9 zTuwuvo>(r7w1UQ2&VU?Ux8<_Gv~4fWj7hqnvdQ_JJgaOdl+sSg4|n)DB7Tgy&wVe= zib#J?o4WO6TOMW1eGX$zvG^$~8!W}7m+Uqc0gw|m$sTpQE8DY1c82mm%4~sBIgw!cMuW1)C`4(TW`Hdb=0L+tQ2V z1D^KEj`|YjIaSnbFYjOT{*^}L# z<-*sJbsOy+S^e2N%<6Twe?P~~z4TN5mV|u=`^wMASN?DCu6E?d?q%OK&chBn?6AWQ zJM6H-4m<3&He6PQZfMd0-zi~-y;gd8*vmlooIqaWkBh~9CVlkD%C%MdyS*-n*UCkLm!ov26Ty(!!zFWXIN=2BWeu`p$#(%jbO zy8Q~@XruOTCiHT|CfkjB1HgLPr+2-=H`{ssmf5so+ zkxrmW<85=dj*PbiFj<^ye4{O!2|80O2RIgsE4uxv{Pg#=u)_}fh<)fY@}cta53lg^ Uu5vfNJOBUy07*qoM6N<$f|C>-<^TWy literal 0 HcmV?d00001 diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_no_aspir_crit-members.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_no_aspir_crit-members.html new file mode 100644 index 000000000..b0b5df8ee --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_no_aspir_crit-members.html @@ -0,0 +1,44 @@ + + +PARADISEO-MO: Member List + + + + +
+ +
+ +

moNoAspirCrit< M > Member List

This is the complete list of members for moNoAspirCrit< M >, including all inherited members.

+ + + + + + +
functor_category()eoBF< const M &, const M::EOType::Fitness &, bool > [static]
init()moNoAspirCrit< M > [inline, private, virtual]
operator()(const M &__move, const typename M::EOType::Fitness &__sol)moNoAspirCrit< M > [inline, private]
moAspirCrit::operator()(const M &, const M::EOType::Fitness &)=0eoBF< const M &, const M::EOType::Fitness &, bool > [pure virtual]
~eoBF()eoBF< const M &, const M::EOType::Fitness &, bool > [virtual]
~eoFunctorBase()eoFunctorBase [virtual]


Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_no_aspir_crit.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_no_aspir_crit.html new file mode 100644 index 000000000..ff11651ce --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_no_aspir_crit.html @@ -0,0 +1,142 @@ + + +PARADISEO-MO: moNoAspirCrit< M > Class Template Reference + + + + +
+ +
+ +

moNoAspirCrit< M > Class Template Reference

One of the possible aspiration criterion (moAspirCrit). +More... +

+#include <moNoAspirCrit.h> +

+

Inheritance diagram for moNoAspirCrit< M >: +

+ +moAspirCrit< M > +eoBF< const M &, const M::EOType::Fitness &, bool > +eoFunctorBase + +List of all members. + + + + + + + + +

Private Member Functions

bool operator() (const M &__move, const typename M::EOType::Fitness &__sol)
 Function which describes the aspiration criterion behaviour.
void init ()
 Procedure which initialises all that needs a moNoAspirCrit.
+

Detailed Description

+

template<class M>
+ class moNoAspirCrit< M >

+ +One of the possible aspiration criterion (moAspirCrit). +

+The simplest : never satisfied. +

+ +

+Definition at line 21 of file moNoAspirCrit.h.


Member Function Documentation

+ +
+
+
+template<class M>
+ + + + + + + + + + + + + + + + + + +
bool moNoAspirCrit< M >::operator() (const M &  __move,
const typename M::EOType::Fitness &  __sol 
) [inline, private]
+
+
+ +

+Function which describes the aspiration criterion behaviour. +

+Does nothing.

+

Parameters:
+ + + +
__move a move.
__sol a fitness.
+
+
Returns:
FALSE.
+ +

+Definition at line 32 of file moNoAspirCrit.h. +

+

+ +

+
+
+template<class M>
+ + + + + + + + +
void moNoAspirCrit< M >::init (  )  [inline, private, virtual]
+
+
+ +

+Procedure which initialises all that needs a moNoAspirCrit. +

+Nothing... +

+Implements moAspirCrit< M >. +

+Definition at line 43 of file moNoAspirCrit.h. +

+

+


The documentation for this class was generated from the following file: +
Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_no_aspir_crit.png b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_no_aspir_crit.png new file mode 100644 index 0000000000000000000000000000000000000000..2faca5ab90b299f2807d78674afb81f03d1364ab GIT binary patch literal 1254 zcmeAS@N?(olHy`uVBq!ia0y~yU~~hr53n!;$*%P4n}C!=fKQ0)|NsAi%>Vxn%%7hy z0muU50|yRNANv0U$Ym@E@(X5gcy=R=fq|vQ)5S5QV$Rz+jh9EUVq?$|ty zs@nHbhv)Gx&Few?)>b>HOFsX>De5*e-)Cov-if0@5}(6X7E2~GdcWzJV($80W%{pR zJJCQM<-qRMJ=6Mkeu+9Jxw!Lj+r}Q#ryJwWuM{_4_GQM#JEu?XWIp50y)s8q|J?Dk zIQ5_@J6)b{eWq*}Z?isral#P|2}3Too?i)jejWP4$y@OEfH`M4e~*0qI<+4$vIhTt z{MaG&F!<|%8%O7Gy7e>(!gXL_{$e_|dOt(0Q*6z3nH~;SWjEdAjjne#iWYpHUlzW2 z=}-TVYwNs=XP?^H@U-mx(Splmm8WNX`xaNGkezkETH%^-W$D-NIjcXl9qE2*d~Da8 z`$kcTamSu-noxgOBXwbXu5D%V*%NI$E$Uxs9|;SPiZ`5<-B59O#|@=5t7gS*nQ&In zaQ}&)`nt)v|2mB-vQ|y_^Zcr`Th)3__- z*s~8}$5JA%AG@fdwem(rm<-o(Q~B^7R#(Z@zRP7qmhvv%AiIzKL{yB#Wa(WIhd1>p zSF`+?s;ctlWitD|)H4QR$FCUOJ7RdUEpS_*Pu_x?i8>$Gb6z)y(l0Z5;Q#1{hWu<3 zqxpQ*PS=iQ*{Mliyt*gt+n3u0Ub~g;&$-V(-GIF3@bKNgsCS=Z(b->jo*CAoI1Zu?KGT>IR8>%mCV z%I43DUrzb@WFgS8??26av|6-B;_JbRudOeI55;e&zx-bF!K(w-mzk6K@6D8x*geDe zU`L=ql1PsPF!^C;#vkx_zdrGhyjeuDffG>S++>;4@z<`1oGmxmn%nQZwtUU>;GW4} zZPy9zsaSQD&FbQ5#bbu=&4TJ=J|`#6@l-o?UbLc4;-%NI&QE>8iF5v#om2RH*Fy7g z$SpP7C5LR~q&GMB9A47%EyG+_N>|$7C--S}+rx$M*{H74(_KTn=_{qO~wUwf{7PQLe{^6f@jwKu=dT;G!p n^wR(T>0Q@>Sr!`GU&I&PPtiC!zrYVzC^2}t`njxgN@xNA;L~8! literal 0 HcmV?d00001 diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_rand_impr_select-members.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_rand_impr_select-members.html new file mode 100644 index 000000000..de70078b6 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_rand_impr_select-members.html @@ -0,0 +1,48 @@ + + +PARADISEO-MO: Member List + + + + +
+ +
+ +

moRandImprSelect< M > Member List

This is the complete list of members for moRandImprSelect< M >, including all inherited members.

+ + + + + + + + + + +
Fitness typedefmoRandImprSelect< M >
functor_category()eoBF< M &, M::EOType::Fitness &, void > [static]
init(const Fitness &__fit)moRandImprSelect< M > [inline, virtual]
init_fitmoRandImprSelect< M > [private]
operator()(M &__move, Fitness &__fit)moRandImprSelect< M > [inline, virtual]
update(const M &__move, const Fitness &__fit)moRandImprSelect< M > [inline, virtual]
vect_better_fitmoRandImprSelect< M > [private]
vect_better_movesmoRandImprSelect< M > [private]
~eoBF()eoBF< M &, M::EOType::Fitness &, void > [virtual]
~eoFunctorBase()eoFunctorBase [virtual]


Generated on Tue Jun 26 13:18:41 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_rand_impr_select.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_rand_impr_select.html new file mode 100644 index 000000000..a5ca09c0c --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_rand_impr_select.html @@ -0,0 +1,227 @@ + + +PARADISEO-MO: moRandImprSelect< M > Class Template Reference + + + + +
+ +
+ +

moRandImprSelect< M > Class Template Reference

One of the possible moMove selector (moMoveSelect). +More... +

+#include <moRandImprSelect.h> +

+

Inheritance diagram for moRandImprSelect< M >: +

+ +moMoveSelect< M > +eoBF< M &, M::EOType::Fitness &, void > +eoFunctorBase + +List of all members. + + + + + + + + + + + + + + + + + + + + + + + + + +

Public Types

+typedef M::EOType::Fitness Fitness
 Alias for the fitness.

Public Member Functions

void init (const Fitness &__fit)
 Procedure which all that needs a moRandImprSelect.
bool update (const M &__move, const Fitness &__fit)
 Function that updates the fitness and move vectors.
void operator() (M &__move, Fitness &__fit) throw (EmptySelection)
 The move selection.

Private Attributes

+Fitness init_fit
 Fitness of the current solution.
+std::vector< Fitnessvect_better_fit
 Candidate fitnesse vector.
+std::vector< M > vect_better_moves
 Candidate move vector.
+

Detailed Description

+

template<class M>
+ class moRandImprSelect< M >

+ +One of the possible moMove selector (moMoveSelect). +

+All the neighbors are considered. One of them that enables an improvment of the objective function is choosen. +

+ +

+Definition at line 25 of file moRandImprSelect.h.


Member Function Documentation

+ +
+
+
+template<class M>
+ + + + + + + + + +
void moRandImprSelect< M >::init (const Fitness __fit  )  [inline, virtual]
+
+
+ +

+Procedure which all that needs a moRandImprSelect. +

+Give a value to the initialise fitness. Clean the move and fitness vectors.

+

Parameters:
+ + +
__fit the current best fitness
+
+ +

+Implements moMoveSelect< M >. +

+Definition at line 40 of file moRandImprSelect.h. +

+References moRandImprSelect< M >::init_fit, moRandImprSelect< M >::vect_better_fit, and moRandImprSelect< M >::vect_better_moves. +

+

+ +

+
+
+template<class M>
+ + + + + + + + + + + + + + + + + + +
bool moRandImprSelect< M >::update (const M &  __move,
const Fitness __fit 
) [inline, virtual]
+
+
+ +

+Function that updates the fitness and move vectors. +

+if a move give a better fitness than the initial fitness, it is saved and the fitness too.

+

Parameters:
+ + + +
__move a new move.
__fit a new fitness associated to the new move.
+
+
Returns:
TRUE.
+ +

+Implements moMoveSelect< M >. +

+Definition at line 56 of file moRandImprSelect.h. +

+References moRandImprSelect< M >::init_fit, moRandImprSelect< M >::vect_better_fit, and moRandImprSelect< M >::vect_better_moves. +

+

+ +

+
+
+template<class M>
+ + + + + + + + + + + + + + + + + + +
void moRandImprSelect< M >::operator() (M &  __move,
Fitness __fit 
) throw (EmptySelection) [inline, virtual]
+
+
+ +

+The move selection. +

+One the saved move is randomly chosen.

+

Parameters:
+ + + +
__move the reference of the move that can be initialised by the function.
__fit the reference of the fitness that can be initialised by the function.
+
+
Exceptions:
+ + +
EmptySelection If no move which improves the current fitness are found.
+
+ +

+Implements eoBF< M &, M::EOType::Fitness &, void >. +

+Definition at line 77 of file moRandImprSelect.h. +

+References eoRng::random(), moRandImprSelect< M >::vect_better_fit, and moRandImprSelect< M >::vect_better_moves. +

+

+


The documentation for this class was generated from the following file: +
Generated on Tue Jun 26 13:18:41 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_rand_impr_select.png b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_rand_impr_select.png new file mode 100644 index 0000000000000000000000000000000000000000..b935a8e2fa9abdb9411bab10b463c3c2bc1e48d9 GIT binary patch literal 1076 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K54zMr-Ny)Vxn%%7hy z0muU50|yRNANv0U$Ym@E@(X5gcy=R=fr0syr;B4q#hkaZqstyE@U*?1Ug>tLafa-f zoE83e{|m8kax$0s$;5jZi{{>qVEYou@#u-YPd)qem;N$Qb=D2cG7Jn2uX?&f_j4^M zbvf$wdX+eHz^>0F^EKX0;JC?jBF%+u0$0#;Ifieu?np2MZ8H$^VELrESEyT=K_Sp! z8c)M4=95zInLX@Yacp6z%)X@0-%oUfl3SwTxl=GY3;{j-&pY z0_L$!VrD6Mt+QjXMFX?N0doe4e-U-tYUaFqc$TrQ_FqZE`Sbnqd&I)Wx zL>X30Ny!SzeZjWzgx89=D29NOyh*$bybf0;u2T*u(Fzn3_D$Os$MWo<>6is@__<;E3bXBTAWFQ)13Cy>@ik zWXe5n`thI_Lidwx->_7?Nlvz`TG_t&J?q&`RZD7Cn=7;bSjli${&ai2L1lTv!%cS! zpoHfO24HBRqFoPvuFn95ZQSk5t2M^H7haX@Jy2oEP$H!wCb@{!p!U5H!^N%?dFgV# zUAz6Z$27h*o+2CmouMJ`O_DB~_QF1cV}8q5i@M)ZR(aFi@Gjvs;|y6_S=dkrjOW(g$wBQr)-M;0p5F_&rJ0{g{%WhsuD<_)w<2f5FENbS9sHWQHNjgj`FNCe*WT-RJfbvQR}p+ zbFRPBgKt5}&$1KSvKg5=wAnoLf~G6V-#C}e(V@Olut>CYj==Ls$8!u3=O;0D3vVud zZ5hHKv~nd=h1&-426o43XH6N{*_!0kBxl?)I&-A=4QE(|F`PAk$Im+oV<(M}IL + +PARADISEO-MO: moRandMove< M > Class Template Reference + + + + +
+ +
+ +

moRandMove< M > Class Template Reference

Random move generator. +More... +

+#include <moRandMove.h> +

+

Inheritance diagram for moRandMove< M >: +

+ +eoUF< M &, void > +eoFunctorBase + +List of all members. + +
+

Detailed Description

+

template<class M>
+ class moRandMove< M >

+ +Random move generator. +

+Only a description... An object that herits from this class needs to be designed in order to use a moSA. +

+ +

+Definition at line 21 of file moRandMove.h.


The documentation for this class was generated from the following file: +
Generated on Tue Jun 26 13:18:41 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_s_a-members.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_s_a-members.html new file mode 100644 index 000000000..3fe77d24f --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_s_a-members.html @@ -0,0 +1,58 @@ + + +PARADISEO-MO: Member List + + + + +
+ +
+ +

moSA< M > Member List

This is the complete list of members for moSA< M >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + +
className() consteoMonOp< M::EOType > [virtual]
contmoSA< M > [private]
cool_schedmoSA< M > [private]
eoMonOp()eoMonOp< M::EOType >
eoOp(OpType _type)eoOp< EOType >
eoOp(const eoOp &_eop)eoOp< EOType >
EOT typedefmoSA< M > [private]
Fitness typedefmoSA< M > [private]
full_evalmoSA< M > [private]
functor_category()eoUF< M::EOType &, bool > [static]
getType() consteoOp< EOType >
incr_evalmoSA< M > [private]
init_tempmoSA< M > [private]
moSA(moRandMove< M > &__move_rand, moMoveIncrEval< M > &__incr_eval, moSolContinue< EOT > &__cont, double __init_temp, moCoolingSchedule &__cool_sched, eoEvalFunc< EOT > &__full_eval)moSA< M > [inline]
move_randmoSA< M > [private]
operator()(EOT &__sol)moSA< M > [inline, virtual]
OpType enum nameeoOp< EOType >
~eoFunctorBase()eoFunctorBase [virtual]
~eoOp()eoOp< EOType > [virtual]
~eoUF()eoUF< M::EOType &, bool > [virtual]


Generated on Tue Jun 26 13:18:41 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_s_a.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_s_a.html new file mode 100644 index 000000000..5366d319a --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_s_a.html @@ -0,0 +1,216 @@ + + +PARADISEO-MO: moSA< M > Class Template Reference + + + + +
+ +
+ +

moSA< M > Class Template Reference

Simulated Annealing (SA). +More... +

+#include <moSA.h> +

+

Inheritance diagram for moSA< M >: +

+ +moAlgo< M::EOType > +eoMonOp< M::EOType > +eoOp< EOType > +eoUF< M::EOType &, bool > +eoFunctorBase + +List of all members. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Public Member Functions

 moSA (moRandMove< M > &__move_rand, moMoveIncrEval< M > &__incr_eval, moSolContinue< EOT > &__cont, double __init_temp, moCoolingSchedule &__cool_sched, eoEvalFunc< EOT > &__full_eval)
 SA constructor.
bool operator() (EOT &__sol)
 function that launches the SA algorithm.

Private Types

+typedef M::EOType EOT
 Alias for the type.
+typedef EOT::Fitness Fitness
 Alias for the fitness.

Private Attributes

+moRandMove< M > & move_rand
 A move generator (generally randomly).
+moMoveIncrEval< M > & incr_eval
 A (generally) efficient evaluation function.
+moSolContinue< EOT > & cont
 Stopping criterion before temperature update.
+double init_temp
 Initial temperature.
+moCoolingSchedulecool_sched
 The cooling schedule.
+eoEvalFunc< EOT > & full_eval
 A full evaluation function.
+

Detailed Description

+

template<class M>
+ class moSA< M >

+ +Simulated Annealing (SA). +

+Class that describes a Simulated Annealing algorithm. +

+ +

+Definition at line 30 of file moSA.h.


Constructor & Destructor Documentation

+ +
+
+
+template<class M>
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
moSA< M >::moSA (moRandMove< M > &  __move_rand,
moMoveIncrEval< M > &  __incr_eval,
moSolContinue< EOT > &  __cont,
double  __init_temp,
moCoolingSchedule __cool_sched,
eoEvalFunc< EOT > &  __full_eval 
) [inline]
+
+
+ +

+SA constructor. +

+All the boxes used by a SA need to be given.

+

Parameters:
+ + + + + + + +
__move_rand a move generator (generally randomly).
__incr_eval a (generaly) efficient evaluation function
__cont a stopping criterion.
__init_temp the initial temperature.
__cool_sched a cooling schedule, describes how the temperature is modified.
__full_eval a full evaluation function.
+
+ +

+Definition at line 58 of file moSA.h. +

+

+


Member Function Documentation

+ +
+
+
+template<class M>
+ + + + + + + + + +
bool moSA< M >::operator() (EOT __sol  )  [inline, virtual]
+
+
+ +

+function that launches the SA algorithm. +

+As a moTS or a moHC, the SA can be used for HYBRIDATION in an evolutionary algorithm.

+

Parameters:
+ + +
__sol a solution to improve.
+
+
Returns:
TRUE.
+ +

+Implements eoUF< M::EOType &, bool >. +

+Definition at line 80 of file moSA.h. +

+References moSA< M >::cont, moSA< M >::cool_sched, moSA< M >::full_eval, moSA< M >::incr_eval, moSA< M >::init_temp, moSA< M >::move_rand, and eoRng::uniform(). +

+

+


The documentation for this class was generated from the following file: +
Generated on Tue Jun 26 13:18:41 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_s_a.png b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_s_a.png new file mode 100644 index 0000000000000000000000000000000000000000..e14866c803c7c4f0523a036fb3d13d1120177e24 GIT binary patch literal 1521 zcmcIkeKgYx7@m9$jf+UiF41*Ek!#G)XYjG;_iU81`rVaazN7^i3lU0N3Nk*RCK zRn2^*D589fX~~pk*=P=C?8ff8=bn4cJ?Gv(?>X=DywCgm_nh~ z*SX1P5J-`LbUz$;v3!vn+RV1vp4*=^=NKt;{j3Bm=6-p$RXV&*(u*uA^KMRC)re80 zzxXk`YIx}e{hgIa8A%;}#8L8a$-z={B%A>A+6#?_mg8=i(j;OjqGKM+d@y%$h`M%N z-<7e?o6(DPz;#{bL>uA=ZO!{|kdyfi>fA(waD=(wSLOiE!N9e0qKU?;jkeXMmhgS8JSj_Jv)=*1P7tP3d+>bdsE}{`Gt;Gwpz)sItuirq10siMlYMl@s2W~qx&Yan9k>Zz^^<=cJJ>*mW0R@I{_3{HDl@dR7cv54q z=^YIjW>~MF)tB85S)}Gogoe49 zEsWs}{6aX5kDx^o{J?rE^uz6CTLfJ1#U>ErDE{W=((5&%wXmR9IgG($gI_;w?fX>Y z+&Qs|KE@(Vz#bQ4BhhY&kAd|p@%(&CHzG`NCx5S%8H}B^HF7Sr{AR~*A`gn9m)iAR zd&b*yb<xD~A?s$-5E)mF$Ev1|ZNDb&;k-`=(G z#-=EkY`sm(-z&|>6*E1?C2J8ie)7vWtzc4x3N|_0Qxa}ANopUm9PSH}lxPz3v8Mcm zmgW0{NMl1y{PGvMvKanx>{Ktk%D&!f zerLLw>n6MGx9DTV%H*=F8)SWc zKB=6;U`M>z=`NA|XAsf@ + +PARADISEO-MO: Member List + + + + +
+ +
+ +

moSimpleMoveTabuList< M > Member List

This is the complete list of members for moSimpleMoveTabuList< M >, including all inherited members.

+ + + + + + + + + + + + + +
add(const M &__move, const EOT &__sol)moSimpleMoveTabuList< M > [inline, virtual]
currentSizemoSimpleMoveTabuList< M > [private]
EOT typedefmoSimpleMoveTabuList< M >
functor_category()eoBF< const M &, const M::EOType &, bool > [static]
init()moSimpleMoveTabuList< M > [inline, virtual]
maxSizemoSimpleMoveTabuList< M > [private]
moSimpleMoveTabuList(unsigned int __size)moSimpleMoveTabuList< M > [inline]
operator()(const M &__move, const EOT &__sol)moSimpleMoveTabuList< M > [inline, virtual]
removeMove(const M &__move)moSimpleMoveTabuList< M > [inline, private]
tabuListmoSimpleMoveTabuList< M > [private]
update()moSimpleMoveTabuList< M > [inline, virtual]
~eoBF()eoBF< const M &, const M::EOType &, bool > [virtual]
~eoFunctorBase()eoFunctorBase [virtual]


Generated on Tue Jun 26 13:18:41 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_simple_move_tabu_list.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_simple_move_tabu_list.html new file mode 100644 index 000000000..5a9a66012 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_simple_move_tabu_list.html @@ -0,0 +1,283 @@ + + +PARADISEO-MO: moSimpleMoveTabuList< M > Class Template Reference + + + + +
+ +
+ +

moSimpleMoveTabuList< M > Class Template Reference

Class describing a move tabu list with a limited memory. +More... +

+#include <moSimpleMoveTabuList.h> +

+

Inheritance diagram for moSimpleMoveTabuList< M >: +

+ +moTabuList< M > +eoBF< const M &, const M::EOType &, bool > +eoFunctorBase + +List of all members. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Public Types

+typedef M::EOType EOT
 Alias for the type.

Public Member Functions

moSimpleMoveTabuList (unsigned int __size)
 Constructor.
bool operator() (const M &__move, const EOT &__sol)
 Function that indicates if, in a given state, the _move is tabu or not.
void add (const M &__move, const EOT &__sol)
 Procedure to add a move in the tabu list.
void update ()
 Procedure that updates the tabu list content.
void init ()
 Procedure which initialises the tabu list.

Private Member Functions

void removeMove (const M &__move)
 Procedure that removes a given move from the tabu list (if it is into, else do nothing).

Private Attributes

+unsigned int maxSize
 The maximum size of the tabu list.
+unsigned int currentSize
 The current size of the tabu list.
+std::list< M > tabuList
 The move tabu list.
+

Detailed Description

+

template<class M>
+ class moSimpleMoveTabuList< M >

+ +Class describing a move tabu list with a limited memory. +

+ +

+Definition at line 22 of file moSimpleMoveTabuList.h.


Member Function Documentation

+ +
+
+
+template<class M>
+ + + + + + + + + + + + + + + + + + +
bool moSimpleMoveTabuList< M >::operator() (const M &  __move,
const EOT __sol 
) [inline, virtual]
+
+
+ +

+Function that indicates if, in a given state, the _move is tabu or not. +

+

Parameters:
+ + + +
__move A given moMove.
__sol A solution.
+
+
Returns:
true or false.
+ +

+Implements eoBF< const M &, const M::EOType &, bool >. +

+Definition at line 46 of file moSimpleMoveTabuList.h. +

+References moSimpleMoveTabuList< M >::tabuList. +

+

+ +

+
+
+template<class M>
+ + + + + + + + + + + + + + + + + + +
void moSimpleMoveTabuList< M >::add (const M &  __move,
const EOT __sol 
) [inline, virtual]
+
+
+ +

+Procedure to add a move in the tabu list. +

+The two parameters have not to be modified so they are constant parameters.

+

Parameters:
+ + + +
__move a new tabu move.
__sol the origianl solution associated to this move.
+
+ +

+Implements moTabuList< M >. +

+Definition at line 60 of file moSimpleMoveTabuList.h. +

+References moSimpleMoveTabuList< M >::currentSize, moSimpleMoveTabuList< M >::maxSize, moSimpleMoveTabuList< M >::removeMove(), and moSimpleMoveTabuList< M >::tabuList. +

+

+ +

+
+
+template<class M>
+ + + + + + + + +
void moSimpleMoveTabuList< M >::update (  )  [inline, virtual]
+
+
+ +

+Procedure that updates the tabu list content. +

+Generally, a counter associated to each saved move is decreased by one. +

+Implements moTabuList< M >. +

+Definition at line 82 of file moSimpleMoveTabuList.h. +

+

+ +

+
+
+template<class M>
+ + + + + + + + +
void moSimpleMoveTabuList< M >::init (  )  [inline, virtual]
+
+
+ +

+Procedure which initialises the tabu list. +

+Can be useful if the data structure needs to be allocated before being used. +

+Implements moTabuList< M >. +

+Definition at line 88 of file moSimpleMoveTabuList.h. +

+

+ +

+
+
+template<class M>
+ + + + + + + + + +
void moSimpleMoveTabuList< M >::removeMove (const M &  __move  )  [inline, private]
+
+
+ +

+Procedure that removes a given move from the tabu list (if it is into, else do nothing). +

+

Parameters:
+ + +
__move A given moMove.
+
+ +

+Definition at line 100 of file moSimpleMoveTabuList.h. +

+References moSimpleMoveTabuList< M >::tabuList. +

+Referenced by moSimpleMoveTabuList< M >::add(). +

+

+


The documentation for this class was generated from the following file: +
Generated on Tue Jun 26 13:18:41 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_simple_move_tabu_list.png b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_simple_move_tabu_list.png new file mode 100644 index 0000000000000000000000000000000000000000..b291321faaf17e8c6100bc5ee1e17a61b49db06a GIT binary patch literal 1368 zcmeAS@N?(olHy`uVBq!ia0y~yV3Yu|53n!;N!?wEoz$e7@|Ns9$=Kuc(=Fd-< z0AzvjfddDs5B+}vR<;VfU8 z*%kkr|ApL4>~~G_6}r7i|Fh`wNhc0*^hNasmEAtQpLye-&3uRN2QNE3<>kjcJsk() za@IB~7SA!+cCF&}*IuK-?h|GI4ld&}Y`dbQXxcs@Wli(f%Kbh@H2`vPkCuLgXi~C&P_4RaVFBCoQOxaptoW z{x)Z&yp_e8Wdh&kbed-FvJ4jQ<5;(2*O50Bj59TUH}8>pW7Mi8oV5G=mLFTLs$5;Q zeb&5(ja*eW-{0LmGjD3;lf|s&+xOk;ta(r${3q>~^5K7rml&s3@u(fHt89w-{OEOm zjcX;R^VCW0lO$J7v6*rvfYT;*7g=$H9;;Pn4c?e{OxSqOZMM<(nMStrrmXz>Drf=6 z>$uNR3-|n$oN1MRU~a5h3D-yQ(-FKuMXZ|Bx7?nd@BQ_6vr*8#hgECBpXW2(zIJN% zQa9=P@U*I^Wwl4QPy6>V`{dRsw@%&WzqLmxc=f}#Mv<{4tzDm*&Gb(k2~Nq;W}kW9 zb=lLNJ5PKx^Xrw;zg-ns6DNDx{B88dy;pC^Kk?teyuV%Za`LG!GmLE0Vt?NS`c(qr z^QBLyoMb09M*J~-Uc#Dpssw0Ro#tlMUD?+A{xv$sMsZh9jxVZ@Pmg@?Lp=3PVp8=E z-?x12RX=W5g-hnM?@@bv>9XIcnU(LiiS0M-)Hj;+EobsE&+3(%PfskocXFyxT+BS( zuOi!D<~ZG3_Bm3|_HEINOKzt&n{CQfoj;}cwB@w^Q%@LkPyD%|TRSuL{^!(``OHD7 zbsK)J^)b{mdU@>askm7hs_VC#xJ#youkCq!_tWCD?^Eu09(&@T_VsJGwd=8MMH6-^ z87W-u@jKaMscddJd3VeN<4jMF(=&I?I(J$lzh;+S^rh~K-9DwJqBG?yzVQ9&R-B)H s>I?h-|9=<%;Q^Ko2}W + +PARADISEO-MO: Member List + + + + +
+ +
+ +

moSimpleSolutionTabuList< M > Member List

This is the complete list of members for moSimpleSolutionTabuList< M >, including all inherited members.

+ + + + + + + + + + + + + +
add(const M &__move, const EOT &__sol)moSimpleSolutionTabuList< M > [inline, virtual]
currentSizemoSimpleSolutionTabuList< M > [private]
EOT typedefmoSimpleSolutionTabuList< M >
functor_category()eoBF< const M &, const M::EOType &, bool > [static]
init()moSimpleSolutionTabuList< M > [inline, virtual]
maxSizemoSimpleSolutionTabuList< M > [private]
moSimpleSolutionTabuList(unsigned int __size)moSimpleSolutionTabuList< M > [inline]
operator()(const M &__move, const EOT &__sol)moSimpleSolutionTabuList< M > [inline, virtual]
removeSolution(const EOT &__sol)moSimpleSolutionTabuList< M > [inline, private]
tabuListmoSimpleSolutionTabuList< M > [private]
update()moSimpleSolutionTabuList< M > [inline, virtual]
~eoBF()eoBF< const M &, const M::EOType &, bool > [virtual]
~eoFunctorBase()eoFunctorBase [virtual]


Generated on Tue Jun 26 13:18:41 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_simple_solution_tabu_list.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_simple_solution_tabu_list.html new file mode 100644 index 000000000..a4c87ea70 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_simple_solution_tabu_list.html @@ -0,0 +1,316 @@ + + +PARADISEO-MO: moSimpleSolutionTabuList< M > Class Template Reference + + + + +
+ +
+ +

moSimpleSolutionTabuList< M > Class Template Reference

Class describing a solution tabu list with limited length. +More... +

+#include <moSimpleSolutionTabuList.h> +

+

Inheritance diagram for moSimpleSolutionTabuList< M >: +

+ +moTabuList< M > +eoBF< const M &, const M::EOType &, bool > +eoFunctorBase + +List of all members. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Public Types

+typedef M::EOType EOT
 Alias for the type.

Public Member Functions

 moSimpleSolutionTabuList (unsigned int __size)
 Constructor.
bool operator() (const M &__move, const EOT &__sol)
 Function that indicates if, in a given state, the _move is tabu or not.
void add (const M &__move, const EOT &__sol)
 Procedure to add a move in the tabu list.
void update ()
 Procedure that updates the tabu list content.
void init ()
 Procedure which initialises the tabu list.

Private Member Functions

void removeSolution (const EOT &__sol)
 Procedure that removes a given solution from the tabu list (if it is into, else does nothing).

Private Attributes

+unsigned int maxSize
 The maximum size of the tabu list.
+unsigned int currentSize
 The current size of the tabu list.
+std::list< EOTtabuList
 The solution tabu list.
+

Detailed Description

+

template<class M>
+ class moSimpleSolutionTabuList< M >

+ +Class describing a solution tabu list with limited length. +

+ +

+Definition at line 22 of file moSimpleSolutionTabuList.h.


Constructor & Destructor Documentation

+ +
+
+
+template<class M>
+ + + + + + + + + +
moSimpleSolutionTabuList< M >::moSimpleSolutionTabuList (unsigned int  __size  )  [inline]
+
+
+ +

+Constructor. +

+

Parameters:
+ + +
__size The maximum size of the solution tabu list.
+
+ +

+Definition at line 34 of file moSimpleSolutionTabuList.h. +

+References moSimpleSolutionTabuList< M >::currentSize. +

+

+


Member Function Documentation

+ +
+
+
+template<class M>
+ + + + + + + + + + + + + + + + + + +
bool moSimpleSolutionTabuList< M >::operator() (const M &  __move,
const EOT __sol 
) [inline, virtual]
+
+
+ +

+Function that indicates if, in a given state, the _move is tabu or not. +

+

Parameters:
+ + + +
__move A given moMove.
__sol A solution.
+
+
Returns:
true or false.
+ +

+Implements eoBF< const M &, const M::EOType &, bool >. +

+Definition at line 45 of file moSimpleSolutionTabuList.h. +

+References moSimpleSolutionTabuList< M >::tabuList. +

+

+ +

+
+
+template<class M>
+ + + + + + + + + + + + + + + + + + +
void moSimpleSolutionTabuList< M >::add (const M &  __move,
const EOT __sol 
) [inline, virtual]
+
+
+ +

+Procedure to add a move in the tabu list. +

+The two parameters have not to be modified so they are constant parameters.

+

Parameters:
+ + + +
__move a new tabu move.
__sol the origianl solution associated to this move.
+
+ +

+Implements moTabuList< M >. +

+Definition at line 64 of file moSimpleSolutionTabuList.h. +

+References moSimpleSolutionTabuList< M >::currentSize, moSimpleSolutionTabuList< M >::maxSize, moSimpleSolutionTabuList< M >::removeSolution(), and moSimpleSolutionTabuList< M >::tabuList. +

+

+ +

+
+
+template<class M>
+ + + + + + + + +
void moSimpleSolutionTabuList< M >::update (  )  [inline, virtual]
+
+
+ +

+Procedure that updates the tabu list content. +

+Generally, a counter associated to each saved move is decreased by one. +

+Implements moTabuList< M >. +

+Definition at line 91 of file moSimpleSolutionTabuList.h. +

+

+ +

+
+
+template<class M>
+ + + + + + + + +
void moSimpleSolutionTabuList< M >::init (  )  [inline, virtual]
+
+
+ +

+Procedure which initialises the tabu list. +

+Can be useful if the data structure needs to be allocated before being used. +

+Implements moTabuList< M >. +

+Definition at line 97 of file moSimpleSolutionTabuList.h. +

+

+ +

+
+
+template<class M>
+ + + + + + + + + +
void moSimpleSolutionTabuList< M >::removeSolution (const EOT __sol  )  [inline, private]
+
+
+ +

+Procedure that removes a given solution from the tabu list (if it is into, else does nothing). +

+

Parameters:
+ + +
__sol A given solution.
+
+ +

+Definition at line 109 of file moSimpleSolutionTabuList.h. +

+References moSimpleSolutionTabuList< M >::tabuList. +

+Referenced by moSimpleSolutionTabuList< M >::add(). +

+

+


The documentation for this class was generated from the following file: +
Generated on Tue Jun 26 13:18:41 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_simple_solution_tabu_list.png b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_simple_solution_tabu_list.png new file mode 100644 index 0000000000000000000000000000000000000000..df07eba57fabdbeea50b82bb1a8169547b89e02e GIT binary patch literal 1376 zcmeAS@N?(olHy`uVBq!ia0y~yV3Yu|53n!;N!?wEoz$e7@|Ns9$=Kuc(=Fd-< z0AzvjfddDs5B+}v-{<+(;SAp{ z^C|IL|EuzN+3rYqvd!>WmQ~53RU1N`tW-2*%4R(*cjnpuEbYhk(;+X6OwXO};IR3; z^r~UXw#mOPy^`Nu7kErxFtYFd%`4}s#iNe2raf=!DcxXqe>x}I=_!%Ne%=uJazsgZ z{;%)JC2?*#RyVaz?U-Wh{ko?AjFG%snzpciaL2^^DnGWT#Mr#r)$??+^~4kM&wBj% z@A^I4HmC9GleuSiZuzlemQMPfAGgCUe+N2Ymrt)=@M1&BZ?}b0cChWunByI=jp4(2 z{@V;0UeBJp-{jKvJ!vxaKpX}5 zHE?9UPTrzd>@$63qtU_%&$U}K+4p}=+~i6C-3gf{TBO~r&LmV{@c``6V!Ry+8%Y2>NvxI5G6N`0w z1COo0Z`$xUBK6q}@h~r93yE^h6h{ z)xS*GJZnyL@v-MiRzCBIvryXc=#$XqzpN>H*6=^d+Hm>Frk>AFt%4r~hfPjdeJjiA zu(W8&{`axFXUv^i`Fu4i|MY#g8t;6#^<=)!{-rm?y{uxFxg{ID*{*)VG=JZ}Q{_{p zUkK6MsX23**GXE&SYeRb_0_?Rht6i7&2Ibj&DN+guH8ROGFT|ecsJoS|BzMWtCx2rx6%F@i=pZU4dXIOk~Tt0E*+MJYk-99HJD^JV}xwlU_{o2(hYvSHsp8IX-kGQP2`Jc>V z8uvR-UwJV#t7N9s-gSR-r|2@6gnH$9En68>6l~qDDlmfevu|8Pa_f8sjvlw)TVg8vvd@qD{;>Ot7F z_UEa`KI}JiORco%^*+7D1Wj9pJ@-w!^1^4vu7{w|Xcb-i<%wwcyb(-hk zNw=*(AI-m@Vi>bfaXbIZ`GHA=^Ok9px~ZKN`zC*S$+z?q?E6po{Jirt-BWGldL#dw zxJjPIYLXMT+@E-6(k%_+Bb&ukKgWd52D)VK83ExR5ox#F)Y!6aov0C!oDi9=C&zBI zvv#_%<|+9nXEs?qDm`}W?CQ)ZTh8gMzRcvkJd&8bovp4jSt)h?RnvaR?IusCG!boFyt=akR{019P^00000 literal 0 HcmV?d00001 diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_sol_continue-members.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_sol_continue-members.html new file mode 100644 index 000000000..57e802542 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_sol_continue-members.html @@ -0,0 +1,43 @@ + + +PARADISEO-MO: Member List + + + + +
+ +
+ +

moSolContinue< EOT > Member List

This is the complete list of members for moSolContinue< EOT >, including all inherited members.

+ + + + + +
functor_category()eoUF< const EOT &, bool > [static]
init()=0moSolContinue< EOT > [pure virtual]
operator()(const EOT &)=0eoUF< const EOT &, bool > [pure virtual]
~eoFunctorBase()eoFunctorBase [virtual]
~eoUF()eoUF< const EOT &, bool > [virtual]


Generated on Tue Jun 26 13:18:41 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_sol_continue.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_sol_continue.html new file mode 100644 index 000000000..4fc916be8 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_sol_continue.html @@ -0,0 +1,94 @@ + + +PARADISEO-MO: moSolContinue< EOT > Class Template Reference + + + + +
+ +
+ +

moSolContinue< EOT > Class Template Reference

Class that describes a stop criterion for a solution-based heuristic. +More... +

+#include <moSolContinue.h> +

+

Inheritance diagram for moSolContinue< EOT >: +

+ +eoUF< const EOT &, bool > +eoFunctorBase +moGenSolContinue< EOT > + +List of all members. + + + + + +

Public Member Functions

virtual void init ()=0
 Procedure which initialises all that the stop criterion needs.
+

Detailed Description

+

template<class EOT>
+ class moSolContinue< EOT >

+ +Class that describes a stop criterion for a solution-based heuristic. +

+It allows to add an initialisation procedure to an object that is a unary function (eoUF). +

+ +

+Definition at line 22 of file moSolContinue.h.


Member Function Documentation

+ +
+
+
+template<class EOT>
+ + + + + + + + +
virtual void moSolContinue< EOT >::init (  )  [pure virtual]
+
+
+ +

+Procedure which initialises all that the stop criterion needs. +

+Generally, it allocates some data structures or initialises some counters. +

+Implemented in moGenSolContinue< EOT >. +

+

+


The documentation for this class was generated from the following file: +
Generated on Tue Jun 26 13:18:41 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_sol_continue.png b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_sol_continue.png new file mode 100644 index 0000000000000000000000000000000000000000..345d1b66d6bf7bd456e48737ef14bf095b031c61 GIT binary patch literal 913 zcmV;C18)3@P)RCt{2n_X_> zKnQ?6FZ*n`0ds=Y_Ck>=<^D(50p{OhCvG~4EJ4-QVVKVZqdLW~d`*$R%RfIujQde8 z093CiYw<;HyPvX_wx-WvkGT?i+`WF!#FyeBcHE!Dx5@`X*&Z~c z`5^Hnpr7Q!t72T^zK1*OK7T@PXN*73{d2z-_kO=!ihH$uFs^ZpYh2?R*SN-2nf1B) zYX4stx91YqFm`HVtdwFJNbyCgFHo&z!X9_${20GUexaJ44!ysA7>8W_-1qk=zP^cXl@FK#yc^$mH6=GU`JizCU-CD_7krG*UOv1a zdj;kfxu@%suZnT6%AIwepY^%q^IWT+&E;M#AB<~U;~Lkv#x<^SRbYy&%R1$)8TSKR zfVk!$udZ%m=J>L+iCq83T(_u_*IY3i*)3|aJ!j2zPFz$g&OoPLg@x5YSmY(gio$gX zeZ*aPbNGTq0Bdw;4Oo5w{6j6+r02SIkIVbwu9lmZ5*PHHz*_rTgU8&A8gT;+#&M{? zBd$B<@&*`jANiZPvZLcd8{aA)j^oQ$oAX!xA~}c&5_mDNbv~s0eUJ~oDaJMKd$_ai z^C#ps<*ix$EQ;07jB8xu8rQhSHLh{r!9DS?`TNXs>8m}TH|~H-rTZ)%Qf%2#-Jq`q zx~{Y#x0=k1hgABv#%(oS7gEC|b|m!+#ilcihicBVdpy92x`bs=ukRjfxCo_hDmI-F z`ZQChUV}~)Vs4w#R;Z2(4cBLDsCPBoGO1YF$NZ)%ErNTl&VuTgBOP%8D0QE8aey6e z9^E|T`qU9N?#^quUZ-EN;c8o2!=*01RX%Lv%N=Mum6@8(a!VPcSx!u&oLJ=pv|VXU nKK#BI*SPQDo^CCB?mqt?C$f!r7&{c500000NkvXXu0mjfJ7~mB literal 0 HcmV?d00001 diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_t_s-members.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_t_s-members.html new file mode 100644 index 000000000..2a1c902ac --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_t_s-members.html @@ -0,0 +1,58 @@ + + +PARADISEO-MO: Member List + + + + +
+ +
+ +

moTS< M > Member List

This is the complete list of members for moTS< M >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + +
className() consteoMonOp< M::EOType > [virtual]
contmoTS< M > [private]
eoMonOp()eoMonOp< M::EOType >
eoOp(OpType _type)eoOp< EOType >
eoOp(const eoOp &_eop)eoOp< EOType >
EOT typedefmoTS< M > [private]
first_timemoTS< M > [inline, private, static]
Fitness typedefmoTS< M > [private]
full_evalmoTS< M > [private]
functor_category()eoUF< M::EOType &, bool > [static]
getType() consteoOp< EOType >
moTS(moMoveInit< M > &__move_init, moNextMove< M > &__next_move, moMoveIncrEval< M > &__incr_eval, moTabuList< M > &__tabu_list, moAspirCrit< M > &__aspir_crit, moSolContinue< EOT > &__cont, eoEvalFunc< EOT > &__full_eval)moTS< M > [inline]
moTS(moMoveExpl< M > &__move_expl, moSolContinue< EOT > &__cont, eoEvalFunc< EOT > &__full_eval)moTS< M > [inline]
move_explmoTS< M > [private]
mutexmoTS< M > [inline, private, static]
operator()(EOT &__sol)moTS< M > [inline, virtual]
OpType enum nameeoOp< EOType >
~eoFunctorBase()eoFunctorBase [virtual]
~eoOp()eoOp< EOType > [virtual]
~eoUF()eoUF< M::EOType &, bool > [virtual]


Generated on Tue Jun 26 13:18:41 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_t_s.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_t_s.html new file mode 100644 index 000000000..d4fa317de --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_t_s.html @@ -0,0 +1,276 @@ + + +PARADISEO-MO: moTS< M > Class Template Reference + + + + +
+ +
+ +

moTS< M > Class Template Reference

Tabu Search (TS). +More... +

+#include <moTS.h> +

+

Inheritance diagram for moTS< M >: +

+ +moAlgo< M::EOType > +eoMonOp< M::EOType > +eoOp< EOType > +eoUF< M::EOType &, bool > +eoFunctorBase + +List of all members. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Public Member Functions

 moTS (moMoveInit< M > &__move_init, moNextMove< M > &__next_move, moMoveIncrEval< M > &__incr_eval, moTabuList< M > &__tabu_list, moAspirCrit< M > &__aspir_crit, moSolContinue< EOT > &__cont, eoEvalFunc< EOT > &__full_eval)
 Constructor of a moTS specifying all the boxes.
 moTS (moMoveExpl< M > &__move_expl, moSolContinue< EOT > &__cont, eoEvalFunc< EOT > &__full_eval)
 Constructor with less parameters.
bool operator() (EOT &__sol)
 Function which launchs the Tabu Search.

Private Types

+typedef M::EOType EOT
 Alias for the type.
+typedef EOT::Fitness Fitness
 Alias for the fitness.

Private Attributes

+moMoveExpl< M > & move_expl
 Neighborhood explorer.
+moSolContinue< EOT > & cont
 Stop criterion.
+eoEvalFunc< EOT > & full_eval
 Full evaluation function.

Static Private Attributes

+static bool first_time = true
 Boolean allowing to initialise the ptread_mutex_t in the constructor.
+static pthread_mutex_t mutex
 The lock.
+

Detailed Description

+

template<class M>
+ class moTS< M >

+ +Tabu Search (TS). +

+Generic algorithm that describes a tabu search. +

+ +

+Definition at line 30 of file moTS.h.


Constructor & Destructor Documentation

+ +
+
+
+template<class M>
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
moTS< M >::moTS (moMoveInit< M > &  __move_init,
moNextMove< M > &  __next_move,
moMoveIncrEval< M > &  __incr_eval,
moTabuList< M > &  __tabu_list,
moAspirCrit< M > &  __aspir_crit,
moSolContinue< EOT > &  __cont,
eoEvalFunc< EOT > &  __full_eval 
) [inline]
+
+
+ +

+Constructor of a moTS specifying all the boxes. +

+In this constructor, a moTSMoveLoopExpl is instanciated.

+

Parameters:
+ + + + + + + + +
__move_init move initialisation
__next_move neighborhood explorer
__incr_eval efficient evaluation
__tabu_list tabu list
__aspir_crit aspiration criterion
__cont stop criterion
__full_eval full evaluation function
+
+ +

+Definition at line 59 of file moTS.h. +

+References moTS< M >::first_time, and moTS< M >::mutex. +

+

+ +

+
+
+template<class M>
+ + + + + + + + + + + + + + + + + + + + + + + + +
moTS< M >::moTS (moMoveExpl< M > &  __move_expl,
moSolContinue< EOT > &  __cont,
eoEvalFunc< EOT > &  __full_eval 
) [inline]
+
+
+ +

+Constructor with less parameters. +

+The explorer is given in the parameters.

+

Parameters:
+ + + + +
__move_expl the explorer (generally different that a moTSMoveLoopExpl)
__cont stop criterion
__full_eval full evaluation function
+
+ +

+Definition at line 81 of file moTS.h. +

+References moTS< M >::first_time, and moTS< M >::mutex. +

+

+


Member Function Documentation

+ +
+
+
+template<class M>
+ + + + + + + + + +
bool moTS< M >::operator() (EOT __sol  )  [inline, virtual]
+
+
+ +

+Function which launchs the Tabu Search. +

+Algorithm of the tabu search. As a moSA or a moHC, it can be used for HYBRIDATION in an evolutionary algorithm. For security a lock (pthread_mutex_t) is closed during the algorithm.

+

Parameters:
+ + +
__sol a solution to improve.
+
+
Returns:
TRUE.
+ +

+Implements eoUF< M::EOType &, bool >. +

+Definition at line 104 of file moTS.h. +

+References moTS< M >::cont, moTS< M >::full_eval, moTS< M >::move_expl, and moTS< M >::mutex. +

+

+


The documentation for this class was generated from the following file: +
Generated on Tue Jun 26 13:18:41 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_t_s.png b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_t_s.png new file mode 100644 index 0000000000000000000000000000000000000000..8932f0e2f1113b44d96354bb83e87f7b227be69a GIT binary patch literal 1503 zcmcIkdsNZ~6vkmHnp$dRsiP71B^aBoz?sh1e)-D!7>$Ga;>1Bnuzusdjvu zsbC5^CDd}*YZ^<&%4c2mu&EnF(|E8tCL!7Z*?`LSf~C(Z*MR2zIIYq>YXNF zi6F$(=vN@nIywd!9CM~ZRT+Cq?z0|MITQH<>J4bt0H(@Y{B6~{c8Yi-kz`>HI-V_e zj#uhI?`@crr2j5AC2EUvjWbth`1i3~7KtmqMsgEo7-aCEW!*P(?pi6L&^3AJLWeES zs-nS(B4m>25Dl&Jdn;d$RN)c>?7>5QG=7q zl_jv4i$B4v53Rz@_W6{mEy7chc=#80llu zSi`FevL!utMPkgQ2Y$TvTW+a~lowgPF;e$Cm8V$FB8TQ2dxBv?4TK(tckvian{AZt zdsF}x>gq`tQAw7q6HaK|)Kt*|oZIc)++)1*dn*hC^Peg zYg&{!o!*iZmjmYk27oX7R?fLQ>A1Od)(ZDd{N@YMyy3NlqAdBV=GpodZ(}ci66MJY z?iA4RB8^a2CVQGagbAE}?kdf_H~d+h0osJK)y~U@da|RJ`?tnhc*9e!V5ZczCL$!t zrM96IKZ4=TI7?4kP+<@?bD4G8cGdg~U=VE`_G!&0>I;vQIl6MPlAgJJ?&u{X4N#aP z;Uv1mC>&|8+MySffxDi*4-s_HOI^FM_#*7^l@17z!K2XTcZ(6W2WN<3i0#x$Zu^i# zu+ydBJW~32!I1Jn+7_m1Y6{sJhWMUbZcUe{cPXxIEba`sWVn4)b1be8=6^!}rphU` zslUIu<1jOPk7K69sQ>KOdv+%Han8pRMSMUR0Y7$KPD7;;isqA4 zKon**qdK*!H-P67Xv-?Y{?jT@nfq5e$xab4*Nt0-u<<79qFVlTbJz|o6b?u&0sA3w zA4-)OHMrlByQ$f_+;U;AEt)3Gy3REtF4bd(%%&&61E`)=18MSe7+iZKe*mEpt2Rp> zYYL|(>67U)%j|!rVdmvC1P?L}+`2u8`$e-n zx!;=)BzFZ>us=T2F#pXRZiZ7{%D^U!S4c~%3jV{EZm_;)YWDr%?1%!ZgIpR!eIO)G zxn4+vICOb&<$&gCtKYKE~dC1*FM$AZ18IJiPXJSYb+aHN<_oA z51k(6F9RPOr9}*g^JQYtLMqE0PZXm<}y5L j`P-zi5PD1S8&8d4XM$4H3$|O)ePa*?g+=m1DA|7iQoqp{ literal 0 HcmV?d00001 diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_t_s_move_loop_expl-members.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_t_s_move_loop_expl-members.html new file mode 100644 index 000000000..8a96cd7a4 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_t_s_move_loop_expl-members.html @@ -0,0 +1,51 @@ + + +PARADISEO-MO: Member List + + + + +
+ +
+ +

moTSMoveLoopExpl< M > Member List

This is the complete list of members for moTSMoveLoopExpl< M >, including all inherited members.

+ + + + + + + + + + + + + +
aspir_critmoTSMoveLoopExpl< M > [private]
EOT typedefmoTSMoveLoopExpl< M > [private]
Fitness typedefmoTSMoveLoopExpl< M > [private]
functor_category()eoBF< const M::EOType &, M::EOType &, void > [static]
incr_evalmoTSMoveLoopExpl< M > [private]
moTSMoveLoopExpl(moMoveInit< M > &__move_init, moNextMove< M > &__next_move, moMoveIncrEval< M > &__incr_eval, moTabuList< M > &__tabu_list, moAspirCrit< M > &__aspir_crit)moTSMoveLoopExpl< M > [inline]
move_initmoTSMoveLoopExpl< M > [private]
move_selectmoTSMoveLoopExpl< M > [private]
next_movemoTSMoveLoopExpl< M > [private]
operator()(const EOT &__old_sol, EOT &__new_sol)moTSMoveLoopExpl< M > [inline, virtual]
tabu_listmoTSMoveLoopExpl< M > [private]
~eoBF()eoBF< const M::EOType &, M::EOType &, void > [virtual]
~eoFunctorBase()eoFunctorBase [virtual]


Generated on Tue Jun 26 13:18:41 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_t_s_move_loop_expl.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_t_s_move_loop_expl.html new file mode 100644 index 000000000..6c3aadc06 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_t_s_move_loop_expl.html @@ -0,0 +1,218 @@ + + +PARADISEO-MO: moTSMoveLoopExpl< M > Class Template Reference + + + + +
+ +
+ +

moTSMoveLoopExpl< M > Class Template Reference

Explorer for a Tabu Search algorithm. +More... +

+#include <moTSMoveLoopExpl.h> +

+

Inheritance diagram for moTSMoveLoopExpl< M >: +

+ +moMoveLoopExpl< M > +moMoveExpl< M > +eoBF< const M::EOType &, M::EOType &, void > +eoFunctorBase + +List of all members. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Public Member Functions

 moTSMoveLoopExpl (moMoveInit< M > &__move_init, moNextMove< M > &__next_move, moMoveIncrEval< M > &__incr_eval, moTabuList< M > &__tabu_list, moAspirCrit< M > &__aspir_crit)
 Constructor.
void operator() (const EOT &__old_sol, EOT &__new_sol)
 Procedure which lauches the exploration.

Private Types

+typedef M::EOType EOT
 Alias for the type.
+typedef M::EOType::Fitness Fitness
 Alias for the fitness.

Private Attributes

+moMoveInit< M > & move_init
 Move initialisation.
+moNextMove< M > & next_move
 Neighborhood explorer.
+moMoveIncrEval< M > & incr_eval
 Efficient evaluation.
+moBestImprSelect< M > move_select
 Move selector.
+moTabuList< M > & tabu_list
 Tabu list.
+moAspirCrit< M > & aspir_crit
 Aspiration criterion.
+

Detailed Description

+

template<class M>
+ class moTSMoveLoopExpl< M >

+ +Explorer for a Tabu Search algorithm. +

+It is used by a moTS. +

+ +

+Definition at line 30 of file moTSMoveLoopExpl.h.


Constructor & Destructor Documentation

+ +
+
+
+template<class M>
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
moTSMoveLoopExpl< M >::moTSMoveLoopExpl (moMoveInit< M > &  __move_init,
moNextMove< M > &  __next_move,
moMoveIncrEval< M > &  __incr_eval,
moTabuList< M > &  __tabu_list,
moAspirCrit< M > &  __aspir_crit 
) [inline]
+
+
+ +

+Constructor. +

+

Parameters:
+ + + + + + +
__move_init move initialisation
__next_move neighborhood explorer
__incr_eval efficient evaluation
__tabu_list tabu list
__aspir_crit aspiration criterion
+
+ +

+Definition at line 49 of file moTSMoveLoopExpl.h. +

+References moTSMoveLoopExpl< M >::aspir_crit, and moTSMoveLoopExpl< M >::tabu_list. +

+

+


Member Function Documentation

+ +
+
+
+template<class M>
+ + + + + + + + + + + + + + + + + + +
void moTSMoveLoopExpl< M >::operator() (const EOT __old_sol,
EOT __new_sol 
) [inline, virtual]
+
+
+ +

+Procedure which lauches the exploration. +

+The exploration continues while the chosen move is not in the tabu list or the aspiration criterion is true. If these 2 conditions are not true, the exploration stops if the move selector update function returns false.

+

Parameters:
+ + + +
__old_sol the initial solution
__new_sol the new solution
+
+ +

+Implements eoBF< const M::EOType &, M::EOType &, void >. +

+Definition at line 69 of file moTSMoveLoopExpl.h. +

+References moTSMoveLoopExpl< M >::aspir_crit, moTSMoveLoopExpl< M >::incr_eval, moTSMoveLoopExpl< M >::move_init, moTSMoveLoopExpl< M >::move_select, moTSMoveLoopExpl< M >::next_move, and moTSMoveLoopExpl< M >::tabu_list. +

+

+


The documentation for this class was generated from the following file: +
Generated on Tue Jun 26 13:18:41 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_t_s_move_loop_expl.png b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_t_s_move_loop_expl.png new file mode 100644 index 0000000000000000000000000000000000000000..717f30a1788ac8ef51945255e8a0eb8afaa89080 GIT binary patch literal 1577 zcmcgsTTqe-6h`xwiq@!GS}m(PvuKQEq~&@kGTU@BHIv^3Hcd?h6-o%@l3mnr)=M%| z;+mG)u2%klVv15;P*V#P@*4VXg03E8s$9bCl&qkO|4V^Zy;}{(=Ku$C!(anjV5}c8i$9) zrc?oSShj+73LBULIyL_Zsqh`l zPe|xv^_4Se^5%fZMqbU{^X8l$Stp$Pt|R&FqYU! zCzYk_vT8;pcRWkZv~TAdOeSO6Pk{snpuXFV|BJwfMGjZ&PH-o5nAs)@j9^X)v?Wnf z!yR!GZ&gPUwy0b){9i~Sp~&V=W7zmfoyv3#XSghSYESmEo91QA=L0)aJows{TzbEx zOV*UvegRHNM6`X_PTU-?fA*|LO)B>9p~tqqrzX?#!|Hdu^++@(>_pE z+Q+oLD{A8S5CT?6bJb*6IC*s(ePqmAgA7aJW?x9O9~XB{C*?RvfI4g#x9x=A<2ARu zgk_-W-ut`>dbUc9o#C;XQ QbblSR literal 0 HcmV?d00001 diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_tabu_list-members.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_tabu_list-members.html new file mode 100644 index 000000000..cffb16cbb --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_tabu_list-members.html @@ -0,0 +1,46 @@ + + +PARADISEO-MO: Member List + + + + +
+ +
+ +

moTabuList< M > Member List

This is the complete list of members for moTabuList< M >, including all inherited members.

+ + + + + + + + +
add(const M &__move, const EOT &__sol)=0moTabuList< M > [pure virtual]
EOT typedefmoTabuList< M >
functor_category()eoBF< const M &, const M::EOType &, bool > [static]
init()=0moTabuList< M > [pure virtual]
operator()(const M &, const M::EOType &)=0eoBF< const M &, const M::EOType &, bool > [pure virtual]
update()=0moTabuList< M > [pure virtual]
~eoBF()eoBF< const M &, const M::EOType &, bool > [virtual]
~eoFunctorBase()eoFunctorBase [virtual]


Generated on Tue Jun 26 13:18:41 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_tabu_list.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_tabu_list.html new file mode 100644 index 000000000..c3831b8ce --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_tabu_list.html @@ -0,0 +1,173 @@ + + +PARADISEO-MO: moTabuList< M > Class Template Reference + + + + +
+ +
+ +

moTabuList< M > Class Template Reference

Class describing a tabu list that a moTS uses. +More... +

+#include <moTabuList.h> +

+

Inheritance diagram for moTabuList< M >: +

+ +eoBF< const M &, const M::EOType &, bool > +eoFunctorBase +moSimpleMoveTabuList< M > +moSimpleSolutionTabuList< M > + +List of all members. + + + + + + + + + + + + + + + +

Public Types

+typedef M::EOType EOT
 Alias for the type.

Public Member Functions

virtual void add (const M &__move, const EOT &__sol)=0
 Procedure to add a move in the tabu list.
virtual void update ()=0
 Procedure that updates the tabu list content.
virtual void init ()=0
 Procedure which initialises the tabu list.
+

Detailed Description

+

template<class M>
+ class moTabuList< M >

+ +Class describing a tabu list that a moTS uses. +

+It is only a description, does nothing... A new object that herits from this class has to be defined in order to be used in a moTS. +

+ +

+Definition at line 22 of file moTabuList.h.


Member Function Documentation

+ +
+
+
+template<class M>
+ + + + + + + + + + + + + + + + + + +
virtual void moTabuList< M >::add (const M &  __move,
const EOT __sol 
) [pure virtual]
+
+
+ +

+Procedure to add a move in the tabu list. +

+The two parameters have not to be modified so they are constant parameters.

+

Parameters:
+ + + +
__move a new tabu move.
__sol the origianl solution associated to this move.
+
+ +

+Implemented in moSimpleMoveTabuList< M >, and moSimpleSolutionTabuList< M >. +

+

+ +

+
+
+template<class M>
+ + + + + + + + +
virtual void moTabuList< M >::update (  )  [pure virtual]
+
+
+ +

+Procedure that updates the tabu list content. +

+Generally, a counter associated to each saved move is decreased by one. +

+Implemented in moSimpleMoveTabuList< M >, and moSimpleSolutionTabuList< M >. +

+

+ +

+
+
+template<class M>
+ + + + + + + + +
virtual void moTabuList< M >::init (  )  [pure virtual]
+
+
+ +

+Procedure which initialises the tabu list. +

+Can be useful if the data structure needs to be allocated before being used. +

+Implemented in moSimpleMoveTabuList< M >, and moSimpleSolutionTabuList< M >. +

+

+


The documentation for this class was generated from the following file: +
Generated on Tue Jun 26 13:18:41 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_tabu_list.png b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/classmo_tabu_list.png new file mode 100644 index 0000000000000000000000000000000000000000..c9d3346ba0cacd9a80360459c91be50ab1054700 GIT binary patch literal 1770 zcmbW2e>Br;9LHDstyI*#!fq)g`5o>t-$_EFGGf(TwS=*eq*jyG#Vw~5Yl`IOMhO+i z%!Vc87M6`|O0pkGt(hPDCJp(Kc2|Gs+|KQv`^WovKF{a*d_Lzn=lwe8x#EvREL&o< z1OkC9^YQi!fI#NDXye9tI@(q9p|eQ48T#)*d1*A7uNh5ae*V#G+UT1a8yiWFHSe^? zIi~}VfspNe-Qf_(f6T=iU^3lg zW{eMnCDr5q@-)q}iXtcH%#55|@#qV%Tw`*^pFG0PUnp@G>0KbMU|-}=p*YIEl|ZBWkV^=D=`wF(K=asROq3-)5le3Q^7mOK4o-F>JvLTfjQTQz&emqC_wjM z7xQz@3wUxWbNsjv?Y0P9hhOLpESi0k^DSD(+UJ`EIHh5Hs!eaFNbju!rM$OIq}TgN zsqEKBE(NzcZ`ttgrUK}^ALslmRUS#!yh`d#Xfd4~u|s@?u)2Lb=~PL)oZYglY|1zN z1*Qj6!`z!&^XH>P=tH-lj@1?e-DOfqQ=f<5V4kWxzq*J1=8THtXv$!1u$24Ov4Tt5 zKBgE1xWW7Pxi(AayP}TVazJqG?EV&DeU8&N3PR2GGKYlH|?Yt}3W4#!GdB=^?gA zm9gcA#n&^P7%zw-PNEaZh;QC?ek;?a-o(w!XXNv7{yZP!9jl5dpL18 zR~g?gg_%!o4dE8qwmuz>y)(axaC4=vEkQ6fH}^ywv0|o+6m%+P4d8b^iKb90_&jog71RNi+4erDaQ zVc+PTt-4$)$!?3wLhw1kMwrC!cjX}^c}I(@mse%IPf&O>LQ3FK&vd~qtJv2a0!M4I zUG`{&BK)A4Ri=#CMy?BvI|Q(<#P>~9+zq4Or&+w(WT`euNGmEi8wacps)+N&8`NrrL@Tt;F5>kydlI!&InI^Q6k;$v!s_SRiqaX>qzhgyfyPS^!;y2>TDX zo1DP&^s9D~%bO@R1?Ci+?FKu46=_wlxKOuWD^XI%{86p&kNfAI)52|dcUqj4xKSNC7|7nkDi>9{LOlYpv=P?Qr5ZwEYU(A4#E&Zrwkzm_bx0^~O_AXZg z^|5D;6gt3`*EgR6s{SzO7+$T;qDdnUBmIOCtSXyy4-&?5hxIt30wdZ$ltsGf+t=$Q z)C|@}TN9)BcP=%!V>5K`4lK65NDieLRpEWgaimX(kz}(>&+1;`iMnX*p56nKX7?1h>>K z+!n2bp*X@6O%81)vd%FzoVzRbxv3C#yB>RD_vMKOIs&|5Zarq0?of*nIH&UO;aQdP zQ|fVR^)!`E24$$gpe$oRP^OxYbyPa7c@#Sa59gj4d)m;9JXg8zT1{pdfmKQHmWuC( zzZAG^b49Q-wNy1oi73~p*0IDwE|lQ#-h2Jjrxqy6cQq>*(G@F4Mvz|{#|AXSfdilw za~oP=ocoN2+2hSXD|rIwZ%h{EYU$#klXuJK7t<91cWc|_?pN@iczRa-4{C~qP1$bk z&xbP-*hYSUp~U?I!~Z*OpJDwvX`#*^401y!bWIjqG|P(GX{-I1AU h3 { margin-top: 0; } +.directory p { margin: 0px; white-space: nowrap; } +.directory div { display: none; margin: 0px; } +.directory img { vertical-align: -30%; } diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/doxygen.png b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/doxygen.png new file mode 100644 index 0000000000000000000000000000000000000000..f0a274bbaffdd67f6d784c894d9cf28729db0e14 GIT binary patch literal 1281 zcmaJ>ZA?>F7(Vx-ms?uoS`b@hdRtpo6o^%HU>M$hfGrBvQnk$LE?p^P!kn&ikhyq! zX~V@&tPF5Qt@V?oTL96Bi%aRiwbe1)9DWQI#?)=HxS7QSw`J`5fAJ*eJbB;uNuKA& zdERDo*{Y<(If(#(B$Lr#;nB(8Y#ia=ZCeW?JfPLuQY`=@cW$k}Rivq|vbxGrRq1Tl9;+(gNt?}UtVKM2`T5t1jLzuL@0UIs`S#vlhl4)^ zLgSYrPj@$+`|j?eSbXTmiHGkWxV8V}BzNR?pl9k_s4pDu9vd5a_UzZEPk)}Ad{AV_ zzddrjrh4=Imr`E06;LY{)YYt?o}L~H@7C}F^WB!Ra=v`Q0bj{>5&$66CWF>mf6vjP z2N>RRY6ZYa=K`76>+|_)Xdwko+7wv}7cN|btOhWb(*{sta~6b?S8Omrxw}!4`NhGr zZVpNqpu1@BE`QGWNTpEpcJVW5izu~2B^GlM?1(OPg)zwW;QcP@Ltcclm>XbJL9C|j z=9!2?ua=uIlf0%AndzHsRC}IyTL$EhAee(fdKB`?27KeS^2M8M_7b~PiCFO&r5LC7 z7gl1*a<8;SjNaw#h=843_AV9iZbWQOAp5YOC^&_F*9K0> zB|6%IDb?aM#3viTxkLU4aXg&@+CkNTOnQ1iMP*^?b|^lJy$4C)Zk4isV!|RZ*XhXh zw8q3$=*0LeGC!XI_Wc?dkT~3+*Gu%%yIqP+Wr3H$=&ROMQU6q}Ag^P~>c5vAEO;a- z_dK-3PPeKar%)6$j~vI2#*-YH!1h6HYVtwCX5_wM`iF#UKz&&@9Oo5w3%XGYrX zW>dY~)SG-((Yim%`InwgTvyRC?e=Wh^8KCao!R6Eg&TpVWUY1sN~4G}V?nFnEGo-; zHZ_$eW9-GnC%^WS9b z@p;-$oH#MtC0v>Q$HX%4^JdFdO$0cbv-W)Q TtK}Eh@>>I#ipmV1>S*>q-hkC} literal 0 HcmV?d00001 diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/files.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/files.html new file mode 100644 index 000000000..0d1852d70 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/files.html @@ -0,0 +1,63 @@ + + +PARADISEO-MO: File Index + + + + +
+ +
+

PARADISEO-MO File List

Here is a list of all documented files with brief descriptions: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
index.h [code]
mo.h [code]
moAlgo.h [code]
moAspirCrit.h [code]
moBestImprSelect.h [code]
moCoolingSchedule.h [code]
moExponentialCoolingSchedule.h [code]
moFirstImprSelect.h [code]
moGenSolContinue.h [code]
moHC.h [code]
moHCMoveLoopExpl.h [code]
moImprBestFitAspirCrit.h [code]
moItRandNextMove.h [code]
moLinearCoolingSchedule.h [code]
moLSCheckPoint.h [code]
moMove.h [code]
moMoveExpl.h [code]
moMoveIncrEval.h [code]
moMoveInit.h [code]
moMoveLoopExpl.h [code]
moMoveSelect.h [code]
moNextMove.h [code]
moNoAspirCrit.h [code]
moRandImprSelect.h [code]
moRandMove.h [code]
moSA.h [code]
moSimpleMoveTabuList.h [code]
moSimpleSolutionTabuList.h [code]
moSolContinue.h [code]
moTabuList.h [code]
moTS.h [code]
moTSMoveLoopExpl.h [code]
+
Generated on Tue Jun 26 13:18:41 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/ftv2blank.png b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/ftv2blank.png new file mode 100644 index 0000000000000000000000000000000000000000..493c3c0b615ade5b22027bde773faf2c0e076d66 GIT binary patch literal 174 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRr2qYM%T@!Q%(o7{me!&ckj8p!u14)&*MwA5S zr6z#mEsk^N1FBF3sc_EE%}vcKVF=AhO-xa6_jFST&P^;T z2~I3aEm8;rVk12R#UIz>f`J-DJY5_^DsClP9B62eH+WF*G=YJMp~A-KbWwke5Kx}M M)78&qol`;+0EL(^EC2ui literal 0 HcmV?d00001 diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/ftv2doc.png b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/ftv2doc.png new file mode 100644 index 0000000000000000000000000000000000000000..f72999f92172cca6edaa2538286b3e369bec9f49 GIT binary patch literal 255 zcmeAS@N?(olHy`uVBq!ia0vp^5yjnX4egh%q=bp-`Pe zR7&bp17l3gfhmh7Fm(iZ2eAfco|q!h5)>qKG?UBh!IC9QGMbJAHf6IEiufk_g|d7~ qkWqJ4k(|I-Aeo-5U~n{Fnc?dN!3Uwu?t6hQVDNPHb6Mw<&;$TLIZ`G7 literal 0 HcmV?d00001 diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/ftv2folderclosed.png b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/ftv2folderclosed.png new file mode 100644 index 0000000000000000000000000000000000000000..d6d063440cbf13c4128dacd96661b6fce58abf26 GIT binary patch literal 259 zcmeAS@N?(olHy`uVBq!ia0vp^55uo^`BphW;jCHO69?}tw{JfcdnZ<*@N=4I z?xF5Qc|QYEmKAIZ;JRGVHe=bn*tx1_|J^^vyg*oVM#A1kZlFULJYD@<);T3K0RTgB BWg7qh literal 0 HcmV?d00001 diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/ftv2folderopen.png b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/ftv2folderopen.png new file mode 100644 index 0000000000000000000000000000000000000000..bbe2c913cf493ee37ad8e3a5132382138d93ac92 GIT binary patch literal 261 zcmeAS@N?(olHy`uVBq!ia0vp^5u(C zYP)Mg%H-DB+{J~>rPn_#pYTax?r*V6ubqGX{lvROQ{?n5_cbm+cQAOm`njxgN@xNA D92;js literal 0 HcmV?d00001 diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/ftv2lastnode.png b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/ftv2lastnode.png new file mode 100644 index 0000000000000000000000000000000000000000..e7b9ba90cb0cf71c8ce662956bfee7d64cf60fa6 GIT binary patch literal 233 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRr!py+H=+kU?6UZ?L@CkAK|NlRbNhD}!Xpp$P zU;Pg)ksC(lf|p%(p+w2Gk+!>EaktaVt4N i!r*{E4>QXNV>t$uAA#a^n)TVt_DW*G8-srQl%FeIsRSdYm zeDdtWec}u&7@8h5rqv#p7g*pRdwwmugmlS-+cHV~j}#7`Nwj9m+AU)JGGo`8z_}`K z?s#Xsy%Z;1_jl5Y+?Gum8WyK6`MBvup0SAOKJ)mWcHyteJ?WLL>>-)=?&<$H&t5oH Vd!azZ1yDdSc)I$ztaD0e0sw}(dc*(# literal 0 HcmV?d00001 diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/ftv2mlastnode.png b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/ftv2mlastnode.png new file mode 100644 index 0000000000000000000000000000000000000000..09ceb6adb01054ce799ad20c0e818ab9272f2df2 GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRr#LU3Jc=+&fg$isFPOjJ*AaIJQGm()YSDb0rfjgNefXW#>UHx3vIVCg! E0ORy6RsaA1 literal 0 HcmV?d00001 diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/ftv2mnode.png b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/ftv2mnode.png new file mode 100644 index 0000000000000000000000000000000000000000..3254c05112199fbc80aad313611c58a5b388792d GIT binary patch literal 194 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRr!py+H=+kU?6Ub2s@Ck7}aNq!ti3c<^Gz9OH zn+a6GSQ6wH%;50sMjDVKR^l2_5}cn_Ql40p%8;I!W>k=uu3)5RqGz-?&YcgaLd(;| zF{I*Fa>4?=2W(CyOv{5p*uLi}G<-ambjQcb>&~4!CzK3KXWY6d$*{eWU47N}X+XCz OFnGH9xvXPg)ksC(lf|p%(p+w2Gk+y>EaktaVt4N l!r*{E4>Lv;t literal 0 HcmV?d00001 diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/ftv2plastnode.png b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/ftv2plastnode.png new file mode 100644 index 0000000000000000000000000000000000000000..0b07e00913d8069ebbb51bd7fd6d70d8bba88f75 GIT binary patch literal 165 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRr#LU3Jc=+&MJ literal 0 HcmV?d00001 diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/ftv2pnode.png b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/ftv2pnode.png new file mode 100644 index 0000000000000000000000000000000000000000..2001b797ba2b98a4127f1d3efca64aef08bf6d51 GIT binary patch literal 200 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRr!py+H=+kU?6Ub2s@Ck7}aNq!ti3c<^Gz9OH zn+a6GSQ6wH%;50sMjDVKR^l2_5}cn_Ql40p%8;I!W>k=uu3)5RqGz-?&Ycga!obtT zF{I*Fa>4?=2W(Dkd1@Anj~<0|oqBMOmqox%*rjK-r)THv+0v0L%h-agt(X~hWwYzA SIxU|Ma*U^|pUXO@geCywmoZiV literal 0 HcmV?d00001 diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/ftv2vertline.png b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/ftv2vertline.png new file mode 100644 index 0000000000000000000000000000000000000000..b330f3a33c0085c183ff39fc56b1b274160c1da0 GIT binary patch literal 229 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRr!py+H=+kU?6UZ?L@CkAK|NlRbNhD}!Xpp$P zU;Pg)ksC(lf|p%(p+w2Gqgt>EaktaVt4N e!r*{^G#i7W2*a|cHZQDzQVgE1elF{r5}E+)J2fZ( literal 0 HcmV?d00001 diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/functions.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/functions.html new file mode 100644 index 000000000..effe926f9 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/functions.html @@ -0,0 +1,285 @@ + + +PARADISEO-MO: Class Members + + + + +
+ +
+ + +
+ +
+ +

+Here is a list of all documented class members with links to the class documentation for each member: +

+

- a -

+

- b -

+

- c -

+

- e -

+

- f -

+

- g -

+

- h -

+

- i -

+

- l -

+

- m -

+

- n -

+

- o -

+

- q -

+

- r -

+

- s -

+

- t -

+

- u -

+

- v -

+
Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/functions_func.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/functions_func.html new file mode 100644 index 000000000..2599c6590 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/functions_func.html @@ -0,0 +1,158 @@ + + +PARADISEO-MO: Class Members - Functions + + + + +
+ +
+ + +
+ +
+ +

+  +

+

- a -

+

- e -

+

- g -

+

- h -

+

- i -

+

- l -

+

- o -

+

- r -

+

- s -

+

- t -

+

- u -

+
Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/functions_type.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/functions_type.html new file mode 100644 index 000000000..eb051a256 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/functions_type.html @@ -0,0 +1,72 @@ + + +PARADISEO-MO: Class Members - Typedefs + + + + +
+ +
+ + +  +

+

+
Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/functions_vars.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/functions_vars.html new file mode 100644 index 000000000..ec5acd078 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/functions_vars.html @@ -0,0 +1,169 @@ + + +PARADISEO-MO: Class Members - Variables + + + + +
+ +
+ + +
+ +
+ +

+  +

+

- a -

+

- b -

+

- c -

+

- f -

+

- i -

+

- m -

+

- n -

+

- q -

+

- r -

+

- t -

+

- v -

+
Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/hierarchy.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/hierarchy.html new file mode 100644 index 000000000..d62e90ca5 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/hierarchy.html @@ -0,0 +1,146 @@ + + +PARADISEO-MO: Hierarchical Index + + + + +
+ +
+ +

PARADISEO-MO Class Hierarchy

This inheritance list is sorted roughly, but not completely, alphabetically: +
Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/index.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/index.html new file mode 100644 index 000000000..7a92d1781 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/index.html @@ -0,0 +1,11 @@ + + +PARADISEO-MO + + + + + <a href="main.html">Frames are disabled. Click here to go to the main page.</a> + + + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/index_8h-source.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/index_8h-source.html new file mode 100644 index 000000000..fb9a615a6 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/index_8h-source.html @@ -0,0 +1,35 @@ + + +PARADISEO-MO: index.h Source File + + + + +
+ +
+

index.h

00001 
+00022 // coding: iso-8859-1
+00023 // mode: C++
+00024 // c-file-style: "Stroustrup"
+00025 // fill-column: 80
+00026 // End:
+

Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/installdox b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/installdox new file mode 100755 index 000000000..1628445b3 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/installdox @@ -0,0 +1,117 @@ +#!/usr/bin/perl + +%subst = ( "eo.doxytag", ""); +$quiet = 0; + +if (open(F,"search.cfg")) +{ + $_= ; s/[ \t\n]*$//g ; $subst{"_doc"} = $_; + $_= ; s/[ \t\n]*$//g ; $subst{"_cgi"} = $_; +} + +while ( @ARGV ) { + $_ = shift @ARGV; + if ( s/^-// ) { + if ( /^l(.*)/ ) { + $v = ($1 eq "") ? shift @ARGV : $1; + ($v =~ /\/$/) || ($v .= "/"); + $_ = $v; + if ( /(.+)\@(.+)/ ) { + if ( exists $subst{$1} ) { + $subst{$1} = $2; + } else { + print STDERR "Unknown tag file $1 given with option -l\n"; + &usage(); + } + } else { + print STDERR "Argument $_ is invalid for option -l\n"; + &usage(); + } + } + elsif ( /^q/ ) { + $quiet = 1; + } + elsif ( /^\?|^h/ ) { + &usage(); + } + else { + print STDERR "Illegal option -$_\n"; + &usage(); + } + } + else { + push (@files, $_ ); + } +} + +foreach $sub (keys %subst) +{ + if ( $subst{$sub} eq "" ) + { + print STDERR "No substitute given for tag file `$sub'\n"; + &usage(); + } + elsif ( ! $quiet && $sub ne "_doc" && $sub ne "_cgi" ) + { + print "Substituting $subst{$sub} for each occurence of tag file $sub\n"; + } +} + +if ( ! @files ) { + if (opendir(D,".")) { + foreach $file ( readdir(D) ) { + $match = ".html"; + next if ( $file =~ /^\.\.?$/ ); + ($file =~ /$match/) && (push @files, $file); + ($file =~ "tree.js") && (push @files, $file); + } + closedir(D); + } +} + +if ( ! @files ) { + print STDERR "Warning: No input files given and none found!\n"; +} + +foreach $f (@files) +{ + if ( ! $quiet ) { + print "Editing: $f...\n"; + } + $oldf = $f; + $f .= ".bak"; + unless (rename $oldf,$f) { + print STDERR "Error: cannot rename file $oldf\n"; + exit 1; + } + if (open(F,"<$f")) { + unless (open(G,">$oldf")) { + print STDERR "Error: opening file $oldf for writing\n"; + exit 1; + } + if ($oldf ne "tree.js") { + while () { + s/doxygen\=\"([^ \"\:\t\>\<]*)\:([^ \"\t\>\<]*)\" (href|src)=\"\2/doxygen\=\"$1:$subst{$1}\" \3=\"$subst{$1}/g; + print G "$_"; + } + } + else { + while () { + s/\"([^ \"\:\t\>\<]*)\:([^ \"\t\>\<]*)\", \"\2/\"$1:$subst{$1}\" ,\"$subst{$1}/g; + print G "$_"; + } + } + } + else { + print STDERR "Warning file $f does not exist\n"; + } + unlink $f; +} + +sub usage { + print STDERR "Usage: installdox [options] [html-file [html-file ...]]\n"; + print STDERR "Options:\n"; + print STDERR " -l tagfile\@linkName tag file + URL or directory \n"; + print STDERR " -q Quiet mode\n\n"; + exit 1; +} diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/main.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/main.html new file mode 100644 index 000000000..7c7e18823 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/main.html @@ -0,0 +1,40 @@ + + +PARADISEO-MO: Welcome to PARADISEO-Moving Objects + + + + +
+ +
+

Welcome to PARADISEO-Moving Objects

+

+

0.1

+intro

+MO is an extension of the ANSI-C++ compliant evolutionary computation library EO.
+ It contains classes for almost any kind of one solution based heuristics.

+tutorial

+

+install

+The installation procedure of the package is detailed in the README file in the top-directory of the source-tree.

+design

+
Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_8h-source.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_8h-source.html new file mode 100644 index 000000000..77222f2ce --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_8h-source.html @@ -0,0 +1,75 @@ + + +PARADISEO-MO: mo.h Source File + + + + +
+ +
+

mo.h

00001 // -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+00002 
+00003 // "mo.h"
+00004 
+00005 // (c) OPAC Team, LIFL, 2003-2006
+00006 
+00007 /* TEXT LICENCE
+00008    
+00009    Contact: paradiseo-help@lists.gforge.inria.fr
+00010 */
+00011 
+00012 #ifndef __mo_h
+00013 #define __mo_h
+00014 
+00015 #include "moAlgo.h"
+00016 #include "moAspirCrit.h"
+00017 #include "moBestImprSelect.h"
+00018 #include "moCoolingSchedule.h"
+00019 #include "moExponentialCoolingSchedule.h"
+00020 #include "moFirstImprSelect.h"
+00021 #include "moGenSolContinue.h"
+00022 #include "moHC.h"
+00023 #include "moHCMoveLoopExpl.h"
+00024 #include "moImprBestFitAspirCrit.h"
+00025 #include "moItRandNextMove.h"
+00026 #include "moLinearCoolingSchedule.h"
+00027 #include "moLSCheckPoint.h"
+00028 #include "moMoveExpl.h"
+00029 #include "moMove.h"
+00030 #include "moMoveIncrEval.h"
+00031 #include "moMoveInit.h"
+00032 #include "moMoveLoopExpl.h"
+00033 #include "moMoveSelect.h"
+00034 #include "moNextMove.h"
+00035 #include "moNoAspirCrit.h"
+00036 #include "moRandImprSelect.h"
+00037 #include "moRandMove.h"
+00038 #include "moSA.h"
+00039 #include "moSimpleMoveTabuList.h"
+00040 #include "moSimpleSolutionTabuList.h"
+00041 #include "moSolContinue.h"
+00042 #include "moTabuList.h"
+00043 #include "moTS.h"
+00044 #include "moTSMoveLoopExpl.h"
+00045 
+00046 #endif
+

Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_algo_8h-source.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_algo_8h-source.html new file mode 100644 index 000000000..c91c1b4cf --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_algo_8h-source.html @@ -0,0 +1,52 @@ + + +PARADISEO-MO: moAlgo.h Source File + + + + +
+ +
+

moAlgo.h

00001 // -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+00002 
+00003 // "moAlgo.h"
+00004 
+00005 // (c) OPAC Team, LIFL, 2003-2006
+00006 
+00007 /* TEXT LICENCE
+00008    
+00009    Contact: paradiseo-help@lists.gforge.inria.fr
+00010 */
+00011 
+00012 #ifndef __moAlgo_h
+00013 #define __moAlgo_h
+00014 
+00015 #include <eoOp.h>
+00016 
+00018 
+00021 template < class EOT > class moAlgo:public eoMonOp < EOT >
+00022 {
+00023 
+00024 };
+00025 
+00026 #endif
+

Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_aspir_crit_8h-source.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_aspir_crit_8h-source.html new file mode 100644 index 000000000..bd5f1734f --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_aspir_crit_8h-source.html @@ -0,0 +1,59 @@ + + +PARADISEO-MO: moAspirCrit.h Source File + + + + +
+ +
+

moAspirCrit.h

00001 // -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+00002 
+00003 // "moAspirCrit.h"
+00004 
+00005 // (c) OPAC Team, LIFL, 2003-2006
+00006 
+00007 /* TEXT LICENCE
+00008    
+00009    Contact: paradiseo-help@lists.gforge.inria.fr
+00010 */
+00011 
+00012 #ifndef __moAspirCrit_h
+00013 #define __moAspirCrit_h
+00014 
+00015 #include <eoFunctor.h>
+00016 
+00018 
+00022 template < class M > class moAspirCrit:public eoBF < const M &, const typename
+00023   M::EOType::Fitness &,
+00024   bool >
+00025 {
+00026 
+00027 public:
+00029 
+00032   virtual void
+00033   init () = 0;
+00034 
+00035 };
+00036 
+00037 #endif
+

Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_best_impr_select_8h-source.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_best_impr_select_8h-source.html new file mode 100644 index 000000000..336d3d407 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_best_impr_select_8h-source.html @@ -0,0 +1,100 @@ + + +PARADISEO-MO: moBestImprSelect.h Source File + + + + +
+ +
+

moBestImprSelect.h

00001 // -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+00002 
+00003 // "moBestImprSelect.h"
+00004 
+00005 // (c) OPAC Team, LIFL, 2003-2006
+00006 
+00007 /* LICENCE TEXT
+00008    
+00009    Contact: paradiseo-help@lists.gforge.inria.fr
+00010 */
+00011 
+00012 #ifndef __moBestImprSelect_h
+00013 #define __moBestImprSelect_h
+00014 
+00015 #include "moMoveSelect.h"
+00016 
+00018 
+00022 template < class M > class moBestImprSelect:public moMoveSelect < M >
+00023 {
+00024 
+00025 public:
+00026 
+00028   typedef typename M::EOType::Fitness Fitness;
+00029 
+00031   void init (const Fitness & __fit)
+00032   {
+00033 
+00034     first_time = true;
+00035   }
+00036 
+00037 
+00039 
+00047   bool update (const M & __move, const Fitness & __fit)
+00048   {
+00049 
+00050     if (first_time || __fit > best_fit)
+00051       {
+00052 
+00053         best_fit = __fit;
+00054         best_move = __move;
+00055 
+00056         first_time = false;
+00057       }
+00058 
+00059     return true;
+00060   }
+00061 
+00063 
+00068   void operator   () (M & __move, Fitness & __fit) throw (EmptySelection)
+00069   {
+00070 
+00071     if (!first_time)
+00072       {
+00073         __move = best_move;
+00074         __fit = best_fit;
+00075       }
+00076     else
+00077       throw EmptySelection ();
+00078   }
+00079 
+00080 private:
+00081 
+00083   bool first_time;
+00084 
+00086   M best_move;
+00087 
+00089   Fitness best_fit;
+00090 
+00091 };
+00092 
+00093 #endif
+

Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_cooling_schedule_8h-source.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_cooling_schedule_8h-source.html new file mode 100644 index 000000000..b2c9b9bed --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_cooling_schedule_8h-source.html @@ -0,0 +1,52 @@ + + +PARADISEO-MO: moCoolingSchedule.h Source File + + + + +
+ +
+

moCoolingSchedule.h

00001 // -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+00002 
+00003 // "moCoolingSchedule.h"
+00004 
+00005 // (c) OPAC Team, LIFL, 2003-2007
+00006 
+00007 /* LICENCE TEXT
+00008    
+00009    Contact: paradiseo-help@lists.gforge.inria.fr
+00010 */
+00011 
+00012 #ifndef __moCoolingSchedule_h
+00013 #define __moCoolingSchedule_h
+00014 
+00015 #include <eoFunctor.h>
+00016 
+00018 
+00022 class moCoolingSchedule:public eoUF < double &, bool >
+00023 {
+00024 
+00025 };
+00026 
+00027 #endif
+

Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_exponential_cooling_schedule_8h-source.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_exponential_cooling_schedule_8h-source.html new file mode 100644 index 000000000..727040fa2 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_exponential_cooling_schedule_8h-source.html @@ -0,0 +1,68 @@ + + +PARADISEO-MO: moExponentialCoolingSchedule.h Source File + + + + +
+ +
+

moExponentialCoolingSchedule.h

00001 // -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+00002 
+00003 // "moExponentialCoolingSchedule.h"
+00004 
+00005 // (c) OPAC Team, LIFL, 2003-2007
+00006 
+00007 /* LICENCE TEXT
+00008    
+00009    Contact: paradiseo-help@lists.gforge.inria.fr
+00010 */
+00011 
+00012 #ifndef __moExponentialCoolingSchedule_h
+00013 #define __moExponentialCoolingSchedule_h
+00014 
+00015 #include "moCoolingSchedule.h"
+00016 
+00018 
+00022 class moExponentialCoolingSchedule: public moCoolingSchedule
+00023 {
+00024 
+00025 public:
+00027 
+00031   moExponentialCoolingSchedule (double __threshold, double __ratio):threshold (__threshold), ratio (__ratio)
+00032   {}
+00033 
+00035 
+00041   bool operator() (double &__temp)
+00042   {
+00043     return (__temp *= ratio) > threshold;
+00044   }
+00045 
+00046 private:
+00047 
+00049   double threshold;
+00050 
+00052   double ratio;
+00053 };
+00054 
+00055 #endif
+

Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_first_impr_select_8h-source.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_first_impr_select_8h-source.html new file mode 100644 index 000000000..8e1bcf00f --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_first_impr_select_8h-source.html @@ -0,0 +1,107 @@ + + +PARADISEO-MO: moFirstImprSelect.h Source File + + + + +
+ +
+

moFirstImprSelect.h

00001 // -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+00002 
+00003 // "moFirstImprSelect.h"
+00004 
+00005 // (c) OPAC Team, LIFL, 2003-2006
+00006 
+00007 /* LICENCE TEXT
+00008    
+00009    Contact: paradiseo-help@lists.gforge.inria.fr
+00010 */
+00011 
+00012 #ifndef __moFirstImprSelect_h
+00013 #define __moFirstImprSelect_h
+00014 
+00015 #include "moMoveSelect.h"
+00016 
+00018 
+00023 template < class M > class moFirstImprSelect:public moMoveSelect < M >
+00024 {
+00025 
+00026 public:
+00027 
+00029   typedef typename M::EOType::Fitness Fitness;
+00030 
+00032 
+00035   virtual void init (const Fitness & __fit)
+00036   {
+00037 
+00038     valid = false;
+00039     init_fit = __fit;
+00040   }
+00041 
+00042 
+00044 
+00052   bool update (const M & __move, const typename M::EOType::Fitness & __fit)
+00053   {
+00054 
+00055     if (__fit > init_fit)
+00056       {
+00057 
+00058         best_fit = __fit;
+00059         best_move = __move;
+00060         valid = true;
+00061 
+00062         return false;
+00063       }
+00064     else
+00065       {
+00066         return true;
+00067       }
+00068   }
+00069 
+00071 
+00076   void operator   () (M & __move, Fitness & __fit) throw (EmptySelection)
+00077   {
+00078 
+00079     if (valid)
+00080       {
+00081         __move = best_move;
+00082         __fit = best_fit;
+00083       }
+00084     else
+00085       throw EmptySelection ();
+00086   }
+00087 
+00088 private:
+00089 
+00091   bool valid;
+00092 
+00094   M best_move;
+00095 
+00097   Fitness init_fit;
+00098 
+00100   Fitness best_fit;
+00101 
+00102 };
+00103 
+00104 #endif
+

Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_gen_sol_continue_8h-source.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_gen_sol_continue_8h-source.html new file mode 100644 index 000000000..cd09d2498 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_gen_sol_continue_8h-source.html @@ -0,0 +1,79 @@ + + +PARADISEO-MO: moGenSolContinue.h Source File + + + + +
+ +
+

moGenSolContinue.h

00001 // -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+00002 
+00003 // "eoGenSolContinue.h"
+00004 
+00005 // (c) OPAC Team, LIFL, 2003-2006
+00006 
+00007 /* LICENCE TEXT
+00008    
+00009    Contact: paradiseo-help@lists.gforge.inria.fr
+00010 */
+00011 
+00012 #ifndef __moGenSolContinue_h
+00013 #define __moGenSolContinue_h
+00014 
+00015 #include "moSolContinue.h"
+00016 
+00018 
+00021 template < class EOT > class moGenSolContinue:public moSolContinue < EOT >
+00022 {
+00023 
+00024 public:
+00025 
+00027 
+00030   moGenSolContinue (unsigned int __maxNumGen):maxNumGen (__maxNumGen), numGen (0)
+00031   {
+00032 
+00033   }
+00034 
+00036 
+00044   bool operator   () (const EOT & __sol)
+00045   {
+00046 
+00047     return (++numGen < maxNumGen);
+00048   }
+00049 
+00051 
+00054   void init ()
+00055   {
+00056 
+00057     numGen = 0;
+00058   }
+00059 
+00060 private:
+00061 
+00063   unsigned int maxNumGen;
+00064 
+00066   unsigned int numGen;
+00067 };
+00068 
+00069 #endif
+

Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_h_c_8h-source.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_h_c_8h-source.html new file mode 100644 index 000000000..df53739fa --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_h_c_8h-source.html @@ -0,0 +1,133 @@ + + +PARADISEO-MO: moHC.h Source File + + + + +
+ +
+

moHC.h

00001 // -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+00002 
+00003 // "moHC.h"
+00004 
+00005 // (c) OPAC Team, LIFL, 2003-2006
+00006 
+00007 /* LICENCE TEXT
+00008    
+00009    Contact: paradiseo-help@lists.gforge.inria.fr
+00010 */
+00011 
+00012 #ifndef __moHC_h
+00013 #define __moHC_h
+00014 
+00015 #include <eoOp.h>
+00016 #include <eoEvalFunc.h>
+00017 
+00018 #include "moAlgo.h"
+00019 #include "moMoveExpl.h"
+00020 #include "moHCMoveLoopExpl.h"
+00021 
+00023 
+00026 template < class M > class moHC:public moAlgo < typename M::EOType >
+00027 {
+00028 
+00030   typedef
+00031     typename
+00032     M::EOType
+00033     EOT;
+00034 
+00036   typedef
+00037     typename
+00038     EOT::Fitness
+00039     Fitness;
+00040 
+00041 public:
+00042 
+00044 
+00053 moHC (moMoveInit < M > &__move_init, moNextMove < M > &__next_move, moMoveIncrEval < M > &__incr_eval, moMoveSelect < M > &__move_select, eoEvalFunc < EOT > &__full_eval):move_expl (*new moHCMoveLoopExpl < M >
+00054              (__move_init, __next_move, __incr_eval, __move_select)),
+00055     full_eval (__full_eval)
+00056   {
+00057 
+00058   }
+00059 
+00061 
+00067 moHC (moMoveExpl < M > &__move_expl, eoEvalFunc < EOT > &__full_eval):move_expl (__move_expl),
+00068     full_eval
+00069     (__full_eval)
+00070   {
+00071 
+00072   }
+00073 
+00075 
+00082   bool operator   ()(EOT & __sol)
+00083   {
+00084 
+00085     if (__sol.invalid ())
+00086       {
+00087         full_eval (__sol);
+00088       }
+00089 
+00090     EOT new_sol;
+00091 
+00092     do
+00093       {
+00094 
+00095         new_sol = __sol;
+00096 
+00097         try
+00098         {
+00099 
+00100           move_expl (__sol, new_sol);
+00101 
+00102         }
+00103         catch (EmptySelection & __ex)
+00104         {
+00105 
+00106           break;
+00107         }
+00108 
+00109         if (new_sol.fitness () > __sol.fitness ())
+00110           {
+00111             __sol = new_sol;
+00112           }
+00113         else
+00114           {
+00115             break;
+00116           }
+00117 
+00118       }
+00119     while (true);
+00120 
+00121     return true;
+00122   }
+00123 
+00124 private:
+00125 
+00127   moMoveExpl < M > &move_expl;
+00128 
+00130   eoEvalFunc < EOT > &full_eval;
+00131 };
+00132 
+00133 #endif
+

Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_h_c_move_loop_expl_8h-source.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_h_c_move_loop_expl_8h-source.html new file mode 100644 index 000000000..9924e6a59 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_h_c_move_loop_expl_8h-source.html @@ -0,0 +1,116 @@ + + +PARADISEO-MO: moHCMoveLoopExpl.h Source File + + + + +
+ +
+

moHCMoveLoopExpl.h

00001 // -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+00002 
+00003 // "moHCMoveLoopExpl.h"
+00004 
+00005 // (c) OPAC Team, LIFL, 2003-2006
+00006 
+00007 /* LICENCE TEXT
+00008    
+00009    Contact: paradiseo-help@lists.gforge.inria.fr
+00010 */
+00011 
+00012 #ifndef __moHCMoveLoopExpl_h
+00013 #define __moHCMoveLoopExpl_h
+00014 
+00015 #include "moMoveLoopExpl.h"
+00016 
+00017 #include "moMoveInit.h"
+00018 #include "moNextMove.h"
+00019 #include "moMoveIncrEval.h"
+00020 #include "moMoveSelect.h"
+00021 
+00023 template < class M > class moHCMoveLoopExpl:public moMoveLoopExpl < M >
+00024 {
+00025 
+00027   typedef typename M::EOType EOT;
+00028 
+00030   typedef typename M::EOType::Fitness Fitness;
+00031 
+00032 public:
+00033 
+00035 
+00043 moHCMoveLoopExpl (moMoveInit < M > &__move_init, moNextMove < M > &__next_move, moMoveIncrEval < M > &__incr_eval, moMoveSelect < M > &__move_select):
+00044 
+00045   move_init (__move_init),
+00046     next_move (__next_move),
+00047     incr_eval (__incr_eval), move_select (__move_select)
+00048   {
+00049 
+00050   }
+00051 
+00053 
+00059   void operator   () (const EOT & __old_sol, EOT & __new_sol)
+00060   {
+00061 
+00062     M move;
+00063 
+00064     //
+00065     move_init (move, __old_sol);        /* Restarting the exploration of 
+00066                                            of the neighborhood ! */
+00067 
+00068     move_select.init (__old_sol.fitness ());
+00069 
+00070     while (move_select.update (move, incr_eval (move, __old_sol))
+00071            && next_move (move, __old_sol));
+00072 
+00073     try
+00074     {
+00075 
+00076       M best_move;
+00077 
+00078       Fitness best_move_fit;
+00079 
+00080       move_select (best_move, best_move_fit);
+00081       __new_sol.fitness (best_move_fit);
+00082       best_move (__new_sol);
+00083 
+00084     }
+00085     catch (EmptySelection & __ex)
+00086     {
+00087 
+00088       // ?
+00089     }
+00090   }
+00091 
+00092 private:
+00093 
+00095   moMoveInit < M > &move_init;
+00096 
+00098   moNextMove < M > &next_move;
+00099 
+00101   moMoveIncrEval < M > &incr_eval;
+00102 
+00104   moMoveSelect < M > &move_select;
+00105 
+00106 };
+00107 
+00108 #endif
+

Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_impr_best_fit_aspir_crit_8h-source.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_impr_best_fit_aspir_crit_8h-source.html new file mode 100644 index 000000000..3de919c75 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_impr_best_fit_aspir_crit_8h-source.html @@ -0,0 +1,97 @@ + + +PARADISEO-MO: moImprBestFitAspirCrit.h Source File + + + + +
+ +
+

moImprBestFitAspirCrit.h

00001 // -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+00002 
+00003 // "moImprAspirCrit.h"
+00004 
+00005 // (c) OPAC Team, LIFL, 2003-2006
+00006 
+00007 /* LICENCE TEXT
+00008    
+00009    Contact: paradiseo-help@lists.gforge.inria.fr
+00010 */
+00011 
+00012 #ifndef __moImprBestFitAspirCrit_h
+00013 #define __moImprBestFitAspirCrit_h
+00014 
+00015 #include "moAspirCrit.h"
+00016 
+00018 
+00022 template < class M > class moImprBestFitAspirCrit:public moAspirCrit < M >
+00023 {
+00024 
+00025 public:
+00026 
+00028   typedef typename M::EOType::Fitness Fitness;
+00029 
+00031   moImprBestFitAspirCrit ()
+00032   {
+00033 
+00034     first_time = true;
+00035   }
+00036 
+00038   void init ()
+00039   {
+00040 
+00041     first_time = true;
+00042   }
+00043 
+00045 
+00052   bool operator   () (const M & __move, const Fitness & __fit)
+00053   {
+00054 
+00055     if (first_time)
+00056       {
+00057 
+00058         best_fit = __fit;
+00059         first_time = false;
+00060 
+00061         return true;
+00062       }
+00063     else if (__fit < best_fit)
+00064       return false;
+00065 
+00066     else
+00067       {
+00068 
+00069         best_fit = __fit;
+00070 
+00071         return true;
+00072       }
+00073   }
+00074 
+00075 private:
+00076 
+00078   Fitness best_fit;
+00079 
+00081   bool first_time;
+00082 };
+00083 
+00084 #endif
+

Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_it_rand_next_move_8h-source.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_it_rand_next_move_8h-source.html new file mode 100644 index 000000000..2c53c0cdb --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_it_rand_next_move_8h-source.html @@ -0,0 +1,93 @@ + + +PARADISEO-MO: moItRandNextMove.h Source File + + + + +
+ +
+

moItRandNextMove.h

00001 // -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+00002 
+00003 // "moNextMove.h"
+00004 
+00005 // (c) OPAC Team, LIFL, 2003-2006
+00006 
+00007 /* LICENCE TEXT
+00008    
+00009    Contact: paradiseo-help@lists.gforge.inria.fr
+00010 */
+00011 
+00012 #ifndef __moItRandNextMove_h
+00013 #define __moItRandNextMove_h
+00014 
+00015 #include "moNextMove.h"
+00016 #include "moRandMove.h"
+00017 
+00019 
+00022 template < class M > class moItRandNextMove:public moNextMove < M >
+00023 {
+00024 
+00026   typedef typename M::EOType EOT;
+00027 
+00028 public:
+00029 
+00031 
+00037   moItRandNextMove (moRandMove < M > &__rand_move,
+00038                     unsigned int __max_iter):rand_move (__rand_move),
+00039     max_iter (__max_iter), num_iter (0)
+00040   {
+00041 
+00042   }
+00043 
+00045 
+00052   bool operator   () (M & __move, const EOT & __sol)
+00053   {
+00054 
+00055     if (num_iter++ > max_iter)
+00056       {
+00057 
+00058         num_iter = 0;
+00059         return false;
+00060       }
+00061     else
+00062       {
+00063 
+00064         /* The given solution is discarded here */
+00065         rand_move (__move);
+00066         num_iter++;
+00067         return true;
+00068       }
+00069   }
+00070 
+00071 private:
+00072 
+00074   moRandMove < M > &rand_move;
+00075 
+00077   unsigned int max_iter;
+00078 
+00080   unsigned int num_iter;
+00081 
+00082 };
+00083 
+00084 #endif
+

Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_l_s_check_point_8h-source.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_l_s_check_point_8h-source.html new file mode 100644 index 000000000..58ef14514 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_l_s_check_point_8h-source.html @@ -0,0 +1,81 @@ + + +PARADISEO-MO: moLSCheckPoint.h Source File + + + + +
+ +
+

moLSCheckPoint.h

00001 // -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+00002 
+00003 // "moLSCheckPoint.h"
+00004 
+00005 // (c) OPAC Team, LIFL, 2003
+00006 
+00007 /* TEXT LICENCE
+00008    
+00009    Contact: paradiseo-help@lists.gforge.inria.fr
+00010 */
+00011 
+00012 #ifndef __moSolUpdater_h
+00013 #define __moSolUpdater_h
+00014 
+00015 #include <eoFunctor.h>
+00016 
+00018 
+00021 template < class M > class moLSCheckPoint:public eoBF < const M &, const typename
+00022   M::EOType &, void >
+00023 {
+00024 
+00025 public:
+00027 
+00033   void
+00034   operator   () (const M & __move, const typename M::EOType & __sol)
+00035   {
+00036 
+00037     for (unsigned int i = 0; i < func.size (); i++)
+00038       {
+00039         func[i]->operator   ()(__move, __sol);
+00040       }
+00041   }
+00042 
+00044 
+00048   void
+00049   add (eoBF < const M &, const typename M::EOType &, void >&__f)
+00050   {
+00051 
+00052     func.push_back (&__f);
+00053   }
+00054 
+00055 private:
+00056 
+00058   std::vector < eoBF < const
+00059     M &, const
+00060     typename
+00061   M::EOType &, void >*>
+00062     func;
+00063 
+00064 };
+00065 
+00066 #endif
+

Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_linear_cooling_schedule_8h-source.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_linear_cooling_schedule_8h-source.html new file mode 100644 index 000000000..6ca5f608c --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_linear_cooling_schedule_8h-source.html @@ -0,0 +1,68 @@ + + +PARADISEO-MO: moLinearCoolingSchedule.h Source File + + + + +
+ +
+

moLinearCoolingSchedule.h

00001 // -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+00002 
+00003 // "moLinearCoolingSchedule.h"
+00004 
+00005 // (c) OPAC Team, LIFL, 2003-2007
+00006 
+00007 /* LICENCE TEXT
+00008    
+00009    Contact: paradiseo-help@lists.gforge.inria.fr
+00010 */
+00011 
+00012 #ifndef __moLinearCoolingSchedule_h
+00013 #define __moLinearCoolingSchedule_h
+00014 
+00015 #include "moCoolingSchedule.h"
+00016 
+00018 
+00022 class moLinearCoolingSchedule: public moCoolingSchedule
+00023 {
+00024 
+00025 public:
+00027 
+00031   moLinearCoolingSchedule (double __threshold, double __quantity):threshold (__threshold), quantity (__quantity)
+00032   {}
+00033 
+00035 
+00041   bool operator() (double &__temp)
+00042   {
+00043     return (__temp -= quantity) > threshold;
+00044   }
+00045 
+00046 private:
+00047 
+00049   double threshold;
+00050 
+00052   double quantity;
+00053 };
+00054 
+00055 #endif
+

Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_move_8h-source.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_move_8h-source.html new file mode 100644 index 000000000..b7e12abaa --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_move_8h-source.html @@ -0,0 +1,55 @@ + + +PARADISEO-MO: moMove.h Source File + + + + +
+ +
+

moMove.h

00001 // -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+00002 
+00003 // "moMove.h"
+00004 
+00005 // (c) OPAC Team, LIFL, 2003-2006
+00006 
+00007 /* TEXT LICENCE
+00008    
+00009    Contact: paradiseo-help@lists.gforge.inria.fr
+00010 */
+00011 
+00012 #ifndef __moMove_h
+00013 #define __moMove_h
+00014 
+00015 #include <eoFunctor.h>
+00016 
+00018 
+00023 template < class EOT > class moMove:public eoUF < EOT &, void >
+00024 {
+00025 
+00026 public:
+00028   typedef EOT EOType;
+00029 
+00030 };
+00031 
+00032 #endif
+

Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_move_expl_8h-source.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_move_expl_8h-source.html new file mode 100644 index 000000000..783a31001 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_move_expl_8h-source.html @@ -0,0 +1,55 @@ + + +PARADISEO-MO: moMoveExpl.h Source File + + + + +
+ +
+

moMoveExpl.h

00001 // -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+00002 
+00003 // "eoMoveExpl.h"
+00004 
+00005 // (c) OPAC Team, LIFL, 2003-2006
+00006 
+00007 /* LICENCE TEXT
+00008    
+00009    Contact: paradiseo-help@lists.gforge.inria.fr
+00010 */
+00011 
+00012 #ifndef __moMoveExpl_h
+00013 #define __moMoveExpl_h
+00014 
+00015 #include <eoFunctor.h>
+00016 
+00018 
+00021 template < class M > class moMoveExpl:public eoBF < const typename
+00022   M::EOType &,
+00023   typename
+00024 M::EOType &, void >
+00025 {
+00026 
+00027 };
+00028 
+00029 #endif
+

Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_move_incr_eval_8h-source.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_move_incr_eval_8h-source.html new file mode 100644 index 000000000..55c6633b1 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_move_incr_eval_8h-source.html @@ -0,0 +1,55 @@ + + +PARADISEO-MO: moMoveIncrEval.h Source File + + + + +
+ +
+

moMoveIncrEval.h

00001 // -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+00002 
+00003 // "eoMoveIncrEval.h"
+00004 
+00005 // (c) OPAC Team, LIFL, 2003-2006
+00006 
+00007 /* LICENCE TEXT
+00008    
+00009    Contact: paradiseo-help@lists.gforge.inria.fr
+00010 */
+00011 
+00012 #ifndef __moMoveIncrEval_h
+00013 #define __moMoveIncrEval_h
+00014 
+00015 #include <eoFunctor.h>
+00016 
+00018 
+00024 template < class M > class moMoveIncrEval:public eoBF < const M &, const typename
+00025   M::EOType &,
+00026   typename
+00027   M::EOType::Fitness >
+00028 {
+00029 
+00030 };
+00031 
+00032 #endif
+

Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_move_init_8h-source.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_move_init_8h-source.html new file mode 100644 index 000000000..ba05f6a6c --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_move_init_8h-source.html @@ -0,0 +1,53 @@ + + +PARADISEO-MO: moMoveInit.h Source File + + + + +
+ +
+

moMoveInit.h

00001 // -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+00002 
+00003 // "moMoveInit.h"
+00004 
+00005 // (c) OPAC Team, LIFL, 2003-2006
+00006 
+00007 /* LICENCE TEXT
+00008    
+00009    Contact: paradiseo-help@lists.gforge.inria.fr
+00010 */
+00011 
+00012 #ifndef __moMoveInit_h
+00013 #define __moMoveInit_h
+00014 
+00015 #include <eoFunctor.h>
+00016 
+00018 
+00022 template < class M > class moMoveInit:public eoBF < M &, const typename
+00023 M::EOType &, void >
+00024 {
+00025 
+00026 };
+00027 
+00028 #endif
+

Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_move_loop_expl_8h-source.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_move_loop_expl_8h-source.html new file mode 100644 index 000000000..17263c055 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_move_loop_expl_8h-source.html @@ -0,0 +1,52 @@ + + +PARADISEO-MO: moMoveLoopExpl.h Source File + + + + +
+ +
+

moMoveLoopExpl.h

00001 // -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+00002 
+00003 // "moMoveLoopExpl.h"
+00004 
+00005 // (c) OPAC Team, LIFL, 2003-2006
+00006 
+00007 /* TEXT LICENCE
+00008    
+00009    Contact: paradiseo-help@lists.gforge.inria.fr
+00010 */
+00011 
+00012 #ifndef __moMoveLoopExpl_h
+00013 #define __moMoveLoopExpl_h
+00014 
+00015 #include "moMoveExpl.h"
+00016 
+00018 
+00021 template < class M > class moMoveLoopExpl:public moMoveExpl < M >
+00022 {
+00023 
+00024 };
+00025 
+00026 #endif
+

Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_move_select_8h-source.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_move_select_8h-source.html new file mode 100644 index 000000000..ec0f45d67 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_move_select_8h-source.html @@ -0,0 +1,73 @@ + + +PARADISEO-MO: moMoveSelect.h Source File + + + + +
+ +
+

moMoveSelect.h

00001 // -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+00002 
+00003 // "moMoveSelect.h"
+00004 
+00005 // (c) OPAC Team, LIFL, 2003-2006
+00006 
+00007 /* TEXT LICENCE
+00008    
+00009    Contact: paradiseo-help@lists.gforge.inria.fr
+00010 */
+00011 
+00012 #ifndef __moMoveSelect_h
+00013 #define __moMoveSelect_h
+00014 
+00015 #include <eoFunctor.h>
+00016 
+00018 
+00021 class EmptySelection
+00022 {
+00023 
+00024 };
+00025 
+00027 
+00032 template < class M > class moMoveSelect:public eoBF < M &, typename M::EOType::Fitness &,
+00033   void >
+00034 {
+00035 public:
+00037   typedef
+00038     typename
+00039     M::EOType::Fitness
+00040     Fitness;
+00041 
+00043 
+00050   virtual void
+00051   init (const Fitness & __fit) = 0;
+00052 
+00054 
+00059   virtual
+00060     bool
+00061   update (const M & __move, const Fitness & __fit) = 0;
+00062 
+00063 };
+00064 
+00065 #endif
+

Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_next_move_8h-source.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_next_move_8h-source.html new file mode 100644 index 000000000..d4aa7fb26 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_next_move_8h-source.html @@ -0,0 +1,54 @@ + + +PARADISEO-MO: moNextMove.h Source File + + + + +
+ +
+

moNextMove.h

00001 // -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+00002 
+00003 // "moNextMove.h"
+00004 
+00005 // (c) OPAC Team, LIFL, 2003-2006
+00006 
+00007 /* LICENCE TEXT
+00008    
+00009    Contact: paradiseo-help@lists.gforge.inria.fr
+00010 */
+00011 
+00012 #ifndef __moNextMove_h
+00013 #define __moNextMove_h
+00014 
+00015 #include <eoFunctor.h>
+00016 
+00018 
+00022 template < class M > class moNextMove:public eoBF < M &, const typename
+00023   M::EOType &,
+00024   bool >
+00025 {
+00026 
+00027 };
+00028 
+00029 #endif
+

Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_no_aspir_crit_8h-source.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_no_aspir_crit_8h-source.html new file mode 100644 index 000000000..b280a9eed --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_no_aspir_crit_8h-source.html @@ -0,0 +1,64 @@ + + +PARADISEO-MO: moNoAspirCrit.h Source File + + + + +
+ +
+

moNoAspirCrit.h

00001 // -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+00002 
+00003 // "eoNoAspirCrit.h"
+00004 
+00005 // (c) OPAC Team, LIFL, 2003-2006
+00006 
+00007 /* TEXT LICENCE
+00008    
+00009    Contact: paradiseo-help@lists.gforge.inria.fr
+00010 */
+00011 
+00012 #ifndef __moNoAspirCrit_h
+00013 #define __moNoAspirCrit_h
+00014 
+00015 #include "moAspirCrit.h"
+00016 
+00018 
+00021 template < class M > class moNoAspirCrit:public moAspirCrit < M >
+00022 {
+00023 
+00025 
+00032   bool operator   () (const M & __move,
+00033                       const typename M::EOType::Fitness & __sol)
+00034   {
+00035 
+00036     return false;
+00037   }
+00038 
+00040 
+00043   void init ()
+00044   {
+00045   }
+00046 };
+00047 
+00048 #endif
+

Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_rand_impr_select_8h-source.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_rand_impr_select_8h-source.html new file mode 100644 index 000000000..1569c6b59 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_rand_impr_select_8h-source.html @@ -0,0 +1,104 @@ + + +PARADISEO-MO: moRandImprSelect.h Source File + + + + +
+ +
+

moRandImprSelect.h

00001 // -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+00002 
+00003 // "moRandImprSelect.h"
+00004 
+00005 // (c) OPAC Team, LIFL, 2003-2006
+00006 
+00007 /* LICENCE TEXT
+00008    
+00009    Contact: paradiseo-help@lists.gforge.inria.fr
+00010 */
+00011 
+00012 #ifndef __moRandImprSelect_h
+00013 #define __moRandImprSelect_h
+00014 
+00015 #include <vector>
+00016 
+00017 #include <utils/eoRNG.h>
+00018 #include "moMoveSelect.h"
+00019 
+00021 
+00025 template < class M > class moRandImprSelect:public moMoveSelect < M >
+00026 {
+00027 
+00028 public:
+00029 
+00031   typedef typename M::EOType::Fitness Fitness;
+00032 
+00034 
+00040   void init (const Fitness & __fit)
+00041   {
+00042     init_fit = __fit;
+00043     vect_better_fit.clear ();
+00044     vect_better_moves.clear ();
+00045   }
+00046 
+00048 
+00056   bool update (const M & __move, const Fitness & __fit)
+00057   {
+00058 
+00059     if (__fit > init_fit)
+00060       {
+00061 
+00062         vect_better_fit.push_back (__fit);
+00063         vect_better_moves.push_back (__move);
+00064       }
+00065 
+00066     return true;
+00067   }
+00068 
+00070 
+00077   void operator   () (M & __move, Fitness & __fit) throw (EmptySelection)
+00078   {
+00079 
+00080     if (!vect_better_fit.empty ())
+00081       {
+00082 
+00083         unsigned n = rng.random (vect_better_fit.size ());
+00084 
+00085         __move = vect_better_moves[n];
+00086         __fit = vect_better_fit[n];
+00087       }
+00088     else
+00089       throw EmptySelection ();
+00090   }
+00091 
+00092 private:
+00093 
+00095   Fitness init_fit;
+00096 
+00098   std::vector < Fitness > vect_better_fit;
+00099 
+00101   std::vector < M > vect_better_moves;
+00102 };
+00103 
+00104 #endif
+

Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_rand_move_8h-source.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_rand_move_8h-source.html new file mode 100644 index 000000000..b8917208b --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_rand_move_8h-source.html @@ -0,0 +1,52 @@ + + +PARADISEO-MO: moRandMove.h Source File + + + + +
+ +
+

moRandMove.h

00001 // -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+00002 
+00003 // "moRandMove.h"
+00004 
+00005 // (c) OPAC Team, LIFL, 2003-2006
+00006 
+00007 /* LICENCE TEXT
+00008    
+00009    Contact: paradiseo-help@lists.gforge.inria.fr
+00010 */
+00011 
+00012 #ifndef __moRandMove_h
+00013 #define __moRandMove_h
+00014 
+00015 #include <eoFunctor.h>
+00016 
+00018 
+00021 template < class M > class moRandMove:public eoUF < M &, void >
+00022 {
+00023 
+00024 };
+00025 
+00026 #endif
+

Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_s_a_8h-source.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_s_a_8h-source.html new file mode 100644 index 000000000..9ce49e519 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_s_a_8h-source.html @@ -0,0 +1,151 @@ + + +PARADISEO-MO: moSA.h Source File + + + + +
+ +
+

moSA.h

00001 // -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+00002 
+00003 // "moSA.h"
+00004 
+00005 // (c) OPAC Team, LIFL, 2003-2006
+00006 
+00007 /* LICENCE TEXT
+00008    
+00009    Contact: paradiseo-help@lists.gforge.inria.fr
+00010 */
+00011 
+00012 #ifndef __moSA_h
+00013 #define __moSA_h
+00014 
+00015 #include <eoOp.h>
+00016 #include <eoEvalFunc.h>
+00017 
+00018 #include "moAlgo.h"
+00019 #include "moRandMove.h"
+00020 #include "moMoveIncrEval.h"
+00021 #include "moCoolingSchedule.h"
+00022 #include "moSolContinue.h"
+00023 
+00024 #include <math.h>
+00025 
+00027 
+00030 template < class M > class moSA:public moAlgo < typename M::EOType >
+00031 {
+00032 
+00034   typedef
+00035     typename
+00036     M::EOType
+00037     EOT;
+00038 
+00040   typedef
+00041     typename
+00042     EOT::Fitness
+00043     Fitness;
+00044 
+00045 public:
+00046 
+00048 
+00058   moSA (moRandMove < M > &__move_rand,
+00059         moMoveIncrEval < M > &__incr_eval,
+00060         moSolContinue < EOT > &__cont,
+00061         double __init_temp,
+00062         moCoolingSchedule & __cool_sched, eoEvalFunc < EOT > &__full_eval):
+00063   move_rand (__move_rand),
+00064   incr_eval (__incr_eval),
+00065   cont (__cont),
+00066   init_temp (__init_temp),
+00067   cool_sched (__cool_sched),
+00068   full_eval (__full_eval)
+00069   {
+00070 
+00071   }
+00072 
+00074 
+00080   bool operator   ()(EOT & __sol)
+00081   {
+00082 
+00083     if (__sol.invalid ())
+00084       {
+00085         full_eval (__sol);
+00086       }
+00087 
+00088     double temp = init_temp;
+00089 
+00090     M move;
+00091 
+00092     EOT best_sol = __sol;
+00093 
+00094     do
+00095       {
+00096 
+00097         cont.init ();
+00098         do
+00099           {
+00100 
+00101             move_rand (move);
+00102 
+00103             Fitness delta_fit = incr_eval (move, __sol) - __sol.fitness ();
+00104 
+00105             if (delta_fit > 0 || rng.uniform () < exp (delta_fit / temp))
+00106               {
+00107 
+00108                 __sol.fitness (incr_eval (move, __sol));
+00109                 move (__sol);
+00110 
+00111                 /* Updating the best solution found
+00112                    until now ? */
+00113                 if (__sol.fitness () > best_sol.fitness ())
+00114                   best_sol = __sol;
+00115               }
+00116 
+00117           }
+00118         while (cont (__sol));
+00119 
+00120       }
+00121     while (cool_sched (temp));
+00122 
+00123     __sol = best_sol;
+00124 
+00125     return true;
+00126   }
+00127 
+00128 private:
+00129 
+00131   moRandMove < M > &move_rand;
+00132 
+00134   moMoveIncrEval < M > &incr_eval;
+00135 
+00137   moSolContinue < EOT > &cont;
+00138 
+00140   double  init_temp;
+00141 
+00143   moCoolingSchedule & cool_sched;
+00144 
+00146   eoEvalFunc < EOT > &full_eval;        // Full evaluator.
+00147 };
+00148 
+00149 #endif
+

Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_simple_move_tabu_list_8h-source.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_simple_move_tabu_list_8h-source.html new file mode 100644 index 000000000..343634a6b --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_simple_move_tabu_list_8h-source.html @@ -0,0 +1,141 @@ + + +PARADISEO-MO: moSimpleMoveTabuList.h Source File + + + + +
+ +
+

moSimpleMoveTabuList.h

00001 // -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+00002 
+00003 // "moSimpleMoveTabuList.h"
+00004 
+00005 // (c) OPAC Team, LIFL, 2003-2007
+00006 
+00007 /* LICENCE TEXT 
+00008    
+00009    Contact: paradiseo-help@lists.gforge.inria.fr
+00010 */
+00011 
+00012 #ifndef __moSimpleMoveTabuList_h
+00013 #define __moSimpleMoveTabuList_h
+00014 
+00015 #include <list>
+00016 #include <iterator>
+00017 
+00018 #include "moTabuList.h"
+00019 
+00021 template <class M>
+00022 class moSimpleMoveTabuList: public moTabuList < M >
+00023 {
+00024   
+00025 public:
+00026   
+00028   typedef typename M::EOType EOT;
+00029 
+00031   /*
+00032     \param __size The maximum size of the move tabu list.
+00033    */
+00034   moSimpleMoveTabuList(unsigned int __size): maxSize(__size)
+00035   {
+00036     currentSize=0;
+00037   }
+00038 
+00040 
+00045   bool
+00046   operator () (const M & __move, const EOT & __sol) 
+00047   {
+00048     typename std::list<M>::iterator it;
+00049     
+00050     it=tabuList.begin();
+00051     while(it!=tabuList.end()&&(!((*it)==__move)))
+00052       {
+00053         it++;
+00054       }
+00055     
+00056     return it!=tabuList.end();
+00057   }
+00058   
+00059   void
+00060   add (const M & __move, const EOT & __sol)
+00061   {
+00062     if(currentSize!=0)
+00063       {
+00064         // Useful in the case of a move has been kept thanks to the moAspirCrit.
+00065         // In this case, the move can already be in the tabuList.
+00066         removeMove(__move);
+00067       }
+00068 
+00069     tabuList.push_back(__move);
+00070     
+00071     if(currentSize==maxSize)
+00072       {
+00073         tabuList.erase(tabuList.begin());
+00074       }
+00075     else
+00076       {
+00077         currentSize++;
+00078       }
+00079   }
+00080   
+00081   void
+00082   update ()
+00083   {
+00084     //nothing to do
+00085   }
+00086 
+00087   void
+00088   init ()
+00089   {
+00090     //nothing to do
+00091   }
+00092 
+00093 private:
+00094   
+00096 
+00099   void
+00100   removeMove(const M & __move)
+00101   {
+00102     typename std::list<M>::iterator it;
+00103     
+00104     it=tabuList.begin();
+00105     while(it!=tabuList.end()&&(!((*it)==__move)))
+00106       {
+00107         it++;
+00108       }
+00109 
+00110     if(it!=tabuList.end())
+00111       {
+00112         tabuList.erase(it);
+00113       }
+00114   }
+00115 
+00117   unsigned int maxSize;
+00118 
+00120   unsigned int currentSize;
+00121   
+00123   std::list<M> tabuList;
+00124 };
+00125 
+00126 #endif
+

Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_simple_solution_tabu_list_8h-source.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_simple_solution_tabu_list_8h-source.html new file mode 100644 index 000000000..1584ff1fa --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_simple_solution_tabu_list_8h-source.html @@ -0,0 +1,148 @@ + + +PARADISEO-MO: moSimpleSolutionTabuList.h Source File + + + + +
+ +
+

moSimpleSolutionTabuList.h

00001 // -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+00002 
+00003 // "moSimpleSolutionTabuList.h"
+00004 
+00005 // (c) OPAC Team, LIFL, 2003-2007
+00006 
+00007 /* LICENCE TEXT 
+00008    
+00009    Contact: paradiseo-help@lists.gforge.inria.fr
+00010 */
+00011 
+00012 #ifndef __moSimpleSolutionTabuList_h
+00013 #define __moSimpleSolutionTabuList_h
+00014 
+00015 #include <list>
+00016 #include <iterator>
+00017 
+00018 #include "moTabuList.h"
+00019 
+00021 template <class M>
+00022 class moSimpleSolutionTabuList: public moTabuList < M >
+00023 {
+00024   
+00025 public:
+00026 
+00028   typedef typename M::EOType EOT;
+00029   
+00031 
+00034   moSimpleSolutionTabuList(unsigned int __size): maxSize(__size)
+00035   {
+00036     currentSize=0;
+00037   }
+00038   
+00040 
+00045   bool operator () (const M & __move, const EOT & __sol) 
+00046   {
+00047     typename std::list<EOT>::iterator it;
+00048   
+00049     M _move=(M)__move;
+00050     EOT _sol=(EOT) __sol;
+00051 
+00052     _move(_sol);
+00053   
+00054     it=tabuList.begin();
+00055     while(it!=tabuList.end()&&(!((*it)==_sol)))
+00056       {
+00057         it++;
+00058       }
+00059     
+00060     return it!=tabuList.end();
+00061   }
+00062   
+00063   void
+00064   add (const M & __move, const EOT & __sol)
+00065   {
+00066     M _move=(M)__move;
+00067     EOT _sol=(EOT) _sol;
+00068     
+00069     _move(_sol);
+00070 
+00071     if(currentSize!=0)
+00072       {
+00073         // Useful in the case of a solution has been kept thanks to the moAspirCrit.
+00074         // In this case, the solution can already be in the tabuList.
+00075         removeSolution(_sol);
+00076       }
+00077     
+00078     tabuList.push_back(_sol);
+00079     
+00080     if(currentSize==maxSize)
+00081       {
+00082         tabuList.erase(tabuList.begin());
+00083       }
+00084     else
+00085       {
+00086         currentSize++;
+00087       }
+00088   }
+00089 
+00090   void
+00091   update ()
+00092   {
+00093     //nothing to do
+00094   }
+00095 
+00096   void
+00097   init ()
+00098   {
+00099     //nothing to do
+00100   }
+00101 
+00102 private:
+00103 
+00105 
+00108   void
+00109   removeSolution(const EOT & __sol)
+00110   {
+00111     typename std::list<EOT>::iterator it;
+00112 
+00113     it=tabuList.begin();
+00114     while(it!=tabuList.end()&&(!((*it)==__sol)))
+00115       {
+00116         it++;
+00117       }
+00118 
+00119     if(it!=tabuList.end())
+00120       {
+00121         tabuList.erase(it);
+00122       }
+00123   }
+00124   
+00126   unsigned int maxSize;
+00127 
+00129   unsigned int currentSize;
+00130   
+00132   std::list<EOT> tabuList;
+00133 };
+00134 
+00135 #endif
+

Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_sol_continue_8h-source.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_sol_continue_8h-source.html new file mode 100644 index 000000000..897f6d723 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_sol_continue_8h-source.html @@ -0,0 +1,55 @@ + + +PARADISEO-MO: moSolContinue.h Source File + + + + +
+ +
+

moSolContinue.h

00001 // -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+00002 
+00003 // "moSolContinue.h"
+00004 
+00005 // (c) OPAC Team, LIFL, 2003-2006
+00006 
+00007 /* LICENCE TEXT
+00008    
+00009    Contact: paradiseo-help@lists.gforge.inria.fr
+00010 */
+00011 
+00012 #ifndef __moSolContinue_h
+00013 #define __moSolContinue_h
+00014 
+00015 #include <eoFunctor.h>
+00016 
+00018 
+00022 template < class EOT > class moSolContinue:public eoUF < const EOT &, bool >
+00023 {
+00024 
+00025 public:
+00027 
+00030   virtual void init () = 0;
+00031 };
+00032 
+00033 #endif
+

Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_t_s_8h-source.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_t_s_8h-source.html new file mode 100644 index 000000000..57f653d51 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_t_s_8h-source.html @@ -0,0 +1,171 @@ + + +PARADISEO-MO: moTS.h Source File + + + + +
+ +
+

moTS.h

00001 // -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+00002 
+00003 // "moTS.h"
+00004 
+00005 // (c) OPAC Team, LIFL, 2003-2006
+00006 
+00007 /* LICENCE TEXT
+00008       
+00009    Contact: paradiseo-help@lists.gforge.inria.fr
+00010 */
+00011 
+00012 #ifndef __moTS_h
+00013 #define __moTS_h
+00014 
+00015 #include <eoOp.h>
+00016 #include <eoEvalFunc.h>
+00017 
+00018 #include "moAlgo.h"
+00019 #include "moSolContinue.h"
+00020 
+00021 #include "moMoveExpl.h"
+00022 #include "moTSMoveLoopExpl.h"
+00023 
+00024 #include <pthread.h>
+00025 
+00027 
+00030 template < class M > class moTS:public moAlgo < typename M::EOType >
+00031 {
+00032 
+00034   typedef
+00035     typename
+00036     M::EOType
+00037     EOT;
+00038 
+00040   typedef
+00041     typename
+00042     EOT::Fitness
+00043     Fitness;
+00044 
+00045 public:
+00046 
+00048 
+00059 moTS (moMoveInit < M > &__move_init, moNextMove < M > &__next_move, moMoveIncrEval < M > &__incr_eval, moTabuList < M > &__tabu_list, moAspirCrit < M > &__aspir_crit, moSolContinue < EOT > &__cont, eoEvalFunc < EOT > &__full_eval):move_expl (*new moTSMoveLoopExpl < M >
+00060              (__move_init, __next_move, __incr_eval, __tabu_list,
+00061               __aspir_crit)), cont (__cont), full_eval (__full_eval)
+00062   {
+00063 
+00064     if (first_time)
+00065       {
+00066 
+00067         pthread_mutex_init (&mutex, 0);
+00068 
+00069         first_time = false;
+00070       }
+00071   }
+00072 
+00074 
+00081 moTS (moMoveExpl < M > &__move_expl, moSolContinue < EOT > &__cont, eoEvalFunc < EOT > &__full_eval):move_expl (__move_expl),
+00082     cont (__cont),
+00083     full_eval (__full_eval)
+00084   {
+00085 
+00086     if (first_time)
+00087       {
+00088 
+00089         pthread_mutex_init (&mutex, 0);
+00090 
+00091         first_time = false;
+00092       }
+00093   }
+00094 
+00096 
+00104   bool operator   ()(EOT & __sol)
+00105   {
+00106 
+00107     pthread_mutex_lock (&mutex);
+00108 
+00109     if (__sol.invalid ())
+00110       {
+00111         full_eval (__sol);
+00112       }
+00113 
+00114     M move;
+00115 
+00116     EOT best_sol = __sol, new_sol;
+00117 
+00118     cont.init ();
+00119 
+00120     do
+00121       {
+00122 
+00123         new_sol = __sol;
+00124 
+00125         try
+00126         {
+00127 
+00128           move_expl (__sol, new_sol);
+00129 
+00130         }
+00131         catch (EmptySelection & __ex)
+00132         {
+00133 
+00134           break;
+00135         }
+00136 
+00137         /* Updating the best solution
+00138            found until now ? */
+00139         if (new_sol.fitness () > __sol.fitness ())
+00140           {
+00141             best_sol = new_sol;
+00142           }
+00143 
+00144         __sol = new_sol;
+00145 
+00146       }
+00147     while (cont (__sol));
+00148 
+00149     __sol = best_sol;
+00150 
+00151     pthread_mutex_unlock (&mutex);
+00152 
+00153     return true;
+00154   }
+00155 
+00156 private:
+00157 
+00159   static bool first_time;
+00160 
+00162   static  pthread_mutex_t  mutex;
+00163 
+00165   moMoveExpl < M > &move_expl;
+00166 
+00168   moSolContinue < EOT > &cont;
+00169 
+00171   eoEvalFunc < EOT > &full_eval;
+00172 };
+00173 
+00175 template < class EOT > pthread_mutex_t moTS < EOT >::mutex;
+00176 
+00178 template < class EOT > bool moTS < EOT >::first_time = true;
+00179 
+00180 #endif
+

Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_t_s_move_loop_expl_8h-source.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_t_s_move_loop_expl_8h-source.html new file mode 100644 index 000000000..02a7dcc1d --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_t_s_move_loop_expl_8h-source.html @@ -0,0 +1,135 @@ + + +PARADISEO-MO: moTSMoveLoopExpl.h Source File + + + + +
+ +
+

moTSMoveLoopExpl.h

00001 // -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+00002 
+00003 // "moTSMoveLoopExpl.h"
+00004 
+00005 // (c) OPAC Team, LIFL, 2003-2006
+00006 
+00007 /* LICENCE TEXT
+00008    
+00009    Contact: paradiseo-help@lists.gforge.inria.fr
+00010 */
+00011 
+00012 #ifndef __moTSMoveLoopExpl_h
+00013 #define __moTSMoveLoopExpl_h
+00014 
+00015 #include "moMoveLoopExpl.h"
+00016 
+00017 #include "moMoveInit.h"
+00018 #include "moNextMove.h"
+00019 #include "moMoveIncrEval.h"
+00020 #include "moMoveSelect.h"
+00021 
+00022 #include "moTabuList.h"
+00023 #include "moAspirCrit.h"
+00024 #include "moBestImprSelect.h"
+00025 
+00027 
+00030 template < class M > class moTSMoveLoopExpl:public moMoveLoopExpl < M >
+00031 {
+00032 
+00034   typedef typename M::EOType EOT;
+00035 
+00037   typedef typename M::EOType::Fitness Fitness;
+00038 
+00039 public:
+00040 
+00042 
+00049 moTSMoveLoopExpl (moMoveInit < M > &__move_init, moNextMove < M > &__next_move, moMoveIncrEval < M > &__incr_eval, moTabuList < M > &__tabu_list, moAspirCrit < M > &__aspir_crit):
+00050   move_init (__move_init),
+00051     next_move (__next_move),
+00052     incr_eval (__incr_eval),
+00053     tabu_list (__tabu_list), aspir_crit (__aspir_crit)
+00054   {
+00055 
+00056     tabu_list.init ();
+00057     aspir_crit.init ();
+00058   }
+00059 
+00061 
+00069   void operator   () (const EOT & __old_sol, EOT & __new_sol)
+00070   {
+00071 
+00072     M move;
+00073 
+00074 
+00075     move_init (move, __old_sol);        /* Restarting the exploration of 
+00076                                            of the neighborhood ! */
+00077 
+00078     move_select.init (__old_sol.fitness ());
+00079 
+00080     do
+00081       {
+00082 
+00083         Fitness fit = incr_eval (move, __old_sol);
+00084 
+00085         if (!tabu_list (move, __old_sol) || aspir_crit (move, fit))
+00086           {
+00087             if (!move_select.update (move, fit))
+00088               break;
+00089           }
+00090 
+00091       }
+00092     while (next_move (move, __old_sol));
+00093 
+00094     M best_move;
+00095 
+00096     Fitness best_move_fit;
+00097 
+00098     move_select (best_move, best_move_fit);
+00099 
+00100     __new_sol.fitness (best_move_fit);
+00101     best_move (__new_sol);
+00102 
+00103     /* Removing moves that are
+00104        no more tabu */
+00105     tabu_list.update ();
+00106 
+00107     // Updating the tabu list
+00108     tabu_list.add (best_move, __new_sol);
+00109   }
+00110 
+00111 private:
+00112 
+00114   moMoveInit < M > &move_init;
+00115 
+00117   moNextMove < M > &next_move;
+00118 
+00120   moMoveIncrEval < M > &incr_eval;
+00121 
+00123   moBestImprSelect < M > move_select;
+00124 
+00126   moTabuList < M > &tabu_list;
+00127 
+00129   moAspirCrit < M > &aspir_crit;
+00130 };
+00131 
+00132 #endif
+

Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_tabu_list_8h-source.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_tabu_list_8h-source.html new file mode 100644 index 000000000..2a3f90ac0 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/mo_tabu_list_8h-source.html @@ -0,0 +1,68 @@ + + +PARADISEO-MO: moTabuList.h Source File + + + + +
+ +
+

moTabuList.h

00001 // -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+00002 
+00003 // "moTabuList.h"
+00004 
+00005 // (c) OPAC Team, LIFL, 2003-2006
+00006 
+00007 /* LICENCE TEXT 
+00008    
+00009    Contact: paradiseo-help@lists.gforge.inria.fr
+00010 */
+00011 
+00012 #ifndef __moTabuList_h
+00013 #define __moTabuList_h
+00014 
+00015 #include <eoFunctor.h>
+00016 
+00018 
+00022 template < class M > class moTabuList:public eoBF < const M &, const typename
+00023   M::EOType &,
+00024   bool >
+00025 {
+00026 
+00027 public:
+00029   typedef typename M::EOType EOT;
+00030 
+00032 
+00038   virtual void
+00039   add (const M & __move, const EOT & __sol) = 0;
+00040 
+00042 
+00045   virtual void
+00046   update () = 0;
+00047 
+00049 
+00052   virtual void
+00053   init () = 0;
+00054 };
+00055 
+00056 #endif
+

Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/search.idx b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/search.idx new file mode 100644 index 0000000000000000000000000000000000000000..a53ef783960d34175939239ebf3624c3d1f70c28 GIT binary patch literal 342580 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 r + +Search + + + + +
+
    +
  • Main Page
  • +
  • Classes
  • +
  • Files
  • +
  • +
    + + + + +1 document matching your query."; + } + else // $num>1 + { + return "Found $num documents matching your query. Showing best matches first."; + } +} + +function report_matches() +{ + return "Matches: "; +} +function end_form($value) +{ + echo " \n \n
    \n
    \n
  • \n
\n
\n"; +} + +function readInt($file) +{ + $b1 = ord(fgetc($file)); $b2 = ord(fgetc($file)); + $b3 = ord(fgetc($file)); $b4 = ord(fgetc($file)); + return ($b1<<24)|($b2<<16)|($b3<<8)|$b4; +} + +function readString($file) +{ + $result=""; + while (ord($c=fgetc($file))) $result.=$c; + return $result; +} + +function readHeader($file) +{ + $header =fgetc($file); $header.=fgetc($file); + $header.=fgetc($file); $header.=fgetc($file); + return $header; +} + +function computeIndex($word) +{ + // Fast string hashing + //$lword = strtolower($word); + //$l = strlen($lword); + //for ($i=0;$i<$l;$i++) + //{ + // $c = ord($lword{$i}); + // $v = (($v & 0xfc00) ^ ($v << 6) ^ $c) & 0xffff; + //} + //return $v; + + // Simple hashing that allows for substring search + if (strlen($word)<2) return -1; + // high char of the index + $hi = ord($word{0}); + if ($hi==0) return -1; + // low char of the index + $lo = ord($word{1}); + if ($lo==0) return -1; + // return index + return $hi*256+$lo; +} + +function search($file,$word,&$statsList) +{ + $index = computeIndex($word); + if ($index!=-1) // found a valid index + { + fseek($file,$index*4+4); // 4 bytes per entry, skip header + $index = readInt($file); + if ($index) // found words matching the hash key + { + $start=sizeof($statsList); + $count=$start; + fseek($file,$index); + $w = readString($file); + while ($w) + { + $statIdx = readInt($file); + if ($word==substr($w,0,strlen($word))) + { // found word that matches (as substring) + $statsList[$count++]=array( + "word"=>$word, + "match"=>$w, + "index"=>$statIdx, + "full"=>strlen($w)==strlen($word), + "docs"=>array() + ); + } + $w = readString($file); + } + $totalHi=0; + $totalFreqHi=0; + $totalFreqLo=0; + for ($count=$start;$count $idx, + "freq" => $freq>>1, + "rank" => 0.0, + "hi" => $freq&1 + ); + if ($freq&1) // word occurs in high priority doc + { + $totalHi++; + $totalFreqHi+=$freq*$multiplier; + } + else // word occurs in low priority doc + { + $totalFreqLo+=$freq*$multiplier; + } + } + // read name and url info for the doc + for ($i=0;$i<$numDocs;$i++) + { + fseek($file,$docInfo[$i]["idx"]); + $docInfo[$i]["name"]=readString($file); + $docInfo[$i]["url"]=readString($file); + } + $statInfo["docs"]=$docInfo; + } + $totalFreq=($totalHi+1)*$totalFreqLo + $totalFreqHi; + for ($count=$start;$count$key, + "name"=>$di["name"], + "rank"=>$rank + ); + } + $docs[$key]["words"][] = array( + "word"=>$wordInfo["word"], + "match"=>$wordInfo["match"], + "freq"=>$di["freq"] + ); + } + } + return $docs; +} + +function filter_results($docs,&$requiredWords,&$forbiddenWords) +{ + $filteredDocs=array(); + while (list ($key, $val) = each ($docs)) + { + $words = &$docs[$key]["words"]; + $copy=1; // copy entry by default + if (sizeof($requiredWords)>0) + { + foreach ($requiredWords as $reqWord) + { + $found=0; + foreach ($words as $wordInfo) + { + $found = $wordInfo["word"]==$reqWord; + if ($found) break; + } + if (!$found) + { + $copy=0; // document contains none of the required words + break; + } + } + } + if (sizeof($forbiddenWords)>0) + { + foreach ($words as $wordInfo) + { + if (in_array($wordInfo["word"],$forbiddenWords)) + { + $copy=0; // document contains a forbidden word + break; + } + } + } + if ($copy) $filteredDocs[$key]=$docs[$key]; + } + return $filteredDocs; +} + +function compare_rank($a,$b) +{ + if ($a["rank"] == $b["rank"]) + { + return 0; + } + return ($a["rank"]>$b["rank"]) ? -1 : 1; +} + +function sort_results($docs,&$sorted) +{ + $sorted = $docs; + usort($sorted,"compare_rank"); + return $sorted; +} + +function report_results(&$docs) +{ + echo "\n"; + echo " \n"; + echo " \n"; + echo " \n"; + $numDocs = sizeof($docs); + if ($numDocs==0) + { + echo " \n"; + echo " \n"; + echo " \n"; + } + else + { + echo " \n"; + echo " \n"; + echo " \n"; + $num=1; + foreach ($docs as $doc) + { + echo " \n"; + echo " "; + echo "\n"; + echo " \n"; + echo " \n"; + echo " \n"; + $num++; + } + } + echo "

".search_results()."

".matches_text(0)."
".matches_text($numDocs); + echo "\n"; + echo "
$num.".$doc["name"]."
".report_matches()." "; + foreach ($doc["words"] as $wordInfo) + { + $word = $wordInfo["word"]; + $matchRight = substr($wordInfo["match"],strlen($word)); + echo "$word$matchRight(".$wordInfo["freq"].") "; + } + echo "
\n"; +} + +function main() +{ + if(strcmp('4.1.0', phpversion()) > 0) + { + die("Error: PHP version 4.1.0 or above required!"); + } + if (!($file=fopen("search.idx","rb"))) + { + die("Error: Search index file could NOT be opened!"); + } + if (readHeader($file)!="DOXS") + { + die("Error: Header of index file is invalid!"); + } + $query=""; + if (array_key_exists("query", $_GET)) + { + $query=$_GET["query"]; + } + end_form($query); + echo " \n
\n"; + $results = array(); + $requiredWords = array(); + $forbiddenWords = array(); + $foundWords = array(); + $word=strtok($query," "); + while ($word) // for each word in the search query + { + if (($word{0}=='+')) { $word=substr($word,1); $requiredWords[]=$word; } + if (($word{0}=='-')) { $word=substr($word,1); $forbiddenWords[]=$word; } + if (!in_array($word,$foundWords)) + { + $foundWords[]=$word; + search($file,strtolower($word),$results); + } + $word=strtok(" "); + } + $docs = array(); + combine_results($results,$docs); + // filter out documents with forbidden word or that do not contain + // required words + $filteredDocs = filter_results($docs,$requiredWords,$forbiddenWords); + // sort the results based on rank + $sorted = array(); + sort_results($filteredDocs,$sorted); + // report results to the user + report_results($sorted); + echo "
\n"; + fclose($file); +} + +main(); + + +?> +
Generated on Tue Jun 26 13:18:41 2007 for PARADISEO-MO by  + +doxygen 1.5.2
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/tab_b.gif b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/tab_b.gif new file mode 100644 index 0000000000000000000000000000000000000000..0d623483ffdf5f9f96900108042a7ab0643fe2a3 GIT binary patch literal 35 ncmZ?wbhEHbWMp7uXkcJy*>IeJfk6j|fqX^=1|}vKMh0sDa2W*H literal 0 HcmV?d00001 diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/tab_l.gif b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/tab_l.gif new file mode 100644 index 0000000000000000000000000000000000000000..9b1e6337c9299a700401a2a78a2c6ffced475216 GIT binary patch literal 706 zcmZ?wbhEHbZT`}F1e&(Gg}Y(8=I;HA5#Z$3JI=gGB)FQ#odI(O&E^@q;x zK6mr*m3xOS-#u~t!I@i+u0DKm^U160k6t`|^WpV}&n+8{U%dD9&a>B#U%!9-@yol< zU%&tQ{rk_K|NsC0`}dE5ET99@1@a36+kb~?0UJ*yc&I3X_m z!ND^5$O7$#8OFRuDhG}!?8z?cdZK&!`PWjdR;Aj^wZ` zeK{IEYHBJ)6K8VIp1`BVt++swf6j+=L{p1*nO(VhE`pFexG@5$|>uaCcd z`0m=9m+yak{QmXN#Sc$^{$X9h9&q2jiKAI|&T)a;PPx2K9p`YIdw8HtR5k2Q$2-O2 z*;3y{MQ-RnJTgJfI&R5|O)AHxDf_00XbPvDZPy4t=hHd)nfLPvms&O`Ok(sD()5v$ z5U@&h;a=#xbxVbo2~X&Xj0Ie(f{v>vERH+qC+nTG=B8Nca=wU-O$?1&vUgV~9=!H; zx>3p9Yn%*<>t~sk+&0xfyS8RsPfYBd<~wWK%j-LmpU>O7yX^h#UCp1x-p#i7@bE;py8XI6 zmY<)m>~)W~yIWcMVoiPg{duuf<*)9qZ9l$m*Ph&W&$jlv*Vpa+{pH@n=IQ$L?0$ax ec60Ul|8o2P|NVbd{6P)#weSbE3}s?04AuZvx_~SI literal 0 HcmV?d00001 diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/tab_r.gif b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/tab_r.gif new file mode 100644 index 0000000000000000000000000000000000000000..ce9dd9f533cb5486d6941844f442b59d4a9e9175 GIT binary patch literal 2585 zcmbV}`9Bkk1ILFF--w5zJc=ZZT(zjE=;2|_S)Qm~rCWz1Pc)KPl;jv%A#&v2*x}yc zmf2~Jm~&=xjJY?PqwIN}f8qQ2{r$uH{c*nJbmr{cR5??*egHrs-B=MzCF`3%e{FAW z{oL5xTHn~5TM{jaB;@|_Ue5F&Zb@p(kMyG{*;gWDg zyeL|eZf7Qd8=#bXzSiR{yzRgLSj-fJS8>lBjVHN z^o-0eS=nE6a`W;LChBs=`+QAJP~{b93>H^eRb5kCSC1zUNezun%`L5M?RDzv#%jk7 zYVRX=vATPD`+oEfum^{RM@GjuP?-r=yh0!p;Vx^T9G7~`7%5ydH%70=jyJ;;`d;hv92x3R=z{xp+Lg2!*@OK*K15-t&okoPtSED)h&$RLxdbA zseWm^C3d%-yRNi-ryk^!ek+C`n&~cd$#ZWct_cUL{l~i+Nzx^5d!n94(>bW-iL~Rl z&8r)?q|1DIo=0=judQ{FaGcfLERz8gfn3-Qt<2lksh{mzpT}DXxUuR^z=^key&q4! z+wWI45vL0k$R^(F#{qfqhUsN@WA+w-V?LPH33!Q?WFSB3)WBojE@hK41Nb?KfS+Qo zXgrzfsP$wr4Qzy*{OD>uJBjdgGM@VMml5)2f~_}lD*YyOb}Hjeobhz#4c`w(l^>KK zr?Ud;W~Z}*w;%hZ|2^p^+f06gJDJQD zeIhGADbDmm&6arh(q>EZ<7mjzg7l|z$hRL8=1>)Nv=S7CY$B}iYJ&*T_-T_OG*L1q ztZ3Lana33?y3AKnyq^YCF|4x%Rb5WU&2qcl{TFKey%QJeMxn^SdT!hZ5+0i1zeusiYVp-phBl7b5+Px-X&LhByq z0F&<;K0l2+v>qiHlXb#$jXMv$uK-dEGE9L~qtdU(XeRXmvu*K2Q&6!fD**JxYP4b4BR7FdJ$Qx9G9`J%-_X!a#LGpp3g9)VWytGCa;7`S1_e8F~!R+aSJ zOF17p2`H?2kPs8Q`_;U}+D%3p zs2-0BTqFwpUoBk`?P;iPQ(IbEA|JmMx!P&YYG|R@S=5Mnw;-?A6rEEVyV%d7{iU4a zNk`i!%F(Ykpm`}#oH;BjY->@b8vQedv;pza2FL&*6ufjd+*3Ute&>kes~TU?^KkojsTh(o~(3tk1Y6>4(yn( z#U*ID9@eg-beKo1B;HXe+}{Z%n@7m0+yxivuqk9~;!1LGQlah)xYK4>wgL}l6dsaN zIxlRlq`*`j9PG4*0hD6YV_b_2w5b#)o7J?`q#{GjvvKlD`T*dWcZx<-s(ZvLB44E# z=!|sw!?)@%y$oRNL#25WS3lzdii}TuQ3?CLnvQ1_n};2sT_;Y;#d3=+-(O% zMN$>O!3;ke(UuLR%h_&)N zs^!-@A>QR}4yB1bPp`9S19ikTbZ~O{&FF-yHK{En;mmShDUIEw03`j(DBIsM}Rjki2J#SQa3gFZTKBPDeIiLt9Z z%bL3(B@Qw%(B`wSMS~dPh$=R`(}lBoFXKy(s|*{#ru$wjsBc_O#zxNk9w+UUHmx(U zmJ8+M+ndtnZ<7|VU9Mbt61zpo9T&3%Wx&XII=#QJxjR`CZf22ac3d51Z?GD%LEe_&*t46Qf;4`bZ7p2K(Ab5>GfT^}4! zBT&HZD`^PEgWoI&{~o-ID0F?O`75sm(87x%A{(}Ch1)QlzdJ)1B-eqe5a(weg0`4lQIf1evjvbBY50DVbzO7CLf|vP z2#0(U-|jZ`H{y5N^o7%iK6H>_HEGN->U6^!)1{XpJV!!4(Ig7wzZQ*9WYF4X1rG0x z=1uA@i`rIAciubDC{;~b(|&|A@xkjRP5aRcvRU9tvIm}jDB6J eQ0-6-y)mpwdT=ayS0tBxKDA*~;EWmo literal 0 HcmV?d00001 diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/tabs.css b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/tabs.css new file mode 100644 index 000000000..c37faafe8 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/tabs.css @@ -0,0 +1,102 @@ +/* tabs styles, based on http://www.alistapart.com/articles/slidingdoors */ + +DIV.tabs +{ + float : left; + width : 100%; + background : url("tab_b.gif") repeat-x bottom; + margin-bottom : 4px; +} + +DIV.tabs UL +{ + margin : 0px; + padding-left : 10px; + list-style : none; +} + +DIV.tabs LI, DIV.tabs FORM +{ + display : inline; + margin : 0px; + padding : 0px; +} + +DIV.tabs FORM +{ + float : right; +} + +DIV.tabs A +{ + float : left; + background : url("tab_r.gif") no-repeat right top; + border-bottom : 1px solid #84B0C7; + font-size : x-small; + font-weight : bold; + text-decoration : none; +} + +DIV.tabs A:hover +{ + background-position: 100% -150px; +} + +DIV.tabs A:link, DIV.tabs A:visited, +DIV.tabs A:active, DIV.tabs A:hover +{ + color: #1A419D; +} + +DIV.tabs SPAN +{ + float : left; + display : block; + background : url("tab_l.gif") no-repeat left top; + padding : 5px 9px; + white-space : nowrap; +} + +DIV.tabs INPUT +{ + float : right; + display : inline; + font-size : 1em; +} + +DIV.tabs TD +{ + font-size : x-small; + font-weight : bold; + text-decoration : none; +} + + + +/* Commented Backslash Hack hides rule from IE5-Mac \*/ +DIV.tabs SPAN {float : none;} +/* End IE5-Mac hack */ + +DIV.tabs A:hover SPAN +{ + background-position: 0% -150px; +} + +DIV.tabs LI.current A +{ + background-position: 100% -150px; + border-width : 0px; +} + +DIV.tabs LI.current SPAN +{ + background-position: 0% -150px; + padding-bottom : 6px; +} + +DIV.nav +{ + background : none; + border : none; + border-bottom : 1px solid #84B0C7; +} diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/tree.html b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/tree.html new file mode 100644 index 000000000..f7599816b --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/html/tree.html @@ -0,0 +1,250 @@ + + + + + + + TreeView + + + + +
+

PARADISEO-MO

+
+

o*Welcome to PARADISEO-Moving Objects

+

o+Class List

+ +

o+Class Hierarchy

+
+

|o*EmptySelection

+

|o+eoFunctorBase [external]

+
+

||o+eoBF< const M &, const M::EOType &, bool > [external]

+ +

||o+eoBF< const M &, const M::EOType &, M::EOType::Fitness > [external]

+ +

||o+eoBF< const M &, const M::EOType &, void > [external]

+ +

||o+eoBF< const M &, const M::EOType::Fitness &, bool > [external]

+ +

||o+eoBF< const M::EOType &, M::EOType &, void > [external]

+ +

||o+eoBF< M &, const M::EOType &, bool > [external]

+ +

||o+eoBF< M &, const M::EOType &, void > [external]

+ +

||o+eoBF< M &, M::EOType::Fitness &, void > [external]

+ +

||o+eoUF< const EOT &, bool > [external]

+ +

||o+eoUF< double &, bool > [external]

+ +

||o+eoUF< EOT &, bool > [external]

+
+

|||\+eoMonOp< EOT > [external]

+ +
+

||o+eoUF< EOT &, void > [external]

+ +

||o*eoUF< EOType &, bool > [external]

+

||o+eoUF< M &, void > [external]

+ +

||\+eoUF< M::EOType &, bool > [external]

+ +
+

|\+eoOp< EOType > [external]

+
+

| o*eoMonOp< EOT > [external]

+

| \*eoMonOp< M::EOType > [external]

+
+
+

o*Class Members

+

\+File List

+
+

 o*index.h

+

 o*mo.h

+

 o*moAlgo.h

+

 o*moAspirCrit.h

+

 o*moBestImprSelect.h

+

 o*moCoolingSchedule.h

+

 o*moExponentialCoolingSchedule.h

+

 o*moFirstImprSelect.h

+

 o*moGenSolContinue.h

+

 o*moHC.h

+

 o*moHCMoveLoopExpl.h

+

 o*moImprBestFitAspirCrit.h

+

 o*moItRandNextMove.h

+

 o*moLinearCoolingSchedule.h

+

 o*moLSCheckPoint.h

+

 o*moMove.h

+

 o*moMoveExpl.h

+

 o*moMoveIncrEval.h

+

 o*moMoveInit.h

+

 o*moMoveLoopExpl.h

+

 o*moMoveSelect.h

+

 o*moNextMove.h

+

 o*moNoAspirCrit.h

+

 o*moRandImprSelect.h

+

 o*moRandMove.h

+

 o*moSA.h

+

 o*moSimpleMoveTabuList.h

+

 o*moSimpleSolutionTabuList.h

+

 o*moSolContinue.h

+

 o*moTabuList.h

+

 o*moTS.h

+

 \*moTSMoveLoopExpl.h

+
+
+
+ + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/FreeSans.ttf b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/FreeSans.ttf new file mode 100644 index 0000000000000000000000000000000000000000..b550b90ba5480f9a3db170a19a1f86daecb0dc92 GIT binary patch literal 22932 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 RlllN>Fk>(~eFPlj{{dxA`xyWL literal 0 HcmV?d00001 diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/Makefile b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/Makefile new file mode 100644 index 000000000..776fcf968 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/Makefile @@ -0,0 +1,39 @@ +all: clean refman.dvi + +ps: refman.ps + +pdf: refman.pdf + +ps_2on1: refman_2on1.ps + +pdf_2on1: refman_2on1.pdf + +refman.ps: refman.dvi + dvips -o refman.ps refman.dvi + +refman.pdf: refman.ps + ps2pdf refman.ps refman.pdf + +refman.dvi: refman.tex doxygen.sty + echo "Running latex..." + latex refman.tex + echo "Running makeindex..." + makeindex refman.idx + echo "Rerunning latex...." + latex refman.tex + latex_count=5 ; \ + while egrep -s 'Rerun (LaTeX|to get cross-references right)' refman.log && [ $$latex_count -gt 0 ] ;\ + do \ + echo "Rerunning latex...." ;\ + latex refman.tex ;\ + latex_count=`expr $$latex_count - 1` ;\ + done + +refman_2on1.ps: refman.ps + psnup -2 refman.ps >refman_2on1.ps + +refman_2on1.pdf: refman_2on1.ps + ps2pdf refman_2on1.ps refman_2on1.pdf + +clean: + rm -f *.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out refman.pdf diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/annotated.tex b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/annotated.tex new file mode 100644 index 000000000..d9ae06077 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/annotated.tex @@ -0,0 +1,34 @@ +\section{PARADISEO-MO Class List} +Here are the classes, structs, unions and interfaces with brief descriptions:\begin{CompactList} +\item\contentsline{section}{{\bf EmptySelection} (Special class that describes the case of no selection )}{\pageref{class_empty_selection}}{} +\item\contentsline{section}{{\bf moAlgo$<$ EOT $>$} (Description of an algorithm of the paradiseo-mo library )}{\pageref{classmo_algo}}{} +\item\contentsline{section}{{\bf moAspirCrit$<$ M $>$} (Description of the conditions in which a tabu move could be accepted )}{\pageref{classmo_aspir_crit}}{} +\item\contentsline{section}{{\bf moBestImprSelect$<$ M $>$} (One of the possible \doxyref{moMoveSelect}{p.}{classmo_move_select} )}{\pageref{classmo_best_impr_select}}{} +\item\contentsline{section}{{\bf moCoolingSchedule} (This class gives the description of a cooling schedule )}{\pageref{classmo_cooling_schedule}}{} +\item\contentsline{section}{{\bf moExponentialCoolingSchedule} (One of the possible \doxyref{moCoolingSchedule}{p.}{classmo_cooling_schedule} )}{\pageref{classmo_exponential_cooling_schedule}}{} +\item\contentsline{section}{{\bf moFirstImprSelect$<$ M $>$} (One possible \doxyref{moMoveSelect}{p.}{classmo_move_select} )}{\pageref{classmo_first_impr_select}}{} +\item\contentsline{section}{{\bf moGenSolContinue$<$ EOT $>$} (One possible stop criterion for a solution-based heuristic )}{\pageref{classmo_gen_sol_continue}}{} +\item\contentsline{section}{{\bf moHC$<$ M $>$} (Hill Climbing (HC) )}{\pageref{classmo_h_c}}{} +\item\contentsline{section}{{\bf moHCMoveLoopExpl$<$ M $>$} (Iterative explorer used by a \doxyref{moHC}{p.}{classmo_h_c} )}{\pageref{classmo_h_c_move_loop_expl}}{} +\item\contentsline{section}{{\bf moImprBestFitAspirCrit$<$ M $>$} (One of the possible \doxyref{moAspirCrit}{p.}{classmo_aspir_crit} )}{\pageref{classmo_impr_best_fit_aspir_crit}}{} +\item\contentsline{section}{{\bf moItRandNextMove$<$ M $>$} (One of the possible \doxyref{moNextMove}{p.}{classmo_next_move} )}{\pageref{classmo_it_rand_next_move}}{} +\item\contentsline{section}{{\bf moLinearCoolingSchedule} (One of the possible \doxyref{moCoolingSchedule}{p.}{classmo_cooling_schedule} )}{\pageref{classmo_linear_cooling_schedule}}{} +\item\contentsline{section}{{\bf moLSCheckPoint$<$ M $>$} (Class which allows a checkpointing system )}{\pageref{classmo_l_s_check_point}}{} +\item\contentsline{section}{{\bf moMove$<$ EOT $>$} (Definition of a move )}{\pageref{classmo_move}}{} +\item\contentsline{section}{{\bf moMoveExpl$<$ M $>$} (Description of a move (\doxyref{moMove}{p.}{classmo_move}) explorer )}{\pageref{classmo_move_expl}}{} +\item\contentsline{section}{{\bf moMoveIncrEval$<$ M $>$} ((generally) Efficient evaluation function based a move and a solution )}{\pageref{classmo_move_incr_eval}}{} +\item\contentsline{section}{{\bf moMoveInit$<$ M $>$} (Move (\doxyref{moMove}{p.}{classmo_move}) initializer )}{\pageref{classmo_move_init}}{} +\item\contentsline{section}{{\bf moMoveLoopExpl$<$ M $>$} (Class which describes an iterative explorer )}{\pageref{classmo_move_loop_expl}}{} +\item\contentsline{section}{{\bf moMoveSelect$<$ M $>$} (Class that describes a move selector (\doxyref{moMove}{p.}{classmo_move}) )}{\pageref{classmo_move_select}}{} +\item\contentsline{section}{{\bf moNextMove$<$ M $>$} (Class which allows to generate a new move (\doxyref{moMove}{p.}{classmo_move}) )}{\pageref{classmo_next_move}}{} +\item\contentsline{section}{{\bf moNoAspirCrit$<$ M $>$} (One of the possible aspiration criterion (\doxyref{moAspirCrit}{p.}{classmo_aspir_crit}) )}{\pageref{classmo_no_aspir_crit}}{} +\item\contentsline{section}{{\bf moRandImprSelect$<$ M $>$} (One of the possible \doxyref{moMove}{p.}{classmo_move} selector (\doxyref{moMoveSelect}{p.}{classmo_move_select}) )}{\pageref{classmo_rand_impr_select}}{} +\item\contentsline{section}{{\bf moRandMove$<$ M $>$} (Random move generator )}{\pageref{classmo_rand_move}}{} +\item\contentsline{section}{{\bf moSA$<$ M $>$} (Simulated Annealing (SA) )}{\pageref{classmo_s_a}}{} +\item\contentsline{section}{{\bf moSimpleMoveTabuList$<$ M $>$} (Class describing a move tabu list with a limited memory )}{\pageref{classmo_simple_move_tabu_list}}{} +\item\contentsline{section}{{\bf moSimpleSolutionTabuList$<$ M $>$} (Class describing a solution tabu list with limited length )}{\pageref{classmo_simple_solution_tabu_list}}{} +\item\contentsline{section}{{\bf moSolContinue$<$ EOT $>$} (Class that describes a stop criterion for a solution-based heuristic )}{\pageref{classmo_sol_continue}}{} +\item\contentsline{section}{{\bf moTabuList$<$ M $>$} (Class describing a tabu list that a \doxyref{moTS}{p.}{classmo_t_s} uses )}{\pageref{classmo_tabu_list}}{} +\item\contentsline{section}{{\bf moTS$<$ M $>$} (Tabu Search (TS) )}{\pageref{classmo_t_s}}{} +\item\contentsline{section}{{\bf moTSMoveLoopExpl$<$ M $>$} (Explorer for a Tabu Search algorithm )}{\pageref{classmo_t_s_move_loop_expl}}{} +\end{CompactList} diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/class_empty_selection.tex b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/class_empty_selection.tex new file mode 100644 index 000000000..942fea7fc --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/class_empty_selection.tex @@ -0,0 +1,21 @@ +\section{EmptySelection Class Reference} +\label{class_empty_selection}\index{EmptySelection@{EmptySelection}} +Special class that describes the case of no selection. + + +{\tt \#include $<$moMoveSelect.h$>$} + + + +\subsection{Detailed Description} +Special class that describes the case of no selection. + +This class is used as an exception that can be thrown if a solution selector has completly failed. + + + +Definition at line 21 of file moMoveSelect.h. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moMoveSelect.h\end{CompactItemize} diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_algo.tex b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_algo.tex new file mode 100644 index 000000000..6564c8f7a --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_algo.tex @@ -0,0 +1,29 @@ +\section{moAlgo$<$ EOT $>$ Class Template Reference} +\label{classmo_algo}\index{moAlgo@{moAlgo}} +Description of an algorithm of the paradiseo-mo library. + + +{\tt \#include $<$moAlgo.h$>$} + +Inheritance diagram for moAlgo$<$ EOT $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=4cm]{classmo_algo} +\end{center} +\end{figure} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class EOT$>$ class moAlgo$<$ EOT $>$} + +Description of an algorithm of the paradiseo-mo library. + +\doxyref{moHC}{p.}{classmo_h_c}, \doxyref{moTS}{p.}{classmo_t_s} and \doxyref{moSA}{p.}{classmo_s_a} are 3 examples of algorithm of the paradiseo-mo library. + + + +Definition at line 21 of file moAlgo.h. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moAlgo.h\end{CompactItemize} diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_aspir_crit.eps b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_aspir_crit.eps new file mode 100644 index 000000000..da056c4c6 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_aspir_crit.eps @@ -0,0 +1,215 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 119.76 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 4.175 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 4 def +/cols 2 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(moAspirCrit< M >) cw +(eoBF< const M &, const M::EOType::Fitness &, bool >) cw +(eoFunctorBase) cw +(moImprBestFitAspirCrit< M >) cw +(moNoAspirCrit< M >) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (moAspirCrit< M >) 0.5 1 box + (eoBF< const M &, const M::EOType::Fitness &, bool >) 0.5 2 box + (eoFunctorBase) 0.5 3 box + (moImprBestFitAspirCrit< M >) 0 0 box + (moNoAspirCrit< M >) 1 0 box + +% ----- relations ----- + +solid +0 0.5 1 out +solid +1 0.5 2 in +solid +0 0.5 2 out +solid +1 0.5 3 in +solid +1 0.5 0.25 out +solid +0 1 1 conn +solid +0 0 0.75 in +solid +0 1 0.75 in diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_aspir_crit.tex b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_aspir_crit.tex new file mode 100644 index 000000000..78dea621f --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_aspir_crit.tex @@ -0,0 +1,46 @@ +\section{moAspirCrit$<$ M $>$ Class Template Reference} +\label{classmo_aspir_crit}\index{moAspirCrit@{moAspirCrit}} +Description of the conditions in which a tabu move could be accepted. + + +{\tt \#include $<$moAspirCrit.h$>$} + +Inheritance diagram for moAspirCrit$<$ M $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=3.35329cm]{classmo_aspir_crit} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +virtual void {\bf init} ()=0 +\begin{CompactList}\small\item\em Procedure which initialises all that needs a aspiration criterion. \item\end{CompactList}\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class M$>$ class moAspirCrit$<$ M $>$} + +Description of the conditions in which a tabu move could be accepted. + +It is only a description... An object that herits from this class is needed to be used in a \doxyref{moTS}{p.}{classmo_t_s}. See moNoAspriCrit for example. + + + +Definition at line 22 of file moAspirCrit.h. + +\subsection{Member Function Documentation} +\index{moAspirCrit@{moAspirCrit}!init@{init}} +\index{init@{init}!moAspirCrit@{moAspirCrit}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class M$>$ virtual void {\bf moAspirCrit}$<$ M $>$::init ()\hspace{0.3cm}{\tt [pure virtual]}}\label{classmo_aspir_crit_a8ce84510a5ec7c9078381e542c6d140} + + +Procedure which initialises all that needs a aspiration criterion. + +It can be possible that this procedure do nothing... + +Implemented in {\bf moImprBestFitAspirCrit$<$ M $>$} \doxyref{}{p.}{classmo_impr_best_fit_aspir_crit_ffa451a14ff4ea86fb8bd9fdbc348630}, and {\bf moNoAspirCrit$<$ M $>$} \doxyref{}{p.}{classmo_no_aspir_crit_f3a286fc4c2d36bd390ba9a3074f3037}. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moAspirCrit.h\end{CompactItemize} diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_best_impr_select.eps b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_best_impr_select.eps new file mode 100644 index 000000000..e1504ce28 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_best_impr_select.eps @@ -0,0 +1,209 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 303.03 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 1.65 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 4 def +/cols 1 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(moBestImprSelect< M >) cw +(moMoveSelect< M >) cw +(eoBF< M &, M::EOType::Fitness &, void >) cw +(eoFunctorBase) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (moBestImprSelect< M >) 0 0 box + (moMoveSelect< M >) 0 1 box + (eoBF< M &, M::EOType::Fitness &, void >) 0 2 box + (eoFunctorBase) 0 3 box + +% ----- relations ----- + +solid +0 0 0 out +solid +1 0 1 in +solid +0 0 1 out +solid +1 0 2 in +solid +0 0 2 out +solid +1 0 3 in diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_best_impr_select.tex b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_best_impr_select.tex new file mode 100644 index 000000000..1cb7a44d5 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_best_impr_select.tex @@ -0,0 +1,105 @@ +\section{moBestImprSelect$<$ M $>$ Class Template Reference} +\label{classmo_best_impr_select}\index{moBestImprSelect@{moBestImprSelect}} +One of the possible \doxyref{moMoveSelect}{p.}{classmo_move_select}. + + +{\tt \#include $<$moBestImprSelect.h$>$} + +Inheritance diagram for moBestImprSelect$<$ M $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=4cm]{classmo_best_impr_select} +\end{center} +\end{figure} +\subsection*{Public Types} +\begin{CompactItemize} +\item +typedef M::EOType::Fitness {\bf Fitness}\label{classmo_best_impr_select_c4ae17435221fb0a8e8acd285210cfcb} + +\begin{CompactList}\small\item\em Alias for the fitness. \item\end{CompactList}\end{CompactItemize} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +void {\bf init} (const {\bf Fitness} \&\_\-\_\-fit)\label{classmo_best_impr_select_2d2abf9aa17dc77cbb4f41810ab7b956} + +\begin{CompactList}\small\item\em Procedure which initialise the exploration. \item\end{CompactList}\item +bool {\bf update} (const M \&\_\-\_\-move, const {\bf Fitness} \&\_\-\_\-fit) +\begin{CompactList}\small\item\em Function that indicates if the current move has not improved the fitness. \item\end{CompactList}\item +void {\bf operator()} (M \&\_\-\_\-move, {\bf Fitness} \&\_\-\_\-fit) throw (EmptySelection) +\begin{CompactList}\small\item\em Procedure which saved the best move and fitness. \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Attributes} +\begin{CompactItemize} +\item +bool {\bf first\_\-time}\label{classmo_best_impr_select_352b14d206b0772eb9f40efb7beb0f13} + +\begin{CompactList}\small\item\em Allowing to know if at least one move has been generated. \item\end{CompactList}\item +M {\bf best\_\-move}\label{classmo_best_impr_select_bd86f70519f954c07ff0d8a2a3a8ff6a} + +\begin{CompactList}\small\item\em The best move. \item\end{CompactList}\item +{\bf Fitness} {\bf best\_\-fit}\label{classmo_best_impr_select_dcac897424b5805f146bb1dbb429f2fe} + +\begin{CompactList}\small\item\em The best fitness. \item\end{CompactList}\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class M$>$ class moBestImprSelect$<$ M $>$} + +One of the possible \doxyref{moMoveSelect}{p.}{classmo_move_select}. + +All neighbors are considered, and the movement which enables the best improvement is selected. + + + +Definition at line 22 of file moBestImprSelect.h. + +\subsection{Member Function Documentation} +\index{moBestImprSelect@{moBestImprSelect}!update@{update}} +\index{update@{update}!moBestImprSelect@{moBestImprSelect}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class M$>$ bool {\bf moBestImprSelect}$<$ M $>$::update (const M \& {\em \_\-\_\-move}, const {\bf Fitness} \& {\em \_\-\_\-fit})\hspace{0.3cm}{\tt [inline, virtual]}}\label{classmo_best_impr_select_d10e3e6f8a0277731e95ef506d064d6d} + + +Function that indicates if the current move has not improved the fitness. + +If the given fitness enables an improvment, the move (\doxyref{moMove}{p.}{classmo_move}) and the fitness linked to this move are saved. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-\_\-move}]a move. \item[{\em \_\-\_\-fit}]a fitness linked to the move. \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]TRUE if the move does not improve the fitness. \end{Desc} + + +Implements {\bf moMoveSelect$<$ M $>$} \doxyref{}{p.}{classmo_move_select_7c157b6e64fd417acf6e900059204eb1}. + +Definition at line 47 of file moBestImprSelect.h. + +References moBestImprSelect$<$ M $>$::best\_\-fit, moBestImprSelect$<$ M $>$::best\_\-move, and moBestImprSelect$<$ M $>$::first\_\-time.\index{moBestImprSelect@{moBestImprSelect}!operator()@{operator()}} +\index{operator()@{operator()}!moBestImprSelect@{moBestImprSelect}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class M$>$ void {\bf moBestImprSelect}$<$ M $>$::operator() (M \& {\em \_\-\_\-move}, {\bf Fitness} \& {\em \_\-\_\-fit}) throw ({\bf EmptySelection})\hspace{0.3cm}{\tt [inline, virtual]}}\label{classmo_best_impr_select_169773d4d127acd782cf379f758222da} + + +Procedure which saved the best move and fitness. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-\_\-move}]the current move (result of the procedure). \item[{\em \_\-\_\-fit}]the current fitness (result of the procedure). \end{description} +\end{Desc} +\begin{Desc} +\item[Exceptions:] +\begin{description} +\item[{\em \doxyref{EmptySelection}{p.}{class_empty_selection}}]if no move has improved the fitness. \end{description} +\end{Desc} + + +Implements {\bf eoBF$<$ M \&, M::EOType::Fitness \&, void $>$}. + +Definition at line 68 of file moBestImprSelect.h. + +References moBestImprSelect$<$ M $>$::best\_\-fit, moBestImprSelect$<$ M $>$::best\_\-move, and moBestImprSelect$<$ M $>$::first\_\-time. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moBestImprSelect.h\end{CompactItemize} diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_cooling_schedule.eps b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_cooling_schedule.eps new file mode 100644 index 000000000..099ff0bb2 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_cooling_schedule.eps @@ -0,0 +1,215 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 203.046 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 2.4625 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 4 def +/cols 2 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(moCoolingSchedule) cw +(eoUF< double &, bool >) cw +(eoFunctorBase) cw +(moExponentialCoolingSchedule) cw +(moLinearCoolingSchedule) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (moCoolingSchedule) 0.5 1 box + (eoUF< double &, bool >) 0.5 2 box + (eoFunctorBase) 0.5 3 box + (moExponentialCoolingSchedule) 0 0 box + (moLinearCoolingSchedule) 1 0 box + +% ----- relations ----- + +solid +0 0.5 1 out +solid +1 0.5 2 in +solid +0 0.5 2 out +solid +1 0.5 3 in +solid +1 0.5 0.25 out +solid +0 1 1 conn +solid +0 0 0.75 in +solid +0 1 0.75 in diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_cooling_schedule.tex b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_cooling_schedule.tex new file mode 100644 index 000000000..47648d9d0 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_cooling_schedule.tex @@ -0,0 +1,27 @@ +\section{moCoolingSchedule Class Reference} +\label{classmo_cooling_schedule}\index{moCoolingSchedule@{moCoolingSchedule}} +This class gives the description of a cooling schedule. + + +{\tt \#include $<$moCoolingSchedule.h$>$} + +Inheritance diagram for moCoolingSchedule::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=4cm]{classmo_cooling_schedule} +\end{center} +\end{figure} + + +\subsection{Detailed Description} +This class gives the description of a cooling schedule. + +It is only a description... An object that herits from this class is needed to be used in a \doxyref{moSA}{p.}{classmo_s_a}. See \doxyref{moExponentialCoolingSchedule}{p.}{classmo_exponential_cooling_schedule} or \doxyref{moLinearCoolingSchedule}{p.}{classmo_linear_cooling_schedule} for example. + + + +Definition at line 22 of file moCoolingSchedule.h. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moCoolingSchedule.h\end{CompactItemize} diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_exponential_cooling_schedule.eps b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_exponential_cooling_schedule.eps new file mode 100644 index 000000000..92ecef949 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_exponential_cooling_schedule.eps @@ -0,0 +1,209 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 406.091 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 1.23125 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 4 def +/cols 1 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(moExponentialCoolingSchedule) cw +(moCoolingSchedule) cw +(eoUF< double &, bool >) cw +(eoFunctorBase) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (moExponentialCoolingSchedule) 0 0 box + (moCoolingSchedule) 0 1 box + (eoUF< double &, bool >) 0 2 box + (eoFunctorBase) 0 3 box + +% ----- relations ----- + +solid +0 0 0 out +solid +1 0 1 in +solid +0 0 1 out +solid +1 0 2 in +solid +0 0 2 out +solid +1 0 3 in diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_exponential_cooling_schedule.tex b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_exponential_cooling_schedule.tex new file mode 100644 index 000000000..b572655f6 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_exponential_cooling_schedule.tex @@ -0,0 +1,85 @@ +\section{moExponentialCoolingSchedule Class Reference} +\label{classmo_exponential_cooling_schedule}\index{moExponentialCoolingSchedule@{moExponentialCoolingSchedule}} +One of the possible \doxyref{moCoolingSchedule}{p.}{classmo_cooling_schedule}. + + +{\tt \#include $<$moExponentialCoolingSchedule.h$>$} + +Inheritance diagram for moExponentialCoolingSchedule::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=4cm]{classmo_exponential_cooling_schedule} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +{\bf moExponentialCoolingSchedule} (double \_\-\_\-threshold, double \_\-\_\-ratio) +\begin{CompactList}\small\item\em Simple constructor. \item\end{CompactList}\item +bool {\bf operator()} (double \&\_\-\_\-temp) +\begin{CompactList}\small\item\em Function which proceeds to the cooling. \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Attributes} +\begin{CompactItemize} +\item +double {\bf threshold}\label{classmo_exponential_cooling_schedule_8d4327c0bb33b7121a322279eea97f84} + +\begin{CompactList}\small\item\em The temperature threhold. \item\end{CompactList}\item +double {\bf ratio}\label{classmo_exponential_cooling_schedule_e8f3f87417c1c7253efb938a740846fa} + +\begin{CompactList}\small\item\em The decreasing factor of the temperature. \item\end{CompactList}\end{CompactItemize} + + +\subsection{Detailed Description} +One of the possible \doxyref{moCoolingSchedule}{p.}{classmo_cooling_schedule}. + +An other very simple cooling schedule, the temperature decrease according to a ratio while the temperature is greater than a given threshold. + + + +Definition at line 22 of file moExponentialCoolingSchedule.h. + +\subsection{Constructor \& Destructor Documentation} +\index{moExponentialCoolingSchedule@{moExponentialCoolingSchedule}!moExponentialCoolingSchedule@{moExponentialCoolingSchedule}} +\index{moExponentialCoolingSchedule@{moExponentialCoolingSchedule}!moExponentialCoolingSchedule@{moExponentialCoolingSchedule}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}moExponentialCoolingSchedule::moExponentialCoolingSchedule (double {\em \_\-\_\-threshold}, double {\em \_\-\_\-ratio})\hspace{0.3cm}{\tt [inline]}}\label{classmo_exponential_cooling_schedule_b01930c1051c0940666c6325bfd036bc} + + +Simple constructor. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-\_\-threshold}]the threshold. \item[{\em \_\-\_\-ratio}]the ratio used to descrease the temperature. \end{description} +\end{Desc} + + +Definition at line 31 of file moExponentialCoolingSchedule.h. + +\subsection{Member Function Documentation} +\index{moExponentialCoolingSchedule@{moExponentialCoolingSchedule}!operator()@{operator()}} +\index{operator()@{operator()}!moExponentialCoolingSchedule@{moExponentialCoolingSchedule}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}bool moExponentialCoolingSchedule::operator() (double \& {\em \_\-\_\-temp})\hspace{0.3cm}{\tt [inline, virtual]}}\label{classmo_exponential_cooling_schedule_00642b03453b51612a10fcf2280543db} + + +Function which proceeds to the cooling. + +It decreases the temperature and indicates if it is greater than the threshold. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-\_\-temp}]the current temperature. \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]if the new temperature (current temperature $\ast$ ratio) is greater than the threshold. \end{Desc} + + +Implements {\bf eoUF$<$ double \&, bool $>$}. + +Definition at line 41 of file moExponentialCoolingSchedule.h. + +References ratio, and threshold. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moExponentialCoolingSchedule.h\end{CompactItemize} diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_first_impr_select.eps b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_first_impr_select.eps new file mode 100644 index 000000000..7057473a9 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_first_impr_select.eps @@ -0,0 +1,209 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 303.03 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 1.65 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 4 def +/cols 1 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(moFirstImprSelect< M >) cw +(moMoveSelect< M >) cw +(eoBF< M &, M::EOType::Fitness &, void >) cw +(eoFunctorBase) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (moFirstImprSelect< M >) 0 0 box + (moMoveSelect< M >) 0 1 box + (eoBF< M &, M::EOType::Fitness &, void >) 0 2 box + (eoFunctorBase) 0 3 box + +% ----- relations ----- + +solid +0 0 0 out +solid +1 0 1 in +solid +0 0 1 out +solid +1 0 2 in +solid +0 0 2 out +solid +1 0 3 in diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_first_impr_select.tex b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_first_impr_select.tex new file mode 100644 index 000000000..412bfec33 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_first_impr_select.tex @@ -0,0 +1,118 @@ +\section{moFirstImprSelect$<$ M $>$ Class Template Reference} +\label{classmo_first_impr_select}\index{moFirstImprSelect@{moFirstImprSelect}} +One possible \doxyref{moMoveSelect}{p.}{classmo_move_select}. + + +{\tt \#include $<$moFirstImprSelect.h$>$} + +Inheritance diagram for moFirstImprSelect$<$ M $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=4cm]{classmo_first_impr_select} +\end{center} +\end{figure} +\subsection*{Public Types} +\begin{CompactItemize} +\item +typedef M::EOType::Fitness {\bf Fitness}\label{classmo_first_impr_select_64763ce3e6d2873266624382b407fa5a} + +\begin{CompactList}\small\item\em Alias for the fitness. \item\end{CompactList}\end{CompactItemize} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +virtual void {\bf init} (const {\bf Fitness} \&\_\-\_\-fit) +\begin{CompactList}\small\item\em Procedure which initialise the exploration. \item\end{CompactList}\item +bool {\bf update} (const M \&\_\-\_\-move, const typename M::EOType::Fitness \&\_\-\_\-fit) +\begin{CompactList}\small\item\em Function that indicates if the current move has not improved the fitness. \item\end{CompactList}\item +void {\bf operator()} (M \&\_\-\_\-move, {\bf Fitness} \&\_\-\_\-fit) throw (EmptySelection) +\begin{CompactList}\small\item\em Procedure which saved the best move and fitness. \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Attributes} +\begin{CompactItemize} +\item +bool {\bf valid}\label{classmo_first_impr_select_a99c0586ba07449234705c17a258d58c} + +\begin{CompactList}\small\item\em Allow to know if at least one move has improved the solution. \item\end{CompactList}\item +M {\bf best\_\-move}\label{classmo_first_impr_select_dfed419a608dd7c41f07fa1f1279cb8c} + +\begin{CompactList}\small\item\em Best stored movement. \item\end{CompactList}\item +{\bf Fitness} {\bf init\_\-fit}\label{classmo_first_impr_select_ce7ba63e8cc3a9164f4e546477e98ca8} + +\begin{CompactList}\small\item\em Initial fitness. \item\end{CompactList}\item +{\bf Fitness} {\bf best\_\-fit}\label{classmo_first_impr_select_e1190347b76ec6fe717be32354b4a9a9} + +\begin{CompactList}\small\item\em Best stored fitness. \item\end{CompactList}\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class M$>$ class moFirstImprSelect$<$ M $>$} + +One possible \doxyref{moMoveSelect}{p.}{classmo_move_select}. + +The neighborhood is explored until a move enables an improvment of the current solution. + + + +Definition at line 23 of file moFirstImprSelect.h. + +\subsection{Member Function Documentation} +\index{moFirstImprSelect@{moFirstImprSelect}!init@{init}} +\index{init@{init}!moFirstImprSelect@{moFirstImprSelect}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class M$>$ virtual void {\bf moFirstImprSelect}$<$ M $>$::init (const {\bf Fitness} \& {\em \_\-\_\-fit})\hspace{0.3cm}{\tt [inline, virtual]}}\label{classmo_first_impr_select_4c5ce18ede46247a439c68f6954a4055} + + +Procedure which initialise the exploration. + +It save the current fitness as the initial value for the fitness. + +Implements {\bf moMoveSelect$<$ M $>$} \doxyref{}{p.}{classmo_move_select_bca4c43f13d26eca7163aeb272a4a52e}. + +Definition at line 35 of file moFirstImprSelect.h. + +References moFirstImprSelect$<$ M $>$::init\_\-fit, and moFirstImprSelect$<$ M $>$::valid.\index{moFirstImprSelect@{moFirstImprSelect}!update@{update}} +\index{update@{update}!moFirstImprSelect@{moFirstImprSelect}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class M$>$ bool {\bf moFirstImprSelect}$<$ M $>$::update (const M \& {\em \_\-\_\-move}, const typename M::EOType::Fitness \& {\em \_\-\_\-fit})\hspace{0.3cm}{\tt [inline]}}\label{classmo_first_impr_select_7ba0882728daedc75c249647c070ccf0} + + +Function that indicates if the current move has not improved the fitness. + +If the given fitness enables an improvment, the move (\doxyref{moMove}{p.}{classmo_move}) should be applied to the current solution. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-\_\-move}]a move. \item[{\em \_\-\_\-fit}]a fitness linked to the move. \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]TRUE if the move does not improve the fitness. \end{Desc} + + +Definition at line 52 of file moFirstImprSelect.h. + +References moFirstImprSelect$<$ M $>$::best\_\-fit, moFirstImprSelect$<$ M $>$::best\_\-move, moFirstImprSelect$<$ M $>$::init\_\-fit, and moFirstImprSelect$<$ M $>$::valid.\index{moFirstImprSelect@{moFirstImprSelect}!operator()@{operator()}} +\index{operator()@{operator()}!moFirstImprSelect@{moFirstImprSelect}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class M$>$ void {\bf moFirstImprSelect}$<$ M $>$::operator() (M \& {\em \_\-\_\-move}, {\bf Fitness} \& {\em \_\-\_\-fit}) throw ({\bf EmptySelection})\hspace{0.3cm}{\tt [inline, virtual]}}\label{classmo_first_impr_select_3be12cf4cbaed00df7c4fa735b2c0a95} + + +Procedure which saved the best move and fitness. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-\_\-move}]the current move (result of the procedure). \item[{\em \_\-\_\-fit}]the current fitness (result of the procedure). \end{description} +\end{Desc} +\begin{Desc} +\item[Exceptions:] +\begin{description} +\item[{\em \doxyref{EmptySelection}{p.}{class_empty_selection}}]if no move has improved the fitness. \end{description} +\end{Desc} + + +Implements {\bf eoBF$<$ M \&, M::EOType::Fitness \&, void $>$}. + +Definition at line 76 of file moFirstImprSelect.h. + +References moFirstImprSelect$<$ M $>$::best\_\-fit, moFirstImprSelect$<$ M $>$::best\_\-move, and moFirstImprSelect$<$ M $>$::valid. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moFirstImprSelect.h\end{CompactItemize} diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_gen_sol_continue.eps b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_gen_sol_continue.eps new file mode 100644 index 000000000..c73c60ba3 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_gen_sol_continue.eps @@ -0,0 +1,209 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 441.989 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 1.13125 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 4 def +/cols 1 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(moGenSolContinue< EOT >) cw +(moSolContinue< EOT >) cw +(eoUF< const EOT &, bool >) cw +(eoFunctorBase) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (moGenSolContinue< EOT >) 0 0 box + (moSolContinue< EOT >) 0 1 box + (eoUF< const EOT &, bool >) 0 2 box + (eoFunctorBase) 0 3 box + +% ----- relations ----- + +solid +0 0 0 out +solid +1 0 1 in +solid +0 0 1 out +solid +1 0 2 in +solid +0 0 2 out +solid +1 0 3 in diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_gen_sol_continue.tex b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_gen_sol_continue.tex new file mode 100644 index 000000000..19c044b84 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_gen_sol_continue.tex @@ -0,0 +1,102 @@ +\section{moGenSolContinue$<$ EOT $>$ Class Template Reference} +\label{classmo_gen_sol_continue}\index{moGenSolContinue@{moGenSolContinue}} +One possible stop criterion for a solution-based heuristic. + + +{\tt \#include $<$moGenSolContinue.h$>$} + +Inheritance diagram for moGenSolContinue$<$ EOT $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=4cm]{classmo_gen_sol_continue} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +{\bf moGenSolContinue} (unsigned int \_\-\_\-maxNumGen) +\begin{CompactList}\small\item\em Simple constructor. \item\end{CompactList}\item +bool {\bf operator()} (const EOT \&\_\-\_\-sol) +\begin{CompactList}\small\item\em Function that activates the stop criterion. \item\end{CompactList}\item +void {\bf init} () +\begin{CompactList}\small\item\em Procedure which allows to initialise the generation counter. \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Attributes} +\begin{CompactItemize} +\item +unsigned int {\bf maxNumGen}\label{classmo_gen_sol_continue_30b9861e090578bdfa2374806600987a} + +\begin{CompactList}\small\item\em Iteration maximum number. \item\end{CompactList}\item +unsigned int {\bf numGen}\label{classmo_gen_sol_continue_630d9736a3a2c952540cdc211764258c} + +\begin{CompactList}\small\item\em Iteration current number. \item\end{CompactList}\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class EOT$>$ class moGenSolContinue$<$ EOT $>$} + +One possible stop criterion for a solution-based heuristic. + +The stop criterion corresponds to a maximum number of iteration. + + + +Definition at line 21 of file moGenSolContinue.h. + +\subsection{Constructor \& Destructor Documentation} +\index{moGenSolContinue@{moGenSolContinue}!moGenSolContinue@{moGenSolContinue}} +\index{moGenSolContinue@{moGenSolContinue}!moGenSolContinue@{moGenSolContinue}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT$>$ {\bf moGenSolContinue}$<$ EOT $>$::{\bf moGenSolContinue} (unsigned int {\em \_\-\_\-maxNumGen})\hspace{0.3cm}{\tt [inline]}}\label{classmo_gen_sol_continue_b56e890f1caa3f98e161c6512b59c95b} + + +Simple constructor. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-\_\-maxNumGen}]the maximum number of generation. \end{description} +\end{Desc} + + +Definition at line 30 of file moGenSolContinue.h. + +\subsection{Member Function Documentation} +\index{moGenSolContinue@{moGenSolContinue}!operator()@{operator()}} +\index{operator()@{operator()}!moGenSolContinue@{moGenSolContinue}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT$>$ bool {\bf moGenSolContinue}$<$ EOT $>$::operator() (const EOT \& {\em \_\-\_\-sol})\hspace{0.3cm}{\tt [inline, virtual]}}\label{classmo_gen_sol_continue_457257cd73b474d6f7783d84d02c2e61} + + +Function that activates the stop criterion. + +Increments the counter and returns TRUE if the current number of iteration is lower than the given maximum number of iterations. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-\_\-sol}]the current solution. \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]TRUE or FALSE according to the current generation number. \end{Desc} + + +Implements {\bf eoUF$<$ const EOT \&, bool $>$}. + +Definition at line 44 of file moGenSolContinue.h. + +References moGenSolContinue$<$ EOT $>$::maxNumGen, and moGenSolContinue$<$ EOT $>$::numGen.\index{moGenSolContinue@{moGenSolContinue}!init@{init}} +\index{init@{init}!moGenSolContinue@{moGenSolContinue}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT$>$ void {\bf moGenSolContinue}$<$ EOT $>$::init ()\hspace{0.3cm}{\tt [inline, virtual]}}\label{classmo_gen_sol_continue_6c5db8182157584b56507cc9075602d4} + + +Procedure which allows to initialise the generation counter. + +It can also be used to reset the iteration counter. + +Implements {\bf moSolContinue$<$ EOT $>$} \doxyref{}{p.}{classmo_sol_continue_064dc966a210f4ffb9515be3f03ca4c7}. + +Definition at line 54 of file moGenSolContinue.h. + +References moGenSolContinue$<$ EOT $>$::numGen. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moGenSolContinue.h\end{CompactItemize} diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_h_c.eps b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_h_c.eps new file mode 100644 index 000000000..184d2041a --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_h_c.eps @@ -0,0 +1,221 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 271.739 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 1.84 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 5 def +/cols 2 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(moHC< M >) cw +(moAlgo< M::EOType >) cw +(eoMonOp< M::EOType >) cw +(eoOp< EOType >) cw +(eoUF< M::EOType &, bool >) cw +(eoFunctorBase) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (moHC< M >) 0.5 0 box + (moAlgo< M::EOType >) 0.5 1 box + (eoMonOp< M::EOType >) 0.5 2 box + (eoOp< EOType >) 0 3 box + (eoUF< M::EOType &, bool >) 1 3 box + (eoFunctorBase) 1 4 box + +% ----- relations ----- + +solid +0 0.5 0 out +solid +1 0.5 1 in +solid +0 0.5 1 out +solid +1 0.5 2 in +solid +0 0.5 2 out +solid +0 1 3 conn +solid +1 0 3 in +solid +1 1 3 in +solid +0 1 3 out +solid +1 1 4 in diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_h_c.tex b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_h_c.tex new file mode 100644 index 000000000..b402914eb --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_h_c.tex @@ -0,0 +1,116 @@ +\section{moHC$<$ M $>$ Class Template Reference} +\label{classmo_h_c}\index{moHC@{moHC}} +Hill Climbing (HC). + + +{\tt \#include $<$moHC.h$>$} + +Inheritance diagram for moHC$<$ M $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=5cm]{classmo_h_c} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +{\bf moHC} ({\bf moMoveInit}$<$ M $>$ \&\_\-\_\-move\_\-init, {\bf moNextMove}$<$ M $>$ \&\_\-\_\-next\_\-move, {\bf moMoveIncrEval}$<$ M $>$ \&\_\-\_\-incr\_\-eval, {\bf moMoveSelect}$<$ M $>$ \&\_\-\_\-move\_\-select, {\bf eoEvalFunc}$<$ {\bf EOT} $>$ \&\_\-\_\-full\_\-eval) +\begin{CompactList}\small\item\em Full constructor. \item\end{CompactList}\item +{\bf moHC} ({\bf moMoveExpl}$<$ M $>$ \&\_\-\_\-move\_\-expl, {\bf eoEvalFunc}$<$ {\bf EOT} $>$ \&\_\-\_\-full\_\-eval) +\begin{CompactList}\small\item\em Light constructor. \item\end{CompactList}\item +bool {\bf operator()} ({\bf EOT} \&\_\-\_\-sol) +\begin{CompactList}\small\item\em Function which launches the HC. \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Types} +\begin{CompactItemize} +\item +typedef M::EOType {\bf EOT}\label{classmo_h_c_d219296ede03c679646bce2fe8ff96cb} + +\begin{CompactList}\small\item\em Alias for the type. \item\end{CompactList}\item +typedef EOT::Fitness {\bf Fitness}\label{classmo_h_c_56487c97a7cf0c423cc879d1bbd45027} + +\begin{CompactList}\small\item\em Alias for the fitness. \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Attributes} +\begin{CompactItemize} +\item +{\bf moMoveExpl}$<$ M $>$ \& {\bf move\_\-expl}\label{classmo_h_c_f6bfb4553fb699f1e08f7d9c37d06103} + +\begin{CompactList}\small\item\em Complete exploration of the neighborhood. \item\end{CompactList}\item +{\bf eoEvalFunc}$<$ {\bf EOT} $>$ \& {\bf full\_\-eval}\label{classmo_h_c_4b0d5cc70fc3d83f59a48b2bdea65736} + +\begin{CompactList}\small\item\em A full evaluation function. \item\end{CompactList}\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class M$>$ class moHC$<$ M $>$} + +Hill Climbing (HC). + +Class which describes the algorithm for a hill climbing. + + + +Definition at line 26 of file moHC.h. + +\subsection{Constructor \& Destructor Documentation} +\index{moHC@{moHC}!moHC@{moHC}} +\index{moHC@{moHC}!moHC@{moHC}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class M$>$ {\bf moHC}$<$ M $>$::{\bf moHC} ({\bf moMoveInit}$<$ M $>$ \& {\em \_\-\_\-move\_\-init}, {\bf moNextMove}$<$ M $>$ \& {\em \_\-\_\-next\_\-move}, {\bf moMoveIncrEval}$<$ M $>$ \& {\em \_\-\_\-incr\_\-eval}, {\bf moMoveSelect}$<$ M $>$ \& {\em \_\-\_\-move\_\-select}, {\bf eoEvalFunc}$<$ {\bf EOT} $>$ \& {\em \_\-\_\-full\_\-eval})\hspace{0.3cm}{\tt [inline]}}\label{classmo_h_c_6cafe093f86a80c225827884cb9dc5b7} + + +Full constructor. + +All the boxes are given in order the HC to use a \doxyref{moHCMoveLoopExpl}{p.}{classmo_h_c_move_loop_expl}. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-\_\-move\_\-init}]a move initialiser. \item[{\em \_\-\_\-next\_\-move}]a neighborhood explorer. \item[{\em \_\-\_\-incr\_\-eval}]a (generally) efficient evaluation function. \item[{\em \_\-\_\-move\_\-select}]a move selector. \item[{\em \_\-\_\-full\_\-eval}]a full evaluation function. \end{description} +\end{Desc} + + +Definition at line 53 of file moHC.h.\index{moHC@{moHC}!moHC@{moHC}} +\index{moHC@{moHC}!moHC@{moHC}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class M$>$ {\bf moHC}$<$ M $>$::{\bf moHC} ({\bf moMoveExpl}$<$ M $>$ \& {\em \_\-\_\-move\_\-expl}, {\bf eoEvalFunc}$<$ {\bf EOT} $>$ \& {\em \_\-\_\-full\_\-eval})\hspace{0.3cm}{\tt [inline]}}\label{classmo_h_c_45f27309792e584a27fa6dcb86ccda65} + + +Light constructor. + +This constructor allow to use another \doxyref{moMoveExpl}{p.}{classmo_move_expl} (generally not a \doxyref{moHCMoveLoopExpl}{p.}{classmo_h_c_move_loop_expl}). + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-\_\-move\_\-expl}]a complete explorer. \item[{\em \_\-\_\-full\_\-eval}]a full evaluation function. \end{description} +\end{Desc} + + +Definition at line 67 of file moHC.h. + +\subsection{Member Function Documentation} +\index{moHC@{moHC}!operator()@{operator()}} +\index{operator()@{operator()}!moHC@{moHC}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class M$>$ bool {\bf moHC}$<$ M $>$::operator() ({\bf EOT} \& {\em \_\-\_\-sol})\hspace{0.3cm}{\tt [inline, virtual]}}\label{classmo_h_c_ed4e273c420efa6386c5975a696a5010} + + +Function which launches the HC. + +The HC has to improve a current solution. As the \doxyref{moSA}{p.}{classmo_s_a} and the mo TS, it can be used for HYBRIDATION in an evolutionnary algorithm. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-\_\-sol}]a current solution to improve. \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]TRUE. \end{Desc} + + +Implements {\bf eoUF$<$ M::EOType \&, bool $>$}. + +Definition at line 82 of file moHC.h. + +References moHC$<$ M $>$::full\_\-eval, and moHC$<$ M $>$::move\_\-expl. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moHC.h\end{CompactItemize} diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_h_c_move_loop_expl.eps b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_h_c_move_loop_expl.eps new file mode 100644 index 000000000..1240e010d --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_h_c_move_loop_expl.eps @@ -0,0 +1,215 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 327.869 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 1.525 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 5 def +/cols 1 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(moHCMoveLoopExpl< M >) cw +(moMoveLoopExpl< M >) cw +(moMoveExpl< M >) cw +(eoBF< const M::EOType &, M::EOType &, void >) cw +(eoFunctorBase) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (moHCMoveLoopExpl< M >) 0 0 box + (moMoveLoopExpl< M >) 0 1 box + (moMoveExpl< M >) 0 2 box + (eoBF< const M::EOType &, M::EOType &, void >) 0 3 box + (eoFunctorBase) 0 4 box + +% ----- relations ----- + +solid +0 0 0 out +solid +1 0 1 in +solid +0 0 1 out +solid +1 0 2 in +solid +0 0 2 out +solid +1 0 3 in +solid +0 0 3 out +solid +1 0 4 in diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_h_c_move_loop_expl.tex b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_h_c_move_loop_expl.tex new file mode 100644 index 000000000..776f8a638 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_h_c_move_loop_expl.tex @@ -0,0 +1,100 @@ +\section{moHCMoveLoopExpl$<$ M $>$ Class Template Reference} +\label{classmo_h_c_move_loop_expl}\index{moHCMoveLoopExpl@{moHCMoveLoopExpl}} +Iterative explorer used by a \doxyref{moHC}{p.}{classmo_h_c}. + + +{\tt \#include $<$moHCMoveLoopExpl.h$>$} + +Inheritance diagram for moHCMoveLoopExpl$<$ M $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=5cm]{classmo_h_c_move_loop_expl} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +{\bf moHCMoveLoopExpl} ({\bf moMoveInit}$<$ M $>$ \&\_\-\_\-move\_\-init, {\bf moNextMove}$<$ M $>$ \&\_\-\_\-next\_\-move, {\bf moMoveIncrEval}$<$ M $>$ \&\_\-\_\-incr\_\-eval, {\bf moMoveSelect}$<$ M $>$ \&\_\-\_\-move\_\-select) +\begin{CompactList}\small\item\em Constructor. \item\end{CompactList}\item +void {\bf operator()} (const {\bf EOT} \&\_\-\_\-old\_\-sol, {\bf EOT} \&\_\-\_\-new\_\-sol) +\begin{CompactList}\small\item\em Procedure which launches the explorer. \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Types} +\begin{CompactItemize} +\item +typedef M::EOType {\bf EOT}\label{classmo_h_c_move_loop_expl_077befd4106c201eafd3ea22bcea2fe9} + +\begin{CompactList}\small\item\em Alias for the type. \item\end{CompactList}\item +typedef M::EOType::Fitness {\bf Fitness}\label{classmo_h_c_move_loop_expl_f24871224316d5549b9013a2d27ab465} + +\begin{CompactList}\small\item\em Alias for the fitness. \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Attributes} +\begin{CompactItemize} +\item +{\bf moMoveInit}$<$ M $>$ \& {\bf move\_\-init}\label{classmo_h_c_move_loop_expl_6776fc51331c1b452d026b92448b4ffc} + +\begin{CompactList}\small\item\em Move initialiser. \item\end{CompactList}\item +{\bf moNextMove}$<$ M $>$ \& {\bf next\_\-move}\label{classmo_h_c_move_loop_expl_f716c5271e0eba9275c585dc52768443} + +\begin{CompactList}\small\item\em Neighborhood explorer. \item\end{CompactList}\item +{\bf moMoveIncrEval}$<$ M $>$ \& {\bf incr\_\-eval}\label{classmo_h_c_move_loop_expl_84a8fccba05ab30414281469bc8ee779} + +\begin{CompactList}\small\item\em (generally) Efficient evaluation. \item\end{CompactList}\item +{\bf moMoveSelect}$<$ M $>$ \& {\bf move\_\-select}\label{classmo_h_c_move_loop_expl_13bcd1322b2b97fd665be2f60c532fbb} + +\begin{CompactList}\small\item\em Move selector. \item\end{CompactList}\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class M$>$ class moHCMoveLoopExpl$<$ M $>$} + +Iterative explorer used by a \doxyref{moHC}{p.}{classmo_h_c}. + + + +Definition at line 23 of file moHCMoveLoopExpl.h. + +\subsection{Constructor \& Destructor Documentation} +\index{moHCMoveLoopExpl@{moHCMoveLoopExpl}!moHCMoveLoopExpl@{moHCMoveLoopExpl}} +\index{moHCMoveLoopExpl@{moHCMoveLoopExpl}!moHCMoveLoopExpl@{moHCMoveLoopExpl}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class M$>$ {\bf moHCMoveLoopExpl}$<$ M $>$::{\bf moHCMoveLoopExpl} ({\bf moMoveInit}$<$ M $>$ \& {\em \_\-\_\-move\_\-init}, {\bf moNextMove}$<$ M $>$ \& {\em \_\-\_\-next\_\-move}, {\bf moMoveIncrEval}$<$ M $>$ \& {\em \_\-\_\-incr\_\-eval}, {\bf moMoveSelect}$<$ M $>$ \& {\em \_\-\_\-move\_\-select})\hspace{0.3cm}{\tt [inline]}}\label{classmo_h_c_move_loop_expl_11410d648d79746253e9dc249c4ec7b5} + + +Constructor. + +All the boxes have to be specified. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-\_\-move\_\-init}]the move initialiser. \item[{\em \_\-\_\-next\_\-move}]the neighborhood explorer. \item[{\em \_\-\_\-incr\_\-eval}](generally) efficient evaluation function. \item[{\em \_\-\_\-move\_\-select}]the move selector. \end{description} +\end{Desc} + + +Definition at line 43 of file moHCMoveLoopExpl.h. + +\subsection{Member Function Documentation} +\index{moHCMoveLoopExpl@{moHCMoveLoopExpl}!operator()@{operator()}} +\index{operator()@{operator()}!moHCMoveLoopExpl@{moHCMoveLoopExpl}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class M$>$ void {\bf moHCMoveLoopExpl}$<$ M $>$::operator() (const {\bf EOT} \& {\em \_\-\_\-old\_\-sol}, {\bf EOT} \& {\em \_\-\_\-new\_\-sol})\hspace{0.3cm}{\tt [inline, virtual]}}\label{classmo_h_c_move_loop_expl_f48d5379caac7f6a165e9fe8840e6ccb} + + +Procedure which launches the explorer. + +The exploration starts from an old solution and provides a new solution. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-\_\-old\_\-sol}]the current solution. \item[{\em \_\-\_\-new\_\-sol}]the new\_\-sol (result of the procedure). \end{description} +\end{Desc} + + +Implements {\bf eoBF$<$ const M::EOType \&, M::EOType \&, void $>$}. + +Definition at line 59 of file moHCMoveLoopExpl.h. + +References moHCMoveLoopExpl$<$ M $>$::incr\_\-eval, moHCMoveLoopExpl$<$ M $>$::move\_\-init, moHCMoveLoopExpl$<$ M $>$::move\_\-select, and moHCMoveLoopExpl$<$ M $>$::next\_\-move. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moHCMoveLoopExpl.h\end{CompactItemize} diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_impr_best_fit_aspir_crit.eps b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_impr_best_fit_aspir_crit.eps new file mode 100644 index 000000000..b569936e2 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_impr_best_fit_aspir_crit.eps @@ -0,0 +1,209 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 239.521 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 2.0875 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 4 def +/cols 1 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(moImprBestFitAspirCrit< M >) cw +(moAspirCrit< M >) cw +(eoBF< const M &, const M::EOType::Fitness &, bool >) cw +(eoFunctorBase) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (moImprBestFitAspirCrit< M >) 0 0 box + (moAspirCrit< M >) 0 1 box + (eoBF< const M &, const M::EOType::Fitness &, bool >) 0 2 box + (eoFunctorBase) 0 3 box + +% ----- relations ----- + +solid +0 0 0 out +solid +1 0 1 in +solid +0 0 1 out +solid +1 0 2 in +solid +0 0 2 out +solid +1 0 3 in diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_impr_best_fit_aspir_crit.tex b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_impr_best_fit_aspir_crit.tex new file mode 100644 index 000000000..6647d77fa --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_impr_best_fit_aspir_crit.tex @@ -0,0 +1,80 @@ +\section{moImprBestFitAspirCrit$<$ M $>$ Class Template Reference} +\label{classmo_impr_best_fit_aspir_crit}\index{moImprBestFitAspirCrit@{moImprBestFitAspirCrit}} +One of the possible \doxyref{moAspirCrit}{p.}{classmo_aspir_crit}. + + +{\tt \#include $<$moImprBestFitAspirCrit.h$>$} + +Inheritance diagram for moImprBestFitAspirCrit$<$ M $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=4cm]{classmo_impr_best_fit_aspir_crit} +\end{center} +\end{figure} +\subsection*{Public Types} +\begin{CompactItemize} +\item +typedef M::EOType::Fitness {\bf Fitness}\label{classmo_impr_best_fit_aspir_crit_0bc1a8c9af99781e662570c04750cca8} + +\begin{CompactList}\small\item\em Alias for the fitness. \item\end{CompactList}\end{CompactItemize} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +{\bf moImprBestFitAspirCrit} ()\label{classmo_impr_best_fit_aspir_crit_e2c697a5cf3a7696e38bb52b6694a340} + +\begin{CompactList}\small\item\em Contructor. \item\end{CompactList}\item +void {\bf init} ()\label{classmo_impr_best_fit_aspir_crit_ffa451a14ff4ea86fb8bd9fdbc348630} + +\begin{CompactList}\small\item\em Initialisation procedure. \item\end{CompactList}\item +bool {\bf operator()} (const M \&\_\-\_\-move, const {\bf Fitness} \&\_\-\_\-fit) +\begin{CompactList}\small\item\em Function that indicates if the fit is better that the already saved fit. \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Attributes} +\begin{CompactItemize} +\item +{\bf Fitness} {\bf best\_\-fit}\label{classmo_impr_best_fit_aspir_crit_9e52383f0af8013b4aff0942325e1bf3} + +\begin{CompactList}\small\item\em Best fitness found until now. \item\end{CompactList}\item +bool {\bf first\_\-time}\label{classmo_impr_best_fit_aspir_crit_2d5226c7dd661b33011402dbbbe78265} + +\begin{CompactList}\small\item\em Indicates that a fitness has been already saved or not. \item\end{CompactList}\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class M$>$ class moImprBestFitAspirCrit$<$ M $>$} + +One of the possible \doxyref{moAspirCrit}{p.}{classmo_aspir_crit}. + +This criterion is satisfied when a given fitness is the best ever considered. + + + +Definition at line 22 of file moImprBestFitAspirCrit.h. + +\subsection{Member Function Documentation} +\index{moImprBestFitAspirCrit@{moImprBestFitAspirCrit}!operator()@{operator()}} +\index{operator()@{operator()}!moImprBestFitAspirCrit@{moImprBestFitAspirCrit}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class M$>$ bool {\bf moImprBestFitAspirCrit}$<$ M $>$::operator() (const M \& {\em \_\-\_\-move}, const {\bf Fitness} \& {\em \_\-\_\-fit})\hspace{0.3cm}{\tt [inline, virtual]}}\label{classmo_impr_best_fit_aspir_crit_53f62fb56dcae3051a741f1fddb0204b} + + +Function that indicates if the fit is better that the already saved fit. + +The first time, the function only saved the current move and fitness. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-\_\-move}]a move. \item[{\em \_\-\_\-fit}]a fitnes linked to the move. \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]TRUE the first time and if \_\-\_\-fit $>$ best\_\-fit, else FALSE. \end{Desc} + + +Implements {\bf eoBF$<$ const M \&, const M::EOType::Fitness \&, bool $>$}. + +Definition at line 52 of file moImprBestFitAspirCrit.h. + +References moImprBestFitAspirCrit$<$ M $>$::best\_\-fit, and moImprBestFitAspirCrit$<$ M $>$::first\_\-time. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moImprBestFitAspirCrit.h\end{CompactItemize} diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_it_rand_next_move.eps b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_it_rand_next_move.eps new file mode 100644 index 000000000..3c5267824 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_it_rand_next_move.eps @@ -0,0 +1,209 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 316.206 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 1.58125 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 4 def +/cols 1 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(moItRandNextMove< M >) cw +(moNextMove< M >) cw +(eoBF< M &, const M::EOType &, bool >) cw +(eoFunctorBase) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (moItRandNextMove< M >) 0 0 box + (moNextMove< M >) 0 1 box + (eoBF< M &, const M::EOType &, bool >) 0 2 box + (eoFunctorBase) 0 3 box + +% ----- relations ----- + +solid +0 0 0 out +solid +1 0 1 in +solid +0 0 1 out +solid +1 0 2 in +solid +0 0 2 out +solid +1 0 3 in diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_it_rand_next_move.tex b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_it_rand_next_move.tex new file mode 100644 index 000000000..e7abc9a90 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_it_rand_next_move.tex @@ -0,0 +1,98 @@ +\section{moItRandNextMove$<$ M $>$ Class Template Reference} +\label{classmo_it_rand_next_move}\index{moItRandNextMove@{moItRandNextMove}} +One of the possible \doxyref{moNextMove}{p.}{classmo_next_move}. + + +{\tt \#include $<$moItRandNextMove.h$>$} + +Inheritance diagram for moItRandNextMove$<$ M $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=4cm]{classmo_it_rand_next_move} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +{\bf moItRandNextMove} ({\bf moRandMove}$<$ M $>$ \&\_\-\_\-rand\_\-move, unsigned int \_\-\_\-max\_\-iter) +\begin{CompactList}\small\item\em The constructor. \item\end{CompactList}\item +bool {\bf operator()} (M \&\_\-\_\-move, const {\bf EOT} \&\_\-\_\-sol) +\begin{CompactList}\small\item\em Generation of a new move. \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Types} +\begin{CompactItemize} +\item +typedef M::EOType {\bf EOT}\label{classmo_it_rand_next_move_ee666007fc494bf4a5f0cd065e5671cf} + +\begin{CompactList}\small\item\em Alias for the type. \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Attributes} +\begin{CompactItemize} +\item +{\bf moRandMove}$<$ M $>$ \& {\bf rand\_\-move}\label{classmo_it_rand_next_move_ef9410ec5e7dfa7f002e05967931c459} + +\begin{CompactList}\small\item\em A move generator (generally randomly). \item\end{CompactList}\item +unsigned int {\bf max\_\-iter}\label{classmo_it_rand_next_move_dc67fa86677d7a4f982de8d8b1eba033} + +\begin{CompactList}\small\item\em Iteration maximum number. \item\end{CompactList}\item +unsigned int {\bf num\_\-iter}\label{classmo_it_rand_next_move_f43494b13931d8f76b5d9d5d6469e91b} + +\begin{CompactList}\small\item\em Iteration current number. \item\end{CompactList}\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class M$>$ class moItRandNextMove$<$ M $>$} + +One of the possible \doxyref{moNextMove}{p.}{classmo_next_move}. + +This class is a move (\doxyref{moMove}{p.}{classmo_move}) generator with a bound for the maximum number of iterations. + + + +Definition at line 22 of file moItRandNextMove.h. + +\subsection{Constructor \& Destructor Documentation} +\index{moItRandNextMove@{moItRandNextMove}!moItRandNextMove@{moItRandNextMove}} +\index{moItRandNextMove@{moItRandNextMove}!moItRandNextMove@{moItRandNextMove}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class M$>$ {\bf moItRandNextMove}$<$ M $>$::{\bf moItRandNextMove} ({\bf moRandMove}$<$ M $>$ \& {\em \_\-\_\-rand\_\-move}, unsigned int {\em \_\-\_\-max\_\-iter})\hspace{0.3cm}{\tt [inline]}}\label{classmo_it_rand_next_move_2b61b3713d482ecf71db8d941551ff7a} + + +The constructor. + +{\bf Parameters} only for initialising the attributes. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-\_\-rand\_\-move}]the random move generator. \item[{\em \_\-\_\-max\_\-iter}]the iteration maximum number. \end{description} +\end{Desc} + + +Definition at line 37 of file moItRandNextMove.h. + +\subsection{Member Function Documentation} +\index{moItRandNextMove@{moItRandNextMove}!operator()@{operator()}} +\index{operator()@{operator()}!moItRandNextMove@{moItRandNextMove}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class M$>$ bool {\bf moItRandNextMove}$<$ M $>$::operator() (M \& {\em \_\-\_\-move}, const {\bf EOT} \& {\em \_\-\_\-sol})\hspace{0.3cm}{\tt [inline, virtual]}}\label{classmo_it_rand_next_move_92a2fbbc02a20853b9a309e99018a102} + + +Generation of a new move. + +If the maximum number is not already reached, the current move is forgotten and remplaced by another one. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-\_\-move}]the current move. \item[{\em \_\-\_\-sol}]the current solution. \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]FALSE if the maximum number of iteration is reached, else TRUE. \end{Desc} + + +Implements {\bf eoBF$<$ M \&, const M::EOType \&, bool $>$}. + +Definition at line 52 of file moItRandNextMove.h. + +References moItRandNextMove$<$ M $>$::max\_\-iter, moItRandNextMove$<$ M $>$::num\_\-iter, and moItRandNextMove$<$ M $>$::rand\_\-move. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moItRandNextMove.h\end{CompactItemize} diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_l_s_check_point.tex b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_l_s_check_point.tex new file mode 100644 index 000000000..b9d378132 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_l_s_check_point.tex @@ -0,0 +1,79 @@ +\section{moLSCheckPoint$<$ M $>$ Class Template Reference} +\label{classmo_l_s_check_point}\index{moLSCheckPoint@{moLSCheckPoint}} +Class which allows a checkpointing system. + + +{\tt \#include $<$moLSCheckPoint.h$>$} + +Inheritance diagram for moLSCheckPoint$<$ M $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=3cm]{classmo_l_s_check_point} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +void {\bf operator()} (const M \&\_\-\_\-move, const typename M::EOType \&\_\-\_\-sol) +\begin{CompactList}\small\item\em Function which launches the checkpointing. \item\end{CompactList}\item +void {\bf add} ({\bf eoBF}$<$ const M \&, const typename M::EOType \&, void $>$ \&\_\-\_\-f) +\begin{CompactList}\small\item\em Procedure which add a new function to the function vector. \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Attributes} +\begin{CompactItemize} +\item +std::vector$<$ {\bf eoBF}$<$ const M \&, const typename M::EOType \&, void $>$ $\ast$ $>$ {\bf func}\label{classmo_l_s_check_point_ff2a31ee5689a804bd9a572c51a36ca4} + +\begin{CompactList}\small\item\em vector of function \item\end{CompactList}\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class M$>$ class moLSCheckPoint$<$ M $>$} + +Class which allows a checkpointing system. + +Thanks to this class, at each iteration, additionnal function can be used (and not only one). + + + +Definition at line 21 of file moLSCheckPoint.h. + +\subsection{Member Function Documentation} +\index{moLSCheckPoint@{moLSCheckPoint}!operator()@{operator()}} +\index{operator()@{operator()}!moLSCheckPoint@{moLSCheckPoint}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class M$>$ void {\bf moLSCheckPoint}$<$ M $>$::operator() (const M \& {\em \_\-\_\-move}, const typename M::EOType \& {\em \_\-\_\-sol})\hspace{0.3cm}{\tt [inline]}}\label{classmo_l_s_check_point_2f9c1250279e3f49ec77a66c10029f1e} + + +Function which launches the checkpointing. + +Each saved function is used on the current move and the current solution. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-\_\-move}]a move. \item[{\em \_\-\_\-sol}]a solution. \end{description} +\end{Desc} + + +Definition at line 34 of file moLSCheckPoint.h. + +References moLSCheckPoint$<$ M $>$::func.\index{moLSCheckPoint@{moLSCheckPoint}!add@{add}} +\index{add@{add}!moLSCheckPoint@{moLSCheckPoint}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class M$>$ void {\bf moLSCheckPoint}$<$ M $>$::add ({\bf eoBF}$<$ const M \&, const typename M::EOType \&, void $>$ \& {\em \_\-\_\-f})\hspace{0.3cm}{\tt [inline]}}\label{classmo_l_s_check_point_66be5fe2944bcdd752f1e58105e969a6} + + +Procedure which add a new function to the function vector. + +The new function is added at the end of the vector. \begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-\_\-f}]a new function to add. \end{description} +\end{Desc} + + +Definition at line 49 of file moLSCheckPoint.h. + +References moLSCheckPoint$<$ M $>$::func. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moLSCheckPoint.h\end{CompactItemize} diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_linear_cooling_schedule.eps b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_linear_cooling_schedule.eps new file mode 100644 index 000000000..3e62629a9 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_linear_cooling_schedule.eps @@ -0,0 +1,209 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 476.19 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 1.05 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 4 def +/cols 1 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(moLinearCoolingSchedule) cw +(moCoolingSchedule) cw +(eoUF< double &, bool >) cw +(eoFunctorBase) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (moLinearCoolingSchedule) 0 0 box + (moCoolingSchedule) 0 1 box + (eoUF< double &, bool >) 0 2 box + (eoFunctorBase) 0 3 box + +% ----- relations ----- + +solid +0 0 0 out +solid +1 0 1 in +solid +0 0 1 out +solid +1 0 2 in +solid +0 0 2 out +solid +1 0 3 in diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_linear_cooling_schedule.tex b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_linear_cooling_schedule.tex new file mode 100644 index 000000000..59b77e02d --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_linear_cooling_schedule.tex @@ -0,0 +1,85 @@ +\section{moLinearCoolingSchedule Class Reference} +\label{classmo_linear_cooling_schedule}\index{moLinearCoolingSchedule@{moLinearCoolingSchedule}} +One of the possible \doxyref{moCoolingSchedule}{p.}{classmo_cooling_schedule}. + + +{\tt \#include $<$moLinearCoolingSchedule.h$>$} + +Inheritance diagram for moLinearCoolingSchedule::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=4cm]{classmo_linear_cooling_schedule} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +{\bf moLinearCoolingSchedule} (double \_\-\_\-threshold, double \_\-\_\-quantity) +\begin{CompactList}\small\item\em Simple constructor. \item\end{CompactList}\item +bool {\bf operator()} (double \&\_\-\_\-temp) +\begin{CompactList}\small\item\em Function which proceeds to the cooling. \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Attributes} +\begin{CompactItemize} +\item +double {\bf threshold}\label{classmo_linear_cooling_schedule_e7f539f986801ea71392c4a55ba08a76} + +\begin{CompactList}\small\item\em The temperature threhold. \item\end{CompactList}\item +double {\bf quantity}\label{classmo_linear_cooling_schedule_6159dc39ceda89b23ffdab3d6ce8d8ed} + +\begin{CompactList}\small\item\em The quantity that allows the temperature to decrease. \item\end{CompactList}\end{CompactItemize} + + +\subsection{Detailed Description} +One of the possible \doxyref{moCoolingSchedule}{p.}{classmo_cooling_schedule}. + +An another very simple cooling schedule, the temperature decrease according to a quantity while the temperature is greater than a threshold. + + + +Definition at line 22 of file moLinearCoolingSchedule.h. + +\subsection{Constructor \& Destructor Documentation} +\index{moLinearCoolingSchedule@{moLinearCoolingSchedule}!moLinearCoolingSchedule@{moLinearCoolingSchedule}} +\index{moLinearCoolingSchedule@{moLinearCoolingSchedule}!moLinearCoolingSchedule@{moLinearCoolingSchedule}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}moLinearCoolingSchedule::moLinearCoolingSchedule (double {\em \_\-\_\-threshold}, double {\em \_\-\_\-quantity})\hspace{0.3cm}{\tt [inline]}}\label{classmo_linear_cooling_schedule_2fdde7b1520d5a41251627e81cc9c13d} + + +Simple constructor. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-\_\-threshold}]the threshold. \item[{\em \_\-\_\-quantity}]the quantity used to descrease the temperature. \end{description} +\end{Desc} + + +Definition at line 31 of file moLinearCoolingSchedule.h. + +\subsection{Member Function Documentation} +\index{moLinearCoolingSchedule@{moLinearCoolingSchedule}!operator()@{operator()}} +\index{operator()@{operator()}!moLinearCoolingSchedule@{moLinearCoolingSchedule}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}bool moLinearCoolingSchedule::operator() (double \& {\em \_\-\_\-temp})\hspace{0.3cm}{\tt [inline, virtual]}}\label{classmo_linear_cooling_schedule_814b109fdfd9426a92a5444b05014da3} + + +Function which proceeds to the cooling. + +It decreases the temperature and indicates if it is greater than the threshold. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-\_\-temp}]the current temperature. \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]if the new temperature (current temperature - quantity) is greater than the threshold. \end{Desc} + + +Implements {\bf eoUF$<$ double \&, bool $>$}. + +Definition at line 41 of file moLinearCoolingSchedule.h. + +References quantity, and threshold. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moLinearCoolingSchedule.h\end{CompactItemize} diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_move.tex b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_move.tex new file mode 100644 index 000000000..e178fa21e --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_move.tex @@ -0,0 +1,35 @@ +\section{moMove$<$ EOT $>$ Class Template Reference} +\label{classmo_move}\index{moMove@{moMove}} +Definition of a move. + + +{\tt \#include $<$moMove.h$>$} + +Inheritance diagram for moMove$<$ EOT $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=3cm]{classmo_move} +\end{center} +\end{figure} +\subsection*{Public Types} +\begin{CompactItemize} +\item +typedef EOT {\bf EOType}\label{classmo_move_7fb853a91ba1319530529e515380bbba} + +\begin{CompactList}\small\item\em Alias for the type. \item\end{CompactList}\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class EOT$>$ class moMove$<$ EOT $>$} + +Definition of a move. + +A move transforms a solution to another close solution. It describes how a solution can be modified to another one. + + + +Definition at line 23 of file moMove.h. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moMove.h\end{CompactItemize} diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_move_expl.eps b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_move_expl.eps new file mode 100644 index 000000000..18fb8889f --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_move_expl.eps @@ -0,0 +1,221 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 163.934 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 3.05 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 5 def +/cols 2 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(moMoveExpl< M >) cw +(eoBF< const M::EOType &, M::EOType &, void >) cw +(eoFunctorBase) cw +(moMoveLoopExpl< M >) cw +(moHCMoveLoopExpl< M >) cw +(moTSMoveLoopExpl< M >) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (moMoveExpl< M >) 0.5 2 box + (eoBF< const M::EOType &, M::EOType &, void >) 0.5 3 box + (eoFunctorBase) 0.5 4 box + (moMoveLoopExpl< M >) 0.5 1 box + (moHCMoveLoopExpl< M >) 0 0 box + (moTSMoveLoopExpl< M >) 1 0 box + +% ----- relations ----- + +solid +0 0.5 2 out +solid +1 0.5 3 in +solid +0 0.5 3 out +solid +1 0.5 4 in +solid +1 0.5 1.25 out +solid +0 0.5 1.75 in +solid +1 0.5 0.25 out +solid +0 1 1 conn +solid +0 0 0.75 in +solid +0 1 0.75 in diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_move_expl.tex b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_move_expl.tex new file mode 100644 index 000000000..0e4a7e621 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_move_expl.tex @@ -0,0 +1,29 @@ +\section{moMoveExpl$<$ M $>$ Class Template Reference} +\label{classmo_move_expl}\index{moMoveExpl@{moMoveExpl}} +Description of a move (\doxyref{moMove}{p.}{classmo_move}) explorer. + + +{\tt \#include $<$moMoveExpl.h$>$} + +Inheritance diagram for moMoveExpl$<$ M $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=4.59016cm]{classmo_move_expl} +\end{center} +\end{figure} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class M$>$ class moMoveExpl$<$ M $>$} + +Description of a move (\doxyref{moMove}{p.}{classmo_move}) explorer. + +Only a description...See \doxyref{moMoveLoopExpl}{p.}{classmo_move_loop_expl}. + + + +Definition at line 21 of file moMoveExpl.h. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moMoveExpl.h\end{CompactItemize} diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_move_incr_eval.tex b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_move_incr_eval.tex new file mode 100644 index 000000000..85bba26c1 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_move_incr_eval.tex @@ -0,0 +1,29 @@ +\section{moMoveIncrEval$<$ M $>$ Class Template Reference} +\label{classmo_move_incr_eval}\index{moMoveIncrEval@{moMoveIncrEval}} +(generally) Efficient evaluation function based a move and a solution. + + +{\tt \#include $<$moMoveIncrEval.h$>$} + +Inheritance diagram for moMoveIncrEval$<$ M $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=3cm]{classmo_move_incr_eval} +\end{center} +\end{figure} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class M$>$ class moMoveIncrEval$<$ M $>$} + +(generally) Efficient evaluation function based a move and a solution. + +From a move and a solution, it computes a new fitness that could be associated to the solution if this one is updated. + + + +Definition at line 24 of file moMoveIncrEval.h. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moMoveIncrEval.h\end{CompactItemize} diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_move_init.tex b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_move_init.tex new file mode 100644 index 000000000..904ac7911 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_move_init.tex @@ -0,0 +1,29 @@ +\section{moMoveInit$<$ M $>$ Class Template Reference} +\label{classmo_move_init}\index{moMoveInit@{moMoveInit}} +Move (\doxyref{moMove}{p.}{classmo_move}) initializer. + + +{\tt \#include $<$moMoveInit.h$>$} + +Inheritance diagram for moMoveInit$<$ M $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=3cm]{classmo_move_init} +\end{center} +\end{figure} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class M$>$ class moMoveInit$<$ M $>$} + +Move (\doxyref{moMove}{p.}{classmo_move}) initializer. + +Class which allows to initiase a move. Only a description... An object that herits from this class needs to be designed to be used. + + + +Definition at line 22 of file moMoveInit.h. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moMoveInit.h\end{CompactItemize} diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_move_loop_expl.eps b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_move_loop_expl.eps new file mode 100644 index 000000000..c6a78b5b1 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_move_loop_expl.eps @@ -0,0 +1,221 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 163.934 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 3.05 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 5 def +/cols 2 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(moMoveLoopExpl< M >) cw +(moMoveExpl< M >) cw +(eoBF< const M::EOType &, M::EOType &, void >) cw +(eoFunctorBase) cw +(moHCMoveLoopExpl< M >) cw +(moTSMoveLoopExpl< M >) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (moMoveLoopExpl< M >) 0.5 1 box + (moMoveExpl< M >) 0.5 2 box + (eoBF< const M::EOType &, M::EOType &, void >) 0.5 3 box + (eoFunctorBase) 0.5 4 box + (moHCMoveLoopExpl< M >) 0 0 box + (moTSMoveLoopExpl< M >) 1 0 box + +% ----- relations ----- + +solid +0 0.5 1 out +solid +1 0.5 2 in +solid +0 0.5 2 out +solid +1 0.5 3 in +solid +0 0.5 3 out +solid +1 0.5 4 in +solid +1 0.5 0.25 out +solid +0 1 1 conn +solid +0 0 0.75 in +solid +0 1 0.75 in diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_move_loop_expl.tex b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_move_loop_expl.tex new file mode 100644 index 000000000..15968268f --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_move_loop_expl.tex @@ -0,0 +1,29 @@ +\section{moMoveLoopExpl$<$ M $>$ Class Template Reference} +\label{classmo_move_loop_expl}\index{moMoveLoopExpl@{moMoveLoopExpl}} +Class which describes an iterative explorer. + + +{\tt \#include $<$moMoveLoopExpl.h$>$} + +Inheritance diagram for moMoveLoopExpl$<$ M $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=4.59016cm]{classmo_move_loop_expl} +\end{center} +\end{figure} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class M$>$ class moMoveLoopExpl$<$ M $>$} + +Class which describes an iterative explorer. + +Only a description... \doxyref{moHCMoveLoopExpl}{p.}{classmo_h_c_move_loop_expl} and \doxyref{moTSMoveLoopExpl}{p.}{classmo_t_s_move_loop_expl} are exemples of class that are a \doxyref{moMoveLoopExpl}{p.}{classmo_move_loop_expl}. + + + +Definition at line 21 of file moMoveLoopExpl.h. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moMoveLoopExpl.h\end{CompactItemize} diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_move_select.eps b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_move_select.eps new file mode 100644 index 000000000..b61e2bf9f --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_move_select.eps @@ -0,0 +1,219 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 101.01 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 4.95 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 4 def +/cols 3 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(moMoveSelect< M >) cw +(eoBF< M &, M::EOType::Fitness &, void >) cw +(eoFunctorBase) cw +(moBestImprSelect< M >) cw +(moFirstImprSelect< M >) cw +(moRandImprSelect< M >) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (moMoveSelect< M >) 1 1 box + (eoBF< M &, M::EOType::Fitness &, void >) 1 2 box + (eoFunctorBase) 1 3 box + (moBestImprSelect< M >) 0 0 box + (moFirstImprSelect< M >) 1 0 box + (moRandImprSelect< M >) 2 0 box + +% ----- relations ----- + +solid +0 1 1 out +solid +1 1 2 in +solid +0 1 2 out +solid +1 1 3 in +solid +1 1 0.25 out +solid +0 2 1 conn +solid +0 0 0.75 in +solid +0 1 0.75 in +solid +0 2 0.75 in diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_move_select.tex b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_move_select.tex new file mode 100644 index 000000000..82d8378b7 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_move_select.tex @@ -0,0 +1,77 @@ +\section{moMoveSelect$<$ M $>$ Class Template Reference} +\label{classmo_move_select}\index{moMoveSelect@{moMoveSelect}} +Class that describes a move selector (\doxyref{moMove}{p.}{classmo_move}). + + +{\tt \#include $<$moMoveSelect.h$>$} + +Inheritance diagram for moMoveSelect$<$ M $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=2.82828cm]{classmo_move_select} +\end{center} +\end{figure} +\subsection*{Public Types} +\begin{CompactItemize} +\item +typedef M::EOType::Fitness {\bf Fitness}\label{classmo_move_select_8148ccc0e6fbd209c3fe6829559895c8} + +\begin{CompactList}\small\item\em Alias for the fitness. \item\end{CompactList}\end{CompactItemize} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +virtual void {\bf init} (const {\bf Fitness} \&\_\-\_\-fit)=0 +\begin{CompactList}\small\item\em Procedure which initialises all that the move selector needs including the initial fitness. \item\end{CompactList}\item +virtual bool {\bf update} (const M \&\_\-\_\-move, const {\bf Fitness} \&\_\-\_\-fit)=0 +\begin{CompactList}\small\item\em Function which updates the best solutions. \item\end{CompactList}\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class M$>$ class moMoveSelect$<$ M $>$} + +Class that describes a move selector (\doxyref{moMove}{p.}{classmo_move}). + +It iteratively considers some moves (\doxyref{moMove}{p.}{classmo_move}) and their associated fitnesses. The best move is so regularly updated. At any time, it could be accessed. + + + +Definition at line 32 of file moMoveSelect.h. + +\subsection{Member Function Documentation} +\index{moMoveSelect@{moMoveSelect}!init@{init}} +\index{init@{init}!moMoveSelect@{moMoveSelect}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class M$>$ virtual void {\bf moMoveSelect}$<$ M $>$::init (const {\bf Fitness} \& {\em \_\-\_\-fit})\hspace{0.3cm}{\tt [pure virtual]}}\label{classmo_move_select_bca4c43f13d26eca7163aeb272a4a52e} + + +Procedure which initialises all that the move selector needs including the initial fitness. + +In order to know the fitness of the solution, for which the neighborhood will be soon explored + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-\_\-fit}]the current fitness. \end{description} +\end{Desc} + + +Implemented in {\bf moBestImprSelect$<$ M $>$} \doxyref{}{p.}{classmo_best_impr_select_2d2abf9aa17dc77cbb4f41810ab7b956}, {\bf moFirstImprSelect$<$ M $>$} \doxyref{}{p.}{classmo_first_impr_select_4c5ce18ede46247a439c68f6954a4055}, and {\bf moRandImprSelect$<$ M $>$} \doxyref{}{p.}{classmo_rand_impr_select_a19726a1509cff874801615d63a3b5d9}.\index{moMoveSelect@{moMoveSelect}!update@{update}} +\index{update@{update}!moMoveSelect@{moMoveSelect}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class M$>$ virtual bool {\bf moMoveSelect}$<$ M $>$::update (const M \& {\em \_\-\_\-move}, const {\bf Fitness} \& {\em \_\-\_\-fit})\hspace{0.3cm}{\tt [pure virtual]}}\label{classmo_move_select_7c157b6e64fd417acf6e900059204eb1} + + +Function which updates the best solutions. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-\_\-move}]a new move. \item[{\em \_\-\_\-fit}]a fitness linked to the new move. \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]a boolean that expresses the need to resume the exploration. \end{Desc} + + +Implemented in {\bf moBestImprSelect$<$ M $>$} \doxyref{}{p.}{classmo_best_impr_select_d10e3e6f8a0277731e95ef506d064d6d}, and {\bf moRandImprSelect$<$ M $>$} \doxyref{}{p.}{classmo_rand_impr_select_60ae5548560caee7e28d5ed2446186c9}. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moMoveSelect.h\end{CompactItemize} diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_next_move.eps b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_next_move.eps new file mode 100644 index 000000000..dfda1c365 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_next_move.eps @@ -0,0 +1,209 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 316.206 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 1.58125 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 4 def +/cols 1 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(moNextMove< M >) cw +(eoBF< M &, const M::EOType &, bool >) cw +(eoFunctorBase) cw +(moItRandNextMove< M >) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (moNextMove< M >) 0 1 box + (eoBF< M &, const M::EOType &, bool >) 0 2 box + (eoFunctorBase) 0 3 box + (moItRandNextMove< M >) 0 0 box + +% ----- relations ----- + +solid +0 0 1 out +solid +1 0 2 in +solid +0 0 2 out +solid +1 0 3 in +solid +1 0 0.25 out +solid +0 0 0.75 in diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_next_move.tex b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_next_move.tex new file mode 100644 index 000000000..3fdea7d9d --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_next_move.tex @@ -0,0 +1,29 @@ +\section{moNextMove$<$ M $>$ Class Template Reference} +\label{classmo_next_move}\index{moNextMove@{moNextMove}} +Class which allows to generate a new move (\doxyref{moMove}{p.}{classmo_move}). + + +{\tt \#include $<$moNextMove.h$>$} + +Inheritance diagram for moNextMove$<$ M $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=4cm]{classmo_next_move} +\end{center} +\end{figure} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class M$>$ class moNextMove$<$ M $>$} + +Class which allows to generate a new move (\doxyref{moMove}{p.}{classmo_move}). + +Useful for the explorer (for \doxyref{moTS}{p.}{classmo_t_s} or \doxyref{moHC}{p.}{classmo_h_c}). Does nothing... An object that herits from this class needs to be designed for being used. + + + +Definition at line 22 of file moNextMove.h. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moNextMove.h\end{CompactItemize} diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_no_aspir_crit.eps b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_no_aspir_crit.eps new file mode 100644 index 000000000..8bc333965 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_no_aspir_crit.eps @@ -0,0 +1,209 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 239.521 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 2.0875 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 4 def +/cols 1 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(moNoAspirCrit< M >) cw +(moAspirCrit< M >) cw +(eoBF< const M &, const M::EOType::Fitness &, bool >) cw +(eoFunctorBase) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (moNoAspirCrit< M >) 0 0 box + (moAspirCrit< M >) 0 1 box + (eoBF< const M &, const M::EOType::Fitness &, bool >) 0 2 box + (eoFunctorBase) 0 3 box + +% ----- relations ----- + +solid +0 0 0 out +solid +1 0 1 in +solid +0 0 1 out +solid +1 0 2 in +solid +0 0 2 out +solid +1 0 3 in diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_no_aspir_crit.tex b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_no_aspir_crit.tex new file mode 100644 index 000000000..c9169ff46 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_no_aspir_crit.tex @@ -0,0 +1,68 @@ +\section{moNoAspirCrit$<$ M $>$ Class Template Reference} +\label{classmo_no_aspir_crit}\index{moNoAspirCrit@{moNoAspirCrit}} +One of the possible aspiration criterion (\doxyref{moAspirCrit}{p.}{classmo_aspir_crit}). + + +{\tt \#include $<$moNoAspirCrit.h$>$} + +Inheritance diagram for moNoAspirCrit$<$ M $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=4cm]{classmo_no_aspir_crit} +\end{center} +\end{figure} +\subsection*{Private Member Functions} +\begin{CompactItemize} +\item +bool {\bf operator()} (const M \&\_\-\_\-move, const typename M::EOType::Fitness \&\_\-\_\-sol) +\begin{CompactList}\small\item\em Function which describes the aspiration criterion behaviour. \item\end{CompactList}\item +void {\bf init} () +\begin{CompactList}\small\item\em Procedure which initialises all that needs a \doxyref{moNoAspirCrit}{p.}{classmo_no_aspir_crit}. \item\end{CompactList}\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class M$>$ class moNoAspirCrit$<$ M $>$} + +One of the possible aspiration criterion (\doxyref{moAspirCrit}{p.}{classmo_aspir_crit}). + +The simplest : never satisfied. + + + +Definition at line 21 of file moNoAspirCrit.h. + +\subsection{Member Function Documentation} +\index{moNoAspirCrit@{moNoAspirCrit}!operator()@{operator()}} +\index{operator()@{operator()}!moNoAspirCrit@{moNoAspirCrit}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class M$>$ bool {\bf moNoAspirCrit}$<$ M $>$::operator() (const M \& {\em \_\-\_\-move}, const typename M::EOType::Fitness \& {\em \_\-\_\-sol})\hspace{0.3cm}{\tt [inline, private]}}\label{classmo_no_aspir_crit_8a7180a8d5c25bfb6727d0b59551b0f8} + + +Function which describes the aspiration criterion behaviour. + +Does nothing. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-\_\-move}]a move. \item[{\em \_\-\_\-sol}]a fitness. \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]FALSE. \end{Desc} + + +Definition at line 32 of file moNoAspirCrit.h.\index{moNoAspirCrit@{moNoAspirCrit}!init@{init}} +\index{init@{init}!moNoAspirCrit@{moNoAspirCrit}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class M$>$ void {\bf moNoAspirCrit}$<$ M $>$::init ()\hspace{0.3cm}{\tt [inline, private, virtual]}}\label{classmo_no_aspir_crit_f3a286fc4c2d36bd390ba9a3074f3037} + + +Procedure which initialises all that needs a \doxyref{moNoAspirCrit}{p.}{classmo_no_aspir_crit}. + +Nothing... + +Implements {\bf moAspirCrit$<$ M $>$} \doxyref{}{p.}{classmo_aspir_crit_a8ce84510a5ec7c9078381e542c6d140}. + +Definition at line 43 of file moNoAspirCrit.h. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moNoAspirCrit.h\end{CompactItemize} diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_rand_impr_select.eps b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_rand_impr_select.eps new file mode 100644 index 000000000..fe55210a4 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_rand_impr_select.eps @@ -0,0 +1,209 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 303.03 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 1.65 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 4 def +/cols 1 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(moRandImprSelect< M >) cw +(moMoveSelect< M >) cw +(eoBF< M &, M::EOType::Fitness &, void >) cw +(eoFunctorBase) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (moRandImprSelect< M >) 0 0 box + (moMoveSelect< M >) 0 1 box + (eoBF< M &, M::EOType::Fitness &, void >) 0 2 box + (eoFunctorBase) 0 3 box + +% ----- relations ----- + +solid +0 0 0 out +solid +1 0 1 in +solid +0 0 1 out +solid +1 0 2 in +solid +0 0 2 out +solid +1 0 3 in diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_rand_impr_select.tex b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_rand_impr_select.tex new file mode 100644 index 000000000..965d745cd --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_rand_impr_select.tex @@ -0,0 +1,126 @@ +\section{moRandImprSelect$<$ M $>$ Class Template Reference} +\label{classmo_rand_impr_select}\index{moRandImprSelect@{moRandImprSelect}} +One of the possible \doxyref{moMove}{p.}{classmo_move} selector (\doxyref{moMoveSelect}{p.}{classmo_move_select}). + + +{\tt \#include $<$moRandImprSelect.h$>$} + +Inheritance diagram for moRandImprSelect$<$ M $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=4cm]{classmo_rand_impr_select} +\end{center} +\end{figure} +\subsection*{Public Types} +\begin{CompactItemize} +\item +typedef M::EOType::Fitness {\bf Fitness}\label{classmo_rand_impr_select_3bff2fdb963297430543c82ffb567a5c} + +\begin{CompactList}\small\item\em Alias for the fitness. \item\end{CompactList}\end{CompactItemize} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +void {\bf init} (const {\bf Fitness} \&\_\-\_\-fit) +\begin{CompactList}\small\item\em Procedure which all that needs a \doxyref{moRandImprSelect}{p.}{classmo_rand_impr_select}. \item\end{CompactList}\item +bool {\bf update} (const M \&\_\-\_\-move, const {\bf Fitness} \&\_\-\_\-fit) +\begin{CompactList}\small\item\em Function that updates the fitness and move vectors. \item\end{CompactList}\item +void {\bf operator()} (M \&\_\-\_\-move, {\bf Fitness} \&\_\-\_\-fit) throw (EmptySelection) +\begin{CompactList}\small\item\em The move selection. \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Attributes} +\begin{CompactItemize} +\item +{\bf Fitness} {\bf init\_\-fit}\label{classmo_rand_impr_select_d153c277a0a2ea95ac484210d445b40e} + +\begin{CompactList}\small\item\em Fitness of the current solution. \item\end{CompactList}\item +std::vector$<$ {\bf Fitness} $>$ {\bf vect\_\-better\_\-fit}\label{classmo_rand_impr_select_05c7c3b858e8a25632f2f5c86b0c97a3} + +\begin{CompactList}\small\item\em Candidate fitnesse vector. \item\end{CompactList}\item +std::vector$<$ M $>$ {\bf vect\_\-better\_\-moves}\label{classmo_rand_impr_select_2ace12bd179144fa71d56324694201f5} + +\begin{CompactList}\small\item\em Candidate move vector. \item\end{CompactList}\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class M$>$ class moRandImprSelect$<$ M $>$} + +One of the possible \doxyref{moMove}{p.}{classmo_move} selector (\doxyref{moMoveSelect}{p.}{classmo_move_select}). + +All the neighbors are considered. One of them that enables an improvment of the objective function is choosen. + + + +Definition at line 25 of file moRandImprSelect.h. + +\subsection{Member Function Documentation} +\index{moRandImprSelect@{moRandImprSelect}!init@{init}} +\index{init@{init}!moRandImprSelect@{moRandImprSelect}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class M$>$ void {\bf moRandImprSelect}$<$ M $>$::init (const {\bf Fitness} \& {\em \_\-\_\-fit})\hspace{0.3cm}{\tt [inline, virtual]}}\label{classmo_rand_impr_select_a19726a1509cff874801615d63a3b5d9} + + +Procedure which all that needs a \doxyref{moRandImprSelect}{p.}{classmo_rand_impr_select}. + +Give a value to the initialise fitness. Clean the move and fitness vectors. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-\_\-fit}]the current best fitness \end{description} +\end{Desc} + + +Implements {\bf moMoveSelect$<$ M $>$} \doxyref{}{p.}{classmo_move_select_bca4c43f13d26eca7163aeb272a4a52e}. + +Definition at line 40 of file moRandImprSelect.h. + +References moRandImprSelect$<$ M $>$::init\_\-fit, moRandImprSelect$<$ M $>$::vect\_\-better\_\-fit, and moRandImprSelect$<$ M $>$::vect\_\-better\_\-moves.\index{moRandImprSelect@{moRandImprSelect}!update@{update}} +\index{update@{update}!moRandImprSelect@{moRandImprSelect}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class M$>$ bool {\bf moRandImprSelect}$<$ M $>$::update (const M \& {\em \_\-\_\-move}, const {\bf Fitness} \& {\em \_\-\_\-fit})\hspace{0.3cm}{\tt [inline, virtual]}}\label{classmo_rand_impr_select_60ae5548560caee7e28d5ed2446186c9} + + +Function that updates the fitness and move vectors. + +if a move give a better fitness than the initial fitness, it is saved and the fitness too. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-\_\-move}]a new move. \item[{\em \_\-\_\-fit}]a new fitness associated to the new move. \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]TRUE. \end{Desc} + + +Implements {\bf moMoveSelect$<$ M $>$} \doxyref{}{p.}{classmo_move_select_7c157b6e64fd417acf6e900059204eb1}. + +Definition at line 56 of file moRandImprSelect.h. + +References moRandImprSelect$<$ M $>$::init\_\-fit, moRandImprSelect$<$ M $>$::vect\_\-better\_\-fit, and moRandImprSelect$<$ M $>$::vect\_\-better\_\-moves.\index{moRandImprSelect@{moRandImprSelect}!operator()@{operator()}} +\index{operator()@{operator()}!moRandImprSelect@{moRandImprSelect}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class M$>$ void {\bf moRandImprSelect}$<$ M $>$::operator() (M \& {\em \_\-\_\-move}, {\bf Fitness} \& {\em \_\-\_\-fit}) throw ({\bf EmptySelection})\hspace{0.3cm}{\tt [inline, virtual]}}\label{classmo_rand_impr_select_5ee57f77a450c0a9ce50bfccf3ad2a55} + + +The move selection. + +One the saved move is randomly chosen. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-\_\-move}]the reference of the move that can be initialised by the function. \item[{\em \_\-\_\-fit}]the reference of the fitness that can be initialised by the function. \end{description} +\end{Desc} +\begin{Desc} +\item[Exceptions:] +\begin{description} +\item[{\em \doxyref{EmptySelection}{p.}{class_empty_selection}}]If no move which improves the current fitness are found. \end{description} +\end{Desc} + + +Implements {\bf eoBF$<$ M \&, M::EOType::Fitness \&, void $>$}. + +Definition at line 77 of file moRandImprSelect.h. + +References eoRng::random(), moRandImprSelect$<$ M $>$::vect\_\-better\_\-fit, and moRandImprSelect$<$ M $>$::vect\_\-better\_\-moves. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moRandImprSelect.h\end{CompactItemize} diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_rand_move.tex b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_rand_move.tex new file mode 100644 index 000000000..665d27245 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_rand_move.tex @@ -0,0 +1,29 @@ +\section{moRandMove$<$ M $>$ Class Template Reference} +\label{classmo_rand_move}\index{moRandMove@{moRandMove}} +Random move generator. + + +{\tt \#include $<$moRandMove.h$>$} + +Inheritance diagram for moRandMove$<$ M $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=3cm]{classmo_rand_move} +\end{center} +\end{figure} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class M$>$ class moRandMove$<$ M $>$} + +Random move generator. + +Only a description... An object that herits from this class needs to be designed in order to use a \doxyref{moSA}{p.}{classmo_s_a}. + + + +Definition at line 21 of file moRandMove.h. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moRandMove.h\end{CompactItemize} diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_s_a.eps b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_s_a.eps new file mode 100644 index 000000000..efa0100f9 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_s_a.eps @@ -0,0 +1,221 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 271.739 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 1.84 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 5 def +/cols 2 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(moSA< M >) cw +(moAlgo< M::EOType >) cw +(eoMonOp< M::EOType >) cw +(eoOp< EOType >) cw +(eoUF< M::EOType &, bool >) cw +(eoFunctorBase) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (moSA< M >) 0.5 0 box + (moAlgo< M::EOType >) 0.5 1 box + (eoMonOp< M::EOType >) 0.5 2 box + (eoOp< EOType >) 0 3 box + (eoUF< M::EOType &, bool >) 1 3 box + (eoFunctorBase) 1 4 box + +% ----- relations ----- + +solid +0 0.5 0 out +solid +1 0.5 1 in +solid +0 0.5 1 out +solid +1 0.5 2 in +solid +0 0.5 2 out +solid +0 1 3 conn +solid +1 0 3 in +solid +1 1 3 in +solid +0 1 3 out +solid +1 1 4 in diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_s_a.tex b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_s_a.tex new file mode 100644 index 000000000..a58e3a510 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_s_a.tex @@ -0,0 +1,110 @@ +\section{moSA$<$ M $>$ Class Template Reference} +\label{classmo_s_a}\index{moSA@{moSA}} +Simulated Annealing (SA). + + +{\tt \#include $<$moSA.h$>$} + +Inheritance diagram for moSA$<$ M $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=5cm]{classmo_s_a} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +{\bf moSA} ({\bf moRandMove}$<$ M $>$ \&\_\-\_\-move\_\-rand, {\bf moMoveIncrEval}$<$ M $>$ \&\_\-\_\-incr\_\-eval, {\bf moSolContinue}$<$ {\bf EOT} $>$ \&\_\-\_\-cont, double \_\-\_\-init\_\-temp, {\bf moCoolingSchedule} \&\_\-\_\-cool\_\-sched, {\bf eoEvalFunc}$<$ {\bf EOT} $>$ \&\_\-\_\-full\_\-eval) +\begin{CompactList}\small\item\em SA constructor. \item\end{CompactList}\item +bool {\bf operator()} ({\bf EOT} \&\_\-\_\-sol) +\begin{CompactList}\small\item\em function that launches the SA algorithm. \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Types} +\begin{CompactItemize} +\item +typedef M::EOType {\bf EOT}\label{classmo_s_a_d5d64a8797bdedc7b3af7893aded0bd5} + +\begin{CompactList}\small\item\em Alias for the type. \item\end{CompactList}\item +typedef EOT::Fitness {\bf Fitness}\label{classmo_s_a_97f1a40d5ab5a0b3f878d0347b34804b} + +\begin{CompactList}\small\item\em Alias for the fitness. \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Attributes} +\begin{CompactItemize} +\item +{\bf moRandMove}$<$ M $>$ \& {\bf move\_\-rand}\label{classmo_s_a_71c49935b63a202d25888a5f86121fec} + +\begin{CompactList}\small\item\em A move generator (generally randomly). \item\end{CompactList}\item +{\bf moMoveIncrEval}$<$ M $>$ \& {\bf incr\_\-eval}\label{classmo_s_a_4c3be32e9832e465b24e6d33559356bc} + +\begin{CompactList}\small\item\em A (generally) efficient evaluation function. \item\end{CompactList}\item +{\bf moSolContinue}$<$ {\bf EOT} $>$ \& {\bf cont}\label{classmo_s_a_54484c8a514866ea496e0058c2e09716} + +\begin{CompactList}\small\item\em Stopping criterion before temperature update. \item\end{CompactList}\item +double {\bf init\_\-temp}\label{classmo_s_a_f1af7636b52aa5f6b381f8187b667bd4} + +\begin{CompactList}\small\item\em Initial temperature. \item\end{CompactList}\item +{\bf moCoolingSchedule} \& {\bf cool\_\-sched}\label{classmo_s_a_11c7d0cab649b7d680dd85bb74cb4ff6} + +\begin{CompactList}\small\item\em The cooling schedule. \item\end{CompactList}\item +{\bf eoEvalFunc}$<$ {\bf EOT} $>$ \& {\bf full\_\-eval}\label{classmo_s_a_bcd6a940046f23dd741444c0b85edf2c} + +\begin{CompactList}\small\item\em A full evaluation function. \item\end{CompactList}\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class M$>$ class moSA$<$ M $>$} + +Simulated Annealing (SA). + +Class that describes a Simulated Annealing algorithm. + + + +Definition at line 30 of file moSA.h. + +\subsection{Constructor \& Destructor Documentation} +\index{moSA@{moSA}!moSA@{moSA}} +\index{moSA@{moSA}!moSA@{moSA}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class M$>$ {\bf moSA}$<$ M $>$::{\bf moSA} ({\bf moRandMove}$<$ M $>$ \& {\em \_\-\_\-move\_\-rand}, {\bf moMoveIncrEval}$<$ M $>$ \& {\em \_\-\_\-incr\_\-eval}, {\bf moSolContinue}$<$ {\bf EOT} $>$ \& {\em \_\-\_\-cont}, double {\em \_\-\_\-init\_\-temp}, {\bf moCoolingSchedule} \& {\em \_\-\_\-cool\_\-sched}, {\bf eoEvalFunc}$<$ {\bf EOT} $>$ \& {\em \_\-\_\-full\_\-eval})\hspace{0.3cm}{\tt [inline]}}\label{classmo_s_a_01f6a44483e5a7abbce33eb480b6a9b9} + + +SA constructor. + +All the boxes used by a SA need to be given. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-\_\-move\_\-rand}]a move generator (generally randomly). \item[{\em \_\-\_\-incr\_\-eval}]a (generaly) efficient evaluation function \item[{\em \_\-\_\-cont}]a stopping criterion. \item[{\em \_\-\_\-init\_\-temp}]the initial temperature. \item[{\em \_\-\_\-cool\_\-sched}]a cooling schedule, describes how the temperature is modified. \item[{\em \_\-\_\-full\_\-eval}]a full evaluation function. \end{description} +\end{Desc} + + +Definition at line 58 of file moSA.h. + +\subsection{Member Function Documentation} +\index{moSA@{moSA}!operator()@{operator()}} +\index{operator()@{operator()}!moSA@{moSA}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class M$>$ bool {\bf moSA}$<$ M $>$::operator() ({\bf EOT} \& {\em \_\-\_\-sol})\hspace{0.3cm}{\tt [inline, virtual]}}\label{classmo_s_a_0e4c54b57bc13fcbd4763883b8f719e5} + + +function that launches the SA algorithm. + +As a \doxyref{moTS}{p.}{classmo_t_s} or a \doxyref{moHC}{p.}{classmo_h_c}, the SA can be used for HYBRIDATION in an evolutionary algorithm. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-\_\-sol}]a solution to improve. \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]TRUE. \end{Desc} + + +Implements {\bf eoUF$<$ M::EOType \&, bool $>$}. + +Definition at line 80 of file moSA.h. + +References moSA$<$ M $>$::cont, moSA$<$ M $>$::cool\_\-sched, moSA$<$ M $>$::full\_\-eval, moSA$<$ M $>$::incr\_\-eval, moSA$<$ M $>$::init\_\-temp, moSA$<$ M $>$::move\_\-rand, and eoRng::uniform(). + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moSA.h\end{CompactItemize} diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_simple_move_tabu_list.eps b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_simple_move_tabu_list.eps new file mode 100644 index 000000000..95d9a8476 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_simple_move_tabu_list.eps @@ -0,0 +1,209 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 277.778 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 1.8 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 4 def +/cols 1 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(moSimpleMoveTabuList< M >) cw +(moTabuList< M >) cw +(eoBF< const M &, const M::EOType &, bool >) cw +(eoFunctorBase) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (moSimpleMoveTabuList< M >) 0 0 box + (moTabuList< M >) 0 1 box + (eoBF< const M &, const M::EOType &, bool >) 0 2 box + (eoFunctorBase) 0 3 box + +% ----- relations ----- + +solid +0 0 0 out +solid +1 0 1 in +solid +0 0 1 out +solid +1 0 2 in +solid +0 0 2 out +solid +1 0 3 in diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_simple_move_tabu_list.tex b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_simple_move_tabu_list.tex new file mode 100644 index 000000000..d80f3328b --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_simple_move_tabu_list.tex @@ -0,0 +1,147 @@ +\section{moSimpleMoveTabuList$<$ M $>$ Class Template Reference} +\label{classmo_simple_move_tabu_list}\index{moSimpleMoveTabuList@{moSimpleMoveTabuList}} +Class describing a move tabu list with a limited memory. + + +{\tt \#include $<$moSimpleMoveTabuList.h$>$} + +Inheritance diagram for moSimpleMoveTabuList$<$ M $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=4cm]{classmo_simple_move_tabu_list} +\end{center} +\end{figure} +\subsection*{Public Types} +\begin{CompactItemize} +\item +typedef M::EOType {\bf EOT}\label{classmo_simple_move_tabu_list_91286ff3ba6b1e9e1db9e4fdade2edb7} + +\begin{CompactList}\small\item\em Alias for the type. \item\end{CompactList}\end{CompactItemize} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +{\bf moSimpleMoveTabuList} (unsigned int \_\-\_\-size)\label{classmo_simple_move_tabu_list_12798ce0bc3a2ee031fb301290ed6d79} + +\begin{CompactList}\small\item\em Constructor. \item\end{CompactList}\item +bool {\bf operator()} (const M \&\_\-\_\-move, const {\bf EOT} \&\_\-\_\-sol) +\begin{CompactList}\small\item\em Function that indicates if, in a given state, the \_\-move is tabu or not. \item\end{CompactList}\item +void {\bf add} (const M \&\_\-\_\-move, const {\bf EOT} \&\_\-\_\-sol) +\begin{CompactList}\small\item\em Procedure to add a move in the tabu list. \item\end{CompactList}\item +void {\bf update} () +\begin{CompactList}\small\item\em Procedure that updates the tabu list content. \item\end{CompactList}\item +void {\bf init} () +\begin{CompactList}\small\item\em Procedure which initialises the tabu list. \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Member Functions} +\begin{CompactItemize} +\item +void {\bf removeMove} (const M \&\_\-\_\-move) +\begin{CompactList}\small\item\em Procedure that removes a given move from the tabu list (if it is into, else do nothing). \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Attributes} +\begin{CompactItemize} +\item +unsigned int {\bf maxSize}\label{classmo_simple_move_tabu_list_e48848e9e5c9c8435475cbdf21658e23} + +\begin{CompactList}\small\item\em The maximum size of the tabu list. \item\end{CompactList}\item +unsigned int {\bf currentSize}\label{classmo_simple_move_tabu_list_f1f9524e62d48f3688aa58a6055ccceb} + +\begin{CompactList}\small\item\em The current size of the tabu list. \item\end{CompactList}\item +std::list$<$ M $>$ {\bf tabuList}\label{classmo_simple_move_tabu_list_d91bc838361524720616b44eda9b2c3a} + +\begin{CompactList}\small\item\em The move tabu list. \item\end{CompactList}\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class M$>$ class moSimpleMoveTabuList$<$ M $>$} + +Class describing a move tabu list with a limited memory. + + + +Definition at line 22 of file moSimpleMoveTabuList.h. + +\subsection{Member Function Documentation} +\index{moSimpleMoveTabuList@{moSimpleMoveTabuList}!operator()@{operator()}} +\index{operator()@{operator()}!moSimpleMoveTabuList@{moSimpleMoveTabuList}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class M$>$ bool {\bf moSimpleMoveTabuList}$<$ M $>$::operator() (const M \& {\em \_\-\_\-move}, const {\bf EOT} \& {\em \_\-\_\-sol})\hspace{0.3cm}{\tt [inline, virtual]}}\label{classmo_simple_move_tabu_list_bb7fe9da28617f56734af71c42c8265a} + + +Function that indicates if, in a given state, the \_\-move is tabu or not. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-\_\-move}]A given \doxyref{moMove}{p.}{classmo_move}. \item[{\em \_\-\_\-sol}]A solution. \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]true or false. \end{Desc} + + +Implements {\bf eoBF$<$ const M \&, const M::EOType \&, bool $>$}. + +Definition at line 46 of file moSimpleMoveTabuList.h. + +References moSimpleMoveTabuList$<$ M $>$::tabuList.\index{moSimpleMoveTabuList@{moSimpleMoveTabuList}!add@{add}} +\index{add@{add}!moSimpleMoveTabuList@{moSimpleMoveTabuList}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class M$>$ void {\bf moSimpleMoveTabuList}$<$ M $>$::add (const M \& {\em \_\-\_\-move}, const {\bf EOT} \& {\em \_\-\_\-sol})\hspace{0.3cm}{\tt [inline, virtual]}}\label{classmo_simple_move_tabu_list_43c979a9ec876c5e5b591b1c422395ef} + + +Procedure to add a move in the tabu list. + +The two parameters have not to be modified so they are constant parameters. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-\_\-move}]a new tabu move. \item[{\em \_\-\_\-sol}]the origianl solution associated to this move. \end{description} +\end{Desc} + + +Implements {\bf moTabuList$<$ M $>$} \doxyref{}{p.}{classmo_tabu_list_d279d72cb486d812da1ad3d24a69c286}. + +Definition at line 60 of file moSimpleMoveTabuList.h. + +References moSimpleMoveTabuList$<$ M $>$::currentSize, moSimpleMoveTabuList$<$ M $>$::maxSize, moSimpleMoveTabuList$<$ M $>$::removeMove(), and moSimpleMoveTabuList$<$ M $>$::tabuList.\index{moSimpleMoveTabuList@{moSimpleMoveTabuList}!update@{update}} +\index{update@{update}!moSimpleMoveTabuList@{moSimpleMoveTabuList}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class M$>$ void {\bf moSimpleMoveTabuList}$<$ M $>$::update ()\hspace{0.3cm}{\tt [inline, virtual]}}\label{classmo_simple_move_tabu_list_96cffc8118456ed762b07b9fc0e0679f} + + +Procedure that updates the tabu list content. + +Generally, a counter associated to each saved move is decreased by one. + +Implements {\bf moTabuList$<$ M $>$} \doxyref{}{p.}{classmo_tabu_list_a2e5d1132f064093c8ed57046405f5ca}. + +Definition at line 82 of file moSimpleMoveTabuList.h.\index{moSimpleMoveTabuList@{moSimpleMoveTabuList}!init@{init}} +\index{init@{init}!moSimpleMoveTabuList@{moSimpleMoveTabuList}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class M$>$ void {\bf moSimpleMoveTabuList}$<$ M $>$::init ()\hspace{0.3cm}{\tt [inline, virtual]}}\label{classmo_simple_move_tabu_list_b91ae9971be30769757d1ad92c6009dc} + + +Procedure which initialises the tabu list. + +Can be useful if the data structure needs to be allocated before being used. + +Implements {\bf moTabuList$<$ M $>$} \doxyref{}{p.}{classmo_tabu_list_0a06c459d56e8e2b408a8f3c6aec4e57}. + +Definition at line 88 of file moSimpleMoveTabuList.h.\index{moSimpleMoveTabuList@{moSimpleMoveTabuList}!removeMove@{removeMove}} +\index{removeMove@{removeMove}!moSimpleMoveTabuList@{moSimpleMoveTabuList}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class M$>$ void {\bf moSimpleMoveTabuList}$<$ M $>$::removeMove (const M \& {\em \_\-\_\-move})\hspace{0.3cm}{\tt [inline, private]}}\label{classmo_simple_move_tabu_list_a3fa2bd19e09f1541878fa28e867d20f} + + +Procedure that removes a given move from the tabu list (if it is into, else do nothing). + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-\_\-move}]A given \doxyref{moMove}{p.}{classmo_move}. \end{description} +\end{Desc} + + +Definition at line 100 of file moSimpleMoveTabuList.h. + +References moSimpleMoveTabuList$<$ M $>$::tabuList. + +Referenced by moSimpleMoveTabuList$<$ M $>$::add(). + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moSimpleMoveTabuList.h\end{CompactItemize} diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_simple_solution_tabu_list.eps b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_simple_solution_tabu_list.eps new file mode 100644 index 000000000..c673817e4 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_simple_solution_tabu_list.eps @@ -0,0 +1,209 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 277.778 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 1.8 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 4 def +/cols 1 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(moSimpleSolutionTabuList< M >) cw +(moTabuList< M >) cw +(eoBF< const M &, const M::EOType &, bool >) cw +(eoFunctorBase) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (moSimpleSolutionTabuList< M >) 0 0 box + (moTabuList< M >) 0 1 box + (eoBF< const M &, const M::EOType &, bool >) 0 2 box + (eoFunctorBase) 0 3 box + +% ----- relations ----- + +solid +0 0 0 out +solid +1 0 1 in +solid +0 0 1 out +solid +1 0 2 in +solid +0 0 2 out +solid +1 0 3 in diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_simple_solution_tabu_list.tex b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_simple_solution_tabu_list.tex new file mode 100644 index 000000000..9437723d9 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_simple_solution_tabu_list.tex @@ -0,0 +1,165 @@ +\section{moSimpleSolutionTabuList$<$ M $>$ Class Template Reference} +\label{classmo_simple_solution_tabu_list}\index{moSimpleSolutionTabuList@{moSimpleSolutionTabuList}} +Class describing a solution tabu list with limited length. + + +{\tt \#include $<$moSimpleSolutionTabuList.h$>$} + +Inheritance diagram for moSimpleSolutionTabuList$<$ M $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=4cm]{classmo_simple_solution_tabu_list} +\end{center} +\end{figure} +\subsection*{Public Types} +\begin{CompactItemize} +\item +typedef M::EOType {\bf EOT}\label{classmo_simple_solution_tabu_list_881060871a6b49e5e8554c5df85176d9} + +\begin{CompactList}\small\item\em Alias for the type. \item\end{CompactList}\end{CompactItemize} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +{\bf moSimpleSolutionTabuList} (unsigned int \_\-\_\-size) +\begin{CompactList}\small\item\em Constructor. \item\end{CompactList}\item +bool {\bf operator()} (const M \&\_\-\_\-move, const {\bf EOT} \&\_\-\_\-sol) +\begin{CompactList}\small\item\em Function that indicates if, in a given state, the \_\-move is tabu or not. \item\end{CompactList}\item +void {\bf add} (const M \&\_\-\_\-move, const {\bf EOT} \&\_\-\_\-sol) +\begin{CompactList}\small\item\em Procedure to add a move in the tabu list. \item\end{CompactList}\item +void {\bf update} () +\begin{CompactList}\small\item\em Procedure that updates the tabu list content. \item\end{CompactList}\item +void {\bf init} () +\begin{CompactList}\small\item\em Procedure which initialises the tabu list. \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Member Functions} +\begin{CompactItemize} +\item +void {\bf removeSolution} (const {\bf EOT} \&\_\-\_\-sol) +\begin{CompactList}\small\item\em Procedure that removes a given solution from the tabu list (if it is into, else does nothing). \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Attributes} +\begin{CompactItemize} +\item +unsigned int {\bf maxSize}\label{classmo_simple_solution_tabu_list_662e1f65fadff234692be009a2440845} + +\begin{CompactList}\small\item\em The maximum size of the tabu list. \item\end{CompactList}\item +unsigned int {\bf currentSize}\label{classmo_simple_solution_tabu_list_2aaf6e882d10495adddae94cb7a48fbf} + +\begin{CompactList}\small\item\em The current size of the tabu list. \item\end{CompactList}\item +std::list$<$ {\bf EOT} $>$ {\bf tabuList}\label{classmo_simple_solution_tabu_list_75df9cd683528d3722d02bac407b710b} + +\begin{CompactList}\small\item\em The solution tabu list. \item\end{CompactList}\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class M$>$ class moSimpleSolutionTabuList$<$ M $>$} + +Class describing a solution tabu list with limited length. + + + +Definition at line 22 of file moSimpleSolutionTabuList.h. + +\subsection{Constructor \& Destructor Documentation} +\index{moSimpleSolutionTabuList@{moSimpleSolutionTabuList}!moSimpleSolutionTabuList@{moSimpleSolutionTabuList}} +\index{moSimpleSolutionTabuList@{moSimpleSolutionTabuList}!moSimpleSolutionTabuList@{moSimpleSolutionTabuList}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class M$>$ {\bf moSimpleSolutionTabuList}$<$ M $>$::{\bf moSimpleSolutionTabuList} (unsigned int {\em \_\-\_\-size})\hspace{0.3cm}{\tt [inline]}}\label{classmo_simple_solution_tabu_list_8f8ce82b49ff49efbd934cedd3e34178} + + +Constructor. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-\_\-size}]The maximum size of the solution tabu list. \end{description} +\end{Desc} + + +Definition at line 34 of file moSimpleSolutionTabuList.h. + +References moSimpleSolutionTabuList$<$ M $>$::currentSize. + +\subsection{Member Function Documentation} +\index{moSimpleSolutionTabuList@{moSimpleSolutionTabuList}!operator()@{operator()}} +\index{operator()@{operator()}!moSimpleSolutionTabuList@{moSimpleSolutionTabuList}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class M$>$ bool {\bf moSimpleSolutionTabuList}$<$ M $>$::operator() (const M \& {\em \_\-\_\-move}, const {\bf EOT} \& {\em \_\-\_\-sol})\hspace{0.3cm}{\tt [inline, virtual]}}\label{classmo_simple_solution_tabu_list_e1f1cf258b55554d8be88fb5780a0047} + + +Function that indicates if, in a given state, the \_\-move is tabu or not. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-\_\-move}]A given \doxyref{moMove}{p.}{classmo_move}. \item[{\em \_\-\_\-sol}]A solution. \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]true or false. \end{Desc} + + +Implements {\bf eoBF$<$ const M \&, const M::EOType \&, bool $>$}. + +Definition at line 45 of file moSimpleSolutionTabuList.h. + +References moSimpleSolutionTabuList$<$ M $>$::tabuList.\index{moSimpleSolutionTabuList@{moSimpleSolutionTabuList}!add@{add}} +\index{add@{add}!moSimpleSolutionTabuList@{moSimpleSolutionTabuList}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class M$>$ void {\bf moSimpleSolutionTabuList}$<$ M $>$::add (const M \& {\em \_\-\_\-move}, const {\bf EOT} \& {\em \_\-\_\-sol})\hspace{0.3cm}{\tt [inline, virtual]}}\label{classmo_simple_solution_tabu_list_fd6b3a1764121169650c969bba895615} + + +Procedure to add a move in the tabu list. + +The two parameters have not to be modified so they are constant parameters. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-\_\-move}]a new tabu move. \item[{\em \_\-\_\-sol}]the origianl solution associated to this move. \end{description} +\end{Desc} + + +Implements {\bf moTabuList$<$ M $>$} \doxyref{}{p.}{classmo_tabu_list_d279d72cb486d812da1ad3d24a69c286}. + +Definition at line 64 of file moSimpleSolutionTabuList.h. + +References moSimpleSolutionTabuList$<$ M $>$::currentSize, moSimpleSolutionTabuList$<$ M $>$::maxSize, moSimpleSolutionTabuList$<$ M $>$::removeSolution(), and moSimpleSolutionTabuList$<$ M $>$::tabuList.\index{moSimpleSolutionTabuList@{moSimpleSolutionTabuList}!update@{update}} +\index{update@{update}!moSimpleSolutionTabuList@{moSimpleSolutionTabuList}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class M$>$ void {\bf moSimpleSolutionTabuList}$<$ M $>$::update ()\hspace{0.3cm}{\tt [inline, virtual]}}\label{classmo_simple_solution_tabu_list_91b8b01dba7ffea8b63765d931e56f56} + + +Procedure that updates the tabu list content. + +Generally, a counter associated to each saved move is decreased by one. + +Implements {\bf moTabuList$<$ M $>$} \doxyref{}{p.}{classmo_tabu_list_a2e5d1132f064093c8ed57046405f5ca}. + +Definition at line 91 of file moSimpleSolutionTabuList.h.\index{moSimpleSolutionTabuList@{moSimpleSolutionTabuList}!init@{init}} +\index{init@{init}!moSimpleSolutionTabuList@{moSimpleSolutionTabuList}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class M$>$ void {\bf moSimpleSolutionTabuList}$<$ M $>$::init ()\hspace{0.3cm}{\tt [inline, virtual]}}\label{classmo_simple_solution_tabu_list_d5645c39fec71a6110a2cbccbb08b816} + + +Procedure which initialises the tabu list. + +Can be useful if the data structure needs to be allocated before being used. + +Implements {\bf moTabuList$<$ M $>$} \doxyref{}{p.}{classmo_tabu_list_0a06c459d56e8e2b408a8f3c6aec4e57}. + +Definition at line 97 of file moSimpleSolutionTabuList.h.\index{moSimpleSolutionTabuList@{moSimpleSolutionTabuList}!removeSolution@{removeSolution}} +\index{removeSolution@{removeSolution}!moSimpleSolutionTabuList@{moSimpleSolutionTabuList}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class M$>$ void {\bf moSimpleSolutionTabuList}$<$ M $>$::removeSolution (const {\bf EOT} \& {\em \_\-\_\-sol})\hspace{0.3cm}{\tt [inline, private]}}\label{classmo_simple_solution_tabu_list_7847a48f33c15e31298f3e715d754560} + + +Procedure that removes a given solution from the tabu list (if it is into, else does nothing). + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-\_\-sol}]A given solution. \end{description} +\end{Desc} + + +Definition at line 109 of file moSimpleSolutionTabuList.h. + +References moSimpleSolutionTabuList$<$ M $>$::tabuList. + +Referenced by moSimpleSolutionTabuList$<$ M $>$::add(). + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moSimpleSolutionTabuList.h\end{CompactItemize} diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_sol_continue.eps b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_sol_continue.eps new file mode 100644 index 000000000..c2a7fb9ca --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_sol_continue.eps @@ -0,0 +1,209 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 441.989 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 1.13125 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 4 def +/cols 1 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(moSolContinue< EOT >) cw +(eoUF< const EOT &, bool >) cw +(eoFunctorBase) cw +(moGenSolContinue< EOT >) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (moSolContinue< EOT >) 0 1 box + (eoUF< const EOT &, bool >) 0 2 box + (eoFunctorBase) 0 3 box + (moGenSolContinue< EOT >) 0 0 box + +% ----- relations ----- + +solid +0 0 1 out +solid +1 0 2 in +solid +0 0 2 out +solid +1 0 3 in +solid +1 0 0.25 out +solid +0 0 0.75 in diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_sol_continue.tex b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_sol_continue.tex new file mode 100644 index 000000000..bc98d68d9 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_sol_continue.tex @@ -0,0 +1,46 @@ +\section{moSolContinue$<$ EOT $>$ Class Template Reference} +\label{classmo_sol_continue}\index{moSolContinue@{moSolContinue}} +Class that describes a stop criterion for a solution-based heuristic. + + +{\tt \#include $<$moSolContinue.h$>$} + +Inheritance diagram for moSolContinue$<$ EOT $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=4cm]{classmo_sol_continue} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +virtual void {\bf init} ()=0 +\begin{CompactList}\small\item\em Procedure which initialises all that the stop criterion needs. \item\end{CompactList}\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class EOT$>$ class moSolContinue$<$ EOT $>$} + +Class that describes a stop criterion for a solution-based heuristic. + +It allows to add an initialisation procedure to an object that is a unary function ({\bf eoUF}). + + + +Definition at line 22 of file moSolContinue.h. + +\subsection{Member Function Documentation} +\index{moSolContinue@{moSolContinue}!init@{init}} +\index{init@{init}!moSolContinue@{moSolContinue}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT$>$ virtual void {\bf moSolContinue}$<$ EOT $>$::init ()\hspace{0.3cm}{\tt [pure virtual]}}\label{classmo_sol_continue_064dc966a210f4ffb9515be3f03ca4c7} + + +Procedure which initialises all that the stop criterion needs. + +Generally, it allocates some data structures or initialises some counters. + +Implemented in {\bf moGenSolContinue$<$ EOT $>$} \doxyref{}{p.}{classmo_gen_sol_continue_6c5db8182157584b56507cc9075602d4}. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moSolContinue.h\end{CompactItemize} diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_t_s.eps b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_t_s.eps new file mode 100644 index 000000000..a62652ad5 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_t_s.eps @@ -0,0 +1,221 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 271.739 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 1.84 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 5 def +/cols 2 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(moTS< M >) cw +(moAlgo< M::EOType >) cw +(eoMonOp< M::EOType >) cw +(eoOp< EOType >) cw +(eoUF< M::EOType &, bool >) cw +(eoFunctorBase) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (moTS< M >) 0.5 0 box + (moAlgo< M::EOType >) 0.5 1 box + (eoMonOp< M::EOType >) 0.5 2 box + (eoOp< EOType >) 0 3 box + (eoUF< M::EOType &, bool >) 1 3 box + (eoFunctorBase) 1 4 box + +% ----- relations ----- + +solid +0 0.5 0 out +solid +1 0.5 1 in +solid +0 0.5 1 out +solid +1 0.5 2 in +solid +0 0.5 2 out +solid +0 1 3 conn +solid +1 0 3 in +solid +1 1 3 in +solid +0 1 3 out +solid +1 1 4 in diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_t_s.tex b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_t_s.tex new file mode 100644 index 000000000..a64996f1f --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_t_s.tex @@ -0,0 +1,132 @@ +\section{moTS$<$ M $>$ Class Template Reference} +\label{classmo_t_s}\index{moTS@{moTS}} +Tabu Search (TS). + + +{\tt \#include $<$moTS.h$>$} + +Inheritance diagram for moTS$<$ M $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=5cm]{classmo_t_s} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +{\bf moTS} ({\bf moMoveInit}$<$ M $>$ \&\_\-\_\-move\_\-init, {\bf moNextMove}$<$ M $>$ \&\_\-\_\-next\_\-move, {\bf moMoveIncrEval}$<$ M $>$ \&\_\-\_\-incr\_\-eval, {\bf moTabuList}$<$ M $>$ \&\_\-\_\-tabu\_\-list, {\bf moAspirCrit}$<$ M $>$ \&\_\-\_\-aspir\_\-crit, {\bf moSolContinue}$<$ {\bf EOT} $>$ \&\_\-\_\-cont, {\bf eoEvalFunc}$<$ {\bf EOT} $>$ \&\_\-\_\-full\_\-eval) +\begin{CompactList}\small\item\em Constructor of a \doxyref{moTS}{p.}{classmo_t_s} specifying all the boxes. \item\end{CompactList}\item +{\bf moTS} ({\bf moMoveExpl}$<$ M $>$ \&\_\-\_\-move\_\-expl, {\bf moSolContinue}$<$ {\bf EOT} $>$ \&\_\-\_\-cont, {\bf eoEvalFunc}$<$ {\bf EOT} $>$ \&\_\-\_\-full\_\-eval) +\begin{CompactList}\small\item\em Constructor with less parameters. \item\end{CompactList}\item +bool {\bf operator()} ({\bf EOT} \&\_\-\_\-sol) +\begin{CompactList}\small\item\em Function which launchs the Tabu Search. \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Types} +\begin{CompactItemize} +\item +typedef M::EOType {\bf EOT}\label{classmo_t_s_90d19d468c12ab5bd796948ce1ce79b1} + +\begin{CompactList}\small\item\em Alias for the type. \item\end{CompactList}\item +typedef EOT::Fitness {\bf Fitness}\label{classmo_t_s_aa0eefbb17111422e495d1255f876fca} + +\begin{CompactList}\small\item\em Alias for the fitness. \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Attributes} +\begin{CompactItemize} +\item +{\bf moMoveExpl}$<$ M $>$ \& {\bf move\_\-expl}\label{classmo_t_s_06914ddc90ca96e9158c8dbe182a7865} + +\begin{CompactList}\small\item\em Neighborhood explorer. \item\end{CompactList}\item +{\bf moSolContinue}$<$ {\bf EOT} $>$ \& {\bf cont}\label{classmo_t_s_969371cd2202f3d29cbb426f57ac7d3a} + +\begin{CompactList}\small\item\em Stop criterion. \item\end{CompactList}\item +{\bf eoEvalFunc}$<$ {\bf EOT} $>$ \& {\bf full\_\-eval}\label{classmo_t_s_fb67eddae5d0bfca4ed881995523231e} + +\begin{CompactList}\small\item\em Full evaluation function. \item\end{CompactList}\end{CompactItemize} +\subsection*{Static Private Attributes} +\begin{CompactItemize} +\item +static bool {\bf first\_\-time} = true\label{classmo_t_s_564bc1969548ccbd9bb7e76f92898de0} + +\begin{CompactList}\small\item\em Boolean allowing to initialise the ptread\_\-mutex\_\-t in the constructor. \item\end{CompactList}\item +static pthread\_\-mutex\_\-t {\bf mutex}\label{classmo_t_s_688f9ba42eb33cae6431f4f4eb65b9e9} + +\begin{CompactList}\small\item\em The lock. \item\end{CompactList}\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class M$>$ class moTS$<$ M $>$} + +Tabu Search (TS). + +Generic algorithm that describes a tabu search. + + + +Definition at line 30 of file moTS.h. + +\subsection{Constructor \& Destructor Documentation} +\index{moTS@{moTS}!moTS@{moTS}} +\index{moTS@{moTS}!moTS@{moTS}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class M$>$ {\bf moTS}$<$ M $>$::{\bf moTS} ({\bf moMoveInit}$<$ M $>$ \& {\em \_\-\_\-move\_\-init}, {\bf moNextMove}$<$ M $>$ \& {\em \_\-\_\-next\_\-move}, {\bf moMoveIncrEval}$<$ M $>$ \& {\em \_\-\_\-incr\_\-eval}, {\bf moTabuList}$<$ M $>$ \& {\em \_\-\_\-tabu\_\-list}, {\bf moAspirCrit}$<$ M $>$ \& {\em \_\-\_\-aspir\_\-crit}, {\bf moSolContinue}$<$ {\bf EOT} $>$ \& {\em \_\-\_\-cont}, {\bf eoEvalFunc}$<$ {\bf EOT} $>$ \& {\em \_\-\_\-full\_\-eval})\hspace{0.3cm}{\tt [inline]}}\label{classmo_t_s_2be23f4524733ee6f37b71310d76407e} + + +Constructor of a \doxyref{moTS}{p.}{classmo_t_s} specifying all the boxes. + +In this constructor, a \doxyref{moTSMoveLoopExpl}{p.}{classmo_t_s_move_loop_expl} is instanciated. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-\_\-move\_\-init}]move initialisation \item[{\em \_\-\_\-next\_\-move}]neighborhood explorer \item[{\em \_\-\_\-incr\_\-eval}]efficient evaluation \item[{\em \_\-\_\-tabu\_\-list}]tabu list \item[{\em \_\-\_\-aspir\_\-crit}]aspiration criterion \item[{\em \_\-\_\-cont}]stop criterion \item[{\em \_\-\_\-full\_\-eval}]full evaluation function \end{description} +\end{Desc} + + +Definition at line 59 of file moTS.h. + +References moTS$<$ M $>$::first\_\-time, and moTS$<$ M $>$::mutex.\index{moTS@{moTS}!moTS@{moTS}} +\index{moTS@{moTS}!moTS@{moTS}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class M$>$ {\bf moTS}$<$ M $>$::{\bf moTS} ({\bf moMoveExpl}$<$ M $>$ \& {\em \_\-\_\-move\_\-expl}, {\bf moSolContinue}$<$ {\bf EOT} $>$ \& {\em \_\-\_\-cont}, {\bf eoEvalFunc}$<$ {\bf EOT} $>$ \& {\em \_\-\_\-full\_\-eval})\hspace{0.3cm}{\tt [inline]}}\label{classmo_t_s_508e675c4232cf2ca06dded931c90bab} + + +Constructor with less parameters. + +The explorer is given in the parameters. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-\_\-move\_\-expl}]the explorer (generally different that a \doxyref{moTSMoveLoopExpl}{p.}{classmo_t_s_move_loop_expl}) \item[{\em \_\-\_\-cont}]stop criterion \item[{\em \_\-\_\-full\_\-eval}]full evaluation function \end{description} +\end{Desc} + + +Definition at line 81 of file moTS.h. + +References moTS$<$ M $>$::first\_\-time, and moTS$<$ M $>$::mutex. + +\subsection{Member Function Documentation} +\index{moTS@{moTS}!operator()@{operator()}} +\index{operator()@{operator()}!moTS@{moTS}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class M$>$ bool {\bf moTS}$<$ M $>$::operator() ({\bf EOT} \& {\em \_\-\_\-sol})\hspace{0.3cm}{\tt [inline, virtual]}}\label{classmo_t_s_94d25a76fe1bc9ef0bbd0358ff55aceb} + + +Function which launchs the Tabu Search. + +Algorithm of the tabu search. As a \doxyref{moSA}{p.}{classmo_s_a} or a \doxyref{moHC}{p.}{classmo_h_c}, it can be used for HYBRIDATION in an evolutionary algorithm. For security a lock (pthread\_\-mutex\_\-t) is closed during the algorithm. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-\_\-sol}]a solution to improve. \end{description} +\end{Desc} +\begin{Desc} +\item[Returns:]TRUE. \end{Desc} + + +Implements {\bf eoUF$<$ M::EOType \&, bool $>$}. + +Definition at line 104 of file moTS.h. + +References moTS$<$ M $>$::cont, moTS$<$ M $>$::full\_\-eval, moTS$<$ M $>$::move\_\-expl, and moTS$<$ M $>$::mutex. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moTS.h\end{CompactItemize} diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_t_s_move_loop_expl.eps b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_t_s_move_loop_expl.eps new file mode 100644 index 000000000..fd31fc02a --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_t_s_move_loop_expl.eps @@ -0,0 +1,215 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 327.869 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 1.525 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 5 def +/cols 1 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(moTSMoveLoopExpl< M >) cw +(moMoveLoopExpl< M >) cw +(moMoveExpl< M >) cw +(eoBF< const M::EOType &, M::EOType &, void >) cw +(eoFunctorBase) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (moTSMoveLoopExpl< M >) 0 0 box + (moMoveLoopExpl< M >) 0 1 box + (moMoveExpl< M >) 0 2 box + (eoBF< const M::EOType &, M::EOType &, void >) 0 3 box + (eoFunctorBase) 0 4 box + +% ----- relations ----- + +solid +0 0 0 out +solid +1 0 1 in +solid +0 0 1 out +solid +1 0 2 in +solid +0 0 2 out +solid +1 0 3 in +solid +0 0 3 out +solid +1 0 4 in diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_t_s_move_loop_expl.tex b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_t_s_move_loop_expl.tex new file mode 100644 index 000000000..2a5d367c6 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_t_s_move_loop_expl.tex @@ -0,0 +1,108 @@ +\section{moTSMoveLoopExpl$<$ M $>$ Class Template Reference} +\label{classmo_t_s_move_loop_expl}\index{moTSMoveLoopExpl@{moTSMoveLoopExpl}} +Explorer for a Tabu Search algorithm. + + +{\tt \#include $<$moTSMoveLoopExpl.h$>$} + +Inheritance diagram for moTSMoveLoopExpl$<$ M $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=5cm]{classmo_t_s_move_loop_expl} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +{\bf moTSMoveLoopExpl} ({\bf moMoveInit}$<$ M $>$ \&\_\-\_\-move\_\-init, {\bf moNextMove}$<$ M $>$ \&\_\-\_\-next\_\-move, {\bf moMoveIncrEval}$<$ M $>$ \&\_\-\_\-incr\_\-eval, {\bf moTabuList}$<$ M $>$ \&\_\-\_\-tabu\_\-list, {\bf moAspirCrit}$<$ M $>$ \&\_\-\_\-aspir\_\-crit) +\begin{CompactList}\small\item\em Constructor. \item\end{CompactList}\item +void {\bf operator()} (const {\bf EOT} \&\_\-\_\-old\_\-sol, {\bf EOT} \&\_\-\_\-new\_\-sol) +\begin{CompactList}\small\item\em Procedure which lauches the exploration. \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Types} +\begin{CompactItemize} +\item +typedef M::EOType {\bf EOT}\label{classmo_t_s_move_loop_expl_47f42225e2ed096374b818bdb848a527} + +\begin{CompactList}\small\item\em Alias for the type. \item\end{CompactList}\item +typedef M::EOType::Fitness {\bf Fitness}\label{classmo_t_s_move_loop_expl_a1ba36c937b195ca2f7d1a24adaa7018} + +\begin{CompactList}\small\item\em Alias for the fitness. \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Attributes} +\begin{CompactItemize} +\item +{\bf moMoveInit}$<$ M $>$ \& {\bf move\_\-init}\label{classmo_t_s_move_loop_expl_6b23f99648902fb72ed17a4a6fa4e400} + +\begin{CompactList}\small\item\em Move initialisation. \item\end{CompactList}\item +{\bf moNextMove}$<$ M $>$ \& {\bf next\_\-move}\label{classmo_t_s_move_loop_expl_aeeff6666d26ff5c67acd9c153a5ae49} + +\begin{CompactList}\small\item\em Neighborhood explorer. \item\end{CompactList}\item +{\bf moMoveIncrEval}$<$ M $>$ \& {\bf incr\_\-eval}\label{classmo_t_s_move_loop_expl_ee4443fc8e45d840697619678628c26c} + +\begin{CompactList}\small\item\em Efficient evaluation. \item\end{CompactList}\item +{\bf moBestImprSelect}$<$ M $>$ {\bf move\_\-select}\label{classmo_t_s_move_loop_expl_35a3f3035fb8df875c281d9838904bf1} + +\begin{CompactList}\small\item\em Move selector. \item\end{CompactList}\item +{\bf moTabuList}$<$ M $>$ \& {\bf tabu\_\-list}\label{classmo_t_s_move_loop_expl_0e5988a940ba218e87c53b7e56d79790} + +\begin{CompactList}\small\item\em Tabu list. \item\end{CompactList}\item +{\bf moAspirCrit}$<$ M $>$ \& {\bf aspir\_\-crit}\label{classmo_t_s_move_loop_expl_6786cf5422d17cbf872b07ae74ca6b0f} + +\begin{CompactList}\small\item\em Aspiration criterion. \item\end{CompactList}\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class M$>$ class moTSMoveLoopExpl$<$ M $>$} + +Explorer for a Tabu Search algorithm. + +It is used by a \doxyref{moTS}{p.}{classmo_t_s}. + + + +Definition at line 30 of file moTSMoveLoopExpl.h. + +\subsection{Constructor \& Destructor Documentation} +\index{moTSMoveLoopExpl@{moTSMoveLoopExpl}!moTSMoveLoopExpl@{moTSMoveLoopExpl}} +\index{moTSMoveLoopExpl@{moTSMoveLoopExpl}!moTSMoveLoopExpl@{moTSMoveLoopExpl}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class M$>$ {\bf moTSMoveLoopExpl}$<$ M $>$::{\bf moTSMoveLoopExpl} ({\bf moMoveInit}$<$ M $>$ \& {\em \_\-\_\-move\_\-init}, {\bf moNextMove}$<$ M $>$ \& {\em \_\-\_\-next\_\-move}, {\bf moMoveIncrEval}$<$ M $>$ \& {\em \_\-\_\-incr\_\-eval}, {\bf moTabuList}$<$ M $>$ \& {\em \_\-\_\-tabu\_\-list}, {\bf moAspirCrit}$<$ M $>$ \& {\em \_\-\_\-aspir\_\-crit})\hspace{0.3cm}{\tt [inline]}}\label{classmo_t_s_move_loop_expl_43306dae9df150a8d9dc0dec9cd6a381} + + +Constructor. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-\_\-move\_\-init}]move initialisation \item[{\em \_\-\_\-next\_\-move}]neighborhood explorer \item[{\em \_\-\_\-incr\_\-eval}]efficient evaluation \item[{\em \_\-\_\-tabu\_\-list}]tabu list \item[{\em \_\-\_\-aspir\_\-crit}]aspiration criterion \end{description} +\end{Desc} + + +Definition at line 49 of file moTSMoveLoopExpl.h. + +References moTSMoveLoopExpl$<$ M $>$::aspir\_\-crit, and moTSMoveLoopExpl$<$ M $>$::tabu\_\-list. + +\subsection{Member Function Documentation} +\index{moTSMoveLoopExpl@{moTSMoveLoopExpl}!operator()@{operator()}} +\index{operator()@{operator()}!moTSMoveLoopExpl@{moTSMoveLoopExpl}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class M$>$ void {\bf moTSMoveLoopExpl}$<$ M $>$::operator() (const {\bf EOT} \& {\em \_\-\_\-old\_\-sol}, {\bf EOT} \& {\em \_\-\_\-new\_\-sol})\hspace{0.3cm}{\tt [inline, virtual]}}\label{classmo_t_s_move_loop_expl_f601bbd0ccc41d6fbe3df9fcd87ad9e7} + + +Procedure which lauches the exploration. + +The exploration continues while the chosen move is not in the tabu list or the aspiration criterion is true. If these 2 conditions are not true, the exploration stops if the move selector update function returns false. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-\_\-old\_\-sol}]the initial solution \item[{\em \_\-\_\-new\_\-sol}]the new solution \end{description} +\end{Desc} + + +Implements {\bf eoBF$<$ const M::EOType \&, M::EOType \&, void $>$}. + +Definition at line 69 of file moTSMoveLoopExpl.h. + +References moTSMoveLoopExpl$<$ M $>$::aspir\_\-crit, moTSMoveLoopExpl$<$ M $>$::incr\_\-eval, moTSMoveLoopExpl$<$ M $>$::move\_\-init, moTSMoveLoopExpl$<$ M $>$::move\_\-select, moTSMoveLoopExpl$<$ M $>$::next\_\-move, and moTSMoveLoopExpl$<$ M $>$::tabu\_\-list. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moTSMoveLoopExpl.h\end{CompactItemize} diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_tabu_list.eps b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_tabu_list.eps new file mode 100644 index 000000000..2aee2f1b6 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_tabu_list.eps @@ -0,0 +1,215 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 138.889 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 3.6 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 4 def +/cols 2 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(moTabuList< M >) cw +(eoBF< const M &, const M::EOType &, bool >) cw +(eoFunctorBase) cw +(moSimpleMoveTabuList< M >) cw +(moSimpleSolutionTabuList< M >) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (moTabuList< M >) 0.5 1 box + (eoBF< const M &, const M::EOType &, bool >) 0.5 2 box + (eoFunctorBase) 0.5 3 box + (moSimpleMoveTabuList< M >) 0 0 box + (moSimpleSolutionTabuList< M >) 1 0 box + +% ----- relations ----- + +solid +0 0.5 1 out +solid +1 0.5 2 in +solid +0 0.5 2 out +solid +1 0.5 3 in +solid +1 0.5 0.25 out +solid +0 1 1 conn +solid +0 0 0.75 in +solid +0 1 0.75 in diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_tabu_list.tex b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_tabu_list.tex new file mode 100644 index 000000000..1ed7c1b47 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/classmo_tabu_list.tex @@ -0,0 +1,81 @@ +\section{moTabuList$<$ M $>$ Class Template Reference} +\label{classmo_tabu_list}\index{moTabuList@{moTabuList}} +Class describing a tabu list that a \doxyref{moTS}{p.}{classmo_t_s} uses. + + +{\tt \#include $<$moTabuList.h$>$} + +Inheritance diagram for moTabuList$<$ M $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=3.88889cm]{classmo_tabu_list} +\end{center} +\end{figure} +\subsection*{Public Types} +\begin{CompactItemize} +\item +typedef M::EOType {\bf EOT}\label{classmo_tabu_list_e219715cc3fdd5626764bc50ce6357df} + +\begin{CompactList}\small\item\em Alias for the type. \item\end{CompactList}\end{CompactItemize} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +virtual void {\bf add} (const M \&\_\-\_\-move, const {\bf EOT} \&\_\-\_\-sol)=0 +\begin{CompactList}\small\item\em Procedure to add a move in the tabu list. \item\end{CompactList}\item +virtual void {\bf update} ()=0 +\begin{CompactList}\small\item\em Procedure that updates the tabu list content. \item\end{CompactList}\item +virtual void {\bf init} ()=0 +\begin{CompactList}\small\item\em Procedure which initialises the tabu list. \item\end{CompactList}\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class M$>$ class moTabuList$<$ M $>$} + +Class describing a tabu list that a \doxyref{moTS}{p.}{classmo_t_s} uses. + +It is only a description, does nothing... A new object that herits from this class has to be defined in order to be used in a \doxyref{moTS}{p.}{classmo_t_s}. + + + +Definition at line 22 of file moTabuList.h. + +\subsection{Member Function Documentation} +\index{moTabuList@{moTabuList}!add@{add}} +\index{add@{add}!moTabuList@{moTabuList}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class M$>$ virtual void {\bf moTabuList}$<$ M $>$::add (const M \& {\em \_\-\_\-move}, const {\bf EOT} \& {\em \_\-\_\-sol})\hspace{0.3cm}{\tt [pure virtual]}}\label{classmo_tabu_list_d279d72cb486d812da1ad3d24a69c286} + + +Procedure to add a move in the tabu list. + +The two parameters have not to be modified so they are constant parameters. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-\_\-move}]a new tabu move. \item[{\em \_\-\_\-sol}]the origianl solution associated to this move. \end{description} +\end{Desc} + + +Implemented in {\bf moSimpleMoveTabuList$<$ M $>$} \doxyref{}{p.}{classmo_simple_move_tabu_list_43c979a9ec876c5e5b591b1c422395ef}, and {\bf moSimpleSolutionTabuList$<$ M $>$} \doxyref{}{p.}{classmo_simple_solution_tabu_list_fd6b3a1764121169650c969bba895615}.\index{moTabuList@{moTabuList}!update@{update}} +\index{update@{update}!moTabuList@{moTabuList}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class M$>$ virtual void {\bf moTabuList}$<$ M $>$::update ()\hspace{0.3cm}{\tt [pure virtual]}}\label{classmo_tabu_list_a2e5d1132f064093c8ed57046405f5ca} + + +Procedure that updates the tabu list content. + +Generally, a counter associated to each saved move is decreased by one. + +Implemented in {\bf moSimpleMoveTabuList$<$ M $>$} \doxyref{}{p.}{classmo_simple_move_tabu_list_96cffc8118456ed762b07b9fc0e0679f}, and {\bf moSimpleSolutionTabuList$<$ M $>$} \doxyref{}{p.}{classmo_simple_solution_tabu_list_91b8b01dba7ffea8b63765d931e56f56}.\index{moTabuList@{moTabuList}!init@{init}} +\index{init@{init}!moTabuList@{moTabuList}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class M$>$ virtual void {\bf moTabuList}$<$ M $>$::init ()\hspace{0.3cm}{\tt [pure virtual]}}\label{classmo_tabu_list_0a06c459d56e8e2b408a8f3c6aec4e57} + + +Procedure which initialises the tabu list. + +Can be useful if the data structure needs to be allocated before being used. + +Implemented in {\bf moSimpleMoveTabuList$<$ M $>$} \doxyref{}{p.}{classmo_simple_move_tabu_list_b91ae9971be30769757d1ad92c6009dc}, and {\bf moSimpleSolutionTabuList$<$ M $>$} \doxyref{}{p.}{classmo_simple_solution_tabu_list_d5645c39fec71a6110a2cbccbb08b816}. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moTabuList.h\end{CompactItemize} diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/doxygen.sty b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/doxygen.sty new file mode 100644 index 000000000..82c94a14d --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/doxygen.sty @@ -0,0 +1,78 @@ +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{doxygen} +\RequirePackage{calc} +\RequirePackage{array} +\pagestyle{fancyplain} +\newcommand{\clearemptydoublepage}{\newpage{\pagestyle{empty}\cleardoublepage}} +\renewcommand{\chaptermark}[1]{\markboth{#1}{}} +\renewcommand{\sectionmark}[1]{\markright{\thesection\ #1}} +\lhead[\fancyplain{}{\bfseries\thepage}] + {\fancyplain{}{\bfseries\rightmark}} +\rhead[\fancyplain{}{\bfseries\leftmark}] + {\fancyplain{}{\bfseries\thepage}} +\rfoot[\fancyplain{}{\bfseries\scriptsize Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by Doxygen }]{} +\lfoot[]{\fancyplain{}{\bfseries\scriptsize Generated on Tue Jun 26 13:18:40 2007 for PARADISEO-MO by Doxygen }} +\cfoot{} +\newenvironment{Code} +{\footnotesize} +{\normalsize} +\newcommand{\doxyref}[3]{\textbf{#1} (\textnormal{#2}\,\pageref{#3})} +\newenvironment{DocInclude} +{\footnotesize} +{\normalsize} +\newenvironment{VerbInclude} +{\footnotesize} +{\normalsize} +\newenvironment{Image} +{\begin{figure}[H]} +{\end{figure}} +\newenvironment{ImageNoCaption}{}{} +\newenvironment{CompactList} +{\begin{list}{}{ + \setlength{\leftmargin}{0.5cm} + \setlength{\itemsep}{0pt} + \setlength{\parsep}{0pt} + \setlength{\topsep}{0pt} + \renewcommand{\makelabel}{\hfill}}} +{\end{list}} +\newenvironment{CompactItemize} +{ + \begin{itemize} + \setlength{\itemsep}{-3pt} + \setlength{\parsep}{0pt} + \setlength{\topsep}{0pt} + \setlength{\partopsep}{0pt} +} +{\end{itemize}} +\newcommand{\PBS}[1]{\let\temp=\\#1\let\\=\temp} +\newlength{\tmplength} +\newenvironment{TabularC}[1] +{ +\setlength{\tmplength} + {\linewidth/(#1)-\tabcolsep*2-\arrayrulewidth*(#1+1)/(#1)} + \par\begin{tabular*}{\linewidth} + {*{#1}{|>{\PBS\raggedright\hspace{0pt}}p{\the\tmplength}}|} +} +{\end{tabular*}\par} +\newcommand{\entrylabel}[1]{ + {\parbox[b]{\labelwidth-4pt}{\makebox[0pt][l]{\textbf{#1}}\vspace{1.5\baselineskip}}}} +\newenvironment{Desc} +{\begin{list}{} + { + \settowidth{\labelwidth}{40pt} + \setlength{\leftmargin}{\labelwidth} + \setlength{\parsep}{0pt} + \setlength{\itemsep}{-4pt} + \renewcommand{\makelabel}{\entrylabel} + } +} +{\end{list}} +\newenvironment{Indent} + {\begin{list}{}{\setlength{\leftmargin}{0.5cm}} + \item[]\ignorespaces} + {\unskip\end{list}} +\setlength{\parindent}{0cm} +\setlength{\parskip}{0.2cm} +\addtocounter{secnumdepth}{1} +\sloppy +\usepackage[T1]{fontenc} diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/hierarchy.tex b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/hierarchy.tex new file mode 100644 index 000000000..66deba8dc --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/hierarchy.tex @@ -0,0 +1,89 @@ +\section{PARADISEO-MO Class Hierarchy} +This inheritance list is sorted roughly, but not completely, alphabetically:\begin{CompactList} +\item \contentsline{section}{EmptySelection}{\pageref{class_empty_selection}}{} +\item eoFunctorBase{\tt [external]}\begin{CompactList} +\item eoBF$<$ const M \&, const M::EOType \&, bool $>${\tt [external]}\begin{CompactList} +\item \contentsline{section}{moTabuList$<$ M $>$}{\pageref{classmo_tabu_list}}{} +\begin{CompactList} +\item \contentsline{section}{moSimpleMoveTabuList$<$ M $>$}{\pageref{classmo_simple_move_tabu_list}}{} +\item \contentsline{section}{moSimpleSolutionTabuList$<$ M $>$}{\pageref{classmo_simple_solution_tabu_list}}{} +\end{CompactList} +\end{CompactList} +\item eoBF$<$ const M \&, const M::EOType \&, M::EOType::Fitness $>${\tt [external]}\begin{CompactList} +\item \contentsline{section}{moMoveIncrEval$<$ M $>$}{\pageref{classmo_move_incr_eval}}{} +\end{CompactList} +\item eoBF$<$ const M \&, const M::EOType \&, void $>${\tt [external]}\begin{CompactList} +\item \contentsline{section}{moLSCheckPoint$<$ M $>$}{\pageref{classmo_l_s_check_point}}{} +\end{CompactList} +\item eoBF$<$ const M \&, const M::EOType::Fitness \&, bool $>${\tt [external]}\begin{CompactList} +\item \contentsline{section}{moAspirCrit$<$ M $>$}{\pageref{classmo_aspir_crit}}{} +\begin{CompactList} +\item \contentsline{section}{moImprBestFitAspirCrit$<$ M $>$}{\pageref{classmo_impr_best_fit_aspir_crit}}{} +\item \contentsline{section}{moNoAspirCrit$<$ M $>$}{\pageref{classmo_no_aspir_crit}}{} +\end{CompactList} +\end{CompactList} +\item eoBF$<$ const M::EOType \&, M::EOType \&, void $>${\tt [external]}\begin{CompactList} +\item \contentsline{section}{moMoveExpl$<$ M $>$}{\pageref{classmo_move_expl}}{} +\begin{CompactList} +\item \contentsline{section}{moMoveLoopExpl$<$ M $>$}{\pageref{classmo_move_loop_expl}}{} +\begin{CompactList} +\item \contentsline{section}{moHCMoveLoopExpl$<$ M $>$}{\pageref{classmo_h_c_move_loop_expl}}{} +\item \contentsline{section}{moTSMoveLoopExpl$<$ M $>$}{\pageref{classmo_t_s_move_loop_expl}}{} +\end{CompactList} +\end{CompactList} +\end{CompactList} +\item eoBF$<$ M \&, const M::EOType \&, bool $>${\tt [external]}\begin{CompactList} +\item \contentsline{section}{moNextMove$<$ M $>$}{\pageref{classmo_next_move}}{} +\begin{CompactList} +\item \contentsline{section}{moItRandNextMove$<$ M $>$}{\pageref{classmo_it_rand_next_move}}{} +\end{CompactList} +\end{CompactList} +\item eoBF$<$ M \&, const M::EOType \&, void $>${\tt [external]}\begin{CompactList} +\item \contentsline{section}{moMoveInit$<$ M $>$}{\pageref{classmo_move_init}}{} +\end{CompactList} +\item eoBF$<$ M \&, M::EOType::Fitness \&, void $>${\tt [external]}\begin{CompactList} +\item \contentsline{section}{moMoveSelect$<$ M $>$}{\pageref{classmo_move_select}}{} +\begin{CompactList} +\item \contentsline{section}{moBestImprSelect$<$ M $>$}{\pageref{classmo_best_impr_select}}{} +\item \contentsline{section}{moFirstImprSelect$<$ M $>$}{\pageref{classmo_first_impr_select}}{} +\item \contentsline{section}{moRandImprSelect$<$ M $>$}{\pageref{classmo_rand_impr_select}}{} +\end{CompactList} +\end{CompactList} +\item eoUF$<$ const EOT \&, bool $>${\tt [external]}\begin{CompactList} +\item \contentsline{section}{moSolContinue$<$ EOT $>$}{\pageref{classmo_sol_continue}}{} +\begin{CompactList} +\item \contentsline{section}{moGenSolContinue$<$ EOT $>$}{\pageref{classmo_gen_sol_continue}}{} +\end{CompactList} +\end{CompactList} +\item eoUF$<$ double \&, bool $>${\tt [external]}\begin{CompactList} +\item \contentsline{section}{moCoolingSchedule}{\pageref{classmo_cooling_schedule}}{} +\begin{CompactList} +\item \contentsline{section}{moExponentialCoolingSchedule}{\pageref{classmo_exponential_cooling_schedule}}{} +\item \contentsline{section}{moLinearCoolingSchedule}{\pageref{classmo_linear_cooling_schedule}}{} +\end{CompactList} +\end{CompactList} +\item eoUF$<$ EOT \&, bool $>${\tt [external]}\begin{CompactList} +\item eoMonOp$<$ EOT $>${\tt [external]}\begin{CompactList} +\item \contentsline{section}{moAlgo$<$ EOT $>$}{\pageref{classmo_algo}}{} +\end{CompactList} +\end{CompactList} +\item eoUF$<$ EOT \&, void $>${\tt [external]}\begin{CompactList} +\item \contentsline{section}{moMove$<$ EOT $>$}{\pageref{classmo_move}}{} +\end{CompactList} +\item eoUF$<$ EOType \&, bool $>${\tt [external]}\item eoUF$<$ M \&, void $>${\tt [external]}\begin{CompactList} +\item \contentsline{section}{moRandMove$<$ M $>$}{\pageref{classmo_rand_move}}{} +\end{CompactList} +\item eoUF$<$ M::EOType \&, bool $>${\tt [external]}\begin{CompactList} +\item eoMonOp$<$ M::EOType $>${\tt [external]}\begin{CompactList} +\item \contentsline{section}{moAlgo$<$ M::EOType $>$}{\pageref{classmo_algo}}{} +\begin{CompactList} +\item \contentsline{section}{moHC$<$ M $>$}{\pageref{classmo_h_c}}{} +\item \contentsline{section}{moSA$<$ M $>$}{\pageref{classmo_s_a}}{} +\item \contentsline{section}{moTS$<$ M $>$}{\pageref{classmo_t_s}}{} +\end{CompactList} +\end{CompactList} +\end{CompactList} +\end{CompactList} +\item eoOp$<$ EOType $>${\tt [external]}\begin{CompactList} +\item eoMonOp$<$ EOT $>${\tt [external]}\item eoMonOp$<$ M::EOType $>${\tt [external]}\end{CompactList} +\end{CompactList} diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/main.tex b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/main.tex new file mode 100644 index 000000000..8dba03e9c --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/main.tex @@ -0,0 +1,5 @@ +\section{intro}\label{main_intro} +MO is an extension of the ANSI-C++ compliant evolutionary computation library {\bf EO}. \par + It contains classes for almost any kind of one solution based heuristics.\section{tutorial}\label{main_tutorial} +\section{install}\label{main_install} +The installation procedure of the package is detailed in the {\tt README} file in the top-directory of the source-tree.\section{design}\label{main_design} diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/refman.tex b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/refman.tex new file mode 100644 index 000000000..600eebd40 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/latex/refman.tex @@ -0,0 +1,70 @@ +\documentclass[a4paper]{book} +\usepackage{a4wide} +\usepackage{makeidx} +\usepackage{fancyhdr} +\usepackage{graphicx} +\usepackage{multicol} +\usepackage{float} +\usepackage{textcomp} +\usepackage{alltt} +\usepackage[utf8]{inputenc} +\usepackage{doxygen} +\makeindex +\setcounter{tocdepth}{1} +\renewcommand{\footrulewidth}{0.4pt} +\begin{document} +\begin{titlepage} +\vspace*{7cm} +\begin{center} +{\Large PARADISEO-MO Reference Manual\\[1ex]\large 0.1 }\\ +\vspace*{1cm} +{\large Generated by Doxygen 1.5.2}\\ +\vspace*{0.5cm} +{\small Tue Jun 26 13:18:40 2007}\\ +\end{center} +\end{titlepage} +\clearemptydoublepage +\pagenumbering{roman} +\tableofcontents +\clearemptydoublepage +\pagenumbering{arabic} +\chapter{Welcome to PARADISEO-Moving Objects } +\label{index}\input{main} +\chapter{PARADISEO-MO Hierarchical Index} +\input{hierarchy} +\chapter{PARADISEO-MO Class Index} +\input{annotated} +\chapter{PARADISEO-MO Class Documentation} +\input{class_empty_selection} +\include{classmo_algo} +\include{classmo_aspir_crit} +\include{classmo_best_impr_select} +\include{classmo_cooling_schedule} +\include{classmo_exponential_cooling_schedule} +\include{classmo_first_impr_select} +\include{classmo_gen_sol_continue} +\include{classmo_h_c} +\include{classmo_h_c_move_loop_expl} +\include{classmo_impr_best_fit_aspir_crit} +\include{classmo_it_rand_next_move} +\include{classmo_linear_cooling_schedule} +\include{classmo_l_s_check_point} +\include{classmo_move} +\include{classmo_move_expl} +\include{classmo_move_incr_eval} +\include{classmo_move_init} +\include{classmo_move_loop_expl} +\include{classmo_move_select} +\include{classmo_next_move} +\include{classmo_no_aspir_crit} +\include{classmo_rand_impr_select} +\include{classmo_rand_move} +\include{classmo_s_a} +\include{classmo_simple_move_tabu_list} +\include{classmo_simple_solution_tabu_list} +\include{classmo_sol_continue} +\include{classmo_tabu_list} +\include{classmo_t_s} +\include{classmo_t_s_move_loop_expl} +\printindex +\end{document} diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/EmptySelection.3 b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/EmptySelection.3 new file mode 100644 index 000000000..133fa1118 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/EmptySelection.3 @@ -0,0 +1,23 @@ +.TH "EmptySelection" 3 "26 Jun 2007" "Version 0.1" "PARADISEO-MO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +EmptySelection \- Special class that describes the case of no selection. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +.SH "Detailed Description" +.PP +Special class that describes the case of no selection. + +This class is used as an exception that can be thrown if a solution selector has completly failed. +.PP +Definition at line 21 of file moMoveSelect.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for PARADISEO-MO from the source code. diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moAlgo.3 b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moAlgo.3 new file mode 100644 index 000000000..8681b67ef --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moAlgo.3 @@ -0,0 +1,27 @@ +.TH "moAlgo" 3 "26 Jun 2007" "Version 0.1" "PARADISEO-MO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moAlgo \- Description of an algorithm of the paradiseo-mo library. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBeoMonOp< EOT >\fP. +.PP +.SH "Detailed Description" +.PP + +.SS "template class moAlgo< EOT >" +Description of an algorithm of the paradiseo-mo library. + +\fBmoHC\fP, \fBmoTS\fP and \fBmoSA\fP are 3 examples of algorithm of the paradiseo-mo library. +.PP +Definition at line 21 of file moAlgo.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for PARADISEO-MO from the source code. diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moAspirCrit.3 b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moAspirCrit.3 new file mode 100644 index 000000000..e15aac6bd --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moAspirCrit.3 @@ -0,0 +1,46 @@ +.TH "moAspirCrit" 3 "26 Jun 2007" "Version 0.1" "PARADISEO-MO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moAspirCrit \- Description of the conditions in which a tabu move could be accepted. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBeoBF< const M &, const M::EOType::Fitness &, bool >\fP. +.PP +Inherited by \fBmoImprBestFitAspirCrit< M >\fP, and \fBmoNoAspirCrit< M >\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "virtual void \fBinit\fP ()=0" +.br +.RI "\fIProcedure which initialises all that needs a aspiration criterion. \fP" +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class moAspirCrit< M >" +Description of the conditions in which a tabu move could be accepted. + +It is only a description... An object that herits from this class is needed to be used in a \fBmoTS\fP. See moNoAspriCrit for example. +.PP +Definition at line 22 of file moAspirCrit.h. +.SH "Member Function Documentation" +.PP +.SS "template virtual void \fBmoAspirCrit\fP< M >::init ()\fC [pure virtual]\fP" +.PP +Procedure which initialises all that needs a aspiration criterion. +.PP +It can be possible that this procedure do nothing... +.PP +Implemented in \fBmoImprBestFitAspirCrit< M >\fP, and \fBmoNoAspirCrit< M >\fP. + +.SH "Author" +.PP +Generated automatically by Doxygen for PARADISEO-MO from the source code. diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moBestImprSelect.3 b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moBestImprSelect.3 new file mode 100644 index 000000000..8b7b8da11 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moBestImprSelect.3 @@ -0,0 +1,117 @@ +.TH "moBestImprSelect" 3 "26 Jun 2007" "Version 0.1" "PARADISEO-MO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moBestImprSelect \- One of the possible \fBmoMoveSelect\fP. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBmoMoveSelect< M >< M >\fP. +.PP +.SS "Public Types" + +.in +1c +.ti -1c +.RI "typedef M::EOType::Fitness \fBFitness\fP" +.br +.RI "\fIAlias for the fitness. \fP" +.in -1c +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "void \fBinit\fP (const \fBFitness\fP &__fit)" +.br +.RI "\fIProcedure which initialise the exploration. \fP" +.ti -1c +.RI "bool \fBupdate\fP (const M &__move, const \fBFitness\fP &__fit)" +.br +.RI "\fIFunction that indicates if the current move has not improved the fitness. \fP" +.ti -1c +.RI "void \fBoperator()\fP (M &__move, \fBFitness\fP &__fit) throw (EmptySelection)" +.br +.RI "\fIProcedure which saved the best move and fitness. \fP" +.in -1c +.SS "Private Attributes" + +.in +1c +.ti -1c +.RI "bool \fBfirst_time\fP" +.br +.RI "\fIAllowing to know if at least one move has been generated. \fP" +.ti -1c +.RI "M \fBbest_move\fP" +.br +.RI "\fIThe best move. \fP" +.ti -1c +.RI "\fBFitness\fP \fBbest_fit\fP" +.br +.RI "\fIThe best fitness. \fP" +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class moBestImprSelect< M >" +One of the possible \fBmoMoveSelect\fP. + +All neighbors are considered, and the movement which enables the best improvement is selected. +.PP +Definition at line 22 of file moBestImprSelect.h. +.SH "Member Function Documentation" +.PP +.SS "template bool \fBmoBestImprSelect\fP< M >::update (const M & __move, const \fBFitness\fP & __fit)\fC [inline, virtual]\fP" +.PP +Function that indicates if the current move has not improved the fitness. +.PP +If the given fitness enables an improvment, the move (\fBmoMove\fP) and the fitness linked to this move are saved. +.PP +\fBParameters:\fP +.RS 4 +\fI__move\fP a move. +.br +\fI__fit\fP a fitness linked to the move. +.RE +.PP +\fBReturns:\fP +.RS 4 +TRUE if the move does not improve the fitness. +.RE +.PP + +.PP +Implements \fBmoMoveSelect< M >\fP. +.PP +Definition at line 47 of file moBestImprSelect.h. +.PP +References moBestImprSelect< M >::best_fit, moBestImprSelect< M >::best_move, and moBestImprSelect< M >::first_time. +.SS "template void \fBmoBestImprSelect\fP< M >::operator() (M & __move, \fBFitness\fP & __fit) throw (\fBEmptySelection\fP)\fC [inline, virtual]\fP" +.PP +Procedure which saved the best move and fitness. +.PP +\fBParameters:\fP +.RS 4 +\fI__move\fP the current move (result of the procedure). +.br +\fI__fit\fP the current fitness (result of the procedure). +.RE +.PP +\fBExceptions:\fP +.RS 4 +\fI\fBEmptySelection\fP\fP if no move has improved the fitness. +.RE +.PP + +.PP +Implements \fBeoBF< M &, M::EOType::Fitness &, void >\fP. +.PP +Definition at line 68 of file moBestImprSelect.h. +.PP +References moBestImprSelect< M >::best_fit, moBestImprSelect< M >::best_move, and moBestImprSelect< M >::first_time. + +.SH "Author" +.PP +Generated automatically by Doxygen for PARADISEO-MO from the source code. diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moCoolingSchedule.3 b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moCoolingSchedule.3 new file mode 100644 index 000000000..bc4f864e2 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moCoolingSchedule.3 @@ -0,0 +1,27 @@ +.TH "moCoolingSchedule" 3 "26 Jun 2007" "Version 0.1" "PARADISEO-MO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moCoolingSchedule \- This class gives the description of a cooling schedule. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBeoUF< double &, bool >\fP. +.PP +Inherited by \fBmoExponentialCoolingSchedule\fP, and \fBmoLinearCoolingSchedule\fP. +.PP +.SH "Detailed Description" +.PP +This class gives the description of a cooling schedule. + +It is only a description... An object that herits from this class is needed to be used in a \fBmoSA\fP. See \fBmoExponentialCoolingSchedule\fP or \fBmoLinearCoolingSchedule\fP for example. +.PP +Definition at line 22 of file moCoolingSchedule.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for PARADISEO-MO from the source code. diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moExponentialCoolingSchedule.3 b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moExponentialCoolingSchedule.3 new file mode 100644 index 000000000..40a4477ca --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moExponentialCoolingSchedule.3 @@ -0,0 +1,90 @@ +.TH "moExponentialCoolingSchedule" 3 "26 Jun 2007" "Version 0.1" "PARADISEO-MO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moExponentialCoolingSchedule \- One of the possible \fBmoCoolingSchedule\fP. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBmoCoolingSchedule\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBmoExponentialCoolingSchedule\fP (double __threshold, double __ratio)" +.br +.RI "\fISimple constructor. \fP" +.ti -1c +.RI "bool \fBoperator()\fP (double &__temp)" +.br +.RI "\fIFunction which proceeds to the cooling. \fP" +.in -1c +.SS "Private Attributes" + +.in +1c +.ti -1c +.RI "double \fBthreshold\fP" +.br +.RI "\fIThe temperature threhold. \fP" +.ti -1c +.RI "double \fBratio\fP" +.br +.RI "\fIThe decreasing factor of the temperature. \fP" +.in -1c +.SH "Detailed Description" +.PP +One of the possible \fBmoCoolingSchedule\fP. + +An other very simple cooling schedule, the temperature decrease according to a ratio while the temperature is greater than a given threshold. +.PP +Definition at line 22 of file moExponentialCoolingSchedule.h. +.SH "Constructor & Destructor Documentation" +.PP +.SS "moExponentialCoolingSchedule::moExponentialCoolingSchedule (double __threshold, double __ratio)\fC [inline]\fP" +.PP +Simple constructor. +.PP +\fBParameters:\fP +.RS 4 +\fI__threshold\fP the threshold. +.br +\fI__ratio\fP the ratio used to descrease the temperature. +.RE +.PP + +.PP +Definition at line 31 of file moExponentialCoolingSchedule.h. +.SH "Member Function Documentation" +.PP +.SS "bool moExponentialCoolingSchedule::operator() (double & __temp)\fC [inline, virtual]\fP" +.PP +Function which proceeds to the cooling. +.PP +It decreases the temperature and indicates if it is greater than the threshold. +.PP +\fBParameters:\fP +.RS 4 +\fI__temp\fP the current temperature. +.RE +.PP +\fBReturns:\fP +.RS 4 +if the new temperature (current temperature * ratio) is greater than the threshold. +.RE +.PP + +.PP +Implements \fBeoUF< double &, bool >\fP. +.PP +Definition at line 41 of file moExponentialCoolingSchedule.h. +.PP +References ratio, and threshold. + +.SH "Author" +.PP +Generated automatically by Doxygen for PARADISEO-MO from the source code. diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moFirstImprSelect.3 b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moFirstImprSelect.3 new file mode 100644 index 000000000..470b746ee --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moFirstImprSelect.3 @@ -0,0 +1,130 @@ +.TH "moFirstImprSelect" 3 "26 Jun 2007" "Version 0.1" "PARADISEO-MO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moFirstImprSelect \- One possible \fBmoMoveSelect\fP. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBmoMoveSelect< M >< M >\fP. +.PP +.SS "Public Types" + +.in +1c +.ti -1c +.RI "typedef M::EOType::Fitness \fBFitness\fP" +.br +.RI "\fIAlias for the fitness. \fP" +.in -1c +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "virtual void \fBinit\fP (const \fBFitness\fP &__fit)" +.br +.RI "\fIProcedure which initialise the exploration. \fP" +.ti -1c +.RI "bool \fBupdate\fP (const M &__move, const typename M::EOType::Fitness &__fit)" +.br +.RI "\fIFunction that indicates if the current move has not improved the fitness. \fP" +.ti -1c +.RI "void \fBoperator()\fP (M &__move, \fBFitness\fP &__fit) throw (EmptySelection)" +.br +.RI "\fIProcedure which saved the best move and fitness. \fP" +.in -1c +.SS "Private Attributes" + +.in +1c +.ti -1c +.RI "bool \fBvalid\fP" +.br +.RI "\fIAllow to know if at least one move has improved the solution. \fP" +.ti -1c +.RI "M \fBbest_move\fP" +.br +.RI "\fIBest stored movement. \fP" +.ti -1c +.RI "\fBFitness\fP \fBinit_fit\fP" +.br +.RI "\fIInitial fitness. \fP" +.ti -1c +.RI "\fBFitness\fP \fBbest_fit\fP" +.br +.RI "\fIBest stored fitness. \fP" +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class moFirstImprSelect< M >" +One possible \fBmoMoveSelect\fP. + +The neighborhood is explored until a move enables an improvment of the current solution. +.PP +Definition at line 23 of file moFirstImprSelect.h. +.SH "Member Function Documentation" +.PP +.SS "template virtual void \fBmoFirstImprSelect\fP< M >::init (const \fBFitness\fP & __fit)\fC [inline, virtual]\fP" +.PP +Procedure which initialise the exploration. +.PP +It save the current fitness as the initial value for the fitness. +.PP +Implements \fBmoMoveSelect< M >\fP. +.PP +Definition at line 35 of file moFirstImprSelect.h. +.PP +References moFirstImprSelect< M >::init_fit, and moFirstImprSelect< M >::valid. +.SS "template bool \fBmoFirstImprSelect\fP< M >::update (const M & __move, const typename M::EOType::Fitness & __fit)\fC [inline]\fP" +.PP +Function that indicates if the current move has not improved the fitness. +.PP +If the given fitness enables an improvment, the move (\fBmoMove\fP) should be applied to the current solution. +.PP +\fBParameters:\fP +.RS 4 +\fI__move\fP a move. +.br +\fI__fit\fP a fitness linked to the move. +.RE +.PP +\fBReturns:\fP +.RS 4 +TRUE if the move does not improve the fitness. +.RE +.PP + +.PP +Definition at line 52 of file moFirstImprSelect.h. +.PP +References moFirstImprSelect< M >::best_fit, moFirstImprSelect< M >::best_move, moFirstImprSelect< M >::init_fit, and moFirstImprSelect< M >::valid. +.SS "template void \fBmoFirstImprSelect\fP< M >::operator() (M & __move, \fBFitness\fP & __fit) throw (\fBEmptySelection\fP)\fC [inline, virtual]\fP" +.PP +Procedure which saved the best move and fitness. +.PP +\fBParameters:\fP +.RS 4 +\fI__move\fP the current move (result of the procedure). +.br +\fI__fit\fP the current fitness (result of the procedure). +.RE +.PP +\fBExceptions:\fP +.RS 4 +\fI\fBEmptySelection\fP\fP if no move has improved the fitness. +.RE +.PP + +.PP +Implements \fBeoBF< M &, M::EOType::Fitness &, void >\fP. +.PP +Definition at line 76 of file moFirstImprSelect.h. +.PP +References moFirstImprSelect< M >::best_fit, moFirstImprSelect< M >::best_move, and moFirstImprSelect< M >::valid. + +.SH "Author" +.PP +Generated automatically by Doxygen for PARADISEO-MO from the source code. diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moGenSolContinue.3 b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moGenSolContinue.3 new file mode 100644 index 000000000..ccdd03c2c --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moGenSolContinue.3 @@ -0,0 +1,105 @@ +.TH "moGenSolContinue" 3 "26 Jun 2007" "Version 0.1" "PARADISEO-MO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moGenSolContinue \- One possible stop criterion for a solution-based heuristic. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBmoSolContinue< EOT >< EOT >\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBmoGenSolContinue\fP (unsigned int __maxNumGen)" +.br +.RI "\fISimple constructor. \fP" +.ti -1c +.RI "bool \fBoperator()\fP (const EOT &__sol)" +.br +.RI "\fIFunction that activates the stop criterion. \fP" +.ti -1c +.RI "void \fBinit\fP ()" +.br +.RI "\fIProcedure which allows to initialise the generation counter. \fP" +.in -1c +.SS "Private Attributes" + +.in +1c +.ti -1c +.RI "unsigned int \fBmaxNumGen\fP" +.br +.RI "\fIIteration maximum number. \fP" +.ti -1c +.RI "unsigned int \fBnumGen\fP" +.br +.RI "\fIIteration current number. \fP" +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class moGenSolContinue< EOT >" +One possible stop criterion for a solution-based heuristic. + +The stop criterion corresponds to a maximum number of iteration. +.PP +Definition at line 21 of file moGenSolContinue.h. +.SH "Constructor & Destructor Documentation" +.PP +.SS "template \fBmoGenSolContinue\fP< EOT >::\fBmoGenSolContinue\fP (unsigned int __maxNumGen)\fC [inline]\fP" +.PP +Simple constructor. +.PP +\fBParameters:\fP +.RS 4 +\fI__maxNumGen\fP the maximum number of generation. +.RE +.PP + +.PP +Definition at line 30 of file moGenSolContinue.h. +.SH "Member Function Documentation" +.PP +.SS "template bool \fBmoGenSolContinue\fP< EOT >::operator() (const EOT & __sol)\fC [inline, virtual]\fP" +.PP +Function that activates the stop criterion. +.PP +Increments the counter and returns TRUE if the current number of iteration is lower than the given maximum number of iterations. +.PP +\fBParameters:\fP +.RS 4 +\fI__sol\fP the current solution. +.RE +.PP +\fBReturns:\fP +.RS 4 +TRUE or FALSE according to the current generation number. +.RE +.PP + +.PP +Implements \fBeoUF< const EOT &, bool >\fP. +.PP +Definition at line 44 of file moGenSolContinue.h. +.PP +References moGenSolContinue< EOT >::maxNumGen, and moGenSolContinue< EOT >::numGen. +.SS "template void \fBmoGenSolContinue\fP< EOT >::init ()\fC [inline, virtual]\fP" +.PP +Procedure which allows to initialise the generation counter. +.PP +It can also be used to reset the iteration counter. +.PP +Implements \fBmoSolContinue< EOT >\fP. +.PP +Definition at line 54 of file moGenSolContinue.h. +.PP +References moGenSolContinue< EOT >::numGen. + +.SH "Author" +.PP +Generated automatically by Doxygen for PARADISEO-MO from the source code. diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moHC.3 b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moHC.3 new file mode 100644 index 000000000..62b050db5 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moHC.3 @@ -0,0 +1,132 @@ +.TH "moHC" 3 "26 Jun 2007" "Version 0.1" "PARADISEO-MO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moHC \- Hill Climbing (HC). + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBmoAlgo< M::EOType >\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBmoHC\fP (\fBmoMoveInit\fP< M > &__move_init, \fBmoNextMove\fP< M > &__next_move, \fBmoMoveIncrEval\fP< M > &__incr_eval, \fBmoMoveSelect\fP< M > &__move_select, \fBeoEvalFunc\fP< \fBEOT\fP > &__full_eval)" +.br +.RI "\fIFull constructor. \fP" +.ti -1c +.RI "\fBmoHC\fP (\fBmoMoveExpl\fP< M > &__move_expl, \fBeoEvalFunc\fP< \fBEOT\fP > &__full_eval)" +.br +.RI "\fILight constructor. \fP" +.ti -1c +.RI "bool \fBoperator()\fP (\fBEOT\fP &__sol)" +.br +.RI "\fIFunction which launches the HC. \fP" +.in -1c +.SS "Private Types" + +.in +1c +.ti -1c +.RI "typedef M::EOType \fBEOT\fP" +.br +.RI "\fIAlias for the type. \fP" +.ti -1c +.RI "typedef EOT::Fitness \fBFitness\fP" +.br +.RI "\fIAlias for the fitness. \fP" +.in -1c +.SS "Private Attributes" + +.in +1c +.ti -1c +.RI "\fBmoMoveExpl\fP< M > & \fBmove_expl\fP" +.br +.RI "\fIComplete exploration of the neighborhood. \fP" +.ti -1c +.RI "\fBeoEvalFunc\fP< \fBEOT\fP > & \fBfull_eval\fP" +.br +.RI "\fIA full evaluation function. \fP" +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class moHC< M >" +Hill Climbing (HC). + +Class which describes the algorithm for a hill climbing. +.PP +Definition at line 26 of file moHC.h. +.SH "Constructor & Destructor Documentation" +.PP +.SS "template \fBmoHC\fP< M >::\fBmoHC\fP (\fBmoMoveInit\fP< M > & __move_init, \fBmoNextMove\fP< M > & __next_move, \fBmoMoveIncrEval\fP< M > & __incr_eval, \fBmoMoveSelect\fP< M > & __move_select, \fBeoEvalFunc\fP< \fBEOT\fP > & __full_eval)\fC [inline]\fP" +.PP +Full constructor. +.PP +All the boxes are given in order the HC to use a \fBmoHCMoveLoopExpl\fP. +.PP +\fBParameters:\fP +.RS 4 +\fI__move_init\fP a move initialiser. +.br +\fI__next_move\fP a neighborhood explorer. +.br +\fI__incr_eval\fP a (generally) efficient evaluation function. +.br +\fI__move_select\fP a move selector. +.br +\fI__full_eval\fP a full evaluation function. +.RE +.PP + +.PP +Definition at line 53 of file moHC.h. +.SS "template \fBmoHC\fP< M >::\fBmoHC\fP (\fBmoMoveExpl\fP< M > & __move_expl, \fBeoEvalFunc\fP< \fBEOT\fP > & __full_eval)\fC [inline]\fP" +.PP +Light constructor. +.PP +This constructor allow to use another \fBmoMoveExpl\fP (generally not a \fBmoHCMoveLoopExpl\fP). +.PP +\fBParameters:\fP +.RS 4 +\fI__move_expl\fP a complete explorer. +.br +\fI__full_eval\fP a full evaluation function. +.RE +.PP + +.PP +Definition at line 67 of file moHC.h. +.SH "Member Function Documentation" +.PP +.SS "template bool \fBmoHC\fP< M >::operator() (\fBEOT\fP & __sol)\fC [inline, virtual]\fP" +.PP +Function which launches the HC. +.PP +The HC has to improve a current solution. As the \fBmoSA\fP and the mo TS, it can be used for HYBRIDATION in an evolutionnary algorithm. +.PP +\fBParameters:\fP +.RS 4 +\fI__sol\fP a current solution to improve. +.RE +.PP +\fBReturns:\fP +.RS 4 +TRUE. +.RE +.PP + +.PP +Implements \fBeoUF< M::EOType &, bool >\fP. +.PP +Definition at line 82 of file moHC.h. +.PP +References moHC< M >::full_eval, and moHC< M >::move_expl. + +.SH "Author" +.PP +Generated automatically by Doxygen for PARADISEO-MO from the source code. diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moHCMoveLoopExpl.3 b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moHCMoveLoopExpl.3 new file mode 100644 index 000000000..decfa383a --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moHCMoveLoopExpl.3 @@ -0,0 +1,113 @@ +.TH "moHCMoveLoopExpl" 3 "26 Jun 2007" "Version 0.1" "PARADISEO-MO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moHCMoveLoopExpl \- Iterative explorer used by a \fBmoHC\fP. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBmoMoveLoopExpl< M >< M >\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBmoHCMoveLoopExpl\fP (\fBmoMoveInit\fP< M > &__move_init, \fBmoNextMove\fP< M > &__next_move, \fBmoMoveIncrEval\fP< M > &__incr_eval, \fBmoMoveSelect\fP< M > &__move_select)" +.br +.RI "\fIConstructor. \fP" +.ti -1c +.RI "void \fBoperator()\fP (const \fBEOT\fP &__old_sol, \fBEOT\fP &__new_sol)" +.br +.RI "\fIProcedure which launches the explorer. \fP" +.in -1c +.SS "Private Types" + +.in +1c +.ti -1c +.RI "typedef M::EOType \fBEOT\fP" +.br +.RI "\fIAlias for the type. \fP" +.ti -1c +.RI "typedef M::EOType::Fitness \fBFitness\fP" +.br +.RI "\fIAlias for the fitness. \fP" +.in -1c +.SS "Private Attributes" + +.in +1c +.ti -1c +.RI "\fBmoMoveInit\fP< M > & \fBmove_init\fP" +.br +.RI "\fIMove initialiser. \fP" +.ti -1c +.RI "\fBmoNextMove\fP< M > & \fBnext_move\fP" +.br +.RI "\fINeighborhood explorer. \fP" +.ti -1c +.RI "\fBmoMoveIncrEval\fP< M > & \fBincr_eval\fP" +.br +.RI "\fI(generally) Efficient evaluation. \fP" +.ti -1c +.RI "\fBmoMoveSelect\fP< M > & \fBmove_select\fP" +.br +.RI "\fIMove selector. \fP" +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class moHCMoveLoopExpl< M >" +Iterative explorer used by a \fBmoHC\fP. +.PP +Definition at line 23 of file moHCMoveLoopExpl.h. +.SH "Constructor & Destructor Documentation" +.PP +.SS "template \fBmoHCMoveLoopExpl\fP< M >::\fBmoHCMoveLoopExpl\fP (\fBmoMoveInit\fP< M > & __move_init, \fBmoNextMove\fP< M > & __next_move, \fBmoMoveIncrEval\fP< M > & __incr_eval, \fBmoMoveSelect\fP< M > & __move_select)\fC [inline]\fP" +.PP +Constructor. +.PP +All the boxes have to be specified. +.PP +\fBParameters:\fP +.RS 4 +\fI__move_init\fP the move initialiser. +.br +\fI__next_move\fP the neighborhood explorer. +.br +\fI__incr_eval\fP (generally) efficient evaluation function. +.br +\fI__move_select\fP the move selector. +.RE +.PP + +.PP +Definition at line 43 of file moHCMoveLoopExpl.h. +.SH "Member Function Documentation" +.PP +.SS "template void \fBmoHCMoveLoopExpl\fP< M >::operator() (const \fBEOT\fP & __old_sol, \fBEOT\fP & __new_sol)\fC [inline, virtual]\fP" +.PP +Procedure which launches the explorer. +.PP +The exploration starts from an old solution and provides a new solution. +.PP +\fBParameters:\fP +.RS 4 +\fI__old_sol\fP the current solution. +.br +\fI__new_sol\fP the new_sol (result of the procedure). +.RE +.PP + +.PP +Implements \fBeoBF< const M::EOType &, M::EOType &, void >\fP. +.PP +Definition at line 59 of file moHCMoveLoopExpl.h. +.PP +References moHCMoveLoopExpl< M >::incr_eval, moHCMoveLoopExpl< M >::move_init, moHCMoveLoopExpl< M >::move_select, and moHCMoveLoopExpl< M >::next_move. + +.SH "Author" +.PP +Generated automatically by Doxygen for PARADISEO-MO from the source code. diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moImprBestFitAspirCrit.3 b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moImprBestFitAspirCrit.3 new file mode 100644 index 000000000..e793d201b --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moImprBestFitAspirCrit.3 @@ -0,0 +1,90 @@ +.TH "moImprBestFitAspirCrit" 3 "26 Jun 2007" "Version 0.1" "PARADISEO-MO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moImprBestFitAspirCrit \- One of the possible \fBmoAspirCrit\fP. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBmoAspirCrit< M >< M >\fP. +.PP +.SS "Public Types" + +.in +1c +.ti -1c +.RI "typedef M::EOType::Fitness \fBFitness\fP" +.br +.RI "\fIAlias for the fitness. \fP" +.in -1c +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBmoImprBestFitAspirCrit\fP ()" +.br +.RI "\fIContructor. \fP" +.ti -1c +.RI "void \fBinit\fP ()" +.br +.RI "\fIInitialisation procedure. \fP" +.ti -1c +.RI "bool \fBoperator()\fP (const M &__move, const \fBFitness\fP &__fit)" +.br +.RI "\fIFunction that indicates if the fit is better that the already saved fit. \fP" +.in -1c +.SS "Private Attributes" + +.in +1c +.ti -1c +.RI "\fBFitness\fP \fBbest_fit\fP" +.br +.RI "\fIBest fitness found until now. \fP" +.ti -1c +.RI "bool \fBfirst_time\fP" +.br +.RI "\fIIndicates that a fitness has been already saved or not. \fP" +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class moImprBestFitAspirCrit< M >" +One of the possible \fBmoAspirCrit\fP. + +This criterion is satisfied when a given fitness is the best ever considered. +.PP +Definition at line 22 of file moImprBestFitAspirCrit.h. +.SH "Member Function Documentation" +.PP +.SS "template bool \fBmoImprBestFitAspirCrit\fP< M >::operator() (const M & __move, const \fBFitness\fP & __fit)\fC [inline, virtual]\fP" +.PP +Function that indicates if the fit is better that the already saved fit. +.PP +The first time, the function only saved the current move and fitness. +.PP +\fBParameters:\fP +.RS 4 +\fI__move\fP a move. +.br +\fI__fit\fP a fitnes linked to the move. +.RE +.PP +\fBReturns:\fP +.RS 4 +TRUE the first time and if __fit > best_fit, else FALSE. +.RE +.PP + +.PP +Implements \fBeoBF< const M &, const M::EOType::Fitness &, bool >\fP. +.PP +Definition at line 52 of file moImprBestFitAspirCrit.h. +.PP +References moImprBestFitAspirCrit< M >::best_fit, and moImprBestFitAspirCrit< M >::first_time. + +.SH "Author" +.PP +Generated automatically by Doxygen for PARADISEO-MO from the source code. diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moItRandNextMove.3 b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moItRandNextMove.3 new file mode 100644 index 000000000..e71b92372 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moItRandNextMove.3 @@ -0,0 +1,108 @@ +.TH "moItRandNextMove" 3 "26 Jun 2007" "Version 0.1" "PARADISEO-MO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moItRandNextMove \- One of the possible \fBmoNextMove\fP. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBmoNextMove< M >< M >\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBmoItRandNextMove\fP (\fBmoRandMove\fP< M > &__rand_move, unsigned int __max_iter)" +.br +.RI "\fIThe constructor. \fP" +.ti -1c +.RI "bool \fBoperator()\fP (M &__move, const \fBEOT\fP &__sol)" +.br +.RI "\fIGeneration of a new move. \fP" +.in -1c +.SS "Private Types" + +.in +1c +.ti -1c +.RI "typedef M::EOType \fBEOT\fP" +.br +.RI "\fIAlias for the type. \fP" +.in -1c +.SS "Private Attributes" + +.in +1c +.ti -1c +.RI "\fBmoRandMove\fP< M > & \fBrand_move\fP" +.br +.RI "\fIA move generator (generally randomly). \fP" +.ti -1c +.RI "unsigned int \fBmax_iter\fP" +.br +.RI "\fIIteration maximum number. \fP" +.ti -1c +.RI "unsigned int \fBnum_iter\fP" +.br +.RI "\fIIteration current number. \fP" +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class moItRandNextMove< M >" +One of the possible \fBmoNextMove\fP. + +This class is a move (\fBmoMove\fP) generator with a bound for the maximum number of iterations. +.PP +Definition at line 22 of file moItRandNextMove.h. +.SH "Constructor & Destructor Documentation" +.PP +.SS "template \fBmoItRandNextMove\fP< M >::\fBmoItRandNextMove\fP (\fBmoRandMove\fP< M > & __rand_move, unsigned int __max_iter)\fC [inline]\fP" +.PP +The constructor. +.PP +\fBParameters\fP only for initialising the attributes. +.PP +\fBParameters:\fP +.RS 4 +\fI__rand_move\fP the random move generator. +.br +\fI__max_iter\fP the iteration maximum number. +.RE +.PP + +.PP +Definition at line 37 of file moItRandNextMove.h. +.SH "Member Function Documentation" +.PP +.SS "template bool \fBmoItRandNextMove\fP< M >::operator() (M & __move, const \fBEOT\fP & __sol)\fC [inline, virtual]\fP" +.PP +Generation of a new move. +.PP +If the maximum number is not already reached, the current move is forgotten and remplaced by another one. +.PP +\fBParameters:\fP +.RS 4 +\fI__move\fP the current move. +.br +\fI__sol\fP the current solution. +.RE +.PP +\fBReturns:\fP +.RS 4 +FALSE if the maximum number of iteration is reached, else TRUE. +.RE +.PP + +.PP +Implements \fBeoBF< M &, const M::EOType &, bool >\fP. +.PP +Definition at line 52 of file moItRandNextMove.h. +.PP +References moItRandNextMove< M >::max_iter, moItRandNextMove< M >::num_iter, and moItRandNextMove< M >::rand_move. + +.SH "Author" +.PP +Generated automatically by Doxygen for PARADISEO-MO from the source code. diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moLSCheckPoint.3 b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moLSCheckPoint.3 new file mode 100644 index 000000000..4f7dc3257 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moLSCheckPoint.3 @@ -0,0 +1,83 @@ +.TH "moLSCheckPoint" 3 "26 Jun 2007" "Version 0.1" "PARADISEO-MO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moLSCheckPoint \- Class which allows a checkpointing system. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBeoBF< const M &, const M::EOType &, void >\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "void \fBoperator()\fP (const M &__move, const typename M::EOType &__sol)" +.br +.RI "\fIFunction which launches the checkpointing. \fP" +.ti -1c +.RI "void \fBadd\fP (\fBeoBF\fP< const M &, const typename M::EOType &, void > &__f)" +.br +.RI "\fIProcedure which add a new function to the function vector. \fP" +.in -1c +.SS "Private Attributes" + +.in +1c +.ti -1c +.RI "std::vector< \fBeoBF\fP< const M &, const typename M::EOType &, void > * > \fBfunc\fP" +.br +.RI "\fIvector of function \fP" +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class moLSCheckPoint< M >" +Class which allows a checkpointing system. + +Thanks to this class, at each iteration, additionnal function can be used (and not only one). +.PP +Definition at line 21 of file moLSCheckPoint.h. +.SH "Member Function Documentation" +.PP +.SS "template void \fBmoLSCheckPoint\fP< M >::operator() (const M & __move, const typename M::EOType & __sol)\fC [inline]\fP" +.PP +Function which launches the checkpointing. +.PP +Each saved function is used on the current move and the current solution. +.PP +\fBParameters:\fP +.RS 4 +\fI__move\fP a move. +.br +\fI__sol\fP a solution. +.RE +.PP + +.PP +Definition at line 34 of file moLSCheckPoint.h. +.PP +References moLSCheckPoint< M >::func. +.SS "template void \fBmoLSCheckPoint\fP< M >::add (\fBeoBF\fP< const M &, const typename M::EOType &, void > & __f)\fC [inline]\fP" +.PP +Procedure which add a new function to the function vector. +.PP +The new function is added at the end of the vector. +.PP +\fBParameters:\fP +.RS 4 +\fI__f\fP a new function to add. +.RE +.PP + +.PP +Definition at line 49 of file moLSCheckPoint.h. +.PP +References moLSCheckPoint< M >::func. + +.SH "Author" +.PP +Generated automatically by Doxygen for PARADISEO-MO from the source code. diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moLinearCoolingSchedule.3 b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moLinearCoolingSchedule.3 new file mode 100644 index 000000000..94c307558 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moLinearCoolingSchedule.3 @@ -0,0 +1,90 @@ +.TH "moLinearCoolingSchedule" 3 "26 Jun 2007" "Version 0.1" "PARADISEO-MO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moLinearCoolingSchedule \- One of the possible \fBmoCoolingSchedule\fP. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBmoCoolingSchedule\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBmoLinearCoolingSchedule\fP (double __threshold, double __quantity)" +.br +.RI "\fISimple constructor. \fP" +.ti -1c +.RI "bool \fBoperator()\fP (double &__temp)" +.br +.RI "\fIFunction which proceeds to the cooling. \fP" +.in -1c +.SS "Private Attributes" + +.in +1c +.ti -1c +.RI "double \fBthreshold\fP" +.br +.RI "\fIThe temperature threhold. \fP" +.ti -1c +.RI "double \fBquantity\fP" +.br +.RI "\fIThe quantity that allows the temperature to decrease. \fP" +.in -1c +.SH "Detailed Description" +.PP +One of the possible \fBmoCoolingSchedule\fP. + +An another very simple cooling schedule, the temperature decrease according to a quantity while the temperature is greater than a threshold. +.PP +Definition at line 22 of file moLinearCoolingSchedule.h. +.SH "Constructor & Destructor Documentation" +.PP +.SS "moLinearCoolingSchedule::moLinearCoolingSchedule (double __threshold, double __quantity)\fC [inline]\fP" +.PP +Simple constructor. +.PP +\fBParameters:\fP +.RS 4 +\fI__threshold\fP the threshold. +.br +\fI__quantity\fP the quantity used to descrease the temperature. +.RE +.PP + +.PP +Definition at line 31 of file moLinearCoolingSchedule.h. +.SH "Member Function Documentation" +.PP +.SS "bool moLinearCoolingSchedule::operator() (double & __temp)\fC [inline, virtual]\fP" +.PP +Function which proceeds to the cooling. +.PP +It decreases the temperature and indicates if it is greater than the threshold. +.PP +\fBParameters:\fP +.RS 4 +\fI__temp\fP the current temperature. +.RE +.PP +\fBReturns:\fP +.RS 4 +if the new temperature (current temperature - quantity) is greater than the threshold. +.RE +.PP + +.PP +Implements \fBeoUF< double &, bool >\fP. +.PP +Definition at line 41 of file moLinearCoolingSchedule.h. +.PP +References quantity, and threshold. + +.SH "Author" +.PP +Generated automatically by Doxygen for PARADISEO-MO from the source code. diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moMove.3 b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moMove.3 new file mode 100644 index 000000000..00dd895c2 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moMove.3 @@ -0,0 +1,35 @@ +.TH "moMove" 3 "26 Jun 2007" "Version 0.1" "PARADISEO-MO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moMove \- Definition of a move. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBeoUF< EOT &, void >\fP. +.PP +.SS "Public Types" + +.in +1c +.ti -1c +.RI "typedef EOT \fBEOType\fP" +.br +.RI "\fIAlias for the type. \fP" +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class moMove< EOT >" +Definition of a move. + +A move transforms a solution to another close solution. It describes how a solution can be modified to another one. +.PP +Definition at line 23 of file moMove.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for PARADISEO-MO from the source code. diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moMoveExpl.3 b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moMoveExpl.3 new file mode 100644 index 000000000..20b0303f1 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moMoveExpl.3 @@ -0,0 +1,29 @@ +.TH "moMoveExpl" 3 "26 Jun 2007" "Version 0.1" "PARADISEO-MO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moMoveExpl \- Description of a move (\fBmoMove\fP) explorer. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBeoBF< const M::EOType &, M::EOType &, void >\fP. +.PP +Inherited by \fBmoMoveLoopExpl< M >\fP. +.PP +.SH "Detailed Description" +.PP + +.SS "template class moMoveExpl< M >" +Description of a move (\fBmoMove\fP) explorer. + +Only a description...See \fBmoMoveLoopExpl\fP. +.PP +Definition at line 21 of file moMoveExpl.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for PARADISEO-MO from the source code. diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moMoveIncrEval.3 b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moMoveIncrEval.3 new file mode 100644 index 000000000..578d5e8ad --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moMoveIncrEval.3 @@ -0,0 +1,27 @@ +.TH "moMoveIncrEval" 3 "26 Jun 2007" "Version 0.1" "PARADISEO-MO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moMoveIncrEval \- (generally) Efficient evaluation function based a move and a solution. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBeoBF< const M &, const M::EOType &, M::EOType::Fitness >\fP. +.PP +.SH "Detailed Description" +.PP + +.SS "template class moMoveIncrEval< M >" +(generally) Efficient evaluation function based a move and a solution. + +From a move and a solution, it computes a new fitness that could be associated to the solution if this one is updated. +.PP +Definition at line 24 of file moMoveIncrEval.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for PARADISEO-MO from the source code. diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moMoveInit.3 b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moMoveInit.3 new file mode 100644 index 000000000..b1734f37e --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moMoveInit.3 @@ -0,0 +1,27 @@ +.TH "moMoveInit" 3 "26 Jun 2007" "Version 0.1" "PARADISEO-MO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moMoveInit \- Move (\fBmoMove\fP) initializer. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBeoBF< M &, const M::EOType &, void >\fP. +.PP +.SH "Detailed Description" +.PP + +.SS "template class moMoveInit< M >" +Move (\fBmoMove\fP) initializer. + +Class which allows to initiase a move. Only a description... An object that herits from this class needs to be designed to be used. +.PP +Definition at line 22 of file moMoveInit.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for PARADISEO-MO from the source code. diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moMoveLoopExpl.3 b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moMoveLoopExpl.3 new file mode 100644 index 000000000..13867fca8 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moMoveLoopExpl.3 @@ -0,0 +1,29 @@ +.TH "moMoveLoopExpl" 3 "26 Jun 2007" "Version 0.1" "PARADISEO-MO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moMoveLoopExpl \- Class which describes an iterative explorer. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBmoMoveExpl< M >< M >\fP. +.PP +Inherited by \fBmoHCMoveLoopExpl< M >\fP, and \fBmoTSMoveLoopExpl< M >\fP. +.PP +.SH "Detailed Description" +.PP + +.SS "template class moMoveLoopExpl< M >" +Class which describes an iterative explorer. + +Only a description... \fBmoHCMoveLoopExpl\fP and \fBmoTSMoveLoopExpl\fP are exemples of class that are a \fBmoMoveLoopExpl\fP. +.PP +Definition at line 21 of file moMoveLoopExpl.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for PARADISEO-MO from the source code. diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moMoveSelect.3 b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moMoveSelect.3 new file mode 100644 index 000000000..b2b792bfb --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moMoveSelect.3 @@ -0,0 +1,84 @@ +.TH "moMoveSelect" 3 "26 Jun 2007" "Version 0.1" "PARADISEO-MO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moMoveSelect \- Class that describes a move selector (\fBmoMove\fP). + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBeoBF< M &, M::EOType::Fitness &, void >\fP. +.PP +Inherited by \fBmoBestImprSelect< M >\fP, \fBmoFirstImprSelect< M >\fP, and \fBmoRandImprSelect< M >\fP. +.PP +.SS "Public Types" + +.in +1c +.ti -1c +.RI "typedef M::EOType::Fitness \fBFitness\fP" +.br +.RI "\fIAlias for the fitness. \fP" +.in -1c +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "virtual void \fBinit\fP (const \fBFitness\fP &__fit)=0" +.br +.RI "\fIProcedure which initialises all that the move selector needs including the initial fitness. \fP" +.ti -1c +.RI "virtual bool \fBupdate\fP (const M &__move, const \fBFitness\fP &__fit)=0" +.br +.RI "\fIFunction which updates the best solutions. \fP" +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class moMoveSelect< M >" +Class that describes a move selector (\fBmoMove\fP). + +It iteratively considers some moves (\fBmoMove\fP) and their associated fitnesses. The best move is so regularly updated. At any time, it could be accessed. +.PP +Definition at line 32 of file moMoveSelect.h. +.SH "Member Function Documentation" +.PP +.SS "template virtual void \fBmoMoveSelect\fP< M >::init (const \fBFitness\fP & __fit)\fC [pure virtual]\fP" +.PP +Procedure which initialises all that the move selector needs including the initial fitness. +.PP +In order to know the fitness of the solution, for which the neighborhood will be soon explored +.PP +\fBParameters:\fP +.RS 4 +\fI__fit\fP the current fitness. +.RE +.PP + +.PP +Implemented in \fBmoBestImprSelect< M >\fP, \fBmoFirstImprSelect< M >\fP, and \fBmoRandImprSelect< M >\fP. +.SS "template virtual bool \fBmoMoveSelect\fP< M >::update (const M & __move, const \fBFitness\fP & __fit)\fC [pure virtual]\fP" +.PP +Function which updates the best solutions. +.PP +\fBParameters:\fP +.RS 4 +\fI__move\fP a new move. +.br +\fI__fit\fP a fitness linked to the new move. +.RE +.PP +\fBReturns:\fP +.RS 4 +a boolean that expresses the need to resume the exploration. +.RE +.PP + +.PP +Implemented in \fBmoBestImprSelect< M >\fP, and \fBmoRandImprSelect< M >\fP. + +.SH "Author" +.PP +Generated automatically by Doxygen for PARADISEO-MO from the source code. diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moNextMove.3 b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moNextMove.3 new file mode 100644 index 000000000..9e3968b8d --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moNextMove.3 @@ -0,0 +1,29 @@ +.TH "moNextMove" 3 "26 Jun 2007" "Version 0.1" "PARADISEO-MO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moNextMove \- Class which allows to generate a new move (\fBmoMove\fP). + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBeoBF< M &, const M::EOType &, bool >\fP. +.PP +Inherited by \fBmoItRandNextMove< M >\fP. +.PP +.SH "Detailed Description" +.PP + +.SS "template class moNextMove< M >" +Class which allows to generate a new move (\fBmoMove\fP). + +Useful for the explorer (for \fBmoTS\fP or \fBmoHC\fP). Does nothing... An object that herits from this class needs to be designed for being used. +.PP +Definition at line 22 of file moNextMove.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for PARADISEO-MO from the source code. diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moNoAspirCrit.3 b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moNoAspirCrit.3 new file mode 100644 index 000000000..134a023ee --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moNoAspirCrit.3 @@ -0,0 +1,71 @@ +.TH "moNoAspirCrit" 3 "26 Jun 2007" "Version 0.1" "PARADISEO-MO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moNoAspirCrit \- One of the possible aspiration criterion (\fBmoAspirCrit\fP). + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBmoAspirCrit< M >< M >\fP. +.PP +.SS "Private Member Functions" + +.in +1c +.ti -1c +.RI "bool \fBoperator()\fP (const M &__move, const typename M::EOType::Fitness &__sol)" +.br +.RI "\fIFunction which describes the aspiration criterion behaviour. \fP" +.ti -1c +.RI "void \fBinit\fP ()" +.br +.RI "\fIProcedure which initialises all that needs a \fBmoNoAspirCrit\fP. \fP" +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class moNoAspirCrit< M >" +One of the possible aspiration criterion (\fBmoAspirCrit\fP). + +The simplest : never satisfied. +.PP +Definition at line 21 of file moNoAspirCrit.h. +.SH "Member Function Documentation" +.PP +.SS "template bool \fBmoNoAspirCrit\fP< M >::operator() (const M & __move, const typename M::EOType::Fitness & __sol)\fC [inline, private]\fP" +.PP +Function which describes the aspiration criterion behaviour. +.PP +Does nothing. +.PP +\fBParameters:\fP +.RS 4 +\fI__move\fP a move. +.br +\fI__sol\fP a fitness. +.RE +.PP +\fBReturns:\fP +.RS 4 +FALSE. +.RE +.PP + +.PP +Definition at line 32 of file moNoAspirCrit.h. +.SS "template void \fBmoNoAspirCrit\fP< M >::init ()\fC [inline, private, virtual]\fP" +.PP +Procedure which initialises all that needs a \fBmoNoAspirCrit\fP. +.PP +Nothing... +.PP +Implements \fBmoAspirCrit< M >\fP. +.PP +Definition at line 43 of file moNoAspirCrit.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for PARADISEO-MO from the source code. diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moRandImprSelect.3 b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moRandImprSelect.3 new file mode 100644 index 000000000..b153ea245 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moRandImprSelect.3 @@ -0,0 +1,137 @@ +.TH "moRandImprSelect" 3 "26 Jun 2007" "Version 0.1" "PARADISEO-MO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moRandImprSelect \- One of the possible \fBmoMove\fP selector (\fBmoMoveSelect\fP). + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBmoMoveSelect< M >< M >\fP. +.PP +.SS "Public Types" + +.in +1c +.ti -1c +.RI "typedef M::EOType::Fitness \fBFitness\fP" +.br +.RI "\fIAlias for the fitness. \fP" +.in -1c +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "void \fBinit\fP (const \fBFitness\fP &__fit)" +.br +.RI "\fIProcedure which all that needs a \fBmoRandImprSelect\fP. \fP" +.ti -1c +.RI "bool \fBupdate\fP (const M &__move, const \fBFitness\fP &__fit)" +.br +.RI "\fIFunction that updates the fitness and move vectors. \fP" +.ti -1c +.RI "void \fBoperator()\fP (M &__move, \fBFitness\fP &__fit) throw (EmptySelection)" +.br +.RI "\fIThe move selection. \fP" +.in -1c +.SS "Private Attributes" + +.in +1c +.ti -1c +.RI "\fBFitness\fP \fBinit_fit\fP" +.br +.RI "\fIFitness of the current solution. \fP" +.ti -1c +.RI "std::vector< \fBFitness\fP > \fBvect_better_fit\fP" +.br +.RI "\fICandidate fitnesse vector. \fP" +.ti -1c +.RI "std::vector< M > \fBvect_better_moves\fP" +.br +.RI "\fICandidate move vector. \fP" +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class moRandImprSelect< M >" +One of the possible \fBmoMove\fP selector (\fBmoMoveSelect\fP). + +All the neighbors are considered. One of them that enables an improvment of the objective function is choosen. +.PP +Definition at line 25 of file moRandImprSelect.h. +.SH "Member Function Documentation" +.PP +.SS "template void \fBmoRandImprSelect\fP< M >::init (const \fBFitness\fP & __fit)\fC [inline, virtual]\fP" +.PP +Procedure which all that needs a \fBmoRandImprSelect\fP. +.PP +Give a value to the initialise fitness. Clean the move and fitness vectors. +.PP +\fBParameters:\fP +.RS 4 +\fI__fit\fP the current best fitness +.RE +.PP + +.PP +Implements \fBmoMoveSelect< M >\fP. +.PP +Definition at line 40 of file moRandImprSelect.h. +.PP +References moRandImprSelect< M >::init_fit, moRandImprSelect< M >::vect_better_fit, and moRandImprSelect< M >::vect_better_moves. +.SS "template bool \fBmoRandImprSelect\fP< M >::update (const M & __move, const \fBFitness\fP & __fit)\fC [inline, virtual]\fP" +.PP +Function that updates the fitness and move vectors. +.PP +if a move give a better fitness than the initial fitness, it is saved and the fitness too. +.PP +\fBParameters:\fP +.RS 4 +\fI__move\fP a new move. +.br +\fI__fit\fP a new fitness associated to the new move. +.RE +.PP +\fBReturns:\fP +.RS 4 +TRUE. +.RE +.PP + +.PP +Implements \fBmoMoveSelect< M >\fP. +.PP +Definition at line 56 of file moRandImprSelect.h. +.PP +References moRandImprSelect< M >::init_fit, moRandImprSelect< M >::vect_better_fit, and moRandImprSelect< M >::vect_better_moves. +.SS "template void \fBmoRandImprSelect\fP< M >::operator() (M & __move, \fBFitness\fP & __fit) throw (\fBEmptySelection\fP)\fC [inline, virtual]\fP" +.PP +The move selection. +.PP +One the saved move is randomly chosen. +.PP +\fBParameters:\fP +.RS 4 +\fI__move\fP the reference of the move that can be initialised by the function. +.br +\fI__fit\fP the reference of the fitness that can be initialised by the function. +.RE +.PP +\fBExceptions:\fP +.RS 4 +\fI\fBEmptySelection\fP\fP If no move which improves the current fitness are found. +.RE +.PP + +.PP +Implements \fBeoBF< M &, M::EOType::Fitness &, void >\fP. +.PP +Definition at line 77 of file moRandImprSelect.h. +.PP +References eoRng::random(), moRandImprSelect< M >::vect_better_fit, and moRandImprSelect< M >::vect_better_moves. + +.SH "Author" +.PP +Generated automatically by Doxygen for PARADISEO-MO from the source code. diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moRandMove.3 b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moRandMove.3 new file mode 100644 index 000000000..7e340c5e8 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moRandMove.3 @@ -0,0 +1,27 @@ +.TH "moRandMove" 3 "26 Jun 2007" "Version 0.1" "PARADISEO-MO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moRandMove \- Random move generator. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBeoUF< M &, void >\fP. +.PP +.SH "Detailed Description" +.PP + +.SS "template class moRandMove< M >" +Random move generator. + +Only a description... An object that herits from this class needs to be designed in order to use a \fBmoSA\fP. +.PP +Definition at line 21 of file moRandMove.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for PARADISEO-MO from the source code. diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moSA.3 b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moSA.3 new file mode 100644 index 000000000..b81a7da44 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moSA.3 @@ -0,0 +1,130 @@ +.TH "moSA" 3 "26 Jun 2007" "Version 0.1" "PARADISEO-MO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moSA \- Simulated Annealing (SA). + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBmoAlgo< M::EOType >\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBmoSA\fP (\fBmoRandMove\fP< M > &__move_rand, \fBmoMoveIncrEval\fP< M > &__incr_eval, \fBmoSolContinue\fP< \fBEOT\fP > &__cont, double __init_temp, \fBmoCoolingSchedule\fP &__cool_sched, \fBeoEvalFunc\fP< \fBEOT\fP > &__full_eval)" +.br +.RI "\fISA constructor. \fP" +.ti -1c +.RI "bool \fBoperator()\fP (\fBEOT\fP &__sol)" +.br +.RI "\fIfunction that launches the SA algorithm. \fP" +.in -1c +.SS "Private Types" + +.in +1c +.ti -1c +.RI "typedef M::EOType \fBEOT\fP" +.br +.RI "\fIAlias for the type. \fP" +.ti -1c +.RI "typedef EOT::Fitness \fBFitness\fP" +.br +.RI "\fIAlias for the fitness. \fP" +.in -1c +.SS "Private Attributes" + +.in +1c +.ti -1c +.RI "\fBmoRandMove\fP< M > & \fBmove_rand\fP" +.br +.RI "\fIA move generator (generally randomly). \fP" +.ti -1c +.RI "\fBmoMoveIncrEval\fP< M > & \fBincr_eval\fP" +.br +.RI "\fIA (generally) efficient evaluation function. \fP" +.ti -1c +.RI "\fBmoSolContinue\fP< \fBEOT\fP > & \fBcont\fP" +.br +.RI "\fIStopping criterion before temperature update. \fP" +.ti -1c +.RI "double \fBinit_temp\fP" +.br +.RI "\fIInitial temperature. \fP" +.ti -1c +.RI "\fBmoCoolingSchedule\fP & \fBcool_sched\fP" +.br +.RI "\fIThe cooling schedule. \fP" +.ti -1c +.RI "\fBeoEvalFunc\fP< \fBEOT\fP > & \fBfull_eval\fP" +.br +.RI "\fIA full evaluation function. \fP" +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class moSA< M >" +Simulated Annealing (SA). + +Class that describes a Simulated Annealing algorithm. +.PP +Definition at line 30 of file moSA.h. +.SH "Constructor & Destructor Documentation" +.PP +.SS "template \fBmoSA\fP< M >::\fBmoSA\fP (\fBmoRandMove\fP< M > & __move_rand, \fBmoMoveIncrEval\fP< M > & __incr_eval, \fBmoSolContinue\fP< \fBEOT\fP > & __cont, double __init_temp, \fBmoCoolingSchedule\fP & __cool_sched, \fBeoEvalFunc\fP< \fBEOT\fP > & __full_eval)\fC [inline]\fP" +.PP +SA constructor. +.PP +All the boxes used by a SA need to be given. +.PP +\fBParameters:\fP +.RS 4 +\fI__move_rand\fP a move generator (generally randomly). +.br +\fI__incr_eval\fP a (generaly) efficient evaluation function +.br +\fI__cont\fP a stopping criterion. +.br +\fI__init_temp\fP the initial temperature. +.br +\fI__cool_sched\fP a cooling schedule, describes how the temperature is modified. +.br +\fI__full_eval\fP a full evaluation function. +.RE +.PP + +.PP +Definition at line 58 of file moSA.h. +.SH "Member Function Documentation" +.PP +.SS "template bool \fBmoSA\fP< M >::operator() (\fBEOT\fP & __sol)\fC [inline, virtual]\fP" +.PP +function that launches the SA algorithm. +.PP +As a \fBmoTS\fP or a \fBmoHC\fP, the SA can be used for HYBRIDATION in an evolutionary algorithm. +.PP +\fBParameters:\fP +.RS 4 +\fI__sol\fP a solution to improve. +.RE +.PP +\fBReturns:\fP +.RS 4 +TRUE. +.RE +.PP + +.PP +Implements \fBeoUF< M::EOType &, bool >\fP. +.PP +Definition at line 80 of file moSA.h. +.PP +References moSA< M >::cont, moSA< M >::cool_sched, moSA< M >::full_eval, moSA< M >::incr_eval, moSA< M >::init_temp, moSA< M >::move_rand, and eoRng::uniform(). + +.SH "Author" +.PP +Generated automatically by Doxygen for PARADISEO-MO from the source code. diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moSimpleMoveTabuList.3 b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moSimpleMoveTabuList.3 new file mode 100644 index 000000000..20ece6353 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moSimpleMoveTabuList.3 @@ -0,0 +1,160 @@ +.TH "moSimpleMoveTabuList" 3 "26 Jun 2007" "Version 0.1" "PARADISEO-MO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moSimpleMoveTabuList \- Class describing a move tabu list with a limited memory. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBmoTabuList< M >< M >\fP. +.PP +.SS "Public Types" + +.in +1c +.ti -1c +.RI "typedef M::EOType \fBEOT\fP" +.br +.RI "\fIAlias for the type. \fP" +.in -1c +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBmoSimpleMoveTabuList\fP (unsigned int __size)" +.br +.RI "\fIConstructor. \fP" +.ti -1c +.RI "bool \fBoperator()\fP (const M &__move, const \fBEOT\fP &__sol)" +.br +.RI "\fIFunction that indicates if, in a given state, the _move is tabu or not. \fP" +.ti -1c +.RI "void \fBadd\fP (const M &__move, const \fBEOT\fP &__sol)" +.br +.RI "\fIProcedure to add a move in the tabu list. \fP" +.ti -1c +.RI "void \fBupdate\fP ()" +.br +.RI "\fIProcedure that updates the tabu list content. \fP" +.ti -1c +.RI "void \fBinit\fP ()" +.br +.RI "\fIProcedure which initialises the tabu list. \fP" +.in -1c +.SS "Private Member Functions" + +.in +1c +.ti -1c +.RI "void \fBremoveMove\fP (const M &__move)" +.br +.RI "\fIProcedure that removes a given move from the tabu list (if it is into, else do nothing). \fP" +.in -1c +.SS "Private Attributes" + +.in +1c +.ti -1c +.RI "unsigned int \fBmaxSize\fP" +.br +.RI "\fIThe maximum size of the tabu list. \fP" +.ti -1c +.RI "unsigned int \fBcurrentSize\fP" +.br +.RI "\fIThe current size of the tabu list. \fP" +.ti -1c +.RI "std::list< M > \fBtabuList\fP" +.br +.RI "\fIThe move tabu list. \fP" +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class moSimpleMoveTabuList< M >" +Class describing a move tabu list with a limited memory. +.PP +Definition at line 22 of file moSimpleMoveTabuList.h. +.SH "Member Function Documentation" +.PP +.SS "template bool \fBmoSimpleMoveTabuList\fP< M >::operator() (const M & __move, const \fBEOT\fP & __sol)\fC [inline, virtual]\fP" +.PP +Function that indicates if, in a given state, the _move is tabu or not. +.PP +\fBParameters:\fP +.RS 4 +\fI__move\fP A given \fBmoMove\fP. +.br +\fI__sol\fP A solution. +.RE +.PP +\fBReturns:\fP +.RS 4 +true or false. +.RE +.PP + +.PP +Implements \fBeoBF< const M &, const M::EOType &, bool >\fP. +.PP +Definition at line 46 of file moSimpleMoveTabuList.h. +.PP +References moSimpleMoveTabuList< M >::tabuList. +.SS "template void \fBmoSimpleMoveTabuList\fP< M >::add (const M & __move, const \fBEOT\fP & __sol)\fC [inline, virtual]\fP" +.PP +Procedure to add a move in the tabu list. +.PP +The two parameters have not to be modified so they are constant parameters. +.PP +\fBParameters:\fP +.RS 4 +\fI__move\fP a new tabu move. +.br +\fI__sol\fP the origianl solution associated to this move. +.RE +.PP + +.PP +Implements \fBmoTabuList< M >\fP. +.PP +Definition at line 60 of file moSimpleMoveTabuList.h. +.PP +References moSimpleMoveTabuList< M >::currentSize, moSimpleMoveTabuList< M >::maxSize, moSimpleMoveTabuList< M >::removeMove(), and moSimpleMoveTabuList< M >::tabuList. +.SS "template void \fBmoSimpleMoveTabuList\fP< M >::update ()\fC [inline, virtual]\fP" +.PP +Procedure that updates the tabu list content. +.PP +Generally, a counter associated to each saved move is decreased by one. +.PP +Implements \fBmoTabuList< M >\fP. +.PP +Definition at line 82 of file moSimpleMoveTabuList.h. +.SS "template void \fBmoSimpleMoveTabuList\fP< M >::init ()\fC [inline, virtual]\fP" +.PP +Procedure which initialises the tabu list. +.PP +Can be useful if the data structure needs to be allocated before being used. +.PP +Implements \fBmoTabuList< M >\fP. +.PP +Definition at line 88 of file moSimpleMoveTabuList.h. +.SS "template void \fBmoSimpleMoveTabuList\fP< M >::removeMove (const M & __move)\fC [inline, private]\fP" +.PP +Procedure that removes a given move from the tabu list (if it is into, else do nothing). +.PP +\fBParameters:\fP +.RS 4 +\fI__move\fP A given \fBmoMove\fP. +.RE +.PP + +.PP +Definition at line 100 of file moSimpleMoveTabuList.h. +.PP +References moSimpleMoveTabuList< M >::tabuList. +.PP +Referenced by moSimpleMoveTabuList< M >::add(). + +.SH "Author" +.PP +Generated automatically by Doxygen for PARADISEO-MO from the source code. diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moSimpleSolutionTabuList.3 b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moSimpleSolutionTabuList.3 new file mode 100644 index 000000000..e9eb142ff --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moSimpleSolutionTabuList.3 @@ -0,0 +1,176 @@ +.TH "moSimpleSolutionTabuList" 3 "26 Jun 2007" "Version 0.1" "PARADISEO-MO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moSimpleSolutionTabuList \- Class describing a solution tabu list with limited length. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBmoTabuList< M >< M >\fP. +.PP +.SS "Public Types" + +.in +1c +.ti -1c +.RI "typedef M::EOType \fBEOT\fP" +.br +.RI "\fIAlias for the type. \fP" +.in -1c +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBmoSimpleSolutionTabuList\fP (unsigned int __size)" +.br +.RI "\fIConstructor. \fP" +.ti -1c +.RI "bool \fBoperator()\fP (const M &__move, const \fBEOT\fP &__sol)" +.br +.RI "\fIFunction that indicates if, in a given state, the _move is tabu or not. \fP" +.ti -1c +.RI "void \fBadd\fP (const M &__move, const \fBEOT\fP &__sol)" +.br +.RI "\fIProcedure to add a move in the tabu list. \fP" +.ti -1c +.RI "void \fBupdate\fP ()" +.br +.RI "\fIProcedure that updates the tabu list content. \fP" +.ti -1c +.RI "void \fBinit\fP ()" +.br +.RI "\fIProcedure which initialises the tabu list. \fP" +.in -1c +.SS "Private Member Functions" + +.in +1c +.ti -1c +.RI "void \fBremoveSolution\fP (const \fBEOT\fP &__sol)" +.br +.RI "\fIProcedure that removes a given solution from the tabu list (if it is into, else does nothing). \fP" +.in -1c +.SS "Private Attributes" + +.in +1c +.ti -1c +.RI "unsigned int \fBmaxSize\fP" +.br +.RI "\fIThe maximum size of the tabu list. \fP" +.ti -1c +.RI "unsigned int \fBcurrentSize\fP" +.br +.RI "\fIThe current size of the tabu list. \fP" +.ti -1c +.RI "std::list< \fBEOT\fP > \fBtabuList\fP" +.br +.RI "\fIThe solution tabu list. \fP" +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class moSimpleSolutionTabuList< M >" +Class describing a solution tabu list with limited length. +.PP +Definition at line 22 of file moSimpleSolutionTabuList.h. +.SH "Constructor & Destructor Documentation" +.PP +.SS "template \fBmoSimpleSolutionTabuList\fP< M >::\fBmoSimpleSolutionTabuList\fP (unsigned int __size)\fC [inline]\fP" +.PP +Constructor. +.PP +\fBParameters:\fP +.RS 4 +\fI__size\fP The maximum size of the solution tabu list. +.RE +.PP + +.PP +Definition at line 34 of file moSimpleSolutionTabuList.h. +.PP +References moSimpleSolutionTabuList< M >::currentSize. +.SH "Member Function Documentation" +.PP +.SS "template bool \fBmoSimpleSolutionTabuList\fP< M >::operator() (const M & __move, const \fBEOT\fP & __sol)\fC [inline, virtual]\fP" +.PP +Function that indicates if, in a given state, the _move is tabu or not. +.PP +\fBParameters:\fP +.RS 4 +\fI__move\fP A given \fBmoMove\fP. +.br +\fI__sol\fP A solution. +.RE +.PP +\fBReturns:\fP +.RS 4 +true or false. +.RE +.PP + +.PP +Implements \fBeoBF< const M &, const M::EOType &, bool >\fP. +.PP +Definition at line 45 of file moSimpleSolutionTabuList.h. +.PP +References moSimpleSolutionTabuList< M >::tabuList. +.SS "template void \fBmoSimpleSolutionTabuList\fP< M >::add (const M & __move, const \fBEOT\fP & __sol)\fC [inline, virtual]\fP" +.PP +Procedure to add a move in the tabu list. +.PP +The two parameters have not to be modified so they are constant parameters. +.PP +\fBParameters:\fP +.RS 4 +\fI__move\fP a new tabu move. +.br +\fI__sol\fP the origianl solution associated to this move. +.RE +.PP + +.PP +Implements \fBmoTabuList< M >\fP. +.PP +Definition at line 64 of file moSimpleSolutionTabuList.h. +.PP +References moSimpleSolutionTabuList< M >::currentSize, moSimpleSolutionTabuList< M >::maxSize, moSimpleSolutionTabuList< M >::removeSolution(), and moSimpleSolutionTabuList< M >::tabuList. +.SS "template void \fBmoSimpleSolutionTabuList\fP< M >::update ()\fC [inline, virtual]\fP" +.PP +Procedure that updates the tabu list content. +.PP +Generally, a counter associated to each saved move is decreased by one. +.PP +Implements \fBmoTabuList< M >\fP. +.PP +Definition at line 91 of file moSimpleSolutionTabuList.h. +.SS "template void \fBmoSimpleSolutionTabuList\fP< M >::init ()\fC [inline, virtual]\fP" +.PP +Procedure which initialises the tabu list. +.PP +Can be useful if the data structure needs to be allocated before being used. +.PP +Implements \fBmoTabuList< M >\fP. +.PP +Definition at line 97 of file moSimpleSolutionTabuList.h. +.SS "template void \fBmoSimpleSolutionTabuList\fP< M >::removeSolution (const \fBEOT\fP & __sol)\fC [inline, private]\fP" +.PP +Procedure that removes a given solution from the tabu list (if it is into, else does nothing). +.PP +\fBParameters:\fP +.RS 4 +\fI__sol\fP A given solution. +.RE +.PP + +.PP +Definition at line 109 of file moSimpleSolutionTabuList.h. +.PP +References moSimpleSolutionTabuList< M >::tabuList. +.PP +Referenced by moSimpleSolutionTabuList< M >::add(). + +.SH "Author" +.PP +Generated automatically by Doxygen for PARADISEO-MO from the source code. diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moSolContinue.3 b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moSolContinue.3 new file mode 100644 index 000000000..2881fcc45 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moSolContinue.3 @@ -0,0 +1,46 @@ +.TH "moSolContinue" 3 "26 Jun 2007" "Version 0.1" "PARADISEO-MO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moSolContinue \- Class that describes a stop criterion for a solution-based heuristic. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBeoUF< const EOT &, bool >\fP. +.PP +Inherited by \fBmoGenSolContinue< EOT >\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "virtual void \fBinit\fP ()=0" +.br +.RI "\fIProcedure which initialises all that the stop criterion needs. \fP" +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class moSolContinue< EOT >" +Class that describes a stop criterion for a solution-based heuristic. + +It allows to add an initialisation procedure to an object that is a unary function (\fBeoUF\fP). +.PP +Definition at line 22 of file moSolContinue.h. +.SH "Member Function Documentation" +.PP +.SS "template virtual void \fBmoSolContinue\fP< EOT >::init ()\fC [pure virtual]\fP" +.PP +Procedure which initialises all that the stop criterion needs. +.PP +Generally, it allocates some data structures or initialises some counters. +.PP +Implemented in \fBmoGenSolContinue< EOT >\fP. + +.SH "Author" +.PP +Generated automatically by Doxygen for PARADISEO-MO from the source code. diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moTS.3 b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moTS.3 new file mode 100644 index 000000000..65b8da044 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moTS.3 @@ -0,0 +1,158 @@ +.TH "moTS" 3 "26 Jun 2007" "Version 0.1" "PARADISEO-MO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moTS \- Tabu Search (TS). + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBmoAlgo< M::EOType >\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBmoTS\fP (\fBmoMoveInit\fP< M > &__move_init, \fBmoNextMove\fP< M > &__next_move, \fBmoMoveIncrEval\fP< M > &__incr_eval, \fBmoTabuList\fP< M > &__tabu_list, \fBmoAspirCrit\fP< M > &__aspir_crit, \fBmoSolContinue\fP< \fBEOT\fP > &__cont, \fBeoEvalFunc\fP< \fBEOT\fP > &__full_eval)" +.br +.RI "\fIConstructor of a \fBmoTS\fP specifying all the boxes. \fP" +.ti -1c +.RI "\fBmoTS\fP (\fBmoMoveExpl\fP< M > &__move_expl, \fBmoSolContinue\fP< \fBEOT\fP > &__cont, \fBeoEvalFunc\fP< \fBEOT\fP > &__full_eval)" +.br +.RI "\fIConstructor with less parameters. \fP" +.ti -1c +.RI "bool \fBoperator()\fP (\fBEOT\fP &__sol)" +.br +.RI "\fIFunction which launchs the Tabu Search. \fP" +.in -1c +.SS "Private Types" + +.in +1c +.ti -1c +.RI "typedef M::EOType \fBEOT\fP" +.br +.RI "\fIAlias for the type. \fP" +.ti -1c +.RI "typedef EOT::Fitness \fBFitness\fP" +.br +.RI "\fIAlias for the fitness. \fP" +.in -1c +.SS "Private Attributes" + +.in +1c +.ti -1c +.RI "\fBmoMoveExpl\fP< M > & \fBmove_expl\fP" +.br +.RI "\fINeighborhood explorer. \fP" +.ti -1c +.RI "\fBmoSolContinue\fP< \fBEOT\fP > & \fBcont\fP" +.br +.RI "\fIStop criterion. \fP" +.ti -1c +.RI "\fBeoEvalFunc\fP< \fBEOT\fP > & \fBfull_eval\fP" +.br +.RI "\fIFull evaluation function. \fP" +.in -1c +.SS "Static Private Attributes" + +.in +1c +.ti -1c +.RI "static bool \fBfirst_time\fP = true" +.br +.RI "\fIBoolean allowing to initialise the ptread_mutex_t in the constructor. \fP" +.ti -1c +.RI "static pthread_mutex_t \fBmutex\fP" +.br +.RI "\fIThe lock. \fP" +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class moTS< M >" +Tabu Search (TS). + +Generic algorithm that describes a tabu search. +.PP +Definition at line 30 of file moTS.h. +.SH "Constructor & Destructor Documentation" +.PP +.SS "template \fBmoTS\fP< M >::\fBmoTS\fP (\fBmoMoveInit\fP< M > & __move_init, \fBmoNextMove\fP< M > & __next_move, \fBmoMoveIncrEval\fP< M > & __incr_eval, \fBmoTabuList\fP< M > & __tabu_list, \fBmoAspirCrit\fP< M > & __aspir_crit, \fBmoSolContinue\fP< \fBEOT\fP > & __cont, \fBeoEvalFunc\fP< \fBEOT\fP > & __full_eval)\fC [inline]\fP" +.PP +Constructor of a \fBmoTS\fP specifying all the boxes. +.PP +In this constructor, a \fBmoTSMoveLoopExpl\fP is instanciated. +.PP +\fBParameters:\fP +.RS 4 +\fI__move_init\fP move initialisation +.br +\fI__next_move\fP neighborhood explorer +.br +\fI__incr_eval\fP efficient evaluation +.br +\fI__tabu_list\fP tabu list +.br +\fI__aspir_crit\fP aspiration criterion +.br +\fI__cont\fP stop criterion +.br +\fI__full_eval\fP full evaluation function +.RE +.PP + +.PP +Definition at line 59 of file moTS.h. +.PP +References moTS< M >::first_time, and moTS< M >::mutex. +.SS "template \fBmoTS\fP< M >::\fBmoTS\fP (\fBmoMoveExpl\fP< M > & __move_expl, \fBmoSolContinue\fP< \fBEOT\fP > & __cont, \fBeoEvalFunc\fP< \fBEOT\fP > & __full_eval)\fC [inline]\fP" +.PP +Constructor with less parameters. +.PP +The explorer is given in the parameters. +.PP +\fBParameters:\fP +.RS 4 +\fI__move_expl\fP the explorer (generally different that a \fBmoTSMoveLoopExpl\fP) +.br +\fI__cont\fP stop criterion +.br +\fI__full_eval\fP full evaluation function +.RE +.PP + +.PP +Definition at line 81 of file moTS.h. +.PP +References moTS< M >::first_time, and moTS< M >::mutex. +.SH "Member Function Documentation" +.PP +.SS "template bool \fBmoTS\fP< M >::operator() (\fBEOT\fP & __sol)\fC [inline, virtual]\fP" +.PP +Function which launchs the Tabu Search. +.PP +Algorithm of the tabu search. As a \fBmoSA\fP or a \fBmoHC\fP, it can be used for HYBRIDATION in an evolutionary algorithm. For security a lock (pthread_mutex_t) is closed during the algorithm. +.PP +\fBParameters:\fP +.RS 4 +\fI__sol\fP a solution to improve. +.RE +.PP +\fBReturns:\fP +.RS 4 +TRUE. +.RE +.PP + +.PP +Implements \fBeoUF< M::EOType &, bool >\fP. +.PP +Definition at line 104 of file moTS.h. +.PP +References moTS< M >::cont, moTS< M >::full_eval, moTS< M >::move_expl, and moTS< M >::mutex. + +.SH "Author" +.PP +Generated automatically by Doxygen for PARADISEO-MO from the source code. diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moTSMoveLoopExpl.3 b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moTSMoveLoopExpl.3 new file mode 100644 index 000000000..8d7343334 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moTSMoveLoopExpl.3 @@ -0,0 +1,125 @@ +.TH "moTSMoveLoopExpl" 3 "26 Jun 2007" "Version 0.1" "PARADISEO-MO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moTSMoveLoopExpl \- Explorer for a Tabu Search algorithm. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBmoMoveLoopExpl< M >< M >\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBmoTSMoveLoopExpl\fP (\fBmoMoveInit\fP< M > &__move_init, \fBmoNextMove\fP< M > &__next_move, \fBmoMoveIncrEval\fP< M > &__incr_eval, \fBmoTabuList\fP< M > &__tabu_list, \fBmoAspirCrit\fP< M > &__aspir_crit)" +.br +.RI "\fIConstructor. \fP" +.ti -1c +.RI "void \fBoperator()\fP (const \fBEOT\fP &__old_sol, \fBEOT\fP &__new_sol)" +.br +.RI "\fIProcedure which lauches the exploration. \fP" +.in -1c +.SS "Private Types" + +.in +1c +.ti -1c +.RI "typedef M::EOType \fBEOT\fP" +.br +.RI "\fIAlias for the type. \fP" +.ti -1c +.RI "typedef M::EOType::Fitness \fBFitness\fP" +.br +.RI "\fIAlias for the fitness. \fP" +.in -1c +.SS "Private Attributes" + +.in +1c +.ti -1c +.RI "\fBmoMoveInit\fP< M > & \fBmove_init\fP" +.br +.RI "\fIMove initialisation. \fP" +.ti -1c +.RI "\fBmoNextMove\fP< M > & \fBnext_move\fP" +.br +.RI "\fINeighborhood explorer. \fP" +.ti -1c +.RI "\fBmoMoveIncrEval\fP< M > & \fBincr_eval\fP" +.br +.RI "\fIEfficient evaluation. \fP" +.ti -1c +.RI "\fBmoBestImprSelect\fP< M > \fBmove_select\fP" +.br +.RI "\fIMove selector. \fP" +.ti -1c +.RI "\fBmoTabuList\fP< M > & \fBtabu_list\fP" +.br +.RI "\fITabu list. \fP" +.ti -1c +.RI "\fBmoAspirCrit\fP< M > & \fBaspir_crit\fP" +.br +.RI "\fIAspiration criterion. \fP" +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class moTSMoveLoopExpl< M >" +Explorer for a Tabu Search algorithm. + +It is used by a \fBmoTS\fP. +.PP +Definition at line 30 of file moTSMoveLoopExpl.h. +.SH "Constructor & Destructor Documentation" +.PP +.SS "template \fBmoTSMoveLoopExpl\fP< M >::\fBmoTSMoveLoopExpl\fP (\fBmoMoveInit\fP< M > & __move_init, \fBmoNextMove\fP< M > & __next_move, \fBmoMoveIncrEval\fP< M > & __incr_eval, \fBmoTabuList\fP< M > & __tabu_list, \fBmoAspirCrit\fP< M > & __aspir_crit)\fC [inline]\fP" +.PP +Constructor. +.PP +\fBParameters:\fP +.RS 4 +\fI__move_init\fP move initialisation +.br +\fI__next_move\fP neighborhood explorer +.br +\fI__incr_eval\fP efficient evaluation +.br +\fI__tabu_list\fP tabu list +.br +\fI__aspir_crit\fP aspiration criterion +.RE +.PP + +.PP +Definition at line 49 of file moTSMoveLoopExpl.h. +.PP +References moTSMoveLoopExpl< M >::aspir_crit, and moTSMoveLoopExpl< M >::tabu_list. +.SH "Member Function Documentation" +.PP +.SS "template void \fBmoTSMoveLoopExpl\fP< M >::operator() (const \fBEOT\fP & __old_sol, \fBEOT\fP & __new_sol)\fC [inline, virtual]\fP" +.PP +Procedure which lauches the exploration. +.PP +The exploration continues while the chosen move is not in the tabu list or the aspiration criterion is true. If these 2 conditions are not true, the exploration stops if the move selector update function returns false. +.PP +\fBParameters:\fP +.RS 4 +\fI__old_sol\fP the initial solution +.br +\fI__new_sol\fP the new solution +.RE +.PP + +.PP +Implements \fBeoBF< const M::EOType &, M::EOType &, void >\fP. +.PP +Definition at line 69 of file moTSMoveLoopExpl.h. +.PP +References moTSMoveLoopExpl< M >::aspir_crit, moTSMoveLoopExpl< M >::incr_eval, moTSMoveLoopExpl< M >::move_init, moTSMoveLoopExpl< M >::move_select, moTSMoveLoopExpl< M >::next_move, and moTSMoveLoopExpl< M >::tabu_list. + +.SH "Author" +.PP +Generated automatically by Doxygen for PARADISEO-MO from the source code. diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moTabuList.3 b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moTabuList.3 new file mode 100644 index 000000000..fa838d4df --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/man/man3/moTabuList.3 @@ -0,0 +1,85 @@ +.TH "moTabuList" 3 "26 Jun 2007" "Version 0.1" "PARADISEO-MO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moTabuList \- Class describing a tabu list that a \fBmoTS\fP uses. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBeoBF< const M &, const M::EOType &, bool >\fP. +.PP +Inherited by \fBmoSimpleMoveTabuList< M >\fP, and \fBmoSimpleSolutionTabuList< M >\fP. +.PP +.SS "Public Types" + +.in +1c +.ti -1c +.RI "typedef M::EOType \fBEOT\fP" +.br +.RI "\fIAlias for the type. \fP" +.in -1c +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "virtual void \fBadd\fP (const M &__move, const \fBEOT\fP &__sol)=0" +.br +.RI "\fIProcedure to add a move in the tabu list. \fP" +.ti -1c +.RI "virtual void \fBupdate\fP ()=0" +.br +.RI "\fIProcedure that updates the tabu list content. \fP" +.ti -1c +.RI "virtual void \fBinit\fP ()=0" +.br +.RI "\fIProcedure which initialises the tabu list. \fP" +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class moTabuList< M >" +Class describing a tabu list that a \fBmoTS\fP uses. + +It is only a description, does nothing... A new object that herits from this class has to be defined in order to be used in a \fBmoTS\fP. +.PP +Definition at line 22 of file moTabuList.h. +.SH "Member Function Documentation" +.PP +.SS "template virtual void \fBmoTabuList\fP< M >::add (const M & __move, const \fBEOT\fP & __sol)\fC [pure virtual]\fP" +.PP +Procedure to add a move in the tabu list. +.PP +The two parameters have not to be modified so they are constant parameters. +.PP +\fBParameters:\fP +.RS 4 +\fI__move\fP a new tabu move. +.br +\fI__sol\fP the origianl solution associated to this move. +.RE +.PP + +.PP +Implemented in \fBmoSimpleMoveTabuList< M >\fP, and \fBmoSimpleSolutionTabuList< M >\fP. +.SS "template virtual void \fBmoTabuList\fP< M >::update ()\fC [pure virtual]\fP" +.PP +Procedure that updates the tabu list content. +.PP +Generally, a counter associated to each saved move is decreased by one. +.PP +Implemented in \fBmoSimpleMoveTabuList< M >\fP, and \fBmoSimpleSolutionTabuList< M >\fP. +.SS "template virtual void \fBmoTabuList\fP< M >::init ()\fC [pure virtual]\fP" +.PP +Procedure which initialises the tabu list. +.PP +Can be useful if the data structure needs to be allocated before being used. +.PP +Implemented in \fBmoSimpleMoveTabuList< M >\fP, and \fBmoSimpleSolutionTabuList< M >\fP. + +.SH "Author" +.PP +Generated automatically by Doxygen for PARADISEO-MO from the source code. diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/mo.doxytag b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/mo.doxytag new file mode 100644 index 000000000..8769bf31d --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/docs/mo.doxytag @@ -0,0 +1,1082 @@ + + + + main + Welcome to PARADISEO-Moving Objects + main + intro + tutorial + install + design + + + EmptySelection + class_empty_selection.html + + + moAlgo + classmo_algo.html + EOT + eoMonOp< EOT > + + + moAspirCrit + classmo_aspir_crit.html + M + eoBF< const M &, const M::EOType::Fitness &, bool > + + virtual void + init + classmo_aspir_crit.html + a8ce84510a5ec7c9078381e542c6d140 + ()=0 + + + + moBestImprSelect + classmo_best_impr_select.html + M + moMoveSelect + + M::EOType::Fitness + Fitness + classmo_best_impr_select.html + c4ae17435221fb0a8e8acd285210cfcb + + + + void + init + classmo_best_impr_select.html + 2d2abf9aa17dc77cbb4f41810ab7b956 + (const Fitness &__fit) + + + bool + update + classmo_best_impr_select.html + d10e3e6f8a0277731e95ef506d064d6d + (const M &__move, const Fitness &__fit) + + + void + operator() + classmo_best_impr_select.html + 169773d4d127acd782cf379f758222da + (M &__move, Fitness &__fit) + + + bool + first_time + classmo_best_impr_select.html + 352b14d206b0772eb9f40efb7beb0f13 + + + + M + best_move + classmo_best_impr_select.html + bd86f70519f954c07ff0d8a2a3a8ff6a + + + + Fitness + best_fit + classmo_best_impr_select.html + dcac897424b5805f146bb1dbb429f2fe + + + + + moCoolingSchedule + classmo_cooling_schedule.html + eoUF< double &, bool > + + + moExponentialCoolingSchedule + classmo_exponential_cooling_schedule.html + moCoolingSchedule + + + moExponentialCoolingSchedule + classmo_exponential_cooling_schedule.html + b01930c1051c0940666c6325bfd036bc + (double __threshold, double __ratio) + + + bool + operator() + classmo_exponential_cooling_schedule.html + 00642b03453b51612a10fcf2280543db + (double &__temp) + + + double + threshold + classmo_exponential_cooling_schedule.html + 8d4327c0bb33b7121a322279eea97f84 + + + + double + ratio + classmo_exponential_cooling_schedule.html + e8f3f87417c1c7253efb938a740846fa + + + + + moFirstImprSelect + classmo_first_impr_select.html + M + moMoveSelect + + M::EOType::Fitness + Fitness + classmo_first_impr_select.html + 64763ce3e6d2873266624382b407fa5a + + + + virtual void + init + classmo_first_impr_select.html + 4c5ce18ede46247a439c68f6954a4055 + (const Fitness &__fit) + + + bool + update + classmo_first_impr_select.html + 7ba0882728daedc75c249647c070ccf0 + (const M &__move, const typename M::EOType::Fitness &__fit) + + + void + operator() + classmo_first_impr_select.html + 3be12cf4cbaed00df7c4fa735b2c0a95 + (M &__move, Fitness &__fit) + + + bool + valid + classmo_first_impr_select.html + a99c0586ba07449234705c17a258d58c + + + + M + best_move + classmo_first_impr_select.html + dfed419a608dd7c41f07fa1f1279cb8c + + + + Fitness + init_fit + classmo_first_impr_select.html + ce7ba63e8cc3a9164f4e546477e98ca8 + + + + Fitness + best_fit + classmo_first_impr_select.html + e1190347b76ec6fe717be32354b4a9a9 + + + + + moGenSolContinue + classmo_gen_sol_continue.html + EOT + moSolContinue + + + moGenSolContinue + classmo_gen_sol_continue.html + b56e890f1caa3f98e161c6512b59c95b + (unsigned int __maxNumGen) + + + bool + operator() + classmo_gen_sol_continue.html + 457257cd73b474d6f7783d84d02c2e61 + (const EOT &__sol) + + + void + init + classmo_gen_sol_continue.html + 6c5db8182157584b56507cc9075602d4 + () + + + unsigned int + maxNumGen + classmo_gen_sol_continue.html + 30b9861e090578bdfa2374806600987a + + + + unsigned int + numGen + classmo_gen_sol_continue.html + 630d9736a3a2c952540cdc211764258c + + + + + moHC + classmo_h_c.html + M + moAlgo< M::EOType > + + + moHC + classmo_h_c.html + 6cafe093f86a80c225827884cb9dc5b7 + (moMoveInit< M > &__move_init, moNextMove< M > &__next_move, moMoveIncrEval< M > &__incr_eval, moMoveSelect< M > &__move_select, eoEvalFunc< EOT > &__full_eval) + + + + moHC + classmo_h_c.html + 45f27309792e584a27fa6dcb86ccda65 + (moMoveExpl< M > &__move_expl, eoEvalFunc< EOT > &__full_eval) + + + bool + operator() + classmo_h_c.html + ed4e273c420efa6386c5975a696a5010 + (EOT &__sol) + + + M::EOType + EOT + classmo_h_c.html + d219296ede03c679646bce2fe8ff96cb + + + + EOT::Fitness + Fitness + classmo_h_c.html + 56487c97a7cf0c423cc879d1bbd45027 + + + + moMoveExpl< M > & + move_expl + classmo_h_c.html + f6bfb4553fb699f1e08f7d9c37d06103 + + + + eoEvalFunc< EOT > & + full_eval + classmo_h_c.html + 4b0d5cc70fc3d83f59a48b2bdea65736 + + + + + moHCMoveLoopExpl + classmo_h_c_move_loop_expl.html + M + moMoveLoopExpl + + + moHCMoveLoopExpl + classmo_h_c_move_loop_expl.html + 11410d648d79746253e9dc249c4ec7b5 + (moMoveInit< M > &__move_init, moNextMove< M > &__next_move, moMoveIncrEval< M > &__incr_eval, moMoveSelect< M > &__move_select) + + + void + operator() + classmo_h_c_move_loop_expl.html + f48d5379caac7f6a165e9fe8840e6ccb + (const EOT &__old_sol, EOT &__new_sol) + + + M::EOType + EOT + classmo_h_c_move_loop_expl.html + 077befd4106c201eafd3ea22bcea2fe9 + + + + M::EOType::Fitness + Fitness + classmo_h_c_move_loop_expl.html + f24871224316d5549b9013a2d27ab465 + + + + moMoveInit< M > & + move_init + classmo_h_c_move_loop_expl.html + 6776fc51331c1b452d026b92448b4ffc + + + + moNextMove< M > & + next_move + classmo_h_c_move_loop_expl.html + f716c5271e0eba9275c585dc52768443 + + + + moMoveIncrEval< M > & + incr_eval + classmo_h_c_move_loop_expl.html + 84a8fccba05ab30414281469bc8ee779 + + + + moMoveSelect< M > & + move_select + classmo_h_c_move_loop_expl.html + 13bcd1322b2b97fd665be2f60c532fbb + + + + + moImprBestFitAspirCrit + classmo_impr_best_fit_aspir_crit.html + M + moAspirCrit + + M::EOType::Fitness + Fitness + classmo_impr_best_fit_aspir_crit.html + 0bc1a8c9af99781e662570c04750cca8 + + + + + moImprBestFitAspirCrit + classmo_impr_best_fit_aspir_crit.html + e2c697a5cf3a7696e38bb52b6694a340 + () + + + void + init + classmo_impr_best_fit_aspir_crit.html + ffa451a14ff4ea86fb8bd9fdbc348630 + () + + + bool + operator() + classmo_impr_best_fit_aspir_crit.html + 53f62fb56dcae3051a741f1fddb0204b + (const M &__move, const Fitness &__fit) + + + Fitness + best_fit + classmo_impr_best_fit_aspir_crit.html + 9e52383f0af8013b4aff0942325e1bf3 + + + + bool + first_time + classmo_impr_best_fit_aspir_crit.html + 2d5226c7dd661b33011402dbbbe78265 + + + + + moItRandNextMove + classmo_it_rand_next_move.html + M + moNextMove + + + moItRandNextMove + classmo_it_rand_next_move.html + 2b61b3713d482ecf71db8d941551ff7a + (moRandMove< M > &__rand_move, unsigned int __max_iter) + + + bool + operator() + classmo_it_rand_next_move.html + 92a2fbbc02a20853b9a309e99018a102 + (M &__move, const EOT &__sol) + + + M::EOType + EOT + classmo_it_rand_next_move.html + ee666007fc494bf4a5f0cd065e5671cf + + + + moRandMove< M > & + rand_move + classmo_it_rand_next_move.html + ef9410ec5e7dfa7f002e05967931c459 + + + + unsigned int + max_iter + classmo_it_rand_next_move.html + dc67fa86677d7a4f982de8d8b1eba033 + + + + unsigned int + num_iter + classmo_it_rand_next_move.html + f43494b13931d8f76b5d9d5d6469e91b + + + + + moLinearCoolingSchedule + classmo_linear_cooling_schedule.html + moCoolingSchedule + + + moLinearCoolingSchedule + classmo_linear_cooling_schedule.html + 2fdde7b1520d5a41251627e81cc9c13d + (double __threshold, double __quantity) + + + bool + operator() + classmo_linear_cooling_schedule.html + 814b109fdfd9426a92a5444b05014da3 + (double &__temp) + + + double + threshold + classmo_linear_cooling_schedule.html + e7f539f986801ea71392c4a55ba08a76 + + + + double + quantity + classmo_linear_cooling_schedule.html + 6159dc39ceda89b23ffdab3d6ce8d8ed + + + + + moLSCheckPoint + classmo_l_s_check_point.html + M + eoBF< const M &, const M::EOType &, void > + + void + operator() + classmo_l_s_check_point.html + 2f9c1250279e3f49ec77a66c10029f1e + (const M &__move, const typename M::EOType &__sol) + + + void + add + classmo_l_s_check_point.html + 66be5fe2944bcdd752f1e58105e969a6 + (eoBF< const M &, const typename M::EOType &, void > &__f) + + + std::vector< eoBF< const M &, const typename M::EOType &, void > * > + func + classmo_l_s_check_point.html + ff2a31ee5689a804bd9a572c51a36ca4 + + + + + moMove + classmo_move.html + EOT + eoUF< EOT &, void > + + EOT + EOType + classmo_move.html + 7fb853a91ba1319530529e515380bbba + + + + + moMoveExpl + classmo_move_expl.html + M + eoBF< const M::EOType &, M::EOType &, void > + + + moMoveIncrEval + classmo_move_incr_eval.html + M + eoBF< const M &, const M::EOType &, M::EOType::Fitness > + + + moMoveInit + classmo_move_init.html + M + eoBF< M &, const M::EOType &, void > + + + moMoveLoopExpl + classmo_move_loop_expl.html + M + moMoveExpl + + + moMoveSelect + classmo_move_select.html + M + eoBF< M &, M::EOType::Fitness &, void > + + M::EOType::Fitness + Fitness + classmo_move_select.html + 8148ccc0e6fbd209c3fe6829559895c8 + + + + virtual void + init + classmo_move_select.html + bca4c43f13d26eca7163aeb272a4a52e + (const Fitness &__fit)=0 + + + virtual bool + update + classmo_move_select.html + 7c157b6e64fd417acf6e900059204eb1 + (const M &__move, const Fitness &__fit)=0 + + + + moNextMove + classmo_next_move.html + M + eoBF< M &, const M::EOType &, bool > + + + moNoAspirCrit + classmo_no_aspir_crit.html + M + moAspirCrit + + bool + operator() + classmo_no_aspir_crit.html + 8a7180a8d5c25bfb6727d0b59551b0f8 + (const M &__move, const typename M::EOType::Fitness &__sol) + + + void + init + classmo_no_aspir_crit.html + f3a286fc4c2d36bd390ba9a3074f3037 + () + + + + moRandImprSelect + classmo_rand_impr_select.html + M + moMoveSelect + + M::EOType::Fitness + Fitness + classmo_rand_impr_select.html + 3bff2fdb963297430543c82ffb567a5c + + + + void + init + classmo_rand_impr_select.html + a19726a1509cff874801615d63a3b5d9 + (const Fitness &__fit) + + + bool + update + classmo_rand_impr_select.html + 60ae5548560caee7e28d5ed2446186c9 + (const M &__move, const Fitness &__fit) + + + void + operator() + classmo_rand_impr_select.html + 5ee57f77a450c0a9ce50bfccf3ad2a55 + (M &__move, Fitness &__fit) + + + Fitness + init_fit + classmo_rand_impr_select.html + d153c277a0a2ea95ac484210d445b40e + + + + std::vector< Fitness > + vect_better_fit + classmo_rand_impr_select.html + 05c7c3b858e8a25632f2f5c86b0c97a3 + + + + std::vector< M > + vect_better_moves + classmo_rand_impr_select.html + 2ace12bd179144fa71d56324694201f5 + + + + + moRandMove + classmo_rand_move.html + M + eoUF< M &, void > + + + moSA + classmo_s_a.html + M + moAlgo< M::EOType > + + + moSA + classmo_s_a.html + 01f6a44483e5a7abbce33eb480b6a9b9 + (moRandMove< M > &__move_rand, moMoveIncrEval< M > &__incr_eval, moSolContinue< EOT > &__cont, double __init_temp, moCoolingSchedule &__cool_sched, eoEvalFunc< EOT > &__full_eval) + + + bool + operator() + classmo_s_a.html + 0e4c54b57bc13fcbd4763883b8f719e5 + (EOT &__sol) + + + M::EOType + EOT + classmo_s_a.html + d5d64a8797bdedc7b3af7893aded0bd5 + + + + EOT::Fitness + Fitness + classmo_s_a.html + 97f1a40d5ab5a0b3f878d0347b34804b + + + + moRandMove< M > & + move_rand + classmo_s_a.html + 71c49935b63a202d25888a5f86121fec + + + + moMoveIncrEval< M > & + incr_eval + classmo_s_a.html + 4c3be32e9832e465b24e6d33559356bc + + + + moSolContinue< EOT > & + cont + classmo_s_a.html + 54484c8a514866ea496e0058c2e09716 + + + + double + init_temp + classmo_s_a.html + f1af7636b52aa5f6b381f8187b667bd4 + + + + moCoolingSchedule & + cool_sched + classmo_s_a.html + 11c7d0cab649b7d680dd85bb74cb4ff6 + + + + eoEvalFunc< EOT > & + full_eval + classmo_s_a.html + bcd6a940046f23dd741444c0b85edf2c + + + + + moSimpleMoveTabuList + classmo_simple_move_tabu_list.html + M + moTabuList + + M::EOType + EOT + classmo_simple_move_tabu_list.html + 91286ff3ba6b1e9e1db9e4fdade2edb7 + + + + + moSimpleMoveTabuList + classmo_simple_move_tabu_list.html + 12798ce0bc3a2ee031fb301290ed6d79 + (unsigned int __size) + + + bool + operator() + classmo_simple_move_tabu_list.html + bb7fe9da28617f56734af71c42c8265a + (const M &__move, const EOT &__sol) + + + void + add + classmo_simple_move_tabu_list.html + 43c979a9ec876c5e5b591b1c422395ef + (const M &__move, const EOT &__sol) + + + void + update + classmo_simple_move_tabu_list.html + 96cffc8118456ed762b07b9fc0e0679f + () + + + void + init + classmo_simple_move_tabu_list.html + b91ae9971be30769757d1ad92c6009dc + () + + + void + removeMove + classmo_simple_move_tabu_list.html + a3fa2bd19e09f1541878fa28e867d20f + (const M &__move) + + + unsigned int + maxSize + classmo_simple_move_tabu_list.html + e48848e9e5c9c8435475cbdf21658e23 + + + + unsigned int + currentSize + classmo_simple_move_tabu_list.html + f1f9524e62d48f3688aa58a6055ccceb + + + + std::list< M > + tabuList + classmo_simple_move_tabu_list.html + d91bc838361524720616b44eda9b2c3a + + + + + moSimpleSolutionTabuList + classmo_simple_solution_tabu_list.html + M + moTabuList + + M::EOType + EOT + classmo_simple_solution_tabu_list.html + 881060871a6b49e5e8554c5df85176d9 + + + + + moSimpleSolutionTabuList + classmo_simple_solution_tabu_list.html + 8f8ce82b49ff49efbd934cedd3e34178 + (unsigned int __size) + + + bool + operator() + classmo_simple_solution_tabu_list.html + e1f1cf258b55554d8be88fb5780a0047 + (const M &__move, const EOT &__sol) + + + void + add + classmo_simple_solution_tabu_list.html + fd6b3a1764121169650c969bba895615 + (const M &__move, const EOT &__sol) + + + void + update + classmo_simple_solution_tabu_list.html + 91b8b01dba7ffea8b63765d931e56f56 + () + + + void + init + classmo_simple_solution_tabu_list.html + d5645c39fec71a6110a2cbccbb08b816 + () + + + void + removeSolution + classmo_simple_solution_tabu_list.html + 7847a48f33c15e31298f3e715d754560 + (const EOT &__sol) + + + unsigned int + maxSize + classmo_simple_solution_tabu_list.html + 662e1f65fadff234692be009a2440845 + + + + unsigned int + currentSize + classmo_simple_solution_tabu_list.html + 2aaf6e882d10495adddae94cb7a48fbf + + + + std::list< EOT > + tabuList + classmo_simple_solution_tabu_list.html + 75df9cd683528d3722d02bac407b710b + + + + + moSolContinue + classmo_sol_continue.html + EOT + eoUF< const EOT &, bool > + + virtual void + init + classmo_sol_continue.html + 064dc966a210f4ffb9515be3f03ca4c7 + ()=0 + + + + moTabuList + classmo_tabu_list.html + M + eoBF< const M &, const M::EOType &, bool > + + M::EOType + EOT + classmo_tabu_list.html + e219715cc3fdd5626764bc50ce6357df + + + + virtual void + add + classmo_tabu_list.html + d279d72cb486d812da1ad3d24a69c286 + (const M &__move, const EOT &__sol)=0 + + + virtual void + update + classmo_tabu_list.html + a2e5d1132f064093c8ed57046405f5ca + ()=0 + + + virtual void + init + classmo_tabu_list.html + 0a06c459d56e8e2b408a8f3c6aec4e57 + ()=0 + + + + moTS + classmo_t_s.html + M + moAlgo< M::EOType > + + + moTS + classmo_t_s.html + 2be23f4524733ee6f37b71310d76407e + (moMoveInit< M > &__move_init, moNextMove< M > &__next_move, moMoveIncrEval< M > &__incr_eval, moTabuList< M > &__tabu_list, moAspirCrit< M > &__aspir_crit, moSolContinue< EOT > &__cont, eoEvalFunc< EOT > &__full_eval) + + + + moTS + classmo_t_s.html + 508e675c4232cf2ca06dded931c90bab + (moMoveExpl< M > &__move_expl, moSolContinue< EOT > &__cont, eoEvalFunc< EOT > &__full_eval) + + + bool + operator() + classmo_t_s.html + 94d25a76fe1bc9ef0bbd0358ff55aceb + (EOT &__sol) + + + M::EOType + EOT + classmo_t_s.html + 90d19d468c12ab5bd796948ce1ce79b1 + + + + EOT::Fitness + Fitness + classmo_t_s.html + aa0eefbb17111422e495d1255f876fca + + + + moMoveExpl< M > & + move_expl + classmo_t_s.html + 06914ddc90ca96e9158c8dbe182a7865 + + + + moSolContinue< EOT > & + cont + classmo_t_s.html + 969371cd2202f3d29cbb426f57ac7d3a + + + + eoEvalFunc< EOT > & + full_eval + classmo_t_s.html + fb67eddae5d0bfca4ed881995523231e + + + + static bool + first_time + classmo_t_s.html + 564bc1969548ccbd9bb7e76f92898de0 + + + + static pthread_mutex_t + mutex + classmo_t_s.html + 688f9ba42eb33cae6431f4f4eb65b9e9 + + + + + moTSMoveLoopExpl + classmo_t_s_move_loop_expl.html + M + moMoveLoopExpl + + + moTSMoveLoopExpl + classmo_t_s_move_loop_expl.html + 43306dae9df150a8d9dc0dec9cd6a381 + (moMoveInit< M > &__move_init, moNextMove< M > &__next_move, moMoveIncrEval< M > &__incr_eval, moTabuList< M > &__tabu_list, moAspirCrit< M > &__aspir_crit) + + + void + operator() + classmo_t_s_move_loop_expl.html + f601bbd0ccc41d6fbe3df9fcd87ad9e7 + (const EOT &__old_sol, EOT &__new_sol) + + + M::EOType + EOT + classmo_t_s_move_loop_expl.html + 47f42225e2ed096374b818bdb848a527 + + + + M::EOType::Fitness + Fitness + classmo_t_s_move_loop_expl.html + a1ba36c937b195ca2f7d1a24adaa7018 + + + + moMoveInit< M > & + move_init + classmo_t_s_move_loop_expl.html + 6b23f99648902fb72ed17a4a6fa4e400 + + + + moNextMove< M > & + next_move + classmo_t_s_move_loop_expl.html + aeeff6666d26ff5c67acd9c153a5ae49 + + + + moMoveIncrEval< M > & + incr_eval + classmo_t_s_move_loop_expl.html + ee4443fc8e45d840697619678628c26c + + + + moBestImprSelect< M > + move_select + classmo_t_s_move_loop_expl.html + 35a3f3035fb8df875c281d9838904bf1 + + + + moTabuList< M > & + tabu_list + classmo_t_s_move_loop_expl.html + 0e5988a940ba218e87c53b7e56d79790 + + + + moAspirCrit< M > & + aspir_crit + classmo_t_s_move_loop_expl.html + 6786cf5422d17cbf872b07ae74ca6b0f + + + + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/src/Makefile.am b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/Makefile.am new file mode 100755 index 000000000..ae1e51b3c --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/Makefile.am @@ -0,0 +1 @@ +# Nothing to compile ! diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/src/index.h b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/index.h new file mode 100644 index 000000000..10ac58f88 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/index.h @@ -0,0 +1,26 @@ +/** @mainpage Welcome to PARADISEO-Moving Objects + +@section intro Introduction + +MO is an extension of the ANSI-C++ compliant evolutionary computation library EO. +
+It contains classes for almost any kind of one solution based heuristics. + +@section tutorial Tutorial + + +@section install Installation + +The installation procedure of the package is detailed in the +README file in the top-directory of the source-tree. + +@section design Overall Design + +*/ + + +// coding: iso-8859-1 +// mode: C++ +// c-file-style: "Stroustrup" +// fill-column: 80 +// End: diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/src/mo b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/mo new file mode 100755 index 000000000..81c9fea9f --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/mo @@ -0,0 +1,6 @@ +#ifndef __mo +#define __mo + +#include "mo.h" + +#endif diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/src/mo.h b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/mo.h new file mode 100755 index 000000000..58476ce6b --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/mo.h @@ -0,0 +1,46 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "mo.h" + +// (c) OPAC Team, LIFL, 2003-2006 + +/* TEXT LICENCE + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __mo_h +#define __mo_h + +#include "moAlgo.h" +#include "moAspirCrit.h" +#include "moBestImprSelect.h" +#include "moCoolingSchedule.h" +#include "moExponentialCoolingSchedule.h" +#include "moFirstImprSelect.h" +#include "moGenSolContinue.h" +#include "moHC.h" +#include "moHCMoveLoopExpl.h" +#include "moImprBestFitAspirCrit.h" +#include "moItRandNextMove.h" +#include "moLinearCoolingSchedule.h" +#include "moLSCheckPoint.h" +#include "moMoveExpl.h" +#include "moMove.h" +#include "moMoveIncrEval.h" +#include "moMoveInit.h" +#include "moMoveLoopExpl.h" +#include "moMoveSelect.h" +#include "moNextMove.h" +#include "moNoAspirCrit.h" +#include "moRandImprSelect.h" +#include "moRandMove.h" +#include "moSA.h" +#include "moSimpleMoveTabuList.h" +#include "moSimpleSolutionTabuList.h" +#include "moSolContinue.h" +#include "moTabuList.h" +#include "moTS.h" +#include "moTSMoveLoopExpl.h" + +#endif diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moAlgo.h b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moAlgo.h new file mode 100755 index 000000000..42bd849a9 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moAlgo.h @@ -0,0 +1,26 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "moAlgo.h" + +// (c) OPAC Team, LIFL, 2003-2006 + +/* TEXT LICENCE + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __moAlgo_h +#define __moAlgo_h + +#include + +//! Description of an algorithm of the paradiseo-mo library +/*! + moHC, moTS and moSA are 3 examples of algorithm of the paradiseo-mo library. + */ +template < class EOT > class moAlgo:public eoMonOp < EOT > +{ + +}; + +#endif diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moAspirCrit.h b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moAspirCrit.h new file mode 100755 index 000000000..99c92727b --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moAspirCrit.h @@ -0,0 +1,37 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "moAspirCrit.h" + +// (c) OPAC Team, LIFL, 2003-2006 + +/* TEXT LICENCE + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __moAspirCrit_h +#define __moAspirCrit_h + +#include + +//! Description of the conditions in which a tabu move could be accepted +/*! + It is only a description... An object that herits from this class is needed to be used in a moTS. + See moNoAspriCrit for example. + */ +template < class M > class moAspirCrit:public eoBF < const M &, const typename + M::EOType::Fitness &, + bool > +{ + +public: + //! Procedure which initialises all that needs a aspiration criterion. + /*! + It can be possible that this procedure do nothing... + */ + virtual void + init () = 0; + +}; + +#endif diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moBestImprSelect.h b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moBestImprSelect.h new file mode 100755 index 000000000..30c846236 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moBestImprSelect.h @@ -0,0 +1,93 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "moBestImprSelect.h" + +// (c) OPAC Team, LIFL, 2003-2006 + +/* LICENCE TEXT + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __moBestImprSelect_h +#define __moBestImprSelect_h + +#include "moMoveSelect.h" + +//! One of the possible moMoveSelect. +/*! + All neighbors are considered, and the movement + which enables the best improvement is selected. +*/ +template < class M > class moBestImprSelect:public moMoveSelect < M > +{ + +public: + + //! Alias for the fitness. + typedef typename M::EOType::Fitness Fitness; + + //! Procedure which initialise the exploration + void init (const Fitness & __fit) + { + + first_time = true; + } + + + //!Function that indicates if the current move has not improved the fitness. + /*! + If the given fitness enables an improvment, + the move (moMove) and the fitness linked to this move are saved. + + \param __move a move. + \param __fit a fitness linked to the move. + \return TRUE if the move does not improve the fitness. + */ + bool update (const M & __move, const Fitness & __fit) + { + + if (first_time || __fit > best_fit) + { + + best_fit = __fit; + best_move = __move; + + first_time = false; + } + + return true; + } + + //! Procedure which saved the best move and fitness. + /*! + \param __move the current move (result of the procedure). + \param __fit the current fitness (result of the procedure). + \throws EmptySelection if no move has improved the fitness. + */ + void operator () (M & __move, Fitness & __fit) throw (EmptySelection) + { + + if (!first_time) + { + __move = best_move; + __fit = best_fit; + } + else + throw EmptySelection (); + } + +private: + + //! Allowing to know if at least one move has been generated. + bool first_time; + + //! The best move. + M best_move; + + //! The best fitness. + Fitness best_fit; + +}; + +#endif diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moCoolingSchedule.h b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moCoolingSchedule.h new file mode 100644 index 000000000..c73b25c01 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moCoolingSchedule.h @@ -0,0 +1,27 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "moCoolingSchedule.h" + +// (c) OPAC Team, LIFL, 2003-2007 + +/* LICENCE TEXT + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __moCoolingSchedule_h +#define __moCoolingSchedule_h + +#include + +//! This class gives the description of a cooling schedule. +/*! + It is only a description... An object that herits from this class is needed to be used in a moSA. + See moExponentialCoolingSchedule or moLinearCoolingSchedule for example. +*/ +class moCoolingSchedule:public eoUF < double &, bool > +{ + +}; + +#endif diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moExponentialCoolingSchedule.h b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moExponentialCoolingSchedule.h new file mode 100644 index 000000000..e67614951 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moExponentialCoolingSchedule.h @@ -0,0 +1,55 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "moExponentialCoolingSchedule.h" + +// (c) OPAC Team, LIFL, 2003-2007 + +/* LICENCE TEXT + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __moExponentialCoolingSchedule_h +#define __moExponentialCoolingSchedule_h + +#include "moCoolingSchedule.h" + +//! One of the possible moCoolingSchedule +/*! + An other very simple cooling schedule, the temperature decrease according to a ratio while + the temperature is greater than a given threshold. + */ +class moExponentialCoolingSchedule: public moCoolingSchedule +{ + +public: + //! Simple constructor + /*! + \param __threshold the threshold. + \param __ratio the ratio used to descrease the temperature. + */ + moExponentialCoolingSchedule (double __threshold, double __ratio):threshold (__threshold), ratio (__ratio) + {} + + //! Function which proceeds to the cooling. + /*! + It decreases the temperature and indicates if it is greater than the threshold. + + \param __temp the current temperature. + \return if the new temperature (current temperature * ratio) is greater than the threshold. + */ + bool operator() (double &__temp) + { + return (__temp *= ratio) > threshold; + } + +private: + + //! The temperature threhold. + double threshold; + + //! The decreasing factor of the temperature. + double ratio; +}; + +#endif diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moFirstImprSelect.h b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moFirstImprSelect.h new file mode 100755 index 000000000..6656d5a95 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moFirstImprSelect.h @@ -0,0 +1,104 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "moFirstImprSelect.h" + +// (c) OPAC Team, LIFL, 2003-2006 + +/* LICENCE TEXT + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __moFirstImprSelect_h +#define __moFirstImprSelect_h + +#include "moMoveSelect.h" + +//! One possible moMoveSelect. +/*! + The neighborhood is explored until + a move enables an improvment of the + current solution. +*/ +template < class M > class moFirstImprSelect:public moMoveSelect < M > +{ + +public: + + //! Alias for the fitness. + typedef typename M::EOType::Fitness Fitness; + + //! Procedure which initialise the exploration. + /*! + It save the current fitness as the initial value for the fitness. + */ + virtual void init (const Fitness & __fit) + { + + valid = false; + init_fit = __fit; + } + + + //!Function that indicates if the current move has not improved the fitness. + /*! + If the given fitness enables an improvment, + the move (moMove) should be applied to the current solution. + + \param __move a move. + \param __fit a fitness linked to the move. + \return TRUE if the move does not improve the fitness. + */ + bool update (const M & __move, const typename M::EOType::Fitness & __fit) + { + + if (__fit > init_fit) + { + + best_fit = __fit; + best_move = __move; + valid = true; + + return false; + } + else + { + return true; + } + } + + //! Procedure which saved the best move and fitness. + /*! + \param __move the current move (result of the procedure). + \param __fit the current fitness (result of the procedure). + \throws EmptySelection if no move has improved the fitness. + */ + void operator () (M & __move, Fitness & __fit) throw (EmptySelection) + { + + if (valid) + { + __move = best_move; + __fit = best_fit; + } + else + throw EmptySelection (); + } + +private: + + //! Allow to know if at least one move has improved the solution. + bool valid; + + //! Best stored movement. + M best_move; + + //! Initial fitness. + Fitness init_fit; + + //! Best stored fitness. + Fitness best_fit; + +}; + +#endif diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moGenSolContinue.h b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moGenSolContinue.h new file mode 100755 index 000000000..2bd8ba4e5 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moGenSolContinue.h @@ -0,0 +1,69 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "eoGenSolContinue.h" + +// (c) OPAC Team, LIFL, 2003-2006 + +/* LICENCE TEXT + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __moGenSolContinue_h +#define __moGenSolContinue_h + +#include "moSolContinue.h" + +//! One possible stop criterion for a solution-based heuristic. +/*! + The stop criterion corresponds to a maximum number of iteration. + */ +template < class EOT > class moGenSolContinue:public moSolContinue < EOT > +{ + +public: + + //! Simple constructor. + /*! + \param __maxNumGen the maximum number of generation. + */ + moGenSolContinue (unsigned int __maxNumGen):maxNumGen (__maxNumGen), numGen (0) + { + + } + + //! Function that activates the stop criterion. + /*! + Increments the counter and returns TRUE if the + current number of iteration is lower than the given + maximum number of iterations. + + \param __sol the current solution. + \return TRUE or FALSE according to the current generation number. + */ + bool operator () (const EOT & __sol) + { + + return (++numGen < maxNumGen); + } + + //! Procedure which allows to initialise the generation counter. + /*! + It can also be used to reset the iteration counter. + */ + void init () + { + + numGen = 0; + } + +private: + + //! Iteration maximum number. + unsigned int maxNumGen; + + //! Iteration current number. + unsigned int numGen; +}; + +#endif diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moHC.h b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moHC.h new file mode 100755 index 000000000..30d82ed00 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moHC.h @@ -0,0 +1,133 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "moHC.h" + +// (c) OPAC Team, LIFL, 2003-2006 + +/* LICENCE TEXT + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __moHC_h +#define __moHC_h + +#include +#include + +#include "moAlgo.h" +#include "moMoveExpl.h" +#include "moHCMoveLoopExpl.h" + +//! Hill Climbing (HC) +/*! + Class which describes the algorithm for a hill climbing. + */ +template < class M > class moHC:public moAlgo < typename M::EOType > +{ + + //! Alias for the type. + typedef + typename + M::EOType + EOT; + + //! Alias for the fitness. + typedef + typename + EOT::Fitness + Fitness; + +public: + + //! Full constructor. + /*! + All the boxes are given in order the HC to use a moHCMoveLoopExpl. + + \param __move_init a move initialiser. + \param __next_move a neighborhood explorer. + \param __incr_eval a (generally) efficient evaluation function. + \param __move_select a move selector. + \param __full_eval a full evaluation function. + */ +moHC (moMoveInit < M > &__move_init, moNextMove < M > &__next_move, moMoveIncrEval < M > &__incr_eval, moMoveSelect < M > &__move_select, eoEvalFunc < EOT > &__full_eval):move_expl (*new moHCMoveLoopExpl < M > + (__move_init, __next_move, __incr_eval, __move_select)), + full_eval (__full_eval) + { + + } + + //! Light constructor. + /*! + This constructor allow to use another moMoveExpl (generally not a moHCMoveLoopExpl). + + \param __move_expl a complete explorer. + \param __full_eval a full evaluation function. + */ +moHC (moMoveExpl < M > &__move_expl, eoEvalFunc < EOT > &__full_eval):move_expl (__move_expl), + full_eval + (__full_eval) + { + + } + + //! Function which launches the HC + /*! + The HC has to improve a current solution. + As the moSA and the mo TS, it can be used for HYBRIDATION in an evolutionnary algorithm. + + \param __sol a current solution to improve. + \return TRUE. + */ + bool operator ()(EOT & __sol) + { + + if (__sol.invalid ()) + { + full_eval (__sol); + } + + EOT new_sol; + + do + { + + new_sol = __sol; + + try + { + + move_expl (__sol, new_sol); + + } + catch (EmptySelection & __ex) + { + + break; + } + + if (new_sol.fitness () > __sol.fitness ()) + { + __sol = new_sol; + } + else + { + break; + } + + } + while (true); + + return true; + } + +private: + + //! Complete exploration of the neighborhood. + moMoveExpl < M > &move_expl; + + //! A full evaluation function. + eoEvalFunc < EOT > &full_eval; +}; + +#endif diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moHCMoveLoopExpl.h b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moHCMoveLoopExpl.h new file mode 100755 index 000000000..f9ff78bea --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moHCMoveLoopExpl.h @@ -0,0 +1,108 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "moHCMoveLoopExpl.h" + +// (c) OPAC Team, LIFL, 2003-2006 + +/* LICENCE TEXT + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __moHCMoveLoopExpl_h +#define __moHCMoveLoopExpl_h + +#include "moMoveLoopExpl.h" + +#include "moMoveInit.h" +#include "moNextMove.h" +#include "moMoveIncrEval.h" +#include "moMoveSelect.h" + +//! Iterative explorer used by a moHC. +template < class M > class moHCMoveLoopExpl:public moMoveLoopExpl < M > +{ + + //! Alias for the type. + typedef typename M::EOType EOT; + + //! Alias for the fitness. + typedef typename M::EOType::Fitness Fitness; + +public: + + //! Constructor. + /*! + All the boxes have to be specified. + + \param __move_init the move initialiser. + \param __next_move the neighborhood explorer. + \param __incr_eval (generally) efficient evaluation function. + \param __move_select the move selector. + */ +moHCMoveLoopExpl (moMoveInit < M > &__move_init, moNextMove < M > &__next_move, moMoveIncrEval < M > &__incr_eval, moMoveSelect < M > &__move_select): + + move_init (__move_init), + next_move (__next_move), + incr_eval (__incr_eval), move_select (__move_select) + { + + } + + //! Procedure which launches the explorer. + /*! + The exploration starts from an old solution and provides a new solution. + + \param __old_sol the current solution. + \param __new_sol the new_sol (result of the procedure). + */ + void operator () (const EOT & __old_sol, EOT & __new_sol) + { + + M move; + + // + move_init (move, __old_sol); /* Restarting the exploration of + of the neighborhood ! */ + + move_select.init (__old_sol.fitness ()); + + while (move_select.update (move, incr_eval (move, __old_sol)) + && next_move (move, __old_sol)); + + try + { + + M best_move; + + Fitness best_move_fit; + + move_select (best_move, best_move_fit); + __new_sol.fitness (best_move_fit); + best_move (__new_sol); + + } + catch (EmptySelection & __ex) + { + + // ? + } + } + +private: + + //! Move initialiser. + moMoveInit < M > &move_init; + + //! Neighborhood explorer. + moNextMove < M > &next_move; + + //! (generally) Efficient evaluation. + moMoveIncrEval < M > &incr_eval; + + //! Move selector. + moMoveSelect < M > &move_select; + +}; + +#endif diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moImprBestFitAspirCrit.h b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moImprBestFitAspirCrit.h new file mode 100755 index 000000000..d0cf06486 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moImprBestFitAspirCrit.h @@ -0,0 +1,84 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "moImprAspirCrit.h" + +// (c) OPAC Team, LIFL, 2003-2006 + +/* LICENCE TEXT + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __moImprBestFitAspirCrit_h +#define __moImprBestFitAspirCrit_h + +#include "moAspirCrit.h" + +//! One of the possible moAspirCrit +/*! + This criterion is satisfied when a given fitness + is the best ever considered. +*/ +template < class M > class moImprBestFitAspirCrit:public moAspirCrit < M > +{ + +public: + + //! Alias for the fitness + typedef typename M::EOType::Fitness Fitness; + + //! Contructor + moImprBestFitAspirCrit () + { + + first_time = true; + } + + //! Initialisation procedure + void init () + { + + first_time = true; + } + + //! Function that indicates if the fit is better that the already saved fit + /*! + The first time, the function only saved the current move and fitness. + + \param __move a move. + \param __fit a fitnes linked to the move. + \return TRUE the first time and if __fit > best_fit, else FALSE. + */ + bool operator () (const M & __move, const Fitness & __fit) + { + + if (first_time) + { + + best_fit = __fit; + first_time = false; + + return true; + } + else if (__fit < best_fit) + return false; + + else + { + + best_fit = __fit; + + return true; + } + } + +private: + + //! Best fitness found until now + Fitness best_fit; + + //! Indicates that a fitness has been already saved or not + bool first_time; +}; + +#endif diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moItRandNextMove.h b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moItRandNextMove.h new file mode 100755 index 000000000..ceacc061a --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moItRandNextMove.h @@ -0,0 +1,84 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "moNextMove.h" + +// (c) OPAC Team, LIFL, 2003-2006 + +/* LICENCE TEXT + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __moItRandNextMove_h +#define __moItRandNextMove_h + +#include "moNextMove.h" +#include "moRandMove.h" + +//! One of the possible moNextMove. +/*! + This class is a move (moMove) generator with a bound for the maximum number of iterations. +*/ +template < class M > class moItRandNextMove:public moNextMove < M > +{ + + //! Alias for the type. + typedef typename M::EOType EOT; + +public: + + //! The constructor. + /*! + Parameters only for initialising the attributes. + + \param __rand_move the random move generator. + \param __max_iter the iteration maximum number. + */ + moItRandNextMove (moRandMove < M > &__rand_move, + unsigned int __max_iter):rand_move (__rand_move), + max_iter (__max_iter), num_iter (0) + { + + } + + //! Generation of a new move + /*! + If the maximum number is not already reached, the current move is forgotten and remplaced by another one. + + \param __move the current move. + \param __sol the current solution. + \return FALSE if the maximum number of iteration is reached, else TRUE. + */ + bool operator () (M & __move, const EOT & __sol) + { + + if (num_iter++ > max_iter) + { + + num_iter = 0; + return false; + } + else + { + + /* The given solution is discarded here */ + rand_move (__move); + num_iter++; + return true; + } + } + +private: + + //! A move generator (generally randomly). + moRandMove < M > &rand_move; + + //! Iteration maximum number. + unsigned int max_iter; + + //! Iteration current number. + unsigned int num_iter; + +}; + +#endif diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moLSCheckPoint.h b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moLSCheckPoint.h new file mode 100755 index 000000000..097208a83 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moLSCheckPoint.h @@ -0,0 +1,66 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "moLSCheckPoint.h" + +// (c) OPAC Team, LIFL, 2003 + +/* TEXT LICENCE + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __moSolUpdater_h +#define __moSolUpdater_h + +#include + +//! Class which allows a checkpointing system. +/*! + Thanks to this class, at each iteration, additionnal function can be used (and not only one). +*/ +template < class M > class moLSCheckPoint:public eoBF < const M &, const typename + M::EOType &, void > +{ + +public: + //! Function which launches the checkpointing + /*! + Each saved function is used on the current move and the current solution. + + \param __move a move. + \param __sol a solution. + */ + void + operator () (const M & __move, const typename M::EOType & __sol) + { + + for (unsigned int i = 0; i < func.size (); i++) + { + func[i]->operator ()(__move, __sol); + } + } + + //! Procedure which add a new function to the function vector + /*! + The new function is added at the end of the vector. + \param __f a new function to add. + */ + void + add (eoBF < const M &, const typename M::EOType &, void >&__f) + { + + func.push_back (&__f); + } + +private: + + //! vector of function + std::vector < eoBF < const + M &, const + typename + M::EOType &, void >*> + func; + +}; + +#endif diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moLinearCoolingSchedule.h b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moLinearCoolingSchedule.h new file mode 100644 index 000000000..62d48c427 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moLinearCoolingSchedule.h @@ -0,0 +1,55 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "moLinearCoolingSchedule.h" + +// (c) OPAC Team, LIFL, 2003-2007 + +/* LICENCE TEXT + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __moLinearCoolingSchedule_h +#define __moLinearCoolingSchedule_h + +#include "moCoolingSchedule.h" + +//! One of the possible moCoolingSchedule +/*! + An another very simple cooling schedule, the temperature decrease according to a quantity while + the temperature is greater than a threshold. + */ +class moLinearCoolingSchedule: public moCoolingSchedule +{ + +public: + //! Simple constructor + /*! + \param __threshold the threshold. + \param __quantity the quantity used to descrease the temperature. + */ + moLinearCoolingSchedule (double __threshold, double __quantity):threshold (__threshold), quantity (__quantity) + {} + + //! Function which proceeds to the cooling. + /*! + It decreases the temperature and indicates if it is greater than the threshold. + + \param __temp the current temperature. + \return if the new temperature (current temperature - quantity) is greater than the threshold. + */ + bool operator() (double &__temp) + { + return (__temp -= quantity) > threshold; + } + +private: + + //! The temperature threhold. + double threshold; + + //! The quantity that allows the temperature to decrease. + double quantity; +}; + +#endif diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moMove.h b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moMove.h new file mode 100755 index 000000000..5c7f41818 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moMove.h @@ -0,0 +1,32 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "moMove.h" + +// (c) OPAC Team, LIFL, 2003-2006 + +/* TEXT LICENCE + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __moMove_h +#define __moMove_h + +#include + +//! Definition of a move. + +/*! + A move transforms a solution to another close solution. + It describes how a solution can be modified to another one. +*/ +template < class EOT > class moMove:public eoUF < EOT &, void > +{ + +public: + //! Alias for the type + typedef EOT EOType; + +}; + +#endif diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moMoveExpl.h b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moMoveExpl.h new file mode 100755 index 000000000..0905e3186 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moMoveExpl.h @@ -0,0 +1,29 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "eoMoveExpl.h" + +// (c) OPAC Team, LIFL, 2003-2006 + +/* LICENCE TEXT + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __moMoveExpl_h +#define __moMoveExpl_h + +#include + +//! Description of a move (moMove) explorer +/*! + Only a description...See moMoveLoopExpl. + */ +template < class M > class moMoveExpl:public eoBF < const typename + M::EOType &, + typename +M::EOType &, void > +{ + +}; + +#endif diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moMoveIncrEval.h b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moMoveIncrEval.h new file mode 100755 index 000000000..7dd633141 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moMoveIncrEval.h @@ -0,0 +1,32 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "eoMoveIncrEval.h" + +// (c) OPAC Team, LIFL, 2003-2006 + +/* LICENCE TEXT + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __moMoveIncrEval_h +#define __moMoveIncrEval_h + +#include + +//! (generally) Efficient evaluation function based a move and a solution. + +/*! + From a move and a solution, it computes + a new fitness that could be associated to + the solution if this one is updated. +*/ +template < class M > class moMoveIncrEval:public eoBF < const M &, const typename + M::EOType &, + typename + M::EOType::Fitness > +{ + +}; + +#endif diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moMoveInit.h b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moMoveInit.h new file mode 100755 index 000000000..dfba59661 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moMoveInit.h @@ -0,0 +1,28 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "moMoveInit.h" + +// (c) OPAC Team, LIFL, 2003-2006 + +/* LICENCE TEXT + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __moMoveInit_h +#define __moMoveInit_h + +#include + +//! Move (moMove) initializer +/*! + Class which allows to initiase a move. + Only a description... An object that herits from this class needs to be designed to be used. + */ +template < class M > class moMoveInit:public eoBF < M &, const typename +M::EOType &, void > +{ + +}; + +#endif diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moMoveLoopExpl.h b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moMoveLoopExpl.h new file mode 100755 index 000000000..5d35e8aac --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moMoveLoopExpl.h @@ -0,0 +1,26 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "moMoveLoopExpl.h" + +// (c) OPAC Team, LIFL, 2003-2006 + +/* TEXT LICENCE + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __moMoveLoopExpl_h +#define __moMoveLoopExpl_h + +#include "moMoveExpl.h" + +//! Class which describes an iterative explorer +/*! + Only a description... moHCMoveLoopExpl and moTSMoveLoopExpl are exemples of class that are a moMoveLoopExpl. + */ +template < class M > class moMoveLoopExpl:public moMoveExpl < M > +{ + +}; + +#endif diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moMoveSelect.h b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moMoveSelect.h new file mode 100755 index 000000000..7595ba61d --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moMoveSelect.h @@ -0,0 +1,65 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "moMoveSelect.h" + +// (c) OPAC Team, LIFL, 2003-2006 + +/* TEXT LICENCE + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __moMoveSelect_h +#define __moMoveSelect_h + +#include + +//! Special class that describes the case of no selection. +/*! + This class is used as an exception that can be thrown if a solution selector has completly failed. + */ +class EmptySelection +{ + +}; + +//! Class that describes a move selector (moMove). +/*! + It iteratively considers some moves (moMove) and their + associated fitnesses. The best move is so regularly updated. + At any time, it could be accessed. +*/ +template < class M > class moMoveSelect:public eoBF < M &, typename M::EOType::Fitness &, + void > +{ +public: + //! Alias for the fitness + typedef + typename + M::EOType::Fitness + Fitness; + + //! Procedure which initialises all that the move selector needs including the initial fitness. + /*! + In order to know the fitness of the solution, + for which the neighborhood will + be soon explored + + \param __fit the current fitness. + */ + virtual void + init (const Fitness & __fit) = 0; + + //! Function which updates the best solutions. + /*! + \param __move a new move. + \param __fit a fitness linked to the new move. + \return a boolean that expresses the need to resume the exploration. + */ + virtual + bool + update (const M & __move, const Fitness & __fit) = 0; + +}; + +#endif diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moNextMove.h b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moNextMove.h new file mode 100755 index 000000000..93748fe74 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moNextMove.h @@ -0,0 +1,29 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "moNextMove.h" + +// (c) OPAC Team, LIFL, 2003-2006 + +/* LICENCE TEXT + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __moNextMove_h +#define __moNextMove_h + +#include + +//! Class which allows to generate a new move (moMove). +/*! + Useful for the explorer (for moTS or moHC). + Does nothing... An object that herits from this class needs to be designed for being used. + */ +template < class M > class moNextMove:public eoBF < M &, const typename + M::EOType &, + bool > +{ + +}; + +#endif diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moNoAspirCrit.h b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moNoAspirCrit.h new file mode 100755 index 000000000..a5e499ccb --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moNoAspirCrit.h @@ -0,0 +1,48 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "eoNoAspirCrit.h" + +// (c) OPAC Team, LIFL, 2003-2006 + +/* TEXT LICENCE + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __moNoAspirCrit_h +#define __moNoAspirCrit_h + +#include "moAspirCrit.h" + +//! One of the possible aspiration criterion (moAspirCrit) +/*! + The simplest : never satisfied. + */ +template < class M > class moNoAspirCrit:public moAspirCrit < M > +{ + + //! Function which describes the aspiration criterion behaviour + /*! + Does nothing. + + \param __move a move. + \param __sol a fitness. + \return FALSE. + */ + bool operator () (const M & __move, + const typename M::EOType::Fitness & __sol) + { + + return false; + } + + //! Procedure which initialises all that needs a moNoAspirCrit + /*! + Nothing... + */ + void init () + { + } +}; + +#endif diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moRandImprSelect.h b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moRandImprSelect.h new file mode 100755 index 000000000..4d60e794a --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moRandImprSelect.h @@ -0,0 +1,104 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "moRandImprSelect.h" + +// (c) OPAC Team, LIFL, 2003-2006 + +/* LICENCE TEXT + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __moRandImprSelect_h +#define __moRandImprSelect_h + +#include + +#include +#include "moMoveSelect.h" + +//! One of the possible moMove selector (moMoveSelect) +/*! + All the neighbors are considered. + One of them that enables an improvment of the objective function is choosen. +*/ +template < class M > class moRandImprSelect:public moMoveSelect < M > +{ + +public: + + //! Alias for the fitness + typedef typename M::EOType::Fitness Fitness; + + //!Procedure which all that needs a moRandImprSelect + /*! + Give a value to the initialise fitness. + Clean the move and fitness vectors. + + \param __fit the current best fitness + */ + void init (const Fitness & __fit) + { + init_fit = __fit; + vect_better_fit.clear (); + vect_better_moves.clear (); + } + + //! Function that updates the fitness and move vectors + /*! + if a move give a better fitness than the initial fitness, + it is saved and the fitness too. + + \param __move a new move. + \param __fit a new fitness associated to the new move. + \return TRUE. + */ + bool update (const M & __move, const Fitness & __fit) + { + + if (__fit > init_fit) + { + + vect_better_fit.push_back (__fit); + vect_better_moves.push_back (__move); + } + + return true; + } + + //! The move selection + /*! + One the saved move is randomly chosen. + + \param __move the reference of the move that can be initialised by the function. + \param __fit the reference of the fitness that can be initialised by the function. + \throws EmptySelection If no move which improves the current fitness are found. + */ + void operator () (M & __move, Fitness & __fit) throw (EmptySelection) + { + + if (!vect_better_fit.empty ()) + { + + unsigned n = rng.random (vect_better_fit.size ()); + + __move = vect_better_moves[n]; + __fit = vect_better_fit[n]; + } + else + throw EmptySelection (); + } + +private: + + //! Fitness of the current solution. + Fitness init_fit; + + //! Candidate fitnesse vector. + std::vector < Fitness > vect_better_fit; + + //! Candidate move vector. + std::vector < M > vect_better_moves; +}; + +#endif diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moRandMove.h b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moRandMove.h new file mode 100755 index 000000000..b17de3868 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moRandMove.h @@ -0,0 +1,26 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "moRandMove.h" + +// (c) OPAC Team, LIFL, 2003-2006 + +/* LICENCE TEXT + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __moRandMove_h +#define __moRandMove_h + +#include + +//! Random move generator +/*! + Only a description... An object that herits from this class needs to be designed in order to use a moSA. + */ +template < class M > class moRandMove:public eoUF < M &, void > +{ + +}; + +#endif diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moSA.h b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moSA.h new file mode 100755 index 000000000..97eaabf8e --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moSA.h @@ -0,0 +1,149 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "moSA.h" + +// (c) OPAC Team, LIFL, 2003-2006 + +/* LICENCE TEXT + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __moSA_h +#define __moSA_h + +#include +#include + +#include "moAlgo.h" +#include "moRandMove.h" +#include "moMoveIncrEval.h" +#include "moCoolingSchedule.h" +#include "moSolContinue.h" + +#include + +//! Simulated Annealing (SA) +/*! + Class that describes a Simulated Annealing algorithm. +*/ +template < class M > class moSA:public moAlgo < typename M::EOType > +{ + + //! Alias for the type + typedef + typename + M::EOType + EOT; + + //! Alias for the fitness + typedef + typename + EOT::Fitness + Fitness; + +public: + + //! SA constructor + /*! + All the boxes used by a SA need to be given. + + \param __move_rand a move generator (generally randomly). + \param __incr_eval a (generaly) efficient evaluation function + \param __cont a stopping criterion. + \param __init_temp the initial temperature. + \param __cool_sched a cooling schedule, describes how the temperature is modified. + \param __full_eval a full evaluation function. + */ + moSA (moRandMove < M > &__move_rand, + moMoveIncrEval < M > &__incr_eval, + moSolContinue < EOT > &__cont, + double __init_temp, + moCoolingSchedule & __cool_sched, eoEvalFunc < EOT > &__full_eval): + move_rand (__move_rand), + incr_eval (__incr_eval), + cont (__cont), + init_temp (__init_temp), + cool_sched (__cool_sched), + full_eval (__full_eval) + { + + } + + //! function that launches the SA algorithm. + /*! + As a moTS or a moHC, the SA can be used for HYBRIDATION in an evolutionary algorithm. + + \param __sol a solution to improve. + \return TRUE. + */ + bool operator ()(EOT & __sol) + { + + if (__sol.invalid ()) + { + full_eval (__sol); + } + + double temp = init_temp; + + M move; + + EOT best_sol = __sol; + + do + { + + cont.init (); + do + { + + move_rand (move); + + Fitness delta_fit = incr_eval (move, __sol) - __sol.fitness (); + + if (delta_fit > 0 || rng.uniform () < exp (delta_fit / temp)) + { + + __sol.fitness (incr_eval (move, __sol)); + move (__sol); + + /* Updating the best solution found + until now ? */ + if (__sol.fitness () > best_sol.fitness ()) + best_sol = __sol; + } + + } + while (cont (__sol)); + + } + while (cool_sched (temp)); + + __sol = best_sol; + + return true; + } + +private: + + //! A move generator (generally randomly) + moRandMove < M > &move_rand; + + //! A (generally) efficient evaluation function. + moMoveIncrEval < M > &incr_eval; + + //! Stopping criterion before temperature update + moSolContinue < EOT > &cont; + + //! Initial temperature + double init_temp; + + //! The cooling schedule + moCoolingSchedule & cool_sched; + + //! A full evaluation function. + eoEvalFunc < EOT > &full_eval; // Full evaluator. +}; + +#endif diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moSimpleMoveTabuList.h b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moSimpleMoveTabuList.h new file mode 100755 index 000000000..efa97fe5d --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moSimpleMoveTabuList.h @@ -0,0 +1,126 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "moSimpleMoveTabuList.h" + +// (c) OPAC Team, LIFL, 2003-2007 + +/* LICENCE TEXT + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __moSimpleMoveTabuList_h +#define __moSimpleMoveTabuList_h + +#include +#include + +#include "moTabuList.h" + +//! Class describing a move tabu list with a limited memory. +template +class moSimpleMoveTabuList: public moTabuList < M > +{ + +public: + + //! Alias for the type + typedef typename M::EOType EOT; + + //! Constructor + /* + \param __size The maximum size of the move tabu list. + */ + moSimpleMoveTabuList(unsigned int __size): maxSize(__size) + { + currentSize=0; + } + + //! Function that indicates if, in a given state, the _move is tabu or not. + /*! + \param __move A given moMove. + \param __sol A solution. + \return true or false. + */ + bool + operator () (const M & __move, const EOT & __sol) + { + typename std::list::iterator it; + + it=tabuList.begin(); + while(it!=tabuList.end()&&(!((*it)==__move))) + { + it++; + } + + return it!=tabuList.end(); + } + + void + add (const M & __move, const EOT & __sol) + { + if(currentSize!=0) + { + // Useful in the case of a move has been kept thanks to the moAspirCrit. + // In this case, the move can already be in the tabuList. + removeMove(__move); + } + + tabuList.push_back(__move); + + if(currentSize==maxSize) + { + tabuList.erase(tabuList.begin()); + } + else + { + currentSize++; + } + } + + void + update () + { + //nothing to do + } + + void + init () + { + //nothing to do + } + +private: + + //! Procedure that removes a given move from the tabu list (if it is into, else do nothing). + /*! + \param __move A given moMove. + */ + void + removeMove(const M & __move) + { + typename std::list::iterator it; + + it=tabuList.begin(); + while(it!=tabuList.end()&&(!((*it)==__move))) + { + it++; + } + + if(it!=tabuList.end()) + { + tabuList.erase(it); + } + } + + //! The maximum size of the tabu list. + unsigned int maxSize; + + //! The current size of the tabu list. + unsigned int currentSize; + + //! The move tabu list. + std::list tabuList; +}; + +#endif diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moSimpleSolutionTabuList.h b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moSimpleSolutionTabuList.h new file mode 100755 index 000000000..82d00b2fa --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moSimpleSolutionTabuList.h @@ -0,0 +1,135 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "moSimpleSolutionTabuList.h" + +// (c) OPAC Team, LIFL, 2003-2007 + +/* LICENCE TEXT + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __moSimpleSolutionTabuList_h +#define __moSimpleSolutionTabuList_h + +#include +#include + +#include "moTabuList.h" + +//! Class describing a solution tabu list with limited length. +template +class moSimpleSolutionTabuList: public moTabuList < M > +{ + +public: + + //! Alias for the type + typedef typename M::EOType EOT; + + //! Constructor + /*! + \param __size The maximum size of the solution tabu list. + */ + moSimpleSolutionTabuList(unsigned int __size): maxSize(__size) + { + currentSize=0; + } + + //! Function that indicates if, in a given state, the _move is tabu or not. + /*! + \param __move A given moMove. + \param __sol A solution. + \return true or false. + */ + bool operator () (const M & __move, const EOT & __sol) + { + typename std::list::iterator it; + + M _move=(M)__move; + EOT _sol=(EOT) __sol; + + _move(_sol); + + it=tabuList.begin(); + while(it!=tabuList.end()&&(!((*it)==_sol))) + { + it++; + } + + return it!=tabuList.end(); + } + + void + add (const M & __move, const EOT & __sol) + { + M _move=(M)__move; + EOT _sol=(EOT) _sol; + + _move(_sol); + + if(currentSize!=0) + { + // Useful in the case of a solution has been kept thanks to the moAspirCrit. + // In this case, the solution can already be in the tabuList. + removeSolution(_sol); + } + + tabuList.push_back(_sol); + + if(currentSize==maxSize) + { + tabuList.erase(tabuList.begin()); + } + else + { + currentSize++; + } + } + + void + update () + { + //nothing to do + } + + void + init () + { + //nothing to do + } + +private: + + //! Procedure that removes a given solution from the tabu list (if it is into, else does nothing). + /*! + \param __sol A given solution. + */ + void + removeSolution(const EOT & __sol) + { + typename std::list::iterator it; + + it=tabuList.begin(); + while(it!=tabuList.end()&&(!((*it)==__sol))) + { + it++; + } + + if(it!=tabuList.end()) + { + tabuList.erase(it); + } + } + + //! The maximum size of the tabu list. + unsigned int maxSize; + + //! The current size of the tabu list. + unsigned int currentSize; + + //! The solution tabu list. + std::list tabuList; +}; + +#endif diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moSolContinue.h b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moSolContinue.h new file mode 100755 index 000000000..44efdd969 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moSolContinue.h @@ -0,0 +1,33 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "moSolContinue.h" + +// (c) OPAC Team, LIFL, 2003-2006 + +/* LICENCE TEXT + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __moSolContinue_h +#define __moSolContinue_h + +#include + +//! Class that describes a stop criterion for a solution-based heuristic + +/*! + It allows to add an initialisation procedure to an object that is a unary function (eoUF). +*/ +template < class EOT > class moSolContinue:public eoUF < const EOT &, bool > +{ + +public: + //! Procedure which initialises all that the stop criterion needs + /*! + Generally, it allocates some data structures or initialises some counters. + */ + virtual void init () = 0; +}; + +#endif diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moTS.h b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moTS.h new file mode 100755 index 000000000..156dc70f1 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moTS.h @@ -0,0 +1,180 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "moTS.h" + +// (c) OPAC Team, LIFL, 2003-2006 + +/* LICENCE TEXT + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __moTS_h +#define __moTS_h + +#include +#include + +#include "moAlgo.h" +#include "moSolContinue.h" + +#include "moMoveExpl.h" +#include "moTSMoveLoopExpl.h" + +#include + +//! Tabu Search (TS) +/*! + Generic algorithm that describes a tabu search. + */ +template < class M > class moTS:public moAlgo < typename M::EOType > +{ + + //!Alias for the type + typedef + typename + M::EOType + EOT; + + //!Alias for the fitness + typedef + typename + EOT::Fitness + Fitness; + +public: + + //!Constructor of a moTS specifying all the boxes + /*! + In this constructor, a moTSMoveLoopExpl is instanciated. + + \param __move_init move initialisation + \param __next_move neighborhood explorer + \param __incr_eval efficient evaluation + \param __tabu_list tabu list + \param __aspir_crit aspiration criterion + \param __cont stop criterion + \param __full_eval full evaluation function + */ +moTS (moMoveInit < M > &__move_init, moNextMove < M > &__next_move, moMoveIncrEval < M > &__incr_eval, moTabuList < M > &__tabu_list, moAspirCrit < M > &__aspir_crit, moSolContinue < EOT > &__cont, eoEvalFunc < EOT > &__full_eval):move_expl (*new moTSMoveLoopExpl < M > + (__move_init, __next_move, __incr_eval, __tabu_list, + __aspir_crit)), cont (__cont), full_eval (__full_eval) + { + + if (first_time) + { + + pthread_mutex_init (&mutex, 0); + + first_time = false; + } + } + + //! Constructor with less parameters + /*! + The explorer is given in the parameters. + + \param __move_expl the explorer (generally different that a moTSMoveLoopExpl) + \param __cont stop criterion + \param __full_eval full evaluation function + */ +moTS (moMoveExpl < M > &__move_expl, moSolContinue < EOT > &__cont, eoEvalFunc < EOT > &__full_eval):move_expl (__move_expl), + cont (__cont), + full_eval (__full_eval) + { + + if (first_time) + { + + pthread_mutex_init (&mutex, 0); + + first_time = false; + } + } + + //! Function which launchs the Tabu Search + /*! + Algorithm of the tabu search. + As a moSA or a moHC, it can be used for HYBRIDATION in an evolutionary algorithm. + For security a lock (pthread_mutex_t) is closed during the algorithm. + + \param __sol a solution to improve. + \return TRUE. + */ + bool operator ()(EOT & __sol) + { + + pthread_mutex_lock (&mutex); + + if (__sol.invalid ()) + { + full_eval (__sol); + } + + M move; + + EOT best_sol = __sol, new_sol; + + cont.init (); + + do + { + + new_sol = __sol; + + try + { + + move_expl (__sol, new_sol); + + } + catch (EmptySelection & __ex) + { + + break; + } + + /* Updating the best solution + found until now ? */ + if (new_sol.fitness () > __sol.fitness ()) + { + best_sol = new_sol; + } + + __sol = new_sol; + + } + while (cont (__sol)); + + __sol = best_sol; + + pthread_mutex_unlock (&mutex); + + return true; + } + +private: + + //! Boolean allowing to initialise the ptread_mutex_t in the constructor + static bool first_time; + + //! The lock + static pthread_mutex_t mutex; + + //! Neighborhood explorer + moMoveExpl < M > &move_expl; + + //! Stop criterion + moSolContinue < EOT > &cont; + + //! Full evaluation function + eoEvalFunc < EOT > &full_eval; +}; + +//! declaration of the mutex variable +template < class EOT > pthread_mutex_t moTS < EOT >::mutex; + +//! by default, first_time must have the value true +template < class EOT > bool moTS < EOT >::first_time = true; + +#endif diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moTSMoveLoopExpl.h b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moTSMoveLoopExpl.h new file mode 100755 index 000000000..53ed30a74 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moTSMoveLoopExpl.h @@ -0,0 +1,132 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "moTSMoveLoopExpl.h" + +// (c) OPAC Team, LIFL, 2003-2006 + +/* LICENCE TEXT + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __moTSMoveLoopExpl_h +#define __moTSMoveLoopExpl_h + +#include "moMoveLoopExpl.h" + +#include "moMoveInit.h" +#include "moNextMove.h" +#include "moMoveIncrEval.h" +#include "moMoveSelect.h" + +#include "moTabuList.h" +#include "moAspirCrit.h" +#include "moBestImprSelect.h" + +//! Explorer for a Tabu Search algorithm +/*! + It is used by a moTS. + */ +template < class M > class moTSMoveLoopExpl:public moMoveLoopExpl < M > +{ + + //!Alias for the type + typedef typename M::EOType EOT; + + //!Alias for the fitness + typedef typename M::EOType::Fitness Fitness; + +public: + + //!Constructor + /*! + \param __move_init move initialisation + \param __next_move neighborhood explorer + \param __incr_eval efficient evaluation + \param __tabu_list tabu list + \param __aspir_crit aspiration criterion + */ +moTSMoveLoopExpl (moMoveInit < M > &__move_init, moNextMove < M > &__next_move, moMoveIncrEval < M > &__incr_eval, moTabuList < M > &__tabu_list, moAspirCrit < M > &__aspir_crit): + move_init (__move_init), + next_move (__next_move), + incr_eval (__incr_eval), + tabu_list (__tabu_list), aspir_crit (__aspir_crit) + { + + tabu_list.init (); + aspir_crit.init (); + } + + //!Procedure which lauches the exploration + /*! + The exploration continues while the chosen move is not in the tabu list + or the aspiration criterion is true. If these 2 conditions are not true, the + exploration stops if the move selector update function returns false. + + \param __old_sol the initial solution + \param __new_sol the new solution + */ + void operator () (const EOT & __old_sol, EOT & __new_sol) + { + + M move; + + + move_init (move, __old_sol); /* Restarting the exploration of + of the neighborhood ! */ + + move_select.init (__old_sol.fitness ()); + + do + { + + Fitness fit = incr_eval (move, __old_sol); + + if (!tabu_list (move, __old_sol) || aspir_crit (move, fit)) + { + if (!move_select.update (move, fit)) + break; + } + + } + while (next_move (move, __old_sol)); + + M best_move; + + Fitness best_move_fit; + + move_select (best_move, best_move_fit); + + __new_sol.fitness (best_move_fit); + best_move (__new_sol); + + /* Removing moves that are + no more tabu */ + tabu_list.update (); + + // Updating the tabu list + tabu_list.add (best_move, __new_sol); + } + +private: + + //!Move initialisation + moMoveInit < M > &move_init; + + //!Neighborhood explorer + moNextMove < M > &next_move; + + //!Efficient evaluation + moMoveIncrEval < M > &incr_eval; + + //!Move selector + moBestImprSelect < M > move_select; + + //!Tabu list + moTabuList < M > &tabu_list; + + //!Aspiration criterion + moAspirCrit < M > &aspir_crit; +}; + +#endif diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moTabuList.h b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moTabuList.h new file mode 100755 index 000000000..de550cce9 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/src/moTabuList.h @@ -0,0 +1,56 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "moTabuList.h" + +// (c) OPAC Team, LIFL, 2003-2006 + +/* LICENCE TEXT + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __moTabuList_h +#define __moTabuList_h + +#include + +//! Class describing a tabu list that a moTS uses. +/*! + It is only a description, does nothing... A new object that herits from this class has to be defined in order + to be used in a moTS. + */ +template < class M > class moTabuList:public eoBF < const M &, const typename + M::EOType &, + bool > +{ + +public: + //! Alias for the type + typedef typename M::EOType EOT; + + //! Procedure to add a move in the tabu list + /*! + The two parameters have not to be modified so they are constant parameters. + + \param __move a new tabu move. + \param __sol the origianl solution associated to this move. + */ + virtual void + add (const M & __move, const EOT & __sol) = 0; + + //! Procedure that updates the tabu list content. + /*! + Generally, a counter associated to each saved move is decreased by one. + */ + virtual void + update () = 0; + + //! Procedure which initialises the tabu list. + /*! + Can be useful if the data structure needs to be allocated before being used. + */ + virtual void + init () = 0; +}; + +#endif diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/Lesson1/Makefile.am b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/Lesson1/Makefile.am new file mode 100644 index 000000000..84bcda58d --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/Lesson1/Makefile.am @@ -0,0 +1,20 @@ +INCLUDES = -I${EO_DIR}/src/ -I ../../src/ -I ../examples/tsp/src/ + +AM_CXXFLAGS =\ + -Wall\ + -Werror\ + -Wno-deprecated\ + -ansi\ + -pedantic + +bin_PROGRAMS = hill_climbing + +############################## +hill_climbing_SOURCES = hill_climbing.cpp + +hill_climbing_LDFLAGS = + +hill_climbing_LDADD = \ + ${EO_DIR}/src/libeo.a\ + ${EO_DIR}/src/utils/libeoutils.a\ + ../examples/tsp/src/libtsp.a diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/Lesson1/hill_climbing b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/Lesson1/hill_climbing new file mode 100755 index 0000000000000000000000000000000000000000..ec25929bf4605eed6d9426e86bb45c6e1a7ebed7 GIT binary patch literal 469340 zcmdqK4_uU0_CJ1~;TfH50zxR0KT=ZpF9q=*N`-$0HAP9q%tS;*!T7f@n6^^Xh&qk4 zQQ5Awwo$pe)wUazmFw09N}^^hnYCz|RBjDHMdg-TZv5Ww`#jGuGlH7CpV#N}{ZY@H z=iGDdx#ygF?*BXEown(zilPYP&m@8bv6Kf?%Lu^DO+6%OgoqUuF+f}`;sjGj8&Lrs zJTe0^nUSXA2_g;nh`T_?(;GM+(kPpc{9|4`0hda&k1B`L}sZ8 z=q9kO0euZNrFP*dJu3iV8Ka%+FBTHU=z2uc1W1pG!aqaYm{f!4_ zS3AB4z5X}un^V3D{@1r}hi|q{6uIW#{U)k-`|7E;z623|f4yKE|IC14fX_%r3b6?9 z#Glvkn{>QZR)i2~I)Ac`KcLfTr|}nymwpBUNPGv4#NX9;D1Wt{pUxrvI3WLW@DP8N z&cWYq=s~E*4_ z=_Z|j9nwkvQ0MQj^IxU&uhMacj?dNc2wmT=b-YH;e}#@m>H2=H>z9ah{{0#c%d6AN zU#{azz{kIP@Q{9^F5l4SW1arJPG1DbzlZRU|23U|o{onFl%JvF6Lor;Uj7OlF9YP? zYr4KebbB5}8s+~|x8J7Yf7HvnRL2MC`pwqyB%S|p9bc>Sx9Iqzy8KduACP|`cv#*J zo&R4texI)Y=Q{qLp5KVqHv;e|lt1MM)v^)%7mLfp&9Ju#cna{#fe(iKlvAo@h>o9v z{>8wpI$i@j^xvKI9*{o<`PmMb{}JRr{%Sh1apD%$|Ab*O^&rW9>$~y(Qqzm*{ zrS_#u1`lRuHA-YOLDUdm*-?<7cR}pUb@tlJ~uB9@|LX1&RSNIlS77_VtZau zA@k0*CnPS;F3nq#wJa|`XK~rGsY{TQ01+iw_LA&8d+F3AHrvDm+e*ouH?lM*=ho%6 z+4d33ii=98CM0BK6+rQ9drp?!cJ2a46cy(b+R~@7u*9sXMWtCYkx)>yGzT(f+lR+z zW!ZB}if+rw&naAP&&|pyDJd!eyQGfDDO{T0rJl1o%_%Cim*iv@Or4W8CqBzIdlY;~ zYsciFEEt?KX}C0L&Rk>}p?M&0nVzRB7w8@=$&q?N*qpgD5}+o$p1nA4Wdc<$&C6QC z%E_{?F3!oyD_mAYm%vv`ipuP|fb9JIq9t^fZ#B%BO2tdc3hj9XpwL*UZc%=zZJGBC zl`U(rxU3{6Yh_-Ey(~Ll5(D$1x@JwA%?N?TNxE^Ut*-1ExgVmat z$US>(KtNGxj^@lc=j=?l543(ZDe7B0QGNL2!)B(n4#->{7T6@9IXKVA38Sz>KO9{glW@4Dip z;xa7GB1Jb3oq)H(eH->fqhb3uPjpl(3%YEdGiK+FwCCjKFW39HfO^#{2Stox%gxX6 z)>aZaqSb7tTBKzyU$rW$ zIH#nvs4zP}4^gu+UN;nF=4X`^=Bz5tSz^zj{D7{95!yw+!#EqB#m-Le-4W4JcMLTJ z+9-p!u*T`Zneb_3<&MOp?Cr->t92zesPoFwrV%G4X2}2XT@9|>dym{j%OwIBp z&YK5ju3NaqQSqrwBM8khjcBh%1WEefTj&kn))Soo8>w z48ttG)A{WK@3+uu6Bi!%TkySV=>Zz&FlH<|I5#q50m3OYIguHYRnCRX za2)3#=4-XNkQtK?&T-6Rw7HCVtTqQRU$4z&%;PZaKsi03STP}-Z70N>WECMMOKS+B zX$2wlSxX2_HxR<&jfA~~s3L@iHW6Y{wwVwf*g_aAL^UBMi(3id)F%lq#yW=(6QCNx z-k1{+h6}NsFhYn|2rq%YgqXb66ZR2e58-7(>?gbqYfr+yLL4NFgr5kbgg8PNjkPCX z4Ca7@SPXdxV})oVOcJ7<@Nywe5MCj~Ny7d@oFa@vg~0DUuS5+KUL}Nu5Q`@(Atr&L zgaa{$Buqj55DpR|if}Muh!B(4IKpd$7(h5wh#`c-gor0ZAZ0lJ;b^mX3Qz@}6a2V$ zybybLiH?y=p-IP;x%h-OqT|YZyyfz>rMUxtR~8c|t))@ocH#`*mRgCgA`Z`qmKuq# zAs$P-TH>tXTv#GnswBRaI77RoLgE{UBa%c*vBWnLPa(cY;#I__5Kou*CgSPDQzX8b z_&nnA65m365%E}wGeUA{P)n%9w-PTVE+qaW@m0jze?-ES&k(O5-YoGN;v0xJN_-pf zD&n;g-%flp@fwN0LcE%IwZs`=xlaE9zr@># zTZlJG`~>k(;9nLvoGl?Yop_4G*&=f15s#NRTSo38;;|BE3(3tT9x8FRl-y$CLgH*O zxvPk`pQ8P2Ik^?YnL+}qGo2;rzzo?uc(cqN&1@@<~oW(rUo_3AB|yWIAx zg!>h4$LM{)W2?YhS!)kt%n7_)(4fXKt)tOUL{o>lJKFj9sCp9RG}yM(OHi*R)^1=y zwmsEadEqp84a>`DcBZTDj3X80HNu&0ac49+)2;4|4Gm)R`%pJM)M?xA%xny)d=)io z__s12Q7&Cv$&Oumxzdg|7Ph-`72cGF$~AgIgRO$;4Ysus=8P&INH6y*fH(Sy*pNF>gT? zA9`egrkrOs5)M@oJKS=t`8T(%BiD>jt#+^TsogvNMSGu=0f5?##6*O(`zhUEt3uUm zka1MISpr$Jq%VOe=+a=@pwXK&a6|*m8aS>24}sGf=XndWCau{d)Oy>D9+}Y3Wjo%H zZfO~cF~Ye!u;eXcWSgndM4q)&NNuob1w-2m6ig?MhgA?QD@Mwbm6Z<3t@k>2(?x^9 z+3Ik7rZ{((eMv*VfPXws;iF{-^g`R!^w`Qw2Hm-v*<07jzIU#x%<8g*&UR&5D!+9J z`^C;f&aa({qfUj?vTxl{FF2cSS(vGH!02@{TN+SHo&BH7X4##hDjEamt_+JSjS`dg zLD~gQlVhivw6E+t$-rLAWeaDSC@|DjZgC0c*Ol+vdpo~!9$r@EQ*QWgoR>OJvZvaq z3cWbJzlCsj#wllb9J&aUWCgH54R#owhoKxs6TP3NJ~j&)A!;uW(_x~) z&sxiDDe0D9(tY^pw2GP8-PmPb*Fzd&6C67FVXVVznyD z`nqnky2gh(XREFo`#2|}tWamDqdpwtBt{DkOP)6%2R(^Jc0*85Wey7dpI~BV` z)&XH+j9;P9A7gzSV$E&)fz`$y>7UdevHbBrk)_E|A9o9@oSDZ%h*9+tcA5W_p8tu{ z@+;?*Uq$!A@|T>Jzs^s2Xu$YLv&@E541bM0Bo2-5b7=3;505n;J@lKE5w6+lp_}`- zCR%onhY>ego#R7WEk~Q&^4#ebZD8MZNVNW)22md4Q;Q$di2!r`>010a+6FkwPP)o0 zNo7`N<_Tx{Df>*c0oNsHNwzk=%~M^emcf~A0~?*k>N-rA86`E`R_;nw2R3T&LtVBu z1_`@mwwb;#+#UWZ>oe#Q=Umm8hhne3KPEN48ggGU$I`qW)$l^xgLHooptle4^?!$&H}Q~<&$(%HcJ zzK?QyV8SIs=$o&BWwbl5bE}s+Q!R3_ME?7K8h@bwT4tR&f6MSQ z(~WqZ;z|oe7-KMCJeQrU+#9m?9mJyRHq|xRGO(RNTNkp93p(f5+ZjlMFRlCDG_WzL z&Y95`vi?o=*nnwJyWQR?I6esXb{cJoVY>Jc@WT2 z3OAyBx9VoAcYZx^r?h2+G}?24%pU6e8UhCHga~IN^g|hr=2HWAOKspAYIBTsW^lL% z)vey`&S;Z*z-OF6wV?xU>B+LRWzMy%y^wXcVrnAim!1%m04nZ{X*8rKtj zvgiIUeq#K0#qVevgC?p)7NU%!W*K^Ky&eu>xI`D{wtc0!S`J7t`hYO&OQ{P7I?sD} zmmSq^`fxi+LeJ%Bwchmu&nCX`2+}zwILAFvCc$nw9Nvqh%Gx^-tqe4| zhS?8Ut+nU?(JQ8dj5p+6iSm3)ur~)tvT2g`B1#NNcT>`K48hKZvgb7aKI`w2F6R^T zWo=o1xOzA4Ye4hu z^a~u6)Kr$^b+;T&P#fh(z$Kg~>rVDVGjiFEU|q*R#2lCaCD0}`AON(%;{b>;4?w7A z2=rl%j)-&AYU9`K@Kx)^0RLQxM0k3wkEa(Sr`$s0ptIXYK`Tu<2oo?XJ`o`2sI=_P zqdtD_3puU(Pa9uaCbV@Cuh<{Z{0ry0GQ(v@7mC4HdNMg~VADW35psNd%5%SF*}#RW zbBwRcIw!zg)E{;M9Bo$22VCXWiaV?#WbJx767G}pLIl+`sO4T5%A{C27fF4Pga!ZL z)KFmPbm(o*14#5TA;`aJ1ygFM>lSt3uDTygmG9p%03Bx!$8N6wWR7e-$2XjTLF|Xf z;b>LL4m;|toVoA9M8x2IH$eJ>;BCo4v+xdK07-Jy1wTm&()djT=;$c z_fz@(^$qJR*hk-h^$zz2v0iXZ3~dN{lC!LdD)%Uif%YvAf_9=74?%K~n`v=yTd!ps zDAez#$-5&^o)l)-?595xDgQ(l^FgZ?pT;z^>v(GkLs?#udDlZam)nkf<9#(ela!XG2JPMJRAHc`%OpmLqUiM08`&ZKqFwW@TM+2{{4XNag-|orm z;5|Ex4*qaR(}O(%iR&a*%un)$3Y_IUME&ZF&dqJUnnG=59%Em(F#o8{8SS zC{V87(f_gZ1DbCQO%(mO! zcjugtJr4K>z72NHndD-HUHgMr;Iuviy)n~qmL25G==*-oj3#UZQVzBS2{i4S05Ien z0l<*M0VtFcDA@DDCoJ6Ro-9WltcN@b)M@z&GnRlc<0;Ks_qLGKInsXw0WI$$4cjGTw}3NN3pT@zWK(Wz#>j_How!=2kH3VG4ONo)&Pt z!Gy28vBB1;ZImA2Mk&TMV{_BiM4w{wkM+P!K{XDWf3CS)IlD|1Ker0k6svt<*E6ps z6p2}&oOvyPwK6Q_%kNrLy z$1d&}(;aed%qbL{aU(Wy5L(T=s@*=JXM%*5)rbliJRy}2!)Xke`C#=#;G?S5bhPO-e;Y%25Q=ovPnTO{+UyZq z$rD0lGu69~mJe}~6`)A6RK#cp?Qo%7R+T}TYzL@SE#B+p^Z@#NMoSyI)#K;QaJqjc zG?Eu(CRX$N(lwo~x4#&m(bHgsYkuRleQ9X(DP*>~wFb7%a~UMGeyuf7x0KfD=#aHb zPH$K9q{NVWr^vSMUGUupsVyUr)^ZIAD@E%gr_CoYe+tI{#wis0JKd4oXXT!*v9WBN zKX!kfc?8QjPt`FwEeJf%On(kE6|{3Z&!ni#maX7_>;zs1o7?e;p#=+(yxKoJ{q)n+ zOYWCuxFSfCyQFS4#T9-xO;PVoI4~>y*pN6!y#;G`$?1NL4f?U;nk0nO1=#b>YzeoH1#HL`PT2{^xPq`l#!nOPu9ZZLbiZ*9ig={akd z^YBsTq+wc4Izf9oX}q1Dv-WxFgPii9*{H7_zURd<3UtqD{(ya49)`L`vW&-AWYTVX zjMF%Fb_E%YZyh8%c3G1?C~K8$NDqbw9rd9&{AtN0RlXWEx>etbfe4 zZo~|J9s-K7VFCdTTdmd6plE?5 zuU(O{EDvF%W;3)A;9Z0=Z{8JnFMHLi?JPTN-HduPUzE?bqOAr#B< zB-_@~Kauc_D{Z?2RBW8PGM+qYIud(yg5}5}3||oCvTbSFb7*f+6m~Ofn)WzsHP#R6 zf~=-PSU(z-8OxRGdMrRTxZ+$+nyy z`?&(MHrANObRn*T%;Yp=7v?xdmBqe~gs3=@W?jR1QA z+G0Yswu8n;};kZFR=!-Z-GHXtvQqU&vs^^6V(4N^)tY zCcS+$vnj;U2S(I=s49Eh5558)ph$0vlNQN&*djCAaDbbb@GZt4XM0_<8YDYK zl;obL?azJR)M?-scz5hplFHg{JD|Cd3#rY}mah8*&hq^J2d{^_sG9~^Yt6Xc!i-tS z=&s}xm|nUZ#=9$zQ(rYsW845UJr{sWixlUBtZkPTJ0?9oP7e%*p%xA)EC`}sIt0<) zuy4W|Q`?u9YfLzrPVxK^9+7hnt@@qc2c@5IO$djgjy)=;0-j?K)AGZ=p@KB63yxRG zagrwN>dKVsVB%wJ5l$)KJS=HrZJ-SvM?oy3yGG#SXxRTP?e{u*J7j3ub$Xdzss@*@ zqgxiRX1s;4C|Pr0{jHzC<=qIJ87S~VDX_KGxvTYW#`zwu65wzmG^xqn&$-j3I8Cnc zs&j(s8gIe63X^W<1gm3bXwu=bk2&M<{X_qQ3B^sgj}SiFwMupVFz}nYA5`pgUd=P9 zud8r4qqruh&he@XE41;Lj#83yywy<`%8kxrgK?I?;}47DllFn%Id507rgLJ*)Nd_N zeww`MP`THBHLgaq1|dH#wq1fD#l$ODP!lT#sEGvwgtsVVANVMV{2OfH*vo>|)Z0(q zm5_G^Q9DBerOEt(^7Qprd1z%v$lCYWS>bj;vC4Y{-|*~BO=<{P{|3|3!r@z66P;^2 zLg!-V9?r$Gnx|Ki(`l;>aWtaqaDMOns_r9o;M+-WVF0rac7EO31O0jpO!CRm*l zt!2mLR+rqx!RUxi8x_E#sJGGRu)5F|7C1imdT{7=cr~Q%dz@I)#@|5gq`zZ*AF}>? znCr~&cux`!1J{_FVf%hY`nq=!=@}Mhozu1lQS!z(o7Fzhxf9iVNf$w*M+|~6!&>&f z^9^lffS?WM+7agRxDi_oo?F;E(e!>8H%ruUWmbCv_rL12S?(Fcqq^b0_sWhq-{4YH zF^1efz5|K8FtP{9&Uvac)Y%vW8^&X9r+MRAx*=p;EP&@un1%DWPUBa8*kS^~`NQDM zTCP#c=~UZ4fH6x`}8G<|oJ zT%Z)INgvqzAl^IY*H=MjeSR&seXIjB!W}u`r*Hy1FrB>yEZ{{Od2Zr8@Gn3Ym{e}D_u-P#yM9Q0 zTeI(nvR2Q0ygPS!`ZEKH{yCuTb=V{OpE&5J_h-`oQHXJLW&eSF-=fU3+ZPWnbZ6gM z&}iQ?fV8hKqS9qDn$faG*k`j?$CX>kKJlyq1`EeC3oLvHP+HiXeQPkB@LI!AOb{5V zsPPnw@1g_u8~T!#Y1y8Ukr6StH#W)h4sg-rz2@)9+XX3D9b$n+i{Qf)HK`G6sF1a< z^D1#!jWc5p7EsRbU{%^4X;s=Dqm7JL2P<9L7qXt;_wX_7Pk)n!HPE2UJ(_hvI08kJ z=LAk~CmwL=ab(+uZhV{j4r@|cmGehfg;oLf%qkf^Nwz9`G`ezcJBfKqYbTjiWuN)= z(`FD{X|x z*b2qDNgt=pgWKX5$c^hSa$4F)+7lxq<~TbeSkQz)-I=-7+ZWQ?n?u$madnfn75yDA zhtwsdZFTMmS;$wFIUEPzkUk~yZI;mE954yX%)hy?`~Aa*0Q^42o{y-naj5FD$GO`mshm8iYc#& zjSDlq7)QZYtK$o~UF*WFb2Oe`Vlv8p9d}tnWxuZ7Y~ghuxuDU9raS+|;KtfEWbIrG z+sv7=A360JyOs?(WL*vhFwX$0hxM+!(!(<)c_U{qR`Q&nXre5m2XA3XKZ$7;+_-TOkFWKT)<|$m2t(H3wnXMC$XeC02g^; z-^52GKQ6%swppB+^(`l0xTgp4@|u?2aF;R8-@gxp&rvj0h#*7S{-m@<`(>`o#?BVC zA6y(+GxwK$<~at0+@B)XxbkXy4E9^l{P-mfxr}>MXa2#C0B`-&^DOyyc~(jLyxSD3 znTmeBj%Dxi%qIYPKe;k%k}|j0BiV=g$eoNF?upiMwwf{zS~2En7m@>-Tmy<{3Izg5 zr-Zcnq_i#eegP89V3B6jOVvKn??*A?E_wBl`9qN(Zs*v$wbKLp_G(#=VeI_??@;;o zZ$O`wqGc54Zo68pBT(b2JYOQ+X9k4vs=NKqQ&?kqsv(Wr90B{EDGi{7gSOY$NbGVy z()j)gMPUsCeq%l}9rGD|d(EAWyQ7$J?#JA(^$M45KL*Ef>6VbSze1#9PGEBOa$}Js z=?+_);@Q(eAGRg!x$QuMw(rxL>3IQ(&IV5-+(p*%S{&&hzi{=!#P?W1t;4oQaYx91Jc*Vb1TB!}gw- zwaDf4LKTwG1P5+R zAx4IQuc@FNnLH|9lXjKVBgY|I`=NQfG$)LiwvWmF{`lzibMOcHT+WVeP+ha&NO=~W zV&z%1a|*tPr1EM#ItHV?cHjP0`mY)#cHzI2H$V#q?cDrFQE30*hdtVPl*KiVGdSrW zcn#i((5gy}MUWCN1G|&AY%vAGNma`~fwR74evIl9RmU!EG}iLxAohIuGk}v{t}li# zsdbiVHYezxCRcvuhQIp^uF&S0!&^(dJ&Q;LZWQjfm3)uIKAM zG$p)`3yncH;B30tRo0C7afkPFP5R9#aAUZ~*KhO;J4W9cFA;zCh z!fp^aMg_x-odG28C$+4@(5t0s_)GryS?({j+zQdUNEwgTh7>FYu-%@*!+L=exO0go z3*#vrqPmEusy9Ka-+8X_L{XV7OCd|@(N+WRXfH%QOyY4-pVvDw z_p?Xh((~>QArJdUSSKCIZ1j{8MRmBazs8hJDK}!fWRKw`J}|*;qZ?D=*S?UK9IEEvC!q7%sI70{M0Rwv_e3aP7H@_BOPh z(5@7G?%9n@0pj~h@w{v9y)du{T&=a8ZNxub?tbkY;ssW4A>;kNH2PN$el1YkwQJ-+ zo(DyFUid3iaeRnQ2AgNv%RpOuU3t3+`()@{2jjGMx3)gSv_a(ra>amMFx-v0 z1Vd(0d3)J0V@yPQ;Lbhto&A?wd=nezPLD}=vcqmg2i<`Mf#YOH*$K?;uzyZIuy~*s zzf-WsPLr%#;}D{_kXqe1{_MTIkqg>9x-iJyNd zDj7Q#zaE3%>dMFOOO@u7*hOC9O8j8V(%5Br_QIUfQbU5cCAFleATw6nGN%Zi8KwC3 zq1dspLx<%u?~?qyg2j1-%VTeW6nl2zlAKIge77IZ;EH|x?^R3t)2gNF*Q#aFA5{w$ zR2@u@MS3&R(~;H(v+V6i+kz{p!FsqyEnP^L+9z((~sMVv<0*U8i$dvO#|zZksuE8Dfrg zS%tJd;CmSG89ey4C#}6rU4b8H(n6Db+dzXpGZ(Kw)QW`RIYsIC%_jaXU!k4qkmpUA zAHTh%MYjC8Ij@+61Y{}6E3{`X&i4ry+Fbiv=z)j+YknN>@HhQOS`E@G_#mwjG~IMT z8!NUT&han?j5weTDd3I8W27+;eN&9I^nmnL_%3iY>ZJk?`O~2T{jrwmct&acQD7^P zYS6#6;32|#Gul@Z(ujA}lve6~ZwAj<+XtETKk6bLMJ(d+wQI!RVHb2y*Y&6FDM%xK zLVQk<4V@(0X_p2-wjI3bkQuMbW&R50$CD6WfL?fI4m)I@?#xh0##b%)nBZ%FGtzYX zC!j0QJHlDh{Nfq5F=j-QmftJX=SBWr8h&TYuLJ2;nwF7zx1$|5;_>y<0+dtr80^Bs zblRDVv-zcHSBtc>+NbxK&3b+xv%IfA!9GaS{-|#)Y^x5i zFZmGK4%$g9`WeH%DM+iplYjw9tH&iJjEAo3(yNru3*);Q`I+Qve?8KC?4Q~H2fYHWL3fT;sE<69fqzLi)-;Tqm9Qtgtmgdf%TjYT0Wix489Za z`*TwZic4naC%2b zZq0wz_gRNF{-&a)5`V)~{~G~XDBC~A7^B`(kjC~8b7i&rwL3kK=#OH=OFJIsGaf@O z{jdl=P6_byR>*FA1nC$%L;s-pw+3nZ@zB3hCbG!sMMcH7RmDD$M*lW}=LGrmcs!j; zn=6SUs6RYL|Kl&o&`|S#3iz1f>;DBv^YOobzcXugLYCh5ROop-CHlX0SwCG$>&!<# zEP`*UedZRV((ZWrEFhhB*216FcvuJ5T^BpOC>uXHh$*Vb6tPQ-a!L!Yw#VYv221U+ zmtTIlR@C)AlVWW?oRwX+N~6USEI5jGvKMuXC%pmBuW|Ww7JiOZ_U4+O)4{{>kNg|( zUcC?f1)fkm8ZUbbjdu;`9Baty``3*0c*I}(e%OJHsVY3_c<@639i+vA)=V0nMm&0W zOA%~82f;&xYXQbG>&@~3Am%S}9%I$oKq%7iYpBK9c_mXZ@q+l1co%QOhDO+hg?GXT zL%!CR8hJK>kA1Kb88mJlCR>9*$bYe;V-?NI!#ft`tBk z4#c+sCIdDC4#5?GHo*LY9UaHv*Js}A=&+cPex#$r3cT%uj*fW1A;&s8<^b*oTt&X- zj*cyW8?m&mB^_Ue;_q#50ki{d#LoP5z_!m|7vKV1!rcZqqz!ffZUH;hc#MMuX1z$ko4copDAz)gTd+L0e{3*bS(1z&e`gyVN1^8w=l`_S3=Q*KY6E|fKv z9`cu@g;iBIC{aj{<+Dk(OaO$sLW~c#RGKDS1Qi77DR?-y91qwPeG$?*b}S>^@(CFA z{F59(%wK_r?I@A-nA7RiNUt*JgHET{g5GG*NBPs^Kx@WRwFSR_iCFN{FLj+deSMIF zc972k`XbENu0Y-U@l9PHG&e22fSuTJtQZ|3?SvQgF?&^YH#CQpG6 zk58GDwFY#qYwGdtS7xfiyiQ#oM4oE!aQ$g1^hjpGJ?Ctt1Un#ThkuCr$$ zX4R9Y^RR=nB0qn}ZU&T5mwt+WjKQji3sfZ)(crDNwLP?g!S5403>~u!9T_WwjXTD@S?VwHYrQw}1u?c!KKc`ywH3&by0FTA9jr1L=We1=i-N$cDpjE%B z#})E;%lF|qMLFQ%w|csh6AOP;{8hE=CC@AHiQxzzIg`M%=rz^CJB8|zu6c67lTxc% z9z+{dPj$_+5j?RkAZ}>aW>1%8)v&A=F{ZJOp7Y_Es#Od9cMv?yySr|)aiH_JKvVXp zmi~wdf4kSI2zPI+M}f$3?jzcTC(wtiN0olYcsRkAj`vtTpmE&G@uf{*WKWc3$o3Dx z&ER2vzcPT6UQHb^_FW%H*ZYrJ&^bO1>w+GOv}VvbhJH(WkCxMXN*ne-&v=Y;fi{qK z9JIzRXw*&6j~MT6<+~9Vlh*~MI#j9q0(36Tpm$|k9I~tdo#Wp+)X3r*fqj^_e7rJ!44x67tXo{q2&~DY5(6V z-ziM2G6|On^v6wn1?lqGYkn0Z*6>Gd_M0xn>$fH|!uthPSE=WCCGonT!$D%X z86S5k=4Zg7tibylrl`+?f?Pr74}#3^GShmMERU*8fXB-3{JCbACMQR^X_gs7^_xn} z_o}$d6!iC?phr#SJw3#qP3C9K;$xE;=^gU(p&;|W&0Pu!3h}Pl{Day2`yS*ty{rsn+ECQM{KHGk7n z++&V&Swx*V=vS7Y2J0 zPj|z6^bCht60yn|6noWwfX{cLocPW7vJyg#jKlpG1Ei6$o^C>QeW)__MISJB-(qK ze|w>*zRtC1-xZ8Bca`F2KD|PeE)&}YRAhx%{we& zgN2^~@!YG}d{hx%(M26%pc0#Ae#?Xy`;$rBr=;UXk;#0(6ttJhw8>W)(7K;74==_z znSwE@`gzRN(MPtU4~$1YQ-QuB7HvKr?ON6ec(q*8T$(JOe2fEp=kJ0O^7p?nEf;O~ zsur|Ju^sc{fBx7}l#74Q2s()4m6*c-9t4i>jfr5)-7W;gmZrc@TgyK-m_^@f^ZhCa zW#56H#TNW`S{D35weTHZ+p+N92+766D;`u5=Nd(Jq(jvr%D_~y=1Mp8h4U8RuAD$l`J3Kyqbo|Kp;jsf|pEloW~|eU^%(aGrz0QF6PTZ83zToH$GAVkbnewKoqJ$}&3d}{jjj(M`#A2K zk)L~LPYdG%xF<%uRe#KYR0#a}8Av2x(g3QPLDnjmEF`fH<#JR^syaJH!ge zv4A|Er5?uG(pWztN&b=7BqEO+@yNAawMLSk`z3w(AVrVYMbBZ~g5K1K%j!RC>$7G+ z9=NCM(BiZLknvjuI0~>)#{=U$Fs_X?p;3=U{dnW;RlPhwuKA30UHWTUdBz$p9_uug zZ>-nwD*y8FX%fA{O}af?W6i=i8`yq~_F$~BjCeERkNbzR-U8}@dyA|$<8J|8OyXjP zQ6AS>?;zjL!l$)-XXUJbGPWv-2zbGksdW#y!U>5Ciov+Og5Dxj#uejrPkuOBwfiyY`p=tIdXd zuIKo@z(Dy%zhU$v+|Q(Zqd(vtC*||Ji|NLnrhn=`4EbF1ecMG`RO$UtvEDCn|C4fz z{>11fxHsw>2RZmjY^~pCTYGYy5c1AOVRBhvY2NZe%sy}gJZMO)FY1q7C+4mf_y={$ z3i+=l<>8LU?Kw-en;(T)+2<}NQ0kYE8hHMbtZn9AH+C$`5<@m<>Lz>tVY#tmv$6_{ zN(!=Z?F9eoQ8unS1ZsePAZYAZZ9CqNG$dA1^ndp(Am4Sd_%BeyXY}H;3jbFW2vp}@ z=NYQuf5Sum3i@N$iEZ}?+!~r$oNU~zNnVy;lx+`Si$z`EK{j#lC-V1pQNGWe7b(aG z7l~)(D3KiAYYp?h`9ikI@= z?As#??Yxkp`L*+Y%8zHEUydI9e4Fvuv4+pC6;Th;_z9`WONwy2EcT3nc-4@z(pMJc zE!DzxLaLbcKPbBuvICE9JG;g^0!iZTU((Ku)HByGEL>bvl&@Kkkt(*ISFR9z6Xl!( z3N2f^Hn>UVLQQBLJXDdL0id5#_njMCzs-L2>XmtJ)htW))?>zhQP$Ijte>b+XSE=( zn*SR@Mn0r_=qGC8R~xtfH-ywmA?FaAokb%yzdf&9X_%QCS8MX@el143Z-Y6-L+8LV z0Y9jD{{2tDz1Z1LP$}a+lb=#XqImQic=r6(uS+(r+3tSQFB$(H=Tcs{6&F9<=?m>> z+^=Zg`$r-ZyytH(Mkri3UH=RtPP=K?0YugP=F6{)BzCrZ_DzJo2A-@*7Q_-6#!?>24`}zWLS)4IZlbNqxD3K5ch0C zmy4CO_%&XZ;w~A#`yk!~!u9$8%6juUF%9$1vllN%3SRt5URqR!%i}|EDUR?uY$N!N zBHi+xwi54_ldE#B%g?|d)?ym_KTz!0vD&!y5T>NvZGM!kO72#()Am%l<&3>fjK`d> zyF&gOMV#4#e>_9!F!79A3*B1vKNk%CTUFgE0JqM@EV5g-{y%EgnXB?OSp3sB_zEy5 z?$%Gf?mjK3eTe}(J3{%jSC=#T+E+$E)cBH4>ot6dUF_cls&gFbbZg}QzJh`3Mppk1 zb!!33lfA$9FUQxbXLC7rWBtDa_$+4jvO%85{;Sd9?!vtK{ACz}?zLhkW`gH9n4O2V z0fBnH3ZLfT^A+SbQl5uB=q*=Zvgcd8@B2@QivOxjMpV4Mqx;r-PGi)0_~id;9d}U~ z=V2Xc{1B$c=hr2kZ*2Vk+ogKspI>FzuqNrQGK`7lc}RxG|7-EGu&#R*wQ1`Arh@;G z_h;4rpX~es#@7{1LM$mND8|=@Ch2R&Qc?c_zLJ6OD9KeO&yKZw20e>}$iwmSna{}9 zpOwRwdG7lLo##YHvi$woMGSU(5-X<_KHs9EY2L3&b)N5FdH!V%b^EEC%l(&~Pp)d@ z^3mcB@4FDo&)q}Ve3CmWH=IYFO~~Ud6&p(4cUkjmWzF-(N5suSJU@dv`J9HzGdLey zG@g|sZ07m+>Ed)O`!De`!Xy?W*Hk7&JD|uFfr@Q>` zokRXk*Yk4Nvv7UivwCmLSvhV$PyhOzAcuQh!vjXY7+7+iuJ@CFG(f)Ydij;zvC?(M z!KR<scDH-*=H}@5Kx)M3EoT)#pIxEKk$>F^$qQwR-D4bh> z`(G-^mm|}EM^-Cj8G)*uZ=$RBPY_cuW*M=4wlmPGpTOG$UjL#_FZ;vUr}G4KQI{S! zE+ML@Htp|*d|dtgD}mKv^g~O!XjHR5Q3l(s&^T z4DB&s7!lF)mpy?Fw)_nTFxPAzfD}u02wvYS#j9xtMlQAI1v7E#g2k#BD0&SVMWolD z(Q^p~&#RDN{uT)`UzH&1kOYgrA{e^#7m(L$Xij+;!SW3f!L-*UnEt5*X}$U~ z`;5yam^p@E?39HPROLx;5n?<9EeT?u~qwFJNFi-_nocJpWn9?Fp5;Zg~H z?UG>2LlQhvC&6z#5 zyf4A4mVV6l*Ek7kCrhyNRta`(l%W1k61?6h!S1glXt*Gj`SuK!U~ifP`-&uZ<30)Y zKP|yqyCgVxOoGEdNYH%g<;?y`BEW@Xdnp+bUZ|8vh;QwYJT7m)1S|e2L1DoaOf1?c zLGe}ze)ft4B?l$2i~eL;87;wW2@#58 z9VkKNbP3iKO0d340_T$w+_O)DH)3SzZ+C5E$2I;SvA184*n!?xGVx%%1n+K? z;Jqml{C$N4O-}(>Iq6ZXrNjAIx0IjJnAt1Ve<$ch7NT34^@rduK)o|qc4Wa*l0X$9l^{Qc2v9;Vxfo0l9T$5Bp(E=r zl&~3SixEM}Fd^~Yh2T`k6d@EPe8FH~5u`;-#;dqQi2%tUgtKE*@K_V28Lvx)?j3`~ zi>~S+#HXWCR@&&`uuP-`+s31W;I)V+HF(M`=uv|&yB=TS2o4U#RrBB>kWedvPiEu$ z4@z(foKRs3PP`TX|2Rz^fF*dT6(BS?8k$$c2ETbB0CL<5?^Gbm1Qc7N1iPUBJ`p?y zK3HoC&bpdJRa}$>b^5KRI=2RIrisBJ;4lS0H^u zAzMga3@&c?LAf+#2|m+$oBCXMs}N~@O@nX1Z}JXAT9DGmig6+>(zFP*x<*UttstYq zJZYDhl<xgkR3a6>$kZ5&Hd+h|rg5UN2jZpqdnG+Ex5)W2IV$ zLAql78#-#m8Z(ZcGkWo}675K_{$(UTU%QTR-BG+&7A&RJ2rWa1vGJUxSndFC-i7i3dfS6?_FHuCzXL=N)_$6If zDawd=m}P1?ZzD%PwB75s`4ksHpNi;*NSwzmB~hWCz8u6wls(u*V$u!B*))TucoP8$=7s@j-_W;u}?DObe1I5h)E?!5jqk>jz5DgCzo8!x%e>5 zancd;L&}N1ha7LAX1pbtv%n!gw32GbasTC=CHXVxB^@Bw8|>a|y0QEuIpPr}rc+&7 zE-N4=2K|)sR}35mSAbm_*I07Jp#dpx?O%(}2!6^B5wnQ2b!c;jgaCb|gnsMDwVNuf zFLyuw7(Fmi1K7j=t%71#k)td~ zYCD(p9muA6_93#>f^N#!T;lIN5&ai31T$*-Xd?QtuUWyqQ`e%Cfx<+LjSNedgW(iOx-p$xnla1B6_-IVU2%yR z{Ca{=`V0lb)UFux*!~l_hC__kr}sqQoLcwTLC?2_wqTiHhjYNj#7! zv%iWu^Ys{U5go$Lb~t<1L`CE1Y^IXq@)I`*kvjfMd=?)Cn{s(D0^EH41^B#uhD`Ww zArex)#;2BW#pjsLnWw*su^Yco%oU$%HgUD5_S9E;{qs<)Y4Z?#^yDBQRQ2ab>5nEV zVz|ar7NZ{>aw|!Sv_&&0h6_LCqZObPFzg{opK58|;5t!x zLjg_5*_jeS`64C^swwwi_#84(zD9&2LDDp#ajL5JMbed~Cn(ZldJ+8;Z22v*9;QD` zg&Ahc{+am4e1}k?=~8@H%%&Q!S$bN=z|4ek6Cl9y6ebo4Rm<>d!fFL>vAkZ0l>5?2 z{1-;HgiRz`qR?g&Hp^EV7=|T0gw(6%BPz!O-4t(C!j@v06n~K-%j++~cEjcIVfv&~ z4Z8~CNPKS{wS@H_1~gnptzm^WpbM{Ou}tuTBD3S_zY!qRUv>T*2m@@lmh zn;%OQw!s0MsSV8t85Wkyfyyi$e*Jdh~KVNqKN!8UHxaR4%NsPQAGT! znr;@z2$zy*@nCx2s~P2AgoMG|t?{N_Ei8?QiD9?Uir!m5QeGVc{HRHZAcjobdVgkASLWNB)=wW z(hxtA>18IQ*ZGKvU@{b=A<^7CQsyvgU(+zD89%kIL>dsoeI+HVFE~y~`+PdLXl^zs z6$txbd8S;Mn=vW-Aniknh~{RLvW{#)N`MT_OVQk?Qt$&gVpx^0rtD9&E-zYvHwja$@RI2=AN7q&i;3- zkCEEqoszZDVVH6`W8zP;Dq^^Er~C>X|FBnB_1gF&qPdf&tTiJ!TlcpVAS*P+P2!^< zj<~`{;ZtY>!pyzDyD=IJ{dGJyLX_;qrDEJOr!bCiKv5$2DdOKDX=&a{G4A;>my9}{u+HRcz?v%GZw=-9^=R{obq?xRi4Nx~{KqL+u@4B!l&Z)595(VpL?@8= z4ccPp=O%5Iv7;PBeuxC+x7YaO>LiG0Zdoe(tT4Mk_aL331v4vaxQOOL1<~B;R32lj*618QMDBkods)KIx-3DL!TnLC1jY?}(N{*NprPD4eI9i%X7uRD zI`pZd$5K@+pd(+vcsP2ThN+PkEdw@Q!z_{4Ak0Qj)-Y@2!%%wk6b%cFe3eqBYFK#W zvy^g!hV_ZOfKsMuSX3nZDn?J&u-M3r*8@w_u((Kf0k9b(r7i;^?;|!-!v;p47zOM` z4I31Bh}dim8yvYX4OoVT4T+4s2-r;;c1`4bw1UwKHEd{P*(6|D8a6Dlol+KSSbXHW z#FlDULgakPT&7{eBcmuYSHlt`=Tc^ohK-2)8D$o0*hmq>4QXW~%p6@#yR?ay)+C21 zqcQG}u2@4BRb@q4e!xs9>DpBxc#T2qC#5;?I^a6&IM@rskfimIA7jRnw1JI<74-N5 zU``EFBS&8f>>drXL{_3dN^)tKHS(zlU>h|oH1hZJfVnj+Jn{tERMIartWRVk3QM|I z!=fVZn+&W1 zQO(1YI}m6|+wZ2yG2DVz-kODk*U)s~8#j{WhlqKcwA^b!+sRZVf(huLxtAaF8i|ib zg7_DW$OI6H#2g`UC_1{NABRb)OaSpCfd0%L-9e6cawu|wrbI9WEM|;O{iP6Y{VNSf zO!7!gG>#Y^1t_l~N|V}rlX*0tjGuz!eYvto7Tnp^BcukFPl_;K$&%9!&VkgP(L6m+ z=E0|lS1FwA=+pA(YNn6DFp;>&q@^|wE|&eCE{xO&$r&92Cn|0dKi7L_rf5V}jlg?<++dYGHgvep$le|=vB(oAY~L)x+~D%`jEhbBBh))Qqv6w&ybX6 zYItv#8tQ_0#-vnJ%U1)n)H!(kr1Zx0IdOw8hc>+NP)hlj;s5gKL>^Ts<*^`+(JNpW zYg@*y^nDCZv6QGQ!SM^9WniS65(~9h~asc;z9SG`21-!9)cR;E|j%F9i(ubSWX)gh5!b3Ig3`bVdl(uE>=JZT5#gEqjF-021;qZP97=%r+NpDd$I@?G=3WHG&np;1+1ctEIp zPM-Eag(Y7!j}Da+WEi5)zhxDYsCPR&RaAD50Y|*)iV(ba7Nc>*@W4@t9|De-eJVxD zAuggXhy}y1M}T3F-Vv}NiRi&hpOK053-xqw{Ado3P9sO;B5;H#fd*)@i^y>VqfBCW zHyrno;|T`MrM?_8#5EaDlVc3qvfZbJpi|vN!kuiwkN6Q{j*+kyxf2^TwWQ({DPn#g zZ5jjL<3l5Zh~cTK5|0W^e8-2T<>OJSat|f~iLE{~nJ=2huZnXXXgzcryano>;=!!4 zhryj}!mDpJiD;hID#_P?_&Y_L*30ZZwfqt}?qcD8RHk-S%a*7@A*K&uZp+^=Bbh#; z6r~L1$!|6qvL$&*e~p`LBDxZ3%AY5K zb(LO)OhFD8z^G^*QY$qWag*JO*3LMJiD;f$D=#wremyj`bRJ_XJDC0}g(@4%OP*^h zHRuVGdj|RJ@lgk@;UiXXB8%K&G!MV!Vk)^`5D(Dx*(x;`y?G?ATs97ZZovYQqC_;$ z$Cb$`NZX{Zb2VjnV6OBYiuB8aSP@DDRgxbfn#btMV+fh#+#rhf8O%jA57(8qkeY1w z?MNwBk0+kHD>q@(NY2-@Gbpv)1ll5c^GIGf90v|-kfv#%rHRVE8$kYA^I$Yj?Um~> z2}!=$r1{9Z{UCbtEMM76_7hknGqyx@D%0H9YfYZwQ#lb#MgMWZZt0$DE~xXlzd4L16f~RNAuQ!62_Vw5EQt$ zj^-rz`IZKPE(?7K$O)p@G(Q@|8fyrFFz!I^m20ixsMM=z-dl` z(vT{tU7kybu?HcbQI?mfM88OBxwG-HsOyuT1ZAtuhuWzP-(aagJ-;WVJpoJY`QZIs zca{zT?-9v+6ukE?0dI5HhecxS9PoZ5c`r3xrX96KBAPnOm&a^k?Bn3`NWLYeXa^AO z0C1U!-a74kFF`w!TV|phT^gI5JWIyr>8dawSn2t8x-!TGw1{A35qTcnUP1MsO{tgQMwHOjEBJ&iTpkKI14rR_q(Y;WIKIl;>?W6(q*JOxmX~;^O5uVX5VpTWT?0iM$TfTW>}- zUn+;9Ey#DhdK4o1^Hr6vN#ha80@b5TNVu5En8PSh7b8)*HVy}E*-AJ$;M76hv?Y3) zc6V!n^5i5i=IM#X4Hi}9Rj}*TG-T_~*ZylDy+41Z9-|^Ylg2|+-Y-)pjF~up0%GPu zmVgOl{tm&sF!+) z()R{0^+r;qqlN7Uvh=tT0{SZVVfJwoXq^HsgJfkcCJqs?N;w1^!syyb9Zl+ENQ#J4 z>QGI7)YKbE9mPq=0Ob-i3FMOn3)^Z^)+53qhAA(@6|7i8sum$^-6HjI@*T%|BVx4D zIwz1vc7T%6wvUV#WPtH{H%P?Q`-yhj59Qti;dMTB)~St;|r&x|LDrOd`^i z_c5)*R7pl8soFFrHIXdg=#?UFR)%DE$ugHL)5)?}nT7?bAw}vedz#eMWcdMA7Ez{D zEbL^V6C?N`Qnz?nRx5wY>ts1b7Ji7-*Ssv{%IF@QEK+BFh}4g~EO#k?M}nb?v`91h z!lBS*XfGiq?Nok*kBq9)DnlwQ9hiD08DE6WleQ^G(FGZdVzM&e3Ml1LhM_()WeoLB zBXbU-Ho{~v>ON|jkvQqEdYaaDqVDt(UNQ*0xFDh)_Y&%T37xu$sC{0Rzje)`m+`rm z@36t=tyi7pLO4w-J?TR~7I`@{YN(g$F{s`u{r@QY4)Cao_5GRMLkgrqHUtvbz*0gH zlwJaf5J(_&2tfr2P3p1`AO>V0XO*NROb4>m{}={H#-9VY@%L3>G?jD_haob6Zx~m zsJ!|sZHjN@!^Lh2RaO2wZHhDUo4Ia^uB>nW3#7Q1ZPxHSougZ&nTqg#X(JOov(S&w zimdLUAnJTXrp=uyd<{JhqB?1X7H2`gMmF~pSL5{O61jgO(roAXHx52|N7Ul5;`e)bIL5X%{A-mm-67dvI>tleV~ z_!fGj#@D29X6-$THZNK>ffYKXIkNVrMdsV+?E~AXPA2>(}_IO{$Xzrv~5Xst5 zMMevK#G6HPGqa|Kvk0Akp-uOmmrKnW;&fJTwaI?;R#sDANh6svzb{)1d2{3j^j$UN zIx>C6qV=U4S5G|$E#~{E7CD?*>SWv-tcA>xtwNi&zcB~4?dUqyU~VoiN=dd6?Z`%MJ%jLnPC+Zs8htyB)TDEyr!EKz zf0J$&?Gd9CGr?MQ)0YWV#>_+6+dW{nc8CvP9)+6N~9?Jw zwF`G>zSU-!TIX=axfnXK!O;``r)`E%oj#4u#h}!uC;Vq@hQ)PSw>=kwopa%D!&R9w zp4D}ZS8IbdnVN^{$>@Mf$nbAiTi#mF*fgDjHA9TFRULw13NfIP9B-iK&D-YrdfGWT zB9$=cZgPBrE;jGhX2=%H0ux%hAoV27{{gAEC6IUA(+8S3<_3`krs5KrXG!}`L(u*t zZ*h#~tTN$m%*ExK=%{?(*4crco2uB8m+nO7VKn#sTIZSKYREA}mR|~qMvqhHop@+NE z&Z1$Zn2Bbf8f5?q`UXb*g8tM==18=_BFp>HvwD=9%udu48M0`7lcSnd%ZE)X{97%u zycq8$B`k0x4h7p`vaiVU`go7RoSkIV6&z*J`Wi<654~8ew8GDw zFD-JAHxJ8GCz+!J_mHeHRtvta(Ju^jlQ|T8!6M5W<1MOIAJrB7(W3Q@ie3)ucBX98 zqSa%~u2RmM>0MIbCUYowA<2edt>7z-_MikOBX#G@+qA1GB;#(WZ*}yQndWYvp1qr6 z@3j_1UfA0mjWSErBFLnD(x$ESo*nsjv?_U1htF-U8@x*fxw)8e;pgp5rDfh>Z@c<# z3e~?VPto?(bdP#JKz~`gu93nN0T!}h41xRrOUN*^zZKyeL;FPLD0t6(2yO%_&R3Ow z8A{8yh5Xq0N^c*F*mXK)r01Z^_HE_6e4apz=s7)C2+E4{?Mx0q1b6S6ox~z9FNd!j z>%FvQhp^Jj%ex5^K)zpqmls;h1z^qx-mSLl{}Pi^JU zW5HJwKAY?I=i27ka9w@bdx$JSqQ2LrLL`Shi!u8t;!XkNdkg=H>BOng&>RxKA=Oi@ zk=rEC+Y|LhpE+=ZiXicSZgjK7dsh^pw}4R~*zxF(%${p%71^ zVrAO0sX$JVC(sVoe4vnG=*+3urM?d&lCK39ER`u$6eTiF*sv>2m~RI#BI8RNvC%@P zR-F;o&ysS3g&>DMM9u;$-u$vj4!TGbohBJXlDYMu%R?rKb+Ryv818=+JoPh#k;f@S z#JrB~tY0>JhwM$HtzdrNZx5qUtSNg{&a#gZ_cK~#!53ci=epG?oX%nPt0Xwl8w5YJ zLlxE_@Sh^VNLEM+PBn0&Iu~)xJWP&Y-8Gg&(aw~L!!wwyD&0P)NL{`@R;w5xOU8mY zSKb4A^vV%36Dyj6{_;j--zx_clkuf701cGKU?(gf%vM!7jg%wNgbD`9PcbmqQdK!d z3KM;0Q`A=AY6!x+4)6o4D#KWn%l`640vI$@u-AooLeN@_g1cqjn#&;m2{}WUCdn6| z3!ajDus>qH06p+G>ZdB?S;-GLK@EzKzI^y%R0D=#Uj@%I+YZd=))wYv>~Sgt+IUOU zTfu9xBl=P%DpN+0ipm{8IynD8G{B&tg1x>Qh#NN0Hl^SlnaAF|;9IG?bK%Wfhc2_= zJ4qV6$KuWV3X{u%Q)X^rym=R(5DUIH@p0a~Hcb%!LGq~F6G-x=c|3@pmhtEV{(=lP zz~$@}ew3L*BA_eSE&L=ehA@k2H~WR3CGXT#yn7I`EPj&$urKoxXF_3Ru$>Bj@{*oWU4sFcv4aBfhDX8nQ zpuS89)E7O5-(lnHMeu60Wuc4V&)WF72wtN;C2BrJC)g;nZ4MVKB$aHEjZ?{rfqtTt zl{D~-1-DBpF`y68Q_-^)qB2B{uG^Y-vdtYQGy@v0sJ)+(+c|fsXRSP+({P0i3mDqb3%$~q9r0&T_k>H?e^?SA zd*eG}9AKlAvafs+($;W7Z~wi4g~k=h~a?SDn`;0Pu`oeaHDRix;=*Z zgr~s{O5bS!cojZFK~gCi+-(EbT0mb{poISfG0jl`N!vX0V2pahKUcB&za?@yGM%)` z^At2k{h+fpk#$kf@-(1HH+pXBEJPuB%mn@IZR9@BWk61+B#qQf**}OB%_#ez=MQwW zF80|r@~EdjkTuyWNx`Fxr29O7AnefF$Kg`=?<56}8Im6IoIuVT378Zwlj8CaC?4~? zCaqLd_DqT&NpZ~_P(0ze2U(~o!^d1-$ntyI^C#*}YwD2ESGGs7B|Yz%hA9in+$un{ za1!Sjy#WlcXboc^gBq&+VgfLS1R1~Akz??S97SgUO>4@|pyLb#dz@$uvC-XoEKtv$ zW9tJ~HH+gLZu%Vtg(Niw;L-(n_{!mn;^WofV%!G=ZNj!sbSFu{CWG1YU!=Nret^X- zNnD(TDw-A&`TON1rE{l?{DU$Fi%3FcEf7&OXt)r&(0nuV=Oxa^)eCymHTgajFl63W zn6u@FTaPY zkmemfOysYZ%j%hvajzUdRODYP=Ve9!g(82mJOqPUi!?DLXM9HWsb&6RnQ|?GzJE1C z!HuhfVOs7aVx?4h)L65WdN(J!9`)b&zeEI`yuEXXY=p|rzwroUxscfMm=kPL#a<(m-X zNJC_ww2`kqm2Jy@k836hJXy4RIY{1h~eiO3fHoUhzW;C^*tsM z`Q2oB3q@sUs@xkubq$-4xb$UGeU$;Kf%1MdT(xfSBzbg=>I4UzBGJnYK=h2Q}2ARix3wvFFIpp&Yvd%yY19R{=lGH zgP^fSKDQGyc}KD69H65ngJJv(DFFs^R4_+@V!S9kt1wzsMp~BY==eT{ z>gc8xF_0uDjb`RJWnO@k_fqL&F zHhCsSi2>`-5G{)TB6*ShG?9-Z$+Xb|^K4x~vGW1cX-@uz1Z-w$7fk~PTA9Jz$P`V) z?>~vj$<&ptEN$xMixiPp6KU-ylW2+@LCqE1)WPf}MNj7SFPOg^K0Q@#Kwgo-sf+Mn zX_BKSFSve+W+icBaV}G{ZY=Hr0%m=c4eKvc6wJ2|7?E)k5%DcCu;9j`LYS#$KTeFk zvG@}dR99$Ij!>L$3t6*2wh4xf>xktqQ6_=9kDDD!h`zCy2*c45bm9vjz`U{8j#T=_ z;_yo-LQ|01+@{MXg}$-46bpzM;58Exy=M}qZ!A8>qIGgBEvy@h<>)4zSlZ+QNHUCT zAtJzFjsoN;fMEo2)Y1+J>Nu&T%ii@#$*CeY@UqGO!1ut zNbxzDLJIRkX&Lv}h&L^S$|KFl%;-xt32v%sUe!-D_>zdXDKrsnQ(>$ksEa{Q^;!v6 z4(N^pOQz`L%{-3;yrGha*8&_^J8|J3Op=Q+jYu3K-<>MN*FIZ_@K3jqMRE;Bf*%y} zJ4zA-tBK_8v&2hfXH0CJoCP=8$mz0k(9P+8lt|t_OPnWfN8hy`1!*cS{O{Vx#WJow zHck~%r|CaKByXQ3u9BBdtH$ZWWKbj5$$QXsxi~u!$=hd%n`BoQ#SB!gOfkg{Cz9Pj z;#Rp4Ga@H4vy@0)FiX5uet~+hidYpQJ>kEWB)meFcvRkj-qgwOKSX2}Thl}GC-kto zr`IX>epVqdR3!{(*Ul|l_`fEStEQP^9F2wj!L}Us@OW$Nf#AT(#`lhFdRI}yjJX5Fy|ySs2YTiK&Y@CFHr zzeucwVCLl{;4-Z)lr_)Iu}b4aTAFH4-c1@#MeEM|X%>Q56>7X$fQ4Y3r6#m>SFX%f z1cpO^Pfci1pM=#N)`Baqp3Tu;ZjQl@Y_kFB{ZMnw2GJ}q*rqSYMQpH+85z->xu)F& z&x%7^sZ0S&0>^|J`wP)&(0 zW#EB=l(V-QZiB|<7++HarT2`(+V4O$vM($$T2|4EpjZG?iisLfAHn#1c-a`wji`cz zotVXmgby1a$%LtZc@p~c!ctg_y~-2WzA9;jb{aLlIrwSgzL%7Gm6c> zh)A=hv;5Yq!$fW-(yZxqbCC=3XxYMl%tr3>yn^-7DV0T?u&(KsNnzIX+WOVlf3%TD zJtKgu$?junW=%ht@6y|>rS7CKYr0Q!R{|!*MWirmdel5C6_q`c;tEojHQjJ#Z8EMW zg;~?LWY!|XuIavwg6kUL*SY|87cmlux>(4M=Vo*cr7u`Jt*Gl^00J?q}_r;SL zM=i?|?pD^H$iER{?^MzUWm6`2hNRuzU$1-c^P#ipN%mL;U?DqoNkAB|gA% z$uWp3Vxj+r+!`s3R7MsA&6Ez4@i%%h#jjFosZu gdXF5Vq7oYp2A*&oPK9Vtt;% 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∓ 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 OnA9T7KO~{8r2h+gB&YNM literal 0 HcmV?d00001 diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/Lesson1/hill_climbing.cpp b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/Lesson1/hill_climbing.cpp new file mode 100644 index 000000000..8f1b8ab46 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/Lesson1/hill_climbing.cpp @@ -0,0 +1,68 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "hill_climbing.cpp" + +// (c) OPAC Team, LIFL, 2003-2006 + +/* LICENCE TEXT + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include + +#include +#include +#include +#include + +#include +#include +#include +#include + + + +int main (int __argc, char * __argv []) { + + if (__argc != 2) { + + std :: cerr << "Usage : ./hill_climbing [instance]" << std :: endl ; + return 1 ; + } + + srand (1000) ; + + Graph :: load (__argv [1]) ; // Instance + + Route route ; // Solution + + RouteInit init ; // Sol. Random Init. + init (route) ; + + RouteEval full_eval ; // Full. Eval. + full_eval (route) ; + + std :: cout << "[From] " << route << std :: endl ; + + /* Tools for an efficient (? :-)) + local search ! */ + + TwoOptInit two_opt_init ; // Init. + + TwoOptNext two_opt_next ; // Explorer. + + TwoOptIncrEval two_opt_incr_eval ; // Eff. eval. + + //moFirstImprSelect two_opt_select ; + moBestImprSelect two_opt_select ; + //moRandImprSelect two_opt_select ; + + moHC hill_climbing (two_opt_init, two_opt_next, two_opt_incr_eval, two_opt_select, full_eval) ; + hill_climbing (route) ; + + std :: cout << "[To] " << route << std :: endl ; + + return 0 ; +} + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/Lesson2/Makefile.am b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/Lesson2/Makefile.am new file mode 100644 index 000000000..1a169aa1d --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/Lesson2/Makefile.am @@ -0,0 +1,20 @@ +INCLUDES = -I${EO_DIR}/src/ -I ../../src/ -I ../examples/tsp/src/ + +AM_CXXFLAGS =\ + -Wall\ + -Werror\ + -Wno-deprecated\ + -ansi\ + -pedantic + +bin_PROGRAMS = tabu_search + +############################## +tabu_search_SOURCES = tabu_search.cpp + +tabu_search_LDFLAGS = + +tabu_search_LDADD = \ + ${EO_DIR}/src/libeo.a\ + ${EO_DIR}/src/utils/libeoutils.a\ + ../examples/tsp/src/libtsp.a diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/Lesson2/tabu_search b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/Lesson2/tabu_search new file mode 100755 index 0000000000000000000000000000000000000000..784da3bea192041ada6478dada4044d44a81810b GIT binary patch literal 558361 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

<1XrT3_i;Cbc0o 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

ZkS#3keJsl0OaKfhs@a8-?p%&|P##ZaO z*cI87*7Opd8P-#P&KDXKO{0LAfXs#(d&Km8c02=-&jrV5chkPcEyhvhBqi903IxL! ztk?2l+6cYF!a(OUG9k#*Tc9qXa#a0Za0{VDUCA2K#4EgjKAjyWl}A_##uDYYJ-1U~ zwipXIM)&Rtzh5o}Ai;O1E(BSv0l#(Fh0hRI*?tP48L2H7o2$C3H(_5nu=vg?n5Nbr z52am1L+YE{eyM~EK^;3}ZqQLiXRrCv{s_cnKz&e$fn@PmIVZ#;Tk-Z_cba!>Mv~*8# zDPG4gLW!APip?uP(_X4BMQqa8UE%K~qsW?It-{FCt+f7Rkq9ycQjvBu_ zOYn1n-lHVgP++HuGW5}2kIK!Y07~%GPx6ufQqehjTbJ$4Z842#^%T6%^Mpz9bX z-Mj~$Er2pj^f*Wupzb;R>usN+_WOm{V*RY5vY)g7EgG!`Io6v_noPOF4f zvYWm>@7`P&D`g#3r80DLEzVrzltP;F>3h3h@nh1wKx(>kA8OVOuy{|5Zn$(wydN+z z`Bs&Zmc%cNt$^Ddi73OqVhjsurdh|;=IV4*RLYzjMy5++;>Ubus!P7bezh839LBe$ z#*2(>#ojPTQ}uL4O9y+l4fP$QMU<1)u&S=`IaMF-wkL<&OVuTPy~}$0mI4-d%gjpt zvx@($M&GW1xJvujyic)t-?CLvY~HtIRUfc<7=xF;W26qBv|G1CRO;M5sJqu0ukmVq zQ_=_3){MjPpUO?qN_RNiO}r}3(I#BdLDN2Ov>uTAcu5@EOBbR$kPq+b$2AuB=yO9% zInc6Rlg_VYP5s7?sh{*pvI;lauh~xf+M3hxVv~*PxbiDG_)R!d;U++qwoVlT7Q$ml zLq&sWPb;<`QB)&q-qNS@G@2^+*6El7wmYneb&SoE#xCz}nXN+1FcEP8@76XEZc>Ym zjHSY9!;KBMB^+Zpm9cDBL&}U!u4TPbJv)w^E%C=VJ!ZvWk3!vyP{^1DLrF(1t9f2kgMMeZaO7Bzp>u6=)<_8bpokPehU10yEmFF*>+o zeS6|t^hI)Xy6a+9D)!j)Fue6@u6TIhe6(Oz%5vNt_a(AIQISVvSRee(5HeH+V@Eo^ z7RWMrm+IqXp} zO{cpOGmObjn~74r!PD4Fax0M#D;ZG|5|pES zT9;G!@EVc^j{zUpLv|dzc*1oRF$CPChjvHTi(542nhv{UV;Q;;I94)H1kwg%|E?nN zLzrs8Nm(vWUf$+l$2?v;k|MVp;RqrOw|*cfN+c96f8>Op1VB%MPl4pPD@JQ*Rt2_? z!jd{o#!*Q%?dMoK^9dd}wg3vtr+X1fD{w=P(Vn+~l8D)xC&t_TX8h#EX`JH_(Nk)CmjAP0U?kj1E0n(IT#PH5!!8fHDo%!ET+8L#NSA@&TDf zM^;((Uuv>G4oV=DEfriitSZQKbvgfZ-|{?&B!uKE-DtTpGkhM1l{;gY5aqRCNldI3 z*LdBsCe`#Lh4#zog&%chHn1KYcm)0K zLr1QqtBy1ZBoyMkcN<{vf{%^Lwu73}^9XFaEY>$%STJyWtK&RRs9xFBQDy3lJDf~h zBjK}&&`u(70N+@$LG&F)5a&AE_O*T0&2*StN$rBfvs&2gLAW@0|7LWHugkWSJS^lU z!CY9hw2th+t4^bRz9H8gp_4YEA^2x}I1o^6?F5~f z$ac%>v&2dDP8C_mmb8^_Izzghy~UPLv*Qcs#N8`_yYWG1{z5WYCh`|=-KRBO$SAU*uM&+ER5mPYJeKyq{p6T zeWDk-{>1Qky8qpsfM~QaPC?v*zRl_Jnf# z#2m#LG<&J~W18#}t!5GZiQFsIa{t<~TdKJBuuGCxpwBS51J8pF@{O}@eAg)Ghxov6 zW0)-WaqMJXvQre&^J*aYk2djczS<2DyLPXA9&j4xujw_@U3?Wcn`l@PlzG5oxx{7{ zNfG_Lnn_^hJ|__qS*&Q*_SE_7X;vYLD{E84$;RF+hn1$O&NzP>oAsl)=VpbbGoL2> z*8PWtI|#%xBdGY?OQd zsV5)HBoaXVreXKu`}6?8N5XzO0cV{_1%E4EhnJO9bx&XN8XYRpGHTPBj|i0rqTJ2=459GeysaR7d%e~oq>w_9Z6nikQSO3 zb$ajcVX`iGwvK$3W!d}?ckf-)j&-uWv(linyyF*|>pi;xn`4PaR-n=f?+C;a}Y5h9W+oXZUPG(Eax#^g;tl2&NKa=Cp4e5ficF?`rv(yP` zNHnY*F>`;t*}mq@>wcBH21&QnOK&ZI(mRh=@W&nYguHd6Ivq}maV|H~5O}DD=f?J;RdrRXDr!v1Hw#!0##%98c1eDVr zwfn)T#pB1lD}NIA??*X`-0JhK7PcJ};!r|d?!wD{MdVs*h^lt=ETT$YrXNnMbUW6% z^=uQ}Ig*AA*pT~h&1b+Ni4g8)AgIJ#aWS|KKEAi%>i_5s9GzL+X^_|?PIwyK%rMEv z3Xhj?(h*MMe8<~PzvFrQ;Q-o9@z*n^xiX$S9ek~lox|JuPT}U{RQ`5}Hq3)Gm0IIi zMSUT2*z&-UyPFxFt3lOROqx~+u?s#q>4YbpillnUV4qYo!pbI9u&+!i<8janEoYib z8eB6|7Z#jCv`f+y?eq=qX$dr^zT$21M$7m7u*O4>PlVL2?A~W~gzGbFi)u6++EHsP+ zds6=N%pJ2L=u)yZf&)I?+DT}T3qkRgZGg*#G&U%72eJMnwIXW+%WWu`a3 zVm1F+!++M|pH;lbc@-~mUbQ-fui`Yog5iT!%IiiGM z?=Ic+=9lB%+JwFaP$Q|Y3Qs?7>#XCmJ4M9?=ChQB1>bJJ{T2Uos`(^XLZ^3ZH)YWe zJ~*)@#ZQezZY2lOi;UU66W?#&>wRo5ajp86>32-+Y9)WF%=N;LZ6>U^?S&s+=9F6W zvUjWLb@f@VyV@j`QH zdW+FQ#Eds+JEX#{iG00Qz~@I3r)5WE@13_(Xt3P~Xo^hXiC@a*{tSPaR3pphlbV+2 zze{=|moopc?$eTYB*o|d#$P%$$jA33`5Hdjw92y8-%8cn`S>?U-pYq*H9z59@=jB} z(3bxV+Wf0D-(j;-@5ONN$EolcXj-0gB^^#>A%35&wk_yEHA&4@o+#dknuntmRogKc;DU{;H(I zx{u)ZZ)$m#&rfSwo}ZC)Sob)7Kc?kbJ|EY#JpW44(Yjxgydx<-zmC6j>Q+A5RL!y~ z%e@`pTTM^$G|e5HokaOJ@yAu<^IMvh=S$uvTjtIO>;69}Ka%D1T$HC%xAS4DI`HLx7q=v-h&$WV~>31G%e4Ck`8<1@3XZ$ z%jdb8mS>No!@4^#^4I80vV0C|TAsTk9oDVk_uX2a<+HA7c}_|?ta}K*->l_XJ|EDu zJl`qlu8k>9Fn-`2A;Ep5^mNP0RDI zB^}m1iQnJU@+_a<(zHCEm2_A)^?vLH{$wxk3^Xmz7f3p++k@YiXnB^;%QP*|f~2E$ zmrLG}6rVTX4^Y7e|A5ovIiT5mwCN!m_He7$!+fS+BR$;8hv~r`ryBC^#vkX#XI<0s zd`i;ccv<%W$vcwb^W*pfLg1rK)hw&NU#brB@j?6%UGvFiIJ_3?#;v^>k_P|S0x?ReFDG#Ov|%;KB;MWK6^AeH`e_JDL<0p^UELPGQEzE zKfxaXgHJX?wp|gn`j`|S$?|zztIp^1?@d0RzpHPX&!@imNY?MeyjezIM&|IS_m27A zJI?doG2eT~dEPr5$eoKZm}!iJSnTk&F4Vr5ih zCD!ne>K2sTsin37M`_>u4W!vU7Sp}?T>M@f?dA3Od6#54)V%ORK)3kgk>T@PP0MrZ zvFJ{+?rteRlH&70Nl(c0gvsY~j%mkdkED;J_`KZY^QnCwv6D%$@3q=Tmd^wD1JUHe zyko!EflL(=MXtjS^zp6)`{y;3^(mw0e!IIAzggCj%I4$wQnJ5cf( z{Bdpg9MrTt-z(|xL_C7uzp3R}K0mE#c{V;AT}RgavXmc5@p&oAF)2QFn5ulT8M5sX zd9AW+wOxu|$A@V(KWydB(Th>MRcboKG=-l>@W*NK`7TY%^W%~Zr*#~^AJg(IpO0%= zo_{Xsuv0YKI@v6=V3{Qb*J$Ah?Zyhe3z!>c~sJ2-DCLuVJ*+{`B6>F^HY)z>mJAN$Fw}l z=i{1|=hr0t|F?H8a8{Rf{y*qZ*>)Y4381`zR|{~83;NyLGf#mn~hFboG6 z8fJ#MAhxALmbv8`qqSzais6MeQ@o_vnt`U>OhGiY+{9~kGrVM4X8-r+`~1G=_nb55 z%)qX0w#)Cum+$rYKKJkQ{4VF2)OIucqd}h)emu~IpD{YM-2(q?&}W684|Kq*i-&nN z{3w$VTEKe*+VDG!PW{%vj}7{)@P2_dJl^QkwjO>;&}W6G2HNmUqf^^P_*p@p6>bW& z;dw@D0 z&}W6O547Rij81Jgz;6uttnj8l8~&NmsqJR?M}s~q{CJ=ZKWB7mo4Jg+3E12O?-*#q zJ6~Sh$Fkki^aB~;4uF^?)Mw&8!%7x~vM5znsS>Y+P<}45Yk=qmtp#?eiB9;bkU1dUHHay$t)OId>OVDS9 zTLW#l!|2quAAUv9XNAuUwBZYlPHk7gUmEmT;njgQe4Wv$?FRUbL7x@g6llXw8lBp1 zfqypWv%=2@I^ZjcySWB_tjXA)g7*uw;lqti{WikS3i_;YQ=kp!jZSU*;a3EGR`|?7 z8~(h}sqHHGOM^ZuygJZ^uQochT?>D0&}W6O547Rij81Jgz;6uttnj8l8~&NmsqJR? zM}s~q{CJ=ZPrkCa&1AcS$p$jQlK?g(LZzn9VS1>k3#bf*;SQry+b;N}L7x@w3AEwUjZSU*;a3EGR`|?78$QqI z)OHp8r9qz+UL9z|R~wz$u7$rg=(EDt2iowhMyIyx;MWIzR`~Wn8@}7<)OG{>#-Ps% zZwj>G$Ba&Gx4=Ie^jYEO18w+Kqf^_=8u}Hma0%Wq(1v$2I<>8a9~Jaj;XMLvcweJa z+gkX#pw9|V2(;n%8=czL!%qqNtnk!88=h@+YC9LcCFrxlt${Y&VRUNS1-~@tv%)=r zHvDm;Q`?pB13{k^K0nZgFE%>0T?Kz>&}W5L2iov;MyIwL;5P<+R(MmO4PW(d#dA)! zzcc+nM);q;VslRDHbD29!gmC*(0?RiVR?&g86sy{IZHAttWqbZ$qP4K=OMcli0&dr zz&4m@jxuStOy=~1J|0M))CZ$&Hp8aLXcn5bX*o#7coh0XAU#bB_DL1yyG-Re%lynz zWq%q-*Io&mv_&C>iuY|Zne@zHoVU0)K>iZpw9~59%#ddTwT&)=tf*6*+52k{MW4Ug$@NY zWQALTSm>riEG(d_gx;Ju79I;A78)YItny3rg;A}tS6L1NhLb{63kTbQ!jtZoNuTH! z-HiSoOV_u^i$LKQ`M4W}Z5?{LO{JA7q+3F|;hw3}`EH4$`EDxOZQJn@njm)S)sCEc z=@30k8u@}OV_1)73ScWMcxs>xAAfyu*U9!@uL)fzeCOJr7yb{U2QtF{c5RRgf8FST zjN!!J4&Z~09>@rn%V(aIV<0PhJ3i@Mp(M*H;lIH(Vxjk0E`3$PZ9y!Q6r{=vg0;%= z!gW@@Dq#U)6NTbcsdy?9VsH1irL~!c=kSf9-1L?{4!!SwS3#n@0X{(bzi@h=+jnG$$otJlWBSxW3np7CI1~w(} zo{$Pt>nSnOE z+UV3)l^6lYuken69w|K5=+w3rzAosq!V>~LQn=gbV%x)!MRis3W)l@2w)VrW0F=A% z*?}G@ywd2@qj)_Ym96mkfgUNm%IMU#@rLZk4*{|jJ|)nG+l)?ayWp1weOCCiKpXy? z(W$N8ioWsQ#jd=CaRpe*fX@%K;oFT)YarW8O*W7bz8s*BgoZH9%5=S%HVGxBg*7tr zYTl)fo>gps-3X|F!kYqZc-*%nPYWp9Uz&a(E1c*HSxNufpf@}!q^}kZw&`*l`Kpqy zcVk1)7E0U}UJ*Zv`an}RF_!GAg{=crYT*fiHoVB_wA8YlYO;Zha6Zus2U`uq&Bk!rfw2Sa;D{xAJJ z=YP{z7psW9SAw`Wke0!h`Z!kKw6~8g)v%;GKZTPIOmjokp z4*}6CrsOY}sIZEyB-MbWWMu+>A<%|b8y)4&K;9Szc2;;(pbdX|T}kffUNQYZM)=#e z2EFiijULDdmrM8Vpw9{?>8gbH`L=uvWQFfHy01$3V8KBVe-^yeZIz7q2hQN4CE={XkYY(HE*0>CGbn?o9r&wrB)2Kec+xz8$SHD;^N8nOw;pK7x;Oj`wagvkqehg*B|s*;Y44k zmi%55^oDXwRHhjnTiyK6?b4@>x5$?Vt=!HLG z^gu?qT)OokT~;_rS0%j5o$@h|6+Za8=C4Zl2%`tG!VA6^`LeL@fML5DSH};)Jr!1@JA@ z5Q<$bJQF}Hl(bHvTUFAY?^r8T2`8;HTKMwNs#U^C>x_@P zs*M&tDUk~&tvOn_JCO@NZ*<>i;XZ5GfhyrELMx9J{(2%8PU=yJDj%U9VHEVWr)BJG zSGkg=Xiv-1*M17}kbhtM<e`zE>7Lc%%K+ly1~dm+S2n3Ervg#5lws0MGlY|BH;y8OfNIPT zPP(k|Oz4$C-YA@O*$j0@=$byG)g+{C)Zh*Sy>EuFnn!XqQPNB^gp)37R1uRVn<4yB zK=yIPmRrS6IFO2c%&L9DYS2NHhRBf)(G%P+Qn^wOM4_dcHE)zHi@Z<*?-6LjGrnQD z7M{9(5#6ktEctv;Pat=~YF8j~dIg4W4v7oB{2r`B;@L{vWr=4iu`HQNUN;#DcFgo$ zc7}+=(=<0|#D11}=P@U^DbR+`g@e62YC_Ew1hMVpxu9a**X!?PS@TUN}N9bG=_Ze2QxYtmvF!exII5Djf z{%s-`eqYF~N;u>kt*7V{ABGbj)xwEwVHUL@`vee0%&)-SVWQdcexwy}_RJ)sXgWWD z(J#!fFeB8sQ$k~Bg{KDE@V=PF6Iiw_rXR=(C;GzP>tB%V64D&w6X6TUvX*7x)kw{k z85e;1M0meIm;J=G8r`VGR(OxZR=D)j*|}7>1(09i)<7HXHaZf zGth?5H99TB>ot?NrOj4Srh!n#tnm4PHhizqX?bOPArQ@aiEc1aVb*VkeH2hH2tOTY z!&{6_J&J!e=(EDl2ikDvN5z9r{0Nir;tRZEpbh7ZPW`?Kz6FTp$hHi+E|M-am)x&` zdjf6v<3^`h)vh7H02W}tLw)45lC%TCS62A^KpVc;=+y7Fd|e@zHhibi zso&RY(7j&24BJ5YH-`FTg*OG-@a}gP4-wfu1VjT=q8Ch57@#$z8fz&DKi~rcZMfFx zw6(<71$|a{LZA)T8=cyUpAz(0;i-W(e1_4fZ9n{qpw9}Q8EC`T7@gW~U&83nLhqGX z!d6|x@CP&nU(4T!ZA-}5mYBQw9wH=Q5fc1(pbfulblUk{gp{R8coBZBzF(}~z`6>k z48nT^+VDG#PRp>C0eNj0pjqMT18w+j;N6WL$O<2t z$c5)5a^Yo(T=<_8xp0zCVJmVRvVQ`i72rOyoou2xo+8@DsW86;h#k*?{uszzupeV- z3LB>P!G6X>h3`aaX|TG`fLY-Qfi`@U(P?A8Uh#KZe*4i#nP!DDW`&yqZTLK+)AGvp zBp`~Z67`y>Fe_KVUJBS01g{CS;k8Dm9>rf9^jYES18sPn(W!0YYDx;ouW(bK%l`UB zY1ao|S>f9QZTMcJQ@`8tiS}mFJ{o*wg&z;J;b)AF{9Zxb0F_sGsL%FauaQts8%;^t zOn7S2X2PYvF4{u*pAGfN3O^rc!{axq9%P~xhIcnQ^;=Evk4i>@ z@E(CK`{Rji`C&*6`HT(uW`*|)wBd0^r)5xGmxj7$g?j>R_{B}dGhVi9Oh1qnPV|LE zHqx8j)!4A$3hf+RRSP!*h=mdl)&6wgLQL2AJStW^~-bnP4S3&ZW7 zTm6qe9qumx)4CJ!V>~*xZCJ7n8@~UAPUnGHJhj~>H1+;01A=9X9wEwN~2Sc z;s=60D|~*S4X-jfwH1G9&}W5L2iow@jZSU1z&{)GS>fjcZFtZ7i^JYJ!vFg4obfgN z>3I$LjJ3RY@BrQ~(1y=3IxVkkXPImuBV4L~y?zV0Enm-U|7OY;fxr4QR32bs0%(Q` z?-6Ljokpi4vl@Q9$v7qn+y?NvQK-~(Uu26+U3m6?AnYU)H8y}|2GZMc`}bJh5-a(N zDEV~jHT)h+-!5(cPHN;|`a7vN%8&5%teJs=#CrW4 z)~{He%F_40=nFSh`d%xwd2QsWzx1~@ z(X{QawcPzhJMf4sqfJGHZ&jiM5t$km?scQv-iUNVsy8E|3lGePkXN$VRzKTh?`4d> zk@`=PE7_P2*e0ECvBBpD+VDtrHq^WjI%IpJ=?5~x>j4^3sMPdUWRIA7_QoIcRsx77 zXcer)IB)ip)!L8LRt*4nArF)~vKStU5fpdV*0%rne0bWn(B$MtEKswp}Ptos6 z-&O--0G$Kr^?IYpJ1AQha4~QxupIaj&;#@VUhcn?old$u70_9cI=Rx1kMwd$uhS*F zfF8i*E-OtZ8~Jm)PeFegxDdD!I2ZUA!1X$+(tYSq%UE6oKMEKf$zA5BY)Yr}o^BCz zFYqzoxBmvR$AJ;#73U}U-I4quXdOitryEKyou`q1PxnTX|CSf8 zI*{yD;Gip6o4`7a%**=_uU#GibP|z{MAB(NI;7|^WJf@|-MgX1`&mY@Tt^+%0TTh2 zyUgvSi~Y@lKLJo)%G*yWYC)z0p4^YyNxmqOe;#@*a6Rz#Nd74FQ@}5PKSgq#zvOwT zp6*|A9pbbU=#Atq^LCL=={?;KpnnAX1bAvI7sgb4wbzEzaLz`i^JG2(UIBQ%ZZG{MK&f87TqYY&C)=Iy=l)~)<>;;lZj9_* z=Jr2F_ez!QLM9{}8s+y6VV+akH_By&FxL;nnrO`Lvf?UY7kP+9&Ac>ZrRx%%#O zKz({Rumbu#z{@)!(SNp#ycyXkz(T<7S3`ddSPNVq$?u1L1kg!AUj}r5kk0JU`9nGw z=y7yUMfS3lOtukA2)6 z*}ME2WRhP2tl0*=+k1L1$0+Kkx~hGi0$jdl1^F|`{p=&PmD|5iK`z@r1G{27CbF+2 zKLDG9fXTqL$i9+X=M`oDg*NA&NJkz0E%a`Hm+PzOUj)j@??QeL@F3v!*OIpR0?wcZ zCPw#JI^}3GvR#oK9Lb+UuEUAmif(^EhaBwz{1Mp>VE5~Cw{y8pd-*Z&Fz^U4oLr}v zECWsjbc%`F>pYM9Gq&wH%J%0O+n;B=7SBii()a({@8`qw1z!hV@B9C6e4YD2 z;P-%z2Jw7#5J)+>4hJbGf2M+5$83BO&@mVpUWtARtYa}epMOet*T?d6&|MC!0nP`$ z0JvT{$voY9=pO;Hy%mtH(w5qn%H7`m+)kQ1qIARQm6zvzPn52bd@5~l6mT@4BR;%* ztnsc} z?`v(hiF}VBUq5@p^Lbzh`NQab0sIk~p6<2Xo-Wx!{#=p!BMXmq}&x zcC94;3O2h_53iToe{Bf)T6EtB?gDNCZUH=x-roa$5T&amR~g;*;mH1tCRg96PqqNh15X3L0=zwk)9-#~ zcBGEu@$uo~KAX}X$C0nH}wJ(*sz5Dq`(&)4vPdA)id3oMvN9iibbpX;gfpx%bk^M)Qm;Hd| z@59MljOVWoG};}xm+SSm{}TCS$z02Isqv)PUY#u3NcQdke zkzBqc^Yjlu{{)cD{eb7QwRU4}%#M5~pfigO1x|$iIB+~L3#bF$54c~qFO|!O%cey3 zqTQE#yPs{950JL$Ce|CusAHbokL0%lE`I^~-Ppx?o$lm%m;V6S2H<|+L0~w!^42j> zOMqRX{8z(&6?h<#UjyC*xIgKy03^R|E9A0W1N;!U8(0r~7jS>W>6KRHc?ftIkdKXk zryowAqi)kVwMj=v=_DpUY|7J1zX169|sk66Y`C4>+$YS}u$Q}gL_R{?tdjBZh zhklqHnFDmf(MJLI_gcws#ODUU4@TMqt>Yv-pW*aM>uGd~lBav4$zP;wF9SQ>#eM*I z1$qatm-nw-uey1iR7bDZj2{q30Ubf5qp5U6m5!fs{T%3%fDZxExm@%afTwf0(%uYw z3-}%2^2?yFOyujp*8(>JrFzM)-wL^W$@Vtjw}5;pU-vhhUU?{u%Bk{rx_A7D`w8Hk zz=6PjR{mPeze;|Fn|H(M-)Qr%QhEN`=iPASuQV@jzMC}?*a+x67axZ@az$sYyb0NX zz@MNq;FrKUf5q)Sb1&cM0Q$wYetlg9><(OkOh4v!yNBVQN$m6kahE?WWTp3z!+qbq{XHemWTN+%mEKeOJl~GDx4`xm*xmx$TVQ(&Y;S?>EwH@> z{(D7o+Dhu9y7oNG==w@;}2p+sNp?t&;rZ3if}hAeZm)fQ}DX z3A6$W0B@cD1N}kZIG{0-yPeW4jpUheJ*O?{ZJ7t|?GAX6Q*9l+`R=aFxQ@=={J1Gc zHXPF1vM@7lVMpJ%MJ+vxGUMi-)21l3%P-0;=x$k(&n=oyO6PFd+M3HRZ_Ri0<|t`~CaS<=>ubtjJbZ=B^8JkRUFy0vr3l6(is`T2Q$3v(^qEgcK<@?vaP-#i?o zd|StYPS>@}o7bIR=3IMQ2So^}th~<9eonS`Qj%bjWaAw*EdDzzMgThi6Ibvn7nnVw zRMP3%57-5e-7(l5gQ5o7FF&}Z4#A6m{&T177GbvtI~{%EdSSu)fWHM~cOQ25VONV{ zCwNG+(IGWcf$)dUk)6fY3Okd(3X)v1)pacJ=Oo`5|IFL;T{D@pka@n!M{pwWYGQXE zcK2b|k4*V0AGco!{WpNpG@r|_uy&(9kzRJ14mxzh?QX&D7VK70DCt!{w>u45Wu^F; z53S@)6qVZ(+Aq(y7lGULV%LjZqY9Q>vJ;#ExZQ^HdAmuc9WyO40;%nEeG+iHy&mM( z^fbWUrV0OfzMo0#RNs2+>am;aPLS0Ay3PmWPj;)G=2x{e%6tiu%l%yn?{?W=(r=41 znY~o`O!n@txTlo5|E0cM$q`pe>t;EjyD7(|hEDcpFMRK{n@4(BS>?UG25xYXz zLgscqjO>oU?g;E$hpIqtfL5{PuO7R4>^4Jdyy#LI`F{xTd~0^vX=F`b>I0S8$@XWF z-Tv6^kKMyENG{n3eh#?5%+5QF%q%NkkKbUY{8he@*p0;QC3Q}6dEK9bmp{K`cU@%X zx<6vzv~0h*oN-@fzP$;f*lyqcOy;)9N)ayCy{*LViEm^w&(wJ9r9R$OVt4ODJ7v~1 zy0_F$@yUHl`;mio&P<&@*si|BZr!;%XPy|7+Nq6o9hcboSh{S@&Y8b^BIxwL@)Dd_ z;_ut%?2_p@NfzOfjjq-byYWx$lBumXmHp>-qu|tMe$9K=$jnk#B6LzX>ZZ)E4;h)+ zyiX?cF616ptDzNxVt;oXH!^eFVF;7U{W%|F#eMNRCb=rU2R`JiI3DBZIr-3(=QQQo?Y7ydN;NN7t;$YwvQ8O9EyTDf&uecU?f;pGs zSKtZ8T#8eHf3xw5M}b$%5f6zwfmg3E|Cr~2-`#k{k-&$QQSl=1qfM{45cszkulXPN zw;Hc`9{42UYd&-BnAywpnzw*y-Ar!E3yVp9ik_T<9O=w;aAd;!E@Y1p3;fKa~Ff{9Z}_j$l>1 z1U}AR>(7>C2QB~W;r&v5Hj4Q?zup5$|0sAZ`5&3^qbTT_sJ#2YS4Z{-!22bChr!q0 zQ0#B>^~L_aQ{t~avOlTBpW==FsJ%v}%6A6*gQVBYQ2TurUcZvo$dmp8_`4##%DXP| zuljs1%KuT)Z9soxlKv|6`rFP;34a5;U#j2j@HKpi61SKBKw#WnPelHezy1QC+yAD- z-z)I?yJD_?l+5&}$6|j^m-y4)7IXV|?ck-;y87&&$HVK-K)GK2^p~Pyf4?sAr#}Vd z_Q#d@I|W{U0>$<6*9af`+fw3hZDfCbiNDL>>o*qr)8E>N{k>4)Pk&6q^M9zs-*4d? z`3l1IDxdzILhSFQ5`X%G32y)HXi-u7eE?pkdb?i!bntiV@0AjNI@#Op^Q8B9IAVuA zGye!bBAKt59d^&0Q^H>Y@9}lS4sXeAFjRL{03^K`_&0KZ`kUxrdX`QM!-_pZ(Ssw64T!SJgdO6zkpeE*XnUa0)1 z!0$!=-X5pH>pB5Yeb0y2pC-{tD*so)&!v1d@Jj#P#9sR-**^l`MLeZg@Ku@L%Kq`R z{r{GR==w5W@t~K#1K=Bpe+MM|2jSQLTiRap;eEZAzYoJ}z0`ObOMJT+zMm5&CMD@> zXgHl@-jMKl`0xEJZI3h5uw1&2Q5i0Q-}~pB$N{bTTn%4+VQ6oa@5k_2_7B=wNdI&A zt}D~_*p)4d{wnDN^s=7_U(I~gPC)!r_`B#Yt?Wua7ydr-bALLuTJYbmWJ9udw-L-qWo9DZ()3Ue|{Oh`iivw?touQe|!i3vVR=D zE7HFT@B6piGrMN8RD9jT>3G>k4WTO;U;iiJ^N5sZGyF>Ief%y+^mj7ur2hxKkySMMt@Y9%&UjM&K zHjwXOJj?$n@N=W`e-ys{vC#gi@8{w57aH2JRr_Bj{ngZufT#N25C1vV2hZ;Z_@Llj4@8VB~pBBZJf0mwjxggPh9sVxbhi0<+{{Vgi?d|Qi1zy)#tlO&ZF%(39 z?oG7(e+d2s+SBWQDttfdukJ&n{~~-9{@vd<;a9Q#dV6k!pUZyWK;auKfU&;S~6nnE%R8=}(8(fxpXb{8eQxgkQ&cR*zogxf*^=6t8Z9 zUloo2N8sl&KUF^Ydlo)(NjlzlRYkdu0F?hB@ave5UcaN^SF)e=`ke%S4C|NcJK*)# z*xygU*Z5rlzn1>edad$Z2EQum-ygtN@3Pa#gVAe#y`uCtg!N46cV!?~Q-9rAs=T%E zPek!-3j8|8ug}-{@GGNu(XaIE7jjAdUx1%Wf4(>I_e1y^#;4X#mG2ku{j`_&e-()%91p*e^b?ZwUxmMq{#1I|uZP#Q9FXkMgrAe}Be=z{jpqCQ@S7?B zWb~?kAACRU{Z4rKyI6Y0vzPB0_(sZe4tlL`cfx;%@$d2Ar|=Il{(L;V2(RloKtA@; zK<3&P5PvBAG0b1dM(wa$=1A!oZ(~8qee!RXX!LMYzC`>57 z)8Xq`Z^tG4TKIm(zsHw5;MYaze*>@UIh(Jne*ChNW#dA#sROZ$2UCf{Tjjzhw3}4Im_5R(7i8T5=zLrny_lMsS zm3M~tXnksfKb!VuT3G&{fPdkkw7;){*Yzbp`F~qHtZ*D&gUVnu9T_n?ZZH8aR{n0^*zmLP$-xlVZ#`ml6 zTZljI|II8Uwd^0fzK6m0lb`oz6MQ}6$>;AU;rF7vObaXTVn}_jkB>o)>xh9V?#wu*#?Ub--_q=JR>*^*pb7%=}kn zu7zJidAz^wlb-sz|L5U#T?j}v`T)iU_3``;h3}8X+uy^V&G_{3(F0%2^OUgOjLBRD zU&H#NW>)?0gTIgcp10RC@cqoEnneFH{Bp`ysQ-bC*C_v~@V`dy>0718Kgj%_0Wp#B z$g*$z7o{gYc=>OK*Pk@kdad#QQzhg&5m0@ff!`dB*EhYJa6o+XcvK7D&wTOm+z7uV z;=ADMqxf?!{2!>FZVOcZOW|v8&yM{3&Y{2bz`2X{$=mOp@cYA$OzcmDuc19d{27xu z7hadg|I6W@#=qO&20xnec>8Qtdg8zP{~i29cwb-M#76r-+RN?Vsf{<+R6y;~0Y8!U zaQ&y@*D(J)zb_{Cixd0n#Q#lrKcM-16Z~e{U+t^$c@KQ!>U6xl2>&4c>E(N?DoVVn z0ja&-2VYP6U6S;tz&Fw!^`;+_`GV}ZzC9w8cN2UK_rKoXzk;93eDU%9C-_ygZw+bW zf6qf0-^Ax7JB0GhfIpD>RVDg=fS*fyxqTOWKjYWSyAr;U@@X5c`dtmb?m|wuP53{+ zze4-^{%f~!D7Y>GRHlOxetN<;!q-IWXNP#^m$&z-#9rfD>DP)Up689Hec@L|^Y2yo zwbApJy&3rR#FvTKtNsVTuZ`l%5%5Pu<7W>1qNmdOcEQ&~{dWQUT-uLqsMY^#@R={A z?SHFyt|ma`-MN8c-t@d3CzbN z^q0feGrvDz>8mo|g8xRe-*{Z<>0j@^7vSg8KQ&4E>N>_N?Y|qm@|z5=KcVdT&w$@T zys1v?^YAN~?{0r4d{-0?uY_O4{PcMHE%<)ot+&_1@R=yT7vXE7`2Du=#6$Ya(;otV z75y9dF`1*_D9Z%cP?rnS4br?+pxf^n^x zTyARf@w0O?8k(AOIk;&>+y|!?RQl2_*EWCoxI-t8KQzOaY+dd7-u!&A6G%6|GqUjaa=C`wl9slPOzz}~bvf0ox2-j&ulw3s+S@(?M~z!L=I7?; z`7o}p)%e=BHtd^vC+Bi)o%SVQF4x<-fEbwXZ0zR4Lw(;@noI8F_MX{IowJXvtBb5M z3%gso29+px^2|ezmSSR0+eh-#myw$b=C}3qPNyl9UtKCcd|AG=cWP&6_k355&vbY8 z_2#WEgUd4W@Y&KfP|?=*>9Z&2JLlk_v%6uz;^|4k{IZtziV3Hq9GtNC)XrRIS8thA z$4+WKwe$F{-i}^slbBU1T3v0h^};1dXCGT!O83&iN0?=DbT2betE9ttY3pe1&Q+*# z-9#@?YqwY2D^#geHs0Flta3$5{53NsXJ9f>V@SQ6jLGAVI;v@UbFO*Hku#=iLP^b+ zp4}~{eDm&jx?FS z7&f?J19exuQbV+J(h(xBb0+3H|Nf|k;*m0s!FKY@W5-WFzG1=i!@4x|kMEeyD7SKu z;z&}IZ+J`E)H}YGp}eTO^VD2>zGGqUqFlbayR*CT*w*^`qh~Z6IrYR7a}&l*G2*-(Lrxm;g|ddLDsetvF284% z&Es>SUd8=Up_)adoZVEHOB$ta!jjIJol|FJ7``86Zh9S5sQ%lH9Y3gjB+S$?D*3nlw9+Ocv^VmuG&ITrZ z$#6ZqwY{aMXC|NETX>k6RKUk((@@ip+2qR%zb(-I;=kCXCBda>e6FEsqIK!Sq)Wj= zb?K1Nt#MF)FD3{6#V*tMHPaVSj~7~#)2Lh&Xw)x@Iv8QzeuE-UakCR7(w(XHh96v( zo1I_C%9`()qgmF}I*Ax9C)i=C?Nv8d@_;B35Zc@G+4#NIadGK^ot6 z6LZIfrJ=2(C*R#W?6e@2O})jlkAG z1(o9rHM1>OXY(ost=bYAExX%%sPZ06})sh4zmp^EX3+Dr7tXu zgB)pjJUZV|x#oqlk=tdy8*A2}KYrd~_EglT?Cn-AEcCY0+Kpc_ zaM)ASstqay=%~$x++7wGY=Jdvg?)ra4eg<9vD0ee3tnNtD4vWeVM#Dz`xLd!P{YMD zWTN)u^B-QwNw4XU?mkvSe$!^VbEYIQsi$i^Yeqs+E9LK(7?mq zKooUxavRg$qy2d4CT(_F+fJSyXJ|`?)uPbUr2)Vr<2vdn$A$KP+8w$03@WXaQm)Q$|Tv|Pn^D_tM{~Ui?84IYK9NH2w8u2m%a6( z)w%zQrZ(G5o7#5QKE3I%-0Y@#w$VN`#~u9Ocp7i>3(HFR=|4;6mu?fv-AS`~injv3XcjL{;hBK9MpIFMBFlLDQG5f^#a@<2 zA-N?yL0!(%AATqO;iN*zK08SA+* zE<8+Gth+dZKy;TKMeSr6^?WO>q9F`=*lhMqVi=;_@s$MsP{inQOjI5+S8=9q<)ayu zUXOnWYBm7J^X5WFByeNh(d+F$r>;1>s9f3&6>l0#C%iVFJScq)o=hdHV$-o=eoo+qb8v4KaG zJZ4$K1NYv1>9#93zo#>|h}UNvcadxbb%&Bp@1iMYw@XBpl1BnzX&7>&V9w*`n7WDipkZPG`+Jn^+he}hI1cM-=C5cRx9FA;}*W~1rO-r(598g9dGG71yO1CDR2 z%k-}egu$;hhD_nhiU&*;YPhUC7IA;xGkx)((c^D{%9Jo!BkCq;im@E)oV!s{q8+1nv?a8R9W*jg*p%O9JMrD$FaKf zA-7G3uD1|tF|CkkSfyNPp8;q^C|ii) z=u&ufH{=i=ZowTiP|Cgz;r&QF|I@u1PpXsMtjDi1&&ta_VQH%HAX;r!{w1#WL2)zq z^IrC@L*42nPZNvp&uwhyI6tcJ^1s3pmE_HLg>ESnEIfSjPXz3hTXAeIb4OHs)1mkN zJ#E9@cci`6l=GM5|D`=FQ$BjH$qb>%E^_VZ^r6Jd*d^xu^Gs{l0LT46*GmSD^<@nsIvsF)o!<4lhkq9na7REFt1ox+`>v#_6rbe zhXvjF%56}1B{%5pi&sM%Cfo8BwQ?b(rSBvMc~H+a({ulsCoko18;XixEf_}Iptlbe zn!Wz@1ITd^|e24%sZMpyphbK$u32!^U$D&%w@K> zgI}tZwv^4rblI)+O0nE`1ckQo;OlLZE-b$BXZu&-dF~MHV-N0%qV8-SR@q1lIV2w| zr9;m~+AP_hv~ihnQ5fV^{wUIYA2>#tKh= zY1Qx{L^7lq4|G?1*|+V{yDWlH{4Q%!u5`8$5QiLT@H7;sCcU4$|D^7!OPwCr$=-GFLdiWN-WUT3E~b2z;iiO^_DNsb@3*lvx8q*F!h$zmc)?CAL1nCvcXaAKFLa4u5Fu} z(n*@$S0-(=&HJP9sF#oP^oWsBUsPX-v|laLm6_b%cbwWr06?8f9g~|ao5L3 zTN|?n6@Jj8jN~y!^h#vNmlw$$Y;hgxY8UXOG>295-H(08M7FvmY|m?Gl*Wbl@e4nT z;ii$t{tNT=(;0m^*EpxGtu#$|{8sMQ1H~VEt8EHHKb>yL7cfOL#Ye4nCFRC|f6b88 zxWXRGy)-3*-nvs8fO5fTEB7Dl`#Sj;dT_&0(sBb{N-kDIrgS{7oJ9_xB5_%r{ah7J>d@a9jQlKh^kWF@qWlQ%8e zi5KrmLlalL!Af4pB34)vLG{E$zNZHm8SFE@BRQih)o40^nt{H&nN4awlp Gn)&}qnHd`Z literal 0 HcmV?d00001 diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/Lesson2/tabu_search.cpp b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/Lesson2/tabu_search.cpp new file mode 100644 index 000000000..59a5d9712 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/Lesson2/tabu_search.cpp @@ -0,0 +1,69 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "tabu_search.cpp" + +// (c) OPAC Team, LIFL, 2003-2006 + +/* LICENCE TEXT + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include + +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +int main (int __argc, char * __argv []) { + + if (__argc != 2) { + + std :: cerr << "Usage : ./tabu_search [instance]" << std :: endl ; + return 1 ; + } + + Graph :: load (__argv [1]) ; // Instance + + Route route ; // Solution + + RouteInit init ; // Sol. Random Init. + init (route) ; + + RouteEval full_eval ; // Full. Eval. + full_eval (route) ; + + std :: cout << "[From] " << route << std :: endl ; + + /* Tools for an efficient (? :-)) + local search ! */ + + TwoOptInit two_opt_init ; // Init. + + TwoOptNext two_opt_next ; // Explorer. + + TwoOptIncrEval two_opt_incr_eval ; // Eff. eval. + + TwoOptTabuList tabu_list ; // Tabu List + //moSimpleMoveTabuList tabu_list(10); + //moSimpleSolutionTabuList tabu_list(10); + + moNoAspirCrit aspir_crit ; // Aspiration Criterion + + moGenSolContinue cont (10000) ; // Continuator + + moTS tabu_search (two_opt_init, two_opt_next, two_opt_incr_eval, tabu_list, aspir_crit, cont, full_eval) ; + tabu_search (route) ; + + std :: cout << "[To] " << route << std :: endl ; + + return 0 ; +} + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/Lesson3/Makefile.am b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/Lesson3/Makefile.am new file mode 100644 index 000000000..967652ed5 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/Lesson3/Makefile.am @@ -0,0 +1,20 @@ +INCLUDES = -I${EO_DIR}/src/ -I ../../src/ -I ../examples/tsp/src/ + +AM_CXXFLAGS =\ + -Wall\ + -Werror\ + -Wno-deprecated\ + -ansi\ + -pedantic + +bin_PROGRAMS = simulated_annealing + +############################## +simulated_annealing_SOURCES = simulated_annealing.cpp + +simulated_annealing_LDFLAGS = + +simulated_annealing_LDADD = \ + ${EO_DIR}/src/libeo.a\ + ${EO_DIR}/src/utils/libeoutils.a\ + ../examples/tsp/src/libtsp.a diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/Lesson3/simulated_annealing b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/Lesson3/simulated_annealing new file mode 100755 index 0000000000000000000000000000000000000000..8eb29a2cda08264c12a10e5d36f96ee55ce54da2 GIT binary patch literal 470656 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%0A9@E_+`c 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%0AD|A-;R5uFCsXr$o9D|x~v%Soyv8!5)$?DgZ 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 Ua7Bj^Ev;HuX + +#include +#include +#include +#include + +#include +#include +#include + +int main (int __argc, char * __argv []) { + + if (__argc != 2) { + + std :: cerr << "Usage : ./simulated_annealing [instance]" << std :: endl ; + return 1 ; + } + + Graph :: load (__argv [1]) ; // Instance + + Route route ; // Solution + + RouteInit init ; // Sol. Random Init. + init (route) ; + + RouteEval full_eval ; // Full. Eval. + full_eval (route) ; + + std :: cout << "[From] " << route << std :: endl ; + + /* Tools for an efficient (? :-)) + local search ! */ + + TwoOptRand two_opt_rand ; // Route Random. Gen. + + TwoOptIncrEval two_opt_incr_eval ; // Eff. eval. + + TwoOpt move ; + + moExponentialCoolingSchedule cool_sched (0.1, 0.98) ; // Exponential Cooling Schedule + //moLinearCoolingSchedule cool_sched (0.1, 0.5) ; // Linear Cooling Schedule + + moGenSolContinue cont (1000) ; /* Temperature Descreasing + will occur each 1000 + iterations */ + + moSA simulated_annealing (two_opt_rand, two_opt_incr_eval, cont, 1000, cool_sched, full_eval) ; + simulated_annealing (route) ; + + std :: cout << "[To] " << route << std :: endl ; + + return 0 ; +} + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/Makefile.am b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/Makefile.am new file mode 100644 index 000000000..d4b5c340c --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/Makefile.am @@ -0,0 +1 @@ +SUBDIRS = examples Lesson1 Lesson2 Lesson3 diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/Makefile.am b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/Makefile.am new file mode 100644 index 000000000..9f1b78722 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/Makefile.am @@ -0,0 +1 @@ +SUBDIRS = tsp diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/Makefile.am b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/Makefile.am new file mode 100644 index 000000000..af437a64d --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/Makefile.am @@ -0,0 +1 @@ +SUBDIRS = src diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/benchs/ali535.tsp b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/benchs/ali535.tsp new file mode 100644 index 000000000..7fec4bf14 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/benchs/ali535.tsp @@ -0,0 +1,536 @@ +535 +36.49 7.49 +57.06 9.51 +30.22 48.14 +5.15 -3.56 +34.59 -106.37 +57.12 -2.12 +16.45 -99.45 +5.36 -0.1 +28.56 -13.36 +8.59 38.48 +12.5 45.02 +-34.48 138.38 +30.23 -9.33 +56.18 12.51 +36.4 -4.3 +40.38 8.17 +35.11 -3.5 +41.55 8.48 +-37.01 174.47 +38.17 -0.34 +36.42 3.13 +36.11 37.14 +35.14 -101.42 +31.58 35.59 +52.18 4.46 +61.1 -149.59 +39.57 32.41 +51.11 4.28 +17.08 -61.47 +43.37 13.22 +29.38 35.01 +59.39 17.55 +15.18 38.55 +-25.14 -57.31 +23.58 32.47 +37.54 23.44 +33.46 -84.31 +12.3 -70.01 +24.26 54.28 +36.55 30.48 +26.16 50.38 +40.29 50.01 +39.11 -76.4 +10.48 -74.52 +-16.11 -52.3 +10.25 45.01 +41.18 2.05 +32.22 -64.42 +41.56 -72.41 +40.39 17.57 +44.49 20.19 +9.21 34.31 +32.06 20.16 +52.29 13.24 +48.27 -4.25 +-19.48 3.45 +33.49 35.29 +54.39 -6.14 +35.48 -101.22 +4.24 18.31 +13.04 -59.3 +60.17 5.13 +44.48 -68.5 +33.14 44.14 +45.4 9.24 +33.34 -86.45 +52.27 -1.45 +42.33 9.29 +45.48 -108.37 +43.28 -1.32 +13.21 -16.4 +-3.19 29.19 +13.55 100.36 +12.38 -8.02 +55.44 9.09 +44.32 11.18 +12.57 77.4 +-15.41 34.58 +27.13 56.22 +-27.25 153.05 +44.5 -0.43 +4.42 -74.09 +50.47 -1.51 +19.05 72.52 +67.16 14.22 +42.22 -71 +53.03 8.48 +41.08 16.47 +46.55 7.3 +51.31 -2.35 +50.54 4.29 +-15.52 -47.55 +47.35 7.32 +48.1 16.13 +47.27 19.15 +-34.49 -58.32 +42.55 -78.38 +44.3 26.06 +49.27 2.07 +-4.15 15.15 +39.15 9.04 +30.08 31.24 +23.11 113.16 +33.33 -7.4 +-11.54 22.45 +4.49 -52.22 +52.13 0.11 +-35.19 149.12 +10.36 -66.59 +22.39 88.27 +52.5 -1.19 +49.01 2.33 +43.33 6.57 +45.4 -0.19 +39.37 19.55 +50.52 7.09 +41.59 -87.54 +41.48 12.36 +9.34 -13.37 +41.25 -81.51 +3.26 -76.25 +42.31 8.48 +-28.02 145.37 +7.11 79.53 +40.04 -83.04 +33.22 -7.35 +48.07 7.22 +44.22 28.29 +45.4 -0.19 +6.21 2.23 +55.37 12.39 +-33.58 18.36 +37.28 15.04 +10.27 -75.31 +-26.25 146.14 +39 17.05 +12.12 -68.57 +39.09 -84.2 +39.03 -84.2 +51.24 -3.12 +29.11 -81.03 +23.46 90.23 +14.45 42.59 +32.5 -96.51 +33.25 36.31 +-6.53 39.12 +42.34 18.16 +-29.58 30.57 +38.51 -77.02 +28.34 77.07 +39.46 -104.53 +32.46 -96.24 +26.16 50.1 +47.16 5.05 +33.52 10.47 +14.45 -17.3 +4.01 9.43 +19.08 30.26 +25.16 51.34 +49.22 0.1 +-8.45 115.1 +51.08 13.46 +-12.25 130.52 +42.14 -83.32 +42.13 -83.21 +53.26 -6.15 +51.17 6.45 +25.15 55.2 +0.03 32.26 +45.32 4.18 +55.57 -3.22 +51.27 5.23 +31.48 -106.16 +52.5 -1.19 +48.19 6.04 +40.07 33 +40.09 82.4 +40.42 -74.1 +50.44 -3.25 +-34.49 -58.32 +64.49 -147.51 +37.01 -7.58 +-11.35 27.31 +59.54 10.37 +41.49 12.15 +14.35 -61 +33.56 45.8 +-4.23 15.26 +43.49 11.12 +8.37 -13.12 +41.26 15.32 +50.02 8.34 +44.12 12.04 +-21.13 27.29 +28.27 -13.52 +53.29 -1 +-19.27 29.52 +54.23 18.28 +60.12 11.05 +24.57 10.1 +-22.5 -43.15 +55.52 -4.26 +45.22 5.2 +7.09 41.43 +44.25 8.5 +57.4 18.18 +41.54 2.46 +37.11 -3.47 +47 15.26 +51.09 -0.11 +14.34 -90.32 +46.14 6.07 +-2.09 -79.53 +52.28 9.42 +53.38 10 +60.19 24.58 +35.2 25.11 +30.2 120.51 +22.19 114.12 +31.4 6.09 +35.33 139.46 +21.2 -157.55 +29.59 -95.28 +38.57 -77.27 +43.06 -78.57 +38.52 1.22 +47.34 -97.27 +50.21 30.55 +-25.44 -54.28 +39.44 -86.17 +40.59 28.49 +38.17 27.1 +21.3 39.12 +49.13 -2.12 +40.38 -73.46 +11.33 43.1 +-6.09 106.51 +-26.08 28.15 +-3.22 36.38 +45.28 -73.44 +12.03 8.31 +34.34 69.12 +63.59 -22.37 +-1.58 30.08 +22.34 120.17 +24.54 67.09 +-6.18 155.43 +17.56 -76.48 +50.05 19.47 +15.36 32.33 +27.42 85.22 +3.08 101.33 +29.13 47.58 +-8.51 13.14 +10.36 -66.59 +36.04 -115.09 +33.56 -118.24 +53.52 -1.39 +48.58 2.27 +0.27 9.25 +34.52 33.38 +43.11 0 +59.49 30.17 +36.51 -2.22 +51.24 12.25 +51.25 12.14 +6.1 1.15 +40.46 -73.52 +33.57 -118.24 +50.38 5.27 +51.09 -0.11 +51.28 -0.27 +50.34 3.05 +-12.01 -77.07 +45.27 9.16 +38.46 -9.08 +46.13 14.28 +35.3 12.37 +48.14 14.11 +51.28 -0.27 +6.35 3.2 +27.56 -15.23 +-16.3 -68.11 +53.21 -2.53 +6.1 1.15 +51.53 -0.22 +-25.55 32.34 +-15.2 28.27 +4.27 114 +49.37 6.12 +-17.49 25.49 +25.41 32.43 +45.44 4.56 +13 80.11 +40.29 -3.34 +31.52 -4.13 +53.21 -2.16 +-3.04 -60 +10.34 -71.44 +-4.02 39.36 +46.22 15.47 +39.18 -94.44 +28.32 -81.2 +23.36 58.17 +44.25 8.5 +-37.44 144.54 +24.31 39.42 +-37.41 144.51 +19.26 -99.04 +12.07 -86.11 +2.01 45.19 +25.48 -80.17 +20.56 -89.41 +45.27 9.16 +35.45 10.45 +39.07 -94.36 +35.52 14.29 +4.11 73.32 +47.45 7.26 +55.33 13.22 +54.31 -1.25 +14.31 121.01 +55.58 37.25 +43.35 3.58 +-25.55 32.34 +-8.58 125.13 +43.26 5.13 +-20.26 57.41 +51.21 1.21 +44.53 -93.13 +53.52 27.33 +50.55 5.47 +29.59 -90.16 +-26.31 31.19 +48.08 11.42 +-34.5 -56.02 +45.38 8.43 +49.05 6.08 +-17.45 177.27 +40.53 14.18 +25.02 -77.28 +-1.19 36.56 +43.4 7.13 +55.02 -1.41 +45.56 6.06 +12.08 15.02 +32.56 129.56 +35.09 36.17 +13.29 2.1 +18.06 -15.57 +-13 28.39 +58.35 16.15 +35.45 140.23 +47.09 -1.36 +49.3 11.05 +52.41 1.17 +40.38 -73.46 +55.28 10.2 +46.26 30.41 +26.21 127.46 +35.26 -97.46 +40.54 9.31 +41.07 -95.55 +41.14 -8.41 +41.59 -87.54 +51.5 -8.29 +28.26 -81.19 +35.38 -0.37 +48.43 2.23 +34.47 135.27 +60.12 11.05 +51.12 2.52 +44.34 26.06 +12.21 -1.31 +43.26 -5.5 +18.34 -72.17 +48.43 2.23 +40.05 116.36 +-31.56 115.58 +4.52 7.02 +37.08 -76.3 +39.52 -75.15 +33.26 -112.01 +55.52 -4.26 +46.35 0.18 +40.3 -80.14 +-5.15 39.49 +39.33 2.44 +38.1 13.06 +11.33 104.51 +36.49 11.58 +-9.27 147.13 +10.36 -61.21 +9.05 -79.23 +50.06 14.16 +43.41 10.24 +42.26 14.11 +16.16 -61.32 +9.03 -79.24 +43.23 -0.25 +45.39 12.12 +31.37 -8.03 +34.03 -6.45 +-8.08 -34.55 +38.04 15.39 +64.08 -21.57 +16.54 96.09 +49.19 4.03 +36.23 28.07 +-29.43 -53.42 +-22.5 -43.15 +45.13 14.35 +44.01 12.37 +48.04 -1.44 +6.14 -10.22 +41.49 12.15 +14.1 145.15 +-32.55 -60.47 +51.57 4.26 +24.42 46.44 +33.37 73.06 +6.3 -58.15 +15.29 44.13 +13.42 -89.07 +32.44 -117.11 +-23 -47.08 +29.32 -98.28 +-17.56 31.06 +48.31 -24.8 +-33.23 -70.47 +42.54 -8.25 +33.14 44.14 +18.26 -69.4 +47.27 -122.18 +27 14.27 +37.33 126.48 +51.34 0.42 +-4.4 55.31 +37.37 -122.23 +31.12 121.2 +25.21 55.24 +16.45 -22.57 +1.21 103.54 +37.22 -121.56 +43.49 18.2 +9.58 -84.16 +9.59 -84.12 +18.26 -66.01 +40.31 22.58 +41.58 21.38 +40.53 -111.57 +36.58 -25.1 +52.42 -8.55 +42.42 23.24 +43.32 16.18 +-12.54 -38.2 +38.45 -90.22 +51.33 0.14 +59.39 17.55 +48.41 9.13 +38.54 16.15 +58.53 5.38 +55.58 37.25 +37.26 -5.54 +48.32 7.38 +52.22 13.3 +-33.56 151.1 +29.33 52.36 +47.48 13 +40.31 17.24 +41.19 69.24 +28.29 -16.2 +38.31 -28.43 +43.11 0 +28.29 -16.2 +14.02 -87.14 +52.29 13.24 +35.41 51.19 +41.2 19.47 +32.4 13.09 +43.37 1.23 +32.01 34.53 +22.49 5.27 +0.23 6.43 +35.43 -5.55 +-18.48 47.29 +33.56 8.06 +-24.42 -53.42 +25.04 121.33 +37.55 12.29 +51.23 -2.43 +45.12 7.39 +45.5 13.28 +45.39 12.12 +47.26 0.43 +36.18 -95.52 +36.51 10.14 +52.34 13.18 +35.33 139.46 +35.54 -83.53 +40.62 13.11 +-0.08 -78.29 +12.41 101.01 +13.45 -60.57 +44.55 4.58 +43.14 27.49 +45.3 12.21 +-23 -47.08 +48.07 16.33 +39.29 -0.29 +41.42 -4.51 +45.24 10.53 +38.57 -77.27 +52.1 20.58 +36.45 -6.04 +53.19 -113.35 +44.53 -63.31 +45.41 -74.02 +45.19 -75.4 +46.48 -71.24 +42.16 -82.58 +48.57 -54.34 +45.28 -73.44 +49.11 -123.1 +49.55 -97.14 +51.07 -114.01 +47.37 -52.45 +43.41 -79.38 +44.06 15.21 +45.45 16.04 +41.4 -1.03 +-6.13 39.13 +47.28 8.33 +51.33 0.14 +24.58 91.53 diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/benchs/eil101.tsp b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/benchs/eil101.tsp new file mode 100644 index 000000000..f12903349 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/benchs/eil101.tsp @@ -0,0 +1,102 @@ +101 +41 49 +35 17 +55 45 +55 20 +15 30 +25 30 +20 50 +10 43 +55 60 +30 60 +20 65 +50 35 +30 25 +15 10 +30 5 +10 20 +5 30 +20 40 +15 60 +45 65 +45 20 +45 10 +55 5 +65 35 +65 20 +45 30 +35 40 +41 37 +64 42 +40 60 +31 52 +35 69 +53 52 +65 55 +63 65 +2 60 +20 20 +5 5 +60 12 +40 25 +42 7 +24 12 +23 3 +11 14 +6 38 +2 48 +8 56 +13 52 +6 68 +47 47 +49 58 +27 43 +37 31 +57 29 +63 23 +53 12 +32 12 +36 26 +21 24 +17 34 +12 24 +24 58 +27 69 +15 77 +62 77 +49 73 +67 5 +56 39 +37 47 +37 56 +57 68 +47 16 +44 17 +46 13 +49 11 +49 42 +53 43 +61 52 +57 48 +56 37 +55 54 +15 47 +14 37 +11 31 +16 22 +4 18 +28 18 +26 52 +26 35 +31 67 +15 19 +22 22 +18 24 +26 27 +25 24 +22 27 +25 21 +19 21 +20 26 +18 18 +35 35 diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/benchs/pr2392.tsp b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/benchs/pr2392.tsp new file mode 100644 index 000000000..010a2c7ec --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/benchs/pr2392.tsp @@ -0,0 +1,2393 @@ +2392 +1639 2156 +1875 2925 +2150 2925 +2425 2925 +2525 2675 +2525 2575 +2525 2375 +2525 2275 +2525 2175 +2786 2148 +2786 2249 +2786 2352 +2785 2451 +2785 2552 +2787 2651 +2925 2925 +3198 2925 +3475 2925 +3725 2925 +3675 2675 +3675 2575 +3675 2375 +3675 2275 +3675 2175 +4189 2156 +4190 2256 +4190 2355 +4189 2456 +4189 2556 +4190 2656 +4275 2975 +4425 2925 +4700 2925 +4975 2925 +5075 2675 +5075 2575 +5075 2375 +5075 2275 +5075 2175 +5336 2148 +5336 2249 +5336 2352 +5335 2451 +5335 2552 +5337 2651 +5475 2925 +5748 2925 +6025 2925 +6275 2925 +6225 2675 +6225 2575 +6225 2375 +6225 2275 +6225 2175 +6739 2156 +6740 2256 +6740 2355 +6739 2456 +6739 2556 +6740 2656 +6825 2975 +6975 2925 +7250 2925 +7525 2925 +7625 2675 +7625 2575 +7625 2375 +7625 2275 +7625 2175 +7886 2148 +7886 2249 +7886 2352 +7885 2451 +7885 2552 +7887 2651 +8025 2925 +8298 2925 +8575 2925 +8825 2925 +8775 2675 +8775 2575 +8775 2375 +8775 2275 +8775 2175 +9289 2156 +9290 2256 +9290 2355 +9289 2456 +9289 2556 +9290 2656 +9375 2975 +9525 2925 +9800 2925 +10075 2925 +10175 2675 +10175 2575 +10175 2375 +10175 2275 +10175 2175 +10436 2148 +10436 2249 +10436 2352 +10435 2451 +10435 2552 +10437 2651 +10575 2925 +10848 2925 +11125 2925 +11325 2175 +11325 2275 +11325 2375 +11325 2575 +11325 2675 +11375 2925 +11375 3125 +11400 3225 +11400 3325 +11400 3475 +11400 3625 +11300 3825 +11125 3825 +11125 3925 +11025 3975 +10925 3975 +10925 3875 +10550 3925 +10550 3725 +10550 3325 +10100 3325 +10100 3725 +10100 3925 +9725 3875 +9725 3975 +9625 3975 +9550 3875 +9425 3875 +9275 3900 +9250 3700 +9250 3575 +9250 3475 +9250 3375 +9250 3275 +8825 3125 +8850 3225 +8850 3325 +8850 3475 +8850 3625 +8750 3825 +8575 3825 +8575 3925 +8475 3975 +8375 3875 +8375 3975 +8400 4125 +8300 4175 +8400 4275 +8500 4175 +8675 4325 +8775 4425 +8825 4325 +9275 4275 +9375 4275 +9325 4375 +9400 4450 +9400 4550 +9325 4500 +9215 4560 +9215 4710 +9375 4775 +9215 4860 +9215 5010 +9215 5160 +9215 5310 +9215 5460 +9215 5610 +9475 5675 +9475 5525 +9475 5425 +9475 5275 +9475 5025 +9575 5075 +9725 5075 +9675 4975 +9575 4925 +9525 4775 +9600 4675 +9625 4775 +9775 4775 +9975 4600 +9875 4600 +9800 4525 +9700 4525 +9700 4425 +9800 4425 +9800 4325 +9700 4275 +9600 4175 +9700 4125 +9800 4175 +9875 4275 +9975 4275 +10075 4175 +10275 4175 +10375 4175 +10575 4175 +10675 4275 +10775 4275 +10850 4325 +10850 4425 +10850 4525 +10775 4575 +10675 4575 +10875 4775 +11025 4775 +11175 4725 +11050 4675 +10950 4500 +10950 4400 +10950 4275 +10850 4175 +10950 4125 +11050 4175 +11225 4325 +11375 4325 +11325 4425 +11325 4575 +11325 4675 +11325 4775 +11325 4925 +11450 4925 +11450 5075 +11422 5204 +11425 5325 +11325 5275 +11325 5375 +11175 5375 +11175 5275 +11125 5175 +11100 5025 +10975 4975 +10925 5075 +10950 5175 +10900 5275 +10900 5375 +10800 5175 +10525 5175 +10325 5175 +10325 5025 +10425 5075 +10475 4975 +10325 4875 +10175 4975 +10225 5075 +10125 5175 +9975 5175 +10050 5250 +10050 5350 +10025 5450 +10175 5450 +10325 5450 +10475 5450 +10575 5450 +10675 5450 +10525 6025 +10525 6125 +10675 6125 +10825 6025 +11025 6050 +11224 5908 +11400 5975 +11400 6375 +11400 6575 +11175 6575 +11025 6450 +10975 6675 +11075 6775 +10975 6875 +11175 6975 +11375 6975 +11325 7075 +11400 7150 +11125 7150 +10975 7150 +10875 7325 +10925 7425 +11075 7425 +11175 7475 +11075 7575 +11175 7625 +11175 7725 +11025 7725 +11025 7825 +11175 7825 +11325 7875 +11425 7925 +11425 8075 +11325 8075 +11275 8175 +11425 8225 +11425 8375 +11275 8325 +11175 8325 +11075 8225 +10975 8225 +10925 7975 +10775 7825 +10825 7600 +10725 7575 +10775 7425 +10675 7425 +10525 7425 +10525 7575 +10450 7750 +10300 7750 +10425 7875 +10525 7925 +10575 7825 +10625 7975 +10725 7975 +10725 8075 +10625 8125 +10525 8075 +10425 8025 +10425 8125 +10250 8225 +10150 8225 +10225 8125 +10275 7975 +10125 7975 +10000 7875 +10000 7775 +9825 7825 +9625 7725 +9475 7725 +9425 7625 +9575 7625 +9625 7475 +9725 7575 +9825 7475 +10025 7525 +9975 7425 +9925 7275 +9825 7075 +9625 7075 +9725 6975 +9875 6775 +9725 6775 +9575 6825 +9575 6675 +9725 6425 +9625 6200 +9725 6025 +9625 6000 +9225 6375 +9225 6525 +9375 6525 +9375 6675 +9225 6675 +9225 6875 +9225 7075 +9226 7259 +9225 7260 +9226 7409 +9225 7410 +9225 7560 +9226 7560 +9225 7710 +9225 7711 +9325 7825 +9225 7875 +9225 7975 +9225 8075 +9225 8175 +9225 8275 +9225 8375 +9225 8475 +9275 8825 +9475 8825 +9578 8820 +9847 8703 +9875 8825 +10025 8725 +10075 8825 +10175 8725 +10100 8575 +10250 8375 +10250 8475 +10250 8625 +10475 8775 +10575 8775 +10675 8775 +10775 8775 +10925 8775 +10875 8625 +10875 8525 +10975 8575 +11175 8475 +11275 8425 +11350 8575 +11450 8675 +11350 8775 +11325 9325 +11325 9425 +11325 9525 +11325 9725 +11325 9825 +11125 10075 +11375 10075 +11375 10275 +11400 10375 +11400 10475 +11400 10625 +11400 10775 +11300 10975 +11125 10975 +11125 11075 +11025 11125 +10925 11125 +10925 11025 +10550 10875 +10550 11075 +10275 11325 +10375 11325 +10575 11325 +10675 11425 +10775 11425 +10850 11475 +10850 11575 +10850 11675 +10775 11725 +10675 11725 +10875 11925 +11025 11925 +11175 11875 +11050 11825 +10950 11650 +10950 11550 +10950 11425 +10850 11325 +10950 11275 +11050 11325 +11225 11475 +11375 11475 +11325 11575 +11325 11725 +11325 11825 +11325 11925 +11325 12075 +11450 12075 +11450 12225 +11422 12354 +11425 12475 +11325 12425 +11325 12525 +11175 12525 +11175 12425 +11125 12325 +11100 12175 +10975 12125 +10925 12225 +10950 12325 +10900 12425 +10900 12525 +10800 12325 +10525 12325 +10425 12225 +10475 12125 +10325 12025 +10175 12125 +10225 12225 +10325 12175 +10325 12325 +10125 12325 +9975 12325 +10050 12400 +10050 12500 +10025 12600 +10175 12600 +10325 12600 +10475 12600 +10575 12600 +10675 12600 +10525 13175 +10525 13275 +10675 13275 +10825 13175 +11025 13200 +11224 13058 +11400 13125 +11400 13525 +11400 13725 +11175 13725 +11025 13600 +10975 13825 +11075 13925 +10975 14025 +11175 14125 +11375 14125 +11325 14225 +11400 14300 +11125 14300 +10975 14300 +10875 14475 +10925 14575 +10825 14750 +10725 14725 +10775 14575 +10675 14575 +10525 14575 +10525 14725 +10450 14900 +10300 14900 +10425 15025 +10425 15175 +10425 15275 +10525 15225 +10625 15275 +10725 15225 +10725 15125 +10625 15125 +10525 15075 +10575 14975 +10775 14975 +10925 15125 +11025 14975 +11025 14875 +11075 14725 +11075 14575 +11175 14625 +11175 14775 +11175 14875 +11175 14975 +11325 15025 +11425 15075 +11425 15225 +11325 15225 +11275 15325 +11425 15375 +11425 15525 +11350 15725 +11450 15825 +11350 15925 +11175 15625 +11275 15575 +11275 15475 +11175 15475 +11075 15375 +10975 15375 +10875 15675 +10975 15725 +10875 15775 +10925 15925 +10775 15925 +10675 15925 +10575 15925 +10475 15925 +10250 15775 +10175 15875 +10075 15975 +9875 15975 +9847 15853 +10025 15875 +10100 15725 +10250 15625 +10250 15525 +10250 15375 +10150 15375 +10225 15275 +10275 15125 +10125 15125 +10000 15025 +10000 14925 +9825 14975 +9625 14875 +9475 14875 +9425 14775 +9575 14775 +9625 14625 +9725 14725 +9825 14625 +10025 14675 +9975 14575 +9925 14425 +9825 14225 +9625 14225 +9725 14125 +9875 13925 +9725 13925 +9575 13975 +9575 13825 +9725 13575 +9625 13350 +9725 13175 +9625 13150 +9225 13525 +9225 13675 +9375 13675 +9375 13825 +9225 13825 +9225 14025 +9225 14225 +9226 14409 +9225 14410 +9226 14559 +9225 14560 +9225 14710 +9226 14710 +9225 14860 +9225 14861 +9325 14975 +9225 15025 +9225 15125 +9225 15225 +9225 15325 +9225 15425 +9225 15525 +9225 15625 +9578 15970 +9475 15975 +9275 15975 +8900 15825 +8800 15925 +8800 15725 +8725 15575 +8625 15625 +8425 15725 +8325 15675 +8325 15775 +8375 15925 +8225 15925 +8125 15925 +8025 15925 +7925 15925 +7700 15775 +7700 15625 +7700 15525 +7550 15725 +7625 15875 +7525 15975 +7475 15875 +7325 15975 +7297 15853 +7028 15970 +6925 15975 +6725 15975 +6675 15625 +6675 15525 +6675 15425 +6675 15325 +6675 15225 +6675 15125 +6675 15025 +6775 14975 +6675 14861 +6675 14860 +6676 14710 +6675 14710 +6675 14560 +6676 14559 +6675 14410 +6676 14409 +6675 14225 +6675 14025 +6675 13825 +6825 13825 +6825 13675 +6675 13675 +6675 13525 +7075 13150 +7175 13175 +7075 13350 +7175 13575 +7025 13825 +7025 13975 +7175 13925 +7325 13925 +7175 14125 +7075 14225 +7275 14225 +7375 14425 +7425 14575 +7475 14675 +7275 14625 +7175 14725 +7075 14625 +7025 14775 +6875 14775 +6925 14875 +7075 14875 +7275 14975 +7450 14925 +7450 15025 +7575 15125 +7725 15125 +7675 15275 +7600 15375 +7700 15375 +7875 15275 +7875 15175 +7975 15225 +8075 15275 +8175 15225 +8175 15125 +8075 15125 +8025 14975 +7975 15075 +7875 15025 +7750 14900 +7900 14900 +7975 14725 +7975 14575 +8125 14575 +8225 14575 +8175 14725 +8275 14750 +8225 14975 +8375 15125 +8425 15375 +8525 15375 +8625 15475 +8725 15475 +8875 15525 +8875 15375 +8725 15325 +8775 15225 +8875 15225 +8875 15075 +8775 15025 +8625 14975 +8475 14975 +8475 14875 +8625 14875 +8625 14775 +8525 14725 +8625 14625 +8525 14575 +8375 14575 +8325 14475 +8425 14300 +8575 14300 +8850 14300 +8775 14225 +8825 14125 +8625 14125 +8425 14025 +8525 13925 +8425 13825 +8475 13600 +8625 13725 +8850 13725 +8850 13525 +8850 13125 +8674 13058 +8475 13200 +8275 13175 +8125 13275 +7975 13275 +7975 13175 +8125 12600 +8025 12600 +7925 12600 +7775 12600 +7625 12600 +7475 12600 +7500 12500 +7500 12400 +7425 12325 +7575 12325 +7675 12225 +7625 12125 +7775 12025 +7925 12125 +7875 12225 +7775 12175 +7775 12325 +7975 12325 +8250 12325 +8350 12525 +8350 12425 +8400 12325 +8375 12225 +8425 12125 +8550 12175 +8575 12325 +8625 12425 +8625 12525 +8775 12525 +8775 12425 +8875 12475 +8872 12354 +8900 12225 +8900 12075 +8775 12075 +8775 11925 +8775 11825 +8775 11725 +8775 11575 +8825 11475 +8675 11475 +8500 11325 +8400 11275 +8300 11325 +8400 11425 +8400 11550 +8400 11650 +8500 11825 +8625 11875 +8475 11925 +8325 11925 +8125 11725 +8225 11725 +8300 11675 +8300 11575 +8300 11475 +8225 11425 +8125 11425 +8025 11325 +7825 11325 +7725 11325 +7525 11325 +7425 11425 +7325 11425 +7250 11325 +7150 11275 +7050 11325 +7150 11425 +7250 11475 +7250 11575 +7150 11575 +7150 11675 +7250 11675 +7325 11750 +7425 11750 +7225 11925 +7075 11925 +7050 11825 +6975 11925 +7025 12075 +7125 12125 +7175 12225 +7025 12225 +6925 12175 +6925 12425 +6925 12575 +6925 12675 +6925 12825 +6665 12760 +6665 12610 +6665 12460 +6665 12310 +6665 12160 +6665 12010 +6825 11925 +6665 11860 +6665 11710 +6775 11650 +6850 11700 +6850 11600 +6775 11525 +6825 11425 +6725 11425 +6275 11475 +6225 11575 +6125 11475 +5950 11325 +5850 11425 +5750 11325 +5850 11275 +5825 11125 +5825 11025 +5925 11125 +6025 11075 +6025 10975 +6200 10975 +6300 10775 +6300 10625 +6300 10475 +6300 10375 +6275 10275 +6700 10425 +6700 10525 +6700 10625 +6700 10725 +6700 10850 +6725 11050 +6875 11025 +7000 11025 +7075 11125 +7175 11125 +7175 11025 +7550 11075 +7550 10875 +7550 10475 +8000 10475 +8000 10875 +8000 11075 +8375 11025 +8375 11125 +8475 11125 +8575 11075 +8575 10975 +8750 10975 +8850 10775 +8850 10625 +8850 10475 +8850 10375 +8825 10275 +9250 10425 +9250 10525 +9250 10625 +9250 10725 +9250 10850 +9275 11050 +9425 11025 +9550 11025 +9625 11125 +9725 11025 +9725 11125 +9700 11275 +9800 11325 +9700 11425 +9600 11325 +9375 11425 +9275 11425 +9325 11525 +9400 11600 +9400 11700 +9325 11650 +9215 11710 +9215 11860 +9375 11925 +9215 12010 +9215 12160 +9215 12310 +9215 12460 +9215 12610 +9215 12760 +9475 12825 +9475 12675 +9475 12575 +9475 12425 +9475 12175 +9575 12225 +9725 12225 +9675 12125 +9575 12075 +9525 11925 +9600 11825 +9625 11925 +9775 11925 +9975 11750 +9875 11750 +9800 11675 +9700 11675 +9700 11575 +9800 11575 +9800 11475 +9875 11425 +9975 11425 +10075 11325 +10100 11075 +10100 10875 +10100 10475 +10550 10475 +10848 10075 +10575 10075 +10437 9801 +10435 9702 +10435 9601 +10436 9502 +10436 9399 +10436 9298 +10175 9325 +10175 9425 +10175 9525 +10175 9725 +10175 9825 +10075 10075 +9800 10075 +9525 10075 +9375 10125 +9290 9806 +9289 9706 +9289 9606 +9290 9505 +9290 9406 +9289 9306 +8775 9325 +8775 9425 +8775 9525 +8775 9725 +8775 9825 +8825 10075 +8575 10075 +8298 10075 +8025 10075 +7887 9801 +7885 9702 +7885 9601 +7886 9502 +7886 9399 +7886 9298 +7625 9325 +7625 9425 +7625 9525 +7625 9725 +7625 9825 +7525 10075 +7250 10075 +6975 10075 +6825 10125 +6740 9806 +6739 9706 +6739 9606 +6740 9505 +6740 9406 +6739 9306 +7028 8820 +6925 8825 +6725 8825 +6675 8475 +6675 8375 +6675 8275 +6675 8175 +6675 8075 +6675 7975 +6675 7875 +6775 7825 +6675 7711 +6675 7710 +6676 7560 +6675 7560 +6675 7410 +6676 7409 +6675 7260 +6676 7259 +6675 7075 +6675 6875 +6675 6675 +6825 6675 +6825 6525 +6675 6525 +6675 6375 +7075 6000 +7175 6025 +7075 6200 +7175 6425 +7025 6675 +7025 6825 +7175 6775 +7325 6775 +7175 6975 +7075 7075 +7275 7075 +7375 7275 +7425 7425 +7475 7525 +7275 7475 +7175 7575 +7075 7475 +7025 7625 +6875 7625 +6925 7725 +7075 7725 +7275 7825 +7450 7775 +7450 7875 +7575 7975 +7725 7975 +7675 8125 +7600 8225 +7700 8225 +7700 8375 +7700 8475 +7550 8575 +7475 8725 +7297 8703 +7325 8825 +7525 8825 +7625 8725 +7700 8625 +7925 8775 +8025 8775 +8125 8775 +8225 8775 +8375 8775 +8325 8625 +8425 8575 +8325 8525 +8425 8225 +8525 8225 +8625 8325 +8725 8325 +8725 8425 +8625 8475 +8800 8775 +8900 8675 +8800 8575 +8875 8375 +8875 8225 +8725 8175 +8775 8075 +8875 8075 +8875 7925 +8775 7875 +8625 7825 +8625 7725 +8625 7625 +8625 7475 +8525 7425 +8525 7575 +8475 7725 +8475 7825 +8375 7975 +8225 7825 +8025 7825 +7975 7925 +8075 7975 +8175 7975 +8175 8075 +8075 8125 +7975 8075 +7875 8125 +7875 8025 +7875 7875 +7750 7750 +7900 7750 +7975 7575 +7975 7425 +8125 7425 +8225 7425 +8175 7575 +8275 7600 +8375 7425 +8325 7325 +8425 7150 +8575 7150 +8850 7150 +8775 7075 +8825 6975 +8625 6975 +8425 6875 +8525 6775 +8425 6675 +8475 6450 +8625 6575 +8850 6575 +8850 6375 +8850 5975 +8674 5908 +8475 6050 +8275 6025 +8125 6125 +7975 6125 +7975 6025 +8125 5450 +8025 5450 +7925 5450 +7775 5450 +7625 5450 +7475 5450 +7500 5350 +7500 5250 +7425 5175 +7575 5175 +7675 5075 +7625 4975 +7775 4875 +7925 4975 +7875 5075 +7775 5025 +7775 5175 +7975 5175 +8250 5175 +8350 5375 +8350 5275 +8400 5175 +8375 5075 +8425 4975 +8550 5025 +8575 5175 +8625 5275 +8625 5375 +8775 5375 +8775 5275 +8875 5325 +8872 5204 +8900 5075 +8900 4925 +8775 4925 +8775 4775 +8775 4675 +8775 4575 +8625 4725 +8500 4675 +8475 4775 +8325 4775 +8125 4575 +8225 4575 +8300 4525 +8400 4500 +8400 4400 +8300 4425 +8300 4325 +8225 4275 +8125 4275 +8025 4175 +8000 3925 +8000 3725 +8000 3325 +7550 3325 +7550 3725 +7550 3925 +7825 4175 +7725 4175 +7525 4175 +7425 4275 +7325 4275 +7250 4325 +7250 4425 +7150 4425 +7150 4525 +7250 4525 +7325 4600 +7425 4600 +7225 4775 +7075 4775 +7050 4675 +6975 4775 +7025 4925 +7125 4975 +7175 5075 +7025 5075 +6925 5025 +6925 5275 +6925 5425 +6925 5525 +6925 5675 +6665 5610 +6665 5460 +6665 5310 +6665 5160 +6665 5010 +6665 4860 +6825 4775 +6665 4710 +6665 4560 +6775 4500 +6850 4550 +6850 4450 +6775 4375 +6725 4275 +6825 4275 +7050 4175 +7150 4275 +7250 4175 +7150 4125 +7175 3975 +7175 3875 +7075 3975 +7000 3875 +6875 3875 +6725 3900 +6700 3700 +6700 3575 +6700 3475 +6700 3375 +6700 3275 +6275 3125 +6300 3225 +6300 3325 +6300 3475 +6300 3625 +6200 3825 +6025 3825 +6025 3925 +5925 3975 +5825 3975 +5825 3875 +5450 3925 +5450 3725 +5450 3325 +5000 3325 +5000 3725 +5000 3925 +4625 3875 +4625 3975 +4525 3975 +4450 3875 +4325 3875 +4175 3900 +4150 3700 +4150 3575 +4150 3475 +4150 3375 +4150 3275 +3725 3125 +3750 3225 +3750 3325 +3750 3475 +3750 3625 +3650 3825 +3475 3825 +3475 3925 +3375 3975 +3275 3875 +3275 3975 +3300 4125 +3200 4175 +3300 4275 +3400 4175 +3575 4325 +3675 4425 +3725 4325 +4175 4275 +4275 4275 +4225 4375 +4300 4450 +4300 4550 +4225 4500 +4115 4560 +4115 4710 +4275 4775 +4115 4860 +4115 5010 +4115 5160 +4115 5310 +4115 5460 +4115 5610 +4375 5675 +4375 5525 +4375 5425 +4375 5275 +4375 5025 +4475 5075 +4625 5075 +4575 4975 +4475 4925 +4425 4775 +4500 4675 +4525 4775 +4675 4775 +4875 4600 +4775 4600 +4700 4525 +4600 4525 +4600 4425 +4700 4425 +4700 4325 +4600 4275 +4500 4175 +4600 4125 +4700 4175 +4775 4275 +4875 4275 +4975 4175 +5175 4175 +5275 4175 +5475 4175 +5575 4275 +5675 4275 +5750 4325 +5750 4425 +5750 4525 +5675 4575 +5575 4575 +5775 4775 +5925 4775 +6075 4725 +5950 4675 +5850 4500 +5850 4400 +5850 4275 +5750 4175 +5850 4125 +5950 4175 +6125 4325 +6275 4325 +6225 4425 +6225 4575 +6225 4675 +6225 4775 +6225 4925 +6350 4925 +6350 5075 +6322 5204 +6325 5325 +6225 5275 +6225 5375 +6075 5375 +6075 5275 +6025 5175 +6000 5025 +5875 4975 +5825 5075 +5850 5175 +5800 5275 +5800 5375 +5700 5175 +5425 5175 +5325 5075 +5375 4975 +5225 4875 +5075 4975 +5125 5075 +5225 5025 +5225 5175 +5025 5175 +4875 5175 +4950 5250 +4950 5350 +4925 5450 +5075 5450 +5225 5450 +5375 5450 +5475 5450 +5575 5450 +5425 6025 +5425 6125 +5575 6125 +5725 6025 +5925 6050 +6124 5908 +6300 5975 +6300 6375 +6300 6575 +6075 6575 +5925 6450 +5875 6675 +5975 6775 +5875 6875 +6075 6975 +6275 6975 +6225 7075 +6300 7150 +6025 7150 +5875 7150 +5775 7325 +5825 7425 +5975 7425 +6075 7475 +5975 7575 +6075 7625 +6075 7725 +5925 7725 +5925 7825 +6075 7825 +6225 7875 +6325 7925 +6325 8075 +6225 8075 +6175 8175 +6325 8225 +6325 8375 +6175 8325 +6075 8325 +5975 8225 +5875 8225 +5825 7975 +5675 7825 +5725 7600 +5625 7575 +5675 7425 +5575 7425 +5425 7425 +5425 7575 +5350 7750 +5200 7750 +5325 7875 +5475 7825 +5425 7925 +5525 7975 +5625 7975 +5625 8075 +5525 8125 +5425 8075 +5325 8025 +5325 8125 +5150 8225 +5050 8225 +5125 8125 +5175 7975 +5025 7975 +4900 7875 +4900 7775 +4725 7825 +4525 7725 +4375 7725 +4325 7625 +4475 7625 +4525 7475 +4625 7575 +4725 7475 +4925 7525 +4875 7425 +4825 7275 +4725 7075 +4525 7075 +4625 6975 +4775 6775 +4625 6775 +4475 6825 +4475 6675 +4625 6425 +4525 6200 +4625 6025 +4525 6000 +4125 6375 +4125 6525 +4275 6525 +4275 6675 +4125 6675 +4125 6875 +4125 7075 +4126 7259 +4125 7260 +4126 7409 +4125 7410 +4125 7560 +4126 7560 +4125 7710 +4125 7711 +4225 7825 +4125 7875 +4125 7975 +4125 8075 +4125 8175 +4125 8275 +4125 8375 +4125 8475 +4175 8825 +4375 8825 +4478 8820 +4747 8703 +4775 8825 +4925 8725 +4975 8825 +5075 8725 +5000 8575 +5150 8375 +5150 8475 +5150 8625 +5375 8775 +5475 8775 +5575 8775 +5675 8775 +5825 8775 +5775 8625 +5775 8525 +5875 8575 +6075 8475 +6175 8425 +6250 8575 +6350 8675 +6250 8775 +6225 9325 +6225 9425 +6225 9525 +6225 9725 +6225 9825 +6275 10075 +6025 10075 +5748 10075 +5475 10075 +5337 9801 +5335 9702 +5335 9601 +5336 9502 +5336 9399 +5336 9298 +5075 9325 +5075 9425 +5075 9525 +5075 9725 +5075 9825 +4975 10075 +4700 10075 +4425 10075 +4275 10125 +4190 9806 +4189 9706 +4189 9606 +4190 9505 +4190 9406 +4189 9306 +3675 9325 +3675 9425 +3675 9525 +3675 9725 +3675 9825 +3725 10075 +3475 10075 +3198 10075 +2925 10075 +2787 9801 +2785 9702 +2785 9601 +2786 9502 +2786 9399 +2786 9298 +2525 9325 +2525 9425 +2525 9525 +2525 9725 +2525 9825 +2425 10075 +2150 10075 +2450 10475 +2900 10475 +2900 10875 +2900 11075 +3275 11025 +3275 11125 +3375 11125 +3475 11075 +3475 10975 +3650 10975 +3750 10775 +3750 10625 +3750 10475 +3750 10375 +3725 10275 +4150 10425 +4150 10525 +4150 10625 +4150 10725 +4150 10850 +4175 11050 +4325 11025 +4450 11025 +4525 11125 +4625 11025 +4625 11125 +4600 11275 +4700 11325 +4600 11425 +4500 11325 +4275 11425 +4175 11425 +4225 11525 +4300 11600 +4300 11700 +4225 11650 +4115 11710 +4115 11860 +4275 11925 +4115 12010 +4115 12160 +4115 12310 +4115 12460 +4115 12610 +4115 12760 +4375 12825 +4375 12675 +4375 12575 +4375 12425 +4375 12175 +4475 12225 +4625 12225 +4575 12125 +4475 12075 +4425 11925 +4500 11825 +4525 11925 +4675 11925 +4875 11750 +4775 11750 +4700 11675 +4600 11675 +4600 11575 +4700 11575 +4700 11475 +4775 11425 +4875 11425 +4975 11325 +5175 11325 +5275 11325 +5000 11075 +5000 10875 +5000 10475 +5450 10475 +5450 10875 +5450 11075 +5475 11325 +5575 11425 +5675 11425 +5750 11475 +5750 11575 +5850 11550 +5850 11650 +5750 11675 +5675 11725 +5575 11725 +5775 11925 +5925 11925 +5950 11825 +6075 11875 +6225 11725 +6225 11825 +6225 11925 +6225 12075 +6350 12075 +6350 12225 +6322 12354 +6325 12475 +6225 12425 +6225 12525 +6075 12525 +6075 12425 +6025 12325 +6000 12175 +5875 12125 +5825 12225 +5850 12325 +5800 12425 +5800 12525 +5700 12325 +5425 12325 +5325 12225 +5375 12125 +5225 12025 +5075 12125 +5125 12225 +5225 12175 +5225 12325 +5025 12325 +4875 12325 +4950 12400 +4950 12500 +4925 12600 +5075 12600 +5225 12600 +5375 12600 +5475 12600 +5575 12600 +5425 13175 +5425 13275 +5575 13275 +5725 13175 +5925 13200 +6124 13058 +6300 13125 +6300 13525 +6300 13725 +6075 13725 +5925 13600 +5875 13825 +5975 13925 +5875 14025 +6075 14125 +6275 14125 +6225 14225 +6300 14300 +6025 14300 +5875 14300 +5775 14475 +5825 14575 +5725 14750 +5625 14725 +5675 14575 +5575 14575 +5425 14575 +5425 14725 +5350 14900 +5200 14900 +5325 15025 +5325 15175 +5325 15275 +5425 15225 +5525 15275 +5625 15225 +5625 15125 +5525 15125 +5425 15075 +5475 14975 +5675 14975 +5825 15125 +5925 14975 +5925 14875 +5975 14725 +5975 14575 +6075 14625 +6075 14775 +6075 14875 +6075 14975 +6225 15025 +6325 15075 +6325 15225 +6225 15225 +6175 15325 +6325 15375 +6325 15525 +6250 15725 +6350 15825 +6250 15925 +6075 15625 +6175 15575 +6175 15475 +6075 15475 +5975 15375 +5875 15375 +5775 15675 +5875 15725 +5775 15775 +5825 15925 +5675 15925 +5575 15925 +5475 15925 +5375 15925 +5150 15775 +5075 15875 +4975 15975 +4775 15975 +4747 15853 +4925 15875 +5000 15725 +5150 15625 +5150 15525 +5150 15375 +5050 15375 +5125 15275 +5175 15125 +5025 15125 +4900 15025 +4900 14925 +4725 14975 +4525 14875 +4375 14875 +4325 14775 +4475 14775 +4525 14625 +4625 14725 +4725 14625 +4925 14675 +4875 14575 +4825 14425 +4725 14225 +4525 14225 +4625 14125 +4775 13925 +4625 13925 +4475 13975 +4475 13825 +4625 13575 +4525 13350 +4625 13175 +4525 13150 +4125 13525 +4125 13675 +4275 13675 +4275 13825 +4125 13825 +4125 14025 +4125 14225 +4126 14409 +4125 14410 +4126 14559 +4125 14560 +4125 14710 +4126 14710 +4125 14860 +4125 14861 +4225 14975 +4125 15025 +4125 15125 +4125 15225 +4125 15325 +4125 15425 +4125 15525 +4125 15625 +4478 15970 +4375 15975 +4175 15975 +3800 15825 +3700 15925 +3700 15725 +3625 15575 +3525 15625 +3325 15725 +3225 15675 +3225 15775 +3275 15925 +3125 15925 +3025 15925 +2925 15925 +2825 15925 +2600 15775 +2600 15625 +2600 15525 +2450 15725 +2525 15875 +2425 15975 +2375 15875 +2225 15975 +2197 15853 +1928 15970 +1825 15975 +1625 15975 +1575 15625 +1575 15525 +1575 15425 +1575 15325 +1575 15225 +1575 15125 +1575 15025 +1675 14975 +1575 14861 +1575 14860 +1575 14710 +1576 14710 +1575 14560 +1576 14559 +1575 14410 +1576 14409 +1575 14225 +1575 14025 +1575 13825 +1725 13825 +1725 13675 +1575 13675 +1575 13525 +1975 13150 +2075 13175 +1975 13350 +2075 13575 +1925 13825 +1925 13975 +2075 13925 +2225 13925 +2075 14125 +1975 14225 +2175 14225 +2275 14425 +2325 14575 +2375 14675 +2175 14625 +2075 14725 +1975 14625 +1925 14775 +1775 14775 +1825 14875 +1975 14875 +2175 14975 +2350 14925 +2350 15025 +2475 15125 +2625 15125 +2575 15275 +2500 15375 +2600 15375 +2775 15275 +2775 15175 +2875 15225 +2975 15275 +3075 15225 +3075 15125 +2975 15125 +2925 14975 +2875 15075 +2775 15025 +2650 14900 +2800 14900 +2875 14725 +2875 14575 +3025 14575 +3125 14575 +3075 14725 +3175 14750 +3125 14975 +3275 15125 +3325 15375 +3425 15375 +3525 15475 +3625 15475 +3775 15525 +3775 15375 +3625 15325 +3675 15225 +3775 15225 +3775 15075 +3675 15025 +3525 14975 +3375 14975 +3375 14875 +3525 14875 +3525 14775 +3425 14725 +3525 14625 +3425 14575 +3275 14575 +3225 14475 +3325 14300 +3475 14300 +3750 14300 +3675 14225 +3725 14125 +3525 14125 +3325 14025 +3425 13925 +3325 13825 +3375 13600 +3525 13725 +3750 13725 +3750 13525 +3750 13125 +3574 13058 +3375 13200 +3175 13175 +3025 13275 +2875 13275 +2875 13175 +3025 12600 +2925 12600 +2825 12600 +2675 12600 +2525 12600 +2375 12600 +2400 12500 +2400 12400 +2325 12325 +2475 12325 +2575 12225 +2525 12125 +2675 12025 +2825 12125 +2775 12225 +2675 12175 +2675 12325 +2875 12325 +3150 12325 +3250 12525 +3250 12425 +3300 12325 +3275 12225 +3325 12125 +3450 12175 +3475 12325 +3525 12425 +3525 12525 +3675 12525 +3675 12425 +3775 12475 +3772 12354 +3800 12225 +3800 12075 +3675 12075 +3675 11925 +3675 11825 +3675 11725 +3675 11575 +3725 11475 +3575 11475 +3400 11325 +3300 11275 +3200 11325 +3300 11425 +3300 11550 +3300 11650 +3400 11825 +3525 11875 +3375 11925 +3225 11925 +3025 11725 +3125 11725 +3200 11675 +3200 11575 +3200 11475 +3125 11425 +3025 11425 +2925 11325 +2725 11325 +2625 11325 +2450 10875 +2450 11075 +2425 11325 +2325 11425 +2225 11425 +2150 11475 +2150 11575 +2050 11575 +2050 11675 +2150 11675 +2225 11750 +2325 11750 +2125 11925 +1975 11925 +1950 11825 +1875 11925 +1925 12075 +2025 12125 +2075 12225 +1925 12225 +1825 12175 +1825 12425 +1825 12575 +1825 12675 +1825 12825 +1565 12760 +1565 12610 +1565 12460 +1565 12310 +1565 12160 +1565 12010 +1725 11925 +1565 11860 +1565 11710 +1675 11650 +1750 11700 +1750 11600 +1675 11525 +1625 11425 +1725 11425 +1950 11325 +2050 11425 +2150 11325 +2050 11275 +2075 11125 +2075 11025 +1975 11125 +1900 11025 +1775 11025 +1625 11050 +1600 10850 +1600 10725 +1600 10625 +1600 10525 +1600 10425 +1725 10125 +1875 10075 +1640 9806 +1639 9706 +1639 9606 +1640 9505 +1640 9406 +1639 9306 +1928 8820 +1825 8825 +1625 8825 +1575 8475 +1575 8375 +1575 8275 +1575 8175 +1575 8075 +1575 7975 +1575 7875 +1675 7825 +1575 7711 +1575 7710 +1576 7560 +1575 7560 +1575 7410 +1576 7409 +1575 7260 +1576 7259 +1575 7075 +1575 6875 +1575 6675 +1725 6675 +1725 6525 +1575 6525 +1575 6375 +1975 6000 +2075 6025 +1975 6200 +2075 6425 +1925 6675 +1925 6825 +2075 6775 +2225 6775 +2075 6975 +1975 7075 +2175 7075 +2275 7275 +2325 7425 +2375 7525 +2175 7475 +2075 7575 +1975 7475 +1925 7625 +1775 7625 +1825 7725 +1975 7725 +2175 7825 +2350 7775 +2350 7875 +2475 7975 +2625 7975 +2575 8125 +2500 8225 +2600 8225 +2600 8375 +2600 8475 +2450 8575 +2375 8725 +2197 8703 +2225 8825 +2425 8825 +2525 8725 +2600 8625 +2825 8775 +2925 8775 +3025 8775 +3125 8775 +3275 8775 +3225 8625 +3325 8575 +3225 8525 +3325 8225 +3425 8225 +3525 8325 +3625 8325 +3625 8425 +3525 8475 +3700 8775 +3800 8675 +3700 8575 +3775 8375 +3775 8225 +3625 8175 +3675 8075 +3775 8075 +3775 7925 +3675 7875 +3525 7825 +3525 7725 +3525 7625 +3525 7475 +3425 7425 +3425 7575 +3375 7725 +3375 7825 +3275 7975 +3125 7825 +2925 7825 +2875 7925 +2975 7975 +3075 7975 +3075 8075 +2975 8125 +2875 8075 +2775 8125 +2775 8025 +2775 7875 +2650 7750 +2800 7750 +2875 7575 +2875 7425 +3025 7425 +3125 7425 +3075 7575 +3175 7600 +3275 7425 +3225 7325 +3325 7150 +3475 7150 +3750 7150 +3675 7075 +3725 6975 +3525 6975 +3325 6875 +3425 6775 +3325 6675 +3375 6450 +3525 6575 +3750 6575 +3750 6375 +3750 5975 +3574 5908 +3375 6050 +3175 6025 +3025 6125 +2875 6125 +2875 6025 +3025 5450 +2925 5450 +2825 5450 +2675 5450 +2525 5450 +2375 5450 +2400 5350 +2400 5250 +2325 5175 +2475 5175 +2575 5075 +2525 4975 +2675 4875 +2825 4975 +2775 5075 +2675 5025 +2675 5175 +2875 5175 +3150 5175 +3250 5375 +3250 5275 +3300 5175 +3275 5075 +3325 4975 +3450 5025 +3475 5175 +3525 5275 +3525 5375 +3675 5375 +3675 5275 +3775 5325 +3772 5204 +3800 5075 +3800 4925 +3675 4925 +3675 4775 +3675 4675 +3675 4575 +3525 4725 +3400 4675 +3375 4775 +3225 4775 +3025 4575 +3125 4575 +3200 4525 +3300 4500 +3300 4400 +3200 4425 +3200 4325 +3125 4275 +3025 4275 +2925 4175 +2900 3925 +2900 3725 +2900 3325 +2450 3325 +2450 3725 +2450 3925 +2725 4175 +2625 4175 +2425 4175 +2325 4275 +2225 4275 +2150 4325 +2150 4425 +2050 4425 +2050 4525 +2150 4525 +2225 4600 +2325 4600 +2125 4775 +1975 4775 +1950 4675 +1875 4775 +1925 4925 +2025 4975 +2075 5075 +1925 5075 +1825 5025 +1825 5275 +1825 5425 +1825 5525 +1825 5675 +1565 5610 +1565 5460 +1565 5310 +1565 5160 +1565 5010 +1565 4860 +1725 4775 +1565 4710 +1565 4560 +1675 4500 +1750 4550 +1750 4450 +1675 4375 +1625 4275 +1725 4275 +1950 4175 +2050 4275 +2150 4175 +2050 4125 +2075 3975 +2075 3875 +1975 3975 +1900 3875 +1775 3875 +1625 3900 +1600 3700 +1600 3575 +1600 3475 +1600 3375 +1600 3275 +1725 2975 +1640 2656 +1639 2556 +1639 2456 +1640 2355 +1640 2256 diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/benchs/readme b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/benchs/readme new file mode 100644 index 000000000..7203e5789 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/benchs/readme @@ -0,0 +1,35 @@ +NAME : eil101 +COMMENT : 101-city problem (Christofides/Eilon) +TYPE : TSP +DIMENSION : 101 +EDGE_WEIGHT_TYPE : EUC_2D + +NAME: ali535 +TYPE: TSP +COMMENT: 535 Airports around the globe (Padberg/Rinaldi) +DIMENSION: 535 +EDGE_WEIGHT_TYPE: GEO +DISPLAY_DATA_TYPE: COORD_DISPLAY + +NAME : pr2392 +COMMENT : 2392-city problem (Padberg/Rinaldi) +TYPE : TSP +DIMENSION : 2392 +EDGE_WEIGHT_TYPE : EUC_2D + +NAME : rl5915 +COMMENT : 5915-city TSP (Reinelt) +TYPE : TSP +DIMENSION : 5915 +EDGE_WEIGHT_TYPE : EUC_2D + +NAME : usa13509 +COMMENT : Cities with population at least 500 in the continental US. +COMMENT : Contributed by David Applegate and Andre Rohe, based on the +COMMENT : data set "US.lat-long" from the ftp site ftp.cs.toronto.edu. +COMMENT : The file US.lat-long.Z can be found in the directory /doc/geography. +TYPE : TSP +DIMENSION : 13509 +EDGE_WEIGHT_TYPE : EUC_2D + + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/benchs/rl5915.tsp b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/benchs/rl5915.tsp new file mode 100644 index 000000000..9eda5f662 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/benchs/rl5915.tsp @@ -0,0 +1,5916 @@ +5915 +18192 8954 +18192 9856 +18192 11319 +18272 8624 +18416 7348 +18416 8294 +1200 7370 +1200 8184 +1200 10912 +1200 11440 +17904 572 +17904 2684 +17904 6908 +17904 7348 +17904 8624 +8272 308 +8272 2068 +8272 2508 +8272 3080 +8272 3608 +8272 5302 +8336 7260 +8464 7260 +8496 9548 +8496 10582 +8496 11440 +15888 9064 +15888 9504 +15888 10252 +15888 11000 +15936 8184 +16048 8184 +16208 8184 +16336 572 +16336 1012 +16336 1452 +16336 2992 +16336 4818 +16336 6028 +16336 7348 +1040 7370 +1040 8184 +1040 10912 +1040 11440 +4464 308 +4640 308 +4816 308 +4944 308 +5168 308 +5440 308 +5616 308 +5728 308 +5808 3080 +5808 3608 +5808 4664 +5808 5368 +5808 6072 +5808 7128 +5936 9658 +5936 11286 +16848 572 +16848 1452 +16848 2992 +16848 4708 +16848 6028 +16848 7348 +16848 8514 +16848 9284 +16848 9922 +16848 11198 +8240 7480 +8400 9548 +8400 10582 +8400 11440 +1520 9152 +1520 10912 +1520 11440 +1584 6446 +1584 7590 +1584 8294 +5168 11440 +5280 11440 +5456 11440 +5584 11440 +5712 11440 +2672 6336 +2784 6556 +2976 6556 +3104 6556 +3264 6556 +3360 6556 +3600 6556 +3856 6556 +3920 6556 +4016 6556 +4144 6556 +4208 6556 +4352 6556 +4464 6556 +4560 6556 +4688 6556 +4720 7260 +4720 8140 +4720 9702 +4720 10582 +4720 11132 +17008 572 +17008 1452 +17008 2992 +17008 5874 +17008 7348 +17072 8096 +17136 8096 +17280 8096 +17456 8096 +17520 8404 +17520 8954 +17520 10142 +17520 11319 +880 7370 +880 8184 +880 11440 +4144 4840 +4144 7700 +4304 8360 +4416 8360 +4576 8360 +4656 8360 +4864 8360 +5040 8360 +5296 8360 +5456 8844 +5456 9812 +5520 3608 +5520 4664 +5520 5368 +5520 5918 +5520 6930 +16560 8954 +16560 9922 +16592 572 +16592 1452 +16592 2992 +16592 4818 +16592 6138 +16592 7348 +7728 7744 +7728 9548 +7728 10846 +7792 7040 +7856 7040 +7952 7040 +8016 308 +8016 2068 +8016 2508 +8016 3080 +8016 3608 +8016 4268 +8016 5852 +16272 9064 +16272 9504 +16272 9922 +16272 11000 +16640 8844 +16720 8844 +16784 6028 +16784 7348 +16784 8514 +464 11440 +528 8184 +640 8184 +784 7370 +784 7964 +7664 6446 +7664 8074 +7664 9548 +7664 10846 +7728 308 +7728 2068 +7728 2508 +7728 3080 +7728 3608 +7728 4048 +7728 4488 +5232 3608 +5232 4664 +5232 5368 +5232 5918 +5232 6776 +5520 7920 +3856 7480 +3920 7920 +4016 7920 +4176 9152 +4176 9922 +4176 10472 +4176 10912 +4176 11440 +5984 748 +6096 3080 +6096 3608 +6096 4664 +6160 5368 +6224 5368 +6320 5368 +6496 5368 +6608 5698 +6608 6336 +6608 7502 +6608 9064 +6608 10142 +6608 11022 +17200 5874 +17200 7348 +17200 9284 +17200 9922 +17200 11198 +17296 5192 +17440 5192 +17568 5192 +17616 572 +17616 2992 +7248 10362 +7248 11286 +7376 308 +7376 968 +7376 2068 +7376 2508 +7376 3080 +7376 3608 +7376 4488 +7376 5588 +7376 6556 +7376 7744 +1808 6446 +1840 7436 +1840 8404 +1840 9042 +1840 10912 +1840 11440 +12272 9878 +12464 9064 +12592 9064 +12736 9064 +12848 902 +12848 1980 +12848 2640 +12848 3168 +12848 3608 +12848 4158 +12848 5368 +12848 6556 +12848 6996 +12848 8008 +12848 8844 +1648 8404 +1648 9152 +1648 10912 +1648 11440 +1680 6446 +1680 7590 +6256 9658 +6256 11022 +16976 8514 +16976 9284 +16976 9922 +16976 11198 +17072 5720 +17136 5720 +17440 5720 +17600 5720 +11600 572 +11600 1760 +11600 3388 +11600 5258 +11600 6556 +11600 6996 +11600 7898 +11632 8602 +11632 9284 +11632 10208 +17376 10142 +17728 10142 +18416 10142 +18608 10142 +18704 10142 +18864 10142 +18992 10142 +19088 10142 +6224 968 +6224 3080 +6224 3608 +6224 4664 +6400 10912 +6768 10912 +6864 11286 +1936 6336 +1936 7436 +1968 8404 +1968 9152 +1968 10912 +1968 11440 +3984 8712 +4304 8932 +4416 8932 +4496 10802 +15440 1232 +15440 3608 +15440 4180 +15440 4818 +15536 5808 +15648 5808 +15760 5808 +15840 5808 +15936 5808 +16048 5808 +16208 5808 +5584 10252 +5728 10252 +6000 10252 +6064 10252 +6160 10252 +6320 968 +6320 3080 +6320 3608 +6320 4664 +6384 9548 +6384 10472 +16720 11198 +17088 11198 +17376 11198 +17728 11198 +18416 11198 +18608 11198 +18704 11198 +18848 11198 +15280 572 +15280 1232 +15280 3608 +15280 4180 +15280 4818 +15280 6138 +15280 7348 +15280 8228 +15280 9064 +15280 9504 +15280 10252 +15280 11000 +3472 7920 +3472 8712 +3472 9372 +3472 10472 +3472 10912 +3472 11440 +208 11440 +432 7964 +944 7964 +1104 7370 +1424 6446 +1424 7370 +1424 8294 +10096 4378 +10096 5478 +10096 6556 +10096 7480 +10096 8008 +10096 8602 +10096 9284 +10096 10318 +10096 11440 +10256 3608 +10336 3608 +10448 3608 +10544 3608 +10608 3608 +10672 3608 +10752 3608 +10864 3608 +10992 3608 +11088 3608 +11168 3608 +11280 3608 +11408 3608 +688 7370 +688 11440 +6160 968 +6496 968 +6592 968 +6736 968 +6848 968 +6944 968 +7104 968 +7232 968 +7552 968 +7600 308 +7600 2068 +7600 2508 +7600 3080 +7600 3608 +7600 4048 +7600 4488 +7632 5148 +7792 5148 +7856 5148 +7920 5148 +8112 5148 +8384 5148 +8464 5148 +8624 5148 +8800 5148 +8912 5148 +9216 5148 +9504 5148 +9616 5148 +9744 5148 +9888 5148 +9936 6556 +9936 7480 +9936 8382 +9936 9284 +9936 11440 +10032 572 +10032 1452 +10032 2728 +6496 7084 +6736 7084 +6768 9064 +6768 10142 +9936 572 +9936 1452 +5200 10032 +7408 10362 +7568 10692 +7856 10692 +7936 10692 +8032 10692 +8144 10692 +8224 10692 +8320 10692 +8784 10692 +8976 10692 +9408 10692 +10288 10692 +10400 10692 +10560 10692 +10704 10692 +10864 10692 +10960 10692 +11136 10692 +11264 10692 +11392 10692 +11472 10692 +11568 10692 +4880 9218 +4880 10032 +4880 10582 +4880 11132 +4944 3608 +4944 4664 +4944 5368 +4944 5918 +4944 6776 +4944 7436 +6944 308 +7104 308 +7232 308 +7792 308 +7856 308 +7920 308 +8128 308 +8384 308 +8464 308 +8528 308 +8592 308 +8688 308 +8800 308 +8912 308 +9008 308 +9104 308 +9200 308 +9232 1452 +9232 2288 +9232 3388 +9344 7260 +9456 8602 +9456 11440 +3568 7920 +3664 7920 +3728 7920 +8240 9548 +8240 11440 +9376 6776 +9776 572 +9776 1452 +9776 2508 +9776 3388 +6992 7854 +6992 9174 +6992 9812 +6992 10362 +7056 2068 +7056 3080 +7056 3608 +7056 4664 +7056 5588 +7056 6556 +14512 682 +14640 3608 +14640 4048 +14640 4598 +14640 6138 +14640 7568 +14640 8228 +14640 9064 +14640 9504 +14640 10252 +14640 11000 +14768 1012 +14848 1012 +14960 1012 +15376 1012 +15536 1012 +15664 1012 +15760 1012 +15840 1012 +15936 1012 +16048 1012 +16208 1012 +16464 1012 +16528 572 +14736 6138 +14736 7568 +14736 8228 +14736 9064 +14736 9504 +14736 10252 +14736 10890 +14768 4928 +14880 4928 +14976 4928 +15376 4928 +15536 4928 +15648 4928 +15760 4928 +15840 4928 +15936 4928 +16048 4928 +16208 4928 +16464 4928 +16704 4928 +13808 6028 +13808 6776 +13808 7788 +13808 8228 +13808 9504 +13808 10362 +13808 11110 +14032 4708 +14144 4708 +14320 4708 +14464 4708 +16944 4708 +3664 8712 +3728 9284 +3760 9702 +3760 10472 +3760 10912 +3760 11440 +3600 8712 +3600 9482 +4048 9812 +4336 9812 +4576 9812 +4656 9812 +4976 8844 +8976 8118 +8976 9394 +8976 11440 +10176 6556 +10304 6556 +10448 6556 +10576 6556 +10736 6556 +10832 6556 +10896 6556 +10976 6556 +11088 6556 +11168 6556 +11264 6556 +11424 6556 +11536 6556 +11664 6556 +11728 6556 +11792 6556 +11872 6556 +11968 6556 +12112 6556 +12272 6556 +12448 6556 +12608 6556 +12736 6556 +13008 6556 +13072 1012 +13072 1980 +13072 2640 +13072 3608 +13072 4268 +13072 5368 +13168 572 +13264 572 +13408 572 +13568 572 +13696 572 +14016 572 +14160 572 +14320 572 +15120 572 +15376 572 +10480 572 +10480 1452 +10480 6006 +7120 2508 +7120 3080 +7120 3608 +7120 4664 +7120 5588 +7120 6556 +7120 7744 +7120 9064 +7120 9812 +7120 10362 +7120 11286 +3728 8712 +4016 10472 +4016 10912 +4016 11440 +6480 9064 +6896 9064 +7248 2068 +7248 2508 +7248 3080 +7248 3608 +7248 4664 +7248 5588 +7248 6556 +7248 7480 +3920 8712 +5056 9372 +3536 9372 +3536 10472 +3536 10912 +3536 11440 +8784 8448 +10304 8448 +10560 8448 +10704 8448 +10768 8448 +10848 8448 +10976 8448 +11120 8448 +11264 8448 +11552 8448 +11760 8448 +11888 8448 +12080 8448 +12240 8448 +12720 572 +12720 1980 +12720 3718 +12720 5368 +12720 6996 +2800 7326 +2928 7700 +2992 7700 +3104 7700 +3264 7700 +4208 7700 +8112 2068 +8112 2508 +8112 3080 +8112 3608 +8112 4268 +8112 7480 +9584 2728 +9584 3388 +9840 2288 +11440 2288 +11728 2288 +11824 2288 +11984 2288 +12112 2288 +12256 2288 +12384 2288 +12464 2288 +12496 572 +12496 1232 +12608 1012 +5584 7920 +5680 7920 +5760 7920 +6896 7920 +7568 7920 +8144 7920 +8208 7920 +9136 7590 +10544 6116 +11088 6116 +11168 6116 +11264 6116 +11312 572 +11312 1496 +11312 5258 +10768 572 +10768 1342 +10768 4488 +10768 5038 +10768 5588 +10768 6996 +10768 9284 +10768 9878 +5584 8844 +5616 3080 +6160 3080 +6496 3080 +6608 3080 +6736 3080 +6848 3080 +6944 3080 +7792 3080 +7856 3080 +7920 3080 +8384 3080 +8464 3080 +8560 3080 +8688 3080 +8800 3080 +8912 3080 +9008 3080 +8688 2288 +8464 6116 +8528 2068 +8528 2508 +8528 3608 +8464 2068 +8464 2508 +8464 3608 +17456 572 +17456 2992 +17456 7238 +11728 2948 +11824 2948 +11984 2948 +12112 2948 +12256 2948 +12384 2948 +12464 2948 +12560 572 +12560 1980 +12560 2728 +17552 7238 +17632 8184 +17776 8184 +18080 8184 +18256 9064 +10448 10032 +10560 10032 +10704 10032 +10864 10032 +10976 10032 +11136 10032 +11760 10032 +11888 10032 +12032 10032 +12144 10032 +12880 10032 +13008 10032 +13168 10032 +13312 10032 +13472 10032 +13584 10032 +13680 3608 +13680 4268 +13680 6028 +13680 6776 +13680 8008 +13680 9504 +17760 6908 +18048 6908 +18128 7348 +12640 3388 +12784 2640 +12784 3168 +10976 8008 +11088 8008 +11264 8008 +11664 8008 +11728 8008 +11792 8008 +11888 8008 +12912 8008 +13008 8008 +13184 8008 +13328 8008 +13456 8008 +13568 8008 +8400 2068 +8400 2508 +8400 3608 +9328 1452 +9520 1452 +9632 1452 +9840 1452 +10160 1452 +10256 1452 +10336 1452 +10544 1452 +10608 1452 +10672 1452 +10864 1452 +10992 1452 +11088 1452 +11168 1452 +12304 572 +14864 3608 +14864 4048 +14864 6138 +14864 7568 +14864 8228 +14864 9064 +14864 9504 +14864 10252 +14864 10890 +7792 2068 +7792 2508 +7792 3608 +7792 4048 +7792 4488 +7792 6446 +15376 3608 +15376 4180 +15376 6138 +15376 7348 +6864 2068 +6864 3608 +6864 4774 +6928 5368 +10544 5368 +10672 5368 +10704 9284 +12464 11000 +12592 11000 +12736 11000 +12880 11000 +13008 11000 +13168 11000 +13312 11000 +13456 11000 +13584 11000 +14144 11000 +14224 11000 +14336 11000 +14416 11000 +14992 11000 +15440 11000 +15632 11000 +15760 11000 +15824 11000 +16160 11000 +16464 11000 +15952 572 +15952 1452 +16048 2992 +16208 2992 +16464 2992 +16704 2992 +17072 2992 +17136 2992 +17296 2992 +15664 572 +15664 3608 +15664 4180 +15664 7348 +15664 7788 +15664 9064 +15664 9504 +15664 10252 +16432 1452 +8144 9548 +8144 11440 +9616 572 +12112 572 +12112 3938 +12112 5258 +8304 9548 +8304 11440 +12912 8844 +13008 8844 +13184 8844 +13328 8844 +13456 8844 +13552 3608 +13552 4378 +13552 5368 +13552 6028 +13552 6776 +11920 6996 +11920 9284 +11952 572 +11952 3938 +11952 5258 +10320 572 +10448 11440 +11824 572 +11824 3938 +11824 5258 +12656 5368 +5008 10692 +5008 11132 +13168 1980 +13168 2640 +13168 3608 +13168 4378 +13168 5478 +13232 6028 +13376 6028 +13488 6028 +14032 6028 +14144 6028 +14224 6028 +14320 6028 +14464 6028 +14976 6028 +16704 6028 +3280 10912 +3280 11440 +6736 308 +6736 2068 +6736 3608 +6736 4774 +6736 5698 +6736 6336 +8784 11440 +10288 11440 +10512 11440 +11792 6996 +8720 4158 +6800 5808 +6800 6336 +6912 6556 +7856 6556 +8896 6556 +8944 2288 +8944 3608 +7568 9504 +7856 9504 +8784 9504 +14144 8228 +14224 8228 +14336 8228 +14416 8228 +14480 8228 +15440 8228 +15504 8228 +15536 3608 +15536 4180 +15536 7348 +15568 572 +15760 572 +15840 572 +16048 572 +16208 572 +16704 572 +17104 572 +17296 572 +18000 572 +18080 572 +11728 572 +11728 3938 +11728 5258 +11728 6996 +11760 9284 +12272 3938 +12272 5258 +10512 9284 +7856 4048 +7920 4048 +8784 2288 +8784 3608 +8784 4268 +7920 2068 +7920 2508 +7920 3608 +7920 4488 +8880 4268 +10544 572 +10544 6996 +10608 4488 +9008 2288 +9312 2288 +11440 572 +11440 5258 +11440 6996 +11536 6996 +15824 7348 +15824 7788 +15824 9064 +15824 9504 +15824 10252 +6608 2068 +6608 3608 +6608 4664 +6896 5808 +112 11198 +10672 4488 +10832 4488 +10864 572 +10864 5038 +11088 6996 +9520 572 +9520 2068 +12240 6996 +3280 8712 +3280 9152 +3632 10472 +3632 10912 +3632 11440 +11568 9284 +14128 10472 +14160 1342 +14160 3608 +14160 4048 +14160 6776 +14160 7678 +14160 9504 +4080 10472 +4336 10472 +4576 10472 +4976 10032 +528 7370 +16016 1452 +16016 7348 +16016 9064 +16016 9504 +16160 9922 +16464 9922 +16640 9922 +16720 9922 +17088 9922 +1744 10912 +2112 10912 +2368 10912 +2544 10912 +2944 10912 +3056 8712 +3056 9152 +3088 10912 +4080 10912 +4336 10912 +4432 10912 +13456 9504 +14224 7788 +14336 7788 +14416 7788 +14448 1342 +14448 3608 +14448 4048 +1280 8404 +1744 8404 +1904 8404 +2160 8404 +2224 8404 +2368 8404 +2544 8404 +2704 7546 +14032 1342 +14032 3608 +14032 6776 +14976 7568 +14320 4048 +14768 4048 +13392 1980 +13392 3608 +13392 4378 +13392 5368 +16688 1452 +13360 6776 +16208 1452 +16208 7348 +1504 6336 +2064 6336 +2160 6336 +2224 6336 +2384 6336 +2544 6336 +4560 7370 +4304 7260 +4384 7260 +4464 7260 +4816 7260 +4880 7260 +14352 1342 +14352 3608 +14352 9504 +14352 10252 +5744 8844 +4336 11440 +6160 3608 +6160 4664 +6160 11132 +6512 3608 +6512 4664 +6928 2068 +6928 3608 +6928 4664 +11280 6996 +12592 6996 +13488 3608 +14768 3608 +14960 3608 +15760 3608 +15840 3608 +15920 7348 +12368 572 +12368 1232 +12368 3938 +12368 5258 +11664 6996 +17776 2684 +12464 3938 +13488 4268 +13232 6666 +10192 572 +944 7370 +10848 9284 +17088 9284 +17344 9284 +4592 4840 +4592 6028 +11024 572 +11024 5038 +2384 7436 +2384 9152 +2384 11440 +2928 8712 +2928 9152 +2928 11440 +2544 7546 +2544 9152 +2544 11440 +9648 7480 +2048 7172 +2160 7172 +2224 7172 +3440 7172 +1744 9042 +1744 11440 +2096 9152 +2096 11440 +3056 11440 +10960 6996 +2992 8712 +2992 9152 +10896 6996 +4080 11440 +16144 9064 +16144 9504 +14224 6776 +14224 9504 +14224 10252 +17104 8624 +17136 7348 +15440 9064 +15440 9504 +15440 10252 +15760 7788 +15856 1452 +4208 4840 +18320 7348 +15760 4180 +9712 7480 +17072 1452 +17072 7348 +16464 9504 +7856 2068 +7856 2508 +7856 3608 +7856 4488 +16720 7348 +15504 9064 +4368 4840 +6000 11132 +6064 11132 +4688 5808 +4816 5808 +4880 5808 +9008 3608 +15760 9064 +17424 9064 +18512 8294 +4880 4664 +4880 5368 +4880 6776 +4688 4488 +4752 4488 +4816 4488 +18608 8866 +14416 9504 +14416 10252 +15760 7348 +18224 7348 +13424 6776 +18704 8866 +11088 4928 +11168 4928 +12464 5368 +15760 1452 +15760 9504 +15760 10252 +432 7480 +11168 6996 +13488 6776 +13584 9504 +13488 5368 +11184 572 +4464 4840 +4528 4840 +4816 5368 +4816 6776 +11088 572 +10672 572 +10256 572 +9840 572 +18192 10670 +18379 8624 +18416 3619 +18416 7766 +1200 3575 +1200 9658 +17904 231 +17904 1628 +17904 4796 +17904 7766 +17904 9438 +17940 9570 +18224 10670 +8272 1188 +8272 7029 +8416 7260 +8496 8866 +15888 8503 +15888 9878 +15888 10626 +15888 11429 +15984 8184 +16128 8184 +16299 8184 +16336 2222 +16336 3850 +16336 5368 +16336 6798 +16336 7887 +1040 3575 +1040 9658 +4432 220 +4496 308 +4784 308 +4848 308 +5040 308 +5296 308 +5584 308 +5648 308 +5808 220 +5808 2024 +5808 4048 +5936 8382 +5936 10802 +16848 1012 +16848 2222 +16848 3850 +16848 5368 +16848 6688 +16848 7876 +16848 10560 +16848 11528 +8240 1188 +8240 7018 +8260 7700 +8400 8756 +1520 10032 +1552 8932 +1584 3113 +1584 7018 +1584 8789 +5136 11528 +5200 11440 +5360 11440 +5552 11528 +5616 11440 +5808 11440 +5968 11528 +2672 3113 +2736 6556 +2880 6556 +3024 6556 +3200 6556 +3312 6556 +3408 6556 +3808 6556 +3888 6556 +3952 6556 +4096 6556 +4176 6556 +4256 6556 +4432 6556 +4496 6556 +4640 6556 +4720 7590 +4720 8866 +4720 11495 +17008 1012 +17008 2222 +17008 4356 +17008 6688 +17008 7843 +17028 8096 +17104 8096 +17168 8096 +17408 8096 +17499 8096 +17520 9603 +17520 10670 +880 3575 +880 9922 +4144 2365 +4144 5434 +4144 6908 +4272 8360 +4336 8360 +4512 8360 +4624 8360 +4688 8360 +4784 8360 +4944 8360 +5136 8360 +5488 7304 +5456 8481 +5456 10692 +5520 2178 +5520 4048 +5520 6402 +16560 10890 +16576 8184 +16592 1012 +16592 2222 +16592 3850 +16592 5478 +16592 6798 +16592 7887 +7728 8756 +7748 7040 +7824 7040 +7888 7040 +8016 1188 +8016 4818 +8016 6919 +16272 10461 +16272 11429 +16432 8844 +16592 8844 +16688 8844 +16763 8844 +16784 1012 +16784 2222 +16784 3850 +16784 5478 +16784 6688 +16784 7876 +464 9691 +484 8184 +560 8184 +747 8184 +784 3575 +7664 6908 +7664 8756 +7728 1188 +7728 4818 +5232 2178 +5232 4048 +5232 6402 +5232 7315 +5499 7612 +5520 8382 +5520 10692 +3856 2959 +3856 6908 +3876 7920 +3952 7920 +4096 7920 +4784 748 +4848 748 +5040 748 +5296 748 +5584 748 +5648 748 +5872 748 +6096 264 +6096 2024 +6096 4048 +6096 5225 +6116 5368 +6192 5368 +6256 5368 +6416 5368 +6571 5368 +6096 594 +6608 8646 +6608 9438 +6608 11495 +17200 5335 +17200 6688 +17200 7722 +17200 10560 +17200 11528 +17392 5192 +17504 5192 +17616 231 +17616 1782 +17616 4213 +7248 10802 +7376 638 +7376 1518 +7376 4048 +7376 4928 +7376 8756 +1808 3113 +1824 6864 +1840 8052 +1840 10032 +12272 11165 +12384 9064 +12528 9064 +12656 9064 +12827 9064 +12848 1606 +12848 2310 +12848 4708 +12848 6072 +12848 7392 +12848 8536 +1648 8778 +1648 10032 +1664 8184 +1680 3113 +1680 7018 +1680 8063 +4784 528 +4848 528 +5040 528 +5296 528 +5584 528 +5648 528 +5872 528 +5936 330 +5936 2024 +5936 4048 +5936 5324 +6096 6556 +6192 6556 +6256 8382 +6256 11495 +16976 6688 +16976 7876 +16976 10560 +16976 11528 +17040 5720 +17104 5720 +17168 5720 +17392 5720 +17504 5720 +17680 231 +17680 1782 +17680 4246 +11600 231 +11600 902 +11600 4488 +11600 6072 +11600 7392 +11616 8228 +11632 11275 +17264 10549 +17264 11528 +17284 10142 +17472 10142 +17552 10142 +17920 10142 +18368 10142 +18512 10142 +18656 10142 +18784 10142 +18928 10142 +19024 10142 +6224 429 +6224 2024 +6224 4048 +6224 8382 +6224 10813 +6352 10912 +6464 10912 +6672 10912 +6843 10912 +1936 3113 +1936 6754 +1936 8063 +1952 8184 +1968 8778 +1968 10032 +816 3575 +816 9922 +3984 2959 +3984 6908 +4128 8932 +4272 8932 +4336 8932 +4496 9031 +4496 11495 +15440 583 +15440 2530 +15440 5489 +15460 5808 +15600 5808 +15712 5808 +15792 5808 +15888 5808 +15984 5808 +16128 5808 +16288 5808 +16400 6798 +16400 7876 +16400 10461 +16400 11429 +5360 2178 +5360 4048 +5360 7194 +5552 10252 +5632 10252 +5808 10252 +5968 10252 +6032 10252 +6112 10252 +6192 10252 +6304 8536 +6288 11495 +6320 429 +6320 2024 +6320 4048 +1168 9658 +1232 3575 +1232 7843 +6352 429 +6352 2024 +6352 4048 +6352 8657 +6368 8844 +6384 11495 +16688 11407 +16784 11198 +16912 11198 +17040 11198 +17136 11198 +17296 11198 +17472 11198 +17552 11198 +17920 11198 +18368 11198 +18512 11198 +18656 11198 +18768 11198 +18928 11198 +15280 2530 +15280 5478 +15280 6798 +15280 7788 +15280 8646 +15280 9878 +15280 10626 +15280 11429 +3472 10032 +3488 7480 +3504 3113 +3504 7139 +208 9581 +308 7964 +480 7964 +560 7964 +736 7964 +848 7964 +912 7964 +976 7964 +1083 7964 +1104 3575 +1104 7843 +1392 2904 +1392 5852 +1408 6028 +1424 8778 +1424 10032 +10224 3608 +10288 3608 +10384 3608 +10512 3608 +10576 3608 +10640 3608 +10704 3608 +10800 3608 +10928 3608 +11056 3608 +11120 3608 +11216 3608 +11344 3608 +11488 3608 +11664 902 +688 3575 +688 9922 +5872 968 +6128 968 +6192 968 +6256 968 +6416 968 +6544 968 +6672 968 +6784 968 +6896 968 +7008 968 +7184 968 +7312 968 +7504 968 +7600 759 +7600 1397 +7600 4939 +7664 5148 +7760 5148 +7824 5148 +7888 5148 +7952 5148 +8048 5148 +8176 5148 +8336 5148 +8432 5148 +8496 5148 +8752 5148 +8848 5148 +8992 5148 +9440 5148 +9552 5148 +9680 5148 +9824 5148 +10011 5148 +10032 231 +10032 1012 +10032 1760 +5488 2178 +5488 4048 +5488 6402 +5648 7084 +5936 7084 +6096 7084 +6192 7084 +6416 7084 +6544 7084 +6672 7084 +6768 7161 +6768 8646 +6768 9438 +9936 231 +9936 1012 +9936 1760 +5200 2178 +5200 4048 +5200 6402 +5200 7458 +5200 10593 +7408 638 +7408 1518 +7408 4048 +7408 4928 +7408 8756 +7536 10692 +7600 10692 +7696 10692 +7824 10692 +7888 10692 +7984 10692 +8096 10692 +8176 10692 +8272 10692 +8368 10692 +8432 10692 +8720 10692 +8848 10692 +9104 10692 +9728 10692 +10032 10692 +10256 10692 +10320 10692 +10480 10692 +10656 10692 +10768 10692 +10928 10692 +11024 10692 +11216 10692 +11328 10692 +11440 10692 +11520 10692 +11600 10692 +11707 10692 +11728 11330 +11728 10868 +4880 11495 +4944 2178 +4944 4048 +4944 6402 +6896 220 +7008 308 +7184 308 +7312 308 +7504 308 +7664 308 +7760 308 +7824 308 +7888 308 +7952 308 +8048 308 +8208 308 +8336 308 +8432 308 +8496 308 +8560 308 +8624 308 +8752 308 +8848 308 +8976 308 +9040 308 +9168 308 +9232 220 +9232 759 +9232 1760 +9232 2948 +9232 7029 +3440 10032 +3504 7920 +3632 7920 +3696 7920 +3760 3113 +3760 6908 +8240 8899 +8272 8756 +8304 1188 +8304 6908 +8304 8613 +9296 6897 +9296 9878 +9456 6776 +9552 6776 +9680 6776 +9776 231 +9776 1012 +9776 1760 +6992 8646 +6992 10802 +7024 7260 +7056 638 +7056 1518 +7056 2574 +7056 4048 +7056 7139 +14640 2530 +14640 5368 +14640 6798 +14640 8646 +14640 9878 +14640 11539 +14736 1012 +14800 1012 +14912 1012 +15120 1012 +15328 1012 +15408 1012 +15472 1012 +15600 1012 +15728 1012 +15792 1012 +15888 1012 +15984 1012 +16128 1012 +16272 1012 +16400 1012 +16528 913 +14704 2530 +14720 4928 +14736 5357 +14736 6798 +14736 8646 +14736 9878 +14736 11429 +14816 4928 +14928 4928 +15136 4928 +15328 4928 +15408 4928 +15472 4928 +15600 4928 +15712 4928 +15792 4928 +15888 4928 +15984 4928 +16128 4928 +16288 4928 +16400 4928 +16544 4928 +16656 4928 +16752 4928 +16816 1012 +16816 2222 +16816 3850 +13808 5137 +13808 7282 +13808 8866 +13808 9878 +13808 11539 +13908 4708 +14080 4708 +14224 4708 +14400 4708 +14512 4708 +14736 4708 +14816 4708 +14928 4708 +15136 4708 +15328 4708 +15408 4708 +15472 4708 +15600 4708 +15712 4708 +15792 4708 +15888 4708 +15984 4708 +16128 4708 +16288 4708 +16400 4708 +16544 4708 +16656 4708 +16752 4708 +16912 4708 +16976 1012 +16976 2222 +16976 3971 +3664 3113 +3664 7018 +3664 9119 +3684 9284 +3760 10142 +3600 3113 +3600 7128 +3600 9042 +3712 9812 +3888 9812 +4128 9812 +4272 9812 +4400 9812 +4528 9812 +4624 9812 +4688 9812 +4795 9812 +4955 9152 +4816 11495 +4976 2178 +4976 4048 +4976 6402 +8976 6897 +8976 9878 +8996 6556 +9296 6556 +9456 6556 +9552 6556 +9680 6556 +9808 6556 +10016 6556 +10128 6556 +10224 6556 +10384 6556 +10512 6556 +10656 6556 +10800 6556 +10864 6556 +10928 6556 +11040 6556 +11120 6556 +11216 6556 +11328 6556 +11504 6556 +11568 6556 +11632 6556 +11696 6556 +11760 6556 +11824 6556 +11920 6556 +12032 6556 +12176 6556 +12384 6556 +12512 6556 +12688 6556 +12800 6556 +12912 6556 +13072 484 +13072 1606 +13072 2310 +13072 3124 +13072 3938 +13072 4708 +13072 6193 +13108 572 +13200 572 +13344 572 +13488 572 +13632 572 +13856 572 +14096 572 +14224 572 +14400 572 +14640 572 +14736 572 +14800 572 +14912 572 +15040 572 +15200 572 +15328 572 +15408 484 +10016 6776 +10128 6776 +10224 6776 +10384 6776 +10480 231 +10480 1012 +10480 1760 +7120 638 +7120 1518 +7120 4048 +7120 8536 +7120 10802 +3728 3113 +3728 6908 +3899 9592 +4016 10142 +5776 10802 +5796 9064 +5968 9064 +6032 9064 +6112 9064 +6192 9064 +6352 9064 +6432 9064 +6512 9064 +6672 9064 +6864 9064 +6928 9064 +7024 9064 +7211 9064 +7248 638 +7248 1518 +7248 4048 +7248 7128 +7248 8767 +3920 2959 +3920 6908 +3920 9163 +3972 9372 +4128 9372 +4272 9372 +4528 9372 +4624 9372 +4688 9372 +4784 9372 +4960 9372 +5136 9372 +5552 9372 +5632 9372 +5808 9372 +5968 9372 +6032 9372 +6112 9372 +6192 9372 +6352 9372 +6432 9372 +6512 9471 +6512 11495 +16368 2222 +16368 3850 +16368 5368 +16368 6798 +16368 7876 +16368 10461 +16368 11429 +3536 3113 +3536 7128 +3536 10032 +8464 8745 +8720 8448 +8848 8448 +9104 8448 +9728 8448 +10000 8448 +10256 8448 +10352 8448 +10464 8448 +10656 8448 +10736 8448 +10800 8448 +10912 8448 +11040 8448 +11200 8448 +11344 8448 +11504 8448 +11600 8448 +11712 8448 +11792 8448 +11984 8448 +12192 8448 +12272 8448 +12384 8448 +12528 8448 +12656 8448 +12720 1606 +12720 2574 +12720 4708 +12720 6072 +12720 7392 +12816 792 +12944 792 +13120 792 +13200 792 +13344 792 +13488 792 +13632 792 +13856 792 +14096 792 +14224 792 +14400 792 +14640 792 +14736 792 +14800 792 +14912 792 +15051 792 +2800 3113 +2800 6864 +2852 7700 +2960 7700 +3024 7700 +3200 7700 +3312 7700 +3424 7700 +3504 7700 +3632 7700 +3696 7700 +3808 7700 +3888 7700 +3952 7700 +4096 7700 +4176 7700 +4240 7799 +8048 8756 +8080 7700 +8112 1188 +8112 4818 +8112 7018 +1328 3223 +1328 6919 +1456 8778 +1456 10032 +9680 2288 +9808 2288 +9872 2288 +10000 2288 +10096 2288 +10224 2288 +10288 2288 +10384 2288 +10512 2288 +10576 2288 +10640 2288 +10704 2288 +10800 2288 +10928 2288 +11056 2288 +11120 2288 +11216 2288 +11344 2288 +11408 2288 +11488 2288 +11696 2288 +11760 2288 +11904 2288 +12048 2288 +12176 2288 +12336 2288 +12432 2288 +12496 913 +12496 1606 +12516 1012 +12688 1012 +12816 1012 +12944 1012 +13120 1012 +13200 1012 +13344 1012 +13488 1012 +13632 1012 +13867 1012 +5232 10472 +5488 7920 +5552 7920 +5632 7920 +5712 7920 +5808 7920 +5968 7920 +6096 7920 +6192 7920 +6416 7920 +6544 7920 +6672 7920 +6864 7920 +6928 7920 +7040 7920 +7184 7920 +7536 7920 +7600 7920 +7696 7920 +7760 7920 +7824 7920 +7888 7920 +8096 7920 +8176 7920 +8256 7920 +8448 7920 +8720 7920 +8848 7920 +9115 7920 +9136 1188 +9136 2948 +9136 5962 +9136 7018 +9444 6116 +9552 6116 +9680 6116 +9808 6116 +10016 6116 +10144 6116 +10224 6116 +10384 6116 +10512 6116 +10576 6116 +10656 6116 +10800 6116 +10864 6116 +10928 6116 +11056 6116 +11120 6116 +11216 6116 +11312 231 +11312 902 +11312 4488 +11312 5973 +9008 9878 +9104 1188 +9104 2948 +9104 5962 +9104 7029 +5648 10681 +5808 10472 +5968 10472 +6032 10472 +6112 10472 +6192 10472 +6352 10472 +6464 10472 +6672 10472 +6848 10472 +7024 10472 +7200 10472 +7376 10472 +7536 10472 +7600 10472 +7696 10472 +7824 10472 +7888 10472 +7984 10472 +8096 10472 +8176 10472 +8272 10472 +8368 10472 +8432 10472 +8720 10472 +8848 10472 +9104 10472 +9728 10472 +10032 10472 +10256 10472 +10320 10472 +10480 10472 +10656 10472 +10747 10472 +10768 231 +10768 902 +10768 1760 +10768 7392 +10768 10373 +10016 9064 +10064 231 +10064 1012 +10064 1760 +5584 3223 +5584 4048 +5584 6402 +5584 8382 +5584 10692 +5664 3080 +5872 3080 +6128 3080 +6192 3080 +6256 3080 +6416 3080 +6560 3080 +6672 3080 +6784 3080 +6896 3080 +7008 3080 +7088 3080 +7184 3080 +7312 3080 +7504 3080 +7664 3080 +7760 3080 +7824 3080 +7888 3080 +7952 3080 +8048 3080 +8208 3080 +8336 3080 +8432 3080 +8496 3080 +8624 3080 +8752 3080 +8848 3080 +8976 3080 +9051 3080 +9072 1188 +9072 2915 +8624 5962 +8624 8866 +8688 1188 +8592 8866 +8656 1188 +8656 5962 +7952 8756 +8048 6116 +8176 6116 +8432 6116 +8507 6116 +8528 1188 +8528 5973 +8464 1188 +8656 8866 +7056 10802 +7195 8844 +7216 638 +7216 1518 +7216 4048 +7216 7128 +7216 8657 +17456 1782 +17456 4092 +17456 6578 +17456 7722 +17456 8745 +17476 8844 +17552 8844 +17712 9603 +17712 10670 +9428 2948 +9680 2948 +9808 2948 +9872 2948 +10000 2948 +10096 2948 +10224 2948 +10288 2948 +10384 2948 +10512 2948 +10576 2948 +10640 2948 +10704 2948 +10800 2948 +10928 2948 +11056 2948 +11120 2948 +11216 2948 +11344 2948 +11488 2948 +11696 2948 +11760 2948 +11904 2948 +12048 2948 +12176 2948 +12336 2948 +12432 2948 +12523 2948 +12560 1606 +12560 2354 +17552 1782 +17552 4092 +17552 6578 +17552 7887 +17712 8184 +17856 8184 +17968 8184 +18192 8184 +18256 9427 +18256 10670 +9728 10032 +10032 10032 +10256 10032 +10320 10032 +10416 10032 +10480 10032 +10656 10032 +10736 10032 +10800 10032 +10928 10032 +11040 10032 +11216 10032 +11312 10032 +11440 10032 +11520 10032 +11600 10032 +11712 10032 +11792 10032 +11984 10032 +12080 10032 +12208 10032 +12384 10032 +12528 10032 +12656 10032 +12816 10032 +12944 10032 +13088 10032 +13232 10032 +13408 10032 +13536 10032 +13643 10032 +13680 2530 +13680 5148 +13680 7282 +13680 8866 +13680 9889 +17712 231 +17712 1782 +17712 4246 +17712 6325 +17840 6908 +17968 6908 +18128 7007 +18128 7766 +18128 10670 +9072 3487 +9072 5962 +9072 6908 +9072 9878 +9440 3388 +9520 3388 +9680 3388 +9840 3388 +10000 3388 +10096 3388 +10224 3388 +10288 3388 +10384 3388 +10512 3388 +10576 3388 +10640 3388 +10704 3388 +10800 3388 +10928 3388 +11056 3388 +11120 3388 +11216 3388 +11344 3388 +11488 3388 +11696 3388 +11760 3388 +11904 3388 +12048 3388 +12176 3388 +12336 3388 +12432 3388 +12544 3388 +12688 3388 +12763 3388 +12784 1606 +12784 2310 +9232 8107 +9232 9878 +9648 8008 +9744 8008 +9904 8008 +10016 8008 +10192 8008 +10256 8008 +10384 8008 +10496 8008 +10656 8008 +10816 8008 +10928 8008 +11040 8008 +11120 8008 +11216 8008 +11328 8008 +11504 8008 +11568 8008 +11632 8008 +11696 8008 +11760 8008 +11824 8008 +11968 8008 +12192 8008 +12272 8008 +12384 8008 +12528 8008 +12656 8008 +12800 8008 +12880 8008 +12944 8008 +13088 8008 +13264 8008 +13392 8008 +13520 8008 +13632 8008 +13712 2530 +13712 5148 +13712 7282 +8400 1188 +8400 6919 +8420 7040 +8507 7040 +8528 7139 +8528 8866 +9168 1639 +9168 2948 +9168 5962 +9168 7018 +9168 8074 +9168 9878 +9264 1452 +9424 1452 +9584 1452 +9680 1452 +9808 1452 +9872 1452 +10000 1452 +10096 1452 +10224 1452 +10288 1452 +10384 1452 +10512 1452 +10576 1452 +10640 1452 +10704 1452 +10800 1452 +10928 1452 +11056 1452 +11120 1452 +11216 1452 +11344 1452 +11488 1452 +11696 1452 +11760 1452 +11904 1452 +12048 1452 +12176 1452 +12304 902 +9360 2827 +9412 2728 +9680 2728 +9808 2728 +9872 2728 +10000 2728 +10096 2728 +10224 2728 +10288 2728 +10384 2728 +10512 2728 +10576 2728 +10640 2728 +10704 2728 +10800 2728 +10928 2728 +11056 2728 +11120 2728 +11216 2728 +11344 2728 +11488 2728 +11696 2728 +11760 2728 +11904 2728 +12048 2728 +12176 2728 +12336 2728 +12432 2728 +12512 2728 +12592 1606 +12592 2475 +14864 2530 +14864 4378 +14864 5478 +14864 6798 +14864 8646 +14864 9878 +14864 11429 +7760 8745 +7776 8448 +7792 1188 +7792 4818 +15312 7887 +15312 8646 +15312 9878 +15312 10626 +15312 11429 +15344 7788 +15376 2530 +15376 5478 +15376 6798 +15376 7689 +6864 429 +6864 1518 +6864 2574 +6864 4048 +7008 5368 +7088 5368 +7184 5368 +7328 5368 +7584 5368 +7664 5368 +7760 5368 +7824 5368 +7888 5368 +7952 5368 +8048 5368 +8176 5368 +8336 5368 +8432 5368 +8496 5368 +8752 5368 +8848 5368 +8992 5368 +9440 5368 +9552 5368 +9680 5368 +9824 5368 +10016 5368 +10160 5368 +10224 5368 +10288 5368 +10384 5368 +10512 5368 +10608 5368 +10704 7392 +10704 11495 +12400 11484 +12528 11000 +12656 11000 +12816 11000 +12944 11000 +13088 11000 +13232 11000 +13392 11000 +13536 11000 +13696 11000 +13968 11000 +14192 11000 +14272 11000 +14384 11000 +14448 11000 +12400 11176 +14576 2530 +14576 5368 +14576 6798 +14576 8646 +14576 9878 +14704 11000 +14784 11000 +14960 11000 +15120 11000 +15392 11000 +15520 11000 +15712 11000 +15792 11000 +15856 11000 +16048 11000 +16224 11000 +16432 11000 +16496 11484 +16496 11176 +7088 8536 +7088 10802 +7152 638 +7152 1518 +7152 4048 +7152 7139 +15952 2343 +15972 2992 +16128 2992 +16272 2992 +16400 2992 +16544 2992 +16656 2992 +16752 2992 +16912 2992 +17040 2992 +17104 2992 +17184 2992 +17392 2992 +17504 2992 +17744 4125 +17744 6204 +17744 7766 +17744 8734 +17744 9603 +17744 10670 +15664 2530 +15664 5368 +15664 6798 +15664 8426 +15664 9878 +15664 10626 +15664 11429 +17584 231 +17584 1782 +17584 4092 +17584 6578 +17584 7766 +17584 9603 +17584 10670 +16432 2222 +16432 3850 +16432 5478 +16432 6798 +16432 7887 +16528 10890 +8144 1188 +8144 4818 +8144 7018 +8144 8756 +9616 231 +9616 1012 +9616 1760 +9616 7139 +12112 902 +12112 4488 +12112 5962 +12112 7392 +8368 1188 +8368 6908 +8368 8767 +12784 11429 +12804 8844 +12880 8844 +12944 8844 +13088 8844 +13264 8844 +13392 8844 +13531 8844 +13552 2530 +13552 3938 +13552 4928 +13552 7282 +13552 8657 +18864 10846 +18864 11528 +18916 9086 +19024 9086 +11920 7392 +11920 11165 +11936 6776 +11952 902 +11952 4488 +11952 6072 +10320 231 +10320 1012 +10320 1760 +10320 7392 +10427 9504 +11824 902 +11824 4488 +11824 6083 +11840 6336 +11856 7392 +11856 11165 +12656 1606 +12656 2574 +12656 4708 +12656 6072 +12672 6776 +12688 7392 +12688 11429 +5008 11495 +5072 2178 +5072 4048 +5072 6402 +5072 7194 +13168 1606 +13168 2310 +13168 3124 +13168 3938 +13168 4928 +13168 5929 +13296 6028 +13456 6028 +13520 6028 +13632 6028 +13760 6028 +13920 6028 +14080 6028 +14192 6028 +14256 6028 +14400 6028 +14512 6028 +14704 6028 +14816 6028 +14928 6028 +15136 6028 +15328 6028 +15440 6028 +15600 6028 +15712 6028 +15792 6028 +15888 6028 +15984 6028 +16128 6028 +16288 6028 +16544 6028 +16656 6028 +16752 6028 +16816 6028 +16912 6028 +17040 6028 +17104 6028 +17168 6028 +17392 6028 +17504 6028 +17680 6457 +17680 7766 +17680 9603 +17680 10670 +3312 10692 +3344 3113 +3344 6864 +3344 10153 +14544 2530 +14544 5368 +14544 6798 +14544 8646 +14544 9878 +14544 11539 +6736 638 +6736 1518 +6736 2574 +6736 4048 +6736 8646 +6736 9438 +6832 11440 +7024 11440 +7200 11440 +7440 11440 +7536 11440 +7600 11440 +7696 11440 +7824 11440 +7888 11440 +8096 11440 +8176 11440 +8272 11440 +8368 11440 +8432 11440 +8720 11440 +8848 11440 +9104 11440 +9728 11440 +10032 11440 +10256 11440 +10320 11440 +10480 11440 +10544 11528 +11792 902 +11792 4488 +11792 6072 +11792 7392 +11808 8228 +11824 11165 +8720 1188 +8720 5962 +8848 7700 +9104 7700 +9232 7700 +6064 319 +6064 2024 +6064 4048 +6064 5335 +6100 5588 +6192 5588 +6256 5588 +6416 5588 +6560 5588 +6672 5588 +6779 5588 +6800 7128 +6800 8646 +6800 9438 +6864 6556 +6992 6556 +7088 6556 +7184 6556 +7328 6556 +7616 6556 +7744 6556 +7824 6556 +7888 6556 +8048 6556 +8176 6556 +8432 6556 +8512 6556 +8832 6556 +8944 1188 +8944 5962 +8944 6897 +8944 9878 +5968 319 +5968 2024 +5968 4048 +5968 5324 +6096 7700 +6192 7700 +6416 7700 +6544 7700 +6672 7700 +6864 7700 +6928 7700 +7040 7700 +7152 8536 +7152 10802 +7204 9504 +7536 9504 +7600 9504 +7696 9504 +7824 9504 +7904 9504 +8096 9504 +8176 9504 +8272 9504 +8368 9504 +8432 9504 +8720 9504 +8864 9504 +9104 9504 +9728 9504 +9968 231 +9968 1012 +9968 1760 +11952 11165 +11972 8228 +12192 8228 +12272 8228 +12384 8228 +12528 8228 +12656 8228 +12800 8228 +12880 8228 +12944 8228 +13088 8228 +13264 8228 +13392 8228 +13520 8228 +13632 8228 +13744 8228 +13968 8228 +14192 8228 +14272 8228 +14384 8228 +14448 8228 +14512 8228 +14704 8228 +14784 8228 +15120 8228 +15392 8228 +15472 8228 +15536 484 +15536 671 +15536 2530 +15536 5368 +15536 6798 +15600 572 +15728 572 +15792 572 +15888 572 +15984 572 +16128 572 +16272 572 +16400 572 +16560 572 +16656 572 +16752 572 +16912 572 +17040 572 +17184 572 +17392 572 +17504 572 +17824 572 +17968 572 +18032 572 +18128 352 +7568 8756 +7600 6116 +7632 1188 +7632 4818 +11728 902 +11728 4488 +11728 6072 +11728 7392 +11744 8228 +11760 11165 +19024 11528 +12272 902 +12272 4488 +12272 5962 +12384 6776 +12496 7392 +12496 11429 +10656 8228 +10736 231 +10736 902 +10736 1760 +10736 7392 +7504 8756 +7568 638 +7568 1518 +7568 3949 +7568 4147 +7568 4939 +7664 4048 +7760 4048 +7824 4048 +7888 4048 +7952 4048 +8048 4048 +8208 4048 +8336 4048 +8432 4048 +8496 4048 +8688 4048 +8763 4048 +8784 1188 +8784 3949 +8784 8866 +7888 9064 +7920 1188 +7920 4818 +7920 8767 +7940 4268 +8048 4268 +8208 4268 +8336 4268 +8432 4268 +8496 4268 +8688 4268 +8752 4268 +8848 4268 +8912 4268 +8992 4268 +9440 4268 +9552 4268 +9680 4268 +9824 4268 +9936 4268 +10000 4268 +10224 4268 +10288 4268 +10384 4268 +10523 4268 +10544 231 +10544 1012 +10544 1760 +10544 7392 +10656 11132 +10768 11132 +10928 11132 +10992 11550 +10992 11308 +8208 7018 +8208 8756 +8336 4708 +8432 4708 +8496 4708 +8752 4708 +8848 4708 +8992 4708 +9440 4708 +9552 4708 +9680 4708 +9824 4708 +9936 4708 +10000 4708 +10224 4708 +10288 4708 +10384 4708 +10512 4708 +10587 4708 +10608 231 +10608 902 +10608 1760 +11984 902 +11984 4488 +11984 6072 +12000 6776 +12016 7392 +12016 11165 +8560 5962 +8560 7018 +8560 8866 +8624 2288 +8752 2288 +8848 2288 +8976 2288 +9040 2288 +9264 2288 +9360 671 +9360 1760 +11376 11385 +11440 231 +11440 902 +11440 4488 +11440 6072 +11440 7392 +10256 8228 +10352 231 +10352 1012 +10352 1760 +10352 7392 +11472 7392 +11472 11275 +11492 6336 +11568 231 +11568 902 +11568 4488 +11568 6083 +11184 11385 +11204 9064 +11344 9064 +11515 9064 +11536 231 +11536 902 +11536 4488 +11536 5962 +11536 7392 +656 3575 +656 9922 +15824 5368 +15824 6798 +15824 8426 +15824 9878 +15824 10626 +15824 11429 +15888 4488 +15984 4488 +16128 4488 +16283 4488 +16304 2222 +16304 3861 +6608 429 +6608 1518 +6608 2574 +6608 4048 +6660 5060 +6784 5060 +6896 7128 +6896 8646 +6896 10802 +12048 7392 +12048 11165 +12187 6776 +12208 902 +12208 4488 +12208 5962 +155 11198 +8912 5962 +8912 7018 +8912 9878 +8992 4488 +9440 4488 +9552 4488 +9680 4488 +9824 4488 +9936 4488 +10000 4488 +10224 4488 +10288 4488 +10384 4488 +10512 4488 +10576 4488 +10640 4488 +10704 4488 +10800 4488 +10864 231 +10864 902 +10864 1760 +10864 4389 +10864 4587 +10928 5896 +11067 5896 +11088 7392 +11088 11385 +9264 6908 +9264 9878 +9440 3168 +9520 231 +9520 1012 +9520 1760 +12240 902 +12240 4488 +12240 5962 +12240 7392 +12240 11165 +7312 8756 +7312 10802 +7536 638 +7536 1518 +7536 4048 +7536 4818 +3280 3113 +3280 6864 +3300 9372 +3504 9372 +3568 9372 +3632 10142 +11376 231 +11376 902 +11376 4488 +11376 6072 +11376 7392 +11504 8228 +11568 11275 +11280 11385 +11316 10472 +11440 10472 +11520 10472 +11600 10472 +11712 10472 +11792 10472 +11984 10472 +12080 10472 +12208 10472 +12384 10472 +12528 10472 +12656 10472 +12816 10472 +12944 10472 +13088 10472 +13232 10472 +13392 10472 +13536 10472 +13696 10472 +13968 10472 +14160 2530 +14160 5258 +14160 7172 +14160 8866 +14160 9878 +3152 3113 +3152 6864 +3188 7920 +3312 7920 +3408 10153 +3408 10571 +3504 10472 +3584 10472 +3712 10472 +3888 10472 +4048 10472 +4128 10472 +4272 10472 +4400 10472 +4528 10472 +4624 10472 +4688 10472 +4784 10472 +4955 10472 +4976 10373 +4992 9812 +4976 11495 +5008 2178 +5008 4048 +5008 6402 +528 3575 +528 9812 +16016 2222 +16016 3740 +16016 5368 +16016 6798 +16016 7766 +16016 8624 +16016 9834 +16068 9922 +16208 9922 +16432 9922 +16496 9922 +16592 9922 +16688 9922 +16784 9922 +16912 9922 +17040 9922 +17136 9922 +17280 9922 +17360 10670 +17360 11528 +5872 8382 +5872 10802 +5888 5060 +5904 209 +5904 2024 +5904 4048 +976 11055 +1104 10912 +1232 10912 +1584 10912 +1712 10912 +1776 10912 +1904 10912 +2064 10912 +2240 10912 +2464 10912 +2736 10912 +3019 10912 +3056 3113 +3056 6864 +3056 10153 +3168 10912 +3344 10912 +3504 10912 +3584 10912 +3712 10912 +3888 10912 +4048 10912 +4128 10912 +4272 10912 +4400 10912 +4464 10912 +4528 10912 +4624 10912 +4688 11495 +13456 8536 +13456 9174 +13456 11429 +13520 7788 +13632 7788 +13760 7788 +13968 7788 +14192 7788 +14272 7788 +14384 7788 +14448 2530 +14448 5368 +14448 6798 +14512 7788 +14704 7788 +14816 7788 +14928 7887 +14928 8646 +14928 9878 +14928 11429 +16048 2222 +16048 3740 +16048 5368 +16048 6798 +16048 7766 +16128 8404 +16304 8404 +16432 8404 +16592 8404 +16688 8404 +16752 8404 +16816 8404 +16912 8404 +17008 10560 +17008 11528 +560 9801 +752 8404 +912 8404 +976 8404 +1104 8404 +1232 8404 +1328 8404 +1536 8404 +1616 8404 +1696 8404 +1776 8404 +1872 8404 +1936 8404 +2112 8404 +2192 8404 +2288 8404 +2464 8404 +2635 8404 +2704 3113 +2704 6864 +2804 8140 +2960 8140 +3024 8140 +3168 8140 +3312 8140 +3504 8140 +3632 8140 +3696 8140 +3824 8140 +3952 8140 +4096 8140 +4272 8140 +4336 8140 +2704 8250 +4432 11495 +14032 2530 +14032 5258 +14032 7293 +14068 7568 +14192 7568 +14272 7568 +14384 7568 +14512 7568 +14704 7568 +14816 7568 +14928 7568 +15131 7568 +15248 7777 +15248 8646 +15248 9878 +15248 10626 +15248 11429 +13584 2530 +13584 3949 +13620 4048 +13872 4048 +14096 4048 +14224 4048 +14400 4048 +14512 4048 +14736 4048 +14800 4048 +14896 4257 +14896 5478 +14896 6798 +14896 8646 +14896 9878 +14896 11429 +14608 2530 +14608 5368 +14608 6798 +14608 8646 +14608 9878 +14608 11539 +13392 1606 +13392 2794 +13392 3938 +13392 4928 +13456 6248 +13520 6248 +13632 6248 +13760 6248 +13920 6248 +14080 6248 +14192 6248 +14256 6248 +14400 6248 +14512 6248 +14704 6248 +14816 6248 +14928 6248 +15136 6248 +15328 6248 +15440 6248 +15600 6248 +15712 6248 +15792 6248 +15888 6248 +15984 6248 +16128 6248 +16288 6248 +16544 6248 +16656 6677 +16656 7876 +16656 10890 +16672 6248 +16688 1012 +16688 2222 +16688 3850 +16688 5478 +12752 1606 +12752 2431 +12816 2640 +12944 2640 +13120 2640 +13339 2640 +13360 3003 +13360 3938 +13360 4928 +13360 6402 +13360 7392 +13360 8536 +13360 9174 +13360 11429 +16208 2222 +16208 3740 +16208 5368 +16208 6798 +16208 7766 +16283 8624 +16304 10461 +16304 11429 +1392 8778 +1392 10032 +1456 6336 +1552 6336 +1648 6336 +1760 6336 +1872 6336 +2000 6336 +2112 6336 +2192 6336 +2288 6336 +2480 6336 +2608 6336 +2736 6336 +2880 6336 +3024 6336 +3200 6336 +3312 6336 +3408 3058 +3408 6160 +3808 6336 +3888 6336 +3952 6336 +4096 6336 +4176 6336 +4256 6336 +4432 6336 +4496 6336 +4560 7810 +4560 8866 +4560 11495 +3696 3113 +3696 7029 +3808 7260 +3888 7260 +3952 7260 +4096 7260 +4176 7260 +4256 7260 +4336 7260 +4432 7260 +4496 7260 +4640 7260 +4768 7260 +4848 7260 +4912 7260 +5040 11495 +4912 11495 +5104 2178 +5104 4048 +5104 6402 +5104 7315 +14352 2530 +14352 5368 +14352 6908 +14352 8866 +14352 9878 +14352 11539 +5328 6391 +5328 7194 +5328 10582 +5392 2178 +5392 4048 +5744 10802 +5760 8624 +5776 2024 +5776 4048 +5776 8393 +1488 3113 +1488 6908 +1488 8778 +1488 10032 +4016 2959 +4016 6908 +4128 9152 +4272 9152 +7984 1188 +7984 4818 +7984 8756 +6160 429 +6160 2024 +6160 4048 +6160 8382 +6160 10802 +6160 11495 +5264 2178 +5264 4048 +5264 6402 +5264 7194 +5552 9812 +5632 9812 +5808 9812 +5968 9812 +6032 9812 +6112 9812 +6192 9812 +6352 9812 +6448 9812 +6672 9812 +6848 9812 +6928 9812 +7024 9812 +7216 9812 +7536 9812 +7600 9812 +7696 9812 +7824 9812 +7904 9812 +8096 9812 +8176 9812 +8272 9812 +8368 9812 +8432 9812 +8720 9812 +8859 9812 +8880 9911 +9200 7018 +9200 8074 +9200 9878 +9296 671 +9296 1760 +9296 2838 +6512 429 +6512 2024 +6512 4048 +6512 8657 +6528 8844 +6544 9438 +6544 11495 +9904 231 +9904 1012 +9904 1760 +6928 638 +6928 1518 +6928 2574 +6928 4048 +6928 7139 +6944 7260 +6960 8646 +6960 10802 +10896 10362 +10896 11495 +10916 9504 +11040 9504 +11216 9504 +11280 231 +11280 902 +11280 4488 +11280 7392 +7408 10912 +7440 638 +7440 1518 +7440 4048 +7440 4928 +7440 8756 +12592 4708 +12592 6072 +12592 7392 +12592 11429 +12608 3608 +12624 1606 +12624 2574 +12688 3608 +12784 3608 +12928 3608 +13120 3608 +13328 3608 +13456 3608 +13520 3608 +13632 3608 +13872 3608 +14096 3608 +14224 3608 +14400 3608 +14512 3608 +14736 3608 +14800 3608 +14912 3608 +15120 3608 +15328 3608 +15408 3608 +15472 3608 +15600 3608 +15712 3608 +15792 3608 +15899 3608 +15920 3927 +15920 5368 +15920 6798 +15920 7766 +15920 8624 +15920 9878 +15920 10626 +15920 11429 +12336 7392 +12336 11165 +12352 6116 +12368 902 +12368 1606 +12368 4488 +12368 5973 +17616 6578 +17616 7766 +17616 9603 +17616 10670 +17835 5500 +17872 231 +17872 1628 +17872 4213 +11632 902 +11632 4488 +11632 6083 +11648 6336 +11664 7392 +11664 11275 +14480 2530 +14480 5368 +14480 6798 +14480 8866 +14480 9878 +14480 11539 +17648 231 +17648 1782 +17648 4246 +17648 6578 +17648 7766 +17648 9603 +17648 10670 +624 3575 +624 9922 +12400 902 +12400 1606 +12400 4488 +12400 5973 +12416 6116 +12432 7392 +12432 11429 +12080 902 +12080 4488 +12080 5962 +12080 7392 +12096 9504 +12112 11165 +17776 231 +17776 1628 +17776 4092 +17776 6204 +17776 7766 +17776 8734 +17776 9603 +17776 10670 +12464 902 +12464 1606 +12516 4268 +12688 4268 +12800 4268 +12912 4268 +13120 4268 +13328 4268 +13456 4268 +13520 4268 +13616 4268 +13872 4268 +14091 4268 +14128 5258 +14128 7172 +14128 8866 +14128 9878 +14128 11539 +17744 231 +17744 1749 +17824 2684 +17979 2684 +18000 4675 +18000 7766 +18000 10670 +16624 1012 +16624 2222 +16624 3850 +16624 5478 +16624 6798 +16624 7876 +16624 10890 +13232 1606 +13232 2310 +13232 3124 +13232 3938 +13232 4928 +13232 7282 +13232 8536 +13232 9185 +13248 9284 +13264 11429 +10192 231 +10192 1012 +10192 1760 +18416 10670 +18500 9438 +18656 9438 +18784 9438 +18928 9438 +19024 9438 +912 3410 +912 6864 +928 7040 +944 9922 +14320 2530 +14320 5368 +14320 6908 +14320 8866 +14320 9878 +14320 11539 +7696 1188 +7696 4818 +7696 6908 +7760 7700 +7824 7700 +7888 7700 +8016 8756 +18832 10725 +18832 11528 +18928 10494 +19024 10494 +14768 2530 +14768 5478 +14768 6798 +14800 8008 +14832 8646 +14832 9878 +14832 11429 +6640 220 +6676 308 +6795 308 +6832 220 +6832 517 +6832 1518 +6832 2574 +6832 4048 +6832 5434 +6832 7128 +6832 8646 +6852 9284 +6928 9284 +7024 9284 +7216 9284 +7536 9284 +7600 9284 +7696 9284 +7824 9284 +7904 9284 +8096 9284 +8176 9284 +8272 9284 +8368 9284 +8432 9284 +8720 9284 +8864 9284 +9104 9284 +9728 9284 +10032 9284 +10256 9284 +10448 9284 +10656 9284 +10736 9284 +10800 9284 +10912 9284 +11040 9284 +11216 9284 +11344 9284 +11520 9284 +11600 9284 +11712 9284 +11792 9284 +11984 9284 +12128 9284 +12208 9284 +12384 9284 +12528 9284 +12656 9284 +12843 9284 +12880 11429 +7344 8756 +7344 10802 +7600 7260 +7760 7260 +7824 7260 +7888 7260 +8043 7260 +8080 1188 +8080 4818 +8080 7029 +10128 231 +10128 1012 +10128 1760 +10148 5896 +10224 5896 +10384 5896 +10512 5896 +10587 5896 +10608 7392 +10608 11495 +16496 2222 +16496 3850 +16496 5478 +16496 6798 +16496 7766 +16592 9284 +16688 9284 +16784 9284 +16912 9284 +17040 9284 +17136 9284 +17280 9284 +17392 9592 +17392 10670 +17392 11528 +4592 2684 +4592 5434 +4592 7810 +4592 8866 +4592 11495 +10576 7392 +10576 11495 +10656 6336 +10800 6336 +10864 6336 +10928 6336 +11024 231 +11024 902 +11024 1760 +11024 4488 +2384 3113 +2384 6644 +2384 10032 +2928 10032 +2944 6952 +2960 3113 +2960 6875 +5168 2178 +5168 4048 +5168 6402 +5168 7458 +5168 10582 +2544 3113 +2544 6754 +2544 10032 +9648 231 +9648 1012 +9648 1760 +9648 7128 +9664 7788 +1808 8052 +1808 10032 +1872 7172 +1984 7172 +2112 7172 +2192 7172 +2288 7172 +2464 7172 +2624 7172 +2736 7172 +2864 7172 +2960 7172 +3024 7172 +3200 7172 +3312 7172 +3408 7172 +3472 3113 +3472 6985 +9488 231 +9488 1012 +9488 1760 +9488 7128 +2000 8041 +2000 8778 +2000 10032 +2112 7920 +2192 7920 +2288 7920 +2464 7920 +2624 7920 +2816 7920 +2960 7920 +3024 7920 +3120 3113 +3120 6864 +8752 8866 +8816 1188 +8816 3938 +8816 5973 +1008 3575 +1008 9658 +1296 7821 +1296 9658 +1316 7700 +1536 7700 +1648 7700 +1760 7700 +1872 7700 +1984 7700 +2112 7700 +2192 7700 +2288 7700 +2464 7700 +2624 7700 +2747 7700 +2768 3113 +2768 6864 +1360 3223 +1360 8778 +1360 10032 +2032 8778 +2032 10032 +2112 6952 +2192 6952 +2288 6952 +2416 3113 +2416 6765 +560 3410 +560 6864 +576 7040 +592 9922 +1712 3113 +1712 7018 +1712 8063 +1728 8184 +1744 10032 +5104 10582 +5104 11495 +5120 7920 +5136 2178 +5136 4048 +5136 6402 +5136 7469 +2064 3113 +2064 6644 +2064 8789 +2080 8932 +2096 10032 +3072 11220 +3088 3113 +3088 6864 +3088 10032 +3248 3113 +3248 6864 +3248 10032 +10960 231 +10960 902 +10960 1760 +10960 4488 +10960 7392 +10960 10362 +10960 11495 +2976 10692 +2992 3113 +2992 6864 +2992 10043 +10832 10362 +10832 11495 +10896 231 +10896 902 +10896 1760 +10896 4488 +10896 7392 +10832 231 +10832 902 +10832 1760 +10848 6776 +10864 7392 +10864 10362 +10864 11495 +17968 10670 +18368 9790 +18512 9790 +18656 9790 +18784 9790 +18928 9790 +19024 9790 +3376 3113 +3376 6864 +3504 9592 +3568 9592 +3664 10142 +2224 3113 +2224 6644 +2276 8712 +2464 8712 +2736 8712 +2960 8712 +3024 8712 +3168 8712 +3312 8712 +3504 8712 +3632 8712 +3696 8712 +3824 8712 +3952 8712 +8848 9064 +8880 1188 +8880 3938 +8880 5962 +8880 7018 +16080 2222 +16080 3740 +16080 5368 +16080 6798 +16080 7766 +16080 8745 +16112 8844 +16144 10626 +16144 11429 +13296 1606 +13296 2310 +13296 3124 +13296 3938 +13296 4928 +13456 5808 +13520 5808 +13632 5808 +13760 5808 +13920 5808 +14080 5808 +14203 5808 +14224 7172 +14224 8866 +14224 9878 +14224 11539 +14160 11539 +14180 10780 +14272 10780 +14384 10780 +14448 10780 +14704 10780 +14784 10780 +14960 2530 +14960 4158 +14960 5478 +14960 6798 +14960 7898 +14960 8646 +14960 9878 +14960 10637 +17104 10560 +17104 11528 +17120 8404 +17136 1782 +17136 4356 +17136 6688 +17136 7722 +15440 8646 +15440 9878 +15440 10626 +15440 11429 +15460 7788 +15600 7788 +15712 7788 +15792 7788 +15856 2530 +15856 4048 +15856 5368 +15856 6798 +15856 7689 +15344 8646 +15344 9878 +15344 10626 +15344 11429 +15380 8008 +15472 8008 +15568 2530 +15568 5368 +15568 6798 +4208 2365 +4208 5434 +4208 6908 +18320 3619 +18320 7876 +18320 9427 +18320 10670 +12144 902 +12144 4488 +12144 5962 +12144 7392 +12160 9064 +12176 11165 +14992 4323 +14992 5478 +14992 6798 +14992 7898 +14992 8646 +14992 9878 +14992 10626 +14992 11429 +15124 4180 +15328 4180 +15408 4180 +15472 4180 +15600 4180 +15712 4180 +15803 4180 +15824 2530 +15824 4015 +16336 10461 +16336 11429 +16432 8624 +16592 8624 +16688 8624 +16752 8624 +16816 8624 +16912 8624 +17040 8624 +17136 8624 +17243 8624 +17264 1782 +17264 4092 +17264 6688 +17264 7722 +17264 8481 +9712 231 +9712 1012 +9712 1760 +9712 7128 +17072 1012 +17072 2222 +17072 4356 +17072 6688 +17072 7722 +17072 10560 +17072 11528 +13552 11418 +13696 11220 +13968 11220 +14192 11220 +14272 11220 +14384 11220 +14448 11220 +14576 11220 +14672 2530 +14672 5368 +14672 6798 +14672 8646 +14672 9878 +14688 11220 +14704 11418 +16464 2222 +16464 3850 +16464 5478 +16464 6798 +16464 7766 +16464 10461 +16464 11429 +144 11528 +320 11440 +496 11440 +752 11440 +912 11440 +1104 11440 +1232 11440 +1584 11440 +1712 11440 +1776 11440 +1904 11440 +2064 11440 +2251 11440 +2352 3113 +2352 6644 +2352 10032 +2352 11297 +2464 11440 +2736 11440 +3008 11440 +3152 11440 +3344 11440 +3504 11440 +3584 11440 +3712 11440 +3888 11440 +4048 11440 +4128 11440 +4272 11440 +4368 11528 +13168 7282 +13168 8536 +13168 9174 +13168 11429 +13264 1606 +13264 2310 +13264 3124 +13264 3938 +13264 4928 +13264 6413 +7792 8899 +7824 8756 +7856 1188 +7856 4818 +7856 8613 +16720 1012 +16720 2222 +16720 3850 +16720 5478 +16720 6688 +16720 7876 +16720 10560 +16720 11528 +19056 11528 +12976 3938 +12976 4708 +12976 6072 +12976 7282 +12976 8536 +12976 9174 +12976 11429 +13040 473 +13040 1606 +13040 2310 +15920 2497 +15936 3300 +15952 3773 +15952 5368 +15952 6798 +15952 7766 +15952 8624 +15952 9878 +15952 10626 +15952 11429 +5296 6402 +5296 7194 +5296 10582 +5312 5588 +5328 2178 +5328 4048 +11856 902 +11856 4488 +11856 5929 +11872 6028 +11888 6171 +11888 7392 +11888 11165 +15504 583 +15504 2530 +15504 5368 +15504 6798 +15504 8646 +15552 9284 +15600 9878 +15600 10626 +15600 11429 +5840 209 +5840 2024 +5840 4048 +5840 8382 +5840 10802 +4368 2365 +4368 5434 +4368 7810 +4388 11132 +4464 11132 +4528 11132 +4624 11132 +4784 11132 +4944 11132 +5136 11132 +5200 11132 +5360 11132 +5552 11132 +5616 11132 +5808 11132 +5968 11132 +6032 11132 +6112 11132 +6208 11132 +6352 11132 +6464 11132 +6672 11132 +6832 11132 +7024 11132 +7200 11132 +7440 11132 +7536 11132 +7600 11132 +7696 11132 +7824 11132 +7888 11132 +6288 429 +6288 2024 +6288 4048 +6416 8228 +6544 8228 +6672 8228 +6864 8228 +6928 8228 +7040 8228 +7184 8228 +7536 8228 +7600 8228 +7696 8228 +7760 8228 +7824 8228 +7888 8228 +8096 8228 +8176 8228 +8256 8228 +8448 8228 +8720 8228 +8848 8228 +9115 8228 +9136 9878 +4624 2684 +4624 5445 +4644 5808 +4752 5808 +4848 5808 +4912 5808 +5040 5808 +5328 5808 +5664 5808 +6096 5808 +6192 5808 +6256 5808 +6416 5808 +6560 5808 +6672 5808 +6768 5808 +6864 5808 +6992 5808 +7088 5808 +7184 5808 +7328 5808 +7584 5808 +7664 5808 +7760 5808 +7824 5808 +7888 5808 +7952 5808 +8048 5808 +8176 5808 +8336 6908 +8336 8646 +9008 1188 +9440 3828 +9552 3828 +9680 3828 +9824 3828 +9936 3828 +10000 3828 +10224 3828 +10288 3828 +10384 3828 +10512 3828 +10576 3828 +10640 3828 +10704 3828 +10800 3828 +10928 3828 +11056 3828 +11120 3828 +11216 3828 +11344 3828 +11488 3828 +11680 3828 +11760 3828 +11904 3828 +12048 3828 +12176 3828 +12336 3828 +12432 3828 +12528 3828 +12624 3828 +12688 3828 +12752 4708 +12752 6072 +12752 7392 +12752 8646 +12752 11429 +14512 9163 +14512 9878 +14512 11539 +14704 9064 +14784 9064 +15120 9064 +15392 9064 +15472 9064 +15568 9064 +15712 9064 +15792 9064 +15856 9064 +15984 9064 +16080 9064 +16208 9064 +16432 9064 +16592 9064 +16688 9064 +16784 9064 +16912 9064 +17040 9064 +17136 9064 +17280 9064 +17392 9064 +17472 9064 +17552 9064 +17952 9064 +18224 9064 +18427 9064 +18512 4037 +18512 8855 +6480 429 +6480 2024 +6480 4048 +6480 8646 +6672 10252 +6848 10252 +7024 10252 +7200 10252 +7376 10252 +7536 10252 +7600 10252 +7696 10252 +7824 10252 +7888 10252 +7984 10252 +8096 10252 +8176 10252 +8272 10252 +8368 10252 +8432 10252 +8720 10252 +8848 10252 +9104 10252 +9728 10252 +10032 10252 +10256 10252 +10320 10252 +7472 638 +7472 1518 +7472 4048 +7472 4928 +7472 8756 +7536 10912 +7600 10912 +7696 10912 +7824 10912 +7888 10912 +7984 10912 +8096 10912 +8176 10912 +8272 10912 +8368 10912 +8432 10912 +8720 10912 +8848 10912 +9104 10912 +9728 10912 +10032 10912 +10256 10912 +10320 10912 +10480 10912 +10656 10912 +10768 10912 +10928 10912 +11024 10912 +11216 10912 +11328 10912 +11440 11440 +11440 11088 +4848 7755 +4848 11495 +4864 7612 +4880 2618 +4880 6402 +8912 1188 +8912 3949 +8992 4048 +9440 4048 +9552 4048 +9680 4048 +9824 4048 +9936 4048 +10000 4048 +10224 4048 +10288 4048 +10384 4048 +10512 4048 +10576 4048 +10640 4048 +10704 4048 +10800 4048 +10928 4048 +11056 4048 +11120 4048 +11216 4048 +11344 4048 +11488 4048 +11680 4048 +11760 4048 +11904 4048 +12048 4048 +12176 4048 +12336 4048 +12432 4048 +12528 4048 +12624 4708 +12624 6072 +12624 7392 +12624 11429 +12688 4048 +12800 4048 +12880 1606 +12880 2310 +12880 3949 +4656 2629 +4720 4488 +4784 4488 +4848 4488 +4912 4488 +5040 4488 +5296 4488 +5664 4488 +5872 4488 +6128 4488 +6192 4488 +6256 4488 +6416 4488 +6560 4488 +6672 4488 +6784 4488 +6896 4488 +7008 4488 +7088 4488 +7184 4488 +7312 4488 +7504 4488 +7664 4488 +7760 4488 +7824 4488 +7888 4488 +7952 4488 +8048 4488 +8208 4488 +8336 4488 +8432 4488 +8496 4488 +8688 5962 +8688 8866 +12016 902 +12016 4488 +12016 6083 +12036 6336 +12176 6336 +12384 6336 +12523 6336 +12560 7392 +12560 11429 +17456 11528 +17476 11440 +17552 11440 +17920 11440 +18368 11440 +18523 11440 +18608 4037 +18608 8525 +18608 10670 +18608 11528 +14416 8866 +14416 9878 +14416 11539 +14512 7348 +14704 7348 +14816 7348 +14928 7348 +15136 7348 +15328 7348 +15440 7348 +15600 7348 +15712 7348 +15792 7348 +15888 7348 +15984 7348 +16128 7348 +16288 7348 +16544 7348 +16688 7348 +16752 7348 +16816 7348 +16912 7348 +17040 7348 +17104 7348 +17168 7348 +17408 7348 +17504 7348 +17712 7348 +17856 7348 +17968 7348 +18192 7348 +18256 7348 +18384 7348 +18448 3564 +18448 7172 +8592 1188 +8592 5962 +8592 6875 +8816 7095 +8836 8756 +9104 8756 +9728 8756 +10000 8756 +10256 8756 +10352 8756 +10464 8756 +10656 8756 +10736 8756 +10800 8756 +10912 8756 +11040 8756 +11200 8756 +11344 8756 +11504 8756 +11600 8756 +11712 8756 +11792 8756 +11984 8756 +12192 8756 +12272 8756 +12384 8756 +12528 8756 +12656 8756 +12720 11429 +4912 2299 +5040 3608 +5296 3608 +5664 3608 +5872 3608 +6128 3608 +6192 3608 +6256 3608 +6416 3608 +6560 3608 +6672 3608 +6784 3608 +6896 3608 +7008 3608 +7088 3608 +7184 3608 +7312 3608 +7504 3608 +7664 3608 +7760 3608 +7824 3608 +7888 3608 +7952 3608 +8048 3608 +8208 3608 +8336 3608 +8432 3608 +8496 3608 +8624 3608 +8752 3608 +8848 3608 +8976 3608 +9040 5962 +9040 6908 +9040 9878 +9328 671 +9328 1760 +9328 2838 +9728 9724 +10032 9724 +10256 9724 +10320 9724 +10416 9724 +10480 9724 +10656 9724 +10736 9724 +10800 9724 +10928 9724 +11040 9724 +11216 9724 +11312 9724 +11440 9724 +11520 9724 +11600 9724 +11712 9724 +11792 9724 +11984 9724 +12080 9724 +12208 9724 +12384 9724 +12528 9724 +12656 9724 +12827 9724 +12848 11429 +12944 9724 +13088 9724 +13232 9724 +13403 9724 +13424 1606 +13424 2794 +13424 3938 +13424 4928 +13424 7392 +13424 8536 +13424 9174 +16880 1012 +16880 2222 +16880 3850 +16880 5368 +16880 6688 +16880 7876 +16880 10560 +16880 11528 +18576 4037 +18576 8646 +18656 8866 +18859 8866 +18992 10846 +18992 11528 +8176 1188 +8176 4829 +8336 4928 +8432 4928 +8496 4928 +8752 4928 +8848 4928 +8992 4928 +9440 4928 +9552 4928 +9680 4928 +9824 4928 +9936 4928 +10000 4928 +10224 4928 +10288 4928 +10384 4928 +10512 4928 +10608 4928 +10704 4928 +10800 4928 +10928 4928 +11056 4928 +11120 4928 +11216 4928 +11344 4928 +11488 4928 +11680 4928 +11760 4928 +11904 4928 +12048 4928 +12176 4928 +12336 4928 +12443 4928 +12464 5962 +12464 7392 +12464 11429 +6000 10802 +6000 11495 +6016 8624 +6032 319 +6032 2024 +6032 4048 +6032 5324 +7088 638 +7088 1518 +7088 2409 +7184 2508 +7312 2508 +7504 2508 +7664 2508 +7760 2508 +7824 2508 +7888 2508 +7952 2508 +8048 2508 +8208 2508 +8336 2508 +8432 2508 +8496 2508 +8624 2508 +8752 2508 +8848 2508 +8976 2508 +9040 2508 +9264 2508 +9408 2508 +9680 2508 +9808 2508 +9872 2508 +10000 2508 +10096 2508 +10224 2508 +10288 2508 +10384 2508 +10512 2508 +10576 2508 +10640 2508 +10704 2508 +10800 2508 +10928 2508 +11056 2508 +11120 2508 +11216 2508 +11344 2508 +11408 4488 +11408 6072 +11408 7392 +11408 11385 +15760 2530 +15760 5368 +15760 6798 +15760 8426 +15760 9878 +15760 10626 +15760 11429 +112 9218 +112 11528 +260 7480 +480 7480 +560 7480 +736 7480 +848 7480 +912 7480 +976 7480 +1072 7480 +1152 7480 +1312 7480 +1536 7480 +1648 7480 +1760 7480 +1872 7480 +1984 7480 +2112 7480 +2192 7480 +2288 7480 +2464 7480 +2624 7480 +2736 7480 +2864 7480 +2960 7480 +3024 7480 +3200 7480 +3312 7480 +3419 7480 +3440 3113 +3440 6864 +5616 1914 +5616 4048 +5652 6336 +6096 6336 +6192 6336 +6256 6336 +6416 6336 +6544 6336 +6672 6336 +6768 6336 +6864 6336 +6992 6336 +7088 6336 +7184 6336 +7328 6336 +7616 6336 +7744 6336 +7824 6336 +7888 6336 +8048 6336 +8176 6336 +8432 6336 +8512 6336 +8832 6336 +8992 6336 +9296 6336 +9456 6336 +9552 6336 +9680 6336 +9808 6336 +10016 6336 +10139 6336 +16944 1012 +16944 2222 +16944 3850 +16944 5368 +16944 6688 +16944 7876 +16944 10560 +16944 11528 +9744 231 +9744 1012 +9744 1760 +9764 6996 +10016 6996 +10128 6996 +10224 6996 +10384 6996 +10496 6996 +10656 6996 +10816 6996 +10928 6996 +11040 6996 +11120 6996 +11216 6996 +11328 6996 +11504 6996 +11568 6996 +11632 6996 +11696 6996 +11760 6996 +11824 6996 +11968 6996 +12192 6996 +12272 6996 +12384 6996 +12528 6996 +12656 6996 +12800 6996 +12891 6996 +12912 7271 +12912 8536 +12912 9174 +12912 11429 +12933 6776 +13088 6776 +13280 6776 +13392 6776 +13456 6776 +13520 6776 +13632 6776 +13760 6776 +13920 6776 +14080 6776 +14192 6776 +14267 6776 +12912 6908 +14288 2530 +14288 5368 +14288 6633 +13904 11528 +13920 11440 +13936 11528 +13952 11440 +13968 11528 +6576 429 +6576 1639 +6672 2068 +6784 2068 +6896 2068 +7008 2068 +7184 2068 +7312 2068 +7504 2068 +7664 2068 +7760 2068 +7824 2068 +7888 2068 +7952 2068 +8048 2068 +8208 2068 +8336 2068 +8432 2068 +8496 2068 +8560 2068 +8624 2068 +8752 2068 +8848 2068 +8976 2068 +9040 2068 +9264 2068 +9424 2068 +9584 2068 +9680 2068 +9808 2068 +9872 2068 +10000 2068 +10096 2068 +10224 2068 +10288 2068 +10384 2068 +10512 2068 +10576 2068 +10640 2068 +10704 2068 +10800 2068 +10928 2068 +11056 2068 +11120 2068 +11227 2068 +11248 4488 +11248 7392 +11248 11385 +5552 2178 +5552 4048 +5552 6402 +5552 7403 +5648 7480 +5936 7480 +6096 7480 +6192 7480 +6416 7480 +6544 7480 +6672 7480 +6864 7480 +6928 7480 +7040 7480 +7168 7480 +7312 7480 +7600 7480 +7760 7480 +7824 7480 +7888 7480 +8048 7480 +8176 7480 +8272 7480 +8416 7480 +8656 7480 +8848 7480 +9104 7480 +9232 7480 +9616 7480 +9680 7480 +9760 7480 +10016 7480 +10128 7480 +10224 7623 +10160 231 +10160 1012 +10160 1760 +10224 5148 +10288 5148 +10384 5148 +10512 5148 +10608 5148 +10704 5148 +10800 5148 +10928 5148 +11056 5148 +11120 5148 +11216 5148 +11344 5148 +11488 5148 +11680 5148 +11760 5148 +11904 5148 +12048 5148 +12176 5148 +12336 5148 +12432 5148 +12528 5148 +12688 5148 +12800 5148 +12912 5148 +13115 5148 +13136 6182 +13136 7282 +13136 8536 +13136 9174 +13136 11429 +13328 4488 +13456 4488 +13520 4488 +13616 4488 +13872 4488 +14080 4488 +14224 4488 +14400 4488 +14512 4488 +14736 4488 +14811 4488 +13136 4840 +14832 2530 +14832 4389 +6000 319 +6000 2024 +6000 4048 +6000 5324 +6000 8239 +6064 8459 +6064 10802 +6064 11495 +17168 10560 +17168 11528 +17232 1782 +17232 4092 +17232 6688 +17232 7722 +4688 2508 +4688 5324 +4688 7711 +4752 8866 +4752 11495 +17232 10560 +17232 11528 +17264 8844 +17296 1782 +17296 4092 +17296 6688 +17296 7722 +17296 8591 +10416 231 +10416 1012 +10416 1760 +10416 7392 +3632 3113 +3632 7139 +3696 7480 +3808 7480 +3888 7480 +3952 7480 +4096 7480 +4176 7480 +4256 7480 +4336 7480 +4432 7480 +4496 7480 +4635 7480 +4656 7689 +4656 8866 +4656 11495 +10576 231 +10576 1023 +10640 1232 +10704 1232 +10800 1232 +10928 1232 +11056 1232 +11120 1232 +11216 1232 +11344 1232 +11488 1232 +11696 1232 +11760 1232 +11904 1232 +12048 1232 +12176 1232 +12336 1232 +12432 1232 +12528 1232 +12688 1232 +12816 1232 +12944 1232 +13120 1232 +13200 1485 +13200 2310 +13200 3124 +13200 3938 +13200 4928 +13200 7282 +13200 8536 +13200 9174 +13200 11429 +13344 1232 +13488 1232 +13632 1232 +13872 1232 +14096 1232 +14224 1232 +14400 1232 +14512 1232 +14736 1232 +14800 1232 +14912 1232 +15120 1232 +15328 1232 +15408 1232 +15472 1232 +15600 1232 +12144 11165 +12208 9504 +12384 9504 +12528 9504 +12656 9504 +12832 9504 +12944 9504 +13088 9504 +13232 9504 +13392 9504 +13536 9504 +13632 9504 +13744 9504 +13968 9504 +14192 9504 +14272 9504 +14384 9504 +14448 9504 +14704 9504 +14784 9504 +15120 9504 +15392 9504 +15520 9504 +15712 9504 +15792 9504 +15856 9504 +15984 9504 +16080 9504 +16208 9504 +16432 9504 +16496 9504 +16592 9504 +16688 9504 +16784 9504 +16912 9504 +17040 9504 +17136 9504 +17280 9504 +17360 1782 +17360 4092 +17360 6688 +17360 7722 +17360 8580 +10992 231 +10992 902 +10992 1760 +10992 4488 +10992 7392 +11028 10252 +11216 10252 +11312 10252 +11440 10252 +11520 10252 +11600 10252 +11712 10252 +11792 10252 +11984 10252 +12080 10252 +12208 10252 +12384 10252 +12528 10252 +12656 10252 +12816 10252 +12944 10252 +13088 10252 +13232 10252 +13403 10252 +13424 11429 +13536 10252 +13696 10252 +13968 10252 +14192 10252 +14272 10252 +14384 10252 +14448 10252 +14704 10252 +14784 10252 +15120 10252 +15392 10252 +15520 10252 +15712 10252 +15792 10252 +15856 10252 +16048 10252 +16219 10252 +16240 2222 +16240 3740 +16240 5368 +16240 6798 +16240 7766 +10448 231 +10448 1012 +10448 1760 +10448 7392 +5712 8459 +5712 10802 +5728 8316 +5744 2024 +5744 4048 +5744 8239 +17424 1782 +17424 4092 +17424 6699 +17504 7128 +17712 7128 +17808 7766 +17808 8734 +17808 9603 +17808 10670 +9520 7128 +9536 3608 +9552 231 +9552 1012 +9552 1760 +17328 1782 +17328 4092 +17328 6688 +17328 7722 +17328 8580 +17328 10670 +17328 11528 +19088 11528 +11408 231 +11408 902 +11488 1980 +11696 1980 +11760 1980 +11904 1980 +12048 1980 +12176 1980 +12336 1980 +12432 1980 +12528 1980 +12688 1980 +12816 1980 +12944 1980 +13120 1980 +13344 1980 +13467 1980 +13488 2673 +13488 3938 +13488 4928 +13488 7282 +13488 8536 +13488 9174 +13488 11429 +13509 1452 +13632 1452 +13872 1452 +14096 1452 +14224 1452 +14400 1452 +14512 1452 +14736 1452 +14800 1452 +14912 1452 +15120 1452 +15328 1452 +15408 1452 +15472 1452 +15600 1452 +15712 1452 +15792 1452 +15888 1452 +15984 1452 +16128 1452 +16272 1452 +16400 1452 +16544 1452 +16656 1452 +16752 1452 +16912 1452 +17040 1452 +13488 1738 +17104 1133 +11120 11385 +11184 231 +11184 902 +11184 1760 +11184 4488 +11184 7392 +5680 8382 +5680 10802 +5696 7700 +5712 2024 +5712 4048 +4304 2365 +4304 5434 +4304 6908 +4304 7810 +2128 10032 +2144 8932 +2160 3113 +2160 6644 +2160 8789 +5424 7183 +5424 10692 +5440 6996 +5456 2178 +5456 4048 +5456 6402 +11152 231 +11152 902 +11152 1760 +11152 4488 +11152 7392 +11152 11385 +15632 2530 +15632 5368 +15632 6798 +15632 8426 +15632 9878 +15632 10626 +15632 11429 +16176 2222 +16176 3740 +16176 5368 +16176 6798 +16176 7766 +16176 8734 +16176 10626 +16176 11429 +5392 7194 +5392 10692 +5408 6556 +5424 2178 +5424 4048 +5424 6413 +4464 2574 +4464 5434 +4464 7920 +4528 10692 +4624 10692 +4688 10692 +4784 10692 +4944 10692 +5072 10791 +5072 11495 +18352 3619 +18352 7887 +18372 8184 +18464 8184 +18667 8184 +18704 8404 +18704 10670 +18704 11528 +4528 2574 +4528 5434 +4528 7931 +4624 8140 +4688 8140 +4784 8140 +4944 8140 +5136 8140 +5488 8371 +5488 10692 +1680 10032 +1700 8932 +1776 8932 +1883 8932 +1904 3113 +1904 6754 +1904 8052 +1904 8789 +19120 11528 +19122 8030 +18256 3454 +18256 6952 +18272 7128 +18288 7876 +18288 9427 +18288 10670 +4752 2618 +4752 5225 +4772 5368 +4848 5368 +4912 5368 +5040 5368 +5296 5368 +5664 5368 +5904 5467 +5904 8382 +5904 10802 +1264 6787 +1264 7832 +1264 9658 +1284 6556 +1456 6556 +1552 6556 +1648 6556 +1760 6556 +1840 3113 +17872 9603 +17872 10670 +17952 8844 +18224 3619 +18224 7766 +4816 2618 +4816 6402 +4816 7700 +4816 8723 +4944 8844 +5136 8844 +5552 8844 +5632 8844 +5792 8844 +5968 8844 +6032 8844 +6112 8844 +6192 8844 +6320 11495 +848 9922 +912 8184 +976 8184 +1104 8184 +1232 8184 +1328 8184 +1536 8184 +1616 3113 +1616 7018 +1616 8063 +17840 8723 +17840 9603 +17840 10670 +17860 8624 +17936 231 +17936 1628 +17936 4796 +17936 7766 +18000 231 +18000 1595 +18016 2376 +18032 4521 +18032 7766 +18032 10670 +17424 8613 +17424 9603 +17424 10670 +17424 11528 +17488 8404 +17552 8404 +17712 8404 +17856 8404 +17968 8404 +18192 8404 +18368 8404 +18464 8404 +18544 4037 +432 9702 +468 7260 +560 7260 +736 7260 +848 7260 +912 7260 +976 7260 +1072 7260 +1152 7260 +1312 7260 +1520 3113 +1520 7029 +11248 231 +11248 902 +11344 1760 +11488 1760 +11696 1760 +11760 1760 +11904 1760 +12048 1760 +12176 1760 +12304 4488 +12304 5962 +12304 7392 +12304 11165 +18160 3619 +18160 7766 +18160 10670 +18096 231 +18096 3740 +18096 7766 +18096 10670 +11088 231 +11088 902 +11088 1760 +11088 4488 +11108 5368 +11216 5368 +11344 5368 +11488 5368 +11680 5368 +11760 5368 +11904 5368 +12048 5368 +12176 5368 +12336 5368 +12432 5368 +12528 5368 +12688 5368 +12800 5368 +12912 5368 +13104 5368 +13328 5368 +13456 5368 +13520 5368 +13584 5467 +13584 7282 +13584 8866 +13584 11539 +10672 231 +10672 902 +10672 1760 +10800 5588 +10928 5588 +11088 5588 +11216 5588 +11344 5588 +11488 5588 +11680 5588 +11760 5588 +11904 5588 +12048 5588 +12176 5588 +12336 5588 +12432 5588 +12528 5588 +12688 5588 +12800 5588 +12912 5588 +13104 5588 +13328 6402 +13328 7392 +13328 8536 +13328 9174 +13328 11429 +3792 2904 +3792 5852 +3813 6028 +3888 6028 +3952 6028 +4096 6028 +4176 6028 +4256 6028 +4432 6028 +4496 6028 +4560 6028 +4640 6028 +4752 6028 +4848 6028 +4912 6028 +5040 6028 +5328 6028 +5664 6028 +6096 6028 +6192 6028 +6256 6028 +6416 6028 +6555 6028 +6576 8646 +6576 9438 +6576 11495 +4048 2959 +4048 6908 +4128 10032 +4272 10032 +4400 10032 +4528 10032 +4624 10032 +4688 10032 +4784 10032 +4944 10032 +5008 10032 +5136 10032 +5264 10032 +5552 10032 +5632 10032 +5808 10032 +5968 10032 +6032 10032 +6112 10032 +6192 10032 +6352 10032 +6448 10032 +6672 10032 +6848 10032 +6928 10802 +4400 2365 +4400 5434 +4400 7810 +4528 9592 +4624 9592 +4688 9592 +4784 9592 +4960 9592 +5136 9592 +5552 9592 +5632 9592 +5808 9592 +5968 9592 +6032 9592 +6112 9592 +6192 9592 +6352 9592 +6416 11495 +10256 231 +10256 1012 +10256 1760 +10256 7513 +10384 7788 +10496 7788 +10656 7788 +10816 7788 +10928 7788 +11040 7788 +11120 7788 +11216 7788 +11328 7788 +11504 7788 +11568 7788 +11632 7788 +11696 7788 +11760 7788 +11824 7788 +11968 7788 +12192 7788 +12272 7788 +12384 7788 +12528 7788 +12656 7788 +12800 7788 +12880 7788 +12944 7788 +13088 7788 +13275 7788 +13296 8536 +13296 9174 +13296 11429 +9840 231 +9840 1012 +9840 1760 +9860 3168 +10000 3168 +10096 3168 +10224 3168 +10288 3168 +10384 3168 +10512 3168 +10576 3168 +10640 3168 +10704 3168 +10800 3168 +10928 3168 +11056 3168 +11120 3168 +11216 3168 +11344 3168 +11488 3168 +11696 3168 +11760 3168 +11904 3168 +12048 3168 +12176 3168 +12336 3168 +12432 3168 +12544 3168 +12688 3168 +12752 3168 +12816 3168 +12928 3168 +13040 3267 +13040 3938 +13040 4708 +13040 6072 +13040 7282 +13040 8536 +13040 9174 +13040 11429 +4080 2310 +4080 4664 +4101 4840 +4176 4840 +4256 4840 +4432 4840 +4496 4840 +4560 4840 +4656 4840 +4720 4840 +4784 4840 +4848 4840 +4912 4840 +5040 4840 +5296 4840 +5664 4840 +5872 4840 +6128 4840 +6192 4840 +6256 4840 +6416 4840 +6560 4840 +6672 4840 +6784 4840 +6896 4840 +7008 4840 +7088 4840 +7184 4840 +7280 4983 +7280 7128 +7280 8756 +7280 10802 +4336 2365 +4336 5434 +4432 6776 +4496 6776 +4640 6776 +4768 6776 +4848 6776 +4912 6776 +5040 6776 +5424 6776 +5648 6776 +5936 6776 +6096 6776 +6192 6776 +6416 6776 +6544 6776 +6672 6776 +6768 6776 +6864 6776 +6992 6776 +7088 6776 +7184 6776 +7328 6776 +7611 6776 +7632 6897 +7632 8756 +18064 231 +18064 3740 +18064 7766 +18064 10670 +6960 638 +6960 1518 +6960 2574 +6960 4048 +6996 5588 +7088 5588 +7184 5588 +7328 5588 +7584 5588 +7664 5588 +7760 5588 +7824 5588 +7888 5588 +7952 5588 +8048 5588 +8176 5588 +8336 5588 +8432 5588 +8496 5588 +8752 5588 +8848 5588 +8992 5588 +9440 5588 +9552 5588 +9680 5588 +9824 5588 +10016 5588 +10160 5588 +10224 5588 +10288 7392 +9200 880 +9200 1760 +9200 2948 +9440 5808 +9552 5808 +9680 5808 +9819 5808 +1328 9911 +1584 9152 +1712 9152 +1776 9152 +1904 9152 +2064 9152 +2240 9152 +2464 9152 +2736 9152 +2960 9152 +3024 9152 +3168 9152 +3312 9152 +3504 9152 +3568 3113 +3568 7128 +3568 9053 +9424 352 +9444 572 +9584 572 +9680 572 +9808 572 +9872 572 +10000 572 +10096 572 +10224 572 +10288 572 +10384 572 +10512 572 +10640 572 +10704 572 +10800 572 +10928 572 +11056 572 +11120 572 +11216 572 +11344 572 +11488 572 +11696 572 +11760 572 +11904 572 +12048 572 +12176 572 +12336 572 +12432 572 +12528 572 +12688 572 +12816 572 +12955 572 diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/benchs/usa13509.tsp b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/benchs/usa13509.tsp new file mode 100644 index 000000000..7fc018324 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/benchs/usa13509.tsp @@ -0,0 +1,13510 @@ +13509 +245553 817828 +247133 810906 +247206 810189 +249239 806281 +250111 805153 +254475 804794 +254683 804778 +254950 804294 +255622 803825 +255803 803469 +255972 803808 +256047 803539 +256147 803108 +256311 803692 +256789 803175 +256933 801631 +257072 802936 +257072 803258 +257211 802686 +257264 803556 +257544 803275 +257631 802964 +257739 801939 +257903 801303 +258100 803025 +258219 802897 +258403 803267 +258458 801542 +258550 801933 +258572 802783 +258628 801931 +258647 803247 +258703 802992 +258781 801258 +258822 801808 +258872 801314 +258897 801869 +258914 801272 +259014 974972 +259019 802506 +259306 803286 +259328 801628 +259403 802458 +259481 801508 +259503 801231 +259619 801769 +259647 801225 +259647 802417 +259722 817292 +259808 801486 +259869 802325 +259875 801750 +260028 802242 +260108 801497 +260519 801442 +260569 802719 +260644 802322 +260714 974761 +260731 972083 +260883 817264 +260919 979569 +261000 982628 +261006 972900 +261033 971644 +261219 801436 +261272 802333 +261322 976308 +261400 802136 +261417 817950 +261494 979133 +261586 978236 +261592 979906 +261600 801392 +261661 802086 +261700 980517 +261833 981228 +261903 976958 +261917 800967 +261944 981833 +262022 800942 +262031 982297 +262156 983250 +262189 817919 +262256 977578 +262350 975817 +262375 801250 +262442 802067 +262467 984811 +262483 977336 +262564 978247 +262614 818094 +262825 801072 +262869 983131 +262931 979928 +262936 800792 +262936 979603 +262983 979283 +263014 981631 +263181 801000 +263306 818269 +263394 817789 +263583 800833 +263728 979714 +263794 988200 +263992 800658 +264047 990156 +264119 977894 +264183 814175 +264422 980136 +264486 820225 +264517 819483 +264611 800731 +264669 818017 +265250 800667 +265267 800486 +265625 819497 +265661 800536 +265864 800522 +265886 800389 +266156 800572 +266233 801256 +266250 816250 +266403 818725 +266450 800761 +266636 807164 +266669 818803 +266744 818153 +266842 806678 +266908 801203 +267053 800367 +267089 817461 +267150 800536 +267372 809511 +267539 809339 +267600 800739 +267614 814386 +267750 800583 +267778 800358 +268000 800667 +268172 800822 +268197 806656 +268328 810933 +268417 810964 +268794 800536 +268833 822903 +269069 992711 +269097 820542 +269139 823272 +269294 820456 +269339 800944 +269467 820261 +269581 820672 +269614 819842 +269758 820908 +270269 804858 +270500 822500 +270528 824244 +270567 823786 +270592 801367 +270728 824078 +270994 824544 +271189 824444 +271300 824533 +271439 802008 +271675 802664 +271958 824906 +271972 802531 +272156 818586 +272172 802700 +272192 802394 +272217 824981 +272267 981439 +272436 808300 +272517 808142 +272542 802300 +272836 824808 +272928 813631 +273064 986781 +273294 824578 +273361 825308 +273603 981233 +274097 825694 +274122 826592 +274242 825803 +274250 825906 +274464 803258 +274472 825464 +274667 827042 +274689 826864 +274692 825417 +274931 817961 +274953 814411 +274972 827092 +274986 825750 +275061 995072 +275119 826322 +275156 978558 +275211 825725 +275214 825278 +275308 827336 +275356 825614 +275428 804025 +275469 818117 +275858 977989 +275956 815064 +275986 984078 +276381 818242 +276383 803975 +276742 977483 +276750 804094 +277122 822992 +277164 803844 +277206 824333 +277456 815308 +277481 804364 +277481 827036 +277519 818019 +277519 980694 +277547 827378 +277636 982386 +277675 806017 +277689 827692 +277814 979083 +277900 976686 +277950 819806 +277978 827975 +278003 973961 +278083 828114 +278139 827783 +278158 828208 +278258 828292 +278336 970608 +278356 804933 +278425 826997 +278625 828486 +278750 828514 +278769 973236 +278775 972114 +278803 805006 +278825 986175 +278950 819736 +278961 818433 +279011 815861 +279092 827875 +279092 971497 +279142 827056 +279211 828172 +279219 972897 +279228 828433 +279356 828064 +279375 822861 +279456 818006 +279472 824586 +279503 975819 +279525 817272 +279564 979367 +279650 818781 +279656 828003 +279675 819736 +279781 817567 +279786 816142 +279786 973983 +279906 826933 +279936 816903 +279939 822197 +279944 817383 +280033 805658 +280083 819078 +280183 821131 +280194 827719 +280203 970542 +280219 817331 +280222 816194 +280314 820150 +280339 826653 +280342 805889 +280350 823894 +280364 975089 +280408 993542 +280442 816281 +280611 970408 +280650 817889 +280681 805606 +280714 806536 +280719 806803 +280778 827639 +280786 806028 +280850 806667 +280892 805658 +280917 817236 +280942 978278 +281139 816181 +281144 819739 +281206 820233 +281356 806719 +281458 827569 +281486 805886 +281508 824617 +281611 816019 +281758 805903 +281822 818242 +281875 827397 +282164 827225 +282333 821814 +282381 973197 +282439 827194 +282586 814567 +282714 827197 +282917 814078 +283050 972750 +283197 806078 +283322 981172 +283358 822747 +283506 807256 +283644 821961 +283858 807422 +284006 977481 +284056 806050 +284150 967133 +284319 807603 +284367 992347 +284569 813917 +284581 813594 +284600 981822 +284656 821722 +284717 813681 +284858 813725 +284953 815350 +285025 813308 +285072 821706 +285217 998603 +285381 813794 +285381 814606 +285408 813008 +285492 817731 +285544 811067 +285547 816333 +285550 823881 +285578 818514 +285650 815864 +285689 815442 +285731 995683 +285742 817464 +285781 818869 +285908 813944 +285997 813394 +286097 820553 +286119 808078 +286144 813808 +286147 966258 +286192 814428 +286417 811236 +286475 968922 +286489 813514 +286497 819928 +286608 813658 +286614 814192 +286617 815097 +286647 821131 +286650 808450 +286672 991703 +286681 973881 +286697 812083 +286772 998278 +286775 813281 +286794 965600 +286803 815097 +286986 813083 +287078 962172 +287089 1.00499e+06 +287094 817331 +287308 816014 +287394 811153 +287500 822969 +287556 820950 +287586 813181 +287811 826153 +287994 820703 +288003 812733 +288022 816447 +288039 817258 +288106 818781 +288189 978483 +288356 823306 +288403 817689 +288525 816856 +288611 819067 +288617 987061 +288650 820392 +288831 977128 +288847 979006 +288919 990947 +289003 812639 +289006 823747 +289022 825928 +289172 819231 +289178 985461 +289292 816658 +289408 998494 +289442 952886 +289486 812989 +289539 953594 +289600 960650 +289669 984783 +289783 966458 +289806 812336 +289808 975025 +289825 959692 +289825 980172 +289886 809025 +290028 953317 +290175 958892 +290244 953986 +290256 809272 +290256 809722 +290297 827161 +290300 826689 +290336 954342 +290386 956983 +290403 965133 +290403 985678 +290442 955689 +290489 824611 +290550 820625 +290558 954097 +290694 980817 +290936 972889 +290961 809372 +291192 813517 +291333 981558 +291383 830353 +291397 989050 +291436 956450 +291656 810047 +291692 954317 +291758 809831 +291869 821403 +291894 988622 +291964 962694 +292094 997858 +292106 810231 +292261 986575 +292281 953447 +292367 979597 +292392 814658 +292433 810378 +292672 977642 +292856 810561 +292875 971517 +292947 952786 +293103 1.00418e+06 +293106 988097 +293114 961025 +293172 994661 +293472 991411 +293481 950158 +293489 810667 +293556 988783 +293561 981153 +293625 1.00896e+06 +293664 821975 +293789 902600 +293836 949025 +293872 824469 +293992 958375 +294236 952439 +294239 984933 +294289 971703 +294300 815108 +294383 905953 +294419 902992 +294436 969408 +294475 826425 +294506 959944 +294569 946394 +294606 950511 +294625 953578 +294631 983853 +294658 812581 +294747 811272 +294747 984506 +294786 984872 +294803 896939 +294822 954153 +294831 949219 +294847 984656 +294878 985514 +294950 986183 +295000 815917 +295014 974522 +295044 822800 +295067 949922 +295072 950947 +295153 983800 +295178 983158 +295231 985161 +295292 952008 +295297 825192 +295308 960708 +295375 907200 +295425 903381 +295425 950203 +295472 950319 +295478 982908 +295519 982694 +295533 906022 +295569 958083 +295606 1.04372e+06 +295614 982267 +295633 952858 +295639 950253 +295686 979644 +295711 981400 +295722 903817 +295747 971425 +295819 957606 +295822 984906 +295847 985522 +295894 963333 +295917 820875 +295919 980331 +295956 907194 +296003 984869 +296131 828178 +296158 955575 +296183 955375 +296194 956347 +296200 950097 +296236 818906 +296311 960650 +296342 831253 +296458 905392 +296461 826067 +296483 816378 +296514 823250 +296581 815986 +296622 948900 +296628 952353 +296656 950192 +296661 911019 +296667 901083 +296692 1.00012e+06 +296792 959769 +296803 976472 +296817 969028 +296875 971083 +296894 912708 +296897 958994 +296908 952089 +296931 913019 +296944 912189 +296992 912067 +297028 967803 +297028 981242 +297050 951236 +297056 954586 +297058 954367 +297064 965394 +297178 815083 +297178 954336 +297231 901236 +297256 849833 +297264 990733 +297272 905989 +297353 949772 +297364 848786 +297486 966008 +297597 955169 +297631 953631 +297672 952336 +297672 955297 +297703 954953 +297728 946825 +297758 951144 +297772 955169 +297781 951717 +297806 961569 +297856 958242 +297858 820317 +297858 959508 +297894 821675 +297897 943831 +297928 961006 +297944 987317 +297956 824944 +297956 908228 +297958 915014 +297975 933250 +298186 950558 +298200 943839 +298236 904750 +298267 825969 +298372 909561 +298378 915442 +298475 948906 +298531 846644 +298547 899906 +298678 951281 +298797 950628 +298831 979411 +298847 976697 +298875 955628 +298956 898978 +298986 939286 +298992 901003 +299022 955022 +299033 900772 +299053 968764 +299058 901422 +299061 903561 +299100 900325 +299108 916633 +299117 950619 +299144 900539 +299175 939242 +299183 902108 +299319 903664 +299322 953800 +299361 906786 +299403 902031 +299403 910247 +299425 899633 +299428 903517 +299439 821100 +299478 854181 +299481 919886 +299481 939169 +299500 962569 +299542 900053 +299544 900750 +299581 920358 +299589 829283 +299650 912031 +299675 989047 +299742 939922 +299764 904089 +299778 903878 +299794 818106 +299839 901528 +299889 978769 +299911 939583 +299917 816783 +299939 902417 +299978 922847 +299989 904122 +300033 918186 +300108 907194 +300156 1.00205e+06 +300206 938456 +300225 823397 +300258 925083 +300272 945914 +300356 944242 +300403 906989 +300439 820719 +300464 948850 +300472 906897 +300472 991400 +300478 943356 +300528 831750 +300536 905517 +300558 906192 +300564 917369 +300564 959267 +300664 904800 +300772 992400 +300806 926714 +300819 937581 +300850 978400 +300858 941017 +300928 937364 +300931 959875 +300972 960781 +300978 984211 +300994 919900 +301008 909928 +301025 940517 +301089 948581 +301103 973150 +301125 852006 +301131 946428 +301172 835819 +301217 924981 +301308 856033 +301314 940153 +301400 944108 +301422 1.02394e+06 +301469 919611 +301522 947389 +301528 855700 +301586 856603 +301658 817067 +301667 963975 +301686 933758 +301697 911469 +301708 856253 +301758 843753 +301764 858056 +301806 924642 +301817 932736 +301825 969361 +301842 908592 +301894 826394 +301897 925825 +301906 935811 +301922 826147 +302008 856269 +302139 923744 +302142 918319 +302172 910961 +302222 926569 +302239 920197 +302256 978033 +302264 932172 +302328 951608 +302347 922683 +302356 920944 +302356 921853 +302358 928225 +302364 933772 +302367 930136 +302383 909200 +302419 932506 +302453 856483 +302458 877008 +302500 1.0325e+06 +302531 941897 +302669 977428 +302733 918992 +302750 897811 +302750 988717 +302767 977908 +302767 984117 +302772 912236 +302819 821222 +302867 893761 +302889 912342 +302892 856406 +302944 813933 +302950 907950 +302975 937433 +302978 978017 +303025 819756 +303025 931906 +303078 1.04019e+06 +303086 892869 +303117 813967 +303117 954558 +303131 917903 +303133 899431 +303139 842475 +303156 892475 +303169 920489 +303294 827592 +303311 924956 +303319 816558 +303342 813989 +303406 975567 +303458 965281 +303489 941778 +303494 973700 +303503 891528 +303536 912653 +303547 940725 +303569 871639 +303581 900656 +303583 1.03661e+06 +303586 905861 +303656 885561 +303672 890928 +303678 979914 +303714 943122 +303758 843008 +303758 897483 +303839 872750 +303856 886117 +303878 960875 +303933 864958 +303942 912536 +303958 888853 +303975 919314 +304028 922150 +304031 882483 +304042 901569 +304056 866189 +304064 876836 +304097 866631 +304108 817081 +304108 914336 +304111 888278 +304111 920683 +304114 885344 +304189 970114 +304208 873075 +304211 872169 +304247 954797 +304250 872519 +304261 888908 +304264 872797 +304303 888422 +304319 849758 +304381 842808 +304386 904414 +304392 976197 +304403 885436 +304408 866136 +304428 872225 +304433 850453 +304439 856886 +304503 934331 +304506 911544 +304519 912100 +304556 866383 +304614 873150 +304686 872361 +304692 834131 +304692 836303 +304703 919783 +304739 879192 +304753 901008 +304761 883422 +304783 900375 +304811 926956 +304850 925958 +304853 928506 +304867 909561 +304875 876997 +304892 997717 +304911 915194 +304942 924175 +304978 949964 +304981 861361 +305019 907478 +305042 904611 +305042 905822 +305050 978200 +305081 976786 +305100 872125 +305181 829483 +305183 921847 +305186 872728 +305228 879033 +305253 896794 +305333 920814 +305367 917528 +305375 954831 +305425 975464 +305450 838703 +305453 877517 +305475 881753 +305536 877119 +305589 915558 +305600 919539 +305619 818308 +305667 1.00643e+06 +305692 847433 +305706 974092 +305772 904831 +305781 982725 +305786 978528 +305814 872914 +305869 845833 +305881 911681 +305900 881708 +305903 972967 +305922 951292 +305958 916164 +305986 870311 +305992 871611 +306033 879036 +306039 830981 +306136 972053 +306161 920569 +306169 846600 +306181 877531 +306200 927625 +306228 857122 +306236 844147 +306278 963342 +306317 816067 +306322 870397 +306325 976769 +306336 924192 +306353 905008 +306483 911564 +306581 984403 +306603 938925 +306694 814628 +306878 922714 +306908 819175 +306928 917439 +306936 853922 +306942 880431 +307014 914361 +307050 848431 +307075 849244 +307100 1.012e+06 +307108 949328 +307122 850203 +307172 911414 +307175 974425 +307214 861156 +307233 955506 +307239 873142 +307383 915942 +307386 880789 +307436 980553 +307472 832208 +307489 844839 +307542 935403 +307581 982281 +307592 986747 +307619 865706 +307636 880747 +307647 905117 +307731 858142 +307742 852269 +307750 944153 +307817 855386 +307836 924253 +307847 835600 +307908 898486 +307917 837900 +307917 856797 +307947 974253 +307969 853767 +307997 816900 +308158 926603 +308206 880706 +308231 883614 +308303 820100 +308306 906717 +308325 832786 +308372 912175 +308400 895342 +308411 977933 +308461 932889 +308469 901531 +308483 937572 +308531 880561 +308531 969767 +308558 820211 +308600 1.00601e+06 +308656 910156 +308700 851619 +308772 842014 +308781 974014 +308783 965928 +308828 843239 +308828 877731 +308917 880397 +308939 1.02879e+06 +309036 845756 +309078 944219 +309139 1.01898e+06 +309175 997861 +309197 932822 +309200 911156 +309200 939964 +309250 885900 +309381 905089 +309450 953753 +309469 975383 +309497 959114 +309528 871514 +309531 921825 +309567 855167 +309575 851622 +309597 837381 +309636 817228 +309656 864597 +309736 840531 +309764 925850 +309778 966736 +309814 863075 +309833 918000 +309839 920533 +309842 1.03744e+06 +309911 833728 +309967 948269 +310000 872608 +310011 894522 +310050 863281 +310067 904722 +310103 863497 +310111 838664 +310147 922872 +310236 874939 +310258 964850 +310294 961144 +310328 858639 +310344 919756 +310364 827472 +310397 1.0483e+06 +310403 848792 +310408 830753 +310486 853050 +310547 951256 +310558 974642 +310578 920489 +310594 921211 +310636 981814 +310681 836239 +310722 840892 +310728 969783 +310744 831994 +310786 976053 +310894 910683 +310906 882281 +310931 870628 +310944 924003 +310981 973425 +311022 856969 +311044 912994 +311050 870722 +311081 855944 +311086 888272 +311128 860461 +311147 932714 +311158 901419 +311169 977275 +311239 979028 +311267 954453 +311275 841519 +311278 920661 +311358 1.02224e+06 +311369 834236 +311392 855192 +311431 894097 +311431 904586 +311433 932608 +311497 814917 +311556 885578 +311583 944261 +311650 966767 +311692 889200 +311711 847333 +311797 837892 +311808 821350 +311828 852364 +311869 947808 +311914 1.0146e+06 +311956 987178 +311972 910217 +312022 890347 +312033 970364 +312042 819814 +312067 973025 +312072 832503 +312133 823542 +312158 861711 +312161 998453 +312169 983931 +312228 904603 +312231 853906 +312311 842106 +312356 857228 +312436 904531 +312478 939742 +312517 898375 +312617 1.00817e+06 +312689 836872 +312714 834650 +312775 945764 +312794 863256 +312822 892756 +312825 862556 +312836 904683 +312925 851117 +312975 828525 +312989 853444 +312989 870225 +313058 822422 +313061 968978 +313081 973611 +313100 857131 +313111 924450 +313114 855531 +313128 843358 +313181 954564 +313189 854939 +313194 839172 +313222 924342 +313269 892903 +313381 947289 +313392 1.02851e+06 +313403 1.10934e+06 +313406 830461 +313406 938467 +313408 835936 +313444 1.09545e+06 +313464 892600 +313511 853422 +313528 865392 +313569 1.09561e+06 +313614 961439 +313644 893061 +313700 814342 +313775 849342 +313794 841611 +313850 832231 +313856 859294 +313864 972153 +313903 926692 +313903 976842 +313972 1.0235e+06 +314128 833292 +314144 860678 +314153 924117 +314172 895422 +314217 853378 +314228 1.03493e+06 +314333 874014 +314350 977436 +314394 835194 +314397 847250 +314436 934572 +314439 974089 +314481 1.09928e+06 +314497 985706 +314503 835086 +314589 856406 +314611 1.03393e+06 +314622 971956 +314628 908500 +314636 1.00437e+06 +314650 882544 +314675 971144 +314717 836469 +314722 908967 +314747 969231 +314856 845139 +314861 820172 +314917 954783 +315022 1.06158e+06 +315044 910689 +315086 828500 +315089 878944 +315128 837878 +315172 826350 +315189 927067 +315214 971536 +315242 965336 +315278 873247 +315297 941058 +315306 838356 +315342 974428 +315392 824625 +315394 1.10756e+06 +315422 867150 +315422 968333 +315492 971464 +315536 901072 +315544 1.10303e+06 +315581 847383 +315603 914031 +315653 914258 +315686 934839 +315700 1.03001e+06 +315717 852506 +315783 841558 +315789 904406 +315811 925328 +315828 1.0292e+06 +315847 958489 +315850 1.06272e+06 +315922 1.06224e+06 +315939 971086 +315942 832506 +315942 1.02892e+06 +315972 1.00182e+06 +315983 898669 +316000 857189 +316033 946553 +316039 891956 +316072 818856 +316089 850472 +316250 828869 +316250 955792 +316264 918181 +316269 962836 +316278 1.10333e+06 +316292 971025 +316300 915544 +316314 936439 +316339 883133 +316369 867419 +316453 895553 +316503 950725 +316528 932019 +316592 974719 +316672 928906 +316747 886461 +316753 930444 +316797 964819 +316831 921336 +316925 1.06207e+06 +316939 891306 +317011 903975 +317036 981236 +317058 836533 +317078 817425 +317086 856106 +317086 877772 +317114 910606 +317128 1.10067e+06 +317147 832528 +317164 862639 +317169 991322 +317200 858161 +317225 915431 +317244 961650 +317319 841708 +317333 872047 +317381 999469 +317419 989453 +317511 1.03159e+06 +317539 966497 +317561 846153 +317586 1.06486e+06 +317606 930861 +317711 847894 +317719 918214 +317733 844467 +317739 816328 +317781 823486 +317822 975764 +317833 855558 +317839 816078 +317864 890322 +317878 964622 +317883 877272 +317958 951500 +318022 970914 +318086 859700 +318144 948403 +318192 923297 +318197 935142 +318214 930294 +318242 944908 +318272 994261 +318294 866178 +318308 843644 +318361 1.00984e+06 +318456 1.02367e+06 +318464 916561 +318467 815961 +318575 1.03092e+06 +318600 886994 +318603 903958 +318636 922958 +318736 897336 +318781 854497 +318867 889839 +318872 1.00291e+06 +318911 851456 +318922 1.00484e+06 +318933 931181 +318939 967144 +318972 986033 +319003 842519 +319028 922431 +319036 943950 +319119 1.11881e+06 +319133 877358 +319231 976564 +319253 926394 +319292 826797 +319364 819286 +319381 813036 +319436 942439 +319508 834564 +319564 999619 +319608 909839 +319617 898700 +319633 837825 +319636 952703 +319656 940536 +319678 1.10294e+06 +319753 939978 +319789 892872 +319808 916556 +319828 980333 +319844 865786 +319872 903569 +319894 832003 +319908 872906 +319919 833069 +319972 1.02078e+06 +320000 808458 +320039 1.06605e+06 +320108 971297 +320147 933419 +320167 929092 +320172 830628 +320217 937142 +320264 921389 +320333 810500 +320333 895222 +320339 843928 +320356 825083 +320375 937000 +320400 887281 +320492 916581 +320497 921092 +320525 955061 +320678 829008 +320722 842328 +320725 912408 +320736 829147 +320800 968064 +320833 811000 +320850 983417 +320853 932200 +320867 821181 +320878 846675 +320883 954717 +320894 882219 +320914 837956 +320919 967156 +320953 964686 +320958 989633 +320961 902942 +321094 906233 +321100 835011 +321142 811542 +321153 812472 +321244 969450 +321261 991650 +321292 1.01788e+06 +321322 812992 +321331 962275 +321358 816222 +321397 953200 +321439 960908 +321442 857150 +321444 951203 +321469 827781 +321489 811633 +321531 947992 +321533 901311 +321558 819339 +321572 943372 +321594 971497 +321614 819042 +321631 917206 +321686 882825 +321694 960122 +321811 821092 +321839 865803 +321839 968844 +321872 825658 +321975 831778 +321994 1.10968e+06 +322019 839086 +322042 823219 +322047 958553 +322094 997964 +322136 986703 +322161 807528 +322175 824136 +322206 982019 +322217 1.10926e+06 +322253 950575 +322267 952253 +322333 973742 +322344 977550 +322369 808606 +322381 843092 +322386 949403 +322411 927158 +322417 854164 +322428 944553 +322503 1.01478e+06 +322528 1.09831e+06 +322592 904225 +322614 837367 +322664 876253 +322686 1.07758e+06 +322700 1.068e+06 +322731 899858 +322744 949783 +322767 927233 +322783 957494 +322817 938239 +322836 834722 +322861 1.04095e+06 +322869 810808 +322936 840611 +322958 812356 +322964 1.01306e+06 +322986 901847 +323050 840275 +323053 847728 +323061 877981 +323061 924503 +323069 960064 +323078 954797 +323089 917747 +323094 901389 +323122 1.06778e+06 +323128 897983 +323131 970114 +323158 945164 +323175 890256 +323186 1.02545e+06 +323189 845172 +323203 962128 +323211 891633 +323283 932797 +323292 966250 +323300 906056 +323344 961511 +323361 813917 +323414 903217 +323431 893286 +323475 973864 +323492 904600 +323503 1.08708e+06 +323511 953008 +323525 908778 +323536 896544 +323642 887036 +323644 894742 +323664 961006 +323667 863000 +323694 841881 +323717 1.1286e+06 +323769 825925 +323789 806928 +323794 816633 +323808 1.06479e+06 +323864 968481 +323867 833547 +323881 989789 +323881 1.00864e+06 +323939 993939 +323967 973236 +323969 820603 +323969 908564 +324014 988172 +324058 994933 +324064 972114 +324067 887772 +324072 870211 +324083 911867 +324111 1.00712e+06 +324172 886478 +324206 1.04228e+06 +324239 856917 +324283 901322 +324311 966675 +324314 806700 +324322 830614 +324333 971022 +324339 866547 +324356 807242 +324367 1.11225e+06 +324372 1.03159e+06 +324389 891083 +324419 822153 +324419 977939 +324425 962297 +324453 949483 +324458 1.00538e+06 +324486 817833 +324486 997328 +324489 975264 +324494 875142 +324561 839403 +324575 914931 +324575 998711 +324581 837317 +324608 849878 +324614 973878 +324617 901153 +324639 864597 +324697 986786 +324706 1.00012e+06 +324708 850008 +324708 1.00406e+06 +324772 917547 +324786 940594 +324797 863619 +324806 809806 +324822 969942 +324861 882964 +324956 849919 +325006 947403 +325042 945739 +325092 921192 +325117 863767 +325156 954092 +325158 921917 +325158 937319 +325175 878364 +325175 968042 +325183 921475 +325231 926378 +325247 956369 +325250 937500 +325264 968861 +325275 927139 +325294 949028 +325300 925142 +325306 825894 +325325 935039 +325339 966653 +325344 927883 +325356 934108 +325358 858933 +325381 819325 +325403 829039 +325419 973206 +325431 903092 +325436 862119 +325439 930528 +325447 943672 +325481 828719 +325489 929200 +325497 858700 +325519 984978 +325536 838875 +325564 958631 +325569 842383 +325597 840964 +325606 856725 +325631 971414 +325789 973622 +325808 938925 +325828 821553 +325836 951086 +325839 1.17112e+06 +325842 881872 +325883 952039 +325883 965083 +325889 963086 +325889 966850 +325897 968567 +325908 926478 +325919 967558 +325936 948553 +325964 1.14709e+06 +325972 823339 +325997 1.1063e+06 +326039 914778 +326056 832456 +326097 854808 +326108 1.1077e+06 +326119 998139 +326125 900367 +326153 932867 +326208 836000 +326278 964556 +326308 972889 +326322 873192 +326353 860344 +326394 965381 +326400 1.17083e+06 +326408 903647 +326453 853783 +326467 972256 +326492 967128 +326517 969081 +326536 837597 +326550 799406 +326592 836189 +326631 954881 +326653 1.07152e+06 +326728 1.14146e+06 +326731 974603 +326733 957092 +326775 845394 +326781 1.17098e+06 +326789 1.15498e+06 +326833 847383 +326858 1.17182e+06 +326875 833467 +326875 939608 +326900 808508 +326947 937417 +326958 976019 +326961 920858 +326981 958850 +326989 926567 +326992 1.08131e+06 +327025 1.03136e+06 +327028 971550 +327044 875958 +327092 960081 +327142 971561 +327153 1.17156e+06 +327169 1.16875e+06 +327189 1.02644e+06 +327214 1.09105e+06 +327217 840133 +327225 1.1064e+06 +327233 992969 +327253 973206 +327253 1.14624e+06 +327286 949422 +327286 966225 +327292 827200 +327308 1.15529e+06 +327342 802419 +327358 962750 +327361 968867 +327375 1.01951e+06 +327425 1.17031e+06 +327439 939714 +327447 974133 +327458 969975 +327481 964717 +327503 816369 +327547 812422 +327556 989019 +327558 1.11554e+06 +327564 998958 +327572 943450 +327572 974106 +327578 848750 +327592 977969 +327594 974581 +327617 1.0813e+06 +327631 802503 +327675 886508 +327678 1.17022e+06 +327700 1.0828e+06 +327714 891167 +327733 924056 +327750 917925 +327764 799311 +327786 919142 +327794 1.0815e+06 +327833 968000 +327853 800353 +327872 845619 +327883 868717 +327889 851450 +327917 930556 +327919 1.15562e+06 +327928 956342 +327931 1.1569e+06 +327939 798628 +327947 1.16962e+06 +327958 954508 +327961 851839 +327964 965606 +327994 972689 +328000 947206 +328003 856536 +328039 819494 +328042 911700 +328047 974447 +328058 974028 +328083 981125 +328111 831728 +328111 1.15379e+06 +328139 969486 +328158 972278 +328189 822350 +328192 934175 +328203 851722 +328219 926578 +328233 971703 +328267 830794 +328281 884764 +328311 857636 +328339 1.09707e+06 +328342 972286 +328344 852297 +328364 964747 +328383 1.16973e+06 +328386 866294 +328403 851833 +328406 836325 +328406 878875 +328422 1.04403e+06 +328439 971428 +328467 852100 +328475 1.15569e+06 +328492 1.09759e+06 +328503 810794 +328517 800367 +328519 1.00465e+06 +328544 799750 +328550 904056 +328564 973386 +328572 1.16921e+06 +328578 972544 +328597 846200 +328600 973636 +328667 824042 +328678 843306 +328686 851906 +328708 811097 +328714 939872 +328744 957653 +328764 877425 +328778 851833 +328794 1.11757e+06 +328808 971547 +328819 833325 +328833 816583 +328836 899714 +328847 1.00126e+06 +328881 843267 +328928 934483 +328936 960292 +328950 975456 +328961 1.09827e+06 +328997 854011 +328997 945561 +329014 922419 +329028 965636 +329050 806669 +329050 936967 +329064 908781 +329103 961353 +329156 867158 +329183 800222 +329192 916769 +329253 811875 +329264 968958 +329311 964594 +329328 843494 +329342 970778 +329344 972514 +329358 828117 +329372 871647 +329411 971339 +329439 859539 +329439 1.03348e+06 +329442 1.02564e+06 +329444 871386 +329453 998025 +329478 1.12716e+06 +329481 967294 +329536 968900 +329544 970147 +329572 952900 +329572 1.05742e+06 +329589 812367 +329594 1.17264e+06 +329597 867467 +329617 968289 +329619 931400 +329628 1.17035e+06 +329636 1.01832e+06 +329644 1.02829e+06 +329689 934506 +329700 899122 +329719 1.10776e+06 +329739 908244 +329750 817578 +329750 963322 +329761 965950 +329778 1.05941e+06 +329778 1.11517e+06 +329783 885700 +329786 1.15529e+06 +329808 800328 +329814 828103 +329836 845828 +329856 801100 +329875 1.1077e+06 +329911 1.1727e+06 +329922 890661 +329950 975425 +329953 949656 +329975 876300 +329983 946306 +330014 824114 +330039 972256 +330047 1.10785e+06 +330067 801556 +330078 813086 +330122 943653 +330136 927250 +330144 970967 +330150 966128 +330161 927242 +330183 801758 +330197 966986 +330203 1.17202e+06 +330308 850611 +330314 1.11387e+06 +330317 947217 +330342 839383 +330369 1.17291e+06 +330372 1.15621e+06 +330392 850314 +330394 921825 +330483 1.1663e+06 +330508 1.09296e+06 +330544 841558 +330569 1.1091e+06 +330572 915733 +330575 895875 +330606 954719 +330656 860533 +330656 962275 +330678 1.09359e+06 +330681 1.17302e+06 +330739 1.06018e+06 +330750 898544 +330767 1.11739e+06 +330786 868817 +330786 1.09365e+06 +330786 1.16601e+06 +330800 832322 +330847 972958 +330897 820158 +330917 970464 +330956 803156 +330981 936547 +331003 934608 +331006 868642 +331028 867536 +331031 966703 +331053 885608 +331075 923347 +331094 912619 +331131 900531 +331136 941642 +331150 1.04326e+06 +331181 871250 +331192 970253 +331192 1.17086e+06 +331211 971831 +331214 855664 +331236 890550 +331256 1.15513e+06 +331281 919611 +331283 1.07252e+06 +331294 881514 +331333 1.00227e+06 +331372 958392 +331386 1.10124e+06 +331408 919939 +331433 1.17165e+06 +331481 959511 +331486 941500 +331506 968233 +331511 853722 +331575 997333 +331575 1.05774e+06 +331581 1.1735e+06 +331611 983853 +331633 963597 +331650 970292 +331656 919414 +331667 1.01793e+06 +331689 908539 +331731 849150 +331731 862517 +331781 866072 +331786 991772 +331800 964978 +331806 947439 +331811 1.02274e+06 +331828 902228 +331842 904892 +331844 998933 +331886 952211 +331908 1.01378e+06 +331939 987383 +331958 800133 +331958 1.17379e+06 +331972 1.04372e+06 +331975 966150 +332000 1.17242e+06 +332031 946800 +332075 823919 +332075 926661 +332097 875692 +332100 847444 +332100 977544 +332144 804481 +332183 981583 +332183 1.17033e+06 +332281 917975 +332289 875772 +332333 825956 +332342 864836 +332342 975858 +332344 885822 +332347 848358 +332361 968008 +332378 915114 +332400 1.15518e+06 +332436 842289 +332442 868164 +332447 813589 +332467 842642 +332469 958997 +332481 1.00573e+06 +332511 808158 +332558 1.16374e+06 +332569 1.03317e+06 +332611 938853 +332614 972378 +332619 905922 +332653 842817 +332667 892908 +332669 932392 +332697 908797 +332736 858361 +332756 829764 +332775 850981 +332781 863550 +332858 965725 +332939 1.11096e+06 +332942 961944 +332944 839661 +332958 977986 +332961 868436 +332969 810350 +332975 914936 +333022 845539 +333042 969858 +333047 836833 +333061 1.11841e+06 +333089 854847 +333100 891728 +333106 857544 +333139 820969 +333158 926628 +333200 879028 +333208 902322 +333225 804139 +333225 811425 +333244 967842 +333267 833886 +333286 912817 +333289 925383 +333289 1.05604e+06 +333317 1.05672e+06 +333319 897411 +333328 943425 +333369 1.02206e+06 +333428 1.18327e+06 +333439 864381 +333453 1.10452e+06 +333458 841092 +333478 932097 +333486 806831 +333489 965483 +333506 847767 +333514 932956 +333528 1.11788e+06 +333536 905925 +333578 812708 +333583 935775 +333583 976944 +333625 951044 +333631 971736 +333647 927247 +333653 934950 +333703 1.12583e+06 +333706 960686 +333706 987525 +333708 1.11962e+06 +333733 956881 +333764 1.1725e+06 +333767 792947 +333783 880153 +333794 962472 +333806 847997 +333869 842831 +333942 1.04522e+06 +333942 1.10786e+06 +333944 803475 +333964 969603 +333967 845958 +333992 1.10868e+06 +334017 869544 +334025 814203 +334053 908975 +334069 826622 +334100 910617 +334111 930694 +334111 1.10842e+06 +334131 823853 +334144 823128 +334147 1.11909e+06 +334150 1.11549e+06 +334153 886439 +334181 998186 +334208 821622 +334214 816858 +334214 965769 +334222 1.11822e+06 +334247 959461 +334250 940475 +334256 869267 +334267 941061 +334269 1.17611e+06 +334306 963383 +334336 841489 +334342 869472 +334353 1.12297e+06 +334353 1.12358e+06 +334356 1.12349e+06 +334358 861058 +334372 1.01643e+06 +334417 940375 +334433 895717 +334472 841469 +334483 1.12073e+06 +334486 844550 +334486 867878 +334492 996225 +334500 905056 +334500 1.12259e+06 +334503 821983 +334503 888183 +334508 906550 +334511 795611 +334511 869967 +334517 811256 +334539 910072 +334561 1.02489e+06 +334597 944153 +334614 869089 +334636 1.17678e+06 +334661 942883 +334667 820167 +334667 969181 +334669 1.17697e+06 +334672 995242 +334706 825047 +334706 952136 +334750 804867 +334764 1.00855e+06 +334819 897281 +334917 808558 +334933 1.12357e+06 +334936 1.17148e+06 +334939 849139 +334950 903197 +334956 884272 +334967 812794 +334967 818922 +335006 1.17742e+06 +335017 819653 +335017 1.17662e+06 +335044 818692 +335058 1.02009e+06 +335086 946161 +335086 966119 +335092 1.11898e+06 +335128 963922 +335172 820758 +335178 818442 +335181 899206 +335200 964836 +335206 868025 +335214 798789 +335214 843539 +335225 1.17707e+06 +335253 914358 +335261 953156 +335308 805722 +335308 819450 +335311 1.11942e+06 +335317 811233 +335358 869972 +335378 852533 +335378 924697 +335381 867072 +335386 1.12185e+06 +335400 891242 +335406 892669 +335422 1.17782e+06 +335442 842339 +335453 1.05572e+06 +335461 957256 +335481 865444 +335508 790417 +335508 818042 +335519 947808 +335539 828961 +335553 890847 +335575 807147 +335589 978483 +335603 817197 +335606 1.17157e+06 +335614 969108 +335633 880814 +335636 818081 +335656 813036 +335669 845811 +335700 868964 +335717 1.16076e+06 +335725 844133 +335750 838939 +335756 831825 +335772 961781 +335772 962731 +335778 1.01855e+06 +335806 1.12237e+06 +335808 799892 +335831 843394 +335833 867728 +335833 959097 +335844 928342 +335861 862861 +335869 845425 +335869 879844 +335872 1.02378e+06 +335908 864908 +335939 1.12302e+06 +335942 992600 +335956 834681 +335956 986253 +335967 838603 +335975 1.12271e+06 +335992 797444 +335992 963664 +336000 1.17671e+06 +336008 869561 +336017 907736 +336047 867939 +336058 789733 +336064 843353 +336075 886503 +336078 927400 +336081 803514 +336086 912067 +336103 964106 +336103 1.14596e+06 +336106 950525 +336106 1.14573e+06 +336125 920644 +336125 1.17712e+06 +336131 859611 +336131 1.12324e+06 +336142 858350 +336156 811022 +336189 838675 +336189 1.17928e+06 +336197 866089 +336206 869714 +336214 858442 +336219 843692 +336258 836125 +336258 1.17693e+06 +336261 859189 +336289 913994 +336289 917908 +336289 919314 +336306 1.12332e+06 +336331 897111 +336356 966086 +336358 972225 +336386 1.17343e+06 +336411 1.17918e+06 +336417 1.05877e+06 +336417 1.1729e+06 +336447 843258 +336456 859125 +336489 855875 +336517 973761 +336522 813614 +336533 844494 +336561 837183 +336561 969067 +336597 858317 +336597 876000 +336600 844103 +336600 868128 +336600 1.01238e+06 +336603 1.17998e+06 +336608 955553 +336614 952664 +336614 953856 +336647 791028 +336664 1.01682e+06 +336669 935914 +336675 798308 +336675 840178 +336694 1.17822e+06 +336706 1.01535e+06 +336742 941311 +336742 1.01387e+06 +336772 863967 +336794 844394 +336803 1.16173e+06 +336833 789986 +336844 878308 +336861 864750 +336889 788869 +336889 1.01998e+06 +336939 817672 +336950 802111 +336986 858397 +337039 907264 +337067 840317 +337072 842719 +337092 1.17196e+06 +337092 1.17953e+06 +337122 841053 +337133 873886 +337206 1.16215e+06 +337211 851456 +337214 1.16388e+06 +337244 926156 +337258 905514 +337286 870903 +337306 872844 +337319 849192 +337367 827394 +337369 850325 +337372 1.01836e+06 +337381 810981 +337397 1.16412e+06 +337414 1.18104e+06 +337431 1.17108e+06 +337444 852881 +337444 861558 +337456 1.17867e+06 +337458 1.17174e+06 +337458 1.17825e+06 +337475 1.16971e+06 +337481 868086 +337489 843881 +337519 858114 +337536 794478 +337547 842675 +337556 965364 +337569 881089 +337569 1.18353e+06 +337592 966692 +337592 1.18006e+06 +337597 871833 +337669 1.18188e+06 +337689 898083 +337714 842672 +337733 868139 +337739 1.17941e+06 +337747 842964 +337750 864717 +337786 907214 +337789 924917 +337797 1.16464e+06 +337803 843361 +337825 1.17228e+06 +337833 860025 +337839 1.16958e+06 +337856 1.18084e+06 +337867 977256 +337878 1.17852e+06 +337878 1.18357e+06 +337894 819297 +337897 842642 +337903 843061 +337914 908569 +337922 824792 +337922 1.18314e+06 +337936 842061 +337939 846606 +337947 837133 +338006 1.18389e+06 +338014 1.17145e+06 +338025 851886 +338025 933808 +338025 1.17992e+06 +338031 1.18072e+06 +338081 841703 +338094 842397 +338094 905264 +338111 1.02163e+06 +338125 846344 +338136 857614 +338136 924128 +338142 868094 +338144 1.17812e+06 +338161 986947 +338169 811011 +338169 1.18036e+06 +338172 981950 +338178 794494 +338181 867428 +338186 845825 +338200 1.16389e+06 +338247 870861 +338250 885436 +338303 1.16544e+06 +338311 872775 +338314 1.18072e+06 +338314 1.18281e+06 +338319 818011 +338322 1.01842e+06 +338333 1.1195e+06 +338353 1.17914e+06 +338358 790481 +338358 1.1834e+06 +338369 1.09964e+06 +338389 839008 +338389 907261 +338453 816619 +338464 1.18046e+06 +338492 1.18388e+06 +338531 965022 +338533 910278 +338536 1.18133e+06 +338544 842172 +338553 893114 +338556 892844 +338572 840200 +338575 1.15486e+06 +338594 846839 +338622 1.18399e+06 +338628 834089 +338650 843367 +338658 1.18082e+06 +338675 827414 +338675 1.17997e+06 +338694 1.01597e+06 +338703 1.17924e+06 +338708 797556 +338722 1.17869e+06 +338753 1.17566e+06 +338756 847622 +338756 891772 +338767 806931 +338781 907272 +338781 1.1752e+06 +338817 1.18116e+06 +338839 845144 +338847 1.1841e+06 +338869 914917 +338883 1.18308e+06 +338886 1.17812e+06 +338894 1.18159e+06 +338900 841431 +338906 800186 +338917 875261 +338919 842989 +338956 948261 +338958 1.18219e+06 +338967 979361 +338981 842833 +338983 889992 +339017 881344 +339022 1.18081e+06 +339056 914989 +339078 815475 +339103 811047 +339108 811358 +339133 822936 +339136 984931 +339164 815136 +339164 845447 +339164 1.18352e+06 +339167 928481 +339167 1.17899e+06 +339172 1.02324e+06 +339172 1.18011e+06 +339175 797442 +339192 1.18416e+06 +339203 803417 +339203 1.17278e+06 +339208 931539 +339214 780206 +339236 848408 +339242 843786 +339244 860225 +339256 1.16876e+06 +339289 878172 +339294 1.16976e+06 +339303 1.18211e+06 +339319 1.17945e+06 +339344 964283 +339353 799328 +339369 971164 +339381 1.18352e+06 +339383 943569 +339397 862017 +339400 1.17243e+06 +339400 1.18132e+06 +339411 842136 +339428 918433 +339442 909450 +339456 938469 +339461 843347 +339472 903442 +339472 1.18084e+06 +339481 864728 +339492 835347 +339508 907678 +339514 986683 +339533 1.17395e+06 +339547 860419 +339561 839881 +339583 921900 +339606 1.18184e+06 +339608 833781 +339608 1.1795e+06 +339608 1.18041e+06 +339611 1.16501e+06 +339617 1.18352e+06 +339650 835967 +339653 1.18151e+06 +339656 810742 +339656 879147 +339669 832783 +339672 941683 +339681 1.18224e+06 +339686 1.12729e+06 +339725 1.16976e+06 +339731 783861 +339761 1.17904e+06 +339767 896756 +339775 1.18186e+06 +339792 1.18032e+06 +339814 812364 +339817 1.18224e+06 +339831 1.18096e+06 +339839 997244 +339842 884881 +339844 1.01337e+06 +339850 915608 +339867 1.18184e+06 +339875 802083 +339875 822981 +339886 838981 +339897 834258 +339911 963739 +339919 893489 +339925 837203 +339925 1.17516e+06 +339933 810742 +339958 795703 +339961 1.17405e+06 +339967 779075 +339981 858664 +339986 967194 +339997 791997 +340006 810350 +340014 817722 +340017 887553 +340022 950936 +340025 850417 +340028 841447 +340067 900567 +340094 1.18104e+06 +340106 955094 +340117 1.17484e+06 +340119 1.00822e+06 +340122 1.00302e+06 +340122 1.17688e+06 +340131 982319 +340136 838278 +340142 860067 +340144 867469 +340147 904317 +340172 961425 +340186 952661 +340192 809900 +340194 1.1849e+06 +340200 979572 +340200 1.17949e+06 +340203 1.17864e+06 +340211 1.18396e+06 +340217 860886 +340231 843617 +340233 846156 +340239 1.18171e+06 +340253 877583 +340261 863261 +340272 958689 +340292 947389 +340292 989186 +340336 1.17042e+06 +340339 1.17313e+06 +340350 778939 +340378 943411 +340444 907447 +340453 1.17943e+06 +340456 850561 +340469 875497 +340469 1.1658e+06 +340483 1.1726e+06 +340514 840714 +340519 1.18046e+06 +340522 1.18243e+06 +340536 809614 +340536 852550 +340553 1.17751e+06 +340561 788906 +340583 1.06891e+06 +340600 800717 +340600 950031 +340606 867675 +340622 936897 +340625 1.18089e+06 +340625 1.18122e+06 +340633 1.1765e+06 +340636 831256 +340639 809583 +340642 1.01843e+06 +340658 846769 +340678 1.02524e+06 +340681 981903 +340686 1.17938e+06 +340686 1.18027e+06 +340700 883911 +340703 1.17395e+06 +340722 860333 +340736 1.09856e+06 +340736 1.18399e+06 +340739 1.17313e+06 +340750 925553 +340753 842942 +340806 1.18072e+06 +340808 844114 +340814 865911 +340853 1.1796e+06 +340858 811833 +340889 886222 +340900 1.17889e+06 +340900 1.18361e+06 +340903 967714 +340922 825958 +340922 1.17434e+06 +340953 1.18126e+06 +340961 1.18105e+06 +340967 1.17719e+06 +340975 1.17648e+06 +340978 985703 +341008 1.17767e+06 +341014 845194 +341031 1.17845e+06 +341067 1.17806e+06 +341069 1.17934e+06 +341072 1.18057e+06 +341111 828672 +341111 1.09291e+06 +341161 887117 +341161 1.18149e+06 +341167 1.07243e+06 +341172 913764 +341192 940164 +341192 1.16445e+06 +341206 840044 +341208 930536 +341214 1.17302e+06 +341214 1.18106e+06 +341244 1.01441e+06 +341258 1.09937e+06 +341267 962631 +341283 1.17208e+06 +341333 1.09285e+06 +341336 1.17907e+06 +341344 778819 +341347 799400 +341347 1.16312e+06 +341356 1.16053e+06 +341361 1.17864e+06 +341394 1.17976e+06 +341397 1.18034e+06 +341422 879886 +341464 874022 +341469 1.1797e+06 +341478 1.18144e+06 +341478 1.19194e+06 +341481 1.17998e+06 +341486 788769 +341500 1.14288e+06 +341514 896314 +341519 856789 +341542 1.17343e+06 +341544 992647 +341544 1.09973e+06 +341603 1.18651e+06 +341617 1.18052e+06 +341650 848000 +341669 979972 +341686 800628 +341706 1.18837e+06 +341733 901375 +341739 845014 +341742 971433 +341747 868436 +341750 820242 +341753 972625 +341781 794008 +341781 823792 +341783 975922 +341792 778478 +341833 1.02134e+06 +341850 839253 +341858 968803 +341861 1.03334e+06 +341867 851747 +341872 969842 +341897 1.1813e+06 +341942 887197 +341953 797628 +341953 821619 +341975 1.19176e+06 +342000 905708 +342006 861664 +342017 902833 +342022 871814 +342039 834572 +342047 830308 +342056 792547 +342072 841403 +342083 777967 +342092 778439 +342092 815333 +342103 778869 +342117 1.0169e+06 +342133 886644 +342164 1.19037e+06 +342178 905419 +342181 802486 +342200 856078 +342256 779450 +342264 876214 +342264 1.02723e+06 +342272 806894 +342275 838844 +342283 920031 +342283 986842 +342308 1.11324e+06 +342311 956200 +342322 1.19172e+06 +342331 974875 +342331 1.0241e+06 +342336 791489 +342361 966783 +342367 844908 +342369 849442 +342408 990753 +342419 853358 +342419 1.17285e+06 +342464 806072 +342478 889986 +342483 1.17188e+06 +342528 835617 +342542 1.10029e+06 +342564 902719 +342564 995164 +342569 851647 +342575 887033 +342639 858606 +342647 934608 +342675 862089 +342719 982356 +342722 778189 +342739 884092 +342739 920908 +342744 816189 +342772 878286 +342819 1.18438e+06 +342828 847453 +342847 831444 +342856 1.18881e+06 +342869 831103 +342883 779214 +342928 913378 +342978 838242 +342978 997400 +342997 798764 +343047 819831 +343064 826639 +343069 924011 +343083 908519 +343114 899442 +343133 790375 +343144 971425 +343181 864958 +343189 785003 +343192 918472 +343206 784022 +343219 788272 +343242 884911 +343267 935506 +343333 823881 +343336 834992 +343367 850714 +343369 794314 +343381 843767 +343386 787033 +343456 791658 +343461 831100 +343508 877064 +343514 860008 +343528 829322 +343531 890231 +343542 1.19058e+06 +343556 779003 +343581 862947 +343597 983075 +343608 1.17632e+06 +343617 810856 +343622 928128 +343661 1.01057e+06 +343664 1.01748e+06 +343683 869086 +343686 849342 +343689 979636 +343694 906389 +343714 1.19306e+06 +343739 800736 +343764 886817 +343806 810867 +343819 843711 +343847 1.1853e+06 +343850 1.02115e+06 +343858 961281 +343875 836664 +343886 1.03051e+06 +343919 990181 +343925 1.00897e+06 +343936 800697 +343983 822469 +343989 1.19518e+06 +343992 1.18917e+06 +344000 1.19299e+06 +344047 1.03205e+06 +344147 818114 +344153 1.18793e+06 +344164 793714 +344219 917061 +344233 1.19703e+06 +344244 930950 +344264 1.00204e+06 +344264 1.173e+06 +344303 1.03632e+06 +344319 902208 +344358 831069 +344361 847000 +344397 881408 +344433 869353 +344436 1.18609e+06 +344442 857197 +344450 921831 +344464 823917 +344467 859042 +344481 1.19242e+06 +344550 936800 +344600 976736 +344650 1.10091e+06 +344667 960531 +344672 835739 +344678 844292 +344689 802561 +344706 826708 +344717 1.04245e+06 +344719 996478 +344725 818808 +344742 1.01304e+06 +344750 782025 +344806 853478 +344811 872933 +344811 983828 +344839 1.14322e+06 +344847 854764 +344872 786564 +344917 835375 +344942 858478 +344942 890078 +344967 791144 +344989 820144 +345003 915525 +345008 1.17185e+06 +345014 926364 +345022 979575 +345025 849511 +345025 901986 +345028 816117 +345028 991406 +345033 826503 +345036 930550 +345044 971192 +345078 877286 +345078 969681 +345094 886353 +345106 899397 +345114 835272 +345125 798511 +345133 1.10078e+06 +345136 1.02882e+06 +345186 835008 +345203 1.06241e+06 +345228 824944 +345231 869703 +345250 868947 +345286 862533 +345325 839850 +345358 1.01758e+06 +345361 1.1729e+06 +345364 792917 +345381 962183 +345386 787878 +345400 1.12468e+06 +345439 853106 +345442 919689 +345486 994219 +345506 906417 +345508 1.02311e+06 +345517 805839 +345519 779264 +345556 909128 +345567 936339 +345622 858125 +345636 1.11854e+06 +345644 925867 +345650 835453 +345689 856150 +345719 931731 +345750 809022 +345772 833325 +345794 795467 +345794 1.18116e+06 +345811 1.13204e+06 +345828 1.17408e+06 +345861 942394 +345894 953525 +345931 806756 +345958 911997 +345958 1.20137e+06 +345969 837633 +346017 1.05208e+06 +346047 964239 +346058 869833 +346081 821136 +346086 983900 +346100 1.12315e+06 +346125 835250 +346136 1.20192e+06 +346144 1.20079e+06 +346172 796850 +346175 899686 +346181 790089 +346183 824781 +346200 923953 +346228 973961 +346275 968406 +346278 862744 +346292 786056 +346294 986283 +346350 857672 +346378 978172 +346381 993336 +346392 1.20457e+06 +346403 784842 +346417 1.02724e+06 +346433 971642 +346447 824703 +346453 1.18217e+06 +346461 893053 +346481 979578 +346500 803892 +346517 827839 +346525 965258 +346564 819653 +346581 885667 +346589 989514 +346628 1.06776e+06 +346647 830967 +346686 795456 +346708 890264 +346719 929986 +346722 860342 +346778 769511 +346781 829317 +346800 791953 +346811 874061 +346833 828375 +346844 903828 +346856 829533 +346875 771194 +346883 999117 +346889 821958 +346931 913136 +346950 765597 +346972 989492 +346975 798836 +346981 1.18136e+06 +346989 767406 +347008 875289 +347017 863758 +347022 824647 +347047 812144 +347047 852819 +347142 856808 +347181 766642 +347203 807711 +347206 958989 +347228 767264 +347242 827814 +347247 1.00534e+06 +347297 889506 +347303 865861 +347311 877025 +347339 824439 +347350 793492 +347356 779956 +347358 800883 +347369 822544 +347394 820372 +347400 972219 +347436 1.01854e+06 +347447 876675 +347464 922894 +347503 981714 +347514 950478 +347539 774306 +347569 879728 +347575 1.12453e+06 +347583 1.06055e+06 +347589 796108 +347600 827539 +347647 830642 +347650 876986 +347658 847700 +347694 922669 +347697 849703 +347711 794439 +347711 1.12057e+06 +347731 803919 +347736 907575 +347739 794631 +347744 966781 +347781 923489 +347786 823103 +347794 993350 +347803 982919 +347808 915808 +347825 979567 +347831 917464 +347839 918997 +347861 783944 +347864 768594 +347878 826925 +347967 969592 +347997 876772 +348000 824244 +348028 869717 +348061 1.06733e+06 +348117 881900 +348150 791833 +348150 922242 +348150 1.02397e+06 +348172 974056 +348228 1.18944e+06 +348231 982439 +348239 899936 +348247 824194 +348253 1.06838e+06 +348256 872947 +348258 774597 +348267 972589 +348289 958436 +348297 826017 +348347 976022 +348406 850428 +348406 883147 +348422 826447 +348450 955572 +348481 1.14613e+06 +348514 865722 +348525 823942 +348544 955819 +348561 1.00213e+06 +348611 966653 +348614 824317 +348628 875375 +348639 800014 +348639 843242 +348642 1.18162e+06 +348661 921100 +348686 858394 +348697 1.1176e+06 +348711 852908 +348719 855092 +348719 995039 +348722 896906 +348761 839583 +348767 1.17103e+06 +348778 824242 +348781 834011 +348789 769017 +348789 964122 +348794 819664 +348833 827075 +348847 796944 +348853 824561 +348878 793664 +348878 911944 +348892 946006 +348906 809567 +348936 983656 +348964 982003 +348983 940906 +348989 817619 +349022 1.10158e+06 +349025 790119 +349047 772317 +349050 1.16819e+06 +349069 1.0668e+06 +349106 818531 +349128 911100 +349147 977783 +349158 851092 +349181 797628 +349181 833856 +349181 973142 +349186 953089 +349203 822964 +349225 817428 +349236 777742 +349239 819331 +349244 807436 +349278 957156 +349283 820992 +349319 981400 +349322 865719 +349331 837772 +349331 838472 +349333 957694 +349364 818794 +349378 821453 +349378 1.00888e+06 +349386 822272 +349386 1.04682e+06 +349392 797742 +349431 797872 +349447 818378 +349475 857144 +349481 821275 +349492 904714 +349494 819322 +349508 821061 +349508 950800 +349511 946369 +349528 785089 +349531 1.20435e+06 +349569 924272 +349581 819908 +349581 852233 +349594 967525 +349611 819675 +349617 898294 +349622 779625 +349622 993803 +349672 947244 +349675 799847 +349675 824436 +349681 800769 +349692 873711 +349703 789456 +349717 1.20571e+06 +349722 909025 +349744 920164 +349769 914950 +349775 853578 +349808 792244 +349831 852861 +349842 804494 +349842 819267 +349853 805497 +349861 843714 +349883 803672 +349894 969233 +349894 992492 +349900 1.06049e+06 +349919 818350 +349919 868467 +349919 868469 +349936 802647 +349942 812422 +349942 853494 +349958 792264 +349978 783236 +349992 780914 +349994 1.17649e+06 +350025 809800 +350047 928025 +350072 809453 +350075 802011 +350081 907897 +350081 912511 +350122 857044 +350131 907225 +350133 786942 +350136 973608 +350142 852519 +350147 973353 +350153 785033 +350158 819750 +350167 818042 +350169 1.17835e+06 +350228 943811 +350242 810281 +350242 1.10697e+06 +350294 990928 +350308 766933 +350319 787950 +350322 932231 +350414 821044 +350419 896644 +350428 1.20475e+06 +350450 896217 +350456 853097 +350469 820903 +350478 856719 +350511 862697 +350522 868886 +350525 788786 +350525 831969 +350525 979361 +350525 1.18173e+06 +350531 850503 +350536 946233 +350539 933933 +350550 777467 +350553 871575 +350561 884353 +350589 1.194e+06 +350594 942525 +350644 888908 +350706 918794 +350711 797617 +350717 816500 +350725 982433 +350742 856261 +350767 806694 +350778 874397 +350800 816331 +350803 963989 +350822 942631 +350831 808925 +350833 980875 +350839 922078 +350844 1.06651e+06 +350872 973347 +350875 840347 +350886 770353 +350886 924419 +350906 806864 +350931 934483 +350950 789558 +350964 787842 +350975 987461 +350978 984353 +350989 1.20611e+06 +351036 986033 +351044 801094 +351056 830967 +351083 770444 +351097 794725 +351111 812267 +351117 1.01363e+06 +351128 918222 +351136 851381 +351161 781364 +351167 807239 +351186 1.2059e+06 +351211 815161 +351217 1.2062e+06 +351225 853439 +351228 953708 +351258 1.17985e+06 +351303 967756 +351314 794297 +351322 1.18448e+06 +351347 1.19455e+06 +351347 1.19472e+06 +351378 976578 +351392 973944 +351400 939214 +351411 848722 +351425 1.19456e+06 +351428 767706 +351428 1.2064e+06 +351436 828214 +351447 768025 +351461 966697 +351464 901844 +351483 818611 +351494 900489 +351497 949706 +351508 927439 +351508 938067 +351519 865706 +351522 1.07842e+06 +351536 781056 +351544 1.19455e+06 +351578 991750 +351586 964931 +351594 848767 +351600 926406 +351608 848578 +351619 1.06642e+06 +351644 860106 +351647 853014 +351672 946722 +351678 789731 +351697 1.0789e+06 +351700 885922 +351717 1.03724e+06 +351739 793925 +351742 846536 +351742 877378 +351744 814500 +351750 821894 +351794 806475 +351858 861122 +351864 947856 +351872 773211 +351883 982603 +351894 854858 +351894 1.14052e+06 +351903 944108 +351958 851847 +351981 1.11651e+06 +351997 870308 +352006 1.06701e+06 +352014 855192 +352017 838242 +352031 859211 +352036 1.01106e+06 +352044 898739 +352086 851269 +352092 1.18828e+06 +352097 860794 +352144 901964 +352153 998661 +352192 812058 +352219 1.01831e+06 +352225 974392 +352231 931578 +352244 907867 +352244 966703 +352247 882492 +352250 903250 +352256 803292 +352269 808433 +352303 810428 +352311 944778 +352317 916675 +352325 1.00599e+06 +352333 827344 +352336 886064 +352339 923875 +352353 815147 +352358 883906 +352361 823494 +352361 851986 +352369 974061 +352375 962414 +352378 1.06606e+06 +352381 1.18914e+06 +352386 810753 +352386 1.06667e+06 +352392 944258 +352400 858397 +352411 946197 +352422 873347 +352428 1.02428e+06 +352436 893500 +352450 813414 +352464 929364 +352472 975994 +352481 930489 +352494 1.1219e+06 +352506 917361 +352531 821972 +352536 951228 +352542 827003 +352556 793725 +352556 949214 +352561 792825 +352561 889878 +352561 912000 +352569 783525 +352578 969364 +352592 810756 +352597 804256 +352597 1.18913e+06 +352603 857361 +352606 971194 +352619 811875 +352625 775819 +352633 905711 +352678 811031 +352700 916397 +352706 861281 +352722 810483 +352747 812103 +352750 904667 +352767 991347 +352783 931336 +352800 824222 +352822 913653 +352828 1.20659e+06 +352831 863742 +352847 812842 +352861 811306 +352872 955822 +352889 811450 +352908 978119 +352911 996397 +352919 937297 +352922 815358 +352928 936344 +352950 797456 +352964 847481 +352969 940361 +352981 810161 +352983 824833 +353000 1.06551e+06 +353053 767889 +353061 786092 +353067 777883 +353083 771544 +353089 983417 +353097 915678 +353106 818589 +353111 824442 +353128 979442 +353164 811764 +353186 824611 +353194 877622 +353228 838075 +353233 845250 +353236 806561 +353236 873036 +353256 943014 +353258 896161 +353264 891494 +353267 786764 +353272 969250 +353289 817589 +353289 932528 +353339 818653 +353356 961361 +353361 941731 +353375 857042 +353394 974864 +353414 898972 +353425 779089 +353458 794172 +353464 824722 +353489 991700 +353500 802003 +353511 855678 +353544 944339 +353561 952653 +353575 780061 +353583 798947 +353589 810972 +353597 797800 +353600 819294 +353614 868397 +353619 862094 +353628 842942 +353653 1.0341e+06 +353658 1.20849e+06 +353692 819569 +353694 824931 +353714 853906 +353725 774378 +353733 1.19018e+06 +353736 832261 +353781 987817 +353786 813792 +353797 902578 +353819 785489 +353833 1.19109e+06 +353842 922156 +353842 977242 +353847 779931 +353858 943983 +353869 879953 +353878 805958 +353917 979411 +353992 788161 +354006 1.19469e+06 +354014 931142 +354019 797844 +354019 907531 +354019 974811 +354025 812025 +354025 1.08223e+06 +354058 801169 +354061 945986 +354078 786722 +354106 808431 +354117 902783 +354119 994039 +354131 787358 +354133 780711 +354175 816431 +354197 1.1902e+06 +354211 945144 +354219 992792 +354231 914558 +354244 844875 +354267 918367 +354286 794933 +354289 815017 +354294 857231 +354303 942314 +354308 834475 +354325 936153 +354325 963047 +354339 795872 +354339 1.06446e+06 +354342 806208 +354353 1.01172e+06 +354358 970911 +354364 1.00805e+06 +354367 943481 +354372 936728 +354392 886414 +354397 959817 +354406 933878 +354411 897781 +354419 974406 +354428 845931 +354428 1.20891e+06 +354447 784272 +354453 1.00271e+06 +354469 850844 +354492 867889 +354492 898150 +354494 973964 +354581 959411 +354603 947872 +354622 894019 +354639 815219 +354658 781608 +354667 856542 +354675 975161 +354686 830042 +354700 955228 +354714 934664 +354714 983553 +354725 774158 +354736 812547 +354778 942217 +354797 791806 +354817 860886 +354833 864603 +354867 808603 +354867 966847 +354869 938275 +354872 806219 +354886 829889 +354894 971633 +354894 1.2067e+06 +354900 903586 +354911 973228 +354914 920311 +354922 941375 +354939 850125 +354942 953053 +354969 779822 +354975 972686 +354983 949694 +354992 808489 +355006 940514 +355033 969025 +355042 974458 +355067 977622 +355069 787394 +355078 901469 +355083 783397 +355125 771008 +355133 845453 +355147 847903 +355147 1.06365e+06 +355150 882453 +355156 989669 +355186 976319 +355197 843636 +355225 976186 +355228 973769 +355261 987072 +355272 863336 +355281 1.08742e+06 +355289 774014 +355297 806683 +355322 979547 +355325 770328 +355328 828375 +355328 904206 +355333 829108 +355336 825286 +355361 1.00959e+06 +355364 782847 +355400 766233 +355453 779750 +355456 806111 +355464 770525 +355478 875519 +355494 985778 +355497 826503 +355508 975486 +355511 804067 +355608 975511 +355642 896464 +355642 907167 +355642 1.2108e+06 +355658 972867 +355692 805819 +355742 1.05674e+06 +355753 1.01184e+06 +355756 812119 +355778 989642 +355842 788003 +355842 881194 +355847 808103 +355869 804631 +355881 1.18491e+06 +355900 842419 +355914 924603 +355942 1.1934e+06 +355961 781244 +355978 824000 +356008 825542 +356014 844611 +356028 859197 +356056 851889 +356067 778236 +356075 958600 +356081 968208 +356092 1.18483e+06 +356111 773731 +356111 903297 +356122 804469 +356139 996711 +356139 1.06725e+06 +356144 888139 +356150 870353 +356172 878394 +356178 823214 +356203 908983 +356225 1.1767e+06 +356233 959603 +356289 821808 +356311 983169 +356328 993814 +356333 801161 +356333 825822 +356350 779333 +356356 941672 +356361 833778 +356383 912650 +356397 1.01603e+06 +356419 977461 +356442 823031 +356453 780100 +356486 956558 +356497 881267 +356497 910739 +356506 784567 +356508 883933 +356508 1.17661e+06 +356528 974778 +356578 820256 +356611 841722 +356617 971953 +356650 988828 +356678 1.01397e+06 +356697 812217 +356708 804744 +356728 895733 +356736 905072 +356744 900997 +356781 1.08151e+06 +356781 1.19228e+06 +356806 1.09052e+06 +356817 804325 +356839 820094 +356842 819919 +356869 1.05937e+06 +356914 1.00638e+06 +356919 848608 +356922 804350 +356942 970631 +356969 825608 +357006 808883 +357017 914414 +357017 968806 +357044 820361 +357047 967650 +357050 899694 +357064 812189 +357069 1.18455e+06 +357072 810758 +357078 798139 +357111 786144 +357111 890875 +357139 814222 +357142 835103 +357144 811464 +357200 791775 +357233 794625 +357258 979761 +357272 814708 +357289 814000 +357289 817794 +357292 1.18549e+06 +357306 911983 +357319 1.05151e+06 +357325 788506 +357328 843339 +357331 806772 +357333 796528 +357406 815633 +357422 905622 +357425 960700 +357436 796925 +357442 987472 +357444 1.09076e+06 +357453 816850 +357453 895297 +357472 854667 +357478 953694 +357486 966578 +357519 776703 +357547 1.18424e+06 +357561 899281 +357564 839706 +357578 816044 +357581 903222 +357603 841358 +357636 1.05932e+06 +357689 1.19246e+06 +357697 916408 +357719 786389 +357719 877839 +357739 814314 +357758 889900 +357808 783700 +357825 808875 +357847 891172 +357875 784808 +357883 776381 +357883 835544 +357894 839739 +357900 782042 +357914 787814 +357950 839319 +357964 814308 +357967 1.19107e+06 +357972 826842 +357972 842561 +357975 952503 +357981 976783 +358028 887747 +358028 965058 +358064 778636 +358083 970125 +358103 805561 +358111 768969 +358144 946283 +358147 892256 +358161 904342 +358178 798033 +358197 889158 +358203 956739 +358217 911283 +358239 772556 +358239 802536 +358242 783150 +358264 825494 +358269 1.01442e+06 +358275 839408 +358275 860717 +358303 925578 +358306 963908 +358383 894061 +358422 907042 +358425 756389 +358447 984128 +358456 863903 +358483 814961 +358506 953181 +358544 770558 +358589 1.08761e+06 +358614 979314 +358656 846850 +358656 1.01973e+06 +358667 767489 +358669 778294 +358681 835619 +358683 921175 +358708 955222 +358728 917539 +358756 893961 +358764 960608 +358778 766156 +358789 974250 +358800 901669 +358808 845086 +358825 800822 +358842 1.19271e+06 +358894 775325 +358906 903442 +358922 828292 +358922 904525 +358939 805617 +358967 775361 +359000 905819 +359028 802572 +359081 756761 +359089 926311 +359092 848781 +359100 790756 +359128 1.00382e+06 +359139 815392 +359153 820647 +359153 949697 +359175 762525 +359197 887589 +359217 811767 +359242 941883 +359250 868689 +359258 854642 +359272 899189 +359325 951411 +359339 845525 +359358 902578 +359381 777908 +359417 915483 +359419 958831 +359444 772100 +359447 960650 +359489 850269 +359494 944233 +359517 956506 +359525 975944 +359553 960086 +359556 800056 +359572 756244 +359594 953692 +359597 899719 +359606 839208 +359606 858142 +359608 782539 +359619 797625 +359625 1.19043e+06 +359669 831878 +359686 1.19291e+06 +359731 886781 +359739 970333 +359744 779658 +359758 943175 +359786 1.14832e+06 +359797 785100 +359806 889414 +359814 979108 +359819 841139 +359850 967667 +359883 966008 +359911 1.0608e+06 +359925 945678 +359939 788989 +359942 799356 +359942 941750 +359983 769464 +359986 961139 +360006 884281 +360014 940081 +360025 1.0593e+06 +360042 1.20128e+06 +360081 931864 +360083 1.19961e+06 +360103 842697 +360111 778578 +360114 886228 +360153 834150 +360156 865819 +360167 1.01824e+06 +360211 879669 +360214 803822 +360222 1.06958e+06 +360228 959681 +360317 840281 +360344 893856 +360358 894797 +360364 788236 +360381 882444 +360381 882736 +360397 1.14981e+06 +360417 901139 +360419 942469 +360444 843444 +360469 902928 +360489 777494 +360503 909750 +360508 902386 +360525 957906 +360533 873125 +360536 985881 +360583 905000 +360589 880978 +360594 919083 +360594 1.02513e+06 +360594 1.19311e+06 +360606 766094 +360625 941572 +360653 1.19016e+06 +360667 889939 +360689 794008 +360719 841333 +360725 797922 +360753 791000 +360764 888100 +360769 873878 +360775 860333 +360839 877947 +360839 898292 +360844 965833 +360861 937411 +360872 819275 +360914 793644 +360944 1.15041e+06 +360956 794381 +360958 792672 +360958 844425 +360967 811825 +360969 804194 +360981 1.19559e+06 +360989 783014 +360997 802444 +361006 870511 +361017 784583 +361019 871150 +361028 795069 +361033 841319 +361039 835528 +361047 845972 +361053 777131 +361056 795425 +361072 796589 +361075 832869 +361075 872208 +361078 876331 +361083 910972 +361092 978983 +361128 892617 +361131 794767 +361142 966989 +361156 970581 +361161 983167 +361169 867664 +361194 921358 +361197 800739 +361219 794292 +361222 786864 +361222 834925 +361275 889858 +361294 774206 +361306 824247 +361319 787569 +361325 885186 +361342 901597 +361344 806597 +361350 816778 +361350 1.11239e+06 +361397 961086 +361397 1.20359e+06 +361450 824169 +361456 1.1906e+06 +361458 811608 +361475 852683 +361481 989239 +361497 992978 +361511 955092 +361533 888006 +361536 856436 +361539 959925 +361542 837042 +361544 1.09552e+06 +361572 819783 +361583 811478 +361628 855017 +361631 818717 +361631 828311 +361661 948544 +361714 811942 +361725 859297 +361750 1.15136e+06 +361772 873397 +361778 942333 +361808 776669 +361858 953428 +361867 941286 +361869 903831 +361881 945403 +361889 957456 +361894 829586 +361900 764664 +361931 896556 +361956 840681 +361958 854486 +361961 820706 +361983 811531 +361983 1.01192e+06 +361989 1.15117e+06 +362000 865186 +362000 951675 +362022 802811 +362022 890122 +362025 911744 +362028 1.20102e+06 +362031 891908 +362031 1.19087e+06 +362061 942342 +362078 1.19346e+06 +362086 799050 +362128 1.21125e+06 +362136 886125 +362139 832950 +362164 805128 +362167 816747 +362178 841547 +362189 764642 +362211 919292 +362239 916083 +362261 926847 +362272 808336 +362294 771144 +362297 931075 +362325 807083 +362333 888244 +362336 897494 +362339 897694 +362361 900556 +362369 799797 +362381 963164 +362392 808447 +362403 802936 +362419 859519 +362419 959756 +362442 808486 +362506 837975 +362522 859517 +362553 941306 +362569 830861 +362586 831953 +362589 891917 +362614 909711 +362631 902925 +362633 894878 +362642 946928 +362650 1.01406e+06 +362675 944844 +362689 984794 +362694 958544 +362711 925353 +362739 772847 +362742 870642 +362758 998808 +362789 925969 +362803 978978 +362806 803594 +362808 835150 +362831 924939 +362842 821728 +362867 769850 +362894 972878 +362914 887081 +362928 951531 +362942 824736 +362953 801419 +362961 1.19141e+06 +362972 959911 +362972 970078 +362978 1.19206e+06 +362989 842233 +363008 1.19782e+06 +363019 762236 +363019 883267 +363047 866200 +363064 821933 +363075 975861 +363081 784069 +363100 964639 +363106 785911 +363119 877733 +363125 956158 +363133 823536 +363156 997572 +363158 914825 +363158 1.19708e+06 +363183 876947 +363200 906019 +363208 1.21243e+06 +363231 867133 +363275 1.19645e+06 +363294 783994 +363300 841839 +363303 1.19291e+06 +363314 772131 +363319 941183 +363353 934358 +363358 944606 +363361 1.02072e+06 +363378 968036 +363386 891639 +363417 783903 +363433 888503 +363486 822108 +363511 1.19419e+06 +363528 1.09617e+06 +363547 796647 +363556 856589 +363586 1.05609e+06 +363611 1.04595e+06 +363628 907536 +363644 958386 +363647 935678 +363683 960011 +363722 822258 +363728 942086 +363783 894719 +363808 848844 +363828 841200 +363828 901906 +363833 853231 +363839 925814 +363853 799597 +363864 804697 +363872 1.19217e+06 +363875 980894 +363883 864467 +363908 861672 +363911 950464 +363922 824117 +363936 789831 +363950 867794 +363956 769322 +363956 807228 +363956 978781 +363983 781556 +363992 900236 +364000 1.00802e+06 +364011 937378 +364036 814931 +364039 793364 +364053 984403 +364072 830056 +364072 1.05572e+06 +364078 905797 +364122 799672 +364142 963950 +364158 776033 +364169 1.09228e+06 +364181 826239 +364197 824767 +364203 814736 +364211 947967 +364219 944533 +364242 890569 +364247 1.21325e+06 +364253 896994 +364269 775958 +364333 1.19686e+06 +364336 993900 +364339 1.00141e+06 +364344 779122 +364356 978686 +364367 952711 +364369 772292 +364369 975853 +364392 992044 +364394 824558 +364422 770989 +364425 835997 +364442 883344 +364456 781986 +364508 775592 +364511 776797 +364517 899669 +364517 1.03184e+06 +364519 899192 +364533 1.00537e+06 +364542 835694 +364614 776544 +364639 950475 +364644 929200 +364664 799072 +364703 866514 +364708 828519 +364742 822611 +364744 818050 +364761 1.19442e+06 +364778 825933 +364797 1.21731e+06 +364850 825033 +364878 878383 +364883 797669 +364900 774417 +364933 900750 +364956 915406 +364981 845128 +364992 806075 +365003 776453 +365003 806267 +365008 888753 +365042 888742 +365050 1.01782e+06 +365053 811211 +365067 1.21443e+06 +365092 868850 +365108 1.04915e+06 +365139 1.19553e+06 +365147 946111 +365189 896125 +365211 860264 +365222 827136 +365225 939394 +365233 1.19286e+06 +365244 915381 +365289 974436 +365297 832175 +365297 873594 +365303 959233 +365331 823269 +365333 858500 +365356 954322 +365428 1.19832e+06 +365433 1.14446e+06 +365433 1.19386e+06 +365450 1.19286e+06 +365456 944850 +365461 963269 +365461 982697 +365483 824558 +365483 825619 +365486 866961 +365500 855053 +365556 824681 +365569 899664 +365619 862481 +365619 961614 +365681 896006 +365708 1.19611e+06 +365711 891861 +365736 967039 +365736 995719 +365744 851289 +365753 906039 +365769 825678 +365789 984619 +365817 865164 +365822 870656 +365822 988794 +365831 772003 +365844 824894 +365858 793953 +365864 895278 +365878 841269 +365886 793664 +365914 825736 +365922 896153 +365933 1.21834e+06 +365936 947689 +365944 943839 +365950 821889 +365953 1.01636e+06 +365958 902472 +365964 821886 +365964 1.19449e+06 +366003 1.21894e+06 +366031 924281 +366061 1.18062e+06 +366067 1.20188e+06 +366103 883147 +366111 1.21851e+06 +366117 1.19526e+06 +366136 898164 +366208 908233 +366211 932153 +366222 811511 +366244 1.19313e+06 +366283 799511 +366306 1.19678e+06 +366336 817839 +366378 825811 +366386 951539 +366408 802658 +366422 887389 +366436 932183 +366483 871664 +366503 1.1979e+06 +366506 944433 +366508 844386 +366592 1.19593e+06 +366611 809242 +366672 889933 +366675 868519 +366678 963369 +366689 899686 +366692 978008 +366722 939408 +366769 938686 +366775 769228 +366778 1.21654e+06 +366783 973097 +366828 1.01481e+06 +366844 1.21801e+06 +366850 931197 +366858 775428 +366889 831111 +366906 975561 +366908 851347 +366914 798728 +366936 949628 +366942 913992 +366986 789017 +366989 844775 +367000 781000 +367000 799389 +367006 956378 +367022 856917 +367039 1.05594e+06 +367069 970853 +367081 1.19555e+06 +367097 819775 +367097 998931 +367106 1.19758e+06 +367111 1.07984e+06 +367133 788289 +367150 799156 +367161 770683 +367161 809789 +367222 865772 +367233 844706 +367236 1.20059e+06 +367264 781292 +367278 1.10254e+06 +367281 765839 +367281 918522 +367281 1.08218e+06 +367286 809992 +367294 1.02513e+06 +367342 1.08359e+06 +367417 886367 +367417 943989 +367433 841597 +367472 959806 +367478 1.19771e+06 +367511 948472 +367533 861906 +367536 1.20381e+06 +367544 983564 +367569 903928 +367575 778472 +367583 830272 +367592 799906 +367592 895867 +367619 836950 +367625 807350 +367628 940558 +367647 882953 +367658 789286 +367658 1.21757e+06 +367758 873556 +367786 956392 +367797 893856 +367819 966608 +367856 1.08686e+06 +367892 815822 +367903 853706 +367911 817714 +367958 899578 +367958 959353 +367983 816825 +367992 784586 +368044 972825 +368050 986661 +368069 977333 +368083 767444 +368097 1.02255e+06 +368100 871542 +368125 898614 +368142 774686 +368161 1.00519e+06 +368172 939206 +368222 1.07992e+06 +368253 1.19702e+06 +368256 793983 +368347 815150 +368353 762986 +368356 996300 +368406 763106 +368414 946108 +368431 833219 +368453 868872 +368456 1.21537e+06 +368467 762856 +368472 896853 +368486 832192 +368519 833542 +368525 1.21401e+06 +368528 759783 +368572 883503 +368589 1.20455e+06 +368600 1.01213e+06 +368642 867103 +368650 878353 +368656 874886 +368658 831906 +368664 838889 +368672 814236 +368689 943678 +368706 890097 +368736 950956 +368744 948772 +368767 895878 +368817 827472 +368822 970531 +368833 979217 +368858 899292 +368900 822797 +368914 895383 +368936 812761 +368942 817769 +368975 959258 +369008 820803 +369031 1.06579e+06 +369033 1.04439e+06 +369042 1.21748e+06 +369053 935714 +369067 827819 +369069 1.00539e+06 +369086 1.11473e+06 +369094 894525 +369103 1.21756e+06 +369172 948794 +369192 942550 +369208 893506 +369289 939275 +369333 826292 +369333 948728 +369336 1.06998e+06 +369353 1.21772e+06 +369367 1.21864e+06 +369439 824642 +369444 940042 +369456 1.12526e+06 +369483 810850 +369486 840969 +369497 901583 +369519 926603 +369536 793592 +369542 1.01065e+06 +369544 947878 +369606 840933 +369608 1.21963e+06 +369614 1.2006e+06 +369619 781253 +369639 937956 +369647 829486 +369647 890892 +369661 829225 +369683 1.21899e+06 +369708 937178 +369742 1.2203e+06 +369753 1.21952e+06 +369758 825758 +369772 1.21898e+06 +369781 829886 +369783 822978 +369786 764283 +369800 856122 +369847 850631 +369861 1.20626e+06 +369869 948306 +369881 1.21956e+06 +369889 846000 +369903 864436 +369911 914925 +369922 919697 +369928 786014 +369944 956200 +369947 782275 +369953 917036 +369953 943158 +369956 910144 +369958 859119 +369975 798922 +370011 930814 +370031 936372 +370053 891764 +370058 1.21567e+06 +370081 1.0189e+06 +370097 913233 +370114 959350 +370161 819744 +370172 984850 +370175 885314 +370208 932058 +370236 898197 +370297 763456 +370303 934728 +370322 976067 +370333 883500 +370358 770956 +370369 944967 +370372 950897 +370372 956161 +370403 784836 +370406 944725 +370431 1.00921e+06 +370433 932942 +370436 896103 +370475 1.12526e+06 +370478 807800 +370478 874850 +370500 789444 +370511 1.22014e+06 +370514 1.22072e+06 +370517 890467 +370525 862078 +370561 850886 +370564 786386 +370583 1.20849e+06 +370589 881325 +370597 953592 +370619 970381 +370625 817519 +370667 766767 +370675 935519 +370692 941164 +370758 946394 +370767 889736 +370767 944592 +370803 779975 +370833 886000 +370836 944133 +370842 945131 +370850 896553 +370850 1.21609e+06 +370853 891625 +370869 818553 +370892 1.22085e+06 +370919 846042 +370925 792967 +370931 817939 +370939 860464 +370944 880803 +371028 853064 +371036 938183 +371042 965000 +371042 1.13583e+06 +371044 899106 +371056 806856 +371067 925806 +371092 878819 +371117 792858 +371142 891978 +371147 815197 +371150 1.07632e+06 +371156 933700 +371169 930556 +371183 828269 +371200 934800 +371222 763461 +371231 1.20259e+06 +371236 826014 +371236 886303 +371239 921011 +371261 1.22121e+06 +371267 961867 +371289 840833 +371297 804092 +371306 922633 +371306 1.13508e+06 +371306 1.21653e+06 +371331 1.13653e+06 +371367 859569 +371389 884033 +371425 945106 +371464 927686 +371464 944628 +371492 944428 +371500 824561 +371506 913575 +371511 887319 +371533 980308 +371536 837619 +371544 906956 +371575 929406 +371658 872475 +371672 876925 +371675 951097 +371686 1.13679e+06 +371692 948439 +371694 1.045e+06 +371731 781236 +371733 826311 +371742 1.05937e+06 +371753 1.01349e+06 +371753 1.13289e+06 +371764 943100 +371767 945653 +371769 846358 +371792 916567 +371794 859069 +371800 896550 +371836 873836 +371875 782017 +371883 944700 +371886 997653 +371903 952969 +371908 874528 +371967 897361 +372008 1.05423e+06 +372011 871789 +372011 1.13269e+06 +372014 994836 +372064 888447 +372075 826719 +372081 880567 +372147 938397 +372153 932981 +372167 895244 +372175 870489 +372197 895089 +372242 957081 +372256 866836 +372256 1.07598e+06 +372267 1.21974e+06 +372275 800131 +372278 774022 +372303 774778 +372322 820992 +372350 892700 +372364 1.21991e+06 +372367 874753 +372369 871592 +372397 969953 +372400 774303 +372414 982264 +372417 909686 +372422 784600 +372494 831933 +372508 925103 +372525 812714 +372539 764972 +372578 1.20998e+06 +372583 1.05904e+06 +372608 854989 +372639 1.22022e+06 +372653 973714 +372658 977653 +372678 760178 +372683 931169 +372689 993264 +372694 1.07009e+06 +372697 812225 +372703 955522 +372706 767078 +372708 799417 +372722 858911 +372742 875119 +372742 971686 +372750 1.0596e+06 +372753 1.07879e+06 +372769 891833 +372775 948247 +372778 820992 +372808 798972 +372811 985800 +372856 1.0034e+06 +372867 980256 +372872 1.21949e+06 +372894 759717 +372908 1.20318e+06 +372936 889753 +372939 871233 +372992 862286 +373003 899811 +373011 816911 +373019 783922 +373022 1.20482e+06 +373039 823511 +373050 934283 +373058 895181 +373058 899703 +373100 947717 +373125 812600 +373128 967539 +373139 1.2102e+06 +373153 935850 +373194 806392 +373206 792578 +373231 1.22031e+06 +373250 813119 +373261 919558 +373264 807353 +373281 874989 +373281 1.19648e+06 +373314 808114 +373325 827211 +373328 880811 +373339 869961 +373342 795233 +373353 1.21894e+06 +373358 814367 +373358 829806 +373361 943011 +373386 929069 +373403 952608 +373411 799433 +373433 853419 +373442 867547 +373450 1.08289e+06 +373458 948086 +373475 1.21268e+06 +373489 1.08585e+06 +373539 812528 +373567 774419 +373569 788256 +373603 963036 +373611 891658 +373636 815503 +373636 1.18394e+06 +373661 811028 +373661 1.21826e+06 +373672 884864 +373689 1.22035e+06 +373783 798072 +373797 1.22136e+06 +373819 869225 +373822 808228 +373822 896661 +373839 931511 +373842 1.22234e+06 +373856 939531 +373856 1.00195e+06 +373861 1.02278e+06 +373869 1.20722e+06 +373875 971139 +373894 1.20612e+06 +373903 976419 +373931 940936 +373939 972808 +373972 807994 +374019 868758 +374028 1.04653e+06 +374042 844139 +374083 1.02614e+06 +374108 947047 +374111 935494 +374136 791425 +374153 888978 +374153 938408 +374158 872656 +374183 956800 +374200 812433 +374208 814403 +374217 774378 +374222 810164 +374236 883461 +374242 864883 +374256 815069 +374283 1.21906e+06 +374300 1.22253e+06 +374303 839981 +374308 791233 +374322 1.20778e+06 +374328 815847 +374372 1.01972e+06 +374419 1.22142e+06 +374433 1.00015e+06 +374450 828053 +374450 871439 +374511 869092 +374517 892681 +374539 1.22181e+06 +374556 912094 +374556 946889 +374603 892469 +374614 1.22197e+06 +374636 1.22428e+06 +374644 818139 +374644 845067 +374650 858933 +374689 1.2214e+06 +374694 1.05869e+06 +374703 962633 +374717 1.21129e+06 +374739 1.08504e+06 +374744 972436 +374747 758586 +374767 878200 +374783 816536 +374792 825189 +374800 862939 +374817 1.00843e+06 +374850 1.19965e+06 +374861 1.22233e+06 +374931 871319 +374931 954700 +374947 1.20846e+06 +374950 942764 +374953 862214 +374994 918569 +375019 928208 +375028 975042 +375028 1.22468e+06 +375050 1.05007e+06 +375111 948378 +375178 876903 +375203 1.22275e+06 +375239 956611 +375264 1.20796e+06 +375272 796800 +375275 1.22512e+06 +375297 1.22039e+06 +375311 846619 +375314 767967 +375314 892533 +375317 758233 +375339 958264 +375389 872583 +375422 1.22515e+06 +375428 784575 +375439 947000 +375456 972686 +375458 773281 +375467 879839 +375472 996339 +375536 774606 +375544 889722 +375547 763372 +375569 946217 +375581 945197 +375583 971347 +375586 1.2227e+06 +375597 902939 +375631 1.22324e+06 +375658 973539 +375686 842964 +375697 852528 +375717 837069 +375728 827528 +375739 857400 +375742 1.22378e+06 +375792 1.06148e+06 +375808 774072 +375814 1.01355e+06 +375831 813806 +375831 815372 +375842 1.22365e+06 +375850 790517 +375867 847939 +375881 906289 +375900 775567 +375914 805439 +375950 1.20957e+06 +375958 816361 +375958 1.00443e+06 +375969 1.20865e+06 +375972 906272 +375986 1.22386e+06 +376028 992922 +376036 774917 +376069 875286 +376075 774772 +376133 779050 +376142 818667 +376144 934103 +376150 1.14511e+06 +376194 845781 +376194 888367 +376194 991061 +376211 906403 +376219 821633 +376242 1.0478e+06 +376242 1.09478e+06 +376264 894978 +376300 977822 +376306 1.2241e+06 +376339 794506 +376353 854008 +376361 867175 +376375 765747 +376414 1.20759e+06 +376439 930922 +376439 984308 +376439 987372 +376453 836489 +376456 847722 +376456 915358 +376458 981133 +376486 1.18971e+06 +376547 1.22407e+06 +376578 855911 +376583 976833 +376597 975750 +376614 764194 +376625 1.21874e+06 +376656 827717 +376658 775067 +376719 822842 +376739 808894 +376742 822775 +376775 1.13061e+06 +376789 812106 +376789 1.06353e+06 +376792 954569 +376806 926636 +376808 1.22399e+06 +376811 1.22123e+06 +376819 1.21767e+06 +376831 868714 +376833 879167 +376844 839531 +376853 852222 +376867 979764 +376881 972633 +376903 967819 +376908 757164 +376919 816242 +376922 973372 +376939 858592 +376942 1.22085e+06 +376947 1.22113e+06 +376989 937958 +377006 839739 +377022 1.21935e+06 +377033 822811 +377075 812508 +377103 763800 +377106 821842 +377117 757494 +377131 881867 +377139 971361 +377153 911350 +377194 756658 +377203 1.22526e+06 +377242 898611 +377250 1.22155e+06 +377258 806422 +377272 892167 +377306 818381 +377306 889331 +377339 883433 +377342 793542 +377347 812997 +377361 1.20934e+06 +377383 885406 +377397 818778 +377397 1.21424e+06 +377406 812308 +377417 1.21123e+06 +377431 811231 +377433 877039 +377478 842947 +377497 804631 +377519 890678 +377525 830689 +377528 1.00017e+06 +377531 1.06108e+06 +377533 847667 +377583 812128 +377589 774803 +377600 890772 +377622 848433 +377644 893350 +377661 1.08905e+06 +377667 1.20846e+06 +377692 906247 +377703 1.11601e+06 +377708 812086 +377733 1.13024e+06 +377739 890264 +377742 871133 +377750 1.22418e+06 +377753 879306 +377781 811883 +377792 964669 +377792 975361 +377800 864606 +377800 980194 +377800 1.21977e+06 +377806 804572 +377808 904217 +377814 891192 +377819 756539 +377831 812661 +377839 794431 +377889 971083 +377906 976292 +377931 819878 +377933 799942 +377944 935778 +377964 802978 +377975 797914 +377975 969994 +377975 1.20996e+06 +377975 1.21215e+06 +377992 882611 +378000 973181 +378017 804458 +378031 890275 +378044 1.2227e+06 +378067 1.00348e+06 +378092 854669 +378100 859814 +378106 954367 +378119 1.07664e+06 +378133 820247 +378136 884381 +378144 828072 +378158 811525 +378161 798247 +378172 968619 +378175 892278 +378206 889275 +378217 1.21999e+06 +378228 1.12435e+06 +378228 1.21276e+06 +378239 962889 +378242 820597 +378244 1.22231e+06 +378261 759919 +378286 922006 +378314 1.22284e+06 +378331 891428 +378333 866328 +378344 857319 +378347 973731 +378361 811350 +378361 875900 +378364 812019 +378367 905328 +378392 943544 +378397 947081 +378403 859492 +378406 886092 +378422 1.12827e+06 +378436 824094 +378456 838583 +378486 819936 +378492 1.06926e+06 +378500 997564 +378503 904986 +378503 1.22031e+06 +378511 905206 +378567 924050 +378589 808544 +378592 839186 +378592 1.22484e+06 +378619 846617 +378667 819867 +378672 905931 +378686 976647 +378714 1.09342e+06 +378717 1.22272e+06 +378728 905278 +378736 1.22456e+06 +378769 891144 +378772 1.22179e+06 +378803 862839 +378806 845731 +378811 957331 +378831 870494 +378858 1.22117e+06 +378869 1.22297e+06 +378883 894947 +378967 981783 +378978 889314 +378989 977825 +378994 890519 +379000 867550 +379061 1.22544e+06 +379064 1.22064e+06 +379086 881292 +379094 1.22685e+06 +379100 892358 +379103 853167 +379106 1.22279e+06 +379114 867444 +379136 898219 +379142 919025 +379161 951700 +379167 974222 +379169 952989 +379175 887622 +379214 832597 +379231 905553 +379231 994094 +379236 953458 +379244 953997 +379253 768594 +379256 1.22526e+06 +379331 753792 +379358 1.22347e+06 +379361 992522 +379364 907878 +379369 859917 +379369 869022 +379375 1.07812e+06 +379389 970194 +379403 918808 +379406 1.01254e+06 +379444 874053 +379481 1.2206e+06 +379489 922636 +379508 836258 +379514 867678 +379514 917711 +379533 1.20422e+06 +379578 1.2129e+06 +379586 767583 +379622 986003 +379622 1.22344e+06 +379631 806897 +379647 971472 +379681 913547 +379686 807672 +379717 1.00872e+06 +379725 890533 +379736 820175 +379736 838419 +379736 1.21694e+06 +379736 1.2253e+06 +379747 758342 +379747 815292 +379747 875558 +379747 1.22561e+06 +379772 1.22294e+06 +379781 1.2203e+06 +379797 1.01133e+06 +379806 1.01752e+06 +379811 883292 +379831 890161 +379833 758542 +379839 895894 +379842 1.20381e+06 +379850 1.03543e+06 +379861 1.00989e+06 +379872 1.22588e+06 +379883 857158 +379900 841797 +379917 920936 +379942 838878 +379953 867978 +379967 889200 +379969 1.03531e+06 +379975 1.21711e+06 +379978 1.20269e+06 +379989 861694 +379994 859436 +380014 975083 +380044 1.22298e+06 +380050 1.21805e+06 +380072 896583 +380081 927444 +380128 1.22644e+06 +380144 1.03628e+06 +380147 870364 +380150 1.21639e+06 +380153 890425 +380164 896186 +380172 1.22288e+06 +380228 1.07671e+06 +380239 976694 +380250 780044 +380269 1.21936e+06 +380281 979400 +380281 1.21884e+06 +380292 784769 +380300 790339 +380317 853425 +380331 1.22266e+06 +380372 848967 +380397 1.20232e+06 +380467 937042 +380467 973447 +380492 872742 +380494 773469 +380494 1.22158e+06 +380500 855458 +380522 1.02122e+06 +380525 847300 +380528 811042 +380564 839433 +380608 979294 +380628 914033 +380633 785028 +380639 1.0231e+06 +380667 1.03222e+06 +380669 818194 +380672 1.17229e+06 +380683 788897 +380694 787008 +380722 973453 +380756 755683 +380786 793833 +380803 893819 +380808 818342 +380831 900958 +380839 956342 +380844 998931 +380864 831264 +380872 1.0262e+06 +380875 1.06094e+06 +380903 899383 +380903 922925 +380908 881586 +380917 890503 +380933 885356 +380989 813242 +380992 875789 +380994 883375 +381042 1.22256e+06 +381050 857589 +381075 1.22569e+06 +381089 788578 +381111 858703 +381142 826033 +381161 825958 +381169 784419 +381200 869142 +381231 897017 +381236 857197 +381292 1.04023e+06 +381297 879350 +381303 1.21271e+06 +381344 977697 +381356 961356 +381361 810997 +381372 781881 +381375 1.20459e+06 +381378 892300 +381383 974311 +381400 937267 +381411 856878 +381428 948133 +381450 841114 +381472 980833 +381494 790719 +381503 926178 +381506 812875 +381522 1.21242e+06 +381542 1.213e+06 +381547 912439 +381558 1.2169e+06 +381597 855878 +381597 874483 +381600 856597 +381617 880653 +381619 834289 +381619 1.21611e+06 +381636 1.21149e+06 +381683 811950 +381689 869900 +381694 971064 +381700 877831 +381769 753931 +381778 947111 +381783 857097 +381803 813286 +381806 990983 +381811 813072 +381864 896056 +381867 919469 +381869 813656 +381875 877103 +381906 940292 +381942 855644 +381944 957425 +381950 856519 +381961 872967 +381961 1.20679e+06 +381969 856633 +381981 886844 +382000 858228 +382008 848733 +382019 790086 +382028 756928 +382031 975189 +382039 857253 +382050 875742 +382081 911603 +382097 842531 +382100 813842 +382100 982067 +382117 899942 +382119 852236 +382119 861219 +382119 896825 +382125 857403 +382142 856139 +382142 1.12923e+06 +382153 814247 +382181 814431 +382181 1.03756e+06 +382183 1.08568e+06 +382206 903958 +382211 903789 +382214 824425 +382225 853553 +382233 800947 +382239 868622 +382247 805333 +382289 856775 +382319 815378 +382319 977731 +382322 905628 +382325 1.22636e+06 +382369 859858 +382383 1.22039e+06 +382403 855242 +382431 933817 +382444 969278 +382453 781111 +382453 815672 +382456 870361 +382494 1.22039e+06 +382500 897500 +382511 875811 +382522 855922 +382542 857594 +382544 769639 +382544 1.04609e+06 +382547 856314 +382547 1.21299e+06 +382567 856017 +382575 879936 +382586 943303 +382614 856292 +382667 764542 +382667 855331 +382672 788261 +382678 856717 +382683 903800 +382694 1.08547e+06 +382717 846864 +382719 876878 +382722 855836 +382731 856231 +382739 856344 +382750 856150 +382769 1.1264e+06 +382786 821031 +382794 856500 +382806 952417 +382811 808528 +382825 855744 +382833 855911 +382833 903950 +382856 821958 +382856 858242 +382858 917203 +382911 766361 +382919 1.22457e+06 +382944 903158 +382972 856033 +382972 1.22284e+06 +382978 1.22491e+06 +382989 869550 +383000 831742 +383003 765078 +383017 916328 +383019 841475 +383028 855961 +383050 899942 +383056 856964 +383083 959556 +383106 854875 +383119 840275 +383139 1.22481e+06 +383150 919225 +383167 866958 +383172 889031 +383175 815211 +383219 756206 +383225 752181 +383239 774686 +383239 1.21821e+06 +383264 898769 +383269 1.22706e+06 +383294 891908 +383306 806533 +383308 887258 +383322 874453 +383325 829486 +383336 856536 +383344 864642 +383358 901497 +383364 750853 +383386 873450 +383397 1.227e+06 +383422 862761 +383436 893806 +383450 856156 +383450 982014 +383453 885878 +383456 915014 +383483 925814 +383483 970169 +383489 1.20773e+06 +383497 816328 +383500 947611 +383517 859417 +383519 972042 +383528 1.20932e+06 +383550 983492 +383553 875675 +383556 985806 +383567 1.21987e+06 +383606 755997 +383606 817375 +383642 1.22523e+06 +383644 987644 +383683 816997 +383700 851806 +383708 976639 +383722 965425 +383756 863447 +383775 880561 +383819 789769 +383819 975372 +383822 872128 +383861 974278 +383903 842942 +383903 1.05118e+06 +383908 933344 +383911 753489 +383914 869311 +383931 1.20801e+06 +383939 956028 +383953 754133 +383964 825589 +383969 1.1301e+06 +383975 943514 +383981 857550 +383981 980117 +383989 825783 +383997 913306 +384000 1.05217e+06 +384017 1.2236e+06 +384028 942536 +384039 961814 +384047 826006 +384069 875856 +384075 853789 +384078 786239 +384078 861100 +384086 899919 +384089 1.21371e+06 +384094 805581 +384094 822947 +384108 877614 +384147 789389 +384147 818442 +384167 958528 +384178 825864 +384192 824453 +384200 756881 +384200 820556 +384222 837339 +384275 899136 +384278 824572 +384292 1.05219e+06 +384314 928408 +384325 820203 +384328 903775 +384333 851697 +384342 895503 +384344 821325 +384364 1.22869e+06 +384369 823772 +384392 891628 +384406 1.22713e+06 +384408 929917 +384417 892742 +384428 814806 +384436 902011 +384456 910056 +384494 788692 +384528 999061 +384531 856703 +384558 755778 +384564 755775 +384597 940006 +384600 932025 +384603 752211 +384603 810853 +384614 900917 +384656 1.23008e+06 +384697 1.01752e+06 +384722 818144 +384731 779969 +384783 826381 +384783 1.07876e+06 +384794 946083 +384797 1.01358e+06 +384806 1.02781e+06 +384808 767783 +384817 943542 +384819 907414 +384819 1.00467e+06 +384819 1.20844e+06 +384825 1.00907e+06 +384850 786253 +384858 918503 +384886 813483 +384889 921742 +384897 766825 +384903 816475 +384903 897931 +384903 904869 +384919 872786 +384925 826903 +384961 1.21408e+06 +384972 949503 +385019 1.22995e+06 +385025 906278 +385033 826472 +385069 962617 +385086 906025 +385089 891406 +385094 818400 +385131 904358 +385158 884375 +385161 902103 +385172 752353 +385172 826978 +385181 987778 +385200 899839 +385208 880047 +385222 772939 +385225 827172 +385247 1.18624e+06 +385250 891333 +385250 985333 +385250 1.2197e+06 +385267 877097 +385314 993083 +385322 935219 +385325 767842 +385333 902869 +385339 899889 +385347 1.05998e+06 +385364 848419 +385364 859286 +385367 826831 +385369 903797 +385375 819325 +385386 903350 +385389 904072 +385400 827286 +385403 765847 +385411 902800 +385417 857678 +385419 902328 +385425 757197 +385433 896122 +385450 1.21739e+06 +385458 1.06925e+06 +385467 773369 +385489 866200 +385492 904925 +385503 827781 +385506 903331 +385531 903094 +385536 895383 +385542 903450 +385556 978333 +385561 864683 +385564 755717 +385569 903817 +385581 910119 +385594 835761 +385611 941911 +385614 898972 +385631 760792 +385672 866283 +385675 773283 +385708 901900 +385722 948789 +385731 828303 +385733 1.09549e+06 +385736 976742 +385753 771558 +385753 785028 +385758 1.22449e+06 +385767 921733 +385789 1.22579e+06 +385806 1.21529e+06 +385817 1.21493e+06 +385831 936944 +385833 901250 +385833 904067 +385869 984108 +385892 1.21302e+06 +385897 901200 +385903 769406 +385903 903367 +385908 822831 +385914 752917 +385922 899111 +385925 853178 +385925 903572 +385925 905869 +385950 905461 +385969 905092 +385992 833189 +386000 771625 +386008 904328 +386039 898072 +386050 1.07982e+06 +386056 894358 +386056 896819 +386067 896075 +386067 1.21266e+06 +386072 903833 +386075 903783 +386083 912189 +386086 771408 +386103 893725 +386106 895269 +386106 1.22868e+06 +386122 904633 +386125 903244 +386131 787992 +386153 873544 +386156 891142 +386156 952675 +386158 838086 +386172 890522 +386172 1.21327e+06 +386175 819819 +386175 903492 +386183 905892 +386194 946806 +386242 758547 +386244 769394 +386269 770733 +386269 889456 +386275 925664 +386283 910575 +386286 903194 +386300 1.1212e+06 +386339 958256 +386350 900928 +386356 756103 +386356 904150 +386367 900256 +386369 773114 +386381 845606 +386389 787742 +386403 921222 +386411 756114 +386411 837444 +386425 903236 +386450 828489 +386478 786717 +386497 900931 +386497 903806 +386514 862611 +386533 943486 +386556 837611 +386556 927797 +386581 772500 +386592 871728 +386608 904225 +386611 964917 +386617 864264 +386636 873094 +386644 807100 +386653 784597 +386653 903758 +386658 1.20925e+06 +386664 867911 +386675 770286 +386689 884856 +386703 899844 +386711 969422 +386722 901697 +386728 902992 +386731 807750 +386753 917694 +386764 1.21335e+06 +386767 843303 +386769 869142 +386772 875286 +386772 1.23134e+06 +386781 1.21175e+06 +386786 1.21225e+06 +386800 930928 +386808 851794 +386819 845900 +386822 1.047e+06 +386825 840658 +386825 901569 +386828 1.12148e+06 +386833 902839 +386833 903078 +386858 903239 +386858 1.21371e+06 +386861 765350 +386864 761719 +386886 883542 +386900 753858 +386900 903425 +386906 902872 +386911 1.21448e+06 +386922 1.22016e+06 +386931 902822 +386942 757739 +386947 902783 +386947 1.20814e+06 +386953 903139 +386967 768481 +386975 882236 +387000 902922 +387008 903497 +387011 903622 +387014 901486 +387019 903169 +387025 903433 +387042 772281 +387042 902817 +387042 914372 +387044 932281 +387058 877600 +387072 765314 +387072 1.2128e+06 +387078 770864 +387083 902928 +387106 902981 +387111 981569 +387131 904297 +387133 777956 +387142 854736 +387142 939911 +387144 903672 +387169 878614 +387175 902656 +387183 902922 +387183 950814 +387192 902603 +387192 944583 +387203 920911 +387208 750764 +387208 829583 +387208 902747 +387236 853694 +387236 899558 +387239 770100 +387253 902967 +387264 903586 +387275 903108 +387292 876817 +387292 898831 +387297 1.20798e+06 +387303 828556 +387306 982278 +387308 880853 +387314 799703 +387317 829978 +387317 900803 +387328 763939 +387358 853800 +387358 903639 +387383 771853 +387394 896711 +387400 903264 +387403 902264 +387422 1.08068e+06 +387425 756047 +387431 948253 +387442 903061 +387456 838450 +387458 786425 +387467 1.05178e+06 +387469 902400 +387475 770833 +387478 850672 +387483 899831 +387494 902856 +387508 774756 +387517 769789 +387522 829369 +387544 903311 +387547 828689 +387553 890953 +387553 950022 +387583 830292 +387583 858081 +387594 874156 +387614 1.20586e+06 +387628 937358 +387647 903136 +387647 950078 +387650 768986 +387650 935564 +387714 903708 +387717 840058 +387722 885025 +387725 772214 +387725 1.12083e+06 +387733 888467 +387742 760767 +387742 873078 +387744 751397 +387744 922569 +387750 951861 +387764 765556 +387775 753103 +387800 895981 +387806 955569 +387817 957383 +387819 771467 +387828 846053 +387833 849017 +387839 774700 +387861 829792 +387864 843697 +387864 897775 +387875 942692 +387878 902158 +387892 903225 +387908 1.21235e+06 +387931 774481 +387933 772719 +387933 902672 +387944 835453 +387956 967356 +387997 1.07719e+06 +388006 858417 +388019 813511 +388019 944525 +388033 769900 +388039 769069 +388042 772050 +388047 770472 +388061 871522 +388069 755917 +388072 753972 +388094 769983 +388097 822025 +388106 906997 +388108 949269 +388114 899531 +388114 908528 +388114 911414 +388119 945317 +388133 827269 +388139 769458 +388158 767500 +388183 771436 +388186 817108 +388186 956889 +388189 769989 +388208 785661 +388214 1.02353e+06 +388214 1.21192e+06 +388250 861700 +388250 984750 +388275 910200 +388278 895400 +388283 1.0797e+06 +388294 900628 +388300 768917 +388303 771967 +388328 769597 +388333 769519 +388336 821383 +388339 1.04821e+06 +388342 887722 +388389 774278 +388389 840964 +388403 976111 +388417 765125 +388422 1.06131e+06 +388428 869914 +388444 821372 +388450 768753 +388461 773067 +388467 919478 +388483 900761 +388517 943436 +388528 991472 +388533 913058 +388536 772597 +388561 806550 +388575 768897 +388589 961089 +388597 1.04917e+06 +388611 864872 +388611 900975 +388683 1.07591e+06 +388689 1.17921e+06 +388697 1.06987e+06 +388703 769214 +388711 874414 +388719 771556 +388747 929114 +388783 870858 +388789 860419 +388792 993264 +388794 823806 +388794 829969 +388803 901111 +388808 773011 +388814 948189 +388844 758275 +388850 769161 +388858 945328 +388875 765122 +388878 900847 +388883 897314 +388889 898453 +388906 901842 +388917 1.21292e+06 +388922 894131 +388933 772219 +388942 774314 +388950 770367 +388950 772119 +388953 988594 +388961 769069 +388964 871867 +388967 1.21076e+06 +388975 768306 +388978 1.01752e+06 +388983 900067 +389008 769158 +389008 865253 +389011 772656 +389017 1.07926e+06 +389028 971167 +389061 958158 +389092 900406 +389103 914481 +389106 1.22609e+06 +389125 754283 +389128 772011 +389144 900858 +389172 972136 +389178 839833 +389181 781947 +389186 772314 +389194 973708 +389206 886614 +389208 768719 +389222 1.11933e+06 +389231 942439 +389233 810961 +389236 755781 +389236 768803 +389250 892689 +389258 798469 +389281 769161 +389292 768619 +389314 898389 +389331 769461 +389339 768969 +389342 771778 +389342 808378 +389350 749064 +389350 1.05016e+06 +389378 764603 +389381 769486 +389381 995603 +389386 749422 +389392 769342 +389400 764953 +389414 769653 +389419 835725 +389431 768925 +389431 769569 +389431 845442 +389433 950983 +389453 769519 +389458 846806 +389458 1.1997e+06 +389467 769314 +389478 758847 +389481 817611 +389486 842800 +389489 834058 +389494 848539 +389517 923339 +389519 765783 +389536 947333 +389558 769458 +389561 903597 +389578 1.11859e+06 +389581 762106 +389592 858903 +389592 989683 +389606 890936 +389636 769911 +389636 934147 +389658 770964 +389667 946167 +389683 874056 +389686 773414 +389686 777358 +389689 1.12323e+06 +389694 773864 +389697 768803 +389700 904314 +389703 769422 +389711 770767 +389711 819144 +389717 952350 +389722 970222 +389736 758053 +389736 927431 +389747 748339 +389775 915047 +389778 770078 +389781 1.22838e+06 +389783 764925 +389786 799497 +389792 949683 +389794 765308 +389794 909806 +389806 749083 +389806 769372 +389806 771006 +389819 749583 +389822 946706 +389833 935683 +389858 1.19162e+06 +389864 819736 +389886 769817 +389886 783589 +389892 870822 +389906 770264 +389908 881625 +389917 748153 +389925 791242 +389939 769108 +389939 802322 +389939 1.05056e+06 +389953 1.10161e+06 +389958 889528 +389972 907383 +389975 819742 +389975 844964 +389981 772886 +389989 846267 +389989 895736 +389992 939533 +390006 747997 +390011 1.21021e+06 +390017 766878 +390017 820489 +390019 879089 +390031 769722 +390036 774008 +390036 876128 +390039 819892 +390044 768758 +390053 877392 +390061 856236 +390061 1.11861e+06 +390067 767794 +390078 838086 +390086 944633 +390089 754661 +390100 1.21422e+06 +390122 897911 +390125 846047 +390131 1.047e+06 +390144 748819 +390150 941983 +390167 846008 +390167 962889 +390169 942814 +390172 927372 +390175 1.22057e+06 +390178 850589 +390178 946167 +390181 918969 +390203 1.20817e+06 +390217 820292 +390217 844400 +390222 946317 +390236 946933 +390242 1.22674e+06 +390250 799358 +390250 998792 +390253 844175 +390253 885697 +390256 770767 +390264 769744 +390272 845850 +390275 820339 +390275 839197 +390278 946556 +390283 842178 +390286 749389 +390286 968311 +390294 895242 +390297 843664 +390303 770728 +390306 975939 +390319 765031 +390331 844519 +390344 843903 +390347 769078 +390347 871658 +390356 845692 +390356 1.04297e+06 +390375 946319 +390381 770933 +390383 804675 +390397 769933 +390397 901406 +390406 946167 +390417 760667 +390428 899517 +390431 1.08552e+06 +390431 1.22915e+06 +390444 953944 +390453 821306 +390483 956778 +390508 747583 +390514 845817 +390517 845342 +390536 765694 +390542 840531 +390561 985361 +390569 849014 +390575 769361 +390594 845475 +390597 948833 +390611 948194 +390619 883797 +390619 887481 +390622 789697 +390633 813953 +390639 1.0855e+06 +390644 1.09181e+06 +390681 830144 +390694 872600 +390694 1.00232e+06 +390703 765456 +390708 898561 +390714 845322 +390719 844728 +390719 852519 +390719 915700 +390722 897272 +390725 937169 +390750 844472 +390756 770022 +390758 953931 +390761 769581 +390769 841769 +390775 846031 +390794 770733 +390825 748242 +390833 782183 +390836 845086 +390839 767006 +390839 771531 +390892 893906 +390908 848500 +390911 944153 +390914 844958 +390917 1.04872e+06 +390919 768181 +390919 1.08448e+06 +390925 845475 +390928 846128 +390928 898039 +390936 1.11132e+06 +390953 874058 +390956 1.21551e+06 +390964 796811 +390992 768486 +390997 945783 +391008 1.20952e+06 +391011 747181 +391042 958583 +391064 844789 +391069 764853 +391072 765714 +391081 769981 +391094 876564 +391097 944444 +391097 950875 +391103 1.0835e+06 +391111 769328 +391111 967058 +391128 844728 +391133 755422 +391133 850881 +391136 826114 +391142 946272 +391156 775639 +391175 900442 +391178 772528 +391181 755592 +391200 885433 +391200 903283 +391211 846064 +391211 851314 +391219 977064 +391222 1.04917e+06 +391231 931967 +391233 825331 +391244 843617 +391247 852892 +391250 869794 +391253 1.11818e+06 +391278 1.2155e+06 +391297 898194 +391300 945619 +391308 894919 +391308 1.23165e+06 +391317 755253 +391319 755328 +391325 941983 +391331 884719 +391333 1.00863e+06 +391342 939825 +391350 858133 +391361 959514 +391361 1.03469e+06 +391367 777150 +391367 847092 +391369 766986 +391394 765481 +391397 771756 +391406 1.21616e+06 +391417 949383 +391433 772017 +391444 891086 +391450 843744 +391453 771444 +391458 774172 +391458 926836 +391458 1.2159e+06 +391489 794983 +391489 1.21666e+06 +391492 767756 +391503 1.23207e+06 +391517 779825 +391522 800406 +391525 847481 +391531 770672 +391531 846372 +391533 746933 +391542 945467 +391547 1.22148e+06 +391553 1.11818e+06 +391567 906178 +391569 846133 +391581 755247 +391589 1.08728e+06 +391592 843072 +391597 825269 +391597 1.21748e+06 +391611 803522 +391611 894936 +391617 847492 +391619 844569 +391625 766250 +391631 871992 +391639 1.19766e+06 +391642 894636 +391653 865264 +391667 765083 +391667 907808 +391697 918828 +391744 901431 +391753 842944 +391758 855731 +391772 767433 +391783 873936 +391792 987889 +391831 766406 +391831 945925 +391836 965714 +391847 938797 +391856 781636 +391864 873017 +391872 844464 +391872 844881 +391889 955694 +391908 843636 +391908 990283 +391911 1.06817e+06 +391928 844006 +391950 946819 +391958 952081 +391964 755492 +392008 804044 +392014 859214 +392019 963047 +392022 836117 +392025 944922 +392039 945544 +392047 760517 +392047 844281 +392053 843947 +392058 894044 +392089 760669 +392094 810519 +392094 935175 +392103 921378 +392106 843672 +392122 1.11019e+06 +392128 941225 +392133 970053 +392144 1.22008e+06 +392150 844556 +392153 953125 +392172 766375 +392181 930689 +392183 845508 +392192 1.2106e+06 +392214 944511 +392217 817975 +392231 845869 +392272 928464 +392272 1.11053e+06 +392275 822025 +392281 843542 +392283 766167 +392300 1.21076e+06 +392311 844658 +392319 843783 +392336 845458 +392339 866250 +392342 922806 +392347 992978 +392353 816314 +392369 850947 +392378 946958 +392378 1.20026e+06 +392403 768397 +392417 748156 +392419 764483 +392425 916453 +392458 750356 +392464 824786 +392464 845836 +392475 1.14888e+06 +392478 881633 +392478 957061 +392483 888622 +392486 873819 +392486 949000 +392506 765208 +392508 803125 +392508 1.06292e+06 +392519 844703 +392544 767003 +392561 844181 +392564 893481 +392567 802925 +392581 758375 +392617 1.21015e+06 +392619 848200 +392631 886297 +392633 803200 +392636 816294 +392639 1.03692e+06 +392667 815617 +392672 767986 +392681 844133 +392681 845231 +392683 1.11636e+06 +392692 803125 +392708 938342 +392719 767322 +392725 776369 +392725 915744 +392728 793647 +392736 882436 +392739 815731 +392739 977717 +392775 745750 +392786 939767 +392797 898817 +392806 803447 +392850 809686 +392864 802564 +392867 867625 +392869 844853 +392883 772042 +392886 803061 +392889 778600 +392903 766125 +392906 756347 +392931 839889 +392931 1.03067e+06 +392950 778608 +392958 859508 +392964 807772 +392964 1.19775e+06 +392989 968306 +392992 879925 +392997 756050 +392997 842633 +393000 852222 +393011 892850 +393022 904069 +393025 936772 +393039 857714 +393047 925125 +393061 1.02269e+06 +393078 1.23798e+06 +393092 764753 +393092 772975 +393108 914883 +393111 949222 +393122 846506 +393142 745253 +393142 776281 +393175 745950 +393183 843689 +393194 884528 +393194 895719 +393200 765158 +393222 952667 +393233 777531 +393236 836911 +393267 1.10964e+06 +393269 815486 +393278 745039 +393281 1.20182e+06 +393292 821014 +393331 829825 +393342 764397 +393356 878819 +393372 854836 +393383 764800 +393392 942258 +393397 852044 +393403 744778 +393406 767225 +393408 800192 +393419 787569 +393419 911950 +393433 954600 +393436 902125 +393450 835531 +393483 796711 +393483 974458 +393489 1.10851e+06 +393508 866669 +393508 1.0171e+06 +393519 833828 +393522 1.12576e+06 +393544 841272 +393567 978408 +393575 1.00441e+06 +393578 780403 +393583 934956 +393597 1.11586e+06 +393600 843100 +393603 1.04596e+06 +393633 765208 +393639 1.21692e+06 +393642 744233 +393647 998417 +393672 767956 +393678 943619 +393689 821325 +393689 1.07032e+06 +393703 947822 +393706 909050 +393708 842133 +393714 862611 +393722 1.04856e+06 +393736 769681 +393739 803486 +393742 767228 +393761 771550 +393772 765400 +393794 812586 +393817 752203 +393869 945808 +393878 889606 +393889 890800 +393914 876936 +393917 797486 +393931 793733 +393939 964133 +393942 765239 +393950 865625 +393956 803003 +393958 1.01052e+06 +393978 821294 +393983 793819 +394014 766022 +394022 1.07211e+06 +394036 769506 +394039 758678 +394050 1.14778e+06 +394064 887900 +394097 1.23354e+06 +394100 743650 +394111 949014 +394119 747428 +394125 764639 +394125 1.21712e+06 +394142 774108 +394153 814550 +394167 953333 +394175 766214 +394183 924381 +394186 775039 +394194 767806 +394200 894556 +394228 765850 +394231 850128 +394233 931303 +394239 928014 +394272 752344 +394278 864283 +394283 744961 +394300 778044 +394311 916750 +394344 929381 +394347 845369 +394356 1.21537e+06 +394369 904031 +394381 992647 +394383 942039 +394389 986944 +394406 925450 +394408 789742 +394408 885947 +394433 896517 +394453 838286 +394456 795467 +394458 1.23804e+06 +394464 897808 +394486 764181 +394489 910514 +394494 757167 +394522 747281 +394561 779642 +394561 981058 +394564 879961 +394575 777492 +394586 822319 +394619 821819 +394625 802183 +394650 874500 +394653 957361 +394667 874139 +394694 762047 +394694 768297 +394717 796836 +394728 765233 +394733 827394 +394736 814792 +394736 922097 +394736 1.18776e+06 +394739 829108 +394783 745756 +394800 845519 +394808 844578 +394808 920011 +394811 766442 +394817 1.06038e+06 +394825 1.11495e+06 +394831 883728 +394839 903714 +394847 820792 +394850 801428 +394853 790450 +394861 750261 +394861 773522 +394886 836369 +394889 961697 +394919 872672 +394922 809039 +394950 798153 +394961 881761 +394967 1.21551e+06 +395008 851864 +395008 897678 +395022 985464 +395031 787689 +395031 820847 +395036 801669 +395050 946331 +395069 847453 +395081 915286 +395106 797986 +395114 821636 +395125 984333 +395128 802492 +395136 749250 +395139 1.21555e+06 +395144 764114 +395147 867939 +395161 843764 +395203 890489 +395206 744861 +395208 861678 +395214 857769 +395219 947697 +395222 954006 +395225 887536 +395236 871250 +395244 1.22192e+06 +395250 1.1159e+06 +395258 871125 +395286 746483 +395297 801169 +395297 840867 +395297 1.19813e+06 +395306 790178 +395308 758078 +395308 803436 +395331 773150 +395331 880222 +395347 1.07782e+06 +395350 1.19752e+06 +395358 763486 +395367 871058 +395381 897631 +395392 863692 +395400 824072 +395419 771083 +395425 1.10735e+06 +395464 750253 +395469 1.11455e+06 +395478 816397 +395483 817931 +395483 943297 +395486 1.07656e+06 +395489 892944 +395492 760919 +395500 860797 +395506 1.07324e+06 +395514 1.10387e+06 +395522 797981 +395522 842333 +395522 940406 +395528 879394 +395539 832569 +395581 801819 +395581 860953 +395589 843042 +395592 742436 +395600 760717 +395608 753628 +395631 951214 +395642 809961 +395656 896572 +395656 944478 +395658 789806 +395672 972783 +395675 848161 +395689 771772 +395708 976622 +395717 754675 +395728 1.07536e+06 +395731 742319 +395744 1.06097e+06 +395753 769961 +395778 755892 +395778 822378 +395853 914008 +395856 902519 +395864 1.0643e+06 +395869 937958 +395886 894144 +395900 789500 +395911 973986 +395917 895803 +395917 897464 +395917 899528 +395928 788336 +395950 751706 +395956 748819 +395994 886078 +395994 1.1081e+06 +396000 759417 +396006 778208 +396006 829461 +396011 1.05032e+06 +396019 748431 +396025 820883 +396028 809369 +396031 743406 +396036 933422 +396044 764781 +396047 761156 +396047 768503 +396047 822117 +396047 828292 +396050 833956 +396067 758336 +396078 908050 +396089 777047 +396092 854464 +396108 945992 +396111 876961 +396117 799047 +396128 863742 +396133 1.05016e+06 +396144 787753 +396172 1.0495e+06 +396203 900439 +396206 777592 +396228 872833 +396236 774111 +396247 890189 +396264 1.11439e+06 +396283 1.05049e+06 +396289 902189 +396294 799561 +396297 904561 +396300 1.11634e+06 +396314 1.06522e+06 +396325 787847 +396333 1.05317e+06 +396344 799700 +396356 840708 +396356 849311 +396364 748028 +396375 1.06061e+06 +396400 891928 +396403 852622 +396403 1.06374e+06 +396414 787747 +396417 777203 +396417 1.04959e+06 +396428 741808 +396428 842867 +396442 775861 +396444 808578 +396444 868647 +396456 887381 +396458 799875 +396469 1.05025e+06 +396469 1.06951e+06 +396478 845272 +396478 1.04987e+06 +396486 818533 +396492 818622 +396494 827444 +396511 776911 +396514 753286 +396525 788972 +396528 787628 +396528 837869 +396533 755169 +396536 835639 +396536 917344 +396539 880261 +396547 775731 +396553 1.06828e+06 +396572 893894 +396578 771747 +396581 789286 +396581 837350 +396583 799867 +396600 750925 +396606 955261 +396611 768853 +396617 995700 +396619 741656 +396619 755667 +396636 794056 +396669 757272 +396697 742322 +396700 861314 +396714 981533 +396717 842528 +396733 856986 +396756 898467 +396761 897044 +396764 1.2024e+06 +396794 844292 +396803 874175 +396819 966594 +396831 776964 +396836 757500 +396842 1.10854e+06 +396847 839297 +396847 883064 +396861 749956 +396867 755847 +396883 1.23482e+06 +396892 865225 +396894 841689 +396911 967472 +396928 777450 +396928 787931 +396939 920428 +396942 910389 +396953 742592 +396956 788800 +396978 760631 +396989 781800 +397011 891231 +397017 824269 +397028 751122 +397044 773272 +397047 1.05081e+06 +397056 964167 +397061 842194 +397061 1.05697e+06 +397069 912067 +397083 913583 +397086 902281 +397089 907244 +397103 1.11836e+06 +397111 754706 +397119 888044 +397119 929481 +397128 889969 +397136 756097 +397136 825994 +397147 884722 +397156 756411 +397156 829531 +397156 886325 +397161 838778 +397183 829869 +397194 832653 +397211 822989 +397219 858892 +397253 899106 +397269 763269 +397278 764522 +397286 1.21836e+06 +397294 754683 +397294 1.04831e+06 +397322 748814 +397328 751319 +397339 902289 +397367 775353 +397378 767017 +397383 855719 +397383 1.04323e+06 +397389 798989 +397392 752244 +397392 755983 +397392 1.04984e+06 +397419 922583 +397422 924725 +397425 1.05013e+06 +397428 1.22012e+06 +397436 775542 +397436 939981 +397442 838086 +397444 770883 +397444 845322 +397453 843850 +397458 755469 +397469 925639 +397475 753108 +397475 1.22195e+06 +397478 815167 +397500 755000 +397508 944964 +397508 1.01532e+06 +397519 905350 +397528 790811 +397531 742233 +397531 1.05064e+06 +397536 765917 +397556 948722 +397556 1.05221e+06 +397558 775781 +397561 993236 +397572 896536 +397575 741067 +397589 841917 +397589 1.04427e+06 +397592 949494 +397606 865264 +397611 799817 +397611 868119 +397622 938042 +397625 811156 +397625 872292 +397656 808714 +397658 903989 +397661 755097 +397661 892617 +397661 1.05077e+06 +397669 990314 +397675 896806 +397683 861581 +397686 766800 +397689 820922 +397714 888742 +397761 859572 +397769 896792 +397792 987847 +397811 769636 +397817 928900 +397819 860503 +397831 950897 +397842 749925 +397844 930733 +397850 857694 +397853 759792 +397872 982097 +397894 769983 +397903 777281 +397911 749294 +397914 741956 +397928 873708 +397931 767306 +397931 1.23247e+06 +397942 915231 +397944 751492 +397953 935522 +397956 855264 +397969 885917 +397972 843114 +397975 842536 +397986 879858 +397989 827011 +397992 882831 +397994 884622 +398006 754600 +398017 896436 +398022 750644 +398022 862672 +398028 828064 +398028 1.05087e+06 +398031 798081 +398036 876736 +398058 920414 +398064 838869 +398067 1.01042e+06 +398069 822972 +398072 770117 +398072 820714 +398078 874950 +398089 755492 +398092 754869 +398094 893972 +398097 825222 +398097 863225 +398106 1.20468e+06 +398114 749833 +398119 771375 +398122 852089 +398125 851717 +398128 793569 +398136 790250 +398161 1.11855e+06 +398169 751556 +398169 912422 +398181 970506 +398183 1.00528e+06 +398192 754189 +398200 750067 +398208 840194 +398219 758278 +398222 1.04933e+06 +398231 787183 +398242 749981 +398244 976322 +398247 797547 +398253 836344 +398267 750158 +398269 805667 +398275 754147 +398278 779036 +398289 848903 +398303 752408 +398308 772314 +398311 905594 +398314 757578 +398339 998911 +398342 960639 +398367 844114 +398367 1.04959e+06 +398367 1.05037e+06 +398381 749653 +398381 751531 +398383 854389 +398386 860253 +398394 750739 +398403 825461 +398403 889547 +398411 966469 +398428 828047 +398433 863978 +398439 750231 +398439 841247 +398442 775586 +398442 895394 +398453 826008 +398461 845397 +398467 757119 +398467 799000 +398481 861725 +398483 810369 +398489 868022 +398494 753561 +398514 1.04998e+06 +398522 750683 +398525 894086 +398525 955356 +398528 894633 +398536 831831 +398536 892419 +398539 890839 +398539 891661 +398556 767078 +398556 767689 +398569 847933 +398583 748033 +398597 866425 +398600 753447 +398600 808156 +398611 819069 +398631 790583 +398636 770561 +398639 864669 +398647 750556 +398653 776128 +398658 751792 +398664 750286 +398675 750950 +398681 1.04971e+06 +398692 753828 +398728 899211 +398744 768661 +398769 870444 +398772 750650 +398772 797022 +398775 843022 +398781 751211 +398781 839369 +398783 750931 +398783 799250 +398789 829508 +398811 753242 +398814 830931 +398831 767108 +398842 827536 +398842 874086 +398850 906558 +398856 1.04987e+06 +398864 769850 +398878 900078 +398892 840267 +398892 943617 +398900 754758 +398900 861572 +398906 841989 +398906 887281 +398908 750733 +398908 752842 +398911 749222 +398914 750381 +398917 751167 +398917 753000 +398919 855769 +398922 747025 +398922 997067 +398925 797472 +398936 896047 +398939 968792 +398956 876519 +398964 801794 +398964 824203 +398967 799747 +398969 761639 +398975 830869 +398978 843064 +398992 820064 +398994 766406 +399000 752894 +399000 825342 +399008 750850 +399017 753289 +399019 753503 +399019 846750 +399022 958006 +399033 844856 +399044 844017 +399064 752719 +399089 766372 +399097 753239 +399097 878211 +399111 851617 +399117 752775 +399122 752542 +399136 868011 +399144 939619 +399147 882733 +399161 765847 +399167 753881 +399175 797175 +399181 750717 +399183 752594 +399203 807433 +399206 789581 +399206 1.05086e+06 +399214 752883 +399219 885719 +399231 772989 +399242 838089 +399258 751200 +399267 740775 +399267 741342 +399278 1.22178e+06 +399283 752742 +399286 749442 +399289 853703 +399292 752967 +399303 772483 +399322 858481 +399325 779992 +399325 889511 +399328 890619 +399336 824725 +399356 914097 +399358 741714 +399361 840256 +399375 776614 +399381 752722 +399386 888656 +399389 741933 +399389 752558 +399403 820133 +399417 948300 +399419 741503 +399419 742047 +399425 745444 +399442 740733 +399444 899372 +399453 799958 +399456 752617 +399472 750669 +399478 810575 +399481 743611 +399486 741375 +399486 874597 +399492 759739 +399508 862619 +399511 902122 +399522 751642 +399525 767517 +399531 1.119e+06 +399536 741983 +399542 895486 +399542 1.12119e+06 +399547 759972 +399547 828122 +399556 849175 +399556 860139 +399569 858053 +399583 841722 +399586 759197 +399594 825958 +399606 756058 +399608 897239 +399611 829989 +399614 1.0551e+06 +399617 824914 +399625 746792 +399625 767281 +399625 843281 +399633 752506 +399667 758000 +399667 828856 +399675 872775 +399678 847092 +399681 753417 +399686 891622 +399689 829378 +399697 815367 +399700 812994 +399703 740692 +399708 807508 +399719 746833 +399719 765203 +399742 758203 +399747 938008 +399756 1.11784e+06 +399778 796147 +399778 1.05131e+06 +399781 767333 +399783 861181 +399786 820036 +399814 740667 +399819 888228 +399825 772497 +399831 758242 +399831 761844 +399836 768228 +399853 1.0482e+06 +399861 882589 +399867 830617 +399869 951447 +399872 907633 +399881 807317 +399881 811767 +399928 747881 +399936 817342 +399936 1.05089e+06 +399947 844081 +399956 826744 +399958 866200 +399964 1.11842e+06 +399967 749931 +399967 795861 +399969 767069 +399975 857467 +399978 763544 +400017 768506 +400025 799983 +400064 757036 +400069 881581 +400083 752608 +400083 790783 +400089 771158 +400103 799011 +400108 892822 +400114 750153 +400114 783736 +400144 743117 +400150 1.0527e+06 +400158 741453 +400161 810728 +400175 904242 +400178 795897 +400181 807344 +400186 785042 +400192 828794 +400208 980697 +400214 1.22099e+06 +400217 767283 +400228 824447 +400242 798908 +400247 801003 +400250 880733 +400272 808153 +400278 748694 +400278 885733 +400289 756211 +400292 810392 +400297 746189 +400314 909606 +400322 859125 +400331 796617 +400333 831583 +400336 765047 +400347 879581 +400361 746183 +400361 755142 +400364 889569 +400375 1.07912e+06 +400378 763058 +400392 764311 +400392 910692 +400394 842033 +400411 868744 +400419 754767 +400422 876386 +400428 914975 +400444 1.11731e+06 +400456 860086 +400456 878306 +400467 941356 +400469 796547 +400481 901550 +400483 864692 +400492 1.01532e+06 +400497 849397 +400503 1.05049e+06 +400506 749539 +400506 775206 +400514 874333 +400514 945239 +400525 806286 +400531 1.11673e+06 +400547 882517 +400553 840261 +400569 765525 +400581 824014 +400589 1.06388e+06 +400608 956017 +400614 876381 +400631 767042 +400639 807211 +400650 877019 +400653 749194 +400653 800239 +400675 745311 +400681 749011 +400681 825197 +400683 858483 +400692 807839 +400697 753167 +400706 807611 +400711 748653 +400717 740547 +400736 1.04642e+06 +400756 798983 +400758 1.02223e+06 +400764 829439 +400789 936164 +400792 753019 +400794 798658 +400811 750900 +400819 830253 +400831 897381 +400833 798483 +400847 1.04812e+06 +400847 1.04939e+06 +400861 918131 +400861 1.05939e+06 +400869 797508 +400875 805706 +400875 870597 +400878 1.0881e+06 +400883 912836 +400886 829167 +400889 985192 +400911 740483 +400911 795878 +400931 830181 +400942 759117 +400953 876475 +400958 751256 +400958 807247 +400961 989522 +400975 993617 +400978 742181 +400992 1.04937e+06 +401003 795872 +401003 798408 +401003 895908 +401006 748522 +401011 800675 +401017 760856 +401028 846331 +401036 798694 +401053 856803 +401072 808414 +401075 832675 +401078 740569 +401083 837525 +401083 961542 +401083 1.04519e+06 +401092 910175 +401097 765036 +401100 867719 +401106 882072 +401108 767161 +401108 770353 +401119 800175 +401125 855969 +401125 1.04936e+06 +401131 872625 +401139 878731 +401139 879561 +401150 1.11654e+06 +401161 877783 +401164 882433 +401167 800086 +401172 821194 +401172 843539 +401178 804106 +401183 771903 +401189 788183 +401203 1.23822e+06 +401211 887453 +401211 905631 +401214 753403 +401214 820108 +401222 886453 +401222 966622 +401222 1.02725e+06 +401236 876533 +401239 860133 +401244 798800 +401244 876300 +401250 798667 +401250 916250 +401261 740497 +401261 829292 +401292 798683 +401292 994550 +401300 765708 +401303 755153 +401303 1.11578e+06 +401311 952314 +401314 750678 +401319 740350 +401322 844308 +401350 862206 +401364 747292 +401372 971803 +401375 998292 +401378 798983 +401392 748150 +401394 966589 +401408 977225 +401411 806883 +401417 873947 +401447 842425 +401461 747122 +401469 789122 +401483 798881 +401483 893647 +401489 1.02962e+06 +401494 810664 +401497 754022 +401497 771286 +401500 742139 +401503 740314 +401511 762514 +401511 799078 +401519 749169 +401528 766031 +401533 740286 +401536 826853 +401536 889644 +401539 797414 +401544 752219 +401544 807106 +401567 758331 +401567 762025 +401572 760508 +401572 763072 +401597 790667 +401606 1.03214e+06 +401614 790292 +401633 763953 +401633 1.10402e+06 +401639 959447 +401653 1.1161e+06 +401664 975856 +401667 807000 +401669 749181 +401672 1.05101e+06 +401675 921725 +401697 805939 +401708 740278 +401719 849814 +401733 798578 +401736 802378 +401736 854942 +401742 751072 +401744 749231 +401756 1.01012e+06 +401758 860217 +401767 755481 +401778 745839 +401783 740222 +401783 751289 +401786 834356 +401786 1.22235e+06 +401794 1.18472e+06 +401797 761792 +401808 754294 +401825 806914 +401831 798244 +401842 755383 +401856 754519 +401872 767303 +401878 851275 +401881 869039 +401889 852042 +401906 747028 +401917 852689 +401922 740164 +401933 853864 +401933 863606 +401944 1.10061e+06 +401947 925831 +401950 779833 +401950 866672 +401953 884042 +401964 762014 +401964 807753 +401989 754767 +401994 848053 +402000 740283 +402014 771892 +402017 980675 +402019 848092 +402019 1.00625e+06 +402022 740125 +402022 896981 +402022 931250 +402031 799264 +402053 742142 +402056 805569 +402067 751000 +402078 750731 +402078 799472 +402089 789839 +402097 797672 +402106 812664 +402108 752786 +402108 767914 +402114 761236 +402114 885061 +402144 846369 +402150 750111 +402150 1.04822e+06 +402153 782447 +402153 860264 +402169 747433 +402178 945381 +402186 808731 +402192 796097 +402200 744736 +402203 740125 +402203 889619 +402225 844844 +402228 857789 +402231 835575 +402233 769539 +402247 1.05271e+06 +402264 806517 +402269 789367 +402275 903594 +402297 1.00838e+06 +402300 909500 +402306 1.04072e+06 +402314 756344 +402319 927083 +402322 768850 +402331 761375 +402333 740161 +402333 910625 +402339 1.11658e+06 +402344 1.00417e+06 +402353 768417 +402361 740011 +402389 891231 +402394 756514 +402397 769203 +402397 788353 +402403 795769 +402411 760567 +402411 768944 +402414 752842 +402417 881842 +402419 743017 +402428 778933 +402431 740011 +402431 792378 +402433 886425 +402436 788492 +402450 755956 +402453 756500 +402456 748464 +402464 802117 +402469 867250 +402472 796775 +402483 996331 +402497 788492 +402503 1.03799e+06 +402525 756778 +402561 754642 +402589 768322 +402589 1.03623e+06 +402594 892333 +402600 742742 +402625 801875 +402628 769142 +402628 856758 +402639 744917 +402644 758044 +402647 806264 +402653 767086 +402681 967467 +402686 929531 +402692 798900 +402694 745236 +402694 857281 +402700 873867 +402708 798994 +402708 807817 +402719 806097 +402719 818597 +402722 816061 +402728 809969 +402736 764064 +402736 768847 +402750 769158 +402750 1.06958e+06 +402753 768483 +402753 817511 +402761 748494 +402769 858419 +402783 795450 +402794 753875 +402794 865108 +402808 742517 +402819 1.00165e+06 +402819 1.04777e+06 +402822 860411 +402842 841556 +402858 759847 +402858 766506 +402872 788897 +402883 752094 +402883 872939 +402892 850289 +402903 740181 +402908 788692 +402911 795472 +402917 793894 +402917 909189 +402922 798819 +402942 872489 +402942 904278 +402961 740514 +402967 784500 +402969 1.11694e+06 +402972 743586 +402986 830681 +402986 894850 +402989 751814 +402989 788925 +402992 839689 +402994 1.09988e+06 +403000 900608 +403008 852419 +403014 795392 +403031 969886 +403042 739928 +403042 741008 +403042 999000 +403044 826964 +403050 878006 +403056 896028 +403058 880211 +403064 1.21231e+06 +403078 759658 +403083 881558 +403083 1.05081e+06 +403089 765936 +403106 759397 +403106 789389 +403111 783244 +403117 753256 +403119 839158 +403133 889736 +403139 855006 +403144 891697 +403147 883500 +403156 798314 +403161 745142 +403172 746203 +403181 740156 +403200 756106 +403211 793797 +403217 806100 +403219 753283 +403231 793128 +403244 797014 +403247 798925 +403247 805778 +403253 809014 +403272 760114 +403275 805961 +403278 906069 +403281 758911 +403281 796156 +403283 747911 +403289 796414 +403294 759656 +403294 765156 +403294 1.04855e+06 +403300 760808 +403303 739819 +403325 984483 +403336 756378 +403336 759478 +403353 820069 +403356 759272 +403358 783911 +403358 798700 +403367 740475 +403367 754694 +403369 1.04912e+06 +403372 764758 +403375 759800 +403375 797136 +403386 856444 +403386 953931 +403392 767258 +403403 853508 +403408 764117 +403433 1.1172e+06 +403444 866653 +403453 756333 +403456 763903 +403461 742883 +403461 948722 +403469 925689 +403478 798644 +403486 746594 +403486 788839 +403489 851500 +403489 1.04701e+06 +403494 762136 +403506 798864 +403514 843739 +403514 903244 +403517 761347 +403519 887642 +403525 744406 +403539 753053 +403553 800497 +403561 801103 +403583 814344 +403592 914344 +403606 740386 +403611 837597 +403614 739744 +403617 761844 +403642 749517 +403642 1.11738e+06 +403647 800225 +403650 804142 +403658 749433 +403667 961958 +403672 769314 +403672 787917 +403678 810056 +403697 806342 +403706 799750 +403708 802350 +403717 752019 +403719 739994 +403719 752931 +403722 979711 +403725 895472 +403733 756294 +403742 867689 +403753 807039 +403756 823972 +403764 1.04692e+06 +403767 744250 +403769 1.11795e+06 +403772 1.05521e+06 +403781 939367 +403789 745469 +403792 876686 +403794 860886 +403803 790756 +403814 798600 +403817 824925 +403819 803931 +403831 798067 +403844 778825 +403856 797592 +403858 1.2228e+06 +403875 1.04561e+06 +403881 759183 +403886 786725 +403886 854994 +403908 754925 +403908 798103 +403917 743989 +403917 1.1185e+06 +403922 799003 +403922 800911 +403928 958386 +403931 813467 +403931 843761 +403931 901547 +403933 813339 +403933 824858 +403936 779414 +403936 797864 +403936 969225 +403939 799122 +403944 841728 +403947 814072 +403956 798389 +403958 800333 +403958 810850 +403964 913389 +403969 791519 +403969 888706 +403972 913847 +403978 1.05074e+06 +403981 770233 +403983 798900 +403986 794222 +403989 798411 +403997 746347 +404008 935803 +404019 835453 +404022 755875 +404031 797783 +404036 739919 +404058 798253 +404058 799122 +404064 755022 +404075 896428 +404078 740347 +404078 749786 +404086 759219 +404086 798392 +404086 800836 +404089 829556 +404092 925675 +404106 753786 +404125 798794 +404128 847764 +404131 795706 +404142 790203 +404142 799881 +404142 822411 +404147 742300 +404147 743658 +404153 856506 +404156 741914 +404164 1.20652e+06 +404167 868750 +404169 865947 +404172 798653 +404175 862714 +404183 1.01371e+06 +404189 805897 +404197 798503 +404203 917194 +404208 745611 +404208 894144 +404233 784342 +404233 1.04709e+06 +404236 798831 +404256 800942 +404258 786203 +404258 869081 +404258 897792 +404264 832969 +404264 907925 +404267 885261 +404272 783892 +404272 861256 +404311 792611 +404317 981056 +404331 742000 +404333 807719 +404336 893131 +404339 830739 +404344 800825 +404344 849778 +404347 892178 +404350 800664 +404369 843797 +404378 813733 +404383 798433 +404400 816992 +404403 953775 +404403 993694 +404406 799961 +404417 741303 +404417 753419 +404417 798822 +404456 950658 +404461 800678 +404464 741786 +404464 743864 +404469 759667 +404483 1.22297e+06 +404503 831886 +404511 853700 +404514 743083 +404533 1.11777e+06 +404539 758183 +404556 1.09528e+06 +404567 742469 +404578 921711 +404592 743614 +404592 906717 +404592 963772 +404597 785919 +404597 795233 +404603 880953 +404608 799511 +404614 836700 +404642 806011 +404650 878964 +404656 800658 +404672 876683 +404678 841806 +404681 769322 +404700 753208 +404711 838928 +404742 957333 +404756 854944 +404769 930031 +404772 1.09586e+06 +404775 1.04901e+06 +404778 742911 +404781 785411 +404781 859667 +404783 991264 +404792 792000 +404797 846283 +404797 856278 +404800 799786 +404803 863947 +404814 789189 +404814 969603 +404819 757581 +404822 785519 +404842 889936 +404847 780106 +404850 787250 +404850 1.06831e+06 +404861 744522 +404864 794517 +404864 861336 +404872 856131 +404875 944108 +404897 814458 +404897 1.11938e+06 +404906 870964 +404914 799050 +404919 1.07257e+06 +404933 798608 +404936 843147 +404944 896517 +404950 819847 +404967 806069 +404986 989475 +404992 743994 +405006 828936 +405008 759703 +405008 800678 +405031 786306 +405033 757017 +405042 799492 +405064 798433 +405067 742658 +405067 837481 +405083 858256 +405083 868417 +405100 800947 +405108 756033 +405114 753908 +405122 748597 +405122 1.11474e+06 +405142 889906 +405153 1.07546e+06 +405158 755556 +405169 1.01643e+06 +405183 801669 +405186 783950 +405194 808842 +405197 872478 +405206 814742 +405208 925278 +405211 873783 +405217 980550 +405219 1.11938e+06 +405222 800344 +405247 1.11863e+06 +405261 750619 +405267 996333 +405269 975956 +405275 894925 +405289 794617 +405294 891772 +405303 1.04711e+06 +405308 1.12298e+06 +405317 801692 +405322 914147 +405344 835206 +405364 801847 +405369 893575 +405394 754972 +405394 769611 +405408 745881 +405417 797994 +405431 743636 +405433 787881 +405433 791625 +405489 768122 +405489 784294 +405489 845703 +405492 828275 +405500 913847 +405508 948192 +405511 801931 +405528 905061 +405531 797575 +405533 745319 +405539 852775 +405544 819181 +405544 1.23182e+06 +405556 759822 +405561 908658 +405575 828625 +405581 900350 +405589 791514 +405622 1.11929e+06 +405631 802086 +405639 888989 +405644 871069 +405647 878931 +405667 767008 +405669 886164 +405675 882478 +405675 896406 +405678 841936 +405683 745389 +405686 750950 +405694 746333 +405694 774031 +405697 773972 +405697 797650 +405717 807267 +405719 857692 +405725 744931 +405725 898133 +405728 810858 +405733 766917 +405736 802358 +405742 746103 +405747 769894 +405764 1.24263e+06 +405772 742286 +405789 861903 +405792 744119 +405794 753411 +405800 797669 +405814 795667 +405825 1.04731e+06 +405833 909692 +405844 1.02302e+06 +405853 1.05084e+06 +405861 795317 +405861 983881 +405867 1.22391e+06 +405875 866750 +405883 736583 +405883 824250 +405886 831286 +405889 737294 +405892 744722 +405892 765528 +405892 802253 +405900 985058 +405903 998606 +405917 1.11883e+06 +405942 751947 +405947 815269 +405961 795558 +405969 880381 +405981 795614 +405983 760936 +405983 1.24156e+06 +406000 1.12464e+06 +406006 839753 +406011 813614 +406014 753956 +406014 797600 +406028 787089 +406028 795650 +406028 806492 +406028 868672 +406033 783250 +406042 736558 +406044 956575 +406050 777258 +406056 978589 +406058 889872 +406081 742781 +406081 797414 +406086 865400 +406097 1.11938e+06 +406111 1.11899e+06 +406114 798372 +406117 767189 +406128 894592 +406131 805631 +406150 896222 +406156 737300 +406167 873208 +406172 855047 +406175 896003 +406183 806044 +406186 805775 +406189 980969 +406197 1.11809e+06 +406200 825108 +406200 966289 +406211 904619 +406211 986572 +406214 791528 +406219 742450 +406225 808381 +406228 737247 +406228 939339 +406239 737089 +406256 1.03207e+06 +406264 753461 +406267 761931 +406283 763875 +406283 876961 +406297 892747 +406297 913150 +406300 744278 +406300 893325 +406300 1.00515e+06 +406306 761714 +406308 929244 +406319 737131 +406336 744078 +406350 802283 +406353 822333 +406356 1.04755e+06 +406358 782961 +406361 736819 +406361 911672 +406364 829692 +406367 791444 +406367 802403 +406369 975850 +406378 744514 +406386 736406 +406386 775689 +406386 1.11938e+06 +406403 917428 +406408 743111 +406408 743839 +406408 748817 +406411 1.02626e+06 +406414 887833 +406417 748364 +406419 736700 +406422 798511 +406425 742858 +406428 787731 +406428 915644 +406431 736961 +406431 775808 +406431 1.1128e+06 +406442 974500 +406444 804164 +406458 805981 +406461 1.11497e+06 +406469 836097 +406472 895911 +406472 971131 +406500 814522 +406503 896519 +406511 812992 +406531 815811 +406536 972858 +406539 750869 +406542 841508 +406547 736722 +406547 754750 +406547 761011 +406553 743903 +406572 961861 +406575 735836 +406578 849519 +406583 743000 +406586 736417 +406589 743478 +406594 743233 +406597 754772 +406597 802394 +406600 1.11996e+06 +406608 862419 +406625 787803 +406628 735519 +406631 868694 +406639 742111 +406639 775961 +406642 737089 +406642 742636 +406642 904347 +406644 742647 +406658 734886 +406661 806233 +406661 895800 +406669 751578 +406669 947211 +406669 1.11887e+06 +406672 813550 +406678 1.11938e+06 +406686 735275 +406686 741147 +406689 1.11824e+06 +406700 754958 +406706 782389 +406722 743578 +406733 805767 +406733 845189 +406733 921619 +406739 857214 +406764 742911 +406767 818706 +406767 958589 +406786 735894 +406786 752372 +406789 734175 +406789 736744 +406789 910728 +406792 804950 +406800 965061 +406800 1.22351e+06 +406803 734556 +406806 734747 +406806 1.2237e+06 +406814 734003 +406814 820219 +406825 931208 +406828 854272 +406833 744431 +406836 735106 +406842 746361 +406844 803292 +406844 896800 +406850 737022 +406856 761958 +406858 926772 +406861 754972 +406867 733739 +406867 841378 +406872 802717 +406875 802542 +406911 735636 +406914 735339 +406917 811814 +406917 897950 +406925 896278 +406928 837856 +406933 735081 +406936 751906 +406936 895889 +406953 803050 +406956 733261 +406958 800119 +406964 761692 +406967 749411 +406975 734256 +406983 744019 +406994 990811 +407000 802683 +407000 1.1181e+06 +407003 735933 +407008 734625 +407008 737133 +407011 742306 +407022 802867 +407036 894072 +407039 1.05008e+06 +407044 963872 +407047 736506 +407061 733067 +407061 838439 +407064 839214 +407064 933650 +407069 749564 +407069 815983 +407072 736764 +407086 732817 +407089 843536 +407092 1.12101e+06 +407106 902661 +407139 775908 +407139 1.16103e+06 +407142 733819 +407142 737006 +407142 740064 +407147 942350 +407150 880061 +407164 733222 +407167 914500 +407172 734842 +407181 733547 +407186 745697 +407189 1.11888e+06 +407192 736889 +407194 748361 +407194 761161 +407194 993717 +407206 734406 +407208 740178 +407214 892728 +407219 954806 +407236 737053 +407242 737156 +407244 815222 +407250 732458 +407256 753944 +407258 735147 +407264 788069 +407267 736347 +407278 730981 +407281 740781 +407294 760858 +407297 732108 +407297 811056 +407303 803103 +407303 919622 +407311 948994 +407311 1.22941e+06 +407317 1.06283e+06 +407319 731861 +407322 906644 +407336 778858 +407336 827900 +407350 736883 +407356 741728 +407358 730825 +407361 732631 +407372 1.14037e+06 +407383 730511 +407386 851717 +407386 995372 +407392 890164 +407394 743044 +407394 803294 +407397 937475 +407403 753100 +407408 736631 +407408 743842 +407408 752575 +407414 743600 +407417 887197 +407419 950381 +407431 731931 +407433 888814 +407439 740328 +407442 734825 +407453 867647 +407464 741567 +407469 909039 +407472 731703 +407472 885147 +407472 895739 +407478 785347 +407483 741622 +407483 756122 +407483 956472 +407483 988444 +407486 847911 +407492 736411 +407494 868717 +407503 786711 +407517 763364 +407517 818394 +407517 924147 +407519 803194 +407519 884111 +407525 736108 +407536 860689 +407536 882919 +407539 733608 +407539 752625 +407539 798103 +407542 755992 +407544 863567 +407553 736672 +407564 736453 +407567 881911 +407569 729397 +407569 933186 +407581 870417 +407583 736353 +407583 825156 +407589 735700 +407594 825903 +407597 744175 +407608 871508 +407608 1.1189e+06 +407617 733297 +407625 734536 +407631 769397 +407633 872936 +407656 730156 +407656 953719 +407664 894678 +407667 728525 +407667 879922 +407669 729967 +407672 742053 +407683 735256 +407683 741458 +407692 731156 +407692 800631 +407692 875639 +407694 740208 +407694 838228 +407700 1.24142e+06 +407703 874453 +407706 737181 +407706 742331 +407714 846156 +407719 983692 +407733 736436 +407739 742739 +407742 729433 +407744 785536 +407744 970503 +407756 777928 +407758 746011 +407761 877364 +407764 734678 +407775 929436 +407778 899664 +407786 900147 +407794 740242 +407797 978119 +407800 803386 +407808 736769 +407808 997411 +407811 732467 +407811 737250 +407811 766733 +407839 762306 +407842 746972 +407858 747806 +407861 737142 +407867 737269 +407869 730094 +407869 737372 +407872 812828 +407875 827367 +407878 740147 +407878 743886 +407883 741336 +407886 736000 +407886 736478 +407886 842039 +407889 765592 +407892 836433 +407894 740569 +407906 732022 +407906 893606 +407914 762839 +407919 740042 +407933 734156 +407933 764728 +407933 778603 +407936 736275 +407936 741506 +407942 736608 +407942 737489 +407944 801369 +407953 814736 +407958 743153 +407961 891972 +407972 759697 +407978 737000 +407978 858206 +407981 783975 +407986 736803 +407986 742394 +407989 768625 +407989 813786 +407989 816956 +407994 762128 +407994 780544 +407997 736514 +407997 756622 +407997 764281 +408000 966667 +408003 727903 +408006 737289 +408014 756106 +408017 835106 +408019 728414 +408022 1.24162e+06 +408025 737047 +408031 726150 +408031 749900 +408042 740125 +408042 763408 +408042 764653 +408042 821958 +408044 904017 +408050 819353 +408053 742042 +408067 737039 +408067 741858 +408072 736817 +408075 911128 +408083 829756 +408103 795297 +408106 778186 +408119 741247 +408122 730789 +408125 761419 +408153 730456 +408161 736978 +408164 736375 +408164 795222 +408167 964300 +408175 730006 +408178 800144 +408192 831306 +408197 737356 +408203 762011 +408203 879778 +408206 742942 +408206 985997 +408214 739881 +408217 744814 +408222 741603 +408231 726100 +408236 733992 +408236 759806 +408239 735481 +408244 726667 +408244 742850 +408250 783514 +408250 911564 +408256 732031 +408256 736986 +408258 742094 +408261 735025 +408264 741072 +408269 739761 +408272 832814 +408275 762072 +408292 853356 +408297 742406 +408297 750781 +408311 730300 +408317 758828 +408317 768361 +408325 1.15762e+06 +408336 757142 +408336 953081 +408339 740975 +408339 805406 +408342 740092 +408342 803225 +408347 736958 +408350 731317 +408356 803997 +408375 796322 +408381 857303 +408386 735656 +408389 898864 +408397 742769 +408403 740911 +408406 725819 +408408 743022 +408411 740456 +408417 962933 +408419 1.01725e+06 +408428 732933 +408431 737153 +408436 817642 +408447 737022 +408450 806147 +408453 733356 +408456 740883 +408475 776864 +408481 739981 +408481 752919 +408483 799622 +408486 768200 +408486 1.11906e+06 +408489 736453 +408500 782708 +408508 739706 +408517 737192 +408519 731544 +408528 731156 +408528 740425 +408531 741142 +408533 734119 +408539 748294 +408542 1.06965e+06 +408556 1.11892e+06 +408558 732011 +408561 731878 +408567 734700 +408567 741289 +408569 740219 +408581 740811 +408583 731000 +408583 741642 +408589 934972 +408597 999869 +408611 798956 +408614 739886 +408617 896786 +408622 736342 +408625 767947 +408625 856017 +408639 802592 +408644 758114 +408644 765528 +408644 864997 +408644 913144 +408656 735325 +408656 752069 +408658 907483 +408661 860775 +408664 730361 +408664 873636 +408667 1.24082e+06 +408672 980039 +408678 868789 +408681 734261 +408681 777469 +408681 975917 +408686 730019 +408686 752553 +408686 823183 +408689 725181 +408689 733656 +408689 742086 +408694 845842 +408700 961403 +408708 735114 +408711 747344 +408711 984678 +408714 734572 +408717 1.11891e+06 +408728 787244 +408758 745428 +408758 757328 +408758 814025 +408761 735769 +408761 740303 +408767 733250 +408772 807556 +408778 798467 +408778 882692 +408781 888611 +408789 769872 +408794 751842 +408803 879550 +408806 752150 +408806 851664 +408814 741136 +408814 826619 +408817 945617 +408822 740836 +408825 1.2166e+06 +408831 854975 +408831 895025 +408831 1.23983e+06 +408839 745625 +408842 723900 +408842 729378 +408853 739528 +408858 740439 +408858 782211 +408861 732578 +408869 735556 +408881 803383 +408883 738286 +408883 806942 +408894 1.1188e+06 +408897 741953 +408897 782286 +408897 815978 +408908 724642 +408908 774769 +408908 928150 +408917 767978 +408928 739731 +408931 745822 +408939 1.11901e+06 +408947 744333 +408953 736014 +408953 738075 +408953 838889 +408975 740164 +408983 956711 +408989 740931 +408989 747069 +408994 973992 +408997 734153 +409003 807642 +409008 733436 +409011 745147 +409022 817342 +409025 740622 +409025 744075 +409028 747094 +409033 731583 +409033 734603 +409039 741189 +409044 890344 +409050 742103 +409064 842967 +409069 970986 +409072 740756 +409083 902847 +409097 738083 +409100 759917 +409106 735625 +409114 737828 +409114 906472 +409117 859244 +409117 871553 +409125 733014 +409133 759669 +409133 777786 +409153 811061 +409167 741722 +409167 847028 +409169 726625 +409175 770481 +409175 965281 +409178 1.11399e+06 +409181 1.11871e+06 +409186 922228 +409192 892911 +409194 840569 +409222 894861 +409225 900144 +409228 810192 +409231 750969 +409231 809939 +409250 983417 +409253 730478 +409253 739633 +409253 742769 +409256 731414 +409258 746353 +409269 913994 +409275 739978 +409278 733603 +409278 737522 +409281 759150 +409286 740403 +409294 1.0016e+06 +409297 897575 +409297 949758 +409311 738992 +409319 909469 +409322 843389 +409328 724147 +409328 746597 +409328 803636 +409350 740194 +409353 879344 +409356 741867 +409367 871508 +409378 723014 +409381 738325 +409403 741322 +409406 739972 +409414 739597 +409417 777853 +409436 789711 +409444 740758 +409461 874533 +409464 730697 +409467 1.24099e+06 +409469 730300 +409478 903100 +409478 903711 +409481 797431 +409481 839611 +409486 737331 +409492 741542 +409494 725819 +409508 730844 +409519 764600 +409525 833825 +409550 741864 +409558 739317 +409561 729683 +409567 744983 +409572 729081 +409572 739639 +409583 759750 +409586 740372 +409586 759964 +409589 768994 +409597 729967 +409597 730683 +409597 731300 +409608 739906 +409622 828544 +409625 853733 +409628 741333 +409628 964408 +409633 711833 +409633 766131 +409636 813314 +409636 915578 +409644 768847 +409689 737131 +409700 816967 +409714 821100 +409731 739619 +409731 1.17735e+06 +409736 721442 +409747 848683 +409756 785253 +409761 740267 +409778 803453 +409781 817822 +409792 741169 +409806 736842 +409806 1.11887e+06 +409817 951039 +409819 931983 +409828 841994 +409836 739803 +409853 868794 +409858 747425 +409858 796133 +409867 751950 +409869 818939 +409883 1.02264e+06 +409892 741411 +409900 752167 +409900 887292 +409900 947406 +409911 725347 +409911 740331 +409919 760569 +409939 743039 +409942 921672 +409953 740125 +409956 723417 +409964 741017 +409978 722931 +409978 961619 +409981 739622 +409994 751817 +410006 857686 +410011 986072 +410017 736661 +410017 743675 +410017 793317 +410025 784636 +410028 738792 +410028 955850 +410031 879081 +410036 743419 +410036 885253 +410042 923736 +410050 737850 +410053 742911 +410061 764103 +410064 739494 +410081 911639 +410086 919625 +410094 741733 +410097 952253 +410100 818625 +410106 738442 +410106 739917 +410106 741183 +410114 958819 +410128 723133 +410128 816053 +410139 933064 +410144 738731 +410144 763814 +410161 721597 +410167 742061 +410167 758975 +410167 1.11498e+06 +410172 954019 +410186 864133 +410186 957989 +410189 737986 +410192 840472 +410208 814361 +410219 739478 +410233 740669 +410242 806150 +410242 806631 +410247 894111 +410250 807611 +410253 902797 +410256 817300 +410261 989122 +410264 819333 +410267 928056 +410275 941978 +410286 894383 +410289 840792 +410300 825158 +410308 779497 +410317 741025 +410322 1.11901e+06 +410333 820122 +410339 737633 +410339 937653 +410353 805367 +410353 1.11938e+06 +410358 719550 +410375 740411 +410381 742944 +410383 860281 +410389 738656 +410392 963681 +410414 741294 +410414 795033 +410417 939492 +410419 739186 +410442 836500 +410458 762825 +410464 813981 +410467 740233 +410469 957422 +410478 724636 +410492 880978 +410503 788225 +410514 866031 +410519 762211 +410519 830150 +410525 806081 +410525 890503 +410531 827264 +410533 735392 +410544 762336 +410547 797269 +410550 738206 +410572 741414 +410572 966444 +410581 747531 +410583 740989 +410586 943611 +410589 740222 +410603 1.1197e+06 +410606 757744 +410614 1.02074e+06 +410617 897731 +410619 762228 +410633 905558 +410639 800567 +410647 724267 +410647 828878 +410647 862158 +410681 723392 +410706 850144 +410722 858917 +410722 902253 +410758 775889 +410767 818964 +410775 847272 +410781 764147 +410783 805994 +410786 734697 +410797 878114 +410806 868919 +410811 1.11919e+06 +410814 815192 +410817 745928 +410819 961342 +410831 739206 +410844 768642 +410847 856281 +410856 738589 +410886 740139 +410892 906381 +410894 1.12064e+06 +410906 739183 +410928 1.0247e+06 +410936 898647 +410944 884250 +410958 796828 +410961 912575 +410964 739733 +410969 788889 +410972 1.04814e+06 +410983 839847 +410994 909425 +410997 806497 +411000 813467 +411003 821233 +411003 842664 +411014 814419 +411017 807647 +411019 767714 +411033 723597 +411039 826119 +411069 739206 +411072 737964 +411072 774847 +411075 837928 +411078 787714 +411083 835169 +411108 1.12025e+06 +411111 740689 +411114 893564 +411117 1.14964e+06 +411133 742458 +411142 975986 +411144 831781 +411147 741500 +411147 901644 +411158 980014 +411161 791869 +411169 809836 +411175 734083 +411181 739558 +411183 1.12083e+06 +411192 787603 +411200 878611 +411203 765303 +411208 888353 +411219 753650 +411219 830158 +411222 803331 +411231 914411 +411233 737794 +411239 741697 +411239 1.00765e+06 +411242 1.01356e+06 +411247 774300 +411253 848533 +411264 737144 +411264 774719 +411281 1.01719e+06 +411306 851289 +411325 1.11929e+06 +411333 1.04817e+06 +411339 814847 +411358 929039 +411364 740828 +411364 1.1203e+06 +411367 800094 +411367 958906 +411369 774472 +411381 845806 +411383 818639 +411408 962394 +411414 733583 +411417 878750 +411419 878611 +411428 890600 +411428 1.02978e+06 +411444 814400 +411450 788047 +411456 738242 +411458 774217 +411464 747528 +411472 916606 +411475 739897 +411506 739458 +411531 761506 +411533 745767 +411536 813581 +411539 807017 +411544 741933 +411544 960419 +411550 759786 +411564 805694 +411569 834169 +411569 1.01126e+06 +411572 854883 +411575 812422 +411578 800889 +411586 1.01002e+06 +411589 814544 +411594 814406 +411606 926311 +411611 790833 +411617 1.12026e+06 +411628 738619 +411656 808578 +411667 876628 +411669 732053 +411669 740436 +411675 900425 +411689 822181 +411703 909967 +411725 835564 +411725 923086 +411728 882767 +411728 1.11976e+06 +411733 860347 +411742 804536 +411747 918194 +411750 760750 +411769 1.12003e+06 +411772 744692 +411772 797081 +411772 896575 +411789 903158 +411797 975472 +411814 847406 +411814 911853 +411817 743825 +411819 1.04069e+06 +411822 937286 +411828 807656 +411828 836783 +411847 773142 +411856 883097 +411856 919928 +411883 809783 +411917 903800 +411919 1.11971e+06 +411922 974250 +411967 908803 +411969 759286 +411975 739650 +411992 798731 +411997 907492 +412003 857056 +412022 793278 +412031 905869 +412042 737275 +412044 928825 +412053 760053 +412053 960422 +412056 767858 +412069 830553 +412075 838992 +412083 738917 +412094 739858 +412094 1.06789e+06 +412097 746081 +412103 758969 +412108 849669 +412111 805381 +412114 966200 +412122 804969 +412125 924353 +412147 793856 +412150 867758 +412158 890667 +412189 864231 +412197 1.22274e+06 +412219 932411 +412222 730569 +412222 758633 +412225 742947 +412225 770372 +412231 1.11973e+06 +412269 802400 +412269 882647 +412272 858219 +412278 964875 +412283 851725 +412292 840342 +412306 853194 +412319 769994 +412325 956128 +412331 804936 +412339 805697 +412344 795375 +412350 810494 +412350 951372 +412358 1.03662e+06 +412367 954178 +412369 888314 +412375 808186 +412381 818419 +412381 858531 +412392 813461 +412397 816383 +412400 814408 +412400 836433 +412403 759450 +412411 767242 +412411 770014 +412411 815528 +412414 884194 +412425 826158 +412428 732011 +412450 759311 +412450 963969 +412456 899247 +412458 758817 +412464 832358 +412489 841331 +412492 787997 +412503 794597 +412506 878314 +412528 971297 +412539 836044 +412542 769208 +412542 893422 +412542 947681 +412544 823997 +412556 734353 +412558 1.22138e+06 +412561 830517 +412564 743603 +412586 959375 +412592 804722 +412597 906078 +412608 1.11769e+06 +412611 892275 +412611 961317 +412619 739386 +412619 958608 +412647 815133 +412650 882122 +412683 1.10962e+06 +412694 759167 +412706 729475 +412708 737781 +412725 820547 +412736 828417 +412753 758506 +412756 989664 +412761 728689 +412769 926794 +412781 758975 +412783 730261 +412786 725281 +412789 758786 +412794 725989 +412794 728156 +412797 767133 +412800 759125 +412800 913606 +412814 734986 +412814 1.11988e+06 +412833 701000 +412839 812242 +412842 810967 +412844 843558 +412853 723994 +412853 724481 +412861 804278 +412864 962342 +412872 845536 +412878 882856 +412878 993814 +412886 882517 +412889 726822 +412889 758058 +412889 915522 +412897 945614 +412900 739208 +412906 959178 +412917 723767 +412917 758750 +412917 934422 +412919 999222 +412922 895061 +412931 847619 +412939 822175 +412939 902919 +412942 882711 +412953 890594 +412956 861164 +412958 897903 +412964 926442 +412975 826056 +412981 1.12085e+06 +412992 916928 +413036 901928 +413042 829753 +413053 944611 +413072 1.11959e+06 +413078 881467 +413081 729286 +413083 741450 +413089 820058 +413097 742294 +413100 721458 +413100 1.22309e+06 +413111 886097 +413114 1.05591e+06 +413117 758378 +413125 811439 +413125 814403 +413128 963458 +413136 817247 +413139 816853 +413144 818358 +413164 730936 +413167 870258 +413175 868914 +413186 872003 +413189 905058 +413197 758464 +413197 816269 +413206 730894 +413206 758194 +413208 931092 +413217 802589 +413231 777486 +413242 834386 +413250 757458 +413253 721936 +413253 824933 +413256 856978 +413258 757897 +413261 896789 +413264 777511 +413269 757736 +413275 757933 +413275 891289 +413275 891997 +413275 1.10292e+06 +413278 719911 +413278 831322 +413297 906703 +413303 807256 +413306 741872 +413308 887081 +413308 940136 +413317 741214 +413317 743572 +413319 858500 +413322 877853 +413333 922044 +413336 888781 +413358 719064 +413361 759636 +413367 755189 +413392 801053 +413397 757367 +413406 876214 +413436 863097 +413439 757389 +413447 837972 +413450 720253 +413450 815286 +413456 888425 +413458 813953 +413461 730794 +413469 741267 +413486 800825 +413494 851356 +413500 720789 +413503 831219 +413506 719825 +413533 723911 +413533 757386 +413542 719669 +413547 903814 +413556 721000 +413558 822539 +413572 884211 +413578 891761 +413581 935572 +413583 897372 +413614 818131 +413625 742717 +413633 979689 +413639 919536 +413647 961575 +413650 958578 +413653 895839 +413656 815614 +413658 852389 +413661 818544 +413669 799294 +413669 850589 +413681 894647 +413683 821078 +413692 739667 +413711 734144 +413714 839419 +413722 737339 +413747 836514 +413750 746931 +413750 819083 +413772 718342 +413775 718278 +413825 892189 +413833 760250 +413844 833206 +413856 724361 +413858 932692 +413889 705139 +413897 814414 +413900 817597 +413906 809736 +413908 728600 +413914 739564 +413922 841253 +413931 815367 +413947 734544 +413947 757069 +413953 816764 +413969 966111 +413972 736175 +413972 899044 +413978 822225 +413983 818047 +413989 717475 +414000 747236 +414000 828086 +414014 923544 +414019 743247 +414019 996389 +414031 724514 +414036 950136 +414039 881117 +414047 817231 +414050 1.02344e+06 +414061 736331 +414081 929161 +414089 756628 +414092 741956 +414092 1.12035e+06 +414097 797119 +414108 834611 +414119 838644 +414139 733039 +414153 815661 +414156 819236 +414169 815275 +414169 816061 +414169 873653 +414181 864858 +414189 832214 +414197 756328 +414200 877417 +414203 787289 +414208 900150 +414211 820964 +414214 798814 +414219 823647 +414225 879858 +414225 1.00193e+06 +414228 1.22385e+06 +414233 717861 +414244 739469 +414253 816883 +414269 892133 +414278 741664 +414278 857525 +414286 904608 +414294 882286 +414297 720825 +414297 813908 +414297 848714 +414297 973681 +414306 868983 +414314 813656 +414322 714569 +414333 964978 +414344 721103 +414347 815258 +414350 815364 +414353 816575 +414392 740456 +414392 907175 +414397 817356 +414414 818644 +414414 852650 +414428 860014 +414433 840089 +414442 744003 +414444 876314 +414453 947644 +414458 744233 +414464 861481 +414472 970592 +414478 814278 +414481 901542 +414486 847481 +414486 977303 +414489 827081 +414489 956153 +414500 816636 +414506 834875 +414514 756122 +414517 820356 +414525 963508 +414528 821825 +414531 905719 +414542 705625 +414542 706042 +414542 740581 +414550 1.06806e+06 +414553 819181 +414553 882617 +414558 960261 +414564 907233 +414569 728236 +414569 1.22894e+06 +414594 934047 +414614 736714 +414619 810739 +414619 967794 +414622 814808 +414642 918381 +414644 815089 +414647 837061 +414658 855875 +414667 864831 +414683 756033 +414686 755625 +414689 796911 +414700 876364 +414700 926511 +414706 811453 +414714 756081 +414731 870611 +414731 903575 +414733 745389 +414739 815372 +414747 845525 +414756 818394 +414756 936786 +414758 751825 +414761 832958 +414767 740242 +414767 953378 +414775 952217 +414783 814639 +414803 715231 +414806 866917 +414808 755950 +414808 876378 +414814 743606 +414817 726817 +414819 817983 +414828 873328 +414831 917058 +414839 742181 +414839 903531 +414844 877033 +414847 819222 +414858 730511 +414872 1.20541e+06 +414875 821017 +414881 914258 +414883 875675 +414886 757089 +414892 814019 +414900 713133 +414914 876744 +414919 941239 +414928 757000 +414942 875217 +414947 755372 +414947 903906 +414953 794561 +414958 878486 +414961 853767 +414969 713678 +414969 725575 +414978 815375 +414989 729011 +414994 816956 +415003 858281 +415006 874614 +415006 946433 +415008 837183 +415008 904442 +415008 934908 +415028 724506 +415033 740108 +415033 943183 +415036 844142 +415039 877131 +415047 739700 +415053 820283 +415061 876356 +415061 881144 +415064 875917 +415067 905150 +415075 717167 +415089 907658 +415094 905786 +415103 1.12015e+06 +415119 829378 +415119 879656 +415122 782353 +415122 904150 +415133 876742 +415139 920761 +415161 954500 +415175 814036 +415183 942261 +415189 838039 +415192 814581 +415200 800486 +415200 814889 +415200 815564 +415200 882017 +415214 843072 +415217 739269 +415222 813381 +415222 931017 +415231 815186 +415236 905775 +415242 720764 +415242 764011 +415244 862733 +415244 905156 +415250 880817 +415256 741533 +415258 853667 +415261 878892 +415264 706736 +415264 875386 +415272 850656 +415275 742372 +415283 874236 +415286 1.09466e+06 +415300 886797 +415306 739781 +415308 755458 +415317 940094 +415319 939539 +415322 872550 +415331 815792 +415342 757364 +415342 864272 +415347 740153 +415350 740706 +415350 808683 +415356 738994 +415356 878475 +415369 885833 +415381 728075 +415386 759469 +415392 855397 +415397 740986 +415414 869006 +415425 816264 +415425 876022 +415428 876847 +415439 738686 +415444 732094 +415444 961247 +415472 891175 +415475 865822 +415486 985308 +415486 987306 +415492 841417 +415511 1.12109e+06 +415514 706153 +415519 814786 +415528 815103 +415542 915347 +415547 880986 +415558 904092 +415564 847689 +415564 958875 +415569 836272 +415572 876656 +415575 894608 +415581 730519 +415583 872744 +415600 740036 +415619 736031 +415622 726511 +415644 875125 +415647 875389 +415661 834247 +415681 876081 +415681 877203 +415689 1.11837e+06 +415700 912636 +415717 876944 +415728 726411 +415733 877844 +415736 755022 +415736 840053 +415736 876464 +415750 872389 +415756 723325 +415758 725031 +415758 871761 +415767 744875 +415767 752592 +415769 734089 +415772 937111 +415783 705592 +415783 928447 +415803 754086 +415817 903433 +415833 875000 +415839 738092 +415839 935197 +415847 907719 +415853 878431 +415858 925272 +415861 844350 +415869 712839 +415875 1.09202e+06 +415878 834933 +415886 838911 +415889 910167 +415894 880578 +415894 889219 +415894 941958 +415908 948753 +415917 950597 +415931 815269 +415933 730858 +415933 873464 +415964 739114 +415978 937081 +415983 814186 +415994 932350 +415997 909106 +416006 936089 +416008 876069 +416028 877439 +416031 937239 +416033 803056 +416033 989258 +416056 739719 +416056 741844 +416061 738733 +416064 903353 +416067 719814 +416067 805725 +416078 1.22839e+06 +416097 835644 +416100 876467 +416106 867225 +416106 965478 +416111 876347 +416117 938850 +416125 887994 +416136 901728 +416142 760469 +416142 811492 +416144 940172 +416147 1.12126e+06 +416156 870742 +416156 875294 +416186 813842 +416217 837117 +416228 738711 +416239 813072 +416253 877175 +416258 712139 +416258 871903 +416261 757808 +416267 937119 +416269 796739 +416269 882039 +416283 703875 +416289 813617 +416303 878539 +416303 897861 +416311 780917 +416314 724603 +416317 876608 +416331 754708 +416331 814689 +416336 886811 +416342 1.11851e+06 +416347 849994 +416353 727692 +416361 709347 +416378 859217 +416386 1.11933e+06 +416386 1.12079e+06 +416389 875567 +416389 876072 +416392 874547 +416397 732089 +416397 814067 +416406 993708 +416411 884472 +416414 801517 +416417 854167 +416431 957886 +416436 834869 +416439 877036 +416442 934644 +416458 886217 +416475 880894 +416500 702417 +416514 754669 +416525 797272 +416528 702833 +416531 953253 +416539 814506 +416556 738753 +416556 746897 +416561 804242 +416564 768536 +416564 900792 +416572 876800 +416581 905844 +416583 701292 +416583 708167 +416603 808608 +416611 727800 +416611 877525 +416611 915300 +416611 920089 +416619 861586 +416628 788114 +416628 876606 +416628 885369 +416639 835553 +416642 836433 +416644 701733 +416650 860758 +416653 1.03099e+06 +416658 814433 +416658 1.11181e+06 +416661 813397 +416667 701853 +416667 966656 +416672 878303 +416681 762622 +416681 877964 +416686 933575 +416689 877386 +416714 899361 +416714 913464 +416717 729497 +416731 936975 +416731 1.07979e+06 +416733 843269 +416736 880017 +416747 903403 +416750 712711 +416750 733522 +416764 719156 +416764 915803 +416772 945031 +416778 932450 +416781 730114 +416794 721708 +416794 770642 +416797 874944 +416800 845531 +416803 903189 +416811 699917 +416817 1.11822e+06 +416819 699603 +416819 859767 +416819 869603 +416828 883514 +416833 862500 +416842 877003 +416844 939608 +416861 700764 +416883 937908 +416889 889811 +416889 983631 +416897 877972 +416908 980033 +416917 943628 +416917 974842 +416919 713792 +416925 869775 +416947 740517 +416967 878169 +416972 862450 +416975 905825 +416978 727242 +416983 868592 +416986 880683 +416994 840703 +416997 930478 +417000 703000 +417000 707633 +417003 739214 +417003 865094 +417006 934619 +417014 711556 +417014 877792 +417019 702500 +417039 790358 +417050 813606 +417053 972378 +417061 715236 +417064 1.11816e+06 +417075 868950 +417092 746289 +417103 865342 +417106 722086 +417106 745747 +417117 839097 +417119 1.12165e+06 +417122 726086 +417128 718814 +417142 726531 +417142 893286 +417161 862525 +417169 743961 +417175 899258 +417181 929072 +417181 949322 +417183 738531 +417189 801478 +417189 837131 +417194 842181 +417206 877017 +417208 739606 +417208 877542 +417211 968825 +417214 858175 +417217 1.11821e+06 +417233 917903 +417244 732367 +417244 812458 +417250 970025 +417256 786386 +417256 878250 +417267 971219 +417278 844189 +417283 1.22527e+06 +417297 936056 +417306 883458 +417308 849328 +417317 922978 +417331 776422 +417336 924453 +417344 877314 +417356 1.11834e+06 +417356 1.22633e+06 +417383 957025 +417406 713092 +417408 878603 +417411 705994 +417411 735769 +417411 1.12161e+06 +417417 706583 +417431 927222 +417439 743719 +417444 878378 +417453 706186 +417456 868508 +417472 731892 +417475 740872 +417486 773008 +417489 879183 +417492 915978 +417500 878042 +417500 977750 +417550 1.03324e+06 +417561 1.24201e+06 +417578 803681 +417589 704944 +417600 700833 +417603 811411 +417606 883200 +417611 938242 +417619 727425 +417619 1.08966e+06 +417625 707222 +417628 878000 +417636 726856 +417653 721986 +417658 836281 +417675 764431 +417681 888769 +417689 878578 +417689 886408 +417694 711292 +417694 1.11804e+06 +417697 911278 +417700 705289 +417703 879022 +417711 730603 +417711 810500 +417714 937128 +417717 887736 +417747 742986 +417747 780208 +417750 1.07112e+06 +417756 954172 +417758 725219 +417783 962208 +417794 1.10538e+06 +417797 714378 +417797 896889 +417800 790933 +417808 749342 +417817 991328 +417822 726125 +417828 878781 +417850 736944 +417858 881472 +417881 902561 +417886 896961 +417894 902192 +417897 699903 +417897 707608 +417911 1.07238e+06 +417925 1.10537e+06 +417939 867439 +417956 860808 +417958 879756 +417967 718978 +417975 879547 +417981 856433 +417981 864992 +417981 920706 +417986 866106 +417989 1.11818e+06 +417992 854192 +418006 731217 +418006 803692 +418008 879369 +418011 747469 +418011 880747 +418019 810492 +418025 718864 +418036 800567 +418061 883272 +418069 834425 +418072 770778 +418072 914939 +418083 722500 +418086 877933 +418089 880111 +418094 1.03503e+06 +418097 728311 +418097 879006 +418097 899650 +418108 782800 +418111 784450 +418128 729206 +418133 878181 +418136 713706 +418178 881733 +418214 877828 +418233 905381 +418239 714133 +418239 878517 +418242 906478 +418244 728942 +418258 1.0366e+06 +418261 931514 +418272 863611 +418281 866925 +418283 974547 +418289 740689 +418297 862542 +418317 908381 +418325 838625 +418328 879289 +418347 878617 +418350 878228 +418358 964667 +418383 1.11832e+06 +418386 941069 +418389 894794 +418394 847481 +418411 856686 +418417 893003 +418417 967083 +418428 878231 +418439 791453 +418444 901886 +418456 877539 +418456 916928 +418458 709500 +418472 853186 +418475 1.03661e+06 +418492 735572 +418500 876500 +418500 879644 +418500 883125 +418506 877936 +418506 878819 +418519 945581 +418525 726442 +418544 956003 +418550 843539 +418569 939217 +418575 909281 +418594 809542 +418617 881608 +418628 1.1199e+06 +418639 711250 +418639 878533 +418650 699917 +418650 807900 +418661 881069 +418661 892211 +418667 1.03667e+06 +418672 901594 +418700 1.06561e+06 +418708 786617 +418708 946772 +418711 715525 +418722 851947 +418725 757275 +418728 807731 +418731 728586 +418742 791525 +418742 801319 +418758 728017 +418767 938231 +418775 880669 +418778 879028 +418778 936783 +418786 713831 +418789 927892 +418792 878431 +418800 880078 +418814 878831 +418822 729775 +418847 882039 +418850 877844 +418875 883053 +418889 837789 +418889 879033 +418889 910564 +418897 879889 +418897 952319 +418906 713928 +418908 806764 +418919 933994 +418922 884722 +418931 911506 +418956 1.06204e+06 +418969 922781 +418975 840372 +418978 878139 +418983 935289 +418994 798456 +418994 879403 +419000 710903 +419003 748286 +419006 878567 +419011 837150 +419028 919214 +419039 777622 +419044 912544 +419050 803439 +419053 739767 +419056 878836 +419058 806906 +419067 713911 +419075 885992 +419086 727606 +419086 771333 +419092 950647 +419094 920842 +419103 880717 +419117 860100 +419125 881347 +419150 719094 +419164 833978 +419172 878956 +419172 1.04039e+06 +419183 834306 +419192 775392 +419194 917808 +419200 846306 +419200 886886 +419203 796406 +419203 1.12049e+06 +419211 730606 +419211 878092 +419211 913853 +419219 914167 +419228 1.11813e+06 +419233 855283 +419236 710528 +419239 890686 +419244 740617 +419258 878358 +419267 739131 +419269 739978 +419289 954936 +419292 726278 +419294 887503 +419297 888608 +419300 968114 +419308 889644 +419311 833269 +419317 879889 +419353 878656 +419375 964769 +419386 761361 +419389 719600 +419403 850006 +419403 1.03808e+06 +419414 931031 +419439 856325 +419442 848839 +419444 712861 +419464 863389 +419475 805544 +419503 972236 +419508 882422 +419511 890644 +419536 735111 +419539 727892 +419539 752808 +419539 860647 +419542 723028 +419550 879400 +419556 717028 +419558 786442 +419558 878708 +419561 1.21476e+06 +419572 765183 +419572 836597 +419575 864856 +419575 880808 +419578 783856 +419583 706678 +419583 853250 +419589 900992 +419611 757436 +419633 878272 +419633 879789 +419633 897744 +419633 1.03926e+06 +419636 781911 +419639 908175 +419656 716750 +419667 711875 +419667 925767 +419672 878075 +419675 1.21917e+06 +419708 845258 +419717 757436 +419750 880072 +419758 1.11856e+06 +419761 725922 +419767 714592 +419789 765158 +419797 736564 +419817 726511 +419825 793389 +419833 980833 +419836 909561 +419842 846619 +419842 861086 +419847 880797 +419850 862997 +419853 724467 +419856 718992 +419856 739886 +419861 773111 +419861 895792 +419864 843472 +419867 838311 +419872 725453 +419872 969139 +419889 886867 +419903 709756 +419942 882922 +419944 707250 +419950 881856 +419956 919675 +419956 925767 +419969 918619 +419972 741053 +419975 765375 +419981 911414 +419983 921972 +419994 881450 +419994 975981 +420003 803183 +420022 906069 +420028 715153 +420036 798111 +420039 839450 +420039 879703 +420044 877300 +420061 841900 +420064 854500 +420069 927753 +420075 962494 +420083 916439 +420086 920908 +420111 878406 +420128 965725 +420128 1.21408e+06 +420133 898906 +420144 865194 +420147 893322 +420153 943772 +420161 767272 +420167 740767 +420167 931633 +420178 933150 +420178 953550 +420181 740153 +420189 878028 +420225 945450 +420228 934522 +420231 706833 +420236 719503 +420253 1.21599e+06 +420256 881783 +420258 858156 +420267 960969 +420272 733297 +420317 942406 +420333 712194 +420333 877333 +420333 878833 +420333 880833 +420342 915975 +420347 936197 +420358 916819 +420372 882811 +420386 783411 +420392 940275 +420406 877825 +420411 876900 +420417 706728 +420428 880797 +420428 1.01042e+06 +420431 733456 +420436 739478 +420439 847575 +420456 802700 +420472 978336 +420494 929078 +420500 718806 +420500 725833 +420503 894311 +420503 904139 +420528 1.24283e+06 +420533 1.24266e+06 +420544 791583 +420544 1.04952e+06 +420569 947286 +420583 701792 +420583 739097 +420592 833908 +420592 910072 +420594 914425 +420597 938800 +420600 754281 +420639 832611 +420650 864950 +420650 1.04181e+06 +420658 948667 +420661 917953 +420664 879372 +420667 851361 +420683 955914 +420689 906656 +420694 761550 +420700 843306 +420708 832467 +420711 901739 +420711 916667 +420719 839717 +420722 717139 +420722 877228 +420750 708806 +420750 720339 +420750 794833 +420758 756408 +420775 739533 +420775 784300 +420781 768456 +420825 1.10954e+06 +420833 710189 +420833 713972 +420842 880131 +420853 836825 +420858 877175 +420864 779225 +420867 714750 +420869 864558 +420886 852347 +420897 768081 +420900 784944 +420914 881217 +420917 707061 +420925 888511 +420931 707931 +420933 849858 +420936 926756 +420942 883025 +420944 901567 +420944 918692 +420950 831897 +420950 899781 +420953 879375 +420964 1.11876e+06 +420969 792356 +420972 886928 +420978 885303 +420983 760497 +420986 759183 +420997 877808 +421014 725903 +421022 898333 +421028 772339 +421033 762625 +421042 723194 +421042 793333 +421058 842483 +421069 726208 +421069 936494 +421072 891792 +421081 859744 +421081 877358 +421083 720792 +421083 912850 +421094 792833 +421103 880342 +421111 716667 +421125 929883 +421128 760214 +421142 856378 +421142 967069 +421156 759592 +421161 721139 +421167 864542 +421181 880961 +421186 791986 +421200 855328 +421211 882578 +421217 770375 +421236 711792 +421236 724319 +421250 727500 +421256 894036 +421261 895792 +421269 892556 +421275 878289 +421275 961492 +421286 980294 +421292 800853 +421297 768211 +421306 715417 +421311 864072 +421333 758967 +421350 877581 +421372 769372 +421389 832417 +421392 879289 +421394 831783 +421397 715167 +421403 800153 +421417 712500 +421428 770550 +421458 707403 +421458 848089 +421461 771119 +421483 964881 +421486 726083 +421486 746486 +421503 840378 +421514 879597 +421519 944742 +421539 881361 +421547 897397 +421550 710092 +421564 777958 +421578 787153 +421583 723292 +421592 795956 +421606 842461 +421608 880814 +421611 932969 +421619 770944 +421619 789756 +421625 710417 +421625 834031 +421631 1.23647e+06 +421653 954367 +421656 882942 +421658 957928 +421664 935017 +421667 837817 +421669 768208 +421672 858469 +421675 878969 +421681 884281 +421686 920233 +421694 751297 +421706 880478 +421711 878444 +421717 923061 +421728 789481 +421778 846431 +421783 879978 +421811 723611 +421817 878003 +421817 883303 +421817 949767 +421861 863083 +421867 862606 +421872 935956 +421875 713069 +421878 927150 +421889 1.20345e+06 +421908 917850 +421917 1.1225e+06 +421933 843911 +421933 878664 +421936 924653 +421944 712000 +421944 719064 +421947 1.22708e+06 +421956 741342 +421958 707264 +421958 733625 +421969 880933 +421986 765528 +421992 975264 +421997 878092 +422008 882144 +422011 855800 +422039 915239 +422042 726167 +422047 834853 +422050 845528 +422064 781378 +422067 861667 +422069 1.21736e+06 +422075 880556 +422078 881406 +422094 857844 +422097 764936 +422119 882381 +422122 862719 +422125 721917 +422125 723458 +422125 881525 +422136 742192 +422139 721028 +422139 831939 +422156 798344 +422169 880494 +422172 738650 +422175 782756 +422178 858911 +422189 707861 +422192 860514 +422194 879794 +422208 709403 +422208 863694 +422222 710000 +422222 833967 +422231 780347 +422236 761836 +422242 918742 +422247 928744 +422250 1.21781e+06 +422272 1.114e+06 +422278 720472 +422281 755269 +422286 715231 +422306 970175 +422328 763428 +422328 962278 +422331 843272 +422339 738828 +422347 889489 +422353 721417 +422358 964722 +422383 853350 +422383 911869 +422408 832697 +422411 836131 +422411 883161 +422417 708903 +422417 711667 +422425 882019 +422431 847531 +422433 1.13881e+06 +422439 719928 +422444 831458 +422456 930644 +422458 712833 +422458 844014 +422458 1.22788e+06 +422464 882428 +422483 736536 +422486 886083 +422500 710667 +422506 831786 +422508 842131 +422525 788058 +422528 710028 +422528 737914 +422539 795047 +422542 733667 +422542 777908 +422564 725167 +422564 902794 +422575 832111 +422578 983461 +422583 845997 +422586 904228 +422589 881392 +422597 722403 +422603 738100 +422614 940683 +422625 718028 +422631 880039 +422639 792589 +422639 888442 +422653 898258 +422661 892411 +422667 720833 +422669 797108 +422675 947336 +422689 715244 +422692 968647 +422694 716167 +422697 1.04741e+06 +422703 776061 +422703 945483 +422711 890939 +422711 950928 +422714 939269 +422722 849633 +422733 831344 +422750 786731 +422756 1.22817e+06 +422761 881919 +422769 724014 +422781 749164 +422786 967264 +422789 878342 +422792 714167 +422806 942906 +422808 915303 +422814 833864 +422825 831753 +422831 879531 +422833 712333 +422833 837458 +422861 737392 +422867 917806 +422875 733208 +422886 772186 +422886 854181 +422900 882247 +422917 855872 +422933 754797 +422942 833100 +422944 791000 +422964 712931 +422967 896211 +422986 910147 +422989 739989 +423019 709083 +423031 855503 +423042 732486 +423056 933000 +423067 780161 +423083 852192 +423122 952503 +423125 722083 +423125 861131 +423136 1.22966e+06 +423139 893592 +423147 753919 +423147 884486 +423150 921919 +423153 934342 +423156 955983 +423178 902214 +423181 840206 +423189 851425 +423189 882581 +423194 716417 +423200 890581 +423208 713647 +423211 851797 +423217 964892 +423217 1.03072e+06 +423222 777386 +423222 795783 +423222 831764 +423222 1.11297e+06 +423236 925992 +423242 834003 +423250 726417 +423253 753128 +423256 833311 +423256 878411 +423267 1.22874e+06 +423278 776614 +423281 855697 +423286 881989 +423289 759681 +423292 757703 +423292 788683 +423314 830458 +423364 853522 +423367 767889 +423369 712097 +423369 773181 +423369 784583 +423369 832733 +423383 838886 +423403 725056 +423428 879981 +423428 890519 +423439 912483 +423442 793097 +423444 880417 +423447 882739 +423450 954714 +423458 715528 +423461 776617 +423472 768456 +423483 878842 +423497 900067 +423497 977917 +423508 738033 +423533 880933 +423564 732853 +423569 880767 +423583 710603 +423600 940519 +423600 975964 +423608 858794 +423608 930994 +423617 927683 +423636 878447 +423642 735953 +423642 790558 +423683 833528 +423683 882925 +423694 719486 +423703 879019 +423708 711833 +423708 725986 +423717 880900 +423736 725208 +423750 709833 +423758 829375 +423758 896331 +423764 712361 +423783 846986 +423786 973567 +423794 898222 +423800 881042 +423806 768736 +423811 881397 +423828 859569 +423861 829119 +423875 711000 +423883 958664 +423886 794414 +423886 895261 +423917 710333 +423917 715667 +423928 830497 +423933 883403 +423944 776969 +423944 917608 +423953 736983 +423953 946336 +423958 711792 +423967 881836 +423972 751739 +423986 880525 +423997 887403 +424031 862736 +424039 963583 +424067 924553 +424072 746147 +424075 1.24421e+06 +424078 772239 +424081 881317 +424083 710125 +424083 710542 +424086 882064 +424092 828919 +424094 774217 +424103 725314 +424106 880261 +424133 736736 +424133 890092 +424153 711569 +424156 964181 +424161 922147 +424167 716833 +424167 904289 +424169 880739 +424183 711067 +424222 886136 +424222 949894 +424228 721056 +424233 781575 +424247 941500 +424250 710667 +424264 709194 +424286 879239 +424286 1.12124e+06 +424292 764953 +424294 970894 +424297 913308 +424311 834833 +424331 829242 +424333 714500 +424361 1.23171e+06 +424364 893319 +424367 828769 +424375 1.22858e+06 +424392 1.23327e+06 +424394 837439 +424400 793319 +424400 856489 +424406 764969 +424408 736614 +424414 849242 +424417 760325 +424428 910061 +424433 850181 +424436 829069 +424444 716875 +424450 909319 +424461 878328 +424472 712250 +424500 732458 +424511 841806 +424514 844325 +424522 711375 +424528 750642 +424567 839464 +424578 986472 +424583 710667 +424583 713958 +424592 929383 +424594 764869 +424606 831347 +424606 836517 +424606 856964 +424614 777772 +424614 951517 +424625 831042 +424631 789361 +424642 926281 +424644 833764 +424647 710106 +424661 781153 +424667 709500 +424667 979058 +424669 922564 +424683 738167 +424683 791772 +424683 829556 +424683 896439 +424686 918892 +424689 922194 +424692 922808 +424694 938158 +424706 939933 +424708 709181 +424711 831422 +424717 884322 +424728 1.22802e+06 +424733 832219 +424733 917342 +424739 964133 +424750 957853 +424756 920636 +424772 726083 +424772 880956 +424775 830278 +424789 878236 +424792 711528 +424794 793342 +424800 711000 +424806 831669 +424806 834756 +424817 912722 +424842 914553 +424844 911228 +424850 830278 +424858 831053 +424889 960722 +424892 784811 +424892 955447 +424894 831447 +424908 762975 +424922 906428 +424928 923428 +424931 890367 +424947 1.07827e+06 +424964 832228 +424964 899894 +424969 828889 +424972 829372 +424975 941678 +424983 883297 +424994 975417 +425000 708583 +425000 952928 +425000 964000 +425006 906644 +425022 775075 +425025 887289 +425031 831836 +425047 711961 +425061 972033 +425064 710733 +425083 890317 +425092 846558 +425144 907514 +425158 736106 +425158 832733 +425183 737517 +425194 708972 +425203 933758 +425222 833061 +425225 932511 +425233 769769 +425247 835364 +425250 717603 +425256 710958 +425272 964828 +425278 709292 +425278 924453 +425292 712286 +425292 858553 +425294 837803 +425297 1.14305e+06 +425300 784731 +425311 755239 +425311 882481 +425311 885994 +425314 989778 +425328 904344 +425333 831464 +425339 784233 +425339 1.14364e+06 +425347 881436 +425358 1.13792e+06 +425364 997003 +425378 834811 +425381 883508 +425383 1.10114e+06 +425389 710486 +425392 829494 +425422 766664 +425436 716500 +425442 791669 +425458 714750 +425464 711742 +425467 832114 +425486 752456 +425489 748214 +425500 998622 +425511 946836 +425536 882944 +425536 1.10109e+06 +425542 930531 +425567 834739 +425578 888650 +425583 708806 +425586 1.13763e+06 +425608 776964 +425611 715903 +425631 1.1446e+06 +425636 848358 +425669 926219 +425678 775900 +425697 903806 +425700 921603 +425703 1.14607e+06 +425733 902308 +425750 709306 +425750 719986 +425761 1.1173e+06 +425775 881050 +425775 927867 +425778 1.21865e+06 +425781 885408 +425794 779428 +425803 830303 +425814 948458 +425819 724931 +425822 762094 +425833 718028 +425836 832456 +425842 886325 +425842 928842 +425847 878211 +425858 995375 +425875 726000 +425878 763672 +425883 959672 +425903 723103 +425906 749456 +425936 835994 +425939 861017 +425944 717250 +425953 789414 +425958 722272 +425961 760936 +425969 980333 +425972 828781 +425986 916419 +425989 976453 +425992 991422 +425992 1.14759e+06 +426011 761808 +426011 896383 +426017 887075 +426025 965589 +426028 850931 +426042 725569 +426042 727397 +426056 904297 +426056 950025 +426072 839294 +426081 833439 +426081 1.13782e+06 +426083 720764 +426103 719394 +426111 715750 +426114 833286 +426122 884822 +426144 941458 +426153 770925 +426153 774028 +426158 706625 +426169 767253 +426183 825311 +426183 893761 +426192 1.13676e+06 +426208 919000 +426214 951731 +426219 738331 +426225 972642 +426236 857603 +426242 731181 +426242 753319 +426242 790672 +426261 830336 +426272 905919 +426275 892531 +426278 962914 +426289 780547 +426289 850242 +426292 847389 +426319 707833 +426331 886436 +426333 713167 +426339 735542 +426342 745644 +426369 761792 +426375 709500 +426383 790281 +426389 832911 +426392 920469 +426406 845153 +426411 952094 +426425 737433 +426433 736092 +426444 914011 +426456 846489 +426461 924628 +426506 1.12192e+06 +426525 737567 +426539 739292 +426544 1.11604e+06 +426550 862019 +426567 935008 +426583 711375 +426606 780858 +426606 840731 +426608 770542 +426611 709972 +426642 939042 +426653 715736 +426658 715889 +426658 743100 +426667 717056 +426669 841742 +426708 892089 +426714 923372 +426728 885444 +426733 919133 +426736 952903 +426739 856447 +426764 768233 +426778 744858 +426781 754989 +426781 882761 +426792 708417 +426806 831339 +426811 827369 +426822 768689 +426828 890186 +426831 901175 +426831 1.03412e+06 +426833 966833 +426836 915339 +426839 1.02689e+06 +426856 787769 +426861 720444 +426881 880514 +426889 842831 +426894 907119 +426903 735650 +426911 738692 +426919 737250 +426950 738075 +426958 724533 +426981 878944 +427006 740342 +427006 749247 +427008 731092 +427011 898669 +427022 834028 +427022 922253 +427047 737553 +427069 711636 +427078 894369 +427103 925828 +427119 732042 +427125 764219 +427128 954364 +427131 854619 +427144 909906 +427156 780058 +427167 708792 +427178 738339 +427183 1.02464e+06 +427194 824922 +427197 962483 +427200 942000 +427203 1.11885e+06 +427208 942150 +427222 844275 +427242 1.14518e+06 +427250 1.10931e+06 +427256 778744 +427258 924753 +427261 877828 +427283 736922 +427289 974953 +427294 944475 +427300 737017 +427317 937328 +427325 845556 +427342 904783 +427356 946689 +427358 834189 +427361 903342 +427364 1.23422e+06 +427369 844839 +427400 781331 +427414 882242 +427419 932022 +427442 736919 +427456 895947 +427458 1.24496e+06 +427469 737594 +427469 844011 +427494 955514 +427519 929753 +427528 927950 +427533 847464 +427539 767028 +427583 758847 +427597 1.05382e+06 +427600 772267 +427622 848964 +427622 849925 +427625 1.04452e+06 +427631 882142 +427647 714403 +427653 714681 +427672 718128 +427675 787442 +427678 786136 +427703 832642 +427733 723836 +427739 918822 +427742 737006 +427756 889439 +427758 1.14703e+06 +427761 710778 +427794 969289 +427797 738461 +427803 892992 +427819 949483 +427844 832397 +427844 877661 +427847 851383 +427847 926675 +427853 884050 +427858 910994 +427861 724869 +427861 1.12854e+06 +427875 861089 +427892 855167 +427914 838464 +427919 836278 +427925 736817 +427942 961653 +427956 747536 +427958 746175 +427958 778172 +427964 1.12253e+06 +427972 788236 +427978 837050 +427981 761097 +428028 830131 +428047 1.02203e+06 +428081 922581 +428092 827558 +428103 898619 +428122 1.14898e+06 +428125 708778 +428125 860186 +428128 945267 +428139 720236 +428142 739400 +428144 837825 +428144 896350 +428147 959731 +428208 824861 +428214 776689 +428228 839444 +428239 721817 +428247 832647 +428256 788236 +428258 958072 +428264 739647 +428264 780900 +428264 842194 +428269 755450 +428289 965592 +428294 1.03e+06 +428297 786364 +428331 1.0873e+06 +428336 887322 +428353 716494 +428353 890675 +428386 841783 +428397 766936 +428406 1.06365e+06 +428408 856636 +428417 708611 +428419 918019 +428433 717356 +428442 828844 +428461 936139 +428467 948517 +428475 907106 +428475 920914 +428508 725583 +428522 834431 +428533 749858 +428536 893703 +428539 914053 +428542 978969 +428558 726036 +428583 709306 +428597 895381 +428600 1.06268e+06 +428614 1.05872e+06 +428642 782806 +428667 883333 +428667 1.06312e+06 +428667 1.0986e+06 +428686 773358 +428686 912358 +428689 769781 +428692 849031 +428694 856447 +428706 719522 +428708 858650 +428711 973969 +428714 1.12445e+06 +428728 1.00551e+06 +428739 987011 +428744 740469 +428778 885861 +428781 731972 +428786 840639 +428792 752514 +428794 884742 +428806 713278 +428814 882067 +428836 1.24072e+06 +428853 751936 +428853 909233 +428858 878631 +428864 788786 +428903 843514 +428906 785781 +428933 787942 +428933 932150 +428933 951508 +428944 739283 +428950 774350 +428958 928022 +428964 827689 +428986 756406 +429000 735858 +429000 784922 +429000 904308 +429006 786706 +429011 733519 +429022 774200 +429028 736878 +429033 735631 +429039 786925 +429042 722083 +429047 768631 +429047 776117 +429056 745722 +429058 881389 +429061 1.08583e+06 +429072 857919 +429086 765406 +429097 857631 +429106 767969 +429106 878606 +429108 745744 +429114 988489 +429119 777458 +429119 839847 +429125 824869 +429133 857053 +429169 835064 +429169 892178 +429189 767267 +429206 830450 +429208 1.12465e+06 +429261 893844 +429275 836300 +429275 1.2328e+06 +429289 888369 +429294 847986 +429294 852131 +429300 758531 +429303 732431 +429314 746231 +429317 765664 +429336 722786 +429336 853419 +429344 884053 +429347 746139 +429361 1.14405e+06 +429375 708394 +429375 880486 +429378 937931 +429386 737903 +429386 741886 +429386 919500 +429389 1.14712e+06 +429392 754614 +429392 840294 +429406 879958 +429411 856100 +429414 832892 +429442 1.12838e+06 +429461 831239 +429469 764294 +429478 743708 +429511 1.23363e+06 +429522 775906 +429528 925361 +429544 743769 +429550 1.153e+06 +429553 742856 +429558 772211 +429569 944408 +429572 838306 +429575 770578 +429575 916306 +429583 742333 +429597 878614 +429600 784058 +429603 901300 +429614 880125 +429617 771403 +429628 918081 +429639 787381 +429644 825231 +429647 786778 +429653 921994 +429658 788703 +429697 772306 +429708 824250 +429717 904331 +429731 778531 +429742 954972 +429744 741514 +429747 963181 +429764 881083 +429783 779844 +429792 956878 +429814 709483 +429819 841178 +429819 849469 +429825 774092 +429828 763408 +429836 906553 +429853 931917 +429856 839283 +429872 850711 +429875 960103 +429908 895331 +429933 978625 +429956 714553 +429958 849425 +429958 964850 +429978 841767 +429981 781878 +430008 738494 +430014 857681 +430017 847397 +430019 759772 +430022 899903 +430036 890164 +430036 916522 +430044 883767 +430050 980594 +430056 888072 +430058 843717 +430067 743681 +430069 936028 +430072 960581 +430078 842847 +430086 897383 +430106 786378 +430114 750044 +430117 882314 +430125 829281 +430125 836875 +430125 879725 +430125 892897 +430142 884725 +430150 750358 +430156 898953 +430167 880069 +430183 911825 +430203 788806 +430203 1.23292e+06 +430208 784956 +430214 966306 +430247 830778 +430250 1.08379e+06 +430256 749864 +430256 1.02556e+06 +430258 777456 +430281 733817 +430297 760047 +430333 710747 +430344 764483 +430344 766242 +430347 835181 +430361 711839 +430386 788644 +430386 856700 +430389 750708 +430389 879064 +430392 763044 +430431 880789 +430433 748600 +430444 911781 +430450 758669 +430467 770956 +430467 903797 +430472 762389 +430475 762208 +430481 761478 +430483 753789 +430486 765631 +430494 880075 +430514 833189 +430517 911411 +430517 913892 +430519 890756 +430522 929483 +430528 743442 +430581 762078 +430586 741969 +430592 923175 +430606 881064 +430608 884036 +430619 944267 +430622 893339 +430631 838511 +430631 862283 +430639 772336 +430639 859347 +430642 769906 +430650 1.24138e+06 +430653 760789 +430653 764733 +430656 952836 +430658 782700 +430664 926722 +430692 772992 +430700 942328 +430706 921500 +430717 707631 +430719 959042 +430731 894011 +430733 752881 +430736 755986 +430747 731544 +430753 757072 +430761 760011 +430761 887742 +430761 891994 +430769 861969 +430772 781872 +430775 894456 +430794 755397 +430794 757511 +430797 961753 +430797 982928 +430806 882611 +430806 967733 +430814 889117 +430825 756339 +430831 737850 +430831 971603 +430842 768697 +430844 862203 +430847 915681 +430853 779425 +430853 908831 +430858 706975 +430869 956269 +430881 707367 +430883 939900 +430886 843869 +430892 878875 +430906 734992 +430906 775153 +430922 753800 +430925 756517 +430944 790569 +430967 714656 +430972 895042 +430978 761456 +430978 852289 +430978 884022 +430978 938017 +430986 774422 +431000 735822 +431008 747733 +431008 752331 +431025 936017 +431044 742653 +431044 884592 +431047 846919 +431050 883419 +431053 752917 +431058 880694 +431064 762181 +431081 707781 +431086 774878 +431117 883922 +431117 884992 +431128 752714 +431128 946828 +431133 879000 +431144 896556 +431153 761461 +431167 839700 +431183 893794 +431186 836950 +431192 1.24407e+06 +431194 969611 +431200 855600 +431219 752919 +431225 1.23411e+06 +431264 934775 +431292 948989 +431306 714536 +431319 861547 +431331 1.1569e+06 +431333 724444 +431339 709269 +431339 882219 +431344 907053 +431347 761303 +431372 897467 +431378 725103 +431381 755711 +431414 951442 +431428 930042 +431433 771894 +431461 881661 +431464 917644 +431467 883067 +431497 977172 +431500 786969 +431536 932008 +431547 776158 +431564 985411 +431567 834106 +431572 753331 +431575 879017 +431586 763331 +431600 953272 +431606 1.23367e+06 +431608 857100 +431633 879644 +431636 730728 +431661 835244 +431683 890667 +431689 862639 +431703 970811 +431706 786906 +431722 733281 +431725 790361 +431725 1.01732e+06 +431742 879242 +431753 900678 +431767 838928 +431767 897947 +431769 730575 +431769 848464 +431772 1.24186e+06 +431775 837342 +431775 852528 +431789 881172 +431797 718228 +431800 954767 +431806 879006 +431811 958558 +431817 956553 +431819 903244 +431825 992917 +431836 892136 +431836 918639 +431839 889883 +431847 841150 +431850 904431 +431864 778042 +431867 844744 +431886 961333 +431906 1.12344e+06 +431911 960056 +431919 894556 +431947 887289 +431972 766547 +431975 942194 +431978 708742 +431992 785764 +432011 862389 +432053 962947 +432081 715381 +432097 776933 +432122 774303 +432122 829897 +432122 850736 +432136 779394 +432167 1.23341e+06 +432200 783872 +432200 857511 +432206 768153 +432219 717144 +432233 855514 +432239 771864 +432256 750617 +432256 979656 +432264 780269 +432294 831967 +432311 763011 +432322 994300 +432342 862483 +432344 708100 +432358 1.0811e+06 +432361 708208 +432364 879844 +432369 940411 +432375 879786 +432378 770617 +432378 947511 +432381 761411 +432386 724250 +432386 789100 +432397 975775 +432403 758842 +432417 752572 +432444 738328 +432464 781939 +432467 924358 +432472 767239 +432472 790503 +432478 760006 +432489 705997 +432506 895014 +432508 837942 +432547 861097 +432561 862675 +432586 828175 +432617 708658 +432625 936369 +432658 708650 +432669 735850 +432681 825308 +432694 914756 +432708 897219 +432717 769894 +432756 826211 +432789 900436 +432794 962325 +432814 835297 +432842 928108 +432867 761464 +432867 787106 +432869 897239 +432872 932019 +432881 777936 +432917 846075 +432925 850814 +432928 942178 +432947 945114 +432967 879875 +432983 724828 +432992 736356 +433000 736844 +433006 735864 +433008 965925 +433011 1.03825e+06 +433033 917856 +433036 707339 +433044 709761 +433050 888447 +433058 713247 +433058 1.00658e+06 +433072 964317 +433094 736444 +433097 788264 +433103 885181 +433139 895264 +433175 908447 +433178 883789 +433186 983464 +433197 879533 +433211 765792 +433228 764175 +433239 881667 +433247 951497 +433267 783892 +433269 751872 +433269 830803 +433300 785550 +433317 837381 +433336 882861 +433344 757483 +433347 903867 +433361 858108 +433369 833525 +433378 787150 +433381 890153 +433439 960019 +433525 974369 +433542 968917 +433561 1.24204e+06 +433617 704772 +433622 912164 +433636 1.24192e+06 +433639 925539 +433653 721739 +433681 1.24216e+06 +433714 937733 +433719 835833 +433767 723472 +433767 998586 +433789 846597 +433814 921139 +433814 1.12122e+06 +433817 879406 +433839 705453 +433844 890450 +433858 939464 +433864 951481 +433869 988442 +433872 878756 +433897 710656 +433903 894028 +433903 1.23311e+06 +433953 907742 +433956 854678 +433958 727011 +433961 944781 +433975 971361 +433981 764778 +433989 979833 +433992 957517 +433997 885325 +434017 948325 +434056 887050 +434061 761261 +434067 1.24223e+06 +434078 732600 +434081 844750 +434081 850386 +434097 843289 +434100 863486 +434114 1.06279e+06 +434131 1.06249e+06 +434139 719856 +434142 734881 +434147 842306 +434161 955344 +434167 863569 +434194 839508 +434194 935331 +434197 858000 +434203 828297 +434222 951019 +434222 1.23297e+06 +434231 972603 +434253 881833 +434253 984069 +434261 737128 +434269 826714 +434272 961756 +434308 825425 +434314 966969 +434317 880464 +434317 1.03474e+06 +434361 927822 +434392 707747 +434442 716478 +434442 932208 +434464 968356 +434478 892397 +434506 836964 +434514 886311 +434536 964339 +434553 765108 +434556 953206 +434578 888372 +434586 839303 +434594 762292 +434597 898683 +434636 1.1426e+06 +434667 707942 +434667 1.12033e+06 +434675 859419 +434697 1.11966e+06 +434706 879506 +434711 897442 +434717 729778 +434744 897703 +434764 839206 +434800 1.10762e+06 +434836 753369 +434908 854439 +434911 833969 +434919 1.16419e+06 +434925 704539 +434942 885447 +434958 893083 +434967 737767 +434967 912894 +434997 878503 +435008 704433 +435050 940878 +435053 929439 +435061 906681 +435072 863475 +435097 925036 +435169 732367 +435172 703781 +435172 884511 +435181 960181 +435197 1.14314e+06 +435206 917694 +435208 882289 +435236 835433 +435244 846947 +435250 841228 +435264 1.11932e+06 +435267 827353 +435278 714708 +435281 963583 +435325 900025 +435336 946314 +435336 1.0963e+06 +435364 937119 +435378 893000 +435392 890067 +435392 894625 +435408 1.16562e+06 +435422 891072 +435456 1.16812e+06 +435500 967000 +435503 857719 +435517 975072 +435522 879617 +435553 920100 +435556 734042 +435569 908886 +435592 863456 +435611 916358 +435642 1.1908e+06 +435653 927192 +435656 889064 +435669 761281 +435681 835142 +435681 1.00745e+06 +435689 860394 +435697 878233 +435725 932811 +435758 1.24174e+06 +435781 703222 +435825 964675 +435831 753456 +435839 712078 +435864 1.19053e+06 +435911 717372 +435914 884436 +435931 730456 +435944 838889 +435947 732661 +435964 1.11963e+06 +435978 882789 +435978 972903 +435986 1.23282e+06 +436008 831747 +436011 897936 +436033 840697 +436086 863639 +436106 729731 +436122 1.16391e+06 +436153 838419 +436156 842472 +436178 1.16933e+06 +436192 879519 +436200 955961 +436208 949883 +436222 1.16237e+06 +436228 877944 +436231 969422 +436242 725189 +436253 753675 +436275 897708 +436319 1.11773e+06 +436333 887294 +436347 914967 +436350 959325 +436367 1.13299e+06 +436375 941019 +436406 721444 +436414 702414 +436422 722522 +436433 760689 +436442 760864 +436461 1.08211e+06 +436481 933681 +436489 723197 +436522 903439 +436522 944608 +436522 947267 +436528 902233 +436536 834661 +436536 977825 +436542 962125 +436569 908542 +436575 715008 +436583 880069 +436589 1.23318e+06 +436614 702558 +436619 912183 +436631 1.16686e+06 +436647 968106 +436667 929744 +436669 946192 +436703 920831 +436703 935758 +436714 1.16815e+06 +436725 1.11914e+06 +436728 723092 +436728 843806 +436767 1.16911e+06 +436769 703717 +436775 951714 +436794 704447 +436808 1.14363e+06 +436861 885464 +436869 923889 +436936 883608 +436953 716311 +436958 1.1201e+06 +436972 1.14351e+06 +436981 854836 +436983 863639 +436986 954683 +437022 722900 +437022 910131 +437025 1.24096e+06 +437058 925719 +437067 730286 +437069 1.16619e+06 +437072 889900 +437094 980294 +437097 929694 +437100 749747 +437100 829317 +437156 984847 +437175 965025 +437208 919767 +437208 1.11989e+06 +437233 1.11111e+06 +437242 973886 +437292 878106 +437322 834511 +437347 702083 +437353 887811 +437403 928692 +437408 902722 +437419 907792 +437461 937286 +437467 989581 +437467 1.22461e+06 +437486 879769 +437508 877144 +437567 845858 +437569 716886 +437594 913464 +437614 967400 +437622 947069 +437633 915683 +437639 933289 +437667 1.03598e+06 +437678 941656 +437731 884469 +437817 864331 +437853 1.16942e+06 +437861 969272 +437867 754922 +437914 893197 +437950 953200 +437964 702594 +437972 900772 +437978 1.23058e+06 +437981 730881 +438006 701872 +438014 912394 +438019 830008 +438067 917914 +438078 886747 +438083 917528 +438108 993303 +438114 884833 +438194 831808 +438194 847686 +438261 967058 +438261 1.11789e+06 +438264 882461 +438278 944369 +438300 832700 +438306 906214 +438333 726344 +438333 880178 +438339 878200 +438339 1.01509e+06 +438342 704389 +438350 848669 +438419 938317 +438422 888358 +438442 889600 +438447 826514 +438456 921889 +438486 734239 +438500 963983 +438508 891217 +438522 696286 +438536 839650 +438547 1.04204e+06 +438556 924883 +438569 701036 +438600 760058 +438664 951167 +438667 930508 +438706 956000 +438725 961283 +438728 933011 +438731 1.11748e+06 +438736 1.16498e+06 +438750 855100 +438769 1.16994e+06 +438792 901653 +438822 844847 +438836 894933 +438844 912350 +438867 1.11677e+06 +438881 941564 +438883 1.00712e+06 +438906 928475 +438931 909903 +438933 756739 +438939 934936 +438958 753928 +438992 910811 +439006 852581 +439011 858517 +439097 1.00058e+06 +439106 698211 +439125 880356 +439144 699658 +439147 1.13612e+06 +439147 1.16197e+06 +439150 877472 +439181 1.23023e+06 +439186 1.22782e+06 +439225 902714 +439250 726664 +439275 699764 +439289 939558 +439325 1.03575e+06 +439389 949294 +439394 829969 +439411 832714 +439442 908128 +439461 761194 +439500 880842 +439547 862800 +439553 864525 +439583 947944 +439633 912561 +439681 889433 +439700 1.16818e+06 +439706 898167 +439742 756156 +439747 759111 +439781 756097 +439786 905039 +439792 711208 +439808 844864 +439822 1.17237e+06 +439825 968142 +439828 1.24099e+06 +439831 839589 +439844 918692 +439878 957556 +439883 922283 +439925 721294 +439925 1.02241e+06 +439961 700611 +440006 963172 +440011 759667 +440047 940656 +440056 914419 +440061 971136 +440078 760447 +440078 1.16916e+06 +440108 975264 +440125 757947 +440153 731678 +440164 709811 +440169 1.07955e+06 +440192 847994 +440217 924697 +440247 885425 +440261 900739 +440267 1.16962e+06 +440275 917697 +440281 928544 +440289 881628 +440300 927506 +440328 926453 +440394 887442 +440394 1.01665e+06 +440419 890983 +440422 954358 +440444 929975 +440461 829942 +440464 1.23021e+06 +440483 734603 +440486 836958 +440489 1.2335e+06 +440494 965950 +440500 916392 +440508 944181 +440522 1.23086e+06 +440536 711289 +440536 982753 +440547 707133 +440583 1.21314e+06 +440625 916956 +440661 878842 +440669 761306 +440692 927556 +440717 882989 +440717 1.11448e+06 +440747 892878 +440758 885250 +440778 935072 +440783 1.16933e+06 +440789 691822 +440792 985692 +440806 1.03231e+06 +440817 913489 +440839 932258 +440872 697994 +440881 758075 +440886 876575 +440953 693761 +440978 702317 +440978 918167 +440997 1.04628e+06 +441003 702153 +441025 851469 +441036 691094 +441036 1.2313e+06 +441058 942186 +441103 949044 +441108 887125 +441117 703922 +441125 1.03068e+06 +441161 937078 +441197 701081 +441278 763333 +441303 922514 +441306 909981 +441319 917186 +441333 730794 +441372 1.23065e+06 +441403 881639 +441447 878214 +441511 726569 +441511 1.03308e+06 +441522 720378 +441536 879567 +441536 928994 +441539 875692 +441544 757092 +441572 1.08871e+06 +441597 750319 +441636 939992 +441650 921714 +441650 938811 +441661 925347 +441672 732544 +441733 940336 +441742 932461 +441769 725061 +441772 880642 +441839 734361 +441858 884625 +441936 852133 +441969 725025 +441992 756072 +441994 877214 +442014 926461 +442022 884464 +442044 938153 +442097 690653 +442097 951283 +442133 719114 +442139 705453 +442139 894922 +442153 757975 +442189 935678 +442194 1.23204e+06 +442231 954692 +442236 705139 +442272 934444 +442275 918350 +442300 697758 +442303 697672 +442311 952639 +442333 956189 +442333 958719 +442361 964808 +442389 949756 +442392 876411 +442394 760861 +442444 697719 +442444 862961 +442444 863242 +442511 1.16968e+06 +442519 854011 +442528 915014 +442597 888647 +442600 725758 +442611 962872 +442619 884153 +442633 1.0495e+06 +442658 883142 +442694 835147 +442722 883389 +442722 929853 +442728 1.21173e+06 +442731 925447 +442742 1.23169e+06 +442761 941872 +442764 842386 +442781 724269 +442781 882719 +442783 961344 +442794 739803 +442794 834903 +442797 683256 +442800 883183 +442842 966853 +442858 697914 +442911 1.05502e+06 +442911 1.21548e+06 +442925 939647 +442942 926689 +442944 912350 +442947 908514 +442950 932686 +442972 947239 +443044 927903 +443050 699775 +443061 717706 +443106 697800 +443114 967981 +443125 899042 +443125 944603 +443147 847647 +443200 919147 +443214 889336 +443236 969261 +443244 752514 +443256 938375 +443258 881628 +443294 741317 +443347 886381 +443353 852150 +443358 759181 +443367 754633 +443378 727567 +443478 878272 +443483 1.06698e+06 +443508 898653 +443514 1.17266e+06 +443522 1.03765e+06 +443536 1.00373e+06 +443569 914203 +443581 890858 +443633 982139 +443636 862050 +443636 973769 +443644 971328 +443675 913164 +443683 1.00351e+06 +443731 716106 +443767 1.03729e+06 +443800 1.08038e+06 +443836 898172 +443839 920328 +443842 1.23109e+06 +443875 682044 +443875 975500 +443878 711736 +443894 937300 +443897 1.18949e+06 +443928 887397 +443936 1.22984e+06 +443978 1.22735e+06 +444006 926236 +444019 952556 +444053 729933 +444064 1.04375e+06 +444078 740875 +444097 1.03509e+06 +444108 833322 +444108 853989 +444161 1.18952e+06 +444169 949253 +444178 1.19112e+06 +444203 833308 +444214 841167 +444239 897803 +444258 690069 +444269 1.24068e+06 +444389 935811 +444392 901244 +444411 921478 +444447 885789 +444467 943950 +444469 957881 +444489 880603 +444494 922667 +444508 892847 +444511 908411 +444564 895439 +444583 689247 +444583 875031 +444583 931614 +444611 1.03638e+06 +444633 962469 +444633 1.18709e+06 +444644 889197 +444653 726850 +444669 731714 +444686 711856 +444753 701886 +444758 732125 +444775 884506 +444803 934283 +444814 702000 +444822 899639 +444889 715697 +444892 1.08056e+06 +444906 731114 +444908 1.03859e+06 +444914 731861 +444936 895586 +444983 845919 +445047 723686 +445047 1.14231e+06 +445050 734806 +445069 929053 +445072 964239 +445081 891306 +445150 883303 +445164 1.16041e+06 +445183 989881 +445192 880197 +445194 895458 +445214 994411 +445236 895744 +445258 1.21212e+06 +445264 1.09056e+06 +445283 939075 +445292 947206 +445328 675989 +445336 720036 +445339 704564 +445339 945261 +445367 1.22906e+06 +445386 877039 +445394 951167 +445403 697225 +445403 1.23366e+06 +445431 943661 +445433 684200 +445433 935758 +445469 696217 +445497 913925 +445514 949842 +445519 696322 +445531 942203 +445536 705514 +445600 905961 +445608 705458 +445617 725989 +445625 925336 +445647 1.23261e+06 +445678 916708 +445722 912272 +445736 687961 +445747 969019 +445758 914700 +445856 924503 +445883 695992 +445908 897672 +445928 702286 +445956 751694 +445986 715117 +446003 909628 +446083 940803 +446089 874325 +446089 956739 +446181 754075 +446194 862264 +446206 887622 +446217 1.23937e+06 +446228 937683 +446264 919656 +446269 900075 +446278 893086 +446292 921922 +446336 862344 +446336 1.21128e+06 +446356 726808 +446367 1.23105e+06 +446369 1.24052e+06 +446378 688456 +446378 695036 +446397 731108 +446403 931433 +446497 932425 +446531 1.23101e+06 +446564 832947 +446614 847147 +446622 1.11103e+06 +446689 901717 +446697 749817 +446706 701517 +446714 1.03852e+06 +446722 882425 +446803 911197 +446811 1.2306e+06 +446931 735625 +446942 754867 +446994 734533 +447050 1.22848e+06 +447081 1.00059e+06 +447089 962761 +447131 697911 +447133 934225 +447147 1.0342e+06 +447150 674619 +447197 1.23009e+06 +447214 737242 +447219 1.23919e+06 +447228 970297 +447300 1.16437e+06 +447319 932175 +447319 943500 +447322 924872 +447342 851758 +447369 904958 +447372 946167 +447394 931256 +447403 884447 +447408 890631 +447433 928522 +447439 947153 +447444 688375 +447458 966806 +447481 721767 +447489 928019 +447514 749947 +447539 1.08757e+06 +447542 1.22477e+06 +447578 902967 +447631 856206 +447636 912769 +447636 936256 +447650 697197 +447675 948953 +447678 932775 +447681 939272 +447692 941514 +447717 937811 +447747 1.22614e+06 +447764 949894 +447783 1.17828e+06 +447811 921458 +447822 886089 +447825 693839 +447828 939133 +447869 953514 +447892 952114 +447894 936019 +447906 958083 +447919 950969 +447931 897031 +447964 1.08506e+06 +447967 687619 +447972 1.06956e+06 +447975 698803 +447981 935267 +448008 749914 +448008 1.22793e+06 +448011 687783 +448011 900792 +448047 914431 +448086 1.24062e+06 +448100 955453 +448114 914983 +448117 722036 +448125 920714 +448147 718808 +448272 891694 +448278 929436 +448297 1.22793e+06 +448303 745139 +448342 873769 +448353 692744 +448375 1.08389e+06 +448386 687058 +448408 932981 +448411 1.2287e+06 +448433 1.22952e+06 +448481 930425 +448486 742953 +448486 1.23233e+06 +448508 937867 +448514 1.23186e+06 +448531 887881 +448547 934706 +448586 936614 +448614 926236 +448622 935306 +448644 752044 +448664 930003 +448664 1.23435e+06 +448731 916908 +448739 881428 +448753 1.07262e+06 +448756 919192 +448758 985183 +448778 977328 +448831 686725 +448833 694481 +448833 932828 +448836 931381 +448839 940414 +448872 878644 +448872 896200 +448878 943694 +448897 933497 +448900 883072 +448944 714964 +448956 854164 +448994 971147 +449008 935889 +449022 850608 +449028 927833 +449033 935661 +449033 941953 +449061 669906 +449069 728069 +449086 935928 +449089 1.07163e+06 +449097 896044 +449100 903156 +449111 1.16098e+06 +449133 935031 +449150 935531 +449181 731247 +449194 1.23316e+06 +449250 934625 +449264 913008 +449272 899633 +449281 748922 +449297 935222 +449328 960542 +449339 951872 +449342 686458 +449353 936319 +449361 946964 +449364 722056 +449367 936658 +449369 913928 +449397 935764 +449425 957233 +449431 1.23034e+06 +449461 686444 +449481 911506 +449508 929764 +449511 880467 +449519 910347 +449531 922911 +449531 929950 +449550 953661 +449564 905975 +449564 927656 +449583 1.24017e+06 +449592 896300 +449600 909369 +449611 907997 +449633 735878 +449636 938469 +449639 940472 +449667 923742 +449694 935139 +449714 936042 +449714 1.16283e+06 +449747 927567 +449767 856506 +449789 924356 +449800 932636 +449803 852111 +449808 888308 +449839 925558 +449861 1.22982e+06 +449864 734469 +449867 935714 +449903 1.23025e+06 +449917 931661 +449931 927567 +449939 733653 +449944 724003 +449958 928792 +449969 726717 +449975 917269 +449983 1.20215e+06 +449986 932056 +449992 883719 +450031 903356 +450050 720994 +450053 1.22782e+06 +450061 931564 +450072 936556 +450097 933489 +450097 961956 +450106 934553 +450117 999553 +450158 952383 +450214 927808 +450231 1.02036e+06 +450239 692903 +450269 930875 +450275 846747 +450314 927928 +450322 933383 +450328 933600 +450331 900739 +450350 991236 +450381 933864 +450408 932628 +450419 937889 +450436 920408 +450475 1.01601e+06 +450503 931564 +450533 932472 +450542 929564 +450544 877492 +450564 928058 +450575 930736 +450586 698828 +450586 921722 +450608 940731 +450617 834328 +450650 880342 +450650 939108 +450656 932017 +450681 1.22799e+06 +450697 929514 +450700 852644 +450725 934556 +450758 941897 +450761 933325 +450789 1.23485e+06 +450792 931469 +450817 943067 +450847 930097 +450861 932631 +450883 937342 +450900 929722 +450942 933561 +450953 935472 +450994 1.23394e+06 +451000 876306 +451003 914886 +451028 930789 +451050 932083 +451078 876142 +451078 932378 +451083 1.22896e+06 +451158 1.23206e+06 +451194 934022 +451200 932875 +451219 950431 +451231 925364 +451244 926733 +451272 945278 +451314 856167 +451386 903400 +451389 947778 +451403 891522 +451428 846603 +451439 1.22854e+06 +451475 1.22576e+06 +451486 931514 +451506 946828 +451558 936661 +451569 674053 +451581 851242 +451600 929931 +451603 930886 +451608 932347 +451672 911492 +451689 693850 +451719 938744 +451758 1.13895e+06 +451806 896833 +451825 1.22807e+06 +451833 692275 +451858 1.09246e+06 +451872 871208 +451889 672792 +451889 933972 +451931 953203 +451969 960194 +451978 933869 +452086 1.17864e+06 +452103 1.23198e+06 +452164 1.12637e+06 +452167 850139 +452192 966353 +452208 1.23075e+06 +452292 940017 +452311 1.22755e+06 +452325 880075 +452331 949397 +452333 932911 +452344 1.20184e+06 +452378 936542 +452386 686642 +452436 997767 +452439 935147 +452444 1.23114e+06 +452519 922711 +452536 689864 +452628 941242 +452631 1.22691e+06 +452661 932342 +452783 1.2301e+06 +452789 929850 +452897 1.22332e+06 +452917 964625 +452944 1.23175e+06 +452958 1.08913e+06 +453000 1.22772e+06 +453003 1.22972e+06 +453011 949439 +453039 935669 +453047 964444 +453056 937939 +453069 923619 +453142 916508 +453144 1.07362e+06 +453150 955997 +453153 944083 +453175 902083 +453181 852583 +453194 932022 +453206 927047 +453247 1.18087e+06 +453261 945458 +453319 973047 +453322 975197 +453325 937458 +453364 929969 +453417 1.23186e+06 +453489 1.11729e+06 +453533 1.19557e+06 +453544 1.17229e+06 +453561 926333 +453567 1.22839e+06 +453575 842239 +453575 1.22606e+06 +453622 685056 +453658 1.22611e+06 +453708 879522 +453733 849553 +453736 928897 +453806 947117 +453808 1.22594e+06 +453842 1.22763e+06 +453894 928478 +453933 938767 +453944 921422 +453975 1.2226e+06 +453981 929872 +454014 918489 +454019 926522 +454022 1.22752e+06 +454086 917439 +454086 968575 +454153 876075 +454169 920328 +454208 1.22669e+06 +454214 838183 +454222 1.16314e+06 +454264 1.17278e+06 +454314 1.2277e+06 +454317 849919 +454439 1.05407e+06 +454442 847867 +454444 990289 +454464 1.22638e+06 +454467 1.22758e+06 +454469 1.22529e+06 +454475 980983 +454514 925539 +454522 924544 +454531 996536 +454533 1.21129e+06 +454542 945181 +454556 1.12196e+06 +454558 944286 +454564 1.23843e+06 +454569 912731 +454594 695911 +454603 964333 +454631 911039 +454647 984861 +454686 1.22608e+06 +454711 897297 +454719 943406 +454833 1.18829e+06 +454836 1.22754e+06 +454853 929617 +454853 1.0897e+06 +454872 1.22802e+06 +454903 932475 +454944 1.22866e+06 +454975 957964 +454983 1.2243e+06 +454989 1.22763e+06 +455011 951242 +455042 1.22536e+06 +455050 1.22797e+06 +455061 917381 +455064 1.00032e+06 +455114 929800 +455200 1.23059e+06 +455200 1.23109e+06 +455228 1.23888e+06 +455231 1.22989e+06 +455236 1.22675e+06 +455261 925083 +455322 920192 +455344 1.22418e+06 +455372 1.00428e+06 +455394 1.22386e+06 +455461 902864 +455528 847839 +455572 942239 +455597 1.22559e+06 +455650 1.17916e+06 +455692 964342 +455700 935814 +455703 1.17527e+06 +455717 961731 +455719 889028 +455728 932242 +455761 924825 +455828 1.22352e+06 +455861 959136 +455864 929744 +455872 1.22398e+06 +455919 941658 +455953 968331 +455972 1.22992e+06 +456092 944514 +456136 1.23942e+06 +456144 955308 +456217 942067 +456275 685750 +456300 945697 +456367 894119 +456367 1.09251e+06 +456389 1.2266e+06 +456469 844744 +456503 953894 +456572 687103 +456592 924669 +456625 1.1056e+06 +456628 946897 +456647 939094 +456647 970494 +456667 1.2256e+06 +456692 1.08771e+06 +456700 1.21889e+06 +456717 1.22662e+06 +456722 1.18788e+06 +456747 948072 +456797 1.11038e+06 +456856 929653 +456967 904003 +457056 1.2152e+06 +457150 1.21463e+06 +457169 1.202e+06 +457228 931706 +457228 989406 +457278 1.21485e+06 +457311 944697 +457325 1.07611e+06 +457375 949522 +457394 919253 +457425 1.19194e+06 +457453 870644 +457544 1.22876e+06 +457558 936542 +457575 929622 +457694 996192 +457714 879947 +457761 1.11176e+06 +457764 926825 +457806 1.19216e+06 +457811 1.22532e+06 +457833 1.085e+06 +457839 847278 +457858 923808 +457869 879036 +457917 977506 +457950 880719 +458044 964989 +458086 961431 +458119 1.18489e+06 +458139 1.18424e+06 +458144 1.0081e+06 +458153 1.22741e+06 +458203 880658 +458208 1.20821e+06 +458225 918892 +458261 929683 +458294 957917 +458300 942933 +458347 1.00069e+06 +458350 1.09955e+06 +458400 1.19699e+06 +458406 1.19288e+06 +458406 1.22841e+06 +458528 870217 +458567 1.11332e+06 +458589 1.23192e+06 +458661 1.22405e+06 +458669 951519 +458708 1.12097e+06 +458769 932936 +458775 923672 +458842 1.06623e+06 +458853 953772 +458889 1.04552e+06 +458903 1.22806e+06 +458919 1.2396e+06 +458958 1.1949e+06 +459047 1.22743e+06 +459172 892442 +459175 1.19341e+06 +459267 1.16121e+06 +459344 904414 +459408 1.02159e+06 +459578 862461 +459747 948653 +459764 943622 +459817 941044 +459933 1.23921e+06 +459942 959764 +459964 684467 +460014 1.02636e+06 +460028 985267 +460042 956825 +460086 1.22843e+06 +460114 929442 +460131 914844 +460228 1.14177e+06 +460244 1.2391e+06 +460314 993786 +460342 1.12535e+06 +460494 1.18387e+06 +460522 1.18402e+06 +460642 886314 +460647 1.18342e+06 +460697 969014 +460706 936675 +460756 971514 +460811 886269 +460858 948656 +460892 1.22935e+06 +460911 945033 +460922 1.00629e+06 +460928 886422 +460981 883339 +460994 918247 +461014 1.23206e+06 +461078 976361 +461261 678408 +461303 949483 +461311 928672 +461336 1.00161e+06 +461381 934706 +461383 1.22937e+06 +461386 980900 +461450 1.15977e+06 +461469 1.22907e+06 +461531 953286 +461644 1.2294e+06 +461650 950389 +461653 1.23922e+06 +461831 1.03394e+06 +461875 1.22904e+06 +461881 1.2383e+06 +462003 1.2395e+06 +462033 1.23382e+06 +462069 1.19768e+06 +462114 1.19136e+06 +462150 1.19996e+06 +462258 976622 +462272 1.16028e+06 +462286 1.19099e+06 +462350 1.1624e+06 +462367 1.1212e+06 +462414 1.16466e+06 +462469 1.14159e+06 +462511 1.19901e+06 +462592 974558 +462633 1.19487e+06 +462636 965878 +462653 966056 +462664 1.06677e+06 +462667 950625 +462667 971319 +462667 1.00232e+06 +462706 1.18152e+06 +462753 1.22906e+06 +462806 957133 +462811 874408 +462831 960772 +462858 1.19283e+06 +463011 989542 +463044 1.1936e+06 +463192 1.1152e+06 +463217 954450 +463256 906608 +463322 1.13293e+06 +463394 1.17047e+06 +463422 1.20186e+06 +463433 942864 +463525 1.24053e+06 +463533 918222 +463550 855094 +463556 947919 +463572 982942 +463581 942006 +463592 987153 +463669 1.04284e+06 +463725 1.02327e+06 +463761 1.15937e+06 +463775 1.20308e+06 +463958 1.12729e+06 +463983 950144 +464022 1.20261e+06 +464039 1.01846e+06 +464050 1.16804e+06 +464081 943556 +464083 1.0584e+06 +464111 866478 +464164 1.17044e+06 +464167 1.17017e+06 +464281 902458 +464356 1.09834e+06 +464400 1.22846e+06 +464417 976808 +464425 951358 +464453 1.08541e+06 +464478 1.20419e+06 +464497 901864 +464542 927617 +464547 901708 +464736 938986 +464750 1.17602e+06 +464753 899397 +464775 939775 +464794 1.16254e+06 +464814 900528 +464822 939575 +464856 943603 +464886 876675 +464911 1.15798e+06 +464914 1.22937e+06 +464947 873542 +464992 876117 +465083 997708 +465100 1.14092e+06 +465150 916997 +465181 953758 +465206 942883 +465331 937100 +465392 1.02868e+06 +465436 873953 +465483 1.10901e+06 +465508 1.16924e+06 +465539 1.20382e+06 +465567 874372 +465575 1.20474e+06 +465586 1.22274e+06 +465622 921472 +465706 1.23296e+06 +465708 960828 +465747 1.22907e+06 +465789 1.16705e+06 +465839 917989 +465897 1.11915e+06 +465925 908836 +465928 1.12035e+06 +465944 955722 +466022 1.20505e+06 +466031 943092 +466064 1.20439e+06 +466181 1.20552e+06 +466231 976011 +466300 950886 +466486 970167 +466522 964194 +466542 1.20529e+06 +466622 1.22963e+06 +466636 1.1886e+06 +466639 924247 +466733 908947 +466811 680164 +466867 1.23732e+06 +467022 1.20754e+06 +467067 924281 +467164 1.22953e+06 +467181 944039 +467208 921039 +467217 924592 +467281 957006 +467311 939578 +467311 1.20698e+06 +467314 1.17179e+06 +467325 1.16999e+06 +467353 1.22988e+06 +467369 1.16769e+06 +467472 922253 +467539 895839 +467539 950978 +467567 884528 +467589 1.1408e+06 +467722 678344 +467786 884889 +467833 921064 +467900 681581 +467911 1.17249e+06 +467931 1.05312e+06 +467992 1.22869e+06 +467994 1.16555e+06 +468083 1.00783e+06 +468108 908181 +468150 1.01829e+06 +468172 958450 +468261 1.19174e+06 +468267 1.00889e+06 +468406 1.23231e+06 +468450 1.01411e+06 +468547 999156 +468569 1.22852e+06 +468606 680125 +468633 1.14048e+06 +468675 1.22265e+06 +468708 1.13944e+06 +468711 893139 +468722 1.13993e+06 +468739 967672 +468750 969000 +468753 965786 +468767 967031 +468772 967894 +468792 1.02789e+06 +468803 1.17363e+06 +468808 963164 +468839 1.02315e+06 +468853 1.03199e+06 +468864 960942 +468883 1.22687e+06 +468903 1.24103e+06 +468939 992994 +469006 972108 +469006 1.02045e+06 +469011 1.19629e+06 +469086 678264 +469103 1.17075e+06 +469106 987081 +469181 1.04004e+06 +469217 1.16897e+06 +469222 950583 +469233 980028 +469292 929194 +469422 1.22605e+06 +469556 1.23772e+06 +469631 1.24164e+06 +469678 1.19039e+06 +469722 1.18614e+06 +469736 1.23691e+06 +469811 1.23888e+06 +469814 1.23601e+06 +469833 1.20416e+06 +469850 1.04188e+06 +469933 935983 +469967 1.20547e+06 +470036 1.23408e+06 +470075 1.22908e+06 +470081 1.1714e+06 +470228 916706 +470344 1.22822e+06 +470381 1.22899e+06 +470533 1.23264e+06 +470625 1.09428e+06 +470700 886431 +470789 962586 +470969 1.2263e+06 +470981 1.22203e+06 +471014 945869 +471042 1.22433e+06 +471053 1.04712e+06 +471164 1.01299e+06 +471219 885689 +471269 885808 +471275 1.18379e+06 +471303 1.19277e+06 +471536 1.10218e+06 +471556 1.22433e+06 +471572 679358 +471586 1.00783e+06 +471633 1.22026e+06 +471700 1.22601e+06 +471733 884292 +471772 1.22185e+06 +471911 1.22289e+06 +471917 1.14891e+06 +471942 884072 +471956 1.20938e+06 +472033 1.22239e+06 +472044 1.2199e+06 +472156 1.23096e+06 +472233 1.17071e+06 +472236 1.20992e+06 +472283 934889 +472344 1.19851e+06 +472358 1.22549e+06 +472361 1.17369e+06 +472372 935300 +472375 884431 +472394 1.22356e+06 +472397 1.22515e+06 +472467 884539 +472483 1.22312e+06 +472531 1.22443e+06 +472586 685900 +472603 962586 +472633 1.01778e+06 +472647 1.22249e+06 +472711 1.117e+06 +472792 1.22251e+06 +472864 1.01922e+06 +472889 934275 +472892 1.01029e+06 +472944 912572 +472944 1.01622e+06 +472956 934186 +472994 1.22507e+06 +472997 965150 +473075 1.22227e+06 +473089 1.22002e+06 +473153 959683 +473178 1.19552e+06 +473206 932983 +473211 1.01381e+06 +473294 1.22579e+06 +473331 937925 +473333 1.1869e+06 +473353 1.16888e+06 +473458 1.05592e+06 +473517 968283 +473719 1.02754e+06 +473794 946039 +473803 931681 +473811 1.22234e+06 +473853 1.17171e+06 +473861 1.10925e+06 +473894 1.19489e+06 +473997 930722 +474019 1.22323e+06 +474039 970617 +474158 1.20292e+06 +474236 1.20309e+06 +474364 1.22339e+06 +474444 981236 +474497 991258 +474564 1.01137e+06 +474603 1.14882e+06 +474625 925397 +474703 1.15801e+06 +474706 1.22346e+06 +474736 948800 +474742 1.15927e+06 +474742 1.2226e+06 +474811 1.18253e+06 +474831 1.22216e+06 +474844 1.22293e+06 +474858 1.00443e+06 +474875 1.17575e+06 +474889 924647 +474892 928836 +474936 927778 +474958 1.21786e+06 +474981 973242 +474983 973700 +475000 1.113e+06 +475061 1.15998e+06 +475142 978356 +475197 921383 +475200 1.0089e+06 +475217 953981 +475225 1.20469e+06 +475233 925364 +475236 1.22623e+06 +475289 1.14101e+06 +475289 1.21824e+06 +475300 922369 +475303 1.22031e+06 +475325 926233 +475331 923400 +475361 962800 +475383 1.16118e+06 +475406 1.22635e+06 +475411 1.22175e+06 +475428 1.16181e+06 +475536 1.22663e+06 +475606 1.11545e+06 +475669 1.22157e+06 +475675 1.22631e+06 +475708 1.22221e+06 +475731 1.17681e+06 +475764 957511 +475831 1.22707e+06 +475850 1.22598e+06 +475964 1.2066e+06 +475972 1.15343e+06 +476000 1.22692e+06 +476064 1.22331e+06 +476092 1.14668e+06 +476092 1.22654e+06 +476106 1.22199e+06 +476114 1.19291e+06 +476147 1.11979e+06 +476211 1.22226e+06 +476225 1.22067e+06 +476247 1.2252e+06 +476319 1.22217e+06 +476369 958861 +476397 974531 +476447 1.17592e+06 +476464 1.22216e+06 +476472 1.2007e+06 +476481 1.21913e+06 +476483 1.17091e+06 +476492 996289 +476522 1.01415e+06 +476542 1.18149e+06 +476569 1.17195e+06 +476569 1.17282e+06 +476575 1.17239e+06 +476589 1.17425e+06 +476675 960097 +476742 1.2212e+06 +476778 1.16779e+06 +476800 991375 +476814 1.17282e+06 +476817 1.22208e+06 +476919 954308 +476936 1.14162e+06 +477033 1.22206e+06 +477086 919444 +477167 1.04156e+06 +477181 1.16951e+06 +477297 1.16769e+06 +477314 1.22551e+06 +477331 945483 +477342 975664 +477361 1.22645e+06 +477425 1.21984e+06 +477506 903342 +477569 1.2228e+06 +477575 1.22243e+06 +477589 1.18704e+06 +477600 1.22204e+06 +477614 1.22345e+06 +477639 981769 +477661 1.16786e+06 +477697 999350 +477736 971094 +477742 966078 +477847 1.22273e+06 +477883 1.22308e+06 +477964 1.22382e+06 +478022 1.03283e+06 +478056 922744 +478108 1.22376e+06 +478125 1.16896e+06 +478139 1.12679e+06 +478200 1.10672e+06 +478211 1.22314e+06 +478222 1.22281e+06 +478392 958542 +478411 1.20015e+06 +478525 926894 +478556 1.2197e+06 +478564 1.04044e+06 +478569 1.21696e+06 +478628 1.21815e+06 +478822 962739 +479033 918669 +479067 976264 +479131 1.22097e+06 +479189 973647 +479253 970325 +479300 970242 +479325 1.19037e+06 +479417 1.19002e+06 +479447 1.22303e+06 +479506 1.24384e+06 +479533 1.02134e+06 +479625 995297 +479656 1.18975e+06 +479664 1.16868e+06 +479772 1.02496e+06 +479792 1.22201e+06 +480083 1.1967e+06 +480403 1.22405e+06 +480428 983358 +480511 1.19902e+06 +480519 1.22176e+06 +480561 1.00929e+06 +480633 1.14072e+06 +480797 1.23101e+06 +480842 1.21968e+06 +480906 1.0564e+06 +480961 1.19779e+06 +480981 1.09048e+06 +481128 988647 +481131 1.05198e+06 +481172 1.22759e+06 +481183 1.23429e+06 +481192 961808 +481333 1.03633e+06 +481444 1.04516e+06 +481703 1.11945e+06 +481786 1.10111e+06 +481808 1.17036e+06 +481958 1.14312e+06 +481967 967725 +481969 1.06636e+06 +481989 1.22124e+06 +482200 1.22685e+06 +482258 1.14275e+06 +482325 1.01296e+06 +482364 1.01133e+06 +482414 1.22369e+06 +482556 1.216e+06 +482753 1.01428e+06 +482764 1.17714e+06 +482767 1.16552e+06 +482889 994372 +482917 973711 +482933 1.22642e+06 +483078 1.12249e+06 +483172 1.0239e+06 +483328 968206 +483444 1.03165e+06 +483458 1.00405e+06 +483597 1.07874e+06 +483614 1.19582e+06 +483636 1.20121e+06 +483689 999958 +483725 1.14181e+06 +483883 1.15555e+06 +483925 1.22494e+06 +483972 1.02938e+06 +483986 977408 +483989 935556 +484111 1.14337e+06 +484111 1.19526e+06 +484122 974103 +484214 1.22333e+06 +484500 968722 +484633 1.15889e+06 +484758 1.22324e+06 +484867 992094 +485039 1.22236e+06 +485053 1.11856e+06 +485106 1.10967e+06 +485128 1.22611e+06 +485333 1.08783e+06 +485344 1.23016e+06 +485394 1.21745e+06 +485467 1.17904e+06 +485500 1.09683e+06 +485569 1.13012e+06 +485711 971775 +485775 965203 +485867 933989 +485900 1.09231e+06 +486011 934108 +486108 1.18055e+06 +486331 1.12325e+06 +486483 1.18737e+06 +486608 998411 +486747 1.02082e+06 +486914 1.16315e+06 +487006 961814 +487053 1.19438e+06 +487125 945997 +487411 1.17416e+06 +487458 1.22401e+06 +487597 1.22487e+06 +487600 983678 +487633 1.01513e+06 +487744 969461 +487747 1.04562e+06 +487925 1.0542e+06 +487939 976219 +488031 1.02246e+06 +488131 1.00061e+06 +488272 1.00445e+06 +488392 997444 +488461 957625 +488467 1.2259e+06 +488578 996175 +488800 1.15052e+06 +489053 953142 +489094 1.0102e+06 +489142 1.03294e+06 +489203 1.22341e+06 +489233 979178 +489392 1.19434e+06 +489467 1.22451e+06 +489664 972433 +489939 1.22746e+06 +490000 1.22264e+06 diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/Makefile.am b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/Makefile.am new file mode 100644 index 000000000..319cac57b --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/Makefile.am @@ -0,0 +1,31 @@ +INCLUDES = -I ${EO_DIR}/src/ -I ../../../../src/ + + +AM_CXXFLAGS =\ + -Wall\ + -Werror\ + -Wno-deprecated\ + -ansi\ + -pedantic + +lib_LIBRARIES = libtsp.a + +libtsp_a_SOURCES =\ + graph.cpp\ + route_init.cpp\ + route_eval.cpp\ + part_route_eval.cpp\ + edge_xover.cpp\ + order_xover.cpp\ + route_valid.cpp\ + partial_mapped_xover.cpp\ + city_swap.cpp\ + two_opt.cpp\ + two_opt_init.cpp\ + two_opt_next.cpp\ + two_opt_incr_eval.cpp\ + two_opt_tabu_list.cpp\ + two_opt_rand.cpp + + + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/city_swap.cpp b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/city_swap.cpp new file mode 100644 index 000000000..567f53fb6 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/city_swap.cpp @@ -0,0 +1,24 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "city_swap.cpp" + +// (c) OPAC Team, LIFL, 2002-2006 + +/* TEXT LICENCE + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include + +#include "city_swap.h" + +bool CitySwap :: operator () (Route & __route) { + + std :: swap (__route [rng.random (__route.size ())], + __route [rng.random (__route.size ())]) ; + + __route.invalidate () ; + + return true ; +} diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/city_swap.h b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/city_swap.h new file mode 100644 index 000000000..784324e1f --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/city_swap.h @@ -0,0 +1,29 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "city_swap.h" + +// (c) OPAC Team, LIFL, 2002-2006 + +/* TEXT LICENCE + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef city_swap_h +#define city_swap_h + +#include + +#include "route.h" + +/** Its swaps two vertices + randomly choosen */ +class CitySwap : public eoMonOp { + +public : + + bool operator () (Route & __route) ; + +} ; + +#endif diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/edge_xover.cpp b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/edge_xover.cpp new file mode 100644 index 000000000..c8984e204 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/edge_xover.cpp @@ -0,0 +1,142 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "edge_xover.cpp" + +// (c) OPAC Team, LIFL, 2003-2006 + +/* LICENCE TEXT + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include + +#include + +#include "edge_xover.h" +#include "route_valid.h" + +#define MAXINT 1000000 + +void +EdgeXover :: build_map (const Route & __par1, const Route & __par2) +{ + + unsigned int len = __par1.size () ; + + /* Initialization */ + _map.clear () ; + _map.resize (len) ; + + for (unsigned int i = 0 ; i < len ; i ++) + { + _map [__par1 [i]].insert (__par1 [(i + 1) % len]) ; + _map [__par2 [i]].insert (__par2 [(i + 1) % len]) ; + _map [__par1 [i]].insert (__par1 [(i - 1 + len) % len]) ; + _map [__par2 [i]].insert (__par2 [(i - 1 + len) % len]) ; + } + + visited.clear () ; + visited.resize (len, false) ; +} + +void +EdgeXover :: remove_entry (unsigned int __vertex, std :: vector > & __map) +{ + + std :: set & neigh = __map [__vertex] ; + + for (std :: set :: iterator it = neigh.begin () ; it != neigh.end () ; it ++) + { + __map [* it].erase (__vertex) ; + } + +} + +void +EdgeXover :: add_vertex (unsigned int __vertex, Route & __child) +{ + visited [__vertex] = true ; + __child.push_back (__vertex) ; + remove_entry (__vertex, _map) ; /* Removing entries */ +} + +void +EdgeXover :: cross (const Route & __par1, const Route & __par2, Route & __child) { + + build_map (__par1, __par2) ; + + unsigned int len = __par1.size () ; + + /* Go ! */ + __child.clear () ; + + unsigned int cur_vertex = rng.random (len) ; + + add_vertex (cur_vertex, __child) ; + + for (unsigned int i = 1 ; i < len ; i ++) { + + unsigned int len_min_entry = MAXINT ; + + std :: set & neigh = _map [cur_vertex] ; + + for (std :: set :: iterator it = neigh.begin () ; it != neigh.end () ; it ++) + { + unsigned int l = _map [* it].size () ; + if (len_min_entry > l) + { + len_min_entry = l ; + } + } + + std :: vector cand ; /* Candidates */ + + for (std :: set :: iterator it = neigh.begin () ; it != neigh.end () ; it ++) + { + unsigned int l = _map [* it].size () ; + if (len_min_entry == l) + { + cand.push_back (* it) ; + } + } + + if (! cand.size ()) + { + + /* Oh no ! Implicit mutation */ + for (unsigned int j = 0 ; j < len ; j ++) + { + if (! visited [j]) + { + cand.push_back (j) ; + } + } + } + + cur_vertex = cand [rng.random (cand.size ())] ; + + add_vertex (cur_vertex, __child) ; + } +} + +bool +EdgeXover :: operator () (Route & __route1, Route & __route2) +{ + + // Init. copy + Route par [2] ; + par [0] = __route1 ; + par [1] = __route2 ; + + cross (par [0], par [1], __route1) ; + cross (par [1], par [0], __route2) ; + + assert (valid (__route1)) ; + assert (valid (__route2)) ; + + __route1.invalidate () ; + __route2.invalidate () ; + + return true ; +} diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/edge_xover.h b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/edge_xover.h new file mode 100644 index 000000000..3c22e2f8f --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/edge_xover.h @@ -0,0 +1,47 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "edge_xover.h" + +// (c) OPAC Team, LIFL, 2003-2006 + +/* TEXT LICENCE + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef edge_xover_h +#define edge_xover_h + +#include +#include + +#include + +#include "route.h" + +/** Edge Crossover */ +class EdgeXover : public eoQuadOp +{ + +public : + + bool operator () (Route & __route1, Route & __route2) ; + +private : + + void cross (const Route & __par1, const Route & __par2, Route & __child) ; /* Binary */ + + void remove_entry (unsigned int __vertex, std :: vector > & __map) ; + /* Updating the map of entries */ + + void build_map (const Route & __par1, const Route & __par2) ; + + void add_vertex (unsigned int __vertex, Route & __child) ; + + std :: vector > _map ; /* The handled map */ + + std :: vector visited ; /* Vertices that are already visited */ + +} ; + +#endif diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/graph.cpp b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/graph.cpp new file mode 100644 index 000000000..0a0e07fcd --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/graph.cpp @@ -0,0 +1,90 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "graph.cpp" + +// (c) OPAC Team, LIFL, 2003-2006 + +/* LICENCE TEXT + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include +#include +#include + +#include "graph.h" + +namespace Graph { + + static std :: vector > vectCoord ; // Coordinates + + static std :: vector > dist ; // Distances Mat. + + unsigned size () + { + return dist.size () ; + } + + void computeDistances () + { + + // Dim. + unsigned int numCities = vectCoord.size () ; + dist.resize (numCities) ; + for (unsigned int i = 0 ; i < dist.size () ; i ++) + { + dist [i].resize (numCities) ; + } + + // Computations. + for (unsigned int i = 0 ; i < dist.size () ; i ++) + { + for (unsigned int j = i + 1 ; j < dist.size () ; j ++) + { + double distX = (double)(vectCoord [i].first - vectCoord [j].first) ; + double distY = (double)(vectCoord [i].second - vectCoord [j].second) ; + dist [i] [j] = dist [j] [i] = (unsigned) (sqrt ((float) (distX * distX + distY * distY)) + 0.5) ; + } + } + } + + void load (const char * __fileName) + { + + std :: ifstream f (__fileName) ; + + std :: cout << ">> Loading [" << __fileName << "]" << std :: endl ; + + if (f) + { + unsigned int num_vert ; + + f >> num_vert ; + vectCoord.resize (num_vert) ; + + for (unsigned int i = 0 ; i < num_vert ; i ++) + { + f >> vectCoord [i].first >> vectCoord [i].second ; + } + + f.close () ; + + computeDistances () ; + } + else + { + + std :: cout << __fileName << " doesn't exist !!!" << std :: endl ; + // Bye !!! + exit (1) ; + } + } + + float distance (unsigned int __from, unsigned int __to) + { + return (float)(dist [__from] [__to]) ; + } +} + + diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/graph.h b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/graph.h new file mode 100644 index 000000000..19baf8ac4 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/graph.h @@ -0,0 +1,30 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "graph.h" + +// (c) OPAC Team, LIFL, 2003-2006 + +/* LICENCE TEXT + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef graph_h +#define graph_h + +#include +#include + +namespace Graph +{ + void load (const char * __file_name) ; + /* Loading cities + (expressed by their coordinates) + from the given file name */ + + float distance (unsigned int __from, unsigned int __to) ; + + unsigned int size () ; // How many cities ? +} + +#endif diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/libtsp.a b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/libtsp.a new file mode 100644 index 0000000000000000000000000000000000000000..bb42f2d0198845228840d6157a6cb5b935f1afb5 GIT binary patch literal 1699484 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

5k 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≫S;I7<=_bCu(NuZscB8 zcQvxhnSq%zV>u>SvX1-}P&+1cEY+a^wzGvq<~hm@Y;ikb+g@IzA_Ml~VPJ#$0(5Vx zMckksO}r^Dl{YE2-Xx_VSC2l-2$8LjEM8y(uDea)( z3`rldNr$oK{L}{Z#A!Dl#;B^-?)rMITO?V20a^tH|c;evP2M=&RWh|i322(*NagWAOd z6e!u;j1_Gb%Z?8!j$H(=H`S9;U2CAu=9!+rawu%i#1e$rhjzICbHj+_0-f#tl)R)5 z>MVJ?&S#1s-r-<0zqr?#{bqGzX==0S#L$SFak@^}v@HrCvSVr(r=X*-dbPCq>#B^c zFD{r{r>ooegN;4ZsY!=cBTehI5Tj1vA-J}>C;9>2% zqBUk(J2l#mwyn3plCm8+!?tLQwekqp!D*Vr&i-`F$Kw*E_9RM8R}4Gb{QmX34lrk? z&OwcYRZk{&!nNdh=@9*WY%4J43Dkz2J;gEY$%}`C1rQexfY~y3RBZceqm|h0wRQ(A z^)R!y*J2dgGFpKulR1X~V-HRTf~F=r5wa@kM(i-S&~V%X(Hg`Hq715{#(D(m9^&{V zs|8^^FjLf$9QAh4_z|;k29FJ73sMS87!}Emz!_~^SX!yndVH3({p^`9u|U(+Vsy<; zD#bBfZ`dJ&~tN*A~k<_h-7#S)D&I}Dn4xWY?)KOKY z8ZxtDx@tl*ZSOYy|dQoOm(siH*&QU6b)D_D8k2FePt)}Y znTJ}WXOUL!sA;+)YsWV;1uT?t^ko%xRVT6Sp(6XJ;8snU|{Ruw6M~&WOTBgGuZ) z9p_T_BK}*P?yy?PiP920JE{#jPTuwi^~a!ywT~5wT8S{t77@xLj^pWIU;&JUchk2t zAC@}2UNpDo(d$@p+yZ2DVPUq!Z2ESV>|F8#!PtzMBFjQ?LEnn(TX0aZ*bf3%V{gG3 zFra8I%_$gpLkoqP4)*c^Dc{>ZtB{_THDH%8Ot98;<#VX50ye~5)IGe$SBy&Vhxe{xWfIX{~tuUZ! zk5Q)9i8DTqT4?4!nLCBYxl@={O-kd&kjpw8tpLiV1FWyQsfdPr`*L)S3;X$RA^$Bh z-DE5*r2yL;KV(k7UgnO{TV^)323#!JhDT;m)$N{-MJ9cH-c|}&eI75{b5!i++P>aI z=Z?%PItCmthh3mN&jMpG6$H{8As2O|U7Hc0xpqNZjWOpH9Ep>0jXq%vWYyK~SbC}UR$HY_|s z%}i2_jtQpFBVci=5Sdj-!`?VkWku{1h8c5X%?3({1v6Epgoc*ur*efV5?h1;ckCFo zQXYvWjnZKs)w$gos+lR;4d}`8sp&eai>lK&{HH>*ZKF^ofQZ!|Y?(WHa3#7|7%wTV zHy@;3b!Sr@7P+iib9&~QRl_i+ZcFFQ+E2vpLQZFOl837&5?|$w(F40Z6=Sup5NY-# zatn*K6~-ib!)PbsXH=j4)oq*iek>Mkk@Yxg@SvWU+HQN@#4-YHd~jC*1qdwIQL8D% z;Ve`BCADozevg&{2n05Hm_|b)y)*`_!f?uL$MBjJv9UX&Rb=vO5Eh$~ed?~`Z&+|~ zGllgnZ?9g{XcPkNBHIOc(atKGhU#Xl*s!AojWXn}t@L1cpihoCIC~S^PLHSH#H<3i z8RM$d%P5-i$Ubbr^l;pXZe%n#T8c$eD^FXgX!GNo(BnF3IM$crffUvFVaZ6LvPUIb zw)HBsOiUWv5>xSb1{?!CX%9oQ%O4FkgX!>QWl$TkFuTi$J+RZsN33h;hEw@qPczI7 zBOja2r8+zks>lAKIQywcSS}Qk(~19~ZRZ zV0)8;XQH&#a2S`)P`n9^eem$$W(>?JJExlmph>nF)=(z#0T|{Px_`5e5U26k=(nr+#O1Yc!-p9&1ZMiUnYHr_;&2phQ8mX2r~(upIs{&`3#hnO?<=*JNIUExAT= zf!*Jx1B5cANoA+Qa&Te-ZOqq_uNXipaR`HZsj7H?=6T9Tr z!ZkNHA6?;TTV!kP1|B<9*{MLB2xvC>T1l=1CmGG0k_T>$Hl16xoL zCyQG!zOLc4JvQ*=c0prF2NQQQUbMpt^kM=I8w|AE-|#px1o1SO;{s?^0kgF#G5d`7 z=~4@lA_1OM%Ek2k<%?RAN_x-?@Fn2Tn;!7~|XmM)OB zg^io@l@Zh6{a&YDW*e@N%y88M3a=Z=n_UsYVCsU(raMXvoVMqs%~dD& ze!K+RC_%^!VBi-AV89F+SHSE7>P#8R*3Hr~i6|bsBi3{wPU7ngxf!Jni!v3*I^dTH!^st zpeqZrm=wEH$r^G4pQ+KQp69@7Zf^bLGy)7yujgvXh}~Hzqi?~6%;tl`zH^(d9PjIl zEzv^mw(khc5UNv=*teYPw)`ctJ7W{rXF9@D!u|>B27Ywh+P9m0v>I1~%|9|fr)|jQ z2uFz2tiAv%394wYlg%)(lw=vLPh-5$Xz=GyyT`e3ZVl2@!518Hbcc$aq9*Trr1=~U zOq=6DJvgS?9Q`>^C~!9&sz@^<%HHe+s^c=^5eq*X+gSEE!*JWEUx6TW^Gz?4Wp~+_ zVanC6iP<@WEs450U_7aD%4HR|=gF4NOv^o)jhenC5Dq%+`0zYyso5tpzRWzM@{bnC zE%CIft+f;lb#cgG<2mL?aUA_Fgq#qE;Ix=nMBQ}gw*4%Z>D;;!<|;VG33F9!$KA#Q z$T9w5r>=HbqrPW%yQ!YJ4Thh))U3QC+Y(`%a5LayC6AU1-A!}y^rmuYWN!K&`(BKN z)8l4XYa+U6lp0U5Ix(?W!U8Mjehbi(4>)5bIE;h&Z4}Gu$E$e4Y|1^JJ1jI-APuM1 zFhkQ7(rP%NaoPh z2vEM%)Z`{G-|A^f+`2qEerm1ET(&h)rs#{uh$AI&Id*uX6&K5}Q0}Rkq}iPg*N5de zcP~GJ^KEb@vO61@8z-zKS0i-UWW=*4R+(M7QPrU1iwoy#hwAyv-J7|pPotg|~V=2oJU{bBr ziJhA{?=e1HF7Dy1h7V4n=!;LHm`T=ICZl5sQ`IY5d3rpwr+Ud5Xa`FfXPh%jkmCAr zsXD@WtyElW=kBUuqk-QY%-|o673kAh=HE%qIAEk!vkL?LzKw4)q`0q&NA+c+*^3Zq z264byPw9(0gvu2z!SPmMpj+S2OV4RbW+(0zST zlOmK;tlK8#EMxqG8cEz(mLDvDtBK>r)j2C7U`s&0_op{kd#gJw81jZpmp6+EPoFa1 z%rXT5g*DS`-15VW*BUKvj#UAw#argwj8fz$VOTMb1Ai@ViMAhSLiULt9d46gT)54| z3BsA%iG6PwWw8vSwZA-K4t=0nCic7AZdC09md5kY8#R3R(&WI3`Mzx=99iMzdxQA} z8|K2?0C_6P=#8AqY^9(i&$jI>dx4n8dF!8AH%w||laKMp9B0|M<)k=e+Zi>bMg21q z!g$ZH-?Df$ET}1^ex9Qf$^gjj5#7p`Dz5uKkAFa=ayq#cp}Rtfcxe$m&996l&$|!iFz4IA$Qpbz=jW|f5wb1Nwem1Sy_qZZt zTf1X1q~M$$tBsCIKU7&^XzKZsQRgc%;bPYz4 zSf&euIeJNSnTcI1({*Uey(yu#WCiu+S5xQ6bzW?MI^>k?+4pOW#IbaylWqSXIPo1b zV-?Kkorr=VA%Lp9`EWe=yCtQ>)}TKO27`xhYQgMLLNsh?X$4kx4Ry{!bJ1R+5@4^z$e&z>y(GwbV{6o6Fq|w%uS~EKEc@H$Ow6lBA8GdGd|1}Osu@vIh?j(`b3fD zeQBmS88d8{C5;TraVfLl#qyd-C@EkL20Ol(j_@ouqrFg|_9{ul%NvWeYaZLip)uBc zw^phKrbXudBRxshG5m*684s<2nfgolk4D?vcxeK{lEKmX-4!P8t|mI!vpW=tMbsi+ z+3C2W#LU)B*D5kiC}ru348*hH`Up=9EV5@jJANUEsq6M_U2+dwHK---bf9*{9ZoI@ z-o`GepzQ_P4P(Qha$u|wtD{fcp@wM8u*q66waT2lY1%`!xHB`~%u$3|KQlGZb+WA& z31S_f?7rQUp;zz$uh%GlQ$s)ZJR7-I>e{Y<0Wc8d#E zv(BCgEGzvZ_FxsWSez`zV{>nQ9Ebq%ej9Fj`3Auwew^mA*+x^_h}n0;d_6%?^x*#WTnO zWFGq%G*MqJiq&GC@z{c|>ac{og}5nb`li8Hb|zTYGEbTed|dVmm9Vq~VAXsK0lSib zg@kR_@`>_OQ?fMcRka}7hX;Zqsm-3y;K&-Q4wK$@YShjeYbHYVC!7BoqwExOc^vTW z)X~w1%&7xbMK#DSZpmP-7{pC8lUIs|wZOB~6{l5!kk-#3h@kFStIfjsD)#e`O_4 z)TcRBBAMJFtZ{sk z*y=n8uEQ*dfd8{`S24JuGPgy;Q7e9^VU>@2-jw2=wZg|w&S;l@VvkkxU+w}7&jd85 zoN}t`#0na?vRhWbP#O6uMo$<+usP9oelpAKtCkmKx0Wd5IA&Dqy$iqtSq7(Zm7DO@ zwqT6{rV^2AV-H^`%VuKwdJ|KR_$-YC(u4pqyS+w&g`Hewn0w(%qe&~9QEnQkt6So1 z8rg-W?YTt}FEg^_Q|(nUX9(Y$4YNo`5=#p0X>mTo3Nl3uM{GmZ5v7?mbQfCL8v2UyLTc(MmIu5<8t}U|N2d-|K9y z$LmG$fqvo^6oUpMUC#WnLu-W^|2OW!*$CSmc-q zU)|x9q*o6+OT2FVv9si@;jI=DGDihtm;u+o4GN~)w?VN{Au%LgsTuB+zq9oD(4 zTVCvJ=BdOx)-Rzj3~$4O-=)%IGiDhLF==_;{nE$RJf^I zqJ(I~?S^vzFPNdT#Why5&P4fUejKv~4*xU<$<0-!ii9fyPM*?C@ZZkNCuSDhyy}2h z;Co>F>mUe#wwUn=3j{cd7hWs6jF&_*H;|a>vP}zA@t2pyzYdLmS(T^G*Y(cUZseKrdKB*9PphG+ z%FWPg{m@S&Vv?bUd+L;JqBM5>SwhMVpobulA#*Ou=ME)#MpZg|v~Lal^Le zYzDXp2ytw(bKRU*Fp;o7vFe4|mvhm5MJAH1PFQ9O98 za4^ha(ylFz1}Ih!#%`rNG~$ZogV7UBZcO|KP2kovL*>U0E^f)wT6p!~T6OB+YQ@;} zT@5=8kg%CGB}^Z60J=RNbPCHIN_$FaI6mq+SH(WNoHpB`_Swp4_*n7cIAzBQ4QMEc z>)kC)Wp`{Lt_A1PvF}g-fEl00Qk_A<86G51XnjWNZSp8G2N2ZlHZZ+HEL3l%iD|#& z$$PkjGjP1s2SzM%Bh_+l1GeYH7U8p(GGfzBEGhrc7qx)64nn?^T1PVW2EApZcE*8N z0!A^SYfElI8S7HU#vx5-R*Ovxq_x(0Vh$`w>BL&*em`fTf#J=?80ToDz|FSfueKVR zjrh_O1P#$7h6>v22V#wCZCAl$`G}*j++uXOZ5xrQsB$6Bp&aJv_FJi0wP{@gG~-aL zOyZ0)2#?lJKul^>UXcMu96h)uB~XUeF?NqF3Qr(Xet4Z?W{=u1my&$+Hk-!NXD*te z+Dzp~`cQ^7ZW2xPA&Vut1P6LJ7M5Y=WplYQ5^dTX?~w&3L%jmo`$Zo!itdnl1!EC* z=i?y8^7IrmMhsOWjOXq%n<&U3f?ds!Unc4~kouGoGg)EC`B(?Cs?)4A+H5${BW%ZTL7FQg1=`gh{s2jj&TfS-! zCyGDix(v4qh=M?yj&NmK@yuZw8Pwo_6@qeF%nGsNHz)Q{P0r{Yi@0<*(G>0Ug|{1Z z6!lu@+#C}#Kweu4VqzA%-6}IDDll4|TG~S!#%zf8?h=_+rlwqKkY64dgMGQgxNw_M z2=oZJW;|NS7hocHJ@mMP+|BA!Gs@bN8GEtGdKpzTThx~fr~ZnEbVJ+;leVDRkS^Dk z-o&u6q-ZHM-uHwRBx~Fm#bYfG8-?B|w~Dh*R+lznK~^(n4$Qkwn7z=NQ!zsVEL)YJ zatZ@c+b)MiJ28S-yR{<8Q#I;3{Q^@-eaq}R2DEMjnr}2mJoAjcq}(*|0cyn=U8}Mk zFq2uYUxDXxaI$Mqc9=@rTHx5_)Xrjs>P7a5Xd~{SkUo7zQer`c4T;B)=0+#oMwaZ# z7VD@tGuexJh^AR9n;xgF@-`dl%|@w)iyA|yK2X{i#q@_!#cGDrX*b zMtQCuDo_=Ju30ukbIQ_18aF09%;Kcw=mWh3nDOCBO*~l;pLU8xIWXO(D{8LHnAt~d zyAVV30jI>IEuB>DLFb$tsEwRlHI&0l%>Gzt&rW0XeHP0$O~;t4)=O&z83=3dBhW#_ zuQHUD$>Z6Z{T}-nZ>`~U2%hWtz{5QaGeylF!qOPIQY1T27v~0t2({{>s zJ0VzxkN~c1`1W?kGmj z474Q{4_w9)jIjt?-HI*HBe~6`+6Ks{MoMK<&$P?KZY**}Bxj^5U^bEPI4zS$vGN;4 zC85k2R^^jwp>Bo8Ayc-4X}8T6(=;;Go6^l-!0Z{Hs#UmG1sQ6jf!Mrcw7RRct&rIm z3s=eqClG3_Pi?ltQiFQ}+ymlawgkx!giuNI1|idp#(u?X;g|&Zs3EA6bDDvsKD!V z8)Ctv&CaZm9?JHzu{6yhO?C;{tqjyUt5BnM6g?((-}3+u5^LC3*4KFRCgue}-xn{Y z`OID2QkefR-El$EN50c^jxnbgS%JUJ?#$|#xm(dR2G~fay-&yZWw)Y6uS*?bk==-c z!gMOn+t4+7qZj(b&75HIC{c6tDSr9lWr@yIRb#F+=)&9}=xWNM_2cDX>`g-~4U5-G z$tJ0ETJ4W+%YjAz-Q5q5IqQNv6PWlLq&QGY*Hw~L}< zjy&>^p8ddK?LPzdDwu5dk2y_z=W4OO?r%Vv@CW~iA-d%l}#pg#GGP02Q~0w%Gr z4$&a7+e9;DFHCKiNm94%YuTCODlw~Gmcak0Ui9OB%(6rEg`wJ-p|-O8o%(*?g4Bk> z`Ur*r>f+W=u76ZrP;hwm%&Pj&B#-LeN-6l(znOkq_qJR1@=qF=S1GfTVK3A-uP=Df*R!^2%?(+@Sa1zp7HYsyqXlMh z0PLBMbe)yo!W-pcMjgeGX308s%jb2K*a~{;-)r3V>N=XXvN+*ZGHv)gyz=vGBlsnV z3A_`KG%O@%*{1!292pWF4`=4h$=TKd zBLJyjP4@Np;lLw2cFr^jBG!1=A4~;20@%5N5BuA0@B;swC?q z@~tA~?f7d!IS~EKjBq#*wJ6=D#shrI0oVxcpFQJ8y*ZQFs34kHC-8}TIo^np(`9VC zC<3KM$1z~n*OGKgLKm?Pr*M`lgQH^ubu7=?4Uj#(G^Od)b>peWO}dptv{pZA zc+cYgN*qz{l(p-U$4IGVlyG|}bsICWRqiHhQ7~Bt^#m zc2XDWzMH0;njEFb&FGuq>nY;vvNLI2^C+!rPSZ~%zGlTe&|#R+6sEX=8V$~8A4B!i zmWTCDO%GGy6H=f=UcN$$?}Zn-=5B}@gQd01hdpq}YG*laG&gHY=rh#hf|+B~Dt z6}55Q_>?Hx%?sa;-#fzX-4#XO0M3#N!!7f|eXB{hqr7l;GzquT3-|3N;nsTL?rak7 zR4?3JO~Q?M;l9%(+_)F+?k3@CUbycz33rwk?t4wbo#%!7L6dM7dEtK8B-~|QxOeU`$8?R*xVxo}-g!tLyZ z>uwTm4=)^PH~Q{gUbrVT3HMwt+zw5`&Go|V*d$!P7w(Bo!Y%W{G3|}gag-PC-4n?1Nw~FMxZRtCJJk#K)F$CZyl_uz5^mfJ*V80i%?mfDNw~ATa4f?{`FEZdZr>*1 zF7m=Xze%{uym0$933sIz?tmuYuJ*#sZ4&MpFWf;*!rkD7o7W`VO5aUbr7M8864Za2(qk^;b17+~OwRJc15^-cDBEbUq7D(d}4AtI%;!w^d@|p^UG6lpY4eJ<@4Z3 z4`j^M|8M#sU^rd}!ZExbj_3v{x zmwAR;=5pyh4L+Y#%=)$p2^243Jwab*b3+lrCM-c83g!9wy!o33F{QGBl`7#co zE?+(u(7Ous_I4lj;`dbKn;*ZM5pGFFxTzpqbY^xs#u3hs-+5mAro8yEpYXri3wjXU z#FtC&y#c+8K#$K@uPQ*7-Y20#`SezU-Yzk z=w0o_Z<9yw)d9V$8l?C9fZh!ry)7QS4+ivZZjj#h2J~+6(tD;y@3w&6?G5OCDWG?o zNAE0;-v15g-P<6&zYpl$;idO%kKR*I(0=(w|DIjGyC9rjzCZQicaBHzpn%@4pqEwu z_7CVi;KlD;kKW3FUT=f=9UIX5n-{3VR<%etZkju_C=jY$7?UVFg>Cx*A==FeJR(j_K^mYb4SMT5E(K|Mvw;J@a(tA`u@42Ao z%J(XdUNxXM1$wMc?sDZ(4(RoRUJnAXeBTLl<#BsJZ`W65)4MI8x7MR~wMXx%s6_Zg zT%WH4y?4RyE*HPu5Y8`;nwNj?L0}iZmk0DtKd&nqX#BW_d zZzbq00UgHgdXL^K0($qprYqvwhPzz+UKY?h5A;?e5b50jbm@J6K=0;@x}vW;Vn9dl z-2uHjK(ANyKJL*w0&_J#|1P<>EApn7F}>vo2a@qMYsV!2ZuIDVJD_(J=*@A17{a;u zeIuZ^Gw4m>In(<|kKVyMrQ>(|>$;+S7-3zG-hl|`$L}oAI}Bk+?ccv%^tmD@UmYX4}#vA7%SZ6(t9Mr z`RRQK^p@a7ruVZRy-$js>yxM6)Mds&M-R=+_-_rqdk(@4xwPo$KW4lx7r#XTy^BEa5`zq^za|9p9J*!L9Yk*nT|Vwj^56gjN?}1@}&p#o&mqR_>9-WAlx#9V?MacrK1nw z{Q9>R-(^|xyH1~h@0}9RJ00|T95JB#y)K|P;-%wz2gu4#mveNs-Ab#h0>2>-MeD7BQy&D_Q`*}d`GLPPmK*y!`Igm3luCCl} z20hm%m>8Fi7X;z%MY#PKKv$2j8ieb4TXwiI!ujQUHR5*|XzYy-{tW2icV$5DSkT); z-y*oYd{aR0r(XH~+@tq}fZpk#=cm`v`)ojO){~QV^h=N4eF43x2K0U$(A&$S_bZRy z4v35?58UH*4(R#wvL16cigtJ5)DPW^aQ%8l=+W&^rE+C zx1)msdKZBnzr}KU(4)5^pw|O>sFLx;H1aA1;SOu?-D2?FYrO9|y%v_;IRU-XLGS72 zOZFer%j>Lw-fdoa`~lBhzPv4;9=-bmdY6Ho<7E&mZs$AimhKPU*B~7`BAj2Zc7|Zi zrQ`43cl!c**MXkTzqtH6CJ6UQghP{wFBfh!2zOh9_zef~+slhz7l^s?Jtv@d2k2#u zTkj6S{Tku2>htGTQ+fPF!0{M9S*wBF9?g;1Cm)ksgJ9+Wz6FrbL z*IA(VCy#G;?dYI@-UFa_FJ#S3?~^@xN4WTjUhTbI(MgU7?zx}K1A4bXAiV)}NYCj( zF}=-qTl^rN6n^}G~XV4x3*JvG%pDj=ga$oaPLGo|8ns| zb&l60`JCZCgLmEK!Vxv3nn%l4bVui)Jf4jQ-@qM~8~ZudW&cYz<-4N`JVw#cL$K84 z-=7uz_J93{-DZV3xzin;mU!^1JIV$A(*u7#@D~Dq(Zqc~=;p+OU)@H6l-%l$Zb>}mIVC;G)eT9_Me>s8 z?}~n%JjAc==*xls*1-SO!2k8Y&mJtfx}$F;9{lP~NmS{-GkE@;z|Wa@a&zxU)|9U0zYTA$<-bGDDmJ|cl49M|I@(FnPPHvN1W*;S9kQw#Dibm5ocP-)m@jr zzeyhASGSqbB)7Vw-z6UNoHLK)>W(;bNUrY48`yBWJNi@d(D=!rCs%j$x5R^A-4QwI z!=;hz@xpC0)AnG@+fGkE^2z`s}E-#hR>JMcdz@b?7%*@1sf;NK_k zKR56{FYxah_@5v6_Y3^{2mS*B|AB#jZs0#C@XrhU2M7M%z~2}6=Ldd{D#_KIk{GeP z7A6nzt29~1bG4g7T+xs{;S=fq!-2KOyk13H(EWe{JADG4QVo z{4WmtCk6hK1OF+3|0U7qb%!N8Ct9BxaoC&fr7qk)-w>T9f60U|MX!>7+W5z!kIB!L zH7D8_alZ$zC&JB%#-p7z1h8kB6HP`Z$&APE?CF%FmiU2eX4u$#3axiM}bnrT5F|zSR3?Mt@KF&x)Qsi(iUN zPd*3pm4oGH&pjLC@uBkD@1GN`N`*f+Dx|_cv1>XN{=Deb^79*v(>nwIhXemjf&UKq zIWo?HM%sh$lg{Dt@8Auoy#K<$KN$F_hsEmxxH*^)eJ6PSgTUXTA^HIm{x#8vH)QjB zmj(WJ$8}{Q_nAn{^*{gUd@39&5Jx1fb>rd{9}RtO!?0>-@7dOsQmW( zmq&Yvh2ZTu(VL>f;U`^=r1aa{C9Vc#o_x$$^S0=o)f(%x?28G)QdUL zu=!jN{vP>l`ackL?PSwWPGnB>foL}TyzKL9qW;wLYoa4k&##S6)AMDfysnL=^_(;q zzc&W{cL)9l1Aq6!O>2=eNjD-IzJhc=?h1HoZ4Q zv%nJaySJG4Z;0l2EF$mEm7g=cInl?XPsvX*bD|rgqgYY+8~xlIXoOrQKkxDV>*c2| z$Q){TfW^EW_gUU7-vi+1#hK$A%y(ZYzomb3bf^5(t(b%P?vWrm1zKdi`TivR=+iF7 zbNb)RkLu#jcL)CK1OI0N|84Ty{P}!zAN;&U&SMTnm%r+HKm4iO@Zx5>|$&TP!@Z;+qmH5>E$ z&&Y4%|EK7y^4t9XOLVXN%*NT6-~TZc{_oN5%otp(pR+N)pDjO|)oje~`{lRvySk2+ z-wpuOCF9MDZu!8o)jJ|`YN9LmJ=56tNRI53O;-V#qIrd7OL35RmfTz_nC z-v45jW%2hURCP&KVh=Wk6>>76xL{_QC5+&ibJbY+@W%AGPYzS7Mhz`axd5?UpqO}khh$@q3!kzw6u*@0oSeqMw{YM-NWTH?WuMY5_z4j^C_uD!2XvTJLbEiyh z<{4z@36{D819P)OT0(EH4_u&+;M}4!rg>tH zjfM9K9La=pS77d`!Iz`liIXt!J_57))oB=-4}Z)){W ztx_ELCL&Jl#sk$(?wl8N0`$tE+F|4$(S}bl{Kfs;^ zr>70#fUxyu{)ua{xP&>dnRTw z@U)T>cw^MULZw_qpOS8w5GSm`c`R(yuRo;>x zE^X?=h?uLEa)oi^PmZU&W7aZi4t85hOT?LsCKC}*!T7alBAd)mGcto&(|6M6gY09} z>%Yzez*aI*tDMU1puRYe84^Q{G2> zXJeg~m?I*-{{WKij#vjG?k?P0cp4FOxjsv}*Au@VMYQk0_y5f2cyA{N-iiAQCyD)C z(Y?YWAt?-bt2`*XUYzX+d+g_-SoyP`vc1H>0}MQeo@ z1G`Q}c@k%1ok#e7KF1>GNA&!^b^lAkuj=_PiHPUldH)x%w}6F-uAfEFjKKY0!w>92 z*>Jt03wg-piLR<$exFj+sn@~x zsJ~&}7cLU66Po>b2zRFZR|r2P{J!uX!sqU8=?w@s3aLlI?_4E(kMIk^p9t?4J_!Rm z!yhQ5UIhJB;bp>43aPii=UvbzAkGo)CtM(0Dm+Sfg77q9Q8+H#EIe0uq3{ynM}%J$ z{zmwuJrxh(3gM8jCOk{{X5rPsYlL4G-Y)!}@IK*hg?|(7@HG3~rwI2JE)gCnoD^Ox ze7Erb2)`|SHWV|MpYw$;60R4XCw#B)qrz_s9};d41rXBNN4QvcitsGq+k_t%{zUk{ z!rh>VLppPXhYODp9w!_Uo-E7>i^7eOt>8;N{r95giD3T z35&vWg;xk~68=E=N8xtZVnBM&6z(saFFahhT9^|~3STC?Nca}v2ZWyxeo1(j@IK)m zgtNd%GakDO=Lq|RhY61to+g|So+W&Z@CxDkg*OVnD7;g6pYXTBE^Mh_Jf19ks<1~m zS9pli#;qQdIV8TRteZnE( zl<5%vm~3s(wH5pED}5}qe~z3?jGwZfZ(UlD#s zc%Seg;dalp@!3;2Pq;#OvT(g{TKG!grNXxhKP3E=@XNxxg!c)5EBup?#`&1vy9o~x zzDT%Uc%kqb;pc?k75-JY{l1poQ-lWyj}?vyUnRU+_}{`G3jZ$L?fI78KEf5kitr7> zn}l}@e=FQ$Kl}cC;qk&Vg#Ri0r0^c$pM`twZ{J@cTq~RsUL<^<@D|~(gxejU_zRB` z7KN`DUMu{D@HfJLJJ7!0Cma&igck{~72YoVop6u2_Wgr|M+=9AXA7?oeq8t+;U9!g zJIKaEG+s(7#<_p&fE5f%4zb1S@xYxn~tHE_{dZ!@|!B?-f2I{EKkc z`Ig?E!am_*;Tqvd!m4nq@DkzW!s~?J6YjLY(tn0|)xu%n2H}~)bA)dczEyam z@YBM(g+CPjMaV64>}Q@OoGn};TrNCcc!lsr;irXn2)`?QQ20mTZVT;qo+dmyeP75y)UM~EI@V|s#6MkFx>_zr_3xsQg)jjqvrt-w3x`V(IQFJXm5Pnbi7h%_-_B%bo=L?q!j})FH%n8pDzDoF7;k$)j z6n;&3xA2$3{}KL0*tOioQ^L;*za#vi@DIYj37>ML{r)qA2MZSoR|-_$A@jg+CJh zLii8i6OOX+=n+0&c&xA_JWu!<;d_K15`Ibeb>aQO-wJmgu;1BTxJ39uAynT?Igbio zA-q8NKH-OjUl86V{JHQq!rhOy^qwg^M0mLHRAE8*O5v-89~53M{HE}3VfQhX{*#0U z3l|C3312EaS9qcD{le>nw+rtQ{!aL3;WLi4-|G<$2v-XKU3jkW8sSHU-x2;$_{2d= zZ&%?$;WFW{+_}`!b62G6^;lm z6kZ~{PWWHKyM#Xw{zLeLDTrZpy{)g~2!nX>q7XDoLYvG@T|0~>S$bNS>;oic1 zga->33J(_^BODT*EZivEEPR>pV&P@NtAy_repL8L;TMEo6@Fj%6XE^BuC+G)PZiD+ z9wYpJjNK1hPv`&e@l!%0giHvb5gH*AGL8J3e<5VD#X_658X;qZOevGeWHNu2Xv+n_soVP71Aqwpo1if>>fM&n9M#x3{-euep1jt+rV|2p76d>Nq-XZpH8MI{t|bgRFL(u?zOZ;W!pUF&tOnTHJ}d@jEQQJ9r=K zO|jZ{!mjunj=?|-$9Z@jZ{P!L{IXSVJM4i2aU6!?0$hcgFcZ(?C9J?du-+?HdyTOR z%JbXidGTl*j}bT@SK~U|jhR@8KjH(d#zw(bJI>ezd*VP0z{&U;zKu(93x0x!Fc*vQ zcYKKLr&|5+!U5=yui|UC7-MiFZov%PkHuJq75EsRnMV6K6oYUsF2uFC0e532p2PyY zgTJA}t5$oB@LBAEqc8x&aV{p{`*<9Gz$&ap=MbwsPaK5-I1Asx1biR&;sHE|6=+Pi z>bJ-G=!DI&4R*l+I2j{x4X(%I_#^&~^=4S@HpVXKg`;si&c%he0XO45{0h(FMf9F& zwKoE%;)l2k_u+SV25;aUv^p z{)m5Kz1OY!ov;&j!yz~dLvR)@#aR3Zci=%hidXOkK0@1BRzIAv74}3QoQN;u0*uCw z@G$;}*YHn#j80)zyDhLAdgCY@kF#(##^M_M1b5+K{1$IuIo5l_YQHgdK`#uz$v7Jq zU_7qH-S{P*$4lt?rq!Moj>MVx2FBuh_$lteGx!7khJRwcaK?q5u^TSLHJFOUSb$Q47veHZ#x3|IX5%@$g!k|dbcnRtZ;Tz$69?l+ z48?Fc466aPlLc~(2ku?_aZ=P>{$<69Vo zt8gu*;T}AW-{a4C8|%!s`q2=(V{d#3r{WxZ8`onBX5%ruiZ`(mA7QU3tNq~^f{QT* zx8M%U!Q*%n%h7&;Rd0QC!%jE=hvKJr2rpncy1i}H*9-gMIGlvxI2YqF6^~*uUdO+& z#zL!|aE!&zF&D4m4Kx;6+ttQ)*a>}c2!`NN+<+fpCLYAIScG@+0oHxTYQGV>V^S>AHuqS?qTX8>T z<7q6!JNO&cUS`!_58bf~4#Uy-2F}6vFbR+2kN7**TW+<}7`vbsj>hpg7Z>6N+>HD1 zD?E!A(L2U!Zv;-qg?Jdh#hNRu^3Aag_QL0JJO*JTF2oJ^5q^zF@Di5bpZFM?yleHt z1$$s09D{)vj`MIeCgJD!1%8JG_zT{}nk%jL9k4BS#Qr!KgYZ>cfYJB?ZpMB1H5TAS z{1q#)POR0RhS&kSpdSv$sThjy;d(rXNAYL8jka-Cdrh$$`s3@k0uyj2?#5g^h1akQ zYp$}|X^Y<2AID=5&c+3}20y@b+=t&`0p7%4u|~YrejRLs?l=%%#OWA@3AhgT;n(;h zUPGG%t37*cjqR}?`r#`$1D9bO?!a`+!!vjd%dp03#*5FO2M)ne_!>rFJid>+FcZ(< z1^f-Gu)%v)`%mLU+>hCK5r4wp@h@z!#;T_YcE)Zv5?{sFF&bCmW=zGe@d#eTD_Dt- zuu-Dbk7nqFeQ`2Q!vz?Pn{YdRgWuvsyn=tBvDRw01-8Y0=!dW13|xw__%VKl-(o)g zf_Jgz`&PT{u@8>InHY`lVhV1@Ec^xw@iP8_e`DiyR=dryC;H$xd2N7SJXc>rqA&?;s6ZB1kA)z zthL43&J6=_HYVYxn1%Ux4j-bi)vB*8y5k@mj-mJ_uEZUfhsAgut8wTytDOLxfs1i1 zuE)KYkLR!g>ujgr*b{r>c#Ob#cmRLIzwimR``D_tBNk!_-p4wrR=Jkg2K!+kzKlol zEZ)G!=(5AAuP64!2^fU4F$z~oQ8|=ef$c~U;^O~8e?7I)$~{1uz+vbO7jNoN4Xe>U)2g>K_QHWU z8sEY=T#x(kGTy)^==P;mzYhlCV%(28coDDRA6Rd{RZj;TffI2yuEvd+jc4&DK0?<6 zR=uMz5NG2C{1(q(DL%%=SynwQ(HqC&>$nUPa2p=PAMh$Z#9Cij^*6#+*b|521dPOJ z{22G(LA-=F@HhM$pZeNrw5IIhHa+=3rtj#^j#J`(1s(x30u zIfik8_!n$^+$!G`yJ8O9^D*f@tAY7`}GmI4& zr%M0VkpCg^=eU>jY~mxt7gXtYjqfZS(H(tMX~!3*sPzqFDo$6W-C3&ia~|7hzH5u``rI^2MHs+2p2chts)aSwl2rM|k~i%#7CRjhS3GP zlio{}dVPt<;6zo%Gh3DI=HV*RKgMjlp-MgX(EhZBCgn zejJ9W&N43;smk^%iQ_Rj7h}RNtP-Xi~xP|;r$=^--7r3AN zGvq%~T@B+2)+mrTTz-!Rn_>r5`r8k~a4GIk+Zx8FxJ#9Kz99b~aX$Wp_sOqw)++C; zNKlvm z@NIk_KfvAUY&m|gl=L#RJ#W=l3maoo?4!EL`w0$Er9VT}Ir4s|wwL1tXQ+}Nrp_^p zINXAnY6p4$!)#T`A0huF@ntN>`{dUtl=3njcU9`~z)?6Br{in53g5#_RqDwl&cjQp z^ye4yA7Qf}tnz(TX}3R)#R)iHm3p_Ta}47v)!i@-;Sp8pKTiG`;u5^8%Jw!FtnF%I zD{PB>@Od1A<8hiQ?Yv1m8&_Z)exORZU8?pMzr~wsNBMnKysJw2O7fo&*Su(L@2E=t z)5L9v+Y|RvrM|xS626S@s?v`{{8a5E{lmSg)SpM3k5}+I{(%p%agkMTOYEk0HjJLw zTa|i85c^}O>LJH7MyOJ5Iq^!|s!G2!J zdwkecm3jsc55`wiX+Inn;#%B<=hd$A`;~ZEmHJA^zeRkH_#v_Jqg8)hRmwM0VFegVmzi|8WyP1??2J@vK2Q&Hyn;HtDf?HgELg=&n)sIiC18TD*Zf-zhKQ` zYrBT3Pg33%)_hrGd{v6*zhN7 z`zF`{JL4c6hSO9T*J@S9wGnsVUOa?_Sc2u)=!&&{E9``0FbHSkJGcY);8C@kyzk*j zRp#*w`9;K6h|7rY5?2v7ylU0c1pDC&7>pqpiwU?BKgTas>BnJJ=IaVpqf?2M{+ufP z?}H=IAE)6AT!>3BNtOMOgBS2ubiQWgx5X|v7{}tv_&UzR)wmINU^eDqA(r5uSmV0Y zegm9H>OjNte-}A;~ zRrc>@@;@O?Cq6)&hZj^i4l1$M4J&S?N0e>dFinw8!Rll1m z_4FZr6_?>Bcmz+WQvL_xDy(_Ss;?z_;wYSq;TVgbU=|jrQvWqo=IsX7ziq{hup9Qo zNjL?ga1p+%O1(*{93NlcVZ4a9(f*EAt_gO;0jl(CFiyfLxLoZa-wQEbm3Frie}Y+< zjRjbU<*JuqRA8kl_0%o5(i>nKdGzr(Be*In7Jr~Ewuw7Ez7 z*aY42IaSK{!NK?W&(x2bRe}eUYv)cDiWgG!G2RC4jD*gNg?eAN0E9`{N;Y?hKyD$rn z;eC9Jb$++%eHzKi$aA4lO>oQbn=9d5w=_%&X^>sa@J)ougqg?;fQd>NPFySNMY;%PjGf8axO z{=;g|1%1&E!!QEZ;5s~j2Qg2T{cw%=2HsKU7{&wgYy2s(%%>*~!`JXVOveJO!lqT$ z_I+`h+Dp!hF$QBXQz~n{x2)v3Aw?HZI0hn2H&gjd$zl+=e?a7xSDErs`O_e zZc%&7-@n0~s+8YF{sH0>coA=s|4@~Bn^s%(w7?$N3&*KaZWhLoz8be;D(+RKABTvK zU?CRa4OPnhPW&e}_}l7FW9)`KaR?5_DL56Et1?etsC^7$KYp!BdpYF)t;)FEA6w;n z;PW^O=i_o*gPZUR{02{A1y-Z|6RRC3?2OOh3mAb5@m<`8>39IY$0Gb0tJS`S{9|Kk zr^@)BQe}P`5jzvNBlf~UI9io?8n4QB!KBY1ev5b>@iN??%65A&Tb1@t5tpL9jaBYh z9FF0*0r%sN_`53g+1py%yW${x6<6XOJdO9!xrS^n^W=hku|Ec3FwRhA9^O)={dvU8 zaDyuKZNjfqnTIP_jjnc9`cRyS@tCYi{a>k4-yyt?H_@)9m2Zz8=!t?4?E|>gsq+h@X zs`RH-ZOeW*72j2*zE!wJmHJX}rz-tRC(gp}RoU(=mSP#!wwHWq*A@NnHC&0G<9WP~ zPd{aC-&K|N{ZwghD29>07Wd$Je1y&GSoJ)QA^4Um_07d3OvYSQ=HV7Ltt+vuVYI;3 zs`SfEm2%G#_aN>^Jdk)K@nluzWe%>zkMW=?^?t8PduOqf{AyxD{$`!#d#KWWFC2-1 z7^(I%j3`{BO8v{oPasagbUaA@x5VdF>34-H^;M#S{H;8V9nnLTa(+0C^clDS-@#R? z^ydTO4{;an#cxz8mrq=PWmt}Nwcu z-_WYJF}A|q=!c_mI!53^Ou%H!RQt<)E6i49evgoUlDL5QGI2TnjkO!ecCsJpsj}Z( z&>j1!(#{JQfPomP%JvEP8R@(62!4y_RO#mx;_LVT|H4|0t#Zz))ZZEX@HJeCJ5;GR zi}88qdJ%~qO1TM!E zJc3uTepA_A`rQaSVHX^XFX9YU+K(ZQ#jTi%2k;=~snX9v;v&3*_pn-(a&?`pel@_h zsN$4~LHD&x9}f8rx-+|0^viak`Re+=<>d;{OY7>vdBs`Pgo@ea(wZ2V4@ zaz(_&SdJCgpt;qr#@HFV;z%5Wui{KxfbZaX+=yA2jn`BecdZtdZWy4-`~_kJMq&ac zV!A5zoFqPtH}N+9jW#Y;{qDSSKvR(gri~VsTPR0fJ z4z9soKj>k9fEnJ5i@KfA{hw&H| zVKF{X<^8p#t7Uie!9}?og#4Ul8XIA1BUNrM(NJ7ZaD^6II%2*uk(@^ z7-KO3H>xt8k8u|sz$17HFR0S~k9ZSr+u>AIj=NbHqrM=27Zwv#>CXq4 zs>(d?$1|#wKaaoR18m}9xTY-uA2_D3o==`izz90IlGCu(r zsLFVzkUxVsjCdaLBI0+6Q&k!FVdC#qsrM|Fl5g9^s^3AC@|{#E*9Ax6SbQDd#P{(7 zOv7|MiKnpyOVPHg)owHN!~v@GV=x9{5YEK~7^}*>uTv+Ld7c<+bdy;6XRk`RhQzMe75m|E zRr>!1@j_MVTY~Yp1~V}We^6!n8~7JGbeDALhl?ut?!?`30O^xdX>SU?g>x}pmF?H6 zGM-JU)VqWHPw@zTi#PBV+V`-wYpP0pov;s%!g;E+6OHR}3ufXscpiVkN_>osyrjOt z^4uskSEc`M*j<(W_~Ar+3)kZwRqEM?=kNmF#rtU2(`v^_mF=9d6L!Hqs`ST?cqoQo zC@#b$xEZ(MaXg77Sc-q(L#+Rt)vrd_3A^A6I0#?GnHY-+xE(*iEX>9NEW}^cA@ckJ zK2T*Io?yLR63c#Rjoon&hGCQ{+pSckzIgl$cjIw9iN&gHS591kw%%4fwXl&YMW1YTMzZ+sJ zd+mB?#Xa~X=HPKWhecS5xA70GMtdJ?eD$$8x}pd6 zzyO?#VK@hu;Jf%fZp0m!j#+pZPvJSdf;aF_e2k6yS^aN~?XeFI!BIFFr{O$Yj;nA3 zeuU|`5079TUcjI54&F!Od8?nbu?f0hC+vpL;~*T1lQ0bDU^K48B;15)xCc+*WvoP- z{`3=@U<>SsU9ley#4$J#r{gSKfJ<;SuEVYP34VcD_${8oBD{*X@i(l-8ot)J>SGgh z#SYjVd!ru?#|bzELopoR#-*5m>+mDofnVZryoh&e%Du5Va^IttSl2LKR~-yvr&>>* zpQtU?m+z5k1Gz4wI?6gzwV|vBQ5zY?7PYZ_k5`=xaT|U2M zjQV_Pn(Ad3C)A!YA2Mcr?s1VS&w;tg*!4N7xvD&`RHn*vIkjXi^tpx>G8cOPI!~4R zoqc6a^#0`}Rjyy}lDW|DjW<;JUeQwKM9+V(s)MEfGBsJ3WU7mseU&={rZvT%r{*^DWnP2v=bcvtQcH78vrCPr{ zvnf+**j56T|k2Tu)P_ezQHvAFi<^${}Xh8a9R;qK1vk zM{Bj%8t4C<*Z;#jnB^tiEHCq=^YTB-OFjS0_j8(F$HvfIX(-pC+9Y{ z4gdFX{kz}pQlE{pjp3#BHnTB?sm*PSF`6#>d6LF0Y>Y6CrChGYE;fca-z{y7I~upL zF=VO@+txNlJ?WR0lOkq6eCgl%mx*WHsC^u4-<6xuuw_#+c(s;Hi zgF2=@p}fqyy~c7aGD4MpCa5xwPt_kOC-EhXrQhcGFUtKY?Z2c)szrvef%piPkgl(F zbH9n&?^YViH8*pdvV98eeo4F6@E+|ok$QAH*@fnIGUaA{|J^vh(d}fM->Nds@6~_C zDc6+V)L7=Hfz~6ws~R@OXR3{jk*&&nHPwE~e9Tp)T&^nnt4ft?r&IK}l=M@olrQBt zZLPftH|G^$~d=^ zzh9O8bCC37s+9jxm3nWIUa3lbHu5>C`Od23yQxy22kC=Ie~a|iGH*8WU9LTL*Ljro zdTU%J>uc2;@_C`@GDrWvN>p{z{)^ab{7)MoC8>57{sqR0y zraVQJ7j3vIuj`enyske|Yz%ia-%n(`leHb0uQ{s3 zZ)^TFxvruX%l;r;Uq70@hx7xQF724FW7)2irc3?ixW#|hZ@wP?5A`Q&J(8~NX#Hub zv}?Z3rG7cw`n(%#V>oC$(8h37AIbTLD&IL>DCepUvN7D$0gTt%Mk0xa*;w@r zrM?$QA5QuR>K$ogIBWS)2giQ ztWUlhnDhG=^Xtp_d5=8ZYQy~T33D#hd4l$!9@^9s`X@jJ8_aKCqo&;nQ8+$ zFDA}c9p(Ncv2?-wzG29eYI`y?^LvN9^_a1|MVa3}+sHljLYCN`IYH`M*1{ z2eB`)A8{aYkm@S)M;xiPmH8u1Qrk)Yh%;3=Nb-pbRQZr8BQ94v$a#uP zOkAQ4(RC8yIcZmIVx328KSDKjmHVG+TN#(y&idYFBZV(%{ER$jthP4{c?&mVM|~a0 zaVMuDW^BGL<+uyfSdOQe|F{+eXO>7?567MC>C;tcH zN_CK2KOlD2<4NYXjVkr~s4~BUh-G@r>n;+S%3GzWyycn7TaW2K@3Zn!Gh=Y$vGn6Z4+nYO~V*d66m!pxUb2~#;0GnJ2SQ$1DE&n5ZDHl2xj zeyizo(EMDG*!)}&lSnr|A0#%9S22}z^YcOCEaJm>49}_cRX(I%#IZO5U&d)TTWu!m2XQej!&Uemex%Cz^>+LWcjJEi8c(V%!tWVL4V}71}>#^~V8QsO{u)2RmSA?18;-2oA?_ zI1y*!ES!V$aWO8#RrnsR$BnoRcVIeZU=HTuDLjK0@JGCcH?SNl@CnwCb4#6cEi_Htf_voIXz<3fyAJILn~Zop0WG48|zco2`_2|R=6 z@iJb;U+@n8j(=ipIrrB7)Wycw6kB0i?1;}|Pwb7p=!XFqh`|_wvoIXz<3e19@8Wvg zh+8og_o?oNaR3kFF+7E5@GAa{ckmwmfe*2coNH_S_3>$Jj&1N6?1{b67yWQJj>ZZ2 z6269SU?fK2O0}ar--YXN18%{OaUUMQ!*~o&;%U5s*YP&q#RvEoJ|*Y&+MjyZ1e>8N zx}lfaNxoO2FPit=C4B_3KL)Fv<$MssFao1+5hkb}a(xDqF$GgG4YSl|<$49?VjdP? zA(pCgy{QZ<`I5uMQmJM`H%Vh zg*b~i9OvUgjK?*&0XO02xCam5K|G~)liyjyi+CA-#$WJHe1tXRJCkl-8=GPaY=<4N z7xu-0I0Pr+WPDwf>sfE&JbW9M;k)<&eu&%g6Wotq<54`0-{V=lgg;>^mSGiEqn&)0 z)Bf6H18j^fur;>FPS_ov!+!Vz4#SZcfPol{Avg=eaXv1@Rrnrm#%=f+?#2Un5c9DB zi?A3=u?(xQ8tvq}s5xKgh)(E+?$`_a;s6|s<8cy(Vi+#OCHO9`!nL>_Q_*~$sk_`? zCEkZe@i_i~m#_@W@sZj?o{z@b^4(hFy4V<-Vh2^O*LTJq*bDok`Fxd>8>g{c_nnBZ z;Hx+b!*K~N$9P)39iI=+@#8N_AR&*KgWG|08ij4JdYRg3SP(C zco+Xhy{4h!A$#rQ6+!nL>_H{&+Uz)Z}> z96W)i@H}3`n|K@lQsutJ-&j+w>1g~EHpC|Q40gnB*c1EV3pfl%;uM^Uui+aQiBTAh zF}Myl;1>KCKgT_I01x6RJcAeTN4$nNupBG!3D%HnS~^d4us*g_<$hip?1;}|Pwb7u z)V_u>633(Y+@_>YC7zCRaRDyH6_|jDn2ag-Iqty&co2`_2|R=6@iJb;d-yv(!Y9~3 zuI1_Y8eNfakv^&a4YV_&+%*g2EWI%cnN>P zU-36ItiEqgU_IsD(Cs$=!eg}4M)Vm!W&AK*v09rxmwcnFW+clbU2fS2$V{)&}Yg|+2cyUs^l zY=lo^OKgMg=z)E)KMuwhagr*}Q%u3>_!_>2b8&?#_xs~;Ew0DSxDEH>mv{(|;CJ{v z{(zV87XFG4@GrD!Y4xWj*29L_3|rze*b%#7Pwa;;;4mDC<8cyB#p(D4zJ*J11+K=m zn2afyifOn9_u)Z2jK}dLp2G|H6JEnx_$yXo73zbb=JPaI7aL$xY=LdDJ$AwF*c0FF*e24*bX~mSL}s-aUc%C(Krq#<1085XW>Fzg74xgT#M^5 z71MAJ?!%*a9KXl2ScJv+GyZ~q;6t=&!}}jPpd&WL7T5{9U{CCgzUYU;aWuY+)9^KX z10yjCS7JQAk00P>+=gkGjtB8D9>;FJ3hq6ShKA)e@~$!I$;ZJjqR}$ z_QrlV2#29R24D~d<4l}|b8tQ`#$~t)-^2B|5x3zEOven&!fZT-C-4lO$Lp%Ctlz-9 zcpo3)W2`UtEVXut43wFmo_&konu{a5*UbBr|=9GVKM%Szu`lCj18W#=A$t-$5!|Zc0^C~!htvh{V@Qi;8c7a-^BU25SQah zd=KBp5Ah@1iJxO8X5kV17BAqB_%r^3RalKR<=(pd8LD$c}t_%<%Z6}TGL;zrzzJMdG?z)Z}>96W)i@El&iD|j7m z<6Zn4^`5`ZQyr|2t+5??peMe7gKz};<3yZ{({Kj9fp1|HF2d!w65qr3aU*WVR7}G? zxDUU^Z}40E4hyglFXL6bi}&#_{2T4$*#MnKdu)J>u`Ra8uGj;8&=-f{NSuH#;j1_k zqtqAV`G1VTSWLtuOvN{Ss0E>a5=8R_i!_A!!%6CeRu$mtA4T$9M9neyn@&9KK_A^(N>=M z(0ZQ2de~AOB-hiiBR-2gu{RFGkvJYFVK9bZ7)IcHT!_nYC4PV(;&%K5_v6=i5>Mk# zcn!<29Dm0@v6ejBqT{cF4Y3KjpeuI3&e#W^$5A*IC*c$f!w8JV7>vg?_>nqTo~Omn za5wJ9ukj?F#tZl(Uc(#sEB=PMAYa?F!@Af2TVY%5h|i*rI>a!1aVU-Rk=4Bp~}6$C{^xtMXPczCsvh46IHo( zpRCF?>aD6=i%nDInq!9QD(h9$wuX_T%DI1@D(AcfYJ2(pZ&f~fOH_C3cQo|5vI>pm zJ)ugK*MMOo|C4=hugaX5>%O|k^Y$8dmFMkMPg#ecb~6l5wY!X8?IGh=y=44qPZ_`Z z9P7k-$@n$)mhr2-W&CO%8Nb?B#;^Lw_|<+ge)W0QbM}|<2VU5MRPc^!D5CwieT`r%LVZbCheK)7De-Tlh;pz=8K7# zgj>;ECnovk@h7H}ZXSOUXA|dOE*4-R7GW`#sq(rl#|o^(Dy&9(TdTaeo>I1RBz8hq zbVGOaKyOvv56tytqA#%@n(NFY-CSoTn(H$~bG?}uO1UtMz(|b77>vaPOvEHi#uQA$ zbj-j^%)wmD!+b1K-DO=YmS8DXsPcYRiB(vQ_BE`02XsVpeVV=x61$;0dZ4%JDf5fI z=!gCofPolQB12%|9u&Gp>UeiCsqrrC#H=!oWeH%WIUc0qI9n|#ig>)u39O&87eZ=x@;x$aHk zp~NH5T>mENLBzpmu7i{G2;xYL!bKR3F&K*pn2ag76;m+{(=h`xF$Z%o5A(4Ii?IYt zu>vcx3ain+rZry<=!oWeIvKw!u^YOhxt>n)&2{sl59z+>hvs@Z$qyhl*VRcJL>!9d z`Z`HB*Vl=Wq(@^6#$p1R>+Gbwxz0}9N_r}0U?yf^Hs)bI7GNQkU@4YiIaXmc>ItGA ze|Bh(4yeB)r1>uBif-tR`ujrW`4jq}FZ$t79D#utguxhs5g3V4xCmo00TVF^lQ9Li zVk)L#I%Z%dW??qwVLldMAr@gVmSH(oU?o;zHQLwa_(n%`LT7YAcl1C{^g>_s!=X3= z12G7LF$5#fTpuXMK@{;KjKu^@#3bB`shEc8n1Pv?gSnW8`B;F3ScJt`f~8o7?&yKu z=!3rKheL4$24WBfV+clIBu3#PjK&y@#RN>mB;1Orn1<PAsB&? z7=?>4R+aDf37CjUn2afyhUu7rnV5sQn1}gTfQ49u#aM>rSb>#Th1FHojKu^@#3bB`shEc8n1$JxgSl9Mg;<2eScc_Tft6^;wI$s@ zc4&_d=!`Dtif-tM=K4{o$D7y(hpOJJ9~J$H127mvFci)8q*6XgW4Ye92%|9u6EO*s zF$L2w9WyW!b5yyGn2ULsk436nUo6HFEX4|}#44;td%2dS+dH7S?o?uP-Kl7_O~_UTCgAm3%*9a~-P0BZ&Pm0E00ELop1aa1lmh3?^a{CSwYwVLE1DCgxx+ z=3zb-VKJ6qDOO-5n(I_$yyiMp(O#~ZoAZn2dR0kxA~x5pN^GuM72QcU*RM)!u3r_s zNH^E9N^GuU6^D{;u4k3lT+b>7kRFIZ7>Z#Sfsq)6i!c@wFcFh58B;I~(=h`xF$=RX z5A(4A3$X}`u?)+x0xPi!tI^((`A0`|LRWM{cl1DS^g&)aqkSW5{0?ZY z^g&&5+-8`reQi}U?yf^Hs)bI7GNP3VKJ6r zIaXjLR$(>T%QIMdKHz|k=!DMbg0AR>?&yKu=!3rKhyECVff$6r7=ob~h7lNv(HMiV zn1G3xgvpqKX_$@~n2A}KjX9W$1z3nhSd1lDie*@iRalLNJPW7$!wwzM37ydeUC|9a z@!#v)eMt93KlH}{48$M|#ec7Nk0d=BV=xvIFd0*DE2d%^rehXnV-DtG0TyBr7UMtb z-^+MZw7yZy5127PSFciZu0wXaB7hx)aqrD67Kj?@~=!`Dtif-tMUg(WJ z=!<^nj{z8nK^Tl77=e)(g^Ms6V=xvIFcFh*E2d%^reg+XVism&4(4J37Ge<=V+odG z8J1%OR-)08*9Y3813IG%x}qC;q8ECj4-Ul<=#K#yj3F3`VHkyrFdAbp5tA?(&2|6s zzG|-b7t=}4z)Z}+T+G9KEW%`+F;Eo*mH%ozVr|(E~lv3w_ZK zhvEnfR9}$$a~O;v7=e)(g^Ms&mHsARA|_!nrr=gg#WYOEEX>9n%*8y+$097o5-i0s zEXOLWM)UUpbiP|N-{^$S=z^~3hUV`C$oA&%1c=_G``}R3PwsD^KL%hhn!gty<;>p; z5W`51QU}TXBaFrvjKu^@#3bB`shEc8n1$JxgSlw_et@)JNL+-)Sc0Wkft6T=)o8d{ z^ueJx0{t-ngE0g{F$|+{5k_MSCSnpMV+wA?RLoEZ%kvkQ zh1r;cxmbXOScJt`f~8o2l~{$@MM5 zU0u6%^X~55^SNFaDuE2G?0KXvAO}8yn-Fe{75z z#(za}&Ge=fd6@;=jeAD9nLj~d&6$XSI0+|X5Kh5Ya4Nov({U!ghO_Vu49D3x7w6*w zT!`=B5?qSQaRsi#IE=^DxCYnaI$Vz%aT9LFEw~Lo##HuP8D z8^mAh_Hj3KO@}e%&Q_`ag#LYN32td!5>K2kZfUuWD}Io}YJbOgU&r_t?c&x4Np9SV z5c&5ux$kGhtqzv|l#Z>)`B>uyu{UZM#x{9m!-#iWo@1v!B5uSL94V{Ytsw4b{A%6s z$o1MwuSZYt*xc=?|6&$~(*+*_S(xh(Z#&$dB-_fl3s)yV1T>B%3v=v)@vO(%y zp~0nhPLGW@d*k2Wz@XDsxhvoOGYOdvGvWs2UwR||>N`1?-Z*_?P_en`pqvwfO7y=@ z3@WuKQ{q+(l`7*0*mbr&F{oTqj#Syk$vmzeR2*mLW=>)JY8`s~+>-b~#qqu4C)vf# z-5NJ2rQ@R`k8I;M`$}H7%XeBc&GGB~Bq8p|H#)!PZ!SM(6IbzPK^xn?X2Hl_@#D9~ z&rMlv*H{Mqu=SDKEmqsv#vNH+()!3>H9Hopc6cvtwN|j;!17ym%X3_<=+39{WA-3e`$DI{7A?6DUMe2%a1t5FLaa%Snah!kCnL9i{#(kzB6ayPV>aok?rM}af+8? z#%@htyY3BQPRJ}QKVsAS(%fH8tQaAMb%xEu=RXe|T_5t_9XS6Vhm5~<2w2C+rJCBr zkGHOteAM9G=cRe`K#yOqJ#Fw!PQ2OW_(R&4cypHG8^yn67dI$5ZnM9n#f?wuc;U!n zTbn;mtO%gLciuAVIA5}&#@wLzDNgYt6XVxw;rM}$@tXs6D~Cj#-Wu^!{=3%D%50u$zT9lmrp7zTy}#7PBVX)xF0LwmWXhj^#1BeZ?UWd| zUR#TA6jxAVP)XeQ#Q)rt$MhI_RCBe<#<(LL&o+qDBVhRv*X4KYZuQfR29-!faf8a_ zAdVYZDo2w2KgajdTz#=me)*Lt$NqEQ-x@EQWy$}a+&c7Fcec*it^V?#@h$ZYBfg3J z%ZQtj9zQpI`7!&|1D=@g1M!2><2FY~(dGYxwf6w8s@UGfXZAU1q>yqbNlp$q2}qX` zqJdzjNeCSgL3%I3p-6zxLg<8mUBNCYUK`4_du>=QV#j(d*K+lDy?Slf%k}F2eb?;0 z&pt``ec$tZ|2$7-&#d*%nwhnx&z!xF`nwv)eKiO+)cEW9fdkdhvwnLu2=$jOgxhi( zM;KeyQw@7blaelh=kv4+A*KF4`s;tM|6Bdfn?C`%t^>lG>VHi-(IBj?AL*aodF9hW zNv$Xz9g1)3Q~s@=>4x$CRgW2&jNTym+UwuT%DZ=}&+psLoSE#JOdWuD)iCW2RL}bI zds}YX%;05`-M8z%gOCY_KTqBIq#ypvSjhUL^(Que9L>|WNpB%H4bu*LGNiXY;qP_4 z!Qdrlk$ZLhw8IV7s{0yD$0jK>T*KTTdq3l$pV~Xr@|#RSrKa2siS^IbAKUy9_?xzV zsFU9O=`EAFLaFtyd{tD`>qNa(e~i8EvCp<+tY~OOTh&i^aO;za4Wk~cpRmp7x?$Rb z$QF!dY-CJVR6lA@!+L*xs`TB{cGXX~sd|y9r2dt?{;l=pb)UDOK~~i@Z;e%T|EnpU zZWwiw*kRf>uMx`k)KA-1U%t!M{ez6&8vF+e^3{mLfi5-toooC zK=$4b6R5q9)8+Wu>yNYdmft(R{^;Hb$G3hlwZ8n8XUh3oOPJ~K-s$Pj#M5NYRLBVb z3_nVQVX`7cKU2YRRy{Ms4Dv&SVUJqg>A>Cz-_=*7*AMa64@s;)t9{De316V8!?PdnX6!-RCfyk#(d_h3GBF_=+IIL@pzOh`oh6zG9s>I3#rTb{mm!o4y4 z)%}sA6BEI4oUcs#0>q;OQ}ofnDS9i0M<1;4M|$bBTULFu_35e7lS@|z zU9gsO(v-+aJ9Tp!pZ@k(I=K@o7sCm?2g4|$#`rr^lbEJEUbL`_gi8snF`Hb(Sx!UvepK9Q*ny zdfMW$gukzHsCd`5@m7Hz-(L9=latGUPJlPfcoRiRqLGr6=t^lJ-Z%0O>(hl~vNBH&V<k z15bb+rCOb;$?lUvW@}d{dbBouY)Lx@rd2^k?_@&S8a&b!arjt_Q*b7i<4I27xn4q5 z79|8dB;=B$JTD2!krrx1Gst#!rjqSU5t;AM3?zJt6s({nzLdlg7Se<3vz&)_5Cy_G zMsKGe_hJ#Ftd3ZEW-$tu=v7%g5DD)_H>xAGODmf#opv`ne~fPzqx-4KQMJj+sUD2U zG4tCaszL+nY0N6Qg5rC5g2+SfHez%q&qYy2gH&2S-ZS~DGqqF>X$&2nfaINJ%bH;Bp393zkU zHqg0^pe7IV++NpI6)>s^)2)g9K9@RB;8y3bKNvzv$)u$Q4P3kskLqbaZF%cGP0!9dPB|7nR;M6_9&x?SO{*+1E^Qlg!oCx z=b$>)#)+g&6i9ZR&eJv*5;r46G-Vn57U4(3TfJe#*ruZeq`d7~Bx4-g5tWQ|cM@lp z-2!))Hy*0ari3nMefSCMbmAcn7Y_;!h|adKvdul0r@?>fny$<6f=*D2uvk0jIW+~A?01BF#? z1f?>IzMJg015!+*J187#>SiZaob&=t-}|R#$e3Q;Lb7Nw27PNYXry|ZLpH5VWP_}V zvAKw2D*XAms*t~4wFvFTf!Nd7xwg1_efB6!w@&r7?!kcacSdGgca6Jni&DA!D?o`~ zw6t3JUZe-oB%2QVS=qLyfk)pK#}E~)Kl3?#KZoxcG|%AWMBJSP8B9@A2= zU`fiJ(McY&2l5eI#IK4a1<$=i9!vj{!O*g|<*}SM+mnJTc!51BcwQ%YRP)+-QgHPO zd92wkkG0pxW5ZwMvGH&6sEtSUOA6L?lE>x|^4M~YJhrZu$F|+_*nUVJJ6@K@&Tr&V z&+i*01$Un&kLRC~48F*Z_#_2inl8lSy(IL?S_!>cC85{(U7n=i8&AsPO@56hDfl;D zN=*vB#c$*!h32-vRmG&xyw5NrN(wFDMXaRI!nABY7Il!vxo5~@@dSA+;a#VsP=r^S zl0r-WB#&kMFh){nCBK7_6sk_ab(W;i>Qm*hhL?DfLNzt=Sa+d3*7IgfQfR|{^4R#I zJU0D99(BLVV@s=CLbi63$F^be*fCWeJ6FkL_to-fxK$o|csnF1bpCttxaSvn+#AHz zfuzuVW%9UxiaZ|J!pAB7c+DZ{lv0h#mvl=1JU%)N;XB=vIt}H~ZBnOlo@gg^s{C3W z!+36+)Tyd%J3fXN%VPvz!k*M=WVJj-?UTo7z9BuS)0n^V(Ph}@^0@Fvd0hNod0f&e zpS(+pdED@KdEEGiJZ{P>VDy9icZxjjJRZ199uM+u$w^%v`cfW$NyBkKQkRE&$m5Z*@_2Nk zJRZA39!L0^;iN84zAcZZ`10VSE>8zL@bT9&c^sV~k7xKI-=r?bu8_yG56k1Z_vG>X zAM$vi?J0!3)Jq<(kCMkbi{$a)c6oeq0FM@3TIi?bnXEsQXNtCP5Rv@bSe%z7U)P`R z`>W}mx|MEK72TRmbT@3LJM%oc1wOiC$I)Gib-GUe3Vnr6er+mUtD0_b8{IajZaUcy zGw9^yBk6u2{sTSezZKICoiZ>EW62hDW&>_d<=06!r9L)S;X|Zzhk&cn_yU%*kXzld zq8C7Ef27~u1-)h=R_4#3)uj1!JUR!2GwXrW1f?kqa|2IDC_rAIMOVmcrEfw<;V`l) zK+^b6UM7XVT#6(wpy2?KUfQISNu&=T|A~K<2MI{QVZE`VyEO{?^(`mA56Po)29m zrk=il*%=JE`Kf#6*%AMQi1jd!zuzUPtyfW{W#}Mu>K8K^T@7Gq9>z9^q{8o@XBQFt zU}_EuuTm#NyE^qsw0|pgZf^riD@F!xf*y41H!I-w%d*<^#W7~T9BVH|rJmHePq#TA zTJM)@9p0=|X*VHd2AOll>DSuQS*^w+gm?XwmxIv8A-G0K>N>7J5J_Ff50S@Nr^w^% z;qsU`OCIOc$YaU{@|b$FJf=MolkZ2ibaMNibbX!Zj)Zib+-o%4w2UMi zGt|P@`Z;7bU@g|^d8paau9zoliTr>zqY39?5U|8k! zC8B>D6WvYNjy{FV^OwP?X+C=HW+Em+$-b)Qu2Bh% z@+%VZ;!+Up?o>EEttZeC=m49Jak`(2T!y+5@mXg$8>}PH8u>O#s+2*EBT7C5wZY09 zfp4KlD~((6Q2&WK52^XyY+Nf<-eqJyhat$*xFu6yqZ$%%&<`c^_hRz#8M1@~+ z`^>1O3D_-R9$}lH5Y%9g=3FJK;7%gOazrXR3F1~FEoWmzUd`iSU zXe?>xCCa!Ks2mPE^Hb6)*dh(giLK$(Xpgd_+;miKS0dUDKxvnFEK9E#Nd-p{@JnAf zKc7T|d<|T+ii&W>8xgtk+6CVt0DfyO6GoxA_c5W{=1@#?D3$vz0V{_9P}Lm3Zm0j1 z{GI`5jo!h2+cb4)BMhrxJE%s_YY(T$MnwAzLF5i3V)W=}iDFxr3eF~AHbwzguTcc^ zrrJFZee@Z$8J+%hF9D|89m0GnX~1MO+m}GpI{!o$5Jt+Y-&6uu)&95yE~Whm_A)xm z&x0pij>(dh5Jojp1^!1t2|r2l$Lt&8bGeSzhi9VOUQ7g976``pxtwO|f1=1a%SH)L z=A8my7~&`?my2)xLNQ>+B!-!un)<^PxvsFlLt^v?n2O4sMgOIzfIdXLfjJ-uFCd}| z{RRF-AhqwnRs5+ldaJ~|IoW}1oTJR81dQmXoHs9`^5&V4Uv=QS2u__*1mI!=TtbQq zjF^yLC497;s_MXZ4V*fok4n#5WAHVkxcIdul&BIglBvYFgkz}VIx(RW3Ih#iEI}wf z;p2&j5*PO=lo{^EtR(!g0_cReA<%lblrrM}F%;elnS9(tSSfr_7;~7oS1RGXRH$Xs z;oUFZpAftA8G{M90rjx+D1He%?rcms`yZvSj`avr>z%HH<5O{W6yX451yk<)S6C|V zKNjB|P~g8AZWnHSkY%(>6|3N@py?mR0$O8{rvs!Q2Hz3THTVtL{7iY?UM+r87ZMir zLb3co`QiWRWM9mgx?NvXkQ*twKk5543u5Y#3d#@q4`M}-m*DdlTC7b&i?sunBBJWX z?H4_F(Q1{~&LHH z*8sl6memNJIYJQKfk^S0Y?~5G*`?Us^*1ZQ{?@27$W0{OHx-m~ETb^GCVQFOTGCU{ z`t!cmI>13m1?5xSkD>MD4f7Z*Kr)OhF=0LdoP1^!;}hpD#Uc!Gbz+AeRItuFzS zrz~!RU5}O!y#7>fe(71WSE}G0eMU9VkHUQT`^24ZlM{L;U{-T|F4su zK;zKK4YTQf&ax#xL16N@m2`7^(A|&X>fk4o*Bh-kvy;zE$~U301?Z@t4_VSJF<@kV zX_=uhdncH5R1clC%o8ihP?^0L?Jycl-d@yIslP#P~forBh8_v;>men7-ui-DM? z#cyi4)SHAG(AW9>K_3VHFw>c%#qY&*C{Q@Wk2`-g2CH8D;C9b9(NnI6;x5fk(HWz{ zT((QCMxUB-F9xgpOnXXp8Dt*fV1nI@J8IepG^eGKNh?u+T11NyZYU+tCj8&*+DKD8IAj8)mG+ff(fa*CaSBV>2c9*X(Ak!jTzC zH3*h#_5)VoSs4#$1S{;|q>LjBR@%X-8N3gfKg0x zN5jh>rTJB8t8j^m8{Qwb97J1oery{?={b55BKGPF{-dx^V&SOXLHM79-(NVks4NaQ z561liRxirVhWAYF8K~?ds62(ES?yu?>vdv_p&+Dfm%YW`g6J3p|P)hy-*;CL!@*gxt zQ`t{awGSDa`LjPmj`ANhc}awfI+4T@cBHo5k(Bb+g3yus=PtFQihB)ppxqQ|ATtqV z)Nc<)_&qdhh7gI{?z!Aw*XN=%?cQQiHZ#cmcFmtfwfn&CGbK`x8}Ry`EujCyOV8zw zy#CWXCg2q#KRO| zcl!0(c0l|lJ<1IZ&rvgzY< zdBUM17_i!1W5^;ZmnR-Np4H&GDA^>F$zu?m*Au)eojR4tGZ8&=IcUWgP*1X!MKd4%^-8%_fx*FhY2G zqw85?4%-M1lV>`5GQjOtG@F7gLw?$N=GlPV=amr^)QiVKRVYPC$J4WqqO0oIk6C4( zw6h4IQWNrL4<&Dq2_T-spA+E>YN>#fY3M->XLmm zy2Os-O{i=3u>}ZCFrjYQ-!g@XCe%Iq1x%_sPB)=bvv*?P?>NJRdSu@=5TV&7)H8cG zLvu~2SN3yL5Snj7y|ecsPaPMUP*JuYHLv3`6Y7)wKjRQuZbHQ>mxpZnMs$W9H?mx2 znqw+;v3?d!qhnncLJIseREIa=ua2m0op)yc(hI}OE>!di+@y$SiVA3@FQyxW9e z3bftM4JMS5or@OPd5;ODXSZ31&|VV?WRF0j>wLZmwaxw)66<_{2?euLpwiA4noxfB zu{8)?!mh(AY@dA*Q@E6M2BuJPmt-n+S`RL<61WhvCC!7$PJVZ$T=Oa^ink(t^P%-@Yd zNdS|dd=4{ua1RkLqbhaQGGoyJQUJM_5D_BZbN(E}&Ywz73?i4Om--FH{K8A-X{HXN z33YzXbni^qtWTsFNeqK<)@~Ke1$;6_CXe4HFPt@H`?O*b2m(c6_c3Y~}@IK1Jr2c8?`%3={JX zGC7eboNqHpx2N9Eky%#@=29<{(a~FdO76c4!QIykmuIwk0cuy_v)&?g*X_{97QSp~ z!Jb4NKz~+vwoJ9`**29LAP*{_u7f<>)nm|!6!x)kvFk+x4z41s*C4=7wYxS_AY?rr zVUfgxVLg8&AhW!ZIJ+_ilw^ZEIMxgL0QR@08s%}ao{PF)_@0NUf;?Z=eFuTQ*4BvR zQc7bhjc3pLI22fTgAEa5*jye-YeEXYw*|8{*mjgpCRfsqn;Yxf?%Cxd$^S&xS9tg& z2p(_it*AML7c`qgTabJO`K_UVJ=!>zHi9SPnjhCI+~q}>QHtl~x)j}d;R8*XJVn?4 z>I7zqZ2)OJQej2+xjbOkFJih{c)q8)Q$;G5r|x>;cJMA|{nuu_YkcOyfTCG-Q%Zd(h~2!hHKJ*H1%Ab^y@yX$KORos9c`> z>xYs-zPM4UW{IE6I|2F*^m>I?G|I9K;B5hYFRSbBW+epI5KzR-FYv09WKVrA@KZ&( zyltTQ)7`>kk=XX?F4kQXP|CuyT9R02mR4tAbMJ6Go=wCmzN-P>1jYbU<$ybJbNZV`Ofi^ zWdL-sdjPf|738v6zltHVFxjSyXmKb>1$mW1pLre-Ep_7p7zA%w=+7|F6b4R$-~|kQ z3u{XoFGA|Jk-@tedgW#ysy$5uy(w>N=wDcau8Cpf^8SYYE9PB=$4#~*&$9EA%S#>l zKLfz~)Wah{a zypuWkVJe)_Hl8O4=4?vv!Q(_coaaGAPa6c$Lk~tt5Wm?257qY!baeMgded|;gn*X2 z4l|oS(CMKM%>u;XM$?j$4b^uM1UxL#ZbV7zF*56$Pgc^)fPF%+?*Y3P1=AlkpQ`H1 zum3(H*fv(?5#~}319P#mifZH~YOt+2*d*sCn8tIcsrrtGRF$GK)@Vc&bO#3 zjO=h_>(v}72D=d3^_ma182l$SVZQPSqCXD zz|>Ufr!HXhP*haT`m_z;Cw5h78o@VE_V}`VM}lO?=ztsfs((+Sew+!^w1w#Rob1Vn z$oj8JM-tIu84$D5QB&EA*a@lrOUawP2D}B!hc=2Wxi~{#(F5GY&#jH+;%69g0#zo* zS_S^`C{3CFdWZ|tTOi&Ne^;g6rjC2{N+%hs4xRHl(_Dfyd(P5XL_on`y0keq&D^mX zpnn+$;3Avo-1#W*^U7A4KOM2d^p^1Q$OlL%(W;3106n@jnB9LiFLYUz=4J`Dxljme zSQwG8AC@zpN%OXuHC$&EBR*CPa0BG4oOLdDl+9J8@=4!;S%@*_daRaYTRLknW2({z zh<{`yc;nY1{ZXXaQi)TgZ@GYJH-=*Y;|1^w0k`Et!mPE}&(R7lfE#*Um=KVern?vH)G33sYc33S#*iCMauydh_T_rj}L_#FbNw$##nF7Gw`h{)VGF+4LUm)=8w zM#Z(>EkV{}B6H{1@IJ~0PkQ5+$UhLUjw%29t)iI7w)ED_%e5G;tZ&AQZ4Pic0ex7m zpC>|sNkYnHOPEA}+yMLI)6vZU2I(7MO)Fma-yEYB6CDPj$O8XXhzZkMCWO9ydO?<$ zrKNW5lKBu5U%xkUctPKX}MWPagVyaL}%ovT$Li)>Or_ziN zsiAIUiqQ&mCs^}rlIjw#8G79`GM48yJz(0;;L!jI5zpx~_zmfr{LOxW7#LU_0Q-NV)8$5d^ zP9o;g_6S-zS2I)fXy%#KP$?py?cL|n*4Z?f->96IT*fAcQI068^xtH>g?U2e`L)ZP zYB^SVU)Qrf%%@+#5XGH+Zp0Xxqqn$EI$W#q9+WZtm}UD(-_X6LXJ z*Eww7gM-1F%j6BuZYS#rV1>y1>nwDyF_Eu!d9QqhR?;-`qXf{DneYFG1+4){u59V= z6TteC`L9vXuSdEK_=5nNI`g}?(62R>kk8VvK4t!PO}l0!n5vMOsNY!{qcS5O_NT}) z{|JZ)(_0|kG9mX%LY~C_#rO%dV}Bq$_GdjY_Gd<1`y&GF@6u?0(gMW8{w{;|7e+Z; z*q;nzf4+H>XxLGtmB#l$z}SB}MuU*_K_)iEpRDD^vJ@Ops5#le~E=RO$E0&R{PboBbl$OR81r z&)<%;^W$NceoOYu{^0!f4!kshy@M&+!01uYN2i?z>S4@{N})UCf>iskEYyd*D=@bz z_3J@sa~Pr)4P$CxKkmecbI8}!!T`u ze>mKd4w!KAha&!7B}1(-xPh6hudT*u3CLQPhgX5pQWJ@`?n|D96m;@q$g8fn7G=;Q zkkX4!ZZWy$EV1GPLiS+Bla{03T!5^D7ZvbdaxcbM zotCdZfPm`)UT$s)xLH`$q_x*?p(@01D~ri}0li{cC%v>r;z`1)Vj4LsgW&Yg-=L<` zQcjv?ImwEnDt8d~;WFS(*DK~U#!Ldl95hwjN#F%Qqz%x22EM64f>p&U#C?XjLt3TY zgtkL_x(S;!zbB*>8hhGU{YWL*o;oK|D%}DYS2w6nPY`w243Za02 z)XBRIp9D}VRg-Q(2QI&NrWUamkrv(n=AR%;A<&7?6qkcCb3Xvr@9aVYM zg>2R>bQB_O+7$Y0LOP`?RrI9(4V4KxF?B@p>pH4333CHI4GJu}SO19m=m6C)U5)0I z)}U9wo`a+gW%eR?dIylLL|dTB8SW5^9&-|rA28+2aT)hJ4BkJ+j~-kGmJlXeaxpoY zt(-eu$ji+`%mO~=6&Lr8gA*-?D3gt^UC2LTAcmWXg`E_s=u?L)acNSMMrLXBB#5k`Zt;Lmd;gaZLC|m#Kx>jz_?(T1=jjT zF+=UiJh1|4cD1^(eqDMa^44?g;cc zY5T0#(I>bn+(yP+^j2xtTD7QaW-4K;@Mbc(UQ9b={XQ4dHki&?W0aw2S!N zszBMj2vfP2yNCqemm6XcrgC3Q#J97dzbZY8MsJeJV=iK{zHM7mgc)GiYE|f;F7{OY z2yE?@=5`D!lrX?fG_A;21%G20-rwUOit==%Pb|XiAXMH+!fI*Xvwiz9Tsd`1%2pa7 zmvfn-pJt*j_NF2|Vdx46kXG%R7-@>|7LAwhjIad#2SypMG*8h!a$so}`rbp`X$(`L zq=B}ewCjC4&`!MwPtkf2)_NU^_NY&~K)czfvIC z`1vt87Td9|sK8X;vkB{u_LDZn{|+V@O>#+*Dpcdb7W=1S5N|9^g|2fEoBY>KZHh26 zh|u$dy@%GAcBOwo)=AQn-}$JJ9_(QM>|e6rf5Up~S#Kv+(H`9jLtC>YGD`qcw&_lU zw0Hge(3PD$f(l*WV!!pLSSQ1J%Xdg|Tt=hr#)Zi|)J#Sz1~9@PEN+T+Ta)rkmYf-4w9Xix zw1=zxp5iP^4ccLQABrNn4QCvJ09kKG66SOL4 zNE984=IN+B{wzm79t8G#y{wuzGceL*D)c+KM>x2C88;3+H?!i-GIG(fbOSrRpW;?v zx)#GMA@ev2mG*nw4?UFP(U2Q+E}2{@7rkVS!pzy5LASJ0EEQ^SuxUB*p`=)>+YPGF z-7c(CJTJ;ND^i8tc3?&Sus$w{h0!Q>qFe{-$zw9c@NFaIq@1&Vdyr`r@HmZ_1tw9w4j=-E3N2e7r9f=E>lT4y-8K_ut;J zFgH=V%-=iMw5#LSpFD%Ps0JqGyW$TP$BOi1a4=!}rXhom#*brvit6OlK~DykI?>;U*Z3DOPAgU+Q*7?3!_5Q99U76?=fsKcvJRda2sJM@yK9tLVvUsFU*s{ z!w#(IEZ>es_HYxmP5d_pn|5Zx{ixkukuDak-hmY@^3|Lj3-e^KLlrXEYXmZQUc!li z*kIsxiP?OS^z1|{3FE$6+O~wRJK6g}HjL#^p_LAzXrpg9CjO|1O$FKG^sO#-uPQg7Rp=)damaT+R$|TPL9m0QG)0g3oB!|eqtY(tOF68< zL{%~ZOE$_%NxL$AJVYRZZue71RNDbB=R138?M_8ei-sPDxqO-WQrd9tDr1Qpd+R?i?1###LN&iz<(4V_zoJ%)4EZs)tBS)##SK;bMss8X3RQgWS*JM^J@OnBpm=dx zjJ*b9jeG{`DPA&Tt3&aRe=Yq0q0UD&Ch%VzB&mbGw;eHV%ipHWph0IZMI>tQandLm4esQ92ce{AG zVm-*wccGn07RM?kE80B+_AvSl(1vQ9PC~OU9;iDk8u3s}yUCzxW_S!@sItYo6dc?El%!ay6Jg|WBzb^S+yGhUuX6f<`|1eN)FAsD6? zKLv)j@2k)=OBX19N0+lVFaA=S?p*oGk3|svN(-jY?<*h5X8*NannYjuWK@;n6E;7^ zS3VK5jpA=Kf3}ME_W0Utv=IJQht??dG16fJJh%j;@AQ5w-5gRK+JEu)x)#D5()KV& zKj;!PXoqxQGe|#b_Kgl{Oae$h>4Q*{L%IWV?&6>IXPHW|CqaspCG5xlj_t?d|L8M8 zhZd#jtI9LUnTt(@;y?6Nr+7GH&m)JON^uLz!3X@~p(dzGsj(Nk{NyN~mBQv9a``Dy zzKQxQS$B7X=rosQx6QHqS&vCJ-Q`KLs?x{OaND{#%i4$7F}YF|VX{}DXDx1Rbw?#) zYjYr~vYgx_sLaJ->ny0&;RIT;NK(lw7ZH;k2TXhGvEGd_zksVM_YyM$Rjat8^~k`+ z7}hjZ`DbFTWKZA4dKR_aO^fWnTaqui# zzy#HiS>gW#0RA9=^fG@76eZjrUi=IcUWkatQQzI@`@6}_zqr3{gZEf3;hj!!%MABd zGzrA{6LR_5Fa7p;0B)pKbUx(dL`D#-Q@RHPP%-znBK4!WcfLjL*~22^rfgP-7fJa zz;}=7Cnkby|Bk_Ap6?>lFT)_+uJWS!ZZiD>2D)z7d&zT1-irRT+d(gx?=I78&{uZ5 z%}eIH%yd_@xo)2`F}qBsNSXM8Gkts|c*mnWmCF~N>C@3ecYDoC<_pj?x7@mY%INlC zcJ8+%PeP6B_7F8?llxX+CUXp}Uk|!8b?BXFcZ04-9gVs`y4FM40S&q-^;4w6Myd56 zJp^OJpj%Uyq33&*5#<0d>YzH1+&2sAbv{h)$#wJ{VlYou5j|jQ;@whbxqku_8if1GKMugnjc*<%s zsW}%GS_6Dw-RUIX0PbTC=jim;4*(Z5W`e$fxipAhHBhW5=vnx zT&INT%lzNMJ$nPF^OmVrx9W-KEnT2m-L4z3BqLQfLs65ifeQCx2ASV#c^(>SIvuWh z(*G(Rzb>CT6E{dU>PhR#z@YioG=%HyFb2)H(1EntD!(A%pjpn(AGg|}*@Ih!0blt% z%qUyc%j-m}!nVG1MypnPbPvpJWb*6N=ZsRVF3|6EiV{YsRu}73w591t6GLE5Kj>F8 zm#x<7tT`kG_=^cO`5ZC=^TF7xrHqDak4ODilRcyz*cWy{lZuJk{}M8PEdleoHy|s9 zS$Z#--wgos)^>o%kALix=~tz15bz*XbI-dN+2scu-mI1WNC2-dw|YFT&Y3=%yo-bo zU%{uZL0fJ0x$ZS9CJj~E$7Q~zV|f9S{$v;Meofby$O5oY>xmkXf;2wyqd7JyMrc0) zd}mCn_jPwP8BaM>>AhsuR)hK7t*1G>MO43<@(y|9dx6(U_sxdiO81Ec;v(p=N_MkK zswoP!OJ{Ec>NNcsDg;n|gG#Rfs-9I=P3=I`x2z@=`cZUnGEcYCEn`uWV8sxE2DSz0 zn7$ioWlk~nibhrCY;r%QG9T8zEQxYVJsG=^Y^gxkpg!4lszXWCG?|pNx>5fJ{lE@T zV%e%it3!GsTF)fD8FA1Y^sI3`4#Io-MJT(D>pOjT2ef^}W22d&pB;)pySFAnXPrq^ z*>zEste%R25-Lt_IdgEknYf8HdttFe^9{Z_AHg|awlOU%r~MSfyQ>_ub9EM@VIg*g zOT*nvp_zBol%7MzDZ>D+DL_X-nL2BOMC!kqJhtDK8>V7{;6!9Xs`O%)x%tn_l_JrJ zSb7h6TpYFBor`8?);=OMuoI$H>FWe=an$kxzMh~d;0FTO#kSnH2@P;BGZd5W)}*li zY?QKl62Z|Bc0`6L3^zqWjI$--s;0}b=JJ22(;sKt~3Jt`#@ z__shxnBFq+mI*m-A?kZs1`ow1J%s-5JCr7v)k%8DP792&)AyrcqQ}!SKV(KYx1EHP zHb7rk&&03ABai}D&H9=AiKx1<^qkg^EcC2?P6Tus_U3v2B65G~tyEU|nP|ZdA_K{* z(zD3C8%bu3zc1g>f17BUv)2;9_L+6gqvyhlhR4$AECU*dDy?Q;OAwo9*4&>L3CL$a zCifKt&C&03ohx)Z4^EYyRE@IEL?@Z(FQ=ALzJkL!w%g6nT>eHZEsaK*# z`_%Mqm^(WSX7Kg%fS&p+u=rVpFQ<^o>#so@iG88<2n5JeIsIM6ScfqPY&Cfb8C_9- z{by5HvI25o@+tgQ45Qq0e#l3;Wr!6Yu##Qa=p22nrGg!ZScLdWN1k7%$ z$2-ev$%*QJ4SBPnosnCMgNAY-279I@MRj8H_-e$`fsefLr)SubZjSv;O%4JT_KcS;~K$rzgM^!yYCU3K4 zOxL%g(B7C;Z@A0_df2Aem?7RTlG|(<%k|7krM5$nZkjDIkuc1)dS5HN&|R1&%}_To z59TAcTl8);&6t=~F0(;jfw~tHb3U28&6aVIK7>la9UGlxi`_~lyMc_$^|w%tmzj4n znY^%;aZq0aJ2)y9CDKu$rwHMdw2Zs;pcb+5Lm!gKyJZ;<>s0i{Wh(RvmE4>72VZUUT%JguRGl_Wp9LV@yXCMVE zWF=|CuG&mC?xkfUSYKnU&?JSb8yrBkHApv;K4-ufKfmPdpN{oQ4Dvs$Fa zL|36-$XrIn^s)X~-Y914c@DF`^;1Hlm_=mrUO+~rwHG71>HkGBDm2z*j<62&c191Q z@4TgC@`hN(WNTX%{C0bh4n1!txvSWxEVDM`xm@&mWbpP?`m_U~n5rINwKqRe&U?c_ zWn5$}L&xa|7l>3BGkX0<9B(P5FHJyfPs0&usx$~w7{I!QPE7#@mDi6bUaZJ?&zhPP zO^*ElUNA{6?>c6DVcm+foCY>`H5p%_qNLxRe!5hMXpJ%jsl1MmU9e30>AGQ|2h*q| zbDt#eOc*x(m+9zVP`Qk(s8W)$IG5^J5QHyL^l5`Km2w@h`!vP zw6pi+q_WK42BixdFWmwmO!^kNJc#Zqy+wDPk2WKWI)#75lj)E)p!Q=WP zcnO=NRhZ(Nc>y9xkNQLxrOt)D(dAOK4lGAN&A*xa@-dCb3m&q`El#uHYT;WX)dJe0 zujaJaW;k6pbEn&&9<=CRjG7{^$H-dG1XceOCKy3)(qhOh1KgOZe`nGq&al>gmmb*6 zoRyZ7ITm%c#kd8~gXv_9z|#5TaYo$Y?86u*JUmmZ(wzhxC17GE8buSpqT31JGPDKi z4ff(tZ!m4POudjtez-VJ+_R>D`B zKg!Vtv(C1Q@N{OKMPOhK)XSw|)+w|=UvN~;2r`^mr!X9qFCoXwI*)|$#WC0%(JhV{~W2r#qGUr>vU1e3VbRx|5-gQy>8a@N@u{jQTeqU~Ad zH$<3OXS+&gw2*{U|14(6%sSQJMzJLq&aCqbsZ=I)%4XZ(4<8HsKf@4Z{s9marnf-6 zB{w46kO+yGUXm=+%au&c`FTDOQ0*Rmazci(euMeCg6)JD~+qz)?8~i0Il*7>?~akz;JPF-0k+faMy+1%8EJl~%cc z(dR8y>T3@`QFiGvQjF~ucW@+_#67mVh$v&bhq^HhgJ62L?G6!PY?qhd*iLey`oBz` zvE3Pc8^xAfIJSGPeJqzo;wuaa{69cMnBFoWlnJ50e=k&4=Fdb)!t@r1x8wqZFS1Qa zvY502MAxK5z@#%=8cZrQ^O235wPZMNT@Z$?@d0`yGSPE^1D6_rbopcUGXGU@!}J#T z4$kfZ2{(bbhS%J zG_@_W75!yssMbb@W9O}+ge*?|t!=s@154&^@H(++O`QJ`!pXl?uU7!#usN}(WIQMZ z1z3Pb_+}{!-I8QNHO>vq1t$!_yjTx#TlfNmk23oIUfns^j?SQKJ6l>shhTMR~Jp5t=%xSSx2h@Y{O!)2v)$l=({ zD|9(oTvl3#tx2=cMrd_AQxZAvAtE@1w4S#57Du^m##G+l3E|Sydc(r&|6Bnc$ghNO z?PDeTGEtkHGzd|lHmI4huCRhWe{GCbRj7~4%=eX|y?8XLLgUEfy25JjYYV2w;3~A# zWp?tNfLXjT^LCQSb%oW-H+Hg{Bb9fM3@#h2KE5|$CMTbF2tkK ziLST{egExua@=y_xX`gK^%Y>gY|B%ji^<^9#MyaOTc z?}TyHY~AAfbc>sU)OXYA<^4bikAbW|`(EtqLeyeewpb7O+R7kmdL;DJ8Bk~Vya+pO zx@AHr6Mx?m)n<>ud$`MOLykb1lUae?!(Bo#@>IJ-9_|V;@FQ3%bP+lB;qG&1J4;VZ z!>Z7oWZH+jWdohnrOkYvO#5*6w>FpoN@Xw!hQ4%}H(O7D$+eA>Fs7SGxCL`&AMXC8 zN2BQ7T;|<2lL-58cgoaeWVnaBd8qi*xt&W|mc=Ub{{~{1_ABrwK!;&NrQ7$N z)n-BLwKUiNV(Fn&xNB)bVd?2Ek(L%>;6t!fXgxW$rRPH*X7A#2i5A*VrfunVsHJ9; z!Dik^rfumwRPP@d$H-Qpzq!ntt-)wrnGD+r8%uvrif!q<){UaKrYvFJZGGITx#%TC z*p@yxAtv9p9VZiETlyljEl>Vz#0Da4ONX{QsYvl`#I;1&mflZGF>DvZToyP&ifw5h zQZWVf$Z#$FdOM}4bDd=r2*VPLBP9^SRBeI(8+r|uZr|Z+lxl;SnAU@Juqy)k-&_%u z+pn-=B=eRy`tbU<;Yb5q>9S1cDcvI-NLvj7c_QryUT`<%RA8Sv8TM&l3k92~g9n+i zd_Ssf^Y|XRJQ**fcMG6O%r6-UjTLBiw#KnDgbk%LY^AOtHYUpCo5;U@ zC~oqUY9?fJ?OZRB^2S$m^GA>84eCZIubRY-q<^3@^(PnK3Q{^9s&dwk6h;mbJaYpc zfk|-HtRzH;p{tplNn#!=M#65y#zdJsjQm72o8%Hrz1UnkkLSw9O!9!MF_q`Wj0X`| zhul!z+;=JSuZEm3y#?Ye^Y0{q`%{x>;#0<;7;zW#5I>!c)Cit+(lhx*VD(0rFzzzV zYNE43h~u2|FZvHjtiy3v_e6V;sTX#UJjei#h{aJO^q7LGJhq}^cIM>z|U+0f*w6gr$BC9;Qimk@mfWhpWpo| z^M5Zc$z?W#RxR`IC(wB5VqX%3Ni<(S)IWbhH=1|)?R`CU@qJJBJ`CS-G6JM&ySq4@3qI8d!Y)GN$Dl3O zY^qm~!m&K?+}P|GfGV9$9!KlIOJAaF!@bi6&%YOlL z9z5L_8!*EV!*?-8LRk0k4Ty%r5XCG~)|G|u<8B6cVZQ1xG9F>xJT^#%>;zYGa|Dsr zDr+TL9`Jl8V`M83!x+J>P~m^!4UGnw?RY>!p{#O zndl6G!}qjCo`s*Uj`eVs{&$9bb5BJ+1)DEEHEf2ohaKjtQ6mX;O0A3)5g<*4`2yNV zH+cCzRgVZ5c9!Znha45=D^wyC@cI`yAcl}Z?h;4Ng`eBzCc1DuIf!fmn_E?e%@87T z?G?Eae!geYa2V3i7GJlx{C)&D(8g$8Eq@VYj%_h&R*|nj=32}MVo0CI>YTaT`VIjV z=1M8d1wkYYJ4ZY)GEjz?CJ*r<#RzaAV^|DP%2Jj2xYZ8Ix{=48`fkY`loX8vS@%4{J z6hq7)8h?&{2LTo4+aSYy+hgPxgt_-;pbY8iYV<@Z%+0Gv+bz(1bL>c8aEg-<(R3^K zGi+M<{blf)Ucqz?a}nmc$fUuLtMx?!<%%fG$$4ZO!n`wJpbSy#JkpEYjsO=GhQ*Mp z^}`4N#)-Yr`g0&~(dEIa$Oj;vKiwfRg!;uRI}zVj%z0xu-ilcOcK4Z1M22Eo&QP!- zgFw9@Rz!d_73N)}$P{>wpbeM|F@&_^mw>Ygex65oINr3c1)H1ahRsk++T1aZ90!%J z05uqox!cHBu3>ugy=~+RUn+6};6Q9)>^4je4p3N{me^L|H>`cp<&F7fYNQu9{DQS_ z)tGpEr0-I$d{%X9?|4_J$Os_#8Ec>CRowEm=|}_|e#qL1%QcoAmtMr(3B>EM$_S9A z!aSde+yQSztTODplcU1?Zg=D;yeV#HA!C4wdZj3p>V+2XkEt-{H<5lIKkQo1cRwu;?Jrfn`xzVF8hD8^RYhVI z_&Hl!J{8m<@HkTphS31{Lj1@YIIj*zzShi`v0SCy$FJY1$R1FSbaBccqm_zW3nE`o z=But*3@^)%$HEZ~j3J2S4__nyg#X+)hr^Iwxiem=H1l~{F)#f821A7hVyHEvmwzYH zjqPPrgr9umW{gp&bYPf_akn5c6fAyO((akRv`8>L^Osf?{4^Egixas3z8j)O$dwn# zuVnktwqJ~pYY}LSkS9i1v7#E1Y*V}fCf`@@nv%_@Ia3noH6=46#{3T$XTX4_MA8?+ zfXi`WESnmmM7bSzVcI*(0Wrkc)N)*Xa&4c%A0x8T^4{C>QGm=&#Oc+UMlQoK-PMGd zP}v$#c^GOi(ihrk%PFU%z4i)#euXG&u{Jnql-{24P9Ro6o?%PwFzp4ApS`!cn0uq$ zlXwHXNyyDfoFC-EbHJhj+sxpTf_(>xRRSUUhYvQZ1`_{aS^2Z9URyH?*Dvkm)0eWTVSe zPupKK4iSxi_3^>*muQ~(t4JB5^0uClZ;#xO1)v67fNF+|d!t>xc%$~%10X-b>dtUT zaAr6c!5`a>UH~O&4dK$6nH@QkQQI#WHU8?FT)>gXU<0<{TDY-lJjJv963h5kKbVc; z)k*PIU!D*DX7N`$;#6cd=xlY9o<}w zmXBVTve1Z*I6Eq7!_FtInPFOR;0O+?o=c3OU|0BMt?$7e&)nB>}bs`cSjlGZ={Ubhyc_6 zg2(64Bx^kJZ2$kQGK@gX==S1@d~(#dOk8FwzAEuHQN|m{Ld`$mh%#(3DzX7`iYUia z)x(}jXZs~*#&6oxeRi9=2vK>3+_Wi%(3*KUJn{_u6QY^>En4%8S28DFX<{n!86t2y z-H7tco}aPELJuy>m3HUj!@eH5(HiiZc$>)Wg9yCYYUIi?2}2{_Ya5vY)&a^w?>zC$a-R9w`_pGQi4kmie$nmYun$;pII@gOV<0WdOY@E;}-F5(EBG zhyZ^L>5O6zd7r^smFUElp-D29aW*;j#MgHLUQoHf0Wk!P^Zs2V4}LY%;m9IDMMi`8 zs7GDVI`Uhzj(E(ld?_L_kaw9A!LF#d?F9P&r1r1 zBdfJ_cYtP=Z0qi$7h*8W{0LrtuE8Lkoe(SmpN?*?JT2QXk)HsaajpYp2+8q=RV431 ztjL!+9GP80v6vRGvB2DQ zZFOJ_)O@Tfrmx`KN#4fC0OX<~pTLk+I}iTaDRAoa z@0fs;fNb4dn^_BLA{-14`fWtnR)?84LPhw;=L~DlM_6tA8k`3ZYphLu9)7h&mqJ{B z_=b}lvbJh&)Hwv}rP{qBScR#I$Q%@>TW43f=F3N7tww7K0-cGdD0eytP;OMKeJ;UX zdkPZ89~!fI0sls;8$_!=BfL#>y`eYAa%H%7)Vjf9{r;UBSPM`ITz2LGBqpfpAQLej-5X$p(v&yIZjZ+M&6yqaIkA&*88A zfX-`hHvI%=6e2ji-Ty$qIHYb*P2O~8?7lbI>e2IIwe}`a_L5+I?WI`R+xf*5P|bw2 zothc;^^q~lx=8I310YNp)zT{{_hPnp;22Oyp|td7Iyi z>9UeuHe=aJ)nYR_)wRX-h=XmLi8SpCAW`oI-R@m>M{i22^dkfVtS^BO^<1i?EoT{HS-D5lEr+|Ek5t7TPUtXn;?Xo`_dW3hvXi4{49NIauA`H^#_ z82kSYJ_YlSS*a1B_kbcmCmF$~veKy&Fy#f384s7in%pTEFrN4Zsfq%&CkK>>M%z+)xSz zHV~I8YcJ!e$R~jEE}>^yC^JCofRDmt259>sxcgPuphWLy&k}3oc8r-N+J0H28UM+4 z22^A!#PFVwEyi30GGc7Mh%tT@*$4Q%XsSh?RBgY&jX!p~53~4)7;N zY%oCa_Y20(B4&kJf74AkiGua{$IgWXgIRsM$Hh9B6VZ;=`hOf(ZG)Sp|V z8cYXaNO=E}WW8aO(7-TJ+cC{ipT`cu?&3+P$2hL%!Mq)Q<~vYq&m4PitGiQ>)|5k{Gkb!B#+ls>`ILC!_4s@dgePJa zONsvjf9+dzUVu|`g3fPnc4$`Ye4uokRofN*+IDoZ;Ox+>ttI3=t!pQfJetm6I5qR( z?9i;AV+nXz*Iq_mJ)MnkHXVR-4RW(t2ay*Z0mmW3src7d>DulH*A~E08>_%xvmGle z%DGzCHo#w}xlXDB#hNb5q}nGC26zd;Jg(Yrz;&9}It~-}UhNI=GE?Lq^YTCR@`>5_ z(e*~*Ka;bed4;#dkQAfv5)v9KoQGMIn0El%O31(@f;Rf3Qq?}-)~w~t#eGTQUaDWb z0k5zEpk@ipQUhnZ-VWEd>iSI^r$BJO^HCy7*o+D_27!MdX6;aT)W-ebv#ozh{uWpo z{@Qoo?9gnbiD*F94qcmmEvsN0+!ieW_zzf!T!EB1#&sfUtFJZ@^}F^r5Nc1rsRRC=-P+KJ4ELI zoXhks&^H~0w-fTUL$jh>PiU^Uk}$Js<09miOY9@$hp?;8U4@?!h%T`&2ZWWWXB;4T z-pVuyltz{5AzNM@!R>5$hlz7`D0b*=bxM6mK7^Tt`NnoP+LedM?I)=`m<7dF9ugW? zo>CMUf1CBLKG`X=SAhgVJLSiiQGjXxae7r4>GhNp*!w_)g z8Otmu-?a>NxkYp6p$=c79(Vd`!w7HDXYNw!s6*YOYgZs#JD<)}IQU!sSER{%zy57z z^2>0{WSkdAmwyf_rYb76l|eBagW`qb-FnGEECs>ha-uW-XF-7t`b|(|p3EVxHOPhd zPi<9u7{Pt|EX3h7pNu^G`?u9{j&COT4$+<9Z`E9>5=SAxa+!+1NCU+1m)s_QvNs$v zh5rV8X3xpmUdh^OP>{8K`W<*U!*>#F(YKb<`>mRDdxz-G(zj|ZHl17m%atY-F!APS zDjh(1C^nUWVE_M+%A*iNU9v1p<)4xY)hT7U8SMXOjqcWc{}eSQQ^~--?f=P`VZ`}= zP8xc=4sx6lvLc-!X}cxd_5VjQktZSLd6{PNW?0&Ji6qFmDg3+(tHOK%edH66`E4^( zwdBayQ?(+gx1f2CaHex|k3tSd(mp1~xo%;uNTl9|_c1MWuu@Bx%~*uR`66;I(m$@m zNEPA5`!&nCW?x!?T&%kva@I|zu-YrJ@<(8SNAkM!5U9On$N$IP`@l(6)&1l5&K-2L zRTja2Wx1%Shyu%h)&)TwbonnUh#3vDv$HU;|Ja$?U637c7tm?lge1kD{MR2vrLr>f zQF|0L!KBhOqqH*9CrBz%D|#Nw-~0VJ=iIq>W_AHHd%myNZ+6c;=br!Pb3W&DKId~j z=Un>VPUmhoGrRcMjz=m}wg%1<@JMBBI{zwpSSzOe06#cGAi{jVT_ zsJsuj1W8D8^p9k0EZ zYq#WTS0mGgE+p9_gHz=GdRJbyhWtD9l&|(KRoI4X-Z={cPHkZ=@+b&sx2y-1d-?L^ zD<4Awr6qus+J3w&%B4QXvl*}5lKLEx@mp6vwiRooIAMZiAj~?zN6E<6f`Op?>lWD* zC|#+9!l7GiHpsk|KnRntN>?#(jbO?G0H<_S=2NIfW-cF7S-YitwBoVeCY0I{iTu!4 z;LhB_M~{U49su9Wuo^ql|I_ex`1mV)rG4vd!sa1H03Y-lru!)$&)^}yhQL?RdB>6= zmz|9I+(x-_vh9vIp^{NdJ;Q3KLKZ`rg#!Np5BRlP0I1x(%MY$aHmzs7*}US(M!O{& zbs;DTWi7Z*jsGgLJOttuVLVLK)|k1iVXGQ z^nswbMu*if44Lq%9JSt;UD=hV!4I;AAz~@%!YsIXrJ0ImRK^-{McPdEM?(tXCq_)T z(L2i*E_?;C_zgncX-f5gSmt=O5LkJw-S8X|Y|152?UDrECNhE55coQd^W@@I<-nnw z0uFJi?UAeh`~W(xj@8H3PXK2>F(Q;uLq-JmW>!(eg{z8~*T7@UZV)`!>MOKIJ7X}j zHh65ZhkO%C+Q8h;+q=cPw`#qAe=N2(p!p_{zuuXhq`N-h0#%8CrBZBjf%=hT~Fdtu+Aa>6N1})FL zL*GB~@!x#Bgoh#%TNpm=AY|fkMCy%9>}FVBWMV%fc*(>KHtED^$Fhy`>u|mSf$V1h zx}(w1COfkNZmZ+B@MZJ4%q?y1qxqL2LNCo^t1N1SK8M!+0;aUX&V2YfbWeXi`r*-KzliXk=A6~PdaaXS=|G97r&EXTv@ zh=0qn{?LQq4CIkM%aEr!@?l z-N*E_nGq)1H`tt?<^djgbCgICKo)N5;f^b`C<%y*?94X2XCCC^K0fZiqs!*>Y$Bn> zzrt(g1wNj}qsyj-qZ_ElHwSjwH+dow z?H*#Jt$f^pN2j#jWJCc{kqNp}CTKU37yZ=eTLO6K-+G&q_5B}0>o2u4XTY5~iH{OI z+DGtFiN|`I^YL!PqS$j8+?fa;)e=UfJ?@LyuiBXy+?gx*n2v|cr0Z?Y!e=uA#Gd!S zow=2djd-+w8xQqU`_3Q#HWbrWnI+Rci~{aVC9OfN`qnq)2^UWB?NpI#^U2`gxqACu+<-h-$1O+ z*V}~p5+dYBaakW@o{xwA4d#8&vdi7D1z@-3E9EBkc7yP}b_eC69J$CdAhz0yIRx>skwc`7Pw_-N*%nMiR8*JSwU zpIi@!6llU)4L2f_$;?D?(!DF`9+&QYgjfyFA)Ak#?PjycqwA~Pf~bpRk|8JkBP3`S zgWr1*Y`VnT>eul*q<&zyl^h z#|Fe-2L#@&^Z5_BGdB>UZ?^B%g>uYY#Jp}&eBVv>C3uU%s3q8D0OYJ?( z#?AI#K$D8zsGx-@$tt}y^E5O1E+5}uZY~CO+EgYt5m~Q|jI@rA6?k;otd|>(f!S-l z+(JgO4+;IE-dGsro<9vBxoC54>xC!O> zS8d6op%LL9|3qGR^9bws@5^^*K5I9R^tkZ>8RMUnILzd;cCwuQ%DvP&{uxnUzzl)B zd6%B5{pvNSz0x&VB(s?43pacVk@$%hPZQHT%y#@^Y=PDAeT4IBFHa`qj`qTvw>>Hm zxTq|6MBrB+_?~5rYsWqjvUu`H%laA6S_!^nqX@eaJ@y^&3k_n-e&Aes?7QXt?|A>X zyz@$<(4fFmkcr~`Ry&qXSs{La$oezhZ?jvi&_{T4SYYGjU$EcC%o{q7fhVHcU$DP5 z9PbnO@!6?(ztyg{LK7KUi?_}8Gmq)DKCmcsqLBQKZ^Dn$O)2;zce+_`^LY8$%B$N> z;>Ah7oM9eEJr4dFoj)0Y$m2;k*VxbV36JByo%yYJ5IwfgUtfz_p(VIfGxJBd*W2H~a|C^`fPMt- zHTK!4)1~y;p1B0hOeG&9@sQs&_5&!7sV)P(iNKhYU6RuEElhp8y?h%76aWTs&8>FA z3Vn=#{Hg%*Z^)KHlSL>x^fAw*y#^jG6w%)P$mBa6XgMR6DV6UvHnIPH<xY%omd ztjs*TW~SrOX*YJ}LI%8IXWH@JX%X+9f(UZn$b}m+0lVp7{-yp~`w}vY+1$d_^6kr-rey!Q)uJFTtNZHJSAr z=IN@PhD3%w!Ly@1t?N_FQVS5~(SVWA5=)x8uRx$17R??S{S z@Y`s2gBc7>VHRs_o|CzQNiWQ-gEMnA9*UdX&Gdg%%;9?b2Wt==1rC^RXMRmLew*zN zp;AQ6vk?*sORp)^yc8aVJ*Kp%mN3kVn%B`Izo%N^sR|j4LO3F}zz2oMA&8Djc#>^; z9G)VXS zyk;H`2lHy8gL!SFgLzFl0S@NX0SAa1+siySRfVcLrOoEuv|DLZxW2mWN~7Wdowi7$ z3Dv>8qfI?{QCq{AnA7-$5H)$O#Ypn1PBerO%(aIK7P-G?Zf&kZ@NEl$Cuge&eD|gw z%x@Zf+Mc%qM`;jLip;8DoaxSf{uII1@AY{foFR}G?X zO1Ljv#eu$RI2RuLgn)`9N&wc?vF}6l18jNrNPLy+C>(h|(JZZng}MZ_J|126)5wN7a_4tIQ|1?V%{_TD$kbE^ClSJUoBoUpTL7A19H*jW5BCDNSAHIGvG01PvbHGe>taE^RRYki0Iekv-G{N20HBn7ONR32 z@cJJ%)O7~dGUlszz12>xv<5C=-hq=9Uo)_tZztewvwg}grS9=KVO*CPc`p$0Y&=~3 zjzyy1F$9rswrdfY`W>esdwGvHo3^Bufr?&ITjJZ`W*hvzOfc(eTj zM5jK>22{eY&$5L+D?0v&2!!I}c+G?2ZtX=Vdh}UD{pTzWT`p2(jE;iT0q>zt;!#my zooL-@FIWOe@y720uWb8HyWuLleOA4F(LU-FP}0+QsgP|2`;7Y~dj_(!f?u}3-U`kF z$ZQw;M(*J0K(bSxL48M0x#mhB5fa(Ay%sfA^yV)6Qq=8& zu+xre$Y*Ztvb*d@5$}ROIDZ0{$MeZ3>@K_Vs^lTODck7v;1Vx7yW zC{5*}GkNV&*F$AO!9_Vnpl#3SMm5GPy&MdW0-!zP%5&he?4)+%6PU4M0(|NtUB)Lk zV>am9n1(6nR+TC=;}3J;)A+ej#;0_~$CtvVX>qghDLe5JfNRV-_KO!_{G!45MC@5# ze%6D6xU66k-cMW$JQ)+SpD3}cNAZq$%D*E3|2OTAwc%heii7`&U#W-JTlQuMv5eOm zRBO!Jb_Sf6@me<+UVpa7PtSSX3E++Si~W0#*X$$V^;a8nrJHao5Mj&#d+%{zNK}b~ zzu6DlH+JdA(WCgl43bQJj(~)YPHjA9RXBF#WyUXXm%Z+6#5=;yxPHMc_L6wJRdJNv zjE+-jLwDJap-mOX+K&RCm0#&yHoy2>ahyE_l~;acTkNJ-%Bnctz70sC{3hRJk64R% zC)>Q+Qu(d9$Nmbswc-@}$tL4x+4tDnJ_OG)`#!WpMYIC<*sIW9ML-*J(kB8?u_6@6C&(eGBi}6-*o_)k<*R$*%dp+|kw==fuiE3VYCOk*m z>(KkE^!x9!XJd3%jI(b!+W1Yo$G#DRprXRw1I$^Q1l3{7V??>p7 z$)oQ=pK8Crz4itStI1<_1F+gJc&|M!0>80kC%b;3du`q=K6%_{rnr8k_u9v!C6mV= z`BB%e>|Xnk6X7@E_ZSj7zsdL7XJYtGt{93gQGUUa86(ew*ZCHn$}2GAtDW$vjJO4$ z9@h_r*TizPMCVm<@iKJDl#`FR6*$O^aZs0|0Jt@jxISM)z?55#nMHh>Cvolu zWTt%im_0yaohpsMDfY3aUk>o2tB{ZOc@-)AK6eq7d~rrx==WLC|7q0G8)rrTF)m$J zIj`uS3g^eU7x8-4eNr^`F3L+y38UkHOOhVq@OJjpgZN%kcU{&G5ys*zm-t z@ng?xiPtWPrp~KRG^X2!j~-S&Y~=7^!*c(L##nv2Hau?b#JOZ60Kj{R1;0chbkD;0~GrslUak&3tI0+2f1G~Yl1Rado)k{OS(SR+mK*wDoaj zu3WmvRH8vVX=^XZj1gmPF&0Uua+wn9T_{C}S`kw*jbNx5TAmgpffw*VVnk9cQBV_P z0#9#WOESW&u1%vK`ltb2-3D|*bU@qJ^}2(BGP&kNV)fBv(qO{k)RLC-&>zusJ@E?} zG{Ywztu-|TbbyyAk2w(Rf`+9o}w9}cBD4vj=pql(>vnVCSuuRhU0 z!bu=9iOCWbQP7XnMPqRT3oICbe^`=#J!rq^G`#2xtaKVGg8}CstLmI#3!Lj$*G+d$ zU$D+OwJvBow>n!9bjPZ#fulg{P165GNc{$9P$ixd;}a2M!>ZTdx8Gq#zrVWDIenPC zF2L(6tEM5-Y0epSPNWjP8-v5(`$t3?JnSmG|K3^PoIEXXTz>v3c0`GsZI1&?wXLuJ8`b6ntT`>jsAHgs0v_0pXWUl1JNJQk>Qj^q2+J1XV1E_l52 zX(SuqT(^1w+y|_>w_i^?&vguQz8

  • LbpNI#P)K+e~1njo@1lm2W%6-HBd%Z1rn! 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

    {xtmdzaedCM@AEF5 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 xU!#3#k4#OK97iLZ-qiSLR3 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�hA{#OeZv~oQKEyHK- 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 + +template void mix (std :: vector & __vect) +{ + for (unsigned int i = 0 ; i < __vect.size () ; i ++) + { + std :: swap (__vect [i], __vect [rng.random (__vect.size ())]) ; + } +} + +#endif diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/order_xover.cpp b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/order_xover.cpp new file mode 100644 index 000000000..54de70705 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/order_xover.cpp @@ -0,0 +1,94 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "order_xover.cpp" + +// (c) OPAC Team, LIFL, 2002-2006 + +/* LICENCE TEXT + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include +#include + +#include + +#include "order_xover.h" +#include "route_valid.h" + +void OrderXover :: cross (const Route & __par1, const Route & __par2, Route & __child) +{ + + unsigned int cut = rng.random (__par1.size ()) ; + + /* To store vertices that have + already been crossed */ + std::vector v; + v.resize(__par1.size()); + + for (unsigned int i = 0 ; i < __par1.size () ; i ++) + { + v [i] = false ; + } + + /* Copy of the left partial + route of the first parent */ + for (unsigned int i = 0 ; i < cut ; i ++) + { + __child [i] = __par1 [i] ; + v [__par1 [i]] = true ; + } + + /* Searching the vertex of the second path, that ended + the previous first one */ + unsigned int from = 0 ; + for (unsigned int i = 0 ; i < __par2.size () ; i ++) + { + if (__par2 [i] == __child [cut - 1]) + { + from = i ; + break ; + } + } + + /* Selecting a direction + Left or Right */ + char direct = rng.flip () ? 1 : -1 ; + + /* Copy of the left vertices from + the second parent path */ + unsigned int l = cut ; + + for (unsigned int i = 0 ; i < __par2.size () ; i ++) + { + unsigned int bidule /* :-) */ = (direct * i + from + __par2.size ()) % __par2.size () ; + if (! v [__par2 [bidule]]) + { + __child [l ++] = __par2 [bidule] ; + v [__par2 [bidule]] = true ; + } + } + + v.clear(); +} + +bool OrderXover :: operator () (Route & __route1, Route & __route2) +{ + + // Init. copy + Route par [2] ; + par [0] = __route1 ; + par [1] = __route2 ; + + cross (par [0], par [1], __route1) ; + cross (par [1], par [0], __route2) ; + + assert (valid (__route1)) ; + assert (valid (__route2)) ; + + __route1.invalidate () ; + __route2.invalidate () ; + + return true ; +} diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/order_xover.h b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/order_xover.h new file mode 100644 index 000000000..587c35652 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/order_xover.h @@ -0,0 +1,32 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "order_xover.h" + +// (c) OPAC Team, LIFL, 2003-2006 + +/* LICENCE TEXT + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef order_xover_h +#define order_xover_h + +#include + +#include "route.h" + +/** Order Crossover */ +class OrderXover : public eoQuadOp +{ + +public : + + bool operator () (Route & __route1, Route & __route2) ; + +private : + + void cross (const Route & __par1, const Route & __par2, Route & __child) ; +} ; + +#endif diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/part_route_eval.cpp b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/part_route_eval.cpp new file mode 100644 index 000000000..53e41a5d4 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/part_route_eval.cpp @@ -0,0 +1,27 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "part_route_eval.cpp" + +// (c) OPAC Team, LIFL, 2003-2006 + +/* LICENCE TEXT + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include "part_route_eval.h" +#include "graph.h" + +PartRouteEval :: PartRouteEval (float __from, float __to) : from (__from), to (__to) {} + +void PartRouteEval :: operator () (Route & __route) +{ + float len = 0 ; + + for (unsigned int i = (unsigned int) (__route.size () * from) ; i < (unsigned int ) (__route.size () * to) ; i ++) + { + len -= Graph :: distance (__route [i], __route [(i + 1) % Graph :: size ()]) ; + } + + __route.fitness (len) ; +} diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/part_route_eval.h b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/part_route_eval.h new file mode 100644 index 000000000..2fbd3b35c --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/part_route_eval.h @@ -0,0 +1,37 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "part_route_eval.h" + +// (c) OPAC Team, LIFL, 2003-2006 + +/* LICENCE TEXT + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef part_route_eval_h +#define part_route_eval_h + +#include + +#include "route.h" + +/** Route Evaluator */ +class PartRouteEval : public eoEvalFunc +{ + +public : + + /** Constructor */ + PartRouteEval (float __from, float __to) ; + + void operator () (Route & __route) ; + +private : + + float from, to ; + +} ; + + +#endif diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/part_two_opt_init.cpp b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/part_two_opt_init.cpp new file mode 100644 index 000000000..9f674916c --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/part_two_opt_init.cpp @@ -0,0 +1,20 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "part_two_opt_init.cpp" + +// (c) OPAC Team, LIFL, 2003-2006 + +/* LICENCE TEXT + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include + +#include "part_two_opt_init.h" + +void PartTwoOptInit :: operator () (TwoOpt & __move, const Route & __route) +{ + __move.first = rng.random (__route.size () - 6) ; + __move.second = __move.first + 2 ; +} diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/part_two_opt_init.h b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/part_two_opt_init.h new file mode 100644 index 000000000..406a4c64f --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/part_two_opt_init.h @@ -0,0 +1,29 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "part_two_opt_init.h" + +// (c) OPAC Team, LIFL, 2003-2006 + +/* LICENCE TEXT + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef part_two_opt_init_h +#define part_two_opt_init_h + +#include + +#include "two_opt.h" + +/** It sets the first couple of edges */ +class PartTwoOptInit : public moMoveInit +{ + +public : + + void operator () (TwoOpt & __move, const Route & __route) ; + +} ; + +#endif diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/part_two_opt_next.cpp b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/part_two_opt_next.cpp new file mode 100644 index 000000000..3fab484ec --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/part_two_opt_next.cpp @@ -0,0 +1,32 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "part_two_opt_next.cpp" + +// (c) OPAC Team, LIFL, 2003-2006 + +/* LICENCE TEXT + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include "part_two_opt_next.h" +#include "graph.h" + +bool TwoOptNext :: operator () (TwoOpt & __move, const Route & __route) +{ + if (__move.first == Graph :: size () - 4 && __move.second == __move.first + 2) + { + return false ; + } + else + { + __move.second ++ ; + if (__move.second == Graph :: size () - 1) + { + __move.first ++ ; + __move.second = __move.first + 2 ; + } + + return true ; + } +} diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/part_two_opt_next.h b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/part_two_opt_next.h new file mode 100644 index 000000000..e9ef5bb4e --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/part_two_opt_next.h @@ -0,0 +1,28 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "part_two_opt_next.h" + +// (c) OPAC Team, LIFL, 2003-2006 + +/* LICENCE TEXT + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef part_two_opt_next_h +#define part_two_opt_next_h + +#include +#include "two_opt.h" + +/** It updates a couple of edges */ +class PartTwoOptNext : public moNextMove +{ + +public : + + bool operator () (TwoOpt & __move, const Route & __route) ; + +} ; + +#endif diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/partial_mapped_xover.cpp b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/partial_mapped_xover.cpp new file mode 100644 index 000000000..2c57e70a3 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/partial_mapped_xover.cpp @@ -0,0 +1,93 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "partial_mapped_xover.cpp" + +// (c) OPAC Team, LIFL, 2003-2006 + +/* TEXT LICENCE + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include + +#include + +#include + +#include "partial_mapped_xover.h" +#include "route_valid.h" +#include "mix.h" + +void PartialMappedXover :: repair (Route & __route, unsigned __cut1, unsigned __cut2) +{ + + std::vector v; // Number of times a cities are visited ... + + v.resize(__route.size ()); + + for (unsigned int i = 0 ; i < __route.size () ; i ++) + { + v [i] = 0 ; + } + + for (unsigned int i = 0 ; i < __route.size () ; i ++) + { + v [__route [i]] ++ ; + } + + std :: vector vert ; + + for (unsigned int i = 0 ; i < __route.size () ; i ++) + { + if (! v [i]) + { + vert.push_back (i) ; + } + } + + mix (vert) ; + + for (unsigned int i = 0 ; i < __route.size () ; i ++) + { + if (i < __cut1 || i >= __cut2) + { + if (v [__route [i]] > 1) + { + __route [i] = vert.back () ; + vert.pop_back () ; + } + } + } + + v.clear(); +} + +bool PartialMappedXover :: operator () (Route & __route1, Route & __route2) +{ + unsigned int cut1 = rng.random (__route1.size ()), cut2 = rng.random (__route2.size ()) ; + + if (cut2 < cut1) + { + std :: swap (cut1, cut2) ; + } + + // Between the cuts + for (unsigned int i = cut1 ; i < cut2 ; i ++) + { + std :: swap (__route1 [i], __route2 [i]) ; + } + + // Outside the cuts + repair (__route1, cut1, cut2) ; + repair (__route2, cut1, cut2) ; + + // Debug + assert (valid (__route1)) ; + assert (valid (__route2)) ; + + __route1.invalidate () ; + __route2.invalidate () ; + + return true ; +} diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/partial_mapped_xover.h b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/partial_mapped_xover.h new file mode 100644 index 000000000..a128fb9de --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/partial_mapped_xover.h @@ -0,0 +1,31 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "partial_mapped_xover.h" + +// (c) OPAC Team, LIFL, 2003-2006 + +/* LICENCE TEXT + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef partial_mapped_xover_h +#define partial_mapped_xover_h + +#include + +#include "route.h" + +/** Partial Mapped Crossover */ +class PartialMappedXover : public eoQuadOp { + +public : + + bool operator () (Route & __route1, Route & __route2) ; + +private : + + void repair (Route & __route, unsigned __cut1, unsigned __cut2) ; +} ; + +#endif diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/route.h b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/route.h new file mode 100644 index 000000000..2489b63bc --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/route.h @@ -0,0 +1,19 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "route.h" + +// (c) OPAC Team, LIFL, 2003-2006 + +/* LICENCE TEXT + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef route_h +#define route_h + +#include + +typedef eoVector Route ; // [Fitness (- length), Gene (city)] + +#endif diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/route_eval.cpp b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/route_eval.cpp new file mode 100644 index 000000000..0d0d6e413 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/route_eval.cpp @@ -0,0 +1,26 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "route_eval.cpp" + +// (c) OPAC Team, LIFL, 2003-2006 + +/* TEXT LICENCE + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include "route_eval.h" +#include "graph.h" + +void RouteEval :: operator () (Route & __route) +{ + + float len = 0 ; + + for (unsigned int i = 0 ; i < Graph :: size () ; i ++) + { + len -= Graph :: distance (__route [i], __route [(i + 1) % Graph :: size ()]) ; + } + + __route.fitness (len) ; +} diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/route_eval.h b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/route_eval.h new file mode 100644 index 000000000..69b9c7737 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/route_eval.h @@ -0,0 +1,30 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "route_eval.h" + +// (c) OPAC Team, LIFL, 2003-2006 + +/* LICENCE TEXT + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef route_eval_h +#define route_eval_h + +#include + +#include "route.h" + +/** Route Evaluator */ +class RouteEval : public eoEvalFunc +{ + +public : + + void operator () (Route & __route) ; + +} ; + + +#endif diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/route_init.cpp b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/route_init.cpp new file mode 100644 index 000000000..f22ca1bf2 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/route_init.cpp @@ -0,0 +1,38 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "route_init.cpp" + +// (c) OPAC Team, LIFL, 2003-2006 + +/* LICENCE TEXT + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include + +#include "route_init.h" +#include "graph.h" + +void RouteInit :: operator () (Route & __route) +{ + + // Init. + __route.clear () ; + for (unsigned int i = 0 ; i < Graph :: size () ; i ++) + { + __route.push_back (i) ; + } + + // Swap. cities + + for (unsigned int i = 0 ; i < Graph :: size () ; i ++) + { + //unsigned int j = rng.random (Graph :: size ()) ; + + unsigned int j = (unsigned int) (Graph :: size () * (rand () / (RAND_MAX + 1.0))) ; + unsigned int city = __route [i] ; + __route [i] = __route [j] ; + __route [j] = city ; + } +} diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/route_init.h b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/route_init.h new file mode 100644 index 000000000..654c1a926 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/route_init.h @@ -0,0 +1,28 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "route_init.h" + +// (c) OPAC Team, LIFL, 2002-2006 + +/* LICENCE TEXT + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef route_init_h +#define route_init_h + +#include + +#include "route.h" + +class RouteInit : public eoInit +{ + +public : + + void operator () (Route & __route) ; + +} ; + +#endif diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/route_valid.cpp b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/route_valid.cpp new file mode 100644 index 000000000..be4c7fc0c --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/route_valid.cpp @@ -0,0 +1,43 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "route_valid.cpp" + +// (c) OPAC Team, LIFL, 2003-2006 + +/* LICENCE TEXT + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include "route_valid.h" + +#include + +bool valid (Route & __route) +{ + + std::vector t; + t.resize(__route.size()); + + for (unsigned int i = 0 ; i < __route.size () ; i ++) + { + t [i] = 0 ; + } + + for (unsigned int i = 0 ; i < __route.size () ; i ++) + { + t [__route [i]] ++ ; + } + + for (unsigned int i = 0 ; i < __route.size () ; i ++) + { + if (t [i] != 1) + { + t.clear(); + return false ; + } + } + + t.clear(); + return true ; // OK. +} diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/route_valid.h b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/route_valid.h new file mode 100644 index 000000000..90763d7fc --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/route_valid.h @@ -0,0 +1,19 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "route_valid.h" + +// (c) OPAC Team, LIFL, 2003-2006 + +/* LICENCE TEXT + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef route_valid_h +#define route_valid_h + +#include "route.h" + +bool valid (Route & __route) ; + +#endif diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/two_opt.cpp b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/two_opt.cpp new file mode 100644 index 000000000..9aa779d50 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/two_opt.cpp @@ -0,0 +1,47 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "two_opt.cpp" + +// (c) OPAC Team, LIFL, 2003-2006 + +/* LICENCE TEXT + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include "two_opt.h" + +TwoOpt TwoOpt :: operator ! () const +{ + TwoOpt move = * this ; + std :: swap (move.first, move.second) ; + + return move ; +} + +void TwoOpt :: operator () (Route & __route) +{ + + std :: vector seq_cities ; + + for (unsigned int i = second ; i > first ; i --) + { + seq_cities.push_back (__route [i]) ; + } + + unsigned int j = 0 ; + for (unsigned int i = first + 1 ; i < second + 1 ; i ++) + { + __route [i] = seq_cities [j ++] ; + } +} + +void TwoOpt :: readFrom (std :: istream & __is) +{ + __is >> first >> second ; +} + +void TwoOpt :: printOn (std :: ostream & __os) const +{ + __os << first << ' ' << second ; +} diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/two_opt.h b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/two_opt.h new file mode 100644 index 000000000..279a813c9 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/two_opt.h @@ -0,0 +1,36 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "two_opt.h" + +// (c) OPAC Team, LIFL, 2003-2006 + +/* LICENCE TEXT + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef two_opt_h +#define two_opt_h + +#include + +#include +#include + +#include "route.h" + +class TwoOpt : public moMove , public std :: pair , public eoPersistent +{ + +public : + + TwoOpt operator ! () const ; + + void operator () (Route & __route) ; + + void readFrom (std :: istream & __is) ; + + void printOn (std :: ostream & __os) const ; +} ; + +#endif diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/two_opt_incr_eval.cpp b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/two_opt_incr_eval.cpp new file mode 100644 index 000000000..1b371104b --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/two_opt_incr_eval.cpp @@ -0,0 +1,28 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "TwoOptIncrEval.cpp" + +// (c) OPAC Team, LIFL, 2003-2006 + +/* LICENCE TEXT + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include "two_opt_incr_eval.h" +#include "graph.h" + +float TwoOptIncrEval :: operator () (const TwoOpt & __move, const Route & __route) +{ + // From + unsigned int v1 = __route [__move.first], v1_next = __route [__move.first + 1] ; + + // To + unsigned int v2 = __route [__move.second], v2_next = __route [__move.second + 1] ; + + return __route.fitness () + - Graph :: distance (v1, v2) + - Graph :: distance (v1_next, v2_next) + + Graph :: distance (v1, v1_next) + + Graph :: distance (v2, v2_next) ; +} diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/two_opt_incr_eval.h b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/two_opt_incr_eval.h new file mode 100644 index 000000000..233cb264d --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/two_opt_incr_eval.h @@ -0,0 +1,27 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "TwoOptIncrEval.h" + +// (c) OPAC Team, LIFL, 2003-2006 + +/* LICENCE TEXT + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef two_optincr_eval_h +#define two_optincr_eval_h + +#include +#include "two_opt.h" + +class TwoOptIncrEval : public moMoveIncrEval +{ + +public : + + float operator () (const TwoOpt & __move, const Route & __route) ; + +} ; + +#endif diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/two_opt_init.cpp b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/two_opt_init.cpp new file mode 100644 index 000000000..bc464f6ad --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/two_opt_init.cpp @@ -0,0 +1,18 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "two_opt_init.cpp" + +// (c) OPAC Team, LIFL, 2003-2006 + +/* LICENCE TEXT + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include "two_opt_init.h" + +void TwoOptInit :: operator () (TwoOpt & __move, const Route & __route) +{ + __move.first = 0 ; + __move.second = 2 ; +} diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/two_opt_init.h b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/two_opt_init.h new file mode 100644 index 000000000..b8460f69e --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/two_opt_init.h @@ -0,0 +1,29 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "two_opt_init.h" + +// (c) OPAC Team, LIFL, 2003-2006 + +/* LICENCE TEXT + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef two_opt_init_h +#define two_opt_init_h + +#include + +#include "two_opt.h" + +/** It sets the first couple of edges */ +class TwoOptInit : public moMoveInit +{ + +public : + + void operator () (TwoOpt & __move, const Route & __route) ; + +} ; + +#endif diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/two_opt_next.cpp b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/two_opt_next.cpp new file mode 100644 index 000000000..d0b297f51 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/two_opt_next.cpp @@ -0,0 +1,32 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "two_opt_next.cpp" + +// (c) OPAC Team, LIFL, 2003-2006 + +/* LICENCE TEXT + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include "two_opt_next.h" +#include "graph.h" + +bool TwoOptNext :: operator () (TwoOpt & __move, const Route & __route) +{ + if (__move.first == Graph :: size () - 4 && __move.second == __move.first + 2) + { + return false ; + } + else + { + __move.second ++ ; + if (__move.second == Graph :: size () - 1) + { + __move.first ++ ; + __move.second = __move.first + 2 ; + } + + return true ; + } +} diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/two_opt_next.h b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/two_opt_next.h new file mode 100644 index 000000000..ac60bc3e6 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/two_opt_next.h @@ -0,0 +1,28 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "two_opt_next.h" + +// (c) OPAC Team, LIFL, 2003-2006 + +/* LICENCE TEXT + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef two_opt_next_h +#define two_opt_next_h + +#include +#include "two_opt.h" + +/** It updates a couple of edges */ +class TwoOptNext : public moNextMove +{ + +public : + + bool operator () (TwoOpt & __move, const Route & __route) ; + +} ; + +#endif diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/two_opt_rand.cpp b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/two_opt_rand.cpp new file mode 100644 index 000000000..7db7f6cb7 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/two_opt_rand.cpp @@ -0,0 +1,20 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "two_opt_rand.cpp" + +// (c) OPAC Team, LIFL, 2003-2006 + +/* LICENCE TEXT + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include "two_opt_rand.h" +#include "graph.h" +#include + +void TwoOptRand :: operator () (TwoOpt & __move) +{ + __move.first = rng.random (Graph :: size () - 3) ; + __move.second = __move.first + 2 + rng.random (Graph :: size () - __move.first - 3) ; +} diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/two_opt_rand.h b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/two_opt_rand.h new file mode 100644 index 000000000..600cf8b77 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/two_opt_rand.h @@ -0,0 +1,28 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "two_opt_rand.h" + +// (c) OPAC Team, LIFL, 2003-2006 + +/* LICENCE TEXT + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef two_opt_rand_h +#define two_opt_rand_h + +#include + +#include "two_opt.h" + +class TwoOptRand : public moRandMove +{ + +public : + + void operator () (TwoOpt & __move) ; + +} ; + +#endif diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/two_opt_tabu_list.cpp b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/two_opt_tabu_list.cpp new file mode 100644 index 000000000..f5492cde3 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/two_opt_tabu_list.cpp @@ -0,0 +1,58 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "two_opt_tabu_list.cpp" + +// (c) OPAC Team, LIFL, 2003-2006 + +/* LICENCE TEXT + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include "two_opt_tabu_list.h" +#include "graph.h" + +#define TABU_LENGTH 10 + +void TwoOptTabuList :: init () +{ + // Size (eventually) + tabu_span.resize (Graph :: size ()) ; + for (unsigned int i = 0 ; i < tabu_span.size () ; i ++) + { + tabu_span [i].resize (Graph :: size ()) ; + } + + // Clear + for (unsigned int i = 0 ; i < tabu_span.size () ; i ++) + { + for (unsigned int j = 0 ; j < tabu_span [i].size () ; j ++) + { + tabu_span [i] [j] = 0 ; + } + } +} + +bool TwoOptTabuList :: operator () (const TwoOpt & __move, const Route & __sol) +{ + return tabu_span [__move.first] [__move.second] > 0 ; +} + +void TwoOptTabuList :: add (const TwoOpt & __move, const Route & __sol) +{ + tabu_span [__move.first] [__move.second] = tabu_span [__move.second] [__move.first] = TABU_LENGTH ; +} + +void TwoOptTabuList :: update () +{ + for (unsigned int i = 0 ; i < tabu_span.size () ; i ++) + { + for (unsigned int j = 0 ; j < tabu_span [i].size () ; j ++) + { + if (tabu_span [i] [j] > 0) + { + tabu_span [i] [j] -- ; + } + } + } +} diff --git a/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/two_opt_tabu_list.h b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/two_opt_tabu_list.h new file mode 100644 index 000000000..29c6c8439 --- /dev/null +++ b/tags/paradiseo-1.0-04072007/paradiseo-mo/tutorial/examples/tsp/src/two_opt_tabu_list.h @@ -0,0 +1,38 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "two_opt_tabu_list.h" + +// (c) OPAC Team, LIFL, 2003-2006 + +/* LICENCE TEXT + + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef two_opt_tabu_list_h +#define two_opt_tabu_list_h + +#include +#include "two_opt.h" +#include "route.h" + +/** The table of tabu movements, i.e. forbidden edges */ +class TwoOptTabuList : public moTabuList +{ +public : + + bool operator () (const TwoOpt & __move, const Route & __sol) ; + + void add (const TwoOpt & __move, const Route & __sol) ; + + void update () ; + + void init () ; + +private : + + std :: vector > tabu_span ; + +} ; + +#endif

    z(Da~sN`8~*NpQ&-8uf;6#SJ^cfxYlg#M|!&)02%3F=b}*}qB5SX{zld!d39EZtB_e7T z^}VhRqp=3&_2E|-s`v0c4h@TOLi=>##Pk#p*ebL3? zlyW?ALtgRy^zl80@o3lwt&x`THN^?%k4_8*~Q-Pp_puzxiJ{JR1S6&jbt{?9P`447{r zYux5C*?*A@aY5z;Cfr_pQ+Ejloto_%jU^mWp`LjvG zE9O$$|Id+dm>kNan^7!vtR!!Q&u!tN+pH=|xFGj$hilRHR0HseP3--j2&`*V-WGsW zXvthYb1xhR3<)Lp9`pe(hfDeoCSyzE>XBUE_%*8%Ug<3lAk&;s{38DAjl76Xb&c!2 z(mQHL;x{8OpgSk$p5F(3#m~Q=(oFvMA$$AzSFkekFYUp9i%`FQx&IP`#va2Xn11o_ zUynjs`43t(^$GsJS&z*s2WHJRNf!Aiub8?9f95FI-V`n>x)xbRim8V12Ve*(x?Mg( zj#N(gM7dvX6);sh z)4{R3r^2+%nMTAK7{gJ{G%|J*)?FnhI8%A-6I5bJ+?htj_@%XyRn9azb}dbH&QuXA zoCH&YGmVLzhf*(D<4j{?E77k@TAisfHkxT^bEa`#3AIK34-bOfDa@A>pIpZp;Sa#< zU2^(Y^impSMddz$#ysfIN;I@wexQ2Lg2QpU--F0|N3%C#(6?gOVYx8qTsC<~FtPug z3DZ_*ipGvYn;UeVGv&qj!()TCIa9A#FZ9bn=Q~sH*h?s)K^HhvQS5H?j6t>>$r&1p z9f;%%y2!be#5z#WgD!Ta(ilGqFz8YaYB@uP#hzdcm$4@U(#AI$$s#FFuz(e#5YR zleYXK+Q7?&^kRWfJ?F<^Ip`friStoHb)ElvKKXvwn(8|r8KL0gTWo&<+l8a>Q;sa^_dNK6S^j2KnRjnjfit^o!AHV=ZAvhJ?|MT1kH{{)t_Y#g)oR{|{(~u_wY=9qk{E zc_Q|-vn!rSUlkY+W6Mo^)MAH)T|_q&4eOwoT26mGtYek(XGLRUUdnUvR(hL;aV%D@ zp^-KSgDPVGB39hFVIOXmqvF_q9wSTa z7hN5xPWB7&Pi&$pz&e$+T`T(%YMT8wA#%qq40Qt*5k_UYu!Y1@3$7@0Vo6YHiIcp>o{c593aZDx`4K@<6q@U%}>jUe*wbx6#8%L*Zd{ zxHxGYYR{!nmQxAU?*6A3Dr0Y_l4(Wg6+cP0h8b`hp5q2@D_UBk12OXA59pfutUwi-f}vscXR0{?1O_dyy6*pa+q?jQI~kaA=BvbTpqPjYL)-+MNE z?Cob}z=h3S2mcZXm$9Oq_~3?we-9f?|F92h;w}vP#&v)8<&IDf!Jx|B3x5@I8vAaV zLkagY{NqaD@Qh2ArI|r`CEVojOW5$=3AxdOSHhhS|G1HGdp6|ep5u0i-wb&m_Fl-% zo-5`SiGSNvxOGz=k`cP5S^NckG_r9|$+7!zYskkS)+<`fjTQg!q40Bq??iPAB~_Kh z+;j2kn1);ZT=eTMm3=U`WA;W>=9SgP+8~*g)v>EUSgL5RZ}!USohj-aOo6}1Jg##d zo19!DkIl{mj}O7)0C?WnscA{Qdh*kbM+`BC^RyTErHi_?}@%&jE92kkEj$?;w>_m=#< zXn%$8R-4X0H=F#(64-Z-a7pZ^(%^bJn^qC?=2db>%9cW9gCkbLPKsd4z5d*%@?XLv zP<9-ae+lfkM1aWl-{bOd}f>2bC~6Q!Mx{@f??uRwn*>lJY+&CKa&|E@W3 z{@9gZF}KqEzjcGnF*&Y`_^(3a2AhBLcsPE-B`%T%`G|V~hH4X5P8a=)cSITj9G| zBk2R10OrVUR_nV#B;`1+o+IskE5`Fn^goQ^K5_t7=r{S$=^dn3NFMqQZ7B5&+~!!Vcm*G|PCH_h)u2j3fT zRMKvS?23+oi#OmzIy{N8$(thwZ8J^2gf7eXhs!*E#gi???^DO%ikNu#8z?#eDX2vJXn#u3C|-j>?! zq#ZCn#Bv>9(VNy7%l!eDG9G>vZ~q#<4}G9eZ%NwK%Fb;-AL>uVs%rm6SqA%drBUu> zPl!H^e+Tn+F!xahKZdAEqaWhmNjor}aDzNLe&S)5WBjbh_w&&kXzlxlpMcwny?y#b zk|O!1qKozt7`*(wiDjy7u$mM^&+G;rc9Hon~(8 zDfF@fbycyi{|MU7pWv1X;A*-)3Q3}()Q`jEa*RGH*L&$2#lTZB%%2NcKFxL7vvfTj z^%s*;3L2v<5Y`mHrZFE)}!=p_5VGD7d6Q7w0AP@(Ef_#UlRz6f~v` zYmqjhSSZu(qL*q`(=q=05c0Bkd68cDE%b_2es4(Tffq|NwLso9`(=bPQDqgK{s{Ex zzzYkpi2r!g2B8!B=4F$A5Aqavxtd=1k2h^v(#t76HZ77~EY1AKn^u?fa)y5@EP_xh zM=sMB(8~+mAeubv`)Hs+RfP)LW&K8a?8Ia_=1zZHB<0bY?r+7yrDB_3Sn7GNSsUvA zG(B(c2kV@?pza5}6IhOUAZUnocw>MMS;~BmxjS%p8{v2Zh9w;y2|J|H23>a2%hTDt zxc)hyHRi8;mp9V9xJ2HbbbTjqO;)K3p#N{^WfRJ#;?LN?x2~pvV8#b@ zIuoT=@wT528SFjeF9^o+I%99h-_FMe{y#8ZhkaO8&9EPkurNOJpTV3O_F)Zc#zKZM zf{i?y^D^2V+md4OW~@s(?wxZJ=6trIV7QohE*b#2nITO+8!%xoqQPOcp&bjCq z;U{N2Ovi_3A(aVg_oZ5`er^3f&&+eqJ@+I8Z2Rr!_x~Qqea_6h z^UnUxJMYXnCnM%q2CiZEnj1M3LI?xIFG^_z11BAczy%S$V>~0Ug@K$`3XYCk2Qd%~ zEIXfpyJ6@SHb$~$lBE@wemgs5w|FE4sYrf#CW%w}TZT4JW}Xn?>w7b}zt6xW5Icph zyD1FMAa|#%%MkdyJPc7UjQj)n^PBBJ27FGQS456SWtoFGlJcd~7#L-byD_o{It`~k zwW%2-PHDYQaaW`<3r_yMM^KQ8UWA?%rU(|T(xWZR za<41Rqzx2pqeoV-HTuP*_GC`!k9>-4(S4zZ1``bw?RO;m%WM?w*U=Lw<27u|be5(o z{oJQ}DY`rQY&&+gsGNE&yHBG-Lq#>*NER$_g%_bP;daG9X~#EE=;J)vf_-DphML_l zx4rRNpR6!;&k-H43>51LpSCpi1p0PBbehRL*LL5}NOmF`x8OUmQ}*8hOQ*Cq#I_|{ z85`WKJvXQHP@m$&*vrt3+oeYjr?i1&6Hw&^m&B%Y-$8o0w#u*cX>W;bn$j62a zVij(2@0+osSb@s_+KW)|V(fxFI*Z_x4u=@F+5c;7n7bp|KrdlzUcB5X5NgzXBpUc76Sj-DAL`eM*2o#&Gc?poV3lgwx7l&dOV+=-cFexhReiAP&d-Ic4|AWNUtDeVh8u1UEt zJNn%0OtL@*CzI@NkZA=QyZ#BXA;>LID=R&+!hX@8pBwZW{{;% z>y+N^ll`RYBhaLRWPuF6Lb3@Z$l$NL-Z~_cERew-qeWIYIC@&BxPGF_V39{#@O;;I z_sC@F(>kTc_+;;Q?S&@YK?YAES??am;8$HAIV6)Tkii>0vcf~7d@o3lo1dsM_>4ze z&?jp#q*#ZvPO16o6H_iMkIulb2$BVA@IaU>+*urZW3tv`tOUsd8Jz2p6)uSWIMg2D z47Pc+1@p6N(Yu2zeOioqkF2mEx(HslVt0; z-Z(X@9|k+tNuDIo+`A`ajiD%9AH5cXGDzWzD$&mHY0r+nI-xV#U>+L$SXV?BAwR(s zSa7HG0-xf>=mNA&kRqK2Lp#If^{(j1^3LdN@tr)@UViMi;Gf4D%8%LKz9?vM%>FX4 z*!YhhjHz`m1obF5zi$?5tKfT#56f5IJ-fnnfpx|D#v!r`zR#x=a4y#w|IRpU|Cnf( z^!xdVNV^r{s2qy}~hm*O`$2!LSKWG3<7*D7d%4tmSB0 zbDatA(Er+D@PF_Lhy}No{JWARzlU4!Xcngq>u>9@wW>O7eCSK2;;-_H)%dTf&3A%gX zkKM^Eg|cXDBP9=MyXE38A9K-I1V;m0iwn_7yda$@hGEmajhyKFx2T^(;;P%&J7fDOxqh z_nF+iqz`g2`5e?r(E%E*iL$59x@6z7>7`iRIcFzZud9PjXhcMiVYTQ*A2MsGtpfjtX7FO!IIll-R~Sf;0iB*G3;g<#eviB7N2B$28p4wB#)6~ zO&0RxCoFEgY%ScSnV<%ENl=Nb)ZHt2T&)MiSCTg!ijNz1+ zkDQG~?G(K|eYiL3OqeZU$wEfn4?#tr919k9SOy46SCQZw_L5xpd~^!DnFAJaQ$4fY zPcZt5_Hpwt&P*2PTtRA6yN9AZZ2ji44V}5}J{a~zQ{114$tmrm(@*q@Z(S7DThv|}hw5#Yr_uWDMqg_*v2fb~ON8F#F zZy_6G;pRSqUuWJ0yhr~kdW^*mgdBOj7xENroF)Kc{5Z_LMbEff&<#0`-CpM7Zp_>; zkYoP?zj?gPH@9P3P<1R_ZqWd*4_qtGo#^B@r@{T9OB$TUk4}ywUeQM?O?Gs0 zHWh4+X~KA|_lB0uK(Y{mJrE_i-9?!FW7dYnD;3l{>}r}_bO?xMfDdq5@KVpE*@ESlcs zrwNPx$K~TRs6{jMov9x)@_PQ>%g{Q(%-4d^+e{P6DS zaCQoX&+@~2q{G=B&YWconv8x}w7Vaqu{q~tKUz;e%p~hfHQ&NB!?st1-)GOrl{4jT z#_W$lRMb1N0-cDX%_DK9zRu9QG20dOkKBZ+^+IxQWRXlKpPI$$x<3M%fsxgDVVVmO z>P#I#4*j7-6V?uRqT zRv-E%9r>{n@S7LGSQ^a6B!l_RU}lAX^FeSq3Fu!OyN=CUP|xLGvWQ~w0G|9$ceMx8ivi;3t{Gru$S&R^gd=b zyv-3{&-)sBUyD{AaDJMTv)`TcZWse^ov5>!f12L=Vd@=lX^{F|dOwB%KVVzXn-6cg zwaC3oK~HUs1rMvjF}Xbt}N znrNlX3@jauz)K^ukaMe$DR2t|*TA>im64+lcAO^|M+uhRB2ZiD`o5&Z){@YcvjkizYw@4?ifQAGbm`s3X^Sbc)Gd!;TJFE3Hv*X@HQ4OD|E?B#FFq%7ar^w zw&y}b>OLBCk~@x%n7fB8D~{1`{BQ8H89v!V%K9GD4GW}lD(2{YeP^TR4w-3Pv3}Pu z)fJc$hs<+(F_P;XYTXOu&V3NR=7*(kfTK9}IDYfUVm!~-T(u{n;mFD-jJ|CO5}oSy z>WcvAtvOJxtzW79au49Z?>CSE-jNkU>?xLI46#R6wxM4!1-I8B{I!n>m(=?NbMGIB zrDcGCd38#*kiZ^UnTqUK4kit|L^6l;Cfr0Sdt~JUQ^A&k)LN%KN(y^qr6)##)q_k< zoC)tU%pO@eog={(*gmjra^W3WxdR<97|L2?)#aO7EY|%~$aryVAkxm`Egn0>?RY)} zavs}tP(@FAqy5}|i{a@XVj%^pnU7>xzZ$of@w3mKrw_3hPp|jjAx1-EKQIGRB5r!*%<0QTP|or6Mye%$U;=!HZBBeEh)C%6dW^qL$tQkT&Ec41ImNiW zp0Z)P5okBfS@yRm9uf$I^&7;n2M$Kq3h}a;?l;X3Xz~JBV+yTg=qQNtoYe~Tdd`Uq znU#%@4R7Un?QSw@8+5`|B;Z%5b54E@W+2ZTIUC@@gnP#FU*u*KwOs*-87 zrTKo~u*fgFW<7r0;w`6jF}?+#}Cg@;bU* zpsVNd-p-h1{Xk%-a?XqFPw6A(h9o`aN=is~ViveH-G)4bxj7|EeS+iITfzh;O{Z)F zskr@>^QTBp^g1s&$^obBLWc50O3wR{w~&@Xoulqxz{6;%tnGUbFdZT+6sEpT5*cCbU`Bx!cQDAX<~e#W6lmn8&Kkj}79j z_2uu_FHx_YD1t4`(Q8_|hRpnR6iLz2>wQnQwDHXS20>2gB@9tZw~qGYM-IyEI;Fp0 zpjtXU*b@;7G#@fnOJBJ=O2Igmw^M4qYHR|pjnpErfSi=DZRuXjnOged{X)^l_<^@Z zMj^0$^rJ|jmcAN`S1WK$*3<^;NTHVg8EiCx{E6aHQmCbecJ)#T^5FZtyq3Nn5~e+m zmr0?Pz6@&)o6`UfzokD!hi9F;y=(=dVM$yZ>w=2QWBbAW$y@8o--_W7u5V#R>lx|8 z^-fQ^(aLU5E;(Q|bbD?wK0Vxpe7x2rEwrCKD*(BD@arsG74~;Z&ZgHNAvxUL$6^-W zm(E@XGLEzORytnAlF{uwm^Oh(&xj4TJO`8K;@3#DiKF1)?#MTYqCuh&AnH;NIX83@ zrMI(qFJ#jFWPkh&`)r7zj|CFV9ZmWbm`;YC#n)CjN4wp)dNU*{jHjemu)L+i(D!@v zH8oO#xU7+dl}zJsa(8?E37&55>-a_a!~S6Z7^XXyb?MRi>{-fl(G_Cd#~h3mXixqa z_P-`ILlEU=c)Gbi$FH;S$*{k3%t!PpgTU@S&SiELL1}!)R9yGT<~0VWxBx{iD~{cO zB`=Qc4_6*<^UZB>j7#a_*s~^(uTrXDIe!bKKNf2=mBAm=J-%bQ2Wlk+3iqBUe%xLk z@;>)7{5lKI2>Uz7TuZOBK^j}-vQ`yA*z?)_jC| z`jA}_S!XpD$KFBgJl^KV7^^t;6+L)cNFx9`5uTMs|HnPH#o(PEV_}M82f`Hd%4(PWa{VHa|w9;@A`P;BCISJ@zx)Mo}%Xks|-RCK$!dH8km*kXBXuw$pdJq_ethFL1Q-P|%m#q#Do zL|*l9Pe+b=^tDuUySXb375hpahs3d4;JyY_-N#rey4~FK3>7Omk3G9`JKTRl?kx>n zu9HV=K;`dnPZLHUWXW^TlgtjHQ~3^pY4r#M=h6>PqA>Pui|}S&+}L2c+(7I+F3IDg z>3cgg-ocf8FfD2<*GuE^7I`?83qZj&e}D_ZtDHeK3~}Ft##%TezuASxUOxs(8G?>2_A+X+ugiDvvXI<%e){ zWob$2a;u#@Du|VP9|bW3`DugbB9|r_^!9-RWYh-oXb`L%4G(H+0a~YWE<6u_#Egbt ziC5Wz5WX`nTC*w&3+?x)Le%hyL3>;6RGtS4Y6+GhU49Y14~LUS{UDE1RprfabB42| zbfFV)`l@^k_taEv2wf~3R}YnM!9ndcBdFNSZIydMy}xZwgw>u3Nr5-W(4+RXDdxU6 z?yJFt49rjE82IoVf6>6}@}^*Q=2RYq5WeNlD<%~q6_d9p<_Vyn(aUDTbYRnkvX`(* z>}E*ibs(Zu!xDK7--2~Bi9p|kTkr$JV;=$S-?Gs6=UZyip#puk^3Nc+9nk{JoXV`D z@iOLgMt_=a4|AJKt5IDwO0*vcsW;l#rca=l@Z@_5qqS^Jy?d~h&FS5Lr^vsre-G1N z^k?of16V`fMO41EP*Lqm32ju}o2d5QMjfZ9KSESm0&Q04LbKDxSNTWW(*kHi0+qVV zl{xS)23h}n0|sfIR++a)T;F~gUG4eAD%R%SWgX?%IWasn-$g0 zKTWr@x%I2>*lG|?N6(D(i5O{1x0|~RzfK-!^*pLWl^4Oy*DywnAc!7IH*Tw)=&_gM zcG)%*AXm2o6NL%A)tnPmdKvUxp%r{Is*Uice^zm}Qsh@9s*&6fs3p{JYAborr` zcOaBgsAX*?ognK!BA5(#k@czgYqSuy{C>Eo3BQ6EdmzTGUM$nAz_{&HCV4RFOe|_{ zl|7e0D6@0f!D`>vX-Ayy&4{!2^@!m_BM}bPdJGaL8a4Nj?O^kKf1izge%7+lyAh+evRYM0>x{9>p1)p>>5fXBRg{<7)~b+rOAmh za|)bml^ycF^5RfY;`YSil!dSKZS&W~i6YyiM6P5y4`uf%}$Vs-#M~aWz zHW2rFxa@EDp)mEgKx$|8GObZxPP$xkzy4;#=71rSW%xt<#QAV< zkoX*)P#6A!01g#~gK6S^+$Zk9&qkL+VgQ^>ApWxUbHn}S#NSujnm8QnvJU8^ zCYFO>2Q_gfgF2~+>lnV1ns^vAJE)1b8PrKl@GE;6HIZON=sMY@*253$W$o{7pdR`c zgnWv>tf6k=Qg)@S{5c&zjZ|dcQ*h2{iPa2P$senQV5&EI)U+D3J{E0uCN@j9;7q&* z!3W`w7iZ#cka){Tcwnw-FNdohZvkPEAfjJzrf zGV=V=jGDIu_^=+cVj(`@Yw9t`$MXyD=~JJsnu8FfhkG z^Ttr%RL+LyC(u2trtL$pRe3AfxZ46G!~>YCewAX>c^;m~PLGyqlP2HbEr zER%jM_r4gk`Z`0%MVcLpPr}W8=s+d{-K+8=1ar6E1{?h-5WKuw1GFqmxjbs$6~i=+ zDmK%$(JeQ_)p{eCyS+)c9nMqSulvH?k9$3l^Om0Ku5jFZNCCoaJ42Fm$q;5;9HIhB!avo0tK(uC0 zL#vmR;A=%^xGVRBygrcUid-jlrn~P{XwT>EhT-kHXSz3xgX_E2g>O6cMYPU|&T`)_ zhq;*R7T3+|eW2s){8jy%-A}r~=tx0Ys1XA zOJl#sf-o~~RctS;aD6`$w>EYcgs?OSUU=hET6hkf+s z2DH}|r~w!6xI6$7^uP1mM(_4dS`6kB6nvJ;JZ}OE&e3oOpRhOyZX6r8{{Jr=C(oM< zsj$V}irO2FCxy`Mx+hGZI>)W8t8s=$-6ybKuzry(?&p0$*VX;R_luq5F0Whb4DaUt zeQ%F0dy9K9=7Qn7yL)2QX5;qU;{J6K{PuEJWA$eJ^3QRbYf{eez1>+OJijSh+{KX8 z!~3~gF>zSBjpw=}(X7Mwb2s~Ou`}dmcZFxZ`^N&0(21PuenQHD?!gm%&)B){ode-{ zusdmx@0oqBo1*6sxBpzekQ6`z=yE$8BhGhOc(_$Dsd%;hBv} zZbK!nbIT!rtY6POe);Ddx2CPt8GepC1l8g;nG9@o|ABlK7d=>pxy}e2Sb1E|oyDU! zqD|!&+3MzFm0CRJpo4tB*jD#ch@axIC!o=A9yPse?P>v{HAPmU&(`C$(QH|)-TqhJPs*UJYhP1tyiR+uN5ht*z6~OeB8#o z9oh#SQoMRhx&@Upu3y*V&Pc0ox^eq=Ek-WnvkM2WCtZ)uHqPCBVv#5CJfA}Ynv0NU8_VHw+lcdajIH-SyYI%? z09D8Zr#rGO**Y@OP(5;4P0h%LqH$w~x7O7zuSyM1G&HrX9XWbL!HB|+nQ?7I&eZ>)iuv+#RnRzsuK){M?-Tm)mm58 z=s?D=t}}$Gni|Gzs#^nIiRPLr8ylU8>>E;bt?~g8eH2Z}&8uroHY8JZO(~l|WAmKm z)l3XS4PB_Fxv9Qk8JrL`6RX=A5~<-0O&ER%#J3@9p?M-BxJ53P@z&mf9zEI;;6B?@ zH#A#{+JYL-{AHY`I!4|4PU)D2N z|Ele_riP}5R6|vw;kde5ONExQ=_ca!Z0v^SCL6$HTB;gYTEs?E*RQE1Wh-PqbAk(= z@pNxN!!|b5#Md;pk~NyBu6dE|6sEHz8X7tD!2wY~=Qj?xXZWZK+1iWOB&w20(;A># zmRjCA9PM1ymSD+|MhkrEs%ir*X89tsHshw^yj&uJ*w$Co)Oi&J-58x2E63g3iLpqu zTYW4VecZ_&F(KwgZ#{8hbl+#|V_l>BXXnFR6B+D&dNQ2*ojeiFr4OejMTYh|D!Q&d zH7WbbqoR%V7sPU+6B#xwduA*<`UDukaodT{!vFqQJ?`&3exkXjzrDXFcEy=++Y@UcXO!MS4O=$6{VF3fzg2 zJ=*znr%xA;W`swR;bUmBJet3|ZuWsl^Meg1$Fiaqx?7i_Vy;IWWksLcFwxwP!2OFG zvag5^Ta0{v8GQrpSB_8J`YS|xV8hA32GKL_vvAyCB0S@=O77f%s*FbOcOOQazeUJt z^ZJSAo>kBLtWQwF=QoT1HAB0ha_cB|Ie07Pg znHcMi28?tKh512SBaw`n`PgwMMyF1UPF5Vh5)okh6(NFjpg=j%-X@*C6JxP8=qq)K z*2Bw29|Xsu`%H}Wh}O3c^MiKEmAOQ68}YYr)0>;ivLB*wahAOE^*7&qgPXvW5q{sd zr$1%dz}RQ+T;_AM?w8=U!nvd*J}2JLl&ot_#jD!ZGC!xhKX_By-#52qZ(8!%ruAQM zUKE?KC_6R%wBM(?Y(DJkO_8$?i*1@7+g#Rj^PC==`<{K+*F(#CY??hVcFHSXA9C-e zX#=x2kf4%AbCHK{D-Sp(puJ`;sawvi)?{Vrjafw%rBqdv)H?SeTEwAh zm(R~&y*j|#OQWD5phP(ZMZSi07?duPV*8(pRKe)BrmEI;{si4YLhYmdulrCOqWQjY z9ruLn9x>RqV9N@m%FZ}-_w3UmhwauS=uZoINB&r?b?E zpRGZEL)Ob6 z+zg+Bzis$qoo9rj;u*daf3M(=^&So%2)~W^I$VeKv8cxlePX`#c*SBc5;Xvx(cxeVUf;tBhYN zM*N|@&nCWX?$fld!2PQ6OT~z<+xu)H5B=~$mj-oc;i_+4x?oEI6dMP7`+7+_{*n$UUk0pGE= z%K+=_t;hLNINvi~998B@m`dR7W6h59gJaOUjUrf5(%fQANBte1l+4hZN=i0lxE&sr z%T4)eEqRBZw;75DJ^w#D^hbO^c8Y(HV>!^us zP05C3O?9>Th%+qTg!nd^jKE3xlfsKGo*W6Po;Js6O_WDRIt%Ba59+8BJ>_>|eWJMv z*$8H8(x74atD75YkveL0;dF;*LB4$~9^LRNXoD2_ui**{i$Dh*D%~r zx1l_r?Rf(KQ~sxe*Eall)4&gLPx)_)en8qJ0e0s?_HF|6v8X;$Mx9~{4K@bV*F7sdsm{lX<5Gc zfoyW($IPurjkT82(KJ|>IcA%tVRc=cA}oVoOuW3YB~dUsUJ-AojW^aMlU2*=l4TCg z<2MwT-$G|uqcMLs#gla{@#=N)WDCr%PGfa4)x4%AY1kzTiol_!xn*6PHuhxMyqbBl zYAOoi8HrU@l+B-2VfzmoApUDe9E+OpL)x5e1GN}v#BD^{$i zahBDktTEqIVNj$}D0`bG+T3c`kB`TfHMPZS)~+om#uF;dt&LUb4U+PCH5JLS zmIO-M;MkfqhHQrwlsQ-6+qy0F4cKuotyVB9ZSWprW+#-}6sDl4zM-i$UfPwG@>gMJ|Rib5i zmHI^r1+d#RhPgME3W|_!dJE6%_U#901(NfMm^mCrS69`nv=L|RLT9h7^Aa(`t{Ba^ zthK6|)m2qqQ&v%ElGz1DEwlYmgZ(M)QKC1*`R*1w5XQ8!iOL{djIiK1Hy(CC#7(uE zu@n+7qmyf@TFT~2Bq3UOL>Z2$#&~0G6?+~>cWqsD+cNy37fh?e@Ndo>ycj4!VKIq< zgk8Vm3LRHd1-Z$-ZW@{UZOJ%KVl-lt)TvL_)vbguh#%M7guX%%9%yy1-=NjeaZ-kW zC2vK&fE}c869$cwT;9BfeT;+2ON}v%vZ#&+X|j`6n6;vvZ1!Xs5=u3*`v#_%F{ay( zM=~{WcJwj|&9rJ;TgRb_fnHmO?c>IVCT1T(-4mqk(i&6W+T4_4CC!O9wz2h%n1hN8 z)tsBsOub`^ZNXTx3EJH1ix9A(j9i0RDq|Of1xSv?-X!KjBTGY7UQkd~yP_?bGL@!U zXM5o=jfvW@7IW1GJI6X$+OWGY1=9Z zR4)hF98YZ2IjfURl20vdnjys%3I#L)2nc2h9dS%uV~gq75UlZ#o*yOUAC8N3YB0p?p%x$Dq!wed9#spZ)F#<2s- z4C0q+kGAv6R@6w|wV$Cfs$j@4Q##w086oZF(u~S7Gb#>gp{Z)1hplU@ZcaG$YZ_|n z9LSS;{xtB%Q-KN!)AJdW28zshs-`|ZN}Ge3Nt-xGAS5_ssUh&@O=+29*}H0MG11r8u?S`;#Ca?Li*7SE)Xn|rdzV_N#!2Et z1foJb)ikzrlrqJWkyD;zz=$dt{Kn=o#dKiO;rH@&R@W_SXtE*-1G~7Uxe*7us3@~dQ_IoFQZ`x5pvZ`^ zlQGr7#M0PU1{L|3owakvF;`oKx>JodIDS0M_Fo!z!}9+-=}2b|R;;Id{C6@C)@sZg zunTR}q2AE4OU=83sH+{UFpbvl)HW>R`J)ZC=`_SM2jy4@Bgg@CRU7QDH#J|;3IIFdowKHX4le4O=8A5}LlWH$|VBKc2ilihU zJ)vS`qER5`P@Tov0uxDdE0)_}MJ*SrBR_9&H8;hpKvqk|6Gz499z~`Yb0M*AG*{|3 zoWQBUHaAfeLLyZsS%Wn=SJq^Ob6Tk!Ti0A~vQK(=VaVWA3 z<(qrkp@m&-`-NSc(?)yo%Xt~H`oG(^t;$nfMa9Z%Iw&A*ji%)b3cRLAOF-{xj4y9y zWpHU)U(?(MjFfp`Vw`6i$1=(Y?RL7mw;(ay$DdGlCftpx zg%u+Dam8q?6X$R^w5IT^af9iQMlbC^`SsTLJL7LBOit8j(REzjg?1cFUCUw?P*q?; zNE=e1)6A`i+rdg1*9SR*ZPM5v z>sza8;+hK};*u>*)+%HzEm$KO6JBj|8%{af%x4Utssx65nX@5iGtuc>R=;O}vW6U1 zN~)lP(OWaSdXztUAN7AVu< z)?M1N@rQL_!B~XnZfpajb=hDi+L4`-#u=!Tw2ahyT4bCiFk6;nL9tmx1T{%(eqk43 zwNa!cY5Yh+=cIMZw^BK@@vUlWfH7)r)m%u)mQ?GAjJ>^#!^6;@k3f}REwG~@U&Q%n zwUbCxVQTZ2r=C(!5nq)dEB&MVCA2YyUv!< zc0HF~JIMm-G}blNEVt8XXe~6}^f%gmIJu;kLq^Wo-or(UEl`uUXT-!MEi#Z#E!lF&1fH14axX}qH@L79XGS<{Mx|F%WaqTyTGmH%T} zI3{q}MbOt+nq=LoIILa*My+&rEz_da;i7)cdv5X}4r=Wa3$G~1^R-dL$8>?DZ)*0Ok)raYo?P?U_BrL3a zh{ZANFhZ$*!P*R}1udTOin}y4`(PWyZUmUJW)8tBvl}%kj_JTk0VD5&J1{j(sa7ax z22dB!!(nCMGaY7X&=iKrt3ulmv_g2B7g+bKN;X4_F|<3FM$$?ka*MgZ*^n{Oqn0QM zU;(9N0|s6;5`0#A*1(R`@1hKuYbS*C6kbTh7FpWK2)Ur$IX4UF_`S6{BO<0S3FIH)kHvyek;U|ar{;>cL+GK}~CmTACSvde%2sjvou z-`MqoJq61PW*W~IC1Lu)sNtL|MY>%})`hAxK9zkTz8to`R>zDl99&6@XO3D=?SZ-k zGgN(J%II50a@)n8V|O9bI++tMTZ_@1TGJeFZb^;cb7jo%x7Q!2S;F!Jv4qZ=xk8Dj zs+LjlPU7idFo&!d$%tX$853I<{f|HfN zU6tB~Ry%t^zF-$(EjMzxofvEyY5m;9hN@Z93X9tZ8cV@r6&PgM-=fF;IQC_(eYpaWwb!?}6l+TZWeu3e z9kY#KdzfciupKA4vY~~0H2+fHqxy>N#c%smY9k(0ZR4}6RS7&3T7~X|hgeg|7W1g8 z>8Rlam0d4aVNcg9xtX)P?XXO1RKPTD*8hRkK@$5^=!r(h);6W?4MH^gDU@|X*WHly!PC;wyTVd3ILJticDMFvX zNXQ%qM#7Xi^ZA&euNxU{o~Cj9nGHRR-_}%y{3VxvWlk#h)Ut{s2cO+Aq#>ij3NbBc zv;uAY;dlUqwb|A5_e?ri?%2I%f4CH*SDT$YMm3sd5=#9)}`XSBqGUUHyy8Z8@ zLlNu`S@c+|5TlkTF1RT7wMn}srvAnT0cl`I!KmZjt|dbQ9Ux@!SW#AtjU#l$B-$Ho zOHpo(Gg_-_WjW73ts@yugIZvKgscJfAcZ}uVD=I)N^4fG!BLRTkI4k*qkl_t_%CiM zc-D#F0Eem9Oh*B~Vl@bsoVLPEyJbB2R4nxaW#TD8|@^30uxv@KI7w<#&o$JEm2U_v7)B%*7uV5zkybf`OHn}K553{H$m z6w{7ch*_8jRM5=h37#Fnw?)%-%GJNOIRAO_oZtW> z<2L1M%5Vy94Q$3upoIOooHiA#iPo62X2HA^!LV7j)*eYk-%YO}JF*~TG#-;qn$vSQ z@JL7d%{ibvQ)2>$sD-^A2kyBsubY9GuBH=LL7Eh=2> z*=}05$}G^?i(0h+O3wsEQ1!~zu65!~e3=Z783(m{8Ps?T$LN%ub_jDuIke|uwMK7P z@9NBG4}kfzyitdxTt9cQXa}WT9mEYR0FAG`f9yd#jLKkwo;fWn(a9_ zJNCT#X)j%&jigVBa-qxjqk*GL^&IL(4>mgsW(j0%n%?LP962yMLcYww33qe!sH~<& z3+o-7@-@xpulwiORZmcj?r5&2%Ho-`v5vvo@mrn|=W(}uiZ@U7MW^#$3G*+W(!+`Z zvj&Y(Ms%fnASxBAsP{4=!(D2iPcz2s1fUaA0@@umDhoTX8^b(8eFUczarV=m=h)!$ zCy!mJKcm}tXU>NXwV4hcA~6R)^{yMgJ(+NN-*qS?k~#Q6^Db%=vkEo?gGy3nRg9x% z&hZV4w2pYC?SE$6ulDxuywPBagAtP{CVl%G2@C!GwLz8`np8v+tS{wz!x)jDaofZz- zE4T`yF@XyN3|vkxW&_+T8S{;2P?6i=V?m9+$tqZbp*~s@w0G3_)qv+7jgX@fW315g z!j{+3RGUJ}Vk1U0YZiM`w(0q^q(R&B_P+SU+-@}Yw4oanLGzm3pR?Lmd&79fu=37z z`Ab#Q5H{SCT;0>+XUyqo{5+YXdXj(;f98Jp~A zPdkp0SgNQH8jKDvn$ucbCS#4@8>5toP~~;7PQ@Y8jO}EkjFWM+0zgXmo!Hb%dS|;> zhBT`OwqN{Wk2<{gwSqCE9QltQ?R?H=WqYUh{4)pk3{FKW%u|if_A!Uj&TSVT=DmuZuBo~XJS`{D;%m+0t)UkUhg@N!&>RQG z&b_ysz>({EDGtaM9+pj^33%eGiOLT9Q(yphGJRo&3O}u>$=og>%yj)9SV1_}T8h-T z@X9zxp;bfX!85zO?C9u*QxApCJIa?VpcTsObm|leOp6>j@HG#!nr@g3JP}fZ4e<2X z<8Cq@`t^HlM^D`bg^#zUvb{3Hp11R7gZ_)#30!ttdlw9ffg{x1bT+5wdC-(6LCoWS zuxiox7Cc0c9u(+6yDAs;cxd{u9q()_n}o)8|J0W~{>of>?@VP&N#Uu%v)LK1dt+F~ z4;6xx@)XL6eG-8MhZUA5ulSUYIa*L(pTGk_W>9$NX!YE=6wp@3{7gG3EGrIMt;;+BaV1AnFHI#_!n=*?h4w-Ptk02q}!G?95`y= zi$O>iubYNe!RftVJu1Gl?r4vZn;qkLhuggW#|C-$IUudr>;zmBUtIvUA?Vzr`mSHE{+SbL)1_Tlg- zF|q^;f1bfGP;X(S1v3E~V+yCVWWZb%lt5+PP@q^LDVzGvk;el`4Wg)@)m{<2Q5cU>Rk`r9a?|hM6|X_4f@xLu?&T z%yE0dzGf#)2oqp@tx-64sB{M_^xt|6ogLkKaf+Y6L;1X6qInI@sMe?IxV4{LqvO*R z@z#cA%V|0@@1S>#Aqd3|^r3c&N3my%nP-F)bSu5Z0}6h?exH6SNnONlvto6`9bmf& zhv#YacqnN&Rb)KcjJG*tytV>T(|gVU1?7~|0u|4&_k@G2GyXxycoNUS*jHe{%z=mc zGL-j8tO{E*rh8~0;}DBISAcWqRA5Ye$DUQl5YR^9V0Nxc2QEd@IVxLN#O8ts4w};4(NhrkYQAH@Mtp9 zk3-^f>;!TV8tX84`(qteDZTDzn^X`e7hXyI3=_ z;Nu}0tC-lGcfD0=Zd;?3624|R#>l-g(^Wfq1r-mSrs(93xQHA+~=i~L9hgYSn|L}ssL-0hSPM_G(9}>y__7b*YXUsn0u&J}-@$xuo zHM}v>-e%`LHpLurDrR}@Q+(*|HZdI~mG#S>(S*=~#t@FFJ$`n|30dHUxF9Z@bEj4NjZ-adqP9sn^W4KDZYTI&)caFzp~*`nU$ zjHpf~ackbCR#jb%!zRuMl2{+S0kApf#<$4oteXdE5z*r|0<|Cdoe zpK$0PenxOO_JZY2*c|bNL$T?BN8klwI0qffhUjE#%v^|#Xl-V#u-Xbn6l6rBaVxX2 z{&jOmFgu~wICN0zjPGJh3m1C_hSBzXIyRuT=ckHk&!FRveC#q^yNr7YnE-tCE?&2` zrmh9!)jU9I>PXEIKW4!qQKL<46Tz<{?S~$l_AlR|zdb`6{!B?Isq)}gNy1?T8Lg3- zn_c7HaXVyi%FIBzyzLUtEOy3o02vH-m}ZDU=%Xp&!gKd5^ZCK{pGyg}L&c6W6p|Gg znccNiGIGAC^O{){&PZnDjypE;lu5R0mAI&V(ZI%vQ)m^9lAm?UsbhF98;o-WHc{(r zX{)v`Z!j6Let5bXPq<0&S})JXx*)ln5zq`9xuY`zr!?wDVA2?lNfJ+Dk1&fd@5RKs zfPK5#j{tb2qjAFzB%FpnybavE*_&_o4%1D9pGUX66S`>ux`s~Z_}*@hAHK=E!*uz* z29K_#6FR(7-lt1-LWei2`*dqMp-TklPUwV=X?giu-w7Rgcyt>&p*uA|cVZ`WTLN?^ zbwc;O0Nu%*&|MawJEar4s{?fGGco;z`^yahx|&Ytej1?L)Ct|40lG6gp}Rjox49F# z#{+b%%N>>DnE>6{ozT4$pgXq{x;FxJTRWk9KS1~0PUt=h(4F52-PZv+_K6*pH-`6| zd;OFjM%fWvj{x2GJE6-B&|TOG9pA_9rF&5)bOQr)7k5H8EI@ZjCv^NehnMc9ozP7T z(5>i%j_;87_+8!!-RuC}6`jy62+-9B=<;xnAb!=;TzpTx_bmo`@LLMJ_QhW}b7y~s z;p-{vcO1Ke@W=LLehRyhhJ>GFP;RCeZ<%Qwf&>8%4 z(QqyBBfsJJ^Y~Tco^ibL?stj}gO|Cy^74B_!Tg;HeqKNDzQaW~z6oyld2N*se%`k( z$gn4Wa5dmB$ZreyF^u`+cQ3sBor8Pk&*L`*{Jd{)z}x3{7Vd-mE(_$Z2w@(-pWr^o zZ{7~_w>`w~>OlU+1o-_n#II!s`Fk|P@27$M6$kiz5aPEH{Bq#uU0(gY1CL;N?+ox8 zk1(&id!w+y@^0M$KYoBH$nX9DzX<_;%^ga$Fta_sXdq_p5Coem%<4{fc}&e)os?F~N@d)o()l_5(k! z-*aqx{N4!h>j{1x_4`*s{00W{H!Z-gMFA$~18C~tX)--1ASX9oDSh4^jVL3vk&_|*o=J3GMd z@({mm;CB$hy~``_#UXx)K>p@}*ema?;s-F-1EKt(SEpKsQ=pgnZrKkMLl- zoq%)~BMjuuk@)k{eJR8*_jEfyiH+l>`&o!CA9RB~B4EDmKMtk)4ALbX(_Mf+FWnwd z+y5e<=XE&v^{}_*mvp?cK^H8?*Wl;%7k&uO<5v{ow;)swkKf1;zuf8R@yq)0_#F}A zckB-GH!H+%AozLt!w1EDek(%!mV;j(gnO4)&*z2cHi9nSBLaH&XNS_Ah;$jodR~G* zuN*%O@!J+EhnMc-A-Wqtw+Hxmmq+(ri0)3%QC@kMSI>V57Vkhj+l z?gzh)>Sb7n?xh{1I~a7q{*nl!TN_Asc8K2_JK%SCh~EhTe)R!gO2^ryS%n}4RpbJ*@AL-<8md45p3GA zOP9>{SPFi*9y8I<>4GlE@2B9G4}bPQ>S!Ln0U>^Ccfc<%#P68^zvckHnIV2#cffCY zh~H-ceyalfR)zRo2Y$i!@anHI#4mS7dYmT%{LT|Uc$w>$;K#YvyI3#0&JOV#27Xh} zNlrsp8~(id`+@j*EbiarI1iJ7E|1?8A$|!cKI1?`erxdO@w-|46y4bZ#dah7yvysS zH-z|IO+~7!<+l#R9>2Ro{CaG4oE9&$p!4|sD$H+gTF=1}!{_&Oh~Ej{wO@J-=kIqR zem8*MS`eLvKhKWDwtFkYFNQ__#t!oLT8Q7kBe2ec3?o0!jzoT+iQg#P^Ewra{IdD> zp1&+F|Go*O`^aA$X9Nj!dG*4N7kl>%`T}&p%M05Rp2&`WkuDE$z00E`28!p5in`9n z7^o04PBs46ZtUM2yFq^WySYwI2mC;mae3*`Gv<8qO)xNOR>WzaXoiNs^bSb};x6h8 z3AwovOI=jKS5q~U0q+NPk*`=?j`RZ`c&6QR9iaNz6hiuEk@JD`&70hzF z$ZtJxEB-o8k1L_{6?M3hNncUt(6j@0QM2MmdqtfoX@?1CF49-jnU;3oF6vAVxepJy zsqv<-XvWta8J`+w`iiE%w`@G4Ml%eCSEL=diy93s?G?@Z6fwfR+OsrKhZ<1&iaN)p z9k`1cO(pFWb>eA<311p=SB2a)A$M)a&DKj_QD=GDfxD=&5~RJN&Wg0dgmY$0Ur{r& z1>KyP(pS{s%#yyM4rhk+6*ZDQ=%!>&Ur~pWHGM@LO2+gRHIgmpresQAQRk$z19ws9 zl#u)6kUKb0xcV5VyA9D8(xepAv2ZY=ML+*o|Cix5k?gja|L2j-| z`$L|bB{zY!f2G{4=>uVj`?=f<>yPpBsN4klJta4F=>s9p-&pZ%csow(kHr!9fAIp1ni2kOKn|2#sHvR;& z&Uppyk@#c$eF8&{`8h~#+OiJBe31-=A0Kj`6mnk~a{p3pTVGS0-^y+4=P>7ujPPkr zL_^+&Pj~X==14ve7Md||GoS3abWc;bn1>D(hXoThxw$Zf|8?tcy&p6&4M@|bK+^u&Q5%RyG{#bo&;m6_`G1*e0y^LKX>*k{qFImHRN59!f{S~ z>49Gewuc?#=DSwrkphJBl^Qk_&%oIO^R_)R4kD>vgb$Oc{W?Cm;>FoPsEwOhcU}}# zneXiIk9V;p@tI=wQH6H&nD7Gs>=&BdKOe@PK9>(dc$59iZt`p0GxQPZ|0$EaOki!CMb9?i=?4rNA1%=n#qonspuq`j$4E| z$Sel?hIwU7s0bCId{(s2XL*J^AnS@9r&``#+AQEO-05L3vTdJG2i%b3UE&r#=*1?j zinp}2*2Pyhw5Hn3qYjX&J8Z&5J1C_+=j7H{dm?cb<`5V2**st*f$zH04P)OjBJ>D& zIguvE`99sC`xV`-*pDV+DfB(7(=Q7e^Y4xJwcV{@_ zb%mRDN6xh_6cWy1Zi&@Jh}4FO)J2J0?Gq;o=L(M&UX465{KvwZg+CYGDZE$sxR7%` zmO65&xH)ne>gAxs6Q@?ib~LRrnX-2f|N4e!tuhX z!WqIj!V2M1VZE?fxLSC!aFg&7;dbFM=tIocQelJeIN?U&>B23-?+Pyy{y=z}@E+ms zgs%y|5bg$LkLmUj_7e^iP8A+4TrE6DxLx>!@FQUl81=|^pm4e{Av{}noA62Dv%*(} ze-Zvw_>HhD7BS?%o3Nj7lyIVOvG7FUrNY~Ue-yqfd`tL&@H62z!mcm_m~@4Gg#&~` zgkywLgtLUl2y29`!jptsg;xr168>8FxbQ{cyTUJp*$_y~UmxKh;TYjGVTG_-xJtND zc&_jY;f=yOg^vke5WXY)yD$sp5R(t#fx_v+BZW(ZD}~<|UM;*`_^9v?!aoV$6MiWy z!QzDJ&J@-Pj~AXV+%CLV_=4~s!aOXR$Y+AET6n7PTH$YnZwbE=cE_TK@dpTtg$sl$ zg(nNI5Z)?$O!%Sj8)5G~E#D&HT;WpT@xrab?+Y&z{y=!0@FwBUgii}U7xu+sn&lWH zJXW|~c$)Bh;Z?$)2!AbnO!&O;FT%eGqcCqVojrwl!r{UR!gAqJ!a8A6c#`m3;pM{Z z!rO%p311X`D(r%ZocZV}93&hqJWM!GSSd^hj}x9L{J!vN;jO}ZgpUiK6aHEFmhcPV z?l4j?U;7A)g$snMg%=BN7Ct0=TllH)8)2W`YG2`EVXg2a;q}4?g>MKWFdi^py@i8? z^Mq@Jmk93>{#p3Bupf*BWu2(K4DF8ol~GvD$VESxD^COlqvzVK$@!@_rkJ^EWdhX|(%j}o3D z{E6^IVV47KydJ_)!fC=K!ZpJ6!i$7g2yYkOEqqz{rqCT=)5#Lx6d;9~3?>d`0LUWb=_N93m_b z&KDjnY!jX!yhwPZ@K?fng?|>lDRc)ZJ>fv%P~i;WT;U4gD&hIUON7@8Zx;SW_y^&K z!mNXBxAy~g+CWQCH$lCQ{h*_y$4%<`w5GMlY|R|-x01AULf2qyjA$H@OQ#D zh3^X^huHMG3G;-5gcF6O!lQ*tg{y_@g%=CA34bBHOZbfNMd4qCUkbYqvH96cI9NDR zI8%6}uvK`z@FwBUgii{e6aH2Br7(A>O>bY}SmB|;WS~baHa5c;n~6)g+CSkLHLsJYhiS_O$V>OHgb8i@Mz&u;YQ&Z!W)FQ z37;0eApA<`j<9_96AloT3TFzNg{y_v2yYNREBuo%GSc$xCM*(`2;;(f;a1^=!aIfc z2|o~iCOlx2<$sXy2;m~(M&TL4TZF$9zAk)MxOai&x36%5@G#*rVUzGQ;TGW!gx3r2 z7CtC^N%*=jyU?b$hj65DtZXa?ZPL8&k4T}{!@5Bk?KoWCY&u?C0r}K zNO-02ZsCK%w}c-E_Zn^a_Y;m6P7y8@E)$+1JV$t&@DAY%!dHdv7|TCfI9NDRxIp+F z;qk(gg+CBpFMLG!r0_lAUxj_f+Vl<(&JivUHVan^FBD!O{HL%-vE{RmaFTGE@Ce~T z;Zk9}uvNHLc!uz7;SYt^3-1;_Abd{vC*eoJzX^Mcv-#UgI9NDBI9Iq(m=Yc*JWqI$ z@F&8b2_F*vR=DSQn_eH`0O29RF~SML8NxZjqlIzdO5rNudf_R;3xrn*e!tV)xA$&^sobUtTKZMZ$@I~Qk!jg$LKQo0#3af<;!tKIag>MW0F3djE z^64uaEF34CESx2rFRT>S30Dc%3QrYo7G5a4Lil6hEy8<+j|g89zApS+*n5)A?^xlH z!bahl!gGZ`65b?yK=`=u9pT5q-6mW9xxxbBIN_1P#lky;4+virz9#%o*ky|4yPvQ~ zI8#_JTrd2daJ%qc;q$_eg;`TA-vfjt!Xt&tg(nKH5MCp^S@;X#eZohDUkG~~X4B~} zoFF_*xL6n$wh2!Veph(0@TbCG37-=FQTVCwE8*Uysy|_|aFXz7;Zou8!jpv;3%3bh z7k(uCLfCDZ$|)QroF!Z&TrE6Rc%kq|!q34bcQ zL-?fdS>cDm&xA9l+jJ|1N#PB`yM+%3UlhJ7{6hE-VXqmM-!S1!VXbh5@HF9O;TOW5 zhuio?!r8)Q!bahl!gGb&g|`YH7XD87zOY-l<)0@UB%CNL6&@{IDqJmGFFap(iSTCO zFN9ABpAmj6{6e_fOq-8f;Sk{{;SAwiVS}(mxLNpJ;myLQgzpPK6?U6t)9Wc5Bpfa* z70whc6)qF57oIA-M0l0(m%_V+PYItBej)s)FmJZa&q2Z|!s)_#VWaR=;b!6G!XFBM zBYa5sj_@Pl!Z|j*6~YsR7Ynxue=hvB@M+--!jFYt2=|(6`Sufz6pj@hDO@Z}3Xc$UwETmSLyofX zj~3Pnj~8Am{EhHM;TOW_VjF*oaF(!Ic!uz2!n=jf2;UKYCfw_2%kN-ek#Mqbmatmb zBs@-dy6|%0FNBW^-xmHuxYsc@y}`mFVTJH);dWxgaegAajX2hEeyQ*Wgij0KB7**1 z;WxtQcdY+D!UKe}h$W7*P`I3!gL6H?79!F+o!H%R&Jvy@|7(eef3xsDVh_i8Ncb2L z@n0qG<~VN(-;w|S5D}k`i7?+WVKx!*b|WIZkKFsoJxK0hau*U2f2^=X;iU>cT>i6# z^Auh$_X=T?{F6kayHR+V!nX;pCL({=EBxoeXN0c^-xvN}7+Yfb?khZ4SR_1JSSMU1 zTrd2d@K?eYg>I$g+e6q#SSUPHc(|}q*dR;^&lO%O{E_fB;oZV#g|7)e6z0ZlKJtab zgj0#Rcy3NuPDK69RrpbIA1img+-<@QM8rQ?cm@&e^Ie5sDgPe|?;?(OoY#f_6dthD z`cEc;U#akLBKR#3#)-&Zt=uibQ;CRorto6n<-*&ENcTzM$HG0Utp70KY+;LVvv9lc zULw+emWcFT5PqfbeXA|MvBE{dX7yuqJ#Xu{WNL6rM>0-NkZWF8mo0{O=b2p4bQF6uv-2y!Yh(NZ6$o{(bQb zqi{DO=njzkK;c9p_)ixu5iS!RN9^Y~8-ynl!RJD`FBNVV{zQ0>@B!f;gwG4#5q==- zQU|{KAiu)hh|I6t2MP;?V})~w`=Y*u3yFwVFZT)|K5}K~HvE6gy$5_;#nnE1XLn`E zwj^6fwrpeMm2Fg9RBTz2dy!>ZxL|D4G0Uo1vem3zxlm0fR0F1l;)D_iozSZZ1k-y0 z36MYtgane%5=s*IKhK$SckixbW8U}ueZOyQ?Q>`5+%q$0&YU?@?p?);h$A6y#Vd)p z?@kThqxhuaGm391zN7ew;ung6X3IBCaWoO~tx`Nf@odG16rWUlQ}KPpuZTX!`HvzG zlCqpBMDWejaJGi`(eM}zPt)*xBKp}14If1W-$uo#;wHs&6wg<@m5BQv(eN)7UnHVD zf70-WivQC1?=tW#X2c!*-FV!Pt$if1X_sCbLweTok$KCk$) z;zx@AP#n>Uazd`fidBls6pv6`t9Xp!iHc_{UZ8j_F@W>48oopE5yf9AzM}YB#Saw! zrudDbS!>IesW?P&v|_PhrQ%G*{S*&SJW{bqv0HJo;;D*fDPF92h2qZ?Z&kcs@lnNR z6kk$&Q}JEJzbSsM_?=?PI$OUi#azWPip7dk6sIdLR9vRmsklM$bj5QOFIW7D;w_4I zDeh3*srahm?-V~!{F~y}iag*={n<-#xZ*^`X^L|d4^*sIY*pN#c%0(-idQLKr+BC0 z{favkUr>BY@jb;)6~9vK*KW(3p}4o=XvH$cD#cpGC5neC9;Mi>7*#x7@m$3pEB;jR zHpP1sA6I-v@sEoCQXJG_%R5qWv|^cJrQ&?W{S*&TJW{buv0HJA;%SQ86fal2LGf0_ z2NfSvd|vTY#dj1xQ2bo+8^x4PTaR?bT*W-aV#PAW>5B6dmnyDO3@PHx+oFH#6*noK ztazs4MT%D_{!H;!#rqX^DE<>RjN`>aDZl}a^8#_8n}65bey(%1MB=dp3mJt!gf9WTSG`xg}{&JLt8;K|+R8#1WC8GaO)VzNi5&Uk@ z@XZ?Dq2VVq{Dy|#((o4={z}7qPMG}oj#T!`G7a;cr0k!IG%W85L_a-B!;M7r*G(Ee zmN*RM)9^MTl>G(`-%Lb5-l5?qi0IF6X!tE6g!GAqzaXN1d$F7l##k-yd__b_`YA+| z+pRzQuh|D*MBE=xgeWB}?TvU8Rl;t&Okj9`whypc!!r~mU&Kp$0S{q3+Up2KDG$PE zdWr8+j4DbwQHV1b21+{uw`uqa#qEl>6VcvxDL$mQL-8ra=M>)}qF(PPeyI4d;unfv zDW<7>(-rqtq+KJQ62(c1(-dbZ;#E*Wx1Zu+ibpCoE3Q@SR@|U?n&O#?7bsq=c$MN$ z74KBMNAVHGUn)MM_=4i^i8+q*N5#J?{$253ir**>K%GgSsW?=T?-pQuz9Qc(!0<%H za>Y4{^A(pUE>}E6@d(96#TG@r?}>b)il-=^p}19Xo8lFU+ZAtDyi4(M#hr?LX94-Y zqWD|Iw-rBD{6z6PBKp7IZ*idFAjMq8y%on3VIN8rs}!dz)+jDiJeUakakyfG;u^(H z#faj`M0DEI70*+=Q1Qo#S1aB|g#F>W5Qq;dKB~A=@ma+;iLg(9Q2evvM~a^-eyNxW z!$SKtP%&FES8n|Hu2bw(+^Ber;#rF4DPE%Z zW5t^kZ&SQi@j=DM6?ZDWsQ9Yln~Hx>{IlXmik~Zfsra3uKgHG~TQOI$KyjR6x#AQ> zd7cyXU!>vv6;~=ArYO&Kf{yQ&qrBED(!VqKaxuZ~!+r;u4trfhgdHv;!rqGAM?aav zFvmY4^m;iF`YLuGdUzDW(5n_A^rnjleb_`q`|-p61~CYxDIzNggM}bTNf%Tct0?6` ze1(Rq6=x_)xsbj@!%{wkS84bt#YRObC(_$AEagQws^Kk)rzoDGc(&qJ#chh)6|Ysi zLGfnA`xGBi+@bh{;!BFJDZZijmg0wsA1i*M_=TdQb~~Ub<5>>;E)5S;9H|&o9IGgP z4(P?t0ak1L3`OyK5HEfYaJj~>QanWQ2*nn~HpMQ*sNyEYV-?R(JX>+A;x@%g6|Ydd zLGfnA+ZFFpyif5V#itaXQ+!GBHN`g+-%|Wg@ngkL6u(gXO7TC6e5Wz>R^EXO9IW9S z#bJsg6^j%nD3&Q!D9ZSWYZ*U*ix`hT8ApLKegb9u1RjMyrpq`AY|(I=VwYmn#f_c# z{r0H*G<->CX|TM!dQ$b2%Bsmzg25?el|lErysWIUvI3#X$&;!P8w?&b;Dp*G3yeX< z^(-rozLZHYw6z|Mo`e^(S$0`;m7AcNXoS;~uSf)5hk$lN#iei=GRK;nE zVjFNhQ^T_r=PJ%qtWm60TnO}j4*b#kXVs?foD*Q=&N*yqXZ7RfY;ewbsE|=eKl$Tf zCx2+7DNi%{#BaX)4sYE2d}n|)bw2#hci(-tb3UKM#_jXRS~h{PTM(2q+;kUZ5##p& z@Bh*J)M01!N87=FXRX}5`Y+^VvdrLq`(|bj^k?pk`MhtcG1>miX#=Oje*336ycmY5 zd0?vJ#--}_8#r(ls8ey7X)n`+OPb}(fLx}K;lONA&q#-o2PDUV z11)t%5#mQ;u*l4oc#;gtHsovx29I>=va1J7LXKG(wj?Qxz;vd>%ubh5rtmI|igno) zxX9rJRvBVkFpLeY&|6QRlUbKNJAKkX-jZ8_JiR=IDcL|JBN0xWTT#?yGdRMQ(-vuZUGH@TcJFh^>h9`>$4rC#No)RE}8RUDSP*X;YCOMuX zW%eMb67H1>Xojkl{CyBIp3#+#PJ7{!?{^%Nwu|%_U)0=4dn0vF$oyB1Z@L-HvHnb`P+Y*mplj7$| zD$u)_vX&{dkX91w7*CFEdWUUhR}b2I$HJ6%AU3YAE^TLTTIAQIu~rX-7O~DxmtbrH zVkF`~=DZKLC~zT$#D8JH_i<3qM4|eX`1_SI-~{%Qu)LhEJxgUO5)Cr`d z+%gC;zgdNtRIXnKQqwL?b?{5LjZUi5Kdq91{%KWL6Z#*Lg^{v<|HCEJq3w zgOJ|1Z+}8l4usY}ea$F=mZ<`*%LUf92(064H2SBvT_Vtan?T1a0-aw7LfxF{1E(SO**;{`5RDR60*z-8wOTz<2_kDm~@;uV1_zY(}9ALC8` zVOP%=*uGBSCua!!bi2Scj|*J;uE2HQ3j8dH`D_1SH_j8dsa4>XvjlFtLEw&G3EcT- zfnWGB(d|F%u2BMaPZzl7V1auh0{8K~2>plMe}}*WuLwN&xxhm?7)ARJdw8zEBdY~= zY!Ue7wE~a-O5lk<3;e1-Cery{P2iau1fG3H;JNn%Uigo|Yr`=A z?mz5z6$0-p7x)Qn0coi^Erg{TsqKQrVGjPi5M#Hr1ds7CN@=nM&c^oWFMmzeraWb=D&*VwV zK?`sdDEMx0eGoQmjAOE*h$!%zWw0y=?`23(;K1nr1{5ZT@i~v-5}$$D`yy&!O)0-e zNxpZ2nvXmNf>jy&V=`efFg`fGjMrft0vYSk%hEC)nT+XVhJ(~##t7KB9Zm+{va!Wv zJOaL3d>J$-TLKyHqpVxfGD?{?IAbpQ`IcY?-_x`Ocf5=tWD9PA3+CKzG7bgNGkEFJ zD4eMBW$@(`Tebw8^pBAFFvJCd>oPV~vN($%DPKm*6c%R;hUv77Z=uwKGmb7{ak$DS zHx9#47C~|#cwvTbBI=s46J#c%5Cp!AJm_U0BaCPvo(eZVU-2rGXpu<9X!gWeH1_)CF9GiQ?I z@O=f2m?5zG5P>5*1wy9@9Cf8Y_%4C^X9XJmDA4$|K-1t^WY#=EU`>rc%V7eo>j9ao z(aImAQO%GH43~kjOER*SA_!cCW`vqSm%ajx8TbsY&9FRFZJ)WfLA#D$fUp_XhRXYA zFGu1tsHZW*e+AL{m()=(PAUi3KuRh{)j;ZqKZ8*%8^~9BJudgYdLIz^rjEP;LY{}a zspb2a^PvsCNrn_A`$IByC8$Gk-seb4eHSQGpcbejetJPU_w$kLefWm~1vf z#|Eq;g~|C2_sEwMWJfWTG)kRyk|sSz2p9%Catd-FH|>zhfT!dR+rdcYmpOddnWW_i>(PNxfjba2CiV9auSrXNhEh*WrO7e*goYXXc$=3Z)M z0$FK=2xekbGZbEF1~vW`bRGWXHogsfq(nVF-^A4N&avZewv^Ua46 ztjIbPRmmKqHLA{92_a?{YH&u@HWs7Ud~k&9Zirq(NL*;W9DaVM;m08m>rV3 zAnP+0vef)tI4{h)DuCc*^Q{CIWo1zsGfV(7^^IAQb!IVwwT4aa8?!2_awvieGOxDBdCAIT(;%D zC&Sek*kD$HqJW*YBvkICWi2hNlIuxMAZvNipTI5afd8P?i}nV2)(R3j#p7TAvzBSY z7r!_jp_MsE@nP>|Tq7>n5yrFI;>R)0LAWF|*-0O~ckxfqvj&f}5_F0Sp;&|WNz)rg z1=vSY_*%Q{@mJy7_NNJ_pzN7fwhaTt`E22b zZQ0Vm<0j$68jqv&V~De%Wer3Ss_;5i!GWl6a^fIJ+>P6oF!^x1_Wu*5u`1N(#PfCF4mi z1*1`ys{naYAJ|Iv#Da$>mhZEQafoak;BgxtuqdTzq9rF}8j(XgK+tNtyR1AYq!Pl6FKPXFEES zn45zjxmB7X$oZDJ4P#8kLvaOg@;U!9D`00c!YXfJAPpKE%fxLZsNQH#fiFZKaD1Gx zZG=Ll|G1Rys|nXfoZ&YYAV&@;CWqfn=~^Z=wr+5S-+AREYzDvywn;X9;P27WW}pv! z%M82+g)>e*=YZx?ScHsrt(**~bzmp5Ds%EVKQx9m>qc+=Ddij~T|TFdrVyq$<94O+ zByvJ&s?cf~>-)?>d2qsMUSN~l?d1_?G?8;rRDn`9xzLjmrbQ=m3 zUj#EhWUdXR6`z2+hAgz9^x}I^jv?drZ_>)@C^#&3^|VVvObaR zEhXlJ$%x+~?~WW5U_+&x0qNw<90ZL_8SKa9(h;~U=)zcn6RHz(PcQC)^O$=E^_UHG z77CL4BO3}7Us#0DnKqPGd@Kr*dzKBQ7hgCUp|fphaPcBojofo=D5tmpPEziU z#ZG07;O(+Dfs_(+1>$n=yNgl@%1bThqU~}YmCKw*5iMU%>iOswX@TIIAUEfu(Q<#u zM3ch^m{6{f1ixb9Zy>hZ2W=uFkjOxA2n?XP0TH?1TEQ~{iP&p!@_2iGH7T;kgTjal zWpWq;l364XCR|c6e0Nsvhf)$t5#$n!*@-&le(a6rl8ZTp0(+(ojCA(NOKI>NDM89z zL3k7)ItHoqQUa;@T$M3l^q{N)Lw7_S=ltI?er6fspYqvw#-M=oRP(vrY34Ka1K3*L z#c%6ZD_trgQV-&UG9{m@JmwyFTUozRW=zcy%KSx4+zV62tiP%KWQXSpv(Mbx9woTwpR$7|^Vzy;UtYpJB+) zdeO$^e?h8^Fp60RiBG6A7?Cj3AR4woK3Aqp3UoEALg_>_V)Np}`BO=@75bS~qNb5C zU@{w!C!DydWj;YK%L;or(e1N7gJhe}RWI{v2s-Qa-ooWtnAytaecO}ho zwOJ)1rIZ4y(714BPN2|!swC1bn#%PwbLS+aexZ!1CEBE1Wi!u!BJ0FtdF#l)1vqmw zDQ@2d1=r@xk*wBveU?xeaqZ5WIT~aSCznzwxU6R?V05z1@KV@Oj*ER}8Ei?`y}c8; z1ZW;ZC(WwX24HW_5#1Hp2e~?EiqN66&h>NyipU9a$i_9b2|)6*1K#fFVB2=J?lg&Xtm!aCN`-x0YNTPn)9gHpT}7^ zK`vXG2dK6eB;{&dp&%DD&2}FM_`Vcx)=I#oPIDr>j;u5L=JrBd@Fa(h2sOc9}ze>BtX=#R7_pEcehT1KM-G4uQ@Npc@as(f;7r7t9@!!Vo& z0zodknny|VNpgXOE}u)X=1CGvP!BnlkD48>)|#K7LuQrv?uTw@gYb4s5#&OyIhNw) zYdS!{tZZQzcJjHzYaT#k);Ki;>_|>N*L=;*#fTrM@iG0e0?+4iusNAcHVDpbU%a_e zY;J)TXXWgIf{VyzIqd@mqBsvxaa%sFFPp7wh^VKBz^HP?*@W1yu1rV>at+$_gL9Sj zl4U6cCrc;Dg=tt?q-MtdBfta$i1|wauCE9J2ap z9by@(q;4X`kyvHOn&FdcuQnV5Cm=nL&&6=VpIXSe-dO)zxWt<>pX=mi6{UHLd8e<& zp2#KiPw*a27?ie>?&}UCUrNpJ0qHGDBw(_7ynNoTxSW}tY4#q?KT9$^&t8N ze}hMCw1k^jwiw6FHk9Vl+HZJ_aKt&rb}SBCPCl3a4SyzL#04Hd-pQ9Y9(OYS5@V;3mYy2~hOZMH zk?Qv>yUE%cwaRvP*3Fs1T?Comj2Pt?30p6MC3kYUw_tdBX2jv}Gsw!x=SG96gzX%$ zO{bnVQ|>&NhD^;*u@knQAi z1H(KF?`lMw-cBvFo|SZyT<&d{6&NcALbS4U>)o5JK0Z4JCwlZM`);%UH(ga=OJ-2woNfkWN_1lh2le6i5_L%!f1mb5b3O^a-m+`N+ajNDGU8P8-BbXTlgv z2tSGPP$x7aXL>o)&V)cFtZ5-5@7+?08Rp1Jq^_HeR`;e-wTI%4%D};3k;ltXa#{T# z!q-u*GScDLl1yzfu-oezh7?umhniC=Bgw(lQR5MS*lPM@NKSt)b zPcnAqe9n~h8AvHL>oMH3VO_3PL#R{E+>xU}SB`2IRGE`No=8I-u}cqg5Ol_WY{LSe@L9*Pe$z*bTQ^=alxwnwy0OVe9 zsCftGwhxk*Nb+V5Nb1eAuy8Jkl$on3&fL#Q@;XdaL614slM#iO!!KvGQ%fDE@Rx?G4sKJ~ z#*jjb0Owv!UTv^gg?E`#%i@I2JaZ7mdX~8cTJpN+Q0`6=F9%hDFU@WHsqeUvg^y^Q z?K@MyjwRgVCcF(k_|1c{%BJuMZ$i9m&eZuak{A0X(LC0~=zizYi4>%Uj|G|AsWFmw z6G&{TyvUwaD*Vt*jWwywBlmGK7y&61yp4T((ReikHSaSi4UR;?`{o;X4)39UE*q(9 zO)6U1QvA&ff@*mwq^W9(V-#PRjnFJFg(z0d0#ckf1-S%#&%j7fmoyirrXiL%$j5P+ zTI8CG`CFLS)Y0e^#@WN z-(S${c>cl7v*rsX4u|LqX8K0M$S2&H1rgZ91-=w?m4rJ>n7FYRcP{hQmb=4)wR|;; znYh)D#8tim^k!OwSe`9R#E)iHYX~!2LaQBKlFnt+oGU>QB)D3oh~9ZDOfT%?KL% zQ!v^UT;*#)lgZ%(wemGHn0P-2iCcVE!>Vxj)4E!VRdZyF;t}6g$XXl^+dP(H{t2WA zN1cLKePOs%y;#iO?h<_9dkAgVi$l#XNw9*=@lW3h)Xb}xR=NKaqxjZ02*$=sVU?R> zl;x4?{{Yus3ai{jq?m=Vv9Qh@3-D6dT;#V7gyJwWE2)E!!ecjTj)`$AG55j#c)7(4 zgHv;*OI9%1|G|LXWKPW!E=A!!rYAd*!lO8UBpIhZ1qb61K zBxUNU+D?+a&p!3A|JR~`*2|FLEKXPR_ZZzkh1O_xE$S~Pg6VKFB=P`c;g!CU9C#g6WjO zJjbf<$0Tb;FE2PeupQ7VXR>r^GN~Ivwk~i1)X8Irt!q#-B}Q>VU>(YqOrd09lKrJ0 z^1D319~bE}zZ@&_OJcNl1P+DW+BL0L?oYXQ6`pOr9I&gqJi`CNy`kXEz(4x$?gpo3 zU-*``_@4!?gE8;BNSH7vLzAaLB z?1s%LPhyzp`-WKIoSJK5H=L64JO-VzAvt^snjGa9Rq>|)jlt2vZZm!pz}JA8M?rjFtp zSa)6|&o8HTBWbr|)>Zh0nF|eejWSE`)NrTWoC2d&@VAt=;7G72F-PJKCf*E%F8DI# z66j|_;tNb1h|CMVO-aR_^+C^_-!SoOXkFn8zNZqM7rO=&FJMhR#!8_r7}4)Pum*J~ zmpi^wm8JGh&7v4tQNQ27PfXiG1d zC(~cLWQCvm?uRSnC5vUM1^kOkTTtI`4usYxty41??zQAxnC3qdUb2_WQ@|>cVJLM9 zw)C5ZmiLl*3fSP16%O~m1-0>#B^U5am$u-Fem_m$1+7yfzwRPA-_~yh)WOTrQ@}UK z?L!#Sf`|L<57*dB<|$wRtuJJSMgFbe>Lp7q;CPp|;J5vpT}j)iSrH@qxE~k&y(~Qi z+)T0-C}P1k{c_;_c*#5kyv`*noasLnBfFO@xq#2Pv<11T3zAedM(fmk?vfSO`CF3O z&QrhON3(Z_b_qE^x^TSNS{OT6@W2nW_%9yR-!>QqN1A7sUG=dc8|l z*y=A&(gaTdA0*kFfhb^iYJX_LTk$S#O_J?PZ zcA+inBmUv2*{Ym6(Ovh{}l#Ll&cN?r?QKti=XJdl=BcVlJ`{2knQGkY?I$f7*M zf^v;^XfyB3H~A`yy(b83C#MSE(KYyP~P)E0~F6AT!*U zIjqWYrlUq?=v3%mQG;0t@is4#L}zhpBUY))L1Oq2NYSw-J7X#W&eZ*4ai?lrPBv1U zsSUA&t!{$!>Zzy260UL+c!xEN^VmpJ<(Ho%qni>)gwB#YPA;8jyP^k`#NAo=6H~bU zRrKWF!HoBKnK&u;qcz6Qpmmrwkn)%XH>T+K`$8mgYj&R0Y}y2-^*}L-K0I@n+v_CF z)^OTV67a`@i#|OFvjE#IJp?taBzObbP?Tdz(Y*hm?%JD|n4=-yq7mkGw}?wG7Iu{G zOtgoUZw}kgS!R~7;pdo}htSnsW{P2fifYUaD4gHSd6_qU48<*4V1~fNP(WCI6*=v1 zmclF*)tNU?-56JqV_cZ9m6ukc7x+-|QGqmk=dr0q1z6z9z;H(Ja+F*ye-L46OQ7f% zX7&lVvFLF*7a=Oi$6bn^G&Rs6ecWYk1oXB+o;JA<1ByWwCg(AHI|rP@Yv@x6SsI!Y(D0%9(R7lOLh@hx(pFCE43t5@)Xbq}OG%bNRl@u^i{7 zE7tavrzDQ`(Dh`P5F3jS4(Z;ujFB=Ot4~7f22A*)a1{ z6mH~kl#0obLpwn}D`rkdWk#Otjpnms=1cT}k+*xJ`7D{a9%IkQ)4b7qw#=N0JV!np zkIuORIXXc;aAwA#`9{iFTQ^@mfM!Cuh?b+YZZscAGb@K9`ocITC&&lX%pn-YM(W8l zTX;UOW}b#FkNmNhnh&sfi}Zeh>g6?8_fsY%>F(^|J)nR2i{C0tj5TX zn3*kL4xhJkf_w_jR1QMgOYt-($fx4W;TU5^zUqx$&*)dt?MHsd+w~!Xp!~?%XiENm zN=l=bzXj^45SJ<2mNBav3R!kp#$^yKDg*uIk_#e6wBl-QA*@DV z$n~Hc%rLaXtXhT(^Bp8>GT-Oa!Z+AAkWtxJ@;m1X+?;a_E}a8S4emFRsHr*-I3q|q z33fb?GEBJNiZHn!XqwS5hM8f|ACJBmdunr3fSf7=H{v_*H!LEPxh5X)T_8;OMJ9tk zMk+53`Um+Og~7;okzp2i4Tgv1s^JW9)x9w;`>wtd4S5f8 zF%US*I4VH;$@9Pm|8Zs;$3Ss0Do};*5wGKG4!8&MCh+07ktd-$kd#F`n3mQs74;;c z$$1;!&cU>83GvQBcQYyrRv@p`kdfY?!aT$riXks=O8P*gpaw#b@?Xeh)R}xNm&IXR zW#B!0=kan>fTB8dVhtYQWcBcYUdZRL^+B92L4xs}?;O4u`fD;LA?Q0laJbYwvr0l~ zP9EDZkIkLO=04(Z#6QaxSWOlTnbrBwJek!vd3*x*$m0<^1AqKr;^9EOozMbAAT#I4 zD?F*_`0}Q{Sn3fEBK0L?Wcf3cz@H6!wTSJc`f-+&T+?)eL!j~a<6pQJ`r3?#Gd?GtHE+#t& zd^4Dn2R{_}on%ffWKKqYL{i{hMs8f3(UJVoMYoXT!nEqkb+g zxp92pGq6m!@uY;?21ge6f*Z`Gb3zVj`vIVpn zmDY6~JcrV%{%8V?8r*d%>`!U+b7(1z3U*x!@s&>9o)L?h)AcACymZ<|2;Nc!((CeI zGfJoL1KqJvzPcyIB4$QWj8&kklgwxG-KNSseO6l*JhI{a-p542&XQ(*1Cvm;Prn;s zsWoN~=2o*B&`4z_a~e$Eb7Cvqn7dHN#F&%7IWcBoQq1N-uVISjrP(~_cC>F|%>J;; zi7{hFyD<)*bnrRr0&JpxXJ*jEquLJsOleDJdsFG!hSKh)uFgnnw6nXlDN@=M?hZG$ zMw&WHquo6n>*C>wh$@YAH#ns|k?zvA*80*l4GpEOldCHyb~iP)grgJNT043+l~$CL zmrN=xDT)7Y?PzH0X>2NO7(d>o;{A;A)c+fneH5g=H5##n)dK8U$rFg(qQ`mtuPR>p zf5oS1QxuOZdtY+f(A9-@b(%UC^mH_!ElXP1$gQ1`Xm?Y%9XgOm-a_K`&ZV6jn(8`Q zqo777LIX8)b~LxHK@b`zc z+o`PJ3!Y#UlPY*8#6%k!n4hh7sG%(!iHH~xwA7Nt4d&=h5Zf&?BXY65pY!_1h~ z)AK-c!0(@y77Q5w0$-8&{3HaYo;1TpV-)bYwB=@oZ&0t8feA6&jPYN2!VLd=&Q_l< zIc0_>HRG5S7zbR&Ic7${=ig^WAmDGXX>Q73Wbe+wek z5I5QDG~yPyj&o%AM2U+Ah$q|YG~!mdj?*HzOUeEaY5fq||BYmSNO?CJ%8Q@tm%!(T zQpK&>v}v7Pc6=);c8;p?cu+JZ)21DtXk54`nGn;9Vuw)7TQI}sQ7|D0?jsP zb6aOPIw9E85oul1(bO1(hcOFO8#-GXX9>4?3mh&G(hUBum~gevThZg=0f!5Hag(jt zF#C9co*Gx-m|eG z(pBHR&S`^?H#lCII?b&ejiKh&?npG$+3bXRI(i~ajgy>6Q`Gt_PG}_^PxwSV4bf0n zI0`?f!wD@7wZkcPaA#XnM<(P-8N1H-?7)gC3&>Xhxdj_k9w%V2Dp_NlY4xWxD z+vbg}jZIF1U)|+`k_cmXLl4Kn{~pCl2NS_T0vRT z7l0h6hC*vPdO{7GHkD6Kkb7N2ZFyN^liQlL%Ny3Ru$vlN*TC6f3q-0gHEu(D)UI6% zSx45cwb2#Kpu7x%>27Ln3`fJP#ZpKIZPyyz%xfexbari~es(mpcR9`B);3K3w9HlQ zogGb^yEs8Wn|FlUo9Y^t)R))RRzMfpP=UjiA-igqA=ryD!`&BMZf>GNi;yAMrta1T zr=hd0jiTk;2Lfw^>UOuI-5Q&q)$QZSB`C|{(utBWlG!9X=();roe8*P_G9AqX9fOcwW zYFHPFmo(PXrh;ruTW5V3O%PWMC)$a*VRyJgs*QFjuZ*__bQC48UB0*h%F*2vY3fEN zUxUeB7bnOe^x$=_z3A*##h_Fichnh2S$V3~OGm3?3c7ar;tf=&DB3!vV?B6>yvu8% zZ8}j;)}=wZn^oR0)ZJ|s7QYtS-X7i*inQXl&_i=M?F+TQHldKBSTdQ$v`-X`OS!mi z<(FjLg_&VDb>A zR!L~JS|YrsE_5`EhnBrkOpR#0n2gFuPd!=&O-^ZXi5vv9FA;V%k7cX0G6i9SSl5l+ znC4siDvZh}i;la)C$&WcJq5lJs=TLSmYd=OnKe=nSV)#bSUB4mBPgPjlda#`Uhmj$ zXm3w4@m($9T3r><)h#=+^*yj*0Bi1Ug1kapAi;7-sI#MiCKAJax+NDwFJn=8HMr{fjO%T%9*wk0GSb^F7ol6| zG}C;sbD=d^fiQbPG}PQ3ZU{*;LVKaMt&z1<6`Py-3pxs`YH;`p$?6P@)XK8Z^2N(m zh9aT!$})o3mU>o7YwNm58hE3cGrnCAm?anGe$vMtj4DL z9@t)XR~3mJ%&f)0B6qE`A#R^&J}Tg&bk(kaN!Zxl)D91ky+sU|Q%~z}nZ^2kWn^7z z*G8~m9+65c!lB7%BqB~%4}2pGm^Mi)aW%EP4SkjrG{b8h*uUxb z{ef;G#*=os9;o6{jL6}2qGWXcXj$X_d|W!cl{~>Yg><0bQ>?;m>G@E)=T^#2z?4oL$n!DlH!aG&{L=^lARze&=4$f?q z-gd?|SnVd))3masNZdhLJZGH^tfbQmRe%Yw-nVF&jMJ{;hq6O&)vF1GG4){!ap_tb zHzFBKqEXld8S1Bk@^l<4Nbx1aJWD%?$;K)?^;qK=#)G;~C}MfE%m)~>t) z_>LHy>)<)AY-(E9*orP3LRqmZMvtByokmWwS>E9GH#RJ@MCR;J;wOL4*a$Z|QcD*^ znD*(9m&M1CS{i>D3lh8h_hcg8Ff-xovpfWEtx-IyNV5zwuxV|b8|mw@t$R%g8f(iZ zvk2>ZTA@$^qIq1$^P+6p!w?xL^h`uGVtA%#($h*`Bgt>Q9_ zYISH35i4fe>~MQfsPZ+>f6E{FqhW4Op4D)bT;A~5244ll4z^oG28Y|FrjuCq0EYHWn?OJ-1^~a z+9Q>y8`=$3bF&Zem_T#13En?_5)NkWKxT_m)zI0FePkK%tnVKwhbqQ>D$AP+)h%-o zb|*W2c^a;_M-pyqL}4PeD|A5Cid2C$ojPlrIMTAI)L{-q!p#U{ON~=thyl&kULSE5 z)Ge_JS6{agU7(!3S64*pHr8UC-iXmp=J|<68F}%@inOQI6``VSz!bRN9pl-*#c9De zmN}eo#BNWr9XL;-G@xuUYewl>VcIzqNHNiB47G;aT91Zubase27t@H9Du&B!&TOpq z9##z2R@#RX--tC|!rz@4=FbH0hE9%0>w7wp5j3fBZBHZ`Gx@aPeR#Ll(7DrMOl4&y z$GSb%9l->`j#3!3yE(^Y;t!c7U>&ieDT?hHtDU{9QFCu=Bw9mql)6GRNd0!(2yFhC ziz35wB#bU5g9wY)+v2s?R$8wbIuVLCG(*DHqZjg6H!d&tNUavy#JyG5Ep?|mG`>boN9rVzcS6QshpdQ3>l=It!N_7_1pTJ}5^kf|JV1s>-I6O$rvR!0Pd$ zaMZ?6ET2@&c6I#+R0N)Ay=UdfPFN@$bR;?`O>{!hIYcBLLo=xie0nX7);3`C88_>~ z$%bZ~EW>I>WAiEP&~T>O;d+Rk>jG4wdoROgOv^bqfSB@+;UhYi3 zd@`mO@f~e2m3fua5SmhHOHSj12^f}wb!DZq+pc!n=*ct^(as*Ou~0Ax*0P*k&MxJ~ z1xSY0Gf#R8E`F6=6>OcR8^bRJQFg-Ular&ACJMuz{mp=k|G9jp?lV)db zETgvuXp5c>S?tiMvo!{E7($`ONGE*1jz)J%1>>WRNNj+phAqS{5*Ltr8;?m;YS%5% z^-Hcs$hwRy3|jw7*AuWG0rr?%+O@eZECeNv6wDzq*($a>&~u#U(u}NuaJfkbDXN0I zCqrwcwgyeV+&$uikteqL>2bq$HD79P$9yTGw?JpqN8Xh`D(+pfHRW{FoxZzkRJuIn zoyTK+B+`QJh_&>RP(=m5rtqsWw(^a=Tk*4?Wr(J&^qE;(3iu?EH+vw+~fg5+~lNe+y*;*wG+YK zLZhq!ah@gy&EwfvQyJov0HZ845e_UysKjbQQ|L*=HXdS&(+O&bQ3m6>owp|`s2FzF zG9`6&k)gAuvs0ETtp#=um$|E{?gAakC!TC%Gmf{lJ4xqoLecOVC%y_DU+SuMC;4s> zrnq(<3Ek14cd)}WQufVztqE0QnL83*!}UFH=ffJLcajs+!Ajlgv4)yct0sG2c^|Gv z!g3f|I)WV$WJ0^R3$J-CMAY5bD!W>`nCQAT$;KNVZi4Zaj{Sq&Nm>fndK!K8=(&)w zzixq1H8(bf;b3!@t+E1o#CZsIZM<@-cKvWVwlW*SeAMHUd2B+jsoB(+w}|E96}=WH ze}G%CvLa*`QME1lkX7<_B|4!j>|6gHHRJ*=2Yh!2nXKZapNt=&s@>!qUnesz4iPcK zFd3Z>%EM6;#~I!27uaa_JKOD|Ev>fi#qXLLTb#3s7irzZ*|Ll+?gAHjF!X|H7o=)oBL(3A}p6W4&n^C3zOnkU`Yq#g$yRBsNKTj4cScOh>$7QN&R)q;A-gc^q>aGpU*8tL^iz!Sa(+0cb|^0Q%m2$fGPXtk?3YS z$nVKQ5?Y)4dgv>9Su8H{-*GNLmnEzQ_`N0ccT;9Vn z0~S2i1i3QI4HormcVU;TCEpP1)aW_w;qG-<2!w^$%yo*;VJo9>OyN|E7vy>bv0;Nn z1#{Wc;5K@#tnz|30*_o4Y!f8 z3SQ5ad zHrM>tS!lCz$8ar6>{tXti?;Q&cO;&(=dt|b!wZHz2hB}EmU;I*t((JS+((=6*4bt6`kzp~vwc zlNdbq4K^UxE@i_}wsJ9)@h}ERahA&7&&5Tq8(?geuHyQR6LC0eCDvoe#vKGX>@ib! z@W7;_uVWMN-Pz^o6nKyIfi}L9&=qQkU<;(Fp$V%8o|AxDC~aOWJ<_bm;zmOYEXWEh zVzC5!w6N+f4#9M@>0)l5gzTOboz~cHJQhehyW!)3KE8XX1%j0190xY6<@O(JQ0Yan z6t3$<+ol7#tY62SoV9RrWG|OD&>ngw=#VQG^mHD=rsKXQ6>i~@{pZbH5(?FYa8tSG zWIav^?&7$+9Jo;}z@7wl;<>u({Ln|Y+VM134+MuL<G% z&TQF(kFIi!pXp9pVor&k%)x*qCK45Grvk|W6>i6xTDgS^3sam>gxhd>q>g**JPSt| zC+-+yMe{ohqY6TBU0x z%{{46aTm#ILU{$KT{{-;fnUc1Gw!)OM@}cG&j7EIo5JpZz&ge}qDivDEt;YWq;@0@ zg~X#tIO+QX#yj|6uohTO5zZC5#$`7eDCEf0*u)vC6O${BiJ_v=$&;+-0rmB4!#L|B zm~hd|LBM_OA&X;|*lpt#71vLek0YC5)fz(^Tca)Lvv>pyN9x3xqXooFzDG}JZfuYZ z8JzTh08y|F;kKS8Hbs0-)m0eJ*#Yh**|P)Uv2!*<(*rrg{rvJ>tz0yU`9}`+#F40@ z4g{DhCOfX05hcPCE-LKULK;UJ;Sg)=$#6ZyoI$X50alMp&<@xm6JXWIBTP*Wv=ci$ z?*1QY)k|*N%ih3Vl$cAU9r45tx>NH+im5S6E~W9P<5XrX^F&G61ChyoD5e~9;}5#g z4YHn-7-x)*dXze;pp$V5%@!bTS4I1|MIeW3T*VwO1_#bj%-}R*Sph;44_Cet{3F<( z)<`4HvS2q_7_t5_k$VOWceM9TkEV#%r3LG~iH~NLeRKEhf$Xo^({S!K%1Ue(V#Kxs zAAEhT8cCaO@a$t~adC`+{em!4t=H*DQ?Q!9kN-7>Z9w$0);r@Sn_?omsJ-Q$UgVT|?F z*ePzzSDNs+04Gd5$xetkvI>U=j5)uwLcJUhMkbx&lQMIM+Ya?|KEO7xoRF1XnOGyc zizG+OUH2X5?CkNp_yIjT6NXWY4?%X$;^kOD@u^5OlL`)ywVY+dIueu(Lwq+nscg)9 zdK4#);73~}+x+lTWZiQTk3Fl0n`l;hE&f!+_T`~by9fT!JfSm z&lN)LV>eR04{z~yIa*?!UpJj%BV3hkD&c&lJc$j{50d0P9aSqX709CoD3$Fg@l8C| zS2s)~$(^+55muf%6ODH}iJaY(I(v30sY-UgRu9H{pJotO2S>BI?SW7=$CFVen&bG0 zOi3p;2B#fp4BMCFT-XBL5{P+HGiS;=DqPwXa6`n1g_7Dw>z+_MISCy1H0{|HSfgfa zDafM}o(E4n>z2E0A)fPc-H_c)y6j$D@29pB3a6r1Rg7<0Vq%C@#N%~C-LA^hcGxrf zxWXe$-svI^7szRl4f6PWY&s0jC!%6^l|hdesT-Bp2(fi0Y_sSIaaS7?3AvM$aH;`h ztgkrr@hQEnYFv@kb4ngkrpQ_r9|D1Hbz+Jf>)Q_JFmyHH7Gh}!x$+sCO;EG-Jvdt) z<@lp-V3XeA%T~Z&3;F4#fL*e>*tP(jTB(X7g`lr(y#=AV4Y?x18<3^WT2`ZEH#P$3#lzX=X z<;eu!^902FAACdaB6#N4eH0LUOtdi zEMa9*0-7V9Sob}NePo`*yKjobOunZj5;%T8Z6fa^J+V6CsUTJXe!!FZ9?`7q%{ea9 zAIdeM%xJ1TklH~%P!b3AE-!MmJr8FluTVxc(@^(%%wn2Kke$N=lZ2~NbSw= zT(Rrvc5d{4rv#2(JC`F$Fk5LVfi;gxPx|=<8hwX;$E)U(|yP_6Srg!F zVZifYyYYk9o=Jc3OUTlBNnN@!q=M>Xnk zd%ms5NTe}e)`Pn3-h)f$`Biv-MhdU&$4z5j_VWAiH+UZ};wTrqCN0LV9@o6bt#28W z&aES&W7pIPFTb+a<8~vcbSz&x{>ZPNeb<3A2mHLRDRA4Z6*OLc)!@f8mTxrv-1?r2 zYcIc}z|VdC0g_^Ra3-$3{1$o2Hx_9wzuR!_<=3?fem5oYTkhdk;Nka962C3Gs4w;0 zTfRd)^)2%7%R=G2<=egsei!(lewTt@ z5b+1&Zxa4oes?ADONX(|K)U-uvV2}nq8kaibe9N7e*8QSI&Zt(hkW^-ALcs+e{Q~i zPvTd!3x0o1;`fq=UzLa7V8{ccjw_c6@ZB+z;5@geeM z8tX9)e{MbMllX1f1-}cD=(dB-Z7Z;g$?x2xeAC{D+l`r?eD6%+cf&6D-I~O2n1|nN z55JF-_}vbEt}SEvT=}KJkn-A<^A6Ba-`!78FBT-xeFD0^^mHERymBr=`N)HEuEC!x z=e8t%X-D+UuO*4!A`d^j$tK3{iX?tP@blK!ZJSGz__cuFFfE_!$CCCT<%di8l!0G` zD>THo{ey4R_ttj{`0YSC>szOE`1U&Ol~m)|!@{O$w41i)A%<`=@`e)@s}p* zGimtAPoldSbl#6k$2k;=82gZ}nvI|zmyYNWzw_MB9lS8vzTJK<(s&E?k-FmL_wnt} z`#$)AEaBtk!^nX1>37~lzj%)E7{7yGRq=fM&InJ4`R|<+9+?!T#})thouK$cU5H{G ze7*7;9Vf<>-x-?}E^yelg7}+!~>GfkuCo5J5})juKdo_q%cR2_{Z$pRpSxX|TtUVup!br;WA)Zu*hdSqI z41J)z(0}grP%!uBG|ZevX}L&GE^{i>vJ zI4Rtb6z1!IDo*(wr(xS3bDi@wTq5_+a~{{QtzV7vcGCTyB&4JNN0Z+n{XaUT7CNk=e2<@9 zZsns+IE~_Y>e)VV%bf+!s{L+G#o@v;d1)E z47sb2BprhW5TouyPN$)g|eKl>CQnD)cH7 z_ip9Et0al^+Q^_Ret2HHke=vXS5J3SXhUmvv?t7iq^rJn?_xS^iNR1h2k2X5*U$Jf zmj^Q*_6t)O$G0DT8;D`hoy{;@1CFi+LoRKp!O%(@W#Dpg6e7}_B#u@rSLFPK@n9)P zuYlq0;7z<<@pi@g6dzH1Lh(h#Un_o~_%Fr1P&V=#rkJN#q*$g{sW?M%p5h|KWs0j5 z4_D-RB>A^0b}4RDJYMls#d8!dQoKU(8pWS0-mCbi;;$5+ReV|Tb;Y+8-&6cV@hin| z6$5B6mUn>SV8wkD_f;IPSgu&5IA3u;#g&SODK;y%D;}?Sp5iR%2=kw>xK!~-#YV-o zid~AwD4wWzw&G=q{7q%@y-D$2#YYvNSNu@%3&nwH_P$)j$%=<5ZcyZp6OsQf6dzE0 zOz|nj7Zrb}_^#rIik~ZftC#|JlY9p&?yXp$I7M-m;!?#U6xS&pt@tCwOBH{nc#q<* z6kk((Pw_KF19w--qc}>jL~*9#62-$6*D7vSJVWsk#p@OCR(wM7RmDFlex~?e#eBHi zEYAeRYQ+VL>lIH>+@^S);_Zs}DL$$An&J=`F7n@3akk(C62Y7EL3bzJWcT` z#h)uatN1s?L2!szk21wYifa|mR=id5CB?re`mh|w`|}j1DITQQt+-9`X2tsyf2a6w zML(AF$ZxFT1jVI_2P$?eUa9zy;%kZ@D+aI}NPbHd!-|^~FIN18;;$9IR2;gGy}wAY zR`F29V->Gb+@bh};x~%?9eI{xykd>wQHq-sFIRj>@wbZqRSb;M@+i(wJW#Pyu}5*M z;>C)0DBi31y5if4Un_p6I3#HE+gow6;#9@s6wg<@UhyxApD6xYabUjXm!&vTag5?L z#kq>B6&n?gQ9McUGR5tR_bNW3__E>~ieD>o0>JhdtyrwMpW*?E?TS&wt%{c@{zCBq z#os8tt@yPfe{_TSjZ_??I9qXnV!dLk;#rCpDE>t82F3dnpI7`q@jJ!QV{N|sDYh$~ zrFg62(~2)Cex&%BV#dCfPmW@#Vx{5|#g&R(isvX^qxf^h9f~^@-&XvS;x~$>z~-B) zn5S5wI9>4o#X}T36nhlUSG-j5HpP1spHqBQ@vn-XD*6j;IR+>O6$=&TDb^{jRXj`a zdc|85pHh5L@vn-XDyBnMs4v-yC5lrN4^s>)o~U?+;x&ptSA0hCWyKE_|E}1-*ycA_ zaf;#$#Um6O6pvRtRgu4*$nxH-_`Kq4ieD)HTXElUmVScb0g8txZc;o!@mj^36rWXm zMe#GmuN8B~TmE}1PFI|#xJI!<@k+&O6<<*NwcnF3Q}K_A86}oqw&G;PX^Q;$QI?}w@i@g( z6fal&iQ>JAk0`#T_@<&$YWbxq7Alq~E>k>Eu}AS(#VZuAQRL6BvV1Qp{zLI!ibKn6 z`aX&?73V9qDt0MuRlG#;Ud2Zgf3Nty;(&6?KTEM(v0CvE#gO6&il-^wq_m5MVI7b-4QJVfzG#kGoEiYF+Zs`z8YpD5m|_^{%OioaI;v*O&z(>{k4d;#S3Rw>pf?x%Q=;%dcK#V*BT6;DY9pA69%-@ppfToU)V$1P6W-}lX&d-v{2a(VCn z-tVo=es^ZhoS8Xu=FFLLSAyROW=*&J@dFV??sEj!3U&#eBzT$NZGuk;zAN~H;J_J{ z-#Ec)!F7UL1 zQC~gRVgeEL{fJ1;01zzAO@gM624XN0l~)vUl9De;QNA~3VtUTm~ZQs zE|@JiTyT_Nh2V6-YQd#~2Mg8Eo~ z_X_S2d`|E+!G8*VCisaI4_af+q-` zC3u10HrO!EOP3S-DRnb3S*eGKDVPt5n18+_V*bcZ0K)!{Bf_39B*Gr^Lq18wx%Tdz z54P9|$734kyy@}b-sn*crI!ic{p6m>V!3AmUxgpN+}@GaH9~hlT>J`&KTzUV3jIOC zXO+FjuUAX@!IHivF1%La!Qa$(iPUGQ@L4D6D95D37DA*-L-r7<(oQnNDkpt*fG7P;vSg=8GgJ6eXL~sWYl{jATG(jUD#9t`k-GbK1m_9vE4Yf7uGCt= zCc%w@oq}5gk0qj?PZT^u@EpO51%D%W0}*;~v*2BV_X$2KxJU5sMCi#Ig6|7{Ecm71 z*Mj{Z8|qP-;6T9~!C`{=f_*4gd^w1wNA(K&5o8$pQAkApmJ&f^^a|~s#W32lfQWi7 zC8B)iYApY_L~(mbu&iv-xJeT#CXTNN1}Bu_OTNoWODihM5vr(|Fb=W7;JSWCR4tmP zH5w!ztzvJpUw)BIC^t~34pJ)=sfXboafD#Lps72aM@e{$Ahv)Fy=fDk$4Quc$p>3y z2C?;H5L+e&rwC3H#1h=ZW2tIzw%{B=m?aYrvu+UPEar2-32z_s;h4eCLz|O9e6NZe~xi(<<9P@5q^8Jy5ookbhxnG~KHc28i zBJ*w|ubo3iobcpM&Lc|YA#Q@1P@g(V=sma+A zqz_TmnUngBLx~xwwk8RTz%}|}Ju}7BGJ&}=6F^vwhb%te#*E7aQ~SVj$$H$ZwCc>6 zDdUovCA%19dU*^IvScA6(O@U8I+MX1TTffPeNfKcY?)JAw8W1BCiP=Q_HiqiyeN4e zlN-m5tlQB3Dmj@CK~D`3!25Y+#oO39QK5KfE8}Qw*Uyz$%FJ?R z1*+m`88^=pXZ6>XHs5VeH2(s(29}cfs~tTzb()znEoBHgdtbyx`_+kE2%S%2rbRBJ zDD%ahiX_-NEQukrar?#8%f>DB^edEme{bV0#WHUcYfzI1#aZqt(za+(^5TAW$Q@wI z;Rq~8qm)|VC3Xhpflj2QS?N}e?4ryLBH8@RASAOY!3=c{^wo?l%goSw=~atO0KNzdZ%-#RYM@!4bcd8DlU4LV|+0MCu=leGgGW2HZh(Bv`7xy(T*mx zc8`TIZ$oTUV;$P|?zAWmCwR8?QN2T~x_S|2Cm`k`PIbx;0}(hEU!TBz@XMW3$bZ(-;@9Z_GMAbK` zf`PtC6E7k3U73M-xo_W9V-2iXZXncQpze4=O2bH$+c%{#3qtFgvVN$64U-KtFEy}n zgMm#)8fe*Np!Hes3%%M2WHyMbRlW8l!&3>@}f z14pEwMSW9_EHZHPECa_JXkbU!z_G^}IBvIr6CX0L^H~EYePG~}BuJ=l%8iE^xM{b6 zKiy~G=6@KtrB6CYvZfRonEGpYntijTT}l{Oc`W?Rz60l;Y@q5<6FL7Z6IyVof$9eg z?EAWbh2I-k6vSZYJ8*HOfhDU9?6;XPXu&Q6r~Ssj8CMxN^IijI{lmc7X>e=%4mxMF zfn7BQ&h0R8-YEvo|AT=G9x!m>(*`d3+Q7wm(51eEE}3g!_a+0E9&g|`yA51+zk$nN zH*m%G27VhH$b47LF>rOWfopaexb}AjuK$aH8~$nFMt?Rl+%(j{pQakP`9K4=gbmz! zzJWhqZ{W744cz{@fjhD=kMRG4Q}Y4g96=U}ku5l!1rl z7Rc=UG$9(&Zl<8K<+^R0nr2jwvPOXUV$TWa8)7C^s2{q!jYll2V-Q}nY; z9^Cw;fsI2k1p5wd+hw5rW&<623~YYKKSnx)+c5BySptsAO|dCV7b|_XbeUDF@5o#MBe8)X=GXy~mgO2#iA@^;C?q zq}21qV{;;P9#Vs;_hELqN2M-+o*b!DD=>2&=}UbY#772FUqD@tOiEqLwDeS7Ydx0T_AL>D1#v^r%Wb8m4xKFZEJ%&5=h2RLTb^ocBZn!A+^#Dp;L+ zASqw!h6$|B1t=~lbu6-`r%o$ob^hs>jDt|G50D%Po|*c<7_>F@OX$8%{RRZS)Wy)t zKx!?bO(`=$JR5c^5WF?DFDk84eF*8)=h0kW>L}EZWNBA|Y%z+_1GeSkJDBMk*ahlf zj_-Sv54XX?^Zw92T!A$mdbgCY(1?$y7>8{iaIIIe|9Nh>t zgD$-Q8lBuV4&Q^$LDTk`oro46HxFSw=m9+XXTA@@r_oNW2fqo?`WIFAK|m#Pf(;}j za#jr_=KK?kBJ3btawQ)3eq$fzm^`EdBW+*grk3xcPp3AF)1=UupOC2|L79?sKSxsH zLAl6~m`mXf4J1JKbFqR{iDA@7_X%=N)+?c7{Wg(8XZ?UY=1T=RP;?`WQacU`oRMP) z7zR6X3UVUX&qFHx9yU4b03(^o< zhXsZPu1D1H#5*Bgos>9iBqfvBg2w1RiCdxkzJ!GT!XWe?Lyn10z+Xv9Nc`IBl$^Qu&6@&Df1TNGsO&nACY053-Ua`eVa+enuy(ciMRUy$LSJ zIDyibrUQ_vZ}_5&9YqLMX?DGD`0|X#fe6l%;L40c8JsV{gEMxLc!31hWt_oaHD5PH z-iD0-!tkUmlsa$7K%z=ptOKx0zTqt@;a0RibvFBQK$fGnSE16)k`P%vd5FUv&Ctgle*o;u{`NqZ;tQfiRlG z*01tUMz}aMUZte(U34TyR{9VtK~+=*#Y*2NNiq%%aEv7MMKE*p#rU@4X-qxpo_76M zcG(Ni*p#$eippW&({8n$sEW>`1paLMFi^BNdzd#UP@5$1xY}@Hi$_uVZq3O5azu=x zkL|`5sDvfxxzyEcMfP|k>4Ts_sjvEU7DLEH*E~ocT<^x{N_~+LsTaud7f_>fNR%9rlki{z?cT^Jo0HT$YfyQq`K2H7togFG%FG~N4D zzmDT!3(4c^Lcd=KiqpI`r9H7GFYjDZd|m{K2fY-GMq4fhWV~$C^BdP!@ zkLxde6lSl~T9LP5U^+B7f{81N(Y#@v3ZIEFpnP1ht$;$MTu?&yRr9aT4F1E#L8UmM z=q!G#l8sEl5B96UH%!2cPbb(W+4STW(bGEld64Slw^2E*^0)@nTVWAWTcvTVuhlck zu~g-8eW-a2KlLha`QPg6< z5?U|c@WP@yA=d%>*-%l@IRyyqZ$qPs_)g4#8XFp2^fUL9vUl20 zN|7JNB>N;AN-uhYp_6SWtLS1lN!h2^(4eBDAlmFxZD>f*U1(hPX*Lur;!6qHXVOyn zhL0#Z51vf+S=1zSkV?1%bsxp+e<~pf6h$Shb|PB@ZA=TPCV=1 zLszozHji0%Bieka#GRPwk^;e(Nm5h>lKYsbvlsyr$~}_cf0_6N#Fl-#O=JWT83+!5 z0n`s7BKvzQct#)*rwuBX+4Clm;yILqU4Bc#7?8{$iDAMm75yOv`L3x+mZ1o8i$!0F zHfDe5jpmk%o=$;1S`9|B`sAbO@GMh)n?rgB>X6YSbj&Z49=DA2C-}-}^CprLtQ~if z^aU^|8M}H&^X(}i}i2u zUkGDriF7G<+4NVS$T%uq-ZC?A15RH>itBoz;NF~mo;5tR#~KPF?%nCHhk@+Q_*x1D zxApWM7@dscy%ctq<7S^83tN(LOZP->0qSE$BXN>+0EcRp(Oo0^Aa@7#JPhcJQ#`|f zB2qza8S2&LNIQpiNoTp@Q$g+{>hYKlGH&RW#?3{29UFdZH=f*a)O%o9GG1p_d3ok> z8&czJ61DZ)#MmyiCLqXdO3fdT$oM?ULIt^PsSkyT%{U{jRHJJu$PG;$fhEm2FRsc$ zz^zWb4qivbi9K@2n@WPkto(YfI2rBH=b-`0Dafr-y@A}`j#kr%P~{!MwA1<`taoGsXXra z>MM&7pDgjN{#b$MaXVO7vCI0yxy7?J!iLQ9=1#GG1zMbu)e8kTk#z~}116#<52NCi z2ltnCJ3Auc86hyL+;P@laa>&#lMv({w0@Yw=1I%a)QBuqkQ>vmv`Bl`lSTq8{g`$) z2gNg(>Zjs||s0GYG3en4YuM5^iJNT#nmqC`pYhL`UR&<2wxW zLj%X)dptMtS)kqW;=Y&4yB2Z!ukc!Own?8c208u&D9@v{*VED0IVWp7usCh0JZ}H% zYQ~@8@#9q<&jU1ngeqs3W|f^49}fuhbm(qQqTjRaX7=8wRd%?uZE6Bf5zP7~XQWTolT+`Ar{U$5@nU!E3k3aMvXl>3xJ}V=4M?husP(&xpbx@d`b`g?0U8-!J(`atL5M#gV^ z+j%ympP>BKXgh1T6e{l%Ch`}7a_Y4;BGJSOvqN2Bw!IUZMuO0nPzrU)%VSF?UIMeC z_n9?mVGt+un4$HU@sles!|M}~I%c-cWP(?)YC9X3MCc7+FSWUUwC0O!psZy-7L-3^`c!~rOkdCR@g?d^Jrb0&X zjQLPgKPS~#q>owiISjZ{J=4QRKd1C(p}d1IruN^c4|PHcQd7&Awg>_lv;H+QvJJM| zEv6RJ^x6ufZsL;Dn@ZIlh#VDx1HmGfk3-Glq}vg`f^r>Qmd@W!;M?HC;EM$g#~5>6~c{4b&mEBJdEtbNQIdv!&dt!E|WgS$t2r9V)~_ z!@%fCGlqagezJZ9BZ|>l&-@ciMSg!xN>s_8{2ry1d@lyNo>h(>)Qg6JU@tucPA8@3 z*O~V)rtYQ7ak<_F{avWt65zn3F9k2M_&pCPa!SJ;7q3e4n2?`)El4-9Zh(+=GX|+6^g4(+CUy2>CNDgh{6hUG3P(Ouu$uKbQ|eQZQlgVb*p79$S`DF2so6u& zE}ej8=TFoTkjK(cN9@+athpq-p&W!W^;R^1n$n$E&00@7{$ySLe9f!q><5?5mU$vc zZXO7drTU;WCR?2{Bh#qm>}yD}KZ?jdNav#$dLVg{BwuBLq)vYg3+IrSI&(Kg&HkJu z=fPCvcj-1yK@?&Zztrr3n1L`?5UM$P0>!#h-wQ2y z!RS!-LnMB;1kt`Er|&1f=0q0UqZ!}&E zLFL;_s)Qqv|F$lIioJ>UIc!W@D-&tx4aG-#J$l?rVY;fa$ffwNz7m?{r7((BIgb=a zO+YCD-&asi>XMYAD(l_E{=R*o{nR4IT+BU^iTpF*`PsgSsHQjP+>6}AVZPv~*qoKO zG4W5B&+|w7PDHEB>ohXlD_?LE%YB0|>UjUbDYNnmCY}xr$e-@pABizJGav$+IM4SG z%8bcb%*4$_$hpM#Ds+*9-etRxi4A@vF83V(QO6{1U?S(0{DXYg6~-o3?PTI1uuui9 zzB?dAr-R&nR#jIyB>55Fuh7$85>@#iQ`=G7{6l@e_r-C4i;1-XaDP)@f^ig+wdy;j z-m@37?(&_W-BeYXLt{S=vt9nhzE$Wlb2&k*eC0GIe#=SX8ee~mB2IrI2s21j3!3-DSik~Uzdco{bx;FDYj`P4ncmzUk5JU>c%&1g+p7As1HSld1*aO+vbqvpXT2K z>BN(%%1c~|-Tvtq;a&<)(;gz(0~}L#`WG9A%z7DSI*Za(e(ch{;=dYmdN+2qsY59p z!|rqcM(BNyWZte^=wv8p(MLec-7x1$vn%d?}sG23!^-Lb>JO9x01`uTpndroy8Mq4lA$H6itA-u&qV&z zTmF9%HbFmQ68A813JTBvKA{3GNF6%K&G|JG3z1l`$F~j=t43MQob9&OG)qDf0{WUL{r-Bnn#{IthBl`?S zy}e|f3f4Ph1%v(NBV)I7 zoDtU_o(cxg`-ZHb(Eks#$IC6gf}RMa+yo^VV^VMBzakSD!83wqo9cS zU-$VV#)_BBQ^6}7vV!UUFW_2w$>J;cxI>$to!Eeht4CT@`ME<@Q0<=|*LR)@=D;H8 zSx|xe35oy3vzMEvg7X}*g5~}>aIL*$@fB=!X!DmP-W9tpuzRn@CRCo~kQFrh)8jP3 zQ^DIwHZ&O(>`c5Kn(#_=h+C6nxxGrVhoBDmI})$SuzTpvU}rm2WnX+7ih{%Zoe<6( zk2xR@%gxfxbZJla-;5#EJFT}4wQjD9{pFaPytybORe7>YagBc^w8l#jt%ISRZ|i!O z|N36*>Ixn^UF?vdfd|1qml7Hpu;1x$y($9sn~4=Bep0X;m;8{Fl7D6qe=a-!Eau0~ zSJ4_DLTB4hpy;pY>ilzfbDOsZC%ulf8hNGUpP&97xN-Mx&{*UznE5C4pxsLw^aLa3 zj)L{!ePUd0{x>98ur#p{KOqDL8mIPVBjd&=Fqd&3Lr*yy_0iWNG5@yJ5S(3leM(|A z<$9)-XCdvbDyV@sZR#UT%fYzHzpoD;Gr6^<)zsHbJZg~t;9AZCPW<`PGwP_}Uh#Q4}frRxYCs4g3cYxzvV9|Cxj<>6ohmg>$P{qr(cDPsV8anp3e> z)!WeY!i|T+#M&5Ly%dJNaMK=4uQtY4{R-+;*s=gQY)qh&OdEf} z+R~&~SC2qUJAXsl#sv4RZD~=3oBz<)iJ6%kEI=)0j>QyNn5$V)?$Hk9OYVhvx&f79 z9N#TChU`b^0g$~DwUYH5rN08Z?}RE5>6G`U6JVC@u=EgA zHj{vVJEbs7{}$c*Ep^vsUZh(f-ohMxwNu5#=aAY+cRKpR$~TLBsFvt??D$#wE!8Xs%Y;4+|p z=8YUs|B}`u`DZ@M;rofCr}$?+f_^UiRP)%;H$2@xuz_m!nLYsJZwC(!z&$=heXgq@ zFDL3F%H#{ZY+N*ozW`MDZ#@h>=ur9D$6xAZSRN;ezr$MiAAJT?(}{XKh^YVSD`4e! z*b-;&nSzq{hiVjlqyLR!Aw@Iv)$Dhf!aoX7_=7%apeJQ<(p03-s1)||IrLfQgQ2~7 zu(;4oPmZRW*_J|Ai!0sqlxVt53Nh(h3Np=2lCin?5I0-8n`Vktv(ICa8Mc`|{#}un zTB%vLF!>^mrGdW3(MXOqheXYOnW>+$GxL0pU^~u9$-06~G9zL352QI_7-&ZLrote{ z(wquHHG4R|^`S^CEbzU9*)Nucnx=8K0b}dq2_UDfUia+T!3k5 z$Q&MtC#)~R5P$F6{*Qu9$uvjTv%` zH=6H`Y5ozIA=i1M`7W8Bg&rPqtT&qPmgxqRImEneVR>g=j}ldoFP!P8QQ;xxuB}rp zUqI8RWFy*KrFEkDLYh8$Frv@&7Qh$O^u&IMmYZp|@_b=U_lGVIxxh=!7ufV3480+{ zz0rK3O`nNn^pGpO(R{&85BDMZ_ugo}@TMohY7F^+g-M(EzMTs4EjV4+A8AiU(^Qae z#p%zXLqneNMsH>`-<=%tF0;#(li=};UPH^5GY_z>UBM_^cr z4>h+@V7z_VnKO~G5vHa1IJ|U7QmwMbx{)V3ky+OwNmcI4l#?Nx;$6NcMmyW}x0!5} z>zO#U0Erj)u7HMHhfET8FfogzU*h8*`2Gv?NP(4Cx`|i%2ByJfW}9uI9mUa! zLdz&~ooNM#5l-TYz@HGAOVJJu+`~s3Yrmgj1mHr;tgtbYORGAD^4rwpM01YGzHYMDEFiSW3Nj)&4VMXNl6*w3UQ9>ur3i122w`S1V{&^;IQkdWj|@$sht< zsgK9hmpkDD8Y;BFP$b-qVKVeYzMjkKFs>r-0lstjI5a?U9WOoz2coy=p{27Yj z&+b@#4PwcKA97fUe+REa1o*FE!G1(QS@O}hU?YH|NoVS!o`1d^ih4}Ns=9WHVI`Gd2j&;1&#T_H$cc+GTFu`m zb}C6eS-!YRI(fX6bmD%Tw_05=FIq`TU>2EsE9tb%%gBj~Rx)W7_)M9CpK@7$J}l&j zVgH;(EevcJ3k%a2iPJP(7{T&UDKH*F}ESmy+>AMsR_*(d=-HT!xCaa1en2o<|G(VD8Q6W_Wfb>QxU*|^ zpR~#iA?)36ISyegB5nNt4~xs(;n44vi7=@_+%Sbz&!{$<)Yi~guY!I(-;MIMj2r=~ zK6(M1Jxdj6+t9d81^en-$2n0+E$c9S1=I9(&~{6e-r__51ozUTk>5rI+uG|RcpXiz z80$pMYT+Mk3=Y<}q&rbZw!hIAQA2e7Feggs_Pk=m1$9}j8|Q1E1A^cP{W0|07N7#{ zky6AJ=xZ=pN?cO=Vc;DcrRPQC(%UD&W(CLU%c0Xk7i?dJksU14{Ik6hH>;%-8Xhdy zheOY7+;uItL3Y83`aM@h`?m9q^WYSHGK65M0y>w!VA664v?91jZ-HAC+1H4;WnDg^ z_S4rOyN&X-9143CT(0L}WZS4f%QdXafw~k@w^1sWtBkhhHWl2W&%o^e7sD^9t-T8} z-L7wi6l_#_E`I~1t-h;M1y9k(BGRroO7FM~_NQdhDd;JQ3U*9`_(~?9 zk?Kax>Ub3$UNU7N1aGMVDb?w)86{H}L3eDFuX@Nx#7ui1dLl#}CzJW~C!=*wnQ>wU zT(ZG^ev37VT`tWiDn!gaeU3+WNX*YzWX+g^PAb)D&9I`@m^m?jL>pscYQZ@+COcm@}cwHb!kkm-*DD0K4d$v{agSG+W`HF4@rD+E}u& zzNE9UqdnXlY42=q43~7&cGfmDha1~VBAs1ro1)>dh$;zp)~k}PaA!$Nb6v^$`udXQ z@sldXb~ZL_sEv$mX>RMLbS*gI!t9cBuQ}rmX|D%SN{7>=0ujRsvY@gTFR*!xw-oOrx`6=D{jt+FQYHkll zIvZO&mf-iW2kt`;A6Z8&Vih`9BU z4V`1rLA6~iR^& zX6k7H?a!SS2>9zH%`GlhBPnxQAi=+0YU0V}=8CUmuHk62S&sI1t=V>d@cYR-tCAiv zBC)@yY~!8pnDqPO=;OoY7nz-$7Gv`NRC+wW_;3&Ty``0vF5lX|Uq^%ngYl-Dg~0n< zRvI-b)fF~Rm6ws{*_+QO4AQ(<-q=28UiC8JvTWg`#`YDBw0G4_8>{N7+&VaX%Er4E zaSn#2s)>|MsB3Pk?cDB;#UJ73so4MKBYYi&pUwUOzR;mbDS^Q87}@ak+z*@;{6bvP zuYGe;6TI>8SbkCboF3?xB97%7{_~^!*LmYnE}Td6;q0&p|D5{FKh{6*7z}4`y?U!} zZ}Gph9bP{0m&`{WvXs(;@yADG$h08C_^|D6rSZu2Ov68?J#L!QAf%xipjQ#|d#!%^ zoJ3^#KGo%@4??}uvTgr2XxW~4zA(e6GketijKGst%bYON_QyZAin!7~ClS|~=V+@K zt~GIy0I}XaClM(%Z|Mwgw&?+4*ghu_xvv#Zd#Z^$JwUtx|Fl{`xYh z{}cW3|3lx!*I_FfX6@Iti?F3z>G9BLkETpHJk~yOzcePM8^s}pV$Qs2){y3p3Bpqf zM}m$aoYvIRUK<$`>}m@)uWxH?2*O*L0jj$8_Ldoj+njmkPp3tV_mnB^9dDz zS%d#W{@hgb@;^KpP~1<9P6*Nr)+`#SxGfmXg0yHrajP#%+H-#D)xr2@MGqS$A8H;y z>?VFVg!ysMiFeS6chHGvo~`xaj=IiGss-}jqP*f(P0ei$p{C}}a3s{;q(WV7UE#)t zaVp#xv96H{)zH6%>(x~s33b#);7+xv(Be=l{BDJuEsbsMB%(`6f4w%+7~;!M;)*pY zykSq$rmf8ljVi`xQ|RwdM=0Fb5vtoB3U|N>Q=wH$Y9bZ3?1{!hY_6}`5))lpQ?+bi zO-O}8ZS9?{wNV#u8h!6kW8iF0nd0?3P5hXki6==Y(pd|K)kM#bc-M2ZvB4R^8Ej=U zT8^YpeQo`QMzy{%vbA0{VZ9lO#8hcQsJgYIrL2r{Xb2f6vr09Gx7N0_b+sB1!j+BK z)`ch3w=~vvI*lqTjryb$x;miURjREWzHj?h7E--msIIHYNHi4Q(B2tA$QB)w(G*mr zLdz&idJmA} zRU0=#*5QpCO_||x7Eo3S!E`n@HPl9G*^0%G4*IS+vYpRJsBiDsPMvG3Z|zV`waqP9 zH%gr+wzju5ZtvjQ0)5_A+uB%Nzo@RPs;V5i(1Hf6T7u#xISj$xC@5A6Mn9Vxsia28 z5Nu;-bG@o>Z)u@uxom>K8laAyt?0LgMrdj){3j86q^w-BgzS2yy0NNk+=g0cE!K=} zsJ$t@CR{e&sC>uv5OpOC>C_+ss@_t&J}k}f_SyQ*+KvrX3gZB47->McBO7S5SC$*= z#a2+>rn8~N?M+RNI!$sGW)r(mBXqT?lcysmc2oLl)Gu7s(ZQa8V4#|?kZrB)4R#nJ z4l*+xfPUK0SidP0t*JZGCWCB!OM6`{x*)0;D$RO9 zu`c`$y~As)=@+Y>Y)icvZdQ3~q3%w%u=-Wdc8`s2t=$$1Hy_fdLbJJ+3~hj!LVb;n znI$qWQ$}bqG-|CEnCC&wQa`8EOZs5tx;?)&9mEv$wr0iQOBRFr>)iC z(+qtv)&;*`7diw6K`K#U%!korV+Jb1U3CyKx{=N1jyVWuGr}A`9&1%$g#*HRV==dO zV%2YLreRbz-sr6}%~1o4#3sO%K;3_?yiBI( zS;*}1z+TmqhL$c|QWF~2+z_v|-AvHLhDMa#z8#Z*YQpRf^{Ro7WK1)qX{T2a498G2 zTp#u=CFN)e3Yx$qCXh*(O^UQPSZK1a$$}BGn{zxYAZC^p{>o?w`(?1HGE;ab6_{WZ zu1Cp{<|a&twptC1bzLyS9&gIdYt~|5tGr5WiP|Tck8-#x9aYO<61KKBw!#7AATtI` z)o~)Q%-peG5#H3?u@!7sMz{i7dFV14iLmPEf}4c7(|bYN zTRj}V?X7jNsL17Jikg^-aC)}Fdb;JnLxPCeW>c`oQQ=g?$c1HPo~_S`rV0C@YBlgv z*=6;iEw%6g!q6BL2xDu_jNupI4v^!aRBv5WR~qMue6oMyW#{)e^%qOk%LeRv;n4D`j86~49NXr^^*Q3(uuH-R(Dx?Gbo?sPz zqcW>3JBgq)%r8brJ@|TsW$t zpNN8s!A2Ngkn=Qqg`Snia)|HH!}>^tsn!4P9br2dski&5hET zsoQZ2(Hy9<_&lLnEOyvw+!HtbZC!?Ov=hCMp~)gU&seguHJ*mC*rw}@7032Ihl0^g zHkl*e>vmy|ab<8l3snmStU%x89nhK;jkh%#+z-qzT_2R7Zf`cd=hX_Dil(-)_L z!Y9HhDB8&NLw#GM(`ci|{p!t8fM?l^-i2RT)7ZGFp&6q(gu3Fmjs8BzKJA_K_?pMKEst3a@5(ZAu!%-yqHUO!kN(7ynaKZ z3hsBKF%M8WF3Q8$Q&?XcY2MNZHy%#ImauhSO^4ckw07ATT>2lz-WoGf*HYUCYio_u zIAfe-rD@hR>Tn3%J%~Nt`avr6s~PT80UIiOhXLlwpRQm`n>8zR^jTZw_>=Iaiq)M zO7+$%O!HeYd72%ASObo-cyGq^r_~ihMLUAUbe-cO&=we<2jAE*QMF-vM#_HRGKZqUEzp3J<#6w;2c|{=q#|YC^maS)@!of43;f+M#G%n z$<;Cwf63wmvuImm1V=?yJG)t~rtX%@Xbs6x>vE$(;`ZB4VE4Noj+x!VwHRV%!eRBg zTgTR_3hR_ZCqj|>CP>&W2n@M9jLXVAQmcYC@qpLyYMq7L&$3(f%-mkbwud4c+PlJ- z-Pv{6b8=STXoPi4)%+y~1S?064x0NN!EvRf6H6zQjtdqp!?yE++K7!GTQ;tU{p$D{ zXb2qHI?o=IUGGph7)bPQ8tKDga2Szz49&Pw@aeX3T2+q|aAcM(n8?<4?AAm==FbQ7 z&cl`_S$xBcM%?w8jBq$-t?*ln;>+Gv>~g`(xvtuCwg5llS2$aSJ#W9o__#G;YtEdV zfwJ*fvP93>!PKnNOp~EH6}Bm~Mp)2c=U6sv+B@w=s*N5`s}X7M;`R+C6=OcjI0o%5 zaa5vYXx$3Y(O&kR%wolEFq>tE;qTd}#Oe^M2Y1;a%qEyi3MeD)D8jonK11;w!cJRF zueV|dt$O3=G`~IeoS}+hAX!5i$mq*{F=b83U||;C$MzPpoLb>j+HZxgp}>} zVuiIuINZWEr)uLo?K$;>@ZfeewMNV-i`}|~z;IsB(b5GyL5~^#gAN}yjd89+fyPf7 z#+Qy`?R4DgH7bmwj0UsM#D$+Ravt}`n$Hl|4VZbMo$zuoYsEGV+Cz84J?C&Yz++Ss zi*HQ+b|WB8X^pXWtX16bH*!@>y~`(8Su5l?%36Fb+8S-XvL1Yxn0-2^M;J#nD1-*K7k_*s zhNl_mg8LGs^NHySSSytU)gw>ABl}+D z4G*Q8yrEi9FSAs~B@NuUFtv51SWd~Bn+neEY?bofS&2@LrpM4zwAZc>%{<0qT(dMX zhS}W)hzh-|G%7i?vD*yotW$d)%h8Q=1Dh@DgWSR9*^oHV zy;v?gL2Pk{J;qjRZRaLzSi**E=N?IDRZRpwF#LDpa5>I}I~%c4U~Z0Mcp0F|>_&q& z4Cmi$EXNGF@|MOXj5&B3cFWkY;YO!iC(q8D;`2mZ8|ShRC(Kx9e~b7$o)t3giC|D; z&T6t-vCtV4g9SYg=Z)Lkpl}5ZSHesH$Lria++?A}iV>5#+1bZ_8oIKjtF=uXZm#A~ z2Q5Dpcj3s~MX|YK<}oX%o{lUwDp_=J*hXDWvs}c0--6rmjqbJcY3?cElqo;%p$E;` zEe4&t<7kg`ZME_L^bjdDzsyG5=SH+r<~%wN1=k6t(1#h4PD8zwZW zn9XTU&HV2e@#tA-IjxDa;ELS^D5nu@2stXod5#x88k9Mt$H?WP6k7u3*f65x_6!I( zZE{kfopW~0xc_u{{ zo6U{-4H(wTu&c$Qe%4N_vpFOap6jg{0h#R!vpeOU?qkQay%VmPnT?#&$f!8Xy$~FL zo9w^%Xo1cTJI3*tXmDiyH5=Md-((|v6LU7q3^Y=n1v&(X9X?rSu#b373O(Xo9O*fn zH{g(-JGbhWz8ltx*TuRZ18f(UG;XVfGT>FRNVvniFjg0aVXeo_E_>zCQHasgoz;fx z7RaR?OdZB%q0X)BbhFol?ARVFvrukff(nIs948m=cakAaEMzb#yTmsQ_IRh?O2-H zE_hbFg5%uYQ|97=%--1)JC{SFJVzyJa~Mk(8Waesr!!&WBE^oRXoZavWd>1r zJ1j~=Xlrw11BMaa6~hHO;~vraVDa1~_c6EDn?n;^=71nju`RVNU2x4f13G7>M}E}&BoCBjQAB5ZeWi#FYG za64^0=5%9WAXvL6Dz_pyH0`Yjuxj8frA7rU!)c6jMu)<>$&F{zTR0kGOR2DPi!n{k z$~cx{vTIRIZ9Hlr8pTY;#l zGg{1DdvkxrQOwcCaKH_54M!7J^$?Qr1kG2BCjvXt9B#mM6`U9wMr^+;@@_|hu?vj} z#=nt@b)VzWt>zruxl3TqK`W!om0)pyzMq~wbhKZ*cRF28gqfuaer|^&fcqw-mJ4LMwq(j1Yuo# zFUN9LleX%@mfTa`<(-j^DT4}?2do%S-Q*y-`86YX?#s-`~{TR8Wy z(VuoWnhRj_WP9Fqv8GQqTb1xxV_w7h1wFhBevPr8p}2k(nZ-!O+#ZhGCqv&fHQ|WB zym^5U=PaN+TZ+B*EH8pleiZ1BEv)Q$8>!+%Bq|?0gT(RRN*q(BCb8to?SI8ZejV0vKPt3gqkg;*b zwT~{ntC}8_`b+~Io6jw5IRN=kiRs%}K!7^_Agm85Zm(L@d z=j6v9=FmIj&0`k&v#eVLl~(gBE2jhtajB!|XWZye#kgV&2?McZWN?G?)Y;flj0WHU-@aKQQ?*Mp2Q`4PuRHna_ zYfPQdRX;;&D}JFQR&=i~O0^>ommqKoVTMoR2EGB}glsZ5@jT7z5aG5%FC9LiR1N)%(Q(^w2^G8X41Jn%N>yL@x@XMW1?-fo76wj9rVG5GTd!?J}p_}(3ba-*w<+u1p=$3ovmi!1EUrcuDx8IM@HF)Uwc7Jc} zZSm0Y&Hvu$A|ASBKSFn?hmLLPjo%IrUCocso#dh8OaHy`JIh1IKJJa~LJu8(-JmzR z%RO|feuVB19=g>(LU)sgj(yl$xp#Qz*8T|H10K52kI+5tpVAao6%QSM zYr<& z@sFR!8Ss2qECmi5`CGkOxSWBbT$lZy>_XhiUv&#L?XYx}Zt1U(WM5(0SYO zmPdY5KW;`9|ucI0&HD0X+FtPF#5JxbTp;Fg>p5$FG8BPG`Tc4Zd#W4T}=v z$x^cbQazxmq--muq#u|B2I zL_GP;j2VsctMX{Tq;qDAe*9`;G=L|+nj9DA3=;kL%`fPA!?g6#k6+PJM?Zd}A>J^h z6#e+^A75}I{EC(@`tiHcwQ+u9dA#Yg9MO;8jC^mHBRBf-n~~=YbA=lH_!XRZ&&RKp zdqR|tS6dnOjtqvqBY335>ftF8r*7*^*%xpC818^VMFSE@S>tap8$^;kj|)gAwjPzD@YI7smIoaq0A5 z`LXpcRCmRMN2#YJZ0k2h{VOJ1to))vHh-xKN|-)K9>#N-gxQmM@J#1Om_397ag-rNlR@4aSGUiP!!S8nFpOt{_R zdDGdxW!uYHgV|D#`%T%yUYF-kAGQl{}w_eZvbsMpw&MIh^13h~9%RIUG*jJ^delOJ%}*{`#7G`2W*&<-r46 z8h`L%;(FNB?x{-AxSlfD65@_C&>68O6^MvE*I;*{TDXF~ZCht4G*SuI2 zCy{Pv9hAi{FRK^n8MW=`>TC>cY3_`4)$+#a@}E53fNi1YN81qu`rwq&v(gLjr^$%0 zY10^wg-a8|pxeRlBBkga6I+P;+I>!qX`1#^V>+fC(_qG#i%1WYI83liaFQTcm~?s) zq}z?Mh*t_;CwQyiU4jn?J|Xy=;5&j}3hsrvk>4P}T){%YQo#zrX@YYE7YHs9TrRj; zuuia9utRXG;NgP57Cc$-Y{3f!FBAN|;4Ol83;sore{7cRc}nmF!B+*}6#PW+zk=Tj z2H-+5e?P%=!F>cr3XT>m6PzeGSCD^zg?wrRR|z%=whA6Dc&gwG=m_)86pSa6fzA%Z6eo-6oU!J7sD zBKWM}n}VMSYPiUzK7vC9iv_0(E)rZVxKVJs;PHaH1g{kQli&k_&j`LD_?h5$f_ZS! zS)Vb2lLY4pZWcU3@GQYA1g{gkRq#QU$;IV=i3;tg4F~N@n`@IfMBQKMS^z-J}da4U;tZ)QZA$YRjWrDvKyhrdM z!B+*}68u_F=i73#1#<<<1*Zz`FSt^$O|VPwbis24uNAym@NvOs1m73@RM1~w>(Ngz zC|DpkN3dFOqu@@#D+R9+d|2=a!S@9}6-+^2P(L#Tiv=eLt`e*jJWB9*!OH}HFZih7 zQ-bdbek|Cx$d;EbI6-il;K73Rf`<$KTJQ?NKM3-#owNSW3VtE@jo`>pHhqlX{(>t7 zw+S90c)8%!f{zJ4E%=$>SAtoiE&sg*rwYyyTrb!rc#+`cf_ns?6Z~3GkFk753yu>! zP;jl_@q(uc-XwUt;M;;93Jx4=`R*e)UvP=wHo+qVuM)gY@MXa_1XGJGzf8gLf>Q)T zf=z;l3GNU)U+_}FTLkYCd{*#fK~-YQOB5^+EEZfMcz|G+;Gu#S3SK7ou;3Gd{}TLC zaA2v(OK`g2T)}3+4#Cp|cM0Aic$eVc1>Y9zS7!NV2$l&>5?m=55?Bf-D~ zTfcsSLBV{%d4h`tTLe1=PY^s!@VA232;MFDpkUt$TV8*`y#@0G#|n-YoGDl(xWC|m zg7t#Uf?a~Y5_ z30^Dsh~N`~Zwvlg@EgI5Nw%D9!Eu6<1ZxCW32qYX6g*1sT)|5Oe=GP$!P^Ay6?{hU zCBbo%Z9V1)Rtv5YtQEXW@b`kR34S7|rdU4dfD*eH0U;BkVN2wo|8r{DvEuM55_m@v)q zPZ2BHE_k`%-GYA+d`3`LT7Job!-@T{A0#-M zh&9M;VzN?Ig4GgVOT@grN$?nAic-f3?j$1rg%aK^cmomnZXx=Vx?S*YBIqBG^gR-O zM#8U3_)Q7FM@0UQ1V5GZuOAB?#0=c)6a1Kndi@|_f0a$o6wDSZ5F9O7N!$zjUV;mW zBk>0UCA?0sLlD0>Vd!@fGnG13@J!-JrT!Ol?*boXarFVu>~6wh5=h7@go`93Vz`Bb z1PBlWLc&Gv1P~QmH_0Xhax=T(Vif_cig>NJUbNa;TQ9Y>RjakuTD5A`s%?GMw%%Xc zTD8_zYi(`o_y3=n=h z;hTgJrQWgdJ;Gz~x5&h2Sa_s`1r|;tMElIQaD|197Is;9hJ_bdc)5jNw(x5f-bENv z>RucEv4uag@L3CAwea^AzHi|_EX-VN%9UebfrW(@PPVYp!g&@hvT&`1Ct4V{u-(F) z7M^9{0Shm)@EQxhYT<1b-f7{FEc}Uu&sg}Jg|Auodkf#U@b4C8EHU-VvT(SCV=SCt z;ZzIfSh&E#6&B*R$E5#yEj+`*i!8jt!s{*khJ|-nc&~+zSokvwe`VpT7QSQQ`xbs; zVdhek|8NVBwy?s&xfa%0c!GsZ7H+k0yMP8+PYc7#OnHY`ILg8z3(G95vT%Wgi!EGd;Yk*@TG(OX=@#y>@FEK@xA1xk zzi#1oExgCVhb?^E!sjh~*}^|q_@0FyTgbB#)IT{EMl2j_;dl!xEUdP0p@qj=xZc7| z7Pea0Y2hvl_gHwq!p~WFt%YB+a3^#a=il=Qvy}QgVK#nkm=N>aTZEW@GBN-$e-sfy z|I7IZ=<^d8hCb$p^kKqUb4MqDxzGvw;SkVy@&52Y^eB$f4VLd}d){QFJ#T`x=0~qL z=d1NPOSi!ne}awQXyZ?`^e0(9Cz~_&dXvR(w)j(g;i!!Ve<|-OTb?zRPt4+xkKm#6 z(X>jh@Zpi4;Oi|Ow$}*K6`SARX8*uFBH=1R^wSa>MmI`-ood6)gy@HzHhhK+Uuwfw z*zip@{7oBv%!Z#NM1Q|(!*39x-#@b9e-fhqb2T8!7a@ckl-lrQLdXM>C|!sBBtn#D zzJ&lHZy^h%Jy1VnDe+Qogh$)(WJ1(e>JM0L!!;Hni&T36zmZ`u-DF|2g&+*zolh-frQY7CvO*qZU4A;jb-x-NN5l_^yS2u`s~)LjIW+4zZBu zZy7(*!lNxLvv8V)vn@Q%!bKJyZ{bN6o?>B(gm0&zMnFSU974dL?5E3r{`b ztor4Pv_^y2k5=g?>Nh@M5LE(7)n;{)BK0`@5tdju-a;umo+sL{j4?cy*|5|J&*aDS zGc1G)Ny2cw2!zW)po~R4W2r4+EO`Ykun^OLgk`Ma8EQ_#FcAg9R7v}+-~ZdQ-x+cC zn>v~C(}ynFuJ-=plTUE-`29yitciN_pPzj4$)j~8VFmz00z)OI0tya^?qprnMfV*` zu>M}A-~ZctSeealUl0C|)=TQme;_Z(Z^{169~@YbePDC${@#!FpZU)NYeEMW=I;4S zwmMLC>Hgjq4EwC; zrjpS9NA`yd=D_B6&VD<4@5e0H(9iD0x4$O)t1M;xs|QxR_^XBCUu}L8d4%?7oA~`_ z;JK>gSDT+P?2{#-1HCUw%(D`6p#D{%34!JX6N9Stesti>fBvfe$rs|!ybyo(h58p> z{_(HYKe_*%%@19)P|A;n_{1sYXCD}PNi)J1)xR%U+iLw`HEAAoOX#Uf?}+_1wtSDi z{lVD}>iv)Q{!udTm;G5kzo`B%Ue<3v09nY>xtVMAF+=jRf zxZrHXhY=W5p;^j_%{aYP%H?dGm)X1&?W2BpG4ok*}~Tu-Rpq>_)m+ zAs%H}WLXwuFxrV*n$O@EQzcWAF(}Z{Yy_ubW67SZS>nPJ^W|A%Bz4hvsl>RUDhnmR zIV(?f5y1>fJW*&AMjb+_J}QFg)O28hcp#SIgQF58+T6cnX*?QSD`ZvKK)3W z?~EfsJ=4R;*0nm6`bQ~Bk8yrZ-iT-xxQGI^0-u|fQ~Wqd~(CM z`L?Y@Dk-K5JghP#10!CwzIYS6Fx3hk+BzStX`p%=%SJMsS%5`8TE;E*#2E=Sxh-+4 zluEzUErFqA`r{o*mNL!52pWx=EkkUoBc0ggkm@iKt#BEon6LB{B*TIUCF@}1x}r6V`RX`oYp3~F$+^` zlVQUlOIFPcR^;dDVR}BSsd$E}$PYjw(ZRpVBAidG?OY;Lr zz7U5n8Fz}~xMG?26tzXhXma9MEhR53zBg-AJgQbq_S-;mEQ0zQ*384P7)oP;_I zd5){JL4kTO85EuXOAIgg#GTB+Su+?IoHetYAbaCi1)OxhfX%-Z5Y>Z;Yb+ob+RXFp zgNMd%MB5D>+IqWyEsqOmdriRBzYExg`57ebr2;yj7ZK`g643Qo0g0~&NIoWD`&$Bb zWWx{{JalK3fYX-?_)N2aGfoq5=6(TZT`OSEy#n_AT)^3H3OFY;lw8goA>h0U0T*l( za3C(=!ZQS1`~?Ab6k<^^c<7xxKRtNpU2y^5+b7`en+b-`enP;UQY<$H53i{sC|EcF zV_|SXUAchz4vAbmQ$kDX1T1Y8aQry}mVHIQ@`nVh_?>{2{}Ql@r+o*HS~6R}rS$?n zw_L#G%>u62C*aEO2)ODg0at%0;Pd&I8V8U1LWO`Yt`hL2Rsq-a3b^)K0bhPtz;(YD zaQ%>@nC>f+1blU&fE!u_eC-?oH-1IHHy#pj^KS**nmwH9ZYvY;?PUVKvqivnFA#9Y z*9F}9pn$tx7Vy1)2)O$w%=?2!-7{Cf_ty!yw^zUqt`czH-2#62hJgEdt7-742Z{we zxLCkLTLe6OfqiYtIH*^&4?Tk7?R|w3~JezyOsBFChaPa81F9_KBpn%TV7@>nlcbzDp`!oTk?HADV z6#>bg3E2LYfF1u9u!{$92ai6ZQoxz31?=t-u;&T^d+!#o?NGX;#CPf%R{(>NB_@>V+o!+ zQo!>w1-!5wAnSE#CY?2WBEGYq!g_EB^iF8%tvS=6z0b<|auw7~&J878Z4N1eX8H%D zTMvC2oe>IulAD2PIZ%w%#~KXPa8SPjJ%jMD;h@wc3MI8kTVtpdqO$fzTFef`TQV&+?*zK)tO*kD1m!c;^#h2#hvY2GkcU8aE80OHHDNryi}M4+yD_&Ej|^;`g3EvC zTOHKHIRO-p3OtQe*O{ncw;-Wrn&P7ZI)5eFN~;li66#Pq+=*~IW$@8!crIb^(G6z^ zSQizr;cNjXd{MxO-w|-~V*)n4B4G2!0!|rr9Fs>U2sm}VfY=EF8ao9veO5s8H3H&y z2xxg)K(Ox-lsBQQu%^R9&5uM@tIuw~#ByA7tqU(CDm7AR&6l z>v-Oe@vn#eVG`D$rp?@- z^Eaa@b!08Rna^dIM0M7?P-;5s&+Lt?3)#G*o!bhH?(ct zN=A%ci^t${x$LI~akdX-4B`|Y8Z>4n$}t4e6w*^?;_>K_EWDmIwga`iZ-ps(q22&_ z(9<+2bbce5I=yD?gQ9bQ8noePBp6h*2&Ektx(YExUt;tYlt*V4Q$F;o(;#HqNTDN_ zB0|1YF-NRE1#Oelg-o3xECdXL9XS=#s?b-WKXM+E6lSE8OqI~o&~&8cC{YeN!dz7G zY{qkL%vmUpks3q@E+VXt35^TYB5M4gw=g(#cu);^ga!@zK07pX&|8yHr;Lo}AYsEM zlOuW-#2&j3-FOG+ugJ^RdFR7PnU}-uatcr0Ty$XGFst)Ic^9K|^73sk zoVOmMEiYn&*?ChTJ$XmkU~b+UP$_vw*8_ zI4{n70op9DQePs$C3#PPwVy=K=3ir3}6%HSd!+?e-!1{d4lro49< zTw;T#=KYnyrQ8TY+UC6Hpb_$x*)ng*`zcuFtlZUiP! z98#12iU$saDIB&zHQ{LFT^6lW+4-XiKB$EEYP4xVRq&^Y2#xuIO*k&ZF_Ll0O!%-S zO+_Lzp30tuNtO4VsqC^x(IMG+cNg3XInBGrbRsM#lqT={rVm2}53|NUG-V5e2iHR5 zLagy*w!T|3#!g4XWE%W#?6E3iIb60TSDTM*9Nw!jLh z7iCg(kol4}DB*fWzelp5_VF;8lyIq|TVM_3Ug|9=^@&k=B@;;TOY(TcOTlQ=g_l%| zq(WRKX-=rQR|c5eX$!8K^f$*L{sC_rm22L=KXQUJX9<^6nroHZah}#t!??cEi!%}b zXLPL5&0K8hE6DII%h1zkT!QHjr-1Wv;cWFbmt>k3W^%7J(ZZ^jOEi5X#o)SBw8>@| z*KPXum>_e%=*ZMCF5>i2P{+B`wW*&>8mffLI(;q_ZtiSPCC!W?rDG?la(yjj;#<-c z#a#U9E6D7=lmMs_E(SHxWX%c;8p#U%yp%;5@35;{m_{2kIV?KF~R9Ekx@F_pz0 z#2Uf=Wo<$k<+=p|Hu9bmSmk25c0Cs(XylLNF~a-a@}&m-1!hz@RJ8h~e8(G2t5;9QP#gI;m6=@_^HDlHA|=SU9>z)} zN>gDF?UvA>5;~3a%jn9;cufPvn$jg_Fn)U`;vWl`c*dZBv|UTSM(k&a{arwwBm6d& zwxzoT5rh5)fedAo&vgBxL5>S?^;1OZ68f$*->wm9 zv2;vtr$KtO^xta{?(`zb3EGa1E`XDQ*Tu(btR^Q$kQgS85K-K@#(Fq9JH>xnx^Hr<|S($3x`#zKu&)o&FH=A9=}xR3-G?=~`yL%eIJ=QVM7r zjeb4dgx-#P)sjfRSS;Orn(tbOd|(+!->1H- z5V&*u@T5aj*JBMBd5vA=NwO{hx75Eriot~6kjw=^xIF@TtP$$XNulVoNj>(t6u$#An%fN#sdMZ?z8BfMTfjSHSS5BU_)z!bAq3ppRQ$O`#d? zr4SJ}Jm~(`H!K82(lbJ!ROt}cCv#j~n}#T+i(H4Pke)Hck}{K}DyH9DA4$P~(}N>{ zDyB1C^BP6ummZu+M-RJxkow|n4^GmR(Ce=E%m6Oa*1^rth-S%3Qe<H@^Np%W#`Mt-sEmN)P{ig)kn*G!-0~gA*Oi94auD z@B_3RYE0aOLTW1Q`X3A7HbdBM>>5khVL~8`pcx+lVeXh6hHxj#=5pL+LSa>U9Ok|; z9|sCSKQ1&L-_yCzzzmHOjGi!6vKDdrpA$g3)Aku-kYXdij1q1}=tfYExk#IV#c4~G zaCbttGX8TOJ6@G=yF#}!{%UO&m4=@C7kX$t;s*sijyUngQL4;vXWi6HZgR+qXUy23 zw6L)vSaLOtTOYb?JQ$sfRUTQX5_u8H9O#)bSJ=g<$&?!-`kz=ojVTJUBXopCk}p-l z?GpWU$jF#2L9+JD-l~L~D7p=?W0GFY=}y_Ig!?P{222xU+HG=5p|PxFm<;3Ai{1y- zJtjM7N@^-8)s>o7>YvXA`Y)yhOSn6u&&)*3i2>6_u8%+ssCZe^Ky?!-;sm(owku=GL%6gO;EypBb_xJ6kWEF-04yc<2I6>g%LjHBJ`y6ZV5M& z^m9-?V~z@%A;)i3!rdi30TacT(x86@T*A#J{X9kDdOJ={`MCR}Z-t&3bEYTWTX*hO z>1oG-;%qy9{dMQomA;tmw^^H6!=+FqmlOFYhgp+0N+gA>7N2#sIKl@FgF?}P3|=%W zDPm1$-4H@d;r!X}7Ahqx{9`KT{EF;)Ad$x`(D_7YHRmsG+(H`{`2ZL-C!6@YAYI2S zu?XvwubDzj4Ze<9c2cEMY;m3c2_qvcu&P<<609tOK(WjY!54%eNrH#TyWw6ezYGT{ zkO-cr4>k8HQcXh+$83&ZzH^EvJuLEB^IcNhIvW(R+;Syvu(lbgxz7@}Zys>1_xMvw zDUQ=;i~x4qbMw=AQ?$R2VpfO#0TxAk94C*nPr;OVGu!ppid;rRC+az6h}0J%pYbuB zPYN{ZVmGeI#+m)Xk$O8;C*#{}q_fL0F2wD}>d;nv7xA%(J6uKIMpolO^gqw$4Sw!v zhK{YC_XPA%I7^R*RLRADJ)ieu!$UPGQKVqj0}xf6bwwS%7d+3Rj5-Pnr z&Tj%ktrq;l#U7(P6?TrUg6t%LOEH*1><^Cuwou;(2He_9 zVb>A+wH#new7dk&i>>V>mhX5Am+EQg1f-LU)q<;t`8E_nc&Z)+eY`@YxEcweOsU!* zk?v{qe|V-o&QmT!Lm4ryhXubU;U-Xo=jr=E-dQCQ&jC$ zB;i&2aIaoACq=?0j_^y>e%~e8rN6NtMKXva{8F_qx+G`nKL=AJQf7XsT6tZOWVBcJ zAi^n&)W|e+DVjvLXJYT+LH%_Ilhak6hBj5NCE=B*bLpM>D9O(D=|X+~k*LZ6eLv<& z9C-qZVOvSO7i;8jAnf%0oU@(C()(?k89Q^XaS`8h5PQH!&H0gwc-V_bl}*k0y-V_R z|0Fh#Be3|B5|#eip>zAyl9ak6uceX5fq*&7T|cH36{>`-)dgIJs0(J*hpRL_FW=(qkY2b0;f&&A+y*joL9mp1}=db@TOc;Mr0|5ZfQqg67;^) zL2f^*MavzMa569l%Gpbz>e`5Hq|Q7eFmINR`*}nLFvLp#SN{U0Nm|lH*ArWbqKB^z zRG~H9Cj220e7|A%%Yk7S)pA6_YWccXhfG?fk8@% z;bFSRP}GkjMJ%bpzYGk8M()F+exXC~yTGFUIMl@@56pkzzXtX|1p5m2c`n7j1Fxg* zUJ4`JH@g&rf-SY_6h^o?JL*5eXeeE(|AJ2U@-Rc_Z!X12`WD{+A%#b8)Ezy+;Z~;k z)(9^*S23u%`3_mQGI$53R6m)jYjr3}$LNJgu zLEZlLMrJw>Q?*|>1mR@xYDkth7k}0M?$DMF(tL4?m)29YQRpzqGkj_AA1INZOx4x8 z6xRm>utU8Ro~msn*>Fr!;U5MY3-N5lOQy3FUEO6a-HX9LL1z1~GgW=iC3`>M{s^#7 zDP5V&BSw5LAz1|DCwy|K6JC@)Ig_QT`;JStEp%bHFE>^9f=h8$=*#7ODU1bC7lQj< ze-EQE{Ke4cP^^CQiX>K=1x{}L+H12Ok>!v}7HP{v< zMizEubog{ss=n@%s$1kHI45JxfQ^|lMi=a4g4ZBzr56PFvT4>~08`S8hXuDV#of^K zrB??A%^xsDsuLDJ!xZHxe(8e^X^gPCf0F7hh-2vkfw?Hj3P_VPB}yAg z0)DAQBVius4~BsD1D)lW%~^U?HHRI^NzA-yNSYnG zc0Q2*&iK&?Y$Iaka8q7Ol{2X*Bwpj%rrH`hJv(1u55J`zf&b=9D%d)p-| z%?zPB{jyYb!>BDJ=hp%=U@3UXsHAMBvqY(&1;dLnx54o6l6f+XJ7lHr2R@#bPUf%2 zg$`}FG4oDeJzQEs+#LXLiE1<7Me7;Acp7EWW}&%sjCqoy=3fZ#ZP7rNJLS zTD;u+1$@e(4gV_hf}8{U7 zxg^U_`sLtLsF61nE3WFwq3@)WrMCs|gj9GbQe_a@C5G<);PKFx1Jjx6t0K1ExKJDT z7qNxLh0Hfi>FSXACbC-MXFr6;+knarUtX{atrfn4>EZb*xHAKxD@`a=a07H)_$rR78$SXVi#oPlzO+$K!}cnzTLL91V*A*mIHS36b6vHii|4Dc>%QAzTE3d!& z_Y~kBls6UT)3v76+;fwWX9MB_W1t?s!s-Wg-6e*JNu8 zA>NNgbwsX*xR>6dBY|W{})}cn>_kL2HRt&X7{{r@E>E^(3ki0(Sqj2H4C!39Z zYmcXn3w;q0MU;lwUxf8B8=W62uRDG{#J{|432+Cb2i5TrRH}SyG4zOu(Z}<|L;1EB zv7$3Ef#ZJ#F)43fR_DZoj^|06@(#$5r3oLu7-cN)d>xa7NtJti$4ta@jX`Ufn8IbT z_I6c%+H#B|6EiRC*ZHXS{F~7#wirNdw zDW9l6f;e7pss4@iDmNk=ll;simeL6rP&zayNzU&~F!fZ-$n5#LP({XY;2dDW{) zyh0yKIT)!g#5j{8uAD_`Y2CT#57WL8cB@*Y$6%C{&(}{t9)o(7emWb$g}NA(4C)0* zCM=?$Ez+BY8&wHwRoZE_rny|cRG(WQRT^?a~@NX|uwNb=H6`6K%3Lif^5?NOjN9r9ECWylsP zC%2a(%|NKNqP8Gkb`PAm+f7C{utKj@MKv({*CJhd+2j?&1u>X^-O*lCJ$&m=Z zXYtv=`ExkB{;av}7%0vS4!;Z;m;Xh_paVvO2M6G2vV32UfSv3_?Jq{u2l{O=bE5d` zFXeyL_h95YQF$C#ALxh_t!Rkbxl$*|22j6&+PQmF+e5go%IDnBaF4k6-b zb4XO}ZesH}6pI3vplKaUWC^PzLSFk-(%cvTO-W$VC_l|K5UScoNHd)sactlTm|E$4 zC~2zpEz*38nto#73`o06Lv$pMd{%3|g{XX5fX9_xJW;0kAe#(~3k}D2(Y27y$?Qxr zSf?hlDEwOof@%^lzB;s!kG*&tCy(PoyeyS*IwWXpEw{uoeuCB+``A{HjSF>?IEq+% zUUCrWLW7EVLrvd{8jL-Yt)e4xXs7r)jHa}VJ=+`28*KWB@rb_N8_gSS`fhxUJ=Yt} z8*X|dhQe66e_?n>)*)6E4?~w}{uI<$Icw|W%WH6Y*L+0FQCcUO*W&b*_!@h;Hv?Xi z)2~5KkF_V$OyPNLPQQi@8T%zKHLuZW%`C6?M)O*oo&kM2_C{|sui5Er=*qFTc%ymk zPT!Y<=(m}ftrKtksbb#6(>Jjho=M?UG4JNd#h%ta~7yKK)vg#D{|(&IZdgmFXY?L6^#yTY^qS=hfP++qCY&Ca-vIHQaE6>lf$|Ov`yRRf0z+iNdARy0 zq-vPFh*%;oa3UjX!9~^mk>u2!6Rr+S3^@*edMdQ4I|99`Pex}=_)=gmN^T4?i#(Rd z+Yme9xoK5iDZUjte#M z(ZrhXBqK1URmRMtVesaigK*aSXc1i_eD`oTj&I0i zG}nuBMkCTa?Li7O^K>_^39`H#Euvp-2UY&oX!Tp?p+WAP=`cP0Q z=H=k#yhYrXih$c{d6`1b2{WxAIvs@co7@wgGmh9o=)BDB7VAjPLSkM;i8FU!jw#yo zyA;xN=-fC7eg{pQxo;RojKe(D<%2V?BYOby0_Z{+0a$$i))dWVTC52H+%g1R5g%v2 zyHqLOj?T`!E|(G1iF2M}jz5K^l=(Og4}rpV%$z^Fi02)I)RD4do8gFhCoMMeP1+B@ zK@B^Gh)c4;bSO+)!8lE@h$z}Y6FC2>%HZ#60TVCUlv7dRBetJqea?!Vl)s@iTjiNQ(67KIGmAfy^W2QZKyv$iV*N2=(s`@8V~OPCllh9~I+q&J zo4cx8>QcO`-$dt7pme_QHlv_+3n|*5S~EY;{GB_@%N}(7exhSZl{qNzcg#P1a;U$> zAt(rZ4OQ)vLEWPy(8xElBrq1O?qQ+o-f)qV11mGrlH(A-5~O^e4O11k{}^A&qg`Z8 zASdKYDKG5i^p?3eaNT@o@XOdxbsL#dkjnx?pc%}RVcL7qb|Sgqoq1B=+ehHpju+A5 zi!LE{a2VLG!08Y#M<{FVB7&RA6E}y^%pOsX@Ht|VzvNJ5UKWtwy0FZJBsJ!0{!Kb= zx=!rOfQ0+GshSee9V9sYW=MsfK=M?JYDvX?qRf{9FQbW^x=;_OMJE%>qZ^s;1U>^+ zPF>dTCgR)ZsfoAV3&Ddx7