From 6464f31e2597488710a5e5fc5b31e09476ef0318 Mon Sep 17 00:00:00 2001 From: legrand Date: Thu, 8 Nov 2007 08:55:17 +0000 Subject: [PATCH] fill new tag git-svn-id: svn://scm.gforge.inria.fr/svnroot/paradiseo@768 331e1502-861f-0410-8da2-ba01fb791d7f --- .../paradiseo-peo/AUTHORS | 3 + .../paradiseo-peo/CMakeLists.txt | 161 ++++++ .../paradiseo-peo/README | 80 +++ .../paradiseo-peo/doc/CMakeLists.txt | 26 + .../doc/html/Lesson1_2main_8cpp-source.html | 136 +++++ .../doc/html/Lesson2_2main_8cpp-source.html | 168 ++++++ .../doc/html/Lesson3_2main_8cpp-source.html | 217 ++++++++ ...onParallelAlgorithm_2main_8cpp-source.html | 366 ++++++++++++ .../paradiseo-peo/doc/html/README-source.html | 107 ++++ .../paradiseo-peo/doc/html/annotated.html | 76 +++ .../doc/html/city__swap_8cpp-source.html | 78 +++ .../doc/html/city__swap_8h-source.html | 81 +++ .../doc/html/classCommunicable-members.html | 48 ++ .../doc/html/classCommunicable.html | 98 ++++ .../doc/html/classCommunicable.png | Bin 0 -> 4386 bytes .../doc/html/classCommunicator-members.html | 46 ++ .../doc/html/classCommunicator.html | 59 ++ .../doc/html/classCommunicator.png | Bin 0 -> 472 bytes .../doc/html/classCooperative-members.html | 53 ++ .../doc/html/classCooperative.html | 70 +++ .../doc/html/classCooperative.png | Bin 0 -> 926 bytes .../html/classDisplayBestRoute-members.html | 47 ++ .../doc/html/classDisplayBestRoute.html | 64 +++ .../doc/html/classDisplayBestRoute.png | Bin 0 -> 631 bytes .../doc/html/classMergeRouteEval-members.html | 42 ++ .../doc/html/classMergeRouteEval.html | 57 ++ .../doc/html/classMergeRouteEval.png | Bin 0 -> 869 bytes .../doc/html/classReactiveThread-members.html | 45 ++ .../doc/html/classReactiveThread.html | 67 +++ .../doc/html/classReactiveThread.png | Bin 0 -> 633 bytes .../doc/html/classRingTopology-members.html | 41 ++ .../doc/html/classRingTopology.html | 55 ++ .../doc/html/classRingTopology.png | Bin 0 -> 356 bytes .../doc/html/classRunner-members.html | 62 +++ .../paradiseo-peo/doc/html/classRunner.html | 86 +++ .../paradiseo-peo/doc/html/classRunner.png | Bin 0 -> 996 bytes .../doc/html/classService-members.html | 62 +++ .../paradiseo-peo/doc/html/classService.html | 103 ++++ .../paradiseo-peo/doc/html/classService.png | Bin 0 -> 2743 bytes .../doc/html/classThread-members.html | 42 ++ .../paradiseo-peo/doc/html/classThread.html | 73 +++ .../paradiseo-peo/doc/html/classThread.png | Bin 0 -> 1445 bytes .../doc/html/classTopology-members.html | 40 ++ .../paradiseo-peo/doc/html/classTopology.html | 62 +++ .../paradiseo-peo/doc/html/classTopology.png | Bin 0 -> 359 bytes .../doc/html/classWorker-members.html | 68 +++ .../paradiseo-peo/doc/html/classWorker.html | 94 ++++ .../paradiseo-peo/doc/html/classWorker.png | Bin 0 -> 624 bytes .../paradiseo-peo/doc/html/classes.html | 50 ++ .../doc/html/classpeoAggEvalFunc-members.html | 41 ++ .../doc/html/classpeoAggEvalFunc.html | 70 +++ .../doc/html/classpeoAggEvalFunc.png | Bin 0 -> 1346 bytes .../html/classpeoAsyncIslandMig-members.html | 74 +++ .../doc/html/classpeoAsyncIslandMig.html | 305 ++++++++++ .../doc/html/classpeoAsyncIslandMig.png | Bin 0 -> 1332 bytes .../doc/html/classpeoEA-members.html | 69 +++ .../paradiseo-peo/doc/html/classpeoEA.html | 236 ++++++++ .../paradiseo-peo/doc/html/classpeoEA.png | Bin 0 -> 637 bytes .../html/classpeoNoAggEvalFunc-members.html | 42 ++ .../doc/html/classpeoNoAggEvalFunc.html | 68 +++ .../doc/html/classpeoNoAggEvalFunc.png | Bin 0 -> 946 bytes .../doc/html/classpeoParaPopEval-members.html | 73 +++ .../doc/html/classpeoParaPopEval.html | 411 ++++++++++++++ .../doc/html/classpeoParaPopEval.png | Bin 0 -> 772 bytes .../classpeoParaSGATransform-members.html | 75 +++ .../doc/html/classpeoParaSGATransform.html | 115 ++++ .../doc/html/classpeoParaSGATransform.png | Bin 0 -> 1640 bytes ...sspeoParallelAlgorithmWrapper-members.html | 65 +++ .../classpeoParallelAlgorithmWrapper.html | 79 +++ .../html/classpeoParallelAlgorithmWrapper.png | Bin 0 -> 837 bytes .../doc/html/classpeoPopEval-members.html | 61 ++ .../doc/html/classpeoPopEval.html | 69 +++ .../doc/html/classpeoPopEval.png | Bin 0 -> 1211 bytes .../doc/html/classpeoSeqPopEval-members.html | 63 +++ .../doc/html/classpeoSeqPopEval.html | 142 +++++ .../doc/html/classpeoSeqPopEval.png | Bin 0 -> 776 bytes .../html/classpeoSeqTransform-members.html | 67 +++ .../doc/html/classpeoSeqTransform.html | 163 ++++++ .../doc/html/classpeoSeqTransform.png | Bin 0 -> 1532 bytes .../html/classpeoSyncIslandMig-members.html | 75 +++ .../doc/html/classpeoSyncIslandMig.html | 310 +++++++++++ .../doc/html/classpeoSyncIslandMig.png | Bin 0 -> 1161 bytes .../html/classpeoSyncMultiStart-members.html | 79 +++ .../doc/html/classpeoSyncMultiStart.html | 418 ++++++++++++++ .../doc/html/classpeoSyncMultiStart.png | Bin 0 -> 1291 bytes ...classpeoSynchronousMultiStart-members.html | 74 +++ .../html/classpeoSynchronousMultiStart.html | 139 +++++ .../html/classpeoSynchronousMultiStart.png | Bin 0 -> 714 bytes .../doc/html/classpeoTransform-members.html | 64 +++ .../doc/html/classpeoTransform.html | 65 +++ .../doc/html/classpeoTransform.png | Bin 0 -> 1805 bytes .../doc/html/comm_8cpp-source.html | 124 +++++ .../doc/html/comm_8h-source.html | 88 +++ .../doc/html/communicable_8cpp-source.html | 127 +++++ .../doc/html/communicable_8h-source.html | 104 ++++ .../doc/html/coop_8cpp-source.html | 99 ++++ .../doc/html/cooperative_8h-source.html | 98 ++++ .../doc/html/core_2runner_8cpp-source.html | 161 ++++++ .../doc/html/core_2service_8cpp-source.html | 115 ++++ .../doc/html/data_8cpp-source.html | 155 ++++++ .../doc/html/data_8h-source.html | 75 +++ .../doc/html/display_8cpp-source.html | 174 ++++++ .../doc/html/display_8h-source.html | 73 +++ .../display__best__route_8cpp-source.html | 79 +++ .../html/display__best__route_8h-source.html | 89 +++ .../doc/html/doclsn_8h-source.html | 527 ++++++++++++++++++ .../paradiseo-peo/doc/html/doxygen.css | 358 ++++++++++++ .../paradiseo-peo/doc/html/doxygen.png | Bin 0 -> 1281 bytes .../doc/html/edge__xover_8cpp-source.html | 175 ++++++ .../doc/html/edge__xover_8h-source.html | 99 ++++ .../doc/html/eoPop__comm_8h-source.html | 89 +++ .../doc/html/eoVector__comm_8h-source.html | 95 ++++ .../doc/html/exampleA_8cpp-source.html | 135 +++++ .../doc/html/exampleB_8cpp-source.html | 141 +++++ .../doc/html/exampleC_8cpp-source.html | 195 +++++++ .../doc/html/exampleD_8cpp-source.html | 138 +++++ .../doc/html/exampleE_8cpp-source.html | 146 +++++ .../paradiseo-peo/doc/html/files.html | 153 +++++ .../paradiseo-peo/doc/html/ftv2blank.png | Bin 0 -> 174 bytes .../paradiseo-peo/doc/html/ftv2doc.png | Bin 0 -> 255 bytes .../doc/html/ftv2folderclosed.png | Bin 0 -> 259 bytes .../paradiseo-peo/doc/html/ftv2folderopen.png | Bin 0 -> 261 bytes .../paradiseo-peo/doc/html/ftv2lastnode.png | Bin 0 -> 233 bytes .../paradiseo-peo/doc/html/ftv2link.png | Bin 0 -> 358 bytes .../paradiseo-peo/doc/html/ftv2mlastnode.png | Bin 0 -> 160 bytes .../paradiseo-peo/doc/html/ftv2mnode.png | Bin 0 -> 194 bytes .../paradiseo-peo/doc/html/ftv2node.png | Bin 0 -> 235 bytes .../paradiseo-peo/doc/html/ftv2plastnode.png | Bin 0 -> 165 bytes .../paradiseo-peo/doc/html/ftv2pnode.png | Bin 0 -> 200 bytes .../paradiseo-peo/doc/html/ftv2vertline.png | Bin 0 -> 229 bytes .../paradiseo-peo/doc/html/functions.html | 245 ++++++++ .../doc/html/functions_func.html | 171 ++++++ .../doc/html/functions_vars.html | 161 ++++++ .../paradiseo-peo/doc/html/hierarchy.html | 129 +++++ .../paradiseo-peo/doc/html/index.html | 8 + .../paradiseo-peo/doc/html/installdox | 117 ++++ .../paradiseo-peo/doc/html/main.html | 111 ++++ .../html/merge__route__eval_8cpp-source.html | 74 +++ .../html/merge__route__eval_8h-source.html | 81 +++ .../doc/html/mess_8cpp-source.html | 294 ++++++++++ .../doc/html/mess_8h-source.html | 88 +++ .../doc/html/messaging_8h-source.html | 161 ++++++ .../paradiseo-peo/doc/html/mix_8h-source.html | 81 +++ .../doc/html/namespacemembers.html | 51 ++ .../doc/html/namespacemembers_func.html | 49 ++ .../doc/html/namespacemembers_vars.html | 47 ++ .../paradiseo-peo/doc/html/namespacepeo.html | 65 +++ .../paradiseo-peo/doc/html/namespaces.html | 37 ++ .../doc/html/node_8cpp-source.html | 87 +++ .../doc/html/node_8h-source.html | 53 ++ .../doc/html/opt__route_8cpp-source.html | 164 ++++++ .../doc/html/opt__route_8h-source.html | 80 +++ .../doc/html/order__xover_8cpp-source.html | 121 ++++ .../doc/html/order__xover_8h-source.html | 84 +++ .../doc/html/paradiseo_8h-source.html | 70 +++ .../doc/html/param_8cpp-source.html | 50 ++ .../doc/html/param_8h-source.html | 43 ++ .../html/part__route__eval_8cpp-source.html | 87 +++ .../doc/html/part__route__eval_8h-source.html | 88 +++ .../partial__mapped__xover_8cpp-source.html | 118 ++++ .../partial__mapped__xover_8h-source.html | 84 +++ .../doc/html/peoAggEvalFunc_8h-source.html | 77 +++ .../doc/html/peoAsyncIslandMig_8h-source.html | 217 ++++++++ .../doc/html/peoEA_8h-source.html | 156 ++++++ .../doc/html/peoNoAggEvalFunc_8h-source.html | 86 +++ .../doc/html/peoParaPopEval_8h-source.html | 254 +++++++++ .../html/peoParaSGATransform_8h-source.html | 212 +++++++ ...peoParallelAlgorithmWrapper_8h-source.html | 142 +++++ .../doc/html/peoPopEval_8h-source.html | 80 +++ .../doc/html/peoSeqPopEval_8h-source.html | 100 ++++ .../doc/html/peoSeqTransform_8h-source.html | 108 ++++ .../doc/html/peoSyncIslandMig_8h-source.html | 245 ++++++++ .../doc/html/peoSyncMultiStart_8h-source.html | 209 +++++++ .../peoSynchronousMultiStart_8h-source.html | 298 ++++++++++ .../doc/html/peoTransform_8h-source.html | 79 +++ .../paradiseo-peo/doc/html/peo_8h-source.html | 96 ++++ .../doc/html/peo__debug_8cpp-source.html | 134 +++++ .../doc/html/peo__debug_8h-source.html | 79 +++ .../doc/html/peo__fin_8cpp-source.html | 81 +++ .../doc/html/peo__fin_8h-source.html | 74 +++ .../doc/html/peo__init_8cpp-source.html | 94 ++++ .../doc/html/peo__init_8h-source.html | 78 +++ .../doc/html/peo__param_8cpp-source.html | 82 +++ .../doc/html/peo__param_8h-source.html | 74 +++ .../doc/html/peo__run_8cpp-source.html | 76 +++ .../doc/html/peo__run_8h-source.html | 74 +++ .../doc/html/reac__thread_8cpp-source.html | 93 ++++ .../doc/html/reac__thread_8h-source.html | 92 +++ .../doc/html/recv_8cpp-source.html | 169 ++++++ .../doc/html/recv_8h-source.html | 71 +++ .../doc/html/ring__topo_8cpp-source.html | 82 +++ .../doc/html/ring__topo_8h-source.html | 81 +++ .../html/rmc_2mpi_2runner_8cpp-source.html | 90 +++ .../html/rmc_2mpi_2service_8cpp-source.html | 87 +++ .../doc/html/rmc_8cpp-source.html | 103 ++++ .../paradiseo-peo/doc/html/rmc_8h-source.html | 75 +++ .../doc/html/route_8cpp-source.html | 78 +++ .../doc/html/route_8h-source.html | 77 +++ .../doc/html/route__eval_8cpp-source.html | 71 +++ .../doc/html/route__eval_8h-source.html | 80 +++ .../doc/html/route__init_8cpp-source.html | 80 +++ .../doc/html/route__init_8h-source.html | 80 +++ .../doc/html/runner_8h-source.html | 115 ++++ .../doc/html/scheduler_8cpp-source.html | 135 +++++ .../doc/html/scheduler_8h-source.html | 89 +++ .../doc/html/schema_8cpp-source.html | 192 +++++++ .../doc/html/schema_8h-source.html | 96 ++++ .../paradiseo-peo/doc/html/search.idx | Bin 0 -> 422353 bytes .../paradiseo-peo/doc/html/search.php | 382 +++++++++++++ .../doc/html/send_8cpp-source.html | 173 ++++++ .../doc/html/send_8h-source.html | 79 +++ .../doc/html/service_8h-source.html | 107 ++++ .../html/src_2rmc_2mpi_2node_8cpp-source.html | 115 ++++ .../html/src_2rmc_2mpi_2node_8h-source.html | 81 +++ .../src_2rmc_2mpi_2param_8cpp-source.html | 78 +++ .../html/src_2rmc_2mpi_2param_8h-source.html | 71 +++ .../doc/html/structNode-members.html | 42 ++ .../paradiseo-peo/doc/html/structNode.html | 62 +++ ...uctRandomExplorationAlgorithm-members.html | 41 ++ .../structRandomExplorationAlgorithm.html | 61 ++ .../doc/html/structSEND__REQUEST-members.html | 40 ++ .../doc/html/structSEND__REQUEST.html | 56 ++ ...mWrapper_1_1AbstractAlgorithm-members.html | 39 ++ ...AlgorithmWrapper_1_1AbstractAlgorithm.html | 61 ++ ...lAlgorithmWrapper_1_1AbstractAlgorithm.png | Bin 0 -> 1591 bytes ...AlgorithmWrapper_1_1Algorithm-members.html | 42 ++ ...ParallelAlgorithmWrapper_1_1Algorithm.html | 70 +++ ...oParallelAlgorithmWrapper_1_1Algorithm.png | Bin 0 -> 1055 bytes ...1AlgorithmType_00_01void_01_4-members.html | 41 ++ ...ithm_3_01AlgorithmType_00_01void_01_4.html | 67 +++ ...rithm_3_01AlgorithmType_00_01void_01_4.png | Bin 0 -> 1000 bytes ...1AbstractAggregationAlgorithm-members.html | 39 ++ ...Start_1_1AbstractAggregationAlgorithm.html | 64 +++ ...iStart_1_1AbstractAggregationAlgorithm.png | Bin 0 -> 2011 bytes ...ltiStart_1_1AbstractAlgorithm-members.html | 39 ++ ...ronousMultiStart_1_1AbstractAlgorithm.html | 63 +++ ...hronousMultiStart_1_1AbstractAlgorithm.png | Bin 0 -> 1204 bytes ...ultiStart_1_1AbstractDataType-members.html | 39 ++ ...hronousMultiStart_1_1AbstractDataType.html | 64 +++ ...chronousMultiStart_1_1AbstractDataType.png | Bin 0 -> 1120 bytes ...Start_1_1AggregationAlgorithm-members.html | 41 ++ ...ousMultiStart_1_1AggregationAlgorithm.html | 68 +++ ...nousMultiStart_1_1AggregationAlgorithm.png | Bin 0 -> 1328 bytes ...ronousMultiStart_1_1Algorithm-members.html | 41 ++ ...peoSynchronousMultiStart_1_1Algorithm.html | 68 +++ ...tpeoSynchronousMultiStart_1_1Algorithm.png | Bin 0 -> 1196 bytes ...hronousMultiStart_1_1DataType-members.html | 41 ++ ...tpeoSynchronousMultiStart_1_1DataType.html | 65 +++ ...ctpeoSynchronousMultiStart_1_1DataType.png | Bin 0 -> 1119 bytes ...tart_1_1NoAggregationFunction-members.html | 39 ++ ...usMultiStart_1_1NoAggregationFunction.html | 60 ++ ...ousMultiStart_1_1NoAggregationFunction.png | Bin 0 -> 1202 bytes .../doc/html/t-peo_8cpp-source.html | 83 +++ .../paradiseo-peo/doc/html/tab_b.gif | Bin 0 -> 35 bytes .../paradiseo-peo/doc/html/tab_l.gif | Bin 0 -> 706 bytes .../paradiseo-peo/doc/html/tab_r.gif | Bin 0 -> 2585 bytes .../paradiseo-peo/doc/html/tabs.css | 102 ++++ .../doc/html/tags_8h-source.html | 81 +++ .../doc/html/thread_8cpp-source.html | 138 +++++ .../doc/html/thread_8h-source.html | 105 ++++ .../doc/html/topology_8cpp-source.html | 77 +++ .../doc/html/topology_8h-source.html | 90 +++ .../paradiseo-peo/doc/html/tree.html | 336 +++++++++++ ...rial_2examples_2tsp_2node_8cpp-source.html | 134 +++++ ...torial_2examples_2tsp_2node_8h-source.html | 83 +++ ...ial_2examples_2tsp_2param_8cpp-source.html | 80 +++ ...orial_2examples_2tsp_2param_8h-source.html | 71 +++ .../doc/html/two__opt_8cpp-source.html | 77 +++ .../doc/html/two__opt_8h-source.html | 82 +++ .../two__opt__incr__eval_8cpp-source.html | 81 +++ .../html/two__opt__incr__eval_8h-source.html | 80 +++ .../doc/html/two__opt__init_8cpp-source.html | 71 +++ .../doc/html/two__opt__init_8h-source.html | 81 +++ .../doc/html/two__opt__next_8cpp-source.html | 84 +++ .../doc/html/two__opt__next_8h-source.html | 81 +++ .../doc/html/two__opt__rand_8cpp-source.html | 78 +++ .../doc/html/two__opt__rand_8h-source.html | 81 +++ .../doc/html/worker_8cpp-source.html | 150 +++++ .../doc/html/worker_8h-source.html | 107 ++++ .../doc/html/xml__parser_8cpp-source.html | 132 +++++ .../doc/html/xml__parser_8h-source.html | 79 +++ .../paradiseo-peo/doc/latex/FreeSans.ttf | Bin 0 -> 22932 bytes .../paradiseo-peo/doc/latex/Makefile | 17 + .../paradiseo-peo/doc/latex/annotated.tex | 41 ++ .../doc/latex/classCommunicable.eps | 257 +++++++++ .../doc/latex/classCommunicable.pdf | Bin 0 -> 1773 bytes .../doc/latex/classCommunicable.tex | 87 +++ .../doc/latex/classCommunicator.eps | 203 +++++++ .../doc/latex/classCommunicator.pdf | Bin 0 -> 1400 bytes .../doc/latex/classCommunicator.tex | 36 ++ .../doc/latex/classCooperative.eps | 209 +++++++ .../doc/latex/classCooperative.pdf | Bin 0 -> 1478 bytes .../doc/latex/classCooperative.tex | 54 ++ .../doc/latex/classDisplayBestRoute.eps | 209 +++++++ .../doc/latex/classDisplayBestRoute.pdf | Bin 0 -> 1501 bytes .../doc/latex/classDisplayBestRoute.tex | 44 ++ .../doc/latex/classMergeRouteEval.eps | 209 +++++++ .../doc/latex/classMergeRouteEval.pdf | Bin 0 -> 1396 bytes .../doc/latex/classMergeRouteEval.tex | 31 ++ .../doc/latex/classReactiveThread.eps | 209 +++++++ .../doc/latex/classReactiveThread.pdf | 76 +++ .../doc/latex/classReactiveThread.tex | 49 ++ .../doc/latex/classRingTopology.eps | 197 +++++++ .../doc/latex/classRingTopology.pdf | Bin 0 -> 1290 bytes .../doc/latex/classRingTopology.tex | 31 ++ .../paradiseo-peo/doc/latex/classRunner.eps | 215 +++++++ .../paradiseo-peo/doc/latex/classRunner.pdf | Bin 0 -> 1433 bytes .../paradiseo-peo/doc/latex/classRunner.tex | 80 +++ .../paradiseo-peo/doc/latex/classService.eps | 241 ++++++++ .../paradiseo-peo/doc/latex/classService.pdf | Bin 0 -> 1897 bytes .../paradiseo-peo/doc/latex/classService.tex | 100 ++++ .../paradiseo-peo/doc/latex/classThread.eps | 227 ++++++++ .../paradiseo-peo/doc/latex/classThread.pdf | Bin 0 -> 1528 bytes .../paradiseo-peo/doc/latex/classThread.tex | 54 ++ .../paradiseo-peo/doc/latex/classTopology.eps | 197 +++++++ .../paradiseo-peo/doc/latex/classTopology.pdf | Bin 0 -> 1288 bytes .../paradiseo-peo/doc/latex/classTopology.tex | 44 ++ .../paradiseo-peo/doc/latex/classWorker.eps | 209 +++++++ .../paradiseo-peo/doc/latex/classWorker.pdf | Bin 0 -> 1477 bytes .../paradiseo-peo/doc/latex/classWorker.tex | 94 ++++ .../doc/latex/classpeoAggEvalFunc.eps | 215 +++++++ .../doc/latex/classpeoAggEvalFunc.pdf | 72 +++ .../doc/latex/classpeoAggEvalFunc.tex | 39 ++ .../doc/latex/classpeoAsyncIslandMig.eps | 221 ++++++++ .../doc/latex/classpeoAsyncIslandMig.pdf | Bin 0 -> 1513 bytes .../doc/latex/classpeoAsyncIslandMig.tex | 218 ++++++++ .../paradiseo-peo/doc/latex/classpeoEA.eps | 209 +++++++ .../paradiseo-peo/doc/latex/classpeoEA.pdf | Bin 0 -> 1495 bytes .../paradiseo-peo/doc/latex/classpeoEA.tex | 145 +++++ .../doc/latex/classpeoNoAggEvalFunc.eps | 209 +++++++ .../doc/latex/classpeoNoAggEvalFunc.pdf | Bin 0 -> 1386 bytes .../doc/latex/classpeoNoAggEvalFunc.tex | 39 ++ .../doc/latex/classpeoParaPopEval.eps | 209 +++++++ .../doc/latex/classpeoParaPopEval.pdf | 73 +++ .../doc/latex/classpeoParaPopEval.tex | 258 +++++++++ .../doc/latex/classpeoParaSGATransform.eps | 227 ++++++++ .../doc/latex/classpeoParaSGATransform.pdf | 75 +++ .../doc/latex/classpeoParaSGATransform.tex | 120 ++++ .../classpeoParallelAlgorithmWrapper.eps | 209 +++++++ .../classpeoParallelAlgorithmWrapper.pdf | 74 +++ .../classpeoParallelAlgorithmWrapper.tex | 62 +++ .../doc/latex/classpeoPopEval.eps | 215 +++++++ .../doc/latex/classpeoPopEval.pdf | Bin 0 -> 1423 bytes .../doc/latex/classpeoPopEval.tex | 39 ++ .../doc/latex/classpeoSeqPopEval.eps | 209 +++++++ .../doc/latex/classpeoSeqPopEval.pdf | Bin 0 -> 1382 bytes .../doc/latex/classpeoSeqPopEval.tex | 88 +++ .../doc/latex/classpeoSeqTransform.eps | 227 ++++++++ .../doc/latex/classpeoSeqTransform.pdf | Bin 0 -> 1558 bytes .../doc/latex/classpeoSeqTransform.tex | 111 ++++ .../doc/latex/classpeoSyncIslandMig.eps | 221 ++++++++ .../doc/latex/classpeoSyncIslandMig.pdf | Bin 0 -> 1670 bytes .../doc/latex/classpeoSyncIslandMig.tex | 227 ++++++++ .../doc/latex/classpeoSyncMultiStart.eps | 221 ++++++++ .../doc/latex/classpeoSyncMultiStart.pdf | Bin 0 -> 1510 bytes .../doc/latex/classpeoSyncMultiStart.tex | 245 ++++++++ .../latex/classpeoSynchronousMultiStart.eps | 203 +++++++ .../latex/classpeoSynchronousMultiStart.pdf | Bin 0 -> 1335 bytes .../latex/classpeoSynchronousMultiStart.tex | 152 +++++ .../doc/latex/classpeoTransform.eps | 233 ++++++++ .../doc/latex/classpeoTransform.pdf | 74 +++ .../doc/latex/classpeoTransform.tex | 29 + .../paradiseo-peo/doc/latex/doxygen.sty | 78 +++ .../paradiseo-peo/doc/latex/hierarchy.tex | 88 +++ .../paradiseo-peo/doc/latex/main.tex | 59 ++ .../paradiseo-peo/doc/latex/namespacepeo.tex | 52 ++ .../paradiseo-peo/doc/latex/namespaces.tex | 4 + .../paradiseo-peo/doc/latex/refman.tex | 96 ++++ .../structRandomExplorationAlgorithm.tex | 42 ++ .../doc/latex/structSEND__REQUEST.tex | 34 ++ ...lAlgorithmWrapper_1_1AbstractAlgorithm.eps | 203 +++++++ ...lAlgorithmWrapper_1_1AbstractAlgorithm.pdf | 73 +++ ...lAlgorithmWrapper_1_1AbstractAlgorithm.tex | 35 ++ ...oParallelAlgorithmWrapper_1_1Algorithm.eps | 197 +++++++ ...oParallelAlgorithmWrapper_1_1Algorithm.pdf | Bin 0 -> 1340 bytes ...oParallelAlgorithmWrapper_1_1Algorithm.tex | 50 ++ ...rithm_3_01AlgorithmType_00_01void_01_4.eps | 197 +++++++ ...rithm_3_01AlgorithmType_00_01void_01_4.pdf | 74 +++ ...rithm_3_01AlgorithmType_00_01void_01_4.tex | 45 ++ ...iStart_1_1AbstractAggregationAlgorithm.eps | 203 +++++++ ...iStart_1_1AbstractAggregationAlgorithm.pdf | Bin 0 -> 1431 bytes ...iStart_1_1AbstractAggregationAlgorithm.tex | 37 ++ ...hronousMultiStart_1_1AbstractAlgorithm.eps | 197 +++++++ ...hronousMultiStart_1_1AbstractAlgorithm.pdf | Bin 0 -> 1343 bytes ...hronousMultiStart_1_1AbstractAlgorithm.tex | 37 ++ ...chronousMultiStart_1_1AbstractDataType.eps | 197 +++++++ ...chronousMultiStart_1_1AbstractDataType.pdf | Bin 0 -> 1291 bytes ...chronousMultiStart_1_1AbstractDataType.tex | 37 ++ ...nousMultiStart_1_1AggregationAlgorithm.eps | 197 +++++++ ...nousMultiStart_1_1AggregationAlgorithm.pdf | Bin 0 -> 1296 bytes ...nousMultiStart_1_1AggregationAlgorithm.tex | 45 ++ ...tpeoSynchronousMultiStart_1_1Algorithm.eps | 197 +++++++ ...tpeoSynchronousMultiStart_1_1Algorithm.pdf | Bin 0 -> 1345 bytes ...tpeoSynchronousMultiStart_1_1Algorithm.tex | 45 ++ ...ctpeoSynchronousMultiStart_1_1DataType.eps | 197 +++++++ ...ctpeoSynchronousMultiStart_1_1DataType.pdf | Bin 0 -> 1289 bytes ...ctpeoSynchronousMultiStart_1_1DataType.tex | 40 ++ ...ousMultiStart_1_1NoAggregationFunction.eps | 197 +++++++ ...ousMultiStart_1_1NoAggregationFunction.pdf | 74 +++ ...ousMultiStart_1_1NoAggregationFunction.tex | 32 ++ .../paradiseo-peo/doc/man/man3/Communicable.3 | 62 +++ .../paradiseo-peo/doc/man/man3/Communicator.3 | 27 + .../paradiseo-peo/doc/man/man3/Cooperative.3 | 42 ++ .../doc/man/man3/DisplayBestRoute.3 | 34 ++ .../doc/man/man3/MergeRouteEval.3 | 24 + .../doc/man/man3/RandomExplorationAlgorithm.3 | 35 ++ .../doc/man/man3/ReactiveThread.3 | 39 ++ .../paradiseo-peo/doc/man/man3/RingTopology.3 | 24 + .../paradiseo-peo/doc/man/man3/Runner.3 | 57 ++ .../paradiseo-peo/doc/man/man3/SEND_REQUEST.3 | 28 + .../paradiseo-peo/doc/man/man3/Service.3 | 69 +++ .../paradiseo-peo/doc/man/man3/Thread.3 | 40 ++ .../paradiseo-peo/doc/man/man3/Topology.3 | 34 ++ .../paradiseo-peo/doc/man/man3/Worker.3 | 64 +++ .../paradiseo-peo/doc/man/man3/peo.3 | 43 ++ .../doc/man/man3/peoAggEvalFunc.3 | 33 ++ .../doc/man/man3/peoAsyncIslandMig.3 | 176 ++++++ .../paradiseo-peo/doc/man/man3/peoEA.3 | 109 ++++ .../doc/man/man3/peoNoAggEvalFunc.3 | 35 ++ .../doc/man/man3/peoParaPopEval.3 | 217 ++++++++ .../doc/man/man3/peoParaSGATransform.3 | 83 +++ .../man/man3/peoParallelAlgorithmWrapper.3 | 53 ++ ...rallelAlgorithmWrapper_AbstractAlgorithm.3 | 27 + .../peoParallelAlgorithmWrapper_Algorithm.3 | 41 ++ ...Wrapper_Algorithm_ AlgorithmType, void _.3 | 38 ++ .../paradiseo-peo/doc/man/man3/peoPopEval.3 | 37 ++ .../doc/man/man3/peoSeqPopEval.3 | 78 +++ .../doc/man/man3/peoSeqTransform.3 | 96 ++++ .../doc/man/man3/peoSyncIslandMig.3 | 183 ++++++ .../doc/man/man3/peoSyncMultiStart.3 | 211 +++++++ .../doc/man/man3/peoSynchronousMultiStart.3 | 117 ++++ ...sMultiStart_AbstractAggregationAlgorithm.3 | 31 ++ ...oSynchronousMultiStart_AbstractAlgorithm.3 | 31 ++ ...eoSynchronousMultiStart_AbstractDataType.3 | 31 ++ ...nchronousMultiStart_AggregationAlgorithm.3 | 38 ++ .../man3/peoSynchronousMultiStart_Algorithm.3 | 38 ++ .../man3/peoSynchronousMultiStart_DataType.3 | 35 ++ ...chronousMultiStart_NoAggregationFunction.3 | 28 + .../paradiseo-peo/doc/man/man3/peoTransform.3 | 27 + .../paradiseo-peo/doc/peo.doxyfile.cmake | 239 ++++++++ .../paradiseo-peo/peo-conf.cmake | 24 + .../paradiseo-peo/src/CMakeLists.txt | 8 + .../paradiseo-peo/src/core/CMakeLists.txt | 77 +++ .../paradiseo-peo/src/core/communicable.cpp | 97 ++++ .../paradiseo-peo/src/core/communicable.h | 75 +++ .../paradiseo-peo/src/core/cooperative.h | 69 +++ .../paradiseo-peo/src/core/eoPop_comm.h | 60 ++ .../paradiseo-peo/src/core/eoVector_comm.h | 111 ++++ .../paradiseo-peo/src/core/messaging.h | 134 +++++ .../paradiseo-peo/src/core/peo_debug.cpp | 105 ++++ .../paradiseo-peo/src/core/peo_debug.h | 50 ++ .../paradiseo-peo/src/core/peo_fin.cpp | 52 ++ .../paradiseo-peo/src/core/peo_fin.h | 45 ++ .../paradiseo-peo/src/core/peo_init.cpp | 65 +++ .../paradiseo-peo/src/core/peo_init.h | 49 ++ .../paradiseo-peo/src/core/peo_param.cpp | 53 ++ .../paradiseo-peo/src/core/peo_param.h | 45 ++ .../paradiseo-peo/src/core/peo_run.cpp | 47 ++ .../paradiseo-peo/src/core/peo_run.h | 45 ++ .../paradiseo-peo/src/core/reac_thread.cpp | 64 +++ .../paradiseo-peo/src/core/reac_thread.h | 63 +++ .../paradiseo-peo/src/core/ring_topo.cpp | 53 ++ .../paradiseo-peo/src/core/ring_topo.h | 52 ++ .../paradiseo-peo/src/core/rmc.h | 46 ++ .../paradiseo-peo/src/core/runner.cpp | 132 +++++ .../paradiseo-peo/src/core/runner.h | 86 +++ .../paradiseo-peo/src/core/service.cpp | 86 +++ .../paradiseo-peo/src/core/service.h | 78 +++ .../paradiseo-peo/src/core/thread.cpp | 109 ++++ .../paradiseo-peo/src/core/thread.h | 76 +++ .../paradiseo-peo/src/core/topology.cpp | 48 ++ .../paradiseo-peo/src/core/topology.h | 61 ++ .../paradiseo-peo/src/peo | 42 ++ .../paradiseo-peo/src/peo.h | 351 ++++++++++++ .../paradiseo-peo/src/peoAggEvalFunc.h | 58 ++ .../paradiseo-peo/src/peoAsyncIslandMig.h | 286 ++++++++++ .../paradiseo-peo/src/peoEA.h | 174 ++++++ .../paradiseo-peo/src/peoEvalFunc.h | 60 ++ .../paradiseo-peo/src/peoEvalFuncPSO.h | 68 +++ .../paradiseo-peo/src/peoInitializer.h | 98 ++++ .../paradiseo-peo/src/peoNoAggEvalFunc.h | 62 +++ .../paradiseo-peo/src/peoPSO.h | 125 +++++ .../paradiseo-peo/src/peoPSOReplacement.h | 73 +++ .../paradiseo-peo/src/peoPSOSelect.h | 60 ++ .../paradiseo-peo/src/peoPSOVelocity.h | 80 +++ .../paradiseo-peo/src/peoParaPopEval.h | 241 ++++++++ .../paradiseo-peo/src/peoParaSGATransform.h | 183 ++++++ .../src/peoParallelAlgorithmWrapper.h | 113 ++++ .../paradiseo-peo/src/peoPopEval.h | 56 ++ .../paradiseo-peo/src/peoSeqPopEval.h | 81 +++ .../paradiseo-peo/src/peoSeqTransform.h | 94 ++++ .../paradiseo-peo/src/peoSyncIslandMig.h | 314 +++++++++++ .../paradiseo-peo/src/peoSyncMultiStart.h | 211 +++++++ .../src/peoSynchronousMultiStart.h | 269 +++++++++ .../paradiseo-peo/src/peoTransform.h | 53 ++ .../paradiseo-peo/src/rmc/CMakeLists.txt | 9 + .../paradiseo-peo/src/rmc/mpi/CMakeLists.txt | 95 ++++ .../paradiseo-peo/src/rmc/mpi/comm.cpp | 95 ++++ .../paradiseo-peo/src/rmc/mpi/comm.h | 59 ++ .../paradiseo-peo/src/rmc/mpi/coop.cpp | 70 +++ .../paradiseo-peo/src/rmc/mpi/mess.cpp | 265 +++++++++ .../paradiseo-peo/src/rmc/mpi/mess.h | 59 ++ .../paradiseo-peo/src/rmc/mpi/node.cpp | 86 +++ .../paradiseo-peo/src/rmc/mpi/node.h | 52 ++ .../paradiseo-peo/src/rmc/mpi/param.cpp | 49 ++ .../paradiseo-peo/src/rmc/mpi/param.h | 42 ++ .../paradiseo-peo/src/rmc/mpi/recv.cpp | 140 +++++ .../paradiseo-peo/src/rmc/mpi/recv.h | 42 ++ .../paradiseo-peo/src/rmc/mpi/rmc.cpp | 75 +++ .../paradiseo-peo/src/rmc/mpi/runner.cpp | 61 ++ .../paradiseo-peo/src/rmc/mpi/scheduler.cpp | 106 ++++ .../paradiseo-peo/src/rmc/mpi/scheduler.h | 60 ++ .../paradiseo-peo/src/rmc/mpi/schema.cpp | 163 ++++++ .../paradiseo-peo/src/rmc/mpi/schema.h | 67 +++ .../paradiseo-peo/src/rmc/mpi/send.cpp | 144 +++++ .../paradiseo-peo/src/rmc/mpi/send.h | 50 ++ .../paradiseo-peo/src/rmc/mpi/service.cpp | 58 ++ .../paradiseo-peo/src/rmc/mpi/tags.h | 52 ++ .../paradiseo-peo/src/rmc/mpi/worker.cpp | 121 ++++ .../paradiseo-peo/src/rmc/mpi/worker.h | 78 +++ .../paradiseo-peo/src/rmc/mpi/xml_parser.cpp | 103 ++++ .../paradiseo-peo/src/rmc/mpi/xml_parser.h | 50 ++ .../paradiseo-peo/test/CMakeLists.txt | 115 ++++ .../paradiseo-peo/test/lesson.param | 12 + .../paradiseo-peo/test/schema.xml | 19 + .../paradiseo-peo/test/t-peo.cpp | 54 ++ .../paradiseo-peo/test/t-peoInsularPSO.cpp | 130 +++++ .../paradiseo-peo/test/t-peoPSO.cpp | 119 ++++ .../paradiseo-peo/test/t-peoPSOPara.cpp | 107 ++++ .../paradiseo-peo/test/t-peoPSOParaIsland.cpp | 170 ++++++ .../paradiseo-peo/tutorial/CMakeLists.txt | 16 + .../tutorial/Lesson1/CMakeLists.txt | 105 ++++ .../Lesson1/ParadisEO-PEO_Lesson1.pdf | Bin 0 -> 68414 bytes .../paradiseo-peo/tutorial/Lesson1/doclsn.h | 498 +++++++++++++++++ .../tutorial/Lesson1/lesson.param | 12 + .../paradiseo-peo/tutorial/Lesson1/main.cpp | 110 ++++ .../Lesson1/paradiseo-peo-lsn.doxyfile | 241 ++++++++ .../paradiseo-peo/tutorial/Lesson1/schema.xml | 18 + .../tutorial/Lesson2/CMakeLists.txt | 105 ++++ .../Lesson2/ParadisEO-PEO_Lesson2.pdf | Bin 0 -> 145864 bytes .../tutorial/Lesson2/lesson.param | 12 + .../paradiseo-peo/tutorial/Lesson2/main.cpp | 143 +++++ .../Lesson2/paradiseo-peo-lsn.doxyfile | 241 ++++++++ .../paradiseo-peo/tutorial/Lesson2/schema.xml | 18 + .../tutorial/Lesson3/CMakeLists.txt | 105 ++++ .../Lesson3/ParadisEO-PEO_Lesson3.pdf | Bin 0 -> 117573 bytes .../tutorial/Lesson3/lesson.param | 12 + .../paradiseo-peo/tutorial/Lesson3/main.cpp | 194 +++++++ .../Lesson3/paradiseo-peo-lsn.doxyfile | 241 ++++++++ .../paradiseo-peo/tutorial/Lesson3/schema.xml | 19 + .../tutorial/Lesson4/CMakeLists.txt | 98 ++++ .../tutorial/Lesson4/lesson.param | 7 + .../paradiseo-peo/tutorial/Lesson4/main.cpp | 128 +++++ .../Lesson4/paradiseo-peo.lsn.doxyfile | 241 ++++++++ .../paradiseo-peo/tutorial/Lesson4/schema.xml | 19 + .../tutorial/Lesson5/CMakeLists.txt | 98 ++++ .../tutorial/Lesson5/lesson.param | 7 + .../paradiseo-peo/tutorial/Lesson5/main.cpp | 166 ++++++ .../Lesson5/paradiseo-peo.lsn.doxyfile | 241 ++++++++ .../paradiseo-peo/tutorial/Lesson5/schema.xml | 19 + .../tutorial/Lesson6/CMakeLists.txt | 99 ++++ .../tutorial/Lesson6/lesson.param | 12 + .../paradiseo-peo/tutorial/Lesson6/main.cpp | 135 +++++ .../Lesson6/paradiseo-peo.lsn.doxyfile | 241 ++++++++ .../paradiseo-peo/tutorial/Lesson6/schema.xml | 18 + .../LessonParallelAlgorithm/CMakeLists.txt | 89 +++ .../LessonParallelAlgorithm/lesson.param | 12 + .../tutorial/LessonParallelAlgorithm/main.cpp | 337 +++++++++++ .../LessonParallelAlgorithm/schema.xml | 19 + .../tutorial/Walkthrough/CMakeLists.txt | 116 ++++ .../Walkthrough/ParadisEO-PEO_Walkthrough.pdf | Bin 0 -> 520966 bytes .../tutorial/Walkthrough/config/lessonA.param | 11 + .../tutorial/Walkthrough/config/lessonB.param | 11 + .../tutorial/Walkthrough/config/lessonC.param | 11 + .../tutorial/Walkthrough/config/lessonD.param | 11 + .../tutorial/Walkthrough/config/lessonE.param | 11 + .../tutorial/Walkthrough/config/schemaA.xml | 10 + .../tutorial/Walkthrough/config/schemaB.xml | 10 + .../tutorial/Walkthrough/config/schemaC.xml | 13 + .../tutorial/Walkthrough/config/schemaD.xml | 16 + .../tutorial/Walkthrough/config/schemaE.xml | 16 + .../tutorial/Walkthrough/exampleA.cpp | 108 ++++ .../tutorial/Walkthrough/exampleB.cpp | 114 ++++ .../tutorial/Walkthrough/exampleC.cpp | 166 ++++++ .../tutorial/Walkthrough/exampleD.cpp | 110 ++++ .../tutorial/Walkthrough/exampleE.cpp | 118 ++++ .../Walkthrough/paradiseo-peo-lsn.doxyfile | 241 ++++++++ .../tutorial/examples/CMakeLists.txt | 9 + .../tutorial/examples/tsp/CMakeLists.txt | 110 ++++ .../examples/tsp/benchs/eil101.opt.tour | 108 ++++ .../tutorial/examples/tsp/benchs/eil101.tsp | 108 ++++ .../examples/tsp/benchs/eil101.tsp.hc | 102 ++++ .../tutorial/examples/tsp/city_swap.cpp | 49 ++ .../tutorial/examples/tsp/city_swap.h | 54 ++ .../tutorial/examples/tsp/data.cpp | 126 +++++ .../tutorial/examples/tsp/data.h | 46 ++ .../tutorial/examples/tsp/display.cpp | 145 +++++ .../tutorial/examples/tsp/display.h | 44 ++ .../examples/tsp/display_best_route.cpp | 50 ++ .../examples/tsp/display_best_route.h | 60 ++ .../tutorial/examples/tsp/edge_xover.cpp | 146 +++++ .../tutorial/examples/tsp/edge_xover.h | 71 +++ .../examples/tsp/merge_route_eval.cpp | 45 ++ .../tutorial/examples/tsp/merge_route_eval.h | 52 ++ .../paradiseo-peo/tutorial/examples/tsp/mix.h | 52 ++ .../tutorial/examples/tsp/node.cpp | 105 ++++ .../tutorial/examples/tsp/node.h | 54 ++ .../tutorial/examples/tsp/opt_route.cpp | 135 +++++ .../tutorial/examples/tsp/opt_route.h | 51 ++ .../tutorial/examples/tsp/order_xover.cpp | 92 +++ .../tutorial/examples/tsp/order_xover.h | 56 ++ .../tsp/paradiseo-peo-lsn-shared.doxyfile | 240 ++++++++ .../tutorial/examples/tsp/param.cpp | 51 ++ .../tutorial/examples/tsp/param.h | 42 ++ .../tutorial/examples/tsp/part_route_eval.cpp | 58 ++ .../tutorial/examples/tsp/part_route_eval.h | 61 ++ .../examples/tsp/partial_mapped_xover.cpp | 89 +++ .../examples/tsp/partial_mapped_xover.h | 56 ++ .../tutorial/examples/tsp/route.cpp | 49 ++ .../tutorial/examples/tsp/route.h | 48 ++ .../tutorial/examples/tsp/route_eval.cpp | 41 ++ .../tutorial/examples/tsp/route_eval.h | 51 ++ .../tutorial/examples/tsp/route_init.cpp | 51 ++ .../tutorial/examples/tsp/route_init.h | 51 ++ .../tutorial/examples/tsp/two_opt.cpp | 48 ++ .../tutorial/examples/tsp/two_opt.h | 53 ++ .../examples/tsp/two_opt_incr_eval.cpp | 52 ++ .../tutorial/examples/tsp/two_opt_incr_eval.h | 51 ++ .../tutorial/examples/tsp/two_opt_init.cpp | 42 ++ .../tutorial/examples/tsp/two_opt_init.h | 52 ++ .../tutorial/examples/tsp/two_opt_next.cpp | 55 ++ .../tutorial/examples/tsp/two_opt_next.h | 52 ++ .../tutorial/examples/tsp/two_opt_rand.cpp | 49 ++ .../tutorial/examples/tsp/two_opt_rand.h | 52 ++ 634 files changed, 54808 insertions(+) create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/AUTHORS create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/CMakeLists.txt create mode 100755 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/README create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/CMakeLists.txt create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/Lesson1_2main_8cpp-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/Lesson2_2main_8cpp-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/Lesson3_2main_8cpp-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/LessonParallelAlgorithm_2main_8cpp-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/README-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/annotated.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/city__swap_8cpp-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/city__swap_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classCommunicable-members.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classCommunicable.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classCommunicable.png create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classCommunicator-members.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classCommunicator.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classCommunicator.png create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classCooperative-members.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classCooperative.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classCooperative.png create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classDisplayBestRoute-members.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classDisplayBestRoute.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classDisplayBestRoute.png create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classMergeRouteEval-members.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classMergeRouteEval.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classMergeRouteEval.png create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classReactiveThread-members.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classReactiveThread.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classReactiveThread.png create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classRingTopology-members.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classRingTopology.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classRingTopology.png create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classRunner-members.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classRunner.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classRunner.png create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classService-members.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classService.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classService.png create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classThread-members.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classThread.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classThread.png create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classTopology-members.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classTopology.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classTopology.png create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classWorker-members.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classWorker.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classWorker.png create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classes.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoAggEvalFunc-members.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoAggEvalFunc.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoAggEvalFunc.png create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoAsyncIslandMig-members.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoAsyncIslandMig.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoAsyncIslandMig.png create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoEA-members.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoEA.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoEA.png create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoNoAggEvalFunc-members.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoNoAggEvalFunc.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoNoAggEvalFunc.png create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoParaPopEval-members.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoParaPopEval.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoParaPopEval.png create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoParaSGATransform-members.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoParaSGATransform.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoParaSGATransform.png create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoParallelAlgorithmWrapper-members.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoParallelAlgorithmWrapper.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoParallelAlgorithmWrapper.png create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoPopEval-members.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoPopEval.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoPopEval.png create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoSeqPopEval-members.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoSeqPopEval.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoSeqPopEval.png create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoSeqTransform-members.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoSeqTransform.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoSeqTransform.png create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoSyncIslandMig-members.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoSyncIslandMig.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoSyncIslandMig.png create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoSyncMultiStart-members.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoSyncMultiStart.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoSyncMultiStart.png create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoSynchronousMultiStart-members.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoSynchronousMultiStart.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoSynchronousMultiStart.png create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoTransform-members.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoTransform.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoTransform.png create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/comm_8cpp-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/comm_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/communicable_8cpp-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/communicable_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/coop_8cpp-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/cooperative_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/core_2runner_8cpp-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/core_2service_8cpp-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/data_8cpp-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/data_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/display_8cpp-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/display_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/display__best__route_8cpp-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/display__best__route_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/doclsn_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/doxygen.css create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/doxygen.png create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/edge__xover_8cpp-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/edge__xover_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/eoPop__comm_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/eoVector__comm_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/exampleA_8cpp-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/exampleB_8cpp-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/exampleC_8cpp-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/exampleD_8cpp-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/exampleE_8cpp-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/files.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/ftv2blank.png create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/ftv2doc.png create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/ftv2folderclosed.png create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/ftv2folderopen.png create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/ftv2lastnode.png create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/ftv2link.png create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/ftv2mlastnode.png create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/ftv2mnode.png create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/ftv2node.png create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/ftv2plastnode.png create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/ftv2pnode.png create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/ftv2vertline.png create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/functions.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/functions_func.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/functions_vars.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/hierarchy.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/index.html create mode 100755 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/installdox create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/main.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/merge__route__eval_8cpp-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/merge__route__eval_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/mess_8cpp-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/mess_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/messaging_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/mix_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/namespacemembers.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/namespacemembers_func.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/namespacemembers_vars.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/namespacepeo.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/namespaces.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/node_8cpp-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/node_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/opt__route_8cpp-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/opt__route_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/order__xover_8cpp-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/order__xover_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/paradiseo_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/param_8cpp-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/param_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/part__route__eval_8cpp-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/part__route__eval_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/partial__mapped__xover_8cpp-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/partial__mapped__xover_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peoAggEvalFunc_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peoAsyncIslandMig_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peoEA_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peoNoAggEvalFunc_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peoParaPopEval_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peoParaSGATransform_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peoParallelAlgorithmWrapper_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peoPopEval_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peoSeqPopEval_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peoSeqTransform_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peoSyncIslandMig_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peoSyncMultiStart_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peoSynchronousMultiStart_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peoTransform_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peo_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peo__debug_8cpp-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peo__debug_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peo__fin_8cpp-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peo__fin_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peo__init_8cpp-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peo__init_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peo__param_8cpp-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peo__param_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peo__run_8cpp-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peo__run_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/reac__thread_8cpp-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/reac__thread_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/recv_8cpp-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/recv_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/ring__topo_8cpp-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/ring__topo_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/rmc_2mpi_2runner_8cpp-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/rmc_2mpi_2service_8cpp-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/rmc_8cpp-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/rmc_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/route_8cpp-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/route_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/route__eval_8cpp-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/route__eval_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/route__init_8cpp-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/route__init_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/runner_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/scheduler_8cpp-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/scheduler_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/schema_8cpp-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/schema_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/search.idx create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/search.php create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/send_8cpp-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/send_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/service_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/src_2rmc_2mpi_2node_8cpp-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/src_2rmc_2mpi_2node_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/src_2rmc_2mpi_2param_8cpp-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/src_2rmc_2mpi_2param_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structNode-members.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structNode.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structRandomExplorationAlgorithm-members.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structRandomExplorationAlgorithm.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structSEND__REQUEST-members.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structSEND__REQUEST.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoParallelAlgorithmWrapper_1_1AbstractAlgorithm-members.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoParallelAlgorithmWrapper_1_1AbstractAlgorithm.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoParallelAlgorithmWrapper_1_1AbstractAlgorithm.png create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoParallelAlgorithmWrapper_1_1Algorithm-members.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoParallelAlgorithmWrapper_1_1Algorithm.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoParallelAlgorithmWrapper_1_1Algorithm.png create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoParallelAlgorithmWrapper_1_1Algorithm_3_01AlgorithmType_00_01void_01_4-members.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoParallelAlgorithmWrapper_1_1Algorithm_3_01AlgorithmType_00_01void_01_4.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoParallelAlgorithmWrapper_1_1Algorithm_3_01AlgorithmType_00_01void_01_4.png create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1AbstractAggregationAlgorithm-members.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1AbstractAggregationAlgorithm.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1AbstractAggregationAlgorithm.png create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1AbstractAlgorithm-members.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1AbstractAlgorithm.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1AbstractAlgorithm.png create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1AbstractDataType-members.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1AbstractDataType.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1AbstractDataType.png create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1AggregationAlgorithm-members.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1AggregationAlgorithm.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1AggregationAlgorithm.png create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1Algorithm-members.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1Algorithm.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1Algorithm.png create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1DataType-members.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1DataType.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1DataType.png create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1NoAggregationFunction-members.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1NoAggregationFunction.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1NoAggregationFunction.png create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/t-peo_8cpp-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/tab_b.gif create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/tab_l.gif create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/tab_r.gif create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/tabs.css create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/tags_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/thread_8cpp-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/thread_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/topology_8cpp-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/topology_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/tree.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/tutorial_2examples_2tsp_2node_8cpp-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/tutorial_2examples_2tsp_2node_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/tutorial_2examples_2tsp_2param_8cpp-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/tutorial_2examples_2tsp_2param_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/two__opt_8cpp-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/two__opt_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/two__opt__incr__eval_8cpp-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/two__opt__incr__eval_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/two__opt__init_8cpp-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/two__opt__init_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/two__opt__next_8cpp-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/two__opt__next_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/two__opt__rand_8cpp-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/two__opt__rand_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/worker_8cpp-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/worker_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/xml__parser_8cpp-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/xml__parser_8h-source.html create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/FreeSans.ttf create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/Makefile create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/annotated.tex create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classCommunicable.eps create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classCommunicable.pdf create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classCommunicable.tex create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classCommunicator.eps create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classCommunicator.pdf create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classCommunicator.tex create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classCooperative.eps create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classCooperative.pdf create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classCooperative.tex create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classDisplayBestRoute.eps create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classDisplayBestRoute.pdf create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classDisplayBestRoute.tex create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classMergeRouteEval.eps create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classMergeRouteEval.pdf create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classMergeRouteEval.tex create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classReactiveThread.eps create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classReactiveThread.pdf create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classReactiveThread.tex create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classRingTopology.eps create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classRingTopology.pdf create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classRingTopology.tex create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classRunner.eps create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classRunner.pdf create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classRunner.tex create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classService.eps create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classService.pdf create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classService.tex create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classThread.eps create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classThread.pdf create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classThread.tex create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classTopology.eps create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classTopology.pdf create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classTopology.tex create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classWorker.eps create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classWorker.pdf create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classWorker.tex create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoAggEvalFunc.eps create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoAggEvalFunc.pdf create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoAggEvalFunc.tex create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoAsyncIslandMig.eps create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoAsyncIslandMig.pdf create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoAsyncIslandMig.tex create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoEA.eps create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoEA.pdf create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoEA.tex create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoNoAggEvalFunc.eps create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoNoAggEvalFunc.pdf create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoNoAggEvalFunc.tex create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoParaPopEval.eps create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoParaPopEval.pdf create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoParaPopEval.tex create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoParaSGATransform.eps create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoParaSGATransform.pdf create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoParaSGATransform.tex create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoParallelAlgorithmWrapper.eps create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoParallelAlgorithmWrapper.pdf create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoParallelAlgorithmWrapper.tex create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoPopEval.eps create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoPopEval.pdf create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoPopEval.tex create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoSeqPopEval.eps create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoSeqPopEval.pdf create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoSeqPopEval.tex create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoSeqTransform.eps create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoSeqTransform.pdf create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoSeqTransform.tex create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoSyncIslandMig.eps create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoSyncIslandMig.pdf create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoSyncIslandMig.tex create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoSyncMultiStart.eps create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoSyncMultiStart.pdf create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoSyncMultiStart.tex create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoSynchronousMultiStart.eps create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoSynchronousMultiStart.pdf create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoSynchronousMultiStart.tex create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoTransform.eps create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoTransform.pdf create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoTransform.tex create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/doxygen.sty create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/hierarchy.tex create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/main.tex create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/namespacepeo.tex create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/namespaces.tex create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/refman.tex create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structRandomExplorationAlgorithm.tex create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structSEND__REQUEST.tex create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoParallelAlgorithmWrapper_1_1AbstractAlgorithm.eps create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoParallelAlgorithmWrapper_1_1AbstractAlgorithm.pdf create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoParallelAlgorithmWrapper_1_1AbstractAlgorithm.tex create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoParallelAlgorithmWrapper_1_1Algorithm.eps create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoParallelAlgorithmWrapper_1_1Algorithm.pdf create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoParallelAlgorithmWrapper_1_1Algorithm.tex create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoParallelAlgorithmWrapper_1_1Algorithm_3_01AlgorithmType_00_01void_01_4.eps create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoParallelAlgorithmWrapper_1_1Algorithm_3_01AlgorithmType_00_01void_01_4.pdf create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoParallelAlgorithmWrapper_1_1Algorithm_3_01AlgorithmType_00_01void_01_4.tex create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1AbstractAggregationAlgorithm.eps create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1AbstractAggregationAlgorithm.pdf create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1AbstractAggregationAlgorithm.tex create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1AbstractAlgorithm.eps create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1AbstractAlgorithm.pdf create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1AbstractAlgorithm.tex create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1AbstractDataType.eps create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1AbstractDataType.pdf create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1AbstractDataType.tex create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1AggregationAlgorithm.eps create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1AggregationAlgorithm.pdf create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1AggregationAlgorithm.tex create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1Algorithm.eps create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1Algorithm.pdf create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1Algorithm.tex create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1DataType.eps create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1DataType.pdf create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1DataType.tex create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1NoAggregationFunction.eps create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1NoAggregationFunction.pdf create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1NoAggregationFunction.tex create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/Communicable.3 create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/Communicator.3 create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/Cooperative.3 create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/DisplayBestRoute.3 create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/MergeRouteEval.3 create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/RandomExplorationAlgorithm.3 create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/ReactiveThread.3 create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/RingTopology.3 create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/Runner.3 create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/SEND_REQUEST.3 create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/Service.3 create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/Thread.3 create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/Topology.3 create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/Worker.3 create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peo.3 create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoAggEvalFunc.3 create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoAsyncIslandMig.3 create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoEA.3 create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoNoAggEvalFunc.3 create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoParaPopEval.3 create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoParaSGATransform.3 create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoParallelAlgorithmWrapper.3 create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoParallelAlgorithmWrapper_AbstractAlgorithm.3 create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoParallelAlgorithmWrapper_Algorithm.3 create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoParallelAlgorithmWrapper_Algorithm_ AlgorithmType, void _.3 create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoPopEval.3 create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoSeqPopEval.3 create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoSeqTransform.3 create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoSyncIslandMig.3 create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoSyncMultiStart.3 create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoSynchronousMultiStart.3 create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoSynchronousMultiStart_AbstractAggregationAlgorithm.3 create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoSynchronousMultiStart_AbstractAlgorithm.3 create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoSynchronousMultiStart_AbstractDataType.3 create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoSynchronousMultiStart_AggregationAlgorithm.3 create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoSynchronousMultiStart_Algorithm.3 create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoSynchronousMultiStart_DataType.3 create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoSynchronousMultiStart_NoAggregationFunction.3 create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoTransform.3 create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/peo.doxyfile.cmake create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/peo-conf.cmake create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/CMakeLists.txt create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/CMakeLists.txt create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/communicable.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/communicable.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/cooperative.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/eoPop_comm.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/eoVector_comm.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/messaging.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/peo_debug.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/peo_debug.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/peo_fin.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/peo_fin.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/peo_init.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/peo_init.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/peo_param.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/peo_param.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/peo_run.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/peo_run.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/reac_thread.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/reac_thread.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/ring_topo.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/ring_topo.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/rmc.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/runner.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/runner.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/service.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/service.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/thread.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/thread.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/topology.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/topology.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peo create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peo.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoAggEvalFunc.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoAsyncIslandMig.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoEA.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoEvalFunc.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoEvalFuncPSO.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoInitializer.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoNoAggEvalFunc.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoPSO.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoPSOReplacement.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoPSOSelect.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoPSOVelocity.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoParaPopEval.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoParaSGATransform.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoParallelAlgorithmWrapper.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoPopEval.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoSeqPopEval.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoSeqTransform.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoSyncIslandMig.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoSyncMultiStart.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoSynchronousMultiStart.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoTransform.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/CMakeLists.txt create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/CMakeLists.txt create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/comm.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/comm.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/coop.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/mess.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/mess.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/node.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/node.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/param.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/param.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/recv.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/recv.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/rmc.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/runner.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/scheduler.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/scheduler.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/schema.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/schema.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/send.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/send.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/service.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/tags.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/worker.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/worker.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/xml_parser.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/xml_parser.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/test/CMakeLists.txt create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/test/lesson.param create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/test/schema.xml create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/test/t-peo.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/test/t-peoInsularPSO.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/test/t-peoPSO.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/test/t-peoPSOPara.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/test/t-peoPSOParaIsland.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/CMakeLists.txt create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson1/CMakeLists.txt create mode 100755 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson1/ParadisEO-PEO_Lesson1.pdf create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson1/doclsn.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson1/lesson.param create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson1/main.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson1/paradiseo-peo-lsn.doxyfile create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson1/schema.xml create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson2/CMakeLists.txt create mode 100755 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson2/ParadisEO-PEO_Lesson2.pdf create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson2/lesson.param create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson2/main.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson2/paradiseo-peo-lsn.doxyfile create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson2/schema.xml create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson3/CMakeLists.txt create mode 100755 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson3/ParadisEO-PEO_Lesson3.pdf create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson3/lesson.param create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson3/main.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson3/paradiseo-peo-lsn.doxyfile create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson3/schema.xml create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson4/CMakeLists.txt create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson4/lesson.param create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson4/main.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson4/paradiseo-peo.lsn.doxyfile create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson4/schema.xml create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson5/CMakeLists.txt create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson5/lesson.param create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson5/main.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson5/paradiseo-peo.lsn.doxyfile create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson5/schema.xml create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson6/CMakeLists.txt create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson6/lesson.param create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson6/main.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson6/paradiseo-peo.lsn.doxyfile create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson6/schema.xml create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/LessonParallelAlgorithm/CMakeLists.txt create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/LessonParallelAlgorithm/lesson.param create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/LessonParallelAlgorithm/main.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/LessonParallelAlgorithm/schema.xml create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/CMakeLists.txt create mode 100755 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/ParadisEO-PEO_Walkthrough.pdf create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/config/lessonA.param create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/config/lessonB.param create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/config/lessonC.param create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/config/lessonD.param create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/config/lessonE.param create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/config/schemaA.xml create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/config/schemaB.xml create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/config/schemaC.xml create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/config/schemaD.xml create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/config/schemaE.xml create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/exampleA.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/exampleB.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/exampleC.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/exampleD.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/exampleE.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/paradiseo-peo-lsn.doxyfile create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/CMakeLists.txt create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/CMakeLists.txt create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/benchs/eil101.opt.tour create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/benchs/eil101.tsp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/benchs/eil101.tsp.hc create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/city_swap.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/city_swap.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/data.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/data.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/display.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/display.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/display_best_route.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/display_best_route.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/edge_xover.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/edge_xover.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/merge_route_eval.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/merge_route_eval.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/mix.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/node.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/node.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/opt_route.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/opt_route.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/order_xover.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/order_xover.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/paradiseo-peo-lsn-shared.doxyfile create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/param.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/param.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/part_route_eval.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/part_route_eval.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/partial_mapped_xover.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/partial_mapped_xover.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/route.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/route.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/route_eval.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/route_eval.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/route_init.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/route_init.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/two_opt.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/two_opt.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/two_opt_incr_eval.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/two_opt_incr_eval.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/two_opt_init.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/two_opt_init.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/two_opt_next.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/two_opt_next.h create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/two_opt_rand.cpp create mode 100644 tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/two_opt_rand.h diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/AUTHORS b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/AUTHORS new file mode 100644 index 000000000..91f92d5ca --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/AUTHORS @@ -0,0 +1,3 @@ +Sébastien Cahon +Alexandru-Adrian Tantar +Clive Canape diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/CMakeLists.txt b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/CMakeLists.txt new file mode 100644 index 000000000..87a8436f2 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/CMakeLists.txt @@ -0,0 +1,161 @@ + +###################################################################################### +### 0) Preliminary checking: no WIN and libxml2 +###################################################################################### + +#IF(WIN32) +# MESSAGE (FATAL_ERROR "ParadisEO-PEO can not be generated on Windows systems") +#ENDIF(WIN32) + +# check libxml2 +FIND_PROGRAM(XML2_CONFIG_PROGRAM NAMES xml2-config PATHS /usr/local/bin /usr/bin DOC "The libxml2 (www.xmlsoft.org) configuration tool") + +IF(NOT XML2_CONFIG_PROGRAM) + #MESSAGE(FATAL_ERROR "Libxml2 cannot be found on your system. Libxml2 is required for ParadisEO-PEO install") +ENDIF(NOT XML2_CONFIG_PROGRAM) + +# set libxml2 cflags in XML2_CFLAGS +EXECUTE_PROCESS(COMMAND ${XML2_CONFIG_PROGRAM} --cflags OUTPUT_VARIABLE XML2_CFLAGS OUTPUT_STRIP_TRAILING_WHITESPACE) +SET(XML2_CFLAGS_WITH_WHITESPACE " ${XML2_CFLAGS}") + +# set libxml2 libs in XML2_LIBS +EXECUTE_PROCESS(COMMAND ${XML2_CONFIG_PROGRAM} --libs OUTPUT_VARIABLE XML2_LIBS OUTPUT_STRIP_TRAILING_WHITESPACE) +###################################################################################### + + +###################################################################################### +### 1) If you want to set your variables in peo-conf.cmake and avoid the cmd line +###################################################################################### + +INCLUDE(peo-conf.cmake OPTIONAL) + +###################################################################################### + + +###################################################################################### +### 2) Project properties +###################################################################################### + +# set the project name +PROJECT(ParadisEO-PEO) + +SET(PACKAGE_BUGREPORT "paradiseo-help@lists.gforge.inria.fr" CACHE STRING "Package bug report" FORCE) +SET(PACKAGE_NAME "ParadisEO-PEO Moving Objects" CACHE STRING "Package name" FORCE) +SET(PACKAGE_STRING "ParadisEO-PEO 1.0" CACHE STRING "Package string full name" FORCE) +SET(PACKAGE_VERSION "1.0" CACHE STRING "Package version" FORCE) +SET(GLOBAL_VERSION "1.0" CACHE STRING "Global version" FORCE) +SET(VERSION "1.0" CACHE STRING "Version" FORCE) + +# check cmake version compatibility +CMAKE_MINIMUM_REQUIRED(VERSION 2.4 FATAL_ERROR) + +# regular expression checking +INCLUDE_REGULAR_EXPRESSION("^.*$" "^$") + +# set a language for the entire project. +ENABLE_LANGUAGE(CXX) +ENABLE_LANGUAGE(C) + +##################################################################################### + + +##################################################################################### +### 3) Include required modules +##################################################################################### +INCLUDE(CMakeBackwardCompatibilityCXX) + +INCLUDE(FindDoxygen) + +INCLUDE(FindGnuplot) + +# check for some functions +INCLUDE(CheckLibraryExists) + +###################################################################################### + + +###################################################################################### +### 4) Include the main configuration variables +###################################################################################### + +# The "config" variable must be provided on the command line +IF(NOT DEFINED config OR NOT config) + MESSAGE(FATAL_ERROR "The \"config\" variable must be set on the command line to + give the path of the install configuration file. ") +ENDIF(NOT DEFINED config OR NOT config) + +# Need the config file whose full path is given thanks to the "config" variable +INCLUDE(${config}) + +###################################################################################### + + +###################################################################################### +### 4) Paths checking +###################################################################################### + +IF(WIN32) + SET (ABSOLUTE_PATH_REGEX "^[A-Z]:|^[a-z]:") +ELSE(WIN32) + SET (ABSOLUTE_PATH_REGEX "^/") +ENDIF(WIN32) + +SET(REQUIRED_PATHS "EO_SRC_DIR" "EO_BIN_DIR" "MO_SRC_DIR" "MO_BIN_DIR") +FOREACH (path ${REQUIRED_PATHS}) + IF(EXISTS ${${path}}) + MESSAGE (STATUS "Using ${path}=${${path}}") + ELSE(EXISTS ${${path}}) + MESSAGE (FATAL_ERROR "\n Cannot find \"${${path}}\". Please, fill \"${config}\" with a correct value for ${path} variable") + ENDIF(EXISTS ${${path}}) + + IF(NOT ${${path}} MATCHES "${ABSOLUTE_PATH_REGEX}") + MESSAGE (FATAL_ERROR "${${path}} MUST BE an absolute path") + ENDIF(NOT ${${path}} MATCHES "${ABSOLUTE_PATH_REGEX}") +ENDFOREACH (path ${REQUIRED_PATHS}) +###################################################################################### + + +##################################################################################### +### 5) Manage the build type +##################################################################################### + +# the user should choose the build type on windows environments,excepted under cygwin (default=none) +SET(CMAKE_DEFAULT_BUILD_TYPE Debug CACHE STRING "Variable that stores the default CMake build type" FORCE) + +IF(WIN32 AND NOT CYGWIN) + IF(NOT CMAKE_BUILD_TYPE) + SET( CMAKE_BUILD_TYPE + ${CMAKE_DEFAULT_BUILD_TYPE} CACHE STRING + "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel." + FORCE) + ENDIF(NOT CMAKE_BUILD_TYPE) + MESSAGE(STATUS "") + MESSAGE(STATUS "Warning: The type of build is: ${CMAKE_BUILD_TYPE}.") + MESSAGE(STATUS "The available types are: None Debug Release RelWithDebInfo MinSizeRel.") + MESSAGE(STATUS "You can choose it with: cmake -D") + MESSAGE(STATUS "") +ENDIF(WIN32 AND NOT CYGWIN) + +##################################################################################### + + +###################################################################################### +### 6) Where must cmake go now ? +###################################################################################### + +SUBDIRS(doc src test tutorial) + +###################################################################################### + + +###################################################################################### +### 7) Test config +###################################################################################### + +#SET(ENABLE_CMAKE_TESTING TRUE CACHE BOOL "Should we test using Dart") + +IF (ENABLE_CMAKE_TESTING) + ENABLE_TESTING() +ENDIF (ENABLE_CMAKE_TESTING) + +###################################################################################### diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/README b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/README new file mode 100755 index 000000000..3d44518e4 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/README @@ -0,0 +1,80 @@ + PARADISEO-PEO README FILE +======================================================================= + check latest news at http://paradiseo.gforge.inria.fr/ +======================================================================= + +Welcome to ParadisEO-PEO, the Parallel Evolving Objects library. +The latest news about ParadisEO-PEO can be found on the gforge repository at +http://paradiseo.gforge.inria.fr/ +In case of any problem, please e-mail us at +paradiseo-help@lists.gforge.inria.fr + + +======================================================================= + BUILDING PARADISEO-PEO +======================================================================= +The basic installation procedure goes the following. + +To compile paradiseo-peo in the default directory, +go to paradiseo-peo/build/ and run: + > cmake ../ -Dconfig= + > make + // for an easy-use of the provided lessons + > make install + // optional (if the documentation is not already available) + > make doc + +To compile paradiseo-peo anywhere else, simply run: + > cmake $(PEO) -Dconfig= + > make + // for an easy-use of the provided lessons + > make install + // optional (if the documentation is not already available) + > make doc + +To clean everything, simply run + > make clean + + +=================================================================== + DIRECTORY STRUCTURE +=================================================================== +After unpacking the archive file, you should end up with the following +structure: + +.../ The main PARADISEO-PEO directory, created when unpacking. + | + +-- build BUILD directory that contains libraries and executable files. + | + +-- src SOURCE directory Contains most PARADISEO-PEO .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 APPLICATIONS - one directory per separate application. + | + +-- examples Examples repository including source code shared by all or most of the included lessons. + | | + | +- tsp A Traveling Salesman Problem (TSP) example with benchmarks, the main operators, definitions, etc. + | + +-- Lesson1 A simple ParadisEO-PEO evolutionary algorithm example using the peoEA class. + | + +-- Lesson2 Example of an EA featuring a parallel evaluation of the population/parallel fitness function evaluation. + | + +-- Lesson3 Example of an asynchronous insular model including two evolutionary algorithms. + | + +-- Lesson4 Example of a parallel pso + | + +-- Walkthrough Walkthrough ParadisEO-PEO features - EA+LS hybridization, parallelization, insular model. + +=================================================================== + NOTES +=================================================================== + +Mailing list : paradiseo-help@lists.gforge.inria.fr diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/CMakeLists.txt b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/CMakeLists.txt new file mode 100644 index 000000000..5934e8857 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/CMakeLists.txt @@ -0,0 +1,26 @@ + +########################################################################################## +### PEO Doc generation using Doxygen +########################################################################################## + +IF (DOXYGEN_FOUND) + + SET(DOC_DIR ${CMAKE_BINARY_DIR}/doc CACHE PATH "PEO documentation directory") + SET(PEO_DOC_CONFIG_FILE "peo.doxyfile" CACHE PATH "PEO documentation configuration file") + # define the doc target + IF (DOXYGEN_EXECUTABLE) + ADD_CUSTOM_TARGET(doc + COMMAND ${DOXYGEN_EXECUTABLE} ${PEO_DOC_CONFIG_FILE} + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + ) + ENDIF (DOXYGEN_EXECUTABLE) + + # configure doxyfile file + CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/doc/${PEO_DOC_CONFIG_FILE}.cmake" + "${CMAKE_BINARY_DIR}/doc/${PEO_DOC_CONFIG_FILE}") + +ELSE (DOXYGEN_FOUND) + MESSAGE(STATUS "Unable to generate the documentation, Doxygen package not found") +ENDIF (DOXYGEN_FOUND) + +########################################################################################## \ No newline at end of file diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/Lesson1_2main_8cpp-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/Lesson1_2main_8cpp-source.html new file mode 100644 index 000000000..9342a2ab5 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/Lesson1_2main_8cpp-source.html @@ -0,0 +1,136 @@ + + +ParadisEO-PEOMovingObjects: main.cpp Source File + + + + +
+
+

main.cpp

00001 /* 
+00002 * <main.cpp>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #include "route.h"
+00038 #include "route_init.h"
+00039 #include "route_eval.h"
+00040 
+00041 #include "order_xover.h"
+00042 #include "city_swap.h"
+00043 
+00044 #include "param.h"
+00045 
+00046 #include <peo>
+00047 
+00048 
+00049 #define POP_SIZE 10
+00050 #define NUM_GEN 100
+00051 #define CROSS_RATE 1.0
+00052 #define MUT_RATE 0.01
+00053 
+00054 
+00055 int main( int __argc, char** __argv ) {
+00056 
+00057         // initializing the ParadisEO-PEO environment
+00058         peo :: init( __argc, __argv );
+00059 
+00060 
+00061         // processing the command line specified parameters
+00062         loadParameters( __argc, __argv );
+00063 
+00064 
+00065         // init, eval operators, EA operators -------------------------------------------------------------------------------------------------------------
+00066 
+00067         RouteInit route_init;   // random init object - creates random Route objects
+00068         RouteEval full_eval;    // evaluator object - offers a fitness value for a specified Route object
+00069 
+00070         OrderXover crossover;   // crossover operator - creates two offsprings out of two specified parents
+00071         CitySwap mutation;      // mutation operator - randomly mutates one gene for a specified individual
+00072         // ------------------------------------------------------------------------------------------------------------------------------------------------
+00073 
+00074 
+00075         // evolutionary algorithm components --------------------------------------------------------------------------------------------------------------
+00076 
+00077         eoPop< Route > population( POP_SIZE, route_init );      // initial population for the algorithm having POP_SIZE individuals
+00078         peoSeqPopEval< Route > eaPopEval( full_eval );          // evaluator object - to be applied at each iteration on the entire population
+00079 
+00080         eoGenContinue< Route > eaCont( NUM_GEN );               // continuation criterion - the algorithm will iterate for NUM_GEN generations
+00081         eoCheckPoint< Route > eaCheckpointContinue( eaCont );   // checkpoint object - verify at each iteration if the continuation criterion is met
+00082 
+00083         eoRankingSelect< Route > selectionStrategy;             // selection strategy - applied at each iteration for selecting parent individuals
+00084         eoSelectNumber< Route > eaSelect( selectionStrategy, POP_SIZE ); // selection object - POP_SIZE individuals are selected at each iteration
+00085 
+00086         // transform operator - includes the crossover and the mutation operators with a specified associated rate
+00087         eoSGATransform< Route > transform( crossover, CROSS_RATE, mutation, MUT_RATE );
+00088         peoSeqTransform< Route > eaTransform( transform );      // ParadisEO transform operator (please remark the peo prefix) - wraps an e EO transform object
+00089 
+00090         eoPlusReplacement< Route > eaReplace;                   // replacement strategy - for replacing the initial population with offspring individuals
+00091         // ------------------------------------------------------------------------------------------------------------------------------------------------
+00092 
+00093 
+00094         // ParadisEO-PEO evolutionary algorithm -----------------------------------------------------------------------------------------------------------
+00095 
+00096         peoEA< Route > eaAlg( eaCheckpointContinue, eaPopEval, eaSelect, eaTransform, eaReplace );
+00097         
+00098         eaAlg( population );    // specifying the initial population for the algorithm, to be iteratively evolved
+00099         // ------------------------------------------------------------------------------------------------------------------------------------------------
+00100 
+00101 
+00102         peo :: run( );
+00103         peo :: finalize( );
+00104         // shutting down the ParadisEO-PEO environment
+00105 
+00106         return 0;
+00107 }
+

Generated on Mon Oct 8 11:16:45 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/Lesson2_2main_8cpp-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/Lesson2_2main_8cpp-source.html new file mode 100644 index 000000000..1c9f16bfe --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/Lesson2_2main_8cpp-source.html @@ -0,0 +1,168 @@ + + +ParadisEO-PEOMovingObjects: main.cpp Source File + + + + +
+
+

main.cpp

00001 /* 
+00002 * <main.cpp>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #include "route.h"
+00038 #include "route_init.h"
+00039 #include "route_eval.h"
+00040 
+00041 #include "order_xover.h"
+00042 #include "city_swap.h"
+00043 
+00044 #include "param.h"
+00045 
+00046 #include "merge_route_eval.h"
+00047 #include "part_route_eval.h"
+00048 
+00049 
+00050 #include <peo>
+00051 
+00052 
+00053 #define POP_SIZE 10
+00054 #define NUM_GEN 100
+00055 #define CROSS_RATE 1.0
+00056 #define MUT_RATE 0.01
+00057 
+00058 #define NUM_PART_EVALS 2
+00059 
+00060 
+00061 // by default, parallel evaluation of the population is performed;
+00062 // for parallel fitness evaluation, uncomment the following line
+00063 
+00064 // #define PARALLEL_FIT_EVALUATION
+00065 
+00066 
+00067 int main( int __argc, char** __argv ) {
+00068 
+00069         // initializing the ParadisEO-PEO environment
+00070         peo :: init( __argc, __argv );
+00071 
+00072 
+00073         // processing the command line specified parameters
+00074         loadParameters( __argc, __argv );
+00075 
+00076 
+00077         // init, eval operators, EA operators -------------------------------------------------------------------------------------------------------------
+00078 
+00079         RouteInit route_init;   // random init object - creates random Route objects
+00080         RouteEval full_eval;    // evaluator object - offers a fitness value for a specified Route object
+00081 
+00082         OrderXover crossover;   // crossover operator - creates two offsprings out of two specified parents
+00083         CitySwap mutation;      // mutation operator - randomly mutates one gene for a specified individual
+00084         // ------------------------------------------------------------------------------------------------------------------------------------------------
+00085 
+00086 
+00087         // evolutionary algorithm components --------------------------------------------------------------------------------------------------------------
+00088 
+00089         eoPop< Route > population( POP_SIZE, route_init );      // initial population for the algorithm having POP_SIZE individuals
+00090 
+00091 
+00092         #ifdef PARALLEL_FIT_EVALUATION
+00093 
+00094                 MergeRouteEval merge_eval;
+00095 
+00096                 std :: vector< eoEvalFunc< Route >* > part_eval;
+00097                 for ( unsigned index = 1; index <= NUM_PART_EVALS; index++ )
+00098                         part_eval.push_back( new PartRouteEval( ( float )( index - 1 ) / NUM_PART_EVALS, ( float )index / NUM_PART_EVALS ) );
+00099 
+00100                 peoParaPopEval< Route > ox_pop_eval( part_eval, merge_eval );
+00101 
+00102         #else
+00103 
+00104                peoParaPopEval< Route > ox_pop_eval( full_eval );
+00105 
+00106         #endif
+00107 
+00108 
+00109 
+00110         peoParaPopEval< Route > eaPopEval( full_eval );         // evaluator object - to be applied at each iteration on the entire population
+00111 
+00112         eoGenContinue< Route > eaCont( NUM_GEN );               // continuation criterion - the algorithm will iterate for NUM_GEN generations
+00113         eoCheckPoint< Route > eaCheckpointContinue( eaCont );   // checkpoint object - verify at each iteration if the continuation criterion is met
+00114 
+00115         eoRankingSelect< Route > selectionStrategy;             // selection strategy - applied at each iteration for selecting parent individuals
+00116         eoSelectNumber< Route > eaSelect( selectionStrategy, POP_SIZE ); // selection object - POP_SIZE individuals are selected at each iteration
+00117 
+00118         // transform operator - includes the crossover and the mutation operators with a specified associated rate
+00119         eoSGATransform< Route > transform( crossover, CROSS_RATE, mutation, MUT_RATE );
+00120         peoSeqTransform< Route > eaTransform( transform );      // ParadisEO transform operator (please remark the peo prefix) - wraps an e EO transform object
+00121 
+00122         eoPlusReplacement< Route > eaReplace;                   // replacement strategy - for replacing the initial population with offspring individuals
+00123         // ------------------------------------------------------------------------------------------------------------------------------------------------
+00124 
+00125 
+00126         // ParadisEO-PEO evolutionary algorithm -----------------------------------------------------------------------------------------------------------
+00127 
+00128         peoEA< Route > eaAlg( eaCheckpointContinue, eaPopEval, eaSelect, eaTransform, eaReplace );
+00129         
+00130         eaAlg( population );    // specifying the initial population for the algorithm, to be iteratively evolved
+00131         // ------------------------------------------------------------------------------------------------------------------------------------------------
+00132 
+00133 
+00134         peo :: run( );
+00135         peo :: finalize( );
+00136         // shutting down the ParadisEO-PEO environment
+00137 
+00138         return 0;
+00139 }
+

Generated on Mon Oct 8 11:16:45 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/Lesson3_2main_8cpp-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/Lesson3_2main_8cpp-source.html new file mode 100644 index 000000000..95fcf0fac --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/Lesson3_2main_8cpp-source.html @@ -0,0 +1,217 @@ + + +ParadisEO-PEOMovingObjects: main.cpp Source File + + + + +
+
+

main.cpp

00001 /* 
+00002 * <main.cpp>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #include "route.h"
+00038 #include "route_init.h"
+00039 #include "route_eval.h"
+00040 
+00041 #include "order_xover.h"
+00042 #include "city_swap.h"
+00043 
+00044 #include "param.h"
+00045 
+00046 
+00047 #include <peo>
+00048 
+00049 
+00050 #define POP_SIZE 10
+00051 #define NUM_GEN 100
+00052 #define CROSS_RATE 1.0
+00053 #define MUT_RATE 0.01
+00054 
+00055 #define MIG_FREQ 10
+00056 #define MIG_SIZE 5
+00057 
+00058 
+00059 int main( int __argc, char** __argv ) {
+00060 
+00061         // initializing the ParadisEO-PEO environment
+00062         peo :: init( __argc, __argv );
+00063 
+00064 
+00065         // processing the command line specified parameters
+00066         loadParameters( __argc, __argv );
+00067 
+00068 
+00069         // init, eval operators, EA operators -------------------------------------------------------------------------------------------------------------
+00070 
+00071         RouteInit route_init;   // random init object - creates random Route objects
+00072         RouteEval full_eval;    // evaluator object - offers a fitness value for a specified Route object
+00073 
+00074         OrderXover crossover;   // crossover operator - creates two offsprings out of two specified parents
+00075         CitySwap mutation;      // mutation operator - randomly mutates one gene for a specified individual
+00076         // ------------------------------------------------------------------------------------------------------------------------------------------------
+00077 
+00078 
+00079         // evolutionary algorithm components --------------------------------------------------------------------------------------------------------------
+00080 
+00081         eoPop< Route > population( POP_SIZE, route_init );      // initial population for the algorithm having POP_SIZE individuals
+00082         peoParaPopEval< Route > eaPopEval( full_eval );         // evaluator object - to be applied at each iteration on the entire population
+00083 
+00084         eoGenContinue< Route > eaCont( NUM_GEN );               // continuation criterion - the algorithm will iterate for NUM_GEN generations
+00085         eoCheckPoint< Route > eaCheckpointContinue( eaCont );   // checkpoint object - verify at each iteration if the continuation criterion is met
+00086 
+00087         eoRankingSelect< Route > selectionStrategy;             // selection strategy - applied at each iteration for selecting parent individuals
+00088         eoSelectNumber< Route > eaSelect( selectionStrategy, POP_SIZE ); // selection object - POP_SIZE individuals are selected at each iteration
+00089 
+00090         // transform operator - includes the crossover and the mutation operators with a specified associated rate
+00091         eoSGATransform< Route > transform( crossover, CROSS_RATE, mutation, MUT_RATE );
+00092         peoSeqTransform< Route > eaTransform( transform );      // ParadisEO transform operator (please remark the peo prefix) - wraps an e EO transform object
+00093 
+00094         eoPlusReplacement< Route > eaReplace;                   // replacement strategy - for replacing the initial population with offspring individuals
+00095         // ------------------------------------------------------------------------------------------------------------------------------------------------
+00096 
+00097 
+00098 
+00099         RingTopology topology;
+00100 
+00101         // migration policy and components ----------------------------------------------------------------------------------------------------------------
+00102 
+00103         eoPeriodicContinue< Route > mig_cont( MIG_FREQ );       // migration occurs periodically
+00104 
+00105         eoRandomSelect< Route > mig_select_one;                 // emigrants are randomly selected 
+00106         eoSelectNumber< Route > mig_select( mig_select_one, MIG_SIZE );
+00107 
+00108         eoPlusReplacement< Route > mig_replace;                 // immigrants replace the worse individuals
+00109 
+00110         peoSyncIslandMig< Route > mig( MIG_FREQ, mig_select, mig_replace, topology, population, population );
+00111         //peoAsyncIslandMig< Route > mig( mig_cont, mig_select, mig_replace, topology, population, population );
+00112 
+00113         eaCheckpointContinue.add( mig );
+00114         // ------------------------------------------------------------------------------------------------------------------------------------------------
+00115 
+00116 
+00117 
+00118 
+00119 
+00120         // ParadisEO-PEO evolutionary algorithm -----------------------------------------------------------------------------------------------------------
+00121 
+00122         peoEA< Route > eaAlg( eaCheckpointContinue, eaPopEval, eaSelect, eaTransform, eaReplace );
+00123 
+00124         mig.setOwner( eaAlg );
+00125         
+00126         eaAlg( population );    // specifying the initial population for the algorithm, to be iteratively evolved
+00127         // ------------------------------------------------------------------------------------------------------------------------------------------------
+00128 
+00129 
+00130 
+00131 
+00132         // evolutionary algorithm components --------------------------------------------------------------------------------------------------------------
+00133 
+00134         eoPop< Route > population2( POP_SIZE, route_init );     // initial population for the algorithm having POP_SIZE individuals
+00135         peoParaPopEval< Route > eaPopEval2( full_eval );        // evaluator object - to be applied at each iteration on the entire population
+00136 
+00137         eoGenContinue< Route > eaCont2( NUM_GEN );              // continuation criterion - the algorithm will iterate for NUM_GEN generations
+00138         eoCheckPoint< Route > eaCheckpointContinue2( eaCont2 ); // checkpoint object - verify at each iteration if the continuation criterion is met
+00139 
+00140         eoRankingSelect< Route > selectionStrategy2;            // selection strategy - applied at each iteration for selecting parent individuals
+00141         eoSelectNumber< Route > eaSelect2( selectionStrategy2, POP_SIZE ); // selection object - POP_SIZE individuals are selected at each iteration
+00142 
+00143         // transform operator - includes the crossover and the mutation operators with a specified associated rate
+00144         eoSGATransform< Route > transform2( crossover, CROSS_RATE, mutation, MUT_RATE );
+00145         peoSeqTransform< Route > eaTransform2( transform2 );    // ParadisEO transform operator (please remark the peo prefix) - wraps an e EO transform object
+00146 
+00147         eoPlusReplacement< Route > eaReplace2;                  // replacement strategy - for replacing the initial population with offspring individuals
+00148         // ------------------------------------------------------------------------------------------------------------------------------------------------
+00149 
+00150 
+00151 
+00152 
+00153         // migration policy and components ----------------------------------------------------------------------------------------------------------------
+00154 
+00155         eoPeriodicContinue< Route > mig_cont2( MIG_FREQ );      // migration occurs periodically
+00156 
+00157         eoRandomSelect< Route > mig_select_one2;                // emigrants are randomly selected 
+00158         eoSelectNumber< Route > mig_select2( mig_select_one2, MIG_SIZE );
+00159 
+00160         eoPlusReplacement< Route > mig_replace2;                // immigrants replace the worse individuals
+00161 
+00162         peoSyncIslandMig< Route > mig2( MIG_FREQ, mig_select2, mig_replace2, topology, population2, population2 );
+00163         //peoAsyncIslandMig< Route > mig2( mig_cont2, mig_select2, mig_replace2, topology, population2, population2 );
+00164 
+00165         eaCheckpointContinue2.add( mig2 );
+00166         // ------------------------------------------------------------------------------------------------------------------------------------------------
+00167 
+00168 
+00169 
+00170 
+00171 
+00172         // ParadisEO-PEO evolutionary algorithm -----------------------------------------------------------------------------------------------------------
+00173 
+00174         peoEA< Route > eaAlg2( eaCheckpointContinue2, eaPopEval2, eaSelect2, eaTransform2, eaReplace2 );
+00175 
+00176         mig2.setOwner( eaAlg2 );
+00177         
+00178         eaAlg2( population2 );  // specifying the initial population for the algorithm, to be iteratively evolved
+00179         // ------------------------------------------------------------------------------------------------------------------------------------------------
+00180 
+00181 
+00182 
+00183         peo :: run( );
+00184         peo :: finalize( );
+00185         // shutting down the ParadisEO-PEO environment
+00186 
+00187         return 0;
+00188 }
+

Generated on Mon Oct 8 11:16:45 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/LessonParallelAlgorithm_2main_8cpp-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/LessonParallelAlgorithm_2main_8cpp-source.html new file mode 100644 index 000000000..147881a07 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/LessonParallelAlgorithm_2main_8cpp-source.html @@ -0,0 +1,366 @@ + + +ParadisEO-PEOMovingObjects: main.cpp Source File + + + + +
+
+

main.cpp

00001 // "main.cpp"
+00002 
+00003 // (c) OPAC Team, LIFL, January 2006
+00004 
+00005 /* 
+00006    Contact: paradiseo-help@lists.gforge.inria.fr
+00007 */
+00008 
+00009 #include <eo>
+00010 #include <paradiseo>
+00011 
+00012 #include <peoParallelAlgorithmWrapper.h>
+00013 #include <peoSynchronousMultiStart.h>
+00014 
+00015 
+00016 
+00017 #include "route.h"
+00018 #include "route_init.h"
+00019 #include "route_eval.h"
+00020 
+00021 #include "order_xover.h"
+00022 #include "city_swap.h"
+00023 
+00024 #include "param.h"
+00025 
+00026 
+00027 
+00028 
+00029 #include <mo.h>
+00030 
+00031 #include <graph.h>
+00032 #include <route.h>
+00033 #include <route_eval.h>
+00034 #include <route_init.h>
+00035 
+00036 #include <two_opt.h>
+00037 #include <two_opt_init.h>
+00038 #include <two_opt_next.h>
+00039 #include <two_opt_incr_eval.h>
+00040 
+00041 
+00042 
+00043 #define RANDOM_POP_SIZE 30
+00044 #define RANDOM_ITERATIONS 10
+00045 
+00046 
+00047 #define POP_SIZE 10
+00048 #define NUM_GEN 100
+00049 #define CROSS_RATE 1.0
+00050 #define MUT_RATE 0.01
+00051 
+00052 #define NUMBER_OF_POPULATIONS 3
+00053 
+00054 
+00055 
+00056 struct RandomExplorationAlgorithm {
+00057 
+00058         RandomExplorationAlgorithm( peoPopEval< Route >& __popEval, peoSynchronousMultiStart< Route >& extParallelExecution ) 
+00059                 : popEval( __popEval ), parallelExecution( extParallelExecution ) { 
+00060         }
+00061 
+00062 
+00063         // the sequential algorithm to be executed in parallel by the wrapper
+00064         void operator()() {
+00065 
+00066                 RouteInit route_init;   // random init object - creates random Route objects
+00067                 RouteEval route_eval;
+00068                 eoPop< Route > population( RANDOM_POP_SIZE, route_init );
+00069 
+00070                 popEval( population );
+00071 
+00072 
+00073                 // executing HCs on the population in parallel
+00074                 parallelExecution( population );
+00075 
+00076 
+00077 
+00078                 // just to show off :: HCs on a vector of Route objects
+00079                 {
+00080                         Route* rVect = new Route[ 5 ];
+00081                         for ( unsigned int index = 0; index < 5; index++ ) {
+00082         
+00083                                 route_init( rVect[ index ] ); route_eval( rVect[ index ] );
+00084                         }
+00085         
+00086                         // applying the HCs on the vector of Route objects
+00087                         parallelExecution( rVect, rVect + 5 );
+00088                         delete[] rVect;
+00089                 }
+00090 
+00091 
+00092 
+00093                 Route bestRoute = population.best_element();
+00094 
+00095                 for ( unsigned int index = 0; index < RANDOM_ITERATIONS; index++ ) {
+00096 
+00097                         for ( unsigned int routeIndex = 0; routeIndex < RANDOM_POP_SIZE; routeIndex++ ) {
+00098 
+00099                                 route_init( population[ routeIndex ] );
+00100                         }
+00101 
+00102                         popEval( population );
+00103 
+00104                         if ( fabs( population.best_element().fitness() ) < fabs( bestRoute.fitness() ) ) bestRoute = population.best_element();
+00105 
+00106                         std::cout << "Random Iteration #" << index << "... [ " << bestRoute.fitness() << " ]" << std::flush << std::endl; 
+00107                 }
+00108         }
+00109 
+00110 
+00111         peoPopEval< Route >& popEval;
+00112         peoSynchronousMultiStart< Route >& parallelExecution;
+00113 };
+00114 
+00115 
+00116 
+00117 
+00118 int main( int __argc, char** __argv ) {
+00119 
+00120         srand( time(NULL) );
+00121 
+00122 
+00123 
+00124         // initializing the ParadisEO-PEO environment
+00125         peo :: init( __argc, __argv );
+00126 
+00127 
+00128         // processing the command line specified parameters
+00129         loadParameters( __argc, __argv );
+00130 
+00131 
+00132 
+00133         // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+00134         // #1 An EO evolutionary algorithm to be executed in parallel with other algorithms (no parallel evaluation, no etc.).
+00135 
+00136         // init, eval operators, EA operators -------------------------------------------------------------------------------------------------------------
+00137         RouteInit route_init;   // random init object - creates random Route objects
+00138         RouteEval full_eval;    // evaluator object - offers a fitness value for a specified Route object
+00139 
+00140         OrderXover crossover;   // crossover operator - creates two offsprings out of two specified parents
+00141         CitySwap mutation;      // mutation operator - randomly mutates one gene for a specified individual
+00142         // ------------------------------------------------------------------------------------------------------------------------------------------------
+00143 
+00144 
+00145         // evolutionary algorithm components --------------------------------------------------------------------------------------------------------------
+00146 
+00147         eoPop< Route > population( POP_SIZE, route_init );      // initial population for the algorithm having POP_SIZE individuals
+00148 
+00149         eoGenContinue< Route > eaCont( NUM_GEN );               // continuation criterion - the algorithm will iterate for NUM_GEN generations
+00150         eoCheckPoint< Route > eaCheckpointContinue( eaCont );   // checkpoint object - verify at each iteration if the continuation criterion is met
+00151 
+00152         eoRankingSelect< Route > selectionStrategy;             // selection strategy - applied at each iteration for selecting parent individuals
+00153         eoSelectNumber< Route > eaSelect( selectionStrategy, POP_SIZE ); // selection object - POP_SIZE individuals are selected at each iteration
+00154 
+00155         // transform operator - includes the crossover and the mutation operators with a specified associated rate
+00156         eoSGATransform< Route > transform( crossover, CROSS_RATE, mutation, MUT_RATE );
+00157 
+00158         eoPlusReplacement< Route > eaReplace;                   // replacement strategy - for replacing the initial population with offspring individuals
+00159         // ------------------------------------------------------------------------------------------------------------------------------------------------
+00160 
+00161 
+00162 
+00163         // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+00164         // SEQENTIAL ALGORITHM DEFINITION -----------------------------------------------------------------------------------------------------------------
+00165         eoEasyEA< Route > eaAlg( eaCheckpointContinue, full_eval, eaSelect, transform, eaReplace );
+00166         // SEQENTIAL ALGORITHM DEFINITION -----------------------------------------------------------------------------------------------------------------
+00167 
+00168         // SETTING UP THE PARALLEL WRAPPER ----------------------------------------------------------------------------------------------------------------
+00169         peoParallelAlgorithmWrapper parallelEAAlg( eaAlg, population ); // specifying the embedded algorithm and the algorithm input data
+00170         // SETTING UP THE PARALLEL WRAPPER ----------------------------------------------------------------------------------------------------------------
+00171         // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+00172         // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+00173 
+00174 
+00175 
+00176 
+00177 
+00178         // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+00179         // #2 A MO hill climbing to be executed in parallel with other algorithms (no parallel evaluation, no etc.).
+00180 
+00181         if ( getNodeRank() == 1 ) {
+00182                 
+00183                 Graph::load( __argv [ 1 ] );
+00184         }
+00185         
+00186         Route route;
+00187         RouteInit init; init( route );
+00188         RouteEval full_evalHC; full_evalHC( route );
+00189         
+00190         if ( getNodeRank() == 1 ) {
+00191 
+00192                 std :: cout << "[From] " << route << std :: endl;
+00193         }
+00194         
+00195 
+00196         TwoOptInit two_opt_init;
+00197         TwoOptNext two_opt_next;
+00198         TwoOptIncrEval two_opt_incr_eval;
+00199         
+00200         moBestImprSelect< TwoOpt > two_opt_select;
+00201 
+00202 
+00203 
+00204         // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+00205         // SEQENTIAL ALGORITHM DEFINITION -----------------------------------------------------------------------------------------------------------------
+00206         moHC< TwoOpt > hill_climbing( two_opt_init, two_opt_next, two_opt_incr_eval, two_opt_select, full_evalHC );
+00207         // SEQENTIAL ALGORITHM DEFINITION -----------------------------------------------------------------------------------------------------------------
+00208 
+00209         // SETTING UP THE PARALLEL WRAPPER ----------------------------------------------------------------------------------------------------------------
+00210         peoParallelAlgorithmWrapper parallelHillClimbing( hill_climbing, route );       // specifying the embedded algorithm and the algorithm input data
+00211         // SETTING UP THE PARALLEL WRAPPER ----------------------------------------------------------------------------------------------------------------
+00212         // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+00213         // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+00214 
+00215 
+00216 
+00217 
+00218 
+00219         
+00220         // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+00221         // #3 A user defined algorithm to be executed in parallel with other algorithms - parallel evaluation and synchronous 
+00222         //              multi-start of several hill-climbing algorithms (inside the user defined algorithm)!!.
+00223 
+00224         RouteEval full_evalRandom;
+00225         peoParaPopEval< Route > randomParaEval( full_evalRandom );
+00226 
+00227 
+00228         peoSynchronousMultiStart< Route > parallelExecution( hill_climbing );
+00229 
+00230         RandomExplorationAlgorithm randomExplorationAlgorithm( randomParaEval, parallelExecution );
+00231 
+00232 
+00233         // SETTING UP THE PARALLEL WRAPPER ----------------------------------------------------------------------------------------------------------------
+00234         peoParallelAlgorithmWrapper parallelRandExp( randomExplorationAlgorithm );      // specifying the embedded algorithm - no input data in this case
+00235 
+00236         randomParaEval.setOwner( parallelRandExp );
+00237         parallelExecution.setOwner( parallelRandExp );
+00238         // SETTING UP THE PARALLEL WRAPPER ----------------------------------------------------------------------------------------------------------------
+00239         // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+00240 
+00241 
+00242 
+00243 
+00244         // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+00245         // #4 Synchronous Multi-Start: several hill-climbing algorithms launched in parallel on different initial solutions
+00246 
+00247         RouteInit ex_hc_route_init;     // random init object - creates random Route objects
+00248         RouteEval ex_hc_full_eval;      // evaluator object - offers a fitness value for a specified Route object
+00249 
+00250         eoPop< Route > ex_hc_population( POP_SIZE, ex_hc_route_init );
+00251 
+00252         for ( unsigned int index = 0; index < POP_SIZE; index++ ) {
+00253 
+00254                 ex_hc_full_eval( ex_hc_population[ index ] );
+00255         }
+00256 
+00257 
+00258         // SETTING UP THE PARALLEL WRAPPER ----------------------------------------------------------------------------------------------------------------
+00259         peoSynchronousMultiStart< Route > ex_hc_parallelExecution( hill_climbing );
+00260         peoParallelAlgorithmWrapper ex_hc_parallel( ex_hc_parallelExecution, ex_hc_population );        // specifying the embedded algorithm - no input data in this case
+00261 
+00262         ex_hc_parallelExecution.setOwner( ex_hc_parallel );
+00263         // SETTING UP THE PARALLEL WRAPPER ----------------------------------------------------------------------------------------------------------------
+00264         // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+00265 
+00266 
+00267 
+00268 
+00269 
+00270         // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+00271         // #5 Synchronous Multi-Start: Multiple EO evolutionary algorithms to be executed in parallel
+00272         //      (inside different processes, on different populations; no parallel evaluation, no etc.).
+00273 
+00274         RouteInit ex_route_init;        // random init object - creates random Route objects
+00275         RouteEval ex_full_eval;         // evaluator object - offers a fitness value for a specified Route object
+00276 
+00277         std::vector< eoPop< Route > > ex_population;
+00278         ex_population.resize( NUMBER_OF_POPULATIONS );
+00279 
+00280         for ( unsigned int indexPop = 0; indexPop < NUMBER_OF_POPULATIONS; indexPop++ ) {
+00281 
+00282                 ex_population[ indexPop ].resize( POP_SIZE );
+00283 
+00284                 for ( unsigned int index = 0; index < POP_SIZE; index++ ) {
+00285 
+00286                         ex_route_init( ex_population[ indexPop ][ index ] );
+00287                         ex_full_eval( ex_population[ indexPop ][ index ] );
+00288                 }
+00289         }
+00290 
+00291 
+00292         // SETTING UP THE PARALLEL WRAPPER ----------------------------------------------------------------------------------------------------------------
+00293         peoSynchronousMultiStart< eoPop< Route > > ex_parallelExecution( eaAlg );
+00294         peoParallelAlgorithmWrapper ex_parallel( ex_parallelExecution, ex_population ); // specifying the embedded algorithm - no input data in this case
+00295 
+00296         ex_parallelExecution.setOwner( ex_parallel );
+00297         // SETTING UP THE PARALLEL WRAPPER ----------------------------------------------------------------------------------------------------------------
+00298         // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+00299 
+00300 
+00301 
+00302 
+00303 
+00304 
+00305         peo :: run( );
+00306         peo :: finalize( );
+00307         // shutting down the ParadisEO-PEO environment
+00308 
+00309 
+00310 
+00311         // the algorithm is executed in the #1 rank process
+00312         if ( getNodeRank() == 1 ) {
+00313 
+00314                 std :: cout << "[To] " << route << std :: endl << std::endl;
+00315 
+00316 
+00317                 std :: cout << "Synchronous Multi-Start HCs:" << std :: endl ;
+00318                 for ( unsigned int index = 0; index < POP_SIZE; index++ ) {
+00319         
+00320                         std::cout << ex_hc_population[ index ] << std::endl;
+00321                 }
+00322                 std::cout << std::endl << std::endl;
+00323 
+00324 
+00325                 std :: cout << "Synchronous Multi-Start EAs:" << std :: endl ;
+00326                 for ( unsigned int index = 0; index < NUMBER_OF_POPULATIONS; index++ ) {
+00327         
+00328                         std::cout << ex_population[ index ] << std::endl;
+00329                 }
+00330                 std::cout << std::endl << std::flush;
+00331 
+00332         }
+00333 
+00334 
+00335 
+00336         return 0;
+00337 }
+

Generated on Mon Oct 8 11:16:45 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/README-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/README-source.html new file mode 100644 index 000000000..4aa422480 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/README-source.html @@ -0,0 +1,107 @@ + + +ParadisEO-PEOMovingObjects: README Source File + + + + +
+
+

README

00001                 PARADISEO-PEO README FILE
+00002 =======================================================================
+00003          check latest news at http://paradiseo.gforge.inria.fr/
+00004 =======================================================================
+00005 
+00006 Welcome to ParadisEO-PEO, the Parallel Evolving Objects library.
+00007 The latest news about ParadisEO-PEO can be found on the gforge repository at
+00008 http://paradiseo.gforge.inria.fr/
+00009 In case of any problem, please e-mail us at
+00010 paradiseo-help@lists.gforge.inria.fr
+00011 
+00012 
+00013 =======================================================================
+00014                         BUILDING PARADISEO-PEO
+00015 =======================================================================
+00016 The basic installation procedure goes the following.
+00017 
+00018 To compile paradiseo-peo in the default directory,
+00019 go to paradiseo-peo/build/ and run:
+00020     > cmake ../ -Dconfig=<path to the install.cmake file>
+00021     > make
+00022     // for an easy-use of the provided lessons
+00023     > make install
+00024     // optional (if the documentation is not already available)
+00025     > make doc
+00026 
+00027 To compile paradiseo-peo anywhere else, simply run:
+00028     > cmake $(PEO) -Dconfig=<path to the install.cmake file>
+00029     > make
+00030     // for an easy-use of the provided lessons
+00031     > make install
+00032     // optional (if the documentation is not already available)
+00033     > make doc
+00034 
+00035 To clean everything, simply run
+00036     > make clean
+00037 
+00038 
+00039 ===================================================================
+00040                        DIRECTORY STRUCTURE
+00041 ===================================================================
+00042 After unpacking the archive file, you should end up with the following
+00043 structure:
+00044 
+00045 .../                     The main PARADISEO-PEO directory, created when unpacking.
+00046    |
+00047    +-- build             BUILD directory that contains libraries and executable files.
+00048    |
+00049    +-- src               SOURCE directory Contains most PARADISEO-PEO .h files. 
+00050    |   
+00051    +-- doc               DOCUMENTATION directory (generated by Doxygen).
+00052    |   |
+00053    |   +- html           HTML files - start at index.html. 
+00054    |   |
+00055    |   +- latex          latex files - use to generate Postcript doc.
+00056    |   |
+00057    |   +- man            Unix man format documentation.
+00058    |
+00059    |
+00060    +-- tutorial          APPLICATIONS - one directory per separate application.
+00061        |
+00062        +-- examples      Examples repository including source code shared by all or most of the included lessons.
+00063        |   |
+00064        |   +- tsp        A Traveling Salesman Problem (TSP) example with benchmarks, the main operators, definitions, etc.
+00065        |
+00066        +-- Lesson1       A simple ParadisEO-PEO evolutionary algorithm example using the peoEA class.
+00067        |
+00068        +-- Lesson2       Example of an EA featuring a parallel evaluation of the population/parallel fitness function evaluation.
+00069        |
+00070        +-- Lesson3       Example of an asynchronous insular model including two evolutionary algorithms.
+00071        |
+00072        +-- Walkthrough   Walkthrough ParadisEO-PEO features - EA+LS hybridization, parallelization, insular model.
+00073 
+00074 ===================================================================
+00075               NOTES
+00076 ===================================================================
+00077 
+00078 Mailing list : paradiseo-help@lists.gforge.inria.fr
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/annotated.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/annotated.html new file mode 100644 index 000000000..8bbde05d0 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/annotated.html @@ -0,0 +1,76 @@ + + +ParadisEO-PEOMovingObjects: Class List + + + + +
+
+ +

ParadisEO-PEOMovingObjects Class List

Here are the classes, structs, unions and interfaces with brief descriptions: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Communicable
Communicator
Cooperative
DisplayBestRoute
MergeRouteEval
peoAggEvalFunc< EOT >The peoAggEvalFunc class offers only the interface for creating aggregate evaluation functions - there are no direct internal functions provided
peoAsyncIslandMig< EOT >The peoAsyncIslandMig class offers the elementary basis for implementating an asynchronous island migration model - requires the specification of several basic parameters, i.e
peoEA< EOT >The peoEA class offers an elementary evolutionary algorithm implementation
peoNoAggEvalFunc< EOT >The peoNoAggEvalFunc class does nothing more than an association between a fitness value and a specified individual
peoParallelAlgorithmWrapper
peoParallelAlgorithmWrapper::AbstractAlgorithm
peoParallelAlgorithmWrapper::Algorithm< AlgorithmType, AlgorithmDataType >
peoParallelAlgorithmWrapper::Algorithm< AlgorithmType, void >
peoParaPopEval< EOT >The peoParaPopEval represents a wrapper for creating a functor capable of applying in parallel an EO-derived evaluation functor
peoParaSGATransform< EOT >
peoPopEval< EOT >The peoPopEval class provides the interface for constructing ParadisEO specific evaluation functors
peoSeqPopEval< EOT >The peoSeqPopEval class acts only as a ParadisEO specific sequential evaluation functor - a wrapper for incorporating an eoEvalFunc< EOT >-derived class as evaluation functor
peoSeqTransform< EOT >The peoSeqTransform represent a wrapper for offering the possibility of using EO derived transform operators along with the ParadisEO evolutionary algorithms
peoSynchronousMultiStart< EntityType >
peoSynchronousMultiStart< EntityType >::AbstractAggregationAlgorithm
peoSynchronousMultiStart< EntityType >::AbstractAlgorithm
peoSynchronousMultiStart< EntityType >::AbstractDataType
peoSynchronousMultiStart< EntityType >::AggregationAlgorithm< AggregationAlgorithmType >
peoSynchronousMultiStart< EntityType >::Algorithm< AlgorithmType >
peoSynchronousMultiStart< EntityType >::DataType< Type >
peoSynchronousMultiStart< EntityType >::NoAggregationFunction
peoSyncIslandMig< EOT >The peoSyncIslandMig class offers the elementary basis for implementating a synchronous island migration model - requires the specification of several basic parameters, i.e
peoSyncMultiStart< EOT >The peoSyncMultiStart class provides the basis for implementing the synchronous multi-start model, for launching several solution-based algorithms in parallel on a specified initial population
peoTransform< EOT >The peoTransform class acts only as an interface for creating transform operators - for an example please refer to the peoSeqTransform and the peoParaSGATransform classes
RandomExplorationAlgorithm
ReactiveThread
RingTopology
Runner
SEND_REQUEST
Service
Thread
Topology
Worker
+
Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/city__swap_8cpp-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/city__swap_8cpp-source.html new file mode 100644 index 000000000..cae89d871 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/city__swap_8cpp-source.html @@ -0,0 +1,78 @@ + + +ParadisEO-PEOMovingObjects: city_swap.cpp Source File + + + + +
+
+

city_swap.cpp

00001 /* 
+00002 * <city_swap.cpp>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #include <utils/eoRNG.h>
+00038 
+00039 #include "city_swap.h"
+00040 
+00041 bool CitySwap :: operator () (Route & __route) {
+00042   
+00043   std :: swap (__route [rng.random (__route.size ())],
+00044                __route [rng.random (__route.size ())]) ;
+00045     
+00046   __route.invalidate () ;
+00047   
+00048   return true ;
+00049 }
+

Generated on Mon Oct 8 11:16:45 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/city__swap_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/city__swap_8h-source.html new file mode 100644 index 000000000..4b77e3b33 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/city__swap_8h-source.html @@ -0,0 +1,81 @@ + + +ParadisEO-PEOMovingObjects: city_swap.h Source File + + + + +
+
+

city_swap.h

00001 /* 
+00002 * <city_swap.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef city_swap_h
+00038 #define city_swap_h
+00039 
+00040 #include <eoOp.h>
+00041 
+00042 #include "route.h"
+00043 
+00046 class CitySwap : public eoMonOp <Route> {
+00047   
+00048 public :
+00049   
+00050   bool operator () (Route & __route) ;
+00051     
+00052 } ;
+00053 
+00054 #endif
+

Generated on Mon Oct 8 11:16:45 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classCommunicable-members.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classCommunicable-members.html new file mode 100644 index 000000000..09c8fb595 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classCommunicable-members.html @@ -0,0 +1,48 @@ + + +ParadisEO-PEOMovingObjects: Member List + + + + +
+
+ +

Communicable Member List

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

+ + + + + + + + + + + +
Communicable()Communicable
getKey()Communicable
keyCommunicable [protected]
lock()Communicable
num_commCommunicable [protected, static]
resume()Communicable
sem_lockCommunicable [protected]
sem_stopCommunicable [protected]
stop()Communicable
unlock()Communicable
~Communicable()Communicable [virtual]


Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classCommunicable.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classCommunicable.html new file mode 100644 index 000000000..a9090f07e --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classCommunicable.html @@ -0,0 +1,98 @@ + + +ParadisEO-PEOMovingObjects: Communicable Class Reference + + + + +
+
+ +

Communicable Class Reference

Inheritance diagram for Communicable: +

+ +Cooperative +Runner +Service +Worker +peoAsyncIslandMig< EOT > +peoSyncIslandMig< EOT > +peoEA< EOT > +peoParallelAlgorithmWrapper +peoPopEval< EOT > +peoSynchronousMultiStart< EntityType > +peoSyncMultiStart< EOT > +peoTransform< EOT > + +List of all members. + + + + + + + + + + + + + + + + + + + + + + + + + + +

Public Member Functions

Communicable ()
+virtual ~Communicable ()
+COMM_ID getKey ()
+void lock ()
+void unlock ()
+void stop ()
+void resume ()

Protected Attributes

+COMM_ID key
+sem_t sem_lock
+sem_t sem_stop

Static Protected Attributes

+static unsigned num_comm = 0
+

Detailed Description

+ +

+ +

+Definition at line 44 of file communicable.h.


The documentation for this class was generated from the following files: +
Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classCommunicable.png b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classCommunicable.png new file mode 100644 index 0000000000000000000000000000000000000000..d4c0f0893b73ef916ef74b93c1494b9d479c6ab6 GIT binary patch literal 4386 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 literal 0 HcmV?d00001 diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classCommunicator-members.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classCommunicator-members.html new file mode 100644 index 000000000..5fe11b6d9 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classCommunicator-members.html @@ -0,0 +1,46 @@ + + +ParadisEO-PEOMovingObjects: Member List + + + + +
+
+ +

Communicator Member List

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

+ + + + + + + + + +
Communicator(int *__argc, char ***__argv)Communicator
ReactiveThread()ReactiveThread
setActive()Thread
setPassive()Thread
sleep()ReactiveThread
start()Communicator [virtual]
Thread()Thread
wakeUp()ReactiveThread
~Thread()Thread [virtual]


Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classCommunicator.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classCommunicator.html new file mode 100644 index 000000000..466885c2b --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classCommunicator.html @@ -0,0 +1,59 @@ + + +ParadisEO-PEOMovingObjects: Communicator Class Reference + + + + +
+
+ +

Communicator Class Reference

Inheritance diagram for Communicator: +

+ +ReactiveThread +Thread + +List of all members. + + + + + + +

Public Member Functions

Communicator (int *__argc, char ***__argv)
+void start ()
+

Detailed Description

+ +

+ +

+Definition at line 43 of file comm.h.


The documentation for this class was generated from the following files: +
Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classCommunicator.png b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classCommunicator.png new file mode 100644 index 0000000000000000000000000000000000000000..0f0ce225befada7093a601526f633a52e4c45b89 GIT binary patch literal 472 zcmV;}0Vn>6P)iw;7faa%EELnaMo3jpxd=HFR7L zzhzJ=LxvThGNBA>uil2q<*HSnWu%M_7BAN4Ng;NWmZ>c-T=TGTC=A=g!W8djZ?mml znW90>GVhu7d2(>Gx6OH~Zb=}R_E|TBi?`;v^By=ei1GUR+`PVa#u;av`CAOSEli<% z1Fy;u4p~~__DopZCu{E*vRo69&IFpY1?V5-5eB)+Mu>Kdj46O7kWrBPG^u=ACLA)$ zFNbG$PJNvLx*0molXPnt6egT8`g~Nk!iW$#Jn0rpx0dNKXGStNzExj?e|Tv=k5mo- O0000 + +ParadisEO-PEOMovingObjects: Member List + + + + +
+
+ +

Cooperative Member List

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

+ + + + + + + + + + + + + + + + +
Communicable()Communicable
getKey()Communicable
getOwner()Cooperative
keyCommunicable [protected]
lock()Communicable
notifySending()Cooperative [virtual]
num_commCommunicable [protected, static]
ownerCooperative [private]
resume()Communicable
sem_lockCommunicable [protected]
sem_stopCommunicable [protected]
send(Cooperative *__coop)Cooperative
setOwner(Runner &__runner)Cooperative
stop()Communicable
unlock()Communicable
~Communicable()Communicable [virtual]


Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classCooperative.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classCooperative.html new file mode 100644 index 000000000..12e67471f --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classCooperative.html @@ -0,0 +1,70 @@ + + +ParadisEO-PEOMovingObjects: Cooperative Class Reference + + + + +
+
+ +

Cooperative Class Reference

Inheritance diagram for Cooperative: +

+ +Communicable +peoAsyncIslandMig< EOT > +peoSyncIslandMig< EOT > + +List of all members. + + + + + + + + + + + + + +

Public Member Functions

+RunnergetOwner ()
+void setOwner (Runner &__runner)
+void send (Cooperative *__coop)
+virtual void notifySending ()

Private Attributes

+Runnerowner
+

Detailed Description

+ +

+ +

+Definition at line 45 of file cooperative.h.


The documentation for this class was generated from the following files: +
Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classCooperative.png b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classCooperative.png new file mode 100644 index 0000000000000000000000000000000000000000..826cbc31b4febb82bbc504168b9e66a6879f01f2 GIT binary patch literal 926 zcmeAS@N?(olHy`uVBq!ia0y~yU`ztCJ6M>3r2efxl0Zr#z$e7@|Ns9$=Kuc(=Fd-< z0AzvjfddDs5B+}vEaktG3V`^+`PvM0&UG&U$>{{F;q8R zeb=hBcFJ%0#E%SS|9lK;Q&&98P1${;_EQT(?y3~I{z)}|T%VLrbdI!>QOa6#EUV`1 z4WajD%bCyh-8Oh;yilz7=&?zgukALBHm@`6wJtjM{eQ`wDI33U^0_vV_uP~H(~rH` zVf*-}SgPfmXZw0O4;jAoKmV;~`ro@98`p?>C(m+on*2E8+T+5t9>?l_xkg56@7TF@ zkrBuuAd1Pkb9eRsrkZ=Y0dxNK%#SaZp0dpP@%iVU^I8vmNx$>(OmK3|6$yFMWA42l z1ForO23}72dBu#*`J!-)80He|HYkTopc^sxqYkKHy9tw z=atMiu{kGpSGu>okf-AO2IEb#K3R5W{vIn#U$Rp=dC|sBr}Eh!um3jO%A1_owfNAS zZy(lXAI*|cPqw^%XT^lC6>_D48=Iplz!rAq2kg~abYnSlW>ges2DxL!Kd zEaCo!^7C&tRo^zEIWfN5c?(XGd}ECn^6HgRQal#6p+O3+0JdEu2>u9%1U`j$0(Y + +ParadisEO-PEOMovingObjects: Member List + + + + +
+
+ +

DisplayBestRoute Member List

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

+ + + + + + + + + + +
addTo(eoCheckPoint< EOT > &cp)eoUpdater
className(void) const eoUpdater [virtual]
DisplayBestRoute(eoPop< Route > &__pop)DisplayBestRoute
functor_category()eoF< void > [static]
lastCall()eoUpdater [virtual]
operator()()DisplayBestRoute [virtual]
popDisplayBestRoute [private]
result_type typedefeoF< void >
~eoF()eoF< void > [virtual]
~eoFunctorBase()eoFunctorBase [virtual]


Generated on Mon Oct 8 11:16:47 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classDisplayBestRoute.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classDisplayBestRoute.html new file mode 100644 index 000000000..9915fa19a --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classDisplayBestRoute.html @@ -0,0 +1,64 @@ + + +ParadisEO-PEOMovingObjects: DisplayBestRoute Class Reference + + + + +
+
+ +

DisplayBestRoute Class Reference

Inheritance diagram for DisplayBestRoute: +

+ +eoUpdater +eoF< void > +eoFunctorBase + +List of all members. + + + + + + + + + +

Public Member Functions

DisplayBestRoute (eoPop< Route > &__pop)
+void operator() ()

Private Attributes

+eoPop< Route > & pop
+

Detailed Description

+ +

+ +

+Definition at line 46 of file display_best_route.h.


The documentation for this class was generated from the following files: +
Generated on Mon Oct 8 11:16:47 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classDisplayBestRoute.png b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classDisplayBestRoute.png new file mode 100644 index 0000000000000000000000000000000000000000..e8040d807c7945801ea63bd76969be38b126523a GIT binary patch literal 631 zcmV--0*L*IP)>valkZ3zeaXsnj@K-EOi zu5oQIiWb|B%Efg8Fc;#5K$@r^bzqKaJf`7z@Qj56s)keq(v~LXm3t0APm#E6A88-C z*rnF%INm4FK8xS#dh?j$GKhZ`?aNDto?Ea_`E!QU9W}|H$v!|_@aI-B?p?UOzk>t0 zjXDqD?!TvUxBLB6?sR_|XPj}y88;Bi9}eca9HPX+>)g`(Lr%rKd4`Y_0Y{vQvEv+C zK@oCNjW~{`n~8EX4o|q6L*x;N4X40%J;@>Rh>m-;Bv##=Q$? z`NLMR{J}Wmj5F@aoaGP4bM@c=r8tI@kQW2}JC3N1AqHFxu`#5$S{*~Y$jv#9m%sN% zoTL!KktQ8y4A+}GF7LBXw>H@KfS zqYoFXWX>18Q|c)pigUiSr({!ZtNH@xN*}#Mp6%oDQ)&qZ&~dV_cx5iTpxbBT&&EFC zI{SRP&-DDNKdEFT`_n=7Es^3+^%nF`arnMGa(-dxE8OZ!`%&McQ@NeLgMT?oHLbJl RF}wf(002ovPDHLkV1lbPG;II? literal 0 HcmV?d00001 diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classMergeRouteEval-members.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classMergeRouteEval-members.html new file mode 100644 index 000000000..c85d970f1 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classMergeRouteEval-members.html @@ -0,0 +1,42 @@ + + +ParadisEO-PEOMovingObjects: Member List + + + + +
+
+ +

MergeRouteEval Member List

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

+ + + + + +
functor_category()eoBF< A1, A2, R > [static]
operator()(Route &__route, const int &__part_fit)MergeRouteEval
peoAggEvalFunc::operator()(A1, A2)=0eoBF< A1, A2, R > [pure virtual]
~eoBF()eoBF< A1, A2, R > [virtual]
~eoFunctorBase()eoFunctorBase [virtual]


Generated on Mon Oct 8 11:16:47 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classMergeRouteEval.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classMergeRouteEval.html new file mode 100644 index 000000000..212fc625d --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classMergeRouteEval.html @@ -0,0 +1,57 @@ + + +ParadisEO-PEOMovingObjects: MergeRouteEval Class Reference + + + + +
+
+ +

MergeRouteEval Class Reference

Inheritance diagram for MergeRouteEval: +

+ +peoAggEvalFunc< EOT > +eoBF< A1, A2, R > +eoFunctorBase + +List of all members. + + + + +

Public Member Functions

+void operator() (Route &__route, const int &__part_fit)
+

Detailed Description

+ +

+ +

+Definition at line 44 of file merge_route_eval.h.


The documentation for this class was generated from the following files: +
Generated on Mon Oct 8 11:16:47 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classMergeRouteEval.png b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classMergeRouteEval.png new file mode 100644 index 0000000000000000000000000000000000000000..7fa6399304bf98bd75034cfd049b0a54defb348d GIT binary patch literal 869 zcmV-r1DgDaP)M)FKJpuyM zYzB%CNqPd9=2RATz`SIjCAUF4v@jk6bC2WTJoKR$i#_m+5349g;CV^HQDz@P2xp@F zqh>$@J_TI<8l7xkvx;v6-u_-3_;tHo9QXlIHlP6wXg~uR(18B|xcr0j`rp_Fq(*0d z*z+?OtDH-S<(xd7B8Z_q|A*?V&1sfU)E)papVkM!G8IwGoC9ilL4ioUq%4X?888sr zbq|5;!yvl%KtYHPTVe}LDwTzznbQ`yYqap5*jpIuC9`Izyw&7uM0#Z5(1#Czhdz`j z1JpSl1)>7=_C%BqTQmFH9O4OJ%@~+=9yr$wcuC;$*XZ&W{kwpcw^=}3%rl??4QN0E z8qk0r30(fcdHru}1McU{s@?|cG)}94oZ~4+)jMD)x2hxTxQs(GF4(AMAWB&UJ%@lm zbugt?Bo}4y2|lQ10b=Y<_6!WD=>{w%Hf`~V0<}a0?tz?qU|{TkT5rR3D|CnR43gqt zUSx&c!b~hcncY?GaNeu3kby8>G7&2a^-t)4&5|1nJ78tu?n4F^A94YZ0#To}`>={~ z?ZZ9FIY}c?mb4TCYNAQJqEXg;cpv4_4m+&w`o4{TWnHU)QeyN2;L2ve6~N`M(d94t zcL6PLvw*mmXFvlQ(0~RspaDM;2y2^ne(g#O_zK`Azg45y75zMhX8Zt{1kfvO`(;a+ z25yPz{pP*PJ8L6B>QXN|jr!518vtn@>$^luqYO-fe92>1#%F+DXYu~uf#kzHaSljJ zRYn5H=Zb=WKm>X>qDp<=g$FilwBKT2ZT)HybozJcs~K` v@1JbPz$gAOkEd*KaC4ar27Enm^=tGW7iBLmbu}Iq00000NkvXXu0mjf1Kxt& literal 0 HcmV?d00001 diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classReactiveThread-members.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classReactiveThread-members.html new file mode 100644 index 000000000..efc2b058b --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classReactiveThread-members.html @@ -0,0 +1,45 @@ + + +ParadisEO-PEOMovingObjects: Member List + + + + +
+
+ +

ReactiveThread Member List

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

+ + + + + + + + +
ReactiveThread()ReactiveThread
semReactiveThread [private]
setActive()Thread
setPassive()Thread
sleep()ReactiveThread
Thread()Thread
wakeUp()ReactiveThread
~Thread()Thread [virtual]


Generated on Mon Oct 8 11:16:49 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classReactiveThread.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classReactiveThread.html new file mode 100644 index 000000000..9a1793083 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classReactiveThread.html @@ -0,0 +1,67 @@ + + +ParadisEO-PEOMovingObjects: ReactiveThread Class Reference + + + + +
+
+ +

ReactiveThread Class Reference

Inheritance diagram for ReactiveThread: +

+ +Thread +Communicator +Worker + +List of all members. + + + + + + + + + + + +

Public Member Functions

ReactiveThread ()
+void sleep ()
+void wakeUp ()

Private Attributes

+sem_t sem
+

Detailed Description

+ +

+ +

+Definition at line 44 of file reac_thread.h.


The documentation for this class was generated from the following files: +
Generated on Mon Oct 8 11:16:49 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classReactiveThread.png b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classReactiveThread.png new file mode 100644 index 0000000000000000000000000000000000000000..46b2d6d40ee1d26fc0a846cb7e148fe5f1cd4c93 GIT binary patch literal 633 zcmV-<0*3vGP)?V7jCQZEm5tbP~Dq6H4x~rYB3T1$&17l;Fw?gFY@?C5*v(4J2 zE42?sy&cK`fEhJy7L^{)y(!Az*@3-6*Nua0i_*rOwr&g9bOFQBb=qvaS9Ac_a~~Ad zcS7y9S1tq1mKnHcjA9g{7E${>oMr9We8&HP>Tf4RUHkrosFP+OqZq{~Mlp&}jA9g{ zPK}aKY}Ke8MlkA-C;*kTgm*UEluEm+l_-@Amq~R4l(e^t4bB!e66qTdWeeNjy{ZLD z2?9_NYUl)8K=jJBDBLUM*2Y~1C>0Oiwl*q7IDj~#Ylx`mZL@$v#;6dbgcwF8WTU7? zdleYN1#Gidj|{|A!!(m3W}stw@9GTPdIX~w^>(QJ9?r6M=%?GP@$c-1L7g-M8O10@ zRa#$Z6{uU?C#;E>QH){~qZoBiR95|T&pAGESXNH;lb2I{6|21*szM~jsH33_=x6Sz zs~viuqBI@ppy#NGQhhR0D-?MRpj6$C&|aDhq`XG$u)P8a*%wgM$%INCg{o&wa%2Ys zR6%>ywWI4iDs(}$d#KE#9xqSP$viVCW1>_$N~z0H0L3U2yjP&iD^bx_d6es!K~c99 z1p%dtQAzI!%DDeXL=;NZ9fdMby9``HxlWW))4S)~UrdZ*)L)@qRjR-GaF(}Uw8bHQ T(SPdl00000NkvXXu0mjf00bIB literal 0 HcmV?d00001 diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classRingTopology-members.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classRingTopology-members.html new file mode 100644 index 000000000..ce31afe98 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classRingTopology-members.html @@ -0,0 +1,41 @@ + + +ParadisEO-PEOMovingObjects: Member List + + + + +
+
+ +

RingTopology Member List

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

+ + + + +
add(Cooperative &__mig)Topology
migTopology [protected]
setNeighbors(Cooperative *__mig, std::vector< Cooperative * > &__from, std::vector< Cooperative * > &__to)RingTopology [virtual]
~Topology()Topology [virtual]


Generated on Mon Oct 8 11:16:49 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classRingTopology.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classRingTopology.html new file mode 100644 index 000000000..ca95bba4c --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classRingTopology.html @@ -0,0 +1,55 @@ + + +ParadisEO-PEOMovingObjects: RingTopology Class Reference + + + + +
+
+ +

RingTopology Class Reference

Inheritance diagram for RingTopology: +

+ +Topology + +List of all members. + + + + +

Public Member Functions

+void setNeighbors (Cooperative *__mig, std::vector< Cooperative * > &__from, std::vector< Cooperative * > &__to)
+

Detailed Description

+ +

+ +

+Definition at line 42 of file ring_topo.h.


The documentation for this class was generated from the following files: +
Generated on Mon Oct 8 11:16:49 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classRingTopology.png b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classRingTopology.png new file mode 100644 index 0000000000000000000000000000000000000000..79e86b8473e87f8d848077bcd8c56eb5f7d40589 GIT binary patch literal 356 zcmV-q0h|7bP)K)Ljn3 zAPfLt`r>oT4cZeJy^v44{}JS8i-2VeBgr)Iz#RSTxpPrd^0_5bH!OEvatiE_Lz-ZO!|-sC!2%JxR(|_L9rH!#dP0N3~Ge zzmuNW0lM!Cp^ryp{R{fCjMK}~Q%av6*^{ZKo_gvJG<6I#*zv@l)<9%nU2wlCi@)n^ z6-`@%L6?)_AAMsfUi<{;!jNl5i5;f9z7S7i(y=bR>?7R(0000 + +ParadisEO-PEOMovingObjects: Member List + + + + +
+
+ +

Runner Member List

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

+ + + + + + + + + + + + + + + + + + + + + + + + + +
Communicable()Communicable
getID()Runner
getKey()Communicable
idRunner [private]
isLocal()Runner
keyCommunicable [protected]
lock()Communicable
notifySendingTermination()Runner
num_commCommunicable [protected, static]
packTermination()Runner
resume()Communicable
Runner()Runner
sem_lockCommunicable [protected]
sem_startRunner [private]
sem_stopCommunicable [protected]
setActive()Thread
setPassive()Thread
start()Runner [virtual]
stop()Communicable
terminate()Runner
Thread()Thread
unlock()Communicable
waitStarting()Runner
~Communicable()Communicable [virtual]
~Thread()Thread [virtual]


Generated on Mon Oct 8 11:16:49 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classRunner.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classRunner.html new file mode 100644 index 000000000..03025fd30 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classRunner.html @@ -0,0 +1,86 @@ + + +ParadisEO-PEOMovingObjects: Runner Class Reference + + + + +
+
+ +

Runner Class Reference

Inheritance diagram for Runner: +

+ +Communicable +Thread +peoEA< EOT > +peoParallelAlgorithmWrapper + +List of all members. + + + + + + + + + + + + + + + + + + + + + + + +

Public Member Functions

Runner ()
+void start ()
+void waitStarting ()
+bool isLocal ()
+void terminate ()
+RUNNER_ID getID ()
+void packTermination ()
+void notifySendingTermination ()

Private Attributes

+sem_t sem_start
+unsigned id
+

Detailed Description

+ +

+ +

+Definition at line 47 of file runner.h.


The documentation for this class was generated from the following files: +
Generated on Mon Oct 8 11:16:49 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classRunner.png b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classRunner.png new file mode 100644 index 0000000000000000000000000000000000000000..b1883c0463cfe6512da85861ecd9c161f8e6ee73 GIT binary patch literal 996 zcmVINEw)}%34%mP^I7gRsU=&nj++2r<+Ej*+}}Fm&g(DYE(~;vn_o;|h^#Rp z8Mh#~6&PdBMcTfAo7_KV%HHR>Eghlt0rKQvzvrFV_7&XDkWJb9Z7rI(=SQ$b|1@66 zofhNA5#t63r72&$$GEMjZ3dFu%i3SX9S1z$PnO(}=El|YJ1ytuH}`MXPa?Ow&OI{s z6TGsY_-gZjbh4kEmHt0pc31ATvvQZ*m3!^1+$DFpI|Z`$AzJj^baboa+(+ep{u8qn zbsv=b`}q`dmUSPMd)Vtzx%;{+cVBnq?(44HecgxUeu_$ryHT>IM^4J!SIXU2%H3DW z-B-%pSIXU2%6(oSC1LJ|knbeq8>QS!DR)_)%RL?H4L9IEbW-lYJ=w1h_?o7NEx-M~ z>Q$nu=LWm78xOlwOq?5V+xgA)4rS+M|5X>TZK;FvSwjV})S1_%TD zxH|MXgJA@&%O*ELR>Xboc||6ipI7e6ddJl~YblJt-eqooYVz|DU~1<#`A3}JSwCr< z-)nA~xnY|-o8O!Dp8E-(PRIgg@)B5qBs}4IWcgbD3*UqxsEx-IXsrf!cll}t`aqME8 S7BC|K0000 + +ParadisEO-PEOMovingObjects: Member List + + + + +
+
+ +

Service Member List

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

+ + + + + + + + + + + + + + + + + + + + + + + + + +
Communicable()Communicable
execute()Service [virtual]
getKey()Communicable
getOwner()Service
keyCommunicable [protected]
lock()Communicable
notifySendingAllResourceRequests()Service [virtual]
notifySendingData()Service [virtual]
notifySendingResourceRequest()Service [virtual]
num_commCommunicable [protected, static]
num_sent_rrService [private]
ownerService [private]
packData()Service [virtual]
packResourceRequest()Service
packResult()Service [virtual]
requestResourceRequest(unsigned __how_many=1)Service
resume()Communicable
sem_lockCommunicable [protected]
sem_stopCommunicable [protected]
setOwner(Thread &__owner)Service
stop()Communicable
unlock()Communicable
unpackData()Service [virtual]
unpackResult()Service [virtual]
~Communicable()Communicable [virtual]


Generated on Mon Oct 8 11:16:49 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classService.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classService.html new file mode 100644 index 000000000..a996a9c8e --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classService.html @@ -0,0 +1,103 @@ + + +ParadisEO-PEOMovingObjects: Service Class Reference + + + + +
+
+ +

Service Class Reference

Inheritance diagram for Service: +

+ +Communicable +peoPopEval< EOT > +peoSynchronousMultiStart< EntityType > +peoSyncMultiStart< EOT > +peoTransform< EOT > +peoParaPopEval< EOT > +peoSeqPopEval< EOT > +peoParaSGATransform< EOT > +peoSeqTransform< EOT > + +List of all members. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Public Member Functions

+void setOwner (Thread &__owner)
+ThreadgetOwner ()
+void requestResourceRequest (unsigned __how_many=1)
+void packResourceRequest ()
+virtual void packData ()
+virtual void unpackData ()
+virtual void execute ()
+virtual void packResult ()
+virtual void unpackResult ()
+virtual void notifySendingData ()
+virtual void notifySendingResourceRequest ()
+virtual void notifySendingAllResourceRequests ()

Private Attributes

+Threadowner
+unsigned num_sent_rr
+

Detailed Description

+ +

+ +

+Definition at line 45 of file service.h.


The documentation for this class was generated from the following files: +
Generated on Mon Oct 8 11:16:49 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classService.png b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classService.png new file mode 100644 index 0000000000000000000000000000000000000000..e92250d1227dc838b67c568c58b82d19d9d0b604 GIT binary patch literal 2743 zcmb_ec~p~E7XL7`QMBTyRVzqvgW4##6i|W?WKq-vgh~pCpdwVrQa}&l2DcqfqX1siO724mf)PfWAtHh59Jn?sBmEwa%>ZIQ*51R;$%PtyY+m6Ufq` z-0w5 zz)iWRWfx=P?rdCkQ5P)KF!0HyZ&--_g@mQ}?aN#A7P>C51s)&3qfOT=dJX7r{DYIK ze-^lK_5U99z0Ff0KExs+_SQuQk6%vygRbx7z4@~&^iOZgD5r73Vz|H8%Kt98uE~qf zIagT{fWcte#z=OtJ?pb|&Rt0=Ro1`|w$p++;-)e1y!n|WfhQ{=LjgL)>%H2_N(@i+ z7>{5j;x!UtcDG>j)BSOCUsTDMLAcl^+(1=otD4r!fK|S)xWSz7yM>^>FZ_s7#_5?RY-LW@0(8aXiP(cT zy-gM}x&?~FZ&%;+``_XG+W6VXM6LgHcg-fl4756V|5#?SNK;^u9J7okz<2ap&< zO)W~!H|~$5RuATD50CSEn{3pR{O3hrM?}4?!w{2Uo*uC$E^Jtu2g+zpwl9abJlO)v zq$=xMKlK?m&yhzOPm&b?rJI!uH5#tg)FpL}`^yxXzmxI=##7l#GNfYZVoz*Vf|m z7q3XEkFZhAWBDm}-0qjTCo@NV#UhJ%FB&6z)-&3Rn(iC*wjt!O-NOU<41!ig7R6@A z)%G)9d5|ll9Tr_>wS0K^Z+Y3K$HE~W9@`;Nyf)LtnvYxiO)|(0@Rin9Z^O9a?%uCk zsdOXE>~NU!N03lvRl$V6Rz(@Ep`{HjqA2H< zf9F^IpmBMDODK);8^rk8|BQ&gva~%%`SYtj4aGInsjG-gB4@KB>*(VPN3v;bdy{+a z&PE4Ixs!Pu;?B){Cs<}!a0t4ygv)Pq+ypCVO%3#7aR4bvRXrkqOs6v?9b&60S-w0Z z22!6qm8|Zd7rZPV@GpOAo32{IF_TQ@S3@9V<&8PK~Z1^!$D#P+F3Mt;1odf?`8b^U_!7y(g z%>fJ}@v0vL^**^Jc=3vg`T9nyf`!9M-msdiQu@AD+x@vIv(1!K+-wC7NFrE%s~I* zAN?WBoDUve-mVRDSGV_d-2mqocQcZ~HHbV@U48faOiy&m0#-Cg-q z`8*c*KBXB~xDJr_j0f8T?_KZ1Mpxz7jO+cj&7Rhe68go;o6re=BxCNv{FOjEHcQ*8 z$8}gK??L6ES?CqtC=y?wo+T|RQ{xBp`X1~1GIJ*Yb>M;`JCAb!b9)0$?0&*y z4bx5VCWmuxpbr|F8k)5<{8#kokm*BOMpb;t?C3&upiqKRXkF*x4`@@fk`#~sO#v}? z2@kK_x5Q=6RL-2SKPG2SZH^KdlP|@Xjh`zqOLsj1Z7K3`soZE7Y(5k9aX6{7^0|r- z0ba5vUmEU#T!ud79j(46qd;zf56cJNlH-O#SNHo5h?_{)2%o1V_{-ae_sZ74Bg5>v zT~qYrUYx*$zmGA-*?!#APk}jDGF3%{-2IHe+hQX}&gq!(v-Bf;>>axd`!8mBGm(|k zvAbznRl_PNbHy9p4$u-VqOr*&lP2pKE?b$-L$VtQ+b8#!We5phV#G<_9hUP*hBCZ& zY>0Psz7%;-h?CyirX<*2C9=zUH9XXLS!DGQ`9PQY0j1g7+hY zWs{`3Jn~(+tcqQ?pte!863%*I$Va+hgF3$7xpc+oN4m0eL9FGG##JR0a!6q}*g(<^ z3eTl9ijplCmrykMRWcdd9G0A}FI%F|r)cHguLqFWbwhI}p)lQB(x{9&I+L2|>>UXO z?-*wb{IiH60hgwvmu@W-a7(Zfn;e)z&QvmuU;$xx + +ParadisEO-PEOMovingObjects: Member List + + + + +
+
+ +

Thread Member List

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

+ + + + + +
actThread [private]
setActive()Thread
setPassive()Thread
Thread()Thread
~Thread()Thread [virtual]


Generated on Mon Oct 8 11:16:49 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classThread.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classThread.html new file mode 100644 index 000000000..df5463856 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classThread.html @@ -0,0 +1,73 @@ + + +ParadisEO-PEOMovingObjects: Thread Class Reference + + + + +
+
+ +

Thread Class Reference

Inheritance diagram for Thread: +

+ +ReactiveThread +Runner +Communicator +Worker +peoEA< EOT > +peoParallelAlgorithmWrapper + +List of all members. + + + + + + + + + + + + + +

Public Member Functions

Thread ()
+virtual ~Thread ()
+void setActive ()
+void setPassive ()

Private Attributes

+bool act
+

Detailed Description

+ +

+ +

+Definition at line 44 of file thread.h.


The documentation for this class was generated from the following files: +
Generated on Mon Oct 8 11:16:49 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classThread.png b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classThread.png new file mode 100644 index 0000000000000000000000000000000000000000..138a055d97e691b4fe0dfa4fdd9eb5f603b8d5ce GIT binary patch literal 1445 zcmb7^e^AnQ7{{qxEuCjqm$h2bt(B(pN1-weEq_hXW(JrUx?C!hD@E`ZDbPH$Y@wDY zp(yi5otK4|o(HHY%^xJemz9cTs9W-5ieQtJfRs_UyXud1+aIsb^Zq>dJoh}G_aC2< znCNhO+ikWW5Xc@L5sCnTR;#S~lFb_H883q*Tf^3v!>BNe#bT8fi-65eDz~b)2n2%s zUo8sjbyXH38VNe2dV&FgJ~;pn4MOFyw5)jiGp`MyH^8JHacg!$BW~gA3XCh^pRU~= z#I)O49Fpa&4QoM{x#xWrJ4EWDedQk&2Yw~=13Ex-qyS)iSEtYJk zDQDPhUp*=w8*KyFt?ScN7e}reYkSiby=Iz0({}P2riU{qW*c59rRIv_EwE~1=Lu}o z3U8t=x7J-aQpu-;QJf{On@uvKJK!jJU49<>GoYWI9fIl5y3Pzg7t#*bcN5R379NY0 zH<%BjAPh#&*r~GtoVBkGS+gb+!RNjj4%sp`t|?n^Y&IkJzXi1vKTpiar_B7)>B(oC9l*0a3hNW*-ls>` z{n+Qa-FL?>AK#<))g_!lq32s3O(5pV;a>(e#UMH+8hHvQ)}GT9d6FyRPw;2%Wng#d z?{R`IiTk+0X$gV1wc#i5?9E|SVr^99I*7wT!S1BHiEeqgnIsQ{!fAkJy5A#ith`IA zEOyfsBitV&R5$DSZ9Mh0f!~U%{wQpPk0~*YS)i0)pX5k+Q$8WBWJrf`5{=!q1Xb8p zT)A_Z>#JE;gKZe1_WzI@yN$y`4*dE2GQrotjAhQZqmhgC$~C3Jz{PCk+SXUR`s%BA zx6hR$8#g6;r=*M2DBQ8|#c0=d;l4roh&fFtlNss6vl__01uv;4yT{Q)H+CC511M9F zR-g*oui_)Qeenjes^0alE8;F!d+2^=SB)G!_@Gx>CE3_b_d7bX+@4uSO)e|jfP+G~ zDEA8?%o++8K<-Xrk^QOyw5@vlsYFxlN*!_9U+O$e2lm>`E5*sai}OK+PoHtc5U#N; zz)cTC_T40=Ph-jZTS!rA7)2tFW)A15Mq#;TGhshcC2Lw&7F!}aD|1*%P1n23-}07E zajExXa)?CA%4E*~|9GB6=!A@5GDvnpbG6@8*EpAFd6|9M>`Rf7)IJf9mX_yOaL80v z#>0XR8=joQ + +ParadisEO-PEOMovingObjects: Member List + + + + +
+
+ +

Topology Member List

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

+ + + +
add(Cooperative &__mig)Topology
migTopology [protected]
~Topology()Topology [virtual]


Generated on Mon Oct 8 11:16:49 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classTopology.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classTopology.html new file mode 100644 index 000000000..3140e314d --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classTopology.html @@ -0,0 +1,62 @@ + + +ParadisEO-PEOMovingObjects: Topology Class Reference + + + + +
+
+ +

Topology Class Reference

Inheritance diagram for Topology: +

+ +RingTopology + +List of all members. + + + + + + + + + +

Public Member Functions

+virtual ~Topology ()
+void add (Cooperative &__mig)

Protected Attributes

+std::vector< Cooperative * > mig
+

Detailed Description

+ +

+ +

+Definition at line 44 of file topology.h.


The documentation for this class was generated from the following files: +
Generated on Mon Oct 8 11:16:49 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classTopology.png b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classTopology.png new file mode 100644 index 0000000000000000000000000000000000000000..bc09751e50a5b00a6da2da18b5ccb4162efd8623 GIT binary patch literal 359 zcmeAS@N?(olHy`uVBq!ia0vp^kw6^4!VDxEw2p)TDTx4|5ZC|z{{xx-{~wq?KVbrp z1;z&s9H>6@{|S)GSQ6wH%;50sMjDXw*VDx@#G~`=l|a5`1s;YA-_q}IGuKd$*v73J z`RH%I0ZZ(H)lA+Vcbx149&}C>YLrT9;(Ya(zvRcW@`TK{JXbPQ9OfKK&1^6b_WG^o z=eUMzaFJGNarDL%ziE_>?tMze1!y7$v{1HZ2-Jt3WCy5e*FDdF3W+y5%QsW92I zF);pFUDdqkpv=p*-&0;JY?u4RU2Fb0voG%9vsaIoZxyhNWdCEU`Z?!CjtR4Ml+15a zO*;>n>VKO|4%I~!`ELA}Fq6yn<}9D~J(hlJX9d6gv~}s4$fvbSWTUI}^S$4{_gvGy z?rE6H){D!;qTBcMZtc|7y?xN)X6M^wZ|z%TuZuVGtUhvIyF&~Z5DcEKelF{r5}E)% CSe$qO literal 0 HcmV?d00001 diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classWorker-members.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classWorker-members.html new file mode 100644 index 000000000..cdd934364 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classWorker-members.html @@ -0,0 +1,68 @@ + + +ParadisEO-PEOMovingObjects: Member List + + + + +
+
+ +

Worker Member List

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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Communicable()Communicable
getKey()Communicable
idWorker [private]
keyCommunicable [protected]
lock()Communicable
notifySendingResult()Worker
notifySendingTaskDone()Worker
num_commCommunicable [protected, static]
packResult()Worker
packTaskDone()Worker
ReactiveThread()ReactiveThread
resume()Communicable
sem_lockCommunicable [protected]
sem_stopCommunicable [protected]
servWorker [private]
serv_idWorker [private]
setActive()Thread
setPassive()Thread
setSource(int __rank)Worker
sleep()ReactiveThread
srcWorker [private]
start()Worker [virtual]
stop()Communicable
Thread()Thread
totoWorker [private]
unlock()Communicable
unpackData()Worker
wakeUp()ReactiveThread
Worker()Worker
~Communicable()Communicable [virtual]
~Thread()Thread [virtual]


Generated on Mon Oct 8 11:16:50 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classWorker.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classWorker.html new file mode 100644 index 000000000..6fa5e8e62 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classWorker.html @@ -0,0 +1,94 @@ + + +ParadisEO-PEOMovingObjects: Worker Class Reference + + + + +
+
+ +

Worker Class Reference

Inheritance diagram for Worker: +

+ +Communicable +ReactiveThread +Thread + +List of all members. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Public Member Functions

Worker ()
+void start ()
+void packResult ()
+void unpackData ()
+void packTaskDone ()
+void notifySendingResult ()
+void notifySendingTaskDone ()
+void setSource (int __rank)

Private Attributes

+WORKER_ID id
+SERVICE_ID serv_id
+Serviceserv
+int src
+bool toto
+

Detailed Description

+ +

+ +

+Definition at line 46 of file worker.h.


The documentation for this class was generated from the following files: +
Generated on Mon Oct 8 11:16:50 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classWorker.png b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classWorker.png new file mode 100644 index 0000000000000000000000000000000000000000..0ea239005e92fa21c493b7163f0f4059a251cddd GIT binary patch literal 624 zcmV-$0+0QPP)!#BBAI1X8x_y{u8If)i*WG*k52*frLe#bIPl!5c1Of#VP(T3%6i`3`bqv(@BiW~K zR&td4+I-RssDcA3P)9@2Tqq32@hKyJKoRk%uH+iz3dSX&aYV_er$_b}HI>$7;yy)b zfqO^xnyU(;mc4AwQ8my00;Q6=)*)@I86M>xE+dxm6y@uY%M_-dzPgrKHBbHm#Y3I! zsjTW>Etkp?#raBg!tkR%L;1DxDJ;_z#W}^imrzkPXNj>h8Wk&!DEAmLGAft8h?poC)&K{a2CKp$#8%*5sh49r+M zioi{FoDUOFK>Zb};pXhA-B)*)53OW(+YWUtlzR)r?}n(pOq(wezZ;^?8G%3n1ylu8 zUub1-xaXS#1r$&~0rg%eLz}G_)u07XhezEs{nqDkQFQB!G0CZfa{Zf5)6FEO7Rn@o zX9TAW%6*2ap>(MtDvYQJDlJ=0lm?zAb!wq1v;YdIw?pl_Ir{-RVHOmMf_5qZ0000< KMNUMnLSTY`6%p|O literal 0 HcmV?d00001 diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classes.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classes.html new file mode 100644 index 000000000..e1552e671 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classes.html @@ -0,0 +1,50 @@ + + +ParadisEO-PEOMovingObjects: Alphabetical List + + + + +
+
+ +

ParadisEO-PEOMovingObjects Class Index

A | C | D | E | M | N | P | R | S | T | W

+ +
  A  
+
peoParallelAlgorithmWrapper::AbstractAlgorithm   peoSynchronousMultiStart   
peoAggEvalFunc   peoParallelAlgorithmWrapper::Algorithm   peoSynchronousMultiStart::AbstractAggregationAlgorithm   
peoAsyncIslandMig   peoParallelAlgorithmWrapper::Algorithm< AlgorithmType, void >   peoSynchronousMultiStart::AbstractAlgorithm   
  C  
+
peoParaPopEval   peoSynchronousMultiStart::AbstractDataType   
Communicable   peoParaSGATransform   peoSynchronousMultiStart::AggregationAlgorithm   
Communicator   peoPopEval   peoSynchronousMultiStart::Algorithm   
Cooperative   
  R  
+
peoSynchronousMultiStart::DataType   
  D  
+
RandomExplorationAlgorithm   peoSynchronousMultiStart::NoAggregationFunction   
DisplayBestRoute   ReactiveThread   peoSyncIslandMig   
  E  
+
RingTopology   peoSyncMultiStart   
peoEA   Runner   
  T  
+
  M  
+
  S  
+
Thread   
MergeRouteEval   SEND_REQUEST   Topology   
  N  
+
peoSeqPopEval   peoTransform   
peoNoAggEvalFunc   peoSeqTransform   
  W  
+
  P  
+
Service   Worker   
peoParallelAlgorithmWrapper   

A | C | D | E | M | N | P | R | S | T | W

+


Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoAggEvalFunc-members.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoAggEvalFunc-members.html new file mode 100644 index 000000000..9da1e9cef --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoAggEvalFunc-members.html @@ -0,0 +1,41 @@ + + +ParadisEO-PEOMovingObjects: Member List + + + + +
+
+ +

peoAggEvalFunc< EOT > Member List

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

+ + + + +
functor_category()eoBF< A1, A2, R > [static]
operator()(A1, A2)=0eoBF< A1, A2, R > [pure virtual]
~eoBF()eoBF< A1, A2, R > [virtual]
~eoFunctorBase()eoFunctorBase [virtual]


Generated on Mon Oct 8 11:16:47 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoAggEvalFunc.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoAggEvalFunc.html new file mode 100644 index 000000000..bfe4d5547 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoAggEvalFunc.html @@ -0,0 +1,70 @@ + + +ParadisEO-PEOMovingObjects: peoAggEvalFunc< EOT > Class Template Reference + + + + +
+
+ +

peoAggEvalFunc< EOT > Class Template Reference

The peoAggEvalFunc class offers only the interface for creating aggregate evaluation functions - there are no direct internal functions provided. +More... +

+#include <peoAggEvalFunc.h> +

+

Inheritance diagram for peoAggEvalFunc< EOT >: +

+ +eoBF< A1, A2, R > +eoFunctorBase +MergeRouteEval +peoNoAggEvalFunc< EOT > + +List of all members. + +
+

Detailed Description

+

template<class EOT>
+ class peoAggEvalFunc< EOT >

+ +The peoAggEvalFunc class offers only the interface for creating aggregate evaluation functions - there are no direct internal functions provided. +

+The class inherits public eoBF< EOT&, const typename EOT :: Fitness&, void > thus requiring, for the derived classes, the creation of a function having the following signature:

+ + + +
void operator()( EOT& __eot, const typename EOT :: Fitness& __partial_fittness );    
+

+The aggregation object is called in an iterative manner for each of the results obtained by applying partial evaluation functions. +

+ +

+Definition at line 53 of file peoAggEvalFunc.h.


The documentation for this class was generated from the following file: +
Generated on Mon Oct 8 11:16:47 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoAggEvalFunc.png b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoAggEvalFunc.png new file mode 100644 index 0000000000000000000000000000000000000000..91f704db86bf646a3b37ac2159d3300f718567b7 GIT binary patch literal 1346 zcmaJ>YgCd482-G6#zk7@WkMdM)|z&hl!ao5nt23uf>vVXW*O=Ma?-I55ou>@aq$AmDZ z*}DYxI}vpqLl z$>2qdG1Cn+U#TVvj`?@g-nm&&o9^w^FkhCuqsV(P79BVwQ6POvWE6lo@k_Z4=ro|7 zoH-#%ZAX$uk5>P@@0HUD8<9Tie4IHH%R~+kI9+6HRz#nj9(z`{h7y;2_|bU-)bH}t zQj zmsCt>OXxUM2;`5rOEriNTT#NU?>sW%t8Q<|XqtGN){tq%Daeixx?Zt}NSTAoL2mLE z_H*Nf!@9lG=6#2=zF8M%HR$me=1hf1Zp!v`0kO^K`Zxc~;T>Y*sV8aWh!ARMq2ZEdC^WKlbb(9`<1r zo6ZoQF2%N-T7|nn^fBxLqdR>On~oicKe%VP4n?F#Io6eVCh8^NZCQ#|dB9z9V_w7Tn%G&4I zCJAUDfc%)d641Frfm$MaR(XNL@}_U;y*TDkrhj^kY!S;@WjAS=GI{2Se`bYhY6q^R z{T>^g3Sg<}7n}EH-+;igVEMDwlqC7PqaTt7y4}&$V(M1B?Pv2G481CkKZRvOubz(U zGEb3xb*V1)X=F*c6w3PB$o?PHnmkrqC85iy!8HcE^+tgH)=fe8>Mu}k8Ij%;mpH`K zo7W?fp`@#~+%LS_zAfWG;Y{R!7*1bPJ?(_MuLxQA(r|t2YM4qt1TG&J!3EnA`USE?jO70Aq}r{Ob-tT4Gs^gC&lOd1?&cYK>z>% literal 0 HcmV?d00001 diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoAsyncIslandMig-members.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoAsyncIslandMig-members.html new file mode 100644 index 000000000..f48ac21dc --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoAsyncIslandMig-members.html @@ -0,0 +1,74 @@ + + +ParadisEO-PEOMovingObjects: Member List + + + + +
+
+ +

peoAsyncIslandMig< EOT > Member List

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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
addTo(eoCheckPoint< EOT > &cp)eoUpdater
className(void) const eoUpdater [virtual]
Communicable()Communicable
contpeoAsyncIslandMig< EOT > [private]
coop_empeoAsyncIslandMig< EOT > [private]
destinationpeoAsyncIslandMig< EOT > [private]
empeoAsyncIslandMig< EOT > [private]
emigrate()peoAsyncIslandMig< EOT > [private]
functor_category()eoF< void > [static]
getKey()Communicable
getOwner()Cooperative
immpeoAsyncIslandMig< EOT > [private]
immigrate()peoAsyncIslandMig< EOT > [private]
keyCommunicable [protected]
lastCall()eoUpdater [virtual]
lock()Communicable
notifySending()Cooperative [virtual]
num_commCommunicable [protected, static]
operator()()peoAsyncIslandMig< EOT > [virtual]
pack()peoAsyncIslandMig< EOT > [virtual]
peoAsyncIslandMig(eoContinue< EOT > &__cont, eoSelect< EOT > &__select, eoReplacement< EOT > &__replace, Topology &__topology, eoPop< EOT > &__source, eoPop< EOT > &__destination)peoAsyncIslandMig< EOT >
replacepeoAsyncIslandMig< EOT > [private]
result_type typedefeoF< void >
resume()Communicable
selectpeoAsyncIslandMig< EOT > [private]
sem_lockCommunicable [protected]
sem_stopCommunicable [protected]
send(Cooperative *__coop)Cooperative
setOwner(Runner &__runner)Cooperative
sourcepeoAsyncIslandMig< EOT > [private]
stop()Communicable
topologypeoAsyncIslandMig< EOT > [private]
unlock()Communicable
unpack()peoAsyncIslandMig< EOT > [virtual]
~Communicable()Communicable [virtual]
~eoF()eoF< void > [virtual]
~eoFunctorBase()eoFunctorBase [virtual]


Generated on Mon Oct 8 11:16:47 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoAsyncIslandMig.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoAsyncIslandMig.html new file mode 100644 index 000000000..be4ff7a22 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoAsyncIslandMig.html @@ -0,0 +1,305 @@ + + +ParadisEO-PEOMovingObjects: peoAsyncIslandMig< EOT > Class Template Reference + + + + +
+
+ +

peoAsyncIslandMig< EOT > Class Template Reference

The peoAsyncIslandMig class offers the elementary basis for implementating an asynchronous island migration model - requires the specification of several basic parameters, i.e. +More... +

+#include <peoAsyncIslandMig.h> +

+

Inheritance diagram for peoAsyncIslandMig< EOT >: +

+ +Cooperative +eoUpdater +Communicable +eoF< void > +eoFunctorBase + +List of all members. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Public Member Functions

 peoAsyncIslandMig (eoContinue< EOT > &__cont, eoSelect< EOT > &__select, eoReplacement< EOT > &__replace, Topology &__topology, eoPop< EOT > &__source, eoPop< EOT > &__destination)
 Constructor for the peoAsyncIslandMig class; the characteristics of the migration model are defined through the specified parameters - out of the box objects provided in EO, etc., or custom, derived objects may be passed as parameters.
void operator() ()
 Function operator to be called as checkpoint for performing the migration step.
+void pack ()
 Auxiliary function dealing with sending the emigrant individuals. There is no need to explicitly call the function.
+void unpack ()
 Auxiliary function dealing with receiving immigrant individuals. There is no need to explicitly call the function.

Private Member Functions

+void emigrate ()
+void immigrate ()

Private Attributes

+eoContinue< EOT > & cont
+eoSelect< EOT > & select
+eoReplacement< EOT > & replace
+Topologytopology
+eoPop< EOT > & source
+eoPop< EOT > & destination
+std::queue< eoPop< EOT > > imm
+std::queue< eoPop< EOT > > em
+std::queue< Cooperative * > coop_em
+

Detailed Description

+

template<class EOT>
+ class peoAsyncIslandMig< EOT >

+ +The peoAsyncIslandMig class offers the elementary basis for implementating an asynchronous island migration model - requires the specification of several basic parameters, i.e. +

+continuation criterion, selection and replacement strategies, a topological model and the source and destination population for the migrating individuals. As opposed to the synchronous migration model, in the asynchronous migration approach, there is no synchronization step between islands after performing the emigration phase.

+The migration operator is called at the end of each generation of an evolutionary algorithms as a checkpoint object - the following code exposes the structure of a classic evolutionary algorithm:

+ + + + + + + + + + + + + +
do {    
         select( population, offsprings );   // select the offsprings from the current population
         transform( offsprings );   // crossover and mutation operators are applied on the selected offsprings
         evaluate( offsprings );   // evaluation step of the resulting offsprings
         replace( population, offsprings );   // replace the individuals in the current population whith individuals from the offspring population, according to a specified replacement strategy
} while ( eaCheckpointContinue( population ) );   // checkpoint operators are applied on the current population, including the migration operator, if any specified
+

+Constructing an asynchronous island migration model requires having defined (1) a topological migration model, (2) the control parameters of the migration process, (3) a checkpoint object associated with an evolutionary algorithm, and (4) an owner object must be set. The owner object must be derived from the Runner class (for example a peoEA object represents a possible owner). A simple example is offered bellow:

+

    +
  1. +topological model to be followed when performing migrations:
    +
    + + + +
    RingTopology migTopology;   // a simple ring topological model - each island communicates with two other islands
    +

    +

  2. +
  3. +the continuation criterion, selection and replacement strategy etc. are defined:
    +
    + + + + + + + + + + + + + + + + + +
    eoPop< EOT > population( POP_SIZE, popInitializer );   // population of individuals to be used for the evolutionary algorithm
       
    eoPeriodicContinue< EOT > migCont( MIG_FREQ );   // migrations occur periodically at MIG_FREQ iterations
    eoRandomSelect< EOT > migSelectStrategy;   // selection strategy - in this case a random selection is applied
    eoSelectNumber< EOT > migSelect( migSelectStrategy, MIG_SIZE );   // number of individuals to be selected using the specified strategy
    eoPlusReplacement< EOT > migReplace;   // immigration strategy - the worse individuals in the destination population are replaced by the immigrant individuals
       
    peoAsyncIslandMig< EOT > asyncMigration(
    +          migCont, migSelect, migReplace, migTopology,
    +          population, population
    + );  
    // asynchronous migration object - the emigrant individuals are selected from the same from population in which the immigrant individuals are being integrated
    +

    +

  4. +
  5. +creation of a checkpoint object as part of the definition of an evolutionary algoritm (details of th EA not given as being out of scope):
    +
    + + + + + + + + + + + + + +
    ...    
    eoGenContinue< EOT > eaCont( NUM_GEN );   // the evolutionary algorithm will stop after NUM_GEN generations
    eoCheckPoint< EOT > eaCheckpointContinue( eaCont );   // number of individuals to be selected using the specified strategy
    ...    
    eaCheckpointContinue.add( asyncMigration );   // adding the migration operator as checkpoint element
    ...    
    +

    +

  6. +
  7. +definition of an owner evolutionary algorithm (an object inheriting the Runner class):
    +
    + + + + + + + +
    peoEA< EOT > eaAlg( eaCheckpointContinue, eaPopEval, eaSelect, eaTransform, eaReplace);   // evolutionary algorithm having as checkpoint the eaCheckpointContinue object defined above
    asyncMigration.setOwner( eaAlg );   // setting the evolutionary algorithm as owner of the migration object
    eaAlg( population );   // applying the evolutionary algorithm on a given population
    +
  8. +
+

+The source and the destination population for the migration object were specified as being the same, in step no. 2, as we are usually interested in selecting the emigrants and integrating the immigrant individuals from and in, respectively, one unique population, iteratively evolved by an evolutionary algorithm. There is no restriction in having two distinct populations as source and destination for the emigrant and immigrant individuals respectively.

+The above steps only create an asynchronous migration object associated to an evolutionary algorithm. The creation of several islands requires the reiteration of the steps 2 through 4 for creating distinct algorithms, with distinct populations and the associated distinctly parametrized migration objects. The interconnecting element is the underlying topology, defined at step 1 (the same C++ migTopology object has to be passed as parameter for all the migration objects, in order to interconnect them). +

+ +

+Definition at line 140 of file peoAsyncIslandMig.h.


Constructor & Destructor Documentation

+ +
+
+
+template<class EOT>
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
peoAsyncIslandMig< EOT >::peoAsyncIslandMig (eoContinue< EOT > &  __cont,
eoSelect< EOT > &  __select,
eoReplacement< EOT > &  __replace,
Topology __topology,
eoPop< EOT > &  __source,
eoPop< EOT > &  __destination 
)
+
+
+ +

+Constructor for the peoAsyncIslandMig class; the characteristics of the migration model are defined through the specified parameters - out of the box objects provided in EO, etc., or custom, derived objects may be passed as parameters. +

+

Parameters:
+ + + + + + + +
eoContinue< EOT >& __cont - continuation criterion specifying whether the migration is performed or not;
eoSelect< EOT >& __select - selection strategy to be applied for constructing a list of emigrant individuals out of the source population;
eoReplacement< EOT >& __replace - replacement strategy used for integrating the immigrant individuals in the destination population;
Topology& __topology - topological model to be followed when performing migrations;
eoPop< EOT >& __source - source population from which the emigrant individuals are selected;
eoPop< EOT >& __destination - destination population in which the immigrant population are integrated.
+
+ +

+Definition at line 199 of file peoAsyncIslandMig.h. +

+References Topology::add(). +

+

+


Member Function Documentation

+ +
+
+
+template<class EOT>
+ + + + + + + + +
void peoAsyncIslandMig< EOT >::operator() (  )  [virtual]
+
+
+ +

+Function operator to be called as checkpoint for performing the migration step. +

+The emigrant individuals are selected from the source population and sent to the next island (defined by the topology object) while the immigrant individuals are integrated in the destination population. There is no need to explicitly call the function - the wrapper checkpoint object (please refer to the above example) will perform the call when required. +

+Implements eoF< void >. +

+Definition at line 276 of file peoAsyncIslandMig.h. +

+References peoAsyncIslandMig< EOT >::cont, peoAsyncIslandMig< EOT >::emigrate(), peoAsyncIslandMig< EOT >::immigrate(), and peoAsyncIslandMig< EOT >::source. +

+

+


The documentation for this class was generated from the following file: +
Generated on Mon Oct 8 11:16:47 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoAsyncIslandMig.png b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoAsyncIslandMig.png new file mode 100644 index 0000000000000000000000000000000000000000..3a59d02e1183488e106c580d5fb5b1af5f04ee1f GIT binary patch literal 1332 zcmeAS@N?(olHy`uVBq!ia0y~yU`ztC53n!;$uk#AB!HAefKQ0)|NsAi%>Vxn%%7hy z0muU50|yRNANv0U$Ym@E@(X5gcy=R=fq~_er;B4q#hkZuyrGv z?&r~~e@8uDIWvFlzuNH3WclA_-}mV-XOe$b;r-I zQ_LPbt2=f+eL`3Qkp5o%bmd1@&Pz;hSTY&Qnzk@lJ4Q9kRnR@)H$f~x9ir(5nbHQ| zSnG6ootXFkVqbW5#)hmr3+wwnI$iYEt@`kI4?|AZ-PD}t?1hi}UTtJu6E7@fpYq54 zK;mN_@1<%hPqkzv1?A3?E}nYw#x{P*@=~3z1?x<11RvXZLOb-B#p~$YDBU-atDoL9 zd6(7dcK^D?)2i8*O0L}4>Yewbhcrxl(6E{~a!N zy=7w=KBs%1xBrDKp9s@;P;x>4iwF8*WoiXw&sba75(_gDI>k9^?UNzY}QxyxB9b12Ws_2`z$J=aX<%dVVn7XOAwQE~! zgy7?-Pi|LpQyI7I5sQw^eA!c|o!q%xC-+y~%g{unXP4xmF+Z8|l zx$(@Fi%;Gz{H;4VjZOIf*We?q$I|}s-0R8RBXzIbKv?8fMTgkV#a)FWUG~SGhy}kp z*8VvzWlmJP_<@j@t9x>-&c3XYc>CKzJ3cWdccRDQ<~t{L^l;to>0P)vK{~-m>r6qQ{Po#2hI2n2-V$tJ zy3B5#Wc;P$+k%z$XWi+2+<2@o_wBJl^Y9pxzS}X084@Y1#xu3sYLZud%wD(R^T(x| zZ&!crb6)qhXz#~w)!#p)9=q*sQua3RulI_6sp%^U=Sxe~A6)*wo>lG3oCHH}Q(zIt N;OXk;vd$@?2>_ipe$D^@ literal 0 HcmV?d00001 diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoEA-members.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoEA-members.html new file mode 100644 index 000000000..c12e05db0 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoEA-members.html @@ -0,0 +1,69 @@ + + +ParadisEO-PEOMovingObjects: Member List + + + + +
+
+ +

peoEA< EOT > Member List

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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Communicable()Communicable
contpeoEA< EOT > [private]
getID()Runner
getKey()Communicable
isLocal()Runner
keyCommunicable [protected]
lock()Communicable
notifySendingTermination()Runner
num_commCommunicable [protected, static]
operator()(eoPop< EOT > &__pop)peoEA< EOT >
packTermination()Runner
peoEA(eoContinue< EOT > &__cont, peoPopEval< EOT > &__pop_eval, eoSelect< EOT > &__select, peoTransform< EOT > &__trans, eoReplacement< EOT > &__replace)peoEA< EOT >
poppeoEA< EOT > [private]
pop_evalpeoEA< EOT > [private]
replacepeoEA< EOT > [private]
resume()Communicable
run()peoEA< EOT > [virtual]
Runner()Runner
selectpeoEA< EOT > [private]
sem_lockCommunicable [protected]
sem_stopCommunicable [protected]
setActive()Thread
setPassive()Thread
start()Runner [virtual]
stop()Communicable
terminate()Runner
Thread()Thread
transpeoEA< EOT > [private]
unlock()Communicable
waitStarting()Runner
~Communicable()Communicable [virtual]
~Thread()Thread [virtual]


Generated on Mon Oct 8 11:16:47 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoEA.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoEA.html new file mode 100644 index 000000000..cf847b231 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoEA.html @@ -0,0 +1,236 @@ + + +ParadisEO-PEOMovingObjects: peoEA< EOT > Class Template Reference + + + + +
+
+ +

peoEA< EOT > Class Template Reference

The peoEA class offers an elementary evolutionary algorithm implementation. +More... +

+#include <peoEA.h> +

+

Inheritance diagram for peoEA< EOT >: +

+ +Runner +Communicable +Thread + +List of all members. + + + + + + + + + + + + + + + + + + + + + + + + +

Public Member Functions

 peoEA (eoContinue< EOT > &__cont, peoPopEval< EOT > &__pop_eval, eoSelect< EOT > &__select, peoTransform< EOT > &__trans, eoReplacement< EOT > &__replace)
 Constructor for the evolutionary algorithm object - several basic parameters have to be specified, allowing for different levels of parallelism.
+void run ()
 Evolutionary algorithm function - a side effect of the fact that the class is derived from the Runner class, thus requiring the existence of a run function, the algorithm being executed on a distinct thread.
void operator() (eoPop< EOT > &__pop)
 Function operator for specifying the population to be associated with the algorithm.

Private Attributes

+eoContinue< EOT > & cont
+peoPopEval< EOT > & pop_eval
+eoSelect< EOT > & select
+peoTransform< EOT > & trans
+eoReplacement< EOT > & replace
+eoPop< EOT > * pop
+

Detailed Description

+

template<class EOT>
+ class peoEA< EOT >

+ +The peoEA class offers an elementary evolutionary algorithm implementation. +

+In addition, as compared with the algorithms provided by the EO framework, the peoEA class has the underlying necessary structure for including, for example, parallel evaluation and parallel transformation operators, migration operators etc. Although there is no restriction on using the algorithms provided by the EO framework, the drawback resides in the fact that the EO implementation is exclusively sequential and, in consequence, no parallelism is provided. A simple example for constructing a peoEA object:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
...    
eoPop< EOT > population( POP_SIZE, popInitializer );   // creation of a population with POP_SIZE individuals - the popInitializer is a functor to be called for each individual
   
eoGenContinue< EOT > eaCont( NUM_GEN );   // number of generations for the evolutionary algorithm
eoCheckPoint< EOT > eaCheckpointContinue( eaCont );   // checkpoint incorporating the continuation criterion - startpoint for adding other checkpoint objects
   
peoSeqPopEval< EOT > eaPopEval( evalFunction );   // sequential evaluation functor wrapper - evalFunction represents the actual evaluation functor
   
eoRankingSelect< EOT > selectionStrategy;   // selection strategy for creating the offspring population - a simple ranking selection in this case
eoSelectNumber< EOT > eaSelect( selectionStrategy, POP_SIZE );   // the number of individuals to be selected for creating the offspring population
eoRankingSelect< EOT > selectionStrategy;   // selection strategy for creating the offspring population - a simple ranking selection in this case
   
eoSGATransform< EOT > transform( crossover, CROSS_RATE, mutation, MUT_RATE );   // transformation operator - crossover and mutation operators with their associated probabilities
peoSeqTransform< EOT > eaTransform( transform );   // ParadisEO specific sequential operator - a parallel version may be specified in the same manner
   
eoPlusReplacement< EOT > eaReplace;   // replacement strategy - for integrating the offspring resulting individuals in the initial population
   
peoEA< EOT > eaAlg( eaCheckpointContinue, eaPopEval, eaSelect, eaTransform, eaReplace );   // ParadisEO evolutionary algorithm integrating the above defined objects
eaAlg( population );   // specifying the initial population for the algorithm
...    
+ +

+ +

+Definition at line 82 of file peoEA.h.


Constructor & Destructor Documentation

+ +
+
+
+template<class EOT>
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
peoEA< EOT >::peoEA (eoContinue< EOT > &  __cont,
peoPopEval< EOT > &  __pop_eval,
eoSelect< EOT > &  __select,
peoTransform< EOT > &  __trans,
eoReplacement< EOT > &  __replace 
)
+
+
+ +

+Constructor for the evolutionary algorithm object - several basic parameters have to be specified, allowing for different levels of parallelism. +

+Depending on the requirements, a sequential or a parallel evaluation operator may be specified or, in the same manner, a sequential or a parallel transformation operator may be given as parameter. Out of the box objects may be provided, from the EO package, for example, or custom defined ones may be specified, provided that they are derived from the correct base classes.

+

Parameters:
+ + + + + + +
eoContinue< EOT >& __cont - continuation criterion specifying whether the algorithm should continue or not;
peoPopEval< EOT >& __pop_eval - evaluation operator; it allows the specification of parallel evaluation operators, aggregate evaluation functions, etc.;
eoSelect< EOT >& __select - selection strategy to be applied for constructing a list of offspring individuals;
peoTransform< EOT >& __trans - transformation operator, i.e. crossover and mutation; allows for sequential or parallel transform;
eoReplacement< EOT >& __replace - replacement strategy for integrating the offspring individuals in the initial population;
+
+ +

+Definition at line 126 of file peoEA.h. +

+References peoEA< EOT >::pop_eval, and peoEA< EOT >::trans. +

+

+


Member Function Documentation

+ +
+
+
+template<class EOT>
+ + + + + + + + + +
void peoEA< EOT >::operator() (eoPop< EOT > &  __pop  ) 
+
+
+ +

+Function operator for specifying the population to be associated with the algorithm. +

+

Parameters:
+ + +
eoPop< EOT >& __pop - initial population of the algorithm, to be iteratively evolved;
+
+ +

+Definition at line 142 of file peoEA.h. +

+References peoEA< EOT >::pop. +

+

+


The documentation for this class was generated from the following file: +
Generated on Mon Oct 8 11:16:47 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoEA.png b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoEA.png new file mode 100644 index 0000000000000000000000000000000000000000..e3384cb4437e114ee4fbf2197291f5fa2788e106 GIT binary patch literal 637 zcmV-@0)qXCP)U;@tD;oEsjW5UXp-yw(wK5{4 z&H6OxE)W4uou#yc+5Qv+061!4bl5`Jw=)@QP&m5B0i5ub=VNX6L5F2-(Q0G zH0QO;xK z3^K?dgABSWwC^|Cj@b9B)1dzV!Sv#Id1!5MyeJfwB}vx7Wp$fQg|J;?rvyx7V>a#W?)e0<4g z_94jo&~F}2H39i#m4GVGPyEkID_)v~XUJDaA=g1+jsyZ}nWrWnkw^z2X|f#=V-Op5 zqe~a0!y`&hP8x$L=<|wPW<8#zkU6`Z(@^qi0QdOr-Flb+%LGKF{z1{i) XqeU7?v_)yU00000NkvXXu0mjfWw#p0 literal 0 HcmV?d00001 diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoNoAggEvalFunc-members.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoNoAggEvalFunc-members.html new file mode 100644 index 000000000..02f4c5c2b --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoNoAggEvalFunc-members.html @@ -0,0 +1,42 @@ + + +ParadisEO-PEOMovingObjects: Member List + + + + +
+
+ +

peoNoAggEvalFunc< EOT > Member List

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

+ + + + + +
functor_category()eoBF< A1, A2, R > [static]
operator()(EOT &__sol, const typename EOT::Fitness &__fit)peoNoAggEvalFunc< EOT >
peoAggEvalFunc::operator()(A1, A2)=0eoBF< A1, A2, R > [pure virtual]
~eoBF()eoBF< A1, A2, R > [virtual]
~eoFunctorBase()eoFunctorBase [virtual]


Generated on Mon Oct 8 11:16:47 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoNoAggEvalFunc.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoNoAggEvalFunc.html new file mode 100644 index 000000000..e7abd2ce1 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoNoAggEvalFunc.html @@ -0,0 +1,68 @@ + + +ParadisEO-PEOMovingObjects: peoNoAggEvalFunc< EOT > Class Template Reference + + + + +
+
+ +

peoNoAggEvalFunc< EOT > Class Template Reference

The peoNoAggEvalFunc class does nothing more than an association between a fitness value and a specified individual. +More... +

+#include <peoNoAggEvalFunc.h> +

+

Inheritance diagram for peoNoAggEvalFunc< EOT >: +

+ +peoAggEvalFunc< EOT > +eoBF< A1, A2, R > +eoFunctorBase + +List of all members. + + + + + +

Public Member Functions

+void operator() (EOT &__sol, const typename EOT::Fitness &__fit)
 Operator which sets as fitness the __fit value for the __sol individual.
+

Detailed Description

+

template<class EOT>
+ class peoNoAggEvalFunc< EOT >

+ +The peoNoAggEvalFunc class does nothing more than an association between a fitness value and a specified individual. +

+The class is provided as a mean of declaring that no aggregation is required for the evaluation function - the fitness value is explicitly specified. +

+ +

+Definition at line 47 of file peoNoAggEvalFunc.h.


The documentation for this class was generated from the following file: +
Generated on Mon Oct 8 11:16:47 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoNoAggEvalFunc.png b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoNoAggEvalFunc.png new file mode 100644 index 0000000000000000000000000000000000000000..2feda5514e4e93e6414a8fbbb5ae4bbd5bb2ba34 GIT binary patch literal 946 zcmV;j15NyiP)XRv27W7e+U@^D`#KZ+5#Yz)n}NR`kDGySSQQ2~uz?M1U;`W2z`JeQgZKS@ zgBbWbFnKc2{56cqD+{su6sN757*5GNk|7i~_p8z)BZ94dd zRbgNQ8`!`GHn4#WyxXQdc;D|gh=KRO?RUM}?}plj>jRKIy3S@8fptRB_61 z<1$n*mTgKjFM)yfpVhrsd6N@6DnTME7~{ZcY2bij2Vvdf)^G9>ux!DCEx4IO4IEcs z+3&{t#ONLNfr=Hy+{ghf<4W$pg|gZ`$G)b@n87fXLddI(#*CR?eBVmBh77>7kIsS2s%=T#9`jTd;iJpSo|~fT!L5r#-NI0@!@F>EIhyg@FxhU;`W2zy>z(Zi6|^FMiJI4E%nuUrL9oU5-BD za!NI{VdMap{-H%~z#w2>``Z-hbhJLlAlHRvuyZtHqI%+aI%Y7q#d+`YSVs{IP9ZX) zf}OB?uy;9{29_iLLAt2m{EmQmL|)+#XWjn)0bNIe U{IBqQE&u=k07*qoM6N<$f|3El1^@s6 literal 0 HcmV?d00001 diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoParaPopEval-members.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoParaPopEval-members.html new file mode 100644 index 000000000..0e1cc0c86 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoParaPopEval-members.html @@ -0,0 +1,73 @@ + + +ParadisEO-PEOMovingObjects: Member List + + + + +
+
+ +

peoParaPopEval< EOT > Member List

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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ad_solpeoParaPopEval< EOT > [private]
Communicable()Communicable
execute()peoParaPopEval< EOT > [virtual]
funcspeoParaPopEval< EOT > [private]
getKey()Communicable
getOwner()Service
keyCommunicable [protected]
lock()Communicable
merge_evalpeoParaPopEval< EOT > [private]
no_merge_evalpeoParaPopEval< EOT > [private]
notifySendingAllResourceRequests()peoParaPopEval< EOT > [virtual]
notifySendingData()peoParaPopEval< EOT > [virtual]
notifySendingResourceRequest()Service [virtual]
num_commCommunicable [protected, static]
num_funcpeoParaPopEval< EOT > [private]
one_funcpeoParaPopEval< EOT > [private]
operator()(eoPop< EOT > &__pop)peoParaPopEval< EOT > [virtual]
packData()peoParaPopEval< EOT > [virtual]
packResourceRequest()Service
packResult()peoParaPopEval< EOT > [virtual]
peoParaPopEval(eoEvalFunc< EOT > &__eval_func)peoParaPopEval< EOT >
peoParaPopEval(const std::vector< eoEvalFunc< EOT > * > &__funcs, peoAggEvalFunc< EOT > &__merge_eval)peoParaPopEval< EOT >
progressionpeoParaPopEval< EOT > [private]
requestResourceRequest(unsigned __how_many=1)Service
resume()Communicable
sem_lockCommunicable [protected]
sem_stopCommunicable [protected]
setOwner(Thread &__owner)Service
solpeoParaPopEval< EOT > [private]
stop()Communicable
taskspeoParaPopEval< EOT > [private]
totalpeoParaPopEval< EOT > [private]
unlock()Communicable
unpackData()peoParaPopEval< EOT > [virtual]
unpackResult()peoParaPopEval< EOT > [virtual]
~Communicable()Communicable [virtual]


Generated on Mon Oct 8 11:16:48 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoParaPopEval.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoParaPopEval.html new file mode 100644 index 000000000..96e841252 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoParaPopEval.html @@ -0,0 +1,411 @@ + + +ParadisEO-PEOMovingObjects: peoParaPopEval< EOT > Class Template Reference + + + + +
+
+ +

peoParaPopEval< EOT > Class Template Reference

The peoParaPopEval represents a wrapper for creating a functor capable of applying in parallel an EO-derived evaluation functor. +More... +

+#include <peoParaPopEval.h> +

+

Inheritance diagram for peoParaPopEval< EOT >: +

+ +peoPopEval< EOT > +Service +Communicable + +List of all members. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Public Member Functions

 peoParaPopEval (eoEvalFunc< EOT > &__eval_func)
 Constructor function - an EO-derived evaluation functor has to be specified; an internal reference is set towards the specified evaluation functor.
 peoParaPopEval (const std::vector< eoEvalFunc< EOT > * > &__funcs, peoAggEvalFunc< EOT > &__merge_eval)
 Constructor function - a vector of EO-derived evaluation functors has to be specified as well as an aggregation function.
void operator() (eoPop< EOT > &__pop)
 Operator for applying the evaluation functor (direct or aggregate) for each individual of the specified population.
void packData ()
 Auxiliary function for transferring data between the process requesting an evaluation operation and the process that performs the actual evaluation phase.
void unpackData ()
 Auxiliary function for transferring data between the process requesting an evaluation operation and the process that performs the actual evaluation phase.
+void execute ()
 Auxiliary function - it calls the specified evaluation functor(s). There is no need to explicitly call the function.
void packResult ()
 Auxiliary function for transferring data between the process requesting an evaluation operation and the process that performs the actual evaluation phase.
void unpackResult ()
 Auxiliary function for transferring data between the process requesting an evaluation operation and the process that performs the actual evaluation phase.
void notifySendingData ()
 Auxiliary function for notifications between the process requesting an evaluation operation and the processes that performs the actual evaluation phase.
void notifySendingAllResourceRequests ()
 Auxiliary function for notifications between the process requesting an evaluation operation and the processes that performs the actual evaluation phase.

Private Attributes

+const std::vector< eoEvalFunc<
+ EOT > * > & 
funcs
+std::vector< eoEvalFunc< EOT > * > one_func
+peoAggEvalFunc< EOT > & merge_eval
+peoNoAggEvalFunc< EOT > no_merge_eval
+std::queue< EOT * > tasks
+std::map< EOT *, std::pair<
+ unsigned, unsigned > > 
progression
+unsigned num_func
+EOT sol
+EOT * ad_sol
+unsigned total
+

Detailed Description

+

template<class EOT>
+ class peoParaPopEval< EOT >

+ +The peoParaPopEval represents a wrapper for creating a functor capable of applying in parallel an EO-derived evaluation functor. +

+The class offers the possibility of chosing between a single-function evaluation and an aggregate evaluation function, including several sub-evalution functions. +

+ +

+Definition at line 54 of file peoParaPopEval.h.


Constructor & Destructor Documentation

+ +
+
+
+template<class EOT>
+ + + + + + + + + +
peoParaPopEval< EOT >::peoParaPopEval (eoEvalFunc< EOT > &  __eval_func  ) 
+
+
+ +

+Constructor function - an EO-derived evaluation functor has to be specified; an internal reference is set towards the specified evaluation functor. +

+

Parameters:
+ + +
eoEvalFunc< EOT >& __eval_func - EO-derived evaluation functor to be applied in parallel on each individual of a specified population
+
+ +

+Definition at line 130 of file peoParaPopEval.h. +

+References peoParaPopEval< EOT >::one_func. +

+

+ +

+
+
+template<class EOT>
+ + + + + + + + + + + + + + + + + + +
peoParaPopEval< EOT >::peoParaPopEval (const std::vector< eoEvalFunc< EOT > * > &  __funcs,
peoAggEvalFunc< EOT > &  __merge_eval 
)
+
+
+ +

+Constructor function - a vector of EO-derived evaluation functors has to be specified as well as an aggregation function. +

+

Parameters:
+ + + +
const std :: vector< eoEvalFunc < EOT >* >& __funcs - vector of EO-derived partial evaluation functors;
peoAggEvalFunc< EOT >& __merge_eval - aggregation functor for creating a fitness value out of the partial fitness values.
+
+ +

+Definition at line 139 of file peoParaPopEval.h. +

+

+


Member Function Documentation

+ +
+
+
+template<class EOT>
+ + + + + + + + + +
void peoParaPopEval< EOT >::operator() (eoPop< EOT > &  __pop  )  [virtual]
+
+
+ +

+Operator for applying the evaluation functor (direct or aggregate) for each individual of the specified population. +

+

Parameters:
+ + +
eoPop< EOT >& __pop - population to be evaluated by applying the evaluation functor specified in the constructor.
+
+ +

+Implements peoPopEval< EOT >. +

+Definition at line 150 of file peoParaPopEval.h. +

+References peoParaPopEval< EOT >::funcs, peoParaPopEval< EOT >::progression, Service::requestResourceRequest(), Communicable::stop(), peoParaPopEval< EOT >::tasks, and peoParaPopEval< EOT >::total. +

+

+ +

+
+
+template<class EOT>
+ + + + + + + + +
void peoParaPopEval< EOT >::packData (  )  [virtual]
+
+
+ +

+Auxiliary function for transferring data between the process requesting an evaluation operation and the process that performs the actual evaluation phase. +

+There is no need to explicitly call the function. +

+Reimplemented from Service. +

+Definition at line 171 of file peoParaPopEval.h. +

+References peoParaPopEval< EOT >::progression, and peoParaPopEval< EOT >::tasks. +

+

+ +

+
+
+template<class EOT>
+ + + + + + + + +
void peoParaPopEval< EOT >::unpackData (  )  [virtual]
+
+
+ +

+Auxiliary function for transferring data between the process requesting an evaluation operation and the process that performs the actual evaluation phase. +

+There is no need to explicitly call the function. +

+Reimplemented from Service. +

+Definition at line 185 of file peoParaPopEval.h. +

+References peoParaPopEval< EOT >::ad_sol, peoParaPopEval< EOT >::num_func, and peoParaPopEval< EOT >::sol. +

+

+ +

+
+
+template<class EOT>
+ + + + + + + + +
void peoParaPopEval< EOT >::packResult (  )  [virtual]
+
+
+ +

+Auxiliary function for transferring data between the process requesting an evaluation operation and the process that performs the actual evaluation phase. +

+There is no need to explicitly call the function. +

+Reimplemented from Service. +

+Definition at line 202 of file peoParaPopEval.h. +

+References peoParaPopEval< EOT >::ad_sol, and peoParaPopEval< EOT >::sol. +

+

+ +

+
+
+template<class EOT>
+ + + + + + + + +
void peoParaPopEval< EOT >::unpackResult (  )  [virtual]
+
+
+ +

+Auxiliary function for transferring data between the process requesting an evaluation operation and the process that performs the actual evaluation phase. +

+There is no need to explicitly call the function. +

+Reimplemented from Service. +

+Definition at line 211 of file peoParaPopEval.h. +

+References peoParaPopEval< EOT >::ad_sol, Service::getOwner(), peoParaPopEval< EOT >::merge_eval, peoParaPopEval< EOT >::progression, Communicable::resume(), Thread::setActive(), and peoParaPopEval< EOT >::total. +

+

+ +

+
+
+template<class EOT>
+ + + + + + + + +
void peoParaPopEval< EOT >::notifySendingData (  )  [virtual]
+
+
+ +

+Auxiliary function for notifications between the process requesting an evaluation operation and the processes that performs the actual evaluation phase. +

+There is no need to explicitly call the function. +

+Reimplemented from Service. +

+Definition at line 242 of file peoParaPopEval.h. +

+

+ +

+
+
+template<class EOT>
+ + + + + + + + +
void peoParaPopEval< EOT >::notifySendingAllResourceRequests (  )  [virtual]
+
+
+ +

+Auxiliary function for notifications between the process requesting an evaluation operation and the processes that performs the actual evaluation phase. +

+There is no need to explicitly call the function. +

+Reimplemented from Service. +

+Definition at line 247 of file peoParaPopEval.h. +

+References Service::getOwner(), and Thread::setPassive(). +

+

+


The documentation for this class was generated from the following file: +
Generated on Mon Oct 8 11:16:48 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoParaPopEval.png b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoParaPopEval.png new file mode 100644 index 0000000000000000000000000000000000000000..3ddb392239123f182a27303d1cf1ebac4748a310 GIT binary patch literal 772 zcmV+f1N;1mP)3A-qBm$S^j5k55eni@U^@@nnu*_3N+u{Ee-V;17!BsHsF*)NP<|^;7zeOx z>`RMGU%=s!^)(!sf)CzfK#X7G3o$jZ6CpHx9T!0XFakXg5F{(Hq z;udkj3#0I|{SlnjQErGVO>v4-oZ=LxIK@2xC;Yhh>}TWu9>)$iVBf9RV+BCFTu4Ln z=Jo(L9%Y$S-z+v8Z;tb2YYlB{?Mcmr3K(#Hzh=X6&<{nJxwmZmtxDNb>UQ=H-+fCEu6 zPI3-babh?C_T9!zb=9>?swt$8G}O%|oNLzk!kNKT*DM?xi@LRul77k&E~(DNPclxO zq^1#*dmGLTzgclEHO|sEQVrye+zF(bJf2kRwm9fG({MRNF59Nq)v-8W$+6V98awVC za9lB`faFQTqve@y=rpZ!D zz!IZmHU-t1*30g@ZD!4TS^wkw0GymC?ha0NVf+Wf>N??=rmyAz0000 + +ParadisEO-PEOMovingObjects: Member List + + + + +
+
+ +

peoParaSGATransform< EOT > Member List

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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Communicable()Communicable
crosspeoParaSGATransform< EOT > [private]
cross_ratepeoParaSGATransform< EOT > [private]
execute()peoParaSGATransform< EOT > [virtual]
fatherpeoParaSGATransform< EOT > [private]
functor_category()eoUF< A1, R > [static]
getKey()Communicable
getOwner()Service
idxpeoParaSGATransform< EOT > [private]
keyCommunicable [protected]
lock()Communicable
motherpeoParaSGATransform< EOT > [private]
mutpeoParaSGATransform< EOT > [private]
mut_ratepeoParaSGATransform< EOT > [private]
notifySendingAllResourceRequests()peoParaSGATransform< EOT > [virtual]
notifySendingData()peoParaSGATransform< EOT > [virtual]
notifySendingResourceRequest()Service [virtual]
num_commCommunicable [protected, static]
num_termpeoParaSGATransform< EOT > [private]
operator()(eoPop< EOT > &__pop)peoParaSGATransform< EOT >
peoTransform::operator()(A1)=0eoUF< A1, R > [pure virtual]
packData()peoParaSGATransform< EOT > [virtual]
packResourceRequest()Service
packResult()peoParaSGATransform< EOT > [virtual]
peoParaSGATransform(eoQuadOp< EOT > &__cross, double __cross_rate, eoMonOp< EOT > &__mut, double __mut_rate)peoParaSGATransform< EOT >
poppeoParaSGATransform< EOT > [private]
requestResourceRequest(unsigned __how_many=1)Service
resume()Communicable
sem_lockCommunicable [protected]
sem_stopCommunicable [protected]
setOwner(Thread &__owner)Service
stop()Communicable
unlock()Communicable
unpackData()peoParaSGATransform< EOT > [virtual]
unpackResult()peoParaSGATransform< EOT > [virtual]
~Communicable()Communicable [virtual]
~eoFunctorBase()eoFunctorBase [virtual]
~eoUF()eoUF< A1, R > [virtual]


Generated on Mon Oct 8 11:16:48 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoParaSGATransform.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoParaSGATransform.html new file mode 100644 index 000000000..d2691e70b --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoParaSGATransform.html @@ -0,0 +1,115 @@ + + +ParadisEO-PEOMovingObjects: peoParaSGATransform< EOT > Class Template Reference + + + + +
+
+ +

peoParaSGATransform< EOT > Class Template Reference

Inheritance diagram for peoParaSGATransform< EOT >: +

+ +peoTransform< EOT > +Service +eoTransform< EOT > +Communicable +eoUF< A1, R > +eoFunctorBase + +List of all members. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Public Member Functions

peoParaSGATransform (eoQuadOp< EOT > &__cross, double __cross_rate, eoMonOp< EOT > &__mut, double __mut_rate)
+void operator() (eoPop< EOT > &__pop)
+void packData ()
+void unpackData ()
+void execute ()
+void packResult ()
+void unpackResult ()
+void notifySendingData ()
+void notifySendingAllResourceRequests ()

Private Attributes

+eoQuadOp< EOT > & cross
+double cross_rate
+eoMonOp< EOT > & mut
+double mut_rate
+unsigned idx
+eoPop< EOT > * pop
+EOT father
+EOT mother
+unsigned num_term
+

Detailed Description

+

template<class EOT>
+ class peoParaSGATransform< EOT >

+ + +

+ +

+Definition at line 49 of file peoParaSGATransform.h.


The documentation for this class was generated from the following file: +
Generated on Mon Oct 8 11:16:48 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoParaSGATransform.png b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoParaSGATransform.png new file mode 100644 index 0000000000000000000000000000000000000000..ed966aad7b07429701fd3b38bff4e80fd319c5de GIT binary patch literal 1640 zcmcIlX*8Q@6#l3+YMRPtqS`Y^Qw^$$(heOZ_F5BbTO@=;tAkoAMO8&BhoZqygjk}q zRc3UtR&$7@G7T+4V`^V&=|nA^S~4+b`e&A3bLO1;JomZh-20yU<9*IeadxzphbTh; z0Fbw}vA_a=7*(V{N$e6az-jUpv68dBtEEsV6iK15wWtW6AyR*!wYBvsOE@Vi#Uikd zE`aGYj|c#g+qM>Fu2%{c3%tYbpM+8z9Ng%K7EODkm_);}!ym56!nY8uY*xfma+Znh zph*kq*HR=ZX51wDUD^zTMa_;=v@C4(4#)6*o z%Y7#pM8ZSC)jC0AngAS22;EJ9;67u6n8ys41YSlxma&1ah!lCsS06L4BPh0UwF`xL zE=MQ>;kD(rJhF-u8|UJqKy~`eI>;dPT=*fp*mH)(boi-s^c}okIluuGHAI+DR{YGm z`0`p>VurH}WhZu{b=idl_rsdyfXsPsASs^Std+o30$)|kdy6Nqi3 z$#4KM*a$%Df00b+Ts;a{R7Z=cei^*=-&#D1OqZo(8)Uok-DcI%z5c2oNBw!ixI>S& zb@oD2dPd8!z>*r13Ab_*$0*F4xmLi6M=9i%kOK!jJ$6b&>ckCy6Z0HwsEOd>bcR~~ z%QboG@xDyI_IjNCN?aMr?1ep}v~~!?`{>e-_U(=qzm*)bpNgKB zsAbs1T~5AygT+)`xX`z%PZ?PCnyp&agI}JIn2>6Z@@Zjq9xT5eF??Y?PO#<0TdnGP zH}96jgX^GzS1hkIbBX0PDT8%ZXP+5#8$Uc;>YTd|pC-<29$aDy)y5oqS9Fm2(bOmy zBTx@YCGI3uhUxPzbX4Okl|My_Rf~W{?1I4VWS|?S9@ljYovx&_^4xJkYH%~v(C@Wr6APvC>N zM>%aH8#jH3)%v&)`*Rw8RXy&Q$2o^vDs0SoQ2J`jGwA3W^&uWMoce81Vdu1#ruycS z+84%PjEvLX)5DKr`NSH*+=$ZGd`y#33}@sa>3mCA5{&9cx047XD8SN<{M`oYuUzkK zv7+!FsC1W2&S&pQjyKyIUYCOSjz_No-=6ZqSf|R3eE&LxHdA8zVaCr#qg(N!Pft62 ze51am9nay3`(WlP`hs=d_KCiKWQ7j4#!%YZcMv6Poz&7CcFmjHB#YHp#c8`g8ac5$ zsbt6kb@xlML2*NV%osV^fQbHWA5LaOVkCj(pNf311QL*#jz2vi+aQ+mZ|I_-XTibM z*CMybN~-)V=-cRcyD1fA2>rtHJ0+2gzq|*nVSV>z;dDFF?YR||zP0XWc zTnc + +ParadisEO-PEOMovingObjects: Member List + + + + +
+
+ +

peoParallelAlgorithmWrapper Member List

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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
algorithmpeoParallelAlgorithmWrapper [private]
Communicable()Communicable
getID()Runner
getKey()Communicable
isLocal()Runner
keyCommunicable [protected]
lock()Communicable
notifySendingTermination()Runner
num_commCommunicable [protected, static]
packTermination()Runner
peoParallelAlgorithmWrapper(AlgorithmType &externalAlgorithm)peoParallelAlgorithmWrapper [inline]
peoParallelAlgorithmWrapper(AlgorithmType &externalAlgorithm, AlgorithmDataType &externalData)peoParallelAlgorithmWrapper [inline]
resume()Communicable
run()peoParallelAlgorithmWrapper [inline, virtual]
Runner()Runner
sem_lockCommunicable [protected]
sem_stopCommunicable [protected]
setActive()Thread
setPassive()Thread
start()Runner [virtual]
stop()Communicable
terminate()Runner
Thread()Thread
unlock()Communicable
waitStarting()Runner
~Communicable()Communicable [virtual]
~peoParallelAlgorithmWrapper()peoParallelAlgorithmWrapper [inline]
~Thread()Thread [virtual]


Generated on Mon Oct 8 11:16:47 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoParallelAlgorithmWrapper.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoParallelAlgorithmWrapper.html new file mode 100644 index 000000000..2cacf76fb --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoParallelAlgorithmWrapper.html @@ -0,0 +1,79 @@ + + +ParadisEO-PEOMovingObjects: peoParallelAlgorithmWrapper Class Reference + + + + +
+
+ +

peoParallelAlgorithmWrapper Class Reference

Inheritance diagram for peoParallelAlgorithmWrapper: +

+ +Runner +Communicable +Thread + +List of all members. + + + + + + + + + + + + + + + + + + + + + + +

Public Member Functions

+template<typename AlgorithmType>
 peoParallelAlgorithmWrapper (AlgorithmType &externalAlgorithm)
+template<typename AlgorithmType, typename AlgorithmDataType>
 peoParallelAlgorithmWrapper (AlgorithmType &externalAlgorithm, AlgorithmDataType &externalData)
~peoParallelAlgorithmWrapper ()
+void run ()

Private Attributes

+AbstractAlgorithmalgorithm

Classes

struct  AbstractAlgorithm
struct  Algorithm
struct  Algorithm< AlgorithmType, void >
+

Detailed Description

+ +

+ +

+Definition at line 47 of file peoParallelAlgorithmWrapper.h.


The documentation for this class was generated from the following file: +
Generated on Mon Oct 8 11:16:47 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoParallelAlgorithmWrapper.png b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoParallelAlgorithmWrapper.png new file mode 100644 index 0000000000000000000000000000000000000000..0b0eb1065a35989b05e9d29c85c34df5373f67cb GIT binary patch literal 837 zcmeAS@N?(olHy`uVBq!ia0y~yV9W!uJ6M>3r0Fx6=|D;%z$e7@|Ns9$=Kuc(=Fd-< z0AzvjfddDs5B+}vQL4?0x?4`!$R0XGWiwy;GfD@cmA` zZ26K4Z}oaFY}tKoeWAP3t)DiV*S?!?)vn*SzhigtqTo9}A9xh^oU~}M_$<`1KV#nI zy(`{w?@<1~G4q?<`MEEWJnTeT=Ugg#mvbw;U~{6`*?aTP9aVhyb@L6jo3eUO)}7XQ z9{5--YT2^?AL{z8XD&-waB}b5->Y|=<~;v=vab2n8#}D_y)LrbSN!i;P0)^?mf}z5 z_#c}3(glcbf9|v1@%`L`cRQP_-}AhixBK2~rn}z-+`p7%dAq5yRew~-8K_nEgtrVd0D(m4;3inNg4RvigG@wu3S*>|A5VW z$3fn_*xp}qk2>Ccx%a%o?ddh$+m|mdxU(y@x=IS_OoTg-oCIgS^1HJ{H8pSjlh;#f zx)1CX-SPXE>>Zc0+a}N5SMy47UEa?dl)d3@-M+a1mux`nS*%rqtoo>z@OTb$=Ub@qu#)qkTF zhczjz{}vqoz3QatzM1b&_U!I`Z@WEu=S$0S;rniPa_t^koIJ0-bCQ3{?q|YocZxs1 zP@6ANxZmQ-PYd(hNq=&8++A=-_-nmH_nV!eEbsP#y|?Rhbw|BN+wOHrXH%X7(>#Nx LtDnm{r-UW|D2}}J literal 0 HcmV?d00001 diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoPopEval-members.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoPopEval-members.html new file mode 100644 index 000000000..d233f1ae2 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoPopEval-members.html @@ -0,0 +1,61 @@ + + +ParadisEO-PEOMovingObjects: Member List + + + + +
+
+ +

peoPopEval< EOT > Member List

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

+ + + + + + + + + + + + + + + + + + + + + + + + +
Communicable()Communicable
execute()Service [virtual]
getKey()Communicable
getOwner()Service
keyCommunicable [protected]
lock()Communicable
notifySendingAllResourceRequests()Service [virtual]
notifySendingData()Service [virtual]
notifySendingResourceRequest()Service [virtual]
num_commCommunicable [protected, static]
operator()(eoPop< EOT > &__pop)=0peoPopEval< EOT > [pure virtual]
packData()Service [virtual]
packResourceRequest()Service
packResult()Service [virtual]
requestResourceRequest(unsigned __how_many=1)Service
resume()Communicable
sem_lockCommunicable [protected]
sem_stopCommunicable [protected]
setOwner(Thread &__owner)Service
stop()Communicable
unlock()Communicable
unpackData()Service [virtual]
unpackResult()Service [virtual]
~Communicable()Communicable [virtual]


Generated on Mon Oct 8 11:16:48 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoPopEval.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoPopEval.html new file mode 100644 index 000000000..f7509c195 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoPopEval.html @@ -0,0 +1,69 @@ + + +ParadisEO-PEOMovingObjects: peoPopEval< EOT > Class Template Reference + + + + +
+
+ +

peoPopEval< EOT > Class Template Reference

The peoPopEval class provides the interface for constructing ParadisEO specific evaluation functors. +More... +

+#include <peoPopEval.h> +

+

Inheritance diagram for peoPopEval< EOT >: +

+ +Service +Communicable +peoParaPopEval< EOT > +peoSeqPopEval< EOT > + +List of all members. + + + + + +

Public Member Functions

+virtual void operator() (eoPop< EOT > &__pop)=0
 Interface function providing the signature for constructing an evaluation functor.
+

Detailed Description

+

template<class EOT>
+ class peoPopEval< EOT >

+ +The peoPopEval class provides the interface for constructing ParadisEO specific evaluation functors. +

+The derived classes may be used as wrappers for EO-derived evaluation functors. In order to have an example, please refer to the implementation of the peoSeqPopEval and peoParaPopEval classes. +

+ +

+Definition at line 47 of file peoPopEval.h.


The documentation for this class was generated from the following file: +
Generated on Mon Oct 8 11:16:48 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoPopEval.png b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoPopEval.png new file mode 100644 index 0000000000000000000000000000000000000000..100bbb7708cfffb99c2337daff193b7a05ccf0b4 GIT binary patch literal 1211 zcmeAS@N?(olHy`uVBq!ia0y~yU~~eq53n!;$>yH&6F^ELz$e7@|Ns9$=Kuc(=Fd-< z0AzvjfddDs5B+}vEaktG3V{v+`QWcJZ-rmFY+gwPbh0l z+#S%!xbweYTA=(g5%WNYlR*Ld-U?imUq3HkQDC~(UY)JKe%ub)zxwyu>+QLksv(Ew zyJRq&-(|kBagA-8z<%Z#trvb+L?xGrxg_5eZ>na@{{Caxw}3-)4=YG;A2UAm&p0>b z?Z=km((+$o`>pN*6A7!CZUY;gD!l)@#QbSA03220882 zQ%>>Rsh)B1@2hX?e(#@rXKzn|wOM}6>q0i!!uq`UL#3q)Z!X>z_`mvc?#&hV&*uB4 zukrq7wod6z*zrx91D~(+jGmVKn(2Fs_VQOgJ5-z&bhN4k@MNm{dYbcB@?8Jjd12xN zD}Cne{o78@NNp~0Gdsoeu}ebld5d;;qGLrO&rh3}A2wfR9)7NP`l9pBcsS z%ii8L_4?u0#Xk@3i_(1f{dd;V{gx+yKKL6z*xT0)4nXEq*Q;@mi| zCHaBHn>inDoPTpO^2D!#R>g+kDJ_w6r6&97ZBvUE&hoKQNijP!&z0$N;X{r%-)4^9 zgI^d{1YBU6D5v}Q)xnnKPCv7>>#{!`UGu+3U~i($LDSfe()o!7bKd>scM5jX6p$0m zOsbs_u)NK-x82sNW7W+mEdc^fRqrO;cJ*!E_>AM2mF7bUtKAAFCph|}RO{GU%3nN7 zytDoNhpj$$y4@EoHsdf+$9u)jQQuRHgWc!+w?hbSziRtWA61|i`_fidAtv8mN+*3#vXMOoiMei`lij3op0P`8nOBKIJFe4-ITf7 zc3r!F@l3w1ojJ*RmtVe^ZzalR8prQnbkpwI;UKG-n*#scdolG^f>%Y}7o$Y$m+#GV r-%JU}yWY6r)3uF3>+kf2y|TBGw3FIaDzySw(lB_s`njxgN@xNAZqPj* literal 0 HcmV?d00001 diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoSeqPopEval-members.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoSeqPopEval-members.html new file mode 100644 index 000000000..c16b20bd7 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoSeqPopEval-members.html @@ -0,0 +1,63 @@ + + +ParadisEO-PEOMovingObjects: Member List + + + + +
+
+ +

peoSeqPopEval< EOT > Member List

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

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Communicable()Communicable
evalpeoSeqPopEval< EOT > [private]
execute()Service [virtual]
getKey()Communicable
getOwner()Service
keyCommunicable [protected]
lock()Communicable
notifySendingAllResourceRequests()Service [virtual]
notifySendingData()Service [virtual]
notifySendingResourceRequest()Service [virtual]
num_commCommunicable [protected, static]
operator()(eoPop< EOT > &__pop)peoSeqPopEval< EOT > [virtual]
packData()Service [virtual]
packResourceRequest()Service
packResult()Service [virtual]
peoSeqPopEval(eoEvalFunc< EOT > &__eval)peoSeqPopEval< EOT >
requestResourceRequest(unsigned __how_many=1)Service
resume()Communicable
sem_lockCommunicable [protected]
sem_stopCommunicable [protected]
setOwner(Thread &__owner)Service
stop()Communicable
unlock()Communicable
unpackData()Service [virtual]
unpackResult()Service [virtual]
~Communicable()Communicable [virtual]


Generated on Mon Oct 8 11:16:48 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoSeqPopEval.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoSeqPopEval.html new file mode 100644 index 000000000..ad1a5ffc0 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoSeqPopEval.html @@ -0,0 +1,142 @@ + + +ParadisEO-PEOMovingObjects: peoSeqPopEval< EOT > Class Template Reference + + + + +
+
+ +

peoSeqPopEval< EOT > Class Template Reference

The peoSeqPopEval class acts only as a ParadisEO specific sequential evaluation functor - a wrapper for incorporating an eoEvalFunc< EOT >-derived class as evaluation functor. +More... +

+#include <peoSeqPopEval.h> +

+

Inheritance diagram for peoSeqPopEval< EOT >: +

+ +peoPopEval< EOT > +Service +Communicable + +List of all members. + + + + + + + + + + + +

Public Member Functions

 peoSeqPopEval (eoEvalFunc< EOT > &__eval)
 Constructor function - it only sets an internal reference to point to the specified evaluation object.
void operator() (eoPop< EOT > &__pop)
 Operator for evaluating all the individuals of a given population - in a sequential iterative manner.

Private Attributes

+eoEvalFunc< EOT > & eval
+

Detailed Description

+

template<class EOT>
+ class peoSeqPopEval< EOT >

+ +The peoSeqPopEval class acts only as a ParadisEO specific sequential evaluation functor - a wrapper for incorporating an eoEvalFunc< EOT >-derived class as evaluation functor. +

+The specified EO evaluation object is applyied in an iterative manner to each individual of a specified population. +

+ +

+Definition at line 49 of file peoSeqPopEval.h.


Constructor & Destructor Documentation

+ +
+
+
+template<class EOT>
+ + + + + + + + + +
peoSeqPopEval< EOT >::peoSeqPopEval (eoEvalFunc< EOT > &  __eval  ) 
+
+
+ +

+Constructor function - it only sets an internal reference to point to the specified evaluation object. +

+

Parameters:
+ + +
eoEvalFunc< EOT >& __eval - evaluation object to be applied for each individual of a specified population
+
+ +

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

+

+


Member Function Documentation

+ +
+
+
+template<class EOT>
+ + + + + + + + + +
void peoSeqPopEval< EOT >::operator() (eoPop< EOT > &  __pop  )  [virtual]
+
+
+ +

+Operator for evaluating all the individuals of a given population - in a sequential iterative manner. +

+

Parameters:
+ + +
eoPop< EOT >& __pop - population to be evaluated.
+
+ +

+Implements peoPopEval< EOT >. +

+Definition at line 74 of file peoSeqPopEval.h. +

+References peoSeqPopEval< EOT >::eval. +

+

+


The documentation for this class was generated from the following file: +
Generated on Mon Oct 8 11:16:48 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoSeqPopEval.png b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoSeqPopEval.png new file mode 100644 index 0000000000000000000000000000000000000000..df2001515c1532a88a54eed65d6bcf9ad0a58de4 GIT binary patch literal 776 zcmV+j1NZ!iP)nL9!;X98JcZAis%u2!F=lj12MiXWiI-hgIX3vEF8R zz>%rX0xJ0x3&*Bv{xr*rZ^8R`6rvBbAHGRQpq!{`j;>$ z)3}NSATk^iG|Osze97WGwk#;uH5o6yzbKEH6%&v!oJX9<x4h2&8_Du;5s-pJPdLA!ydK6Q5vlC!+K$u3lqmRAkm$ zd7K=^GS-o`a!p&g)_$C2{fSA~I+U@DWh`SE%UH&`&RY2_ch~3DFJ-CU=b;wGN#}v9 zN~Ec_m>jZHUjnsOSjD0*aVyJvEH6k%5$ipsavMckSU!vzA&ONy5V^R9j#tp}l3eI` zsXUJ3rSlka9{K)4d2J%u<@@Vd9z#E-nqU6~>-}M@S=P!mZRJ|~ahCNbCSmJP#xj<% zjAbli8S6R=){V_AbAC70TdW;ik)SH8Hti{E@q?zSS;un4df&DlphQoQ^3jl4DPD3|6EBrV6|b7d z9bC=hmh(vW7g3T{-CxH%ZpTq{=f4-XW-S`Vnq@6q)BXW=2mS6mK?9Be0000 + +ParadisEO-PEOMovingObjects: Member List + + + + +
+
+ +

peoSeqTransform< EOT > Member List

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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Communicable()Communicable
execute()peoSeqTransform< EOT > [inline, virtual]
functor_category()eoUF< A1, R > [static]
getKey()Communicable
getOwner()Service
keyCommunicable [protected]
lock()Communicable
notifySendingAllResourceRequests()Service [virtual]
notifySendingData()Service [virtual]
notifySendingResourceRequest()Service [virtual]
num_commCommunicable [protected, static]
operator()(eoPop< EOT > &__pop)peoSeqTransform< EOT >
peoTransform::operator()(A1)=0eoUF< A1, R > [pure virtual]
packData()peoSeqTransform< EOT > [inline, virtual]
packResourceRequest()Service
packResult()peoSeqTransform< EOT > [inline, virtual]
peoSeqTransform(eoTransform< EOT > &__trans)peoSeqTransform< EOT >
requestResourceRequest(unsigned __how_many=1)Service
resume()Communicable
sem_lockCommunicable [protected]
sem_stopCommunicable [protected]
setOwner(Thread &__owner)Service
stop()Communicable
transpeoSeqTransform< EOT > [private]
unlock()Communicable
unpackData()peoSeqTransform< EOT > [inline, virtual]
unpackResult()peoSeqTransform< EOT > [inline, virtual]
~Communicable()Communicable [virtual]
~eoFunctorBase()eoFunctorBase [virtual]
~eoUF()eoUF< A1, R > [virtual]


Generated on Mon Oct 8 11:16:48 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoSeqTransform.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoSeqTransform.html new file mode 100644 index 000000000..afab019be --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoSeqTransform.html @@ -0,0 +1,163 @@ + + +ParadisEO-PEOMovingObjects: peoSeqTransform< EOT > Class Template Reference + + + + +
+
+ +

peoSeqTransform< EOT > Class Template Reference

The peoSeqTransform represent a wrapper for offering the possibility of using EO derived transform operators along with the ParadisEO evolutionary algorithms. +More... +

+#include <peoSeqTransform.h> +

+

Inheritance diagram for peoSeqTransform< EOT >: +

+ +peoTransform< EOT > +Service +eoTransform< EOT > +Communicable +eoUF< A1, R > +eoFunctorBase + +List of all members. + + + + + + + + + + + + + + + + + + + + + + + + + + +

Public Member Functions

 peoSeqTransform (eoTransform< EOT > &__trans)
 Constructor function - sets an internal reference towards the specified EO-derived transform object.
void operator() (eoPop< EOT > &__pop)
 Operator for applying the specified transform operators on each individual of the given population.
+virtual void packData ()
 Interface function for providing a link with the parallel architecture of the ParadisEO framework.
+virtual void unpackData ()
 Interface function for providing a link with the parallel architecture of the ParadisEO framework.
+virtual void execute ()
 Interface function for providing a link with the parallel architecture of the ParadisEO framework.
+virtual void packResult ()
 Interface function for providing a link with the parallel architecture of the ParadisEO framework.
+virtual void unpackResult ()
 Interface function for providing a link with the parallel architecture of the ParadisEO framework.

Private Attributes

+eoTransform< EOT > & trans
+

Detailed Description

+

template<class EOT>
+ class peoSeqTransform< EOT >

+ +The peoSeqTransform represent a wrapper for offering the possibility of using EO derived transform operators along with the ParadisEO evolutionary algorithms. +

+A minimal set of interface functions is also provided for creating the link with the parallel architecture of the ParadisEO framework. +

+ +

+Definition at line 48 of file peoSeqTransform.h.


Constructor & Destructor Documentation

+ +
+
+
+template<class EOT>
+ + + + + + + + + +
peoSeqTransform< EOT >::peoSeqTransform (eoTransform< EOT > &  __trans  ) 
+
+
+ +

+Constructor function - sets an internal reference towards the specified EO-derived transform object. +

+

Parameters:
+ + +
eoTransform< EOT >& __trans - EO-derived transform object including crossover and mutation operators.
+
+ +

+Definition at line 83 of file peoSeqTransform.h. +

+

+


Member Function Documentation

+ +
+
+
+template<class EOT>
+ + + + + + + + + +
void peoSeqTransform< EOT >::operator() (eoPop< EOT > &  __pop  ) 
+
+
+ +

+Operator for applying the specified transform operators on each individual of the given population. +

+

Parameters:
+ + +
eoPop< EOT >& __pop - population to be transformed by applying the crossover and mutation operators.
+
+ +

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

+References peoSeqTransform< EOT >::trans. +

+

+


The documentation for this class was generated from the following file: +
Generated on Mon Oct 8 11:16:48 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoSeqTransform.png b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoSeqTransform.png new file mode 100644 index 0000000000000000000000000000000000000000..48c554a9494f613ba1f52f4cc6fa011737f2e35b GIT binary patch literal 1532 zcmcJPSx}Q#6vqQ%Yob&MRM`fl70idiOc+_>ph$#)tcC<@k+5piAX|czMOn*gA#5KI zNH9c5=zxGkHW4s`KrD*U(4x|a0w!ebCv$gdgmP(1j31{^tq!I`uL$Ruj9`&a66SpP>9o7 z3yq+X*QC*$RdTOay0!P_toa%-Jhf|Mwo2s(l#qeS@2@FK8XA<c!%?uHfFh(T{)Cms;zyV>Yn9y80EjU~^^Ctj|+=T4I7E2VenL`x2 zJ>j!C87Uoh4z=e_P>AHhF!N zP_meeLk*PMo$QHR#jlS+%o7t=tzVwsHn{VFvo8!KQ|KhMV{+0J#Iy#J)LEOl}*WwEa#SAw(OPa{GUsE8)%+m~HQ9ay?N1Eo%D z+?bD#yQnrA%rfv^1wbjG1b$B2;V=?0zE2QRD>aW_so1CIlwpQtUr7&rDLhU3Tv*6U z;9{}92Yx*BJ7Lr@14;)!8<3Owj3N*rFef8qhS?Q%?|SUp^7 z9=Be8^GY4%=u%UYcxvhh!GK3~e`~V;y%UdgWb4jmVAZK?`@DnMld)k}OgUM%Eyt8w z{ebh-*aEhmVVq)F93D;^L^f3Sx;&o*7|nU%T>b%$-r&*{Pt{R&-b{uCt~XcL2!8jFMy$P4>dOjX?4PPD@=9<9jmd`Ol z@w|r?oa74f{jAO=fgdoNjr_V*PFcJ_uOF{KCIsg<9k&|&ruvW_2bFY|stodms=FK| zcehej;zZ&00gAZzU>2`bo#}3>ZI%QuGVieANo1R!R1XTzHN~T&wC1Ky8)GW9_uOkH z*9|rB+I#T0N|W(k`1 iRP6+o>Vfx_(`uamy;&O}H1RYNcyME6E?P}<-0`s^M6 literal 0 HcmV?d00001 diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoSyncIslandMig-members.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoSyncIslandMig-members.html new file mode 100644 index 000000000..f2cb522e3 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoSyncIslandMig-members.html @@ -0,0 +1,75 @@ + + +ParadisEO-PEOMovingObjects: Member List + + + + +
+
+ +

peoSyncIslandMig< EOT > Member List

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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
addTo(eoCheckPoint< EOT > &cp)eoUpdater
className(void) const eoUpdater [virtual]
Communicable()Communicable
contpeoSyncIslandMig< EOT > [private]
coop_empeoSyncIslandMig< EOT > [private]
destinationpeoSyncIslandMig< EOT > [private]
empeoSyncIslandMig< EOT > [private]
emigrate()peoSyncIslandMig< EOT > [private]
functor_category()eoF< void > [static]
getKey()Communicable
getOwner()Cooperative
immpeoSyncIslandMig< EOT > [private]
immigrate()peoSyncIslandMig< EOT > [private]
keyCommunicable [protected]
lastCall()eoUpdater [virtual]
lock()Communicable
notifySending()peoSyncIslandMig< EOT > [virtual]
num_commCommunicable [protected, static]
operator()()peoSyncIslandMig< EOT > [virtual]
pack()peoSyncIslandMig< EOT > [virtual]
peoSyncIslandMig(unsigned __frequency, eoSelect< EOT > &__select, eoReplacement< EOT > &__replace, Topology &__topology, eoPop< EOT > &__source, eoPop< EOT > &__destination)peoSyncIslandMig< EOT >
replacepeoSyncIslandMig< EOT > [private]
result_type typedefeoF< void >
resume()Communicable
selectpeoSyncIslandMig< EOT > [private]
sem_lockCommunicable [protected]
sem_stopCommunicable [protected]
send(Cooperative *__coop)Cooperative
setOwner(Runner &__runner)Cooperative
sourcepeoSyncIslandMig< EOT > [private]
stop()Communicable
syncpeoSyncIslandMig< EOT > [private]
topologypeoSyncIslandMig< EOT > [private]
unlock()Communicable
unpack()peoSyncIslandMig< EOT > [virtual]
~Communicable()Communicable [virtual]
~eoF()eoF< void > [virtual]
~eoFunctorBase()eoFunctorBase [virtual]


Generated on Mon Oct 8 11:16:49 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoSyncIslandMig.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoSyncIslandMig.html new file mode 100644 index 000000000..edd7ebfca --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoSyncIslandMig.html @@ -0,0 +1,310 @@ + + +ParadisEO-PEOMovingObjects: peoSyncIslandMig< EOT > Class Template Reference + + + + +
+
+ +

peoSyncIslandMig< EOT > Class Template Reference

The peoSyncIslandMig class offers the elementary basis for implementating a synchronous island migration model - requires the specification of several basic parameters, i.e. +More... +

+#include <peoSyncIslandMig.h> +

+

Inheritance diagram for peoSyncIslandMig< EOT >: +

+ +Cooperative +eoUpdater +Communicable +eoF< void > +eoFunctorBase + +List of all members. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Public Member Functions

 peoSyncIslandMig (unsigned __frequency, eoSelect< EOT > &__select, eoReplacement< EOT > &__replace, Topology &__topology, eoPop< EOT > &__source, eoPop< EOT > &__destination)
 Constructor for the peoSyncIslandMig class; the characteristics of the migration model are defined through the specified parameters - out of the box objects provided in EO, etc., or custom, derived objects may be passed as parameters.
void operator() ()
 Function operator to be called as checkpoint for performing the migration step.
+void pack ()
 Auxiliary function dealing with sending the emigrant individuals. There is no need to explicitly call the function.
+void unpack ()
 Auxiliary function dealing with receiving immigrant individuals. There is no need to explicitly call the function.
+void notifySending ()
 Auxiliary function dealing with migration notifications. There is no need to explicitly call the function.

Private Member Functions

+void emigrate ()
+void immigrate ()

Private Attributes

+eoPeriodicContinue< EOT > cont
+eoSelect< EOT > & select
+eoReplacement< EOT > & replace
+Topologytopology
+eoPop< EOT > & source
+eoPop< EOT > & destination
+std::queue< eoPop< EOT > > imm
+std::queue< eoPop< EOT > > em
+std::queue< Cooperative * > coop_em
+sem_t sync
+

Detailed Description

+

template<class EOT>
+ class peoSyncIslandMig< EOT >

+ +The peoSyncIslandMig class offers the elementary basis for implementating a synchronous island migration model - requires the specification of several basic parameters, i.e. +

+frequency of the migrations, selection and replacement strategies, a topological model and the source and destination population for the migrating individuals. The main difference as opposed to the asynchronous migration model is the synchronization step performed after selecting and sending the emigrant individuals.

+The migration operator is called at the end of each generation of an evolutionary algorithms as a checkpoint object - the following code exposes the structure of a classic evolutionary algorithm:

+ + + + + + + + + + + + + +
do {    
         select( population, offsprings );   // select the offsprings from the current population
         transform( offsprings );   // crossover and mutation operators are applied on the selected offsprings
         evaluate( offsprings );   // evaluation step of the resulting offspring
         replace( population, offsprings );   // replace the individuals in the current population whith individuals from the offspring population, according to a specified replacement strategy
} while ( eaCheckpointContinue( population ) );   // checkpoint operators are applied on the current population, including the migration operator, if any specified
+

+Constructing a synchronous island migration model requires having defined (1) a topological migration model, (2) the control parameters of the migration process, (3) a checkpoint object associated with an evolutionary algorithm, and (4) an owner object must be set. The owner object must be derived from the Runner class (for example a peoEA object represents a possible owner). A simple example is offered bellow:

+

    +
  1. +topological model to be followed when performing migrations:
    +
    + + + +
    RingTopology migTopology;   // a simple ring topological model - each island communicates with two other islands
    +

    +

  2. +
  3. +the continuation criterion, selection and replacement strategy etc. are defined:
    +
    + + + + + + + + + + + + + + + +
    eoPop< EOT > population( POP_SIZE, popInitializer );   // population of individuals to be used for the evolutionary algorithm
       
    eoRandomSelect< EOT > migSelectStrategy;   // selection strategy - in this case a random selection is applied
    eoSelectNumber< EOT > migSelect( migSelectStrategy, MIG_SIZE );   // number of individuals to be selected using the specified strategy
    eoPlusReplacement< EOT > migReplace;   // immigration strategy - the worse individuals in the destination population are replaced by the immigrant individuals
       
    peoSyncIslandMig< EOT > syncMigration(
    +          MIG_FREQ, migSelect, migReplace, migTopology,
    +          population, population
    + );  
    // synchronous migration object - the emigrant individuals are selected from the same from population in which the immigrant individuals are being integrated
    +

    +

  4. +
  5. +creation of a checkpoint object as part of the definition of an evolutionary algoritm (details of th EA not given as being out of scope):
    +
    + + + + + + + + + + + + + +
    ...    
    eoGenContinue< EOT > eaCont( NUM_GEN );   // the evolutionary algorithm will stop after NUM_GEN generations
    eoCheckPoint< EOT > eaCheckpointContinue( eaCont );   // number of individuals to be selected using the specified strategy
    ...    
    eaCheckpointContinue.add( syncMigration );   // adding the migration operator as checkpoint element
    ...    
    +

    +

  6. +
  7. +definition of an owner evolutionary algorithm (an object inheriting the Runner class):
    +
    + + + + + + + +
    peoEA< EOT > eaAlg( eaCheckpointContinue, eaPopEval, eaSelect, eaTransform, eaReplace);   // evolutionary algorithm having as checkpoint the eaCheckpointContinue object defined above
    syncMigration.setOwner( eaAlg );   // setting the evolutionary algorithm as owner of the migration object
    eaAlg( population );   // applying the evolutionary algorithm on a given population
    +
  8. +
+

+The source and the destination population for the migration object were specified as being the same, in step no. 2, as we are usually interested in selecting the emigrants and integrating the immigrant individuals from and in, respectively, one unique population, iteratively evolved by an evolutionary algorithm. There is no restriction in having two distinct populations as source and destination for the emigrant and immigrant individuals respectively.

+The above steps only create a synchronous migration object associated to an evolutionary algorithm. The creation of several islands requires the reiteration of the steps 2 through 4 for creating distinct algorithms, with distinct populations and the associated distinctly parametrized migration objects. The interconnecting element is the underlying topology, defined at step 1 (the same C++ migTopology object has to be passed as parameter for all the migration objects, in order to interconnect them). +

+ +

+Definition at line 142 of file peoSyncIslandMig.h.


Constructor & Destructor Documentation

+ +
+
+
+template<class EOT>
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
peoSyncIslandMig< EOT >::peoSyncIslandMig (unsigned  __frequency,
eoSelect< EOT > &  __select,
eoReplacement< EOT > &  __replace,
Topology __topology,
eoPop< EOT > &  __source,
eoPop< EOT > &  __destination 
)
+
+
+ +

+Constructor for the peoSyncIslandMig class; the characteristics of the migration model are defined through the specified parameters - out of the box objects provided in EO, etc., or custom, derived objects may be passed as parameters. +

+

Parameters:
+ + + + + + + +
unsigned __frequency - frequency of the migrations - the migrations occur periodically;
eoSelect< EOT >& __select - selection strategy to be applied for constructing a list of emigrant individuals out of the source population;
eoReplacement< EOT >& __replace - replacement strategy used for integrating the immigrant individuals in the destination population;
Topology& __topology - topological model to be followed when performing migrations;
eoPop< EOT >& __source - source population from which the emigrant individuals are selected;
eoPop< EOT >& __destination - destination population in which the immigrant population are integrated.
+
+ +

+Definition at line 206 of file peoSyncIslandMig.h. +

+References Topology::add(), and peoSyncIslandMig< EOT >::sync. +

+

+


Member Function Documentation

+ +
+
+
+template<class EOT>
+ + + + + + + + +
void peoSyncIslandMig< EOT >::operator() (  )  [virtual]
+
+
+ +

+Function operator to be called as checkpoint for performing the migration step. +

+The emigrant individuals are selected from the source population and sent to the next island (defined by the topology object) while the immigrant individuals are integrated in the destination population. There is no need to explicitly call the function - the wrapper checkpoint object (please refer to the above example) will perform the call when required. +

+Implements eoF< void >. +

+Definition at line 280 of file peoSyncIslandMig.h. +

+References peoSyncIslandMig< EOT >::cont, peoSyncIslandMig< EOT >::emigrate(), Cooperative::getOwner(), peoSyncIslandMig< EOT >::immigrate(), Thread::setActive(), peoSyncIslandMig< EOT >::source, Communicable::stop(), and peoSyncIslandMig< EOT >::sync. +

+

+


The documentation for this class was generated from the following file: +
Generated on Mon Oct 8 11:16:49 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoSyncIslandMig.png b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoSyncIslandMig.png new file mode 100644 index 0000000000000000000000000000000000000000..6a1b7c227e1509a9f1fb9cb66f0dd78b2d6a17bb GIT binary patch literal 1161 zcmeAS@N?(olHy`uVBq!ia0y~yUEaktG3V`^*rLS-0xb)Jo~C=63+y~_ z?Op4iC%@$rFZQr7NuTML^0_3-{@C!u{Nsl$Cg_EVy2bzR;&zFuHC_7EH)N4eY0$l> z>9!@YUzh{i`D4XP&)=Tcb}Q|2wBy&e{hJjpu{qt~&Wf0vd(KUC-!at?>9D^ z-=)_1J8m^w9(E;Swc;!4eI@|(YeSfS>R{EylXyP|4t z6#~SH4_XTqUmgl;Inzb%VsUvXX|_N8;Lnol!MDi{iMp z{_!+;^Q3CyyVK^e%15qFwN5z0)l|iNGm+uhQtpLz2KRJZDqlLS5Vu;>;T6(>5+o?$ z^lRpdr}{T9rI)V!&nhr=#rmh}|L)qqT;~zhaZ7qh%=Q_Vc~;Ff2;3w4xgg}>my0{^S@J zTmI6yKcDL;DMd!Jc5Xr)6ft>@>f^`?p&-wB& z2PGhYsp$FQYuk1ttPqzFG&2b7?7Eoo;Ni#YHt88ram8*}alj1$6Yif(OU2IAIvfYm7YFocq%?3u_fMAz=#kpH` zZY^jzl=e*W>Y+g2{#BV*I>gfVT#s;CJ2fQB^!zGYrqH;{8q;0|Br}$*n0nFWy4SB5 zhHo8fmhCQ^xo{bi#NuOX`T`$DZk6F>DH*D8F8y4*)0}??dDUc4Xyml7mzI{ zoOPcuDBgBmq;0#{o2^fG##S|E#pPMtczopr0B-OeRsaA1 literal 0 HcmV?d00001 diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoSyncMultiStart-members.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoSyncMultiStart-members.html new file mode 100644 index 000000000..ba4f886c9 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoSyncMultiStart-members.html @@ -0,0 +1,79 @@ + + +ParadisEO-PEOMovingObjects: Member List + + + + +
+
+ +

peoSyncMultiStart< EOT > Member List

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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
addTo(eoCheckPoint< EOT > &cp)eoUpdater
className(void) const eoUpdater [virtual]
Communicable()Communicable
contpeoSyncMultiStart< EOT > [private]
execute()peoSyncMultiStart< EOT > [virtual]
functor_category()eoF< void > [static]
getKey()Communicable
getOwner()Service
idxpeoSyncMultiStart< EOT > [private]
impr_selpeoSyncMultiStart< EOT > [private]
keyCommunicable [protected]
lastCall()eoUpdater [virtual]
lock()Communicable
lspeoSyncMultiStart< EOT > [private]
notifySendingAllResourceRequests()peoSyncMultiStart< EOT > [virtual]
notifySendingData()peoSyncMultiStart< EOT > [virtual]
notifySendingResourceRequest()Service [virtual]
num_commCommunicable [protected, static]
num_termpeoSyncMultiStart< EOT > [private]
operator()()peoSyncMultiStart< EOT > [virtual]
packData()peoSyncMultiStart< EOT > [virtual]
packResourceRequest()Service
packResult()peoSyncMultiStart< EOT > [virtual]
peoSyncMultiStart(eoContinue< EOT > &__cont, eoSelect< EOT > &__select, eoReplacement< EOT > &__replace, moAlgo< EOT > &__ls, eoPop< EOT > &__pop)peoSyncMultiStart< EOT >
poppeoSyncMultiStart< EOT > [private]
replacepeoSyncMultiStart< EOT > [private]
requestResourceRequest(unsigned __how_many=1)Service
result_type typedefeoF< void >
resume()Communicable
selpeoSyncMultiStart< EOT > [private]
selectpeoSyncMultiStart< EOT > [private]
sem_lockCommunicable [protected]
sem_stopCommunicable [protected]
setOwner(Thread &__owner)Service
solpeoSyncMultiStart< EOT > [private]
stop()Communicable
unlock()Communicable
unpackData()peoSyncMultiStart< EOT > [virtual]
unpackResult()peoSyncMultiStart< EOT > [virtual]
~Communicable()Communicable [virtual]
~eoF()eoF< void > [virtual]
~eoFunctorBase()eoFunctorBase [virtual]


Generated on Mon Oct 8 11:16:49 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoSyncMultiStart.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoSyncMultiStart.html new file mode 100644 index 000000000..d8fcdc3b2 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoSyncMultiStart.html @@ -0,0 +1,418 @@ + + +ParadisEO-PEOMovingObjects: peoSyncMultiStart< EOT > Class Template Reference + + + + +
+
+ +

peoSyncMultiStart< EOT > Class Template Reference

The peoSyncMultiStart class provides the basis for implementing the synchronous multi-start model, for launching several solution-based algorithms in parallel on a specified initial population. +More... +

+#include <peoSyncMultiStart.h> +

+

Inheritance diagram for peoSyncMultiStart< EOT >: +

+ +Service +eoUpdater +Communicable +eoF< void > +eoFunctorBase + +List of all members. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Public Member Functions

 peoSyncMultiStart (eoContinue< EOT > &__cont, eoSelect< EOT > &__select, eoReplacement< EOT > &__replace, moAlgo< EOT > &__ls, eoPop< EOT > &__pop)
 Constructor function - several simple parameters are required for defining the characteristics of the multi-start model.
void operator() ()
 Operator which synchronously executes the specified algorithm on the individuals selected from the initial population.
void packData ()
 Auxiliary function for transferring data between the process requesting the synchronous execution of the specified algorithm and the process which actually executes the algorithm.
void unpackData ()
 Auxiliary function for transferring data between the process requesting the synchronous execution of the specified algorithm and the process which actually executes the algorithm.
void execute ()
 Auxiliary function for actually executing the specified algorithm on one assigned individual.
void packResult ()
 Auxiliary function for transferring data between the process requesting the synchronous execution of the specified algorithm and the process which actually executes the algorithm.
void unpackResult ()
 Auxiliary function for transferring data between the process requesting the synchronous execution of the specified algorithm and the process which actually executes the algorithm.
void notifySendingData ()
 Auxiliary function for notifications between the process requesting the synchronous multi-start execution and the processes that performs the actual execution phase.
void notifySendingAllResourceRequests ()
 Auxiliary function for notifications between the process requesting the synchronous multi-start execution and the processes that performs the actual execution phase.

Private Attributes

+eoContinue< EOT > & cont
+eoSelect< EOT > & select
+eoReplacement< EOT > & replace
+moAlgo< EOT > & ls
+eoPop< EOT > & pop
+eoPop< EOT > sel
+eoPop< EOT > impr_sel
+EOT sol
+unsigned idx
+unsigned num_term
+

Detailed Description

+

template<class EOT>
+ class peoSyncMultiStart< EOT >

+ +The peoSyncMultiStart class provides the basis for implementing the synchronous multi-start model, for launching several solution-based algorithms in parallel on a specified initial population. +

+As a simple example, several hill climbing algorithms may be synchronously launched on the specified population, each algorithm acting upon one individual only, the final result being integrated back in the population. A peoSyncMultiStart object can be specified as checkpoint object for a classic ParadisEO evolutionary algorithm thus allowing for simple hybridization schemes which combine the evolutionary approach with a local search approach, for example, executed at the end of each generation. +

+ +

+Definition at line 64 of file peoSyncMultiStart.h.


Constructor & Destructor Documentation

+ +
+
+
+template<class EOT>
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
peoSyncMultiStart< EOT >::peoSyncMultiStart (eoContinue< EOT > &  __cont,
eoSelect< EOT > &  __select,
eoReplacement< EOT > &  __replace,
moAlgo< EOT > &  __ls,
eoPop< EOT > &  __pop 
)
+
+
+ +

+Constructor function - several simple parameters are required for defining the characteristics of the multi-start model. +

+

Parameters:
+ + + + + + +
eoContinue< EOT >& __cont - defined for including further functionality - no semantics associated at this time;
eoSelect< EOT >& __select - selection strategy for obtaining a subset of the initial population on which to apply the specified algorithm;
eoReplacement< EOT >& __replace - replacement strategy for integrating the resulting individuals in the initial population;
moAlgo< EOT >& __ls - algorithm to be applied on each of the selected individuals - a moAlgo< EOT >-derived object must be specified;
eoPop< EOT >& __pop - the initial population from which the individuals are selected for applying the specified algorithm.
+
+ +

+Definition at line 134 of file peoSyncMultiStart.h. +

+

+


Member Function Documentation

+ +
+
+
+template<class EOT>
+ + + + + + + + +
void peoSyncMultiStart< EOT >::operator() (  )  [virtual]
+
+
+ +

+Operator which synchronously executes the specified algorithm on the individuals selected from the initial population. +

+There is no need to explicitly call the operator - automatically called as checkpoint operator. +

+Implements eoF< void >. +

+Definition at line 189 of file peoSyncMultiStart.h. +

+References peoSyncMultiStart< EOT >::idx, peoSyncMultiStart< EOT >::impr_sel, peoSyncMultiStart< EOT >::num_term, peoSyncMultiStart< EOT >::pop, Service::requestResourceRequest(), peoSyncMultiStart< EOT >::sel, peoSyncMultiStart< EOT >::select, and Communicable::stop(). +

+

+ +

+
+
+template<class EOT>
+ + + + + + + + +
void peoSyncMultiStart< EOT >::packData (  )  [virtual]
+
+
+ +

+Auxiliary function for transferring data between the process requesting the synchronous execution of the specified algorithm and the process which actually executes the algorithm. +

+There is no need to explicitly call the function. +

+Reimplemented from Service. +

+Definition at line 148 of file peoSyncMultiStart.h. +

+References peoSyncMultiStart< EOT >::idx, and peoSyncMultiStart< EOT >::sel. +

+

+ +

+
+
+template<class EOT>
+ + + + + + + + +
void peoSyncMultiStart< EOT >::unpackData (  )  [virtual]
+
+
+ +

+Auxiliary function for transferring data between the process requesting the synchronous execution of the specified algorithm and the process which actually executes the algorithm. +

+There is no need to explicitly call the function. +

+Reimplemented from Service. +

+Definition at line 154 of file peoSyncMultiStart.h. +

+References peoSyncMultiStart< EOT >::sol. +

+

+ +

+
+
+template<class EOT>
+ + + + + + + + +
void peoSyncMultiStart< EOT >::execute (  )  [virtual]
+
+
+ +

+Auxiliary function for actually executing the specified algorithm on one assigned individual. +

+There is no need to explicitly call the function. +

+Reimplemented from Service. +

+Definition at line 160 of file peoSyncMultiStart.h. +

+References peoSyncMultiStart< EOT >::ls, and peoSyncMultiStart< EOT >::sol. +

+

+ +

+
+
+template<class EOT>
+ + + + + + + + +
void peoSyncMultiStart< EOT >::packResult (  )  [virtual]
+
+
+ +

+Auxiliary function for transferring data between the process requesting the synchronous execution of the specified algorithm and the process which actually executes the algorithm. +

+There is no need to explicitly call the function. +

+Reimplemented from Service. +

+Definition at line 166 of file peoSyncMultiStart.h. +

+References peoSyncMultiStart< EOT >::sol. +

+

+ +

+
+
+template<class EOT>
+ + + + + + + + +
void peoSyncMultiStart< EOT >::unpackResult (  )  [virtual]
+
+
+ +

+Auxiliary function for transferring data between the process requesting the synchronous execution of the specified algorithm and the process which actually executes the algorithm. +

+There is no need to explicitly call the function. +

+Reimplemented from Service. +

+Definition at line 172 of file peoSyncMultiStart.h. +

+References Service::getOwner(), peoSyncMultiStart< EOT >::impr_sel, peoSyncMultiStart< EOT >::num_term, peoSyncMultiStart< EOT >::pop, peoSyncMultiStart< EOT >::replace, Communicable::resume(), peoSyncMultiStart< EOT >::sel, Thread::setActive(), and peoSyncMultiStart< EOT >::sol. +

+

+ +

+
+
+template<class EOT>
+ + + + + + + + +
void peoSyncMultiStart< EOT >::notifySendingData (  )  [virtual]
+
+
+ +

+Auxiliary function for notifications between the process requesting the synchronous multi-start execution and the processes that performs the actual execution phase. +

+There is no need to explicitly call the function. +

+Reimplemented from Service. +

+Definition at line 200 of file peoSyncMultiStart.h. +

+

+ +

+
+
+template<class EOT>
+ + + + + + + + +
void peoSyncMultiStart< EOT >::notifySendingAllResourceRequests (  )  [virtual]
+
+
+ +

+Auxiliary function for notifications between the process requesting the synchronous multi-start execution and the processes that performs the actual execution phase. +

+There is no need to explicitly call the function. +

+Reimplemented from Service. +

+Definition at line 205 of file peoSyncMultiStart.h. +

+References Service::getOwner(), and Thread::setPassive(). +

+

+


The documentation for this class was generated from the following file: +
Generated on Mon Oct 8 11:16:49 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoSyncMultiStart.png b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoSyncMultiStart.png new file mode 100644 index 0000000000000000000000000000000000000000..2ab8fb9909af824464d441c0e0c6de7c3f370e79 GIT binary patch literal 1291 zcmeAS@N?(olHy`uVBq!ia0y~yU<6`@11!uya*5J61t296;1lBd|Nnm=^Z)+?^XDf_ z0J6aNz<~qRhyFhSav4j4{DK)Ap4~`eU|?D3>EaktG3V_Z@3O@P0EDofh1>4vm0eea?(%-k zj4Iu|S35ClMSORO(bmd2ZP$J>`!xI9UY>oqVa^2M(F;+u+0#ms~Ypa_O=LsHAmVRD-O(?t#APVhP8+xi>ss%6jADB_^0&Ql)QJH`z^M zO>mSiX5Nr>OMdmTzZ-v_xXaYNwBf|r+ewSWP8yirX1?(=RrHeHrN25s+v1JyR)5wE zW;*(*E#l^c*ZN7dljpA7l(_D6yYK8>okbe6rOspqYe{s4N?h9!bw8xby>6X&W#X+X zi_WZDJ9pu(zAGiiu3TGxYVq01pL;Yz=iUgjy<8V!oBXQi=H7xAFL+~;BXwx4AtQ(k$a`SUdu|JJ!P9blRup|c`}qhW8qCWLxfn>J+@(*_0= z4sM4gYEe%NbzUe(GJLa}KW}wr{hC?dj_=dS$qJii&$vpda@kiy-*t7>eYJfxp%z=a zrx-1r#P)pFq|WYTTXU2c9xuw4H!i(pBGw+@d3qJk(^;9iuANKOL+UTtq`lgcS<@9% zJN44Myk*<2+`Yoi8*AWO8rXM^XXYolwcl8xy_c=h3{8+MK6&Nob6eA8>(e9_`#^c!Yo(rmj5d>%&M z+2Zr_`;5NV%&c!W&bYK~ZDy2QxWtl|B0VdLGje&>-*H-&S*zr2+&cHrtjK#dVmHfY z%u;;Gb5eJYmv@F2ck<0?WwTc7-@a_;|HfsPldNVa>R)P``ZD3vJx}Z2%iH{qTWx4u zc1-26N~q8A!VI6xn-{`@@9(kt9VmKl`P1VrwmXxp^!B^Hz1*w0$A5a^E~B+`v&(#5 zTjW0bCw(k)?(Y&?-(Afs?~0o)FR|r4oT6iUE5`qR+0 + +ParadisEO-PEOMovingObjects: Member List + + + + +
+
+ +

peoSynchronousMultiStart< EntityType > Member List

This is the complete list of members for peoSynchronousMultiStart< EntityType >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
aggregationFunctionpeoSynchronousMultiStart< EntityType > [private]
algorithmspeoSynchronousMultiStart< EntityType > [private]
Communicable()Communicable
datapeoSynchronousMultiStart< EntityType > [private]
dataIndexpeoSynchronousMultiStart< EntityType > [private]
entityTypeInstancepeoSynchronousMultiStart< EntityType > [private]
execute()peoSynchronousMultiStart< EntityType > [virtual]
functionIndexpeoSynchronousMultiStart< EntityType > [private]
getKey()Communicable
getOwner()Service
idxpeoSynchronousMultiStart< EntityType > [private]
keyCommunicable [protected]
lock()Communicable
notifySendingAllResourceRequests()peoSynchronousMultiStart< EntityType > [virtual]
notifySendingData()peoSynchronousMultiStart< EntityType > [virtual]
notifySendingResourceRequest()Service [virtual]
num_commCommunicable [protected, static]
num_termpeoSynchronousMultiStart< EntityType > [private]
operator()(Type &externalData)peoSynchronousMultiStart< EntityType > [inline]
operator()(const Type &externalDataBegin, const Type &externalDataEnd)peoSynchronousMultiStart< EntityType > [inline]
packData()peoSynchronousMultiStart< EntityType > [virtual]
packResourceRequest()Service
packResult()peoSynchronousMultiStart< EntityType > [virtual]
peoSynchronousMultiStart(AlgorithmType &externalAlgorithm)peoSynchronousMultiStart< EntityType > [inline]
peoSynchronousMultiStart(std::vector< AlgorithmType * > &externalAlgorithms, AggregationFunctionType &externalAggregationFunction)peoSynchronousMultiStart< EntityType > [inline]
requestResourceRequest(unsigned __how_many=1)Service
resume()Communicable
sem_lockCommunicable [protected]
sem_stopCommunicable [protected]
setOwner(Thread &__owner)Service
singularAlgorithmpeoSynchronousMultiStart< EntityType > [private]
stop()Communicable
unlock()Communicable
unpackData()peoSynchronousMultiStart< EntityType > [virtual]
unpackResult()peoSynchronousMultiStart< EntityType > [virtual]
~Communicable()Communicable [virtual]
~peoSynchronousMultiStart()peoSynchronousMultiStart< EntityType > [inline]


Generated on Mon Oct 8 11:16:48 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoSynchronousMultiStart.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoSynchronousMultiStart.html new file mode 100644 index 000000000..010e7e956 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoSynchronousMultiStart.html @@ -0,0 +1,139 @@ + + +ParadisEO-PEOMovingObjects: peoSynchronousMultiStart< EntityType > Class Template Reference + + + + +
+
+ +

peoSynchronousMultiStart< EntityType > Class Template Reference

Inheritance diagram for peoSynchronousMultiStart< EntityType >: +

+ +Service +Communicable + +List of all members. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Public Member Functions

+template<typename AlgorithmType>
 peoSynchronousMultiStart (AlgorithmType &externalAlgorithm)
+template<typename AlgorithmType, typename AggregationFunctionType>
 peoSynchronousMultiStart (std::vector< AlgorithmType * > &externalAlgorithms, AggregationFunctionType &externalAggregationFunction)
~peoSynchronousMultiStart ()
+template<typename Type>
void operator() (Type &externalData)
+template<typename Type>
void operator() (const Type &externalDataBegin, const Type &externalDataEnd)
+void packData ()
+void unpackData ()
+void execute ()
+void packResult ()
+void unpackResult ()
+void notifySendingData ()
+void notifySendingAllResourceRequests ()

Private Attributes

+AbstractAlgorithmsingularAlgorithm
+std::vector< AbstractAlgorithm * > algorithms
+AbstractAggregationAlgorithmaggregationFunction
+EntityType entityTypeInstance
+std::vector< AbstractDataType * > data
+unsigned idx
+unsigned num_term
+unsigned dataIndex
+unsigned functionIndex

Classes

struct  AbstractAggregationAlgorithm
struct  AbstractAlgorithm
struct  AbstractDataType
struct  AggregationAlgorithm
struct  Algorithm
struct  DataType
struct  NoAggregationFunction
+

Detailed Description

+

template<typename EntityType>
+ class peoSynchronousMultiStart< EntityType >

+ + +

+ +

+Definition at line 45 of file peoSynchronousMultiStart.h.


The documentation for this class was generated from the following file: +
Generated on Mon Oct 8 11:16:48 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoSynchronousMultiStart.png b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoSynchronousMultiStart.png new file mode 100644 index 0000000000000000000000000000000000000000..7504d31ad04a162418272fa4cf66e9f8732b167c GIT binary patch literal 714 zcmV;*0yX`KP)Y=zK~aY|3@%Q`a6p{MyVds?Fh6qA1z^Lv&;Lmvb?R6%B#^vcM4Ir z+QqG}_7A5050MAb5|-TRoL{}?Lwa_d9KM7+PkPqhWmjTesnR~XrqVG6Tb{URX(2U z{y*uL+ZE~C?c;*LNZ-_~hn)f5)7WrZH1|odwaXn{4q-cv^a73r z94lTv|BW@W0jW>T$f(kC8fgFujgY5IqJ%o+w+^QSZD|B);v+ykE7pWMsV8lgvp7b$ zpt!GHv@ht42u-oMqT^9LWjUyJ#l%Ph)XlP4T3WlLGcnz3{7Ns07CQ@^2@vxKlh&of zgfEB{E%g+tLFIhg^2McjSyIALGwQgJ5q(EXyo$zhwQ1Bf4N8}w?WnPeUD5cJ1}w7z z9lG4>4&A%gCBr32QR7ewmr|SSQ72pn$e~D|Ysuy`=5nvOF6My*?Pd7g6L;(fTz=s0 wm>#|HL9(+z-u!|dH0Ulprx<-Ddfu1ePcMdHt;oVYe*gdg07*qoM6N<$f|3kf$p8QV literal 0 HcmV?d00001 diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoTransform-members.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoTransform-members.html new file mode 100644 index 000000000..a1a2a4231 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoTransform-members.html @@ -0,0 +1,64 @@ + + +ParadisEO-PEOMovingObjects: Member List + + + + +
+
+ +

peoTransform< EOT > Member List

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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Communicable()Communicable
execute()Service [virtual]
functor_category()eoUF< A1, R > [static]
getKey()Communicable
getOwner()Service
keyCommunicable [protected]
lock()Communicable
notifySendingAllResourceRequests()Service [virtual]
notifySendingData()Service [virtual]
notifySendingResourceRequest()Service [virtual]
num_commCommunicable [protected, static]
operator()(A1)=0eoUF< A1, R > [pure virtual]
packData()Service [virtual]
packResourceRequest()Service
packResult()Service [virtual]
requestResourceRequest(unsigned __how_many=1)Service
resume()Communicable
sem_lockCommunicable [protected]
sem_stopCommunicable [protected]
setOwner(Thread &__owner)Service
stop()Communicable
unlock()Communicable
unpackData()Service [virtual]
unpackResult()Service [virtual]
~Communicable()Communicable [virtual]
~eoFunctorBase()eoFunctorBase [virtual]
~eoUF()eoUF< A1, R > [virtual]


Generated on Mon Oct 8 11:16:49 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoTransform.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoTransform.html new file mode 100644 index 000000000..f5abe2875 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoTransform.html @@ -0,0 +1,65 @@ + + +ParadisEO-PEOMovingObjects: peoTransform< EOT > Class Template Reference + + + + +
+
+ +

peoTransform< EOT > Class Template Reference

The peoTransform class acts only as an interface for creating transform operators - for an example please refer to the peoSeqTransform and the peoParaSGATransform classes. +More... +

+#include <peoTransform.h> +

+

Inheritance diagram for peoTransform< EOT >: +

+ +Service +eoTransform< EOT > +Communicable +eoUF< A1, R > +eoFunctorBase +peoParaSGATransform< EOT > +peoSeqTransform< EOT > + +List of all members. + +
+

Detailed Description

+

template<class EOT>
+ class peoTransform< EOT >

+ +The peoTransform class acts only as an interface for creating transform operators - for an example please refer to the peoSeqTransform and the peoParaSGATransform classes. +

+ +

+Definition at line 48 of file peoTransform.h.


The documentation for this class was generated from the following file: +
Generated on Mon Oct 8 11:16:49 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoTransform.png b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/classpeoTransform.png new file mode 100644 index 0000000000000000000000000000000000000000..d762a43a594ab15b959c5b5a4835eb178f717934 GIT binary patch literal 1805 zcmcIlX;f1O7Ji69G-BZtUILQiEto*hEC6gvEy? ztgS^zF-?I0LZXpH8e&X_2#lD3Y>{GJ3N;d0hO!jQL_70$&irW4x%Zy$yZ7IBzI$)M zAyRE&`$Xk?2Q6QG>})fio+$U0-^I?ZoX1}2k`o~LbsCaC$Uv%(t#ye;P9je^ z+0w>%h(6XQI})dvL%^7hJf<5Oqqd>ihLcVo59PA1fHte!wfx7CO9$F2%g;b%l|{Jc z_#_Hy{^xoY?50|XJdIzqj*UaOG<10&r;Fyr?1()pDdmfFVILwVFFj7B@1R8SeD0i> z^nB7xJ`Bc9d!+fhAPH^29g%~+7hU)W z4{l?hssaMP9oqPP&ff<f=79JYgN#H_&nsILpZ`#nfT41hNd z$jS@GsIEzqeT1}7e;cuztGtwn=FQFbI6q;(ElAc{c z2w&_s4s3k|ivGU^R~|Dscz#V;MM!n790 z$CGR|>{pj&HjIhWnC&`;aCz6&S+d&^Ngm# z%uAT>OF>SIIg2$(=!l=RFd`L<+u(FQxnZNanIbEQ-F2XTJ=1vBs;K9Yz>$@Bz4+o4 zX7bGx+%^YVkc}^wvgAHSw{W?g=TMfg{Xrei|L)7&nXvA5lsk1F2G4ppWZM$9Jjp5~7r5st(B*Y8ltN*L;`#^wLx0-Wm{wd7 z_wBY&{`G#e>R`T~w;j0lUxJA0v`WZGgYvsk@Txg{%^Y5B6S_to9~=#OMbibQdJ$Rh z8q3~kZE2jVJ-szN?Sf9F z(JkW^`?T~#<`MCCa1;A{fo3timiD`q*Yr8J#>uC3s)w={AYPU`MoBApW}W=-3pZ4= z0!s>Z=MAxhty3o*Q?yuWXDZnH_FlMCQJVO&@g@159#0D>Qr-{iZjhA}p|WT%p5qJ6 z`9e$rG#69o;l@`@Mv2wvd)K=Iv**yVr<1*8V(_*Y%4U&4C$2f1Nq|;13a9MTZ=reB z6}HlKb{krJltz#_6F}ztpEQi4Ho@wLKDD*WD^wl#|I??|s%XtO>Xc<;zHjM$0ZEh! za{L=@S9_x8X_>x^-Sx={_M;xK)vNGIYTWTZQV2`5frJUa*Z~u(@5(#uk_^+Y6ecdq zc{42snpz*$n0@4moCs3ur}5Fo4=$5L0WiWuCuPi3?c8yzegO=%8R2r>B>~Iz`@zse z`%#`^-OaNDS{J@Jfl;csCfPCJw)B+v|QA67iTHWnM2sait!-NP@QM8IpY_lzua`r(C0%hZye?)dMW zA~$@`oEf+FL)pg-?yCL>16~Cjkv*J?1E7x_i^PDV9CancCnp<@_#5MKwpWOH!&!;p PcLDqTNc(OO=-K}U5m`C` literal 0 HcmV?d00001 diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/comm_8cpp-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/comm_8cpp-source.html new file mode 100644 index 000000000..d9118ed38 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/comm_8cpp-source.html @@ -0,0 +1,124 @@ + + +ParadisEO-PEOMovingObjects: comm.cpp Source File + + + + +
+
+

comm.cpp

00001 /* 
+00002 * <comm.cpp>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 
+00038 #include <mpi.h>
+00039 
+00040 #include "comm.h"
+00041 #include "mess.h"
+00042 #include "node.h"
+00043 #include "param.h"
+00044 #include "../../core/peo_debug.h"
+00045 #include "../../core/runner.h"
+00046 #include "send.h"
+00047 #include "recv.h"
+00048 #include "scheduler.h"
+00049 
+00050 static sem_t sem_comm_init;
+00051 
+00052 static Communicator * the_thread;
+00053 
+00054 Communicator :: Communicator (int * __argc, char * * * __argv) {
+00055 
+00056   the_thread = this;  
+00057   initNode  (__argc, __argv);
+00058   loadRMCParameters (* __argc, * __argv);  
+00059   sem_post (& sem_comm_init);
+00060 }
+00061 
+00062 void Communicator :: start () {
+00063 
+00064   while (true) {
+00065     
+00066     /* Zzz Zzz Zzz :-))) */
+00067     sleep ();
+00068     sendMessages ();
+00069 
+00070     if (! atLeastOneActiveRunner ())     
+00071       break;
+00072     receiveMessages ();    
+00073   }
+00074   waitBuffers ();  
+00075   printDebugMessage ("finalizing");
+00076   MPI_Finalize ();  
+00077 }
+00078 
+00079 void initCommunication () {
+00080 
+00081   sem_init (& sem_comm_init, 0, 0);
+00082 }
+00083 
+00084 void waitNodeInitialization () {
+00085 
+00086   sem_wait (& sem_comm_init);
+00087 }
+00088 
+00089 void wakeUpCommunicator () {
+00090 
+00091   the_thread -> wakeUp ();
+00092 }
+00093 
+00094 
+00095 
+

Generated on Mon Oct 8 11:16:45 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/comm_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/comm_8h-source.html new file mode 100644 index 000000000..4829f60ac --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/comm_8h-source.html @@ -0,0 +1,88 @@ + + +ParadisEO-PEOMovingObjects: comm.h Source File + + + + +
+
+

comm.h

00001 /* 
+00002 * <comm.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef __comm_mpi_h
+00038 #define __comm_mpi_h
+00039 
+00040 #include "../../core/communicable.h"
+00041 #include "../../core/reac_thread.h"
+00042 
+00043 class Communicator : public ReactiveThread {
+00044 
+00045 public :
+00046   
+00047   /* Ctor */
+00048   Communicator (int * __argc, char * * * __argv);
+00049 
+00050   void start ();
+00051 };
+00052 
+00053 extern void initCommunication ();
+00054 
+00055 extern void waitNodeInitialization ();
+00056 
+00057 extern void wakeUpCommunicator ();
+00058 
+00059 #endif
+

Generated on Mon Oct 8 11:16:45 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/communicable_8cpp-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/communicable_8cpp-source.html new file mode 100644 index 000000000..3aa2cf96a --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/communicable_8cpp-source.html @@ -0,0 +1,127 @@ + + +ParadisEO-PEOMovingObjects: communicable.cpp Source File + + + + +
+
+

communicable.cpp

00001 /* 
+00002 * <communicable.cpp>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #include <vector>
+00038 #include <map>
+00039 #include <cassert>
+00040 
+00041 #include "communicable.h"
+00042 
+00043 static std :: vector <Communicable *> key_to_comm (1); /* Vector of registered cooperators */
+00044 
+00045 static std :: map <const Communicable *, unsigned> comm_to_key; /* Map of registered cooperators */
+00046 
+00047 unsigned Communicable :: num_comm = 0;
+00048 
+00049 Communicable :: Communicable () {
+00050 
+00051   comm_to_key [this] = key = ++ num_comm;
+00052   key_to_comm.push_back (this);
+00053   sem_init (& sem_lock, 0, 1);
+00054   sem_init (& sem_stop, 0, 0);
+00055 }
+00056 
+00057 Communicable :: ~ Communicable () {
+00058 
+00059 }
+00060 
+00061 COMM_ID Communicable :: getKey () {
+00062 
+00063   return key;
+00064 }
+00065 
+00066 Communicable * getCommunicable (COMM_ID __key) {
+00067 
+00068   assert (__key < key_to_comm.size ());
+00069   return key_to_comm [__key];  
+00070 }
+00071 
+00072 COMM_ID getKey (const Communicable * __comm) {
+00073   
+00074   return comm_to_key [__comm];
+00075 }
+00076 
+00077 void Communicable :: lock () {
+00078 
+00079   sem_wait (& sem_lock);
+00080 }
+00081 
+00082 void Communicable :: unlock () {
+00083 
+00084   sem_post (& sem_lock);
+00085 }
+00086 
+00087 void Communicable :: stop () {
+00088 
+00089   sem_wait (& sem_stop);
+00090 }
+00091 
+00092 void Communicable :: resume () {
+00093 
+00094   sem_post (& sem_stop);
+00095 }
+00096 
+00097 
+00098 
+

Generated on Mon Oct 8 11:16:45 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/communicable_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/communicable_8h-source.html new file mode 100644 index 000000000..f625215d2 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/communicable_8h-source.html @@ -0,0 +1,104 @@ + + +ParadisEO-PEOMovingObjects: communicable.h Source File + + + + +
+
+

communicable.h

00001 /* 
+00002 * <communicable.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef __communicable_h
+00038 #define __communicable_h
+00039 
+00040 #include <semaphore.h>
+00041 
+00042 typedef unsigned COMM_ID;
+00043 
+00044 class Communicable {
+00045 
+00046 public :
+00047 
+00048   Communicable ();
+00049   
+00050   virtual ~ Communicable ();
+00051 
+00052   COMM_ID getKey ();  
+00053 
+00054   void lock (); /* It suspends the current process if the semaphore is locked */
+00055   void unlock (); /* It unlocks the shared semaphore */
+00056 
+00057   void stop (); /* It suspends the current process */
+00058   void resume (); /* It resumes ___________ */
+00059   
+00060 protected :
+00061 
+00062   COMM_ID key;
+00063 
+00064   sem_t sem_lock;
+00065   
+00066   sem_t sem_stop;
+00067 
+00068   static unsigned num_comm;
+00069 };
+00070 
+00071 extern Communicable * getCommunicable (COMM_ID __key); 
+00072 
+00073 //extern COMM_ID getKey (const Communicable * __comm);
+00074 
+00075 #endif
+

Generated on Mon Oct 8 11:16:45 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/coop_8cpp-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/coop_8cpp-source.html new file mode 100644 index 000000000..0c17572a4 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/coop_8cpp-source.html @@ -0,0 +1,99 @@ + + +ParadisEO-PEOMovingObjects: coop.cpp Source File + + + + +
+
+

coop.cpp

00001 /* 
+00002 * <coop.cpp>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #include "../../core/cooperative.h"
+00038 #include "send.h"
+00039 #include "tags.h"
+00040 #include "schema.h"
+00041 #include "mess.h"
+00042 #include "../../core/peo_debug.h"
+00043 
+00044 Runner * Cooperative :: getOwner () {
+00045 
+00046   return owner;
+00047 }
+00048 
+00049 void Cooperative :: setOwner (Runner & __runner) {
+00050 
+00051   owner = & __runner;
+00052 }
+00053 
+00054 void Cooperative :: send (Cooperative * __coop) {
+00055 
+00056   :: send (this, getRankOfRunner (__coop -> getOwner () -> getID ()), COOP_TAG);   
+00057   //  stop ();
+00058 }
+00059 
+00060 Cooperative * getCooperative (COOP_ID __key) {
+00061 
+00062   return dynamic_cast <Cooperative *> (getCommunicable (__key));
+00063 }
+00064 
+00065 void Cooperative :: notifySending () {
+00066 
+00067   //getOwner -> setPassive ();
+00068   //  resume ();
+00069   //  printDebugMessage (b);
+00070 }
+

Generated on Mon Oct 8 11:16:45 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/cooperative_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/cooperative_8h-source.html new file mode 100644 index 000000000..aedb3ed27 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/cooperative_8h-source.html @@ -0,0 +1,98 @@ + + +ParadisEO-PEOMovingObjects: cooperative.h Source File + + + + +
+
+

cooperative.h

00001 /* 
+00002 * <cooperative.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef __cooperative_h
+00038 #define __cooperative_h
+00039 
+00040 #include "communicable.h"
+00041 #include "runner.h"
+00042 
+00043 typedef unsigned COOP_ID;
+00044 
+00045 class Cooperative : public Communicable {
+00046 
+00047 public :
+00048 
+00049   Runner * getOwner ();
+00050 
+00051   void setOwner (Runner & __runner);
+00052 
+00053   virtual void pack () = 0;
+00054   
+00055   virtual void unpack () = 0;
+00056 
+00057   void send (Cooperative * __coop); 
+00058 
+00059   virtual void notifySending ();
+00060 
+00061 private :
+00062 
+00063   Runner * owner;
+00064 
+00065 };
+00066 
+00067 extern Cooperative * getCooperative (COOP_ID __key); 
+00068 
+00069 #endif
+

Generated on Mon Oct 8 11:16:45 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/core_2runner_8cpp-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/core_2runner_8cpp-source.html new file mode 100644 index 000000000..5cc7127ca --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/core_2runner_8cpp-source.html @@ -0,0 +1,161 @@ + + +ParadisEO-PEOMovingObjects: runner.cpp Source File + + + + +
+
+

runner.cpp

00001 /* 
+00002 * <runner.cpp>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #include <vector>
+00038 
+00039 #include "runner.h"
+00040 #include "reac_thread.h"
+00041 #include "peo_debug.h"
+00042 #include "messaging.h"
+00043 
+00044 static unsigned num_act = 0; /* Number of active runners */
+00045 
+00046 static std :: vector <pthread_t *> ll_threads; /* Low-level runner threads */ 
+00047 
+00048 static std :: vector <Runner *> the_runners;
+00049 
+00050 static unsigned num_runners = 0;
+00051 
+00052 Runner :: Runner () {
+00053 
+00054   id = ++ num_runners;
+00055   the_runners.push_back (this);
+00056   sem_init (& sem_start, 0, 0);
+00057   num_act ++;  
+00058 }
+00059 
+00060 extern int getNodeRank ();
+00061 
+00062 extern int getNumberOfNodes ();
+00063 
+00064 void unpackTerminationOfRunner () {
+00065   
+00066   RUNNER_ID id;
+00067   unpack (id);    
+00068   num_act --;
+00069   printDebugMessage ("I'm noticed of the termination of a runner");
+00070   if (! num_act) {
+00071     printDebugMessage ("all the runners have terminated. Now stopping the reactive threads.");
+00072     stopReactiveThreads ();
+00073   }
+00074 }
+00075 
+00076 bool atLeastOneActiveRunner () {
+00077 
+00078   return num_act;
+00079 }
+00080 
+00081 RUNNER_ID Runner :: getID () {
+00082 
+00083   return id;
+00084 }
+00085 
+00086 void Runner :: start () {
+00087 
+00088   setActive ();
+00089   sem_post (& sem_start);
+00090   run ();
+00091   terminate ();
+00092 }
+00093 
+00094 void Runner :: notifySendingTermination () {
+00095 
+00096   /*
+00097   char b [1000];
+00098   sprintf (b, "Il reste encore %d !!!!!!!!!!!!", n);
+00099   printDebugMessage (b);
+00100   */
+00101   printDebugMessage ("je suis informe que tout le monde a recu ma terminaison");
+00102   setPassive ();
+00103   
+00104 }
+00105 
+00106 void Runner :: waitStarting () {
+00107 
+00108   sem_wait (& sem_start);
+00109 }
+00110 
+00111 Runner * getRunner (RUNNER_ID __key) {
+00112 
+00113   return dynamic_cast <Runner *> (getCommunicable (__key));
+00114 }
+00115 
+00116 void startRunners () {
+00117   
+00118   /* Runners */
+00119   for (unsigned i = 0; i < the_runners.size (); i ++)
+00120     if (the_runners [i] -> isLocal ()) {
+00121       addThread (the_runners [i], ll_threads);
+00122       the_runners [i] -> waitStarting ();
+00123     }
+00124   printDebugMessage ("launched the parallel runners");
+00125 }
+00126 
+00127 
+00128 void joinRunners () {
+00129 
+00130 
+00131   joinThreads (ll_threads);
+00132 }
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/core_2service_8cpp-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/core_2service_8cpp-source.html new file mode 100644 index 000000000..f9385b2e8 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/core_2service_8cpp-source.html @@ -0,0 +1,115 @@ + + +ParadisEO-PEOMovingObjects: service.cpp Source File + + + + +
+
+

service.cpp

00001 /* 
+00002 * <service.cpp>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #include "service.h"
+00038 
+00039 void Service :: setOwner (Thread & __owner) {
+00040 
+00041   owner = & __owner;
+00042 }
+00043   
+00044 Thread * Service :: getOwner () {
+00045 
+00046   return owner;
+00047 }
+00048 
+00049 Service * getService (SERVICE_ID __key) {
+00050 
+00051   return dynamic_cast <Service *> (getCommunicable (__key));
+00052 }
+00053 
+00054 void Service :: notifySendingData () {
+00055 
+00056 }
+00057 void Service :: notifySendingResourceRequest () {
+00058 
+00059   num_sent_rr --;
+00060   if (! num_sent_rr)
+00061     notifySendingAllResourceRequests ();
+00062 }
+00063 
+00064 void Service :: notifySendingAllResourceRequests () {
+00065 
+00066 }
+00067 
+00068 void Service :: packData () {
+00069 
+00070 }
+00071 
+00072 void Service :: unpackData () {
+00073 
+00074 }
+00075 
+00076 void Service :: execute () {
+00077 
+00078 }
+00079   
+00080 void Service :: packResult () {
+00081 
+00082 }
+00083 
+00084 void Service :: unpackResult () {
+00085 
+00086 }
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/data_8cpp-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/data_8cpp-source.html new file mode 100644 index 000000000..47c771d78 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/data_8cpp-source.html @@ -0,0 +1,155 @@ + + +ParadisEO-PEOMovingObjects: data.cpp Source File + + + + +
+
+

data.cpp

00001 /* 
+00002 * <data.cpp>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #include <stdio.h>
+00038 #include <assert.h>
+00039 #include <string.h>
+00040 #include <stdlib.h>
+00041 
+00042 #include <utils/eoParser.h>
+00043 
+00044 #include "data.h"
+00045 #include "node.h"
+00046 
+00047 #define MAX_TRASH_LENGTH 1000
+00048 #define MAX_FIELD_LENGTH 1000
+00049 #define MAX_LINE_LENGTH 1000
+00050 
+00051 static void getNextField (FILE * __f, char * __buff) {
+00052   
+00053   char trash [MAX_TRASH_LENGTH];  
+00054 
+00055   fscanf (__f, "%[ \t:\n]", trash); /* Discarding sep. */ 
+00056   fscanf (__f, "%[^:\n]", __buff); /* Reading the field */
+00057   fgetc (__f);
+00058 }
+00059 
+00060 static void getLine (FILE * __f, char * __buff) {
+00061 
+00062   char trash [MAX_TRASH_LENGTH];  
+00063 
+00064   fscanf (__f, "%[ \t:\n]", trash); /* Discarding sep. */ 
+00065   fscanf (__f, "%[^\n]", __buff); /* Reading the line */
+00066 }
+00067 
+00068 void loadData (const char * __filename) {
+00069 
+00070   FILE * f = fopen (__filename, "r");
+00071 
+00072    if (f) {
+00073 
+00074      printf ("Loading '%s'.\n", __filename);
+00075      
+00076      char field [MAX_FIELD_LENGTH];
+00077      
+00078      getNextField (f, field); /* Name */
+00079      assert (strstr (field, "NAME"));
+00080      getNextField (f, field); 
+00081      printf ("NAME: %s.\n", field);
+00082      
+00083      getNextField (f, field); /* Comment */
+00084      assert (strstr (field, "COMMENT"));
+00085      getLine (f, field);
+00086      printf ("COMMENT: %s.\n", field);
+00087      
+00088      getNextField (f, field); /* Type */
+00089      assert (strstr (field, "TYPE"));
+00090      getNextField (f, field); 
+00091      printf ("TYPE: %s.\n", field);
+00092 
+00093      getNextField (f, field); /* Dimension */
+00094      assert (strstr (field, "DIMENSION"));
+00095      getNextField (f, field); 
+00096      printf ("DIMENSION: %s.\n", field);
+00097      numNodes = atoi (field);
+00098 
+00099      getNextField (f, field); /* Edge weight type */
+00100      assert (strstr (field, "EDGE_WEIGHT_TYPE"));
+00101      getNextField (f, field); 
+00102      printf ("EDGE_WEIGHT_TYPE: %s.\n", field);
+00103      
+00104      getNextField (f, field); /* Node coord section */
+00105      assert (strstr (field, "NODE_COORD_SECTION"));
+00106      loadNodes (f);
+00107      
+00108      getNextField (f, field); /* End of file */
+00109      assert (strstr (field, "EOF"));
+00110      printf ("EOF.\n");
+00111    }
+00112    else {
+00113      
+00114      fprintf (stderr, "Can't open '%s'.\n", __filename); 
+00115      exit (1);
+00116    }
+00117 }
+00118 
+00119 void loadData (eoParser & __parser) {
+00120   
+00121   /* Getting the path of the instance */
+00122   
+00123   eoValueParam <std :: string> param ("", "inst", "Path of the instance") ;
+00124   __parser.processParam (param) ;
+00125   loadData (param.value ().c_str ());
+00126 }
+

Generated on Mon Oct 8 11:16:45 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/data_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/data_8h-source.html new file mode 100644 index 000000000..88fa11847 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/data_8h-source.html @@ -0,0 +1,75 @@ + + +ParadisEO-PEOMovingObjects: data.h Source File + + + + +
+
+

data.h

00001 /* 
+00002 * <data.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef __data_h
+00038 #define __data_h
+00039 
+00040 #include <utils/eoParser.h>
+00041 
+00042 extern void loadData (const char * __filename);
+00043 
+00044 extern void loadData (eoParser & __parser);
+00045 
+00046 #endif
+

Generated on Mon Oct 8 11:16:45 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/display_8cpp-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/display_8cpp-source.html new file mode 100644 index 000000000..782dc66f4 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/display_8cpp-source.html @@ -0,0 +1,174 @@ + + +ParadisEO-PEOMovingObjects: display.cpp Source File + + + + +
+
+

display.cpp

00001 /* 
+00002 * <display.cpp>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #include <iostream>
+00038 #include <fstream>
+00039 
+00040 #include <X11/Xlib.h>
+00041 
+00042 #include "display.h"
+00043 #include "node.h"
+00044 #include "opt_route.h"
+00045 
+00046 #define BORDER 20
+00047 #define RATIO 0.5
+00048 
+00049 #define screen_width 1024
+00050 #define screen_height 768
+00051 
+00052 static const char * filename;
+00053 
+00054 /* Computed coordinates */
+00055 static unsigned * X_new_coord, * Y_new_coord ;
+00056 
+00057 /* this variable will contain the handle to the returned graphics context. */
+00058 static GC gc;
+00059   
+00060 /* this variable will contain the pointer to the Display structure */
+00061 static Display* disp;
+00062 
+00063 /* this variable will store the ID of the newly created window. */
+00064 static Window win;
+00065 
+00066 static int screen;
+00067 
+00068 /* Create a new backing pixmap of the appropriate size */
+00069 
+00070   /* Best tour */
+00071   /*
+00072   gdk_gc_set_line_attributes (gc, 2,  GDK_LINE_ON_OFF_DASH, GDK_CAP_NOT_LAST, GDK_JOIN_MITER) ;
+00073 
+00074   gdk_gc_set_foreground  (gc, & color_green) ;      
+00075 
+00076   for (int i = 0 ; i < (int) numNodes ; i ++) {
+00077 
+00078     gdk_draw_line (pixmap, gc,
+00079                    X_new_coord [opt_route [i]],
+00080                    Y_new_coord [opt_route [i]],
+00081                    X_new_coord [opt_route [(i + 1) % numNodes]],
+00082                    Y_new_coord [opt_route [(i + 1) % numNodes]]);
+00083     
+00084                    }*/
+00085 
+00086 void openMainWindow (const char * __filename) {
+00087 
+00088   filename = __filename;
+00089 
+00090   /* Map */
+00091   int map_width = (int) (X_max - X_min);
+00092   int map_height = (int) (Y_max - Y_min);
+00093   int map_side = std :: max (map_width, map_height);
+00094   
+00095   /* Calculate the window's width and height. */
+00096   int win_width = (int) (screen_width * RATIO * map_width / map_side);
+00097   int win_height = (int) (screen_height * RATIO * map_height / map_side);
+00098 
+00099   /* Computing the coordinates */
+00100   X_new_coord = new unsigned [numNodes];
+00101   Y_new_coord = new unsigned [numNodes];
+00102 
+00103   for (unsigned i = 0; i < numNodes; i ++) {
+00104     X_new_coord [i] = (unsigned) (win_width * (1.0 - (X_coord [i] - X_min) / map_width) + BORDER);
+00105     Y_new_coord [i] = (unsigned) (win_height * (1.0 - (Y_coord [i] - Y_min) / map_height) + BORDER);
+00106   }
+00107   
+00108   /* Initialisation */
+00109   XGCValues val ;
+00110   
+00111   disp = XOpenDisplay (NULL) ;
+00112   screen = DefaultScreen (disp) ;
+00113   win = XCreateSimpleWindow (disp, RootWindow (disp, screen), 0, 0, win_width + 2 * BORDER, win_height + 2 * BORDER, 2, BlackPixel (disp, screen), WhitePixel (disp, screen)) ;
+00114   val.foreground = BlackPixel(disp, screen) ;
+00115   val.background = WhitePixel(disp, screen) ;
+00116   gc = XCreateGC (disp, win, GCForeground | GCBackground, & val) ; 
+00117 
+00118   XMapWindow (disp, win) ;
+00119   XFlush (disp) ;
+00120 
+00121   while (true) {
+00122     XClearWindow (disp, win) ;
+00123 
+00124     /* Vertices as circles */
+00125     for (unsigned i = 1 ; i < numNodes ; i ++)
+00126       XDrawArc (disp, win, gc, X_new_coord [i] - 1, Y_new_coord [i] - 1, 3, 3, 0, 364 * 64) ;
+00127     
+00128     /* New tour */
+00129     std :: ifstream f (filename);
+00130     if (f) {
+00131       Route route;
+00132       f >> route;
+00133       f.close ();
+00134       
+00135       for (int i = 0; i < (int) numNodes; i ++) 
+00136         XDrawLine (disp, win, gc,     
+00137                    X_new_coord [route [i]],
+00138                  Y_new_coord [route [i]],
+00139                    X_new_coord [route [(i + 1) % numNodes]],
+00140                    Y_new_coord [route [(i + 1) % numNodes]]);  
+00141     }
+00142     XFlush (disp) ;    
+00143     sleep (1) ;
+00144   }
+00145 }
+

Generated on Mon Oct 8 11:16:45 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/display_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/display_8h-source.html new file mode 100644 index 000000000..ff79c926d --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/display_8h-source.html @@ -0,0 +1,73 @@ + + +ParadisEO-PEOMovingObjects: display.h Source File + + + + +
+
+

display.h

00001 /* 
+00002 * <display.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef __display_h
+00038 #define __display_h
+00039 
+00040 #include "route.h"
+00041 
+00042 extern void openMainWindow (const char * __filename);
+00043 
+00044 #endif
+

Generated on Mon Oct 8 11:16:45 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/display__best__route_8cpp-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/display__best__route_8cpp-source.html new file mode 100644 index 000000000..3e1c1f630 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/display__best__route_8cpp-source.html @@ -0,0 +1,79 @@ + + +ParadisEO-PEOMovingObjects: display_best_route.cpp Source File + + + + +
+
+

display_best_route.cpp

00001 /* 
+00002 * <display_best_route.cpp>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #include "display_best_route.h"
+00038 #include "display.h"
+00039 
+00040 DisplayBestRoute :: DisplayBestRoute (eoPop <Route> & __pop
+00041                                       ) : pop (__pop) {
+00042   
+00043   
+00044 }
+00045   
+00046 void DisplayBestRoute :: operator () () {
+00047   
+00048   displayRoute (pop.best_element ());
+00049 }
+00050 
+

Generated on Mon Oct 8 11:16:45 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/display__best__route_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/display__best__route_8h-source.html new file mode 100644 index 000000000..41d920518 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/display__best__route_8h-source.html @@ -0,0 +1,89 @@ + + +ParadisEO-PEOMovingObjects: display_best_route.h Source File + + + + +
+
+

display_best_route.h

00001 /* 
+00002 * <display_best_route.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef __display_best_route_h
+00038 #define __display_best_route_h
+00039 
+00040 #include <utils/eoUpdater.h>
+00041 
+00042 #include <eoPop.h>
+00043 
+00044 #include "route.h"
+00045 
+00046 class DisplayBestRoute : public eoUpdater {
+00047   
+00048 public :
+00049 
+00050   DisplayBestRoute (eoPop <Route> & __pop);
+00051   
+00052   void operator () ();
+00053 
+00054 private :
+00055   
+00056   eoPop <Route> & pop;
+00057 
+00058 };
+00059 
+00060 #endif
+

Generated on Mon Oct 8 11:16:45 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/doclsn_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/doclsn_8h-source.html new file mode 100644 index 000000000..739191d90 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/doclsn_8h-source.html @@ -0,0 +1,527 @@ + + +ParadisEO-PEOMovingObjects: doclsn.h Source File + + + + +
+
+

doclsn.h

00001 
+00002 
+00003 
+00004 
+00005 
+00006 
+00007 
+00008 
+00009 
+00010 
+00011 
+00012 
+00013 
+00014 
+00015 
+00016 
+00017 
+00018 
+00019 
+00020 
+00021 
+00022 
+00023 
+00024 
+00025 
+00026 
+00027 
+00028 
+00029 
+00030 
+00031 
+00032 
+00033 
+00034 
+00035 
+00036 
+00037 
+00038 
+00039 
+00040 
+00041 
+00042 
+00043 
+00044 
+00045 
+00046 
+00047 
+00048 
+00049 
+00050 
+00051 
+00052 
+00053 
+00054 
+00055 
+00056 
+00057 
+00058 
+00059 
+00060 
+00061 
+00062 
+00063 
+00064 
+00065 
+00066 
+00067 
+00068 
+00069 
+00070 
+00071 
+00072 
+00073 
+00074 
+00075 
+00076 
+00077 
+00078 
+00079 
+00080 
+00081 
+00082 
+00083 
+00084 
+00085 
+00086 
+00087 
+00088 
+00089 
+00090 
+00091 
+00092 
+00093 
+00094 
+00095 
+00096 
+00097 
+00098 
+00099 
+00100 
+00101 
+00102 
+00103 
+00104 
+00105 
+00106 
+00107 
+00108 
+00109 
+00110 
+00111 
+00112 
+00113 
+00114 
+00115 
+00116 
+00117 
+00118 
+00119 
+00120 
+00121 
+00122 
+00123 
+00124 
+00125 
+00126 
+00127 
+00128 
+00129 
+00130 
+00131 
+00132 
+00133 
+00134 
+00135 
+00136 
+00137 
+00138 
+00139 
+00140 
+00141 
+00142 
+00143 
+00144 
+00145 
+00146 
+00147 
+00148 
+00149 
+00150 
+00151 
+00152 
+00153 
+00154 
+00155 
+00156 
+00157 
+00158 
+00159 
+00160 
+00161 
+00162 
+00163 
+00164 
+00165 
+00166 
+00167 
+00168 
+00169 
+00170 
+00171 
+00172 
+00173 
+00174 
+00175 
+00176 
+00177 
+00178 
+00179 
+00180 
+00181 
+00182 
+00183 
+00184 
+00185 
+00186 
+00187 
+00188 
+00189 
+00190 
+00191 
+00192 
+00193 
+00194 
+00195 
+00196 
+00197 
+00198 
+00199 
+00200 
+00201 
+00202 
+00203 
+00204 
+00205 
+00206 
+00207 
+00208 
+00209 
+00210 
+00211 
+00212 
+00213 
+00214 
+00215 
+00216 
+00217 
+00218 
+00219 
+00220 
+00221 
+00222 
+00223 
+00224 
+00225 
+00226 
+00227 
+00228 
+00229 
+00230 
+00231 
+00232 
+00233 
+00234 
+00235 
+00236 
+00237 
+00238 
+00239 
+00240 
+00241 
+00242 
+00243 
+00244 
+00245 
+00246 
+00247 
+00248 
+00249 
+00250 
+00251 
+00252 
+00253 
+00254 
+00255 
+00256 
+00257 
+00258 
+00259 
+00260 
+00261 
+00262 
+00263 
+00264 
+00265 
+00266 
+00267 
+00268 
+00269 
+00270 
+00271 
+00272 
+00273 
+00274 
+00275 
+00276 
+00277 
+00278 
+00279 
+00280 
+00281 
+00282 
+00283 
+00284 
+00285 
+00286 
+00287 
+00288 
+00289 
+00290 
+00291 
+00292 
+00293 
+00294 
+00295 
+00296 
+00297 
+00298 
+00299 
+00300 
+00301 
+00302 
+00303 
+00304 
+00305 
+00306 
+00307 
+00308 
+00309 
+00310 
+00311 
+00312 
+00313 
+00314 
+00315 
+00316 
+00317 
+00318 
+00319 
+00320 
+00321 
+00322 
+00323 
+00324 
+00325 
+00326 
+00327 
+00328 
+00329 
+00330 
+00331 
+00332 
+00333 
+00334 
+00335 
+00336 
+00337 
+00338 
+00339 
+00340 
+00341 
+00342 
+00343 
+00344 
+00345 
+00346 
+00347 
+00348 
+00349 
+00350 
+00351 
+00352 
+00353 
+00354 
+00355 
+00356 
+00357 
+00358 
+00359 
+00360 
+00361 
+00362 
+00363 
+00364 
+00365 
+00366 
+00367 
+00368 
+00369 
+00370 
+00371 
+00372 
+00373 
+00374 
+00375 
+00376 
+00377 
+00378 
+00379 
+00380 
+00381 
+00382 
+00383 
+00384 
+00385 
+00386 
+00387 
+00388 
+00389 
+00390 
+00391 
+00392 
+00393 
+00394 
+00395 
+00396 
+00397 
+00398 
+00399 
+00400 
+00401 
+00402 
+00403 
+00404 
+00405 
+00406 
+00407 
+00408 
+00409 
+00410 
+00411 
+00412 
+00413 
+00414 
+00415 
+00416 
+00417 
+00418 
+00419 
+00420 
+00421 
+00422 
+00423 
+00424 
+00425 
+00426 
+00427 
+00428 
+00429 
+00430 
+00431 
+00432 
+00433 
+00434 
+00435 
+00436 
+00437 
+00438 
+00439 
+00440 
+00441 
+00442 
+00443 
+00444 
+00445 
+00446 
+00447 
+00448 
+00449 
+00450 
+00451 
+00452 
+00453 
+00454 
+00455 
+00456 
+00457 
+00458 
+00459 
+00460 
+00461 
+00462 
+00463 
+00464 
+00465 
+00466 
+00467 
+00468 
+00469 
+00470 
+00471 
+00472 
+00473 
+00474 
+00475 
+00476 
+00477 
+00478 
+00479 
+00480 
+00481 
+00482 
+00483 
+00484 
+00485 
+00486 
+00487 
+00488 
+00489 
+00490 
+00491 
+00492 
+00493 
+00494 
+00495 
+00496 
+00497 
+00498 
+

Generated on Mon Oct 8 11:16:45 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/doxygen.css b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/doxygen.css new file mode 100644 index 000000000..5d583694e --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/doxygen.css @@ -0,0 +1,358 @@ +BODY,H1,H2,H3,H4,H5,H6,P,CENTER,TD,TH,UL,DL,DIV { + font-family: Geneva, Arial, Helvetica, sans-serif; +} +BODY,TD { + font-size: 90%; +} +H1 { + text-align: center; + font-size: 160%; +} +H2 { + font-size: 120%; +} +H3 { + font-size: 100%; +} +CAPTION { font-weight: bold } +DIV.qindex { + width: 100%; + background-color: #e8eef2; + border: 1px solid #84b0c7; + text-align: center; + margin: 2px; + padding: 2px; + line-height: 140%; +} +DIV.nav { + width: 100%; + background-color: #e8eef2; + border: 1px solid #84b0c7; + text-align: center; + margin: 2px; + padding: 2px; + line-height: 140%; +} +DIV.navtab { + background-color: #e8eef2; + border: 1px solid #84b0c7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} +TD.navtab { + font-size: 70%; +} +A.qindex { + text-decoration: none; + font-weight: bold; + color: #1A419D; +} +A.qindex:visited { + text-decoration: none; + font-weight: bold; + color: #1A419D +} +A.qindex:hover { + text-decoration: none; + background-color: #ddddff; +} +A.qindexHL { + text-decoration: none; + font-weight: bold; + background-color: #6666cc; + color: #ffffff; + border: 1px double #9295C2; +} +A.qindexHL:hover { + text-decoration: none; + background-color: #6666cc; + color: #ffffff; +} +A.qindexHL:visited { text-decoration: none; background-color: #6666cc; color: #ffffff } +A.el { text-decoration: none; font-weight: bold } +A.elRef { font-weight: bold } +A.code:link { text-decoration: none; font-weight: normal; color: #0000FF} +A.code:visited { text-decoration: none; font-weight: normal; color: #0000FF} +A.codeRef:link { font-weight: normal; color: #0000FF} +A.codeRef:visited { font-weight: normal; color: #0000FF} +A:hover { text-decoration: none; background-color: #f2f2ff } +DL.el { margin-left: -1cm } +.fragment { + font-family: monospace, fixed; + font-size: 95%; +} +PRE.fragment { + border: 1px solid #CCCCCC; + background-color: #f5f5f5; + margin-top: 4px; + margin-bottom: 4px; + margin-left: 2px; + margin-right: 8px; + padding-left: 6px; + padding-right: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px } + +DIV.groupHeader { + margin-left: 16px; + margin-top: 12px; + margin-bottom: 6px; + font-weight: bold; +} +DIV.groupText { margin-left: 16px; font-style: italic; font-size: 90% } +BODY { + background: white; + color: black; + margin-right: 20px; + margin-left: 20px; +} +TD.indexkey { + background-color: #e8eef2; + font-weight: bold; + padding-right : 10px; + padding-top : 2px; + padding-left : 10px; + padding-bottom : 2px; + margin-left : 0px; + margin-right : 0px; + margin-top : 2px; + margin-bottom : 2px; + border: 1px solid #CCCCCC; +} +TD.indexvalue { + background-color: #e8eef2; + font-style: italic; + padding-right : 10px; + padding-top : 2px; + padding-left : 10px; + padding-bottom : 2px; + margin-left : 0px; + margin-right : 0px; + margin-top : 2px; + margin-bottom : 2px; + border: 1px solid #CCCCCC; +} +TR.memlist { + background-color: #f0f0f0; +} +P.formulaDsp { text-align: center; } +IMG.formulaDsp { } +IMG.formulaInl { vertical-align: middle; } +SPAN.keyword { color: #008000 } +SPAN.keywordtype { color: #604020 } +SPAN.keywordflow { color: #e08000 } +SPAN.comment { color: #800000 } +SPAN.preprocessor { color: #806020 } +SPAN.stringliteral { color: #002080 } +SPAN.charliteral { color: #008080 } +.mdescLeft { + padding: 0px 8px 4px 8px; + font-size: 80%; + font-style: italic; + background-color: #FAFAFA; + border-top: 1px none #E0E0E0; + border-right: 1px none #E0E0E0; + border-bottom: 1px none #E0E0E0; + border-left: 1px none #E0E0E0; + margin: 0px; +} +.mdescRight { + padding: 0px 8px 4px 8px; + font-size: 80%; + font-style: italic; + background-color: #FAFAFA; + border-top: 1px none #E0E0E0; + border-right: 1px none #E0E0E0; + border-bottom: 1px none #E0E0E0; + border-left: 1px none #E0E0E0; + margin: 0px; +} +.memItemLeft { + padding: 1px 0px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: solid; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + background-color: #FAFAFA; + font-size: 80%; +} +.memItemRight { + padding: 1px 8px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: solid; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + background-color: #FAFAFA; + font-size: 80%; +} +.memTemplItemLeft { + padding: 1px 0px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: none; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + background-color: #FAFAFA; + font-size: 80%; +} +.memTemplItemRight { + padding: 1px 8px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: none; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + background-color: #FAFAFA; + font-size: 80%; +} +.memTemplParams { + padding: 1px 0px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: solid; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + color: #606060; + background-color: #FAFAFA; + font-size: 80%; +} +.search { color: #003399; + font-weight: bold; +} +FORM.search { + margin-bottom: 0px; + margin-top: 0px; +} +INPUT.search { font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} +TD.tiny { font-size: 75%; +} +a { + color: #1A41A8; +} +a:visited { + color: #2A3798; +} +.dirtab { padding: 4px; + border-collapse: collapse; + border: 1px solid #84b0c7; +} +TH.dirtab { background: #e8eef2; + font-weight: bold; +} +HR { height: 1px; + border: none; + border-top: 1px solid black; +} + +/* Style for detailed member documentation */ +.memtemplate { + font-size: 80%; + color: #606060; + font-weight: normal; +} +.memnav { + background-color: #e8eef2; + border: 1px solid #84b0c7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} +.memitem { + padding: 4px; + background-color: #eef3f5; + border-width: 1px; + border-style: solid; + border-color: #dedeee; + -moz-border-radius: 8px 8px 8px 8px; +} +.memname { + white-space: nowrap; + font-weight: bold; +} +.memdoc{ + padding-left: 10px; +} +.memproto { + background-color: #d5e1e8; + width: 100%; + border-width: 1px; + border-style: solid; + border-color: #84b0c7; + font-weight: bold; + -moz-border-radius: 8px 8px 8px 8px; +} +.paramkey { + text-align: right; +} +.paramtype { + white-space: nowrap; +} +.paramname { + color: #602020; + font-style: italic; +} +/* End Styling for detailed member documentation */ + +/* for the tree view */ +.ftvtree { + font-family: sans-serif; + margin:0.5em; +} +.directory { font-size: 9pt; font-weight: bold; } +.directory h3 { margin: 0px; margin-top: 1em; font-size: 11pt; } +.directory > 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-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/doxygen.png b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/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-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/edge__xover_8cpp-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/edge__xover_8cpp-source.html new file mode 100644 index 000000000..2741022d3 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/edge__xover_8cpp-source.html @@ -0,0 +1,175 @@ + + +ParadisEO-PEOMovingObjects: edge_xover.cpp Source File + + + + +
+
+

edge_xover.cpp

00001 /* 
+00002 * <edge_xover.cpp>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #include <assert.h>
+00038 #include <values.h>
+00039 
+00040 #include <utils/eoRNG.h>
+00041 
+00042 #include "edge_xover.h"
+00043 
+00044 void EdgeXover :: build_map (const Route & __par1, const Route & __par2) {
+00045   
+00046   unsigned len = __par1.size () ;
+00047   
+00048   /* Initialization */
+00049   _map.clear () ;
+00050   _map.resize (len) ;
+00051   
+00052   for (unsigned i = 0 ; i < len ; i ++) {
+00053     _map [__par1 [i]].insert (__par1 [(i + 1) % len]) ;
+00054     _map [__par2 [i]].insert (__par2 [(i + 1) % len]) ;
+00055     _map [__par1 [i]].insert (__par1 [(i - 1 + len) % len]) ;
+00056     _map [__par2 [i]].insert (__par2 [(i - 1 + len) % len]) ;
+00057   }
+00058   
+00059   visited.clear () ;
+00060   visited.resize (len, false) ;
+00061 }
+00062 
+00063 void EdgeXover :: remove_entry (unsigned __vertex, std :: vector <std :: set <unsigned> > & __map) {
+00064   
+00065   std :: set <unsigned> & neigh = __map [__vertex] ;
+00066 
+00067   for (std :: set <unsigned> :: iterator it = neigh.begin () ;
+00068        it != neigh.end () ;
+00069        it ++)
+00070     __map [* it].erase (__vertex) ; 
+00071       
+00072 }
+00073 
+00074 void EdgeXover :: add_vertex (unsigned __vertex, Route & __child) {
+00075   
+00076   visited [__vertex] = true ;
+00077   __child.push_back (__vertex) ;    
+00078   remove_entry (__vertex, _map) ; /* Removing entries */    
+00079 }
+00080 
+00081 void EdgeXover :: cross (const Route & __par1, const Route & __par2, Route & __child) {
+00082   
+00083   build_map (__par1, __par2) ;
+00084   
+00085   unsigned len = __par1.size () ;
+00086  
+00087   /* Go ! */
+00088   __child.clear () ;
+00089   
+00090   unsigned cur_vertex = rng.random (len) ;
+00091   
+00092   add_vertex (cur_vertex, __child) ;
+00093 
+00094   for (unsigned i = 1 ; i < len ; i ++) {
+00095     
+00096     unsigned len_min_entry = MAXINT ;
+00097     
+00098     std :: set <unsigned> & neigh = _map [cur_vertex] ;
+00099     
+00100     for (std :: set <unsigned> :: iterator it = neigh.begin () ;
+00101          it != neigh.end () ;
+00102          it ++) {      
+00103       unsigned l = _map [* it].size () ;
+00104       if (len_min_entry > l)
+00105         len_min_entry = l ;
+00106     }
+00107     
+00108     std :: vector <unsigned> cand ; /* Candidates */
+00109     
+00110     for (std :: set <unsigned> :: iterator it = neigh.begin () ;
+00111          it != neigh.end () ;
+00112          it ++) {      
+00113       unsigned l = _map [* it].size () ;
+00114       if (len_min_entry == l)
+00115         cand.push_back (* it) ;
+00116     }
+00117        
+00118     if (! cand.size ()) {
+00119       
+00120       /* Oh no ! Implicit mutation */      
+00121       for (unsigned j = 0 ; j < len ; j ++)
+00122         if (! visited [j])
+00123           cand.push_back (j) ;
+00124     }
+00125 
+00126     cur_vertex = cand [rng.random (cand.size ())] ;
+00127     
+00128     add_vertex (cur_vertex, __child) ;
+00129   } 
+00130 }
+00131 
+00132 bool EdgeXover :: operator () (Route & __route1, Route & __route2) {
+00133   
+00134   // Init. copy
+00135   Route par [2] ;
+00136   par [0] = __route1 ;
+00137   par [1] = __route2 ;
+00138   
+00139   cross (par [0], par [1], __route1) ;
+00140   cross (par [1], par [0], __route2) ;
+00141   
+00142   __route1.invalidate () ;
+00143   __route2.invalidate () ;
+00144 
+00145   return true ;
+00146 }
+

Generated on Mon Oct 8 11:16:45 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/edge__xover_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/edge__xover_8h-source.html new file mode 100644 index 000000000..97da77c21 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/edge__xover_8h-source.html @@ -0,0 +1,99 @@ + + +ParadisEO-PEOMovingObjects: edge_xover.h Source File + + + + +
+
+

edge_xover.h

00001 /* 
+00002 * <edge_xover.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef edge_xover_h
+00038 #define edge_xover_h
+00039 
+00040 #include <vector>
+00041 #include <set>
+00042 
+00043 #include <eoOp.h>
+00044 
+00045 #include "route.h"
+00046 
+00048 class EdgeXover : public eoQuadOp <Route> {
+00049   
+00050 public :
+00051   
+00052   bool operator () (Route & __route1, Route & __route2) ;
+00053 
+00054 private :
+00055   
+00056   void cross (const Route & __par1, const Route & __par2, Route & __child) ; /* Binary */
+00057 
+00058   void remove_entry (unsigned __vertex, std :: vector <std :: set <unsigned> > & __map) ;
+00059   /* Updating the map of entries */
+00060 
+00061   void build_map (const Route & __par1, const Route & __par2) ;
+00062 
+00063   void add_vertex (unsigned __vertex, Route & __child) ;
+00064 
+00065   std :: vector <std :: set <unsigned> > _map ; /* The handled map */
+00066 
+00067   std :: vector <bool> visited ; /* Vertices that are already visited */
+00068 
+00069 } ;
+00070 
+00071 #endif
+

Generated on Mon Oct 8 11:16:45 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/eoPop__comm_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/eoPop__comm_8h-source.html new file mode 100644 index 000000000..967a4a442 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/eoPop__comm_8h-source.html @@ -0,0 +1,89 @@ + + +ParadisEO-PEOMovingObjects: eoPop_comm.h Source File + + + + +
+
+

eoPop_comm.h

00001 /* 
+00002 * <eoPop_comm.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef __eoPop_comm_h
+00038 #define __eoPop_comm_h
+00039 
+00040 #include <eoPop.h>
+00041 
+00042 #include "messaging.h"
+00043 
+00044 template <class EOT> void pack (const eoPop <EOT> & __pop) {
+00045 
+00046   pack ((unsigned) __pop.size ());
+00047   for (unsigned i = 0; i < __pop.size (); i ++)
+00048     pack (__pop [i]);
+00049 }
+00050 
+00051 template <class EOT> void unpack (eoPop <EOT> & __pop) {
+00052 
+00053   unsigned n;
+00054   
+00055   unpack (n);
+00056   __pop.resize (n);
+00057   for (unsigned i = 0; i < n; i ++)
+00058     unpack (__pop [i]);
+00059 }
+00060 #endif
+

Generated on Mon Oct 8 11:16:45 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/eoVector__comm_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/eoVector__comm_8h-source.html new file mode 100644 index 000000000..d3bc66666 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/eoVector__comm_8h-source.html @@ -0,0 +1,95 @@ + + +ParadisEO-PEOMovingObjects: eoVector_comm.h Source File + + + + +
+
+

eoVector_comm.h

00001 /* 
+00002 * <eoVector_comm.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef __eoVector_comm_h
+00038 #define __eoVector_comm_h
+00039 
+00040 #include <eoVector.h>
+00041 
+00042 #include "messaging.h"
+00043 
+00044 template <class F, class T> void pack (const eoVector <F, T> & __v) {
+00045 
+00046   pack (__v.fitness ()) ;
+00047   unsigned len = __v.size ();
+00048   pack (len);
+00049   for (unsigned i = 0 ; i < len; i ++)
+00050     pack (__v [i]);  
+00051 }
+00052 
+00053 template <class F, class T> void unpack (eoVector <F, T> & __v) {
+00054 
+00055   F fit; 
+00056   unpack (fit);
+00057   __v.fitness (fit);
+00058 
+00059   unsigned len;
+00060   unpack (len);
+00061   __v.resize (len);
+00062   for (unsigned i = 0 ; i < len; i ++)
+00063     unpack (__v [i]);
+00064 }
+00065 
+00066 #endif
+

Generated on Mon Oct 8 11:16:45 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/exampleA_8cpp-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/exampleA_8cpp-source.html new file mode 100644 index 000000000..7e60ddf3b --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/exampleA_8cpp-source.html @@ -0,0 +1,135 @@ + + +ParadisEO-PEOMovingObjects: exampleA.cpp Source File + + + + +
+
+

exampleA.cpp

00001 /* 
+00002 * <exampleA.cpp>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 // (c) OPAC Team, LIFL, July 2007
+00037 //
+00038 // Contact: paradiseo-help@lists.gforge.inria.fr
+00039 
+00040 #include "param.h"
+00041 #include "route_init.h"
+00042 #include "route_eval.h"
+00043 
+00044 #include "order_xover.h"
+00045 #include "edge_xover.h"
+00046 #include "partial_mapped_xover.h"
+00047 #include "city_swap.h"
+00048 #include "part_route_eval.h"
+00049 #include "merge_route_eval.h"
+00050 #include "two_opt_init.h"
+00051 #include "two_opt_next.h"
+00052 #include "two_opt_incr_eval.h"
+00053 
+00054 #include <peo>
+00055 
+00056 #define POP_SIZE 10
+00057 #define NUM_GEN 10
+00058 #define CROSS_RATE 1.0
+00059 #define MUT_RATE 0.01
+00060 
+00061 
+00062 int main (int __argc, char * * __argv) {
+00063 
+00064   peo :: init (__argc, __argv);
+00065 
+00066   
+00067   loadParameters (__argc, __argv); /* Processing some parameters relative to the tackled
+00068                                       problem (TSP) */
+00069 
+00070   RouteInit route_init; /* It builds random routes */  
+00071   RouteEval full_eval; /* Full route evaluator */
+00072 
+00073   
+00074   OrderXover order_cross; /* Recombination */
+00075   PartialMappedXover pm_cross;
+00076   EdgeXover edge_cross;
+00077   CitySwap city_swap_mut;  /* Mutation */
+00078 
+00079 
+00081   TwoOptInit pmx_two_opt_init;
+00082   TwoOptNext pmx_two_opt_next;
+00083   TwoOptIncrEval pmx_two_opt_incr_eval;
+00084   moBestImprSelect <TwoOpt> pmx_two_opt_move_select;
+00085   moHC <TwoOpt> hc (pmx_two_opt_init, pmx_two_opt_next, pmx_two_opt_incr_eval, pmx_two_opt_move_select, full_eval);
+00086 
+00088   eoPop <Route> ox_pop (POP_SIZE, route_init);  /* Population */
+00089   
+00090   eoGenContinue <Route> ox_cont (NUM_GEN); /* A fixed number of iterations */  
+00091   eoCheckPoint <Route> ox_checkpoint (ox_cont); /* Checkpoint */
+00092   peoSeqPopEval <Route> ox_pop_eval (full_eval);  
+00093   eoStochTournamentSelect <Route> ox_select_one;
+00094   eoSelectNumber <Route> ox_select (ox_select_one, POP_SIZE);
+00095   eoSGATransform <Route> ox_transform (order_cross, CROSS_RATE, city_swap_mut, MUT_RATE);
+00096   peoSeqTransform <Route> ox_para_transform (ox_transform);    
+00097   eoEPReplacement <Route> ox_replace (2);
+00098 
+00099   peoEA <Route> ox_ea (ox_checkpoint, ox_pop_eval, ox_select, ox_para_transform, ox_replace);
+00100   
+00101   ox_ea (ox_pop);   /* Application to the given population */    
+00102     
+00103   peo :: run ();
+00104   peo :: finalize (); /* Termination */
+00105 
+00106   
+00107   return 0;
+00108 }
+

Generated on Mon Oct 8 11:16:45 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/exampleB_8cpp-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/exampleB_8cpp-source.html new file mode 100644 index 000000000..8c3f16b32 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/exampleB_8cpp-source.html @@ -0,0 +1,141 @@ + + +ParadisEO-PEOMovingObjects: exampleB.cpp Source File + + + + +
+
+

exampleB.cpp

00001 /* 
+00002 * <exampleB.cpp>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 // (c) OPAC Team, LIFL, July 2007
+00037 //
+00038 // Contact: paradiseo-help@lists.gforge.inria.fr
+00039 
+00040 #include "param.h"
+00041 #include "route_init.h"
+00042 #include "route_eval.h"
+00043 
+00044 #include "order_xover.h"
+00045 #include "edge_xover.h"
+00046 #include "partial_mapped_xover.h"
+00047 #include "city_swap.h"
+00048 #include "part_route_eval.h"
+00049 #include "merge_route_eval.h"
+00050 #include "two_opt_init.h"
+00051 #include "two_opt_next.h"
+00052 #include "two_opt_incr_eval.h"
+00053 
+00054 #include <peo>
+00055 
+00056 #define POP_SIZE 10
+00057 #define NUM_GEN 10
+00058 #define CROSS_RATE 1.0
+00059 #define MUT_RATE 0.01
+00060 
+00061 
+00062 int main (int __argc, char * * __argv) {
+00063 
+00064   peo :: init (__argc, __argv);
+00065 
+00066   
+00067   loadParameters (__argc, __argv); /* Processing some parameters relative to the tackled
+00068                                       problem (TSP) */
+00069 
+00070   RouteInit route_init; /* Its builds random routes */  
+00071   RouteEval full_eval; /* Full route evaluator */
+00072 
+00073   
+00074   OrderXover order_cross; /* Recombination */
+00075   PartialMappedXover pm_cross;
+00076   EdgeXover edge_cross;
+00077   CitySwap city_swap_mut;  /* Mutation */
+00078 
+00079 
+00081   TwoOptInit pmx_two_opt_init;
+00082   TwoOptNext pmx_two_opt_next;
+00083   TwoOptIncrEval pmx_two_opt_incr_eval;
+00084   moBestImprSelect <TwoOpt> pmx_two_opt_move_select;
+00085   moHC <TwoOpt> hc (pmx_two_opt_init, pmx_two_opt_next, pmx_two_opt_incr_eval, pmx_two_opt_move_select, full_eval);
+00086 
+00088   eoPop <Route> ox_pop (POP_SIZE, route_init);  /* Population */
+00089   
+00090   eoGenContinue <Route> ox_cont (NUM_GEN); /* A fixed number of iterations */  
+00091   eoCheckPoint <Route> ox_checkpoint (ox_cont); /* Checkpoint */
+00092   peoSeqPopEval <Route> ox_pop_eval (full_eval);  
+00093   eoStochTournamentSelect <Route> ox_select_one;
+00094   eoSelectNumber <Route> ox_select (ox_select_one, POP_SIZE);
+00095   eoSGATransform <Route> ox_transform (order_cross, CROSS_RATE, city_swap_mut, MUT_RATE);
+00096   peoSeqTransform <Route> ox_para_transform (ox_transform);    
+00097   eoEPReplacement <Route> ox_replace (2);
+00098 
+00099   peoEA <Route> ox_ea (ox_checkpoint, ox_pop_eval, ox_select, ox_para_transform, ox_replace);
+00100   
+00101   ox_ea (ox_pop);   /* Application to the given population */
+00102     
+00103     
+00104   peo :: run ();
+00105   peo :: finalize (); /* Termination */
+00106   
+00107 
+00108   std :: cout << ox_pop[ 0 ].fitness();
+00109   hc( ox_pop[ 0 ] );
+00110   std :: cout << " -> " << ox_pop[ 0 ].fitness() << std :: endl;
+00111 
+00112   
+00113   return 0;
+00114 }
+

Generated on Mon Oct 8 11:16:45 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/exampleC_8cpp-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/exampleC_8cpp-source.html new file mode 100644 index 000000000..89e01e5bb --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/exampleC_8cpp-source.html @@ -0,0 +1,195 @@ + + +ParadisEO-PEOMovingObjects: exampleC.cpp Source File + + + + +
+
+

exampleC.cpp

00001 /* 
+00002 * <exampleC.cpp>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 // (c) OPAC Team, LIFL, July 2007
+00037 //
+00038 // Contact: paradiseo-help@lists.gforge.inria.fr
+00039 
+00040 #include "param.h"
+00041 #include "route_init.h"
+00042 #include "route_eval.h"
+00043 
+00044 #include "order_xover.h"
+00045 #include "edge_xover.h"
+00046 #include "partial_mapped_xover.h"
+00047 #include "city_swap.h"
+00048 #include "part_route_eval.h"
+00049 #include "merge_route_eval.h"
+00050 #include "two_opt_init.h"
+00051 #include "two_opt_next.h"
+00052 #include "two_opt_incr_eval.h"
+00053 
+00054 #include <peo>
+00055 
+00056 #define POP_SIZE 10
+00057 #define NUM_GEN 10
+00058 #define CROSS_RATE 1.0
+00059 #define MUT_RATE 0.01
+00060 
+00061 #define MIG_FREQ 1 
+00062 #define MIG_SIZE 5
+00063 
+00064 
+00065 int main (int __argc, char * * __argv) {
+00066 
+00067   peo :: init (__argc, __argv);
+00068 
+00069   
+00070   loadParameters (__argc, __argv); /* Processing some parameters relative to the tackled
+00071                                       problem (TSP) */
+00072 
+00073   /* Migration topology */
+00074   RingTopology topo;
+00075 
+00076 
+00077 
+00078   // The First EA -------------------------------------------------------------------------------------
+00079   
+00080   RouteInit route_init; /* Its builds random routes */
+00081   RouteEval full_eval; /* Full route evaluator */
+00082 
+00083   OrderXover order_cross; /* Recombination */
+00084   CitySwap city_swap_mut;  /* Mutation */
+00085   
+00086   eoPop <Route> ox_pop (POP_SIZE, route_init);  /* Population */
+00087   
+00088   eoGenContinue <Route> ox_cont (NUM_GEN); /* A fixed number of iterations */  
+00089   eoCheckPoint <Route> ox_checkpoint (ox_cont); /* Checkpoint */
+00090   peoSeqPopEval <Route> ox_pop_eval (full_eval);  
+00091   eoStochTournamentSelect <Route> ox_select_one;
+00092   eoSelectNumber <Route> ox_select (ox_select_one, POP_SIZE);
+00093   eoSGATransform <Route> ox_transform (order_cross, CROSS_RATE, city_swap_mut, MUT_RATE);
+00094   peoSeqTransform <Route> ox_seq_transform (ox_transform);    
+00095   eoEPReplacement <Route> ox_replace (2);
+00096 
+00097   
+00098   /* The migration policy */
+00099   eoPeriodicContinue <Route> ox_mig_cont (MIG_FREQ); /* Migration occurs periodically */
+00100   eoStochTournamentSelect <Route> ox_mig_select_one; /* Emigrants are randomly selected */
+00101   eoSelectNumber <Route> ox_mig_select (ox_mig_select_one, MIG_SIZE);
+00102   eoPlusReplacement <Route> ox_mig_replace; /* Immigrants replace the worse individuals */
+00103   
+00104   peoAsyncIslandMig <Route> ox_mig (ox_mig_cont, ox_mig_select, ox_mig_replace, topo, ox_pop, ox_pop);
+00105   ox_checkpoint.add (ox_mig);
+00106   
+00107   peoEA <Route> ox_ea (ox_checkpoint, ox_pop_eval, ox_select, ox_seq_transform, ox_replace);
+00108   ox_mig.setOwner (ox_ea);
+00109   
+00110   ox_ea (ox_pop);   /* Application to the given population */
+00111   // --------------------------------------------------------------------------------------------------
+00112   
+00113 
+00114 
+00115   // The Second EA ------------------------------------------------------------------------------------
+00116 
+00117   RouteInit route_init2; /* Its builds random routes */
+00118   RouteEval full_eval2; /* Full route evaluator */
+00119 
+00120   OrderXover order_cross2; /* Recombination */
+00121   CitySwap city_swap_mut2;  /* Mutation */
+00122 
+00123 
+00124   eoPop <Route> ox_pop2 (POP_SIZE, route_init2);  /* Population */
+00125 
+00126 
+00127   eoGenContinue <Route> ox_cont2 (NUM_GEN); /* A fixed number of iterations */
+00128   eoCheckPoint <Route> ox_checkpoint2 (ox_cont2); /* Checkpoint */
+00129   peoSeqPopEval <Route> ox_pop_eval2 (full_eval2);
+00130   eoStochTournamentSelect <Route> ox_select_one2;
+00131   eoSelectNumber <Route> ox_select2 (ox_select_one2, POP_SIZE);
+00132   eoSGATransform <Route> ox_transform2 (order_cross2, CROSS_RATE, city_swap_mut2, MUT_RATE);
+00133   peoSeqTransform <Route> ox_seq_transform2 (ox_transform2);
+00134   eoEPReplacement <Route> ox_replace2 (2);
+00135 
+00136   /* The migration policy */
+00137   eoPeriodicContinue <Route> ox_mig_cont2 (MIG_FREQ); /* Migration occurs periodically */
+00138   eoStochTournamentSelect <Route> ox_mig_select_one2; /* Emigrants are randomly selected */
+00139   eoSelectNumber <Route> ox_mig_select2 (ox_mig_select_one2, MIG_SIZE);
+00140   eoPlusReplacement <Route> ox_mig_replace2; /* Immigrants replace the worse individuals */
+00141 
+00142   peoAsyncIslandMig <Route> ox_mig2 (ox_mig_cont2, ox_mig_select2, ox_mig_replace2, topo, ox_pop2, ox_pop2);
+00143   ox_checkpoint2.add (ox_mig2);
+00144 
+00145   peoEA <Route> ox_ea2 (ox_checkpoint2, ox_pop_eval2, ox_select2, ox_seq_transform2, ox_replace2);
+00146   ox_mig2.setOwner (ox_ea2);
+00147 
+00148   ox_ea2 (ox_pop2);   /* Application to the given population */
+00149   // --------------------------------------------------------------------------------------------------
+00150 
+00151 
+00152 
+00153   peo :: run ();
+00154   peo :: finalize (); /* Termination */
+00155 
+00156 
+00157   // rank 0 is assigned to the scheduler in the XML mapping file
+00158   if ( getNodeRank() == 1 ) { 
+00159 
+00160     std::cout << "EA[ 0 ] -----> " << ox_pop.best_element().fitness() << std::endl;
+00161     std::cout << "EA[ 1 ] -----> " << ox_pop2.best_element().fitness() << std::endl;
+00162   }
+00163 
+00164 
+00165   return 0;
+00166 }
+

Generated on Mon Oct 8 11:16:45 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/exampleD_8cpp-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/exampleD_8cpp-source.html new file mode 100644 index 000000000..f124d4a0b --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/exampleD_8cpp-source.html @@ -0,0 +1,138 @@ + + +ParadisEO-PEOMovingObjects: exampleD.cpp Source File + + + + +
+
+

exampleD.cpp

00001 /* 
+00002 * <exampleD.cpp>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 // (c) OPAC Team, LIFL, July 2007
+00037 //
+00038 // Contact: paradiseo-help@lists.gforge.inria.fr
+00039 
+00040 #include "param.h"
+00041 #include "route_init.h"
+00042 #include "route_eval.h"
+00043 
+00044 #include "order_xover.h"
+00045 #include "edge_xover.h"
+00046 #include "partial_mapped_xover.h"
+00047 #include "city_swap.h"
+00048 #include "part_route_eval.h"
+00049 #include "merge_route_eval.h"
+00050 #include "two_opt_init.h"
+00051 #include "two_opt_next.h"
+00052 #include "two_opt_incr_eval.h"
+00053 
+00054 #include <peo>
+00055 
+00056 #define POP_SIZE 10
+00057 #define NUM_GEN 10
+00058 #define CROSS_RATE 1.0
+00059 #define MUT_RATE 0.01
+00060 
+00061 
+00062 
+00063 int main (int __argc, char * * __argv) {
+00064 
+00065   peo :: init (__argc, __argv);
+00066 
+00067   
+00068   loadParameters (__argc, __argv); /* Processing some parameters relative to the tackled
+00069                                       problem (TSP) */
+00070 
+00071   RouteInit route_init; /* Its builds random routes */  
+00072   RouteEval full_eval; /* Full route evaluator */
+00073 
+00074   
+00075   OrderXover order_cross; /* Recombination */
+00076   CitySwap city_swap_mut;  /* Mutation */
+00077 
+00078 
+00080   eoPop <Route> ox_pop (POP_SIZE, route_init);  /* Population */
+00081   
+00082   eoGenContinue <Route> ox_cont (NUM_GEN); /* A fixed number of iterations */  
+00083   eoCheckPoint <Route> ox_checkpoint (ox_cont); /* Checkpoint */
+00084   peoSeqPopEval <Route> ox_pop_eval (full_eval);  
+00085   eoStochTournamentSelect <Route> ox_select_one;
+00086   eoSelectNumber <Route> ox_select (ox_select_one, POP_SIZE);
+00087   eoSGATransform <Route> ox_transform (order_cross, CROSS_RATE, city_swap_mut, MUT_RATE);
+00088   peoSeqTransform <Route> ox_para_transform (ox_transform);    
+00089   eoEPReplacement <Route> ox_replace (2);
+00090 
+00091   
+00092   peoEA <Route> ox_ea (ox_checkpoint, ox_pop_eval, ox_select, ox_para_transform, ox_replace);
+00093 
+00094     
+00095   ox_ea (ox_pop);   /* Application to the given population */
+00096     
+00097   peo :: run ();
+00098   peo :: finalize (); /* Termination */
+00099   
+00100  
+00101 
+00102   // rank 0 is assigned to the scheduler in the XML mapping file
+00103   if ( getNodeRank() == 1 ) {
+00104 
+00105     std::cout << "EA[ 0 ] -----> " << ox_pop.best_element().fitness() << std::endl;
+00106   }
+00107  
+00108     
+00109   return 0;
+00110 }
+

Generated on Mon Oct 8 11:16:45 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/exampleE_8cpp-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/exampleE_8cpp-source.html new file mode 100644 index 000000000..d5604c8aa --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/exampleE_8cpp-source.html @@ -0,0 +1,146 @@ + + +ParadisEO-PEOMovingObjects: exampleE.cpp Source File + + + + +
+
+

exampleE.cpp

00001 /* 
+00002 * <exampleE.cpp>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 // (c) OPAC Team, LIFL, July 2007
+00037 //
+00038 // Contact: paradiseo-help@lists.gforge.inria.fr
+00039 
+00040 #include "param.h"
+00041 #include "route_init.h"
+00042 #include "route_eval.h"
+00043 
+00044 #include "order_xover.h"
+00045 #include "edge_xover.h"
+00046 #include "partial_mapped_xover.h"
+00047 #include "city_swap.h"
+00048 #include "part_route_eval.h"
+00049 #include "merge_route_eval.h"
+00050 #include "two_opt_init.h"
+00051 #include "two_opt_next.h"
+00052 #include "two_opt_incr_eval.h"
+00053 
+00054 #include <peo>
+00055 
+00056 #define POP_SIZE 10
+00057 #define NUM_GEN 10
+00058 #define CROSS_RATE 1.0
+00059 #define MUT_RATE 0.01
+00060 
+00061 #define NUM_PART_EVALS 2
+00062 
+00063 
+00064 int main (int __argc, char * * __argv) {
+00065 
+00066   peo :: init (__argc, __argv);
+00067 
+00068   
+00069   loadParameters (__argc, __argv); /* Processing some parameters relative to the tackled
+00070                                       problem (TSP) */
+00071 
+00072   RouteInit route_init; /* Its builds random routes */  
+00073   RouteEval full_eval; /* Full route evaluator */
+00074 
+00075 
+00076   MergeRouteEval merge_eval;
+00077 
+00078   std :: vector <eoEvalFunc <Route> *> part_eval;
+00079   for (unsigned i = 1 ; i <= NUM_PART_EVALS ; i ++)
+00080     part_eval.push_back (new PartRouteEval ((float) (i - 1) / NUM_PART_EVALS, (float) i / NUM_PART_EVALS));
+00081 
+00082   
+00083   OrderXover order_cross; /* Recombination */
+00084   CitySwap city_swap_mut;  /* Mutation */
+00085 
+00086 
+00088   eoPop <Route> ox_pop (POP_SIZE, route_init);  /* Population */
+00089   
+00090   eoGenContinue <Route> ox_cont (NUM_GEN); /* A fixed number of iterations */  
+00091   eoCheckPoint <Route> ox_checkpoint (ox_cont); /* Checkpoint */
+00092   peoParaPopEval <Route> ox_pop_eval (full_eval);  
+00093   eoStochTournamentSelect <Route> ox_select_one;
+00094   eoSelectNumber <Route> ox_select (ox_select_one, POP_SIZE);
+00095   eoSGATransform <Route> ox_transform (order_cross, CROSS_RATE, city_swap_mut, MUT_RATE);
+00096   peoSeqTransform <Route> ox_para_transform (ox_transform);    
+00097   eoEPReplacement <Route> ox_replace (2);
+00098 
+00099   
+00100   peoEA <Route> ox_ea (ox_checkpoint, ox_pop_eval, ox_select, ox_para_transform, ox_replace);
+00101 
+00102     
+00103   ox_ea (ox_pop);   /* Application to the given population */
+00104     
+00105   peo :: run ();
+00106   peo :: finalize (); /* Termination */
+00107   
+00108  
+00109 
+00110   // rank 0 is assigned to the scheduler in the XML mapping file
+00111   if ( getNodeRank() == 1 ) {
+00112 
+00113     std::cout << "EA[ 0 ] -----> " << ox_pop.best_element().fitness() << std::endl;
+00114   }
+00115  
+00116     
+00117   return 0;
+00118 }
+

Generated on Mon Oct 8 11:16:45 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/files.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/files.html new file mode 100644 index 000000000..dcdc3a4dd --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/files.html @@ -0,0 +1,153 @@ + + +ParadisEO-PEOMovingObjects: File Index + + + + +
+
+

ParadisEO-PEOMovingObjects File List

Here is a list of all documented files with brief descriptions: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
city_swap.cpp [code]
city_swap.h [code]
comm.cpp [code]
comm.h [code]
communicable.cpp [code]
communicable.h [code]
coop.cpp [code]
cooperative.h [code]
data.cpp [code]
data.h [code]
display.cpp [code]
display.h [code]
display_best_route.cpp [code]
display_best_route.h [code]
doclsn.h [code]
edge_xover.cpp [code]
edge_xover.h [code]
eoPop_comm.h [code]
eoVector_comm.h [code]
exampleA.cpp [code]
exampleB.cpp [code]
exampleC.cpp [code]
exampleD.cpp [code]
exampleE.cpp [code]
Lesson1/main.cpp [code]
Lesson2/main.cpp [code]
Lesson3/main.cpp [code]
LessonParallelAlgorithm/main.cpp [code]
merge_route_eval.cpp [code]
merge_route_eval.h [code]
mess.cpp [code]
mess.h [code]
messaging.h [code]
mix.h [code]
src/rmc/mpi/node.cpp [code]
tutorial/examples/tsp/node.cpp [code]
src/rmc/mpi/node.h [code]
tutorial/examples/tsp/node.h [code]
opt_route.cpp [code]
opt_route.h [code]
order_xover.cpp [code]
order_xover.h [code]
src/rmc/mpi/param.cpp [code]
tutorial/examples/tsp/param.cpp [code]
src/rmc/mpi/param.h [code]
tutorial/examples/tsp/param.h [code]
part_route_eval.cpp [code]
part_route_eval.h [code]
partial_mapped_xover.cpp [code]
partial_mapped_xover.h [code]
peo.h [code]
peo_debug.cpp [code]
peo_debug.h [code]
peo_fin.cpp [code]
peo_fin.h [code]
peo_init.cpp [code]
peo_init.h [code]
peo_param.cpp [code]
peo_param.h [code]
peo_run.cpp [code]
peo_run.h [code]
peoAggEvalFunc.h [code]
peoAsyncIslandMig.h [code]
peoEA.h [code]
peoNoAggEvalFunc.h [code]
peoParallelAlgorithmWrapper.h [code]
peoParaPopEval.h [code]
peoParaSGATransform.h [code]
peoPopEval.h [code]
peoSeqPopEval.h [code]
peoSeqTransform.h [code]
peoSynchronousMultiStart.h [code]
peoSyncIslandMig.h [code]
peoSyncMultiStart.h [code]
peoTransform.h [code]
reac_thread.cpp [code]
reac_thread.h [code]
README [code]
recv.cpp [code]
recv.h [code]
ring_topo.cpp [code]
ring_topo.h [code]
rmc.cpp [code]
rmc.h [code]
route.cpp [code]
route.h [code]
route_eval.cpp [code]
route_eval.h [code]
route_init.cpp [code]
route_init.h [code]
core/runner.cpp [code]
rmc/mpi/runner.cpp [code]
runner.h [code]
scheduler.cpp [code]
scheduler.h [code]
schema.cpp [code]
schema.h [code]
send.cpp [code]
send.h [code]
core/service.cpp [code]
rmc/mpi/service.cpp [code]
service.h [code]
t-peo.cpp [code]
tags.h [code]
thread.cpp [code]
thread.h [code]
topology.cpp [code]
topology.h [code]
two_opt.cpp [code]
two_opt.h [code]
two_opt_incr_eval.cpp [code]
two_opt_incr_eval.h [code]
two_opt_init.cpp [code]
two_opt_init.h [code]
two_opt_next.cpp [code]
two_opt_next.h [code]
two_opt_rand.cpp [code]
two_opt_rand.h [code]
worker.cpp [code]
worker.h [code]
xml_parser.cpp [code]
xml_parser.h [code]
+
Generated on Mon Oct 8 11:16:50 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/ftv2blank.png b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/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-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/ftv2doc.png b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/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-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/ftv2folderclosed.png b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/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-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/ftv2folderopen.png b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/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-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/ftv2lastnode.png b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/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-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/ftv2mlastnode.png b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/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-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/ftv2mnode.png b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/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-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/ftv2plastnode.png b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/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-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/ftv2pnode.png b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/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-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/ftv2vertline.png b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/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-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/functions.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/functions.html new file mode 100644 index 000000000..2173748ff --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/functions.html @@ -0,0 +1,245 @@ + + +ParadisEO-PEOMovingObjects: Class Members + + + + +
+
+ +
+ +
+
+ +
+ +

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

+

- a -

+

- c -

+

- d -

+

- e -

+

- f -

+

- g -

+

- i -

+

- k -

+

- l -

+

- m -

+

- n -

+

- o -

+

- p -

+

- r -

+

- s -

+

- t -

+

- u -

+

- w -

+

- ~ -

+
Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/functions_func.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/functions_func.html new file mode 100644 index 000000000..988196720 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/functions_func.html @@ -0,0 +1,171 @@ + + +ParadisEO-PEOMovingObjects: Class Members - Functions + + + + +
+
+ +
+ +
+
+ +
+ +

+  +

+

- a -

+

- c -

+

- d -

+

- e -

+

- g -

+

- i -

+

- l -

+

- n -

+

- o -

+

- p -

+

- r -

+

- s -

+

- t -

+

- u -

+

- w -

+

- ~ -

+
Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/functions_vars.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/functions_vars.html new file mode 100644 index 000000000..a99036961 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/functions_vars.html @@ -0,0 +1,161 @@ + + +ParadisEO-PEOMovingObjects: Class Members - Variables + + + + +
+
+ +
+ +
+
+ +
+ +

+  +

+

- a -

+

- c -

+

- d -

+

- e -

+

- f -

+

- i -

+

- k -

+

- l -

+

- m -

+

- n -

+

- o -

+

- p -

+

- r -

+

- s -

+

- t -

+
Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/hierarchy.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/hierarchy.html new file mode 100644 index 000000000..dc125554e --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/hierarchy.html @@ -0,0 +1,129 @@ + + +ParadisEO-PEOMovingObjects: Hierarchical Index + + + + +
+
+ +

ParadisEO-PEOMovingObjects Class Hierarchy

This inheritance list is sorted roughly, but not completely, alphabetically: +
Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/index.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/index.html new file mode 100644 index 000000000..80a524ff7 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/index.html @@ -0,0 +1,8 @@ + + +ParadisEO-PEOMovingObjects + + + + + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/installdox b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/installdox new file mode 100755 index 000000000..294677f26 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/installdox @@ -0,0 +1,117 @@ +#!/usr/bin/perl + +%subst = ( "eo.doxytag", "", "mo.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-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/main.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/main.html new file mode 100644 index 000000000..a52382cd1 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/main.html @@ -0,0 +1,111 @@ + + +ParadisEO-PEOMovingObjects: The ParadisEO-PEO Framework + + + + +
+
+

The ParadisEO-PEO Framework

+

+

1.0

+intro

+ParadisEO is a white-box object-oriented framework dedicated to the reusable design of parallel and distributed metaheuristics (PDM). ParadisEO provides a broad range of features including evolutionary algorithms (EA), local searches (LS), the most common parallel and distributed models and hybridization mechanisms, etc. This high content and utility encourages its use at European level. ParadisEO is based on a clear conceptual separation of the solution methods from the problems they are intended to solve. This separation confers to the user a maximum code and design reuse. Furthermore, the fine-grained nature of the classes provided by the framework allow a higher flexibility compared to other frameworks. ParadisEO is one of the rare frameworks that provide the most common parallel and distributed models. Their implementation is portable on distributed-memory machines as well as on shared-memory multiprocessors, as it uses standard libraries such as MPI, PVM and PThreads. The models can be exploited in a transparent way, one has just to instantiate their associated provided classes. Their experimentation on the radio network design real-world application demonstrate their efficiency.

+In practice, combinatorial optimization problems are often NP-hard, CPU time-consuming, and evolve over time. Unlike exact methods, metaheuristics allow to tackle large-size problems instances by delivering satisfactory solutions in a reasonable time. Metaheuristics are general-purpose heuristics that split in two categories: evolutionary algorithms (EA) and local search methods (LS). These two families have complementary characteristics: EA allow a better exploration of the search space, while LS have the power to intensify the search in promising regions. Their hybridization allows to deliver robust and better solutions

+Although serial metaheuristics have a polynomial temporal complexity, they remain unsatisfactory for industrial problems. Parallel and distributed computing is a powerful way to deal with the performance issue of these problems. Numerous parallel and distributed metaheuristics (PDM) and their implementations have been proposed, and are available on theWeb. They can be reused and adapted to his/her own problems. However, the user has to deeply examine the code and rewrite its problem-specific sections. The task is tedious, errorprone, takes along time and makes harder the produced code maintenance. A better way to reuse the code of existing PDM is the reuse through libraries. These are often more reliable as they are more tested and documented. They allow a better maintainability and efficiency. However, libraries do not allow the reuse of design.

+Parallel and distributed metaheuristics

+

+Parallel distributed evolutionary algorithms

+Evolutionary Algorithms (EA) are based on the iterative improvement of a population of solutions. At each step, individuals are selected, paired and recombined in order to generate new solutions that replace other ones, and so on. As the algorithm converges, the population is mainly composed of individuals well adapted to the "environment", for instance the problem. The main features that characterize EA are the way the population is initialized, the selection strategy (deterministic/stochastic) by fostering "good" solutions, the replacement strategy that discards individuals, and the continuation/stopping criterion to decide whether the evolution should go on or not.

+Basically, three major parallel and distributed models for EA can been distinguished: the island (a)synchronous cooperative model, the parallel evaluation of the population, and the distributed evaluation of a single solution.

    +
  • +Island (a)synchronous cooperative model. Different EA are simultaneously deployed to cooperate for computing better and robust solutions. They exchange in an asynchronous way genetic stuff to diversify the search. The objective is to allow to delay the global convergence, especially when theEAare heterogeneous regarding the variation operators. The migration of individuals follows a policy defined by few parameters: the migration decision criterion, the exchange topology, the number of emigrants, the emigrants selection policy, and the replacement/integration policy.

    +

  • +
  • +Parallel evaluation of the population. It is required as it is in general the most timeconsuming. The parallel evaluation follows the centralized model. The farmer applies the following operations: selection, transformation and replacement as they require a global management of the population. At each generation, it distributes the set of new solutions between differentworkers. These evaluate and return back the solutions and their quality values. An efficient execution is often obtained particularly when the evaluation of each solution is costly. The two main advantages of an asynchronous model over the synchronous model are: (1) the fault tolerance of the asynchronous model; (2) the robustness in case the fitness computation can take very different computation times (e.g. for nonlinear numerical optimization). Whereas some time-out detection can be used to address the former issue, the latter one can be partially overcome if the grain is set to very small values, as individuals will be sent out for evaluations upon request of the workers.

    +

  • +
  • +Distributed evaluation of a single solution. The quality of each solution is evaluated in a parallel centralized way. That model is particularly interesting when the evaluation function can be itself parallelized as it is CPU time-consuming and/or IO intensive. In that case, the function can be viewed as an aggregation of a certain number of partial functions. The partial functions could also be identical if for example the problem to deal with is a data mining one. The evaluation is thus data parallel and the accesses to data base are performed in parallel. Furthermore, a reduction operation is performed on the results returned by the partial functions. As a summary, for this model the user has to indicate a set of partial functions and an aggregation operator of these.
  • +
+

+Parallel distributed local searches

+

+Local searches

+All metaheuristics dedicated to the improvement of a single solution are based on the concept of neighborhood. They start from a solution randomly generated or obtained from another optimization algorithm, and update it, step by step, by replacing the current solution by one of its neighboring candidates. Some criterion have been identified to differentiate such searches: the heuristic internal memory, the choice of the initial solution, the candidate solutions generator, and the selection strategy of candidate moves. Three main algorithms of local search stand out: Hill Climbing (HC), Simulated Annealing (SA) and Tabu Search (TS).

+Parallel local searches

+Two parallel distributed models are commonly used in the literature: the parallel distributed exploration of neighboring candidate solutions model, and the multi-start model.
    +
  • +Parallel exploration of neighboring candidates. It is a low-level Farmer-Worker model that does not alter the behavior of the heuristic. A sequential search computes the same results slower.At the beginning of each iteration, the farmer duplicates the current solution between distributed nodes. Each one manages some candidates and the results are returned to the farmer. The model is efficient if the evaluation of a each solution is time-consuming and/or there are a great deal of candidate neighbors to evaluate. This is obviously not applicable to SA since only one candidate is evaluated at each iteration. Likewise, the efficiency of the model for HC is not always guaranteed as the number of neighboring solutions to process before finding one that improves the current objective function may be highly variable.

    +

  • +
  • +Multi-start model. It consists in simultaneously launching several local searches. They may be heterogeneous, but no information is exchanged between them. The resultswould be identical as if the algorithms were sequentially run.Very often deterministic algorithms differ by the supplied initial solution and/or some other parameters. This trivial model is convenient for low-speed networks of workstations.
  • +
+

+Hybridization

+Recently, hybrid metaheuristics have gained a considerable interest. For many practical or academic optimization problems, the best found solutions are obtained by hybrid algorithms. Combinations of different metaheuristics have provided very powerful search methods. Two levels and two modes of hybridization have been distinguished: Low and High levels, and Relay and Cooperative modes. The low-level hybridization addresses the functional composition of a single optimization method. A function of a given metaheuristic is replaced by another metaheuristic. On the contrary, for high-level hybrid algorithms the different metaheuristics are self-containing, meaning no direct relationship to their internal working is considered. On the other hand, relay hybridization means a set of metaheuristics is applied in a pipeline way. The output of a metaheuristic (except the last) is the input of the following one (except the first). Conversely, co-evolutionist hybridization is a cooperative optimization model. Each metaheuristic performs a search in a solution space, and exchange solutions with others.

+Paradiseo goals and architecture

+The "EO" part of ParadisEO means Evolving Objects. EO is a C++ LGPL open source framework and includes a paradigm-free Evolutionary Computation library (EOlib) dedicated to the flexible design of EA through evolving objects superseding the most common dialects (Genetic Algorithms, Evolution Strategies, Evolutionary Programming and Genetic Programming). Furthermore, EO integrates several services including visualization facilities, on-line definition of parameters, application check-pointing, etc. ParadisEO is an extended version of the EO framework. The extensions include local search methods, hybridization mechanisms, parallelism and distribution mechanisms, and other features that are not addressed in this paper such as multi-objective optimization and grid computing. In the next sections, we present the motivations and goals of ParadisEO, its architecture and some of its main implementation details and issues.

+Motivations and goals

+A framework is normally intended to be exploited by as many users as possible. Therefore, its exploitation could be successful only if some important user criteria are satisfied. The following criteria are the major of them and constitute the main objectives of the ParadisEO framework:

+

    +
  • +Maximum design and code reuse. The framework must provide for the user a whole architecture design of his/her solution method. Moreover, the programmer may redo as little code as possible. This objective requires a clear and maximal conceptual separation between the solution methods and the problems to be solved, and thus a deep domain analysis. The user might therefore develop only the minimal problem-specific code.

    +

  • +
  • +Flexibility and adaptability. It must be possible for the user to easily add new features/ metaheuristics or change existing ones without implicating other components. Furthermore, as in practice existing problems evolve and new others arise these have to be tackled by specializing/adapting the framework components.

    +

  • +
  • +Utility. The framework must allow the user to cover a broad range of metaheuristics, problems, parallel distributed models, hybridization mechanisms, etc.

    +

  • +
  • +Transparent and easy access to performance and robustness. As the optimization applications are often time-consuming the performance issue is crucial. Parallelism and distribution are two important ways to achieve high performance execution. In order to facilitate its use it is implemented so that the user can deploy his/her parallel algorithms in a transparent manner. Moreover, the execution of the algorithms must be robust to guarantee the reliability and the quality of the results. The hybridization mechanism allows to obtain robust and better solutions.

    +

  • +
  • +Portability. In order to satisfy a large number of users the framework must support different material architectures and their associated operating systems.
  • +
+

+ParadisEO architecture

+The architecture of ParadisEO is multi-layer and modular allowing to achieve the objectives quoted above. This allows particularly a high flexibility and adaptability, an easier hybridization, and more code and design reuse. The architecture has three layers identifying three major categories of classes: Solvers, Runners and Helpers.
    +
  • +Helpers. Helpers are low-level classes that perform specific actions related to the evolution or search process. They are split in two categories: Evolutionary helpers (EH) and Local search helpers (LSH). EH include mainly the transformation, selection and replacement operations, the evaluation function and the stopping criterion. LSH can be generic such as the neighborhood explorer class, or specific to the local search metaheuristic like the tabu list manager class in the Tabu Search solution method. On the other hand, there are some special helpers dedicated to the management of parallel and distributed models 2 and 3, such as the communicators that embody the communication services.

    +Helpers cooperate between them and interact with the components of the upper layer i.e. the runners. The runners invoke the helpers through function parameters. Indeed, helpers have not their own data, but they work on the internal data of the runners.

    +

  • +
  • +Runners. The Runners layer contains a set of classes that implement the metaheuristics themselves. They perform the run of the metaheuristics from the initial state or population to the final one. One can distinguish the Evolutionary runners (ER) such as genetic algorithms, evolution strategies, etc., and Local search runners (LSR) like tabu search, simulated annealing and hill climbing. Runners invoke the helpers to perform specific actions on their data. For instance, an ER may ask the fitness function evaluation helper to evaluate its population. An LSR asks the movement helper to perform a given movement on the current state. Furthermore, runners can be serial or parallel distributed.

    +

  • +
  • +Solvers. Solvers are devoted to control the evolution process and/or the search. They generate the initial state (solution or population) and define the strategy for combining and sequencing different metaheuristics. Two types of solvers can be distinguished. Single metaheuristic solvers (SMS) and Multiple metaheuristics solvers (MMS). SMSs are dedicated to the execution of only one metaheuristic.MMS are more complex as they control and sequence several metaheuristics that can be heterogeneous. Solvers interact with the user by getting the input data and delivering the output (best solution, statistics, etc).
  • +
+

+According to the generality of their embedded features, the classes of the architecture split in two major categories: Provided classes and Required classes. Provided classes embody the factored out part of the metaheuristics. They are generic, implemented in the framework, and ensure the control at run time. Required classes are those that must be supplied by the user. They encapsulate the problem-specific aspects of the application. These classes are fixed but not implemented in ParadisEO. The programmer has the burden to develop them using the OO specialization mechanism.

+ParadisEO-PEO Tutorials

+The basisc of the ParadisEO framework philosophy are exposed in a few simple tutorials: +All the presented examples have as case study the traveling salesman problem (TSP). Different operators and auxiliary objects were designed, standing as a common shared source code base. While not being part of the ParadisEO-PEO framework, it may represent a startpoint for a better understanding of the presented tutorials.

+LICENCE

+This software is governed by the CeCILL license under French law and abiding by the rules of distribution of free software. You can use, modify and/ or redistribute the software under the terms of the CeCILL license as circulated by CEA, CNRS and INRIA at the following URL "http://www.cecill.info".

+As a counterpart to the access to the source code and rights to copy, modify and redistribute granted by the license, users are provided only with a limited warranty and the software's author, the holder of the economic rights, and the successive licensors have only limited liability.

+In this respect, the user's attention is drawn to the risks associated with loading, using, modifying and/or developing or reproducing the software by the user in light of its specific status of free software, that may mean that it is complicated to manipulate, and that also therefore means that it is reserved for developers and experienced professionals having in-depth computer knowledge. Users are therefore encouraged to load and test the software's suitability as regards their requirements in conditions enabling the security of their systems and/or data to be ensured and, more generally, to use and operate it in the same conditions as regards security. The fact that you are presently reading this means that you have had knowledge of the CeCILL license and that you accept its terms.

+ParadisEO WebSite : http://paradiseo.gforge.inria.fr Contact: paradiseo-help@lists.gforge.inria.fr


Generated on Mon Oct 8 11:16:45 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/merge__route__eval_8cpp-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/merge__route__eval_8cpp-source.html new file mode 100644 index 000000000..579cec80a --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/merge__route__eval_8cpp-source.html @@ -0,0 +1,74 @@ + + +ParadisEO-PEOMovingObjects: merge_route_eval.cpp Source File + + + + +
+
+

merge_route_eval.cpp

00001 /* 
+00002 * <merge_route_eval.cpp>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #include "merge_route_eval.h"
+00038 
+00039 void MergeRouteEval :: operator () (Route & __route, const int & __part_fit) {
+00040 
+00041   int len = __route.fitness ();
+00042   len += __part_fit;
+00043   __route.fitness (len);
+00044 }
+00045   
+

Generated on Mon Oct 8 11:16:45 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/merge__route__eval_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/merge__route__eval_8h-source.html new file mode 100644 index 000000000..cdbb4a651 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/merge__route__eval_8h-source.html @@ -0,0 +1,81 @@ + + +ParadisEO-PEOMovingObjects: merge_route_eval.h Source File + + + + +
+
+

merge_route_eval.h

00001 /* 
+00002 * <merge_route_eval.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef __merge_route_eval_h
+00038 #define __merge_route_eval_h
+00039 
+00040 #include <peoAggEvalFunc.h>
+00041 
+00042 #include "route.h"
+00043 
+00044 class MergeRouteEval : public peoAggEvalFunc <Route> {
+00045   
+00046 public :
+00047 
+00048   void operator () (Route & __route, const int & __part_fit) ;
+00049   
+00050 };
+00051 
+00052 #endif
+

Generated on Mon Oct 8 11:16:45 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/mess_8cpp-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/mess_8cpp-source.html new file mode 100644 index 000000000..c7f5446d0 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/mess_8cpp-source.html @@ -0,0 +1,294 @@ + + +ParadisEO-PEOMovingObjects: mess.cpp Source File + + + + +
+
+

mess.cpp

00001 /* 
+00002 * <mess.cpp>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #include <mpi.h>
+00038 #include <vector>
+00039 
+00040 #include "mess.h"
+00041 #include "../../core/peo_debug.h"
+00042 #include "node.h"
+00043 
+00044 #define MPI_BUF_SIZE 1024*64
+00045         
+00046 static char mpi_buf [MPI_BUF_SIZE];
+00047         
+00048 static int pos_buf ;
+00049 
+00050 static std :: vector <char *> act_buf; /* Active buffers */
+00051 
+00052 static std :: vector <MPI_Request *> act_req; /* Active requests */
+00053 
+00054 void cleanBuffers () {
+00055 
+00056   for (unsigned i = 0; i < act_req.size ();) {
+00057        
+00058     MPI_Status stat ;
+00059     int flag ;
+00060     MPI_Test (act_req [i], & flag, & stat) ;
+00061     if (flag) {
+00062       
+00063       delete act_buf [i] ;
+00064       delete act_req [i] ;
+00065         
+00066       act_buf [i] = act_buf.back () ;
+00067       act_buf.pop_back () ;
+00068       
+00069       act_req [i] = act_req.back () ;
+00070       act_req.pop_back () ;
+00071     }
+00072     else
+00073       i ++;
+00074   } 
+00075 }
+00076 
+00077 void waitBuffers () {
+00078 
+00079   printDebugMessage ("waiting the termination of the asynchronous operations to complete");
+00080 
+00081   for (unsigned i = 0; i < act_req.size (); i ++) {
+00082        
+00083     MPI_Status stat ;
+00084 
+00085     MPI_Wait (act_req [i], & stat) ;
+00086       
+00087     delete act_buf [i] ;
+00088     delete act_req [i] ;
+00089   } 
+00090 }
+00091 
+00092 bool probeMessage (int & __src, int & __tag) {
+00093 
+00094   int flag;
+00095 
+00096   MPI_Status stat;
+00097 
+00098   MPI_Iprobe (MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, & flag, & stat);
+00099 
+00100   __src = stat.MPI_SOURCE;
+00101   __tag = stat.MPI_TAG;
+00102 
+00103   return flag;
+00104 }
+00105 
+00106 void waitMessage () {
+00107 
+00108   MPI_Status stat;  
+00109 
+00110   MPI_Probe (MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, & stat);
+00111 }
+00112 
+00113 void initMessage () {
+00114   
+00115   pos_buf = 0;
+00116 }
+00117 
+00118 void sendMessage (int __to, int __tag) {
+00119 
+00120   cleanBuffers ();  
+00121   act_buf.push_back (new char [pos_buf]);
+00122   act_req.push_back (new MPI_Request);  
+00123   memcpy (act_buf.back (), mpi_buf, pos_buf);  
+00124   MPI_Isend (act_buf.back (), pos_buf, MPI_PACKED, __to, __tag, MPI_COMM_WORLD, act_req.back ()); 
+00125 }
+00126 
+00127 void sendMessageToAll (int __tag) {
+00128 
+00129   for (int i = 0; i < getNumberOfNodes (); i ++)
+00130     sendMessage (i, __tag);
+00131 }
+00132 
+00133 void receiveMessage (int __from, int __tag) {
+00134   
+00135   MPI_Status stat;  
+00136   MPI_Request req;
+00137 
+00138   MPI_Irecv (mpi_buf, MPI_BUF_SIZE, MPI_PACKED, __from, __tag, MPI_COMM_WORLD, & req) ;
+00139   MPI_Wait (& req, & stat) ;
+00140 }
+00141 
+00142 /* Char */
+00143 void pack (const char & __c) {
+00144 
+00145   MPI_Pack ((void *) & __c, 1, MPI_CHAR, mpi_buf, MPI_BUF_SIZE, & pos_buf, MPI_COMM_WORLD);
+00146 }
+00147 
+00148 /* Float */
+00149 void pack (const float & __f, int __nitem) {
+00150 
+00151   MPI_Pack ((void *) & __f, __nitem, MPI_FLOAT, mpi_buf, MPI_BUF_SIZE, & pos_buf, MPI_COMM_WORLD);
+00152 }
+00153 
+00154 /* Double */
+00155 void pack (const double & __d, int __nitem) {
+00156 
+00157   MPI_Pack ((void *) & __d, __nitem, MPI_DOUBLE, mpi_buf, MPI_BUF_SIZE, & pos_buf, MPI_COMM_WORLD);
+00158 }
+00159 
+00160 /* Integer */
+00161 void pack (const int & __i, int __nitem) {
+00162 
+00163   MPI_Pack ((void *) & __i, __nitem, MPI_INT, mpi_buf, MPI_BUF_SIZE, & pos_buf, MPI_COMM_WORLD);
+00164 }
+00165 
+00166 /* Unsigned int. */
+00167 void pack (const unsigned int & __ui, int __nitem) {
+00168 
+00169   MPI_Pack ((void *) & __ui, __nitem, MPI_UNSIGNED, mpi_buf, MPI_BUF_SIZE, & pos_buf, MPI_COMM_WORLD);
+00170 }
+00171 
+00172 /* Short int. */
+00173 void pack (const short & __sh, int __nitem) {
+00174 
+00175   MPI_Pack ((void *) & __sh, __nitem, MPI_SHORT, mpi_buf, MPI_BUF_SIZE, & pos_buf, MPI_COMM_WORLD);
+00176 }
+00177 
+00178 /* Unsigned short */
+00179 void pack (const unsigned short & __ush, int __nitem) {
+00180 
+00181   MPI_Pack ((void *) & __ush, __nitem, MPI_UNSIGNED_SHORT, mpi_buf, MPI_BUF_SIZE, & pos_buf, MPI_COMM_WORLD);
+00182 }
+00183 
+00184 /* Long */
+00185 void pack (const long & __l, int __nitem) {
+00186 
+00187   MPI_Pack ((void *) & __l, __nitem, MPI_LONG, mpi_buf, MPI_BUF_SIZE, & pos_buf, MPI_COMM_WORLD);
+00188 }
+00189 
+00190 /* Unsigned long */
+00191 void pack (const unsigned long & __ul, int __nitem) {
+00192 
+00193   MPI_Pack ((void *) & __ul, __nitem, MPI_UNSIGNED_LONG, mpi_buf, MPI_BUF_SIZE, & pos_buf, MPI_COMM_WORLD);
+00194 }
+00195 
+00196 /* String */
+00197 void pack (const char * __str) {
+00198   
+00199   int len = strlen (__str) + 1;
+00200   MPI_Pack (& len, 1, MPI_INT, mpi_buf, MPI_BUF_SIZE, & pos_buf, MPI_COMM_WORLD);
+00201   MPI_Pack ((void *) __str, len, MPI_CHAR, mpi_buf, MPI_BUF_SIZE, & pos_buf, MPI_COMM_WORLD);
+00202 }
+00203 
+00204 /* Char */
+00205 void unpack (char & __c) {
+00206 
+00207   MPI_Unpack (mpi_buf, MPI_BUF_SIZE, & pos_buf, & __c, 1, MPI_CHAR, MPI_COMM_WORLD);
+00208 }
+00209 
+00210 /* Float */
+00211 void unpack (float & __f, int __nitem) {
+00212 
+00213   MPI_Unpack (mpi_buf, MPI_BUF_SIZE, & pos_buf, & __f, __nitem, MPI_FLOAT, MPI_COMM_WORLD);
+00214 }
+00215 
+00216 /* Double */
+00217 void unpack (double & __d, int __nitem) {
+00218 
+00219   MPI_Unpack (mpi_buf, MPI_BUF_SIZE, & pos_buf, & __d, __nitem, MPI_DOUBLE, MPI_COMM_WORLD);
+00220 }
+00221 
+00222 /* Integer */
+00223 void unpack (int & __i, int __nitem) {
+00224 
+00225   MPI_Unpack (mpi_buf, MPI_BUF_SIZE, & pos_buf, & __i, __nitem, MPI_INT, MPI_COMM_WORLD);
+00226 }
+00227 
+00228 /* Unsigned int. */
+00229 void unpack (unsigned int & __ui, int __nitem) {
+00230 
+00231   MPI_Unpack (mpi_buf, MPI_BUF_SIZE, & pos_buf, & __ui, __nitem, MPI_UNSIGNED, MPI_COMM_WORLD);
+00232 }
+00233 
+00234 /* Short int. */
+00235 void unpack (short & __sh, int __nitem) {
+00236 
+00237   MPI_Unpack (mpi_buf, MPI_BUF_SIZE, & pos_buf, & __sh, __nitem, MPI_SHORT, MPI_COMM_WORLD);
+00238 }
+00239 
+00240 /* Unsigned short */
+00241 void unpack (unsigned short & __ush, int __nitem) {
+00242 
+00243   MPI_Unpack (mpi_buf, MPI_BUF_SIZE, & pos_buf, & __ush, __nitem, MPI_UNSIGNED_SHORT, MPI_COMM_WORLD);
+00244 }
+00245 
+00246 /* Long */
+00247 void unpack (long & __l, int __nitem) {
+00248 
+00249   MPI_Unpack (mpi_buf, MPI_BUF_SIZE, & pos_buf, & __l, __nitem, MPI_LONG, MPI_COMM_WORLD);
+00250 }
+00251 
+00252 /* Unsigned long */
+00253 void unpack (unsigned long & __ul, int __nitem) {
+00254 
+00255   MPI_Unpack (mpi_buf, MPI_BUF_SIZE, & pos_buf, & __ul, __nitem, MPI_UNSIGNED_LONG, MPI_COMM_WORLD);
+00256 }
+00257 
+00258 /* String */
+00259 void unpack (char * __str) {
+00260 
+00261   int len;
+00262   MPI_Unpack (mpi_buf, MPI_BUF_SIZE, & pos_buf, & len, 1, MPI_INT, MPI_COMM_WORLD);
+00263   MPI_Unpack (mpi_buf, MPI_BUF_SIZE, & pos_buf, __str, len, MPI_CHAR, MPI_COMM_WORLD);    
+00264 }
+00265 
+

Generated on Mon Oct 8 11:16:45 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/mess_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/mess_8h-source.html new file mode 100644 index 000000000..533c566e8 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/mess_8h-source.html @@ -0,0 +1,88 @@ + + +ParadisEO-PEOMovingObjects: mess.h Source File + + + + +
+
+

mess.h

00001 /* 
+00002 * <mess.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef __mess_rmc_h
+00038 #define __mess_rmc_h
+00039 
+00040 #include "../../core/messaging.h"
+00041 
+00042 extern void initMessage ();
+00043 
+00044 extern void sendMessage (int __to, int __tag);
+00045 
+00046 extern void sendMessageToAll (int __tag);
+00047 
+00048 extern void receiveMessage (int __from, int __tag);
+00049 
+00050 extern void cleanBuffers ();
+00051 
+00052 extern void waitBuffers ();
+00053 
+00054 extern bool probeMessage (int & __src, int & __tag);
+00055 
+00056 extern void waitMessage ();
+00057 
+00058 #endif
+00059 
+

Generated on Mon Oct 8 11:16:45 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/messaging_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/messaging_8h-source.html new file mode 100644 index 000000000..2aef19eda --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/messaging_8h-source.html @@ -0,0 +1,161 @@ + + +ParadisEO-PEOMovingObjects: messaging.h Source File + + + + +
+
+

messaging.h

00001 /* 
+00002 * <messaging.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef __mess_h
+00038 #define __mess_h
+00039 
+00040 #include <utility>
+00041 
+00042 /* Char */
+00043 extern void pack (const char & __c); 
+00044 
+00045 /* Float */
+00046 extern void pack (const float & __f, int __nitem = 1); 
+00047 
+00048 /* Double */
+00049 extern void pack (const double & __d, int __nitem = 1); 
+00050 
+00051 /* Integer */
+00052 extern void pack (const int & __i, int __nitem = 1); 
+00053 
+00054 /* Unsigned int. */
+00055 extern void pack (const unsigned int & __ui, int __nitem = 1); 
+00056 
+00057 /* Short int. */
+00058 extern void pack (const short & __sh, int __nitem = 1); 
+00059 
+00060 /* Unsigned short */
+00061 extern void pack (const unsigned short & __ush, int __nitem = 1);
+00062 
+00063 /* Long */
+00064 extern void pack (const long & __l, int __nitem = 1); 
+00065 
+00066 /* Unsigned long */
+00067 extern void pack (const unsigned long & __ul, int __nitem = 1); 
+00068 
+00069 /* String */
+00070 extern void pack (const char * __str); 
+00071 
+00072 /* Pointer */
+00073 template <class T> void pack (const T * __ptr) {
+00074   
+00075   pack ((unsigned long) __ptr); 
+00076 }
+00077 
+00078 /* Pair */
+00079 template <class U, class V> void pack (const std :: pair <U, V> & __pair) {
+00080   
+00081   pack (__pair.first);
+00082   pack (__pair.second);
+00083 }
+00084 
+00085 //
+00086 
+00087 /* Float */
+00088 extern void unpack (char & __c); 
+00089 
+00090 /* Float */
+00091 extern void unpack (float & __f, int __nitem = 1); 
+00092 
+00093 /* Double */
+00094 extern void unpack (double & __d, int __nitem = 1); 
+00095 
+00096 /* Integer */
+00097 extern void unpack (int & __i, int __nitem = 1); 
+00098 
+00099 /* Unsigned int. */
+00100 extern void unpack (unsigned int & __ui, int __nitem = 1); 
+00101 
+00102 /* Short int. */
+00103 extern void unpack (short & __sh, int __nitem = 1); 
+00104 
+00105 /* Unsigned short */
+00106 extern void unpack (unsigned short & __ush, int __nitem = 1);
+00107 
+00108 /* Long */
+00109 extern void unpack (long & __l, int __nitem = 1); 
+00110 
+00111 /* Unsigned long */
+00112 extern void unpack (unsigned long & __ul, int __nitem = 1); 
+00113 
+00114 /* String */
+00115 extern void unpack (char * __str); 
+00116 
+00117 /* Pointer */
+00118 template <class T> void unpack (T * & __ptr) {
+00119   
+00120   unsigned long p;
+00121   unpack (p);
+00122   __ptr = (T *) p;
+00123 }
+00124 
+00125 /* Pair */
+00126 template <class U, class V> void unpack (std :: pair <U, V> & __pair) {
+00127   
+00128   unpack (__pair.first);
+00129   unpack (__pair.second);
+00130 }
+00131 
+00132 #endif
+

Generated on Mon Oct 8 11:16:45 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/mix_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/mix_8h-source.html new file mode 100644 index 000000000..113e73171 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/mix_8h-source.html @@ -0,0 +1,81 @@ + + +ParadisEO-PEOMovingObjects: mix.h Source File + + + + +
+
+

mix.h

00001 /* 
+00002 * <mix.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef __mix_h
+00038 #define __mix_h
+00039 
+00040 #include <vector>
+00041 
+00042 #include <utils/eoRNG.h>
+00043 
+00044 template <class T> void mix (std :: vector <T> & __v) {
+00045   
+00046   unsigned len = __v.size () ;
+00047 
+00048   for (unsigned i = 0 ; i < len ; i ++)
+00049     std :: swap (__v [i], __v [rng.random (len)]) ;
+00050 }
+00051 
+00052 #endif
+

Generated on Mon Oct 8 11:16:45 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/namespacemembers.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/namespacemembers.html new file mode 100644 index 000000000..8c60760fa --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/namespacemembers.html @@ -0,0 +1,51 @@ + + +ParadisEO-PEOMovingObjects: Class Members + + + + +
+
+ +
+ +
+Here is a list of all documented namespace members with links to the namespaces they belong to: +

+

+
Generated on Mon Oct 8 11:16:50 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/namespacemembers_func.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/namespacemembers_func.html new file mode 100644 index 000000000..66dbca22c --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/namespacemembers_func.html @@ -0,0 +1,49 @@ + + +ParadisEO-PEOMovingObjects: Class Members + + + + +
+
+ +
+ +
+  +

+

    +
  • finalize() +: peo
  • init() +: peo
  • loadParameters() +: peo
  • run() +: peo
+
Generated on Mon Oct 8 11:16:50 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/namespacemembers_vars.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/namespacemembers_vars.html new file mode 100644 index 000000000..d4063dec2 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/namespacemembers_vars.html @@ -0,0 +1,47 @@ + + +ParadisEO-PEOMovingObjects: Class Members + + + + +
+
+ +
+ +
+  +

+

+
Generated on Mon Oct 8 11:16:50 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/namespacepeo.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/namespacepeo.html new file mode 100644 index 000000000..a694168dc --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/namespacepeo.html @@ -0,0 +1,65 @@ + + +ParadisEO-PEOMovingObjects: peo Namespace Reference + + + + +
+
+ +

peo Namespace Reference

+

+ + + + + + + + + + + + + + + + + + + + +

Functions

+void finalize ()
+void init (int &__argc, char **&__argv)
+void loadParameters (int &__argc, char **&__argv)
+void run ()

Variables

+int * argc
+char *** argv
+int * argc
+char *** argv
+


Generated on Mon Oct 8 11:16:50 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/namespaces.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/namespaces.html new file mode 100644 index 000000000..29be8b450 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/namespaces.html @@ -0,0 +1,37 @@ + + +ParadisEO-PEOMovingObjects: Namespace Index + + + + +
+
+ +

ParadisEO-PEOMovingObjects Namespace List

Here is a list of all documented namespaces with brief descriptions: + +
peo
+
Generated on Mon Oct 8 11:16:50 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/node_8cpp-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/node_8cpp-source.html new file mode 100644 index 000000000..e67d771dc --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/node_8cpp-source.html @@ -0,0 +1,87 @@ + + +ParadisEO-PEO: node.cpp Source File + + + + +
+
+

node.cpp

00001 // "node.cpp"
+00002 
+00003 // (c) OPAC Team, LIFL, August 2005
+00004 
+00005 /* 
+00006    Contact: paradiseo-help@lists.gforge.inria.fr
+00007 */
+00008 
+00009 #include <mpi.h>
+00010 #include <vector>
+00011 #include <map>
+00012 #include <string>
+00013 #include <cassert>
+00014 
+00015 static int rk, sz; /* Rank & size */
+00016 
+00017 static std :: map <std :: string, int> name_to_rk;
+00018 
+00019 static std :: vector <std :: string> rk_to_name;
+00020 
+00021 int getNodeRank () {
+00022 
+00023   return rk;
+00024 }
+00025 
+00026 int getNumberOfNodes () {
+00027 
+00028   return sz;
+00029 }
+00030 
+00031 int getRankFromName (const std :: string & __name) {
+00032   
+00033   return atoi (__name.c_str ());  
+00034 }
+00035 
+00036 void initNode (int * __argc, char * * * __argv) {
+00037   
+00038   int provided;
+00039   MPI_Init_thread (__argc,  __argv, MPI_THREAD_FUNNELED, & provided);  
+00040   assert (provided == MPI_THREAD_FUNNELED); /* The MPI implementation must be multi-threaded.
+00041                                                Yet, only one thread performs the comm.
+00042                                                operations */
+00043   MPI_Comm_rank (MPI_COMM_WORLD, & rk);   /* Who ? */
+00044   MPI_Comm_size (MPI_COMM_WORLD, & sz);    /* How many ? */
+00045 
+00046   char names [sz] [MPI_MAX_PROCESSOR_NAME];
+00047   int len;
+00048 
+00049   /* Processor names */ 
+00050   MPI_Get_processor_name (names [0], & len);   /* Me */  
+00051   MPI_Allgather (names, MPI_MAX_PROCESSOR_NAME, MPI_CHAR, names, MPI_MAX_PROCESSOR_NAME, MPI_CHAR, MPI_COMM_WORLD); /* Broadcast */
+00052   
+00053   for (int i = 0; i < sz; i ++) {
+00054     rk_to_name.push_back (names [i]);
+00055     name_to_rk [names [i]] = i;
+00056   }
+00057 }
+00058 
+

Generated on Thu Jul 5 13:43:30 2007 for ParadisEO-PEO by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/node_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/node_8h-source.html new file mode 100644 index 000000000..457f6e4aa --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/node_8h-source.html @@ -0,0 +1,53 @@ + + +ParadisEO-PEO: node.h Source File + + + + +
+
+

node.h

00001 // "node.h"
+00002 
+00003 // (c) OPAC Team, LIFL, August 2005
+00004 
+00005 /* 
+00006    Contact: paradiseo-help@lists.gforge.inria.fr
+00007 */
+00008 
+00009 #ifndef __node_h
+00010 #define __node_h
+00011 
+00012 #include <string>
+00013 #include <cassert>
+00014 
+00015 extern int getNodeRank (); /* It gives the rank of the calling process */
+00016 
+00017 extern int getNumberOfNodes (); /* It gives the size of the environment (Total number of nodes) */
+00018 
+00019 extern int getRankFromName (const std :: string & __name); /* It gives the rank of the process
+00020                                                               expressed by its name */
+00021 
+00022 extern void initNode (int * __argc, char * * * __argv);
+00023 
+00024 #endif
+

Generated on Thu Jul 5 13:43:30 2007 for ParadisEO-PEO by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/opt__route_8cpp-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/opt__route_8cpp-source.html new file mode 100644 index 000000000..33a72622f --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/opt__route_8cpp-source.html @@ -0,0 +1,164 @@ + + +ParadisEO-PEOMovingObjects: opt_route.cpp Source File + + + + +
+
+

opt_route.cpp

00001 /* 
+00002 * <opt_route.cpp>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #include "opt_route.h"
+00038 
+00039 #define MAX_TRASH_LENGTH 1000
+00040 #define MAX_FIELD_LENGTH 1000
+00041 #define MAX_LINE_LENGTH 1000
+00042 
+00043 static void getNextField (FILE * __f, char * __buff) {
+00044   
+00045   char trash [MAX_TRASH_LENGTH];  
+00046 
+00047   fscanf (__f, "%[ \t:\n]", trash); /* Discarding sep. */ 
+00048   fscanf (__f, "%[^:\n]", __buff); /* Reading the field */
+00049   fgetc (__f);
+00050 }
+00051 
+00052 static void getLine (FILE * __f, char * __buff) {
+00053 
+00054   char trash [MAX_TRASH_LENGTH];  
+00055 
+00056   fscanf (__f, "%[ \t:\n]", trash); /* Discarding sep. */ 
+00057   fscanf (__f, "%[^\n]", __buff); /* Reading the line */
+00058 }
+00059 
+00060 static void loadBestRoute (FILE * __f) {
+00061 
+00062   opt_route.clear ();
+00063   
+00064   for (unsigned i = 0; i < numNodes; i ++) {
+00065     Node node;
+00066     fscanf (__f, "%u", & node);
+00067     opt_route.push_back (node - 1);
+00068   }
+00069   int d; /* -1 ! */
+00070   fscanf (__f, "%d", & d);
+00071 }
+00072 
+00073 void loadOptimumRoute (const char * __filename) {
+00074 
+00075   FILE * f = fopen (__filename, "r");
+00076 
+00077   if (f) {
+00078      
+00079      printf ("Loading '%s'.\n", __filename);
+00080      
+00081      char field [MAX_FIELD_LENGTH];
+00082      
+00083      getNextField (f, field); /* Name */
+00084      assert (strstr (field, "NAME"));
+00085      getNextField (f, field); 
+00086      //printf ("NAME: %s.\n", field);
+00087 
+00088           getNextField (f, field); /* Comment */
+00089      assert (strstr (field, "COMMENT"));
+00090      getLine (f, field);
+00091      //     printf ("COMMENT: %s.\n", field);
+00092      
+00093      getNextField (f, field); /* Type */
+00094      assert (strstr (field, "TYPE"));
+00095      getNextField (f, field); 
+00096      //printf ("TYPE: %s.\n", field);
+00097 
+00098      getNextField (f, field); /* Dimension */
+00099      assert (strstr (field, "DIMENSION"));
+00100      getNextField (f, field); 
+00101      //     printf ("DIMENSION: %s.\n", field);
+00102      numNodes = atoi (field);
+00103 
+00104      getNextField (f, field); /* Tour section */
+00105      assert (strstr (field, "TOUR_SECTION"));
+00106      loadBestRoute (f);
+00107      
+00108      getNextField (f, field); /* End of file */
+00109      assert (strstr (field, "EOF"));
+00110      //printf ("EOF.\n");
+00111      
+00112      printf ("The length of the best route is %u.\n", length (opt_route));
+00113   }
+00114    else {
+00115      
+00116      fprintf (stderr, "Can't open '%s'.\n", __filename); 
+00117      exit (1);
+00118    }
+00119 }
+00120 
+00121 void loadOptimumRoute (eoParser & __parser) {
+00122   
+00123   /* Getting the path of the instance */
+00124   
+00125   eoValueParam <std :: string> param ("", "optimumTour", "Optimum tour") ;
+00126   __parser.processParam (param) ;
+00127   if (strlen (param.value ().c_str ()))
+00128     loadOptimumRoute (param.value ().c_str ());
+00129   else
+00130     opt_route.fitness (0);
+00131 }
+00132 
+00133 Route opt_route; /* Optimum route */
+00134 
+00135 
+

Generated on Mon Oct 8 11:16:45 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/opt__route_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/opt__route_8h-source.html new file mode 100644 index 000000000..7fbb643aa --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/opt__route_8h-source.html @@ -0,0 +1,80 @@ + + +ParadisEO-PEOMovingObjects: opt_route.h Source File + + + + +
+
+

opt_route.h

00001 /* 
+00002 * <opt_route.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef __opt_route_h
+00038 #define __opt_route_h
+00039 
+00040 #include <cassert>
+00041 #include <utils/eoParser.h>
+00042 
+00043 #include "route.h"
+00044 
+00045 extern void loadOptimumRoute (const char * __filename);
+00046 
+00047 extern void loadOptimumRoute (eoParser & __parser);
+00048 
+00049 extern Route opt_route; /* Optimum route */
+00050 
+00051 #endif
+

Generated on Mon Oct 8 11:16:45 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/order__xover_8cpp-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/order__xover_8cpp-source.html new file mode 100644 index 000000000..b73368e34 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/order__xover_8cpp-source.html @@ -0,0 +1,121 @@ + + +ParadisEO-PEOMovingObjects: order_xover.cpp Source File + + + + +
+
+

order_xover.cpp

00001 /* 
+00002 * <order_xover.cpp>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #include <assert.h>
+00038 
+00039 #include <utils/eoRNG.h>
+00040 
+00041 #include "order_xover.h"
+00042 
+00043 void OrderXover :: cross (const Route & __par1, const Route & __par2, Route & __child) {
+00044 
+00045   unsigned cut2 = 1 + rng.random (numNodes) ;    
+00046   unsigned cut1 = rng.random (cut2);
+00047   unsigned l = 0;
+00048 
+00049   /* To store vertices that have already been crossed */
+00050   std :: vector <bool> v (numNodes, false);
+00051 
+00052   /* Copy of the left partial route of the first parent */ 
+00053   for (unsigned i = cut1 ; i < cut2 ; i ++) {
+00054     __child [l ++] = __par1 [i] ; 
+00055     v [__par1 [i]] = true ;
+00056   }
+00057    
+00058   /* Searching the vertex of the second path, that ended the previous first one */
+00059   unsigned from = 0 ;
+00060   for (unsigned i = 0; i < numNodes; i ++)
+00061     if (__par2 [i] == __child [cut2 - 1]) { 
+00062       from = i ;
+00063       break ;
+00064     }
+00065   
+00066   /* Selecting a direction (Left or Right) */
+00067   char direct = rng.flip () ? 1 : -1 ;
+00068       
+00069   for (unsigned i = 0; i < numNodes + 1; i ++) {
+00070     unsigned bidule = (direct * i + from + numNodes) % numNodes;
+00071     if (! v [__par2 [bidule]]) {
+00072       __child [l ++] = __par2 [bidule] ;
+00073       v [__par2 [bidule]] = true ;
+00074     }
+00075   }
+00076 } 
+00077 
+00078 bool OrderXover :: operator () (Route & __route1, Route & __route2) {
+00079   
+00080   // Init. copy
+00081   Route par [2] ;
+00082   par [0] = __route1 ;
+00083   par [1] = __route2 ;
+00084   
+00085   cross (par [0], par [1], __route1) ;
+00086   cross (par [1], par [0], __route2) ;
+00087   
+00088   __route1.invalidate () ;
+00089   __route2.invalidate () ;
+00090 
+00091   return true ;
+00092 }
+

Generated on Mon Oct 8 11:16:45 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/order__xover_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/order__xover_8h-source.html new file mode 100644 index 000000000..93b2d10d1 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/order__xover_8h-source.html @@ -0,0 +1,84 @@ + + +ParadisEO-PEOMovingObjects: order_xover.h Source File + + + + +
+
+

order_xover.h

00001 /* 
+00002 * <order_xover.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef order_xover_h
+00038 #define order_xover_h
+00039 
+00040 #include <eoOp.h>
+00041 
+00042 #include "route.h"
+00043 
+00045 class OrderXover : public eoQuadOp <Route> {
+00046   
+00047 public :
+00048   
+00049   bool operator () (Route & __route1, Route & __route2) ;
+00050 
+00051 private :
+00052   
+00053   void cross (const Route & __par1, const Route & __par2, Route & __child) ;
+00054 } ;
+00055 
+00056 #endif
+

Generated on Mon Oct 8 11:16:45 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/paradiseo_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/paradiseo_8h-source.html new file mode 100644 index 000000000..fb84c6c22 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/paradiseo_8h-source.html @@ -0,0 +1,70 @@ + + +ParadisEO-PEO: paradiseo.h Source File + + + + +
+
+

paradiseo.h

00001 // "paradiseo.h"
+00002 
+00003 // (c) OPAC Team, LIFL, August 2005
+00004 
+00005 /* 
+00006    Contact: paradiseo-help@lists.gforge.inria.fr
+00007 */
+00008 
+00009 #ifndef __paradiseo_h_
+00010 #define __paradiseo_h_
+00011 
+00012 #include <eo>
+00013 #include <mo>
+00014 
+00015 
+00260 
+00261 
+00262 
+00263 #include "core/peo_init.h"
+00264 #include "core/peo_run.h"
+00265 #include "core/peo_fin.h"
+00266 
+00267 #include "core/eoVector_comm.h"
+00268 
+00269 #include "peoEA.h"
+00270 
+00271 /* Parallel steps of the E.A. */
+00272 #include "peoSeqTransform.h"
+00273 #include "peoParaSGATransform.h"
+00274 #include "peoSeqPopEval.h"
+00275 #include "peoParaPopEval.h"
+00276 
+00277 /* Cooperative island model */
+00278 #include "core/ring_topo.h"
+00279 #include "peoAsyncIslandMig.h"
+00280 #include "peoSyncIslandMig.h"
+00281 
+00282 /* Synchronous multi-start model */
+00283 #include "peoSyncMultiStart.h"
+00284 
+00285 #endif
+

Generated on Thu Jul 5 13:43:30 2007 for ParadisEO-PEO by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/param_8cpp-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/param_8cpp-source.html new file mode 100644 index 000000000..819d3aaab --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/param_8cpp-source.html @@ -0,0 +1,50 @@ + + +ParadisEO-PEO: param.cpp Source File + + + + +
+
+

param.cpp

00001 // "param.cpp"
+00002 
+00003 // (c) OPAC Team, LIFL, August 2005
+00004 
+00005 /* 
+00006    Contact: paradiseo-help@lists.gforge.inria.fr
+00007 */
+00008 
+00009 #include <utils/eoParser.h>
+00010 
+00011 #include "schema.h"
+00012 
+00013 void loadRMCParameters (int & __argc, char * * & __argv) {
+00014 
+00015   eoParser parser (__argc, __argv);
+00016 
+00017   /* Schema */
+00018   eoValueParam <std :: string> schema_param ("schema.xml", "schema", "?");
+00019   parser.processParam (schema_param);
+00020   loadSchema (schema_param.value ().c_str ());
+00021 }
+

Generated on Thu Jul 5 13:43:30 2007 for ParadisEO-PEO by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/param_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/param_8h-source.html new file mode 100644 index 000000000..39df99494 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/param_8h-source.html @@ -0,0 +1,43 @@ + + +ParadisEO-PEO: param.h Source File + + + + +
+
+

param.h

00001 // "param.h"
+00002 
+00003 // (c) OPAC Team, LIFL, August 2005
+00004 
+00005 /* 
+00006    Contact: paradiseo-help@lists.gforge.inria.fr
+00007 */
+00008 
+00009 #ifndef __rmc_param_h
+00010 #define __rmc_param_h
+00011 
+00012 extern void loadRMCParameters (int & __argc, char * * & __argv);
+00013 
+00014 #endif
+

Generated on Thu Jul 5 13:43:30 2007 for ParadisEO-PEO by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/part__route__eval_8cpp-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/part__route__eval_8cpp-source.html new file mode 100644 index 000000000..34a6d4e92 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/part__route__eval_8cpp-source.html @@ -0,0 +1,87 @@ + + +ParadisEO-PEOMovingObjects: part_route_eval.cpp Source File + + + + +
+
+

part_route_eval.cpp

00001 /* 
+00002 * <part_route_eval.cpp>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #include "part_route_eval.h"
+00038 #include "node.h"
+00039 
+00040 PartRouteEval :: PartRouteEval (float __from,
+00041                                 float __to
+00042                                 ) : from (__from),
+00043                                     to (__to) {
+00044   
+00045 }
+00046 
+00047 void PartRouteEval :: operator () (Route & __route) {
+00048   
+00049   
+00050   unsigned len = 0 ;
+00051   
+00052   for (unsigned i = (unsigned) (__route.size () * from) ;
+00053        i < (unsigned) (__route.size () * to) ;
+00054        i ++)
+00055     len += distance (__route [i], __route [(i + 1) % numNodes]) ;
+00056   
+00057   __route.fitness (- (int) len) ;
+00058 }
+

Generated on Mon Oct 8 11:16:45 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/part__route__eval_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/part__route__eval_8h-source.html new file mode 100644 index 000000000..43fc31513 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/part__route__eval_8h-source.html @@ -0,0 +1,88 @@ + + +ParadisEO-PEOMovingObjects: part_route_eval.h Source File + + + + +
+
+

part_route_eval.h

00001 /* 
+00002 * <part_route_eval.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef __part_route_eval_h
+00038 #define __part_route_eval_h
+00039 
+00040 #include <eoEvalFunc.h>
+00041 
+00042 #include "route.h"
+00043 
+00045 class PartRouteEval : public eoEvalFunc <Route> {
+00046   
+00047 public :
+00048 
+00050   PartRouteEval (float __from, float __to) ;
+00051     
+00052   void operator () (Route & __route) ;
+00053   
+00054 private :
+00055 
+00056   float from, to ;
+00057 
+00058 } ;
+00059 
+00060 
+00061 #endif
+

Generated on Mon Oct 8 11:16:45 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/partial__mapped__xover_8cpp-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/partial__mapped__xover_8cpp-source.html new file mode 100644 index 000000000..75f1c08a9 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/partial__mapped__xover_8cpp-source.html @@ -0,0 +1,118 @@ + + +ParadisEO-PEOMovingObjects: partial_mapped_xover.cpp Source File + + + + +
+
+

partial_mapped_xover.cpp

00001 /* 
+00002 * <partial_mapped_xover.cpp>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #include <assert.h>
+00038 
+00039 #include <utils/eoRNG.h>
+00040 
+00041 #include "partial_mapped_xover.h"
+00042 #include "mix.h"
+00043 
+00044 void PartialMappedXover :: repair (Route & __route, unsigned __cut1, unsigned __cut2) {
+00045   
+00046   unsigned v [__route.size ()] ; // Number of times a cities are visited ...
+00047   
+00048   for (unsigned i = 0 ; i < __route.size () ; i ++)
+00049     v [i] = 0 ;
+00050   
+00051   for (unsigned i = 0 ; i < __route.size () ; i ++)
+00052     v [__route [i]] ++ ;
+00053   
+00054   std :: vector <unsigned> vert ;
+00055 
+00056   for (unsigned i = 0 ; i < __route.size () ; i ++)
+00057     if (! v [i])
+00058       vert.push_back (i) ;
+00059   
+00060   mix (vert) ;
+00061 
+00062   for (unsigned i = 0 ; i < __route.size () ; i ++)
+00063     if (i < __cut1 || i >= __cut2)
+00064       if (v [__route [i]] > 1) {
+00065         __route [i] = vert.back () ;
+00066         vert.pop_back () ;
+00067       }
+00068 }
+00069 
+00070 bool PartialMappedXover :: operator () (Route & __route1, Route & __route2) {
+00071     
+00072   unsigned cut1 = rng.random (__route1.size ()), cut2 = rng.random (__route2.size ()) ;
+00073   
+00074   if (cut2 < cut1)
+00075     std :: swap (cut1, cut2) ;
+00076   
+00077   // Between the cuts
+00078   for (unsigned i = cut1 ; i < cut2 ; i ++)
+00079     std :: swap (__route1 [i], __route2 [i]) ;
+00080   
+00081   // Outside the cuts
+00082   repair (__route1, cut1, cut2) ;
+00083   repair (__route2, cut1, cut2) ;
+00084   
+00085   __route1.invalidate () ;
+00086   __route2.invalidate () ;
+00087 
+00088   return true ;
+00089 }
+

Generated on Mon Oct 8 11:16:45 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/partial__mapped__xover_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/partial__mapped__xover_8h-source.html new file mode 100644 index 000000000..5c5b555d6 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/partial__mapped__xover_8h-source.html @@ -0,0 +1,84 @@ + + +ParadisEO-PEOMovingObjects: partial_mapped_xover.h Source File + + + + +
+
+

partial_mapped_xover.h

00001 /* 
+00002 * <partial_mapped_xover.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef partial_mapped_xover_h
+00038 #define partial_mapped_xover_h
+00039 
+00040 #include <eoOp.h>
+00041 
+00042 #include "route.h"
+00043 
+00045 class PartialMappedXover : public eoQuadOp <Route> {
+00046   
+00047 public :
+00048   
+00049   bool operator () (Route & __route1, Route & __route2) ;
+00050 
+00051 private :
+00052   
+00053   void repair (Route & __route, unsigned __cut1, unsigned __cut2) ;
+00054 } ;
+00055 
+00056 #endif
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peoAggEvalFunc_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peoAggEvalFunc_8h-source.html new file mode 100644 index 000000000..d3c30f0b8 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peoAggEvalFunc_8h-source.html @@ -0,0 +1,77 @@ + + +ParadisEO-PEOMovingObjects: peoAggEvalFunc.h Source File + + + + +
+
+

peoAggEvalFunc.h

00001 /* 
+00002 * <peoAggEvalFunc.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef __peoAggEvalFunc_h
+00038 #define __peoAggEvalFunc_h
+00039 
+00040 #include <eoFunctor.h>
+00041 
+00043 
+00053 template< class EOT > class peoAggEvalFunc : public eoBF< EOT&, const typename EOT :: Fitness&, void > {
+00054 
+00055 };
+00056 
+00057 
+00058 #endif
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peoAsyncIslandMig_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peoAsyncIslandMig_8h-source.html new file mode 100644 index 000000000..221bda745 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peoAsyncIslandMig_8h-source.html @@ -0,0 +1,217 @@ + + +ParadisEO-PEOMovingObjects: peoAsyncIslandMig.h Source File + + + + +
+
+

peoAsyncIslandMig.h

00001 /* 
+00002 * <peoAsyncIslandMig.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef __peoAsyncIslandMig_h
+00038 #define __peoAsyncIslandMig_h
+00039 
+00040 
+00041 #include <queue>
+00042 
+00043 #include <utils/eoUpdater.h>
+00044 
+00045 #include <eoContinue.h>
+00046 #include <eoSelect.h>
+00047 #include <eoReplacement.h>
+00048 #include <eoPop.h>
+00049 
+00050 #include "core/topology.h"
+00051 #include "core/cooperative.h"
+00052 #include "core/eoPop_comm.h"
+00053 #include "core/peo_debug.h"
+00054 
+00055 
+00057 
+00140 template< class EOT > class peoAsyncIslandMig : public Cooperative, public eoUpdater {
+00141 
+00142 public:
+00143 
+00153         peoAsyncIslandMig( 
+00154                                 eoContinue< EOT >& __cont,
+00155                                 eoSelect< EOT >& __select,
+00156                                 eoReplacement< EOT >& __replace,
+00157                                 Topology& __topology,
+00158                                 eoPop< EOT >& __source,
+00159                                 eoPop< EOT >& __destination 
+00160         );
+00161 
+00166         void operator()();
+00167         
+00169         void pack();
+00171         void unpack();
+00172 
+00173 
+00174 private:
+00175 
+00176         void emigrate();
+00177         void immigrate();
+00178 
+00179 
+00180 private:
+00181 
+00182         eoContinue< EOT >& cont;        // continuator
+00183         eoSelect< EOT >& select;        // the selection strategy
+00184         eoReplacement< EOT >& replace;  // the replacement strategy
+00185         Topology& topology;             // the neighboring topology
+00186         
+00187         // source and destination populations
+00188         eoPop< EOT >& source;
+00189         eoPop< EOT >& destination;
+00190         
+00191         // immigrants & emigrants in the queue
+00192         std :: queue< eoPop< EOT > > imm;
+00193         std :: queue< eoPop< EOT > > em;
+00194         
+00195         std :: queue< Cooperative* > coop_em;
+00196 };
+00197 
+00198 
+00199 template< class EOT > peoAsyncIslandMig< EOT > :: peoAsyncIslandMig(
+00200 
+00201                 eoContinue< EOT >& __cont,
+00202                 eoSelect< EOT >& __select,
+00203                 eoReplacement< EOT >& __replace,
+00204                 Topology& __topology,
+00205                 eoPop< EOT >& __source,
+00206                 eoPop< EOT >& __destination
+00207 
+00208         ) : cont( __cont ), select( __select ), replace( __replace ), topology( __topology ), source( __source ), destination( __destination )
+00209 {
+00210 
+00211         __topology.add( *this );
+00212 }
+00213 
+00214 
+00215 template< class EOT > void peoAsyncIslandMig< EOT > :: pack()
+00216 {
+00217 
+00218         lock(); {
+00219 
+00220 		 :: pack( coop_em.front()->getKey() );
+00221 		 :: pack( em.front() );
+00222                 coop_em.pop();
+00223                 em.pop();
+00224         }
+00225         unlock();
+00226 }
+00227 
+00228 
+00229 template< class EOT > void peoAsyncIslandMig< EOT > :: unpack()
+00230 {
+00231 
+00232         lock(); {
+00233 
+00234                 eoPop< EOT > mig;
+00235 		 :: unpack( mig );
+00236                 imm.push( mig );
+00237         }
+00238         unlock();
+00239 }
+00240 
+00241 
+00242 template< class EOT > void peoAsyncIslandMig< EOT > :: emigrate()
+00243 {
+00244 
+00245         std :: vector< Cooperative* >in, out;
+00246         topology.setNeighbors( this, in, out );
+00247 
+00248         for ( unsigned i = 0; i < out.size(); i++ ) {
+00249         
+00250                 eoPop< EOT > mig;
+00251                 select( source, mig );
+00252                 em.push( mig );
+00253                 coop_em.push( out[i] );
+00254                 send( out[i] );
+00255                 printDebugMessage( "sending some emigrants." );
+00256         }
+00257 }
+00258 
+00259 
+00260 template< class EOT > void peoAsyncIslandMig< EOT > :: immigrate()
+00261 {
+00262 
+00263         lock(); {
+00264 
+00265                 while ( !imm.empty() ) {
+00266 
+00267                         replace( destination, imm.front() );
+00268                         imm.pop();
+00269                         printDebugMessage( "receiving some immigrants." );
+00270                 }
+00271         }
+00272         unlock();
+00273 }
+00274 
+00275 
+00276 template< class EOT > void peoAsyncIslandMig< EOT > :: operator()() {
+00277 
+00278         if ( !cont( source ) ) {
+00279 
+00280                 emigrate();     // sending emigrants
+00281                 immigrate();    // receiving immigrants
+00282         }
+00283 }
+00284 
+00285 
+00286 #endif
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peoEA_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peoEA_8h-source.html new file mode 100644 index 000000000..3913a0cc9 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peoEA_8h-source.html @@ -0,0 +1,156 @@ + + +ParadisEO-PEOMovingObjects: peoEA.h Source File + + + + +
+
+

peoEA.h

00001 /* 
+00002 * <peoEA.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef __peoEA_h
+00038 #define __peoEA_h
+00039 
+00040 #include <eoContinue.h>
+00041 #include <eoEvalFunc.h>
+00042 #include <eoSelect.h>
+00043 #include <eoPopEvalFunc.h>
+00044 #include <eoReplacement.h>
+00045 
+00046 #include "peoPopEval.h"
+00047 #include "peoTransform.h"
+00048 #include "core/runner.h"
+00049 #include "core/peo_debug.h"
+00050 
+00052 
+00082 template < class EOT > class peoEA : public Runner {
+00083 
+00084 public:
+00085 
+00097         peoEA( 
+00098                 eoContinue< EOT >& __cont,
+00099                 peoPopEval< EOT >& __pop_eval,
+00100                 eoSelect< EOT >& __select,
+00101                 peoTransform< EOT >& __trans,
+00102                 eoReplacement< EOT >& __replace 
+00103         );
+00104 
+00107         void run();
+00108         
+00112         void operator()( eoPop< EOT >& __pop );
+00113 
+00114 private:
+00115 
+00116 
+00117         eoContinue< EOT >& cont;
+00118         peoPopEval< EOT >& pop_eval;
+00119         eoSelect< EOT >& select;
+00120         peoTransform< EOT >& trans;
+00121         eoReplacement< EOT >& replace;
+00122         eoPop< EOT >* pop;
+00123 };
+00124 
+00125 
+00126 template < class EOT > peoEA< EOT > :: peoEA( 
+00127 
+00128                                 eoContinue< EOT >& __cont, 
+00129                                 peoPopEval< EOT >& __pop_eval, 
+00130                                 eoSelect< EOT >& __select, 
+00131                                 peoTransform< EOT >& __trans, 
+00132                                 eoReplacement< EOT >& __replace
+00133 
+00134                 ) : cont( __cont ), pop_eval( __pop_eval ), select( __select ), trans( __trans ), replace( __replace )
+00135 {
+00136 
+00137         trans.setOwner( *this );
+00138         pop_eval.setOwner( *this );
+00139 }
+00140 
+00141 
+00142 template< class EOT > void peoEA< EOT > :: operator ()( eoPop< EOT >& __pop ) {
+00143 
+00144         pop = &__pop;
+00145 }
+00146 
+00147 
+00148 template< class EOT > void peoEA< EOT > :: run() {
+00149 
+00150         printDebugMessage( "performing the first evaluation of the population." );
+00151         pop_eval( *pop );
+00152         
+00153         do {
+00154 
+00155                 eoPop< EOT > off;
+00156 
+00157                 printDebugMessage( "performing the selection step." );
+00158                 select( *pop, off );
+00159                 trans( off );
+00160 
+00161                 printDebugMessage( "performing the evaluation of the population." );
+00162                 pop_eval( off );
+00163 
+00164                 printDebugMessage( "performing the replacement of the population." );
+00165                 replace( *pop, off );
+00166 
+00167                 printDebugMessage( "deciding of the continuation." );
+00168         
+00169         } while ( cont( *pop ) );
+00170 }
+00171 
+00172 
+00173 #endif
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peoNoAggEvalFunc_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peoNoAggEvalFunc_8h-source.html new file mode 100644 index 000000000..a549ffcc8 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peoNoAggEvalFunc_8h-source.html @@ -0,0 +1,86 @@ + + +ParadisEO-PEOMovingObjects: peoNoAggEvalFunc.h Source File + + + + +
+
+

peoNoAggEvalFunc.h

00001 /* 
+00002 * <peoNoAggEvalFunc.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef __peoNoAggEvalFunc_h
+00038 #define __peoNoAggEvalFunc_h
+00039 
+00040 #include "peoAggEvalFunc.h"
+00041 
+00043 
+00047 template< class EOT > class peoNoAggEvalFunc : public peoAggEvalFunc< EOT > {
+00048 
+00049 public :
+00050 
+00052         void operator()( EOT& __sol, const typename EOT :: Fitness& __fit );
+00053 };
+00054 
+00055 
+00056 template< class EOT > void peoNoAggEvalFunc< EOT > :: operator()( EOT& __sol, const typename EOT :: Fitness& __fit ) {
+00057 
+00058         __sol.fitness( __fit );
+00059 }
+00060 
+00061 
+00062 #endif
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peoParaPopEval_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peoParaPopEval_8h-source.html new file mode 100644 index 000000000..48ce8e736 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peoParaPopEval_8h-source.html @@ -0,0 +1,254 @@ + + +ParadisEO-PEOMovingObjects: peoParaPopEval.h Source File + + + + +
+
+

peoParaPopEval.h

00001 /* 
+00002 * <peoParaPopEval.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef __peoParaPopEval_h
+00038 #define __peoParaPopEval_h
+00039 
+00040 #include <queue>
+00041 #include <eoEvalFunc.h>
+00042 
+00043 #include "core/messaging.h"
+00044 #include "core/peo_debug.h"
+00045 #include "peoAggEvalFunc.h"
+00046 #include "peoNoAggEvalFunc.h"
+00047 
+00048 
+00050 
+00054 template< class EOT > class peoParaPopEval : public peoPopEval< EOT > {
+00055 
+00056 public:
+00057 
+00058         using peoPopEval< EOT > :: requestResourceRequest;
+00059         using peoPopEval< EOT > :: resume;
+00060         using peoPopEval< EOT > :: stop;
+00061         using peoPopEval< EOT > :: getOwner;
+00062         
+00067         peoParaPopEval( eoEvalFunc< EOT >& __eval_func );
+00068 
+00073         peoParaPopEval( const std :: vector< eoEvalFunc < EOT >* >& __funcs, peoAggEvalFunc< EOT >& __merge_eval );
+00074 
+00078         void operator()( eoPop< EOT >& __pop );
+00079 
+00082         void packData();
+00083         
+00086         void unpackData();
+00087 
+00089         void execute();
+00090         
+00093         void packResult();
+00094         
+00097         void unpackResult();
+00098         
+00101         void notifySendingData();
+00102 
+00105         void notifySendingAllResourceRequests();
+00106 
+00107 private:
+00108 
+00109 
+00110         const std :: vector< eoEvalFunc < EOT >* >& funcs;
+00111         std :: vector< eoEvalFunc < EOT >* > one_func;
+00112         
+00113         peoAggEvalFunc< EOT >& merge_eval;
+00114         peoNoAggEvalFunc< EOT > no_merge_eval;
+00115         
+00116         std :: queue< EOT* >tasks;
+00117         
+00118         std :: map< EOT*, std :: pair< unsigned, unsigned > > progression;
+00119         
+00120         unsigned num_func;
+00121         
+00122         EOT sol;
+00123         
+00124         EOT *ad_sol;
+00125         
+00126         unsigned total;
+00127 };
+00128 
+00129 
+00130 template< class EOT > peoParaPopEval< EOT > :: peoParaPopEval( eoEvalFunc< EOT >& __eval_func ) : 
+00131 
+00132                 funcs( one_func ), merge_eval( no_merge_eval )
+00133 {
+00134 
+00135         one_func.push_back( &__eval_func );
+00136 }
+00137 
+00138 
+00139 template< class EOT > peoParaPopEval< EOT > :: peoParaPopEval( 
+00140 
+00141                                 const std :: vector< eoEvalFunc< EOT >* >& __funcs,
+00142                                 peoAggEvalFunc< EOT >& __merge_eval 
+00143 
+00144                 ) : funcs( __funcs ), merge_eval( __merge_eval )
+00145 {
+00146 
+00147 }
+00148 
+00149 
+00150 template< class EOT > void peoParaPopEval< EOT >::operator()( eoPop< EOT >& __pop ) {
+00151 
+00152         for ( unsigned i = 0; i < __pop.size(); i++ ) {
+00153 
+00154                 __pop[ i ].fitness( typename EOT :: Fitness() );
+00155 
+00156                 progression[ &__pop[ i ] ].first = funcs.size() - 1;
+00157                 progression[ &__pop[ i ] ].second = funcs.size();
+00158                 
+00159                 for ( unsigned j = 0; j < funcs.size(); j++ ) {
+00160                         /* Queuing the 'invalid' solution and its associated owner */
+00161                         tasks.push( &__pop[ i ] );
+00162                 }
+00163         }
+00164         
+00165         total = funcs.size() * __pop.size();
+00166         requestResourceRequest( funcs.size() * __pop.size() );
+00167         stop();
+00168 }
+00169 
+00170 
+00171 template< class EOT > void peoParaPopEval< EOT > :: packData() {
+00172 
+00173         //  printDebugMessage ("debut pakc data");
+00174         pack( progression[ tasks.front() ].first-- );
+00175         
+00176         /* Packing the contents :-) of the solution */
+00177         pack( *tasks.front() );
+00178         
+00179         /* Packing the addresses of both the solution and the owner */
+00180         pack( tasks.front() );
+00181         tasks.pop(  );
+00182 }
+00183 
+00184 
+00185 template< class EOT > void peoParaPopEval< EOT > :: unpackData() {
+00186 
+00187         unpack( num_func );
+00188         /* Unpacking the solution */
+00189         unpack( sol );
+00190         /* Unpacking the @ of that one */
+00191         unpack( ad_sol );
+00192 }
+00193 
+00194 
+00195 template< class EOT > void peoParaPopEval< EOT > :: execute() {
+00196 
+00197         /* Computing the fitness of the solution */
+00198         funcs[ num_func ]->operator()( sol );
+00199 }
+00200 
+00201 
+00202 template< class EOT > void peoParaPopEval< EOT > :: packResult() {
+00203 
+00204         /* Packing the fitness of the solution */
+00205         pack( sol.fitness() );
+00206         /* Packing the @ of the individual */
+00207         pack( ad_sol );
+00208 }
+00209 
+00210 
+00211 template< class EOT > void peoParaPopEval< EOT > :: unpackResult() {
+00212 
+00213         typename EOT :: Fitness fit;
+00214         
+00215         /* Unpacking the computed fitness */
+00216         unpack( fit );
+00217                 
+00218         /* Unpacking the @ of the associated individual */
+00219         unpack( ad_sol );
+00220         
+00221         
+00222         /* Associating the fitness the local solution */
+00223         merge_eval( *ad_sol, fit );
+00224 
+00225         progression[ ad_sol ].second--;
+00226 
+00227         /* Notifying the container of the termination of the evaluation */
+00228         if ( !progression[ ad_sol ].second ) {
+00229 
+00230                 progression.erase( ad_sol );
+00231         }
+00232         
+00233         total--;
+00234         if ( !total ) {
+00235 
+00236                 getOwner()->setActive();
+00237                 resume();
+00238         }
+00239 }
+00240 
+00241 
+00242 template< class EOT > void peoParaPopEval< EOT > :: notifySendingData() {
+00243 
+00244 }
+00245 
+00246 
+00247 template< class EOT > void peoParaPopEval< EOT > :: notifySendingAllResourceRequests() {
+00248 
+00249         getOwner()->setPassive();
+00250 }
+00251 
+00252 
+00253 #endif
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peoParaSGATransform_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peoParaSGATransform_8h-source.html new file mode 100644 index 000000000..22c18d626 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peoParaSGATransform_8h-source.html @@ -0,0 +1,212 @@ + + +ParadisEO-PEOMovingObjects: peoParaSGATransform.h Source File + + + + +
+
+

peoParaSGATransform.h

00001 /* 
+00002 * <peoParaSGATransform.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef __peoParaSGATransform_h
+00038 #define __peoParaSGATransform_h
+00039 
+00040 #include "peoTransform.h"
+00041 #include "core/thread.h"
+00042 #include "core/messaging.h"
+00043 #include "core/peo_debug.h"
+00044 
+00045 
+00046 extern int getNodeRank();
+00047 
+00048 
+00049 template< class EOT > class peoParaSGATransform : public peoTransform< EOT > {
+00050 
+00051 public:
+00052 
+00053         using peoTransform< EOT > :: requestResourceRequest;
+00054         using peoTransform< EOT > :: resume;
+00055         using peoTransform< EOT > :: stop;
+00056         using peoTransform< EOT > :: getOwner;
+00057 
+00058         peoParaSGATransform( 
+00059 
+00060                                 eoQuadOp< EOT >& __cross,
+00061                                 double __cross_rate,
+00062                                 eoMonOp< EOT >& __mut, 
+00063                                 double __mut_rate 
+00064         );
+00065 
+00066         void operator()( eoPop< EOT >& __pop );
+00067         
+00068         void packData();
+00069         
+00070         void unpackData();
+00071         
+00072         void execute();
+00073         
+00074         void packResult();
+00075         
+00076         void unpackResult();
+00077         
+00078         void notifySendingData();
+00079         void notifySendingAllResourceRequests();
+00080 
+00081 private:
+00082 
+00083     eoQuadOp< EOT >& cross;
+00084     double cross_rate;
+00085 
+00086     eoMonOp< EOT >& mut;
+00087     double mut_rate;
+00088 
+00089     unsigned idx;
+00090 
+00091     eoPop< EOT >* pop;
+00092 
+00093     EOT father, mother;
+00094 
+00095     unsigned num_term;
+00096 };
+00097 
+00098 template< class EOT > peoParaSGATransform< EOT > :: peoParaSGATransform( 
+00099 
+00100                                 eoQuadOp< EOT >& __cross,
+00101                                 double __cross_rate,
+00102                                 eoMonOp < EOT >& __mut,
+00103                                 double __mut_rate 
+00104 
+00105                 ) : cross( __cross ), cross_rate( __cross_rate ), mut( __mut ), mut_rate( __mut_rate )
+00106 {
+00107 
+00108 }
+00109 
+00110 
+00111 template< class EOT > void peoParaSGATransform< EOT > :: packData() {
+00112 
+00113         pack( idx );
+00114          :: pack( pop->operator[]( idx++ ) );
+00115          :: pack( pop->operator[]( idx++ ) );
+00116 }
+00117 
+00118 
+00119 template< class EOT > void peoParaSGATransform< EOT > :: unpackData() {
+00120 
+00121         unpack( idx );
+00122          :: unpack( father );
+00123          :: unpack( mother );
+00124 }
+00125 
+00126 
+00127 template< class EOT > void peoParaSGATransform< EOT > :: execute() {
+00128 
+00129         if( rng.uniform() < cross_rate ) cross( mother, father );
+00130 
+00131         if( rng.uniform() < mut_rate ) mut( mother );
+00132         if( rng.uniform() < mut_rate ) mut( father );
+00133 }
+00134 
+00135 
+00136 template< class EOT > void peoParaSGATransform< EOT > :: packResult() {
+00137 
+00138         pack( idx );
+00139          :: pack( father );
+00140          :: pack( mother );
+00141 }
+00142 
+00143 
+00144 template< class EOT > void peoParaSGATransform< EOT > :: unpackResult() {
+00145 
+00146         unsigned sidx;
+00147         
+00148         unpack( sidx );
+00149          :: unpack( pop->operator[]( sidx++ ) );
+00150          :: unpack( pop->operator[]( sidx ) );
+00151         num_term += 2;
+00152         
+00153         if( num_term == pop->size() ) {
+00154 
+00155                 getOwner()->setActive();
+00156                 resume();
+00157         }
+00158 }
+00159 
+00160 
+00161 template< class EOT > void peoParaSGATransform< EOT > :: operator()( eoPop < EOT >& __pop ) {
+00162 
+00163         printDebugMessage( "performing the parallel transformation step." );
+00164         pop = &__pop;
+00165         idx = 0;
+00166         num_term = 0;
+00167         requestResourceRequest( __pop.size() / 2 );
+00168         stop();
+00169 }
+00170 
+00171 
+00172 template< class EOT > void peoParaSGATransform< EOT > :: notifySendingData() {
+00173 
+00174 }
+00175 
+00176 
+00177 template< class EOT > void peoParaSGATransform< EOT > :: notifySendingAllResourceRequests() {
+00178 
+00179         getOwner()->setPassive();
+00180 }
+00181 
+00182 
+00183 #endif
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peoParallelAlgorithmWrapper_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peoParallelAlgorithmWrapper_8h-source.html new file mode 100644 index 000000000..4e630d7f9 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peoParallelAlgorithmWrapper_8h-source.html @@ -0,0 +1,142 @@ + + +ParadisEO-PEOMovingObjects: peoParallelAlgorithmWrapper.h Source File + + + + +
+
+

peoParallelAlgorithmWrapper.h

00001 /* 
+00002 * <peoParallelAlgorithmWrapper.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef __peoParaAlgorithm_h
+00038 #define __peoParaAlgorithm_h
+00039 
+00040 
+00041 #include "core/runner.h"
+00042 #include "core/peo_debug.h"
+00043 
+00044 
+00045 
+00046 
+00047 class peoParallelAlgorithmWrapper : public Runner {
+00048 
+00049 public:
+00050 
+00051         template< typename AlgorithmType > peoParallelAlgorithmWrapper( AlgorithmType& externalAlgorithm ) 
+00052                 : algorithm( new Algorithm< AlgorithmType, void >( externalAlgorithm ) ) {
+00053 
+00054         }
+00055 
+00056         template< typename AlgorithmType, typename AlgorithmDataType > peoParallelAlgorithmWrapper( AlgorithmType& externalAlgorithm, AlgorithmDataType& externalData ) 
+00057                 : algorithm( new Algorithm< AlgorithmType, AlgorithmDataType >( externalAlgorithm, externalData ) ) {
+00058 
+00059         }
+00060 
+00061         ~peoParallelAlgorithmWrapper() {
+00062 
+00063                 delete algorithm;
+00064         }
+00065 
+00066         void run() { algorithm->operator()(); }
+00067 
+00068 
+00069 private:
+00070 
+00071         struct AbstractAlgorithm {
+00072 
+00073                 // virtual destructor as we will be using inheritance and polymorphism
+00074                 virtual ~AbstractAlgorithm() { }
+00075 
+00076                 // operator to be called for executing the algorithm
+00077                 virtual void operator()() { } 
+00078         };
+00079 
+00080 
+00081         template< typename AlgorithmType, typename AlgorithmDataType > struct Algorithm : public AbstractAlgorithm {
+00082 
+00083                 Algorithm( AlgorithmType& externalAlgorithm, AlgorithmDataType& externalData ) 
+00084                         : algorithm( externalAlgorithm ), algorithmData( externalData ) {
+00085 
+00086                 }
+00087 
+00088                 virtual void operator()() { algorithm( algorithmData ); } 
+00089 
+00090                 AlgorithmType& algorithm;
+00091                 AlgorithmDataType& algorithmData;
+00092         };
+00093 
+00094 
+00095         template< typename AlgorithmType > struct Algorithm< AlgorithmType, void >  : public AbstractAlgorithm {
+00096 
+00097                 Algorithm( AlgorithmType& externalAlgorithm ) : algorithm( externalAlgorithm ) {
+00098 
+00099                 }
+00100 
+00101                 virtual void operator()() { algorithm(); } 
+00102 
+00103                 AlgorithmType& algorithm;
+00104         };
+00105 
+00106 
+00107 private:
+00108 
+00109         AbstractAlgorithm* algorithm;
+00110 };
+00111 
+00112 
+00113 #endif
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peoPopEval_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peoPopEval_8h-source.html new file mode 100644 index 000000000..5a841add6 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peoPopEval_8h-source.html @@ -0,0 +1,80 @@ + + +ParadisEO-PEOMovingObjects: peoPopEval.h Source File + + + + +
+
+

peoPopEval.h

00001 /* 
+00002 * <peoPopEval.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef __peoPopEval_h
+00038 #define __peoPopEval_h
+00039 
+00040 #include "core/service.h"
+00041 
+00043 
+00047 template< class EOT > class peoPopEval : public Service {
+00048 
+00049 public:
+00050 
+00052         virtual void operator()( eoPop< EOT >& __pop ) = 0;
+00053 };
+00054 
+00055 
+00056 #endif
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peoSeqPopEval_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peoSeqPopEval_8h-source.html new file mode 100644 index 000000000..02a67d54a --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peoSeqPopEval_8h-source.html @@ -0,0 +1,100 @@ + + +ParadisEO-PEOMovingObjects: peoSeqPopEval.h Source File + + + + +
+
+

peoSeqPopEval.h

00001 /* 
+00002 * <peoSeqPopEval.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef __peoSeqPopEval_h
+00038 #define __peoSeqPopEval_h
+00039 
+00040 #include <eoEvalFunc.h>
+00041 
+00042 #include "peoPopEval.h"
+00043 
+00045 
+00049 template< class EOT > class peoSeqPopEval : public peoPopEval< EOT > {
+00050 
+00051 public:
+00052 
+00056         peoSeqPopEval( eoEvalFunc< EOT >& __eval );
+00057 
+00061         void operator()( eoPop< EOT >& __pop );
+00062 
+00063 private:
+00064 
+00065         eoEvalFunc< EOT >& eval;
+00066 };
+00067 
+00068 
+00069 template< class EOT > peoSeqPopEval< EOT > :: peoSeqPopEval( eoEvalFunc< EOT >& __eval ) : eval( __eval ) {
+00070 
+00071 }
+00072 
+00073 
+00074 template< class EOT > void peoSeqPopEval< EOT > :: operator()( eoPop< EOT >& __pop ) {
+00075 
+00076         for ( unsigned i = 0; i < __pop.size(); i++ )
+00077                 eval( __pop[i] );
+00078 }
+00079 
+00080 
+00081 #endif
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peoSeqTransform_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peoSeqTransform_8h-source.html new file mode 100644 index 000000000..ba1ffcf5d --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peoSeqTransform_8h-source.html @@ -0,0 +1,108 @@ + + +ParadisEO-PEOMovingObjects: peoSeqTransform.h Source File + + + + +
+
+

peoSeqTransform.h

00001 /* 
+00002 * <peoSeqTransform.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef __peoSeqTransform_h
+00038 #define __peoSeqTransform_h
+00039 
+00040 #include "peoTransform.h"
+00041 
+00042 
+00044 
+00048 template< class EOT > class peoSeqTransform : public peoTransform< EOT > {
+00049 
+00050 public:
+00051 
+00055         peoSeqTransform( eoTransform< EOT >& __trans );
+00056         
+00060         void operator()( eoPop< EOT >& __pop );
+00061         
+00063         virtual void packData() { }
+00064 
+00066         virtual void unpackData() { }
+00067         
+00069         virtual void execute() { }
+00070         
+00072         virtual void packResult() { }
+00073 
+00075         virtual void unpackResult() { }
+00076 
+00077 private:
+00078 
+00079         eoTransform< EOT >& trans;
+00080 };
+00081 
+00082 
+00083 template< class EOT > peoSeqTransform< EOT > :: peoSeqTransform( eoTransform< EOT >& __trans ) : trans( __trans ) {
+00084 
+00085 }
+00086 
+00087 
+00088 template< class EOT > void peoSeqTransform< EOT > :: operator()( eoPop< EOT >& __pop ) {
+00089 
+00090         trans( __pop );
+00091 }
+00092 
+00093 
+00094 #endif
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peoSyncIslandMig_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peoSyncIslandMig_8h-source.html new file mode 100644 index 000000000..fe6024a01 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peoSyncIslandMig_8h-source.html @@ -0,0 +1,245 @@ + + +ParadisEO-PEOMovingObjects: peoSyncIslandMig.h Source File + + + + +
+
+

peoSyncIslandMig.h

00001 /* 
+00002 * <peoSyncIslandMig.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef __peoSyncIslandMig_h
+00038 #define __peoSyncIslandMig_h
+00039 
+00040 
+00041 #include <queue>
+00042 #include <cassert>
+00043 
+00044 #include <eoPeriodicContinue.h>
+00045 
+00046 #include <utils/eoUpdater.h>
+00047 
+00048 #include <eoContinue.h>
+00049 #include <eoSelect.h>
+00050 #include <eoReplacement.h>
+00051 #include <eoPop.h>
+00052 
+00053 #include "core/topology.h"
+00054 #include "core/thread.h"
+00055 #include "core/eoPop_comm.h"
+00056 #include "core/peo_debug.h"
+00057 
+00058 
+00060 
+00142 template< class EOT > class peoSyncIslandMig : public Cooperative, public eoUpdater {
+00143 
+00144 public:
+00145 
+00155         peoSyncIslandMig(
+00156                                 unsigned __frequency,
+00157                                 eoSelect< EOT >& __select,
+00158                                 eoReplacement< EOT >& __replace,
+00159                                 Topology& __topology,
+00160                                 eoPop< EOT >& __source,
+00161                                 eoPop< EOT >& __destination
+00162         );
+00163 
+00168         void operator()();
+00169 
+00171         void pack();
+00173         void unpack();
+00174 
+00176         void notifySending();
+00177 
+00178 
+00179 private:
+00180 
+00181         void emigrate();
+00182         void immigrate();
+00183 
+00184 
+00185 private:
+00186 
+00187         eoPeriodicContinue< EOT > cont;
+00188         eoSelect< EOT >& select;        // selection strategy
+00189         eoReplacement< EOT >& replace;  // replacement strategy
+00190         Topology& topology;             // neighboring topology
+00191 
+00192         // source and target populations
+00193         eoPop< EOT >& source;
+00194         eoPop< EOT >& destination;
+00195 
+00196         // immigrants & emigrants in the queue
+00197         std :: queue< eoPop< EOT > > imm;
+00198         std :: queue< eoPop< EOT > > em;
+00199 
+00200         std :: queue< Cooperative* > coop_em;
+00201 
+00202         sem_t sync;
+00203 };
+00204 
+00205 
+00206 template< class EOT > peoSyncIslandMig< EOT > :: peoSyncIslandMig(
+00207 
+00208                 unsigned __frequency,
+00209                 eoSelect< EOT >& __select,
+00210                 eoReplacement< EOT >& __replace,
+00211                 Topology& __topology,
+00212                 eoPop< EOT >& __source,
+00213                 eoPop< EOT >& __destination
+00214 
+00215         ) : cont( __frequency ), select( __select ), replace( __replace ), topology( __topology ), source( __source ), destination( __destination ) 
+00216 {
+00217 
+00218         __topology.add( *this );
+00219         sem_init( &sync, 0, 0 );
+00220 }
+00221 
+00222 
+00223 template< class EOT > void peoSyncIslandMig< EOT > :: pack() {
+00224 
+00225         lock(); {
+00226 
+00227 		 :: pack( coop_em.front()->getKey() );
+00228 		 :: pack( em.front() );
+00229                 coop_em.pop();
+00230                 em.pop();
+00231         }
+00232         unlock();
+00233 }
+00234 
+00235 
+00236 template< class EOT > void peoSyncIslandMig< EOT > :: unpack() {
+00237 
+00238         lock(); {
+00239 
+00240                 eoPop< EOT > mig;
+00241 		 :: unpack( mig );
+00242                 imm.push( mig );
+00243         }
+00244         unlock();
+00245 
+00246         sem_post( &sync );
+00247 }
+00248 
+00249 
+00250 template< class EOT > void peoSyncIslandMig< EOT > :: emigrate() {
+00251 
+00252         std :: vector< Cooperative* > in, out;
+00253         topology.setNeighbors( this, in, out );
+00254         
+00255         for ( unsigned i = 0; i < out.size(); i ++ ) {
+00256 
+00257                 eoPop< EOT > mig;
+00258                 select( source, mig );
+00259                 em.push( mig );
+00260                 coop_em.push( out[ i ] );
+00261                 send( out[ i ] );
+00262                 printDebugMessage( "sending some emigrants." );
+00263         }
+00264 }
+00265 
+00266 
+00267 template< class EOT > void peoSyncIslandMig< EOT > :: immigrate() {
+00268 
+00269         lock(); {
+00270 
+00271                 assert( imm.size() );
+00272                 replace( destination, imm.front() ) ;
+00273                 imm.pop();
+00274                 printDebugMessage( "receiving some immigrants." );
+00275         }
+00276         unlock();
+00277 }
+00278 
+00279 
+00280 template< class EOT > void peoSyncIslandMig< EOT > :: operator()() {
+00281 
+00282         if ( !cont( source ) ) {
+00283         
+00284                 // sending emigrants
+00285                 emigrate();
+00286                 stop();
+00287 
+00288                 // synchronizing
+00289                 sem_wait( &sync );
+00290                 getOwner()->setActive();
+00291 
+00292                 // receiving immigrants
+00293                 immigrate();
+00294         }
+00295 }
+00296 
+00297 
+00298 template< class EOT > void peoSyncIslandMig< EOT > :: notifySending() {
+00299 
+00300         lock(); {
+00301 
+00302                 if ( imm.empty() ) {
+00303 
+00304                         printDebugMessage( "entering pasive mode\n" );
+00305                         getOwner()->setPassive();
+00306                 }
+00307         }
+00308         unlock();
+00309 
+00310         resume();
+00311 }
+00312 
+00313 
+00314 #endif
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peoSyncMultiStart_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peoSyncMultiStart_8h-source.html new file mode 100644 index 000000000..3193f103c --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peoSyncMultiStart_8h-source.html @@ -0,0 +1,209 @@ + + +ParadisEO-PEOMovingObjects: peoSyncMultiStart.h Source File + + + + +
+
+

peoSyncMultiStart.h

00001 /* 
+00002 * <peoSyncMultiStart.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef __peoSyncMultiStart_h
+00038 #define __peoSyncMultiStart_h
+00039 
+00040 #include <utils/eoUpdater.h>
+00041 #include <moAlgo.h>
+00042 
+00043 #include <eoSelect.h>
+00044 #include <eoReplacement.h>
+00045 #include <eoContinue.h>
+00046 
+00047 #include "core/service.h"
+00048 #include "core/messaging.h"
+00049 #include "core/peo_debug.h"
+00050 
+00051 
+00052 extern int getNodeRank();
+00053 
+00054 
+00056 
+00064 template< class EOT > class peoSyncMultiStart : public Service, public eoUpdater {
+00065 
+00066 public:
+00067 
+00075         peoSyncMultiStart( 
+00076 
+00077                                 eoContinue< EOT >& __cont,
+00078                                 eoSelect< EOT >& __select,
+00079                                 eoReplacement< EOT >& __replace,
+00080                                 moAlgo< EOT >& __ls, 
+00081                                 eoPop< EOT >& __pop 
+00082                 );
+00083 
+00086         void operator()();
+00087 
+00090         void packData();
+00091 
+00094         void unpackData();
+00095 
+00098         void execute();
+00099 
+00102         void packResult();
+00103 
+00106         void unpackResult();
+00107 
+00110         void notifySendingData();
+00111 
+00114         void notifySendingAllResourceRequests();
+00115 
+00116 private:
+00117 
+00118         eoContinue< EOT >& cont;
+00119         eoSelect< EOT >& select;
+00120         eoReplacement< EOT >& replace;
+00121 
+00122         moAlgo< EOT >& ls;
+00123 
+00124         eoPop< EOT >& pop;
+00125         eoPop< EOT > sel;
+00126         eoPop< EOT > impr_sel;
+00127 
+00128         EOT sol;
+00129         unsigned idx;
+00130         unsigned num_term;
+00131 };
+00132 
+00133 
+00134 template< class EOT > peoSyncMultiStart< EOT > :: peoSyncMultiStart( 
+00135 
+00136                                 eoContinue < EOT >& __cont, 
+00137                                 eoSelect< EOT >& __select,
+00138                                 eoReplacement< EOT >& __replace, 
+00139                                 moAlgo < EOT >& __ls,
+00140                                 eoPop< EOT >& __pop 
+00141 
+00142                 ) : cont( __cont ), select( __select ), replace( __replace ), ls( __ls ), pop( __pop )
+00143 {
+00144 
+00145 }
+00146 
+00147 
+00148 template< class EOT > void peoSyncMultiStart< EOT > :: packData() {
+00149 
+00150          :: pack( sel[ idx++ ] );
+00151 }
+00152 
+00153 
+00154 template< class EOT > void peoSyncMultiStart< EOT > :: unpackData() {
+00155 
+00156         unpack( sol );
+00157 }
+00158 
+00159 
+00160 template< class EOT > void peoSyncMultiStart< EOT > :: execute() {
+00161 
+00162         ls( sol );
+00163 }
+00164 
+00165 
+00166 template< class EOT > void peoSyncMultiStart< EOT > :: packResult() {
+00167 
+00168         pack( sol );
+00169 }
+00170 
+00171 
+00172 template< class EOT > void peoSyncMultiStart< EOT > :: unpackResult() {
+00173 
+00174         unpack( sol );
+00175         impr_sel.push_back( sol );
+00176         num_term++;
+00177 
+00178         if ( num_term == sel.size() ) {
+00179 
+00180                 getOwner()->setActive();
+00181                 replace( pop, impr_sel );
+00182 
+00183                 printDebugMessage( "replacing the improved individuals in the population." );
+00184                 resume();
+00185         }
+00186 }
+00187 
+00188 
+00189 template< class EOT > void peoSyncMultiStart< EOT > :: operator()() {
+00190 
+00191         printDebugMessage( "performing the parallel multi-start hybridization." );
+00192         select( pop, sel );
+00193         impr_sel.clear();
+00194         idx = num_term = 0;
+00195         requestResourceRequest( sel.size() );
+00196         stop();
+00197 }
+00198 
+00199 
+00200 template< class EOT > void peoSyncMultiStart< EOT > :: notifySendingData() {
+00201 
+00202 }
+00203 
+00204 
+00205 template< class EOT > void peoSyncMultiStart< EOT > :: notifySendingAllResourceRequests() {
+00206 
+00207         getOwner()->setPassive();
+00208 }
+00209 
+00210 
+00211 #endif
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peoSynchronousMultiStart_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peoSynchronousMultiStart_8h-source.html new file mode 100644 index 000000000..683518196 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peoSynchronousMultiStart_8h-source.html @@ -0,0 +1,298 @@ + + +ParadisEO-PEOMovingObjects: peoSynchronousMultiStart.h Source File + + + + +
+
+

peoSynchronousMultiStart.h

00001 /* 
+00002 * <peoSynchronousMultiStart.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 #ifndef __peoSynchronousMultiStart_h
+00037 #define __peoSynchronousMultiStart_h
+00038 
+00039 #include <vector>
+00040 
+00041 #include "core/service.h"
+00042 #include "core/messaging.h"
+00043 
+00044 
+00045 template < typename EntityType > class peoSynchronousMultiStart : public Service {
+00046 
+00047 public:
+00048 
+00049         template < typename AlgorithmType > peoSynchronousMultiStart( AlgorithmType& externalAlgorithm ) { 
+00050 
+00051                 singularAlgorithm = new Algorithm< AlgorithmType >( externalAlgorithm );
+00052                 algorithms.push_back( singularAlgorithm );
+00053 
+00054                 aggregationFunction = new NoAggregationFunction();
+00055         }
+00056 
+00057         template < typename AlgorithmType, typename AggregationFunctionType > peoSynchronousMultiStart( std::vector< AlgorithmType* >& externalAlgorithms, AggregationFunctionType& externalAggregationFunction ) {
+00058 
+00059                 for ( unsigned int index = 0; index < externalAlgorithms; index++ ) {
+00060 
+00061                         algorithms.push_back( new Algorithm< AlgorithmType >( *externalAlgorithms[ index ] ) );
+00062                 }
+00063 
+00064                 aggregationFunction = new Algorithm< AggregationFunctionType >( externalAggregationFunction );
+00065         }
+00066 
+00067 
+00068         ~peoSynchronousMultiStart() {
+00069 
+00070                 for ( unsigned int index = 0; index < data.size(); index++ ) delete data[ index ];
+00071                 for ( unsigned int index = 0; index < algorithms.size(); index++ ) delete algorithms[ index ];
+00072 
+00073                 delete aggregationFunction;
+00074         }
+00075 
+00076 
+00077         template < typename Type > void operator()( Type& externalData ) {
+00078 
+00079                 for ( typename Type::iterator externalDataIterator = externalData.begin(); externalDataIterator != externalData.end(); externalDataIterator++ ) {
+00080 
+00081                         data.push_back( new DataType< EntityType >( *externalDataIterator ) );
+00082                 }
+00083                 
+00084                 functionIndex = dataIndex = idx = num_term = 0;
+00085                 requestResourceRequest( data.size() * algorithms.size() );
+00086                 stop();
+00087         }
+00088 
+00089 
+00090         template < typename Type > void operator()( const Type& externalDataBegin, const Type& externalDataEnd ) {
+00091 
+00092                 for ( Type externalDataIterator = externalDataBegin; externalDataIterator != externalDataEnd; externalDataIterator++ ) {
+00093 
+00094                         data.push_back( new DataType< EntityType >( *externalDataIterator ) );
+00095                 }
+00096                 
+00097                 functionIndex = dataIndex = idx = num_term = 0;
+00098                 requestResourceRequest( data.size() * algorithms.size() );
+00099                 stop();
+00100         }
+00101 
+00102 
+00103         void packData();
+00104 
+00105         void unpackData();
+00106 
+00107         void execute();
+00108 
+00109         void packResult();
+00110 
+00111         void unpackResult();
+00112 
+00113         void notifySendingData();
+00114 
+00115         void notifySendingAllResourceRequests();
+00116 
+00117 
+00118 private:
+00119 
+00120         template < typename Type > struct DataType;
+00121 
+00122         struct AbstractDataType {
+00123 
+00124                 virtual ~AbstractDataType() { }
+00125 
+00126                 template < typename Type > operator Type& () {
+00127 
+00128                         return ( dynamic_cast< DataType< Type >& >( *this ) ).data;
+00129                 }
+00130         };
+00131 
+00132         template < typename Type > struct DataType : public AbstractDataType {
+00133 
+00134                 DataType( Type& externalData ) : data( externalData ) { }
+00135 
+00136                 Type& data;
+00137         };
+00138 
+00139         struct AbstractAlgorithm {
+00140 
+00141                 virtual ~AbstractAlgorithm() { }
+00142 
+00143                 virtual void operator()( AbstractDataType& dataTypeInstance ) {}
+00144         };
+00145 
+00146         template < typename AlgorithmType > struct Algorithm : public AbstractAlgorithm {
+00147 
+00148                 Algorithm( AlgorithmType& externalAlgorithm ) : algorithm( externalAlgorithm ) { }
+00149 
+00150                 void operator()( AbstractDataType& dataTypeInstance ) { algorithm( dataTypeInstance ); }
+00151 
+00152                 AlgorithmType& algorithm;
+00153         }; 
+00154 
+00155 
+00156 
+00157         struct AbstractAggregationAlgorithm {
+00158 
+00159                 virtual ~AbstractAggregationAlgorithm() { }
+00160 
+00161                 virtual void operator()( AbstractDataType& dataTypeInstanceA, AbstractDataType& dataTypeInstanceB ) {};
+00162         };
+00163 
+00164         template < typename AggregationAlgorithmType > struct AggregationAlgorithm : public AbstractAggregationAlgorithm {
+00165 
+00166                 AggregationAlgorithm( AggregationAlgorithmType& externalAggregationAlgorithm ) : aggregationAlgorithm( externalAggregationAlgorithm ) { }
+00167 
+00168                 void operator()( AbstractDataType& dataTypeInstanceA, AbstractDataType& dataTypeInstanceB ) {
+00169 
+00170                         aggregationAlgorithm( dataTypeInstanceA, dataTypeInstanceB );
+00171                 }
+00172 
+00173                 AggregationAlgorithmType& aggregationAlgorithm;
+00174         };
+00175 
+00176         struct NoAggregationFunction : public AbstractAggregationAlgorithm {
+00177 
+00178                 void operator()( AbstractDataType& dataTypeInstanceA, AbstractDataType& dataTypeInstanceB ) {
+00179 
+00180                         static_cast< EntityType& >( dataTypeInstanceA ) = static_cast< EntityType& >( dataTypeInstanceB );
+00181                 }
+00182         };
+00183 
+00184 
+00185 
+00186         AbstractAlgorithm* singularAlgorithm;
+00187 
+00188         std::vector< AbstractAlgorithm* > algorithms;
+00189         AbstractAggregationAlgorithm* aggregationFunction;
+00190 
+00191 
+00192         EntityType entityTypeInstance;
+00193         std::vector< AbstractDataType* > data;
+00194 
+00195         unsigned idx;
+00196         unsigned num_term;
+00197         unsigned dataIndex;
+00198         unsigned functionIndex;
+00199 };
+00200 
+00201 
+00202 template < typename EntityType > void peoSynchronousMultiStart< EntityType >::packData() {
+00203 
+00204         ::pack( functionIndex );
+00205         ::pack( idx );
+00206         ::pack( ( EntityType& ) *data[ idx++ ]  );
+00207 
+00208         // done with functionIndex for the entire data set - moving to another
+00209         //  function/algorithm starting all over with the entire data set ( idx is set to 0 )
+00210         if ( idx == data.size() ) {
+00211 
+00212                 ++functionIndex; idx = 0;
+00213         }
+00214 }
+00215 
+00216 template < typename EntityType > void peoSynchronousMultiStart< EntityType >::unpackData() {
+00217 
+00218         ::unpack( functionIndex );
+00219         ::unpack( dataIndex );
+00220         ::unpack( entityTypeInstance );
+00221 }
+00222 
+00223 template < typename EntityType > void peoSynchronousMultiStart< EntityType >::execute() {
+00224 
+00225         // wrapping the unpacked data - the definition of an abstract algorithm imposes
+00226         // that its internal function operator acts only on abstract data types
+00227         AbstractDataType* entityWrapper = new DataType< EntityType >( entityTypeInstance );
+00228         algorithms[ functionIndex ]->operator()( *entityWrapper );
+00229 
+00230         delete entityWrapper;
+00231 }
+00232 
+00233 template < typename EntityType > void peoSynchronousMultiStart< EntityType >::packResult() {
+00234 
+00235         ::pack( dataIndex );
+00236         ::pack( entityTypeInstance );
+00237 }
+00238 
+00239 template < typename EntityType > void peoSynchronousMultiStart< EntityType >::unpackResult() {
+00240 
+00241         ::unpack( dataIndex );
+00242         ::unpack( entityTypeInstance );
+00243 
+00244         // wrapping the unpacked data - the definition of an abstract algorithm imposes
+00245         // that its internal function operator acts only on abstract data types
+00246         AbstractDataType* entityWrapper = new DataType< EntityType >( entityTypeInstance );
+00247         aggregationFunction->operator()( *data[ dataIndex ], *entityWrapper );
+00248         delete entityWrapper;
+00249 
+00250         num_term++;
+00251 
+00252         if ( num_term == data.size() * algorithms.size() ) {
+00253 
+00254                 getOwner()->setActive();
+00255                 resume();
+00256         }
+00257 }
+00258 
+00259 template < typename EntityType > void peoSynchronousMultiStart< EntityType >::notifySendingData() {
+00260 
+00261 }
+00262 
+00263 template < typename EntityType > void peoSynchronousMultiStart< EntityType >::notifySendingAllResourceRequests() {
+00264 
+00265         getOwner()->setPassive();
+00266 }
+00267 
+00268 
+00269 #endif
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peoTransform_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peoTransform_8h-source.html new file mode 100644 index 000000000..e658e6ce8 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peoTransform_8h-source.html @@ -0,0 +1,79 @@ + + +ParadisEO-PEOMovingObjects: peoTransform.h Source File + + + + +
+
+

peoTransform.h

00001 /* 
+00002 * <peoTransform.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef __peoTransform_h
+00038 #define __peoTransform_h
+00039 
+00040 #include <eoTransform.h>
+00041 
+00042 #include "core/service.h"
+00043 
+00045 
+00048 template< class EOT > class peoTransform : public Service, public eoTransform< EOT > {
+00049 
+00050 };
+00051 
+00052 
+00053 #endif
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peo_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peo_8h-source.html new file mode 100644 index 000000000..698147329 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peo_8h-source.html @@ -0,0 +1,96 @@ + + +ParadisEO-PEOMovingObjects: peo.h Source File + + + + +
+
+

peo.h

00001 /* 
+00002 * <peo.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef __peo_h_
+00038 #define __peo_h_
+00039 
+00040 #include <eo>
+00041 #include <mo>
+00042 
+00043 
+00319 
+00320 #include "core/peo_init.h"
+00321 #include "core/peo_run.h"
+00322 #include "core/peo_fin.h"
+00323 
+00324 #include "core/eoVector_comm.h"
+00325 
+00326 #include "peoEA.h"
+00327 
+00328 /* Parallel steps of the E.A. */
+00329 #include "peoSeqTransform.h"
+00330 #include "peoParaSGATransform.h"
+00331 #include "peoSeqPopEval.h"
+00332 #include "peoParaPopEval.h"
+00333 
+00334 /* Cooperative island model */
+00335 #include "core/ring_topo.h"
+00336 #include "peoAsyncIslandMig.h"
+00337 #include "peoSyncIslandMig.h"
+00338 
+00339 /* Synchronous multi-start model */
+00340 #include "peoSyncMultiStart.h"
+00341 
+00342 #endif
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peo__debug_8cpp-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peo__debug_8cpp-source.html new file mode 100644 index 000000000..80f5471a8 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peo__debug_8cpp-source.html @@ -0,0 +1,134 @@ + + +ParadisEO-PEOMovingObjects: peo_debug.cpp Source File + + + + +
+
+

peo_debug.cpp

00001 /* 
+00002 * <peo_debug.cpp>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #include "peo_debug.h"
+00038 
+00039 #include <stdio.h>
+00040 #include <time.h>
+00041 #include <unistd.h>
+00042 #include <string.h>
+00043 #include <sys/types.h>
+00044 #include <sys/stat.h>
+00045 #include <vector>
+00046 
+00047 #include "peo_debug.h"
+00048 
+00049 #define MAX_BUFF_SIZE 1000
+00050 
+00051 #define DEBUG_PATH "./log/"
+00052 
+00053 static bool debug = true;
+00054 
+00055 static char host [MAX_BUFF_SIZE];
+00056 
+00057 std :: vector <FILE *> files;
+00058 
+00059 void setDebugMode (bool __dbg) {
+00060 
+00061   debug = __dbg;
+00062   gethostname (host, MAX_BUFF_SIZE);
+00063 }
+00064 
+00065 extern int getNodeRank ();
+00066 
+00067 void initDebugging () {
+00068   
+00069   mkdir (DEBUG_PATH, S_IRWXU);
+00070   //  files.push_back (stdout);
+00071   char buff [MAX_BUFF_SIZE];
+00072   sprintf (buff, "%s/%d", DEBUG_PATH, getNodeRank ());
+00073   files.push_back (fopen (buff, "w"));
+00074 }
+00075 
+00076 void endDebugging () {
+00077 
+00078   for (unsigned i = 0; i < files.size (); i ++)
+00079     if (files [i] != stdout)
+00080       fclose (files [i]);
+00081 }
+00082 
+00083 void printDebugMessage (const char * __mess) {
+00084 
+00085   if (debug) {
+00086 
+00087     char buff [MAX_BUFF_SIZE];
+00088     time_t t = time (0);
+00089 
+00090     /* Date */
+00091     sprintf (buff, "[%s][%s: ", host, ctime (& t));
+00092     * strchr (buff, '\n') = ']';
+00093     for (unsigned i = 0; i < files.size (); i ++)
+00094       fprintf (files [i], buff);
+00095 
+00096     /* Message */
+00097     sprintf (buff, "%s", __mess);
+00098     
+00099     for (unsigned i = 0; i < files.size (); i ++) {
+00100       fputs (buff, files [i]);
+00101       fputs ("\n", files [i]);
+00102       fflush (files [i]);
+00103     }
+00104   }
+00105 }
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peo__debug_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peo__debug_8h-source.html new file mode 100644 index 000000000..aa8049514 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peo__debug_8h-source.html @@ -0,0 +1,79 @@ + + +ParadisEO-PEOMovingObjects: peo_debug.h Source File + + + + +
+
+

peo_debug.h

00001 /* 
+00002 * <peo_debug.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef __peo_debug_h
+00038 #define __peo_debug_h
+00039 
+00040 extern void initDebugging ();
+00041 
+00042 extern void endDebugging ();
+00043 
+00044 extern void setDebugMode (bool __dbg = true); /* (Des)activating the Debugging mode */
+00045 
+00046 extern void printDebugMessage (const char * __mess); /* Print a new message both on the
+00047                                                         standard output and a target
+00048                                                         text-file in a subdirectory) */
+00049 
+00050 #endif
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peo__fin_8cpp-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peo__fin_8cpp-source.html new file mode 100644 index 000000000..59534a903 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peo__fin_8cpp-source.html @@ -0,0 +1,81 @@ + + +ParadisEO-PEOMovingObjects: peo_fin.cpp Source File + + + + +
+
+

peo_fin.cpp

00001 /* 
+00002 * <peo_fin.cpp>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #include "peo_fin.h"
+00038 #include "peo_debug.h"
+00039 #include "runner.h"
+00040 #include "rmc.h"
+00041 
+00042 void peo :: finalize () {
+00043 
+00044   printDebugMessage ("waiting for the termination of all threads");
+00045 
+00046   joinRunners ();
+00047 
+00048   finalizeRMC ();
+00049 
+00050   printDebugMessage ("this is the end");
+00051   endDebugging ();
+00052 }
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peo__fin_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peo__fin_8h-source.html new file mode 100644 index 000000000..3b51acf47 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peo__fin_8h-source.html @@ -0,0 +1,74 @@ + + +ParadisEO-PEOMovingObjects: peo_fin.h Source File + + + + +
+
+

peo_fin.h

00001 /* 
+00002 * <peo_fin.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef __peo_finalize_h
+00038 #define __peo_finalize_h
+00039 
+00040 namespace peo {
+00041   
+00042   extern void finalize ();
+00043 }
+00044 
+00045 #endif
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peo__init_8cpp-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peo__init_8cpp-source.html new file mode 100644 index 000000000..aa826f960 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peo__init_8cpp-source.html @@ -0,0 +1,94 @@ + + +ParadisEO-PEOMovingObjects: peo_init.cpp Source File + + + + +
+
+

peo_init.cpp

00001 /* 
+00002 * <peo_init.cpp>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #include <stdio.h>
+00038 
+00039 #include "peo_init.h"
+00040 #include "peo_param.h"
+00041 #include "peo_debug.h"
+00042 #include "rmc.h"
+00043 
+00044 namespace peo {
+00045 
+00046   int * argc;
+00047   
+00048   char * * * argv;
+00049 
+00050   void init (int & __argc, char * * & __argv) {
+00051 
+00052     argc = & __argc;
+00053     
+00054     argv = & __argv;
+00055     
+00056     /* Initializing the the Resource Management and Communication */
+00057     initRMC (__argc, __argv);
+00058 
+00059     /* Loading the common parameters */ 
+00060     loadParameters (__argc, __argv);
+00061     
+00062     /* */
+00063     initDebugging ();
+00064   }
+00065 }
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peo__init_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peo__init_8h-source.html new file mode 100644 index 000000000..23a8d401f --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peo__init_8h-source.html @@ -0,0 +1,78 @@ + + +ParadisEO-PEOMovingObjects: peo_init.h Source File + + + + +
+
+

peo_init.h

00001 /* 
+00002 * <peo_init.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef __peo_init_h
+00038 #define __peo_init_h
+00039 
+00040 namespace peo {
+00041 
+00042   extern int * argc;
+00043   
+00044   extern char * * * argv;
+00045   
+00046   extern void init (int & __argc, char * * & __argv);
+00047 }
+00048 
+00049 #endif
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peo__param_8cpp-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peo__param_8cpp-source.html new file mode 100644 index 000000000..e96644b1a --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peo__param_8cpp-source.html @@ -0,0 +1,82 @@ + + +ParadisEO-PEOMovingObjects: peo_param.cpp Source File + + + + +
+
+

peo_param.cpp

00001 /* 
+00002 * <peo_param.cpp>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #include <utils/eoParser.h>
+00038 
+00039 #include "peo_param.h"
+00040 #include "peo_debug.h"
+00041 
+00042 
+00043 
+00044 void peo :: loadParameters (int & __argc, char * * & __argv) {
+00045 
+00046   eoParser parser (__argc, __argv);
+00047 
+00048   /* Debug */
+00049   eoValueParam <std :: string> debug_param ("false", "debug", "?");
+00050   parser.processParam (debug_param);
+00051   if (debug_param.value () == "true")
+00052     setDebugMode ();
+00053 }
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peo__param_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peo__param_8h-source.html new file mode 100644 index 000000000..c8adfbebb --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peo__param_8h-source.html @@ -0,0 +1,74 @@ + + +ParadisEO-PEOMovingObjects: peo_param.h Source File + + + + +
+
+

peo_param.h

00001 /* 
+00002 * <peo_param.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef __peo_param_h
+00038 #define __peo_param_h
+00039 
+00040 namespace peo {
+00041   
+00042   extern void loadParameters (int & __argc, char * * & __argv);
+00043 }
+00044 
+00045 #endif
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peo__run_8cpp-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peo__run_8cpp-source.html new file mode 100644 index 000000000..aeac16030 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peo__run_8cpp-source.html @@ -0,0 +1,76 @@ + + +ParadisEO-PEOMovingObjects: peo_run.cpp Source File + + + + +
+
+

peo_run.cpp

00001 /* 
+00002 * <peo_run.cpp>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #include "peo_init.h"
+00038 #include "peo_run.h"
+00039 #include "rmc.h"
+00040 #include "runner.h"
+00041 
+00042 void peo :: run () {
+00043   
+00044   startRunners ();
+00045 
+00046   runRMC ();
+00047 }
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peo__run_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peo__run_8h-source.html new file mode 100644 index 000000000..d694de425 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/peo__run_8h-source.html @@ -0,0 +1,74 @@ + + +ParadisEO-PEOMovingObjects: peo_run.h Source File + + + + +
+
+

peo_run.h

00001 /* 
+00002 * <peo_run.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef __peo_run_h
+00038 #define __peo_run_h
+00039 
+00040 namespace peo {
+00041   
+00042   extern void run ();
+00043 }
+00044 
+00045 #endif
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/reac__thread_8cpp-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/reac__thread_8cpp-source.html new file mode 100644 index 000000000..8f4efaaab --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/reac__thread_8cpp-source.html @@ -0,0 +1,93 @@ + + +ParadisEO-PEOMovingObjects: reac_thread.cpp Source File + + + + +
+
+

reac_thread.cpp

00001 /* 
+00002 * <reac_thread.cpp>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #include "reac_thread.h"
+00038 
+00039 static bool the_end = false;
+00040 
+00041 static std :: vector <ReactiveThread *> reac_threads;
+00042 
+00043 ReactiveThread :: ReactiveThread () {
+00044 
+00045   reac_threads.push_back (this);
+00046   sem_init (& sem, 0, 0);
+00047 }
+00048 
+00049 void ReactiveThread :: sleep () {
+00050 
+00051   sem_wait (& sem);     
+00052 }
+00053 
+00054 void ReactiveThread :: wakeUp () {
+00055 
+00056   sem_post (& sem);     
+00057 }
+00058 
+00059 void stopReactiveThreads () {
+00060 
+00061   the_end = true;
+00062   for (unsigned i = 0; i < reac_threads.size (); i ++)
+00063     reac_threads [i] -> wakeUp  ();     
+00064 }
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/reac__thread_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/reac__thread_8h-source.html new file mode 100644 index 000000000..d7b48b719 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/reac__thread_8h-source.html @@ -0,0 +1,92 @@ + + +ParadisEO-PEOMovingObjects: reac_thread.h Source File + + + + +
+
+

reac_thread.h

00001 /* 
+00002 * <reac_thread.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef REAC_THREAD_H_
+00038 #define REAC_THREAD_H_
+00039 
+00040 #include <semaphore.h>
+00041 
+00042 #include "thread.h"
+00043 
+00044 class ReactiveThread : public Thread {
+00045         
+00046 public:
+00047 
+00048   /* Ctor */
+00049   ReactiveThread ();
+00050 
+00051   void sleep ();
+00052   
+00053   void wakeUp ();
+00054     
+00055 private:
+00056 
+00057   sem_t sem;
+00058    
+00059 };
+00060 
+00061 extern void stopReactiveThreads ();
+00062 
+00063 #endif /*THREAD_H_*/
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/recv_8cpp-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/recv_8cpp-source.html new file mode 100644 index 000000000..4062ac302 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/recv_8cpp-source.html @@ -0,0 +1,169 @@ + + +ParadisEO-PEOMovingObjects: recv.cpp Source File + + + + +
+
+

recv.cpp

00001 /* 
+00002 * <recv.cpp>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #include "comm.h"
+00038 #include "tags.h"
+00039 #include "worker.h"
+00040 #include "scheduler.h"
+00041 #include "mess.h"
+00042 #include "node.h"
+00043 #include "../../core/runner.h"
+00044 #include "../../core/cooperative.h"
+00045 #include "../../core/peo_debug.h"
+00046 
+00047 void receiveMessages () {
+00048 
+00049   cleanBuffers ();
+00050     
+00051   do {
+00052 
+00053     if (! atLeastOneActiveThread ()) {
+00054       //      printDebugMessage ("debut wait");
+00055       waitMessage ();
+00056       //printDebugMessage ("fin wait");
+00057     }
+00058     
+00059     int src, tag;
+00060 
+00061     while (probeMessage (src, tag)) {
+00062       
+00063       receiveMessage (src, tag);
+00064       initMessage ();
+00065       /*
+00066       char b [1000];
+00067       sprintf (b, "traitement recv %d\n", tag);
+00068       printDebugMessage (b);
+00069       */
+00070       
+00071       switch (tag) {
+00072         
+00073       case RUNNER_STOP_TAG:     
+00074         unpackTerminationOfRunner ();   
+00075         wakeUpCommunicator ();
+00076         break;
+00077       
+00078       case COOP_TAG:
+00079         //      printDebugMessage ("reception de message de cooperation");
+00080         COOP_ID coop_id;
+00081         unpack (coop_id);
+00082         getCooperative (coop_id) -> unpack ();
+00083         break;
+00084 
+00085       case SCHED_REQUEST_TAG:   
+00086         unpackResourceRequest ();
+00087         break;
+00088         
+00089       case SCHED_RESULT_TAG:
+00090         {         
+00091           /* Unpacking the resource */
+00092           SERVICE_ID serv_id;
+00093           unpack (serv_id);
+00094           Service * serv = getService (serv_id);
+00095           int dest;
+00096           unpack (dest);
+00097           WORKER_ID worker_id;
+00098           unpack (worker_id);
+00099 
+00100           /* Going back ... */
+00101           initMessage ();
+00102           pack (worker_id);
+00103           pack (serv_id); 
+00104           serv -> packData ();
+00105           serv -> notifySendingData ();
+00106           sendMessage (dest, TASK_DATA_TAG);
+00107           break;
+00108         }
+00109 
+00110       case TASK_DATA_TAG:
+00111       {
+00112         WORKER_ID worker_id;
+00113         unpack (worker_id);             
+00114         Worker * worker = getWorker (worker_id);
+00115         worker -> setSource (src);
+00116         worker -> unpackData ();
+00117         worker -> wakeUp ();
+00118         break; 
+00119       }
+00120       
+00121       case TASK_RESULT_TAG:
+00122         {
+00123           SERVICE_ID serv_id;
+00124           unpack (serv_id);
+00125           Service * serv = getService (serv_id);
+00126           serv -> unpackResult ();
+00127           break;
+00128         }
+00129 
+00130       case TASK_DONE_TAG:
+00131         unpackTaskDone ();
+00132         break;
+00133 
+00134       default:
+00135         ;
+00136       };
+00137     }
+00138         
+00139   } while (! atLeastOneActiveThread () && atLeastOneActiveRunner () /*&& ! allResourcesFree ()*/);
+00140 }
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/recv_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/recv_8h-source.html new file mode 100644 index 000000000..fa8af7233 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/recv_8h-source.html @@ -0,0 +1,71 @@ + + +ParadisEO-PEOMovingObjects: recv.h Source File + + + + +
+
+

recv.h

00001 /* 
+00002 * <recv.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef __recv_h
+00038 #define __recv_h
+00039 
+00040 extern void receiveMessages ();
+00041 
+00042 #endif
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/ring__topo_8cpp-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/ring__topo_8cpp-source.html new file mode 100644 index 000000000..f6b67ce85 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/ring__topo_8cpp-source.html @@ -0,0 +1,82 @@ + + +ParadisEO-PEOMovingObjects: ring_topo.cpp Source File + + + + +
+
+

ring_topo.cpp

00001 /* 
+00002 * <ring_topo.cpp>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #include "ring_topo.h"
+00038 
+00039 void RingTopology :: setNeighbors (Cooperative * __mig,
+00040                                    std :: vector <Cooperative *> & __from,
+00041                                    std :: vector <Cooperative *> & __to) {
+00042   __from.clear () ;
+00043   __to.clear () ;
+00044 
+00045     int len = mig.size () ;
+00046     
+00047     for (int i = 0 ; i < len ; i ++)      
+00048       if (mig [i] == __mig) {   
+00049         __from.push_back (mig [(i - 1 + len) % len]) ;
+00050         __to.push_back (mig [(i + 1) % len]) ;  
+00051         break;
+00052       }
+00053 }
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/ring__topo_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/ring__topo_8h-source.html new file mode 100644 index 000000000..2d19ad101 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/ring__topo_8h-source.html @@ -0,0 +1,81 @@ + + +ParadisEO-PEOMovingObjects: ring_topo.h Source File + + + + +
+
+

ring_topo.h

00001 /* 
+00002 * <ring_topo.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef __ring_topo_h
+00038 #define __ring_topo_h
+00039 
+00040 #include "topology.h"
+00041 
+00042 class RingTopology : public Topology {
+00043   
+00044 public :
+00045    
+00046   void setNeighbors (Cooperative * __mig,
+00047                      std :: vector <Cooperative *> & __from,
+00048                      std :: vector <Cooperative *> & __to);
+00049   
+00050 };
+00051 
+00052 #endif
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/rmc_2mpi_2runner_8cpp-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/rmc_2mpi_2runner_8cpp-source.html new file mode 100644 index 000000000..cf9389486 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/rmc_2mpi_2runner_8cpp-source.html @@ -0,0 +1,90 @@ + + +ParadisEO-PEOMovingObjects: runner.cpp Source File + + + + +
+
+

runner.cpp

00001 /* 
+00002 * <runner.cpp>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #include "../../core/messaging.h"
+00038 #include "../../core/runner.h"
+00039 #include "node.h"
+00040 #include "send.h"
+00041 #include "tags.h"
+00042 #include "schema.h"
+00043 
+00044 bool Runner :: isLocal () {
+00045 
+00046   for (unsigned i = 0; i < my_node -> id_run.size (); i ++)
+00047     if (my_node -> id_run [i] == id)
+00048       return true;
+00049   return false;
+00050 }
+00051 
+00052 void Runner :: packTermination () {
+00053 
+00054   pack (id);
+00055 }
+00056 
+00057 void Runner :: terminate () {
+00058 
+00059   sendToAll (this, RUNNER_STOP_TAG);     
+00060 }
+00061 
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/rmc_2mpi_2service_8cpp-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/rmc_2mpi_2service_8cpp-source.html new file mode 100644 index 000000000..d24a7dccb --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/rmc_2mpi_2service_8cpp-source.html @@ -0,0 +1,87 @@ + + +ParadisEO-PEOMovingObjects: service.cpp Source File + + + + +
+
+

service.cpp

00001 /* 
+00002 * <service.cpp>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #include "../../core/service.h"
+00038 #include "../../core/messaging.h"
+00039 #include "node.h"
+00040 #include "tags.h"
+00041 #include "send.h"
+00042 #include "scheduler.h"
+00043 
+00044 void Service :: requestResourceRequest (unsigned __how_many) {
+00045 
+00046   num_sent_rr = __how_many;
+00047   for (unsigned i = 0; i < __how_many; i ++)
+00048     send (this, my_node -> rk_sched, SCHED_REQUEST_TAG);
+00049 }
+00050 
+00051 void Service :: packResourceRequest () {
+00052 
+00053   SCHED_REQUEST req;
+00054   req.first = getNodeRank ();
+00055   req.second = getKey ();
+00056   //  printf ("demande de ressource pour %d\n", req.second);
+00057   :: pack (req);
+00058 }
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/rmc_8cpp-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/rmc_8cpp-source.html new file mode 100644 index 000000000..d12de1681 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/rmc_8cpp-source.html @@ -0,0 +1,103 @@ + + +ParadisEO-PEOMovingObjects: rmc.cpp Source File + + + + +
+
+

rmc.cpp

00001 /* 
+00002 * <rmc.cpp>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #include "send.h"
+00038 #include "worker.h"
+00039 #include "schema.h"
+00040 #include "comm.h"
+00041 #include "scheduler.h"
+00042 #include "../../core/peo_debug.h"
+00043 
+00044 static std :: vector <pthread_t *> ll_threads; /* Low level threads */
+00045 
+00046 void runRMC () {
+00047 
+00048   /* Worker(s) ? */
+00049   for (unsigned i = 0; i < my_node -> num_workers; i ++) 
+00050     addThread (new Worker, ll_threads);
+00051 
+00052   wakeUpCommunicator ();
+00053 }
+00054 
+00055 void initRMC (int & __argc, char * * & __argv) {
+00056 
+00057   /* Communication */
+00058   initCommunication ();
+00059   addThread (new Communicator (& __argc, & __argv), ll_threads);
+00060   waitNodeInitialization ();
+00061   initSending ();
+00062 
+00063   /* Scheduler */
+00064   if (isScheduleNode ())
+00065     initScheduler ();
+00066 
+00068 }
+00069 
+00070 void finalizeRMC () {
+00071 
+00072   printDebugMessage ("before join threads RMC");
+00073   joinThreads (ll_threads);
+00074   printDebugMessage ("after join threads RMC");
+00075 }
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/rmc_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/rmc_8h-source.html new file mode 100644 index 000000000..6e2d24667 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/rmc_8h-source.html @@ -0,0 +1,75 @@ + + +ParadisEO-PEOMovingObjects: rmc.h Source File + + + + +
+
+

rmc.h

00001 /* 
+00002 * <rmc.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef __rmc_h
+00038 #define __rmc_h
+00039 
+00040 extern void initRMC (int & __argc, char * * & __argv);
+00041 
+00042 extern void runRMC (); /* Resource Management and Communication */ 
+00043 
+00044 extern void finalizeRMC ();
+00045 
+00046 #endif
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/route_8cpp-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/route_8cpp-source.html new file mode 100644 index 000000000..9937479a9 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/route_8cpp-source.html @@ -0,0 +1,78 @@ + + +ParadisEO-PEOMovingObjects: route.cpp Source File + + + + +
+
+

route.cpp

00001 /* 
+00002 * <route.cpp>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #include "route.h"
+00038 
+00039 unsigned length (const Route & __route) {
+00040 
+00041   unsigned len = 0 ;
+00042   
+00043   for (unsigned i = 0; i < numNodes; i ++)
+00044     len += distance (__route [i], __route [(i + 1) % numNodes]) ; 
+00045   
+00046   return len;
+00047 }
+00048 
+00049 
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/route_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/route_8h-source.html new file mode 100644 index 000000000..b5139e667 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/route_8h-source.html @@ -0,0 +1,77 @@ + + +ParadisEO-PEOMovingObjects: route.h Source File + + + + +
+
+

route.h

00001 /* 
+00002 * <route.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef __route_h
+00038 #define __route_h
+00039 
+00040 #include <eoVector.h>
+00041 
+00042 #include "node.h"
+00043 
+00044 typedef eoVector <int, Node> Route; 
+00045 
+00046 unsigned length (const Route & __route); 
+00047 
+00048 #endif
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/route__eval_8cpp-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/route__eval_8cpp-source.html new file mode 100644 index 000000000..26cded3dd --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/route__eval_8cpp-source.html @@ -0,0 +1,71 @@ + + +ParadisEO-PEOMovingObjects: route_eval.cpp Source File + + + + +
+
+

route_eval.cpp

00001 /* 
+00002 * <route_eval.cpp>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #include "route_eval.h"
+00038 
+00039 void RouteEval :: operator () (Route & __route) {
+00040     
+00041   __route.fitness (- (int) length (__route)); 
+00042 }
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/route__eval_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/route__eval_8h-source.html new file mode 100644 index 000000000..0fcfb21fb --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/route__eval_8h-source.html @@ -0,0 +1,80 @@ + + +ParadisEO-PEOMovingObjects: route_eval.h Source File + + + + +
+
+

route_eval.h

00001 /* 
+00002 * <route_eval.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef __route_eval_h
+00038 #define __route_eval_h
+00039 
+00040 #include <eoEvalFunc.h>
+00041 
+00042 #include "route.h"
+00043 
+00044 class RouteEval : public eoEvalFunc <Route> {
+00045   
+00046 public :
+00047     
+00048   void operator () (Route & __route) ;  
+00049 } ;
+00050 
+00051 #endif
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/route__init_8cpp-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/route__init_8cpp-source.html new file mode 100644 index 000000000..824282875 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/route__init_8cpp-source.html @@ -0,0 +1,80 @@ + + +ParadisEO-PEOMovingObjects: route_init.cpp Source File + + + + +
+
+

route_init.cpp

00001 /* 
+00002 * <route_init.cpp>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #include <utils/eoRNG.h>
+00038 
+00039 #include "route_init.h"
+00040 #include "node.h"
+00041 
+00042 void RouteInit :: operator () (Route & __route) {
+00043 
+00044   __route.clear ();
+00045   
+00046   for (unsigned i = 0 ; i < numNodes ; i ++)
+00047     __route.push_back (i);
+00048   
+00049   for (unsigned i = 0 ; i < numNodes ; i ++)    
+00050     std :: swap (__route [i], __route [rng.random (numNodes)]);
+00051 }
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/route__init_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/route__init_8h-source.html new file mode 100644 index 000000000..451e81a9a --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/route__init_8h-source.html @@ -0,0 +1,80 @@ + + +ParadisEO-PEOMovingObjects: route_init.h Source File + + + + +
+
+

route_init.h

00001 /* 
+00002 * <route_init.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef __route_init_h
+00038 #define __route_init_h
+00039 
+00040 #include <eoInit.h>
+00041 
+00042 #include "route.h"
+00043 
+00044 class RouteInit : public eoInit <Route> {
+00045   
+00046 public :
+00047   
+00048   void operator () (Route & __route);  
+00049 } ;
+00050 
+00051 #endif
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/runner_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/runner_8h-source.html new file mode 100644 index 000000000..3975d3624 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/runner_8h-source.html @@ -0,0 +1,115 @@ + + +ParadisEO-PEOMovingObjects: runner.h Source File + + + + +
+
+

runner.h

00001 /* 
+00002 * <runner.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef __runner_h
+00038 #define __runner_h
+00039 
+00040 #include <eoFunctor.h>
+00041 
+00042 #include "communicable.h"
+00043 #include "thread.h"
+00044 
+00045 typedef unsigned RUNNER_ID;
+00046 
+00047 class Runner : public Communicable, public Thread {
+00048 
+00049 public :
+00050 
+00051   Runner ();
+00052 
+00053   void start ();
+00054 
+00055   void waitStarting ();
+00056 
+00057   bool isLocal ();
+00058 
+00059   void terminate ();
+00060 
+00061   virtual void run () = 0;
+00062   
+00063   RUNNER_ID getID (); 
+00064 
+00065   void packTermination ();
+00066 
+00067   void notifySendingTermination ();
+00068 
+00069 private :
+00070 
+00071   sem_t sem_start;
+00072 
+00073   unsigned id;
+00074 };
+00075 
+00076 extern bool atLeastOneActiveRunner ();
+00077 
+00078 extern void unpackTerminationOfRunner ();
+00079 
+00080 extern Runner * getRunner (RUNNER_ID __key); 
+00081 
+00082 extern void startRunners ();
+00083 
+00084 extern void joinRunners ();
+00085 
+00086 #endif
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/scheduler_8cpp-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/scheduler_8cpp-source.html new file mode 100644 index 000000000..20dc2624d --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/scheduler_8cpp-source.html @@ -0,0 +1,135 @@ + + +ParadisEO-PEOMovingObjects: scheduler.cpp Source File + + + + +
+
+

scheduler.cpp

00001 /* 
+00002 * <scheduler.cpp>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #include <queue>
+00038 
+00039 #include "scheduler.h"
+00040 #include "tags.h"
+00041 #include "mess.h"
+00042 #include "../../core/peo_debug.h"
+00043 
+00044 static std :: queue <SCHED_RESOURCE> resources; /* Free resources */
+00045 
+00046 static std :: queue <SCHED_REQUEST> requests; /* Requests */
+00047 
+00048 static unsigned initNumberOfRes = 0;
+00049 
+00050 void initScheduler () {
+00051   
+00052   for (unsigned i = 0; i < the_schema.size (); i ++) {
+00053     
+00054     const Node & node = the_schema [i];
+00055     
+00056     if (node.rk_sched == my_node -> rk)      
+00057       for (unsigned j = 0; j < node.num_workers; j ++)
+00058         resources.push (std :: pair <RANK_ID, WORKER_ID> (i, j + 1));    
+00059   }  
+00060   initNumberOfRes = resources.size ();
+00061 }
+00062 
+00063 bool allResourcesFree () {
+00064 
+00065   return resources.size () == initNumberOfRes;
+00066 }
+00067 
+00068 static void update () {
+00069 
+00070   unsigned num_alloc = std :: min (resources.size (), requests.size ());
+00071   
+00072   for (unsigned i = 0; i < num_alloc; i ++) {
+00073     
+00074     SCHED_REQUEST req = requests.front ();
+00075     requests.pop ();
+00076     
+00077     SCHED_RESOURCE res = resources.front ();
+00078     resources.pop ();
+00079 
+00080     printDebugMessage ("allocating a resource.");    
+00081     initMessage ();
+00082     pack (req.second);
+00083     pack (res);
+00084     sendMessage (req.first, SCHED_RESULT_TAG);
+00085   }  
+00086 }
+00087 
+00088 void unpackResourceRequest () {
+00089 
+00090   printDebugMessage ("queuing a resource request.");
+00091   SCHED_REQUEST req;
+00092   unpack (req);
+00093   requests.push (req);
+00094   update ();
+00095 }
+00096 
+00097 void unpackTaskDone () {
+00098 
+00099   printDebugMessage ("I'm notified a worker is now idle.");
+00100   SCHED_RESOURCE res;
+00101   unpack (res);
+00102   resources.push (res);
+00103   if (resources.size () == initNumberOfRes)
+00104     printDebugMessage ("all the resources are now free.");
+00105   update ();
+00106 }
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/scheduler_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/scheduler_8h-source.html new file mode 100644 index 000000000..b012f4aa7 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/scheduler_8h-source.html @@ -0,0 +1,89 @@ + + +ParadisEO-PEOMovingObjects: scheduler.h Source File + + + + +
+
+

scheduler.h

00001 /* 
+00002 * <scheduler.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef __scheduler_h
+00038 #define __scheduler_h
+00039 
+00040 #include <utility>
+00041 
+00042 #include "schema.h"
+00043 #include "worker.h"
+00044 
+00045 typedef std :: pair <RANK_ID, WORKER_ID> SCHED_RESOURCE;
+00046 
+00047 typedef std :: pair <RANK_ID, SERVICE_ID> SCHED_REQUEST;
+00048 
+00049 /* Initializing the list of available workers */
+00050 extern void initScheduler ();
+00051 
+00052 /* Processing a resource request from a service */
+00053 extern void unpackResourceRequest ();
+00054 
+00055 /* Being known a worker is now idle :-) */
+00056 extern void unpackTaskDone (); 
+00057 
+00058 extern bool allResourcesFree ();
+00059 
+00060 #endif
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/schema_8cpp-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/schema_8cpp-source.html new file mode 100644 index 000000000..27e89390c --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/schema_8cpp-source.html @@ -0,0 +1,192 @@ + + +ParadisEO-PEOMovingObjects: schema.cpp Source File + + + + +
+
+

schema.cpp

00001 /* 
+00002 * <schema.cpp>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #include <iostream>
+00038 #include <assert.h>
+00039 
+00040 #include "schema.h"
+00041 #include "xml_parser.h"
+00042 #include "comm.h"
+00043 #include "node.h"
+00044 #include "../../core/peo_debug.h"
+00045 
+00046 std :: vector <Node> the_schema;
+00047 
+00048 Node * my_node;
+00049 
+00050 RANK_ID getRankOfRunner (RUNNER_ID __key) {
+00051 
+00052   for (unsigned i = 0; i < the_schema.size (); i ++)
+00053     for (unsigned j = 0; j < the_schema [i].id_run.size (); j ++)
+00054       if (the_schema [i].id_run [j] == __key)
+00055         return the_schema [i].rk;
+00056   assert (false);
+00057   return 0; 
+00058 }
+00059 
+00060 static void loadNode (int __rk_sched) {
+00061 
+00062   Node node;
+00063   
+00064   node.rk_sched = __rk_sched;
+00065 
+00066   /* ATT: name*/
+00067   node.rk = getRankFromName (getAttributeValue ("name"));
+00068   /* ATT: num_workers */
+00069   node.num_workers = atoi (getAttributeValue ("num_workers").c_str ());
+00070 
+00071   while (true) {
+00072     
+00073     /* TAG: <runner> | </node> */
+00074     std :: string name = getNextNode ();
+00075     assert (name == "runner" || name == "node");    
+00076     if (name == "runner") {
+00077       /* TAG: </node> */
+00078       node.id_run.push_back (atoi (getNextNode ().c_str ()));
+00079       /* TAG: </runner> */
+00080       assert (getNextNode () == "runner");
+00081     }
+00082     else {      
+00083       /* TAG: </node> */
+00084       the_schema.push_back (node); 
+00085       break;
+00086     }
+00087   }
+00088 }
+00089 
+00090 static void loadGroup () {
+00091 
+00092   std :: string name;
+00093   
+00094   /* ATT: scheduler*/
+00095   int rk_sched = getRankFromName (getAttributeValue ("scheduler"));
+00096   
+00097   while (true) {
+00098 
+00099     /* TAG: <node> | </group> */
+00100     name = getNextNode ();
+00101     assert (name == "node" || name == "group");    
+00102     if (name == "node")
+00103       /* TAG: <node> */
+00104       loadNode (rk_sched);
+00105     else
+00106       /* TAG: </group> */
+00107       break;
+00108   }
+00109 }
+00110 
+00111 bool isScheduleNode () {
+00112   
+00113   return my_node -> rk == my_node -> rk_sched;
+00114 }
+00115 
+00116 void loadSchema (const char * __filename) {
+00117   
+00118   openXMLDocument (__filename);
+00119   
+00120   std :: string name;
+00121   
+00122   /* TAG: <schema> */
+00123   name = getNextNode ();
+00124   assert (name == "schema");
+00125     
+00126   while (true) {
+00127 
+00128     /* TAG: <group> | </schema> */
+00129     name = getNextNode ();
+00130     assert (name == "group" || name == "schema");    
+00131     if (name == "group")
+00132       /* TAG: <group> */
+00133       loadGroup ();
+00134     else
+00135       /* TAG: </schema> */
+00136       break;    
+00137   }
+00138 
+00139   /* Looking for my node */
+00140   for (unsigned i = 0; i < the_schema.size (); i ++)
+00141     if (the_schema [i].rk == getNodeRank ())
+00142       my_node = & (the_schema [i]);
+00143   
+00144   /* About me */
+00145   char mess [1000];
+00146   
+00147   sprintf (mess, "my rank is %d", my_node -> rk);
+00148   printDebugMessage (mess);
+00149   if (isScheduleNode ())
+00150     printDebugMessage ("I'am a scheduler");  
+00151   for (unsigned i = 0; i < my_node -> id_run.size (); i ++) {
+00152     sprintf (mess, "I manage the runner %d", my_node -> id_run [i]);
+00153     printDebugMessage (mess);
+00154   }
+00155   if (my_node -> num_workers) {
+00156     
+00157     sprintf (mess, "I manage %d worker(s)", my_node -> num_workers);
+00158     printDebugMessage (mess);
+00159   }
+00160           
+00161   closeXMLDocument ();
+00162 }
+00163 
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/schema_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/schema_8h-source.html new file mode 100644 index 000000000..b5044a17f --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/schema_8h-source.html @@ -0,0 +1,96 @@ + + +ParadisEO-PEOMovingObjects: schema.h Source File + + + + +
+
+

schema.h

00001 /* 
+00002 * <schema.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef __schema_h
+00038 #define __schema_h
+00039 
+00040 #include <string>
+00041 #include <vector>
+00042 #include <cassert>
+00043 
+00044 #include "../../core/runner.h"
+00045 
+00046 typedef int RANK_ID;
+00047 
+00048 struct Node {
+00049   
+00050   RANK_ID rk; /* Rank */
+00051   std :: string name; /* Host name */
+00052   unsigned num_workers; /* Number of parallel workers */
+00053   int rk_sched; /* rank of the scheduler */
+00054   std :: vector <RUNNER_ID> id_run; /* List of runners */
+00055 };
+00056 
+00057 extern std :: vector <Node> the_schema;
+00058 
+00059 extern Node * my_node;
+00060 
+00061 extern void loadSchema (const char * __filename);
+00062 
+00063 extern RANK_ID getRankOfRunner (RUNNER_ID __key);
+00064 
+00065 extern bool isScheduleNode ();
+00066 
+00067 #endif
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/search.idx b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/search.idx new file mode 100644 index 0000000000000000000000000000000000000000..50b796a59b1583f4fd42069669069542d932ed7f GIT binary patch literal 422353 zcmeFa4SbzNl|TL<&vOY7phCciRU%f5kkWt!N(j(Gg&+}&R4iIeZ*p&vOK);-^U|hn z#H<9YSa<8+x<9KoL*` z6ahs*5l{pa0YyL&Py`eKML-cy1QY>9KoL*`6ahs*5l{pa0YyL&Py`eKML-cy1QY>9 zKoL*`6ahs*5l{pa0YyL&Py`eKML-cy1QY>9KoL*`6ahs*5l{pa0YyL&Py`eKML-cy z1QY>9KoL*`6ahs*5l{pa0YyL&Py`eKML-cy1QY>9KoL*`6ahs*5l{pa0YyL&Py`eK zML-cy1QY>9KoL*`6ahs*5l{pa0YyL&Py`eKML-cy1QY>9KoR)ggMjb(|9dK{HB|%@ z0YyL&Py`f#zc~ba?`kQt?{z_IS^hUyel4&fpa>`eihv@Z2q*%IfFhs>C<2OrBA^H; z0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFkg}1p(jt z@c)*oYCRPJML-cy1Qdb42m#;w^j{QDBPjxkfFhs>C<2PW-zEaS_l3XBf@`T20YyL& zPy`eKML-cy1QY>9KoL*`6ahs*5l{pa0YyL&Py`eKML-cy1QY>9KoL*`6ahs*5l{pa z0YyL&Py`eKML-cy1QY>9KoL*`6ahs*5l{pa0YyL&Py`eKML-cy1QY>9KoL*`6ahs* z5l{pa0YyL&Py`eKML-cy1QY>9KoL*`6ahs*5l{pa0YyL&Py`eKML-cy1QY>9KoL*` z6ahs*5l{pa0YyL&Py`eKML-cy1QY>9KoL*`6ahs*5l{pa0YyL&Py`eKML-cy1QY>9 zKoL*`6ahs*5l{pa0YyL&Py`eKML-cy1QY>9KoL*`6ahs*5l{pa0YyL&Py`eKML-cy z1QY>9KoL*`6ahs*5l{pa0YyL&Py`eKML-cy1QY>9KoL*`6ahs*5l{pa0YyL&Py`f# z=Q#qt_oct6guY+<7sb;^ihv@Z2q*%IfFkhxLcsUW_I&>no*!Hy1@nWS!u_iWh4fRs zCj5y1G~bFB+wTWGzv3~^Kk~!)+voX5RZobk1Vum*c>W>aAN8t4q5PwUlK!Kog?|6& z`j~rm%soHm&V_C|{G)G8_|>Bb{4FBjAAQH)VzDPJvw!p!3GFTvwi&IXDm;BTAfSAE^2QS~kJJ@HD4!MeKGW_LlO9UK)`>=YyKXpA$9Oy(rCUfJK6JJ zW^DWZ%XV7YlZkrzryS<_r@Rz@H+X){sbQG^%8z;eEAPbLckuT^{QbhjKkYBuV+a#g zha#W|{Es5wzxrWG-#`7$_S@$9r+)~4pS1oBVgCLZm&V+^o_~h15&Cr)7wX<>`0F}C z9(5=Jioo+50e|{yrGWnQtL^t6Jb%XdVWIsQCY%I+#=IDPVaz=obKe=d)u9L|0?%&* z{29i+=hvSo1@-G+nkcYe-<9w?k6-@{=M2Ao{oc^+9De;DoKwGw!1D?L|12Z(&$Uqg zS#{4f%HIUPf7UrtPXDZTPFi07teZUl?8Tmc&Y}d5e-8Ev&bcQ+Q;#B`2>g8_;Gg@F zvK8~sHTJ}^fl5>a6oKb80{*#|J!AR&bC*0Lk1{9%ioo+90sq{gL?Qk2QsVc|Gkx4Y z?;pZ&e^yP*eL?7^!#_W1H%J7kM-fm2o|g#t=bJUZE1chuJg@6t@HGkYFHGBS-hTT% z|01(@=;HG0&p9pbh5xe&zj_n_Md0~^fInwbqA>oPM-u+YJpLu^o`2~VCj|SKnlr%@ z0+gT#C<4z*1pK+*^8D8}g=O`-fp->QDp}fxkNh{QjH&?&_o!QUv~95%Bvzo~W9??D(YrA3iUBfAHjx z?hjt%`Gc2-{L>*C}z5x)lLM;CY6C|E|-eME<+Zv)>`}9g6Jt{>|5W{>>j0 zI{)+E^BVj$8@~78yx)7U&R_9<{C(KaR(#&`|2erQ;IGPf{;EeMT>n!96oKa#0{*Js zBnsqzpg;8cANZ>0f6%P$L!x!~AN*-Z@>k>T?}u&^zyBd~|HuE3y;u0*s*q0|ihv^U zw~v7TVRQD!ADJVS@kcs5f24@Nd;j(;r!`Ono&y5@$oC-kk3EMN&o5SgBdH%;!Wee_q{6xd^akc4{1xSgCz~2A@{>Kme zRi*Sl@#?=SzD8CA6ahs*5l{pa0YyL&Py`eKML-cy1QY>9KoL*`{-+V}Kau>coB!$j zo{#DKpD=fQ{ZD-AITz3WMDq7N{7*dboYT+C<2OrBA^H;0*Zhl zpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H; z0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2Or zBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs> zC<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%I zfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`e zihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhl zpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H; z0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2Or zBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs> zC<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%I zfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`e zihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhl zpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H; z0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2Or zBA^H;0*Zhlpa>`eihv@Z2q*%IfFhs>C<2OrBA^H;0*Zhlpa>`e|7#JbX=teF$u8;7 z_V)E;dkg(NZCUH}Jb!JK3GVIh%FlrSv25A0GuyIlxqSZ2Tz9+ST;Wa6WP5T; zvl%9^+M6+h-;Lf`XV%lP!)s~jDfIVAc}81W(mfq*pnr0WIG4itZwp#l7H5~k^{J|s zmbOAy7o7u$*57SP`l;2VOD#UNzNMv|;agf-TKn6@ISx`TpY2XdrPui_EyZ+CuhelJ z(k@EGb%R1a3voYPE6%g&Y;I{;n(gV!4$xCUZt$;*Dwo)63 zjEq@<&rFj{vP;u>`esS$eJE2Oy>nYydV5&q&!8-Q=?=Q`a24oSg`)QqSmDp?Lzeh{ z7SX$NeOb~zi_)DS)xxxHh)5F#FGL14SI8;OS#Se-=p> z#kC%dQB3DZTwjTN3}Wl6k#&C`>$kp6oUGmY*~q+=#a%xixMX{K>Fh*!p_>(34?ugf z`D~kbwgZ=JF`sT@JAV$TKX{KF`QK z>27BC`6k9>Z9b3O44|JMX%W_z_Wo`H_W4Z+fm8T*vZOs7*)XwvC~r?e%6@Bwb+`1S zMI3LP3hsUu|JHhOg#lp|Iw@;knBu6JbYHq}d6AiYVWA_YJ34x@9nxfpSR0XpK=_5-Ub?LfQj%qXzc7|= zOJ}lOIkwOj_L~qmZv#_jE-N*;trA6m2$27_YOoY~Yzc3h#t22$=C;{jVo#^LnQk-& z-3#F6H-m4#biCVE!6}LDHnco3zik{IQ}NrUdg)BM*eA_&du=+iG~JC3DFwcLW;&C> zfXeu{&$ez8((HU}sM{Av5tp)2XAsP95#MMmxqU-AV@3D&tq2KQ`u2VBneuF$ zLZ|Ho8|%Dud!Gzi8)tbjxRLh8`7u9b-NhLyL$^)0aZ@ZT-eeoMmJ4vP4!S@#|G!W1 z!k7f+-)E-t`NA@~wu(!LJJR{S&O(0&$D@DWlg<}J%Km+S7!~yYs7U8~IpW;`p<{o( zV+CSKZSUBW&M!+ZXHs{VR1G?JAYCh-ws3chg_M|#ZfZQr+*|ag9RJ^!#HA@S*jLC1Cm+q#BY}%RTc=yG1 z@Xjc35dKmz-CgMG6db-Zn8tLM&YRkQX+^p_onPLYBQ9TB%@}m7H3P|)HsHGq@mQiS zZTHf}Vm{aA2GlR@62D0Am&R;ZYhHNwn;;hF%kgN;=F80tTy6^RHJeux7zwX0i&@Y6|bJIP!Ugo%YC?3RYHm|fgz~&J+IDu~7COk4K zY##U0!gVm++goVMVW?(d|8qsUcX@YPCzO>!Kg0iXOS+eX;D3(cD}?>&-XaP>_g9bx z6aWqoU#WyM*FoUFGF#HXsErB0%spRePLj^-wfa$QO*W0Tt$8)$EpSD#kuoMpDcDzv zURv@Q#83=1%Cc-s_vN!`s9tDNbXVvYPMP`2mULf%llWK0N_oOT;;WTjx_$RqPrD$Irhb!Vc*qUx5Vp}T6 zKt~YdYCvo^Gzq!y?YR7V-KP$JW{f>y>RS7u4%&(Ju31*~ysKHrru=s; z5D&RCUMrjCuAM^V+O3cGn)SO@@K3Rp_u;j&RaZx7N3rR@vH!@JtRPoS`oY zy+~+lo<2GT*#6SYTZic+ZEIV)XvN^}J`&j%?jG{mfM*XzmUjsM-7B$V=u78Vue(Q# zI#1`iwrrZ;jb2-4n(6_xdgy7QSlzuPqP>GsaQB|J&O%PKy}S28^J!Z=y;#UW{AKXJ z`vBOxJIMHTUqb1cA}(R0cPdioHT+-i^xASgZT)%M+rQq|hS{}uS-QwIOQD!Whb{Ef z)V{ig5rb5+`1|su~=C*vUtJM_Y8v_zR z^2)Y+K|08`T1M+;V`qC9W7|w2&^1q(2D}y3&gY!M4?2 zTepe7*5mp{)ZT3ys7Tw0o8hL$V>Fp<+u(Is?rbY$B$eHWiiM4|;XO1TMaG@RWi8WJ5BQG&Kd0Pt(P!#Y%BWrHX^2AgUr}!_coc@IaTZ4`G|oI zA!F;ki(GW6{JnWe9Lq;jih;Jm^z70?9=H{{Q2-`4%ou&SKC`I3ca@~xjnYVFYucc4 zQ`GKVkASZJZcfYvY5sdRMHBz#bU) zlVL@iU~CMwFsm7Y#h+c#-?uj8#PmeY?*1;f#=mb%X<*#Xe7464jD15?6f@o3w~H(- zISTH5drH}1?J$;w?UW|d7AD?yNK`~%()ohSj@t)I1NysNP*iPO8EabEF141HwgJ!@ zjR|Hu00_GbvxymCwr?m2bIJ$mvVHS}Fd6r^qmvbi){d|pJq#YH{Puk%5ujM++L!lc z(dsfLe{%|(97%t3s>Bit!#77z+aio7r0-_U=@^Sc(9jU~A^3hjPH1SjA?{^3GK!#W zXb2nOeq2+3zF2{Y*&lRIWsZHWl~HA z#l-ghNJ7xBWAMPo>PJ!{!M%N^YupbZ2_->LaaMx+<1*6F5R-!Y;}XIUk%9Z;veD2` z+R*olh}coOp&`r#!h&I|r@zgX6U`kB^CWtNX)n9hZq=L{g?VHAn}uZMcH` z&Nzc|-5D9Vzgy)P5$n72oTsrSj5Idp3PwAS$>zC8F%7@dw_XJ8oRYz!l#Z#HEG&GS zX?E6TvS__7Oixr0sUkq%qmzL%Gq4bg%Cd8I1~CfDr7?CkBhj=(Uy#YRLnJt6@63?9 z*9gMS%}m!>H+F7IQ~HDT1l|qV+sD3UXVzCnMSKB@a^T&-EG`=7Zyz9CcpP zEgn3Wp=|VGIzbt~Hzi7uvA;JpVSGTM7 z?-j$8jXZpBFjg=|Tme6f%uf+7-w<<*$*n+4)*^aY{TL++#UJB9x*L}{=>>J8%{GntT*|HyRlqG5`rR_oWwUjmX#0| zg?Wh=<$@hcoCD>OtgS&sx$s7p6KmHGhfOJJMO8<$8|p~;$cERjY%0fcCT!fbHAyR* zVc#hwqoHjgqIIC!2B6c_m#z?2dMu{wE^~bN}54K6Q<#A^s*4eg4t~u zZSu02j_d&SAr5eH!`0~gL{JZ=gQeIj!=jTNV02L;6b%>YLZh%X#S(R@*yuol>_#wa zsTmy(Lz(<4`oitF(G6ab&V-{o;4_-#=%|-vpB>%nS=*plxsQ%V zrox9RJ#03?u4@+I57lJ5S_?9;Jk$thHUmWnNj%hKxMW6pXud3g9$Jy@D#}*QLpxj= zWF51tW-5BP&O6=FU-FXUvN4==>dbgP}nAMP~K zBml-A`3~VL3Ii;q9IYPS6seK)?u@)KweaD+hPjde$*!@zuEx*?vIPt#Zpe%!yn8qc_0f%~ z@qmq47?2Rw2i&<=jmDKBHqNsfJVL|@trZd<75K*$2*Q@78;IjUGqZ(k(GDL>Hy*YK zmEqC^nsb@b{&*#V^ZmV(L>>_&8fyeL+5Y+Qxkk6(QF}8wg$6ScTPj+Mrt=!1{ z2}H?3i#1cBPk{Of>g-Z>w4csGo@VA`GeyilU1NcEoO?XDkoM0iNr5cmv_QAn&;8lj zs2EWSKZAt3!qr6NN05#Y>=+GcN;is;YAq=q71&Fk39Ix-6AI(xFBW-zIiy`p9zmyd z=)_Y;^Mq-kqK~YKIvEV_bv50v6SMa{0%))@BN&gM$vDKL2pnl1K`XVkOF2%ft3e*n z$hh`o-;y#%upvC$zd)VKGp@v{9r=yb{K|;zi6iP8Y4Zu3#^xmtw-laVO*m;~JCKEe#!S?Y zbutcY~v*`DsfAvUu0iNT4kAw!&Qmbav=Y)|7L zCTwA{;C_6>dX2T^@pbS57!k$CH`2p6TiS7+i;mHDSgK4Od%bqI-??v!*N#OF)LJs_ zo7$e`S)YCNj>sb@`x=eU6n$Tl*WQj=Qa|4}-)o1hpM%=IMIH@&)1i=CJKw&(Xg=OI zgh0D1@#|^rxgN27{kk4h8Hs+qvK@Q&1o78vd9ag?4ehzCY#9D}G?gwyP4nb7I^LbJroX@3JKcp`eLK|?}nU* zS?!+ z-@3{A`?c0n+e<^h@3-0F)4kKB0tt{M-tTvN9Zn>FKjz6%H%VZ{}C+4|0lOKcJ}L8Sp>M zhDY`f|F8wFm~{>b{b3ZOZVZ;L@BLvv2w2Io`Uff)2$hq`(?6AdS%VeYNoU&}SOp>( zD600f@qtaC;p9i3^Y4V;n)DcDH@x8}_auPFmX$pR{v`9@iB~aiQ~O~_o~#Fz#bmDZ zH(OZkg#Kiw*Matx(ts=QkZu2_0a(;4WM*#;F>Dt>tz1eJ1 zJUQNB?4?g0^khf_!&4PF5G#H6sj7}1f$*ssF+fNkeyR@cVrN4`-W)G_YL?g0kC_x3 z_a=O9=w)K_JnWy)u@Fb6Sc#`r;S7#ZBA?oTvow^Kr#ACkm6!;g+SVzjmYy2(q&Gda z-|K`LNd-yz&(l*nxkJMhH&*RT`RS=41AVof**w%037Ki!B+sUkj%KejCnq|eUO@on+9}^cJ_5i`g^_3<*fiX_YS9!Jw0wHU^`gp<*-JQL+fYN3=Y=hWGQ*D z+RL3u7!OYKuoZ<(Ih=-~x5@Y*&;<10eCxGm9uF?ciPidGUfT2EST4g$2;ltVR4>QT z@sG2-TzJaHYMg(ZpCl2}KMsJ_0|}y{OaHL-OW-Pa3OIsgg4QrPcj-*i{&7A15>X2I z$4#N132n`F8S5Xb_s1RZ;rl0+s)xt%>1hrlxHSJ%w6P?|KcO(81(6Z9hY?H>{vCao^uu3EI4dat{b(bYiq6>3&|q)1%ty-T#Qk-Ty=^(YuM3+cAJyYS-UTL}1xLLwrP6Fo< zQweGw15I$mY#YF{3&9c1p^vE?u^^1afj2lJ<6RGvkC`WhVTk_l{z!1d8t-~^K(cQ2 za4d!gv?yvM?2uzJ!4YGY?&jX0qS9O3U05cDe=t_mcxe2N>~!vk&|e3c0qk_n%BP{Y zp~(q-#ax`QWL^~uBm!L-Y}(3f6I5{j*2Egjr?I{WDpv5=r-`wePRe%0T9YK58;n!h zzGAay=a-;jo48otik-Or#qVBxaV@9Y?P&x@)`QX^z3<3IED?HTkslnn$hdLmDL4`f zbJEYId%(C~L-(+k?j0;b({|85I%;y$om&tMW;K(h8 zlg)DEcJSdCIGwx6L&sPilQbRsG3H}4fW)I}a1IqoQuL3iGjusI7#uYVXTaTZB{*ts z9uq8MA2pB3ulUfk8ud45(Z%_oJ)KQL5nRdIpe8Eq3u z;f6gDs;niYP{gsE{w}-s9#qaGk)5oIV`=3)dTn2;#0o5(;aZA)ta8Ak+7?s}=eZUQ zDmUkQDVdeqysk9n;(m&H<<2hbszH4f&fPqnE3Pqafn$O*=WT+@{o)5LLjD*elk1kw zc1)$&F%OQZ?n+-z)jc?77#F-S+M3BeIA)dcGVx>9bn&=CaLjsh2P`;duM~*tNN~(J zh;qd-IOZUxCya(dKepZ^z_gETggYmOABxJcO^D9>alM@_p=2LBpG48pV?-Q~FSabp z;p!3N4bs<{weoZ93VM5?{xEDcizM^Rv1{SX6#C_mWN_>Trpx2cvJFbs&8R$!e(W}L zxH&i$pt9>7yPF|KXpSB8x}d0s3MYX$c7IovCc9j37rn=kqqD&CC&6)*?p#W6T(u#S zIxUd~DfL~jlA0`zYouFZH-!n4XMQ5qnO!EgMdW61Uakjh)kxer^gPvQ+Ck9{Q-vTkr3JcY7xtGFlApvBF6!G?G_6BFZAK(cM9oDhQr2n2Dg?8e&Glz5DL!=Hy}8iU0=A_`po$ILe?U>A{xAK z9DbIjwgwKVI8DvL@hq;{VQ|~>q_XgaD*Q=?I!VIq+Xu%_19Jqx@w4Ey@EzYAro&Vh zcwLKel!wl|X9VZ?0k2DzCc*K;T~O3ykU4(Dm_~x**9nagHglVW;&{ST(!^EUg(J92 zMe7v*Oh)6Xl5DfVX0@pkni<&+9w#h7fSj}nPRJOi5tI{(T?LMq)bve-YZ|do#*m3k zpWuYSu0m&9g0iZV9|sMEpG&0R1eCqAElJvl0?YC)IAKc{7Q!8ca0@0lVa!mX9jTzo z?~>gmq*gV>IH6Sa*nU+7AXqQzf#d)hT%?mkFTjut=$`H23^E>BR-Q@KSP6wZW0( zf_6}~nSN?WEl`JOcMPhwk>sv12UVl=TJF7chslrA7v9Mast(c*?SO0e;KT~y#l0k% za!;(1K%9odJ-Fb+8W%`U9X%K_DK00@qNg2G9haa2LAzq=@x$bu6EF}7`Zi8(k?P%~O5uVi;) zT#`Bqbb_Wa76m8nl)4dLJFK0!n-oqrz>(L83qAIFdT`-AhPh(Mk+x65eAC(Sc~PE9?j&m<^%+(|>Y zFm4YX2PdtB$1N&PIv`icgBLY>UCUdnlJcUWhbuZpO?=S?8oa1^(|jAeXfwSm-HWyv zOIYxtogQq6#=IN6XkRz2@4<@>baT?i)wNE%#{fcgl_QvOp}NNTnOJq5O+q}g*yBi@ zD?D^9Lb4K;?>1Ur^#E2)TrKhpQ1Ie959i70nAKhA#(XZNc**MSLTt~*8F$IM z5eW*KFWHeu8afpwCD%wV8BGM1WXg2*moh+@K%Y7#LGQzz(~OyKr`93Fu6(98376P% z%se-BzSmuxPE#He8S=0ohE-0+tEnr^>X-o|LN`XLVCok5-12Pdc6gj7J#}w4OzMd6 z(k8ONxJUOwx}jd<>LiQ{MDC@VLBe5}mO^`MLr+3>AcP#Fj6?wGL9)2B1Ek=2Sp_|2 z5y%)X<08Jr7&~6Za@uD(By5|6K@(>(FOxJe&Y^>F%z7DOH}H`3Uy9`CW&vS>n8WW3>Ivklmq|zH#A`Ql45R zZj;NYwVtfpPn~JR;5J9WI!J)Ip4?pKh@HODJvdj)o}S1j~oJro)~ zgI9F&fR4RQ7Q6!b6Me?a9lT;^=w;;HjuoD1)$p)-(>7TiQ9Y+^H9nSL+78EW&h7=% zMj3}oon=(&I266I+41m%a`4JUD4u)UB{*%H3zQ=zr{Sh%aGIo%xFZ>yw%761z8WVo z3w@`-dW+99oksx|WgH76z5^mhdqhKg6+p5Z^1-VrUD|cX{Z%#2S2La7#?UMGElwkC zo@cKF2d`QvOSxAK2|-Rzl3|N@-J!*xc1p~DHW+FfBYrLw?7_&Owkb&u^OifTLG66c zsamy*#6{Vt9rolgji7cFzQ!t9yU(*KW9YN)91q%o_8T(hzVdjBT3x=YNTnO zz7t*^yADo22p8@RCAiOE7SO+4G0&K3{fUB{F*`v;VrMj4N|e(X3k->&IIGSvk8N{? z13^542#8P+(h9>XFbH8a2vPPzS{stY%PNLQ2xYS{#Ofy0ZJ@^1N@oxYS6N}$Z3!jW zjU~v!$;M&SSaNl2Y0wy6R|$7EEzW9>je;8iJO>)oO{0&;PUu<1hksj{I#!b_lk4c3ZuXpm=^Mj%y_{I4 zZz-lRUePsbcu~sfMJeg@y;iN9KF%PrpUDLIU5_ujJq#AbY{qrWGm)B|@yNs!&HDg$ z^>OAtP^9kmq=k&eGgwta<*9hYoKfc}+^mZBs)8A_TmW=d*xPAknlTqNnBnQ12WONc zyMBT|7QrbrHIy+V%ntm=+{Z`?PG@tt2wv_b;io8`R=rz$<3h(r0Bn$c1ds$T^zeES_hk-y}I`eHFtc#w@4!b7mfj(+vTlik&kXtTNS}Ls1Xg)*fdK&LNgD!3yb{Bwnnf zVLC*U0w=6Q&}9hykcDICON5)=a?UvDvPz3J={W~WiDlB2WY4VzXRPZWr*o%~WTche z5{a=XF=Tj>To|@CnQkoqWB_?LBuSRH#G-rd*0Nk8Ymgi}7@tc~jnyZXuMr)`N4U%L z*<*t&7%?x;WQS}sjy4JU_l*)Zif6YE`D%JW>;PYM|8oM6W+Q?j&Xw>_`Q zW){DcK{`8UD4ZnBEyEZ?u1qLn70b}$v7%NvZ}8BpiKaPk#i5y__Bn6$p*a(cbe@yQ zI2y6ymbBD)PADf~cfC`3(RrH>U64d$xwhT*9O6vUz&nvdGy$_sb|)yY>LuvloJG-! z;>I`=HJe2l0$W^MW>J3Pv{>Yl5N5;yauV)jRvc)`&SOj^Gg%-qkG%oV(7;Bw5YHNU zwviG7IBVUrjTVXGtc}k$PC_VWZF#oQO2l*4_GcThob1io^%uo1FNL%A*u+BJhwZhm zlvpApaa{@g=T{$!-)IKsPdfyU!G|f;AA&2U7o6XC2)?*laDLMv7!wkF{`^C5Cfb4J zTx6LeeT~%o1nNZKk};f+N7Q(Xs5hMN#JVhFq6eJsq`53>B=zSz@h!`jko5DNz?Nk# zk?!-Ie3oTSV(z4`ENcREJ1U&-MDv+rlo$B(4`5A%wrcRvR!OxO!%r!Rj8i61OO%_2 zsdkxVjF}C!Wg-wxCbqClSSbAson=B}Qs2;5COj_f4MSxZtYNERWtlKzPhr6*h^25u zHlqfLUuke`N4kMBR~jB}|20t3N<;aGN3_?_KnW{lLDg6^%2R0&FCzyH6ra+N@VTa- z0kUFlra}~GL~cOam+;%(hQJFd5g6*|BvcDQq(W8;7tFK-qr6`*+jFyTS*a-RreXrs}ySlMtB3nnOo-IW;sS%3k+uVGMg&dm` z7|2Wb!G%uX!`5*xjRzMxi4KGM3V3guC82o6>}iDWL8WlqT4 zg@a{zVuE)e2mFayCZz8|&H@v8A`!fBZCQqd9A3DgEKi9rUbwj|S2>Bikh93dQYBc+ zi{*to%f@sYg%|FgJlGvHxp1s3k2!F1;r_`2UG$5*vK(^PCAg@vY#<~Et$tB;*+6%B zG`MJ5+3@ff*+unb!ztzVxWPq@2#>`3qV*F36QX_5rU~ICVtvup z2^>;4)@uiYqKDL@HHSf=TnM9$P9BXaPT3S0Z{K8rrEPs+a>f|27gJcvX4cS z%U}2eB$lS*#*G*Qhik@l<3%jU4A2a8Lq#kwF(i}6 zjT14Rn7wMY8y;f8adXvdHzdTut=VL@>(jBI&{{Iv_0(8kWG9*J`d}+nZ zv{cP@Jt!8KG*r!TeI&+V>{N4{(8of=Of{#*%4RGevQo{dn;6O&5%A8LRT>nTa^}pn zVP%w(h{QzZm0?WugEtuj#8_TCn6t4=JS&fLwv-7A1#-^zGNF+~&e>HaSk4~L*;6LOtS08{D-(nq zS-}Hkf}%U^!6kl~aI+r1WJ;MJqZ?c@wM_TuTZi_9VrlQFU%C;j zIlkc;%tZ){8z!;2pyQE)@b>E59Yzf1j^gX?eY`f7*4aqmwFeMrS8A8}NX_2Id)aFE zV@xEiH}&B=ORV2zo9wUG1eb01V9UXEayis}*)DicYq@NA*|-hifw;>KS`XZpHx>D_ zI`XSI!R7N2(1n-J^d}c%JW3>ra<)2KvSQ4v?#cu)|QDD6YgtV(Fj5-?zp*E39ev;W2Uex1|>$u+?Bav zJ=u-um^;^3Y?5&E%RRvrTj2xvre0T|_e7TqURP~BEv)D3ra7N`{XckJy(96GJb4ub1=tbnQ1p95l_#n*;@1f(w70F=%G$NPtJ1 zUDs)@v$Vw90L`-umB`y3(mWTW#qu*DLGwJi4Q|bNz?+Gd%M+UqlZK(V&5*OnqbBC! z=D|a;qCT#aD-OxWWo+^Ry`Xuu*OTql)?#&zUGEbgQrOC~`=FRZpe!t_} zh9|h}or&h1cmf$~KStUu(b;F4$9l5M`1=%e@9)7NZKJ*(`QiLMf6jt@udj?I#Mf6_ zx4p*s`c3?~O#6eD!RrsiLTB)@x!jBuBk)x|?+V(Z*;h@m9wdKNV^0=$$5^kmir~0d=D+SY7|*hp0C<#iz(TT8;IN>`G%NI0q&zkpV37M`6;Qjqr5l}Qqrdh_!87Qxlk6T_C_B?EZ| z;p%A!%t*Dau1ERs`)YUukTciS5GGSNB678pC-DGy`J!g{%~sC-R|9U!q-lw(0XR{x zzLj9-6-${@u14MEXMf}G$k&y;7#du?jcqG)kK{B8H-D=U$cg}7eGmkQg_G(xPU*>p zqZ-Qd#=4#?u4B*1Y#R`r@XJjx}TLD$S8oUvuwHFM(xX=A=)W-fb5 z+yUDF*9^xwiYqm$fN*r9X%j=N_o9}s;TFq70`E!la zyptTvpC^|UQ0n;$dkTfV@Z#5-a3CD7c3SQ8P3GEzQ%2vkGrZz}nAc7dp9E5$yLQO< z?I3^cN}G~-!RXqNFfQxw<_&uV?b>ygIVTS~mxgZipn#u=D^Zm1Yq!9Ir!>ezB?DZdCW5MS+L;E`y&?I zN*3CJSrN_MGF~t@q9qn}$@>-y=0$A0urAS!3@=z11!1LapKw{w8Bw|9EJ@Bjm&XdY z5Kd$ZhDfxqw(XEPM?OiF|BB$S+(OY}g#g5yqa0r9~5& zutOoV$1(A@yTY>Wb5xVd0S|KppE(V#^S$1dT+gxr{MJ-(-4w4Eb6Br=50#>F-PB&L zsjsW;#YGi5W*P>06E3)Jk?{#QppfU13M+pr(Z>i|T5C5?OZ<)$KbD8`t z^hP{Av+?pub8$EX@_ z*@a&wL)5oc+cm^n=VCh!Ka9>*73qt5`Lv&LuZ)6Zgn#QEB-K8hwg>22M!es;kMld0 zLoDiB511Hs_Fw2*FDtlk3QCCA4P_0sa4MyM1zA{2m%J-rho*%YQn(&uFiPKz$xxOY z%wpjdhC0?!dh81kZ>yxoK4tVaphPi~9niM{5BFMT@V2!~5h=ZGZwL&gEj--A-?SaWI)38G=}YDm0VrYC~r4jPBhaof?H8)APOQqbv7?M3tQP!&q_vDSr?@s>BBwRXn%V+O=lh=utPA`G($!(l663PU1;VJq4< zBqt1ots}9J5(8oDx>(qxN@nZE7?(}EwBB2YzUg+Y+l@FKQe$h~i`KR}Uh4rX*P=kQ zRZH7ic{N~keX=Nw)G)BYSuP%16$@qqqc1g=_O6twj&HF zC(Lc5<%1`RavNI6W}Qf=ydbxYhup4XwH*vew27jf?86P23a=MWR%A2b@5Kd~Dm)b< zzt|gOYD^$nEYs-GekCuXWajnanYBC~HRXe|GUjI%3JJp_`+cSpyz=s6rVn)3J4qa} zORvlpX!U$VD!aAZwsm%gMByl#9pl?J?p2lSe*1`7dxa^=bhk?j*7hn7S`!SKXUelV z?cpM-z0Sj|E(34-0`nkQdj?;Mb$ii+VcGtiK+rx2j|`^mD;!z4R`*hp+t>D*`}pk} z!lAK!vqWK?JDSBQT4~3EUc54~%$SBcGS2fVrq)peAHU2^vYyW0XqO~LJ^bXIykpd{ zw--W2*gD3=GDu@4@Sl;+r15Z`^v;fhF`Hp$g=IsO&bly)QwKU{$*(%_nem`=u8S9j zF0d3S239j-i!?9g2DwFE?-CjMbHiRQ4L3+5x2m^?rpnwJ4@z2h#=Lrx+lgm8X+6m8 zcC#Wp*H`rR;axepnw>^>{Q`+b+6K#NjDOc}=4=exEQg8fcY#Z6GuQ8-%e{FVT)z)V z@;9G?>kmjmhJUdSPfwpS+%BHNNb&;9;%V+@kMQf^h_<-i`rU6AQMCwv)tA3k7c5?A zS#TSjKW4{YP)TytVLC96FA0CA)gu-|ug5$0T*5Bijx_LVA#?%~`Qarzd_*tGE#6!^ zShHd|&7=52Glc?I9yKt()|AEX7R7VR&nz3liPo&9<%x@YQzFHZB<7a{mQ9hRK+R(1 zs%dO36!NSxejw8X;McOK8{}75KPDi`czzB1oF7c+M)A3@y_VOt0M4)5o58XB)m_yI zF76;YuJ}deE;cWAcg)Wd1YK<1h6a-|6ykj{a z7c$0l0hS)~7-^RSf@UJ1jDy3(r)yP7V)A}l7g1qDiC|ebl7bA^;exy2Szi(}!6s>M zN|2b_){;2z>UL;D)$h-Sz{$N}2G6t^*x=X` z@~6u~bKMIPC1^x{F)MlKsFovN!V$G+?6tY>p=3rVfQ`P|1^_zQO+LM@#!`rUW7r|1 zu4xLk7F>})gywdhMzJYl7{UN!e!CJ$hZp-!GYM=?CQy31-X^lGEElznSWY`_iJjml zElZ}sx-nW5VC9M%s-%U+(0Z^4o4u2QUy@V|Z<9`;wuHm&hxFO-=8|wD3^uT61Esz3 z%W+t0Qr9=rABC_mSe^qBdPR;4D=dTQ7??e{IZ;<*9-V?yQVCmC%<}~&`z3L#3gaSe zDk(W%&XUx&mIRn8xoEpeN{r#i^>2y2rzE!7ZL)yuLm;btpoGa($1oKu(L`V>qBHfh zb#b;SVtC3H*?vW=+57o}9YJv}jM81^CAQ+c-u@zHewluY3*muv3+8i~1dE-B!A(E2 zBU|hvuX)R_IAnv&8nC#sw?7x#g)NTs_P0*wc130r!XqnNU< zxun`2;#e}xF-0$lESX0d-oXfs4NEc!%9+SPG*ABEC;FOf!7eGfl$_4EWYFt<2Qpr= z%EPjDu_%d4*6=_*iR=69o4rdm(M8f$)QxtYB|8j1n_|hRJAuDsuUT94RFKlbPG@Z_ zJ=25&!Hw)LJ@tl*w*zdvW)HOovSQWf>4YlFcgT=O58l4E?~(Tm(EujImG=F~o{_js ztY@8v=Ls2UE1rrYWB)J+R8{&n_I1j{(Z3B8d39U>t zJq`)jjezJu$7N&mqB9`QfNzAJ&T5jQ8De0Nez8H(ur@GaI9bnuO~x(ONEDhsS`iFv zkBB$aM9J=o$Pkv$s4=i7L66KE1N#ub^bW`aH_K5%dE|FF%Ezp*uyk22pXNw6M6`NG zi|4kyF-DE@THfTyC>QcvKHtMjtXUeg&}B`hT)v1T24Z&vj}pg&R*^zPmama`X5L-C zo*pq~E#KtH+Iaa^jPZqhK`cuD0GkTl)3*;(4}zn}RmWhZyVo&T4ST;?$P6~Rhy)wB zM#&5|IS+&IOgGb*k2EB)MK;hrKRCG3F`q`Zjp(&@<85%83&CMc=OoXl^WgZTNqlca z!I(gvaZk>m!y1Wcl!SxgkN+;iJ1d~?EH%c&cTPhvc83hI@2tlJM`YhQ7i8I-e`hg_ zPx^4^JDc87@zS+73@H5_yWob}SeP8R;R9=Uh>mA(oqC$-~ zCA^_2OiKpr8&-N^B)MS(3n!H01`GlH*o#B$CJ=uQgHLu-|y? z0iSnOyU_5B-FNW?;P}a)cP(-R7b))u@e@Js8gNu&*+Jg#8U_hxj3^-`J1y^8WrE1H z#yH(OzvZ~c981}4n|H-3RVMZjp+GUXq%0R)83m&_L)9L2C?YyEjV?Os>1b$(t$2p! zd;NIJR3?m}MOZO$)fjCE4CVXr!WUL&$kVju(11{w+Av}kQvCXYGffN+ zP<@f23=d0yIdL{TB6LPr2N%ENp4}iEJ_v`scXv|-+|2Bzso|>nrdn@l4wEgbbyMTg z97`OjH#aqb0*R7Pl&~OsPB(RW%jDR^O~d#ShMQJlu!QW&PQ^`YxV^yV^9@Eft*4(V zDLXhuf>`?7%&u~1OOPKm3~t&JZZ_Xs$;fs$13BG1ds#Za7?YA!3T|G=a9O*VcDNaZ z%ZiEX=3$t?C=fS~ER)YB=oG9CNjt%WT*bZHThCXHwqN2nVKFR{K3e%kX1POyfN(C5a+_z>oO9XM|oVE$>+emngaK+3YPdv=vjA z$&W|{D>jp2=EN0y!+qx!<8UJGii7xudu{KnpfB8LdvBE&y;l2PSwzUH4YMzzzPFBn z29fv9qMO9ICI-}h`sNuQorA{7ktZTh3`qX5RBR%xFLe(&xm zC}FlWiYUu4HVH>OmHiP9l$X%-c#DOCa0z{9=SkX=A> zyR~7dZn2P++_SpHVrTbuqk7)5(B)OWmbY}44Ug6F7L4>gi=}As8V)(CwB0Q$otFzi z)1J4C#A&SLx{x6D$y+u$zg2;5+2Td-*WI$+x+y-l9P|cS@M1Q08S$Pg2=A-F!<%BP zdtViw;G}rIubywM+VEy?z??KRHttZC-`8pB{LR7OeSP?GQ0&u2!9(5vj^knUkl>Z# zv8RLIH{uOAE7tqgc>^77;qdpqjotvv9#Jw|@Y*hZL5J2uOlg=$nb~#_QHh8i{e))l zzFi39lbum0qwE3IzCHiGeTg)&3lshXA2|=$_;9cE6P#AvUpXZ~wWm{7PEAnVz`e58 z8-V(Oi5OOI8CzG*^zfc~tO-`mUT&LUWiwpT1S>n2hfT0@*jrxUl5pi(?}mhRmb6W= z701f0UfDZOD|dusXQpA)@sK*nC878G-VNahZl-r{NE2|LfcFC114{d}%tqm0s|T4+|}L265lSL2)VQd4&s|4VN--E;TJtlt7dyyA>bUoZYzK`IG zvag4h!S5F@5uV_Sm{{rm=@I7pdkiw*PaS@Ogr`zN#-G}PFY0u}yA1t=ui;zarB3*z z34b}%Cf4EQZ!+IA?=;^F#!PtQKjDk`O^gS=E6y?gYi+ujD~x~1mGb@XFFVTmf3570 znLCG358(cgX`A3D--aLk;rI9u->Q$A@9Ccxda99a3Vi0i$oQ{VXufZR4nzKyH{0(| zg)VY@C$X;Zf*r&RJd%bl;i)5Xg4gEcAT zVhQF4$p>YUvf%5|lDMd+<@LN1z2Fn4O1$8c%m?|qe(%PbFIxG(`!^>1;Z^3ln|&Yk z|H%i8{|~3*i@fZ3m8$%z&{M~sXTC509=^a~`mx4;W-Y!b%Y60+)bFkRhTi%Q_)hUs zUELgFY z20^>_li;^?DwTQRLAt`jbdR<&jdI?}F%2>yabhwq{RQ+L|B7(%J+@T%QZnu$KR3Qk z$p6TRX}f;&oYMj(u8+m~mZ8nI{jJ87Yf?V6(}cMHH)xQDFyF(h+q9{nS4z3VxyQ~m z(xxI$sCy_+a0?B%$7sPvZ$KJov-S8$+oQcE(9j;MZ5yxVco*ycuD^fX%(a2-_oi$g{(uwA>a8Q+JFNQoa<*_-x|< zFI%U-EDm%phq1-bwTGnl0k%2Xu!JZ0$TQ_m3Q z=7-->z#xN{zc-5K!v0JdLD-uPe->dVx0^c(Z@2t^4ejt~uDLvr^io&7O3EX3D{0%P zT~Kc~2RfM#WgPwKQ}2GIh0FC1|FigB^!LW300}u$1*7 z>Y$L(7tEAAC124$K(qRWLlw1 zQy0hUc^H#E(q`h{^#$|&&SB>JV>>QB@k5hN@K5GjO$^Z9mrw@rz1--EqE~(T0pSV$ z@*2aU1Rc2rLA0dJ#F~9ua#|Be^BaaY3~Kv((& zz9{2yci@Zor*ln&c1_3?(*yn=Bo?UOZ8w?kgS*XludVNII9DP3&pYLtI+?mP(wupZ z`P%js9=mQ#)l&~<`oQmFFBEt1<$Z?#thD)F`7h?%zE-|cw>3YG+=4+In~C*zIF;gJ z=!|LX({zOu$*T)2;@!56rN@{am^b=UF1*JHNeiT69s>y8}@aywXCl}OY{>{S4U$xoou=O74;{S$zm1!!nUOw zi(fq~Wl3G~YFj4s*AK8?Aw4V4sZ(Yfo;urK&);kOwl5IdlnoO+S6y%7f0*?}-EJj6 zaJ2m(mF9Q?%sM`2=+c*1AMn~ZhKDq?hnv5CZsaaC^>pD)E&Q!~J@17m^Uq9t+rI)U zC#K%8JqU(K>)Wdh-ySP#W$T8rT{dF!aQ%Ni`w-foa{<1ni?jv!?3k5`VPWz#>l#yb z=l166i-(cw9U1Iz{U_VFvAO4r||LjKN{~gl< z{r?p4MS5;r_GgPf<;Le@Uk*R8bYt%E>?gqTq;DAd%N{Y`nvD5Q-)6otE`aYGj@4)b zJFcf>oB;hzmxGRP>sJlG9XC?fQ*K?GVGfiw!yHvG<(InJ{*mguTjI*N*??PQXR*z}Mm6WYpo{>MivJUs#W*O~W)U zpxuFGL3?aDQOXpCIebGNq~-Do`*XZ+BmBIBl3r@=cAGBh6pl|#mIge&*)Dl`-pP<{ ztB1OI#Pw&v7v*x}e`tF+An6z!@3iS79XJ2jc_P@d*6>+9B5?DPvr*ddB6y~G%Fab8 zH}AN4%gsO1*PYyOPIz%NC%QU_j2v&vI>igV&}_=)%IwPO`qp-ivA}M!vf6nvoKq`( z;ZGgYYrbxdt(^uxWZsSAQWyAL9cKT*@Z0e{b?JwV-}Zq>c3B=L$IPpoyHwU8Z?2D& zlK~qh^>loK6URZ9ercLz)}RsxSUEjh^1^uLbauDqu=>2|-^>GX68SPOr0?V`ksf&O zyG`PRwkn6U!`99>CVi%bICczYcyrxyyJ8l=p2tcWXky`j*aNQ)#K*-nzZ@8{yy^!$Gyqg z1vrqJap?!}Pr$Culu!Bv$4tnVmDN(Y zOS$G9x@U0aCZ4F z$_M)ngd2Nr|CK3=n>X(HKgR#f zW6byd&zrBCKYmtY{LeIROg3MHc*ffjZY!(h+rAV_;FD+r;3IZRtm(zRXU8AcPo(bg zahu_g1+o8Iyq#=X9VB(Ju_rj$6ug~YJRuBoUZQVeY;oh5>!U7xJ0^zXtkX-SjAvR| zLj7bMkBxI-AGUg>8`s_5f$MiN=K&8lr@3+8^=Y?v5RQxN+iw2m_~_at?q;9Fyj@nN zP**2QPKMlk?qufK>Kc>DOuTPeIgZL{+R}_iaW~r=eXc}K46YbEL=Oi}VP6IBH%>qt zj3r687ZS;#9g{>RnFji| zmEY3wII6pqX-O+y_tO62%8PHf7Dqdajoa8i+}JE>OWBzQ+E(0{Yc^P7&_x zRZbqAUQn_YlzN3@5!Z_-Q`o+-G2QORnLT0fh#d{za^qm4Z=wAp{g)waC(FbWWfXdB z-bs{gGW?E`bWD3w4}|^@_H{e|+V*v0Sg3C%=0K*8IoatoZX6EBUpp>udjNc>gVSp! z9gofU6zrL5_f9gatuBTr7N8^9h+st=n&V1+mgZW-%?Fb7` z7e6s{dbQwb=Y310YR46c58OpCXsJx~1FISd$d7lk`ysrPR-0?CWstmx)%ARY}Xl{(pQB9Go9pPy0p+1VR8C~XU`;?U9ay`NONajA?4oY(!0AcOzUg%9 z(ly=$Jqmr<&F$`dMmU$$Nq*5>iME@BH=NI%Ez#O#-P{xD?HDt{^rP|0@ku>x9uwSl zuTAK7jup3zbsVG6XG_Z`VJLT)XK9_>c*pq8&9(x@b_{iK1Gm@b?3vDf=xk!v_Gjwi z*2zo@`QNb)U({XJU+Ayy>|4M&AF_W$4Ze{1$~3;{Pwt$XoY`O+uzQy3kSbSTAhXU zH1RlJ44bkh_}Lca<;1K*i3j?5qHP`CDTHDE5IngabC_dn6njr)jE4L}8q%|ME!7!$ z?liP#jMSU>30oQL9UE>29ceiG#vMl*K4<6H%CQV(akj80ipKBu`j2|0#1HpQ&OZiz zlu!1E@fF(vzHTo?_EF)N{ZiuPc+l>pd#&M~D%PXBmY95AwiI9RzSitfhWoT`e|FIx z6CS3Ial)PXaCQ5y^Chj|;AiEVvT>y!S)8QKiL)UrD{!*sM$GvTlp{O`a;PvTLrlZ< zRkpEnPl>rHBaR;DkJF8;xPBh-$9WFrMn7@=!>t?Ln31saqW`<~W6AiN>?f1y|D|OB zMlK)ee`tHLi&$(EVZb)DnK(S+=}m@BoafoQBReVb5}T35*q)Ij#wj^_PdaRt&i46H z+gBZq&Q34&1Aa2EVBByxPT7O_sM`rvj?cXievEbQjLDVM1>tvRO#}mrZ#WL2jO!MG zk7dDl@6HamHg#j0v!^;cpc}I$w56NR&{s-rHqJKVY~(+yL7o;@o1e&^Jy#-bJEuo- zN&8K?HjK9q>wz5wd&&OOVyJ&gHs=LK>iXQ*xZ(*D+F zEooW$==+hDb^pTY1e~~4Nvz3uVAG5S%TOl2X;e zJb@nPiMuE3AFe-fUW)7Dl%+$3VeAO!G05QrS$d|pCNI|0<$EZ%OTV=L7`@WS{d052 zbovr~oc*d)N00KgxJ$pX_}XzO;vpUNw>H#L8>sYK!K<8}06Cn1CE7opU)ZNH2A0|l z?&?S0Xb)%O8=Yy&@|#EGD{CLO&OgJfvr}hYD{)fu?h~GrTkpGde*2#dJzVdjZcaat zu?G3wb*7{t={p_5=?+pKl(lpYF4ZAKo(!guY`MDIu`R6obEPAHJ2p?S2Om*`vZL?0 zvyq`(v!3>h*LtuBuEr)W?y(-BrDScu@*$6p|2w{j=fa#m@74el^mxdcgh3WWx2JqT zzbe&zq~1v1>OSr)PU+gn^rg6rTHNfuhU|g4{RMYlE;WQaQ4YDIiLdB`_{!M}e8YQm zkWF`{!Nn=zm9ksiA-ps9_#aIACH*Y9KZ1P1JzC^bD#z|Vp1p@B7`rvQTbqaXf-t7Y zJv=K*a;J=Lw?~7#p7nmtU&9N1XTtvTWMz0RypWY=oo+c^;1ljY#ocZWLw`=}i=jPa ze;ioI{6s84llg8Uui>HG{ZI1%Gizh{>+*`HQ*N%caunu;{_Si}?k={y3n+8IXLpFa zOJ69x16FF!b#iU(x}n|HuAAh(nd=LsX}P!$-!J(EKmLgM{>s=cgWvBHe`%WG8Z5K{ zL+^X0JjTv4X+M6LN%QbGn{V*gv&`e=I0J9&%Wi%P@BT~Pkd;LJ;CJ%& zYg11hZ}N6)Pj?6Rgf|$vTZ_Jw_G`%Q8JC!E;%+YJvsM_ovz1?dnen^3fA%h$xx)*7 zxx0&Ro85OW(VNU&L4t^fn+BX@$J3}=8YsT;HzqzwSau3e-Rk_cBayy=|p65winLFH_H+SE~ zVcD?Aq%U{SkjCXaQ^~a4xj6JI8&}3|*Ot!S8roH3?R?6Z%@<=-7>;!0PBzPoe)uDM zrb_PqA;0j>AJVaVC~;lFwGI1eYKob^#ckhS5Vw6NLEPcJG4R{9j?DcNbTpJDq#4~d z%J+XL%-KcUK7n1U$yhi^m^)ki?08_Gbh=zwxdg^mhYRJ<%9UUz{lbo&;rbV8I@x!7 zCJC8F8#;S_$zF-z?$(`Fu9=TZPuvsqL*|ciI@uOokFtY!Ausxs!^`Q25{7=~+H`_# zskDvb=^>ue-`tuzv95M&Z`|K;=Pca5QE1a(`sm-Hi&n?VYw$E>r;Y9uYYWGCDRn?y zT%J+~oDH#c2=|1M|i`Y!sL)SYFrV{j;!C~u;TS!VFP z<}Q4(CM+GtEn@9%ZZ5ppv++A8nCvR~&-RNJ5 zy%5NQ+w+h!ooG+F*N8g1Gn;k~!{eI>iGF~%PHx>=&h{B2Q%K9&f5UZ&+k3Np-^lM| z^_z?yulJ$ct}RgxTdoLG#)BNV^@=-#XxB8t7rrZjHVO6Ga_$PG<>&_QL-U(@86IQT zH15*4SkINcD}}akcgIedjlAKvcfe%ami->o+1;;lys~~}9@v|_Ba1Kaar5<8zX3n+ zaAzvEFEW0oW4UwfZeBimqlBlbZ!zBs*O;%{kGhWa;@l2g4f?=4eRr#MxWhwZ?0H)C|S4pBi+8f}822D*KuRctguFf`4;h(ueu z5f~8VrGig_2h5*cn)9FU|NZ|n&at206h}BXx76FeUB{>M zH#iHnHuW<$No8=XweYK^~e&i9;oCnaw6vOzK)=P4V z=U_QK6Wx@o8S5B(FU?QhHtVQ!1^(~badeJ3(>lkpuYjfRUg+;c-^hMcUwHqnychk` z`SEuFU)S%GsKXxnyQW)9K5QTH8x_8`@e@C$&!>-yZ0q|+`##*;<}3O!lw(Y4ACoaJ zIv?ZU%_1fu_@>}>Bkn`z2pk>fP}_T<+eDZfJ>S^$!gn@&4T9c=elu()!EZ%uMeth@ z+oe1p>#IJu{6>sh_$UOfio667OX+sW6OV-p-9(D93_dL4Od?h;Vl9I&i}+vV%h+E^ z%lQp_Gi_`QA_lV;OOt#dBK9t1&)}Vvj{{!BuQ<+%*kr?fpX5BR(aqTV9S(3jqx*+B z(lv>-;0y*&nekp74ECzl<2UVl_Fd?BEBGU~k49ak!69=6Z>?)h`>9>})`wf;L9~pF zi7{xOhzE{!zhrEq&6~gw`~CCyrS0fn(9f8s!k&lT$NQc5I6W`y`M~oLyWY=vrQ`H7 zrm&^`9EZfSyoVvLhUB>N`%P>u7&horE{0?%!y!M~fG z5871ZnFOxt*ZHl+Y(U>sUaPi@ zQPMYY*7IjwE8`6ff66$6C&=I1bBBwwvpB#h`FWOl?DHNEGvv4X@cQlLI4YhGm67-G zMUmI0$kPel4?pkZ*UnxG{_P#_r!IX_A7|D%Vw@G{QCID(0-tXIM`Pvq=6NsGNBqyr z8~`VL#6y;I+iU2!PTnhfj&eWrcKiKt^T|5-z#p@}|HDoD{ndB#o3$DK^Xdo9`{bv{ zbNJXt|GwxCYF(*sK3mxwBp-MBpg5VFB+4&}9xL9l7xkUfEvJJib~@(nul|J9i9ED_ z|1<3GfBv)j8|U!!`5$I~$GoY1i#~;&%;U2Q8)L+2J8a_{sgq*4g*SLd(SF1*>RE95 zu6yy%89lSPU~fh~*AGygF&Fa`xmz_?t9)Zld|#cu_&ZYhGNuU}mBlob-=KNfx9%K> zzKroCo`gNFv{dj`AGgwHrLFu%zKGxlwSG?D<(WPYc&Q_2$jjDw1et@wb#0B0m0>K3 zFEV{?(5TQQx?J7O1#7Ey;I{(b9rewVF*7%g+ib2_lb}C3N6xQ!8C`RIX0I2v?|d%v zapm>%GQTOCAAg^CqL{ZnevJ15leH>vWez)U-=1y0b9j~Vy7#@md0+Hd-ZQ_x=4IRY zSgd{*_s{$m^q#%jlQFt|Qt4Bgcj9Tj(d5OGKPA8HkI+ke*Ed<;TrUwZmSIym{fK{} z^JP9A$hp`4l>PnKBU&%{h&<`#oED$%U#;J@t#ABVt#k6HpVfCKKlwYX?#F+nzK=6r z;F%x&mwaQNDE=ZBLc;s8PqV$9&U5TXe#4I7d%4pi#XiW_`Ow@QdhhF;=9l@r$nWT9 z{)CPFKZz|?6Z@*z@b$hCwL#1(y zJ7Q$RhWo{zr*#zGVDBJfg^V9OzT!OIhpZm@?9d~+{?PD-oC(g7%OD*tVU9gcR^_;` zZ~3_}oIzg;*$X(q%MNf;teLC_HljkN15UtIdpdu|*^V*kI=!OT9yaIx7z6J`jBnW1 z!e$bBgP;R}>%vYGa(&42Iu7zp>;8o1tG)Zsp33)Q{~7yOF=qCPj*YSE*fzK)gex}MbQuV=`$F*fZx_+0yb$lliPXRK5IJ$$0}llEO^Ot!JmwK#oJ z{y%VD*pIX>dosr8>yz}q+Skj>>w}ib%jeHBKIS&|o%XLkX6D%A>m#Nr#ZbNeY3d8S zAwOmJ2?#8{c`Rzu|9KvM!TE(8@w}^)m$S(H28~gFCH95tYRQ$Z^4SaAHUS>jxE+Z{ z0mr(nr=PRw^z)w2cfnO5--&*MwfwfH`DJ{C&H{X;G3orKm~<==dTw*Y%p+ zH};W_L+P77JN+HJ_j&ZbSWGNy4*h3a~1Ml$dI9L=UzMC-!s`e_#xZZLKEp*A3r(%?CYL7d`g`Gj;*~zc8;?X`mR2Xb^TW8$R4~6<|+FB zuD9EGLZ2IY+rXQF7entEGWOo;bu^i=g#V1=eqHx;u0F%*6y*w>{uMqi=RNflP2f4LKX{|cl52mcD$fET!9z+5qzS3&3Po@alsq0H+5Y< zjogtELkPZ5{PkOszl7ozU;FS4h;tM^5#2oGc-O|&?PEX4MBM)`y@J2t<6baT*rE5(If#2oZhnQ<>BeVc3OTEL zFYPktK2IILmG|qS=L&4aul_!Jj(pMDzMubkUl?za8->SxhmOZ`xxmNkT7R0yJ;7hZ z-9BmygI7|$I`5U1Ajj*y7q*wIuHb6g2-`%&PsLq9ZhO?e4QPe$l|%0nzF}UyOzy`Q(W%4mfd2rVuIyOB-x8iIt&$|D? zKiB^YuncyWf1dsZEzo`lKN0=N&woA-$DV1|b8)0xS$;24Coj=v*i1r?sQD478}d_6 zkC^;Ylf1+k4BvjY+nP_m%olLNe&Vru;rFlhq^gfMI81pcek1Q?z>oW!Lf=u`<3#ya zNsbZv)7Q@>-+$&)_qz8@pIK9lRRGs|I|}3UZNLI%==>56hktXtF6+}hXZ)hBAAi5| zrwzuh|Fib{h}eYaU-FHP^_Biy^n7fsqi$YCVB)KzXM(-gpKI+S{73LhYP(=R{H)tc zVhv)hi2%5Qjy80!TfaoUZ!)nEKxD^U-I& z%SWI69v^uQxccn)O`lT^Gy1H2^n|{|^C)|EJGARi;FhleYD?(_w6}{mp@;oOkV!bv$QW~=^fgS?%B!@-`kjCj=J*s zdw)*r$KKLsa7gll`2`zy__Yl3ZU_v@Ydy|iq4NoO-20f?iSr|M59MwGrsL|^`=_7# z3hm43OwOs$OtbAAj3524lDmn1`Z+xH7^&0Wc4GZYaZ=E7y?=}SjnpUC zT74qxblEuyU32IYLw|TkZ|Js=oX6<)4s)mZ`q($2FaMtVy5~>+k?0HMJd3<1dr^4b z7xBy7s2mI*rm_Y5HT_+K)JkfBX6N zcf?tI>?iBrr>}Ua{f0fceTDw5u>bV0)8_%~fcaDZt$lZxC;#Qw^zYM;e?PzMkKguP z_V<^3q5UTRG5Yl{EG9Sc_cwlC%V?kd{H^HJcc;O7{}{ zgX-~UBYgKgAJS=Yhd1S1hBcY><8+LPHl;fd*nfT9f%Db_dUg^0a=yCrlVZ(OCZsPa z>$$9~e4@)9NmgJkzPxIJYZC59b-wfj(iLsZnCJ|6$pIQeM=eB0h*tN z&?UYV@9Zp?O-=9s?FG&K&OguJjM4qT>?}%|fG@D*T={t#;BA>(=3d{^7uS=N`uXfi(cu~yq9_ZUVbxMUGnAr%Uajw<*zz? z%Io=fVduN;@@x3Mg{~`f`$?x9zS!Y|?Y2Mjmj`Y&7K3>YUyAUpF7#h~@B2`P>=<^l z@MC-BpVaXjkF@|^*dAlu)kYiZ&wkQ#{sLeHE_B&Qb0EkwxHWu=!cQe=bM(#oqHC3K zr>vFiUFJg9DCRoahJIcoyL)_27tg>si2YsYB$2^&zeF4Chp^3tEMBY+XD<9cdN$dP ze*i|ct+;Cu7^!aTOZpe*(D|z?63qMtFwi0k)$2i}NzO!rIaS&e;@;|h6(cZ!$_$73n) zYQ!!@Uey6z<}QMy|9c*=#V@k=|NE9m6kyx!giU-~Og==akrzpU>~2MllU zQE#@tKl)qjH{GAPwDO)po8N$>}+`8sV_b@wcoyV^e+(I^(&s^t`3qy1Y8=RfMF=4AoxP&vR@WDf&yA2$m zb&0zRyH1=3_v=%-+UGA_-<$DI;yZn_u>T z_MN{qw>*EpSJs&I*L&6Z{Q!T;-~UnMD#qw{6QsL3biIv!o31M6SMFDP7j^j6wE&kV ze*Qt$;!s)ODO}o9xH2yGquZ0pzECD?DuX(Q;8W+nT3OmsIf>ucn;(+4YjeiA_PNnB z{!q`te+3-p>jrT0GPX}Y_;w!@PTmK3MlTzDisB|@i-Ly|S>vxzj{P4#9uWiG_gS3Q zeLXt-Nn3jU;nTD&_Nt!y7hMV8qOOg1SewyCpO-({mW|P13l75Wr|r;g;A)qbLUtJV zunlCm;5!4K^xKH{(jGV@+Kapei4MiLj&5}Hs0ITZ8?v3_R;7OmKgX}~OumJ0_-i(A z8iT=_{h9B#{`^_9XPV9om>T27ujXUmH*|I1{qt5obaoN55xGr&Zm!=g*CS_1eX5Wz zBBnUv+0<@=Kf2~Y_;l#GBRUu8dS7pna!mrG(2vL& zU|#hd_*r>5@JOrZa52n>YMd_(qsOmf6U*EBY4KpXa3_av-iOR25|?|X&*t#?uWk#E=MlRx^q>^JsFzpdB@?|v)gn5TdIUMv42uJ7#i zA#{YNpZPDf-06#+vfnRS*>BQ&vbXij+gydbr{ncDlP>csWUgG78FLV2K5^T9`*!Ig z^A+DdTx^3j&nL;w$=U~R61-NAhtP3GnZ&yRH+Yr7H^$=My0a+zBhIg_L*n`LtaklS zd~`^53*BnSaAA)-D9h2$u(brvN%k4>jr^xNCvi4RH^~_}$~*F1X)nLo85*3&f}fCi z4?co=g^Qcf%dU;*FwDq_^5An6^xyG8nmhJ|_h0vGbu5mm0}=r+QWe{V9*>6JI}U2vZBupj%a z`nR+fbE7&d&%Jv3aqqG6p<4;r+GRj(Q*i)#9nURu@-H9PKBRlUUvSr8gb(AL|DfNs zP0xF*Z7MxtUoF1L%7>2b%S5M1pOYL#UsGOJp51R#;dzXkKBqjPvR1;sIUeztJJl^| z-Ln80$Pu$YBB44b^mGMpSJY|37 z|LB!r99Kn;V0}D&>1TD%s!Npj;Dx{Pto^?0?fN}(jM~^u&R2Os`vgA{^6QnCYQ3aC z{VjjX{+>%6!OQ3=zvajEIq`;0M@}Ojtm_H1A3b5W$OR|S$-y@%r_BrKJ zVvXG9A@4(1rO%#UN}t`IPM?417wE6AsmJE)Tz}nd8;8y{YZdyy8{eq!b*xTrBX{ZP zBVVQ8QrV=dU|o_g0R3_v%=*}N?W-Sw_r>`u>*L$IGAZ9GaQ^u>bniWnfc7h53ICb! zWUP1M%gqjQs%zl5$aBO>JCRdYVFd60EpJm8X-v=lTl-tbW-v}X->df3^8@St`QQJ! zwf|ja13me_ZJ(Teg6ObVSGQqW&N|<-DStct@thmlH`fp9^V2`2_4PT|5B^D$GqfL` zpFzj+J%aC8!->Qaf&)Tl{^}>~Z>Rs(&Zl&+Q!WVllKi)schyb!I=Mf%w&}Sb^x6Hv zwf&Hr{*mb1SP$iuIP;+w|5tC*_u78$ljU*K3h&$gVCq-+N$Y#(%k|lFP3W`R>-72O zzOAe4c_;L}<1KkURs85{pgK2s=IkeZu;}T)aiI?mTvynId_Sm6;q&t@(~W3*djEmH z*O+8~{`V%EXg@w|o%(wEac}INKlOdx^Jjl<_pEmt8Jts%RrY7SKf#~%u0(mJ|3!cO zd&0x4P2%ZZqUAdr&AKc8wmK(2V|p#^v+7VCmfrd3&!5%dmeaY}FSYzDPrClU_J8c2 zfA7z9&zVdYx-*@_oWIPURX;54a;}s<^Q&|@`X&0~=-1bD&vUc4YQJ7%I%9oSeXPMd z`TDnM`IEo={#5VeTVK>Yzv~nInfd*ZAGWgp?t1rKb<*B9r5W^1X@>Vlb;JIwvWY#P zyuDlV6U~|F?^WjT=YJyP@c_oGe@v=t_mfz8yCcz`zw4X2GU|`v@AZB{f7U!z{`{XmGnGG8yN$g+{md`x-m6{4 z-@p2u-FvlL$b07GkNrOT{oj5%eK$LnfB*j1*!TDU58ZdQM;TnZ>(JZKI~)C3ZAAX8 zG}oWi#$(T>kMigL^E)&6U*A3Jy*XY+b6GeXy>Hi_KRKI=7k2!>>G*pSoYUWtmC?KK zysqZB@Mpbe$DZv@UVr{GcN3hT6?(pvhI?JLq4~4wUi|sxKbY#CYR+DVsk#?`{tn@l z{8|0g{8|0V{8{fAw&&B2x|+(Leo{s+HFnC&j6b$3^YS-!&zhgZ%Y23K^8T#(Q|$TV zkMcU+Yran}qw)FvtZ`)i{Dzl#dG^yc|Ihk-x_eLe?vLEm=aX-ba?sVJvqUcu`j5!# z_kenjf?g-M$R#18g-*nEAxXAz{$9q~*JpI^;33@x@xi^z$9&PV@Km3k^h%~XLPrtf zQM~}Xr1F^jh7Uo+9*3Wh+kR}W<1V?-HKWT{JpnSM@<+fA|Dmww2d}F7QF4MroW1G* zn3u>?a>%~_ivM7HA^eTv&Wo^bD!)U_t@2_btH->Ue%1ON{bh|3&lcrm|9y(fR?I^` z$7S4u)#5a&{ObDd0xh)j@FWkGsx`XTER5RC9pFydUcGp>gH!^XEPseE(f;PG>XnvuM6P)*;1K zGklqocN(9OawWJ-ZF*S7=ko60%trqFB8Ls*3!icKtF!&gzE=Mb&W+|8q+HVZ(FgY# zHk;JP(J$K7choz5oA$GRN1N`&Z+qIl>6xKy%1Z++QkjCY5V^Qd#P@|Vnv=^xnsKhY-^Y2U9ji;y*#6@jWzVRq!d5tHaCl# z%+@OA?s-?KkDct}jZaRxpvX`0Vw0CcHx%ukKK_d~SK(Kr{&&n>;3i#5<}hqsj;l^J zw*}<}xhK(g>%OFqVK35sLf=x3c$2w82bAa1>ime}Y}*`l=eYL%*g46|gR4T%qWPTY zquN6mpUxk@>Z2~dJ})|6{&xD9$B~+UnzYRx{NcCgJf1iW2>t)*%U{TQ@b?#q3}!SS zY@)h9+@DOIqmJ&~ z^*yEikaO;S+O}8tJL$MyqIGRA*qRJ!k<2msA^2jaKM~6nG%@@k9()a$BZUcmO}-AX zc9%T|d3o?=Z%tyaAMP9DE9!7QLI)i7p^WEb^hBIDi-HIe;f?!Z@9V zoV?R)I+2sjbjqS@q0D!PzLb6AHtti;({}o_tiALL{1&-Nf__Fmf!NDG^mfY8pPzjN zzrad5b>=Df`@lDPmnZvD{X3+eJnJ`p-KRG1d!n(4{(-|ZpD?n9;@jWsbQ#`Xak%VL zU_l2;A@ZTgUYL_Zr-wD^Gk1f7`m9`a4aq5gVpKjrdIXMuU|b@L z%eV`^mVOm{Eq@n$t*@WkU}T-_%=r7idCljJ_uu!n?)e`Y?$q*nK5egbxB)yHG(lx5 z`t_4PPkqMvbEac4c`Tnd+Ia6bdmFX&yZs;xn4!r6{juq;KH3 zh<9@S*Y;!71OKLaoISNQGKPY$fai&Geu%Hg^HS)%d?antk2FW0(dC{DUwr5J?9Lp< z?f%-~i<9EGzx ze8e3=1E2rjs&k)mu@v!t)H@Ulpty>;Q(VQb#sP?|z!^v}0hPGG*f-8o8LnlW`u=SZ zbI|jv>3nbw=?a)jg$>NW<5isja}+v*4uBX3>qZ#wJeXjN+_GI#@h*%W0-EmIiUX{o#_*q{=J?Nk6F!{}V zOuBQAPkZ>s==m49LF%zz!#^YPG`e5-$*-Ll-0%I9KhfktDRcVBi@R}X-bXLamq7e3qJ?_{sP{`Jjfo-pTSoV=Mj8_&v_X`82V^nJD-ta z28%ftd_mb*pMb3}X{+F+I+(U@;6~+Z1V+dS)Cqnl?k-5Wzb~YmtO@JT@4NR=;b>pL zMKP|3GmLmQ?Z3<$Z58uIo!~3N7d>?E5$}2^r%~e1Vy0G|*Pj+ylPw)L=eb>oF%w2qQ-Jj(H5FG3Jq>!%@PNOgB4i_0~hR*|r%LJ#d`s3Q( z>Fy7EU)V1`FQ*^&GrR+*hyE(c`Z#n?_}ra-{I4s^I=s^~M)s)k2GW;DwXKt16#M{u zrQ_^b)h95n@T(8r;En&Umecd_4WF#f315W%HRe3#Px-|RR?>emzOXM9HVDcFKcV~B z&$stk$J)b9fsc}&F3E$OBVV(jtjO7jyJu8pWj=m%!i@&v?uVK5KCvJD?1sLl(?PQa(Wmczp0(-ng~(-BhcNvMkw1cTQPWMB$pW{xRh#UCH@76jI zQ#wQb#Faj!_|F?6lio1gRfTIN)3-J-)}4pp9`Pk{&GOb5P6cniFk zWPR#Izu!4in2|#w_4CvIV%MLDozOL4tXda-@fZFl%FuQy3!bW$Wxt2*;#UQ~QYVd< zbE5DB_x^7Cmf{-dr}8*b#@9XaW(R&w_^vx|UB3F@7lHj9j=S|tI*r$7=aW44QEABs z=!W8Yc$E*&_%_dVBV|sXKkCZ7_`G{w{@w2Ral@-x{>jhj-e3Q7={aziw(B@S<|on0 zUOp*3n?b`9U1WR*-?48}Ip9Vfjfh)Mc1HGx^Ap;a@BGECkKZ@%p5OOV-Lv9unOExm z>bui>(_7j5Q;lEoXN}wO=h0Vo<@MfYf3I;g{``jT>dLgQNY9q<$I6^&-Xeeg_IGz> zG&f4T{{(-}_=A@k@T<(>;9c+%A5Hyu?(=-{UfP1@1`OqWI4jC0@vG~@Z}2$ICv~#W z)eavj9_K8D-7s_+A&U;i@!BKx|%B%00;63JC=ULW*@wz>*(8If|s%0~~ddD+@TU19zJAs>mFH#*d z^fT!=@-@Eb`GwX$=a0L6^J&@pd=Cl#1ASKBp8etDO0+R}@wf{~;RY|wZ_q)tjZi=2 ziI4bSbZ$;hMTg5+)VCPCt3G1)5v^@=GMk(vYgFf|4g8#h`dbh(;aaN;n$t+ z!d4$s<~?FBmCmugR}Dv=K4HB1srqjDdJlXa9Ebb)>gHL_A@iW`;Ws0eH{=wTugdcI zSlLg0{!A|^?R0pfZ(q4`g}ir)Q)n~JeCT@>pT=520|WPl{`XyP*R_c}C~s-PK5-{%_$q}TNcbv6oZ#O2Rm%Ue-i$Hur^}+J z;TM(9tLEx5+-v-_JTni08>dOtTdR?&HUA+Vh%NNuxr(RY70uuFxmN%cH32J=5ZedXV? zF$Evm@+V^~_aFO9;YPnWuZd>odo!N%y>Ihu_505;M*{C9wAug8oGNXhoXQ`R>)YEi zy?ETmA${+jnVYb~IS-O>(*O6fI@SR_I$+Q0#!P=yw+>Cx+;k=*CjXSke=^9uZsY6l zHuD*ATF<+x;}2WjX^OdG%=(SBPj)`W=kFAEM%~vxtuSo-!Sm5q^<4l?s?T%Cv$m>P9`Y=iJXZ9UyqkCp-;cpZ7r7A3R@v6IJjWpMd{E9zD z)X#LBxxOJ%C$0O-cT$;CxAiKH3|`FTpVK7g zvFC$_NHT$){qB5GMrCe(i#+iBtunaugXhrAD=uT6uK#|0ANdJ&4A)Knq|dISD4&_T zq`UZmZY+7(TyNXc(OVnYTDwj~-+N9)U5m(vmBprU+A(!@EE#ZpiwHfI^ET8G8e$mXU6IKDrAA<-}3%k^xWSs(x&M$ zQvQd}`zh_ql`Gu67CesncvR(^`CEM!XkYKVh|d6Dt_n(LWVPN%-+ zUK|`5{wc~A^LN}~r#w3KG&d*j<4!yE@!-AY5a4~-Q6e{W*lEU?wlVh+=u2z=U~ zvv@CSK>hcV(4!B_&;<(;qw)`pg6NBe$DZ}p54INqD#b=JnVL%o76eyECzm3dnt1j zcD?VpZ)1;~YObRUf5MYrektFXvtRi!{XPA}CBK}RPZb`5UyX6)S9O;3Mfud|6X)lE z&eG)JQ-d9LR*ho^)-`F1y2+Q8{i$p3{Mt8Ud*1KPQr!P{Ob#?Ykv{yUU$H(uE;ec4 zxsF@M<2o{%7jT{KG0G^e6a2=UMH&C5@4~0l*H+K>3;v9j*XNPQ-F`Op-md&?%6Qqg zdVZKwT^pGzkpcU>DD4-tRp4YgA=PU@<5m9w47Ekm|JOfFIVnqhmHokas*8~^!9yL& z2i>>12d^1E0Unc?Z15>|m9B2S>Jazc#hyLLI!i$OYyAZD1G)bqHXJ($J*p;=j-EZqI;-VANXiJ zW3rxK$T*}t&#tdY{-HfT%c4y9hStgy{-~_;pbT@QZCO7r^Bj7`D-xd=GP?W0CjZy) zbqN2~*k{q#@K^O*)jFRJL(hZP*JrP*&t6ZT^SWs*ScAXzQMMo6{Tce3@;a+6OU@Ew zc73Hh+j+{@?9j8!5o7Mh-Gr_*`5Zh$Irip-_p5?;)xH8=O}-FMQx|?Y*;_=p%-+^K z1K$ zSRbM-%|}8x&BKzlsW~!eL-Ta-8!;Jbt9Jc@`=IN7@w47N%YFf#_b2Hi^SO*~1HD;R zZ}6>#(YH88p@W8%BE0qt;p zuw0{<3)>S$|Do~8zQMlo9Eu^Yo_@jKSGXOVzTBL{q<+}i-KNmR5qIB`{@G){lsAcU zth^fIa5%%V?6W8vJlprZjXrkpPeX^E%W!e_2K|ctBl`mwVNVFVpZat=Z{h3T%`N3) zPo(oG^xJWP@0~aYIZx8@nPLuLO%m< zI8IJ&>HI@SwO=yMKVou|y>zqh|bNBRD%_IKn5kDT2htHu30Q_;F?DC(wa6+aWWDA4}+&GyEQOQ^sy<{xQJf%&R{J zF#Wzb`zGxi`sO%J>!CXt)C>6D@5Jjp$a|x+U0-^2a~tx}XQO>_CyI_;%lqCxTK7=@ zKUDL^xvud^E)!_q-A_bu;g7wIHKNYH*yyk2J>&dnK0~85r>}meuH)(LzpZ7oyyi`# z-1@q|V^9A%(IGm0`riLu-=BW!Z|vS_E;*_5(_V*mU4L_`x(DZNRbTiKciOXS*P8QZ z-gM=5bF003r`fi=dg-(GZryxjH(HKn)5&zXo9)(<>3A}4r>oUsv}x9xO*OCZ{EAIz1iHoYwr!nYPwvF)|1hAylNNQ$!4+Kt!K;SX18AfW45~T zy7v4{H@5AyYq!tt-PphNb?xoljoZ%v?(F{gwtcews{8F-hwDWR@OnlU#*=orXqu*- zHqC0hUQgzu{d~UK%}3KKPu{sobh6vb zn$2>&+s)_gYP^|Td9t~^JG=G7TkhOEJ8$mYIJ^DW&1cTeZ`^zKmW=wmxp}j_`NUh= z?S1)nsX`hbkQ;^?RvggE+@-XC8TQJDF%VxcrkDJYOyj-`N!s(tO+*`1d4I6MEW&n{*p zl`#0@~|CXvs`VK)5U1HnND}(^?WkfPE)U+JwLmBcK>cZ;g3D@%z67vf5~fa zebv2>15nq;*T=PL-ouu8+_McUCd)%2Vgn0T@Qcf{o7mJ zfO`54^~73iHrpKsWI1k|&3>|Hvgccx+;66%QM(v#^Eq$7>Z$YQ_TBy2xomfKW%i<* z_w1!LG2N`%S<8Ufg!9#U%FbCV*1OfTnNPQi$-=7Ys%CW$1C&X4Er;!OU+`GgpTUvn z7qQOJfwoz4xF$Omy=mEBqvfuh?N+aGDDf~#sRjHmO}n2j@=%%KX+5{xC- zyIJg*oaJVI<&_{*!Fo5|1hKpenY0dPudS=w#b~{sG!PT;^>R0Ew(G@cG-qn&FBSZ}7g&A8o7SBvd(w`z9FRgDvPvoZ(Q zSKB*xKG$fu!MZsbjTYl8Po3R4yLtA^Td!UF>Ug|z&)?N6P1hZ-aBgftpG!EuwY@&M zb?3(Q$z9_r>X2r$E3bRvOCP`f^^$W~0B0kfY45%2@hjW2^Y;4W zT;J8Jtj1TKeB!akzvK!3$pweRza_ifUXh2f{G=~au7(R&GB-2us9fM154Iy@5xA>dg~o_ zdmP5A^5@kT9jsex3d$w3k6*&IXLZC?w)TS1>-yl!g=)e*{;)%Mn#H2s%+?E-x*hX0 zUMasTLrm2S&m9BVPMP1;YCIdaEjot%a)Z#eT`b3oJ+ghXll>?l2eb%8-w8vBjC9Bz zDbYmpLjaBoY5P^PY1c6E>)E7fW|RG>o$lBji}`Z5foVI^ulDx68~5HSwB}W}(Lto0 zai}9Uw+pt>Zr^Y!md$KGZAQBl`)<;%5Vv>RHfN1XY82Eh7mG7;WzfeP`2YEI(QG#C zi*}44yk?s(+tFgNT273M$Z9F8oVU}hVOGjuUnu%9a2HixcJ+zZJazTuesZ2_Z-L?N zwf!U1mDdJjss(SAqF`m%{X#ymh@mZ<^>#63Q#DH@pz&N(ChZ<=#zYB@)a<0G^E31S zckhaJCxq*)fI(f2+GRVPZ8qc0X0jVk_T&Aeg+E5n+AiRkqtgj$A0_&r{JQ}K(;#eY zL0Ii%KSc;&@#o|1X1v(8Jj~AmA zh`-rPIQ%H~GQmg0w8~P1tTx>)nds?e0+8`+xkGi-q6-@%N6cpYWROa_UWHl~vA$j? zLNU>0y&h63KN`@*Zn+*c^WA8(Xtwk5XxkuhF2>Dx%dy;}`pN{bo)XixO!nQE7D~C> zwGATLY|%{G*=#!!H4x~I!xi)V`~=k4}Q z%5}-ZklA9Bl(hNUwd}wSzV`SlmD1+3pa~iID>&DJG*&=N7K)4xkh=@HA@AjYQdV0! zCP97aSw>oup78;|kC(^PtRa}ibX}&yXm+%CMtlYsGdYSuZf#C4{`~bi3J&_vq7CYm6_<@Ej&!HEA$)&6=?bxmUf3M3{;W zr?)nt<+#(w9@kXRG8^b~F3L3(0q=tn>Vz8|i-3WZZfdo6lh`z;CJz6%q`DQtpPtnK6Y7dAWqEV6?FC!rx?nAzFGn)9E zigYR$$+mKul{Qo&YOYJ_(^K0MBTu#tT<=Cq5T@&Pwq7rq875pD z5qjbncAzhA-)eo!3AuF(50WVgP>f`2_7R>E^Z6blINh-$Yvtv@#JV{lBpz#zAC^v4aPsAncVC$I)TF>fF zzrRj}a$RP|Ha4N?9T~IT=50Lh?YgJjP&ox(Z zb)|Rst{iD9h&rL~Qh{eE z-#jv=X_(6Cbl*((;^DHu{Smh+c>O6ZmivJKboXZ4-Z4^DlY3T^#S|4Gevc~=dS>fp zG~bV#<#LS6C%`lMTw>$`sRi#=7BO8*_f+ZJSfhtKH-H(0EntIZgWbh%i~CezV8iEgP{ z@QTNPuI5W|g~il0T5qvYjz`Podfnm_g&>Mcpx^`P%YfLF5<=#R^|Gr;f3F@6FAwp# zVqi&3WwnVRM|rR}Smk$bDaJYIuubAHY{2G?VpYsV-Za8KN} z)6ss$)HEBJf{b+HV0LyhO>OqUpkXaTQPPg^a#VR@ggR(NZzmwO`MC3QNuv+WAn#-` z{Aq)~Bd+3$F=nOh9N*Vn13E%7M>m3c&MPXTr7bQ)sMQ_r@<*5g;54pvH=6cQGT`+keNq+ z(YEv5X2M!-@X!O9thb;ee2CXq`lPt-q0ld7-7N|6&9e~2^7qz_78ePWPAzjb+V7Ur z9ZD?}PwP3ZA>sg>#GOKraHM`r>RHW_{ppa*V{Ah*JRJ~xtkk?mXYV!7920;RNdS6t zbK{=+;1iQ@vCuOfVO^r+brI9d#3X;|pF@VkQCcnoW&Rw4uRT`K#Gqtc$>>fo*RsC~ za#jH|StnT|fw@e*@yskSbqdvCWVR_R}`DPVR*|!RW5l-2Z>f_%&l>YY$ zq_OoSL%V?!y3S-DD-b3XA3;%w-HjeP@~u=Ik5w!d_%(!yzpf9m_BFuQzE#>1M_{0V z74^Th5-Xk55(P@>@=c}Y7>R;%*RCNUH8*ekeq}D|@{-|*$uW}>nisb>9WW@>M5)0X z_C>2ffy;|pnXY4JQrGoM2w8pSZ;6dE{C<(7HOnL|91KP3ayhFUc~#0viY_Icxtukg zw)@?pS+$cT4tn$H1TjSZ!s)5S^KNtHn17vpGnzHjZyl1N)_Bz5u|}8|-VrGOCouMS zEux*nv2Qc$yY^kX_U7h|?Ux@BqnhPphMUZMIp4LAL0EZ0DTrvoR}6?a1C|0vAKxpZ z5{!|c>aKthSpwy@1nP{5YuGGi%h77LZRYsov{3p9PqNL+dOacc!WO2J7DYJ0XVX0n z{c8bBd)Be*aS>mYn%a1(D;f&I`jR3FmZ1Htuz1ls~3b7!Ws)AuB|#>(lF_&gD>47S~53UP&|jT%YN@%ib=;s_OPC zO8EY2&?>a!X1@|&&+QVIgT)MU%nCULWsdsad`P0pdU&hkR;+IiEW%avt9k&cLfj+B zg$vvma8bm&V!R|uZj3dMNKXRen2vo<-FpA_F*$E5;ng#uX(2-G65oaCjOa-Mxz`xW zR%i;3ll^0o-a3y3BevtHxF-tJ@G~@;RyE2OH^QuaqVKsrDVeEh3u|;TUnw4W@1u!0S3pd>*@e; zVeKrMtR}QwyT(z7Ue*d!I^^z^f>&dU4Xj_fug28~uc%Yv%t||iq)N}!9_F5cY7HyT z`PrS^K~MfVc@uh2j^k5l`2y z*{=b}B(X=<#6*v#a7d&Vm@K!5EXWb_1{2c^j&;`5RB?x7HIj}jHi(Gp-C|DShA9AW z*Jx+sDFM>Zv7yB)GEUU&UD(N51~l1iR|HaQ@Q}yx5BK=VS@v2*S->9NYi~v zSSUnekM|2%CpHb1rO9MQ%o|oPEHEp0c~TJJLp#B@HR)Ru`Mh^_uQ_73+RP`I?+LzH zlY?M8CC|@t57=h9noV1x`J%fCUZ#)FdzugNkqMDsv!=zxYqVjqz$4?OLrmncA&IfiN`3)vqzDv`&XonMcbG(H?H+fB4a5ai%DP#BCvZ_< zuVDh54D4vbVb{ekOk&IRbT%V@$7+L@>WEoJ&fh>3NEtGk^~A5cSd8oh<+R_A;s#wG z^lwH0>T)AmAVSAhWA^ceGdbNP;j5$SM+L6Mm3wbKyACI$jDkGNA46s#Nm`<&3Ky4S z@)q7W#9uw?MVt+hd>N@yFBwQOv)#D+>a#5;w~G@yAb}}s1>f9R+3+vSY-}YTT3`xb(TeG-Lgl2>Ipjuo$Ta72P6Mxkg|lC^oS4hUT^hIMd2%lWi`Tn4kqn;C^>F5paDs+ zJ0io`aQgN(!K5OhT`bD2Is$1;vbc+ z70R@F@m$?zbvkCDM8KW%aZvm6yHV0+wi|CJ>lvPhYXUz=IkFSYi&N+ku__-8FgHA*=%B_%h$Cz$cRgUvI-EX zkj=w$Ba(d;#!g8(iSt`5dZn$3sj1p4o7M4tH(F1p;$(-Xuw-uFT<~(& zkkN6uEz}DI!Fw*mG1imKYB=4f#~}-G0xgV%n+MJL^t&+OtmwjgOE+`BjsdE0-tB%3TR~sTL+@eh_c+s5nrqqE&7S|crzt61zxW5Wk6h6 z-VlZAk`;McMh%kG9z?#I?Ak3^W0xo;X1Mm^hPv(ur{*_2Co%CYciJ4vR@3QdK@Ul2 zh=|sp?v!|Bd?AqJK^BvyldUv^@DaIcJQ^pt3U8q#Rh4|pz0c){ncO8$10o*eQ#h-8 zud(=P&1rE+gi@-HVdF_pQz*D357fGxL?w9+Gt<^#k;>Sbgr9TCs-Qk$x+v*ag)1aW zWgy@jSQr5=tWW;ZsGo=&d%Pu^5S}-J6?461r32$563-DitCHEt8ynD(TB9V+IaIvD z*Y`!5DiNwRGgFqk6tAS+jQnUnvcD@}$oM0r1ij@ZtsZX_OWrS50SLcY188Q<3+hKj z$M({R>klSXC97KvS664hF616W_oby-kIYgV74+L_01n7mD%6&!wAj$)r`qh|Jk4@l zzj6D9sd(fM{cDJB&dzu3`SrJ)y{SD{tYm-Ni(%=*l2x%oAHrI8kPy_J8w;drf{)m~ z&O8cCQjhl&&vs-%<*CRQRI!pNyv(OTQ1A7cG=+{72P}dpVDd=*yvHr7!7GcLgOY!k z0M3x6z~zr=wm>7ixwWhvub0~y8SZe+Xt&!ImKf6($>E7MBXTP9cjyR$HHRyc<0}pe_GRzCF}?8U#k^K-bdu= zz{zQ{+9E-2k6E%RO7jwpTMHK^CG5DrvU(5iJm)f*AV`QtPL2kz5(ib5w2@sl%|}MC z2FhxIo4y-Z9KvR>I8zk$m_gvB2ooYY2zw^^S3J9{R2vYWezcfiYH_uCnPtJfls8uu zurRg(O#3K!r&_Y#g`_p?)RoDnBb>{+Y?_I~uEJLKIvhhP@Q(Maz+Az}R@?Dam`|4^ zR+D6Kn>8r|;6mplt;F|tL;mu;aU&T$4f#pQV}hR*FtAwK$TWk28nZTGar5bFG#z8F zLQ}BAx>P33ciPu&!pn$pL;fs!)2FyTP*BruzZIur^4RYQctkc}?2`pLqZNLw-T4#% zi5{~BvcFRwvv&r6vqkMfrm0bbyTD2!WZUfwMF1=~5vk3gw22it)SEW2gdy$mziqL_ za_0q>%Jqb-kEAVJFB#BCc|z&S0pcGf=Y!_Biq_*0xQCJZASqbi<|6B%A==|uEV=qu z7|X{*olcX9vex~&63y46RzYVhTgT^8JX8)oc38=?*g{SATf$v;nC3CIk!%CM5%a`= zVBxJO`5@7iYh<}(D5(#wEMw!zr96)#7mAs`wjN;E-i**c?P*t{smTSjAP^eol{w-i z>6lF1gDnlYui!gE+=I2+o~!n}G^p8o{V?Q4h(NmwVEO5>aGeN9s*y{JfY`)B1eA+n zBu__sNpsqKDFwCfA}tOWrvdT11OXn@=?zkNEUwH5dXdxGjzJbI+;~!sxUwc=nJ(?x!ULq~`^v)D--QQNKj_pFCLuk1w;$`|g zhhIaOmBzqfG9p2p$#7Yh?6@(Df+Z>}cWe2r(iqpk2n^54&eH+8PDL0tNG{%CPE%no zgu4=#9TV;D*qt>GVLcP?(%sqi=H1)iI(z7i3bD+lUavLDFkVH3vr!R=CQgo)<-QNi zj9nt)oWIFf4|`(>e@1dA5|Ya0L<>}X+`ENkW`@5MT!Q#YO{}J8L{h_uo7Da+u386%0f0P7behPpOy98u{WrD`O&9(y2k@;z2Vk4V$-<_iIfBD z#cH=_>Iokxj3EV@PvJ@(=1)9it)Yhywz^Eb`3Mr3umRv1%B4{_pf+3>wpfi=Wr78{ zXNaViaO8UEr9T5)okt;uaC8X^Srqj(fdxS=y_+NPji+n;REh7OY{-+1y^;ivf&~t= zeoVB={WU6*(j~fi47zol1czwPNp>@tqxhG+IU5qLa~07T*@g(iBV8XF!fF%jGsNj7 zVulrLhWNQF|`6V4(`g}ZpYPz`$I5Q;demp+ufev!TFZE=frEFw$L^Kpzk#2a&YR0jm6LJ==`Q8b6zp0g>BMW;h*9rtK16b#n4|*)dfRd(@q2g_eEp5+s-;(Md*Glq}?5C(onob+5M!GHzy)LP3Q9w@DAmjaV z+z`S>3a#z9U1IiQm*EKMX1cnZ7R-=)J!axsW~VEJwURZurvVQp+v(#_L~?CxPcSkZ zbFul3q;%&>?qO=|q0iQce8xAC&dR>A1Sb8C_nY;$_#R!oPd{d ziBht^EQ+N6p;rHh2z12GCYhxi`he0_TS+qIpm-)|WseU8y}N#G0NrN4N|Ss2lok^P z&Hktr8^~tc^Rv5mwNmd>ueNUb&Ti-JfyuHPO{5t|(Gqjz8?XFQY0N!oRcLyXG<#HNS{3(t-C=$#psJTZQ9le3!BH^^SVAD4 zNEZe_xS?!3o?K~nxR7=xJN+|+y1s*TAzgJAq?&=u&}8O5(RmscILFFOJI{!7&$FCM zS}U}9+(x`5an^{NpUJ;Q{Lg5O_xcD&ul*uPS`FUNN}X~MYrGjtK+BX1RS}U;wM+i; z5x!wK&_M;aorrbdB1nZ;n8=nS{b;9nqmXEwG>5n-kr$c390E4D>T7|C%pEA~*ZO47 zM$wiH$qR+i#7hQWoQ7~Xyvig80I@~Qwtrc1C%sgOf{;0OVu^LFp$8A`8j$%K*cHBr zh%zI&BbCS(u4%(@a}U>shMD{WRo}-7Gg1S6VU|Z9X+}2+?XbX1-<*FS4+(y$+&?Z? z1Q1BYzYTX+?#R$GnK#G0Cqj_&98eeAj-rCEGrmx`La|#$irf3r1LNrkw08CKhtO!G2lh%S_W)amCHP8q5(^Gx#_Jh0Sc%ZkIT6P00I) z%z(=zx5SsiTSvTdp(`=oog8MsA5O|L!WxXS(6U@9YLK@GIGh@;gImr=6I4D(>6o#( zAZk1%|Hna5r*e*@fy4xmApa3?8<)Lp`L|j~rf_0@2zMoTkl?Zjrm~>`g>qwv&Lf3qXp%7EyjGHUxBXWsyUM&P|vgs}X!2`KIiv#XXxk$Yo1 zyhBxCVYza0eXi8I!u-iKvfceW`ZVa5Z0ICK6@OF#nu#BTnbY{2%9NMXu~M6WP-&o` zcn~U5Xh&xK{?{51GIDvb0nR=mN~LU5hw4_FIz~v6;i{l+4+8$kZPW*cSm`GE3n}hM zFMF((t(v9KX^UueJucGjQ-B&IbF|CwBfK6FK9|hAVFI<(u4B?{cGIH{?Lduc4^^iq zXz~tT)lAU=8B2F%iRuR1viw|W&0T464F_*XW5)z7Rz6ZHmRES)VR$BT#rHwVMJ+Ns z#gyh?82}LD_CpcAw(+oo5<&*CsfUGisCAuJ=b9`xM{gT1a3(vNrJT1 zXohSkM^-vhAu3N~7g8O#>EvPD_B2Z6ynRM5m5F#|+oG54OOlkriQ-}UF#vMB4;2xo zHf^>E(H5-827t2>mjO2f*oZJiT9Eaelo4Dpk#GJ?P^z?%eKpV*icvC&$p%#r>9kGK zX9J0}i^UF20eLb;u##j%*zVzO$(Tn%R<<@Eg=FQzQ9(KbaKDgG#-4~GtWlF40_BKY z{3KkRlNyHrvC(GK<`+T;fF$e;EQ8rsgG?A9c6rj4lIV|U9+E>XCDd|CE>_a79L}Uz zAQ;owyK-jG#D!v%&rR3s%L!DET-Ft`&LLFOhJG z*h0d=rm8%kFcF2?ChSu4{RqERgf=|H@vgx5i%>K{xdzf-Y>A;_T1ws_^LmN?l?AL< z2*Ie<#Pq&iaAfA_sTL$#H$&r-ug|k*L!uy>W|JA~3x=0=rKnu3fuzUnPhBhhAOXdv+5*hNZ{EB`=Y>WV8olFU77U{!2Tzd|hdWgscMER5hLjQN*ua z(TY)Pa3|OuCWM@UB`zwB`vnVe3CT*=iRe@n%{B7{o5KFkzxu5e=Bk1+ACa^c^B!u? zk-0hx9+bJXf97a<^-G&u?Ophc_G%Y+ay#BJ#YRLzj>3~F9*qpeUq(HqE%!+-aO#_r zMQS=8Zt-Of_s?n4l6zU%Q4% zENF50$woKZO}UB)*C#H~BI<$5pj)m%o~#!5C5azV;GSGKD<^BvrUAZezWj_%)P%nD z*`Sihl4x^y;yEcE$zwU5ug7E&8SNH0_N>Ta?7bOa=>y_Yag;7L2pyJ`9wF-l$qsO3 zEZJ026;G1_uB5$R?~ zSC6-ByPVER29O*|Dm{~x?)iqvCK{BqhDKbQ1*f`2E013<9+PCX;nt>>i<`)Y=3p!Y=1^H(g8?R&>%mYm?gw9 zAoeMw!6h#@0zOe`++HOYeyzCy9D5Sitzk6<4`n?r2xrA4n0@!z;QB(MVkEH%E?9W4 zttOK>SNah&(~dV5%#l^<*}bd$=pji9B!$!Be#_Mc%k^YT9MpbEx>g(|*9~YjHvttb zat5=%i@EaE@#(*0>{*T2ml-sqxmqcoGSZ78Oi4oBNsEb)OX$e>Kc4SNe#1o(YCCo1 ztfk+I)eYH-yU0fq!inc2t|bRG5*;>LOc2CLp@GG>$~w4DR)8v52Ydgv%0*ET=*5GBWZg-E^08bwgKFW+vhsfvy zws+hcBStgmW~~*hjE6dPWK@T$9E4SAdgM(f;-Qt(U$q)t)KsaVgLFKYX)77Y5?S-R zOiCPE>4S^nhcIIyUp2un$jA=WsI)P%xIMw08MOsQUBXJ1# zisA>D3|y#2c39qocPND}2qUR9h@9pwWF#&8^srWuc&#CuaYL5EPUz~hJB8Ra#j|6H zUlO;S;HN5C=Ltfdt#&21cj0710`Sd}oQl}JR`{&#xjqR6_oRh` z**4bst8AkrMI~M(y)iOLnLaAN6Zx?Q-;B89YKfW>P51`IDT7~0LjNh5w{U%I*NdZ} zSA)dh@Z24}aOUBX_mO4v<6ea122&zqO5Y8vc>TcOpyEa4jA@F?YIaN5OS$iQTTAA2 zX;F39*g+(mk&VDi1%|m;P#cI;HabikT+cefNJ#okleU zgLRcFCg6p~C^oio9RTjZXgkO=u_lqu3J1ZU3I}LefEB`#7ct#E=R}l@f?*{wAr0<XrGd@*Wetu*_T}1!8O6$K0iZ-kt#PwnLt%C6qz^`LD9$LDK4K*%FUe4UMx|O74Gi#*>-pTre`Bde+}8J z%*!WCPcBfEoiD{F_SMa{y>l5UDuvi~xTq1R1LX}k8 zmy)Nl+=v5IZ`fMx)ogj`%b-Z5OOw%I^H4_ms{ZR;61>XigXF8y2{fk%iyslF4&RaT z02466yH$!OI^+bZcvtE32%QsU1bOC!h8;$M%m6XL% zsD@eV5>@OCX|PtS(hd$E(vIL?^cnV8DaK8J@~uQ_#m+82)j+IuJ~0xUH9P6yt(LSk zcLnSr$;y-)XtS|MyZntSM)e$Mm zfcEWGWWD&}_N|wYqU@RiHl6ra4kf4+UOME2!%d~dwT}CH7ZMUe(D7)V5cxJE}F?g*fHA?SNot7>o^1{=T+VgXb+rG z;V~Feksu{WJ$Pu94#CTF`~{3+-3C4A@!E(A_kb0Zn*1_^9(4Ye;{~j+h7_az-5jdk>CvNoKAisPTkC>S833K zG>4=pM%e#qeISIATu1K!3jRGqmyg? zku5DvS4lAWGY4?e3JV#&C&B$`2q6V6$3(%BM`BLC^9G+ibWLmVw*zzI$GfOVD&|lU zyQ3t}HX9^>CnE(u-bC51<%+Z^nN*hBF$Q`3w%3`?s;r$lSH8AU^A=mVHAvX=BKr1&5nFmjwh3U&OZ*Jb$e)(mD84^r5V$Fpa zca|#2Pp^L_$E1j-L{L~v(0)KouPe2WiyRp_Jc#;Bk0j|49>me~0F7TH#+2rQD)Fj} z!f%MG7C$1hJX~X*QZ5%#WO5P>(6Oh#D!qjzkurjIN)jQe+VjCY4c z7BsJgKNiWPQjVoX90+(rsfDa&_yQ3~BUc)dqd`LN#SXB>A3>}*uGOmh6=V@ooz|(Z zz%9j-IRXlC?4)+%7AzzTLNcH_JMK)yxn)03)*Ym>S3PdjEf-C2oLCUBj)aA@MN%U` z;Cm&`;izjGiAX(o{n*i~$;`5FxUx}6QqQesP-Vh)@CxDfT2j+N`ggd4kUxyf7;NSe zp=U~~Apd0n0}L}d!r(%Ji?M_a`@TG56)+T?PaAo4(*hv%x>%6nBxS{{i3bisI=kIkL~`DBZ`nZZM=jYcu@%Z)0;GFK z&_XCARGnP!1efXt&-zgqL=OVJY(9$voI&LC@2s$${yE-tM@M>B1C*-`lAz{WU_U24 zJpONDVkWVir2Cu^ZZuzlVVkw)iC0Ca=ckH+h77je;0`=vzY`wUq5_(doMOkl0Jtko zQJ__$p5k))0mtE8!u5d|xE)TX%@(&}!SWlxt`}UwMZn;Y38`@^(b1BDu@>6Vo>a42 z&?P!tV&fVz$V?{0-{B;INo^0QPs~7_;ARCB3TC<4 z$;7gf;W4vQT_jTu1JC9pndKz^V&RM|J|d9aYLr{D$6;?x7E{qInV3v4D?6$#c}avU z9rVhQHR9amx9bRIg%3kV6tq1NtqK|Q7E+N4B=Q#rqzY*W5!V3?O4I<_9p_bA0gwN| zT8p}Sln0%8?jy;3!l>ix*2?S&3tSDou0GhSVq|uEC31J-aQr#9HidJd&h(`My$rGFIX5 zI)*Df)zm?rx_^6kuEAFKZZtQq-)ipMX?IyBz4#DcA_+ua52K=(xZ;T*R-SMd!(N$- zVXqu^VTT%Ai^#+9b187$zkNxOi|gtcwb|~5a+Wx=tv67Y(Pp}wq1syz7_q?}U2fhW z!Zmphm`r7yP9|SHLehg7xr2$^UXcELf|H%xEyZ;i*oFu`$&5ooeQ_az!J5k*lcZta z>a&0&JKWC%xkO{Vn@k)tLfA~7hkV94&9QDm+XYBz+J z%$CSo1Zj}YdPG7(%`ygeQBBJiIQkge%U*SyC`G9umae8x)>D#^A$Q`r!%Zn9a^E6z zuJFv`_7ps-Bp|xuZHw9!DwTJ<*UED$Y=!#G?zwtV$1hfCRn9Dyq83_plKpSt>d1yb z5(fh0+4G2mEt5bxXE}CNkgPv9uid}doG0$H*bM`U=4@KStxK!z4voZ`$P6^#m>9_f zkB96Iqn+}mP@>Frue1~7-wa~2o8nc;QO9jcd}Q|oV_{AqtPsYZ3zGB2OC+v1B5BRi zXM_B3kxctWDPjN>VwaOl1HIwrZkkuqR5~6dq=)sU+_K3!=N3AG}B_cJF6>cG@!o z*w49?l{K1tU8U6;8<8KFw7+f4WW^h;xV{i8XUitW{c^ROBhPTZ*%G3oj-4W1-N{7i zkgPEG;k(+-2%Qpyvm)D&WPHHol9c~!{~!`~i?ko2Z5l76-a(Z-R;* zELwx?84@${mJ&%Mg4e4j@C8ZbB&1x{{?{G=-5lnUmZ8{!{*{=&Qh#i@3=bj8Orknq z?W#3bMZ4vR(M?GjDLPmPU43xH$4dXnPbDx)gcj=B;g<@8iRmbk^I%>6vV#Z~uZdx1 z2ove7FN76`S!J*08F(x9hR9+1-0RX67sejXg|WwnI7EdpuBTE_tZb$f#4Pvfg_f_C z3cz5|^JlgdFFgzh(>3?>;+HpFZ&4VJXGHAG@L(rz^K>^!a#-drk&9uZr`~K}L$N&I zk%S}tnq0m!QUFZn5J$|m2{|9oDi^XC*^LNnTC|(Z9MU-7AbLou^bJ~2WE^mviCaBy zs;B&l!5e3{jS}WU8L|CiL>fuijd;NLM#P`bQM9h%+}2HV<(N_1Z7RoKQSX) zVx*_oC6`<`U&=XMbzF%xv%g1AbCzo0A3`w8)W!vUakgfR3=DfeBhT-KkhK|Zexz1I zhfn5itf_Kzi)sa8$Y-J_iV;Lc4im1n=0C)fkv2p&C=57maT9L)3BUt-F>wB?r~tu% zmAC2|_`%&rTm!2Ub+Efx5KHH3B{Mb{m`(T|t^8)Wo?}4R;hl!WPGWd&=USm~n2EVj z=k%&fdq%{%J(s=gI+ne>bW}+WK0)eJx}<%KmF^d?LE-ZSCYX>sV~5?L+3!}|z<@1+ z>;>dEfjMS4{hF8VXuo37*-UJ^ekpN^>%K4!&dJR|-U75*ThJ8&JKPkpBcDxjIZ1GZ zs}fEmt$=jLzuMq0%pK^1uTkS;bUg`0!3bTw)ZUi<)tXXyD~w+@hiR*kVJa5b<*05O zmLxruD_^HIDPLESMOnn=ken;4aXZI^IA3B>A|tJ&AX$Nw_VWptG&e1w7D-pzR)rqY z5E3lQ1#(N2Z6r|QqFxj(MD}8xlRE_qmy|<>sxH^Ajm?PYwQKg90;GD{U1d*jn2V5A zWgg;>A@jhUOpo5WbK}vwmV{4B%RNmKUS6O0+hH|H9;{{MVfZNCr_|}E;P?y>uCu2@9x>tcZyEi>nOL@>v50(f?&OR12s8XMlCeh9S@dh0C z8t@JdidCT|yV;<4T?{IA`~$RvC(e=n_eG+bC&+^|=IIVIvZ0M-1?@o8@sD7&uI5CK((g3>lSNGo6IT0 zs(tOjlcr0YD9I&mJQKO(%Wu8Pa&{(`phAsT?l;J3?-i6*tXusLw{E;e3?tu p=!skcdSZxfb~o(Yw|DQ~g44ZF8X`a8{}1(_5r_Z) literal 0 HcmV?d00001 diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/search.php b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/search.php new file mode 100644 index 000000000..861442bae --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/search.php @@ -0,0 +1,382 @@ + + +Search + + + + +
+
    +
  • Main Page
  • +
  • Namespaces
  • +
  • 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 Mon Oct 8 11:16:50 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/send_8cpp-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/send_8cpp-source.html new file mode 100644 index 000000000..80d5342f7 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/send_8cpp-source.html @@ -0,0 +1,173 @@ + + +ParadisEO-PEOMovingObjects: send.cpp Source File + + + + +
+
+

send.cpp

00001 /* 
+00002 * <send.cpp>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #include <mpi.h>
+00038 #include <semaphore.h>
+00039 #include <queue>
+00040 
+00041 #include "tags.h"
+00042 #include "comm.h"
+00043 #include "worker.h"
+00044 #include "scheduler.h"
+00045 #include "mess.h"
+00046 #include "node.h"
+00047 #include "../../core/cooperative.h"
+00048 #include "../../core/peo_debug.h"
+00049 
+00050 #define TO_ALL -1
+00051 
+00052 typedef struct {
+00053 
+00054   Communicable * comm;
+00055   int to;
+00056   int tag;
+00057 
+00058 } SEND_REQUEST;
+00059         
+00060 static std :: queue <SEND_REQUEST> mess;
+00061 
+00062 static sem_t sem_send;
+00063 
+00064 void initSending () {
+00065 
+00066   sem_init (& sem_send, 0, 1);
+00067 }
+00068 
+00069 void send (Communicable * __comm, int __to, int __tag) {
+00070 
+00071   SEND_REQUEST req;  
+00072   req.comm = __comm;
+00073   req.to = __to;
+00074   req.tag = __tag;
+00075 
+00076   sem_wait (& sem_send);
+00077   mess.push (req);
+00078   sem_post (& sem_send);
+00079   wakeUpCommunicator ();
+00080 }
+00081 
+00082 void sendToAll (Communicable * __comm, int __tag) {
+00083   
+00084   send (__comm, TO_ALL, __tag);
+00085 }
+00086 
+00087 void sendMessages () {
+00088 
+00089   sem_wait (& sem_send);
+00090 
+00091   while (! mess.empty ()) {
+00092     
+00093     SEND_REQUEST req = mess.front ();
+00094     /*
+00095     char b [1000];
+00096     sprintf (b, "traitement send %d\n", req.tag);
+00097     printDebugMessage (b);
+00098     */
+00099     
+00100     Communicable * comm = req.comm;
+00101 
+00102     initMessage ();
+00103 
+00104     switch (req.tag) {
+00105 
+00106     case RUNNER_STOP_TAG:
+00107       dynamic_cast <Runner *> (comm) -> packTermination ();            
+00108       dynamic_cast <Runner *> (comm) -> notifySendingTermination ();            
+00109       break;
+00110 
+00111     case COOP_TAG:
+00112       dynamic_cast <Cooperative *> (comm) -> pack ();      
+00113       dynamic_cast <Cooperative *> (comm) -> notifySending ();      
+00114       break;
+00115           
+00116     case SCHED_REQUEST_TAG:
+00117       dynamic_cast <Service *> (comm) -> packResourceRequest ();
+00118       dynamic_cast <Service *> (comm) -> notifySendingResourceRequest ();            
+00119       break;
+00120 
+00121     case TASK_RESULT_TAG:
+00122       dynamic_cast <Worker *> (comm) -> packResult ();
+00123       dynamic_cast <Worker *> (comm) -> notifySendingResult ();
+00124       break;
+00125 
+00126     case TASK_DONE_TAG:
+00127       dynamic_cast <Worker *> (comm) -> packTaskDone ();
+00128       dynamic_cast <Worker *> (comm) -> notifySendingTaskDone ();
+00129       break;
+00130       
+00131     default :
+00132       break;
+00133 
+00134     };
+00135     
+00136     if (req.to == TO_ALL)
+00137       sendMessageToAll (req.tag);
+00138     else
+00139       sendMessage (req.to, req.tag);
+00140     mess.pop ();
+00141   }
+00142 
+00143   sem_post (& sem_send);  
+00144 }
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/send_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/send_8h-source.html new file mode 100644 index 000000000..53b935c60 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/send_8h-source.html @@ -0,0 +1,79 @@ + + +ParadisEO-PEOMovingObjects: send.h Source File + + + + +
+
+

send.h

00001 /* 
+00002 * <send.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef __send_h
+00038 #define __send_h
+00039 
+00040 #include "../../core/communicable.h"
+00041 
+00042 extern void initSending ();
+00043 
+00044 extern void send (Communicable * __comm, int __to, int __tag);
+00045 
+00046 extern void sendToAll (Communicable * __comm, int __tag);
+00047 
+00048 extern void sendMessages ();
+00049 
+00050 #endif
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/service_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/service_8h-source.html new file mode 100644 index 000000000..a5a83054b --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/service_8h-source.html @@ -0,0 +1,107 @@ + + +ParadisEO-PEOMovingObjects: service.h Source File + + + + +
+
+

service.h

00001 /* 
+00002 * <service.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef __service_h
+00038 #define __service_h
+00039 
+00040 #include "communicable.h"
+00041 #include "thread.h"
+00042 
+00043 typedef unsigned SERVICE_ID;
+00044 
+00045 class Service : public Communicable {
+00046 
+00047 public :
+00048 
+00049   void setOwner (Thread & __owner);
+00050   
+00051   Thread * getOwner (); 
+00052 
+00053   void requestResourceRequest (unsigned __how_many = 1);
+00054   void packResourceRequest ();
+00055 
+00056   virtual void packData ();
+00057   virtual void unpackData ();
+00058 
+00059   virtual void execute ();
+00060   
+00061   virtual void packResult ();
+00062   virtual void unpackResult ();
+00063 
+00064   virtual void notifySendingData ();
+00065   virtual void notifySendingResourceRequest ();
+00066   virtual void notifySendingAllResourceRequests ();
+00067 
+00068 private :
+00069 
+00070   Thread * owner; /* Owner thread (i.e. 'uses' that service) */ 
+00071 
+00072   unsigned num_sent_rr; /* Number of RR not really sent (i.e. still in the sending queue)*/
+00073 
+00074 };
+00075 
+00076 extern Service * getService (SERVICE_ID __key); 
+00077 
+00078 #endif
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/src_2rmc_2mpi_2node_8cpp-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/src_2rmc_2mpi_2node_8cpp-source.html new file mode 100644 index 000000000..d52cbc6c3 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/src_2rmc_2mpi_2node_8cpp-source.html @@ -0,0 +1,115 @@ + + +ParadisEO-PEOMovingObjects: node.cpp Source File + + + + +
+
+

node.cpp

00001 /* 
+00002 * <node.cpp>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #include <mpi.h>
+00038 #include <vector>
+00039 #include <map>
+00040 #include <string>
+00041 #include <cassert>
+00042 
+00043 static int rk, sz; /* Rank & size */
+00044 
+00045 static std :: map <std :: string, int> name_to_rk;
+00046 
+00047 static std :: vector <std :: string> rk_to_name;
+00048 
+00049 int getNodeRank () {
+00050 
+00051   return rk;
+00052 }
+00053 
+00054 int getNumberOfNodes () {
+00055 
+00056   return sz;
+00057 }
+00058 
+00059 int getRankFromName (const std :: string & __name) {
+00060   
+00061   return atoi (__name.c_str ());  
+00062 }
+00063 
+00064 void initNode (int * __argc, char * * * __argv) {
+00065   
+00066   int provided;
+00067   MPI_Init_thread (__argc,  __argv, MPI_THREAD_FUNNELED, & provided);  
+00068   assert (provided == MPI_THREAD_FUNNELED); /* The MPI implementation must be multi-threaded.
+00069                                                Yet, only one thread performs the comm.
+00070                                                operations */
+00071   MPI_Comm_rank (MPI_COMM_WORLD, & rk);   /* Who ? */
+00072   MPI_Comm_size (MPI_COMM_WORLD, & sz);    /* How many ? */
+00073 
+00074   char names [sz] [MPI_MAX_PROCESSOR_NAME];
+00075   int len;
+00076 
+00077   /* Processor names */ 
+00078   MPI_Get_processor_name (names [0], & len);   /* Me */  
+00079   MPI_Allgather (names, MPI_MAX_PROCESSOR_NAME, MPI_CHAR, names, MPI_MAX_PROCESSOR_NAME, MPI_CHAR, MPI_COMM_WORLD); /* Broadcast */
+00080   
+00081   for (int i = 0; i < sz; i ++) {
+00082     rk_to_name.push_back (names [i]);
+00083     name_to_rk [names [i]] = i;
+00084   }
+00085 }
+00086 
+

Generated on Mon Oct 8 11:16:45 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/src_2rmc_2mpi_2node_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/src_2rmc_2mpi_2node_8h-source.html new file mode 100644 index 000000000..c107521e7 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/src_2rmc_2mpi_2node_8h-source.html @@ -0,0 +1,81 @@ + + +ParadisEO-PEOMovingObjects: node.h Source File + + + + +
+
+

node.h

00001 /* 
+00002 * <node.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef __node_h
+00038 #define __node_h
+00039 
+00040 #include <string>
+00041 #include <cassert>
+00042 
+00043 extern int getNodeRank (); /* It gives the rank of the calling process */
+00044 
+00045 extern int getNumberOfNodes (); /* It gives the size of the environment (Total number of nodes) */
+00046 
+00047 extern int getRankFromName (const std :: string & __name); /* It gives the rank of the process
+00048                                                               expressed by its name */
+00049 
+00050 extern void initNode (int * __argc, char * * * __argv);
+00051 
+00052 #endif
+

Generated on Mon Oct 8 11:16:45 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/src_2rmc_2mpi_2param_8cpp-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/src_2rmc_2mpi_2param_8cpp-source.html new file mode 100644 index 000000000..4799a4a15 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/src_2rmc_2mpi_2param_8cpp-source.html @@ -0,0 +1,78 @@ + + +ParadisEO-PEOMovingObjects: param.cpp Source File + + + + +
+
+

param.cpp

00001 /* 
+00002 * <param.cpp>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #include <utils/eoParser.h>
+00038 
+00039 #include "schema.h"
+00040 
+00041 void loadRMCParameters (int & __argc, char * * & __argv) {
+00042 
+00043   eoParser parser (__argc, __argv);
+00044 
+00045   /* Schema */
+00046   eoValueParam <std :: string> schema_param ("schema.xml", "schema", "?");
+00047   parser.processParam (schema_param);
+00048   loadSchema (schema_param.value ().c_str ());
+00049 }
+

Generated on Mon Oct 8 11:16:45 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/src_2rmc_2mpi_2param_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/src_2rmc_2mpi_2param_8h-source.html new file mode 100644 index 000000000..5de9ceb5d --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/src_2rmc_2mpi_2param_8h-source.html @@ -0,0 +1,71 @@ + + +ParadisEO-PEOMovingObjects: param.h Source File + + + + +
+
+

param.h

00001 /* 
+00002 * <param.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef __rmc_param_h
+00038 #define __rmc_param_h
+00039 
+00040 extern void loadRMCParameters (int & __argc, char * * & __argv);
+00041 
+00042 #endif
+

Generated on Mon Oct 8 11:16:45 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structNode-members.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structNode-members.html new file mode 100644 index 000000000..607b10646 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structNode-members.html @@ -0,0 +1,42 @@ + + +ParadisEO-PEO: Member List + + + + +
+
+ +

Node Member List

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

+ + + + + +
id_runNode
nameNode
num_workersNode
rkNode
rk_schedNode


Generated on Thu Jul 5 13:40:47 2007 for ParadisEO-PEO by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structNode.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structNode.html new file mode 100644 index 000000000..feca8d02e --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structNode.html @@ -0,0 +1,62 @@ + + +ParadisEO-PEO: Node Struct Reference + + + + +
+
+ +

Node Struct Reference

List of all members. + + + + + + + + + + + + +

Public Attributes

+RANK_ID rk
+std::string name
+unsigned num_workers
+int rk_sched
+std::vector< RUNNER_ID > id_run
+

Detailed Description

+ +

+ +

+Definition at line 20 of file schema.h.


The documentation for this struct was generated from the following file: +
Generated on Thu Jul 5 13:40:47 2007 for ParadisEO-PEO by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structRandomExplorationAlgorithm-members.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structRandomExplorationAlgorithm-members.html new file mode 100644 index 000000000..f45769568 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structRandomExplorationAlgorithm-members.html @@ -0,0 +1,41 @@ + + +ParadisEO-PEOMovingObjects: Member List + + + + +
+
+ +

RandomExplorationAlgorithm Member List

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

+ + + + +
operator()()RandomExplorationAlgorithm [inline]
parallelExecutionRandomExplorationAlgorithm
popEvalRandomExplorationAlgorithm
RandomExplorationAlgorithm(peoPopEval< Route > &__popEval, peoSynchronousMultiStart< Route > &extParallelExecution)RandomExplorationAlgorithm [inline]


Generated on Mon Oct 8 11:16:49 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structRandomExplorationAlgorithm.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structRandomExplorationAlgorithm.html new file mode 100644 index 000000000..400d3148d --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structRandomExplorationAlgorithm.html @@ -0,0 +1,61 @@ + + +ParadisEO-PEOMovingObjects: RandomExplorationAlgorithm Struct Reference + + + + +
+
+ +

RandomExplorationAlgorithm Struct Reference

List of all members. + + + + + + + + + + + +

Public Member Functions

RandomExplorationAlgorithm (peoPopEval< Route > &__popEval, peoSynchronousMultiStart< Route > &extParallelExecution)
+void operator() ()

Public Attributes

+peoPopEval< Route > & popEval
+peoSynchronousMultiStart<
+ Route > & 
parallelExecution
+

Detailed Description

+ +

+ +

+Definition at line 56 of file LessonParallelAlgorithm/main.cpp.


The documentation for this struct was generated from the following file: +
Generated on Mon Oct 8 11:16:49 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structSEND__REQUEST-members.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structSEND__REQUEST-members.html new file mode 100644 index 000000000..e3d9f7ca9 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structSEND__REQUEST-members.html @@ -0,0 +1,40 @@ + + +ParadisEO-PEOMovingObjects: Member List + + + + +
+
+ +

SEND_REQUEST Member List

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

+ + + +
commSEND_REQUEST
tagSEND_REQUEST
toSEND_REQUEST


Generated on Mon Oct 8 11:16:49 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structSEND__REQUEST.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structSEND__REQUEST.html new file mode 100644 index 000000000..307bc5ff4 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structSEND__REQUEST.html @@ -0,0 +1,56 @@ + + +ParadisEO-PEOMovingObjects: SEND_REQUEST Struct Reference + + + + +
+
+ +

SEND_REQUEST Struct Reference

List of all members. + + + + + + + + +

Public Attributes

+Communicablecomm
+int to
+int tag
+

Detailed Description

+ +

+ +

+Definition at line 52 of file send.cpp.


The documentation for this struct was generated from the following file: +
Generated on Mon Oct 8 11:16:49 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoParallelAlgorithmWrapper_1_1AbstractAlgorithm-members.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoParallelAlgorithmWrapper_1_1AbstractAlgorithm-members.html new file mode 100644 index 000000000..875eaa683 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoParallelAlgorithmWrapper_1_1AbstractAlgorithm-members.html @@ -0,0 +1,39 @@ + + +ParadisEO-PEOMovingObjects: Member List + + + + +
+
+ +

peoParallelAlgorithmWrapper::AbstractAlgorithm Member List

This is the complete list of members for peoParallelAlgorithmWrapper::AbstractAlgorithm, including all inherited members.

+ + +
operator()()peoParallelAlgorithmWrapper::AbstractAlgorithm [inline, virtual]
~AbstractAlgorithm()peoParallelAlgorithmWrapper::AbstractAlgorithm [inline, virtual]


Generated on Mon Oct 8 11:16:47 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoParallelAlgorithmWrapper_1_1AbstractAlgorithm.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoParallelAlgorithmWrapper_1_1AbstractAlgorithm.html new file mode 100644 index 000000000..cc8b12e0d --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoParallelAlgorithmWrapper_1_1AbstractAlgorithm.html @@ -0,0 +1,61 @@ + + +ParadisEO-PEOMovingObjects: peoParallelAlgorithmWrapper::AbstractAlgorithm Struct Reference + + + + +
+
+ + +

peoParallelAlgorithmWrapper::AbstractAlgorithm Struct Reference

Inheritance diagram for peoParallelAlgorithmWrapper::AbstractAlgorithm: +

+ +peoParallelAlgorithmWrapper::Algorithm< AlgorithmType, AlgorithmDataType > +peoParallelAlgorithmWrapper::Algorithm< AlgorithmType, void > + +List of all members. + + + + + + +

Public Member Functions

+virtual ~AbstractAlgorithm ()
+virtual void operator() ()
+

Detailed Description

+ +

+ +

+Definition at line 71 of file peoParallelAlgorithmWrapper.h.


The documentation for this struct was generated from the following file: +
Generated on Mon Oct 8 11:16:47 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoParallelAlgorithmWrapper_1_1AbstractAlgorithm.png b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoParallelAlgorithmWrapper_1_1AbstractAlgorithm.png new file mode 100644 index 0000000000000000000000000000000000000000..88c4e7f512563aae9acce87aa0260353526a9f12 GIT binary patch literal 1591 zcmah}dpOez82*V6rQ*pgq(sN%s2sO3Etf)K9%O_?M5(Y0+YTMYsXWVEQ(O6M4w~q= zq#`v`E>rl)T`ZT4)w0kwjM!N{=bYy`f1N+R?|a|p`QGoZ?|n18yhc(DXj;cSItQNTEd1Or?fqOVN*NZf^edm4qXuGFTrkU*Pb} za3lb1>~eQ;^uyibQ-X5YCY!Il_COf$0Z1jXJko*tV5uoR++DFcyxA*i%A|+tXZKRo zZKbocZw)uL`;KFs-=d!Qx$JW47)vJEyDi>K3#y5Lx92YCcY1OCQy6NX}7&vnNb>Bq=ye3p>uFkB=Qyp|lo0qE;uQZ${ zUUX>_<2qn*F$`V^N9#|NZ#yG<&G|*y%PLP0?QhCM%46R3rbR&&jys|9)D8zt+KYtV zZKIsYkcO7nD?n{VFmP^B&J-^mRz8bF>v^4Q$#t0Aqt6~WfP~{E`BuV=s0`~65#~ff zQ0UeWV&R3`{jVypQ-QQw8tlLUW%%xHnnFsDTk8h0T{F>Kh;yQ(0&nsdXGs<|3OV~y z7haU1W};Rm^)_1Xf=pLSQB`)ZR&~M9=jB6{EJGN%q#K9sLoPxNNGh(u8agfMgeOQk zi4VWZvGFGnu<_oYa{fv=cht6TN?g#x$3IHIGaswzC zT$bdRcsnbEQzS}A0`Awn!I4VmBwt9)LN6_-NGMuMNm9IT^9HA4WWP1@Z`FTJ{6oZ$ zP~?#L#a!fS3Hgx?`e2XtcIAB13Cx{gVo7H1@ey{e1tlDoPZ;F3?&n7=_(vUf>&4M{Z`)WCf))fweE+u#OkiQS^FkM9&tXuYx%5(+aJs6S^95(I93f*| zK7HHm?KPw>c=YIbs~-K<{S9#%jxn>t#a@yIOm>j{`!5bfkeUxAtYhK2A*xh+-(BWL zX0cPd$JOY3S6o|+<*MRd!-0usCCoFcIX>_Ovkyk^9dBV^zJ*aK^5N5l;eT(*^ZeLQVd zf!6-Z;Xt)bfADtf*^{ac(J%=&*@U+h?3{h~CO2Umr>Y;QWosF*{MmjW&%F4w{e)sM zy8rR9({{8l>vtvZ;Rn}x)}IIhYIr^Mi~&we$dtI!3W33&>{SAHm!!ULLw@ED3OL__ zFU__pYGxUWY+uJ19g`Uyaiqg%iJ#={Cq~HBdSyC?Y;xZt<<`ELwc5?gOw-VA+kU*d zO$5u^D?>WVT1 zhlTPU5(O6Doumq@L_No3frfYS|GzI&gV}zlhE_AX&L~cd#)I5gE&Hpg-01x8RG= z#>n+)p_%UBMsU&)bf|hv)5G2#qJWrIUy%yPD9XYwz9^sWIHgy}U + +ParadisEO-PEOMovingObjects: Member List + + + + +
+
+ +

peoParallelAlgorithmWrapper::Algorithm< AlgorithmType, AlgorithmDataType > Member List

This is the complete list of members for peoParallelAlgorithmWrapper::Algorithm< AlgorithmType, AlgorithmDataType >, including all inherited members.

+ + + + + +
algorithmpeoParallelAlgorithmWrapper::Algorithm< AlgorithmType, AlgorithmDataType >
Algorithm(AlgorithmType &externalAlgorithm, AlgorithmDataType &externalData)peoParallelAlgorithmWrapper::Algorithm< AlgorithmType, AlgorithmDataType > [inline]
algorithmDatapeoParallelAlgorithmWrapper::Algorithm< AlgorithmType, AlgorithmDataType >
operator()()peoParallelAlgorithmWrapper::Algorithm< AlgorithmType, AlgorithmDataType > [inline, virtual]
~AbstractAlgorithm()peoParallelAlgorithmWrapper::AbstractAlgorithm [inline, virtual]


Generated on Mon Oct 8 11:16:47 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoParallelAlgorithmWrapper_1_1Algorithm.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoParallelAlgorithmWrapper_1_1Algorithm.html new file mode 100644 index 000000000..81a64ce4f --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoParallelAlgorithmWrapper_1_1Algorithm.html @@ -0,0 +1,70 @@ + + +ParadisEO-PEOMovingObjects: peoParallelAlgorithmWrapper::Algorithm< AlgorithmType, AlgorithmDataType > Struct Template Reference + + + + +
+
+ + +

peoParallelAlgorithmWrapper::Algorithm< AlgorithmType, AlgorithmDataType > Struct Template Reference

Inheritance diagram for peoParallelAlgorithmWrapper::Algorithm< AlgorithmType, AlgorithmDataType >: +

+ +peoParallelAlgorithmWrapper::AbstractAlgorithm + +List of all members. + + + + + + + + + + + +

Public Member Functions

Algorithm (AlgorithmType &externalAlgorithm, AlgorithmDataType &externalData)
+virtual void operator() ()

Public Attributes

+AlgorithmType & algorithm
+AlgorithmDataType & algorithmData
+

Detailed Description

+

template<typename AlgorithmType, typename AlgorithmDataType>
+ struct peoParallelAlgorithmWrapper::Algorithm< AlgorithmType, AlgorithmDataType >

+ + +

+ +

+Definition at line 81 of file peoParallelAlgorithmWrapper.h.


The documentation for this struct was generated from the following file: +
Generated on Mon Oct 8 11:16:47 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoParallelAlgorithmWrapper_1_1Algorithm.png b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoParallelAlgorithmWrapper_1_1Algorithm.png new file mode 100644 index 0000000000000000000000000000000000000000..8017c720c51b9eb0597edcafe4a039a68553b8c6 GIT binary patch literal 1055 zcmV+)1mOFLP)^r|9C^+pm2j!mJ3jq%WG4txyL2-SI}G{Ag0gA(OwM> zB3?&XeuRgC@zNdE#jCS{J87_cDb2-8^;;g^&~OQ5buQPGK2wH$N^>p?rJl=Drb>yY z@1^ar={Btxui9f}SER=#pfx2~n;x5=4fR+eij6tBqinAB*z_dMs@R{f^VO@vp*^Fv&^;(`(tRf7IGU8>Xi|=&NjZ)tmMc{Ib6M9WhtshG&YEu1^@fQ&i* z4Rwlc!68WHu(b?RGW%Z9fYxUJ;zA*ScTFN{sq~G3Da3Z|iG^~>lw8(qu%R@!`5A!L zr87~uY<9eyNnBlYH7L0*8_I^U99XL0h9_FehzD|VfU6WK1ic+4_I*mgOo=FzT`!Qt z5%(xT^Exn=igk2pcw)7e`lFmSX=G9pO-g=ZcGo~#z>XK>-rc7J$O-KmZz{I-EPH9s z<(d)-CGJz2b7?7CUf@dN(5E!#vTqEF3BU0)=hF7rR2;Mrg7#Q>TG}nsT5HN=ZF+2Z zHf=AHxVFtyW0o>qB`>#YOn)z_ + +ParadisEO-PEOMovingObjects: Member List + + + + +
+
+ +

peoParallelAlgorithmWrapper::Algorithm< AlgorithmType, void > Member List

This is the complete list of members for peoParallelAlgorithmWrapper::Algorithm< AlgorithmType, void >, including all inherited members.

+ + + + +
algorithmpeoParallelAlgorithmWrapper::Algorithm< AlgorithmType, void >
Algorithm(AlgorithmType &externalAlgorithm)peoParallelAlgorithmWrapper::Algorithm< AlgorithmType, void > [inline]
operator()()peoParallelAlgorithmWrapper::Algorithm< AlgorithmType, void > [inline, virtual]
~AbstractAlgorithm()peoParallelAlgorithmWrapper::AbstractAlgorithm [inline, virtual]


Generated on Mon Oct 8 11:16:47 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoParallelAlgorithmWrapper_1_1Algorithm_3_01AlgorithmType_00_01void_01_4.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoParallelAlgorithmWrapper_1_1Algorithm_3_01AlgorithmType_00_01void_01_4.html new file mode 100644 index 000000000..f49b5d557 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoParallelAlgorithmWrapper_1_1Algorithm_3_01AlgorithmType_00_01void_01_4.html @@ -0,0 +1,67 @@ + + +ParadisEO-PEOMovingObjects: peoParallelAlgorithmWrapper::Algorithm< AlgorithmType, void > Struct Template Reference + + + + +
+
+ + +

peoParallelAlgorithmWrapper::Algorithm< AlgorithmType, void > Struct Template Reference

Inheritance diagram for peoParallelAlgorithmWrapper::Algorithm< AlgorithmType, void >: +

+ +peoParallelAlgorithmWrapper::AbstractAlgorithm + +List of all members. + + + + + + + + + +

Public Member Functions

Algorithm (AlgorithmType &externalAlgorithm)
+virtual void operator() ()

Public Attributes

+AlgorithmType & algorithm
+

Detailed Description

+

template<typename AlgorithmType>
+ struct peoParallelAlgorithmWrapper::Algorithm< AlgorithmType, void >

+ + +

+ +

+Definition at line 95 of file peoParallelAlgorithmWrapper.h.


The documentation for this struct was generated from the following file: +
Generated on Mon Oct 8 11:16:47 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoParallelAlgorithmWrapper_1_1Algorithm_3_01AlgorithmType_00_01void_01_4.png b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoParallelAlgorithmWrapper_1_1Algorithm_3_01AlgorithmType_00_01void_01_4.png new file mode 100644 index 0000000000000000000000000000000000000000..e7f3958d05f6210341d987a7d13e00725905eed3 GIT binary patch literal 1000 zcmV>P)DbZPbJ-0 zqN2bf4^Ym9QEh~glQ!jyIhWRy6<&Lnu9>4ye}yMQDyBrI(u?BBAX$4ROzgQgg*|v= z%!z5`GK)cN@=3Wi@g>r1xQjHPm=lpzucT4XA|?4`u}Dw$#LX2v$b5t6nwL^|fcNvL ztx1a`&*>&BsVpT<7B035@8%(=3-GA9p@ra5K}ia7?cfnS*3=>zJbO|088V~7BfcEI zedWn9CVilm6=bbh_LS^1ug_!B67-mo{`^Y#SL zbV-5A*>)Svq3$-sxrFE5ZnvpZ=G}%t%N9lMs7qnH4NdT3*__jUzchQ39qO6B*WuGE z;dkC`E4mJ!alie!%;VYRCjAFL%zmf_d@tP`zW4tZ7xWq4s*m@Ef3I#0|MjOg!3EtJ z{^RSbH^TRIYxsLVumirA27E6K_+A?Dy)@u^X~6f=fbXRN-%A6&mj-+<4ftLf@V)eI zc)YJ-h;L5L8#Um2X~6f=5}qF6Dv-u#M|FaF7x$*W=~d&?;YPDNoM9|Ng1d=}#(6lk z!3-mugWvWt=h>A49Hp=Fb6(8Dvm%e;NHO4jFJif|oX0{9$* zJySbgw(8Zk0&leTn9ku{=6%gC;i19fKD?`W55MN6V+Skr4R}}cvX!jWyx(nTIoTh< zb{oN{`v#4-gs0waw`o&e_X;iZw%bsNcz8N1m#x$KZnLwidhPd<0iX5Sa0>pFv-Ki* z0v^5vf8^Eb;xQbwz}v1TGr#r9ZlkSn9C+2Y&?DI)*FW{c>{c4^y>xT<-v3`*Q2Yy> WyO^Q&j1CY00000 + +ParadisEO-PEOMovingObjects: Member List + + + + +
+
+ +

peoSynchronousMultiStart< EntityType >::AbstractAggregationAlgorithm Member List

This is the complete list of members for peoSynchronousMultiStart< EntityType >::AbstractAggregationAlgorithm, including all inherited members.

+ + +
operator()(AbstractDataType &dataTypeInstanceA, AbstractDataType &dataTypeInstanceB)peoSynchronousMultiStart< EntityType >::AbstractAggregationAlgorithm [inline, virtual]
~AbstractAggregationAlgorithm()peoSynchronousMultiStart< EntityType >::AbstractAggregationAlgorithm [inline, virtual]


Generated on Mon Oct 8 11:16:48 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1AbstractAggregationAlgorithm.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1AbstractAggregationAlgorithm.html new file mode 100644 index 000000000..4d647d542 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1AbstractAggregationAlgorithm.html @@ -0,0 +1,64 @@ + + +ParadisEO-PEOMovingObjects: peoSynchronousMultiStart< EntityType >::AbstractAggregationAlgorithm Struct Reference + + + + +
+
+ + +

peoSynchronousMultiStart< EntityType >::AbstractAggregationAlgorithm Struct Reference

Inheritance diagram for peoSynchronousMultiStart< EntityType >::AbstractAggregationAlgorithm: +

+ +peoSynchronousMultiStart< EntityType >::AggregationAlgorithm< AggregationAlgorithmType > +peoSynchronousMultiStart< EntityType >::NoAggregationFunction + +List of all members. + + + + + + +

Public Member Functions

+virtual ~AbstractAggregationAlgorithm ()
+virtual void operator() (AbstractDataType &dataTypeInstanceA, AbstractDataType &dataTypeInstanceB)
+

Detailed Description

+

template<typename EntityType>
+ struct peoSynchronousMultiStart< EntityType >::AbstractAggregationAlgorithm

+ + +

+ +

+Definition at line 157 of file peoSynchronousMultiStart.h.


The documentation for this struct was generated from the following file: +
Generated on Mon Oct 8 11:16:48 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1AbstractAggregationAlgorithm.png b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1AbstractAggregationAlgorithm.png new file mode 100644 index 0000000000000000000000000000000000000000..d29a3362b2f965f3d5dee246282519f9556986f3 GIT binary patch literal 2011 zcmbW2YgCfy7RL$fLON(sT3Tt|C<||yh?sWKL7MRu5i>QNGO$q-@h+v9g^i?nLoLS_ zt;}>REKDlA=a?prN+zc0BzenAgrk8E5gUgfqCeZB)}7Lc%nZD0$CqHa6Uqg2jztxIYWCiu6F)Vl&mKkGVl|;A1D(lH)$KIK|6NU z{^=peOJ!t0ZKhu%=ZH)0xLHe~N{GoE4_S-0-S)M>`Ts)yQHlfN zgTqXzs5YT9^BKQh{kHdOUgAr7SRWbBY#elaLAx1VcE15>$B$tnF;9jWw%s*It;y^H z4s#~+LwtDTNbEflW^Od$3TM#%IlCKKeBjb(i%j&T-DG?uac`VJy7g!(k~R^1^=L3h z5h69%Cv>4NSv)RFuV5b1Gk5pIoG+)3MEW!Ovd@mUa?r6U*monRh&An{t6R{rmOePp z-2Aw~61wD$hLdwTcA|F=iSm5r{HjB5*s6NCY4O5#U%TM=uCazrX%E)N6wn5a1=x+Qu*owChG4JP{Z5Qi-L}Nz zu*PU0Is$)>G0$yc^Ee<&jOx&jAZ@PGJ9jSu(VL-D^yC6T-Gb39DQ%am@E%acGt~v% zS~e&NUnL91c8s#F38XOoxXu?)%qlO4*vZRx&+j7eO|j)+m>KifL8_=Gc9S(wxAt-&e7jqAznmjbZn-4 z9KYpRF=%$AZIe45A*HQD4ct|@Uk<&fV_ngWi#akfkB|qZu@480?>|Ns%x64&&uwLc zanDfnNcXZn?h(cHyP-EihyP~CUq07iS}eodYP#AlHclX_x@5z6B|vp-U#+XQU8lPccpI2=)x2{8S!c6HR5nm zN)tT#`=6AFQrKj;mR&M1`R2`=GXG1f&}8If?xW0xJHHlJyJhrk+lTy8xjsdB;v^`d|6*`2iewH~acd0E*8#L=fE$ z+cKKW6<5fYDGBzGGsG5xh*mZf=BBaKC}5ehMWyzQkUV6Fc53#JO>X{Ww9j6um6H0o z#^Yel=CUCJy>|hVrrITfs3MAa*V@v?Q@RrJu+^EG7%oS*a7)M?H?%L+tfa+?=ymN6 zIA%0^OHx|Fw3-irs$rwSL>9h!i*{S5nboRqwD@FB2GhiL(Wd%Ojj^mxJ^1}rrr>U_ z2SXMTl4s;+TFRWj|2;q+&YiR94S7MRAH{@Fr^{_zWn(?|KY3Xla_{uaO^@whz3bZt zF7(ef`Bp>o%IPQCw!NOFq`3qW%*EAxvb{jXD=+9Ss>qkOV0yzb>WbeXTW_q-pyf5B z^_>_wt=c;9jEtq9ov#+`<5B7xQ6*x{rrVIBEkgBQ4l#C~%~bd!@A+AbA*n_SZ-0$4 zi>@PTf)Bnn{7@Od!0ndU7jHl%N=UFD&xY66Y+=1Zhs~IwB$$E1k5NZQul0CS1++Hf z8|~8)*PQgnq6{-j;6hFTFVNM^xCfIy}+H;dq-~F@V%(JlO=$Wonij3k5pEP7wChfvb zec_-{zpt{OU@wG`)Z-S8g%8F}nxR(ej^VWfG^tnKYTAFYc}2qil^SI#uQVxKSRtfW z#qBOxKD}E#XUB;?=1KPLn1JED3nzVqPVH}++dE7(o_^%UO@2XMb-CQ9x^2)yTK~L5 zJ$5Xr1dN-OZXylVW_cvO&0fpSEa!9Md@6fk?^Bw=WpFBG*q%&MO!xA>hQf17Q;__ + +ParadisEO-PEOMovingObjects: Member List + + + + +
+
+ +

peoSynchronousMultiStart< EntityType >::AbstractAlgorithm Member List

This is the complete list of members for peoSynchronousMultiStart< EntityType >::AbstractAlgorithm, including all inherited members.

+ + +
operator()(AbstractDataType &dataTypeInstance)peoSynchronousMultiStart< EntityType >::AbstractAlgorithm [inline, virtual]
~AbstractAlgorithm()peoSynchronousMultiStart< EntityType >::AbstractAlgorithm [inline, virtual]


Generated on Mon Oct 8 11:16:48 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1AbstractAlgorithm.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1AbstractAlgorithm.html new file mode 100644 index 000000000..d12786ed0 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1AbstractAlgorithm.html @@ -0,0 +1,63 @@ + + +ParadisEO-PEOMovingObjects: peoSynchronousMultiStart< EntityType >::AbstractAlgorithm Struct Reference + + + + +
+
+ + +

peoSynchronousMultiStart< EntityType >::AbstractAlgorithm Struct Reference

Inheritance diagram for peoSynchronousMultiStart< EntityType >::AbstractAlgorithm: +

+ +peoSynchronousMultiStart< EntityType >::Algorithm< AlgorithmType > + +List of all members. + + + + + + +

Public Member Functions

+virtual ~AbstractAlgorithm ()
+virtual void operator() (AbstractDataType &dataTypeInstance)
+

Detailed Description

+

template<typename EntityType>
+ struct peoSynchronousMultiStart< EntityType >::AbstractAlgorithm

+ + +

+ +

+Definition at line 139 of file peoSynchronousMultiStart.h.


The documentation for this struct was generated from the following file: +
Generated on Mon Oct 8 11:16:48 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1AbstractAlgorithm.png b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1AbstractAlgorithm.png new file mode 100644 index 0000000000000000000000000000000000000000..0861ea04a41fbf7d3d118150105a0ef27ee22d90 GIT binary patch literal 1204 zcmeAS@N?(olHy`uVBq!ia0y~yV4MMD2e2>$$!j<3xPg>JfKQ0)|NsAi%>Vxn%%7hy z0muU50|yRNANv0U$Ym@E@(X5gcy=R=fq})#)5S5QV$Rzcu|;hX-s~G8!t*7LeR|ELHuKY# zOKUG?t(^VDWxK+%JC~YnvgV)j*%n#xLswsR_FCgJn;Ii4oYwNNy_c+vJ=b$!iR-L_ z3e!t=I=|NJ$k|jS#-?C>%iVx&eVS&%3%M0?Pg0i|OiNr-ve<;J-cl`$*Nu9G=g^Ga%TZf=w~aOLQ3gMcNv2|mnhT{D~6eC`=n&&WE@ z(Q_v5om;|#vokMV?y*ask-^BRaa>~GHCM;uzGn{2H?Al;x#x*3v)gy!nbVd>M%CBM z3M|;duxaUpqFIIN>vcB!PMv5}RrzuCabd%G4U)fWkH31V8gI<@Y`5C8qmE7LtN#1P zoBY?kYmk2RXhPcm>Wn3PQd!x2k z&RZM=a-i6;X6^a6diU)4wEFXvBUisNI>dioe0#Uc&QjgDBd2C(?dwt~i#@K}vznpG z;G)N+qRG5Ibzk^vYgjkGONfzGKfFbj^VsncyJgHfJLj?EEo&nlUxRfLr#iQ>L*VyrbE>)|m2`Pn>14YDfAVxwNV4cD}zlb!lGdSBABv*X`a0th-hcGGoW$np-#h zd}bN!IFqqTwCxmQw{81{qpNlpm9Nf;NqENRv*}~Xt=5~CV#bs8OkVXToLJjXI5WO& zOUp-|$-YyMzCKZ!ruOw}<4x?-LzZu+nI`cE{j6La624A_tC2kyE(VH`c&nNr* zlgmAPD#vpjnNAr#`;l_dbHQB?-xp6NF`lhfo3`|?%d)38m0#=6PYa2ko;Od@@@&{U z-^6WwyUt{7wSRbTs@(Ot{ + +ParadisEO-PEOMovingObjects: Member List + + + + +
+
+ +

peoSynchronousMultiStart< EntityType >::AbstractDataType Member List

This is the complete list of members for peoSynchronousMultiStart< EntityType >::AbstractDataType, including all inherited members.

+ + +
operator Type &()peoSynchronousMultiStart< EntityType >::AbstractDataType [inline]
~AbstractDataType()peoSynchronousMultiStart< EntityType >::AbstractDataType [inline, virtual]


Generated on Mon Oct 8 11:16:48 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1AbstractDataType.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1AbstractDataType.html new file mode 100644 index 000000000..0b9ce2e85 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1AbstractDataType.html @@ -0,0 +1,64 @@ + + +ParadisEO-PEOMovingObjects: peoSynchronousMultiStart< EntityType >::AbstractDataType Struct Reference + + + + +
+
+ + +

peoSynchronousMultiStart< EntityType >::AbstractDataType Struct Reference

Inheritance diagram for peoSynchronousMultiStart< EntityType >::AbstractDataType: +

+ +peoSynchronousMultiStart< EntityType >::DataType< Type > + +List of all members. + + + + + + + +

Public Member Functions

+virtual ~AbstractDataType ()
+template<typename Type>
 operator Type & ()
+

Detailed Description

+

template<typename EntityType>
+ struct peoSynchronousMultiStart< EntityType >::AbstractDataType

+ + +

+ +

+Definition at line 122 of file peoSynchronousMultiStart.h.


The documentation for this struct was generated from the following file: +
Generated on Mon Oct 8 11:16:48 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1AbstractDataType.png b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1AbstractDataType.png new file mode 100644 index 0000000000000000000000000000000000000000..fdec90776802ad40f247be6e0797bbacd8d4b80e GIT binary patch literal 1120 zcmeAS@N?(olHy`uVBq!ia0y~yU`zqB16Y`W?)5S3)qw($Z*mKf~JgyIyo}VE*;oX9} z0zpgP)N>v+WBWYW#bvHz@Y$=&eGIl)Ci7(S#`qnZ*?scf3H29lcFxS3Sg-r+?>H5# zc_*kN`|rn?(2KH}!a19bC-0dil%5s1!ay|5Ysi-FQ#9P1w2C$Ykk>=ZB}JO>PXSY?@QG?+E8p z5lQL87Rx7`Vr#uQc zv2NeekVxfdw{@P}8%?zqM{UmMd7NUrZ0{X~-GVoF?cy$Lim9$_T2mc4!CU`&>Kq=C zPZv&qJ+|TNgeU=?oBLDBH}!f<*u-%EbjgLK$F@$Ntoz+k^{RPW3D13rk|IOax~0z! z-ahuBHu*`?MRT|EuYYgHA1V5{cgI}&(^*S2KV4rLzjnHO{PR-ziTqlhuAjKpb7K0X z-kP?&C&n%IzrrsUUhO!()XuBW{J^FtL{=<*ECzflxV~YsC z!@FVK4(Wtgpt4<$@)}By-eq{*wVUypXgTv5ZSobgr~a#*@=s>!jXzZ}KKA)fgiDm? zFO;)vxW2eDV8Y4|9~zx%Uh^}g&T6kaGl^-T+u53Dg|?gWL21S1&=E!1BH1?cN~f}# zx5mB7PbNq>C7pQcHUFklzeCx~Z=BO6p5)~)-^o+|LV9Ej?V->F0o41|1J1a(OX>MPUWlb_t;CO-rmtP$IA9e@zd6#uAbhHAL0}z z%U+O~v13bkrRL4{b{UNoy%YTl9y4z>Y_kY``ey;xK4&$));F)Cy{4KLB|Mq6W$mUs zo~Oa9Y>s^eCXC;LmOplJCxR2koo^}kzVYpR|I~2Ze!~|Rs^jEYoY!@we7_?Rb72Zs zMfl6I2~yYN{I=bBJ|$#+O^xiH>6hnDo}h51W|>)LPuS+_|J75w-yhYzzoXBtIk)YP z<<~B!%9=CQpCxmRpEP& + +ParadisEO-PEOMovingObjects: Member List + + + + +
+
+ +

peoSynchronousMultiStart< EntityType >::AggregationAlgorithm< AggregationAlgorithmType > Member List

This is the complete list of members for peoSynchronousMultiStart< EntityType >::AggregationAlgorithm< AggregationAlgorithmType >, including all inherited members.

+ + + + +
aggregationAlgorithmpeoSynchronousMultiStart< EntityType >::AggregationAlgorithm< AggregationAlgorithmType >
AggregationAlgorithm(AggregationAlgorithmType &externalAggregationAlgorithm)peoSynchronousMultiStart< EntityType >::AggregationAlgorithm< AggregationAlgorithmType > [inline]
operator()(AbstractDataType &dataTypeInstanceA, AbstractDataType &dataTypeInstanceB)peoSynchronousMultiStart< EntityType >::AggregationAlgorithm< AggregationAlgorithmType > [inline, virtual]
~AbstractAggregationAlgorithm()peoSynchronousMultiStart< EntityType >::AbstractAggregationAlgorithm [inline, virtual]


Generated on Mon Oct 8 11:16:48 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1AggregationAlgorithm.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1AggregationAlgorithm.html new file mode 100644 index 000000000..8b82eb1cf --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1AggregationAlgorithm.html @@ -0,0 +1,68 @@ + + +ParadisEO-PEOMovingObjects: peoSynchronousMultiStart< EntityType >::AggregationAlgorithm< AggregationAlgorithmType > Struct Template Reference + + + + +
+
+ + +

peoSynchronousMultiStart< EntityType >::AggregationAlgorithm< AggregationAlgorithmType > Struct Template Reference

Inheritance diagram for peoSynchronousMultiStart< EntityType >::AggregationAlgorithm< AggregationAlgorithmType >: +

+ +peoSynchronousMultiStart< EntityType >::AbstractAggregationAlgorithm + +List of all members. + + + + + + + + + +

Public Member Functions

AggregationAlgorithm (AggregationAlgorithmType &externalAggregationAlgorithm)
+void operator() (AbstractDataType &dataTypeInstanceA, AbstractDataType &dataTypeInstanceB)

Public Attributes

+AggregationAlgorithmType & aggregationAlgorithm
+

Detailed Description

+

template<typename EntityType>
+template<typename AggregationAlgorithmType>
+ struct peoSynchronousMultiStart< EntityType >::AggregationAlgorithm< AggregationAlgorithmType >

+ + +

+ +

+Definition at line 164 of file peoSynchronousMultiStart.h.


The documentation for this struct was generated from the following file: +
Generated on Mon Oct 8 11:16:48 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1AggregationAlgorithm.png b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1AggregationAlgorithm.png new file mode 100644 index 0000000000000000000000000000000000000000..3b9e8664ed74f24180dc31c7bc1acff167a19eac GIT binary patch literal 1328 zcmeAS@N?(olHy`uVBq!ia0y~yU{V6I16Y`WVxn%%7hy z0muU50|yRNANv0U$Ym@E@(X5gcy=R=fq~_ir;B4q#hkY@J#kFO`va1c96O3+PS<^7+W%Rplex`b;pLv3dgsmC?5j__Di;Bxn7l*omxy4-;FH7-cTc zTOxA8OPX=(UxU=-l5^a=k8_F+w@vWKt+m)5l<*_qgjo9_mmNDz7tFpE_3lxTxZn-T z{c|Vh%4afWWxky%#?Ze?!vE!Wo24f_YLb*%ck>Dwo?>;|zLj6tJjv6hscHS;*>`5A znKd33yja{ZBce>N72AkJ1%=egkAE#cvKCe&X*Spm^YqYG_t#kepA~2s}S_cbTLg$4u z;=(VdJE<1qp(czeVdn)OT|YldDcx6nQ95sR)u&Z6Oa9-i>(APM zM{r%>#>P88R{aRJb$TLbe_zV}zgCrz_xYu<{)?{8V1HEEaALLB6ZendyAQoODbM)& zS-wd9%Su+k^$L$fUG_9}Tz~)e?th*i7P<2m#lPo!@L0rU&%S?qt(*LV1qy$C{rdHt zfSr%ylLa>-_cnEe3w(s79E1VH3fi@Ew4~+!yu1F%;VDfW!BC@43wusjes8kprK@S` zvnDkov83Je>-Q(>Q1 z4#tP#UMMaOEIjwJpg7y1ey!>3CF^EHv>oMq>Jn=*+1-w(EpEbE$Bh~k_aB7^e?+3SrjYuzd_W@byjoY<9dVu^EF_)CwO@rE1uPG9MWdGYtYlG8Pwi8cyZy%9>C zoji+WJ#IYsdXwd}F6imJ_*c zp^N-`w zy2x8sjs4{Pj@|iGaP)}b8qta3Q%}t5Saa=Tfzh)zU>IL@{ + +ParadisEO-PEOMovingObjects: Member List + + + + +
+
+ +

peoSynchronousMultiStart< EntityType >::Algorithm< AlgorithmType > Member List

This is the complete list of members for peoSynchronousMultiStart< EntityType >::Algorithm< AlgorithmType >, including all inherited members.

+ + + + +
algorithmpeoSynchronousMultiStart< EntityType >::Algorithm< AlgorithmType >
Algorithm(AlgorithmType &externalAlgorithm)peoSynchronousMultiStart< EntityType >::Algorithm< AlgorithmType > [inline]
operator()(AbstractDataType &dataTypeInstance)peoSynchronousMultiStart< EntityType >::Algorithm< AlgorithmType > [inline, virtual]
~AbstractAlgorithm()peoSynchronousMultiStart< EntityType >::AbstractAlgorithm [inline, virtual]


Generated on Mon Oct 8 11:16:48 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1Algorithm.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1Algorithm.html new file mode 100644 index 000000000..74d0eeb9f --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1Algorithm.html @@ -0,0 +1,68 @@ + + +ParadisEO-PEOMovingObjects: peoSynchronousMultiStart< EntityType >::Algorithm< AlgorithmType > Struct Template Reference + + + + +
+
+ + +

peoSynchronousMultiStart< EntityType >::Algorithm< AlgorithmType > Struct Template Reference

Inheritance diagram for peoSynchronousMultiStart< EntityType >::Algorithm< AlgorithmType >: +

+ +peoSynchronousMultiStart< EntityType >::AbstractAlgorithm + +List of all members. + + + + + + + + + +

Public Member Functions

Algorithm (AlgorithmType &externalAlgorithm)
+void operator() (AbstractDataType &dataTypeInstance)

Public Attributes

+AlgorithmType & algorithm
+

Detailed Description

+

template<typename EntityType>
+template<typename AlgorithmType>
+ struct peoSynchronousMultiStart< EntityType >::Algorithm< AlgorithmType >

+ + +

+ +

+Definition at line 146 of file peoSynchronousMultiStart.h.


The documentation for this struct was generated from the following file: +
Generated on Mon Oct 8 11:16:48 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1Algorithm.png b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1Algorithm.png new file mode 100644 index 0000000000000000000000000000000000000000..e3a21bff5da00b65894e76033304913a41b14191 GIT binary patch literal 1196 zcmeAS@N?(olHy`uVBq!ia0y~yV4MMD2e2>$$!j<3xPg>JfKQ0)|NsAi%>Vxn%%7hy z0muU50|yRNANv0U$Ym@E@(X5gcy=R=fq})z)5S5QV$R!$z-hM?cueg7y4_*;&i1zT z$F1M;3q72ecvNP`O2u5?T)B}q!=#zv`P*;5oo>{@(w-GdCoG=nb$!P1o$Dm) z13u1@6u)|O=NFr!a*KDe>Yq#8?SEG;cY>tcvlAQ-X8d5e>C^M!!Q*!I6$)$5Dj2#2 zOQ|IpOL)FCZI!%l$n5%bL9*KWnb&-_ zrXT4E(O)iT{Nd=S7nyGFCCj!nb4*F**ENPHLZC<0Sn>wqkG3J+Xdf`G>-3aX!CT{Pgud{<2K_7nT?|N9D(n z5C31bKil7W`%Gk^q4DbfwkE>2s|D^&d9KT`n$_n>fB#i3wMRi|c6NudI6oI?8c(-k z$TME<8ljt@b|{O{STKxxM(2j813oQRnbMTjh#3ecZf%$e)OyB+A|(%PGaoqJcvJoC zjjX};nUf!x6^F^3mDmvaUO}VuXoj=mHo1QG?vl^R^{3v1E!%$f%q*{_3%rv3AGaA9 z7zro4=(fw8dE)+g!ts!_Td7IemN$LoPkiJXlD=q{$r4T>GT5wP#H$SC4jE$)nt?gJxOm z@0JBlYz~f!ODmfkaX3`jbiyufYW)kRZO4X%ek3l9_@c2Y`Ixx`=7;XeCI+4xAn^)y+#I?ZyWzK zS8+pVvhcAoFdmL6N<`jrOC7n|o>b-l8U r7XE%FhIRYQ&7cUJ;r(~@Oa7LG3*Ub&`x^@^S{OWC{an^LB{Ts5=EN!R literal 0 HcmV?d00001 diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1DataType-members.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1DataType-members.html new file mode 100644 index 000000000..ca702c581 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1DataType-members.html @@ -0,0 +1,41 @@ + + +ParadisEO-PEOMovingObjects: Member List + + + + +
+
+ +

peoSynchronousMultiStart< EntityType >::DataType< Type > Member List

This is the complete list of members for peoSynchronousMultiStart< EntityType >::DataType< Type >, including all inherited members.

+ + + + +
datapeoSynchronousMultiStart< EntityType >::DataType< Type >
DataType(Type &externalData)peoSynchronousMultiStart< EntityType >::DataType< Type > [inline]
operator Type &()peoSynchronousMultiStart< EntityType >::AbstractDataType [inline]
~AbstractDataType()peoSynchronousMultiStart< EntityType >::AbstractDataType [inline, virtual]


Generated on Mon Oct 8 11:16:49 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1DataType.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1DataType.html new file mode 100644 index 000000000..7887d2433 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1DataType.html @@ -0,0 +1,65 @@ + + +ParadisEO-PEOMovingObjects: peoSynchronousMultiStart< EntityType >::DataType< Type > Struct Template Reference + + + + +
+
+ + +

peoSynchronousMultiStart< EntityType >::DataType< Type > Struct Template Reference

Inheritance diagram for peoSynchronousMultiStart< EntityType >::DataType< Type >: +

+ +peoSynchronousMultiStart< EntityType >::AbstractDataType + +List of all members. + + + + + + + +

Public Member Functions

DataType (Type &externalData)

Public Attributes

+Type & data
+

Detailed Description

+

template<typename EntityType>
+template<typename Type>
+ struct peoSynchronousMultiStart< EntityType >::DataType< Type >

+ + +

+ +

+Definition at line 132 of file peoSynchronousMultiStart.h.


The documentation for this struct was generated from the following file: +
Generated on Mon Oct 8 11:16:49 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1DataType.png b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1DataType.png new file mode 100644 index 0000000000000000000000000000000000000000..27559b2de1bc73fdec6a29b6f6f5b0c2e0174500 GIT binary patch literal 1119 zcmeAS@N?(olHy`uVBq!ia0y~yU`zqB16Y`W~)5S3)qw(!@@4hDrJZ*>5t{vb#aVO!K z)0$uZ+$HP}vaIr&qUJd9)9O&op4@#B&gJ>_`ODv)uQUEzH$neGb4{z&6Ol!-y^AOL zEwxqS>RemTvC!wU!M8|p#IMA!OjO^FgrA7mt+dFF7{!_~bPf95h|9Tx{~D1-gg$m9H#ePx0ZIw}(e{kx@hI zq@a>ZU$u*TrUVD$z6EM*KPANpb0Bx8@_qUX8G-e=CxQ4<|nsKGpF1>-4#={Q%|@w zVZ!dXb>?oX+D%xGUiiygeI?h0>4eaaxMj`jOxNw@F?(6;m6gx)R$`ywizi83f4t5% zZ$EqP``LBk-FprB!tejM_do3Eqv}HI`mjwN&QI0{?~n4Ai+|oLKha<7)AbXX?-8?HH%G~AO&y%YK(@LG6NXzYK|0x8N z`h03Ngm zNz_Vd_k-Ct#T|`UFZMaryzW09wY<_ot0#H=+ok6%-gUeIB^80iJ~BlP>zu!<^$Q=r zZgMUb3Gn=M(O;@X2-y5s9jMFBb)GcUgn7l4WFx7E(yS$#WZ&ssB`=Zh(#yyWk z_b%2v^WdhpPKI*zgUnA&GC!0)&2_f8_K{DZXhLSQj`A&~JgKvnezP>^JQk_cKCxp- zxXrABvRj{>c#Yaus9&8~?^=3dwq9&Q!Sj{(`|S>f?d;V~x$x5O+|=+>ibiI~p6zv1 zt9IC&{OD5L)1@WyX0`zf&D!QXIHrE(*o#L#Q=dAD*0lS`u-&}A{fbs}%JCDXnbE1Y zC5|l*+1YRXt*H4;b;|SCdOH}4-ach4x;=T*TlOc(`riwWOE>fFeg3sM=|w1G+4y5$I=gRZPx4)nxud7v_TPK`BSjzg?szJF{oeA; zy%X%0&zq>--(Tr&w>P(?CTOC)a(|7R=-$8cUClvxHLr8er~AL(f8oFRr8Fu`AdC%I P8Zdae`njxgN@xNAj1d>% literal 0 HcmV?d00001 diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1NoAggregationFunction-members.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1NoAggregationFunction-members.html new file mode 100644 index 000000000..63011af07 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1NoAggregationFunction-members.html @@ -0,0 +1,39 @@ + + +ParadisEO-PEOMovingObjects: Member List + + + + +
+
+ +

peoSynchronousMultiStart< EntityType >::NoAggregationFunction Member List

This is the complete list of members for peoSynchronousMultiStart< EntityType >::NoAggregationFunction, including all inherited members.

+ + +
operator()(AbstractDataType &dataTypeInstanceA, AbstractDataType &dataTypeInstanceB)peoSynchronousMultiStart< EntityType >::NoAggregationFunction [inline, virtual]
~AbstractAggregationAlgorithm()peoSynchronousMultiStart< EntityType >::AbstractAggregationAlgorithm [inline, virtual]


Generated on Mon Oct 8 11:16:49 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1NoAggregationFunction.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1NoAggregationFunction.html new file mode 100644 index 000000000..45c1478e8 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1NoAggregationFunction.html @@ -0,0 +1,60 @@ + + +ParadisEO-PEOMovingObjects: peoSynchronousMultiStart< EntityType >::NoAggregationFunction Struct Reference + + + + +
+
+ + +

peoSynchronousMultiStart< EntityType >::NoAggregationFunction Struct Reference

Inheritance diagram for peoSynchronousMultiStart< EntityType >::NoAggregationFunction: +

+ +peoSynchronousMultiStart< EntityType >::AbstractAggregationAlgorithm + +List of all members. + + + + +

Public Member Functions

+void operator() (AbstractDataType &dataTypeInstanceA, AbstractDataType &dataTypeInstanceB)
+

Detailed Description

+

template<typename EntityType>
+ struct peoSynchronousMultiStart< EntityType >::NoAggregationFunction

+ + +

+ +

+Definition at line 176 of file peoSynchronousMultiStart.h.


The documentation for this struct was generated from the following file: +
Generated on Mon Oct 8 11:16:49 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1NoAggregationFunction.png b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/structpeoSynchronousMultiStart_1_1NoAggregationFunction.png new file mode 100644 index 0000000000000000000000000000000000000000..ca37568773868f1ed78a8e8b279fe8fccf025d86 GIT binary patch literal 1202 zcmV;j1Wo&iP)SCjAM&w4SLNF&HZ z8bP*538R1N8zt>ZYfNks+wq8K-SQasUb4isSh|VQ$+XprS;~{|+9Jiq-;wWZuQ7|s z2B|)#Q$MMX6#EO{2c-sS-65qMW6Cj><<9?$hMUBC?T#5nka!rfvpf`Oq$Y#CkS^vw zS*GfA6Bs$pBV`(KL`d0jBHPG;CFzM8iXe$PkD+NOTAo;tIB~RxI9j?b8q%>IrJG05 z^vUkUL~N5}kUeARc1Y!kQ!Ka9hNbFXF6xM7<+RaIf!?1~O) zZIQ%8M{=I%EX6(2sz|bJYiMk`cII3yn$?gRwcT1Y6)B%!^Q#`aNVM^2KR73JkEBjQ zWZT!EHIJ(n3KVkN$~1)6fo{c@rcnY*=#kj+9#YhXGjN8)w$4ectDsr(NJ)^YQzJ^N z^XTSOg{Gqh;CIR$r08OHNO6ypqQ$TG4N^Tz9VCC26v@t#3w*W1(HxpR5*{PfipNDO z$^@uk>i&pagjAgZtXwJEkK&q#sJsV@rkp zwS4eB)mQ(5&(;gbL>fUZiS+5;s9rAL%e&<3Z8N=1E{Jsd_vr{;F4sf)y4^k;|8b}KEL=Tv|LJ6V`3#1#ML2Hq4kpLHoHeW@9tjT)dJtU)G zk*UkQn1nKto+N@G-43ZZl@u2@u;@j-I-54Z%$l%DFzx=^WT_%8l8PX1f?lTM{oNuh zvWh{MM7F+m`z$F^-L?)1+SzJ1DX!t1z4$NkI9tpi| zMS>0zx-4P`sh*`hQgfC#2yjSpma6ML68htOFH2VO_`M`t3u>5J>PjiHgpltb?lO=5F9&#hE*!w`NnJH;LZ1>fHmhIEZ_rqB7{?< z*M2JnYtH;y#np!=<~c_CsU)2*RoVFV@UZ-*&(?8eB8?!IMEdk^R4 + +ParadisEO-PEOMovingObjects: t-peo.cpp Source File + + + + +
+
+

t-peo.cpp

00001 /* 
+00002 * <t-peo.cpp>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 //-----------------------------------------------------------------------------
+00037 // t-peo.cpp
+00038 //-----------------------------------------------------------------------------
+00039 
+00040 #include <peo.h>
+00041 
+00042 //-----------------------------------------------------------------------------
+00043 
+00044 
+00045 //-----------------------------------------------------------------------------
+00046 
+00047 int main()
+00048 {
+00049   std::cout << "Please fill the test" << std::endl;
+00050 
+00051   return 0;
+00052 }
+00053 
+00054 //-----------------------------------------------------------------------------
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/tab_b.gif b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/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-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/tab_l.gif b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/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-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/tab_r.gif b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/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-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/tabs.css b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/tabs.css new file mode 100644 index 000000000..a61552a67 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/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-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/tags_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/tags_8h-source.html new file mode 100644 index 000000000..5527f749f --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/tags_8h-source.html @@ -0,0 +1,81 @@ + + +ParadisEO-PEOMovingObjects: tags.h Source File + + + + +
+
+

tags.h

00001 /* 
+00002 * <tags.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef __tags_h
+00038 #define __tags_h
+00039 
+00040 #define RUNNER_STOP_TAG 13
+00041 
+00042 #define COOP_TAG 14
+00043 
+00044 #define SCHED_REQUEST_TAG 16
+00045 
+00046 #define SCHED_RESULT_TAG 17
+00047 #define TASK_DATA_TAG 18
+00048 
+00049 #define TASK_RESULT_TAG 19
+00050 #define TASK_DONE_TAG 20
+00051 
+00052 #endif
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/thread_8cpp-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/thread_8cpp-source.html new file mode 100644 index 000000000..766870290 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/thread_8cpp-source.html @@ -0,0 +1,138 @@ + + +ParadisEO-PEOMovingObjects: thread.cpp Source File + + + + +
+
+

thread.cpp

00001 /* 
+00002 * <thread.cpp>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #include <map>
+00038 
+00039 #include "thread.h"
+00040 
+00041 static std :: vector <Thread *> threads;
+00042 
+00043 unsigned num_act = 0;
+00044 
+00045 Thread :: Thread () {
+00046         
+00047   threads.push_back (this);
+00048   act = false;
+00049 }
+00050 
+00051 Thread :: ~ Thread () {
+00052 
+00053   /* Nothing ! */
+00054 }
+00055 
+00056 extern int getNodeRank ();
+00057 
+00058 void Thread :: setActive () {
+00059 
+00060   if (! act ) {
+00061 
+00062     act = true;
+00063     num_act ++;
+00064     //    if (getNodeRank () == 1)      
+00065     //   printf ("On passe a %d\n", num_act);
+00066   }
+00067 }
+00068 
+00069 void Thread :: setPassive () {
+00070 
+00071   if (act) {
+00072 
+00073    act = false;
+00074     num_act --;
+00075     //    if (getNodeRank () == 1)      
+00076     //  printf ("On passe a %d\n", num_act);
+00077 
+00078   } 
+00079 }
+00080 
+00081 bool atLeastOneActiveThread () {
+00082 
+00083   return num_act;
+00084 }
+00085 
+00086 unsigned numberOfActiveThreads () {
+00087 
+00088   return num_act;
+00089 }
+00090 
+00091 static void * launch (void * __arg) {
+00092 
+00093   Thread * thr = (Thread *) __arg;  
+00094   thr -> start ();
+00095   return 0;
+00096 }
+00097 
+00098 void addThread (Thread * __hl_thread, std :: vector <pthread_t *> & __ll_threads) {
+00099 
+00100   pthread_t * ll_thr = new pthread_t;
+00101   __ll_threads.push_back (ll_thr);
+00102   pthread_create (ll_thr, 0, launch, __hl_thread); 
+00103 }
+00104 
+00105 void joinThreads (std :: vector <pthread_t *> & __threads) {
+00106 
+00107   for (unsigned i = 0; i < __threads.size (); i ++)    
+00108     pthread_join (* __threads [i], 0);  
+00109 }
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/thread_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/thread_8h-source.html new file mode 100644 index 000000000..0ed667519 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/thread_8h-source.html @@ -0,0 +1,105 @@ + + +ParadisEO-PEOMovingObjects: thread.h Source File + + + + +
+
+

thread.h

00001 /* 
+00002 * <thread.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef THREAD_H_
+00038 #define THREAD_H_
+00039 
+00040 #include <vector>
+00041 
+00042 /* A high-level thread */
+00043 
+00044 class Thread {
+00045         
+00046 public:
+00047 
+00048   /* Ctor */
+00049   Thread ();
+00050 
+00051   /* Dtor */
+00052   virtual ~ Thread ();
+00053   
+00054   /* Go ! */
+00055   virtual void start () = 0;
+00056 
+00057   void setActive ();/* It means the current process is going to send messages soon */
+00058   void setPassive ();/* The current process is not going to perform send operations
+00059                         (but it may receive messages) */
+00060 
+00061 private :
+00062   
+00063   bool act;
+00064 };
+00065 
+00066 extern void addThread (Thread * __hl_thread, std :: vector <pthread_t *> & __ll_threads);
+00067 
+00068 extern void joinThreads (std :: vector <pthread_t *> & __ll_threads);
+00069 
+00070 extern bool atLeastOneActiveThread (); /* It returns 'true' iff at least one process is going
+00071                                       to send messages */
+00072   
+00073 extern unsigned numberOfActiveThreads ();
+00074 
+00075 
+00076 #endif /*THREAD_H_*/
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/topology_8cpp-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/topology_8cpp-source.html new file mode 100644 index 000000000..d7bb2dd7c --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/topology_8cpp-source.html @@ -0,0 +1,77 @@ + + +ParadisEO-PEOMovingObjects: topology.cpp Source File + + + + +
+
+

topology.cpp

00001 /* 
+00002 * <topology.cpp>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #include "topology.h"
+00038 
+00039 Topology :: ~ Topology () {
+00040   
+00041   /* Nothing ! */
+00042 }
+00043 
+00044 void Topology :: add (Cooperative & __mig) {
+00045   
+00046   mig.push_back (& __mig) ;
+00047 } 
+00048 
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/topology_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/topology_8h-source.html new file mode 100644 index 000000000..6bc3277cd --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/topology_8h-source.html @@ -0,0 +1,90 @@ + + +ParadisEO-PEOMovingObjects: topology.h Source File + + + + +
+
+

topology.h

00001 /* 
+00002 * <topology.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef __topology_h
+00038 #define __topology_h
+00039 
+00040 #include <vector>
+00041 
+00042 #include "cooperative.h"
+00043 
+00044 class Topology {
+00045 
+00046 public:
+00047 
+00048         virtual ~Topology ();
+00049 
+00050         void add (Cooperative & __mig); 
+00051 
+00052         virtual void setNeighbors (Cooperative * __mig,
+00053                                 std :: vector <Cooperative *> & __from,
+00054                                 std :: vector <Cooperative *> & __to) = 0;
+00055 
+00056 protected:
+00057 
+00058         std :: vector <Cooperative *> mig ;  
+00059 };
+00060 
+00061 #endif
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/tree.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/tree.html new file mode 100644 index 000000000..560832a67 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/tree.html @@ -0,0 +1,336 @@ + + + + + + + TreeView + + + + +
+

ParadisEO-PEOMovingObjects

+
+

o*The ParadisEO-PEO Framework

+

o+Class List

+ +

o+Class Hierarchy

+
+

|o+Communicable

+ +

|o+eoFunctorBase [external]

+ +

|o+peoParallelAlgorithmWrapper::AbstractAlgorithm

+ +

|o+peoSynchronousMultiStart< EntityType >::AbstractAggregationAlgorithm

+ +

|o+peoSynchronousMultiStart< EntityType >::AbstractAlgorithm

+ +

|o+peoSynchronousMultiStart< EntityType >::AbstractDataType

+ +

|o*RandomExplorationAlgorithm

+

|o*SEND_REQUEST

+

|o+Thread

+ +

|\+Topology

+ +
+

o*Class Members

+

o+Namespace List

+
+

|\*peo

+
+

o*Namespace Members

+

\+File List

+
+

 o*city_swap.cpp

+

 o*city_swap.h

+

 o*comm.cpp

+

 o*comm.h

+

 o*communicable.cpp

+

 o*communicable.h

+

 o*coop.cpp

+

 o*cooperative.h

+

 o*data.cpp

+

 o*data.h

+

 o*display.cpp

+

 o*display.h

+

 o*display_best_route.cpp

+

 o*display_best_route.h

+

 o*doclsn.h

+

 o*edge_xover.cpp

+

 o*edge_xover.h

+

 o*eoPop_comm.h

+

 o*eoVector_comm.h

+

 o*exampleA.cpp

+

 o*exampleB.cpp

+

 o*exampleC.cpp

+

 o*exampleD.cpp

+

 o*exampleE.cpp

+

 o*Lesson1/main.cpp

+

 o*Lesson2/main.cpp

+

 o*Lesson3/main.cpp

+

 o*LessonParallelAlgorithm/main.cpp

+

 o*merge_route_eval.cpp

+

 o*merge_route_eval.h

+

 o*mess.cpp

+

 o*mess.h

+

 o*messaging.h

+

 o*mix.h

+

 o*src/rmc/mpi/node.cpp

+

 o*tutorial/examples/tsp/node.cpp

+

 o*src/rmc/mpi/node.h

+

 o*tutorial/examples/tsp/node.h

+

 o*opt_route.cpp

+

 o*opt_route.h

+

 o*order_xover.cpp

+

 o*order_xover.h

+

 o*src/rmc/mpi/param.cpp

+

 o*tutorial/examples/tsp/param.cpp

+

 o*src/rmc/mpi/param.h

+

 o*tutorial/examples/tsp/param.h

+

 o*part_route_eval.cpp

+

 o*part_route_eval.h

+

 o*partial_mapped_xover.cpp

+

 o*partial_mapped_xover.h

+

 o*peo.h

+

 o*peo_debug.cpp

+

 o*peo_debug.h

+

 o*peo_fin.cpp

+

 o*peo_fin.h

+

 o*peo_init.cpp

+

 o*peo_init.h

+

 o*peo_param.cpp

+

 o*peo_param.h

+

 o*peo_run.cpp

+

 o*peo_run.h

+

 o*peoAggEvalFunc.h

+

 o*peoAsyncIslandMig.h

+

 o*peoEA.h

+

 o*peoNoAggEvalFunc.h

+

 o*peoParallelAlgorithmWrapper.h

+

 o*peoParaPopEval.h

+

 o*peoParaSGATransform.h

+

 o*peoPopEval.h

+

 o*peoSeqPopEval.h

+

 o*peoSeqTransform.h

+

 o*peoSynchronousMultiStart.h

+

 o*peoSyncIslandMig.h

+

 o*peoSyncMultiStart.h

+

 o*peoTransform.h

+

 o*reac_thread.cpp

+

 o*reac_thread.h

+

 o*README

+

 o*recv.cpp

+

 o*recv.h

+

 o*ring_topo.cpp

+

 o*ring_topo.h

+

 o*rmc.cpp

+

 o*rmc.h

+

 o*route.cpp

+

 o*route.h

+

 o*route_eval.cpp

+

 o*route_eval.h

+

 o*route_init.cpp

+

 o*route_init.h

+

 o*core/runner.cpp

+

 o*rmc/mpi/runner.cpp

+

 o*runner.h

+

 o*scheduler.cpp

+

 o*scheduler.h

+

 o*schema.cpp

+

 o*schema.h

+

 o*send.cpp

+

 o*send.h

+

 o*core/service.cpp

+

 o*rmc/mpi/service.cpp

+

 o*service.h

+

 o*t-peo.cpp

+

 o*tags.h

+

 o*thread.cpp

+

 o*thread.h

+

 o*topology.cpp

+

 o*topology.h

+

 o*two_opt.cpp

+

 o*two_opt.h

+

 o*two_opt_incr_eval.cpp

+

 o*two_opt_incr_eval.h

+

 o*two_opt_init.cpp

+

 o*two_opt_init.h

+

 o*two_opt_next.cpp

+

 o*two_opt_next.h

+

 o*two_opt_rand.cpp

+

 o*two_opt_rand.h

+

 o*worker.cpp

+

 o*worker.h

+

 o*xml_parser.cpp

+

 \*xml_parser.h

+
+
+
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/tutorial_2examples_2tsp_2node_8cpp-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/tutorial_2examples_2tsp_2node_8cpp-source.html new file mode 100644 index 000000000..9d6d9f2cb --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/tutorial_2examples_2tsp_2node_8cpp-source.html @@ -0,0 +1,134 @@ + + +ParadisEO-PEOMovingObjects: node.cpp Source File + + + + +
+
+

node.cpp

00001 /* 
+00002 * <node.cpp>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #include <math.h>
+00038 #include <values.h>
+00039 
+00040 #include "node.h"
+00041 
+00042 unsigned numNodes; /* Number of nodes */
+00043 
+00044 //static unsigned * * dist; /* Square matrix of distances */
+00045 
+00046 double * X_coord, * Y_coord;
+00047 
+00048 double X_min = MAXDOUBLE, X_max = MINDOUBLE, Y_min = MAXDOUBLE, Y_max = MINDOUBLE;
+00049 
+00050 void loadNodes (FILE * __f) {
+00051 
+00052   /* Coord */
+00053   
+00054   X_coord = new double [numNodes];
+00055   
+00056   Y_coord = new double [numNodes];
+00057  
+00058   unsigned num;
+00059 
+00060   for (unsigned i = 0; i < numNodes; i ++) {
+00061     
+00062     fscanf (__f, "%u%lf%lf", & num, X_coord + i, Y_coord + i);
+00063     
+00064     if (X_coord [i] < X_min)
+00065       X_min = X_coord [i];
+00066     if (X_coord [i] > X_max)
+00067       X_max = X_coord [i];
+00068     if (Y_coord [i] < Y_min)
+00069       Y_min = Y_coord [i];
+00070     if (Y_coord [i] > Y_max)
+00071       Y_max = Y_coord [i];    
+00072   }
+00073   
+00074   /* Allocation */
+00075   /*
+00076   dist = new unsigned * [numNodes];
+00077   
+00078   for (unsigned i = 0; i < numNodes; i ++)
+00079     dist [i] = new unsigned [numNodes];
+00080   */
+00081   /* Computation of the distances */
+00082   
+00083   /*
+00084   for (unsigned i = 0; i < numNodes; i ++) {
+00085 
+00086     dist [i] [i] = 0;
+00087 
+00088     for (unsigned j = 0; j < numNodes; j ++) {
+00089       
+00090       double dx = X_coord [i] - X_coord [j], dy = Y_coord [i] - Y_coord [j];
+00091       
+00092       dist [i] [j] = dist [j] [i] = (unsigned) (sqrt (dx * dx + dy * dy) + 0.5) ;
+00093     }
+00094     }*/
+00095 }
+00096 
+00097 unsigned distance (Node __from, Node __to) {
+00098 
+00099   //  return dist [__from] [__to];
+00100 
+00101   double dx = X_coord [__from] - X_coord [__to], dy = Y_coord [__from] - Y_coord [__to];
+00102   
+00103   return (unsigned) (sqrt (dx * dx + dy * dy) + 0.5) ;
+00104 }
+00105 
+

Generated on Mon Oct 8 11:16:45 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/tutorial_2examples_2tsp_2node_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/tutorial_2examples_2tsp_2node_8h-source.html new file mode 100644 index 000000000..c8d476ad7 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/tutorial_2examples_2tsp_2node_8h-source.html @@ -0,0 +1,83 @@ + + +ParadisEO-PEOMovingObjects: node.h Source File + + + + +
+
+

node.h

00001 /* 
+00002 * <node.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef __node_h
+00038 #define __node_h
+00039 
+00040 #include <stdio.h>
+00041 
+00042 typedef unsigned Node; 
+00043 
+00044 extern double X_min, X_max, Y_min, Y_max;
+00045 
+00046 extern double * X_coord, * Y_coord;
+00047 
+00048 extern unsigned numNodes; /* Number of nodes */
+00049 
+00050 extern void loadNodes (FILE * __f);
+00051 
+00052 extern unsigned distance (Node __from, Node __to);
+00053 
+00054 #endif
+

Generated on Mon Oct 8 11:16:45 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/tutorial_2examples_2tsp_2param_8cpp-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/tutorial_2examples_2tsp_2param_8cpp-source.html new file mode 100644 index 000000000..2200d9b71 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/tutorial_2examples_2tsp_2param_8cpp-source.html @@ -0,0 +1,80 @@ + + +ParadisEO-PEOMovingObjects: param.cpp Source File + + + + +
+
+

param.cpp

00001 /* 
+00002 * <param.cpp>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #include <utils/eoParser.h>
+00038 
+00039 #include "data.h"
+00040 #include "opt_route.h"
+00041 
+00042 void loadParameters (int __argc, char * * __argv) {
+00043 
+00044   eoParser parser (__argc, __argv);
+00045   
+00046   loadData (parser);
+00047 
+00048   loadOptimumRoute (parser);
+00049 }
+00050 
+00051 
+

Generated on Mon Oct 8 11:16:45 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/tutorial_2examples_2tsp_2param_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/tutorial_2examples_2tsp_2param_8h-source.html new file mode 100644 index 000000000..1d8690989 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/tutorial_2examples_2tsp_2param_8h-source.html @@ -0,0 +1,71 @@ + + +ParadisEO-PEOMovingObjects: param.h Source File + + + + +
+
+

param.h

00001 /* 
+00002 * <param.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef __param_h
+00038 #define __param_h
+00039 
+00040 extern void loadParameters (int __argc, char * * __argv);
+00041 
+00042 #endif
+

Generated on Mon Oct 8 11:16:45 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/two__opt_8cpp-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/two__opt_8cpp-source.html new file mode 100644 index 000000000..ddf4275dc --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/two__opt_8cpp-source.html @@ -0,0 +1,77 @@ + + +ParadisEO-PEOMovingObjects: two_opt.cpp Source File + + + + +
+
+

two_opt.cpp

00001 /* 
+00002 * <two_opt.cpp>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #include "two_opt.h"
+00038 
+00039 void TwoOpt :: operator () (Route & __route) {
+00040   
+00041   unsigned i = 0; 
+00042 
+00043   while ((2 * i) < (second - first)) {
+00044     
+00045     std :: swap (__route [first + i], __route [second - i]);
+00046     i ++;
+00047   }
+00048 }
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/two__opt_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/two__opt_8h-source.html new file mode 100644 index 000000000..629e5011a --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/two__opt_8h-source.html @@ -0,0 +1,82 @@ + + +ParadisEO-PEOMovingObjects: two_opt.h Source File + + + + +
+
+

two_opt.h

00001 /* 
+00002 * <two_opt.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef __two_opt_h
+00038 #define __two_opt_h
+00039 
+00040 #include <utility>
+00041 #include <moMove.h>
+00042 
+00043 #include "route.h"
+00044 
+00045 class TwoOpt : public moMove <Route>, public std :: pair <unsigned, unsigned> {
+00046   
+00047 public :
+00048   
+00049   void operator () (Route & __route);
+00050 
+00051 } ;
+00052 
+00053 #endif
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/two__opt__incr__eval_8cpp-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/two__opt__incr__eval_8cpp-source.html new file mode 100644 index 000000000..2a3fceadf --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/two__opt__incr__eval_8cpp-source.html @@ -0,0 +1,81 @@ + + +ParadisEO-PEOMovingObjects: two_opt_incr_eval.cpp Source File + + + + +
+
+

two_opt_incr_eval.cpp

00001 /* 
+00002 * <two_opt_incr_eval.cpp>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #include "two_opt_incr_eval.h"
+00038 #include "node.h"
+00039 
+00040 int TwoOptIncrEval :: operator () (const TwoOpt & __move, const Route & __route) {
+00041   
+00042   /* From */
+00043   Node v1 = __route [__move.first], v1_left = __route [(__move.first - 1 + numNodes) % numNodes];
+00044   
+00045   /* To */
+00046   Node v2 = __route [__move.second], v2_right = __route [(__move.second + 1) % numNodes];
+00047  
+00048   if (v1 == v2 || v2_right == v1)
+00049     return __route.fitness ();
+00050   else 
+00051     return __route.fitness () - distance (v1_left, v2) - distance (v1, v2_right) + distance (v1_left, v1) + distance (v2, v2_right);
+00052 }
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/two__opt__incr__eval_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/two__opt__incr__eval_8h-source.html new file mode 100644 index 000000000..7a25390a2 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/two__opt__incr__eval_8h-source.html @@ -0,0 +1,80 @@ + + +ParadisEO-PEOMovingObjects: two_opt_incr_eval.h Source File + + + + +
+
+

two_opt_incr_eval.h

00001 /* 
+00002 * <two_opt_incr_eval.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef __two_opt_incr_eval_h
+00038 #define __two_opt_incr_eval_h
+00039 
+00040 #include <moMoveIncrEval.h>
+00041 #include "two_opt.h"
+00042 
+00043 class TwoOptIncrEval : public moMoveIncrEval <TwoOpt> {
+00044 
+00045 public :
+00046   
+00047   int operator () (const TwoOpt & __move, const Route & __route) ; 
+00048 
+00049 } ;
+00050 
+00051 #endif
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/two__opt__init_8cpp-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/two__opt__init_8cpp-source.html new file mode 100644 index 000000000..4453764a6 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/two__opt__init_8cpp-source.html @@ -0,0 +1,71 @@ + + +ParadisEO-PEOMovingObjects: two_opt_init.cpp Source File + + + + +
+
+

two_opt_init.cpp

00001 /* 
+00002 * <two_opt_init.cpp>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #include "two_opt_init.h"
+00038 
+00039 void TwoOptInit :: operator () (TwoOpt & __move, const Route & __route) {
+00040   
+00041   __move.first = __move.second = 0;
+00042 }
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/two__opt__init_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/two__opt__init_8h-source.html new file mode 100644 index 000000000..0ce10347e --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/two__opt__init_8h-source.html @@ -0,0 +1,81 @@ + + +ParadisEO-PEOMovingObjects: two_opt_init.h Source File + + + + +
+
+

two_opt_init.h

00001 /* 
+00002 * <two_opt_init.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef __two_opt_init_h
+00038 #define __two_opt_init_h
+00039 
+00040 #include <moMoveInit.h>
+00041 
+00042 #include "two_opt.h"
+00043 
+00044 class TwoOptInit : public moMoveInit <TwoOpt> {
+00045   
+00046 public :
+00047   
+00048   void operator () (TwoOpt & __move, const Route & __route) ;
+00049   
+00050 } ;
+00051 
+00052 #endif
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/two__opt__next_8cpp-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/two__opt__next_8cpp-source.html new file mode 100644 index 000000000..d5b5f6eed --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/two__opt__next_8cpp-source.html @@ -0,0 +1,84 @@ + + +ParadisEO-PEOMovingObjects: two_opt_next.cpp Source File + + + + +
+
+

two_opt_next.cpp

00001 /* 
+00002 * <two_opt_next.cpp>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #include "two_opt_next.h"
+00038 #include "node.h"
+00039 
+00040 bool TwoOptNext :: operator () (TwoOpt & __move, const Route & __route) {
+00041 
+00042   if (__move.first == numNodes - 1 && __move.second == numNodes - 1)
+00043     return false;
+00044   
+00045   else {
+00046     
+00047     __move.second ++;
+00048     if (__move.second == numNodes) {
+00049       
+00050       __move.first ++;
+00051       __move.second = __move.first;
+00052     }
+00053     return true ;
+00054   }
+00055 }
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/two__opt__next_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/two__opt__next_8h-source.html new file mode 100644 index 000000000..e0b7e9092 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/two__opt__next_8h-source.html @@ -0,0 +1,81 @@ + + +ParadisEO-PEOMovingObjects: two_opt_next.h Source File + + + + +
+
+

two_opt_next.h

00001 /* 
+00002 * <two_opt_next.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef __two_opt_next_h
+00038 #define __two_opt_next_h
+00039 
+00040 #include <moNextMove.h>
+00041 
+00042 #include "two_opt.h"
+00043 
+00044 class TwoOptNext : public moNextMove <TwoOpt> {
+00045 
+00046 public :
+00047   
+00048   bool operator () (TwoOpt & __move, const Route & __route);
+00049   
+00050 };
+00051 
+00052 #endif
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/two__opt__rand_8cpp-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/two__opt__rand_8cpp-source.html new file mode 100644 index 000000000..5ffc4e7c4 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/two__opt__rand_8cpp-source.html @@ -0,0 +1,78 @@ + + +ParadisEO-PEOMovingObjects: two_opt_rand.cpp Source File + + + + +
+
+

two_opt_rand.cpp

00001 /* 
+00002 * <two_opt_rand.cpp>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #include <utils/eoRNG.h>
+00038 
+00039 #include "two_opt_rand.h"
+00040 #include "node.h"  
+00041 
+00042 void TwoOptRand :: operator () (TwoOpt & __move, const Route & __route) {
+00043 
+00044   __move.second = rng.random (numNodes);
+00045 
+00046   __move.first = rng.random (__move.second);
+00047 }
+00048   
+00049 
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/two__opt__rand_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/two__opt__rand_8h-source.html new file mode 100644 index 000000000..a2c308c36 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/two__opt__rand_8h-source.html @@ -0,0 +1,81 @@ + + +ParadisEO-PEOMovingObjects: two_opt_rand.h Source File + + + + +
+
+

two_opt_rand.h

00001 /* 
+00002 * <two_opt_rand.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef __two_opt_rand_h
+00038 #define __two_opt_rand_h
+00039 
+00040 #include <eoMoveRand.h>
+00041 
+00042 #include "two_opt.h"
+00043 
+00044 class TwoOptRand : public eoMoveRand <TwoOpt> {
+00045   
+00046 public :
+00047   
+00048   void operator () (TwoOpt & __move, const Route & __route) ;
+00049   
+00050 } ;
+00051 
+00052 #endif
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/worker_8cpp-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/worker_8cpp-source.html new file mode 100644 index 000000000..869d2133f --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/worker_8cpp-source.html @@ -0,0 +1,150 @@ + + +ParadisEO-PEOMovingObjects: worker.cpp Source File + + + + +
+
+

worker.cpp

00001 /* 
+00002 * <worker.cpp>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #include <vector>
+00038 
+00039 #include "tags.h"
+00040 #include "send.h"
+00041 #include "node.h"
+00042 #include "schema.h"
+00043 #include "worker.h"
+00044 #include "mess.h"
+00045 #include "../../core/peo_debug.h"
+00046 
+00047 static std :: vector <Worker *> key_to_worker (1); /* Vector of registered workers */
+00048 
+00049 Worker * getWorker (WORKER_ID __key) {
+00050 
+00051   return key_to_worker [__key];  
+00052 }
+00053 
+00054 Worker :: Worker () {
+00055   
+00056   toto = false;
+00057   id = key_to_worker.size ();
+00058   key_to_worker.push_back (this);
+00059 }
+00060 
+00061 void Worker :: packResult () {
+00062   
+00063   pack (serv_id);
+00064   serv -> packResult ();    
+00065 }
+00066 
+00067 void Worker :: unpackData () {
+00068 
+00069   printDebugMessage ("unpacking the ID. of the service.");
+00070   unpack (serv_id);
+00071   serv = getService (serv_id); 
+00072   printDebugMessage ("found the service.");
+00073   serv -> unpackData (); 
+00074   printDebugMessage ("unpacking the data.");
+00075   setActive ();
+00076 }
+00077 
+00078 void Worker :: packTaskDone () {
+00079 
+00080   pack (getNodeRank ());
+00081   pack (id);
+00082 }
+00083 
+00084 void Worker :: notifySendingResult () {
+00085 
+00086   /* Notifying the scheduler of the termination */
+00087   toto = true;
+00088   wakeUp ();
+00089 }
+00090 
+00091 void Worker :: notifySendingTaskDone () {
+00092 
+00093   setPassive ();
+00094 }
+00095   
+00096 void Worker :: setSource (int __rank) {
+00097 
+00098   src = __rank;
+00099 }
+00100 
+00101 void Worker :: start () {
+00102 
+00103   while (true) {
+00104     
+00105     sleep (); 
+00106 
+00107     if (! atLeastOneActiveRunner ())
+00108       break;
+00109     
+00110     if (toto) {
+00111       send (this, my_node -> rk_sched, TASK_DONE_TAG);  
+00112       toto = false;
+00113     }
+00114     else {
+00115 
+00116       printDebugMessage ("executing the task.");
+00117       serv -> execute ();   
+00118       send (this, src, TASK_RESULT_TAG);    
+00119     }
+00120   }
+00121 }
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/worker_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/worker_8h-source.html new file mode 100644 index 000000000..7b0ee17e7 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/worker_8h-source.html @@ -0,0 +1,107 @@ + + +ParadisEO-PEOMovingObjects: worker.h Source File + + + + +
+
+

worker.h

00001 /* 
+00002 * <worker.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef __worker_h
+00038 #define __worker_h
+00039 
+00040 #include "../../core/communicable.h"
+00041 #include "../../core/reac_thread.h"
+00042 #include "../../core/service.h"
+00043 
+00044 typedef unsigned WORKER_ID; 
+00045 
+00046 class Worker : public Communicable, public ReactiveThread {
+00047 
+00048 public : 
+00049 
+00050   Worker ();
+00051 
+00052   void start ();
+00053 
+00054   void packResult ();
+00055 
+00056   void unpackData ();
+00057 
+00058   void packTaskDone (); 
+00059 
+00060   void notifySendingResult ();
+00061 
+00062   void notifySendingTaskDone ();
+00063   
+00064   void setSource (int __rank);
+00065   
+00066 private :
+00067 
+00068   WORKER_ID id;
+00069   SERVICE_ID serv_id;
+00070   Service * serv;
+00071   int src;
+00072 
+00073   bool toto;
+00074 };
+00075 
+00076 extern Worker * getWorker (WORKER_ID __key);
+00077 
+00078 #endif
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/xml__parser_8cpp-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/xml__parser_8cpp-source.html new file mode 100644 index 000000000..d8f7d6632 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/xml__parser_8cpp-source.html @@ -0,0 +1,132 @@ + + +ParadisEO-PEOMovingObjects: xml_parser.cpp Source File + + + + +
+
+

xml_parser.cpp

00001 /* 
+00002 * <xml_parser.cpp>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #include <libxml/xmlreader.h>
+00038 
+00039 #include "xml_parser.h"
+00040 
+00041 static xmlTextReaderPtr reader;
+00042 
+00043 void openXMLDocument (const char * __filename) {
+00044   
+00045   reader = xmlNewTextReaderFilename (__filename);
+00046   
+00047   if (! reader) {
+00048     
+00049     fprintf (stderr, "unable to open '%s'.\n", __filename);
+00050     exit (1);
+00051   }
+00052 }
+00053 
+00054 void closeXMLDocument () {
+00055 
+00056   xmlFreeTextReader (reader);
+00057 }
+00058 
+00059 std :: string getAttributeValue (const std :: string & __attr) {
+00060   
+00061   xmlChar * value = xmlTextReaderGetAttribute (reader, (const xmlChar *) __attr.c_str ());
+00062   
+00063   std :: string str ((const char *) value);
+00064   
+00065   xmlFree (value);
+00066   
+00067   return str;
+00068 }
+00069 
+00070 static bool isSep (const xmlChar * __text) {
+00071   
+00072   for (unsigned i = 0; i < strlen ((char *) __text); i ++)
+00073     if (__text [i] != ' ' && __text [i] != '\t' && __text [i] != '\n')
+00074       return false;
+00075   return true;
+00076 }
+00077 
+00078 std :: string getNextNode () {
+00079   
+00080   xmlChar * name, * value;
+00081 
+00082   do {
+00083     xmlTextReaderRead (reader);
+00084     name = xmlTextReaderName (reader);
+00085     value = xmlTextReaderValue (reader);
+00086     //    printf ("value = %s\n", value);
+00087   } while (! strcmp ((char *) name, "#text") && isSep (value));
+00088 
+00089   std :: string str;
+00090 
+00091   if (strcmp ((char *) name, "#text"))
+00092     str.assign ((char *) name);
+00093   else
+00094     str.assign ((char *) value);
+00095   
+00096   if (name)
+00097     xmlFree (name);
+00098   if (value)
+00099     xmlFree (value);
+00100     
+00101   return str;
+00102 }
+00103 
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/xml__parser_8h-source.html b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/xml__parser_8h-source.html new file mode 100644 index 000000000..1d76ecd6d --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/html/xml__parser_8h-source.html @@ -0,0 +1,79 @@ + + +ParadisEO-PEOMovingObjects: xml_parser.h Source File + + + + +
+
+

xml_parser.h

00001 /* 
+00002 * <xml_parser.h>
+00003 * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
+00004 * (C) OPAC Team, LIFL, 2002-2007
+00005 *
+00006 * Sebastien Cahon, Alexandru-Adrian Tantar
+00007 *
+00008 * This software is governed by the CeCILL license under French law and
+00009 * abiding by the rules of distribution of free software.  You can  use,
+00010 * modify and/ or redistribute the software under the terms of the CeCILL
+00011 * license as circulated by CEA, CNRS and INRIA at the following URL
+00012 * "http://www.cecill.info".
+00013 *
+00014 * As a counterpart to the access to the source code and  rights to copy,
+00015 * modify and redistribute granted by the license, users are provided only
+00016 * with a limited warranty  and the software's author,  the holder of the
+00017 * economic rights,  and the successive licensors  have only  limited liability.
+00018 *
+00019 * In this respect, the user's attention is drawn to the risks associated
+00020 * with loading,  using,  modifying and/or developing or reproducing the
+00021 * software by the user in light of its specific status of free software,
+00022 * that may mean  that it is complicated to manipulate,  and  that  also
+00023 * therefore means  that it is reserved for developers  and  experienced
+00024 * professionals having in-depth computer knowledge. Users are therefore
+00025 * encouraged to load and test the software's suitability as regards their
+00026 * requirements in conditions enabling the security of their systems and/or
+00027 * data to be ensured and,  more generally, to use and operate it in the
+00028 * same conditions as regards security.
+00029 * The fact that you are presently reading this means that you have had
+00030 * knowledge of the CeCILL license and that you accept its terms.
+00031 *
+00032 * ParadisEO WebSite : http://paradiseo.gforge.inria.fr
+00033 * Contact: paradiseo-help@lists.gforge.inria.fr
+00034 *
+00035 */
+00036 
+00037 #ifndef __xml_parser_h
+00038 #define __xml_parser_h
+00039 
+00040 #include <string>
+00041 
+00042 extern void openXMLDocument (const char * __filename);
+00043 
+00044 extern void closeXMLDocument ();
+00045 
+00046 extern std :: string getAttributeValue (const std :: string & __attr);
+00047 
+00048 extern std :: string getNextNode ();
+00049 
+00050 #endif
+

Generated on Mon Oct 8 11:16:46 2007 for ParadisEO-PEOMovingObjects by  + +doxygen 1.4.7
+ + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/FreeSans.ttf b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/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-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/Makefile b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/Makefile new file mode 100644 index 000000000..a67f1b7f6 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/Makefile @@ -0,0 +1,17 @@ +all: clean refman.pdf + +refman.pdf: refman.tex + pdflatex refman.tex + makeindex refman.idx + pdflatex 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...." ;\ + pdflatex refman.tex ;\ + latex_count=`expr $$latex_count - 1` ;\ + done + + +clean: + rm -f *.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out refman.pdf diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/annotated.tex b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/annotated.tex new file mode 100644 index 000000000..c9220430d --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/annotated.tex @@ -0,0 +1,41 @@ +\section{Paradis\-EO-PEOMoving\-Objects Class List} +Here are the classes, structs, unions and interfaces with brief descriptions:\begin{CompactList} +\item\contentsline{section}{\hyperlink{classCommunicable}{Communicable} }{\pageref{classCommunicable}}{} +\item\contentsline{section}{\hyperlink{classCommunicator}{Communicator} }{\pageref{classCommunicator}}{} +\item\contentsline{section}{\hyperlink{classCooperative}{Cooperative} }{\pageref{classCooperative}}{} +\item\contentsline{section}{\hyperlink{classDisplayBestRoute}{Display\-Best\-Route} }{\pageref{classDisplayBestRoute}}{} +\item\contentsline{section}{\hyperlink{classMergeRouteEval}{Merge\-Route\-Eval} }{\pageref{classMergeRouteEval}}{} +\item\contentsline{section}{\hyperlink{classpeoAggEvalFunc}{peo\-Agg\-Eval\-Func$<$ EOT $>$} (The \hyperlink{classpeoAggEvalFunc}{peo\-Agg\-Eval\-Func} class offers only the interface for creating aggregate evaluation functions - there are no direct internal functions provided )}{\pageref{classpeoAggEvalFunc}}{} +\item\contentsline{section}{\hyperlink{classpeoAsyncIslandMig}{peo\-Async\-Island\-Mig$<$ EOT $>$} (The \hyperlink{classpeoAsyncIslandMig}{peo\-Async\-Island\-Mig} class offers the elementary basis for implementating an asynchronous island migration model - requires the specification of several basic parameters, i.e )}{\pageref{classpeoAsyncIslandMig}}{} +\item\contentsline{section}{\hyperlink{classpeoEA}{peo\-EA$<$ EOT $>$} (The \hyperlink{classpeoEA}{peo\-EA} class offers an elementary evolutionary algorithm implementation )}{\pageref{classpeoEA}}{} +\item\contentsline{section}{\hyperlink{classpeoNoAggEvalFunc}{peo\-No\-Agg\-Eval\-Func$<$ EOT $>$} (The \hyperlink{classpeoNoAggEvalFunc}{peo\-No\-Agg\-Eval\-Func} class does nothing more than an association between a fitness value and a specified individual )}{\pageref{classpeoNoAggEvalFunc}}{} +\item\contentsline{section}{\hyperlink{classpeoParallelAlgorithmWrapper}{peo\-Parallel\-Algorithm\-Wrapper} }{\pageref{classpeoParallelAlgorithmWrapper}}{} +\item\contentsline{section}{\hyperlink{structpeoParallelAlgorithmWrapper_1_1AbstractAlgorithm}{peo\-Parallel\-Algorithm\-Wrapper::Abstract\-Algorithm} }{\pageref{structpeoParallelAlgorithmWrapper_1_1AbstractAlgorithm}}{} +\item\contentsline{section}{\hyperlink{structpeoParallelAlgorithmWrapper_1_1Algorithm}{peo\-Parallel\-Algorithm\-Wrapper::Algorithm$<$ Algorithm\-Type, Algorithm\-Data\-Type $>$} }{\pageref{structpeoParallelAlgorithmWrapper_1_1Algorithm}}{} +\item\contentsline{section}{\hyperlink{structpeoParallelAlgorithmWrapper_1_1Algorithm_3_01AlgorithmType_00_01void_01_4}{peo\-Parallel\-Algorithm\-Wrapper::Algorithm$<$ Algorithm\-Type, void $>$} }{\pageref{structpeoParallelAlgorithmWrapper_1_1Algorithm_3_01AlgorithmType_00_01void_01_4}}{} +\item\contentsline{section}{\hyperlink{classpeoParaPopEval}{peo\-Para\-Pop\-Eval$<$ EOT $>$} (The \hyperlink{classpeoParaPopEval}{peo\-Para\-Pop\-Eval} represents a wrapper for creating a functor capable of applying in parallel an EO-derived evaluation functor )}{\pageref{classpeoParaPopEval}}{} +\item\contentsline{section}{\hyperlink{classpeoParaSGATransform}{peo\-Para\-SGATransform$<$ EOT $>$} }{\pageref{classpeoParaSGATransform}}{} +\item\contentsline{section}{\hyperlink{classpeoPopEval}{peo\-Pop\-Eval$<$ EOT $>$} (The {\bf \hyperlink{classpeoPopEval}{peo\-Pop\-Eval}} class provides the interface for constructing Paradis\-EO specific evaluation functors )}{\pageref{classpeoPopEval}}{} +\item\contentsline{section}{\hyperlink{classpeoSeqPopEval}{peo\-Seq\-Pop\-Eval$<$ EOT $>$} (The \hyperlink{classpeoSeqPopEval}{peo\-Seq\-Pop\-Eval} class acts only as a Paradis\-EO specific sequential evaluation functor - a wrapper for incorporating an {\bf eo\-Eval\-Func$<$ EOT $>$}-derived class as evaluation functor )}{\pageref{classpeoSeqPopEval}}{} +\item\contentsline{section}{\hyperlink{classpeoSeqTransform}{peo\-Seq\-Transform$<$ EOT $>$} (The \hyperlink{classpeoSeqTransform}{peo\-Seq\-Transform} represent a wrapper for offering the possibility of using \doxyref{EO} derived transform operators along with the Paradis\-EO evolutionary algorithms )}{\pageref{classpeoSeqTransform}}{} +\item\contentsline{section}{\hyperlink{classpeoSynchronousMultiStart}{peo\-Synchronous\-Multi\-Start$<$ Entity\-Type $>$} }{\pageref{classpeoSynchronousMultiStart}}{} +\item\contentsline{section}{\hyperlink{structpeoSynchronousMultiStart_1_1AbstractAggregationAlgorithm}{peo\-Synchronous\-Multi\-Start$<$ Entity\-Type $>$::Abstract\-Aggregation\-Algorithm} }{\pageref{structpeoSynchronousMultiStart_1_1AbstractAggregationAlgorithm}}{} +\item\contentsline{section}{\hyperlink{structpeoSynchronousMultiStart_1_1AbstractAlgorithm}{peo\-Synchronous\-Multi\-Start$<$ Entity\-Type $>$::Abstract\-Algorithm} }{\pageref{structpeoSynchronousMultiStart_1_1AbstractAlgorithm}}{} +\item\contentsline{section}{\hyperlink{structpeoSynchronousMultiStart_1_1AbstractDataType}{peo\-Synchronous\-Multi\-Start$<$ Entity\-Type $>$::Abstract\-Data\-Type} }{\pageref{structpeoSynchronousMultiStart_1_1AbstractDataType}}{} +\item\contentsline{section}{\hyperlink{structpeoSynchronousMultiStart_1_1AggregationAlgorithm}{peo\-Synchronous\-Multi\-Start$<$ Entity\-Type $>$::Aggregation\-Algorithm$<$ Aggregation\-Algorithm\-Type $>$} }{\pageref{structpeoSynchronousMultiStart_1_1AggregationAlgorithm}}{} +\item\contentsline{section}{\hyperlink{structpeoSynchronousMultiStart_1_1Algorithm}{peo\-Synchronous\-Multi\-Start$<$ Entity\-Type $>$::Algorithm$<$ Algorithm\-Type $>$} }{\pageref{structpeoSynchronousMultiStart_1_1Algorithm}}{} +\item\contentsline{section}{\hyperlink{structpeoSynchronousMultiStart_1_1DataType}{peo\-Synchronous\-Multi\-Start$<$ Entity\-Type $>$::Data\-Type$<$ Type $>$} }{\pageref{structpeoSynchronousMultiStart_1_1DataType}}{} +\item\contentsline{section}{\hyperlink{structpeoSynchronousMultiStart_1_1NoAggregationFunction}{peo\-Synchronous\-Multi\-Start$<$ Entity\-Type $>$::No\-Aggregation\-Function} }{\pageref{structpeoSynchronousMultiStart_1_1NoAggregationFunction}}{} +\item\contentsline{section}{\hyperlink{classpeoSyncIslandMig}{peo\-Sync\-Island\-Mig$<$ EOT $>$} (The \hyperlink{classpeoSyncIslandMig}{peo\-Sync\-Island\-Mig} class offers the elementary basis for implementating a synchronous island migration model - requires the specification of several basic parameters, i.e )}{\pageref{classpeoSyncIslandMig}}{} +\item\contentsline{section}{\hyperlink{classpeoSyncMultiStart}{peo\-Sync\-Multi\-Start$<$ EOT $>$} (The \hyperlink{classpeoSyncMultiStart}{peo\-Sync\-Multi\-Start} class provides the basis for implementing the synchronous multi-start model, for launching several solution-based algorithms in parallel on a specified initial population )}{\pageref{classpeoSyncMultiStart}}{} +\item\contentsline{section}{\hyperlink{classpeoTransform}{peo\-Transform$<$ EOT $>$} (The \hyperlink{classpeoTransform}{peo\-Transform} class acts only as an interface for creating transform operators - for an example please refer to the {\bf \hyperlink{classpeoSeqTransform}{peo\-Seq\-Transform}} and the {\bf \hyperlink{classpeoParaSGATransform}{peo\-Para\-SGATransform}} classes )}{\pageref{classpeoTransform}}{} +\item\contentsline{section}{\hyperlink{structRandomExplorationAlgorithm}{Random\-Exploration\-Algorithm} }{\pageref{structRandomExplorationAlgorithm}}{} +\item\contentsline{section}{\hyperlink{classReactiveThread}{Reactive\-Thread} }{\pageref{classReactiveThread}}{} +\item\contentsline{section}{\hyperlink{classRingTopology}{Ring\-Topology} }{\pageref{classRingTopology}}{} +\item\contentsline{section}{\hyperlink{classRunner}{Runner} }{\pageref{classRunner}}{} +\item\contentsline{section}{\hyperlink{structSEND__REQUEST}{SEND\_\-REQUEST} }{\pageref{structSEND__REQUEST}}{} +\item\contentsline{section}{\hyperlink{classService}{Service} }{\pageref{classService}}{} +\item\contentsline{section}{\hyperlink{classThread}{Thread} }{\pageref{classThread}}{} +\item\contentsline{section}{\hyperlink{classTopology}{Topology} }{\pageref{classTopology}}{} +\item\contentsline{section}{\hyperlink{classWorker}{Worker} }{\pageref{classWorker}}{} +\end{CompactList} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classCommunicable.eps b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classCommunicable.eps new file mode 100644 index 000000000..bc98683b5 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classCommunicable.eps @@ -0,0 +1,257 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 79.3651 +%%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 6.3 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 6 def +/cols 6 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 +(Communicable) cw +(Cooperative) cw +(Runner) cw +(Service) cw +(Worker) cw +(peoAsyncIslandMig< EOT >) cw +(peoSyncIslandMig< EOT >) cw +(peoEA< EOT >) cw +(peoParallelAlgorithmWrapper) cw +(peoPopEval< EOT >) cw +(peoSynchronousMultiStart< EntityType >) cw +(peoSyncMultiStart< EOT >) cw +(peoTransform< 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 ----- + + (Communicable) 3 5 box + (Cooperative) 0 4 box + (Runner) 2 4 box + (Service) 4 4 box + (Worker) 5 4 box + (peoAsyncIslandMig< EOT >) 1 3 box + (peoSyncIslandMig< EOT >) 1 2 box + (peoEA< EOT >) 3 3 box + (peoParallelAlgorithmWrapper) 3 2 box + (peoPopEval< EOT >) 5 3 box +5 3 mark + (peoSynchronousMultiStart< EntityType >) 5 2 box + (peoSyncMultiStart< EOT >) 5 1 box + (peoTransform< EOT >) 5 0 box +5 0 mark + +% ----- relations ----- + +solid +1 3 4.25 out +solid +0 5 5 conn +solid +0 0 4.75 in +solid +1 0 3.25 out +solid +0 2 4.75 in +solid +1 2 3.25 out +solid +0 4 4.75 in +solid +1 4 3.25 out +solid +0 5 4.75 in +solid +0 0 3.5 hedge +solid +0 0 2.5 hedge +solid +0 4 2.5 vedge +solid +0 2 3.5 hedge +solid +0 2 2.5 hedge +solid +2 4 2.5 vedge +solid +0 4 3.5 hedge +solid +0 4 2.5 hedge +solid +0 4 1.5 hedge +solid +0 4 0.5 hedge +solid +4 4 0.5 vedge diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classCommunicable.pdf b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classCommunicable.pdf new file mode 100644 index 0000000000000000000000000000000000000000..9213c1a3ec06e60f277595902bf55603e25dc570 GIT binary patch literal 1773 zcmZ`)X;c$e7{vvFLDAz96u0R)LKBM2Om-BIB?xVq5w)~p+*=pGilAaeskNx6oT^8VLlN6I7(k?*KQnW`ckla_cV`^KC9You%$u45auJ|@DVHF*I_tO>}bb<&t_cYTFS+xx1?ty zm1lmwQy4GvR`Y`zx^B1CyBMNQ1ZJ~-8|X9~@vnO9@6*J2^|{mi;^yR>)+ITWJ2y`g z2TbxJ=A;}-?q^xG`Nm7_dplLzj~6u@ZSeojjX(8a^$webA^S}+p}P+w6>i6OSXV4} z^0M_<=3jo~X2-RV{&Mk(o6bo9S1YfeY2z!!u!Din3Ik_#jH5;vV&oxbVx#wjZw5w>cja~Il zW%Gm-)0%hpd&pe;R+d)BiCJrd*G#o6|KOfQS&i>?%e_#B-&yov>!glGbZTL+ML|NJ zQ3&n!<@i})l#N%~7ZKrA#Cj@>D`{IL6 z8kW@BUH)~EO{|<=kuN#rQ2eLH4vfik>ks4f&WwUK2hQc_oxNybU++`rvo;mRp4l~A z`IiTBOMMNU?u6u}^W^!0SYn&$dN=yf!of*p4l-Lpt2Cc^@Wl9paR+l3@r95X;*VM= zGCh?*!to>m2_cj!+=onq<4_P5peQVIbLEK?5C~I*mWFwZ%^*Zh=tw=4K^)o+cT@qiTB%PUD7G{r9QI2lb+j&lQl-+c7!$anTn=a}_|nlTQY!(i zXG@lGQB;JXs2IaAAzujMA*AyELXj$3O|X5{xK0;}YlvYnl4489wDcrG3lMKToeTiZ zNN3V0A`wDi41>^-3l<6lJOP{tn=uR(g2^x!tR2C)A~5*3Fcbx~j>S;10Gye(Fccfd zMa8`FdtfLS+*mHg{SOQqzXyhi-r&*{u2K^e_}#!rgerpo^}>jpB*F1xrVS$j+C&m& z1_itkAc5o9^@^aIn;c&5OB(EJ=6~z5mopwwFeg_>;}kvAM2yelLXM8oFd6hO^$vbx literal 0 HcmV?d00001 diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classCommunicable.tex b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classCommunicable.tex new file mode 100644 index 000000000..44bcd5647 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classCommunicable.tex @@ -0,0 +1,87 @@ +\hypertarget{classCommunicable}{ +\section{Communicable Class Reference} +\label{classCommunicable}\index{Communicable@{Communicable}} +} +Inheritance diagram for Communicable::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=2.22222cm]{classCommunicable} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +\hypertarget{classCommunicable_8ae1827ecf7569b3db1ed386c7d8ad78}{ +\hyperlink{classCommunicable_8ae1827ecf7569b3db1ed386c7d8ad78}{Communicable} ()} +\label{classCommunicable_8ae1827ecf7569b3db1ed386c7d8ad78} + +\item +\hypertarget{classCommunicable_2280b0dfa0d3a515fccf62c2a9fd5f41}{ +virtual \hyperlink{classCommunicable_2280b0dfa0d3a515fccf62c2a9fd5f41}{$\sim$Communicable} ()} +\label{classCommunicable_2280b0dfa0d3a515fccf62c2a9fd5f41} + +\item +\hypertarget{classCommunicable_db4307b69b9ccacff55fdbf84b8f50e4}{ +COMM\_\-ID \hyperlink{classCommunicable_db4307b69b9ccacff55fdbf84b8f50e4}{get\-Key} ()} +\label{classCommunicable_db4307b69b9ccacff55fdbf84b8f50e4} + +\item +\hypertarget{classCommunicable_e1f8bd1ee810fd73d44315c95998d19d}{ +void \hyperlink{classCommunicable_e1f8bd1ee810fd73d44315c95998d19d}{lock} ()} +\label{classCommunicable_e1f8bd1ee810fd73d44315c95998d19d} + +\item +\hypertarget{classCommunicable_caa814847192e71f434fbf9479ede862}{ +void \hyperlink{classCommunicable_caa814847192e71f434fbf9479ede862}{unlock} ()} +\label{classCommunicable_caa814847192e71f434fbf9479ede862} + +\item +\hypertarget{classCommunicable_cb53e6534b947bc889aa181d9dbbd13b}{ +void \hyperlink{classCommunicable_cb53e6534b947bc889aa181d9dbbd13b}{stop} ()} +\label{classCommunicable_cb53e6534b947bc889aa181d9dbbd13b} + +\item +\hypertarget{classCommunicable_3306a9adb11a0ab5af342c0db9f7bb2a}{ +void \hyperlink{classCommunicable_3306a9adb11a0ab5af342c0db9f7bb2a}{resume} ()} +\label{classCommunicable_3306a9adb11a0ab5af342c0db9f7bb2a} + +\end{CompactItemize} +\subsection*{Protected Attributes} +\begin{CompactItemize} +\item +\hypertarget{classCommunicable_605b0efeffe81326f216c9903f5bbf4c}{ +COMM\_\-ID \hyperlink{classCommunicable_605b0efeffe81326f216c9903f5bbf4c}{key}} +\label{classCommunicable_605b0efeffe81326f216c9903f5bbf4c} + +\item +\hypertarget{classCommunicable_cf9639312f71a2f348bc1e7789ccbd9d}{ +sem\_\-t \hyperlink{classCommunicable_cf9639312f71a2f348bc1e7789ccbd9d}{sem\_\-lock}} +\label{classCommunicable_cf9639312f71a2f348bc1e7789ccbd9d} + +\item +\hypertarget{classCommunicable_29c53b9191348e0505e3bcba6d8b82b1}{ +sem\_\-t \hyperlink{classCommunicable_29c53b9191348e0505e3bcba6d8b82b1}{sem\_\-stop}} +\label{classCommunicable_29c53b9191348e0505e3bcba6d8b82b1} + +\end{CompactItemize} +\subsection*{Static Protected Attributes} +\begin{CompactItemize} +\item +\hypertarget{classCommunicable_7a6acfdc781a67c9c0ec4f17893f86c3}{ +static unsigned \hyperlink{classCommunicable_7a6acfdc781a67c9c0ec4f17893f86c3}{num\_\-comm} = 0} +\label{classCommunicable_7a6acfdc781a67c9c0ec4f17893f86c3} + +\end{CompactItemize} + + +\subsection{Detailed Description} + + + + +Definition at line 44 of file communicable.h. + +The documentation for this class was generated from the following files:\begin{CompactItemize} +\item +communicable.h\item +communicable.cpp\end{CompactItemize} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classCommunicator.eps b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classCommunicator.eps new file mode 100644 index 000000000..3d7cc0668 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classCommunicator.eps @@ -0,0 +1,203 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 550.459 +%%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 0.908333 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 3 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 +(Communicator) cw +(ReactiveThread) cw +(Thread) 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 ----- + + (Communicator) 0 0 box + (ReactiveThread) 0 1 box + (Thread) 0 2 box + +% ----- relations ----- + +solid +0 0 0 out +solid +1 0 1 in +solid +0 0 1 out +solid +1 0 2 in diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classCommunicator.pdf b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classCommunicator.pdf new file mode 100644 index 0000000000000000000000000000000000000000..803364617b224a3825683e974c933dc260807e72 GIT binary patch literal 1400 zcmZ`(e@qi+7?$9&dAdaA7RPk>nT1)HaNo7P{xAj^lp+Icy%vTvY#!}Ld$aWL?kj0o z2s({njKzp6 zNcXXo6Is%D@s-Kpn$<%ir`zAYVR$ckuVu%U6C?GPpUrySw!LHP@3nV>S7KQ|n0LN1 zTO0mx7rgK&Jn_;CnOS9bGB=cT{i2CwM+WvEDE8I=^{KaGI@*77_jXs~Q(OBYGs=%^ zhhi7o)Vji)Co6AP)$I}-*4nRy6=v_orTGt6MSkrp=z8beviv>8bEB(;C*If;&CDF1 zn0e5@F82Pu{O*UI{`>2-Ii1TNSv2M~znwWebARb5fE%_LmhAZWlMDODdbrU`(_i%r z-4?zZ%)a?K=6W5k*+yp13tc;xJEiVBPxn{U9n3g0dwlHZp32De>mPkFT|9m0`@QGZ zNorNc#uwN4E^4%2mbc!DcDA1E^;NEq^qsJs`swN=6!0Y6C%@>%=$`1e&ZuP)kUq6c zXSfBicF~L2YUGi`5;+81kd%2yK0GYc8yXl=S5N>09o;y?3P_cMiW{jU3wA|zI}moU zBrSk-q7Wv>%R;!^fk_^Kd7fdF37ey`0z=ZlmXdoSr~;a*IFx9NK4Cs(M2vI>;;pHG zt&}_}a51!TfoT9lAxI^uT7t?gP!r5j5sQA=o0OPuK6T#s`1w@R3~RGj1FonjAxvjT zBwsKxlqRH9;zK2?CdTx5mEI_?hXzo@F)#AcKflNF6c4u!oaK#*61*hhf81!qDEYGNSZI0i0Uz`*l5 z9yEa@W-t*K=mi1`m>H6}(lCRT7@dacjU>Ej801K3(l9+w){=%9b&I*C|GOj258S(a aBX2R%K$ELtQNeK&Imnxt+}tvomH7uAtJGcq literal 0 HcmV?d00001 diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classCommunicator.tex b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classCommunicator.tex new file mode 100644 index 000000000..1252e00ff --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classCommunicator.tex @@ -0,0 +1,36 @@ +\hypertarget{classCommunicator}{ +\section{Communicator Class Reference} +\label{classCommunicator}\index{Communicator@{Communicator}} +} +Inheritance diagram for Communicator::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=3cm]{classCommunicator} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +\hypertarget{classCommunicator_7c9dce4ea92bd04d01d53f80c0ef08ee}{ +\hyperlink{classCommunicator_7c9dce4ea92bd04d01d53f80c0ef08ee}{Communicator} (int $\ast$\_\-\_\-argc, char $\ast$$\ast$$\ast$\_\-\_\-argv)} +\label{classCommunicator_7c9dce4ea92bd04d01d53f80c0ef08ee} + +\item +\hypertarget{classCommunicator_142fae13b16b166519315f248a513c62}{ +void \hyperlink{classCommunicator_142fae13b16b166519315f248a513c62}{start} ()} +\label{classCommunicator_142fae13b16b166519315f248a513c62} + +\end{CompactItemize} + + +\subsection{Detailed Description} + + + + +Definition at line 43 of file comm.h. + +The documentation for this class was generated from the following files:\begin{CompactItemize} +\item +comm.h\item +comm.cpp\end{CompactItemize} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classCooperative.eps b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classCooperative.eps new file mode 100644 index 000000000..60c6b6b94 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classCooperative.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 166.667 +%%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 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 3 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 +(Cooperative) cw +(Communicable) cw +(peoAsyncIslandMig< EOT >) cw +(peoSyncIslandMig< 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 ----- + + (Cooperative) 0.5 1 box + (Communicable) 0.5 2 box + (peoAsyncIslandMig< EOT >) 0 0 box + (peoSyncIslandMig< EOT >) 1 0 box + +% ----- relations ----- + +solid +0 0.5 1 out +solid +1 0.5 2 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-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classCooperative.pdf b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classCooperative.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d7a04b51a9abee479284a4e16e092be4ad340eab GIT binary patch literal 1478 zcmZ`(dr(wW9BzaWyJHSasn|Gn;7vya-{OZVQ@ z#l(u30(6E^Ov~XBhL6M@Diskk#$E^xC_Vd5f9^fs?|k3+ zJ-&03O*%sgohl=eJ4dSb5e%RJSM)NGo=)aKpHp-J1wzcE!R-+t4@iTD6`>B=I6Ks6 z2tni_>m>rUb(SA|PiD?7ZD_e|>yL4coLv1vQ&ZJpP5%6zdyh1h$9@vKitHZhd~K0q z=}6T4ta|mZ?eD-yiYw_tPs@p;>#Y-WKE5b@?4@fRrUHF1>UYPQFRjVBags)Q?qJQW zw&){^-jc;Go;@0Oc)fMYPo51oIu3N~dHu$o!ENm=1G*jA33rx#w*UJq$JlsfjbYxE zpuQ$ypgX#by1iuGuRE?~v@hs7QvE!e@l5WUeFiC2XekUXDdczSc7D)RalAim;pR&J zg!6Q*@u{`?pAV&8jek|r98Ov$m}X2g|vq z2hWY&TmIu4nO__?s=97kM^nycYU2}nHnpY=&8lENFO9v_<$C*U=JtbmiE6LhCI6)f zzW?XCbM@Dcr6%Rn&vwV0Wp`OhDo-(zkBm1BD-sip-Cy0!d8g4n)>)z6x^$jw!BySq zs5oz|2z~bOEYTO9Kb|^%%NdFYL-J{Bq2%NZ?umYsu$C6krOr@u&VWyT9 zSr6xoNK7U_yP)IRzUe*^%l*A}OTKq*K9tEx%ogJwvZCU}f+U~bOUZS^{K(>n$M8U?pi$$QK znN%uGirR{Sh#1F9 zbX=gs34I93^ouS8NT)gz;Gu&+HlYb>>H!LdkukslBA8Nv42U1#o5Iv8P`qhb!`|+XH#@9|fevy&0l<0cqwqWIsG@ zK(6#TIDiL*?#4) 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 ----- + + (DisplayBestRoute) 0 0 box + (eoUpdater) 0 1 box + (eoF< 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-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classDisplayBestRoute.pdf b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classDisplayBestRoute.pdf new file mode 100644 index 0000000000000000000000000000000000000000..3e97f2f86252f9ea70c9eb0e0a3d6446d1ac5d9d GIT binary patch literal 1501 zcmZ`(e@q)y95>GSHR1&J)K$Pj?~c-5y8({TcAzjy+W}hzIob!@EO+GY3Pqez z<3JICZAfMq31AdO8BRkOb0+8pIAF*&*amDtlLbN|VR536Wt;Dy1p&Q(?%wD7zMuE~ ze!ib~a+BT|Mk-a9yyy4IMobL|z-1l4A|vqx$mWQ-K!Xr7Ze*My6ekj}&0$Lo$JvSY*(hyIT23LR5^?$6IXBHQPecerlfc9Ge7-mj+-`18YhIigdEBq$+oa{%#w&zMF zjI&)2X&S%l&kXC9HB1eaw$`3KTQFOAF|Z=_`zHIHlO3t!TiUGthd&CMdw%$tw$g8V z-i~oztU784N|_|}MdKAS=lk{<-^)7w*vP@AYnwk!dRLZQwS9J7&Hbm!5>7aX7wWH0 zR5#za`{t>PfUzEOVB~>n=gtdz%NrBugiF44t-nt8T3t;}FqPIH7r1^Z>PvBFfsgai z7T?(BKKxd3dq>HK?ZSwkpR1XF683f-e*ERiCYb=6kGy(bd-GUBC^oc%UmtX%W?iIi z$a>l}|L5xmuSY3UO8=U6C^tPj9H8i}?k}wxyn6Q&h2`V&hKb++(hRe_d6@f~!6^5Ikz`1xk6p-OeJZHB+(S{>S0^ADSBHC_n zi@Pl%G9Az@W*9k?O-i(83|SD5MQcPT0Li)wkf$)|gheYOGE^B@C`|zPD~v+`HcTqq zjHLs_;F2gMHcu+KlC?*@Z%J3B_=WD@&9{A$5(;_I4G%%z&hJ zxa^P*HdstxcP=N0f}LmbMW7|sN+LW2$%<~a$Z)J4Ngu4=9!?MxNf26+BsCEfiYIc8 z{|i|e(FucNowOkAq4S`ZjN^m#oVzFovIvQBiMa>}SyIN$!)%NIB#9AA574O9DmBOk zUX0Qr0i_49UJMn5rm+$uC>8R@DojlwxmRHXiA=K!Q>&5Et1zuE;1-ONI1EPKbZss^-KWW+kk7u(vAPoxLjd(q<1z)O69i-mxc<|czfjz&e c?%fPoi=<1=6-1gB7equ8A~3n!kYvRE0hrJS`v3p{ literal 0 HcmV?d00001 diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classDisplayBestRoute.tex b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classDisplayBestRoute.tex new file mode 100644 index 000000000..390c5544a --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classDisplayBestRoute.tex @@ -0,0 +1,44 @@ +\hypertarget{classDisplayBestRoute}{ +\section{Display\-Best\-Route Class Reference} +\label{classDisplayBestRoute}\index{DisplayBestRoute@{DisplayBestRoute}} +} +Inheritance diagram for Display\-Best\-Route::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=4cm]{classDisplayBestRoute} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +\hypertarget{classDisplayBestRoute_db263e38f1e82174f811bf62f323f87f}{ +\hyperlink{classDisplayBestRoute_db263e38f1e82174f811bf62f323f87f}{Display\-Best\-Route} (\bf{eo\-Pop}$<$ \bf{Route} $>$ \&\_\-\_\-pop)} +\label{classDisplayBestRoute_db263e38f1e82174f811bf62f323f87f} + +\item +\hypertarget{classDisplayBestRoute_ee879344a6d8b81a04d4eabbed2c7a04}{ +void \hyperlink{classDisplayBestRoute_ee879344a6d8b81a04d4eabbed2c7a04}{operator()} ()} +\label{classDisplayBestRoute_ee879344a6d8b81a04d4eabbed2c7a04} + +\end{CompactItemize} +\subsection*{Private Attributes} +\begin{CompactItemize} +\item +\hypertarget{classDisplayBestRoute_5270aabbf294d2deca9878934216eb89}{ +\bf{eo\-Pop}$<$ \bf{Route} $>$ \& \hyperlink{classDisplayBestRoute_5270aabbf294d2deca9878934216eb89}{pop}} +\label{classDisplayBestRoute_5270aabbf294d2deca9878934216eb89} + +\end{CompactItemize} + + +\subsection{Detailed Description} + + + + +Definition at line 46 of file display\_\-best\_\-route.h. + +The documentation for this class was generated from the following files:\begin{CompactItemize} +\item +display\_\-best\_\-route.h\item +display\_\-best\_\-route.cpp\end{CompactItemize} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classMergeRouteEval.eps b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classMergeRouteEval.eps new file mode 100644 index 000000000..a46755cc0 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classMergeRouteEval.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 479.042 +%%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.04375 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 +(MergeRouteEval) cw +(peoAggEvalFunc< EOT >) cw +(eoBF< A1, A2, R >) 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 ----- + + (MergeRouteEval) 0 0 box + (peoAggEvalFunc< EOT >) 0 1 box + (eoBF< A1, A2, R >) 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-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classMergeRouteEval.pdf b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classMergeRouteEval.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d469f7cf8f1630f190ff0f89e8d23415bb6d5070 GIT binary patch literal 1396 zcmZ`(YfKzf6xKk9PO27SszyyN=<04L%*?)KwxLAW2Zffh?vnbzRfgTW58R#E%-n4j zD=DEBP|`?&Mq&*`lhTBg(keb;)0!gMm{QOtSQ=CsENT$9C`fAhi1#kLtc5y%X68HR zd~?qEzB?+r#g@nB>nPRPxwk){41fVrO)XVWKyQPh5BY%+BM#aY2qGv0+7=WLv_QAy zfrW*Xf@CO!sOWqBj>)nwpIKi&HPBUZKpPvG%d_v@&{vW3{f&mshdaNXIC$%HhjDW7 zw^oon7c+gNjE;^_8?z>2zhAVvkNuiCyYEE!$nMaNrlq^TrCT$44`-;tdyNzK%(R+b zdTO7BDNEn5vA}$(tMz)V>$!!UpZ0qXjh#F9*ZGmM1^;li^TBHuP7XA^KD565mvHt8 zG5g8p>Bo-dE-Z2n3_WkT+R*sb@F4f+vmbYS9$WWA?5Bs^U7I_@%3}L?X`}eo?)kQy zrq1-wT3kb;#pBzhv&{RM+oI_UuUvT{x4HdRQ8!wK^p$6R)7x{ZM*3s_tM`|D*w=gh<=QKcwEc6sFKsIA@vHZ~F+R|?RA!zq%}i_L z?w@C78;<|oxa4mf+AJyQ-NpXI@-HHPh*)vHj&O?hAEeIazx~Z}xn5 zXqWMwYg>HP$AMKnKe#R}++B2E!MoBa@9z*Ped)E5xMJ(Je7d-DIqKC!jQHL zK1i2CPe3S^qM(YwVFSYeJ!i^i^ezg=Whf$`BWhE$11eHPc0&dGz%EN}Cqz{=b_$>? zVHDwXYZR3@5%vNwEmzniT+I?%2ZfzMoAEm)Q~+^Q97;4szOd{tOolrH@zxYTZw+`9 zP(_i(9h3`Th6te~Y>85Kr8H4#7LX8>d`XJs=2Q9H?fI#uDZ0X54%ouN1TmQ*;d%#0 zkupb$B|cO#%2WL9QSzDy77Gd_YoIFwA*kdzq>v!S8>IB2tj4@wbyxX;Tb% z)t-nO%4)0A4oduzf)uwL2qVC=hI~e=!E40_4h1C9f>*D$Y|=6e$1)7hvaC_h;dr^^ z`M*$Q00p7i9268~yAXm&GD%ijq-dQFiWn)1AU_5)E1QYR&`U9ZWhrLm0!D*DX8>N1 z#Ed)^ja)!n!FUti%qq;N#b#KA={Y?ADvV+8kY~W^uFB(dYis#CU>vu$mS_G`i)0}X zgfjl?0ooaO4dQtL?T{pFKcY6EOGU2)h*0=!lv+TQ`sU1!2cCZOE^RQs|BIg7ldNVf X;v&vfkRYS@5?RJzpj0Yrg^l_b1M1qB literal 0 HcmV?d00001 diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classMergeRouteEval.tex b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classMergeRouteEval.tex new file mode 100644 index 000000000..d2fcb7425 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classMergeRouteEval.tex @@ -0,0 +1,31 @@ +\hypertarget{classMergeRouteEval}{ +\section{Merge\-Route\-Eval Class Reference} +\label{classMergeRouteEval}\index{MergeRouteEval@{MergeRouteEval}} +} +Inheritance diagram for Merge\-Route\-Eval::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=4cm]{classMergeRouteEval} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +\hypertarget{classMergeRouteEval_29cb0028ac0df4b2cee3a809c8f35dea}{ +void \hyperlink{classMergeRouteEval_29cb0028ac0df4b2cee3a809c8f35dea}{operator()} (\bf{Route} \&\_\-\_\-route, const int \&\_\-\_\-part\_\-fit)} +\label{classMergeRouteEval_29cb0028ac0df4b2cee3a809c8f35dea} + +\end{CompactItemize} + + +\subsection{Detailed Description} + + + + +Definition at line 44 of file merge\_\-route\_\-eval.h. + +The documentation for this class was generated from the following files:\begin{CompactItemize} +\item +merge\_\-route\_\-eval.h\item +merge\_\-route\_\-eval.cpp\end{CompactItemize} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classReactiveThread.eps b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classReactiveThread.eps new file mode 100644 index 000000000..9c8a085ba --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classReactiveThread.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 275.229 +%%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.81667 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 3 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 +(ReactiveThread) cw +(Thread) cw +(Communicator) cw +(Worker) 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 ----- + + (ReactiveThread) 0.5 1 box + (Thread) 0.5 2 box + (Communicator) 0 0 box + (Worker) 1 0 box + +% ----- relations ----- + +solid +0 0.5 1 out +solid +1 0.5 2 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-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classReactiveThread.pdf b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classReactiveThread.pdf new file mode 100644 index 000000000..2e0f92b3c --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classReactiveThread.pdf @@ -0,0 +1,76 @@ +%PDF-1.3 +%Çì¢ +5 0 obj +<> +stream +xœSMÓ0½ûWøÏŒ¿æ +Bœ»Dâ\•î¶°¡jYàï3·“n¤]E‘í¿yïÙ“³u€Ö•gw­y—ìÃ/ãìg}ÌÙ`·ÁîµÝ”-HJÁ6÷¦'£E ¢Ž$€‘lÓš7wûíîéøgß.ûí··Íwó©1C |F¶•|4g;–\ c†¤¢"@Á¶†cFà +˶–†P2Ì 뚅’Z×3©Ö—ÀÈ8’Abñá@}¼" +ê-I.qì“|<µíïŸÇÝöétYÏS†Ö(‰ ˆÎë> +/Contents 5 0 R +>> +endobj +3 0 obj +<< /Type /Pages /Kids [ +4 0 R +] /Count 1 +>> +endobj +1 0 obj +<> +endobj +7 0 obj +<>endobj +9 0 obj +<> +endobj +10 0 obj +<> +endobj +8 0 obj +<> +endobj +2 0 obj +<>endobj +xref +0 11 +0000000000 65535 f +0000000746 00000 n +0000000960 00000 n +0000000687 00000 n +0000000534 00000 n +0000000015 00000 n +0000000515 00000 n +0000000794 00000 n +0000000894 00000 n +0000000835 00000 n +0000000864 00000 n +trailer +<< /Size 11 /Root 1 0 R /Info 2 0 R +/ID [(À©s¬YÍ_êZ‹?Àl’!)(À©s¬YÍ_êZ‹?Àl’!)] +>> +startxref +1117 +%%EOF diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classReactiveThread.tex b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classReactiveThread.tex new file mode 100644 index 000000000..1b9508e9d --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classReactiveThread.tex @@ -0,0 +1,49 @@ +\hypertarget{classReactiveThread}{ +\section{Reactive\-Thread Class Reference} +\label{classReactiveThread}\index{ReactiveThread@{ReactiveThread}} +} +Inheritance diagram for Reactive\-Thread::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=3cm]{classReactiveThread} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +\hypertarget{classReactiveThread_77381649429941c99a3e3d568113d6cf}{ +\hyperlink{classReactiveThread_77381649429941c99a3e3d568113d6cf}{Reactive\-Thread} ()} +\label{classReactiveThread_77381649429941c99a3e3d568113d6cf} + +\item +\hypertarget{classReactiveThread_8263c2a32d8c99a49a05f1a7717d4262}{ +void \hyperlink{classReactiveThread_8263c2a32d8c99a49a05f1a7717d4262}{sleep} ()} +\label{classReactiveThread_8263c2a32d8c99a49a05f1a7717d4262} + +\item +\hypertarget{classReactiveThread_a724a54575de10f09cc03ab7aa4e59ce}{ +void \hyperlink{classReactiveThread_a724a54575de10f09cc03ab7aa4e59ce}{wake\-Up} ()} +\label{classReactiveThread_a724a54575de10f09cc03ab7aa4e59ce} + +\end{CompactItemize} +\subsection*{Private Attributes} +\begin{CompactItemize} +\item +\hypertarget{classReactiveThread_915e5a42dc8cb1bcf6738d5fe883a4e7}{ +sem\_\-t \hyperlink{classReactiveThread_915e5a42dc8cb1bcf6738d5fe883a4e7}{sem}} +\label{classReactiveThread_915e5a42dc8cb1bcf6738d5fe883a4e7} + +\end{CompactItemize} + + +\subsection{Detailed Description} + + + + +Definition at line 44 of file reac\_\-thread.h. + +The documentation for this class was generated from the following files:\begin{CompactItemize} +\item +reac\_\-thread.h\item +reac\_\-thread.cpp\end{CompactItemize} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classRingTopology.eps b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classRingTopology.eps new file mode 100644 index 000000000..04c98c56e --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classRingTopology.eps @@ -0,0 +1,197 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 412.371 +%%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.2125 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 2 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 +(RingTopology) cw +(Topology) 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 ----- + + (RingTopology) 0 0 box + (Topology) 0 1 box + +% ----- relations ----- + +solid +0 0 0 out +solid +1 0 1 in diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classRingTopology.pdf b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classRingTopology.pdf new file mode 100644 index 0000000000000000000000000000000000000000..3b9bdd5d63bd2190ae0c8b3b1d6544075fd4d73e GIT binary patch literal 1290 zcmZ`(U2M}<6y|9fm+=78n8pO$4Rxds&9$A_Nl=KOO;WnHA#wr}v=w!eo79lR#l9Ko zG?mdxs31)sjUqO9=};?P03igL5K;$-|DOV44`>2H1>#3&D?(ZkNOb3>Ni$047u(-C z=kqz=cdjeK{$Q18cc6+3&v*WcWGrB#Z3FUpNdwI!Svyt$QAtowF=}EGOlgezY0QXI zpAT8gq*@x~_V?`?4xJS~I{$YUTC}yNu6ar5@XFqo!F#Q@PWJbyo0gwi78-9qbYj+y zFaNxm+%l9~Uc0bmndN1pr@l!Ioqn+I?z|6156pPn@nm#hudN?Fy879bIfIFvKQ5WK zdiS}P1UTRGo?C;4pH`*g3Yo&qs zBjrf<$15AY{^FNoYWA=Eg3aSSW1)*1tFH%#y=U(KaDRoor(yo5`GNgMKbLRY7C&1$ zbUAe6;jZ4A>>BCu%&v8Vhn}4O>FkC@^*=wa-=4nr>cyL?V+s3_50BHA(ND6oyPMO_ zeZA)bBfoXs33+^Xy5G(?*V_3l&BTjxz!R5{3&-!0BBCPXEUO#s?4Ts9B`Im7ab2r6 za=1x=uq+7JDN1&Ss|7*aq#1@CfUAh8)H1SWj9Oq$*fe4h%9;q+he?#?7^DYstTw{H zAnci_2pUi=a#|IEU8DxyfzZO-<^oh~jDKOmb|8b!aG^B|lX^XF;U>fzS5XTFhAgM# zY{gP>vb0!PqcJUIBuf+%&6o3C@8*}AMr2jE5sN-wk(kd=Tt(G|c$r#eDGXJLx{>?c zD1R*mt2K*q8Aw!5Q>#if(psj_DB&m~k!%~|R`99e+oh?bG6P5*&&H@}3q-=Ww%xFp z6*Kh?hTWoU7o5c{sD=US z$KA%HE|V}YHww;1ogX*Z9Pzn$ \&\_\-\_\-from, std::vector$<$ \hyperlink{classCooperative}{Cooperative} $\ast$ $>$ \&\_\-\_\-to)} +\label{classRingTopology_292a7746993788f96042f2f628cfcbc5} + +\end{CompactItemize} + + +\subsection{Detailed Description} + + + + +Definition at line 42 of file ring\_\-topo.h. + +The documentation for this class was generated from the following files:\begin{CompactItemize} +\item +ring\_\-topo.h\item +ring\_\-topo.cpp\end{CompactItemize} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classRunner.eps b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classRunner.eps new file mode 100644 index 000000000..0bc955061 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classRunner.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 161.29 +%%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.1 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 3 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 +(Runner) cw +(Communicable) cw +(Thread) cw +(peoEA< EOT >) cw +(peoParallelAlgorithmWrapper) 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 ----- + + (Runner) 0.5 1 box + (Communicable) 0 2 box + (Thread) 1 2 box + (peoEA< EOT >) 0 0 box + (peoParallelAlgorithmWrapper) 1 0 box + +% ----- relations ----- + +solid +0 0.5 1 out +solid +0 1 2 conn +solid +1 0 2 in +solid +1 1 2 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-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classRunner.pdf b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classRunner.pdf new file mode 100644 index 0000000000000000000000000000000000000000..c9bfd3d1a935984b66ef3130acc44ea194771f52 GIT binary patch literal 1433 zcmZ`(eM}o=95x0_c!PY5Ik!c&cRI9$tasP;`hl!NC@p2Ht8K*z!Z_$lInv(EySLJ@ zF%t|i5||pnEh=uh3CkEP5Os@WA1-tJu|!D>>Qbjj$Xu2=rU{7#7Jc7Rs4IH^+}-p0 zJeR#Y-^V_~_Pxlm8?br}K-fk@zo<7?Ya)>u)Td-Q0 z@o-94RzYr`B_Oq?bf!r4u1|4iD+Q`R4?v#+>Xp1W5$SaDsW+)U>ddXEl0elYuq*8(Mdas*bhB+Roc zJ%HGUDJAbjP=(ZXF(_Ub{lcORi5RI2#!6Emvt9J7uo}?9J)i~>g)o(*YH=#JOpP;3 z1uO*Rz>>sb@riuX{rQQa0khNXf}GVF7p6VLkA}wtD9w{li8ZwpH3RegQTiGWmIx}M zV_xq#(x9NK&k7;5Bql2w zn;h92KoUWo3F9UL67e-f@#5L>x#l?ys29ZL3jgaw*t%&ps8ILRz`_XMf z#wj(*kS>ax4W|uOYaI7DZRkj7-OxyI?va-dIP+H`HPpE(78D#CBF9>EATO_MrycwQ DD^1j8 literal 0 HcmV?d00001 diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classRunner.tex b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classRunner.tex new file mode 100644 index 000000000..ce98b3b32 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classRunner.tex @@ -0,0 +1,80 @@ +\hypertarget{classRunner}{ +\section{Runner Class Reference} +\label{classRunner}\index{Runner@{Runner}} +} +Inheritance diagram for Runner::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=3cm]{classRunner} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +\hypertarget{classRunner_7acb8258c21da9daa62f9a177a2e5acd}{ +\hyperlink{classRunner_7acb8258c21da9daa62f9a177a2e5acd}{Runner} ()} +\label{classRunner_7acb8258c21da9daa62f9a177a2e5acd} + +\item +\hypertarget{classRunner_7dc4419051fcc5cc9dadd54ecc9cd47d}{ +void \hyperlink{classRunner_7dc4419051fcc5cc9dadd54ecc9cd47d}{start} ()} +\label{classRunner_7dc4419051fcc5cc9dadd54ecc9cd47d} + +\item +\hypertarget{classRunner_5bc239db2be753b77369fa9a038769fd}{ +void \hyperlink{classRunner_5bc239db2be753b77369fa9a038769fd}{wait\-Starting} ()} +\label{classRunner_5bc239db2be753b77369fa9a038769fd} + +\item +\hypertarget{classRunner_40adbfb7d6944189b4fff60b02e669ca}{ +bool \hyperlink{classRunner_40adbfb7d6944189b4fff60b02e669ca}{is\-Local} ()} +\label{classRunner_40adbfb7d6944189b4fff60b02e669ca} + +\item +\hypertarget{classRunner_0f133e75c28fb8264549814f80608e68}{ +void \hyperlink{classRunner_0f133e75c28fb8264549814f80608e68}{terminate} ()} +\label{classRunner_0f133e75c28fb8264549814f80608e68} + +\item +\hypertarget{classRunner_5026c74eec184e3a15cb3c0ec4200a57}{ +RUNNER\_\-ID \hyperlink{classRunner_5026c74eec184e3a15cb3c0ec4200a57}{get\-ID} ()} +\label{classRunner_5026c74eec184e3a15cb3c0ec4200a57} + +\item +\hypertarget{classRunner_2ad6d199d684d6f34347fc202ffe2fa3}{ +void \hyperlink{classRunner_2ad6d199d684d6f34347fc202ffe2fa3}{pack\-Termination} ()} +\label{classRunner_2ad6d199d684d6f34347fc202ffe2fa3} + +\item +\hypertarget{classRunner_3591be473e0fcee1105fb57319b529aa}{ +void \hyperlink{classRunner_3591be473e0fcee1105fb57319b529aa}{notify\-Sending\-Termination} ()} +\label{classRunner_3591be473e0fcee1105fb57319b529aa} + +\end{CompactItemize} +\subsection*{Private Attributes} +\begin{CompactItemize} +\item +\hypertarget{classRunner_4b0827d5df2df632db4ab71dd55e81b2}{ +sem\_\-t \hyperlink{classRunner_4b0827d5df2df632db4ab71dd55e81b2}{sem\_\-start}} +\label{classRunner_4b0827d5df2df632db4ab71dd55e81b2} + +\item +\hypertarget{classRunner_1989c1f8e0b0b54ad2e60a341007e59d}{ +unsigned \hyperlink{classRunner_1989c1f8e0b0b54ad2e60a341007e59d}{id}} +\label{classRunner_1989c1f8e0b0b54ad2e60a341007e59d} + +\end{CompactItemize} + + +\subsection{Detailed Description} + + + + +Definition at line 47 of file runner.h. + +The documentation for this class was generated from the following files:\begin{CompactItemize} +\item +runner.h\item +core/runner.cpp\item +rmc/mpi/runner.cpp\end{CompactItemize} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classService.eps b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classService.eps new file mode 100644 index 000000000..b2c160b85 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classService.eps @@ -0,0 +1,241 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 63.4921 +%%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 7.875 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 5 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 +(Service) cw +(Communicable) cw +(peoPopEval< EOT >) cw +(peoSynchronousMultiStart< EntityType >) cw +(peoSyncMultiStart< EOT >) cw +(peoTransform< EOT >) cw +(peoParaPopEval< EOT >) cw +(peoSeqPopEval< EOT >) cw +(peoParaSGATransform< EOT >) cw +(peoSeqTransform< 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 ----- + + (Service) 2 2 box + (Communicable) 2 3 box + (peoPopEval< EOT >) 0.5 1 box + (peoSynchronousMultiStart< EntityType >) 1.5 1 box + (peoSyncMultiStart< EOT >) 2.5 1 box + (peoTransform< EOT >) 3.5 1 box + (peoParaPopEval< EOT >) 0 0 box + (peoSeqPopEval< EOT >) 1 0 box + (peoParaSGATransform< EOT >) 3 0 box + (peoSeqTransform< EOT >) 4 0 box + +% ----- relations ----- + +solid +0 2 2 out +solid +1 2 3 in +solid +1 2 1.25 out +solid +0.5 3.5 2 conn +solid +0 0.5 1.75 in +solid +1 0.5 0.25 out +solid +0 1 1 conn +solid +0 1.5 1.75 in +solid +0 2.5 1.75 in +solid +0 3.5 1.75 in +solid +1 3.5 0.25 out +solid +3 4 1 conn +solid +0 0 0.75 in +solid +0 1 0.75 in +solid +0 3 0.75 in +solid +0 4 0.75 in diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classService.pdf b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classService.pdf new file mode 100644 index 0000000000000000000000000000000000000000..c9b2abcb143b60167203ebcd2dc8c7bbf7dd91ce GIT binary patch literal 1897 zcmZ`)c~BEq824a6Hx?*Tj`7;mK?8`po47y_qd)+IQezSvE1)@8LNLkd?nXhps%ege~nlW!}IGN}#2$GR32 z*cEa@46ayb{mcs@A=V|5g|>{KmBzP<`lu%f%j>z8Lk0$SngB&lcteXQ!oN z5`A7*aqi^T+1u-%pcZX>3LGLMC+As0!}$-Q(kFYXnn{5Ulc!g>``~7 zHk$YBHE8ect9oB|q;YiMsG6m%_a)Y=r=+TF8xET$MeP{TY^rjT|I%D5xs8=;y0Wf! zoO}BFZYzFV$Q8$F;`r8`@02BP$9qn&wI=5{&?9Ygvrcs@_*3@xy-%5?)u(fp@WRx- zE0>=>Yx8{#UBpNon_}tbPCR3EQ(UrS+X)+W5H-fYX-s>*N_yWVZI?)sAM`h`9;)C` zWK!nw9_kI{H-yz^cjF`7> zoSlhlFPS(t``DEzm+;he%HyjDA40?p;D)(7-*L=*P`}u-!l&9j?zY_#7Z1*jhZj65 zUE4CZZsyPCIUl&$7|MzGF8G4|;?tPb(mnfY49W+dHdRr_%&oDFVYyN-j~wI4y2|#= zjkSJRFDjQeT{X4Ua9%_?C_JwE63q@}$(`*jx15dz{dKCFUX+wq*&-=V>YN>Gd+`Wi zjIs0^_+opM?M(LV>w`iTXvSdsDiT)^h*YH|kZ>YKrwSw!;7AmhaTJBU1=D8;qak3X z2qOav*cOKn89|dKN<+|~`K1)8krPZL0>%T3D2N0GY!6OgLgfq?0I=`_BZLHOj8&CE zU>qPpU=0Lmm>nbiki{?dgb!l{hylmoe$QwanWu}P;Yf(}TLwkLK*7XHvT7D8_K|8~ z2B{d8p41LVd~kknzt5-p2c3qH1=4UB6NxOsYz&rBC-Z?=nru*|Kd1q#FXa2Fm0enl zfhw9{(|{;+27>mIkp`8q-%*4`Aw+IcGi)W;sKMC-QSk>AK&oR*8iL{l%cXE=97!{@ zhSIHIU|$TMj`H0>TEUcMbfi%XQqL3n@ln(VLs4H0!@Oq*fjyjz`9G6F$LI-OkX}X8 z->3}4fEY>f#AHIEmM{V&z{JD>!2M%p5-1`TLSYPp(2o!7jpG6wj)g54hWUabvkz?i zhzW!ssh?pOAKcSVF;wUS3jP^}Vng&$AwC4d_ySPzPq~=jKQR8#GcW=AFD^r=bb5jU zzd9I^>(&q;UKo*)B)EQTwP8eJj3r^VP@p#?VmOjFF=1Abl~| literal 0 HcmV?d00001 diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classService.tex b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classService.tex new file mode 100644 index 000000000..fad0d49e2 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classService.tex @@ -0,0 +1,100 @@ +\hypertarget{classService}{ +\section{Service Class Reference} +\label{classService}\index{Service@{Service}} +} +Inheritance diagram for Service::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=1.77778cm]{classService} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +\hypertarget{classService_33b149b98498c0e7e401b0f0839d7f0d}{ +void \hyperlink{classService_33b149b98498c0e7e401b0f0839d7f0d}{set\-Owner} (\hyperlink{classThread}{Thread} \&\_\-\_\-owner)} +\label{classService_33b149b98498c0e7e401b0f0839d7f0d} + +\item +\hypertarget{classService_0dae00309c51a7b7069788142aed799f}{ +\hyperlink{classThread}{Thread} $\ast$ \hyperlink{classService_0dae00309c51a7b7069788142aed799f}{get\-Owner} ()} +\label{classService_0dae00309c51a7b7069788142aed799f} + +\item +\hypertarget{classService_7e2ae35a9070a05dcd46488df649896d}{ +void \hyperlink{classService_7e2ae35a9070a05dcd46488df649896d}{request\-Resource\-Request} (unsigned \_\-\_\-how\_\-many=1)} +\label{classService_7e2ae35a9070a05dcd46488df649896d} + +\item +\hypertarget{classService_c4289f98d1cd9ed53e850efbb6a947bd}{ +void \hyperlink{classService_c4289f98d1cd9ed53e850efbb6a947bd}{pack\-Resource\-Request} ()} +\label{classService_c4289f98d1cd9ed53e850efbb6a947bd} + +\item +\hypertarget{classService_aea4b8f7f8fb88e83862ee4bfd9ab207}{ +virtual void \hyperlink{classService_aea4b8f7f8fb88e83862ee4bfd9ab207}{pack\-Data} ()} +\label{classService_aea4b8f7f8fb88e83862ee4bfd9ab207} + +\item +\hypertarget{classService_3bd87b444710813d30fd754d4d0b4df3}{ +virtual void \hyperlink{classService_3bd87b444710813d30fd754d4d0b4df3}{unpack\-Data} ()} +\label{classService_3bd87b444710813d30fd754d4d0b4df3} + +\item +\hypertarget{classService_e4f2894e6121e60f38d41cfbd7447ae4}{ +virtual void \hyperlink{classService_e4f2894e6121e60f38d41cfbd7447ae4}{execute} ()} +\label{classService_e4f2894e6121e60f38d41cfbd7447ae4} + +\item +\hypertarget{classService_e5e4f90b2315e15c2a2913bd370f4cf5}{ +virtual void \hyperlink{classService_e5e4f90b2315e15c2a2913bd370f4cf5}{pack\-Result} ()} +\label{classService_e5e4f90b2315e15c2a2913bd370f4cf5} + +\item +\hypertarget{classService_45c06344edbfa482b91f68e2035a6099}{ +virtual void \hyperlink{classService_45c06344edbfa482b91f68e2035a6099}{unpack\-Result} ()} +\label{classService_45c06344edbfa482b91f68e2035a6099} + +\item +\hypertarget{classService_81ad4d6ebb50045b8977e2ab74826f30}{ +virtual void \hyperlink{classService_81ad4d6ebb50045b8977e2ab74826f30}{notify\-Sending\-Data} ()} +\label{classService_81ad4d6ebb50045b8977e2ab74826f30} + +\item +\hypertarget{classService_94e2012e76aaae3aa8199250f558d503}{ +virtual void \hyperlink{classService_94e2012e76aaae3aa8199250f558d503}{notify\-Sending\-Resource\-Request} ()} +\label{classService_94e2012e76aaae3aa8199250f558d503} + +\item +\hypertarget{classService_f94cc8a5c2665d4574041737e61e9ffc}{ +virtual void \hyperlink{classService_f94cc8a5c2665d4574041737e61e9ffc}{notify\-Sending\-All\-Resource\-Requests} ()} +\label{classService_f94cc8a5c2665d4574041737e61e9ffc} + +\end{CompactItemize} +\subsection*{Private Attributes} +\begin{CompactItemize} +\item +\hypertarget{classService_8b615c65c876f342fe8209eb7e36d7b2}{ +\hyperlink{classThread}{Thread} $\ast$ \hyperlink{classService_8b615c65c876f342fe8209eb7e36d7b2}{owner}} +\label{classService_8b615c65c876f342fe8209eb7e36d7b2} + +\item +\hypertarget{classService_a5b2ad9520bb3710b54348b99acebd58}{ +unsigned \hyperlink{classService_a5b2ad9520bb3710b54348b99acebd58}{num\_\-sent\_\-rr}} +\label{classService_a5b2ad9520bb3710b54348b99acebd58} + +\end{CompactItemize} + + +\subsection{Detailed Description} + + + + +Definition at line 45 of file service.h. + +The documentation for this class was generated from the following files:\begin{CompactItemize} +\item +service.h\item +core/service.cpp\item +rmc/mpi/service.cpp\end{CompactItemize} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classThread.eps b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classThread.eps new file mode 100644 index 000000000..b0fe5e8f1 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classThread.eps @@ -0,0 +1,227 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 80.6452 +%%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 6.2 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 3 def +/cols 4 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 +(Thread) cw +(ReactiveThread) cw +(Runner) cw +(Communicator) cw +(Worker) cw +(peoEA< EOT >) cw +(peoParallelAlgorithmWrapper) 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 ----- + + (Thread) 1.5 2 box + (ReactiveThread) 0.5 1 box + (Runner) 2.5 1 box + (Communicator) 0 0 box + (Worker) 1 0 box + (peoEA< EOT >) 2 0 box + (peoParallelAlgorithmWrapper) 3 0 box + +% ----- relations ----- + +solid +1 1.5 1.25 out +solid +0.5 2.5 2 conn +solid +0 0.5 1.75 in +solid +1 0.5 0.25 out +solid +0 1 1 conn +solid +0 2.5 1.75 in +solid +1 2.5 0.25 out +solid +2 3 1 conn +solid +0 0 0.75 in +solid +0 1 0.75 in +solid +0 2 0.75 in +solid +0 3 0.75 in diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classThread.pdf b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classThread.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2e71727a76f5952f3e327bbb4d3fd424f44e4ef8 GIT binary patch literal 1528 zcmZ`(dr%a094{@Zg+!SNhGNFwWYmFpyUTHR3uA|HaJ)LWxjQjl6UW^TSU7HNcW>s% zL5oW?CghP$Wf4wJKs+2V!Ayd{5qcbkfX#F~d`v;0Mwuw#*z{XCAi(yY-QVZ?`+UBS z-{-gfnkdyaQY^vzdvBJ1ib(+hn5;Z(`*!>lXvyJofeay9Tt%CC$O2qtHt;YC8W|H* zC@_v^p`ie?ecY^9mk$yfzrMfAv5E5d#CKnGWUPAw)h({P>vzO_rsDKy|NhSM>Y*|n z?U~ysiobokXS!_SyQE{4JL+!SNxwJsp!z@`^Vzk8cKKA?rPwzIjicx5!m8HkW5>uL z&%6fz%s=Z}*H84H@~Pi5Q@hvCIo>-wSC@KuD!GvFdHk);mfXhrf#QqyEs>1h#+~n8 zT$j=l@8Qur_s?q^0`1O~p%ml<1L~A94D^)yWy>^~cIO`uC3A za$ai+_{F!#8m(3h^w^_Ar)MXMu7ppw-5CF}=19z3{^hDYTiZ3~u6TBqZg?l7>3Dwq z>x8KN=B@tUcgZ(r&a{@4=cwDfDt>+TsFzmMkkH5U_466Sqx?q?PQI+Tdr!$xhwV>0 zd#m0LdeY7NJUL@-b$f10_n0!gC~-39x97ijWMnqHqxNsNNVc-;#kVQ@I+1(W%pc-I zJ3>k{^#^N8sw!VNoYLdw@l|OPtPXnBvC|>*X(GEVXOjWHlr5AgD zdnzx4+3It^65n+-=%{a8u}+!(!H==D!uVIJZ$KY@@>2WkF|s7HEpTiuWXLNexomv@ zz=zkd2xIN~6CpKej;AJl)OGI}M+SAnlE#sPj_*q)jdv2LlbR?WNaXfKw&9C0E!UHq!}0rv(Ul= ziQqU4*Fui5vPQ@uFKSrEsDpeOj@$}xJ+$#?d$f&@(ecQSAasGDVi21YRJ9m#C$2egZz04Z1nNkPp;C6}l!rqaM0%uLRr z#6t1Q`{gV5FBgsBNg6dE6$+QI(1YvdY2}ze(=MybH?TReB!WeeDOnVIjL z^UXQmckY;iUVo)nWksg3*{{Dxb}V46`5>yPA-kyB%G$645Q+GeIHNiy{~oMbSfuMs_)ddf!(7*LHC@e`}DQzrRP7|8YvyU)SwCzJ$0cSH`jF>?)$gxTtP*! z*mUyj+pDKfyt>{0bM(Mm?ew3;my6oxV*{UW`n&WReK{(&*z{OX&j zFZw=~S}JO%d!BW<3Lj4;(%ob0D!pZQX5LIbIw{ON8lJC?-8o}xE*cp!(!Jw;Q>gfp z3kw6Y>w8N!cl=ngF6u(Al~Mkh z4c5yBB4PQ$4!hlI$1OOA*_|L6zp%QDIo;saD$Fi| zTB|Ut0~TZzCWvb>s|}WXRi4ALHqZGU%;9)Xt@}T$ \hyperlink{classTopology_247a2faa8568b678f0b7b11e62c7812c}{mig}} +\label{classTopology_247a2faa8568b678f0b7b11e62c7812c} + +\end{CompactItemize} + + +\subsection{Detailed Description} + + + + +Definition at line 44 of file topology.h. + +The documentation for this class was generated from the following files:\begin{CompactItemize} +\item +topology.h\item +topology.cpp\end{CompactItemize} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classWorker.eps b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classWorker.eps new file mode 100644 index 000000000..5972d40a6 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classWorker.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 275.229 +%%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.81667 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 3 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 +(Worker) cw +(Communicable) cw +(ReactiveThread) cw +(Thread) 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 ----- + + (Worker) 0.5 0 box + (Communicable) 0 1 box + (ReactiveThread) 1 1 box + (Thread) 1 2 box + +% ----- relations ----- + +solid +0 0.5 0 out +solid +0 1 1 conn +solid +1 0 1 in +solid +1 1 1 in +solid +0 1 1 out +solid +1 1 2 in diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classWorker.pdf b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classWorker.pdf new file mode 100644 index 0000000000000000000000000000000000000000..e43d4655252f4b4fbf50c92febd7f50f8ca2960a GIT binary patch literal 1477 zcmZ`(ZA=qq9LH6dp7=7u=43D)6A+M>yKA|&AVFT*@;0EfI5357NBb0txV1UgYcL|vM0JwY&l0(@l+k(x@r1-UAz8YmHBAa!?+EXgogJ86>+WMd9_$|8ryMm;JsS-R_N?3<-|@5gYTm|?m9ZD!b(_R( zy2G&Vx;p0}ZF zXm-yV-+Xzp>wLN?AiRF}ugM2D>rPcBT>PQ1ZlJ`KVta7>I}KqpO97{EhxfJ1x-x%U-PxJx8MLixOZUh- zgW^JVp4<9&{9K^5UmqR0BB^}ag##^HvJT#@=zUfKK2Z{*1Zi|uN_Z5wYIL@*D!E?)wc6^mKp{qJ)PwA5UX(G!<7Wq?tlXNjRMkW-wRQ_fHd$tvLBu{Aagkz z5AdMS-N@AdQ_R&JWAwfC&%R$x(Q?oDn$pjZIO=n7f@;O A0RR91 literal 0 HcmV?d00001 diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classWorker.tex b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classWorker.tex new file mode 100644 index 000000000..4cd676866 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classWorker.tex @@ -0,0 +1,94 @@ +\hypertarget{classWorker}{ +\section{Worker Class Reference} +\label{classWorker}\index{Worker@{Worker}} +} +Inheritance diagram for Worker::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=3cm]{classWorker} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +\hypertarget{classWorker_3754817df06ffe220f7f0d903c78ccac}{ +\hyperlink{classWorker_3754817df06ffe220f7f0d903c78ccac}{Worker} ()} +\label{classWorker_3754817df06ffe220f7f0d903c78ccac} + +\item +\hypertarget{classWorker_abcbbace05c6113f1959c494b3577291}{ +void \hyperlink{classWorker_abcbbace05c6113f1959c494b3577291}{start} ()} +\label{classWorker_abcbbace05c6113f1959c494b3577291} + +\item +\hypertarget{classWorker_83780920118e6c2b67d9477bdf8be248}{ +void \hyperlink{classWorker_83780920118e6c2b67d9477bdf8be248}{pack\-Result} ()} +\label{classWorker_83780920118e6c2b67d9477bdf8be248} + +\item +\hypertarget{classWorker_bff2bdcd64fe5400156cc78704c64953}{ +void \hyperlink{classWorker_bff2bdcd64fe5400156cc78704c64953}{unpack\-Data} ()} +\label{classWorker_bff2bdcd64fe5400156cc78704c64953} + +\item +\hypertarget{classWorker_60d2e8eba85b9ef403d94be54c391640}{ +void \hyperlink{classWorker_60d2e8eba85b9ef403d94be54c391640}{pack\-Task\-Done} ()} +\label{classWorker_60d2e8eba85b9ef403d94be54c391640} + +\item +\hypertarget{classWorker_e2f487014766a73c5788bdcfd58ad863}{ +void \hyperlink{classWorker_e2f487014766a73c5788bdcfd58ad863}{notify\-Sending\-Result} ()} +\label{classWorker_e2f487014766a73c5788bdcfd58ad863} + +\item +\hypertarget{classWorker_13efd6a8e275745329a4a8e23a0eb0bb}{ +void \hyperlink{classWorker_13efd6a8e275745329a4a8e23a0eb0bb}{notify\-Sending\-Task\-Done} ()} +\label{classWorker_13efd6a8e275745329a4a8e23a0eb0bb} + +\item +\hypertarget{classWorker_5dab4ea663546b5a49d9398d7a624d27}{ +void \hyperlink{classWorker_5dab4ea663546b5a49d9398d7a624d27}{set\-Source} (int \_\-\_\-rank)} +\label{classWorker_5dab4ea663546b5a49d9398d7a624d27} + +\end{CompactItemize} +\subsection*{Private Attributes} +\begin{CompactItemize} +\item +\hypertarget{classWorker_b5ffcb995e12fa71b9551e91729d6972}{ +WORKER\_\-ID \hyperlink{classWorker_b5ffcb995e12fa71b9551e91729d6972}{id}} +\label{classWorker_b5ffcb995e12fa71b9551e91729d6972} + +\item +\hypertarget{classWorker_d7dc76e301fd2bcf5d3a2088a59f1378}{ +SERVICE\_\-ID \hyperlink{classWorker_d7dc76e301fd2bcf5d3a2088a59f1378}{serv\_\-id}} +\label{classWorker_d7dc76e301fd2bcf5d3a2088a59f1378} + +\item +\hypertarget{classWorker_454e1764ed165af733cc44a73e395692}{ +\hyperlink{classService}{Service} $\ast$ \hyperlink{classWorker_454e1764ed165af733cc44a73e395692}{serv}} +\label{classWorker_454e1764ed165af733cc44a73e395692} + +\item +\hypertarget{classWorker_895c3ebc198018ea3391c09bc802d2f6}{ +int \hyperlink{classWorker_895c3ebc198018ea3391c09bc802d2f6}{src}} +\label{classWorker_895c3ebc198018ea3391c09bc802d2f6} + +\item +\hypertarget{classWorker_7ba5a18b2918cf9e704536b763be37f7}{ +bool \hyperlink{classWorker_7ba5a18b2918cf9e704536b763be37f7}{toto}} +\label{classWorker_7ba5a18b2918cf9e704536b763be37f7} + +\end{CompactItemize} + + +\subsection{Detailed Description} + + + + +Definition at line 46 of file worker.h. + +The documentation for this class was generated from the following files:\begin{CompactItemize} +\item +worker.h\item +worker.cpp\end{CompactItemize} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoAggEvalFunc.eps b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoAggEvalFunc.eps new file mode 100644 index 000000000..de2aa80a5 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoAggEvalFunc.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 218.579 +%%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.2875 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 +(peoAggEvalFunc< EOT >) cw +(eoBF< A1, A2, R >) cw +(eoFunctorBase) cw +(MergeRouteEval) cw +(peoNoAggEvalFunc< 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 ----- + + (peoAggEvalFunc< EOT >) 0.5 1 box + (eoBF< A1, A2, R >) 0.5 2 box + (eoFunctorBase) 0.5 3 box + (MergeRouteEval) 0 0 box + (peoNoAggEvalFunc< EOT >) 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-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoAggEvalFunc.pdf b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoAggEvalFunc.pdf new file mode 100644 index 000000000..474c0d8dd --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoAggEvalFunc.pdf @@ -0,0 +1,72 @@ +%PDF-1.3 +%Çì¢ +5 0 obj +<> +stream +xœ­“Ûj1 †ïýºLCP,Ù–m…]Øäª-ÙÌ „e2´ìd“Í¡¯ÍiÇKi $ ƒg~Iþ„~û,Øî×MkÎך'cáJ߯<ê`\6-,+MJ@ £ ª;3P°˜£@tè’%¨ZsòPïM³z½Ý^¾Üo.`õ«‚ïߪ?fU™kC…8Á_Ýã·!G™@Øc v0DpÄÈŠÚ׿æƒÅ€Ùëê&7tTï–—° 3Xð¬ËnF>±Ïh¿„Ÿ&ëuMȉG~7‰çÝ~yûTÿËN:=Ýäóì1“h*fN¹Gÿ¨÷M½Þ½<×!vtY«>Oeé,uGX=?ß;bB+ÿãG¡x=#¬…죴Ã/Ų̀œ­& S|ôrŽBg‡ž(IÝöQ¿R©ïqw:*AH =@¢šç FÿO‡pï©+â£ÉE‰m.{˜•²dîÁKÒkæ&Hilš!Ó-š!AXÇ̤PÊ’Bì2R(8.ŠÅäJ‡š²&ÇÚãº883T–Y“Rf]›7gwñÊendstream +endobj +6 0 obj +419 +endobj +4 0 obj +<> +/Contents 5 0 R +>> +endobj +3 0 obj +<< /Type /Pages /Kids [ +4 0 R +] /Count 1 +>> +endobj +1 0 obj +<> +endobj +7 0 obj +<>endobj +9 0 obj +<> +endobj +10 0 obj +<> +endobj +8 0 obj +<> +endobj +2 0 obj +<>endobj +xref +0 11 +0000000000 65535 f +0000000735 00000 n +0000000949 00000 n +0000000676 00000 n +0000000523 00000 n +0000000015 00000 n +0000000504 00000 n +0000000783 00000 n +0000000883 00000 n +0000000824 00000 n +0000000853 00000 n +trailer +<< /Size 11 /Root 1 0 R /Info 2 0 R +/ID [(XÄ›}yõ¾^}årðz'š)(XÄ›}yõ¾^}årðz'š)] +>> +startxref +1106 +%%EOF diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoAggEvalFunc.tex b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoAggEvalFunc.tex new file mode 100644 index 000000000..378801387 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoAggEvalFunc.tex @@ -0,0 +1,39 @@ +\hypertarget{classpeoAggEvalFunc}{ +\section{peo\-Agg\-Eval\-Func$<$ EOT $>$ Class Template Reference} +\label{classpeoAggEvalFunc}\index{peoAggEvalFunc@{peoAggEvalFunc}} +} +The \hyperlink{classpeoAggEvalFunc}{peo\-Agg\-Eval\-Func} class offers only the interface for creating aggregate evaluation functions - there are no direct internal functions provided. + + +{\tt \#include $<$peo\-Agg\-Eval\-Func.h$>$} + +Inheritance diagram for peo\-Agg\-Eval\-Func$<$ EOT $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=4cm]{classpeoAggEvalFunc} +\end{center} +\end{figure} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class EOT$>$ class peo\-Agg\-Eval\-Func$<$ EOT $>$} + +The \hyperlink{classpeoAggEvalFunc}{peo\-Agg\-Eval\-Func} class offers only the interface for creating aggregate evaluation functions - there are no direct internal functions provided. + +The class inherits {\bf public eo\-BF$<$ EOT\&, const typename EOT :: Fitness\&, void $>$} thus requiring, for the derived classes, the creation of a function having the following signature: + +\begin{TabularC}{2} +\hline +void operator()( EOT\& \_\-\_\-eot, const typename EOT :: Fitness\& \_\-\_\-partial\_\-fittness ); ~ &~ \\\hline +\end{TabularC} + + +The aggregation object is called in an iterative manner for each of the results obtained by applying partial evaluation functions. + + + +Definition at line 53 of file peo\-Agg\-Eval\-Func.h. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +peo\-Agg\-Eval\-Func.h\end{CompactItemize} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoAsyncIslandMig.eps b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoAsyncIslandMig.eps new file mode 100644 index 000000000..292b6cce7 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoAsyncIslandMig.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 222.222 +%%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.25 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 +(peoAsyncIslandMig< EOT >) cw +(Cooperative) cw +(eoUpdater) cw +(Communicable) cw +(eoF< 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 ----- + + (peoAsyncIslandMig< EOT >) 0.5 0 box + (Cooperative) 0 1 box + (eoUpdater) 1 1 box + (Communicable) 0 2 box + (eoF< void >) 1 2 box + (eoFunctorBase) 1 3 box + +% ----- relations ----- + +solid +0 0.5 0 out +solid +0 1 1 conn +solid +1 0 1 in +solid +0 0 1 out +solid +1 1 1 in +solid +0 1 1 out +solid +1 0 2 in +solid +1 1 2 in +solid +0 1 2 out +solid +1 1 3 in diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoAsyncIslandMig.pdf b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoAsyncIslandMig.pdf new file mode 100644 index 0000000000000000000000000000000000000000..45d2aac495caaf14088f28cbd07432ec58ee6708 GIT binary patch literal 1513 zcmZ`(e@qis9ESmBo<@mb%Z33S2(iticUM|^MeRmu%aC7PX~5ADINH~8uI;hAD=XkY zS;#QcG{XQxWXLcf4A5i=b7WTMGNV%@%i@H%vAKYwH~9YMjv`qtW>*r=-T2^{vE-4w4sw(;oX zsdsBVGQ+W`!<}PIhbo$7(ew7wp*Uatn|IqLtA;G~gQ}v1dzS7O&nMUQcW5W1bCKUO z>0fw59SMD#75tgoU61E~HOClA@2f)_H!W;YJaX&Wr&gc7J2IsqcgJkn>o1K?YsRAOKegXY_V)W*D|a_ju~&7F+z;O}(@%v*Lfer!JeW0S2e+c|UTv_=u1*{U7x8j%>?S7e8} zhf92Lpw8|Xi0#nocjDC6miX-Wjh^1WL(87sdkVU3fpMcR(ITQT#J7S{VgX38;vRE# zCB%)i1LC>R#?V^U3oHZ*D+vO~<#L%^UV@=G2i*cl5iN${CdjiM&I);CJ|o9k3!q@Z zkv#!!hF$?}*L#J`0s$EisFxT97O_cD)`THD;u&a-1bHCZco7ODCZ4clYb1s;1B4v(FBCW z8Uk0%q{2j+X+>qRs9==BsMS$%83<}=9*S+i&5R53$tKoCyB8D1MHIseJmrEo3bAT* zcCae>iUMl2&0~d}L|-+|2EQ63R0>q<8ca!{=C8q?#8s-0x7O^V6zjR_Ct#F% zJy%WshbwS2yZ-Cxx7Gg!eSFiQYFWdlJxlo>|d3n{=@(P literal 0 HcmV?d00001 diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoAsyncIslandMig.tex b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoAsyncIslandMig.tex new file mode 100644 index 000000000..bb0bcc2cf --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoAsyncIslandMig.tex @@ -0,0 +1,218 @@ +\hypertarget{classpeoAsyncIslandMig}{ +\section{peo\-Async\-Island\-Mig$<$ EOT $>$ Class Template Reference} +\label{classpeoAsyncIslandMig}\index{peoAsyncIslandMig@{peoAsyncIslandMig}} +} +The \hyperlink{classpeoAsyncIslandMig}{peo\-Async\-Island\-Mig} class offers the elementary basis for implementating an asynchronous island migration model - requires the specification of several basic parameters, i.e. + + +{\tt \#include $<$peo\-Async\-Island\-Mig.h$>$} + +Inheritance diagram for peo\-Async\-Island\-Mig$<$ EOT $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=4cm]{classpeoAsyncIslandMig} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +\hyperlink{classpeoAsyncIslandMig_e0f706cbf4148d3ca327227a5c7a9fdf}{peo\-Async\-Island\-Mig} (\bf{eo\-Continue}$<$ EOT $>$ \&\_\-\_\-cont, \bf{eo\-Select}$<$ EOT $>$ \&\_\-\_\-select, \bf{eo\-Replacement}$<$ EOT $>$ \&\_\-\_\-replace, \hyperlink{classTopology}{Topology} \&\_\-\_\-topology, \bf{eo\-Pop}$<$ EOT $>$ \&\_\-\_\-source, \bf{eo\-Pop}$<$ EOT $>$ \&\_\-\_\-destination) +\begin{CompactList}\small\item\em Constructor for the \hyperlink{classpeoAsyncIslandMig}{peo\-Async\-Island\-Mig} class; the characteristics of the migration model are defined through the specified parameters - out of the box objects provided in \doxyref{EO}, etc., or custom, derived objects may be passed as parameters. \item\end{CompactList}\item +void \hyperlink{classpeoAsyncIslandMig_13581e54425727a7f785ca8a6df527b5}{operator()} () +\begin{CompactList}\small\item\em \doxyref{Function} operator to be called as checkpoint for performing the migration step. \item\end{CompactList}\item +\hypertarget{classpeoAsyncIslandMig_6d790a5d0b6ac510cac4f61a1c0d8f16}{ +void \hyperlink{classpeoAsyncIslandMig_6d790a5d0b6ac510cac4f61a1c0d8f16}{pack} ()} +\label{classpeoAsyncIslandMig_6d790a5d0b6ac510cac4f61a1c0d8f16} + +\begin{CompactList}\small\item\em Auxiliary function dealing with sending the emigrant individuals. There is no need to explicitly call the function. \item\end{CompactList}\item +\hypertarget{classpeoAsyncIslandMig_455501aee5db2bbfbae15779c8429369}{ +void \hyperlink{classpeoAsyncIslandMig_455501aee5db2bbfbae15779c8429369}{unpack} ()} +\label{classpeoAsyncIslandMig_455501aee5db2bbfbae15779c8429369} + +\begin{CompactList}\small\item\em Auxiliary function dealing with receiving immigrant individuals. There is no need to explicitly call the function. \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Member Functions} +\begin{CompactItemize} +\item +\hypertarget{classpeoAsyncIslandMig_87a4ef7d4bd30d349a801bf0f9e87c82}{ +void \hyperlink{classpeoAsyncIslandMig_87a4ef7d4bd30d349a801bf0f9e87c82}{emigrate} ()} +\label{classpeoAsyncIslandMig_87a4ef7d4bd30d349a801bf0f9e87c82} + +\item +\hypertarget{classpeoAsyncIslandMig_5a9a64ba51a696e45f91b362c39c9a64}{ +void \hyperlink{classpeoAsyncIslandMig_5a9a64ba51a696e45f91b362c39c9a64}{immigrate} ()} +\label{classpeoAsyncIslandMig_5a9a64ba51a696e45f91b362c39c9a64} + +\end{CompactItemize} +\subsection*{Private Attributes} +\begin{CompactItemize} +\item +\hypertarget{classpeoAsyncIslandMig_2fc077d02ef9ea4595cfe883af0d4f83}{ +\bf{eo\-Continue}$<$ EOT $>$ \& \hyperlink{classpeoAsyncIslandMig_2fc077d02ef9ea4595cfe883af0d4f83}{cont}} +\label{classpeoAsyncIslandMig_2fc077d02ef9ea4595cfe883af0d4f83} + +\item +\hypertarget{classpeoAsyncIslandMig_b1fa045094c8a411323e75b5820c80c2}{ +\bf{eo\-Select}$<$ EOT $>$ \& \hyperlink{classpeoAsyncIslandMig_b1fa045094c8a411323e75b5820c80c2}{select}} +\label{classpeoAsyncIslandMig_b1fa045094c8a411323e75b5820c80c2} + +\item +\hypertarget{classpeoAsyncIslandMig_b761dbd880ee32e170741ecd78da6f48}{ +\bf{eo\-Replacement}$<$ EOT $>$ \& \hyperlink{classpeoAsyncIslandMig_b761dbd880ee32e170741ecd78da6f48}{replace}} +\label{classpeoAsyncIslandMig_b761dbd880ee32e170741ecd78da6f48} + +\item +\hypertarget{classpeoAsyncIslandMig_e45e5a808a96f0853ab6ba42339fe679}{ +\hyperlink{classTopology}{Topology} \& \hyperlink{classpeoAsyncIslandMig_e45e5a808a96f0853ab6ba42339fe679}{topology}} +\label{classpeoAsyncIslandMig_e45e5a808a96f0853ab6ba42339fe679} + +\item +\hypertarget{classpeoAsyncIslandMig_8a502d82c773033e274dca932fc2d4ee}{ +\bf{eo\-Pop}$<$ EOT $>$ \& \hyperlink{classpeoAsyncIslandMig_8a502d82c773033e274dca932fc2d4ee}{source}} +\label{classpeoAsyncIslandMig_8a502d82c773033e274dca932fc2d4ee} + +\item +\hypertarget{classpeoAsyncIslandMig_e407f411d08ae7d96992603c145a7e43}{ +\bf{eo\-Pop}$<$ EOT $>$ \& \hyperlink{classpeoAsyncIslandMig_e407f411d08ae7d96992603c145a7e43}{destination}} +\label{classpeoAsyncIslandMig_e407f411d08ae7d96992603c145a7e43} + +\item +\hypertarget{classpeoAsyncIslandMig_b8c76d98d9ae99dd930a77c12860519a}{ +std::queue$<$ \bf{eo\-Pop}$<$ EOT $>$ $>$ \hyperlink{classpeoAsyncIslandMig_b8c76d98d9ae99dd930a77c12860519a}{imm}} +\label{classpeoAsyncIslandMig_b8c76d98d9ae99dd930a77c12860519a} + +\item +\hypertarget{classpeoAsyncIslandMig_a9cc0e2d61cac6e11647b141962adc89}{ +std::queue$<$ \bf{eo\-Pop}$<$ EOT $>$ $>$ \hyperlink{classpeoAsyncIslandMig_a9cc0e2d61cac6e11647b141962adc89}{em}} +\label{classpeoAsyncIslandMig_a9cc0e2d61cac6e11647b141962adc89} + +\item +\hypertarget{classpeoAsyncIslandMig_1a2c0004d23bc303420af137a8c8bd27}{ +std::queue$<$ \hyperlink{classCooperative}{Cooperative} $\ast$ $>$ \hyperlink{classpeoAsyncIslandMig_1a2c0004d23bc303420af137a8c8bd27}{coop\_\-em}} +\label{classpeoAsyncIslandMig_1a2c0004d23bc303420af137a8c8bd27} + +\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class EOT$>$ class peo\-Async\-Island\-Mig$<$ EOT $>$} + +The \hyperlink{classpeoAsyncIslandMig}{peo\-Async\-Island\-Mig} class offers the elementary basis for implementating an asynchronous island migration model - requires the specification of several basic parameters, i.e. + +continuation criterion, selection and replacement strategies, a topological model and the source and destination population for the migrating individuals. As opposed to the synchronous migration model, in the asynchronous migration approach, there is no synchronization step between islands after performing the emigration phase. + +The migration operator is called at the end of each generation of an evolutionary algorithms as a checkpoint object - the following code exposes the structure of a classic evolutionary algorithm: + +\begin{TabularC}{2} +\hline +{\bf do} \{ ~ &~ \\\hline +~~~~~~~~ select( population, offsprings ); ~ &// select the offsprings from the current population \\\hline +~~~~~~~~ transform( offsprings ); ~ &// crossover and mutation operators are applied on the selected offsprings \\\hline +~~~~~~~~ evaluate( offsprings ); ~ &// evaluation step of the resulting offsprings \\\hline +~~~~~~~~ replace( population, offsprings ); ~ &// replace the individuals in the current population whith individuals from the offspring population, according to a specified replacement strategy \\\hline +\} {\bf while} ( ea\-Checkpoint\-Continue( population ) ); ~ &// checkpoint operators are applied on the current population, including the migration operator, if any specified \\\hline +\end{TabularC} + + +Constructing an asynchronous island migration model requires having defined (1) a topological migration model, (2) the control parameters of the migration process, (3) a checkpoint object associated with an evolutionary algorithm, and (4) an owner object must be set. The owner object must be derived from the {\bf \hyperlink{classRunner}{Runner}} class (for example a \hyperlink{classpeoEA}{peo\-EA} object represents a possible owner). A simple example is offered bellow: + +\begin{enumerate} +\item topological model to be followed when performing migrations: \par + \par + \begin{TabularC}{2} +\hline +\hyperlink{classRingTopology}{Ring\-Topology} mig\-Topology; ~ &// a simple ring topological model - each island communicates with two other islands \\\hline +\end{TabularC} + + +\item the continuation criterion, selection and replacement strategy etc. are defined: \par + \par + \begin{TabularC}{2} +\hline +eo\-Pop$<$ EOT $>$ population( POP\_\-SIZE, pop\-Initializer ); ~ &// population of individuals to be used for the evolutionary algorithm \\\hline +~ &~ \\\hline +eo\-Periodic\-Continue$<$ EOT $>$ mig\-Cont( MIG\_\-FREQ ); ~ &// migrations occur periodically at MIG\_\-FREQ iterations \\\hline +eo\-Random\-Select$<$ EOT $>$ mig\-Select\-Strategy; ~ &// selection strategy - in this case a random selection is applied \\\hline +eo\-Select\-Number$<$ EOT $>$ mig\-Select( mig\-Select\-Strategy, MIG\_\-SIZE ); ~ &// number of individuals to be selected using the specified strategy \\\hline +eo\-Plus\-Replacement$<$ EOT $>$ mig\-Replace; ~ &// immigration strategy - the worse individuals in the destination population are replaced by the immigrant individuals \\\hline +~ &~ \\\hline +peo\-Async\-Island\-Mig$<$ EOT $>$ async\-Migration( \par + ~~~~~~~~ mig\-Cont, mig\-Select, mig\-Replace, mig\-Topology, \par + ~~~~~~~~ population, population \par + ); ~ &// asynchronous migration object - the emigrant individuals are selected from the same from population in which the immigrant individuals are being integrated \\\hline +\end{TabularC} + + +\item creation of a checkpoint object as part of the definition of an evolutionary algoritm (details of th EA not given as being out of scope): \par + \par + \begin{TabularC}{2} +\hline +... ~ &~ \\\hline +eo\-Gen\-Continue$<$ EOT $>$ ea\-Cont( NUM\_\-GEN ); ~ &// the evolutionary algorithm will stop after NUM\_\-GEN generations \\\hline +eo\-Check\-Point$<$ EOT $>$ ea\-Checkpoint\-Continue( ea\-Cont ); ~ &// number of individuals to be selected using the specified strategy \\\hline +... ~ &~ \\\hline +ea\-Checkpoint\-Continue.add( async\-Migration ); ~ &// adding the migration operator as checkpoint element \\\hline +... ~ &~ \\\hline +\end{TabularC} + + +\item definition of an owner evolutionary algorithm (an object inheriting the {\bf \hyperlink{classRunner}{Runner}} class): \par + \par + \begin{TabularC}{2} +\hline +peo\-EA$<$ EOT $>$ ea\-Alg( ea\-Checkpoint\-Continue, ea\-Pop\-Eval, ea\-Select, ea\-Transform, ea\-Replace); ~ &// evolutionary algorithm having as checkpoint the ea\-Checkpoint\-Continue object defined above \\\hline +async\-Migration.set\-Owner( ea\-Alg ); ~ &// setting the evolutionary algorithm as owner of the migration object \\\hline +ea\-Alg( population ); ~ &// applying the evolutionary algorithm on a given population \\\hline +\end{TabularC} +\end{enumerate} + + +The source and the destination population for the migration object were specified as being the same, in step no. 2, as we are usually interested in selecting the emigrants and integrating the immigrant individuals from and in, respectively, one unique population, iteratively evolved by an evolutionary algorithm. There is no restriction in having two distinct populations as source and destination for the emigrant and immigrant individuals respectively. + +The above steps only create an asynchronous migration object associated to an evolutionary algorithm. The creation of several islands requires the reiteration of the steps 2 through 4 for creating distinct algorithms, with distinct populations and the associated distinctly parametrized migration objects. The interconnecting element is the underlying topology, defined at step 1 (the same C++ mig\-Topology object has to be passed as parameter for all the migration objects, in order to interconnect them). + + + +Definition at line 140 of file peo\-Async\-Island\-Mig.h. + +\subsection{Constructor \& Destructor Documentation} +\hypertarget{classpeoAsyncIslandMig_e0f706cbf4148d3ca327227a5c7a9fdf}{ +\index{peoAsyncIslandMig@{peo\-Async\-Island\-Mig}!peoAsyncIslandMig@{peoAsyncIslandMig}} +\index{peoAsyncIslandMig@{peoAsyncIslandMig}!peoAsyncIslandMig@{peo\-Async\-Island\-Mig}} +\subsubsection[peoAsyncIslandMig]{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT$>$ \hyperlink{classpeoAsyncIslandMig}{peo\-Async\-Island\-Mig}$<$ EOT $>$::\hyperlink{classpeoAsyncIslandMig}{peo\-Async\-Island\-Mig} (\bf{eo\-Continue}$<$ EOT $>$ \& {\em \_\-\_\-cont}, \bf{eo\-Select}$<$ EOT $>$ \& {\em \_\-\_\-select}, \bf{eo\-Replacement}$<$ EOT $>$ \& {\em \_\-\_\-replace}, \hyperlink{classTopology}{Topology} \& {\em \_\-\_\-topology}, \bf{eo\-Pop}$<$ EOT $>$ \& {\em \_\-\_\-source}, \bf{eo\-Pop}$<$ EOT $>$ \& {\em \_\-\_\-destination})}} +\label{classpeoAsyncIslandMig_e0f706cbf4148d3ca327227a5c7a9fdf} + + +Constructor for the \hyperlink{classpeoAsyncIslandMig}{peo\-Async\-Island\-Mig} class; the characteristics of the migration model are defined through the specified parameters - out of the box objects provided in \doxyref{EO}, etc., or custom, derived objects may be passed as parameters. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em eo\-Continue$<$}]EOT $>$\& \_\-\_\-cont - continuation criterion specifying whether the migration is performed or not; \item[{\em eo\-Select$<$}]EOT $>$\& \_\-\_\-select - selection strategy to be applied for constructing a list of emigrant individuals out of the source population; \item[{\em eo\-Replacement$<$}]EOT $>$\& \_\-\_\-replace - replacement strategy used for integrating the immigrant individuals in the destination population; \item[{\em Topology\&}]\_\-\_\-topology - topological model to be followed when performing migrations; \item[{\em eo\-Pop$<$}]EOT $>$\& \_\-\_\-source - source population from which the emigrant individuals are selected; \item[{\em eo\-Pop$<$}]EOT $>$\& \_\-\_\-destination - destination population in which the immigrant population are integrated. \end{description} +\end{Desc} + + +Definition at line 199 of file peo\-Async\-Island\-Mig.h. + +References Topology::add(). + +\subsection{Member Function Documentation} +\hypertarget{classpeoAsyncIslandMig_13581e54425727a7f785ca8a6df527b5}{ +\index{peoAsyncIslandMig@{peo\-Async\-Island\-Mig}!operator()@{operator()}} +\index{operator()@{operator()}!peoAsyncIslandMig@{peo\-Async\-Island\-Mig}} +\subsubsection[operator()]{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT$>$ void \hyperlink{classpeoAsyncIslandMig}{peo\-Async\-Island\-Mig}$<$ EOT $>$::operator() ()\hspace{0.3cm}{\tt \mbox{[}virtual\mbox{]}}}} +\label{classpeoAsyncIslandMig_13581e54425727a7f785ca8a6df527b5} + + +\doxyref{Function} operator to be called as checkpoint for performing the migration step. + +The emigrant individuals are selected from the source population and sent to the next island (defined by the topology object) while the immigrant individuals are integrated in the destination population. There is no need to explicitly call the function - the wrapper checkpoint object (please refer to the above example) will perform the call when required. + +Implements \bf{eo\-F$<$ void $>$}. + +Definition at line 276 of file peo\-Async\-Island\-Mig.h. + +References peo\-Async\-Island\-Mig$<$ EOT $>$::cont, peo\-Async\-Island\-Mig$<$ EOT $>$::emigrate(), peo\-Async\-Island\-Mig$<$ EOT $>$::immigrate(), and peo\-Async\-Island\-Mig$<$ EOT $>$::source. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +peo\-Async\-Island\-Mig.h\end{CompactItemize} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoEA.eps b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoEA.eps new file mode 100644 index 000000000..e4aabc826 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoEA.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 280.374 +%%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.78333 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 3 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 +(peoEA< EOT >) cw +(Runner) cw +(Communicable) cw +(Thread) 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 ----- + + (peoEA< EOT >) 0.5 0 box + (Runner) 0.5 1 box + (Communicable) 0 2 box + (Thread) 1 2 box + +% ----- relations ----- + +solid +0 0.5 0 out +solid +1 0.5 1 in +solid +0 0.5 1 out +solid +0 1 2 conn +solid +1 0 2 in +solid +1 1 2 in diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoEA.pdf b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoEA.pdf new file mode 100644 index 0000000000000000000000000000000000000000..10660f801319c5a40ee90ce77b3885e4c1044aa3 GIT binary patch literal 1495 zcmZ`(e^3-<7}gmaaR=o>vVlqZBu|c#+ub{s+jD?}<2XPgt~+Q1!e-?@xWnW2+TF7g zqOpvDjEQhSN;LVUQp`vcjycev;S_o}NKB{BMOKdY2jo!cK%q2!3kM|B{Uz zn3#z10tcB=%ys-kw%hI{Bz^avciGBsaJp`@H)6 zwXf9gj8yrYpJiwmlE(-T{+M97}f%xv$IhHR_WT?yH@W;~>#yu{l$ zaK|@wQaArBSAr}@dd7XuX5FcqmrTLYK&Eu{li{w zFMJrPe#@Ox{nIP=CVDo<)IQqPe)yM+R|DPgm||<=OJ^Q_SGhmz^tszG^0(Yh=NU(i zqxH{ZGE-MK)cm!fKmFwgHK*#O&j>El`s#z}IljLKw0A~hPj`3M2RAkLMNXN*rktKu0ES^ta^jwgiTwk_!NZH<@&6&vik?-87n0CCsX^*73dweju zLGxw!g^p7Z9-romwr~x!oBhK@U!oyI8;I}NI2GoHVwb#615*s~OlY<;TGj>f z2^6LX0w`!gu2dCZD9%B<0F=Y~rh+b62#la$s03?YKiw}sSC?y4ozyhYC zk@DgL?2DLMjbvPgsT63q%P>lXrn(FxNMxF27)2qSmSMDVWv==^Fj}=TS55pYSKt_{ z4RYwm3UHIP45EGkZe&?xKXKXs&#)J$ Class Template Reference} +\label{classpeoEA}\index{peoEA@{peoEA}} +} +The \hyperlink{classpeoEA}{peo\-EA} class offers an elementary evolutionary algorithm implementation. + + +{\tt \#include $<$peo\-EA.h$>$} + +Inheritance diagram for peo\-EA$<$ EOT $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=3cm]{classpeoEA} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +\hyperlink{classpeoEA_dbfc4f8907bef234602149229f132371}{peo\-EA} (\bf{eo\-Continue}$<$ EOT $>$ \&\_\-\_\-cont, \hyperlink{classpeoPopEval}{peo\-Pop\-Eval}$<$ EOT $>$ \&\_\-\_\-pop\_\-eval, \bf{eo\-Select}$<$ EOT $>$ \&\_\-\_\-select, \hyperlink{classpeoTransform}{peo\-Transform}$<$ EOT $>$ \&\_\-\_\-trans, \bf{eo\-Replacement}$<$ EOT $>$ \&\_\-\_\-replace) +\begin{CompactList}\small\item\em Constructor for the evolutionary algorithm object - several basic parameters have to be specified, allowing for different levels of parallelism. \item\end{CompactList}\item +\hypertarget{classpeoEA_6ab8c321d29350634143a2a01cf2ad24}{ +void \hyperlink{classpeoEA_6ab8c321d29350634143a2a01cf2ad24}{run} ()} +\label{classpeoEA_6ab8c321d29350634143a2a01cf2ad24} + +\begin{CompactList}\small\item\em Evolutionary algorithm function - a side effect of the fact that the class is derived from the {\bf \hyperlink{classRunner}{Runner}} class, thus requiring the existence of a {\em run\/} function, the algorithm being executed on a distinct thread. \item\end{CompactList}\item +void \hyperlink{classpeoEA_3c709e3b2491147d26fee36138644613}{operator()} (\bf{eo\-Pop}$<$ EOT $>$ \&\_\-\_\-pop) +\begin{CompactList}\small\item\em \doxyref{Function} operator for specifying the population to be associated with the algorithm. \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Attributes} +\begin{CompactItemize} +\item +\hypertarget{classpeoEA_5f015eebf42f176b9fe322488c446c2a}{ +\bf{eo\-Continue}$<$ EOT $>$ \& \hyperlink{classpeoEA_5f015eebf42f176b9fe322488c446c2a}{cont}} +\label{classpeoEA_5f015eebf42f176b9fe322488c446c2a} + +\item +\hypertarget{classpeoEA_9140259f50c9186edcb062b023624c96}{ +\hyperlink{classpeoPopEval}{peo\-Pop\-Eval}$<$ EOT $>$ \& \hyperlink{classpeoEA_9140259f50c9186edcb062b023624c96}{pop\_\-eval}} +\label{classpeoEA_9140259f50c9186edcb062b023624c96} + +\item +\hypertarget{classpeoEA_2d8428d69fdd6aefefbaf543fdd46d19}{ +\bf{eo\-Select}$<$ EOT $>$ \& \hyperlink{classpeoEA_2d8428d69fdd6aefefbaf543fdd46d19}{select}} +\label{classpeoEA_2d8428d69fdd6aefefbaf543fdd46d19} + +\item +\hypertarget{classpeoEA_713c77935eb8aafebfb9488cfaa4a363}{ +\hyperlink{classpeoTransform}{peo\-Transform}$<$ EOT $>$ \& \hyperlink{classpeoEA_713c77935eb8aafebfb9488cfaa4a363}{trans}} +\label{classpeoEA_713c77935eb8aafebfb9488cfaa4a363} + +\item +\hypertarget{classpeoEA_9bd2d4356cf7e69e3141dc269213aa8a}{ +\bf{eo\-Replacement}$<$ EOT $>$ \& \hyperlink{classpeoEA_9bd2d4356cf7e69e3141dc269213aa8a}{replace}} +\label{classpeoEA_9bd2d4356cf7e69e3141dc269213aa8a} + +\item +\hypertarget{classpeoEA_c0b110e410bc16283e8339f24b733772}{ +\bf{eo\-Pop}$<$ EOT $>$ $\ast$ \hyperlink{classpeoEA_c0b110e410bc16283e8339f24b733772}{pop}} +\label{classpeoEA_c0b110e410bc16283e8339f24b733772} + +\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class EOT$>$ class peo\-EA$<$ EOT $>$} + +The \hyperlink{classpeoEA}{peo\-EA} class offers an elementary evolutionary algorithm implementation. + +In addition, as compared with the algorithms provided by the \doxyref{EO} framework, the \hyperlink{classpeoEA}{peo\-EA} class has the underlying necessary structure for including, for example, parallel evaluation and parallel transformation operators, migration operators etc. Although there is no restriction on using the algorithms provided by the \doxyref{EO} framework, the drawback resides in the fact that the \doxyref{EO} implementation is exclusively sequential and, in consequence, no parallelism is provided. A simple example for constructing a \hyperlink{classpeoEA}{peo\-EA} object: + +\begin{TabularC}{2} +\hline +... ~ &~ \\\hline +eo\-Pop$<$ EOT $>$ population( POP\_\-SIZE, pop\-Initializer ); ~ &// creation of a population with POP\_\-SIZE individuals - the pop\-Initializer is a functor to be called for each individual \\\hline +~ &~ \\\hline +eo\-Gen\-Continue$<$ EOT $>$ ea\-Cont( NUM\_\-GEN ); ~ &// number of generations for the evolutionary algorithm \\\hline +eo\-Check\-Point$<$ EOT $>$ ea\-Checkpoint\-Continue( ea\-Cont ); ~ &// checkpoint incorporating the continuation criterion - startpoint for adding other checkpoint objects \\\hline +~ &~ \\\hline +peo\-Seq\-Pop\-Eval$<$ EOT $>$ ea\-Pop\-Eval( eval\-Function ); ~ &// sequential evaluation functor wrapper - eval\-Function represents the actual evaluation functor \\\hline +~ &~ \\\hline +eo\-Ranking\-Select$<$ EOT $>$ selection\-Strategy; ~ &// selection strategy for creating the offspring population - a simple ranking selection in this case \\\hline +eo\-Select\-Number$<$ EOT $>$ ea\-Select( selection\-Strategy, POP\_\-SIZE ); ~ &// the number of individuals to be selected for creating the offspring population \\\hline +eo\-Ranking\-Select$<$ EOT $>$ selection\-Strategy; ~ &// selection strategy for creating the offspring population - a simple ranking selection in this case \\\hline +~ &~ \\\hline +eo\-SGATransform$<$ EOT $>$ transform( crossover, CROSS\_\-RATE, mutation, MUT\_\-RATE ); ~ &// transformation operator - crossover and mutation operators with their associated probabilities \\\hline +peo\-Seq\-Transform$<$ EOT $>$ ea\-Transform( transform ); ~ &// Paradis\-EO specific sequential operator - a parallel version may be specified in the same manner \\\hline +~ &~ \\\hline +eo\-Plus\-Replacement$<$ EOT $>$ ea\-Replace; ~ &// replacement strategy - for integrating the offspring resulting individuals in the initial population \\\hline +~ &~ \\\hline +peo\-EA$<$ EOT $>$ ea\-Alg( ea\-Checkpoint\-Continue, ea\-Pop\-Eval, ea\-Select, ea\-Transform, ea\-Replace ); ~ &// Paradis\-EO evolutionary algorithm integrating the above defined objects \\\hline +ea\-Alg( population ); ~ &// specifying the initial population for the algorithm \\\hline +... ~ &~ \\\hline +\end{TabularC} + + + + +Definition at line 82 of file peo\-EA.h. + +\subsection{Constructor \& Destructor Documentation} +\hypertarget{classpeoEA_dbfc4f8907bef234602149229f132371}{ +\index{peoEA@{peo\-EA}!peoEA@{peoEA}} +\index{peoEA@{peoEA}!peoEA@{peo\-EA}} +\subsubsection[peoEA]{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT$>$ \hyperlink{classpeoEA}{peo\-EA}$<$ EOT $>$::\hyperlink{classpeoEA}{peo\-EA} (\bf{eo\-Continue}$<$ EOT $>$ \& {\em \_\-\_\-cont}, \hyperlink{classpeoPopEval}{peo\-Pop\-Eval}$<$ EOT $>$ \& {\em \_\-\_\-pop\_\-eval}, \bf{eo\-Select}$<$ EOT $>$ \& {\em \_\-\_\-select}, \hyperlink{classpeoTransform}{peo\-Transform}$<$ EOT $>$ \& {\em \_\-\_\-trans}, \bf{eo\-Replacement}$<$ EOT $>$ \& {\em \_\-\_\-replace})}} +\label{classpeoEA_dbfc4f8907bef234602149229f132371} + + +Constructor for the evolutionary algorithm object - several basic parameters have to be specified, allowing for different levels of parallelism. + +Depending on the requirements, a sequential or a parallel evaluation operator may be specified or, in the same manner, a sequential or a parallel transformation operator may be given as parameter. Out of the box objects may be provided, from the \doxyref{EO} package, for example, or custom defined ones may be specified, provided that they are derived from the correct base classes. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em eo\-Continue$<$}]EOT $>$\& \_\-\_\-cont - continuation criterion specifying whether the algorithm should continue or not; \item[{\em peo\-Pop\-Eval$<$}]EOT $>$\& \_\-\_\-pop\_\-eval - evaluation operator; it allows the specification of parallel evaluation operators, aggregate evaluation functions, etc.; \item[{\em eo\-Select$<$}]EOT $>$\& \_\-\_\-select - selection strategy to be applied for constructing a list of offspring individuals; \item[{\em peo\-Transform$<$}]EOT $>$\& \_\-\_\-trans - transformation operator, i.e. crossover and mutation; allows for sequential or parallel transform; \item[{\em eo\-Replacement$<$}]EOT $>$\& \_\-\_\-replace - replacement strategy for integrating the offspring individuals in the initial population; \end{description} +\end{Desc} + + +Definition at line 126 of file peo\-EA.h. + +References peo\-EA$<$ EOT $>$::pop\_\-eval, and peo\-EA$<$ EOT $>$::trans. + +\subsection{Member Function Documentation} +\hypertarget{classpeoEA_3c709e3b2491147d26fee36138644613}{ +\index{peoEA@{peo\-EA}!operator()@{operator()}} +\index{operator()@{operator()}!peoEA@{peo\-EA}} +\subsubsection[operator()]{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT$>$ void \hyperlink{classpeoEA}{peo\-EA}$<$ EOT $>$::operator() (\bf{eo\-Pop}$<$ EOT $>$ \& {\em \_\-\_\-pop})}} +\label{classpeoEA_3c709e3b2491147d26fee36138644613} + + +\doxyref{Function} operator for specifying the population to be associated with the algorithm. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em eo\-Pop$<$}]EOT $>$\& \_\-\_\-pop - initial population of the algorithm, to be iteratively evolved; \end{description} +\end{Desc} + + +Definition at line 142 of file peo\-EA.h. + +References peo\-EA$<$ EOT $>$::pop. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +peo\-EA.h\end{CompactItemize} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoNoAggEvalFunc.eps b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoNoAggEvalFunc.eps new file mode 100644 index 000000000..b9f8ee753 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoNoAggEvalFunc.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 437.158 +%%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.14375 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 +(peoNoAggEvalFunc< EOT >) cw +(peoAggEvalFunc< EOT >) cw +(eoBF< A1, A2, R >) 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 ----- + + (peoNoAggEvalFunc< EOT >) 0 0 box + (peoAggEvalFunc< EOT >) 0 1 box + (eoBF< A1, A2, R >) 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-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoNoAggEvalFunc.pdf b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoNoAggEvalFunc.pdf new file mode 100644 index 0000000000000000000000000000000000000000..6c9a46e1196ab3b3d52f1d83f30c28583bb68a82 GIT binary patch literal 1386 zcmZ`(eM}o=7T(XIO_`ap3j^X`tcfaR( ze)l}j@AqD%&*iCM4MtG;<^0eQz(EGeE$v|YcGQTanAQf(1o0z}7}u}@ktZ%_*o7l< z6x(b-)f6mrfaGiG$HTi$+Dp5pn?D$O5TBS^E-62JFvGv~>Lb2}J5w{~GDFi#Z=bF_ zb_k|Q2Pb}<7@zpL$8+;s*TSb$KU{HkEAN?p`MP;3edOd#AJ0zphz4g_qx~+eyDL4| zcdNy@@MKZr=5YV;o{PU7Ke}|We(yK7(TQuzv+X4xE#EB}F2}gpvyLr}*57{(1Ya-T zGLY#X+vphHaHirOb{<^0I?W6+sy!3ARQ=Vx)+b^u5502Ucy(m7q9;{We1h*Qc0W8h zBsg?qmx{MO_tU^LsoTy7XzY$t(XEqDr=L|Xf6~c^7YCLyRp+{u^LzFw7hZhh^V{pv zb?ML4_Stv*b+!!~(Wdg6Vf)V0#i7{nKc&{QP0h!5mK05Ts~W#M{MX$0 z{qWDe_JwZwvqk6oW$q7qOK*uL-`phh@BQ0bHPbNuQs;>7TkhqC#cLH8oSV_1@}m2S zP91yU`KF_Yg)=IaqPcyOC#n%uhTe^w1>_)8LB8OD{TTU#7)D+k6$OW!gdv86Ifj8I zBX3~MVL;*vmNaOj8Uy6Vs+>?FSS9NF6gd*WS_lz;KorDDjikGi+Kzxm9008=6&{&X zvy|2kh#!!Xyc0qdQXgfZTx0YLE50IRq%)XpO@(Ne7*$~i(8m2B3<*PmQc|{DDZ5&l zt8@yQ5SL?lik0RI`TX_yg{A@8?ejv`X3G)N8FF6t^MIE53oO~8@=*)0Tpy*cxu8Q( zF2v+p&fDi6ylT}TPDB^w% zT3F7&)K-(Vl4GWcvg9JG*SogWG7Qf$jD=-cvxz5huN?iqP*Bw3SnrGrs`{AFf%9at zqIb#312HTS$ Class Template Reference} +\label{classpeoNoAggEvalFunc}\index{peoNoAggEvalFunc@{peoNoAggEvalFunc}} +} +The \hyperlink{classpeoNoAggEvalFunc}{peo\-No\-Agg\-Eval\-Func} class does nothing more than an association between a fitness value and a specified individual. + + +{\tt \#include $<$peo\-No\-Agg\-Eval\-Func.h$>$} + +Inheritance diagram for peo\-No\-Agg\-Eval\-Func$<$ EOT $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=4cm]{classpeoNoAggEvalFunc} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +\hypertarget{classpeoNoAggEvalFunc_1a69ee1af8745ac75c864bf884436de5}{ +void \hyperlink{classpeoNoAggEvalFunc_1a69ee1af8745ac75c864bf884436de5}{operator()} (EOT \&\_\-\_\-sol, const typename EOT::Fitness \&\_\-\_\-fit)} +\label{classpeoNoAggEvalFunc_1a69ee1af8745ac75c864bf884436de5} + +\begin{CompactList}\small\item\em Operator which sets as fitness the {\bf \_\-\_\-fit} value for the {\bf \_\-\_\-sol} individual. \item\end{CompactList}\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class EOT$>$ class peo\-No\-Agg\-Eval\-Func$<$ EOT $>$} + +The \hyperlink{classpeoNoAggEvalFunc}{peo\-No\-Agg\-Eval\-Func} class does nothing more than an association between a fitness value and a specified individual. + +The class is provided as a mean of declaring that no aggregation is required for the evaluation function - the fitness value is explicitly specified. + + + +Definition at line 47 of file peo\-No\-Agg\-Eval\-Func.h. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +peo\-No\-Agg\-Eval\-Func.h\end{CompactItemize} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoParaPopEval.eps b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoParaPopEval.eps new file mode 100644 index 000000000..25c8b8af1 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoParaPopEval.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 487.805 +%%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.025 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 +(peoParaPopEval< EOT >) cw +(peoPopEval< EOT >) cw +(Service) cw +(Communicable) 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 ----- + + (peoParaPopEval< EOT >) 0 0 box + (peoPopEval< EOT >) 0 1 box + (Service) 0 2 box + (Communicable) 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-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoParaPopEval.pdf b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoParaPopEval.pdf new file mode 100644 index 000000000..fcb9725ca --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoParaPopEval.pdf @@ -0,0 +1,73 @@ +%PDF-1.3 +%Çì¢ +5 0 obj +<> +stream +xœ­’ËNÃ0E÷þŠY‹ÁOü PÅ’–æJ”VE } Êï3IãÔU»AB‘eùÞñÜ£qv Ñ€î¾a¯Zuÿæaõ¥4¼ÈZ©2} [ÕÂS)EØ`0&@¹TÇˬGcb´Q”­ºÙÖ›éb¿˜n¶“ây€Ék ·å‡š”j¦,c`Kð#=ÖÊDiàXz±Ó:.: ξVó¿±xFêngÑËžX®s¤dc£”ÛÈ7Á£ÕduCéóçõþ°®ê‹TòRÌŤ!13a¡cŸú¼iÛïÏuµxo.£ÙƒÒãj´*2N^‡ +­G¯=æ)B#•gBòûYRæÃíüB8àò«8)hßy™’_iÔò‹1„ØFÔYH’?Œöä ‚Ô!ƒÈ”ó ÂrÊ1ÄKè³$ ~òè'áÁºÍ "SÎ{ÄLý®ÆÄÆendstream +endobj +6 0 obj +354 +endobj +4 0 obj +<> +/Contents 5 0 R +>> +endobj +3 0 obj +<< /Type /Pages /Kids [ +4 0 R +] /Count 1 +>> +endobj +1 0 obj +<> +endobj +7 0 obj +<>endobj +9 0 obj +<> +endobj +10 0 obj +<> +endobj +8 0 obj +<> +endobj +2 0 obj +<>endobj +xref +0 11 +0000000000 65535 f +0000000669 00000 n +0000000883 00000 n +0000000610 00000 n +0000000458 00000 n +0000000015 00000 n +0000000439 00000 n +0000000717 00000 n +0000000817 00000 n +0000000758 00000 n +0000000787 00000 n +trailer +<< /Size 11 /Root 1 0 R /Info 2 0 R +/ID [(Vüû%8ÏûÜcWÔ6Ì5î)(Vüû%8ÏûÜcWÔ6Ì5î)] +>> +startxref +1040 +%%EOF diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoParaPopEval.tex b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoParaPopEval.tex new file mode 100644 index 000000000..7c1d7ae9f --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoParaPopEval.tex @@ -0,0 +1,258 @@ +\hypertarget{classpeoParaPopEval}{ +\section{peo\-Para\-Pop\-Eval$<$ EOT $>$ Class Template Reference} +\label{classpeoParaPopEval}\index{peoParaPopEval@{peoParaPopEval}} +} +The \hyperlink{classpeoParaPopEval}{peo\-Para\-Pop\-Eval} represents a wrapper for creating a functor capable of applying in parallel an EO-derived evaluation functor. + + +{\tt \#include $<$peo\-Para\-Pop\-Eval.h$>$} + +Inheritance diagram for peo\-Para\-Pop\-Eval$<$ EOT $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=4cm]{classpeoParaPopEval} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +\hyperlink{classpeoParaPopEval_bcb540510a7038520bec41a7af332daf}{peo\-Para\-Pop\-Eval} (\bf{eo\-Eval\-Func}$<$ EOT $>$ \&\_\-\_\-eval\_\-func) +\begin{CompactList}\small\item\em Constructor function - an EO-derived evaluation functor has to be specified; an internal reference is set towards the specified evaluation functor. \item\end{CompactList}\item +\hyperlink{classpeoParaPopEval_1cc13a1ec366f95d219d682eccb455bc}{peo\-Para\-Pop\-Eval} (const std::vector$<$ \bf{eo\-Eval\-Func}$<$ EOT $>$ $\ast$ $>$ \&\_\-\_\-funcs, \hyperlink{classpeoAggEvalFunc}{peo\-Agg\-Eval\-Func}$<$ EOT $>$ \&\_\-\_\-merge\_\-eval) +\begin{CompactList}\small\item\em Constructor function - a vector of EO-derived evaluation functors has to be specified as well as an aggregation function. \item\end{CompactList}\item +void \hyperlink{classpeoParaPopEval_aeaa4fca4f8650e453e308838b4a2cb5}{operator()} (\bf{eo\-Pop}$<$ EOT $>$ \&\_\-\_\-pop) +\begin{CompactList}\small\item\em Operator for applying the evaluation functor (direct or aggregate) for each individual of the specified population. \item\end{CompactList}\item +void \hyperlink{classpeoParaPopEval_fea632bd645ab11182782fd3c038d6d8}{pack\-Data} () +\begin{CompactList}\small\item\em Auxiliary function for transferring data between the process requesting an evaluation operation and the process that performs the actual evaluation phase. \item\end{CompactList}\item +void \hyperlink{classpeoParaPopEval_410bf4c173e2f36df82251cb16ce1b05}{unpack\-Data} () +\begin{CompactList}\small\item\em Auxiliary function for transferring data between the process requesting an evaluation operation and the process that performs the actual evaluation phase. \item\end{CompactList}\item +\hypertarget{classpeoParaPopEval_3af76378611eac5a36da9a0a00aeeb6c}{ +void \hyperlink{classpeoParaPopEval_3af76378611eac5a36da9a0a00aeeb6c}{execute} ()} +\label{classpeoParaPopEval_3af76378611eac5a36da9a0a00aeeb6c} + +\begin{CompactList}\small\item\em Auxiliary function - it calls the specified evaluation functor(s). There is no need to explicitly call the function. \item\end{CompactList}\item +void \hyperlink{classpeoParaPopEval_24bb4ae84b0b9f64e7170e3d2b0e1223}{pack\-Result} () +\begin{CompactList}\small\item\em Auxiliary function for transferring data between the process requesting an evaluation operation and the process that performs the actual evaluation phase. \item\end{CompactList}\item +void \hyperlink{classpeoParaPopEval_fd7f0afe9cba30be39269d16097e190e}{unpack\-Result} () +\begin{CompactList}\small\item\em Auxiliary function for transferring data between the process requesting an evaluation operation and the process that performs the actual evaluation phase. \item\end{CompactList}\item +void \hyperlink{classpeoParaPopEval_1f78c3cec2940af08a059cc1aa96a9c8}{notify\-Sending\-Data} () +\begin{CompactList}\small\item\em Auxiliary function for notifications between the process requesting an evaluation operation and the processes that performs the actual evaluation phase. \item\end{CompactList}\item +void \hyperlink{classpeoParaPopEval_b77031fc4807921ffaf7cf6b669a7665}{notify\-Sending\-All\-Resource\-Requests} () +\begin{CompactList}\small\item\em Auxiliary function for notifications between the process requesting an evaluation operation and the processes that performs the actual evaluation phase. \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Attributes} +\begin{CompactItemize} +\item +\hypertarget{classpeoParaPopEval_6d69b8f73c0b5d72baf75d6e53f025b7}{ +const std::vector$<$ \bf{eo\-Eval\-Func}$<$ EOT $>$ $\ast$ $>$ \& \hyperlink{classpeoParaPopEval_6d69b8f73c0b5d72baf75d6e53f025b7}{funcs}} +\label{classpeoParaPopEval_6d69b8f73c0b5d72baf75d6e53f025b7} + +\item +\hypertarget{classpeoParaPopEval_f0e8af3ee442d2b6baf0bd122226be3c}{ +std::vector$<$ \bf{eo\-Eval\-Func}$<$ EOT $>$ $\ast$ $>$ \hyperlink{classpeoParaPopEval_f0e8af3ee442d2b6baf0bd122226be3c}{one\_\-func}} +\label{classpeoParaPopEval_f0e8af3ee442d2b6baf0bd122226be3c} + +\item +\hypertarget{classpeoParaPopEval_b48bcd4e9f92f364118304535c089456}{ +\hyperlink{classpeoAggEvalFunc}{peo\-Agg\-Eval\-Func}$<$ EOT $>$ \& \hyperlink{classpeoParaPopEval_b48bcd4e9f92f364118304535c089456}{merge\_\-eval}} +\label{classpeoParaPopEval_b48bcd4e9f92f364118304535c089456} + +\item +\hypertarget{classpeoParaPopEval_bf255dd5861e27108c2abae7309d7690}{ +\hyperlink{classpeoNoAggEvalFunc}{peo\-No\-Agg\-Eval\-Func}$<$ EOT $>$ \hyperlink{classpeoParaPopEval_bf255dd5861e27108c2abae7309d7690}{no\_\-merge\_\-eval}} +\label{classpeoParaPopEval_bf255dd5861e27108c2abae7309d7690} + +\item +\hypertarget{classpeoParaPopEval_af76cd18368a0f6185878f37f0b5f272}{ +std::queue$<$ EOT $\ast$ $>$ \hyperlink{classpeoParaPopEval_af76cd18368a0f6185878f37f0b5f272}{tasks}} +\label{classpeoParaPopEval_af76cd18368a0f6185878f37f0b5f272} + +\item +\hypertarget{classpeoParaPopEval_80e7e34bb1bb2d12f1f2eed3feac6ecf}{ +std::map$<$ EOT $\ast$, std::pair$<$ unsigned, unsigned $>$ $>$ \hyperlink{classpeoParaPopEval_80e7e34bb1bb2d12f1f2eed3feac6ecf}{progression}} +\label{classpeoParaPopEval_80e7e34bb1bb2d12f1f2eed3feac6ecf} + +\item +\hypertarget{classpeoParaPopEval_87abb090c0de39f0ccc36af1f07cca0c}{ +unsigned \hyperlink{classpeoParaPopEval_87abb090c0de39f0ccc36af1f07cca0c}{num\_\-func}} +\label{classpeoParaPopEval_87abb090c0de39f0ccc36af1f07cca0c} + +\item +\hypertarget{classpeoParaPopEval_fb6941e0455515a908eb82342b995163}{ +EOT \hyperlink{classpeoParaPopEval_fb6941e0455515a908eb82342b995163}{sol}} +\label{classpeoParaPopEval_fb6941e0455515a908eb82342b995163} + +\item +\hypertarget{classpeoParaPopEval_60cafeab376262af675fdff43434c8d8}{ +EOT $\ast$ \hyperlink{classpeoParaPopEval_60cafeab376262af675fdff43434c8d8}{ad\_\-sol}} +\label{classpeoParaPopEval_60cafeab376262af675fdff43434c8d8} + +\item +\hypertarget{classpeoParaPopEval_b528ad9dd9006c3dd57f149a3843e57d}{ +unsigned \hyperlink{classpeoParaPopEval_b528ad9dd9006c3dd57f149a3843e57d}{total}} +\label{classpeoParaPopEval_b528ad9dd9006c3dd57f149a3843e57d} + +\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class EOT$>$ class peo\-Para\-Pop\-Eval$<$ EOT $>$} + +The \hyperlink{classpeoParaPopEval}{peo\-Para\-Pop\-Eval} represents a wrapper for creating a functor capable of applying in parallel an EO-derived evaluation functor. + +The class offers the possibility of chosing between a single-function evaluation and an aggregate evaluation function, including several sub-evalution functions. + + + +Definition at line 54 of file peo\-Para\-Pop\-Eval.h. + +\subsection{Constructor \& Destructor Documentation} +\hypertarget{classpeoParaPopEval_bcb540510a7038520bec41a7af332daf}{ +\index{peoParaPopEval@{peo\-Para\-Pop\-Eval}!peoParaPopEval@{peoParaPopEval}} +\index{peoParaPopEval@{peoParaPopEval}!peoParaPopEval@{peo\-Para\-Pop\-Eval}} +\subsubsection[peoParaPopEval]{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT$>$ \hyperlink{classpeoParaPopEval}{peo\-Para\-Pop\-Eval}$<$ EOT $>$::\hyperlink{classpeoParaPopEval}{peo\-Para\-Pop\-Eval} (\bf{eo\-Eval\-Func}$<$ EOT $>$ \& {\em \_\-\_\-eval\_\-func})}} +\label{classpeoParaPopEval_bcb540510a7038520bec41a7af332daf} + + +Constructor function - an EO-derived evaluation functor has to be specified; an internal reference is set towards the specified evaluation functor. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em eo\-Eval\-Func$<$}]EOT $>$\& \_\-\_\-eval\_\-func - EO-derived evaluation functor to be applied in parallel on each individual of a specified population \end{description} +\end{Desc} + + +Definition at line 130 of file peo\-Para\-Pop\-Eval.h. + +References peo\-Para\-Pop\-Eval$<$ EOT $>$::one\_\-func.\hypertarget{classpeoParaPopEval_1cc13a1ec366f95d219d682eccb455bc}{ +\index{peoParaPopEval@{peo\-Para\-Pop\-Eval}!peoParaPopEval@{peoParaPopEval}} +\index{peoParaPopEval@{peoParaPopEval}!peoParaPopEval@{peo\-Para\-Pop\-Eval}} +\subsubsection[peoParaPopEval]{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT$>$ \hyperlink{classpeoParaPopEval}{peo\-Para\-Pop\-Eval}$<$ EOT $>$::\hyperlink{classpeoParaPopEval}{peo\-Para\-Pop\-Eval} (const std::vector$<$ \bf{eo\-Eval\-Func}$<$ EOT $>$ $\ast$ $>$ \& {\em \_\-\_\-funcs}, \hyperlink{classpeoAggEvalFunc}{peo\-Agg\-Eval\-Func}$<$ EOT $>$ \& {\em \_\-\_\-merge\_\-eval})}} +\label{classpeoParaPopEval_1cc13a1ec366f95d219d682eccb455bc} + + +Constructor function - a vector of EO-derived evaluation functors has to be specified as well as an aggregation function. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em const}]std :: vector$<$ \doxyref{eo\-Eval\-Func} $<$ EOT $>$$\ast$ $>$\& \_\-\_\-funcs - vector of EO-derived partial evaluation functors; \item[{\em peo\-Agg\-Eval\-Func$<$}]EOT $>$\& \_\-\_\-merge\_\-eval - aggregation functor for creating a fitness value out of the partial fitness values. \end{description} +\end{Desc} + + +Definition at line 139 of file peo\-Para\-Pop\-Eval.h. + +\subsection{Member Function Documentation} +\hypertarget{classpeoParaPopEval_aeaa4fca4f8650e453e308838b4a2cb5}{ +\index{peoParaPopEval@{peo\-Para\-Pop\-Eval}!operator()@{operator()}} +\index{operator()@{operator()}!peoParaPopEval@{peo\-Para\-Pop\-Eval}} +\subsubsection[operator()]{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT$>$ void \hyperlink{classpeoParaPopEval}{peo\-Para\-Pop\-Eval}$<$ EOT $>$::operator() (\bf{eo\-Pop}$<$ EOT $>$ \& {\em \_\-\_\-pop})\hspace{0.3cm}{\tt \mbox{[}virtual\mbox{]}}}} +\label{classpeoParaPopEval_aeaa4fca4f8650e453e308838b4a2cb5} + + +Operator for applying the evaluation functor (direct or aggregate) for each individual of the specified population. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em eo\-Pop$<$}]EOT $>$\& \_\-\_\-pop - population to be evaluated by applying the evaluation functor specified in the constructor. \end{description} +\end{Desc} + + +Implements \hyperlink{classpeoPopEval_2f208067a5e39c3b26c1234050a41e8f}{peo\-Pop\-Eval$<$ EOT $>$}. + +Definition at line 150 of file peo\-Para\-Pop\-Eval.h. + +References peo\-Para\-Pop\-Eval$<$ EOT $>$::funcs, peo\-Para\-Pop\-Eval$<$ EOT $>$::progression, Service::request\-Resource\-Request(), Communicable::stop(), peo\-Para\-Pop\-Eval$<$ EOT $>$::tasks, and peo\-Para\-Pop\-Eval$<$ EOT $>$::total.\hypertarget{classpeoParaPopEval_fea632bd645ab11182782fd3c038d6d8}{ +\index{peoParaPopEval@{peo\-Para\-Pop\-Eval}!packData@{packData}} +\index{packData@{packData}!peoParaPopEval@{peo\-Para\-Pop\-Eval}} +\subsubsection[packData]{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT$>$ void \hyperlink{classpeoParaPopEval}{peo\-Para\-Pop\-Eval}$<$ EOT $>$::pack\-Data ()\hspace{0.3cm}{\tt \mbox{[}virtual\mbox{]}}}} +\label{classpeoParaPopEval_fea632bd645ab11182782fd3c038d6d8} + + +Auxiliary function for transferring data between the process requesting an evaluation operation and the process that performs the actual evaluation phase. + +There is no need to explicitly call the function. + +Reimplemented from \hyperlink{classService_aea4b8f7f8fb88e83862ee4bfd9ab207}{Service}. + +Definition at line 171 of file peo\-Para\-Pop\-Eval.h. + +References peo\-Para\-Pop\-Eval$<$ EOT $>$::progression, and peo\-Para\-Pop\-Eval$<$ EOT $>$::tasks.\hypertarget{classpeoParaPopEval_410bf4c173e2f36df82251cb16ce1b05}{ +\index{peoParaPopEval@{peo\-Para\-Pop\-Eval}!unpackData@{unpackData}} +\index{unpackData@{unpackData}!peoParaPopEval@{peo\-Para\-Pop\-Eval}} +\subsubsection[unpackData]{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT$>$ void \hyperlink{classpeoParaPopEval}{peo\-Para\-Pop\-Eval}$<$ EOT $>$::unpack\-Data ()\hspace{0.3cm}{\tt \mbox{[}virtual\mbox{]}}}} +\label{classpeoParaPopEval_410bf4c173e2f36df82251cb16ce1b05} + + +Auxiliary function for transferring data between the process requesting an evaluation operation and the process that performs the actual evaluation phase. + +There is no need to explicitly call the function. + +Reimplemented from \hyperlink{classService_3bd87b444710813d30fd754d4d0b4df3}{Service}. + +Definition at line 185 of file peo\-Para\-Pop\-Eval.h. + +References peo\-Para\-Pop\-Eval$<$ EOT $>$::ad\_\-sol, peo\-Para\-Pop\-Eval$<$ EOT $>$::num\_\-func, and peo\-Para\-Pop\-Eval$<$ EOT $>$::sol.\hypertarget{classpeoParaPopEval_24bb4ae84b0b9f64e7170e3d2b0e1223}{ +\index{peoParaPopEval@{peo\-Para\-Pop\-Eval}!packResult@{packResult}} +\index{packResult@{packResult}!peoParaPopEval@{peo\-Para\-Pop\-Eval}} +\subsubsection[packResult]{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT$>$ void \hyperlink{classpeoParaPopEval}{peo\-Para\-Pop\-Eval}$<$ EOT $>$::pack\-Result ()\hspace{0.3cm}{\tt \mbox{[}virtual\mbox{]}}}} +\label{classpeoParaPopEval_24bb4ae84b0b9f64e7170e3d2b0e1223} + + +Auxiliary function for transferring data between the process requesting an evaluation operation and the process that performs the actual evaluation phase. + +There is no need to explicitly call the function. + +Reimplemented from \hyperlink{classService_e5e4f90b2315e15c2a2913bd370f4cf5}{Service}. + +Definition at line 202 of file peo\-Para\-Pop\-Eval.h. + +References peo\-Para\-Pop\-Eval$<$ EOT $>$::ad\_\-sol, and peo\-Para\-Pop\-Eval$<$ EOT $>$::sol.\hypertarget{classpeoParaPopEval_fd7f0afe9cba30be39269d16097e190e}{ +\index{peoParaPopEval@{peo\-Para\-Pop\-Eval}!unpackResult@{unpackResult}} +\index{unpackResult@{unpackResult}!peoParaPopEval@{peo\-Para\-Pop\-Eval}} +\subsubsection[unpackResult]{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT$>$ void \hyperlink{classpeoParaPopEval}{peo\-Para\-Pop\-Eval}$<$ EOT $>$::unpack\-Result ()\hspace{0.3cm}{\tt \mbox{[}virtual\mbox{]}}}} +\label{classpeoParaPopEval_fd7f0afe9cba30be39269d16097e190e} + + +Auxiliary function for transferring data between the process requesting an evaluation operation and the process that performs the actual evaluation phase. + +There is no need to explicitly call the function. + +Reimplemented from \hyperlink{classService_45c06344edbfa482b91f68e2035a6099}{Service}. + +Definition at line 211 of file peo\-Para\-Pop\-Eval.h. + +References peo\-Para\-Pop\-Eval$<$ EOT $>$::ad\_\-sol, Service::get\-Owner(), peo\-Para\-Pop\-Eval$<$ EOT $>$::merge\_\-eval, peo\-Para\-Pop\-Eval$<$ EOT $>$::progression, Communicable::resume(), Thread::set\-Active(), and peo\-Para\-Pop\-Eval$<$ EOT $>$::total.\hypertarget{classpeoParaPopEval_1f78c3cec2940af08a059cc1aa96a9c8}{ +\index{peoParaPopEval@{peo\-Para\-Pop\-Eval}!notifySendingData@{notifySendingData}} +\index{notifySendingData@{notifySendingData}!peoParaPopEval@{peo\-Para\-Pop\-Eval}} +\subsubsection[notifySendingData]{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT$>$ void \hyperlink{classpeoParaPopEval}{peo\-Para\-Pop\-Eval}$<$ EOT $>$::notify\-Sending\-Data ()\hspace{0.3cm}{\tt \mbox{[}virtual\mbox{]}}}} +\label{classpeoParaPopEval_1f78c3cec2940af08a059cc1aa96a9c8} + + +Auxiliary function for notifications between the process requesting an evaluation operation and the processes that performs the actual evaluation phase. + +There is no need to explicitly call the function. + +Reimplemented from \hyperlink{classService_81ad4d6ebb50045b8977e2ab74826f30}{Service}. + +Definition at line 242 of file peo\-Para\-Pop\-Eval.h.\hypertarget{classpeoParaPopEval_b77031fc4807921ffaf7cf6b669a7665}{ +\index{peoParaPopEval@{peo\-Para\-Pop\-Eval}!notifySendingAllResourceRequests@{notifySendingAllResourceRequests}} +\index{notifySendingAllResourceRequests@{notifySendingAllResourceRequests}!peoParaPopEval@{peo\-Para\-Pop\-Eval}} +\subsubsection[notifySendingAllResourceRequests]{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT$>$ void \hyperlink{classpeoParaPopEval}{peo\-Para\-Pop\-Eval}$<$ EOT $>$::notify\-Sending\-All\-Resource\-Requests ()\hspace{0.3cm}{\tt \mbox{[}virtual\mbox{]}}}} +\label{classpeoParaPopEval_b77031fc4807921ffaf7cf6b669a7665} + + +Auxiliary function for notifications between the process requesting an evaluation operation and the processes that performs the actual evaluation phase. + +There is no need to explicitly call the function. + +Reimplemented from \hyperlink{classService_f94cc8a5c2665d4574041737e61e9ffc}{Service}. + +Definition at line 247 of file peo\-Para\-Pop\-Eval.h. + +References Service::get\-Owner(), and Thread::set\-Passive(). + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +peo\-Para\-Pop\-Eval.h\end{CompactItemize} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoParaSGATransform.eps b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoParaSGATransform.eps new file mode 100644 index 000000000..7b2968db4 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoParaSGATransform.eps @@ -0,0 +1,227 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 250 +%%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 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 +(peoParaSGATransform< EOT >) cw +(peoTransform< EOT >) cw +(Service) cw +(eoTransform< EOT >) cw +(Communicable) cw +(eoUF< A1, R >) 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 ----- + + (peoParaSGATransform< EOT >) 0.5 0 box + (peoTransform< EOT >) 0.5 1 box + (Service) 0 2 box + (eoTransform< EOT >) 1 2 box + (Communicable) 0 3 box + (eoUF< A1, R >) 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 +0 1 2 conn +solid +1 0 2 in +solid +0 0 2 out +solid +1 1 2 in +solid +0 1 2 out +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-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoParaSGATransform.pdf b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoParaSGATransform.pdf new file mode 100644 index 000000000..644de362e --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoParaSGATransform.pdf @@ -0,0 +1,75 @@ +%PDF-1.3 +%Çì¢ +5 0 obj +<> +stream +xœ­SËnÛ0¼ó+xlŠbC.KA¤Hrl«àrಹi~¿«iJ1R° ƒæp<3»Z>KZªî3®«F\>’|:%ïùû$ž…î r\V¼©˜¤öà½'Y­Åðg-µÕàœ‘u²jć_õþÛ²].v¹;¬÷ms%o¿VòóEõSÜVâAh!„(_YhÃ;ëA ¢QÁK$"’m-ÿˆ ($é°ˆIÞI2x;ç¸wŽ +Á¯¨ ˜!Á¢nÿlVõÑ™™Ãh}WŒœ™º¾S6:ÁÚ3 d‚áàÁŒ“ðeß4/»Íjùc{¢vV`•3X®ÙXšX×ûïwWòZ’§Ê>£7öÞh4DV¼ï^v«ßûöfy¨ßx#?€xÚÛw"LzeºRù¬¶¶`å–™`<†XÏÓTwçý`ÈÝ +´Aû´+©[±þ8 ë„5bE³|²ÌÍ*¹R+f¤0œcÇ6dõ܆™ •~<áÝ=8ú¡ +ݤMüV°Æ{3aXN…:9¦T%2âTâ/”t„endstream +endobj +6 0 obj +523 +endobj +4 0 obj +<> +/Contents 5 0 R +>> +endobj +3 0 obj +<< /Type /Pages /Kids [ +4 0 R +] /Count 1 +>> +endobj +1 0 obj +<> +endobj +7 0 obj +<>endobj +9 0 obj +<> +endobj +10 0 obj +<> +endobj +8 0 obj +<> +endobj +2 0 obj +<>endobj +xref +0 11 +0000000000 65535 f +0000000836 00000 n +0000001050 00000 n +0000000777 00000 n +0000000627 00000 n +0000000015 00000 n +0000000608 00000 n +0000000884 00000 n +0000000984 00000 n +0000000925 00000 n +0000000954 00000 n +trailer +<< /Size 11 /Root 1 0 R /Info 2 0 R +/ID [(Âw¡ÐVPï»$jÂÊ)(Âw¡ÐVPï»$jÂÊ)] +>> +startxref +1207 +%%EOF diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoParaSGATransform.tex b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoParaSGATransform.tex new file mode 100644 index 000000000..c86bf9422 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoParaSGATransform.tex @@ -0,0 +1,120 @@ +\hypertarget{classpeoParaSGATransform}{ +\section{peo\-Para\-SGATransform$<$ EOT $>$ Class Template Reference} +\label{classpeoParaSGATransform}\index{peoParaSGATransform@{peoParaSGATransform}} +} +Inheritance diagram for peo\-Para\-SGATransform$<$ EOT $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=5cm]{classpeoParaSGATransform} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +\hypertarget{classpeoParaSGATransform_2052bca82fbbfe5455bf6f69246d4dbf}{ +\hyperlink{classpeoParaSGATransform_2052bca82fbbfe5455bf6f69246d4dbf}{peo\-Para\-SGATransform} (\bf{eo\-Quad\-Op}$<$ EOT $>$ \&\_\-\_\-cross, double \_\-\_\-cross\_\-rate, \bf{eo\-Mon\-Op}$<$ EOT $>$ \&\_\-\_\-mut, double \_\-\_\-mut\_\-rate)} +\label{classpeoParaSGATransform_2052bca82fbbfe5455bf6f69246d4dbf} + +\item +\hypertarget{classpeoParaSGATransform_669de7f7c6316fa745a15b909efb6527}{ +void \hyperlink{classpeoParaSGATransform_669de7f7c6316fa745a15b909efb6527}{operator()} (\bf{eo\-Pop}$<$ EOT $>$ \&\_\-\_\-pop)} +\label{classpeoParaSGATransform_669de7f7c6316fa745a15b909efb6527} + +\item +\hypertarget{classpeoParaSGATransform_fd278bcde58d29c9a343d5cbead81a1e}{ +void \hyperlink{classpeoParaSGATransform_fd278bcde58d29c9a343d5cbead81a1e}{pack\-Data} ()} +\label{classpeoParaSGATransform_fd278bcde58d29c9a343d5cbead81a1e} + +\item +\hypertarget{classpeoParaSGATransform_a43a487a6e81791c8bbf6ce30f4336ab}{ +void \hyperlink{classpeoParaSGATransform_a43a487a6e81791c8bbf6ce30f4336ab}{unpack\-Data} ()} +\label{classpeoParaSGATransform_a43a487a6e81791c8bbf6ce30f4336ab} + +\item +\hypertarget{classpeoParaSGATransform_c9de2100fb897177a401c634002f6dd9}{ +void \hyperlink{classpeoParaSGATransform_c9de2100fb897177a401c634002f6dd9}{execute} ()} +\label{classpeoParaSGATransform_c9de2100fb897177a401c634002f6dd9} + +\item +\hypertarget{classpeoParaSGATransform_ba08e224ceaa4149e8e1a88694a2ccf2}{ +void \hyperlink{classpeoParaSGATransform_ba08e224ceaa4149e8e1a88694a2ccf2}{pack\-Result} ()} +\label{classpeoParaSGATransform_ba08e224ceaa4149e8e1a88694a2ccf2} + +\item +\hypertarget{classpeoParaSGATransform_257663dcdc6cc95b6183d472ffba1b2f}{ +void \hyperlink{classpeoParaSGATransform_257663dcdc6cc95b6183d472ffba1b2f}{unpack\-Result} ()} +\label{classpeoParaSGATransform_257663dcdc6cc95b6183d472ffba1b2f} + +\item +\hypertarget{classpeoParaSGATransform_4e19dfc22b6f69fa8b93537226551866}{ +void \hyperlink{classpeoParaSGATransform_4e19dfc22b6f69fa8b93537226551866}{notify\-Sending\-Data} ()} +\label{classpeoParaSGATransform_4e19dfc22b6f69fa8b93537226551866} + +\item +\hypertarget{classpeoParaSGATransform_8a0316e33897c395a81787f59ea7a1c8}{ +void \hyperlink{classpeoParaSGATransform_8a0316e33897c395a81787f59ea7a1c8}{notify\-Sending\-All\-Resource\-Requests} ()} +\label{classpeoParaSGATransform_8a0316e33897c395a81787f59ea7a1c8} + +\end{CompactItemize} +\subsection*{Private Attributes} +\begin{CompactItemize} +\item +\hypertarget{classpeoParaSGATransform_c6f97deabe7502c84f5b6c479013f6dc}{ +\bf{eo\-Quad\-Op}$<$ EOT $>$ \& \hyperlink{classpeoParaSGATransform_c6f97deabe7502c84f5b6c479013f6dc}{cross}} +\label{classpeoParaSGATransform_c6f97deabe7502c84f5b6c479013f6dc} + +\item +\hypertarget{classpeoParaSGATransform_dfcf216e2df05016db4d57a5ffb0b0e2}{ +double \hyperlink{classpeoParaSGATransform_dfcf216e2df05016db4d57a5ffb0b0e2}{cross\_\-rate}} +\label{classpeoParaSGATransform_dfcf216e2df05016db4d57a5ffb0b0e2} + +\item +\hypertarget{classpeoParaSGATransform_34ff5f9d285ca4879cf8865fb425a311}{ +\bf{eo\-Mon\-Op}$<$ EOT $>$ \& \hyperlink{classpeoParaSGATransform_34ff5f9d285ca4879cf8865fb425a311}{mut}} +\label{classpeoParaSGATransform_34ff5f9d285ca4879cf8865fb425a311} + +\item +\hypertarget{classpeoParaSGATransform_b9d3a2094737d0bbd034aac942cc53e3}{ +double \hyperlink{classpeoParaSGATransform_b9d3a2094737d0bbd034aac942cc53e3}{mut\_\-rate}} +\label{classpeoParaSGATransform_b9d3a2094737d0bbd034aac942cc53e3} + +\item +\hypertarget{classpeoParaSGATransform_03972feadc86626e58fe60bd4061b57e}{ +unsigned \hyperlink{classpeoParaSGATransform_03972feadc86626e58fe60bd4061b57e}{idx}} +\label{classpeoParaSGATransform_03972feadc86626e58fe60bd4061b57e} + +\item +\hypertarget{classpeoParaSGATransform_94e10a1285e128aba6e71517c941f961}{ +\bf{eo\-Pop}$<$ EOT $>$ $\ast$ \hyperlink{classpeoParaSGATransform_94e10a1285e128aba6e71517c941f961}{pop}} +\label{classpeoParaSGATransform_94e10a1285e128aba6e71517c941f961} + +\item +\hypertarget{classpeoParaSGATransform_9ef60190e2e3bd5961a93d1b52cb275d}{ +EOT \hyperlink{classpeoParaSGATransform_9ef60190e2e3bd5961a93d1b52cb275d}{father}} +\label{classpeoParaSGATransform_9ef60190e2e3bd5961a93d1b52cb275d} + +\item +\hypertarget{classpeoParaSGATransform_e991ad2af6d116afd855de2db46e1d27}{ +EOT \hyperlink{classpeoParaSGATransform_e991ad2af6d116afd855de2db46e1d27}{mother}} +\label{classpeoParaSGATransform_e991ad2af6d116afd855de2db46e1d27} + +\item +\hypertarget{classpeoParaSGATransform_589ea7cd72d522ae51a07de4d8ffbf11}{ +unsigned \hyperlink{classpeoParaSGATransform_589ea7cd72d522ae51a07de4d8ffbf11}{num\_\-term}} +\label{classpeoParaSGATransform_589ea7cd72d522ae51a07de4d8ffbf11} + +\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class EOT$>$ class peo\-Para\-SGATransform$<$ EOT $>$} + + + + + +Definition at line 49 of file peo\-Para\-SGATransform.h. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +peo\-Para\-SGATransform.h\end{CompactItemize} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoParallelAlgorithmWrapper.eps b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoParallelAlgorithmWrapper.eps new file mode 100644 index 000000000..d3b1407fa --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoParallelAlgorithmWrapper.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 161.29 +%%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.1 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 3 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 +(peoParallelAlgorithmWrapper) cw +(Runner) cw +(Communicable) cw +(Thread) 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 ----- + + (peoParallelAlgorithmWrapper) 0.5 0 box + (Runner) 0.5 1 box + (Communicable) 0 2 box + (Thread) 1 2 box + +% ----- relations ----- + +solid +0 0.5 0 out +solid +1 0.5 1 in +solid +0 0.5 1 out +solid +0 1 2 conn +solid +1 0 2 in +solid +1 1 2 in diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoParallelAlgorithmWrapper.pdf b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoParallelAlgorithmWrapper.pdf new file mode 100644 index 000000000..897fdc562 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoParallelAlgorithmWrapper.pdf @@ -0,0 +1,74 @@ +%PDF-1.3 +%Çì¢ +5 0 obj +<> +stream +xœ­SËNÃ@ ¼ïWøLì}!®´DâJú@IŠßÇy4l‹T ©Š¢ÍŽgg&v²ƒ ²öÖY­n§Ÿ*ƒ'¹j§¨#À°Ìj¸Ï…€:í äsÕ& íÐY¡bðd!¯ÕÕ¶Ü<MQUeuW-6ÍêkY¿6Åv[6×ù‡zÌÕD‘E«‰á[„VŠ8 ,‚l˜QÐ"蘠)ÕËÿ±XçÀ3Æè¨K4ݯשù`'ÈÆ]ÀÔ$OQºa‘¸7}ØÔõ~½šoU9Z YÜÐÄ ˜jÛ +ñ‘i¾lÊâ}´cë}7žs¦½³NFÁ6ËÆRÝo³5TÂKöæPî[È¿õCOÛ:käÖF‰g…ÂÆ;ô)ž¨Ôü¦G¢¦ök:xP ‘ÄJ O1abéE"¯eòk!§Jb8Q?M’È‘endstream +endobj +6 0 obj +365 +endobj +4 0 obj +<> +/Contents 5 0 R +>> +endobj +3 0 obj +<< /Type /Pages /Kids [ +4 0 R +] /Count 1 +>> +endobj +1 0 obj +<> +endobj +7 0 obj +<>endobj +9 0 obj +<> +endobj +10 0 obj +<> +endobj +8 0 obj +<> +endobj +2 0 obj +<>endobj +xref +0 11 +0000000000 65535 f +0000000681 00000 n +0000000895 00000 n +0000000622 00000 n +0000000469 00000 n +0000000015 00000 n +0000000450 00000 n +0000000729 00000 n +0000000829 00000 n +0000000770 00000 n +0000000799 00000 n +trailer +<< /Size 11 /Root 1 0 R /Info 2 0 R +/ID [(Þijy<”õi¢Ç[`Ì')(Þijy<”õi¢Ç[`Ì')] +>> +startxref +1052 +%%EOF diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoParallelAlgorithmWrapper.tex b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoParallelAlgorithmWrapper.tex new file mode 100644 index 000000000..ff8968483 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoParallelAlgorithmWrapper.tex @@ -0,0 +1,62 @@ +\hypertarget{classpeoParallelAlgorithmWrapper}{ +\section{peo\-Parallel\-Algorithm\-Wrapper Class Reference} +\label{classpeoParallelAlgorithmWrapper}\index{peoParallelAlgorithmWrapper@{peoParallelAlgorithmWrapper}} +} +Inheritance diagram for peo\-Parallel\-Algorithm\-Wrapper::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=3cm]{classpeoParallelAlgorithmWrapper} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +\hypertarget{classpeoParallelAlgorithmWrapper_e1e1de8b007934080876df1c65c4d8b0}{ +template$<$typename Algorithm\-Type$>$ \hyperlink{classpeoParallelAlgorithmWrapper_e1e1de8b007934080876df1c65c4d8b0}{peo\-Parallel\-Algorithm\-Wrapper} (Algorithm\-Type \&external\-Algorithm)} +\label{classpeoParallelAlgorithmWrapper_e1e1de8b007934080876df1c65c4d8b0} + +\item +\hypertarget{classpeoParallelAlgorithmWrapper_1ebfe70e6826002f6280aba01e141ad5}{ +template$<$typename Algorithm\-Type, typename Algorithm\-Data\-Type$>$ \hyperlink{classpeoParallelAlgorithmWrapper_1ebfe70e6826002f6280aba01e141ad5}{peo\-Parallel\-Algorithm\-Wrapper} (Algorithm\-Type \&external\-Algorithm, Algorithm\-Data\-Type \&external\-Data)} +\label{classpeoParallelAlgorithmWrapper_1ebfe70e6826002f6280aba01e141ad5} + +\item +\hypertarget{classpeoParallelAlgorithmWrapper_0e64f517afe790db467750a6980e1666}{ +\hyperlink{classpeoParallelAlgorithmWrapper_0e64f517afe790db467750a6980e1666}{$\sim$peo\-Parallel\-Algorithm\-Wrapper} ()} +\label{classpeoParallelAlgorithmWrapper_0e64f517afe790db467750a6980e1666} + +\item +\hypertarget{classpeoParallelAlgorithmWrapper_4b10b46b4ea2e3f66c660c15f3c98e6c}{ +void \hyperlink{classpeoParallelAlgorithmWrapper_4b10b46b4ea2e3f66c660c15f3c98e6c}{run} ()} +\label{classpeoParallelAlgorithmWrapper_4b10b46b4ea2e3f66c660c15f3c98e6c} + +\end{CompactItemize} +\subsection*{Private Attributes} +\begin{CompactItemize} +\item +\hypertarget{classpeoParallelAlgorithmWrapper_99f10723f15c63c4822dd6431b9d6d7d}{ +\hyperlink{structpeoParallelAlgorithmWrapper_1_1AbstractAlgorithm}{Abstract\-Algorithm} $\ast$ \hyperlink{classpeoParallelAlgorithmWrapper_99f10723f15c63c4822dd6431b9d6d7d}{algorithm}} +\label{classpeoParallelAlgorithmWrapper_99f10723f15c63c4822dd6431b9d6d7d} + +\end{CompactItemize} +\subsection*{Classes} +\begin{CompactItemize} +\item +struct \hyperlink{structpeoParallelAlgorithmWrapper_1_1AbstractAlgorithm}{Abstract\-Algorithm} +\item +struct \hyperlink{structpeoParallelAlgorithmWrapper_1_1Algorithm}{Algorithm} +\item +struct \hyperlink{structpeoParallelAlgorithmWrapper_1_1Algorithm_3_01AlgorithmType_00_01void_01_4}{Algorithm$<$ Algorithm\-Type, void $>$} +\end{CompactItemize} + + +\subsection{Detailed Description} + + + + +Definition at line 47 of file peo\-Parallel\-Algorithm\-Wrapper.h. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +peo\-Parallel\-Algorithm\-Wrapper.h\end{CompactItemize} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoPopEval.eps b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoPopEval.eps new file mode 100644 index 000000000..b486aceee --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoPopEval.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 243.902 +%%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.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 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 +(peoPopEval< EOT >) cw +(Service) cw +(Communicable) cw +(peoParaPopEval< EOT >) cw +(peoSeqPopEval< 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 ----- + + (peoPopEval< EOT >) 0.5 1 box + (Service) 0.5 2 box + (Communicable) 0.5 3 box + (peoParaPopEval< EOT >) 0 0 box + (peoSeqPopEval< EOT >) 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-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoPopEval.pdf b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoPopEval.pdf new file mode 100644 index 0000000000000000000000000000000000000000..4e901adc84d77287bba7bc856953196b3b3c5667 GIT binary patch literal 1423 zcmZ`(ZA@EL7)D$Lj<_ujQ-93nBuir}ANQVq(ZYgS+5!$nX=~WllzC|nP;Gn3y|<>w z78!md>;p9{K?U9TP^^)J45x|7G^p6rfXELSX331Q0CQ+F6LzHnR(}955zo+hmM5wr~9`ahF_mQI2D+$ znN@6W(jEQnkGX}}_}0ApXRqg8IfJ^lWxZW@;-%u7rzXC!FQno9hGu89E6qJ&@V%#) z{OqapqsK4Zo!OU(TqjHyW_o_;`DJNj-@&n^TG{!9??&Hva{i*-JeBjKXRh|;UU_yp zDm%H@_7={`7+!j4=^5><1E{hcv38hU^GW^uwdIimGu|xO69vVUkESU*%0K9M{nZx| zr$6p_x21J|zWn)_Q}Mv4b@J+A;VX+e{c`4+snUe}@A2qz*SMkM=8?LGk9A(!b*L_} zcf?d~?%xrZ9@sa1Y;5c!*^Rc|KDB#h;GXugMT)F*=O%;?<$Y&IJ7dw$6~ndi>+!z9 zsL(riwOslq-#XXYc&&62R5WuZo=Eiici2@5zRK`k`` zU>sQF!-5x!#3FWq_d2oUW{8O(qP^m+Fk`wNlA*B_K>;|jzU1w9P2E}rdFdyV7xs_m#Ltc6EPhFLUhPV=&Ok=(3wyDkvO4Xstce#T(JT0yC1^zY0#>6YVR|(1#R?HohCVQ~hM6=(_zjprPkP;eQ4em!ShP7; zXWV>7p`Hl0fzNm+><(ubHUG(#1kNA80{J0A#_4|!lYSxN;CW&{sy1XQLJd5mLXo>s tVS#Sd;QOB3dw*`rn`g6caEdQ-)teCyb*?CJf|ML0VvQQ0R9dTT;9uW$*+~EZ literal 0 HcmV?d00001 diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoPopEval.tex b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoPopEval.tex new file mode 100644 index 000000000..a43d26bb8 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoPopEval.tex @@ -0,0 +1,39 @@ +\hypertarget{classpeoPopEval}{ +\section{peo\-Pop\-Eval$<$ EOT $>$ Class Template Reference} +\label{classpeoPopEval}\index{peoPopEval@{peoPopEval}} +} +The {\bf \hyperlink{classpeoPopEval}{peo\-Pop\-Eval}} class provides the interface for constructing Paradis\-EO specific evaluation functors. + + +{\tt \#include $<$peo\-Pop\-Eval.h$>$} + +Inheritance diagram for peo\-Pop\-Eval$<$ EOT $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=4cm]{classpeoPopEval} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +\hypertarget{classpeoPopEval_2f208067a5e39c3b26c1234050a41e8f}{ +virtual void \hyperlink{classpeoPopEval_2f208067a5e39c3b26c1234050a41e8f}{operator()} (\bf{eo\-Pop}$<$ EOT $>$ \&\_\-\_\-pop)=0} +\label{classpeoPopEval_2f208067a5e39c3b26c1234050a41e8f} + +\begin{CompactList}\small\item\em Interface function providing the signature for constructing an evaluation functor. \item\end{CompactList}\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class EOT$>$ class peo\-Pop\-Eval$<$ EOT $>$} + +The {\bf \hyperlink{classpeoPopEval}{peo\-Pop\-Eval}} class provides the interface for constructing Paradis\-EO specific evaluation functors. + +The derived classes may be used as wrappers for {\bf \doxyref{EO}}-derived evaluation functors. In order to have an example, please refer to the implementation of the {\bf \hyperlink{classpeoSeqPopEval}{peo\-Seq\-Pop\-Eval}} and {\bf \hyperlink{classpeoParaPopEval}{peo\-Para\-Pop\-Eval}} classes. + + + +Definition at line 47 of file peo\-Pop\-Eval.h. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +peo\-Pop\-Eval.h\end{CompactItemize} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoSeqPopEval.eps b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoSeqPopEval.eps new file mode 100644 index 000000000..e8cf5fd7e --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoSeqPopEval.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 506.329 +%%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 0.9875 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 +(peoSeqPopEval< EOT >) cw +(peoPopEval< EOT >) cw +(Service) cw +(Communicable) 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 ----- + + (peoSeqPopEval< EOT >) 0 0 box + (peoPopEval< EOT >) 0 1 box + (Service) 0 2 box + (Communicable) 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-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoSeqPopEval.pdf b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoSeqPopEval.pdf new file mode 100644 index 0000000000000000000000000000000000000000..259beaa2facc6b20626a4e68e83f6836cd4e7b20 GIT binary patch literal 1382 zcmZ`(e{2(F7@jWi$CoKa62#D$Pf15Rpm*16uiYG#ZEcqgH~I_3)FHR_YkSi6=G|B5 zSVD%;m@FfcLUa{pbt91A7%@>Xf?_h3!4yJ*m0=`^3uGGDf`6E)S>pF~?J9L%(zN%y z-}Bu2KF@pAy6n#NoPh`0@!NfazzkU^x4#N%YnkU!Jd7hyAc%)?N>Pjy$T*`SMs^gC zgUDtBDprsf1IhP~yT5H6Wgk2J_u4-m()3KPtI6ji$x1L#BzU=oC*=?e~Y~KBS$Ge-{WtA=5?sG35 z+u?*q_w8CSeEE$Jo<5Ns8~MpFF@JfdgYK%8U zxOw9X{lx4M!T#&G+TUKe^1f5L*RLI#J(-xl`?>xdCc7+LnYuA|eSnKBKQ|E?=0iXK zHq&#Yb9;Al)tZf(xjm`X*UKN7-Ri$u@np273Z(}ww!ZD%m)-K#Wc<+ivo-bUnMkVp z?8yTIm*x+TR|r#=^oJ{!2Y)n%U|*^y_2AgL$g0KzD^^aMe%aglP5)l*O9Az;_a6nR z?IT~8#rj7zC?3o^O@7gIXeRWVHyc47G8KdKb#@@eC592xf`XD*FDId&C1o>9KZ1eh z+W@I6D2^dd(*=wNsd7RIAeH3qQsjUaVLwAQ12R68#N@ami5tC`WDlzs7*3h6IV$S` zWD}SMa!&+RNH-`4O!Bl7cGq1KPL;v_YbfppsNAPvsV=d1ix% z#i$%ENGvp8Ja4)8e6eZ3Y<9Ik&SuLC(;4zx?y&$$^AuHbLlvr4V7<3WZ}Y`^QAN}S z#wW#)y51wl#CWbzhN6J+CfYHLf=*4IU6{&PR3KId69J^?99|b}jL0fh1B%pvp_MZm zSfifUN?tH5$#FZeUT3c{vaE$;Su4kJg2_tiEpqVxN zXBfo^QkTFH0_Yc=Nh&A=SjcgJUA&-RHuGi}f(1+vhzs;(S+ D=XA%^ literal 0 HcmV?d00001 diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoSeqPopEval.tex b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoSeqPopEval.tex new file mode 100644 index 000000000..1fb6c32f0 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoSeqPopEval.tex @@ -0,0 +1,88 @@ +\hypertarget{classpeoSeqPopEval}{ +\section{peo\-Seq\-Pop\-Eval$<$ EOT $>$ Class Template Reference} +\label{classpeoSeqPopEval}\index{peoSeqPopEval@{peoSeqPopEval}} +} +The \hyperlink{classpeoSeqPopEval}{peo\-Seq\-Pop\-Eval} class acts only as a Paradis\-EO specific sequential evaluation functor - a wrapper for incorporating an {\bf eo\-Eval\-Func$<$ EOT $>$}-derived class as evaluation functor. + + +{\tt \#include $<$peo\-Seq\-Pop\-Eval.h$>$} + +Inheritance diagram for peo\-Seq\-Pop\-Eval$<$ EOT $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=4cm]{classpeoSeqPopEval} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +\hyperlink{classpeoSeqPopEval_a41f91ab4b2aeb325ff75feb66d4e003}{peo\-Seq\-Pop\-Eval} (\bf{eo\-Eval\-Func}$<$ EOT $>$ \&\_\-\_\-eval) +\begin{CompactList}\small\item\em Constructor function - it only sets an internal reference to point to the specified evaluation object. \item\end{CompactList}\item +void \hyperlink{classpeoSeqPopEval_b2c88b9a3ad9091949acf741844eb02f}{operator()} (\bf{eo\-Pop}$<$ EOT $>$ \&\_\-\_\-pop) +\begin{CompactList}\small\item\em Operator for evaluating all the individuals of a given population - in a sequential iterative manner. \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Attributes} +\begin{CompactItemize} +\item +\hypertarget{classpeoSeqPopEval_5465f31386c6b96bc8f7fb9393a28a2f}{ +\bf{eo\-Eval\-Func}$<$ EOT $>$ \& \hyperlink{classpeoSeqPopEval_5465f31386c6b96bc8f7fb9393a28a2f}{eval}} +\label{classpeoSeqPopEval_5465f31386c6b96bc8f7fb9393a28a2f} + +\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class EOT$>$ class peo\-Seq\-Pop\-Eval$<$ EOT $>$} + +The \hyperlink{classpeoSeqPopEval}{peo\-Seq\-Pop\-Eval} class acts only as a Paradis\-EO specific sequential evaluation functor - a wrapper for incorporating an {\bf eo\-Eval\-Func$<$ EOT $>$}-derived class as evaluation functor. + +The specified \doxyref{EO} evaluation object is applyied in an iterative manner to each individual of a specified population. + + + +Definition at line 49 of file peo\-Seq\-Pop\-Eval.h. + +\subsection{Constructor \& Destructor Documentation} +\hypertarget{classpeoSeqPopEval_a41f91ab4b2aeb325ff75feb66d4e003}{ +\index{peoSeqPopEval@{peo\-Seq\-Pop\-Eval}!peoSeqPopEval@{peoSeqPopEval}} +\index{peoSeqPopEval@{peoSeqPopEval}!peoSeqPopEval@{peo\-Seq\-Pop\-Eval}} +\subsubsection[peoSeqPopEval]{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT$>$ \hyperlink{classpeoSeqPopEval}{peo\-Seq\-Pop\-Eval}$<$ EOT $>$::\hyperlink{classpeoSeqPopEval}{peo\-Seq\-Pop\-Eval} (\bf{eo\-Eval\-Func}$<$ EOT $>$ \& {\em \_\-\_\-eval})}} +\label{classpeoSeqPopEval_a41f91ab4b2aeb325ff75feb66d4e003} + + +Constructor function - it only sets an internal reference to point to the specified evaluation object. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em eo\-Eval\-Func$<$}]EOT $>$\& \_\-\_\-eval - evaluation object to be applied for each individual of a specified population \end{description} +\end{Desc} + + +Definition at line 69 of file peo\-Seq\-Pop\-Eval.h. + +\subsection{Member Function Documentation} +\hypertarget{classpeoSeqPopEval_b2c88b9a3ad9091949acf741844eb02f}{ +\index{peoSeqPopEval@{peo\-Seq\-Pop\-Eval}!operator()@{operator()}} +\index{operator()@{operator()}!peoSeqPopEval@{peo\-Seq\-Pop\-Eval}} +\subsubsection[operator()]{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT$>$ void \hyperlink{classpeoSeqPopEval}{peo\-Seq\-Pop\-Eval}$<$ EOT $>$::operator() (\bf{eo\-Pop}$<$ EOT $>$ \& {\em \_\-\_\-pop})\hspace{0.3cm}{\tt \mbox{[}virtual\mbox{]}}}} +\label{classpeoSeqPopEval_b2c88b9a3ad9091949acf741844eb02f} + + +Operator for evaluating all the individuals of a given population - in a sequential iterative manner. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em eo\-Pop$<$}]EOT $>$\& \_\-\_\-pop - population to be evaluated. \end{description} +\end{Desc} + + +Implements \hyperlink{classpeoPopEval_2f208067a5e39c3b26c1234050a41e8f}{peo\-Pop\-Eval$<$ EOT $>$}. + +Definition at line 74 of file peo\-Seq\-Pop\-Eval.h. + +References peo\-Seq\-Pop\-Eval$<$ EOT $>$::eval. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +peo\-Seq\-Pop\-Eval.h\end{CompactItemize} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoSeqTransform.eps b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoSeqTransform.eps new file mode 100644 index 000000000..200358ca0 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoSeqTransform.eps @@ -0,0 +1,227 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 297.619 +%%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.68 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 +(peoSeqTransform< EOT >) cw +(peoTransform< EOT >) cw +(Service) cw +(eoTransform< EOT >) cw +(Communicable) cw +(eoUF< A1, R >) 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 ----- + + (peoSeqTransform< EOT >) 0.5 0 box + (peoTransform< EOT >) 0.5 1 box + (Service) 0 2 box + (eoTransform< EOT >) 1 2 box + (Communicable) 0 3 box + (eoUF< A1, R >) 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 +0 1 2 conn +solid +1 0 2 in +solid +0 0 2 out +solid +1 1 2 in +solid +0 1 2 out +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-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoSeqTransform.pdf b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoSeqTransform.pdf new file mode 100644 index 0000000000000000000000000000000000000000..4b42bd7f98f32e94dcad696ad6d60ec02b3a8088 GIT binary patch literal 1558 zcmZ`(ZA?>F7@hOn0t)HIr9D7d>1FrcLTlJ? zj5)(h$QG83KsFR-CT0uDN5U2*5~6^D3J5_oG82i2TedkqgpKT6Xknl`f9^fcd*0_f z?|Yte!gXqG1Q{v8!mmB8IgLpH0qDFUEG7m|f%XEf5Xcas$F)`)2N{5CZ4?L9&`evP zN`@c6g^A?9q(Gox|eYL)<9Xu&5o$uWZNG*iv437jnl@Fwl?_td}oyP zNtJ(emI-;$U+kyc@fnpz~ghp!x7IP*ZzD&h7WTfSI0*)eq5yOwk@ zx`@;=$rjhADi`PuGF3K{^yRUMBbUz4JsY4p@5|*S^PQFRS$E`YR-I3LrtP7icZVpU%$EG;^F-qO zd~DWdiw*r%4`)lSoeWKSw5K0$8tJmt$LG~L<6gO4p7};SDNs&T+>;GF%Wwa>!qn9= z+Yl4{E*PJlOh3`|_~_E3<1vCtc((S3f3>YaN5I5sHnym<4oE`QKoDrNd71a1uYA<&G=)d%RY%=w~t~ViShq4777Vf^a>C>mf@!7&By%Q*{h&Hb5>1M_vZF5jr`v zT;t>t3>NfEXM+CC}zgCD&5jneh}y+2{ff#j5!A_41AD*F|G^nl2TPDwUgU0) z)339v6y=F3FvZ3wKXnHWP%PxzfE%sFkd4sO#gu(TD9)o8ZgAvr{88{#qrE*!ClS$BlZ^8%?nPw9vdkLmczL=|g8HUtu=2Oc4 zlglxb)dm^#E(6?PJql610N2wrvLAoi08g^#(||uHbT^XJAV=6Y_;-w1(zJWI{rQ_Q dCq_y|FCr%1xhzL9+)5KkF)7Ew!!>DI>|b;y9d7^t literal 0 HcmV?d00001 diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoSeqTransform.tex b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoSeqTransform.tex new file mode 100644 index 000000000..723940aa1 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoSeqTransform.tex @@ -0,0 +1,111 @@ +\hypertarget{classpeoSeqTransform}{ +\section{peo\-Seq\-Transform$<$ EOT $>$ Class Template Reference} +\label{classpeoSeqTransform}\index{peoSeqTransform@{peoSeqTransform}} +} +The \hyperlink{classpeoSeqTransform}{peo\-Seq\-Transform} represent a wrapper for offering the possibility of using \doxyref{EO} derived transform operators along with the Paradis\-EO evolutionary algorithms. + + +{\tt \#include $<$peo\-Seq\-Transform.h$>$} + +Inheritance diagram for peo\-Seq\-Transform$<$ EOT $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=5cm]{classpeoSeqTransform} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +\hyperlink{classpeoSeqTransform_3b8e4ed19d9458938eb669d83a53c626}{peo\-Seq\-Transform} (\bf{eo\-Transform}$<$ EOT $>$ \&\_\-\_\-trans) +\begin{CompactList}\small\item\em Constructor function - sets an internal reference towards the specified EO-derived transform object. \item\end{CompactList}\item +void \hyperlink{classpeoSeqTransform_1ba63536abb6c4e1c369e0b7e066872e}{operator()} (\bf{eo\-Pop}$<$ EOT $>$ \&\_\-\_\-pop) +\begin{CompactList}\small\item\em Operator for applying the specified transform operators on each individual of the given population. \item\end{CompactList}\item +\hypertarget{classpeoSeqTransform_c4bf2724e9f6055f12bd169fad893be3}{ +virtual void \hyperlink{classpeoSeqTransform_c4bf2724e9f6055f12bd169fad893be3}{pack\-Data} ()} +\label{classpeoSeqTransform_c4bf2724e9f6055f12bd169fad893be3} + +\begin{CompactList}\small\item\em Interface function for providing a link with the parallel architecture of the Paradis\-EO framework. \item\end{CompactList}\item +\hypertarget{classpeoSeqTransform_24e6cf15ef230ed538031b522ddd4ae6}{ +virtual void \hyperlink{classpeoSeqTransform_24e6cf15ef230ed538031b522ddd4ae6}{unpack\-Data} ()} +\label{classpeoSeqTransform_24e6cf15ef230ed538031b522ddd4ae6} + +\begin{CompactList}\small\item\em Interface function for providing a link with the parallel architecture of the Paradis\-EO framework. \item\end{CompactList}\item +\hypertarget{classpeoSeqTransform_0294a2f9d6b44ec74d22eaceccdffc2b}{ +virtual void \hyperlink{classpeoSeqTransform_0294a2f9d6b44ec74d22eaceccdffc2b}{execute} ()} +\label{classpeoSeqTransform_0294a2f9d6b44ec74d22eaceccdffc2b} + +\begin{CompactList}\small\item\em Interface function for providing a link with the parallel architecture of the Paradis\-EO framework. \item\end{CompactList}\item +\hypertarget{classpeoSeqTransform_4861c61f9e46d83964ea8a156a9a3ee0}{ +virtual void \hyperlink{classpeoSeqTransform_4861c61f9e46d83964ea8a156a9a3ee0}{pack\-Result} ()} +\label{classpeoSeqTransform_4861c61f9e46d83964ea8a156a9a3ee0} + +\begin{CompactList}\small\item\em Interface function for providing a link with the parallel architecture of the Paradis\-EO framework. \item\end{CompactList}\item +\hypertarget{classpeoSeqTransform_5dd029fc011eb2a810ca1140025129b1}{ +virtual void \hyperlink{classpeoSeqTransform_5dd029fc011eb2a810ca1140025129b1}{unpack\-Result} ()} +\label{classpeoSeqTransform_5dd029fc011eb2a810ca1140025129b1} + +\begin{CompactList}\small\item\em Interface function for providing a link with the parallel architecture of the Paradis\-EO framework. \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Attributes} +\begin{CompactItemize} +\item +\hypertarget{classpeoSeqTransform_ad3e16c59dd6c46dfc1baf7b88af30cf}{ +\bf{eo\-Transform}$<$ EOT $>$ \& \hyperlink{classpeoSeqTransform_ad3e16c59dd6c46dfc1baf7b88af30cf}{trans}} +\label{classpeoSeqTransform_ad3e16c59dd6c46dfc1baf7b88af30cf} + +\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class EOT$>$ class peo\-Seq\-Transform$<$ EOT $>$} + +The \hyperlink{classpeoSeqTransform}{peo\-Seq\-Transform} represent a wrapper for offering the possibility of using \doxyref{EO} derived transform operators along with the Paradis\-EO evolutionary algorithms. + +A minimal set of interface functions is also provided for creating the link with the parallel architecture of the Paradis\-EO framework. + + + +Definition at line 48 of file peo\-Seq\-Transform.h. + +\subsection{Constructor \& Destructor Documentation} +\hypertarget{classpeoSeqTransform_3b8e4ed19d9458938eb669d83a53c626}{ +\index{peoSeqTransform@{peo\-Seq\-Transform}!peoSeqTransform@{peoSeqTransform}} +\index{peoSeqTransform@{peoSeqTransform}!peoSeqTransform@{peo\-Seq\-Transform}} +\subsubsection[peoSeqTransform]{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT$>$ \hyperlink{classpeoSeqTransform}{peo\-Seq\-Transform}$<$ EOT $>$::\hyperlink{classpeoSeqTransform}{peo\-Seq\-Transform} (\bf{eo\-Transform}$<$ EOT $>$ \& {\em \_\-\_\-trans})}} +\label{classpeoSeqTransform_3b8e4ed19d9458938eb669d83a53c626} + + +Constructor function - sets an internal reference towards the specified EO-derived transform object. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em eo\-Transform$<$}]EOT $>$\& \_\-\_\-trans - EO-derived transform object including crossover and mutation operators. \end{description} +\end{Desc} + + +Definition at line 83 of file peo\-Seq\-Transform.h. + +\subsection{Member Function Documentation} +\hypertarget{classpeoSeqTransform_1ba63536abb6c4e1c369e0b7e066872e}{ +\index{peoSeqTransform@{peo\-Seq\-Transform}!operator()@{operator()}} +\index{operator()@{operator()}!peoSeqTransform@{peo\-Seq\-Transform}} +\subsubsection[operator()]{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT$>$ void \hyperlink{classpeoSeqTransform}{peo\-Seq\-Transform}$<$ EOT $>$::operator() (\bf{eo\-Pop}$<$ EOT $>$ \& {\em \_\-\_\-pop})}} +\label{classpeoSeqTransform_1ba63536abb6c4e1c369e0b7e066872e} + + +Operator for applying the specified transform operators on each individual of the given population. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em eo\-Pop$<$}]EOT $>$\& \_\-\_\-pop - population to be transformed by applying the crossover and mutation operators. \end{description} +\end{Desc} + + +Definition at line 88 of file peo\-Seq\-Transform.h. + +References peo\-Seq\-Transform$<$ EOT $>$::trans. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +peo\-Seq\-Transform.h\end{CompactItemize} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoSyncIslandMig.eps b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoSyncIslandMig.eps new file mode 100644 index 000000000..6f0fb127a --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoSyncIslandMig.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 231.214 +%%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.1625 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 +(peoSyncIslandMig< EOT >) cw +(Cooperative) cw +(eoUpdater) cw +(Communicable) cw +(eoF< 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 ----- + + (peoSyncIslandMig< EOT >) 0.5 0 box + (Cooperative) 0 1 box + (eoUpdater) 1 1 box + (Communicable) 0 2 box + (eoF< void >) 1 2 box + (eoFunctorBase) 1 3 box + +% ----- relations ----- + +solid +0 0.5 0 out +solid +0 1 1 conn +solid +1 0 1 in +solid +0 0 1 out +solid +1 1 1 in +solid +0 1 1 out +solid +1 0 2 in +solid +1 1 2 in +solid +0 1 2 out +solid +1 1 3 in diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoSyncIslandMig.pdf b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoSyncIslandMig.pdf new file mode 100644 index 0000000000000000000000000000000000000000..7b727b2087e6a5e50a178d332d80a37b75f2f96e GIT binary patch literal 1670 zcmZ`)dsGxv7>~q`4&j4|U1DWk+XbPYaZ! zh8S=_ID}@%$yZq*KEPM3dhDR3CV{2+Ks%aNM_$K#)Vi#72Nwyo`DbQ+-~IjO`@Z}8 z?uaxh^>i{U920%lUA`5Q0Rk|YOR*U<@C0Zv^4TB)Ar!7QnR&3FDEC#Dvti<$pi}cV zd9IB%?P;#L6qMRQdCWcUdT4E5S3dKI{gB_>mAC#WJmi1Kd%bI4_RZ_1YgV_6@>o;d z$lcjk>SOg}npB=$Ri8Af?agTif(zs&%)u_lZ{5z@H)c(CZ9J9KXFPVIJz=63zodPs zqo}UFWq-o{yr`Y+vxxq4qk2}4%dYk@KmZ%FDyL00%uK2GqyL`gEB_UJ0N?UeN&6f7;Pg)}>v<3$3iJ-s^rigN$)uDxcHb|!Sh#82x;L7AsO}h}qe%-}$4oQs&4|ul z67j=nYuB>wt!`MyY+HQr-96|24xG@DSN#6<^%WjPZ(bz}wiRvi2FT1RK7;ho~cQ%VX->RWrD#o+cLdJ_CAxOU(!m0)g2 zI%I8K?sAB0Xd}cEp}|DQFgB1*ps$j6qW&yf>n?d)ZA3^3DwPvrFq)S7zZUDCqJ}aK79R9(ionk zNd%-)=@u4haGwK|9202Nkjg+&gV9JVa(GmDbq8Z;4hn6+b*3E1O{bU~+A@$RE}$5$ zwPy0dRtQz2Zx2=_8B##4HdytL4T;lg!0c>><2gNRTF!$=QWi!?#Hg+42;xnQMTJ@) zqKc9bgq$RZNRlKYqzV*IWDNfo(wTTO42d<<95Kcv_kqXr4r!ct`nfED-AdzXF z!sHUPEyFQX_%mFRd=5rPpTm{^hs(3H$qZTa9{{-4lm}700H+uR*-zMQfX7?17$9sE xnvHlBNDrAS^0)ik>`kh@0{k9`uKJ0eMKT2Eay-rQ15G5uB??R=ic3;s{{k%CSTO(q literal 0 HcmV?d00001 diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoSyncIslandMig.tex b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoSyncIslandMig.tex new file mode 100644 index 000000000..9a94013a2 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoSyncIslandMig.tex @@ -0,0 +1,227 @@ +\hypertarget{classpeoSyncIslandMig}{ +\section{peo\-Sync\-Island\-Mig$<$ EOT $>$ Class Template Reference} +\label{classpeoSyncIslandMig}\index{peoSyncIslandMig@{peoSyncIslandMig}} +} +The \hyperlink{classpeoSyncIslandMig}{peo\-Sync\-Island\-Mig} class offers the elementary basis for implementating a synchronous island migration model - requires the specification of several basic parameters, i.e. + + +{\tt \#include $<$peo\-Sync\-Island\-Mig.h$>$} + +Inheritance diagram for peo\-Sync\-Island\-Mig$<$ EOT $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=4cm]{classpeoSyncIslandMig} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +\hyperlink{classpeoSyncIslandMig_96b7b6de20b5e318a8b1cde76842305c}{peo\-Sync\-Island\-Mig} (unsigned \_\-\_\-frequency, \bf{eo\-Select}$<$ EOT $>$ \&\_\-\_\-select, \bf{eo\-Replacement}$<$ EOT $>$ \&\_\-\_\-replace, \hyperlink{classTopology}{Topology} \&\_\-\_\-topology, \bf{eo\-Pop}$<$ EOT $>$ \&\_\-\_\-source, \bf{eo\-Pop}$<$ EOT $>$ \&\_\-\_\-destination) +\begin{CompactList}\small\item\em Constructor for the \hyperlink{classpeoSyncIslandMig}{peo\-Sync\-Island\-Mig} class; the characteristics of the migration model are defined through the specified parameters - out of the box objects provided in \doxyref{EO}, etc., or custom, derived objects may be passed as parameters. \item\end{CompactList}\item +void \hyperlink{classpeoSyncIslandMig_178476fd276f78b73607b33d19522c36}{operator()} () +\begin{CompactList}\small\item\em \doxyref{Function} operator to be called as checkpoint for performing the migration step. \item\end{CompactList}\item +\hypertarget{classpeoSyncIslandMig_e334188141eeba9f7b78bc6716f819ad}{ +void \hyperlink{classpeoSyncIslandMig_e334188141eeba9f7b78bc6716f819ad}{pack} ()} +\label{classpeoSyncIslandMig_e334188141eeba9f7b78bc6716f819ad} + +\begin{CompactList}\small\item\em Auxiliary function dealing with sending the emigrant individuals. There is no need to explicitly call the function. \item\end{CompactList}\item +\hypertarget{classpeoSyncIslandMig_85777bd9f709c5d4107799e8619948d1}{ +void \hyperlink{classpeoSyncIslandMig_85777bd9f709c5d4107799e8619948d1}{unpack} ()} +\label{classpeoSyncIslandMig_85777bd9f709c5d4107799e8619948d1} + +\begin{CompactList}\small\item\em Auxiliary function dealing with receiving immigrant individuals. There is no need to explicitly call the function. \item\end{CompactList}\item +\hypertarget{classpeoSyncIslandMig_8c427b3f91c19ff85f86930366b96008}{ +void \hyperlink{classpeoSyncIslandMig_8c427b3f91c19ff85f86930366b96008}{notify\-Sending} ()} +\label{classpeoSyncIslandMig_8c427b3f91c19ff85f86930366b96008} + +\begin{CompactList}\small\item\em Auxiliary function dealing with migration notifications. There is no need to explicitly call the function. \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Member Functions} +\begin{CompactItemize} +\item +\hypertarget{classpeoSyncIslandMig_4c8416e3acce1a6e4c3b0a442d94b063}{ +void \hyperlink{classpeoSyncIslandMig_4c8416e3acce1a6e4c3b0a442d94b063}{emigrate} ()} +\label{classpeoSyncIslandMig_4c8416e3acce1a6e4c3b0a442d94b063} + +\item +\hypertarget{classpeoSyncIslandMig_38dd72312a3d16808af1aa7beb9ed4a7}{ +void \hyperlink{classpeoSyncIslandMig_38dd72312a3d16808af1aa7beb9ed4a7}{immigrate} ()} +\label{classpeoSyncIslandMig_38dd72312a3d16808af1aa7beb9ed4a7} + +\end{CompactItemize} +\subsection*{Private Attributes} +\begin{CompactItemize} +\item +\hypertarget{classpeoSyncIslandMig_2d8ae9104376f3e073e0b250d9b425a2}{ +\bf{eo\-Periodic\-Continue}$<$ EOT $>$ \hyperlink{classpeoSyncIslandMig_2d8ae9104376f3e073e0b250d9b425a2}{cont}} +\label{classpeoSyncIslandMig_2d8ae9104376f3e073e0b250d9b425a2} + +\item +\hypertarget{classpeoSyncIslandMig_5e9c9f5f65d6418ad46e647ee1804a3d}{ +\bf{eo\-Select}$<$ EOT $>$ \& \hyperlink{classpeoSyncIslandMig_5e9c9f5f65d6418ad46e647ee1804a3d}{select}} +\label{classpeoSyncIslandMig_5e9c9f5f65d6418ad46e647ee1804a3d} + +\item +\hypertarget{classpeoSyncIslandMig_cb6d2d909503a86415912900d6e1d891}{ +\bf{eo\-Replacement}$<$ EOT $>$ \& \hyperlink{classpeoSyncIslandMig_cb6d2d909503a86415912900d6e1d891}{replace}} +\label{classpeoSyncIslandMig_cb6d2d909503a86415912900d6e1d891} + +\item +\hypertarget{classpeoSyncIslandMig_ebfe6edb6be16d46bf6d71cb233fcace}{ +\hyperlink{classTopology}{Topology} \& \hyperlink{classpeoSyncIslandMig_ebfe6edb6be16d46bf6d71cb233fcace}{topology}} +\label{classpeoSyncIslandMig_ebfe6edb6be16d46bf6d71cb233fcace} + +\item +\hypertarget{classpeoSyncIslandMig_33fde1f09faf2a3f772d8b8f6a2615c6}{ +\bf{eo\-Pop}$<$ EOT $>$ \& \hyperlink{classpeoSyncIslandMig_33fde1f09faf2a3f772d8b8f6a2615c6}{source}} +\label{classpeoSyncIslandMig_33fde1f09faf2a3f772d8b8f6a2615c6} + +\item +\hypertarget{classpeoSyncIslandMig_a9bf4612c7c04da6cf69245c6617e6a6}{ +\bf{eo\-Pop}$<$ EOT $>$ \& \hyperlink{classpeoSyncIslandMig_a9bf4612c7c04da6cf69245c6617e6a6}{destination}} +\label{classpeoSyncIslandMig_a9bf4612c7c04da6cf69245c6617e6a6} + +\item +\hypertarget{classpeoSyncIslandMig_088c1623f32668dcd3683fceff9426c3}{ +std::queue$<$ \bf{eo\-Pop}$<$ EOT $>$ $>$ \hyperlink{classpeoSyncIslandMig_088c1623f32668dcd3683fceff9426c3}{imm}} +\label{classpeoSyncIslandMig_088c1623f32668dcd3683fceff9426c3} + +\item +\hypertarget{classpeoSyncIslandMig_11d6dd3e4a6db710433f501af0988322}{ +std::queue$<$ \bf{eo\-Pop}$<$ EOT $>$ $>$ \hyperlink{classpeoSyncIslandMig_11d6dd3e4a6db710433f501af0988322}{em}} +\label{classpeoSyncIslandMig_11d6dd3e4a6db710433f501af0988322} + +\item +\hypertarget{classpeoSyncIslandMig_2f7ca18d67ab7fb47a9851ab3179eb7d}{ +std::queue$<$ \hyperlink{classCooperative}{Cooperative} $\ast$ $>$ \hyperlink{classpeoSyncIslandMig_2f7ca18d67ab7fb47a9851ab3179eb7d}{coop\_\-em}} +\label{classpeoSyncIslandMig_2f7ca18d67ab7fb47a9851ab3179eb7d} + +\item +\hypertarget{classpeoSyncIslandMig_91e0e1ea59c2a6a66eb496bddd60a18f}{ +sem\_\-t \hyperlink{classpeoSyncIslandMig_91e0e1ea59c2a6a66eb496bddd60a18f}{sync}} +\label{classpeoSyncIslandMig_91e0e1ea59c2a6a66eb496bddd60a18f} + +\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class EOT$>$ class peo\-Sync\-Island\-Mig$<$ EOT $>$} + +The \hyperlink{classpeoSyncIslandMig}{peo\-Sync\-Island\-Mig} class offers the elementary basis for implementating a synchronous island migration model - requires the specification of several basic parameters, i.e. + +frequency of the migrations, selection and replacement strategies, a topological model and the source and destination population for the migrating individuals. The main difference as opposed to the asynchronous migration model is the synchronization step performed after selecting and sending the emigrant individuals. + +The migration operator is called at the end of each generation of an evolutionary algorithms as a checkpoint object - the following code exposes the structure of a classic evolutionary algorithm: + +\begin{TabularC}{2} +\hline +{\bf do} \{ ~ &~ \\\hline +~~~~~~~~ select( population, offsprings ); ~ &// select the offsprings from the current population \\\hline +~~~~~~~~ transform( offsprings ); ~ &// crossover and mutation operators are applied on the selected offsprings \\\hline +~~~~~~~~ evaluate( offsprings ); ~ &// evaluation step of the resulting offspring \\\hline +~~~~~~~~ replace( population, offsprings ); ~ &// replace the individuals in the current population whith individuals from the offspring population, according to a specified replacement strategy \\\hline +\} {\bf while} ( ea\-Checkpoint\-Continue( population ) ); ~ &// checkpoint operators are applied on the current population, including the migration operator, if any specified \\\hline +\end{TabularC} + + +Constructing a synchronous island migration model requires having defined (1) a topological migration model, (2) the control parameters of the migration process, (3) a checkpoint object associated with an evolutionary algorithm, and (4) an owner object must be set. The owner object must be derived from the {\bf \hyperlink{classRunner}{Runner}} class (for example a \hyperlink{classpeoEA}{peo\-EA} object represents a possible owner). A simple example is offered bellow: + +\begin{enumerate} +\item topological model to be followed when performing migrations: \par + \par + \begin{TabularC}{2} +\hline +\hyperlink{classRingTopology}{Ring\-Topology} mig\-Topology; ~ &// a simple ring topological model - each island communicates with two other islands \\\hline +\end{TabularC} + + +\item the continuation criterion, selection and replacement strategy etc. are defined: \par + \par + \begin{TabularC}{2} +\hline +eo\-Pop$<$ EOT $>$ population( POP\_\-SIZE, pop\-Initializer ); ~ &// population of individuals to be used for the evolutionary algorithm \\\hline +~ &~ \\\hline +eo\-Random\-Select$<$ EOT $>$ mig\-Select\-Strategy; ~ &// selection strategy - in this case a random selection is applied \\\hline +eo\-Select\-Number$<$ EOT $>$ mig\-Select( mig\-Select\-Strategy, MIG\_\-SIZE ); ~ &// number of individuals to be selected using the specified strategy \\\hline +eo\-Plus\-Replacement$<$ EOT $>$ mig\-Replace; ~ &// immigration strategy - the worse individuals in the destination population are replaced by the immigrant individuals \\\hline +~ &~ \\\hline +peo\-Sync\-Island\-Mig$<$ EOT $>$ sync\-Migration( \par + ~~~~~~~~ MIG\_\-FREQ, mig\-Select, mig\-Replace, mig\-Topology, \par + ~~~~~~~~ population, population \par + ); ~ &// synchronous migration object - the emigrant individuals are selected from the same from population in which the immigrant individuals are being integrated \\\hline +\end{TabularC} + + +\item creation of a checkpoint object as part of the definition of an evolutionary algoritm (details of th EA not given as being out of scope): \par + \par + \begin{TabularC}{2} +\hline +... ~ &~ \\\hline +eo\-Gen\-Continue$<$ EOT $>$ ea\-Cont( NUM\_\-GEN ); ~ &// the evolutionary algorithm will stop after NUM\_\-GEN generations \\\hline +eo\-Check\-Point$<$ EOT $>$ ea\-Checkpoint\-Continue( ea\-Cont ); ~ &// number of individuals to be selected using the specified strategy \\\hline +... ~ &~ \\\hline +ea\-Checkpoint\-Continue.add( sync\-Migration ); ~ &// adding the migration operator as checkpoint element \\\hline +... ~ &~ \\\hline +\end{TabularC} + + +\item definition of an owner evolutionary algorithm (an object inheriting the {\bf \hyperlink{classRunner}{Runner}} class): \par + \par + \begin{TabularC}{2} +\hline +peo\-EA$<$ EOT $>$ ea\-Alg( ea\-Checkpoint\-Continue, ea\-Pop\-Eval, ea\-Select, ea\-Transform, ea\-Replace); ~ &// evolutionary algorithm having as checkpoint the ea\-Checkpoint\-Continue object defined above \\\hline +sync\-Migration.set\-Owner( ea\-Alg ); ~ &// setting the evolutionary algorithm as owner of the migration object \\\hline +ea\-Alg( population ); ~ &// applying the evolutionary algorithm on a given population \\\hline +\end{TabularC} +\end{enumerate} + + +The source and the destination population for the migration object were specified as being the same, in step no. 2, as we are usually interested in selecting the emigrants and integrating the immigrant individuals from and in, respectively, one unique population, iteratively evolved by an evolutionary algorithm. There is no restriction in having two distinct populations as source and destination for the emigrant and immigrant individuals respectively. + +The above steps only create a synchronous migration object associated to an evolutionary algorithm. The creation of several islands requires the reiteration of the steps 2 through 4 for creating distinct algorithms, with distinct populations and the associated distinctly parametrized migration objects. The interconnecting element is the underlying topology, defined at step 1 (the same C++ mig\-Topology object has to be passed as parameter for all the migration objects, in order to interconnect them). + + + +Definition at line 142 of file peo\-Sync\-Island\-Mig.h. + +\subsection{Constructor \& Destructor Documentation} +\hypertarget{classpeoSyncIslandMig_96b7b6de20b5e318a8b1cde76842305c}{ +\index{peoSyncIslandMig@{peo\-Sync\-Island\-Mig}!peoSyncIslandMig@{peoSyncIslandMig}} +\index{peoSyncIslandMig@{peoSyncIslandMig}!peoSyncIslandMig@{peo\-Sync\-Island\-Mig}} +\subsubsection[peoSyncIslandMig]{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT$>$ \hyperlink{classpeoSyncIslandMig}{peo\-Sync\-Island\-Mig}$<$ EOT $>$::\hyperlink{classpeoSyncIslandMig}{peo\-Sync\-Island\-Mig} (unsigned {\em \_\-\_\-frequency}, \bf{eo\-Select}$<$ EOT $>$ \& {\em \_\-\_\-select}, \bf{eo\-Replacement}$<$ EOT $>$ \& {\em \_\-\_\-replace}, \hyperlink{classTopology}{Topology} \& {\em \_\-\_\-topology}, \bf{eo\-Pop}$<$ EOT $>$ \& {\em \_\-\_\-source}, \bf{eo\-Pop}$<$ EOT $>$ \& {\em \_\-\_\-destination})}} +\label{classpeoSyncIslandMig_96b7b6de20b5e318a8b1cde76842305c} + + +Constructor for the \hyperlink{classpeoSyncIslandMig}{peo\-Sync\-Island\-Mig} class; the characteristics of the migration model are defined through the specified parameters - out of the box objects provided in \doxyref{EO}, etc., or custom, derived objects may be passed as parameters. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em unsigned}]\_\-\_\-frequency - frequency of the migrations - the migrations occur periodically; \item[{\em eo\-Select$<$}]EOT $>$\& \_\-\_\-select - selection strategy to be applied for constructing a list of emigrant individuals out of the source population; \item[{\em eo\-Replacement$<$}]EOT $>$\& \_\-\_\-replace - replacement strategy used for integrating the immigrant individuals in the destination population; \item[{\em Topology\&}]\_\-\_\-topology - topological model to be followed when performing migrations; \item[{\em eo\-Pop$<$}]EOT $>$\& \_\-\_\-source - source population from which the emigrant individuals are selected; \item[{\em eo\-Pop$<$}]EOT $>$\& \_\-\_\-destination - destination population in which the immigrant population are integrated. \end{description} +\end{Desc} + + +Definition at line 206 of file peo\-Sync\-Island\-Mig.h. + +References Topology::add(), and peo\-Sync\-Island\-Mig$<$ EOT $>$::sync. + +\subsection{Member Function Documentation} +\hypertarget{classpeoSyncIslandMig_178476fd276f78b73607b33d19522c36}{ +\index{peoSyncIslandMig@{peo\-Sync\-Island\-Mig}!operator()@{operator()}} +\index{operator()@{operator()}!peoSyncIslandMig@{peo\-Sync\-Island\-Mig}} +\subsubsection[operator()]{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT$>$ void \hyperlink{classpeoSyncIslandMig}{peo\-Sync\-Island\-Mig}$<$ EOT $>$::operator() ()\hspace{0.3cm}{\tt \mbox{[}virtual\mbox{]}}}} +\label{classpeoSyncIslandMig_178476fd276f78b73607b33d19522c36} + + +\doxyref{Function} operator to be called as checkpoint for performing the migration step. + +The emigrant individuals are selected from the source population and sent to the next island (defined by the topology object) while the immigrant individuals are integrated in the destination population. There is no need to explicitly call the function - the wrapper checkpoint object (please refer to the above example) will perform the call when required. + +Implements \bf{eo\-F$<$ void $>$}. + +Definition at line 280 of file peo\-Sync\-Island\-Mig.h. + +References peo\-Sync\-Island\-Mig$<$ EOT $>$::cont, peo\-Sync\-Island\-Mig$<$ EOT $>$::emigrate(), Cooperative::get\-Owner(), peo\-Sync\-Island\-Mig$<$ EOT $>$::immigrate(), Thread::set\-Active(), peo\-Sync\-Island\-Mig$<$ EOT $>$::source, Communicable::stop(), and peo\-Sync\-Island\-Mig$<$ EOT $>$::sync. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +peo\-Sync\-Island\-Mig.h\end{CompactItemize} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoSyncMultiStart.eps b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoSyncMultiStart.eps new file mode 100644 index 000000000..6a97a65f8 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoSyncMultiStart.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 232.558 +%%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.15 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 +(peoSyncMultiStart< EOT >) cw +(Service) cw +(eoUpdater) cw +(Communicable) cw +(eoF< 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 ----- + + (peoSyncMultiStart< EOT >) 0.5 0 box + (Service) 0 1 box + (eoUpdater) 1 1 box + (Communicable) 0 2 box + (eoF< void >) 1 2 box + (eoFunctorBase) 1 3 box + +% ----- relations ----- + +solid +0 0.5 0 out +solid +0 1 1 conn +solid +1 0 1 in +solid +0 0 1 out +solid +1 1 1 in +solid +0 1 1 out +solid +1 0 2 in +solid +1 1 2 in +solid +0 1 2 out +solid +1 1 3 in diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoSyncMultiStart.pdf b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoSyncMultiStart.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a091e904a9661e0f234420d0e7b2cd0bf3c3b585 GIT binary patch literal 1510 zcmZ`(e@q)y9G{Nqyv;e#Am~CKnZ*KwyDRh;DU7jF>_*pmZDv?)?9o0-S?S^3H53TC zz!HSvkYO?xB|$PBfz=Ef6^YX*jBRdi!q~4Mk_aknjwxUvTc*B)76kPExqF}Q`+VN_ z$LF2Mpw=Xj$tjrV>~9UNm=q9z$uGiGDm)ju9eg2>A%wy;P8SbZfNNYd57p4d*kMKn z#_=qqi!tweKGOyF5V84->BPW|z^R`nrydJSKmI~RLfzo4N4x4Gx=x+!?KIBZ-JORI zod4iJ?D~Tme~N!>m%gPjbM|`IHQ&9to}M26!0*!GCvIu`YuAiYpOsid)S9}e>@B9* zB5@q3ZQHswJS`B@zV~#6tNZGR<-whng z?XSss@=67LBQB17cIMUIms{VMjVycQ$2i@&lJQTiy6W%!xoW-D*nBOvQ+%dxGdp&& zsAF>bMQi;;)70m&jiayKdHnK`Oa0S^b%Ty0EmyWz`NMwlO_mZlb*;wZ;pT`pGh@b8 z_Q;B;x2sY!FC>SbNErRt^6gt(v#38`_Ryi1YPWrde`B0hQtkFV$(6^RJ7%;txUi1! zeToyxq)oPGhPUbMHH}lMXzHovhlkr=Z+=nfg>HLr*62&{hu{j~ovM&vK`3>}I;OG` zh#P1J#C6c_q_Y?=FcT;&B?ur%kt9oH77WE%=;lF+;4ciPAjf!E8|0Al3@l?aLf(uc zZvxx|y*%2U?d5ZfJaQjUE-*9$ Class Template Reference} +\label{classpeoSyncMultiStart}\index{peoSyncMultiStart@{peoSyncMultiStart}} +} +The \hyperlink{classpeoSyncMultiStart}{peo\-Sync\-Multi\-Start} class provides the basis for implementing the synchronous multi-start model, for launching several solution-based algorithms in parallel on a specified initial population. + + +{\tt \#include $<$peo\-Sync\-Multi\-Start.h$>$} + +Inheritance diagram for peo\-Sync\-Multi\-Start$<$ EOT $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=4cm]{classpeoSyncMultiStart} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +\hyperlink{classpeoSyncMultiStart_d29f94aad3c1f443bfffc8b6aee0704c}{peo\-Sync\-Multi\-Start} (\bf{eo\-Continue}$<$ EOT $>$ \&\_\-\_\-cont, \bf{eo\-Select}$<$ EOT $>$ \&\_\-\_\-select, \bf{eo\-Replacement}$<$ EOT $>$ \&\_\-\_\-replace, \bf{mo\-Algo}$<$ EOT $>$ \&\_\-\_\-ls, \bf{eo\-Pop}$<$ EOT $>$ \&\_\-\_\-pop) +\begin{CompactList}\small\item\em Constructor function - several simple parameters are required for defining the characteristics of the multi-start model. \item\end{CompactList}\item +void \hyperlink{classpeoSyncMultiStart_76385b33fe514f91cb83f0fbecbeb3c2}{operator()} () +\begin{CompactList}\small\item\em Operator which synchronously executes the specified algorithm on the individuals selected from the initial population. \item\end{CompactList}\item +void \hyperlink{classpeoSyncMultiStart_8becfab1922b64708dca5a53e2932a5a}{pack\-Data} () +\begin{CompactList}\small\item\em Auxiliary function for transferring data between the process requesting the synchronous execution of the specified algorithm and the process which actually executes the algorithm. \item\end{CompactList}\item +void \hyperlink{classpeoSyncMultiStart_2903a441b77cded266b5fb651e17a5b5}{unpack\-Data} () +\begin{CompactList}\small\item\em Auxiliary function for transferring data between the process requesting the synchronous execution of the specified algorithm and the process which actually executes the algorithm. \item\end{CompactList}\item +void \hyperlink{classpeoSyncMultiStart_a4d1c2943c290de540800087b54dc49b}{execute} () +\begin{CompactList}\small\item\em Auxiliary function for actually executing the specified algorithm on one assigned individual. \item\end{CompactList}\item +void \hyperlink{classpeoSyncMultiStart_6c48eb0dae741cff7203b65e226f9616}{pack\-Result} () +\begin{CompactList}\small\item\em Auxiliary function for transferring data between the process requesting the synchronous execution of the specified algorithm and the process which actually executes the algorithm. \item\end{CompactList}\item +void \hyperlink{classpeoSyncMultiStart_c3cbd1f10a89d1915c5ccf82a2c34a1d}{unpack\-Result} () +\begin{CompactList}\small\item\em Auxiliary function for transferring data between the process requesting the synchronous execution of the specified algorithm and the process which actually executes the algorithm. \item\end{CompactList}\item +void \hyperlink{classpeoSyncMultiStart_32ec0d01d3fd8a9932abd68f4781fc94}{notify\-Sending\-Data} () +\begin{CompactList}\small\item\em Auxiliary function for notifications between the process requesting the synchronous multi-start execution and the processes that performs the actual execution phase. \item\end{CompactList}\item +void \hyperlink{classpeoSyncMultiStart_fc90282cc4e93cdea8f82fd52dd78fb0}{notify\-Sending\-All\-Resource\-Requests} () +\begin{CompactList}\small\item\em Auxiliary function for notifications between the process requesting the synchronous multi-start execution and the processes that performs the actual execution phase. \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Attributes} +\begin{CompactItemize} +\item +\hypertarget{classpeoSyncMultiStart_43f4fa9b125baef6fc8b968dfd16f437}{ +\bf{eo\-Continue}$<$ EOT $>$ \& \hyperlink{classpeoSyncMultiStart_43f4fa9b125baef6fc8b968dfd16f437}{cont}} +\label{classpeoSyncMultiStart_43f4fa9b125baef6fc8b968dfd16f437} + +\item +\hypertarget{classpeoSyncMultiStart_8fc9a3d046023ddd077defec3c23ab3b}{ +\bf{eo\-Select}$<$ EOT $>$ \& \hyperlink{classpeoSyncMultiStart_8fc9a3d046023ddd077defec3c23ab3b}{select}} +\label{classpeoSyncMultiStart_8fc9a3d046023ddd077defec3c23ab3b} + +\item +\hypertarget{classpeoSyncMultiStart_a375ccea98e9bf2a0854dac27df4522f}{ +\bf{eo\-Replacement}$<$ EOT $>$ \& \hyperlink{classpeoSyncMultiStart_a375ccea98e9bf2a0854dac27df4522f}{replace}} +\label{classpeoSyncMultiStart_a375ccea98e9bf2a0854dac27df4522f} + +\item +\hypertarget{classpeoSyncMultiStart_4d317966de767dcc87eee0286ea7f95d}{ +\bf{mo\-Algo}$<$ EOT $>$ \& \hyperlink{classpeoSyncMultiStart_4d317966de767dcc87eee0286ea7f95d}{ls}} +\label{classpeoSyncMultiStart_4d317966de767dcc87eee0286ea7f95d} + +\item +\hypertarget{classpeoSyncMultiStart_391178bd6b8a97a08ab4e345f070e967}{ +\bf{eo\-Pop}$<$ EOT $>$ \& \hyperlink{classpeoSyncMultiStart_391178bd6b8a97a08ab4e345f070e967}{pop}} +\label{classpeoSyncMultiStart_391178bd6b8a97a08ab4e345f070e967} + +\item +\hypertarget{classpeoSyncMultiStart_dbcc1a069ec72ecd8d40c392640d84b3}{ +\bf{eo\-Pop}$<$ EOT $>$ \hyperlink{classpeoSyncMultiStart_dbcc1a069ec72ecd8d40c392640d84b3}{sel}} +\label{classpeoSyncMultiStart_dbcc1a069ec72ecd8d40c392640d84b3} + +\item +\hypertarget{classpeoSyncMultiStart_ca10f6d258105e3c4f0d1660db5b7679}{ +\bf{eo\-Pop}$<$ EOT $>$ \hyperlink{classpeoSyncMultiStart_ca10f6d258105e3c4f0d1660db5b7679}{impr\_\-sel}} +\label{classpeoSyncMultiStart_ca10f6d258105e3c4f0d1660db5b7679} + +\item +\hypertarget{classpeoSyncMultiStart_2c2ebe46470d1425f0409897deab435b}{ +EOT \hyperlink{classpeoSyncMultiStart_2c2ebe46470d1425f0409897deab435b}{sol}} +\label{classpeoSyncMultiStart_2c2ebe46470d1425f0409897deab435b} + +\item +\hypertarget{classpeoSyncMultiStart_64191ef79b7b589964ac9c3e23ae6718}{ +unsigned \hyperlink{classpeoSyncMultiStart_64191ef79b7b589964ac9c3e23ae6718}{idx}} +\label{classpeoSyncMultiStart_64191ef79b7b589964ac9c3e23ae6718} + +\item +\hypertarget{classpeoSyncMultiStart_773eb9097550d9444f25ca8f48997a30}{ +unsigned \hyperlink{classpeoSyncMultiStart_773eb9097550d9444f25ca8f48997a30}{num\_\-term}} +\label{classpeoSyncMultiStart_773eb9097550d9444f25ca8f48997a30} + +\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class EOT$>$ class peo\-Sync\-Multi\-Start$<$ EOT $>$} + +The \hyperlink{classpeoSyncMultiStart}{peo\-Sync\-Multi\-Start} class provides the basis for implementing the synchronous multi-start model, for launching several solution-based algorithms in parallel on a specified initial population. + +As a simple example, several hill climbing algorithms may be synchronously launched on the specified population, each algorithm acting upon one individual only, the final result being integrated back in the population. A \hyperlink{classpeoSyncMultiStart}{peo\-Sync\-Multi\-Start} object can be specified as checkpoint object for a classic Paradis\-EO evolutionary algorithm thus allowing for simple hybridization schemes which combine the evolutionary approach with a local search approach, for example, executed at the end of each generation. + + + +Definition at line 64 of file peo\-Sync\-Multi\-Start.h. + +\subsection{Constructor \& Destructor Documentation} +\hypertarget{classpeoSyncMultiStart_d29f94aad3c1f443bfffc8b6aee0704c}{ +\index{peoSyncMultiStart@{peo\-Sync\-Multi\-Start}!peoSyncMultiStart@{peoSyncMultiStart}} +\index{peoSyncMultiStart@{peoSyncMultiStart}!peoSyncMultiStart@{peo\-Sync\-Multi\-Start}} +\subsubsection[peoSyncMultiStart]{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT$>$ \hyperlink{classpeoSyncMultiStart}{peo\-Sync\-Multi\-Start}$<$ EOT $>$::\hyperlink{classpeoSyncMultiStart}{peo\-Sync\-Multi\-Start} (\bf{eo\-Continue}$<$ EOT $>$ \& {\em \_\-\_\-cont}, \bf{eo\-Select}$<$ EOT $>$ \& {\em \_\-\_\-select}, \bf{eo\-Replacement}$<$ EOT $>$ \& {\em \_\-\_\-replace}, \bf{mo\-Algo}$<$ EOT $>$ \& {\em \_\-\_\-ls}, \bf{eo\-Pop}$<$ EOT $>$ \& {\em \_\-\_\-pop})}} +\label{classpeoSyncMultiStart_d29f94aad3c1f443bfffc8b6aee0704c} + + +Constructor function - several simple parameters are required for defining the characteristics of the multi-start model. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em eo\-Continue$<$}]EOT $>$\& \_\-\_\-cont - defined for including further functionality - no semantics associated at this time; \item[{\em eo\-Select$<$}]EOT $>$\& \_\-\_\-select - selection strategy for obtaining a subset of the initial population on which to apply the specified algorithm; \item[{\em eo\-Replacement$<$}]EOT $>$\& \_\-\_\-replace - replacement strategy for integrating the resulting individuals in the initial population; \item[{\em mo\-Algo$<$}]EOT $>$\& \_\-\_\-ls - algorithm to be applied on each of the selected individuals - a {\bf mo\-Algo$<$ EOT $>$}-derived object must be specified; \item[{\em eo\-Pop$<$}]EOT $>$\& \_\-\_\-pop - the initial population from which the individuals are selected for applying the specified algorithm. \end{description} +\end{Desc} + + +Definition at line 134 of file peo\-Sync\-Multi\-Start.h. + +\subsection{Member Function Documentation} +\hypertarget{classpeoSyncMultiStart_76385b33fe514f91cb83f0fbecbeb3c2}{ +\index{peoSyncMultiStart@{peo\-Sync\-Multi\-Start}!operator()@{operator()}} +\index{operator()@{operator()}!peoSyncMultiStart@{peo\-Sync\-Multi\-Start}} +\subsubsection[operator()]{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT$>$ void \hyperlink{classpeoSyncMultiStart}{peo\-Sync\-Multi\-Start}$<$ EOT $>$::operator() ()\hspace{0.3cm}{\tt \mbox{[}virtual\mbox{]}}}} +\label{classpeoSyncMultiStart_76385b33fe514f91cb83f0fbecbeb3c2} + + +Operator which synchronously executes the specified algorithm on the individuals selected from the initial population. + +There is no need to explicitly call the operator - automatically called as checkpoint operator. + +Implements \bf{eo\-F$<$ void $>$}. + +Definition at line 189 of file peo\-Sync\-Multi\-Start.h. + +References peo\-Sync\-Multi\-Start$<$ EOT $>$::idx, peo\-Sync\-Multi\-Start$<$ EOT $>$::impr\_\-sel, peo\-Sync\-Multi\-Start$<$ EOT $>$::num\_\-term, peo\-Sync\-Multi\-Start$<$ EOT $>$::pop, Service::request\-Resource\-Request(), peo\-Sync\-Multi\-Start$<$ EOT $>$::sel, peo\-Sync\-Multi\-Start$<$ EOT $>$::select, and Communicable::stop().\hypertarget{classpeoSyncMultiStart_8becfab1922b64708dca5a53e2932a5a}{ +\index{peoSyncMultiStart@{peo\-Sync\-Multi\-Start}!packData@{packData}} +\index{packData@{packData}!peoSyncMultiStart@{peo\-Sync\-Multi\-Start}} +\subsubsection[packData]{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT$>$ void \hyperlink{classpeoSyncMultiStart}{peo\-Sync\-Multi\-Start}$<$ EOT $>$::pack\-Data ()\hspace{0.3cm}{\tt \mbox{[}virtual\mbox{]}}}} +\label{classpeoSyncMultiStart_8becfab1922b64708dca5a53e2932a5a} + + +Auxiliary function for transferring data between the process requesting the synchronous execution of the specified algorithm and the process which actually executes the algorithm. + +There is no need to explicitly call the function. + +Reimplemented from \hyperlink{classService_aea4b8f7f8fb88e83862ee4bfd9ab207}{Service}. + +Definition at line 148 of file peo\-Sync\-Multi\-Start.h. + +References peo\-Sync\-Multi\-Start$<$ EOT $>$::idx, and peo\-Sync\-Multi\-Start$<$ EOT $>$::sel.\hypertarget{classpeoSyncMultiStart_2903a441b77cded266b5fb651e17a5b5}{ +\index{peoSyncMultiStart@{peo\-Sync\-Multi\-Start}!unpackData@{unpackData}} +\index{unpackData@{unpackData}!peoSyncMultiStart@{peo\-Sync\-Multi\-Start}} +\subsubsection[unpackData]{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT$>$ void \hyperlink{classpeoSyncMultiStart}{peo\-Sync\-Multi\-Start}$<$ EOT $>$::unpack\-Data ()\hspace{0.3cm}{\tt \mbox{[}virtual\mbox{]}}}} +\label{classpeoSyncMultiStart_2903a441b77cded266b5fb651e17a5b5} + + +Auxiliary function for transferring data between the process requesting the synchronous execution of the specified algorithm and the process which actually executes the algorithm. + +There is no need to explicitly call the function. + +Reimplemented from \hyperlink{classService_3bd87b444710813d30fd754d4d0b4df3}{Service}. + +Definition at line 154 of file peo\-Sync\-Multi\-Start.h. + +References peo\-Sync\-Multi\-Start$<$ EOT $>$::sol.\hypertarget{classpeoSyncMultiStart_a4d1c2943c290de540800087b54dc49b}{ +\index{peoSyncMultiStart@{peo\-Sync\-Multi\-Start}!execute@{execute}} +\index{execute@{execute}!peoSyncMultiStart@{peo\-Sync\-Multi\-Start}} +\subsubsection[execute]{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT$>$ void \hyperlink{classpeoSyncMultiStart}{peo\-Sync\-Multi\-Start}$<$ EOT $>$::execute ()\hspace{0.3cm}{\tt \mbox{[}virtual\mbox{]}}}} +\label{classpeoSyncMultiStart_a4d1c2943c290de540800087b54dc49b} + + +Auxiliary function for actually executing the specified algorithm on one assigned individual. + +There is no need to explicitly call the function. + +Reimplemented from \hyperlink{classService_e4f2894e6121e60f38d41cfbd7447ae4}{Service}. + +Definition at line 160 of file peo\-Sync\-Multi\-Start.h. + +References peo\-Sync\-Multi\-Start$<$ EOT $>$::ls, and peo\-Sync\-Multi\-Start$<$ EOT $>$::sol.\hypertarget{classpeoSyncMultiStart_6c48eb0dae741cff7203b65e226f9616}{ +\index{peoSyncMultiStart@{peo\-Sync\-Multi\-Start}!packResult@{packResult}} +\index{packResult@{packResult}!peoSyncMultiStart@{peo\-Sync\-Multi\-Start}} +\subsubsection[packResult]{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT$>$ void \hyperlink{classpeoSyncMultiStart}{peo\-Sync\-Multi\-Start}$<$ EOT $>$::pack\-Result ()\hspace{0.3cm}{\tt \mbox{[}virtual\mbox{]}}}} +\label{classpeoSyncMultiStart_6c48eb0dae741cff7203b65e226f9616} + + +Auxiliary function for transferring data between the process requesting the synchronous execution of the specified algorithm and the process which actually executes the algorithm. + +There is no need to explicitly call the function. + +Reimplemented from \hyperlink{classService_e5e4f90b2315e15c2a2913bd370f4cf5}{Service}. + +Definition at line 166 of file peo\-Sync\-Multi\-Start.h. + +References peo\-Sync\-Multi\-Start$<$ EOT $>$::sol.\hypertarget{classpeoSyncMultiStart_c3cbd1f10a89d1915c5ccf82a2c34a1d}{ +\index{peoSyncMultiStart@{peo\-Sync\-Multi\-Start}!unpackResult@{unpackResult}} +\index{unpackResult@{unpackResult}!peoSyncMultiStart@{peo\-Sync\-Multi\-Start}} +\subsubsection[unpackResult]{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT$>$ void \hyperlink{classpeoSyncMultiStart}{peo\-Sync\-Multi\-Start}$<$ EOT $>$::unpack\-Result ()\hspace{0.3cm}{\tt \mbox{[}virtual\mbox{]}}}} +\label{classpeoSyncMultiStart_c3cbd1f10a89d1915c5ccf82a2c34a1d} + + +Auxiliary function for transferring data between the process requesting the synchronous execution of the specified algorithm and the process which actually executes the algorithm. + +There is no need to explicitly call the function. + +Reimplemented from \hyperlink{classService_45c06344edbfa482b91f68e2035a6099}{Service}. + +Definition at line 172 of file peo\-Sync\-Multi\-Start.h. + +References Service::get\-Owner(), peo\-Sync\-Multi\-Start$<$ EOT $>$::impr\_\-sel, peo\-Sync\-Multi\-Start$<$ EOT $>$::num\_\-term, peo\-Sync\-Multi\-Start$<$ EOT $>$::pop, peo\-Sync\-Multi\-Start$<$ EOT $>$::replace, Communicable::resume(), peo\-Sync\-Multi\-Start$<$ EOT $>$::sel, Thread::set\-Active(), and peo\-Sync\-Multi\-Start$<$ EOT $>$::sol.\hypertarget{classpeoSyncMultiStart_32ec0d01d3fd8a9932abd68f4781fc94}{ +\index{peoSyncMultiStart@{peo\-Sync\-Multi\-Start}!notifySendingData@{notifySendingData}} +\index{notifySendingData@{notifySendingData}!peoSyncMultiStart@{peo\-Sync\-Multi\-Start}} +\subsubsection[notifySendingData]{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT$>$ void \hyperlink{classpeoSyncMultiStart}{peo\-Sync\-Multi\-Start}$<$ EOT $>$::notify\-Sending\-Data ()\hspace{0.3cm}{\tt \mbox{[}virtual\mbox{]}}}} +\label{classpeoSyncMultiStart_32ec0d01d3fd8a9932abd68f4781fc94} + + +Auxiliary function for notifications between the process requesting the synchronous multi-start execution and the processes that performs the actual execution phase. + +There is no need to explicitly call the function. + +Reimplemented from \hyperlink{classService_81ad4d6ebb50045b8977e2ab74826f30}{Service}. + +Definition at line 200 of file peo\-Sync\-Multi\-Start.h.\hypertarget{classpeoSyncMultiStart_fc90282cc4e93cdea8f82fd52dd78fb0}{ +\index{peoSyncMultiStart@{peo\-Sync\-Multi\-Start}!notifySendingAllResourceRequests@{notifySendingAllResourceRequests}} +\index{notifySendingAllResourceRequests@{notifySendingAllResourceRequests}!peoSyncMultiStart@{peo\-Sync\-Multi\-Start}} +\subsubsection[notifySendingAllResourceRequests]{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT$>$ void \hyperlink{classpeoSyncMultiStart}{peo\-Sync\-Multi\-Start}$<$ EOT $>$::notify\-Sending\-All\-Resource\-Requests ()\hspace{0.3cm}{\tt \mbox{[}virtual\mbox{]}}}} +\label{classpeoSyncMultiStart_fc90282cc4e93cdea8f82fd52dd78fb0} + + +Auxiliary function for notifications between the process requesting the synchronous multi-start execution and the processes that performs the actual execution phase. + +There is no need to explicitly call the function. + +Reimplemented from \hyperlink{classService_f94cc8a5c2665d4574041737e61e9ffc}{Service}. + +Definition at line 205 of file peo\-Sync\-Multi\-Start.h. + +References Service::get\-Owner(), and Thread::set\-Passive(). + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +peo\-Sync\-Multi\-Start.h\end{CompactItemize} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoSynchronousMultiStart.eps b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoSynchronousMultiStart.eps new file mode 100644 index 000000000..6e4832756 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoSynchronousMultiStart.eps @@ -0,0 +1,203 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 238.095 +%%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.1 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 3 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 +(peoSynchronousMultiStart< EntityType >) cw +(Service) cw +(Communicable) 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 ----- + + (peoSynchronousMultiStart< EntityType >) 0 0 box + (Service) 0 1 box + (Communicable) 0 2 box + +% ----- relations ----- + +solid +0 0 0 out +solid +1 0 1 in +solid +0 0 1 out +solid +1 0 2 in diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoSynchronousMultiStart.pdf b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoSynchronousMultiStart.pdf new file mode 100644 index 0000000000000000000000000000000000000000..c8f374cbfd53dd4414eed4c428ac9fd63112bfeb GIT binary patch literal 1335 zcmZ`(U2GIp6c#0s-b4ctNF>jRUL9f4BtZ|@2=>O zxh(!>)%eu(*qwzdOYU@C8+d){*4dw~jLG%A+c&=Gk3BI~G4fa0Q-P;@Jf^?#Wa1BD z!IJP${qClr^G)HeM`D*=*tcf;<}XhEGd}+Q#bqrgHvh2p&&lXS^!E$mhch>B9!M$Q zQTIW!^>kuG_?UX++WwvP(j&c6;+M;-OZ18L&y8;R?9#5i{ipu39lsm-bmzX(Z*Sh4 ze7=0*V&j(HCUbXpa(MXYN6FjapS%AaZJyq7Be2fqe($R{h6mo3rkvr%XIFgim}A}0 zZ&g2@S&=#X+RI(*2e+>JW)Yn{w$^=hPyfHhs-C5{ZQ7Eu!KMB0_?BY2wIr}r$NdORl{ym7&~%>3yPTqp=XoScgQtj6hYXeI>Qd`7a|I^jIRt15#!~=UEv@oBEER?H@-!MBPKn8{3Y-JWEuV`@#M-Z=DK~W40X->)6 za;f56YA(~GGBs%=@)Wbh7tXsLJYOgpk+xs}iwzAqV%|e;ZWR~eX-a`5+f+U(Bl*E7 z-{yjD)uLPm(ypbbRjn8)RnHbmIEqLpy@_!rc-L@uzAJly0i=$nW7M?yLP6ZzX;{pP znOYaavgoW4?3ExZd@@WkbT3G6^RBTAf=d(xSrkR7R)%=Mh(9XSuCXMwd6KGSwW=wa zCo@c&*T`&3P#ut_H0uPQa!#3yNjs2$MG*;e3rkL?!-+d^9+T|Q17BF5!(<1{WD(|+ zz@Z|nRs>gzFhPW&DZ(6e58olVVBU((x#q*>xx-a^UoJCMElExIZ($PBx+(OFiDDQq ze%x(LTJ#PBbEDwfXz}8R?c)>ddu`zGp$#vQw(|JrZ<&?zKv6!s7E?`@m9ef4{*x8H HHb43w$3m>V literal 0 HcmV?d00001 diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoSynchronousMultiStart.tex b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoSynchronousMultiStart.tex new file mode 100644 index 000000000..8b103fb89 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoSynchronousMultiStart.tex @@ -0,0 +1,152 @@ +\hypertarget{classpeoSynchronousMultiStart}{ +\section{peo\-Synchronous\-Multi\-Start$<$ Entity\-Type $>$ Class Template Reference} +\label{classpeoSynchronousMultiStart}\index{peoSynchronousMultiStart@{peoSynchronousMultiStart}} +} +Inheritance diagram for peo\-Synchronous\-Multi\-Start$<$ Entity\-Type $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=3cm]{classpeoSynchronousMultiStart} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +\hypertarget{classpeoSynchronousMultiStart_e9a336c61dd6216d7d15253ff9c9d2a3}{ +template$<$typename Algorithm\-Type$>$ \hyperlink{classpeoSynchronousMultiStart_e9a336c61dd6216d7d15253ff9c9d2a3}{peo\-Synchronous\-Multi\-Start} (Algorithm\-Type \&external\-Algorithm)} +\label{classpeoSynchronousMultiStart_e9a336c61dd6216d7d15253ff9c9d2a3} + +\item +\hypertarget{classpeoSynchronousMultiStart_689374232ff67f266ddaa5d309ea54ac}{ +template$<$typename Algorithm\-Type, typename Aggregation\-Function\-Type$>$ \hyperlink{classpeoSynchronousMultiStart_689374232ff67f266ddaa5d309ea54ac}{peo\-Synchronous\-Multi\-Start} (std::vector$<$ Algorithm\-Type $\ast$ $>$ \&external\-Algorithms, Aggregation\-Function\-Type \&external\-Aggregation\-Function)} +\label{classpeoSynchronousMultiStart_689374232ff67f266ddaa5d309ea54ac} + +\item +\hypertarget{classpeoSynchronousMultiStart_f9ec55d67f5f45f5a737064fae569277}{ +\hyperlink{classpeoSynchronousMultiStart_f9ec55d67f5f45f5a737064fae569277}{$\sim$peo\-Synchronous\-Multi\-Start} ()} +\label{classpeoSynchronousMultiStart_f9ec55d67f5f45f5a737064fae569277} + +\item +\hypertarget{classpeoSynchronousMultiStart_1fd09337a6edcf173edff1fdda2387c7}{ +template$<$typename Type$>$ void \hyperlink{classpeoSynchronousMultiStart_1fd09337a6edcf173edff1fdda2387c7}{operator()} (Type \&external\-Data)} +\label{classpeoSynchronousMultiStart_1fd09337a6edcf173edff1fdda2387c7} + +\item +\hypertarget{classpeoSynchronousMultiStart_45372c26ac5b979d29458815debceff8}{ +template$<$typename Type$>$ void \hyperlink{classpeoSynchronousMultiStart_45372c26ac5b979d29458815debceff8}{operator()} (const Type \&external\-Data\-Begin, const Type \&external\-Data\-End)} +\label{classpeoSynchronousMultiStart_45372c26ac5b979d29458815debceff8} + +\item +\hypertarget{classpeoSynchronousMultiStart_c73358b4f04f258c55f631660a7992fb}{ +void \hyperlink{classpeoSynchronousMultiStart_c73358b4f04f258c55f631660a7992fb}{pack\-Data} ()} +\label{classpeoSynchronousMultiStart_c73358b4f04f258c55f631660a7992fb} + +\item +\hypertarget{classpeoSynchronousMultiStart_9881b3f05c9f90bcb3c3ec0af8109ccc}{ +void \hyperlink{classpeoSynchronousMultiStart_9881b3f05c9f90bcb3c3ec0af8109ccc}{unpack\-Data} ()} +\label{classpeoSynchronousMultiStart_9881b3f05c9f90bcb3c3ec0af8109ccc} + +\item +\hypertarget{classpeoSynchronousMultiStart_da98ee86056eca293b3f08c89584b701}{ +void \hyperlink{classpeoSynchronousMultiStart_da98ee86056eca293b3f08c89584b701}{execute} ()} +\label{classpeoSynchronousMultiStart_da98ee86056eca293b3f08c89584b701} + +\item +\hypertarget{classpeoSynchronousMultiStart_0a5e0e1c1db5af61351e201e019f5a89}{ +void \hyperlink{classpeoSynchronousMultiStart_0a5e0e1c1db5af61351e201e019f5a89}{pack\-Result} ()} +\label{classpeoSynchronousMultiStart_0a5e0e1c1db5af61351e201e019f5a89} + +\item +\hypertarget{classpeoSynchronousMultiStart_976b78c11073ee3be09c1aed7826411a}{ +void \hyperlink{classpeoSynchronousMultiStart_976b78c11073ee3be09c1aed7826411a}{unpack\-Result} ()} +\label{classpeoSynchronousMultiStart_976b78c11073ee3be09c1aed7826411a} + +\item +\hypertarget{classpeoSynchronousMultiStart_de581c634fa9f952d571f9ed0a6611ed}{ +void \hyperlink{classpeoSynchronousMultiStart_de581c634fa9f952d571f9ed0a6611ed}{notify\-Sending\-Data} ()} +\label{classpeoSynchronousMultiStart_de581c634fa9f952d571f9ed0a6611ed} + +\item +\hypertarget{classpeoSynchronousMultiStart_e328547d97849bfc85f2a7356e5e7927}{ +void \hyperlink{classpeoSynchronousMultiStart_e328547d97849bfc85f2a7356e5e7927}{notify\-Sending\-All\-Resource\-Requests} ()} +\label{classpeoSynchronousMultiStart_e328547d97849bfc85f2a7356e5e7927} + +\end{CompactItemize} +\subsection*{Private Attributes} +\begin{CompactItemize} +\item +\hypertarget{classpeoSynchronousMultiStart_ea22b8cd0f4974da519ec416904d772e}{ +\hyperlink{structpeoSynchronousMultiStart_1_1AbstractAlgorithm}{Abstract\-Algorithm} $\ast$ \hyperlink{classpeoSynchronousMultiStart_ea22b8cd0f4974da519ec416904d772e}{singular\-Algorithm}} +\label{classpeoSynchronousMultiStart_ea22b8cd0f4974da519ec416904d772e} + +\item +\hypertarget{classpeoSynchronousMultiStart_f47bb795f53df73f04c0d1528fa346a6}{ +std::vector$<$ \hyperlink{structpeoSynchronousMultiStart_1_1AbstractAlgorithm}{Abstract\-Algorithm} $\ast$ $>$ \hyperlink{classpeoSynchronousMultiStart_f47bb795f53df73f04c0d1528fa346a6}{algorithms}} +\label{classpeoSynchronousMultiStart_f47bb795f53df73f04c0d1528fa346a6} + +\item +\hypertarget{classpeoSynchronousMultiStart_abcd58d71eabf2fab35c662fb300e61c}{ +\hyperlink{structpeoSynchronousMultiStart_1_1AbstractAggregationAlgorithm}{Abstract\-Aggregation\-Algorithm} $\ast$ \hyperlink{classpeoSynchronousMultiStart_abcd58d71eabf2fab35c662fb300e61c}{aggregation\-Function}} +\label{classpeoSynchronousMultiStart_abcd58d71eabf2fab35c662fb300e61c} + +\item +\hypertarget{classpeoSynchronousMultiStart_6efedfa64f7a4f3a0d81002e8226dcea}{ +Entity\-Type \hyperlink{classpeoSynchronousMultiStart_6efedfa64f7a4f3a0d81002e8226dcea}{entity\-Type\-Instance}} +\label{classpeoSynchronousMultiStart_6efedfa64f7a4f3a0d81002e8226dcea} + +\item +\hypertarget{classpeoSynchronousMultiStart_f729f5a1671437dce7607ad5b7253560}{ +std::vector$<$ \hyperlink{structpeoSynchronousMultiStart_1_1AbstractDataType}{Abstract\-Data\-Type} $\ast$ $>$ \hyperlink{classpeoSynchronousMultiStart_f729f5a1671437dce7607ad5b7253560}{data}} +\label{classpeoSynchronousMultiStart_f729f5a1671437dce7607ad5b7253560} + +\item +\hypertarget{classpeoSynchronousMultiStart_0264a28725fb4a030ed1e4010e07e69e}{ +unsigned \hyperlink{classpeoSynchronousMultiStart_0264a28725fb4a030ed1e4010e07e69e}{idx}} +\label{classpeoSynchronousMultiStart_0264a28725fb4a030ed1e4010e07e69e} + +\item +\hypertarget{classpeoSynchronousMultiStart_e8c889e6228535ce02086c76d3480cbb}{ +unsigned \hyperlink{classpeoSynchronousMultiStart_e8c889e6228535ce02086c76d3480cbb}{num\_\-term}} +\label{classpeoSynchronousMultiStart_e8c889e6228535ce02086c76d3480cbb} + +\item +\hypertarget{classpeoSynchronousMultiStart_a49cb2d76e6fdbfdbe0788c8388d6a0f}{ +unsigned \hyperlink{classpeoSynchronousMultiStart_a49cb2d76e6fdbfdbe0788c8388d6a0f}{data\-Index}} +\label{classpeoSynchronousMultiStart_a49cb2d76e6fdbfdbe0788c8388d6a0f} + +\item +\hypertarget{classpeoSynchronousMultiStart_20cff9a01fb7bb621264b901dab7f336}{ +unsigned \hyperlink{classpeoSynchronousMultiStart_20cff9a01fb7bb621264b901dab7f336}{function\-Index}} +\label{classpeoSynchronousMultiStart_20cff9a01fb7bb621264b901dab7f336} + +\end{CompactItemize} +\subsection*{Classes} +\begin{CompactItemize} +\item +struct \hyperlink{structpeoSynchronousMultiStart_1_1AbstractAggregationAlgorithm}{Abstract\-Aggregation\-Algorithm} +\item +struct \hyperlink{structpeoSynchronousMultiStart_1_1AbstractAlgorithm}{Abstract\-Algorithm} +\item +struct \hyperlink{structpeoSynchronousMultiStart_1_1AbstractDataType}{Abstract\-Data\-Type} +\item +struct \hyperlink{structpeoSynchronousMultiStart_1_1AggregationAlgorithm}{Aggregation\-Algorithm} +\item +struct \hyperlink{structpeoSynchronousMultiStart_1_1Algorithm}{Algorithm} +\item +struct \hyperlink{structpeoSynchronousMultiStart_1_1DataType}{Data\-Type} +\item +struct \hyperlink{structpeoSynchronousMultiStart_1_1NoAggregationFunction}{No\-Aggregation\-Function} +\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$typename Entity\-Type$>$ class peo\-Synchronous\-Multi\-Start$<$ Entity\-Type $>$} + + + + + +Definition at line 45 of file peo\-Synchronous\-Multi\-Start.h. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +peo\-Synchronous\-Multi\-Start.h\end{CompactItemize} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoTransform.eps b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoTransform.eps new file mode 100644 index 000000000..685b4bc71 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoTransform.eps @@ -0,0 +1,233 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 250 +%%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 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 +(peoTransform< EOT >) cw +(Service) cw +(eoTransform< EOT >) cw +(Communicable) cw +(eoUF< A1, R >) cw +(eoFunctorBase) cw +(peoParaSGATransform< EOT >) cw +(peoSeqTransform< 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 ----- + + (peoTransform< EOT >) 0.5 1 box + (Service) 0 2 box + (eoTransform< EOT >) 1 2 box + (Communicable) 0 3 box + (eoUF< A1, R >) 1 3 box + (eoFunctorBase) 1 4 box + (peoParaSGATransform< EOT >) 0 0 box + (peoSeqTransform< EOT >) 1 0 box + +% ----- relations ----- + +solid +0 0.5 1 out +solid +0 1 2 conn +solid +1 0 2 in +solid +0 0 2 out +solid +1 1 2 in +solid +0 1 2 out +solid +1 0 3 in +solid +1 1 3 in +solid +0 1 3 out +solid +1 1 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-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoTransform.pdf b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoTransform.pdf new file mode 100644 index 000000000..936add316 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoTransform.pdf @@ -0,0 +1,74 @@ +%PDF-1.3 +%Çì¢ +5 0 obj +<> +stream +xœ­UËnÛ0¼ó+öØÅ–\Š/ (IŽmbõ\C\Xv­4Íïwõ D*Nƒ’!Ðv†Ë¡t‰ +dûÆM->Ý;xxnù|'¡: 憫’I”Ek­ƒr+ú‡(§Q’kœÓPÖâݯêX6ëÃãöØÔpýµ„ÏïËŸâºwBiôÞxæ +;¾*,JÆäHK‡Þ—Bç4•Xý§Ih$ÑëÞϪjþì6Õ䘘Ã*µ€*…€Fçªÿh°(4à,:í5/‡Eí}gà˱®Ÿ»ÍúÇþÌܹWY@Zóœuá2éêøýæ.ÕG¸?7íµ©Ó&­0på^ûæé°ù}l®ÖÕ m≖HZ@R†  #5Ì›“ÿmݬW·—¯o€aä±óÄÌܪ:½½WämÛF¾ýÌD)³ŒZÔýepÜ;`ÏLE¼Þ–F¬Ú³Ý¬ˆÄ짬ˆµ¬à°0Ü…îÍÀ,EüÏ… ™WÚ~˜@Ž"úLÐP;ÑNpnu2ŸÚšc-«(ÚñûÆ2/Ä®Fpt5"‰«Ü©O½;&c XÒ,%Çf%ȼRjk‘DpŽMm«mHy¡TCÖ†pÒ#éÛ¤ezKXÃæÍX6º"£«™bW]´‹n{1éý©A˜î~÷’‡Ý *\@eãUJÍò8Õ"’®iÜ‹õ‹ç²)¬sµîÄ_ $¡Zendstream +endobj +6 0 obj +557 +endobj +4 0 obj +<> +/Contents 5 0 R +>> +endobj +3 0 obj +<< /Type /Pages /Kids [ +4 0 R +] /Count 1 +>> +endobj +1 0 obj +<> +endobj +7 0 obj +<>endobj +9 0 obj +<> +endobj +10 0 obj +<> +endobj +8 0 obj +<> +endobj +2 0 obj +<>endobj +xref +0 11 +0000000000 65535 f +0000000870 00000 n +0000001084 00000 n +0000000811 00000 n +0000000661 00000 n +0000000015 00000 n +0000000642 00000 n +0000000918 00000 n +0000001018 00000 n +0000000959 00000 n +0000000988 00000 n +trailer +<< /Size 11 /Root 1 0 R /Info 2 0 R +/ID [(tgÇ™\)õUÎ;P¨Cµ°)(tgÇ™\)õUÎ;P¨Cµ°)] +>> +startxref +1241 +%%EOF diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoTransform.tex b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoTransform.tex new file mode 100644 index 000000000..5207893f6 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/classpeoTransform.tex @@ -0,0 +1,29 @@ +\hypertarget{classpeoTransform}{ +\section{peo\-Transform$<$ EOT $>$ Class Template Reference} +\label{classpeoTransform}\index{peoTransform@{peoTransform}} +} +The \hyperlink{classpeoTransform}{peo\-Transform} class acts only as an interface for creating transform operators - for an example please refer to the {\bf \hyperlink{classpeoSeqTransform}{peo\-Seq\-Transform}} and the {\bf \hyperlink{classpeoParaSGATransform}{peo\-Para\-SGATransform}} classes. + + +{\tt \#include $<$peo\-Transform.h$>$} + +Inheritance diagram for peo\-Transform$<$ EOT $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=5cm]{classpeoTransform} +\end{center} +\end{figure} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class EOT$>$ class peo\-Transform$<$ EOT $>$} + +The \hyperlink{classpeoTransform}{peo\-Transform} class acts only as an interface for creating transform operators - for an example please refer to the {\bf \hyperlink{classpeoSeqTransform}{peo\-Seq\-Transform}} and the {\bf \hyperlink{classpeoParaSGATransform}{peo\-Para\-SGATransform}} classes. + + + +Definition at line 48 of file peo\-Transform.h. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +peo\-Transform.h\end{CompactItemize} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/doxygen.sty b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/doxygen.sty new file mode 100644 index 000000000..e00898f58 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/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 Mon Oct 8 11:16:45 2007 for Paradis\-EO-PEOMoving\-Objects by Doxygen }]{} +\lfoot[]{\fancyplain{}{\bfseries\scriptsize Generated on Mon Oct 8 11:16:45 2007 for Paradis\-EO-PEOMoving\-Objects 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-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/hierarchy.tex b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/hierarchy.tex new file mode 100644 index 000000000..385abf60e --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/hierarchy.tex @@ -0,0 +1,88 @@ +\section{Paradis\-EO-PEOMoving\-Objects Class Hierarchy} +This inheritance list is sorted roughly, but not completely, alphabetically:\begin{CompactList} +\item \contentsline{section}{Communicable}{\pageref{classCommunicable}}{} +\begin{CompactList} +\item \contentsline{section}{Cooperative}{\pageref{classCooperative}}{} +\begin{CompactList} +\item \contentsline{section}{peo\-Async\-Island\-Mig$<$ EOT $>$}{\pageref{classpeoAsyncIslandMig}}{} +\item \contentsline{section}{peo\-Sync\-Island\-Mig$<$ EOT $>$}{\pageref{classpeoSyncIslandMig}}{} +\end{CompactList} +\item \contentsline{section}{Runner}{\pageref{classRunner}}{} +\begin{CompactList} +\item \contentsline{section}{peo\-EA$<$ EOT $>$}{\pageref{classpeoEA}}{} +\item \contentsline{section}{peo\-Parallel\-Algorithm\-Wrapper}{\pageref{classpeoParallelAlgorithmWrapper}}{} +\end{CompactList} +\item \contentsline{section}{Service}{\pageref{classService}}{} +\begin{CompactList} +\item \contentsline{section}{peo\-Pop\-Eval$<$ EOT $>$}{\pageref{classpeoPopEval}}{} +\begin{CompactList} +\item \contentsline{section}{peo\-Para\-Pop\-Eval$<$ EOT $>$}{\pageref{classpeoParaPopEval}}{} +\item \contentsline{section}{peo\-Seq\-Pop\-Eval$<$ EOT $>$}{\pageref{classpeoSeqPopEval}}{} +\end{CompactList} +\item \contentsline{section}{peo\-Synchronous\-Multi\-Start$<$ Entity\-Type $>$}{\pageref{classpeoSynchronousMultiStart}}{} +\item \contentsline{section}{peo\-Sync\-Multi\-Start$<$ EOT $>$}{\pageref{classpeoSyncMultiStart}}{} +\item \contentsline{section}{peo\-Transform$<$ EOT $>$}{\pageref{classpeoTransform}}{} +\begin{CompactList} +\item \contentsline{section}{peo\-Para\-SGATransform$<$ EOT $>$}{\pageref{classpeoParaSGATransform}}{} +\item \contentsline{section}{peo\-Seq\-Transform$<$ EOT $>$}{\pageref{classpeoSeqTransform}}{} +\end{CompactList} +\end{CompactList} +\item \contentsline{section}{Worker}{\pageref{classWorker}}{} +\end{CompactList} +\item eo\-Functor\-Base{\tt \mbox{[}external\mbox{]}}\begin{CompactList} +\item eo\-BF$<$ A1, A2, R $>${\tt \mbox{[}external\mbox{]}}\begin{CompactList} +\item \contentsline{section}{peo\-Agg\-Eval\-Func$<$ EOT $>$}{\pageref{classpeoAggEvalFunc}}{} +\begin{CompactList} +\item \contentsline{section}{Merge\-Route\-Eval}{\pageref{classMergeRouteEval}}{} +\item \contentsline{section}{peo\-No\-Agg\-Eval\-Func$<$ EOT $>$}{\pageref{classpeoNoAggEvalFunc}}{} +\end{CompactList} +\item \contentsline{section}{peo\-Agg\-Eval\-Func$<$ eo\-Vector$<$ int, Node $>$ $>$}{\pageref{classpeoAggEvalFunc}}{} +\end{CompactList} +\item eo\-F$<$ void $>${\tt \mbox{[}external\mbox{]}}\begin{CompactList} +\item eo\-Updater{\tt \mbox{[}external\mbox{]}}\begin{CompactList} +\item \contentsline{section}{Display\-Best\-Route}{\pageref{classDisplayBestRoute}}{} +\item \contentsline{section}{peo\-Async\-Island\-Mig$<$ EOT $>$}{\pageref{classpeoAsyncIslandMig}}{} +\item \contentsline{section}{peo\-Sync\-Island\-Mig$<$ EOT $>$}{\pageref{classpeoSyncIslandMig}}{} +\item \contentsline{section}{peo\-Sync\-Multi\-Start$<$ EOT $>$}{\pageref{classpeoSyncMultiStart}}{} +\end{CompactList} +\end{CompactList} +\item eo\-UF$<$ A1, R $>${\tt \mbox{[}external\mbox{]}}\begin{CompactList} +\item eo\-Transform$<$ EOT $>${\tt \mbox{[}external\mbox{]}}\begin{CompactList} +\item \contentsline{section}{peo\-Transform$<$ EOT $>$}{\pageref{classpeoTransform}}{} +\end{CompactList} +\end{CompactList} +\end{CompactList} +\item \contentsline{section}{peo\-Parallel\-Algorithm\-Wrapper::Abstract\-Algorithm}{\pageref{structpeoParallelAlgorithmWrapper_1_1AbstractAlgorithm}}{} +\begin{CompactList} +\item \contentsline{section}{peo\-Parallel\-Algorithm\-Wrapper::Algorithm$<$ Algorithm\-Type, Algorithm\-Data\-Type $>$}{\pageref{structpeoParallelAlgorithmWrapper_1_1Algorithm}}{} +\item \contentsline{section}{peo\-Parallel\-Algorithm\-Wrapper::Algorithm$<$ Algorithm\-Type, void $>$}{\pageref{structpeoParallelAlgorithmWrapper_1_1Algorithm_3_01AlgorithmType_00_01void_01_4}}{} +\end{CompactList} +\item \contentsline{section}{peo\-Synchronous\-Multi\-Start$<$ Entity\-Type $>$::Abstract\-Aggregation\-Algorithm}{\pageref{structpeoSynchronousMultiStart_1_1AbstractAggregationAlgorithm}}{} +\begin{CompactList} +\item \contentsline{section}{peo\-Synchronous\-Multi\-Start$<$ Entity\-Type $>$::Aggregation\-Algorithm$<$ Aggregation\-Algorithm\-Type $>$}{\pageref{structpeoSynchronousMultiStart_1_1AggregationAlgorithm}}{} +\item \contentsline{section}{peo\-Synchronous\-Multi\-Start$<$ Entity\-Type $>$::No\-Aggregation\-Function}{\pageref{structpeoSynchronousMultiStart_1_1NoAggregationFunction}}{} +\end{CompactList} +\item \contentsline{section}{peo\-Synchronous\-Multi\-Start$<$ Entity\-Type $>$::Abstract\-Algorithm}{\pageref{structpeoSynchronousMultiStart_1_1AbstractAlgorithm}}{} +\begin{CompactList} +\item \contentsline{section}{peo\-Synchronous\-Multi\-Start$<$ Entity\-Type $>$::Algorithm$<$ Algorithm\-Type $>$}{\pageref{structpeoSynchronousMultiStart_1_1Algorithm}}{} +\end{CompactList} +\item \contentsline{section}{peo\-Synchronous\-Multi\-Start$<$ Entity\-Type $>$::Abstract\-Data\-Type}{\pageref{structpeoSynchronousMultiStart_1_1AbstractDataType}}{} +\begin{CompactList} +\item \contentsline{section}{peo\-Synchronous\-Multi\-Start$<$ Entity\-Type $>$::Data\-Type$<$ Type $>$}{\pageref{structpeoSynchronousMultiStart_1_1DataType}}{} +\end{CompactList} +\item \contentsline{section}{Random\-Exploration\-Algorithm}{\pageref{structRandomExplorationAlgorithm}}{} +\item \contentsline{section}{SEND\_\-REQUEST}{\pageref{structSEND__REQUEST}}{} +\item \contentsline{section}{Thread}{\pageref{classThread}}{} +\begin{CompactList} +\item \contentsline{section}{Reactive\-Thread}{\pageref{classReactiveThread}}{} +\begin{CompactList} +\item \contentsline{section}{Communicator}{\pageref{classCommunicator}}{} +\item \contentsline{section}{Worker}{\pageref{classWorker}}{} +\end{CompactList} +\item \contentsline{section}{Runner}{\pageref{classRunner}}{} +\end{CompactList} +\item \contentsline{section}{Topology}{\pageref{classTopology}}{} +\begin{CompactList} +\item \contentsline{section}{Ring\-Topology}{\pageref{classRingTopology}}{} +\end{CompactList} +\end{CompactList} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/main.tex b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/main.tex new file mode 100644 index 000000000..fe3667dc0 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/main.tex @@ -0,0 +1,59 @@ +\hypertarget{main_intro}{}\section{intro}\label{main_intro} +Paradis\-EO is a white-box object-oriented framework dedicated to the reusable design of parallel and distributed metaheuristics (PDM). Paradis\-EO provides a broad range of features including evolutionary algorithms (EA), local searches (LS), the most common parallel and distributed models and hybridization mechanisms, etc. This high content and utility encourages its use at European level. Paradis\-EO is based on a clear conceptual separation of the solution methods from the problems they are intended to solve. This separation confers to the user a maximum code and design reuse. Furthermore, the fine-grained nature of the classes provided by the framework allow a higher flexibility compared to other frameworks. Paradis\-EO is one of the rare frameworks that provide the most common parallel and distributed models. Their implementation is portable on distributed-memory machines as well as on shared-memory multiprocessors, as it uses standard libraries such as MPI, PVM and PThreads. The models can be exploited in a transparent way, one has just to instantiate their associated provided classes. Their experimentation on the radio network design real-world application demonstrate their efficiency. + +In practice, combinatorial optimization problems are often NP-hard, CPU time-consuming, and evolve over time. Unlike exact methods, metaheuristics allow to tackle large-size problems instances by delivering satisfactory solutions in a reasonable time. Metaheuristics are general-purpose heuristics that split in two categories: evolutionary algorithms (EA) and local search methods (LS). These two families have complementary characteristics: EA allow a better exploration of the search space, while LS have the power to intensify the search in promising regions. Their hybridization allows to deliver robust and better solutions + +Although serial metaheuristics have a polynomial temporal complexity, they remain unsatisfactory for industrial problems. Parallel and distributed computing is a powerful way to deal with the performance issue of these problems. Numerous parallel and distributed metaheuristics (PDM) and their implementations have been proposed, and are available on the\-Web. They can be reused and adapted to his/her own problems. However, the user has to deeply examine the code and rewrite its problem-specific sections. The task is tedious, errorprone, takes along time and makes harder the produced code maintenance. A better way to reuse the code of existing PDM is the reuse through libraries. These are often more reliable as they are more tested and documented. They allow a better maintainability and efficiency. However, libraries do not allow the reuse of design.\hypertarget{main_parallel_metaheuristics}{}\section{Parallel and distributed metaheuristics}\label{main_parallel_metaheuristics} +\hypertarget{main_parallel_distributed}{}\subsection{Parallel distributed evolutionary algorithms}\label{main_parallel_distributed} +Evolutionary Algorithms (EA) are based on the iterative improvement of a population of solutions. At each step, individuals are selected, paired and recombined in order to generate new solutions that replace other ones, and so on. As the algorithm converges, the population is mainly composed of individuals well adapted to the \char`\"{}environment\char`\"{}, for instance the problem. The main features that characterize EA are the way the population is initialized, the selection strategy (deterministic/stochastic) by fostering \char`\"{}good\char`\"{} solutions, the replacement strategy that discards individuals, and the continuation/stopping criterion to decide whether the evolution should go on or not. + +Basically, three major parallel and distributed models for EA can been distinguished: the island (a)synchronous cooperative model, the parallel evaluation of the population, and the distributed evaluation of a single solution. \begin{itemize} +\item {\em Island (a)synchronous cooperative model\/}. Different EA are simultaneously deployed to cooperate for computing better and robust solutions. They exchange in an asynchronous way genetic stuff to diversify the search. The objective is to allow to delay the global convergence, especially when the\-EAare heterogeneous regarding the variation operators. The migration of individuals follows a policy defined by few parameters: the migration decision criterion, the exchange topology, the number of emigrants, the emigrants selection policy, and the replacement/integration policy. + +\item {\em Parallel evaluation of the population\/}. It is required as it is in general the most timeconsuming. The parallel evaluation follows the centralized model. The farmer applies the following operations: selection, transformation and replacement as they require a global management of the population. At each generation, it distributes the set of new solutions between differentworkers. These evaluate and return back the solutions and their quality values. An efficient execution is often obtained particularly when the evaluation of each solution is costly. The two main advantages of an asynchronous model over the synchronous model are: (1) the fault tolerance of the asynchronous model; (2) the robustness in case the fitness computation can take very different computation times (e.g. for nonlinear numerical optimization). Whereas some time-out detection can be used to address the former issue, the latter one can be partially overcome if the grain is set to very small values, as individuals will be sent out for evaluations upon request of the workers. + +\item {\em Distributed evaluation of a single solution\/}. The quality of each solution is evaluated in a parallel centralized way. That model is particularly interesting when the evaluation function can be itself parallelized as it is CPU time-consuming and/or IO intensive. In that case, the function can be viewed as an aggregation of a certain number of partial functions. The partial functions could also be identical if for example the problem to deal with is a data mining one. The evaluation is thus data parallel and the accesses to data base are performed in parallel. Furthermore, a reduction operation is performed on the results returned by the partial functions. As a summary, for this model the user has to indicate a set of partial functions and an aggregation operator of these. \end{itemize} +\hypertarget{main_parallel_ls}{}\subsection{Parallel distributed local searches}\label{main_parallel_ls} +\hypertarget{main_local_searches}{}\subsubsection{Local searches}\label{main_local_searches} +All metaheuristics dedicated to the improvement of a single solution are based on the concept of neighborhood. They start from a solution randomly generated or obtained from another optimization algorithm, and update it, step by step, by replacing the current solution by one of its neighboring candidates. Some criterion have been identified to differentiate such searches: the heuristic internal memory, the choice of the initial solution, the candidate solutions generator, and the selection strategy of candidate moves. Three main algorithms of local search stand out: Hill Climbing (HC), Simulated Annealing (SA) and Tabu Search (TS).\hypertarget{main_parallel_local_searches}{}\subsubsection{Parallel local searches}\label{main_parallel_local_searches} +Two parallel distributed models are commonly used in the literature: the parallel distributed exploration of neighboring candidate solutions model, and the multi-start model. \begin{itemize} +\item {\em Parallel exploration of neighboring candidates\/}. It is a low-level Farmer-Worker model that does not alter the behavior of the heuristic. A sequential search computes the same results slower.At the beginning of each iteration, the farmer duplicates the current solution between distributed nodes. Each one manages some candidates and the results are returned to the farmer. The model is efficient if the evaluation of a each solution is time-consuming and/or there are a great deal of candidate neighbors to evaluate. This is obviously not applicable to SA since only one candidate is evaluated at each iteration. Likewise, the efficiency of the model for HC is not always guaranteed as the number of neighboring solutions to process before finding one that improves the current objective function may be highly variable. + +\item {\em Multi-start model\/}. It consists in simultaneously launching several local searches. They may be heterogeneous, but no information is exchanged between them. The resultswould be identical as if the algorithms were sequentially run.Very often deterministic algorithms differ by the supplied initial solution and/or some other parameters. This trivial model is convenient for low-speed networks of workstations. \end{itemize} +\hypertarget{main_hybridization}{}\section{Hybridization}\label{main_hybridization} +Recently, hybrid metaheuristics have gained a considerable interest. For many practical or academic optimization problems, the best found solutions are obtained by hybrid algorithms. Combinations of different metaheuristics have provided very powerful search methods. Two levels and two modes of hybridization have been distinguished: Low and High levels, and Relay and \hyperlink{classCooperative}{Cooperative} modes. The low-level hybridization addresses the functional composition of a single optimization method. A function of a given metaheuristic is replaced by another metaheuristic. On the contrary, for high-level hybrid algorithms the different metaheuristics are self-containing, meaning no direct relationship to their internal working is considered. On the other hand, relay hybridization means a set of metaheuristics is applied in a pipeline way. The output of a metaheuristic (except the last) is the input of the following one (except the first). Conversely, co-evolutionist hybridization is a cooperative optimization model. Each metaheuristic performs a search in a solution space, and exchange solutions with others.\hypertarget{main_paradiseo_goals}{}\section{Paradiseo goals and architecture}\label{main_paradiseo_goals} +The \char`\"{}EO\char`\"{} part of Paradis\-EO means Evolving Objects. \doxyref{EO} is a C++ LGPL open source framework and includes a paradigm-free Evolutionary Computation library (EOlib) dedicated to the flexible design of EA through evolving objects superseding the most common dialects (Genetic Algorithms, Evolution Strategies, Evolutionary Programming and Genetic Programming). Furthermore, \doxyref{EO} integrates several services including visualization facilities, on-line definition of parameters, application check-pointing, etc. Paradis\-EO is an extended version of the \doxyref{EO} framework. The extensions include local search methods, hybridization mechanisms, parallelism and distribution mechanisms, and other features that are not addressed in this paper such as multi-objective optimization and grid computing. In the next sections, we present the motivations and goals of Paradis\-EO, its architecture and some of its main implementation details and issues.\hypertarget{main_motivation}{}\subsection{Motivations and goals}\label{main_motivation} +A framework is normally intended to be exploited by as many users as possible. Therefore, its exploitation could be successful only if some important user criteria are satisfied. The following criteria are the major of them and constitute the main objectives of the Paradis\-EO framework: + +\begin{itemize} +\item {\em Maximum design and code reuse\/}. The framework must provide for the user a whole architecture design of his/her solution method. Moreover, the programmer may redo as little code as possible. This objective requires a clear and maximal conceptual separation between the solution methods and the problems to be solved, and thus a deep domain analysis. The user might therefore develop only the minimal problem-specific code. + +\item {\em Flexibility and adaptability\/}. It must be possible for the user to easily add new features/ metaheuristics or change existing ones without implicating other components. Furthermore, as in practice existing problems evolve and new others arise these have to be tackled by specializing/adapting the framework components. + +\item {\em Utility\/}. The framework must allow the user to cover a broad range of metaheuristics, problems, parallel distributed models, hybridization mechanisms, etc. + +\item {\em Transparent and easy access to performance and robustness\/}. As the optimization applications are often time-consuming the performance issue is crucial. Parallelism and distribution are two important ways to achieve high performance execution. In order to facilitate its use it is implemented so that the user can deploy his/her parallel algorithms in a transparent manner. Moreover, the execution of the algorithms must be robust to guarantee the reliability and the quality of the results. The hybridization mechanism allows to obtain robust and better solutions. + +\item {\em Portability\/}. In order to satisfy a large number of users the framework must support different material architectures and their associated operating systems. \end{itemize} +\hypertarget{main_architecture}{}\subsection{Paradis\-EO architecture}\label{main_architecture} +The architecture of Paradis\-EO is multi-layer and modular allowing to achieve the objectives quoted above. This allows particularly a high flexibility and adaptability, an easier hybridization, and more code and design reuse. The architecture has three layers identifying three major categories of classes: {\em Solvers\/}, {\em Runners\/} and {\em Helpers\/}. \begin{itemize} +\item {\em Helpers\/}. Helpers are low-level classes that perform specific actions related to the evolution or search process. They are split in two categories: {\em Evolutionary helpers (EH)\/} and {\em Local search helpers (LSH)\/}. EH include mainly the transformation, selection and replacement operations, the evaluation function and the stopping criterion. LSH can be generic such as the neighborhood explorer class, or specific to the local search metaheuristic like the tabu list manager class in the Tabu Search solution method. On the other hand, there are some special helpers dedicated to the management of parallel and distributed models 2 and 3, such as the communicators that embody the communication services. + +Helpers cooperate between them and interact with the components of the upper layer i.e. the runners. The runners invoke the helpers through function parameters. Indeed, helpers have not their own data, but they work on the internal data of the runners. + +\item {\em Runners\/}. The Runners layer contains a set of classes that implement the metaheuristics themselves. They perform the run of the metaheuristics from the initial state or population to the final one. One can distinguish the {\em Evolutionary runners (ER)\/} such as genetic algorithms, evolution strategies, etc., and {\em Local search runners (LSR)\/} like tabu search, simulated annealing and hill climbing. Runners invoke the helpers to perform specific actions on their data. For instance, an ER may ask the fitness function evaluation helper to evaluate its population. An LSR asks the movement helper to perform a given movement on the current state. Furthermore, runners can be serial or parallel distributed. + +\item {\em Solvers\/}. Solvers are devoted to control the evolution process and/or the search. They generate the initial state (solution or population) and define the strategy for combining and sequencing different metaheuristics. Two types of solvers can be distinguished. {\em Single metaheuristic solvers (SMS)\/} and {\em Multiple metaheuristics solvers (MMS)\/}. SMSs are dedicated to the execution of only one metaheuristic.MMS are more complex as they control and sequence several metaheuristics that can be heterogeneous. Solvers interact with the user by getting the input data and delivering the output (best solution, statistics, etc). \end{itemize} + + +According to the generality of their embedded features, the classes of the architecture split in two major categories: {\em Provided classes\/} and {\em Required classes\/}. Provided classes embody the factored out part of the metaheuristics. They are generic, implemented in the framework, and ensure the control at run time. Required classes are those that must be supplied by the user. They encapsulate the problem-specific aspects of the application. These classes are fixed but not implemented in Paradis\-EO. The programmer has the burden to develop them using the OO specialization mechanism.\hypertarget{main_tutorials}{}\section{Paradis\-EO-PEO Tutorials}\label{main_tutorials} +The basisc of the Paradis\-EO framework philosophy are exposed in a few simple tutorials: \begin{itemize} +\item \href{lesson1/html/main.html}{\tt creating a simple Paradis\-EO evolutionary algorithm}; \end{itemize} +All the presented examples have as case study the traveling salesman problem (TSP). Different operators and auxiliary objects were designed, standing as a \href{lsnshared/html/index.html}{\tt common shared source code base}. While not being part of the Paradis\-EO-PEO framework, it may represent a startpoint for a better understanding of the presented tutorials.\hypertarget{main_LICENCE}{}\section{LICENCE}\label{main_LICENCE} +This software is governed by the Ce\-CILL license under French law and abiding by the rules of distribution of free software. You can use, modify and/ or redistribute the software under the terms of the Ce\-CILL license as circulated by CEA, CNRS and INRIA at the following URL \char`\"{}http://www.cecill.info\char`\"{}. + +As a counterpart to the access to the source code and rights to copy, modify and redistribute granted by the license, users are provided only with a limited warranty and the software's author, the holder of the economic rights, and the successive licensors have only limited liability. + +In this respect, the user's attention is drawn to the risks associated with loading, using, modifying and/or developing or reproducing the software by the user in light of its specific status of free software, that may mean that it is complicated to manipulate, and that also therefore means that it is reserved for developers and experienced professionals having in-depth computer knowledge. Users are therefore encouraged to load and test the software's suitability as regards their requirements in conditions enabling the security of their systems and/or data to be ensured and, more generally, to use and operate it in the same conditions as regards security. The fact that you are presently reading this means that you have had knowledge of the Ce\-CILL license and that you accept its terms. + +Paradis\-EO Web\-Site : \href{http://paradiseo.gforge.inria.fr}\tt{http://paradiseo.gforge.inria.fr} Contact: \href{mailto:paradiseo-help@lists.gforge.inria.fr}\tt{paradiseo-help@lists.gforge.inria.fr} \ No newline at end of file diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/namespacepeo.tex b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/namespacepeo.tex new file mode 100644 index 000000000..ee1f78ba8 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/namespacepeo.tex @@ -0,0 +1,52 @@ +\hypertarget{namespacepeo}{ +\section{peo Namespace Reference} +\label{namespacepeo}\index{peo@{peo}} +} + + +\subsection*{Functions} +\begin{CompactItemize} +\item +\hypertarget{namespacepeo_f90478489cc92d1e6abb222179163a30}{ +void \hyperlink{namespacepeo_f90478489cc92d1e6abb222179163a30}{finalize} ()} +\label{namespacepeo_f90478489cc92d1e6abb222179163a30} + +\item +\hypertarget{namespacepeo_8184c3b1f7eecc68f69bb8e8b872a7d3}{ +void \hyperlink{namespacepeo_8184c3b1f7eecc68f69bb8e8b872a7d3}{init} (int \&\_\-\_\-argc, char $\ast$$\ast$\&\_\-\_\-argv)} +\label{namespacepeo_8184c3b1f7eecc68f69bb8e8b872a7d3} + +\item +\hypertarget{namespacepeo_2b496ee9b81d9ae322ae6edb9a93dc71}{ +void \hyperlink{namespacepeo_2b496ee9b81d9ae322ae6edb9a93dc71}{load\-Parameters} (int \&\_\-\_\-argc, char $\ast$$\ast$\&\_\-\_\-argv)} +\label{namespacepeo_2b496ee9b81d9ae322ae6edb9a93dc71} + +\item +\hypertarget{namespacepeo_10819b2d60b37477c6a89b60c595c67c}{ +void \hyperlink{namespacepeo_10819b2d60b37477c6a89b60c595c67c}{run} ()} +\label{namespacepeo_10819b2d60b37477c6a89b60c595c67c} + +\end{CompactItemize} +\subsection*{Variables} +\begin{CompactItemize} +\item +\hypertarget{namespacepeo_18a3998ce8b39c4e1143914fdd07b3d2}{ +int $\ast$ \hyperlink{namespacepeo_18a3998ce8b39c4e1143914fdd07b3d2}{argc}} +\label{namespacepeo_18a3998ce8b39c4e1143914fdd07b3d2} + +\item +\hypertarget{namespacepeo_d07043237d4d923125e38860ba9bbe20}{ +char $\ast$$\ast$$\ast$ \hyperlink{namespacepeo_d07043237d4d923125e38860ba9bbe20}{argv}} +\label{namespacepeo_d07043237d4d923125e38860ba9bbe20} + +\item +\hypertarget{namespacepeo_18a3998ce8b39c4e1143914fdd07b3d2}{ +int $\ast$ \hyperlink{namespacepeo_18a3998ce8b39c4e1143914fdd07b3d2}{argc}} +\label{namespacepeo_18a3998ce8b39c4e1143914fdd07b3d2} + +\item +\hypertarget{namespacepeo_d07043237d4d923125e38860ba9bbe20}{ +char $\ast$$\ast$$\ast$ \hyperlink{namespacepeo_d07043237d4d923125e38860ba9bbe20}{argv}} +\label{namespacepeo_d07043237d4d923125e38860ba9bbe20} + +\end{CompactItemize} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/namespaces.tex b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/namespaces.tex new file mode 100644 index 000000000..c69deee37 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/namespaces.tex @@ -0,0 +1,4 @@ +\section{Paradis\-EO-PEOMoving\-Objects Namespace List} +Here is a list of all documented namespaces with brief descriptions:\begin{CompactList} +\item\contentsline{section}{\hyperlink{namespacepeo}{peo} }{\pageref{namespacepeo}}{} +\end{CompactList} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/refman.tex b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/refman.tex new file mode 100644 index 000000000..e2e595b18 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/refman.tex @@ -0,0 +1,96 @@ +\documentclass[a4paper]{book} +\usepackage{a4wide} +\usepackage{makeidx} +\usepackage{fancyhdr} +\usepackage{graphicx} +\usepackage{multicol} +\usepackage{float} +\usepackage{textcomp} +\usepackage{alltt} +\usepackage{times} +\usepackage{ifpdf} +\ifpdf +\usepackage[pdftex, + pagebackref=true, + colorlinks=true, + linkcolor=blue + ]{hyperref} +\else +\usepackage[ps2pdf, + pagebackref=true, + colorlinks=true, + linkcolor=blue + ]{hyperref} +\usepackage{pspicture} +\fi +\usepackage{doxygen} +\makeindex +\setcounter{tocdepth}{1} +\renewcommand{\footrulewidth}{0.4pt} +\begin{document} +\begin{titlepage} +\vspace*{7cm} +\begin{center} +{\Large Paradis\-EO-PEOMoving\-Objects Reference Manual\\[1ex]\large 1.0 }\\ +\vspace*{1cm} +{\large Generated by Doxygen 1.4.7}\\ +\vspace*{0.5cm} +{\small Mon Oct 8 11:16:45 2007}\\ +\end{center} +\end{titlepage} +\clearemptydoublepage +\pagenumbering{roman} +\tableofcontents +\clearemptydoublepage +\pagenumbering{arabic} +\chapter{The Paradis\-EO-PEO Framework } +\label{index}\hypertarget{index}{}\input{main} +\chapter{Paradis\-EO-PEOMoving\-Objects Namespace Index} +\input{namespaces} +\chapter{Paradis\-EO-PEOMoving\-Objects Hierarchical Index} +\input{hierarchy} +\chapter{Paradis\-EO-PEOMoving\-Objects Class Index} +\input{annotated} +\chapter{Paradis\-EO-PEOMoving\-Objects Namespace Documentation} +\input{namespacepeo} +\chapter{Paradis\-EO-PEOMoving\-Objects Class Documentation} +\input{classCommunicable} +\include{classCommunicator} +\include{classCooperative} +\include{classDisplayBestRoute} +\include{classMergeRouteEval} +\include{classpeoAggEvalFunc} +\include{classpeoAsyncIslandMig} +\include{classpeoEA} +\include{classpeoNoAggEvalFunc} +\include{classpeoParallelAlgorithmWrapper} +\include{structpeoParallelAlgorithmWrapper_1_1AbstractAlgorithm} +\include{structpeoParallelAlgorithmWrapper_1_1Algorithm} +\include{structpeoParallelAlgorithmWrapper_1_1Algorithm_3_01AlgorithmType_00_01void_01_4} +\include{classpeoParaPopEval} +\include{classpeoParaSGATransform} +\include{classpeoPopEval} +\include{classpeoSeqPopEval} +\include{classpeoSeqTransform} +\include{classpeoSynchronousMultiStart} +\include{structpeoSynchronousMultiStart_1_1AbstractAggregationAlgorithm} +\include{structpeoSynchronousMultiStart_1_1AbstractAlgorithm} +\include{structpeoSynchronousMultiStart_1_1AbstractDataType} +\include{structpeoSynchronousMultiStart_1_1AggregationAlgorithm} +\include{structpeoSynchronousMultiStart_1_1Algorithm} +\include{structpeoSynchronousMultiStart_1_1DataType} +\include{structpeoSynchronousMultiStart_1_1NoAggregationFunction} +\include{classpeoSyncIslandMig} +\include{classpeoSyncMultiStart} +\include{classpeoTransform} +\include{structRandomExplorationAlgorithm} +\include{classReactiveThread} +\include{classRingTopology} +\include{classRunner} +\include{structSEND__REQUEST} +\include{classService} +\include{classThread} +\include{classTopology} +\include{classWorker} +\printindex +\end{document} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structRandomExplorationAlgorithm.tex b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structRandomExplorationAlgorithm.tex new file mode 100644 index 000000000..73b474c3a --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structRandomExplorationAlgorithm.tex @@ -0,0 +1,42 @@ +\hypertarget{structRandomExplorationAlgorithm}{ +\section{Random\-Exploration\-Algorithm Struct Reference} +\label{structRandomExplorationAlgorithm}\index{RandomExplorationAlgorithm@{RandomExplorationAlgorithm}} +} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +\hypertarget{structRandomExplorationAlgorithm_ed4847c164759fbb1168948d3620037c}{ +\hyperlink{structRandomExplorationAlgorithm_ed4847c164759fbb1168948d3620037c}{Random\-Exploration\-Algorithm} (\hyperlink{classpeoPopEval}{peo\-Pop\-Eval}$<$ \bf{Route} $>$ \&\_\-\_\-pop\-Eval, \hyperlink{classpeoSynchronousMultiStart}{peo\-Synchronous\-Multi\-Start}$<$ \bf{Route} $>$ \&ext\-Parallel\-Execution)} +\label{structRandomExplorationAlgorithm_ed4847c164759fbb1168948d3620037c} + +\item +\hypertarget{structRandomExplorationAlgorithm_3a7b3cc174726fff45985854c3d1b812}{ +void \hyperlink{structRandomExplorationAlgorithm_3a7b3cc174726fff45985854c3d1b812}{operator()} ()} +\label{structRandomExplorationAlgorithm_3a7b3cc174726fff45985854c3d1b812} + +\end{CompactItemize} +\subsection*{Public Attributes} +\begin{CompactItemize} +\item +\hypertarget{structRandomExplorationAlgorithm_e9fbab7402f290c62224cedebd9de0a4}{ +\hyperlink{classpeoPopEval}{peo\-Pop\-Eval}$<$ \bf{Route} $>$ \& \hyperlink{structRandomExplorationAlgorithm_e9fbab7402f290c62224cedebd9de0a4}{pop\-Eval}} +\label{structRandomExplorationAlgorithm_e9fbab7402f290c62224cedebd9de0a4} + +\item +\hypertarget{structRandomExplorationAlgorithm_e36e837e956772738773364cd71201de}{ +\hyperlink{classpeoSynchronousMultiStart}{peo\-Synchronous\-Multi\-Start}$<$ \bf{Route} $>$ \& \hyperlink{structRandomExplorationAlgorithm_e36e837e956772738773364cd71201de}{parallel\-Execution}} +\label{structRandomExplorationAlgorithm_e36e837e956772738773364cd71201de} + +\end{CompactItemize} + + +\subsection{Detailed Description} + + + + +Definition at line 56 of file Lesson\-Parallel\-Algorithm/main.cpp. + +The documentation for this struct was generated from the following file:\begin{CompactItemize} +\item +Lesson\-Parallel\-Algorithm/main.cpp\end{CompactItemize} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structSEND__REQUEST.tex b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structSEND__REQUEST.tex new file mode 100644 index 000000000..7b319bcac --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structSEND__REQUEST.tex @@ -0,0 +1,34 @@ +\hypertarget{structSEND__REQUEST}{ +\section{SEND\_\-REQUEST Struct Reference} +\label{structSEND__REQUEST}\index{SEND_REQUEST@{SEND\_\-REQUEST}} +} +\subsection*{Public Attributes} +\begin{CompactItemize} +\item +\hypertarget{structSEND__REQUEST_1ad8f7233fa3ff13262e783a9153920f}{ +\hyperlink{classCommunicable}{Communicable} $\ast$ \hyperlink{structSEND__REQUEST_1ad8f7233fa3ff13262e783a9153920f}{comm}} +\label{structSEND__REQUEST_1ad8f7233fa3ff13262e783a9153920f} + +\item +\hypertarget{structSEND__REQUEST_93e2a6a71d2a91aa2b7bdd050ee59b4d}{ +int \hyperlink{structSEND__REQUEST_93e2a6a71d2a91aa2b7bdd050ee59b4d}{to}} +\label{structSEND__REQUEST_93e2a6a71d2a91aa2b7bdd050ee59b4d} + +\item +\hypertarget{structSEND__REQUEST_3126b3ef9d6533d3086760e413a7f23f}{ +int \hyperlink{structSEND__REQUEST_3126b3ef9d6533d3086760e413a7f23f}{tag}} +\label{structSEND__REQUEST_3126b3ef9d6533d3086760e413a7f23f} + +\end{CompactItemize} + + +\subsection{Detailed Description} + + + + +Definition at line 52 of file send.cpp. + +The documentation for this struct was generated from the following file:\begin{CompactItemize} +\item +send.cpp\end{CompactItemize} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoParallelAlgorithmWrapper_1_1AbstractAlgorithm.eps b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoParallelAlgorithmWrapper_1_1AbstractAlgorithm.eps new file mode 100644 index 000000000..c20f6ccc6 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoParallelAlgorithmWrapper_1_1AbstractAlgorithm.eps @@ -0,0 +1,203 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 42.9185 +%%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 11.65 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 2 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 +(peoParallelAlgorithmWrapper::AbstractAlgorithm) cw +(peoParallelAlgorithmWrapper::Algorithm< AlgorithmType, AlgorithmDataType >) cw +(peoParallelAlgorithmWrapper::Algorithm< AlgorithmType, void >) 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 ----- + + (peoParallelAlgorithmWrapper::AbstractAlgorithm) 0.5 1 box + (peoParallelAlgorithmWrapper::Algorithm< AlgorithmType, AlgorithmDataType >) 0 0 box + (peoParallelAlgorithmWrapper::Algorithm< AlgorithmType, void >) 1 0 box + +% ----- relations ----- + +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-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoParallelAlgorithmWrapper_1_1AbstractAlgorithm.pdf b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoParallelAlgorithmWrapper_1_1AbstractAlgorithm.pdf new file mode 100644 index 000000000..b76ae706b --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoParallelAlgorithmWrapper_1_1AbstractAlgorithm.pdf @@ -0,0 +1,73 @@ +%PDF-1.3 +%Çì¢ +5 0 obj +<> +stream +xœ­’MKÃ@†ïû+æ¨"ãÌìf?ŠūՀçÓZIhš‹ÿÞM›Ææ (JX&ûî33ïf²Bêž>敺xp°Ø(‚»¸j­x@ò +®Óyp(bYC:Wûdv 5 ¤•:©‹Õ}ÖdeY”Ór±j–íkõÔdu]4“ÉôyÓ6YÞ'§é›ºMÕLY$açak/‹MCè­‹ÑôX6ÐêñwN5[Ã`P8ý«å†×ô£.ο¶7Y›u\ ×èšýݬ8̘}_-_ŽüI¢ãèù;—ÝW¢(n#Hщ'´‰@µß¦QFr$ìÎ’áøCxŽˆ˜@ܱ2®1?‹cÖCrÔG»ýàJ×j z§Õ8Ïø5dÔ¨VOÍÔ'ʺ¹xendstream +endobj +6 0 obj +309 +endobj +4 0 obj +<> +/Contents 5 0 R +>> +endobj +3 0 obj +<< /Type /Pages /Kids [ +4 0 R +] /Count 1 +>> +endobj +1 0 obj +<> +endobj +7 0 obj +<>endobj +9 0 obj +<> +endobj +10 0 obj +<> +endobj +8 0 obj +<> +endobj +2 0 obj +<>endobj +xref +0 11 +0000000000 65535 f +0000000624 00000 n +0000000838 00000 n +0000000565 00000 n +0000000413 00000 n +0000000015 00000 n +0000000394 00000 n +0000000672 00000 n +0000000772 00000 n +0000000713 00000 n +0000000742 00000 n +trailer +<< /Size 11 /Root 1 0 R /Info 2 0 R +/ID [(ë‹Z…¯ŸÎáæùÆ&ã)(ë‹Z…¯ŸÎáæùÆ&ã)] +>> +startxref +995 +%%EOF diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoParallelAlgorithmWrapper_1_1AbstractAlgorithm.tex b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoParallelAlgorithmWrapper_1_1AbstractAlgorithm.tex new file mode 100644 index 000000000..c6241f877 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoParallelAlgorithmWrapper_1_1AbstractAlgorithm.tex @@ -0,0 +1,35 @@ +\hypertarget{structpeoParallelAlgorithmWrapper_1_1AbstractAlgorithm}{ +\section{peo\-Parallel\-Algorithm\-Wrapper::Abstract\-Algorithm Struct Reference} +\label{structpeoParallelAlgorithmWrapper_1_1AbstractAlgorithm}\index{peoParallelAlgorithmWrapper::AbstractAlgorithm@{peoParallelAlgorithmWrapper::AbstractAlgorithm}} +} +Inheritance diagram for peo\-Parallel\-Algorithm\-Wrapper::Abstract\-Algorithm::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=1.20172cm]{structpeoParallelAlgorithmWrapper_1_1AbstractAlgorithm} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +\hypertarget{structpeoParallelAlgorithmWrapper_1_1AbstractAlgorithm_af530b7731cb212f8dd74e5a57484a9e}{ +virtual \hyperlink{structpeoParallelAlgorithmWrapper_1_1AbstractAlgorithm_af530b7731cb212f8dd74e5a57484a9e}{$\sim$Abstract\-Algorithm} ()} +\label{structpeoParallelAlgorithmWrapper_1_1AbstractAlgorithm_af530b7731cb212f8dd74e5a57484a9e} + +\item +\hypertarget{structpeoParallelAlgorithmWrapper_1_1AbstractAlgorithm_32e08b3810cef49d0b8751645ef79b6f}{ +virtual void \hyperlink{structpeoParallelAlgorithmWrapper_1_1AbstractAlgorithm_32e08b3810cef49d0b8751645ef79b6f}{operator()} ()} +\label{structpeoParallelAlgorithmWrapper_1_1AbstractAlgorithm_32e08b3810cef49d0b8751645ef79b6f} + +\end{CompactItemize} + + +\subsection{Detailed Description} + + + + +Definition at line 71 of file peo\-Parallel\-Algorithm\-Wrapper.h. + +The documentation for this struct was generated from the following file:\begin{CompactItemize} +\item +peo\-Parallel\-Algorithm\-Wrapper.h\end{CompactItemize} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoParallelAlgorithmWrapper_1_1Algorithm.eps b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoParallelAlgorithmWrapper_1_1Algorithm.eps new file mode 100644 index 000000000..5950e1a42 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoParallelAlgorithmWrapper_1_1Algorithm.eps @@ -0,0 +1,197 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 85.8369 +%%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 5.825 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 2 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 +(peoParallelAlgorithmWrapper::Algorithm< AlgorithmType, AlgorithmDataType >) cw +(peoParallelAlgorithmWrapper::AbstractAlgorithm) 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 ----- + + (peoParallelAlgorithmWrapper::Algorithm< AlgorithmType, AlgorithmDataType >) 0 0 box + (peoParallelAlgorithmWrapper::AbstractAlgorithm) 0 1 box + +% ----- relations ----- + +solid +0 0 0 out +solid +1 0 1 in diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoParallelAlgorithmWrapper_1_1Algorithm.pdf b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoParallelAlgorithmWrapper_1_1Algorithm.pdf new file mode 100644 index 0000000000000000000000000000000000000000..9e9621cbb41fd620eb57678d27a662b315c3f664 GIT binary patch literal 1340 zcmZ`(ZERCj7}f~59GM}0B$^m^OziB$?%dn<-rnM*ed)9Tf_tbmO zWt}JrQ$Z!e9}t3!8l?_0KYonFpoWkMPBQNmnmuYC=J*Cut9q8KR; z@uV}}d~fa8CYanc{^oOU47Z>7KGV4#|NgLJ@|Tg=e3ejrBxXLH5N}=UVf(OLT%V7a3ZBO zlN^i*EG!8ERHR15-2qtGz&eF4ZW=%;Hi>1#vB~TV8zdgVG=`Yr5Jhp0vhA%ox-vqU zrO-Q*5g;sEgHeLYb@3Bs28EHa!eFT~6QVV#gb8DS*R6sM$QUe6 z$=S-O;%sU;vqhs?nj|X}GsRc;d#>DHEgGPy+idbEgJHfkVXIHv%RvDPo2`i2bdut>NSN0H- znsFnQrBD&2M#0&@WM%h;rikum(%b#ZoPyvH1wj!-QFeP+JVX-z7mB868rxganrW`p zGPpuU47;D?`jc2^$O?=0FrZ;pnVf;UfdEAj2(u5ACCMehZdk!&CzFgnP@lyVH*;$a zCdo{#Ihb2yvpWY9L^d>YFqil0Gi1-z`#keu^PJ&v|0kCkS}KhV_Va=$l6oAoej!o` zVdKZ$hG>=EO&~Xl-Hla#7_(0-+V$&Cj|_h|+1-D({=%mA_J(<&4nDgk)eKsa(d$)! K&DPo$0RIBAPqFm? literal 0 HcmV?d00001 diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoParallelAlgorithmWrapper_1_1Algorithm.tex b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoParallelAlgorithmWrapper_1_1Algorithm.tex new file mode 100644 index 000000000..afe682d32 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoParallelAlgorithmWrapper_1_1Algorithm.tex @@ -0,0 +1,50 @@ +\hypertarget{structpeoParallelAlgorithmWrapper_1_1Algorithm}{ +\section{peo\-Parallel\-Algorithm\-Wrapper::Algorithm$<$ Algorithm\-Type, Algorithm\-Data\-Type $>$ Struct Template Reference} +\label{structpeoParallelAlgorithmWrapper_1_1Algorithm}\index{peoParallelAlgorithmWrapper::Algorithm@{peoParallelAlgorithmWrapper::Algorithm}} +} +Inheritance diagram for peo\-Parallel\-Algorithm\-Wrapper::Algorithm$<$ Algorithm\-Type, Algorithm\-Data\-Type $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=2cm]{structpeoParallelAlgorithmWrapper_1_1Algorithm} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +\hypertarget{structpeoParallelAlgorithmWrapper_1_1Algorithm_bdd2048610a35f525d7cef9a9041caba}{ +\hyperlink{structpeoParallelAlgorithmWrapper_1_1Algorithm_bdd2048610a35f525d7cef9a9041caba}{Algorithm} (Algorithm\-Type \&external\-Algorithm, Algorithm\-Data\-Type \&external\-Data)} +\label{structpeoParallelAlgorithmWrapper_1_1Algorithm_bdd2048610a35f525d7cef9a9041caba} + +\item +\hypertarget{structpeoParallelAlgorithmWrapper_1_1Algorithm_a54fa5366a7663491608399ab21ea092}{ +virtual void \hyperlink{structpeoParallelAlgorithmWrapper_1_1Algorithm_a54fa5366a7663491608399ab21ea092}{operator()} ()} +\label{structpeoParallelAlgorithmWrapper_1_1Algorithm_a54fa5366a7663491608399ab21ea092} + +\end{CompactItemize} +\subsection*{Public Attributes} +\begin{CompactItemize} +\item +\hypertarget{structpeoParallelAlgorithmWrapper_1_1Algorithm_91681bf54649f58335c181515a92db7a}{ +Algorithm\-Type \& \hyperlink{structpeoParallelAlgorithmWrapper_1_1Algorithm_91681bf54649f58335c181515a92db7a}{algorithm}} +\label{structpeoParallelAlgorithmWrapper_1_1Algorithm_91681bf54649f58335c181515a92db7a} + +\item +\hypertarget{structpeoParallelAlgorithmWrapper_1_1Algorithm_e812277c85c5b6884d2019849e7eabde}{ +Algorithm\-Data\-Type \& \hyperlink{structpeoParallelAlgorithmWrapper_1_1Algorithm_e812277c85c5b6884d2019849e7eabde}{algorithm\-Data}} +\label{structpeoParallelAlgorithmWrapper_1_1Algorithm_e812277c85c5b6884d2019849e7eabde} + +\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$typename Algorithm\-Type, typename Algorithm\-Data\-Type$>$ struct peo\-Parallel\-Algorithm\-Wrapper::Algorithm$<$ Algorithm\-Type, Algorithm\-Data\-Type $>$} + + + + + +Definition at line 81 of file peo\-Parallel\-Algorithm\-Wrapper.h. + +The documentation for this struct was generated from the following file:\begin{CompactItemize} +\item +peo\-Parallel\-Algorithm\-Wrapper.h\end{CompactItemize} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoParallelAlgorithmWrapper_1_1Algorithm_3_01AlgorithmType_00_01void_01_4.eps b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoParallelAlgorithmWrapper_1_1Algorithm_3_01AlgorithmType_00_01void_01_4.eps new file mode 100644 index 000000000..6c358548e --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoParallelAlgorithmWrapper_1_1Algorithm_3_01AlgorithmType_00_01void_01_4.eps @@ -0,0 +1,197 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 104.439 +%%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.7875 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 2 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 +(peoParallelAlgorithmWrapper::Algorithm< AlgorithmType, void >) cw +(peoParallelAlgorithmWrapper::AbstractAlgorithm) 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 ----- + + (peoParallelAlgorithmWrapper::Algorithm< AlgorithmType, void >) 0 0 box + (peoParallelAlgorithmWrapper::AbstractAlgorithm) 0 1 box + +% ----- relations ----- + +solid +0 0 0 out +solid +1 0 1 in diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoParallelAlgorithmWrapper_1_1Algorithm_3_01AlgorithmType_00_01void_01_4.pdf b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoParallelAlgorithmWrapper_1_1Algorithm_3_01AlgorithmType_00_01void_01_4.pdf new file mode 100644 index 000000000..262887441 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoParallelAlgorithmWrapper_1_1Algorithm_3_01AlgorithmType_00_01void_01_4.pdf @@ -0,0 +1,74 @@ +%PDF-1.3 +%Çì¢ +5 0 obj +<> +stream +xœ•[KÄ0…ßçWÌ£ŠŒI:ÍeAA|õð¹Ön­´´›-ŠÿÞ©Û-»àƒB’sNf¾dƒŠ4ªiÌkÙÁÅ£Ãz +ïdÖ°ýÀy);¼‰ò¨…œ-Æ5ì.ktÄÞ['Yb—1ÆN†ª¿/RѶU{ÝÖ}jÆ·î9ÃP¥ÕjQ.qÙÆ¯¡:ǾyūӸ·@3k4~J¯¦n¹R +MdØ`ªàé¨V¤ ˆNQftøêËvLE9.ÎÂ&,ÁËËù¦éG´rÂmò¯Û™=y›a+É#aö÷u/L¾1ÄÒ2ód3'ÃÎQž*Ç5Ögû '0v÷endstream +endobj +6 0 obj +253 +endobj +4 0 obj +<> +/Contents 5 0 R +>> +endobj +3 0 obj +<< /Type /Pages /Kids [ +4 0 R +] /Count 1 +>> +endobj +1 0 obj +<> +endobj +7 0 obj +<>endobj +9 0 obj +<> +endobj +10 0 obj +<> +endobj +8 0 obj +<> +endobj +2 0 obj +<>endobj +xref +0 11 +0000000000 65535 f +0000000569 00000 n +0000000783 00000 n +0000000510 00000 n +0000000357 00000 n +0000000015 00000 n +0000000338 00000 n +0000000617 00000 n +0000000717 00000 n +0000000658 00000 n +0000000687 00000 n +trailer +<< /Size 11 /Root 1 0 R /Info 2 0 R +/ID [(}EqÜj®ëÙYjv\n®)(}EqÜj®ëÙYjv\n®)] +>> +startxref +940 +%%EOF diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoParallelAlgorithmWrapper_1_1Algorithm_3_01AlgorithmType_00_01void_01_4.tex b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoParallelAlgorithmWrapper_1_1Algorithm_3_01AlgorithmType_00_01void_01_4.tex new file mode 100644 index 000000000..6653f0f9d --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoParallelAlgorithmWrapper_1_1Algorithm_3_01AlgorithmType_00_01void_01_4.tex @@ -0,0 +1,45 @@ +\hypertarget{structpeoParallelAlgorithmWrapper_1_1Algorithm_3_01AlgorithmType_00_01void_01_4}{ +\section{peo\-Parallel\-Algorithm\-Wrapper::Algorithm$<$ Algorithm\-Type, void $>$ Struct Template Reference} +\label{structpeoParallelAlgorithmWrapper_1_1Algorithm_3_01AlgorithmType_00_01void_01_4}\index{peoParallelAlgorithmWrapper::Algorithm< AlgorithmType, void >@{peoParallelAlgorithmWrapper::Algorithm$<$ AlgorithmType, void $>$}} +} +Inheritance diagram for peo\-Parallel\-Algorithm\-Wrapper::Algorithm$<$ Algorithm\-Type, void $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=2cm]{structpeoParallelAlgorithmWrapper_1_1Algorithm_3_01AlgorithmType_00_01void_01_4} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +\hypertarget{structpeoParallelAlgorithmWrapper_1_1Algorithm_3_01AlgorithmType_00_01void_01_4_c44d45b69accab079e1fb30d7ddf6b4e}{ +\hyperlink{structpeoParallelAlgorithmWrapper_1_1Algorithm_3_01AlgorithmType_00_01void_01_4_c44d45b69accab079e1fb30d7ddf6b4e}{Algorithm} (Algorithm\-Type \&external\-Algorithm)} +\label{structpeoParallelAlgorithmWrapper_1_1Algorithm_3_01AlgorithmType_00_01void_01_4_c44d45b69accab079e1fb30d7ddf6b4e} + +\item +\hypertarget{structpeoParallelAlgorithmWrapper_1_1Algorithm_3_01AlgorithmType_00_01void_01_4_27b5bd346932e7f3ba9dd8c9e0dd952b}{ +virtual void \hyperlink{structpeoParallelAlgorithmWrapper_1_1Algorithm_3_01AlgorithmType_00_01void_01_4_27b5bd346932e7f3ba9dd8c9e0dd952b}{operator()} ()} +\label{structpeoParallelAlgorithmWrapper_1_1Algorithm_3_01AlgorithmType_00_01void_01_4_27b5bd346932e7f3ba9dd8c9e0dd952b} + +\end{CompactItemize} +\subsection*{Public Attributes} +\begin{CompactItemize} +\item +\hypertarget{structpeoParallelAlgorithmWrapper_1_1Algorithm_3_01AlgorithmType_00_01void_01_4_7dcb305dd8c78ffac232bd86b913183d}{ +Algorithm\-Type \& \hyperlink{structpeoParallelAlgorithmWrapper_1_1Algorithm_3_01AlgorithmType_00_01void_01_4_7dcb305dd8c78ffac232bd86b913183d}{algorithm}} +\label{structpeoParallelAlgorithmWrapper_1_1Algorithm_3_01AlgorithmType_00_01void_01_4_7dcb305dd8c78ffac232bd86b913183d} + +\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$typename Algorithm\-Type$>$ struct peo\-Parallel\-Algorithm\-Wrapper::Algorithm$<$ Algorithm\-Type, void $>$} + + + + + +Definition at line 95 of file peo\-Parallel\-Algorithm\-Wrapper.h. + +The documentation for this struct was generated from the following file:\begin{CompactItemize} +\item +peo\-Parallel\-Algorithm\-Wrapper.h\end{CompactItemize} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1AbstractAggregationAlgorithm.eps b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1AbstractAggregationAlgorithm.eps new file mode 100644 index 000000000..62a992443 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1AbstractAggregationAlgorithm.eps @@ -0,0 +1,203 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 36.1011 +%%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 13.85 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 2 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 +(peoSynchronousMultiStart< EntityType >::AbstractAggregationAlgorithm) cw +(peoSynchronousMultiStart< EntityType >::AggregationAlgorithm< AggregationAlgorithmType >) cw +(peoSynchronousMultiStart< EntityType >::NoAggregationFunction) 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 ----- + + (peoSynchronousMultiStart< EntityType >::AbstractAggregationAlgorithm) 0.5 1 box + (peoSynchronousMultiStart< EntityType >::AggregationAlgorithm< AggregationAlgorithmType >) 0 0 box + (peoSynchronousMultiStart< EntityType >::NoAggregationFunction) 1 0 box + +% ----- relations ----- + +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-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1AbstractAggregationAlgorithm.pdf b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1AbstractAggregationAlgorithm.pdf new file mode 100644 index 0000000000000000000000000000000000000000..95a6fa6372f85622635ab2d7926086bff5e1e3b3 GIT binary patch literal 1431 zcmZ`(YfKzf6fUH^ZWFE6Z6Gn`+6q}xVP@DjLDYTlsHM=^C8Vr0o$lU!l-(VencXg= zSczL}t10Cb8iX2wO{~FEpw!f8VwF^>1~n~O1p;c(q}d-esl+~r-n%Sd7o9&d^PO|P zIp=)eoy-bjQ4W)<0GVGzTKa$r(vUxJ5EK+pyO7T*xu6;&ELG(8NJxNGk%yCz5!rY< zDl7z|Bp}WUf<3+LSH92a%^%<2v3O(g{MZkH2(%pE=`H`jIPvJWsrvT|V0z_)rrwmF zn>LtQHSN8#y?>m0wSU9D=Vvp1kKCPpVZ`xd;e)r&%eIsyO2s{&*WPS@cB6cta%-Qi zb|NvPcIBMXp9}rnK6-3nu*dUea8IY{(%vJ!ysq6d7X(9a$IG`aeizWa)^&ORozcLQ zGSL6bS;xfnFk-H@jqIG=cI2&BezcBX+10j%RNp2T0Lzkd39b5`2pV+&Vjew$3Hdc7{q zoAHUwnKe~BS(0(|#NnPlhv!3WwJo>%PivA-v0DvEtWB}>TyiMXEIX8OyYi_wn&zIU zZ`xN?+O0fz%{A5Y;kNGmL!K`22tff%G*Q`^!|ho}n9iKsGUcXN6^2(2^@t7sZ3)VWLz zz)=DDB&Z;U02GTv-Y?jYh^O2zQN-hFhLExV zn};&scT6ZkV!9|4Ym0ng*@T!3_XVSkiI959Z5N>xkhWP+12Kc2P!hISDYIG{t2A&D z=i!|z6wA%8IKy*l|ls_a0Syac!A`CzEw=8z-q){YBlyp z9Hyez*U}6&O2 Fz&~0J-ZB6H literal 0 HcmV?d00001 diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1AbstractAggregationAlgorithm.tex b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1AbstractAggregationAlgorithm.tex new file mode 100644 index 000000000..d232dea56 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1AbstractAggregationAlgorithm.tex @@ -0,0 +1,37 @@ +\hypertarget{structpeoSynchronousMultiStart_1_1AbstractAggregationAlgorithm}{ +\section{peo\-Synchronous\-Multi\-Start$<$ Entity\-Type $>$::Abstract\-Aggregation\-Algorithm Struct Reference} +\label{structpeoSynchronousMultiStart_1_1AbstractAggregationAlgorithm}\index{peoSynchronousMultiStart::AbstractAggregationAlgorithm@{peoSynchronousMultiStart::AbstractAggregationAlgorithm}} +} +Inheritance diagram for peo\-Synchronous\-Multi\-Start$<$ Entity\-Type $>$::Abstract\-Aggregation\-Algorithm::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=1.01083cm]{structpeoSynchronousMultiStart_1_1AbstractAggregationAlgorithm} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +\hypertarget{structpeoSynchronousMultiStart_1_1AbstractAggregationAlgorithm_d5bb9f3712564b788bb7c6da71ef2d3f}{ +virtual \hyperlink{structpeoSynchronousMultiStart_1_1AbstractAggregationAlgorithm_d5bb9f3712564b788bb7c6da71ef2d3f}{$\sim$Abstract\-Aggregation\-Algorithm} ()} +\label{structpeoSynchronousMultiStart_1_1AbstractAggregationAlgorithm_d5bb9f3712564b788bb7c6da71ef2d3f} + +\item +\hypertarget{structpeoSynchronousMultiStart_1_1AbstractAggregationAlgorithm_cf9b3275e26f24984c9bb839e7f07ba6}{ +virtual void \hyperlink{structpeoSynchronousMultiStart_1_1AbstractAggregationAlgorithm_cf9b3275e26f24984c9bb839e7f07ba6}{operator()} (\hyperlink{structpeoSynchronousMultiStart_1_1AbstractDataType}{Abstract\-Data\-Type} \&data\-Type\-Instance\-A, \hyperlink{structpeoSynchronousMultiStart_1_1AbstractDataType}{Abstract\-Data\-Type} \&data\-Type\-Instance\-B)} +\label{structpeoSynchronousMultiStart_1_1AbstractAggregationAlgorithm_cf9b3275e26f24984c9bb839e7f07ba6} + +\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$typename Entity\-Type$>$ struct peo\-Synchronous\-Multi\-Start$<$ Entity\-Type $>$::Abstract\-Aggregation\-Algorithm} + + + + + +Definition at line 157 of file peo\-Synchronous\-Multi\-Start.h. + +The documentation for this struct was generated from the following file:\begin{CompactItemize} +\item +peo\-Synchronous\-Multi\-Start.h\end{CompactItemize} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1AbstractAlgorithm.eps b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1AbstractAlgorithm.eps new file mode 100644 index 000000000..863be5db9 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1AbstractAlgorithm.eps @@ -0,0 +1,197 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 96.1538 +%%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 5.2 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 2 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 +(peoSynchronousMultiStart< EntityType >::AbstractAlgorithm) cw +(peoSynchronousMultiStart< EntityType >::Algorithm< AlgorithmType >) 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 ----- + + (peoSynchronousMultiStart< EntityType >::AbstractAlgorithm) 0 1 box + (peoSynchronousMultiStart< EntityType >::Algorithm< AlgorithmType >) 0 0 box + +% ----- relations ----- + +solid +1 0 0.25 out +solid +0 0 0.75 in diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1AbstractAlgorithm.pdf b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1AbstractAlgorithm.pdf new file mode 100644 index 0000000000000000000000000000000000000000..aa871ed957470d18539534f02d0f87b12cdfc2fb GIT binary patch literal 1343 zcmZ`(ZD>JP4v5Yf#!A(rHa4BK=iVguCY9RSG)XD5ZMcazmxlJ5oTk?$_ttw) z>a7#}U@NSSeS~(%R<~&f^G8Lc`!VbktXrMv=pUKR65MbgvW`us7W~3<(xjQKyMOLI z&wHNdyzl$G=UM|^e+6IZ0M-jr9~}h(zcVLMGUY zqgo8t)BuC%SWW_Sa3Fn29pjezrvJ5!Bt{QCe6s1-vVp+XNZ{@Q=Yfy=mM-#J_O^Xq zy6H;y{xz2z4^~WU9Gd#%<%UnssuSzYrzhVm+4p<6wPWR|u0hc4b) z?L1h$S@dQ4<;cd4Hty&4g{|o=*Kh8c3XZLOq#l-g-|Eq&_M*>Dy?t597077h7*yF7NDKHM%GAQ(GtCv2B_F0eoc&JiKYfGEYmN+; z-Bw$APYi$Y^!DVVRo8xt+<5KrOV{PEYOxy2b&-Ct&a-~Aw}Tf!4ssSu3H5Yg6p-T> zHQ|^ddo&YGf`Twd&inPH(~G%=XX%z)?(C1$`dV0lX* z0;xiZNiww@m7k^NnDsJ|6IwhkF_U~@zw7z^g`@#$2{b{zrY0xMYRC<+vxy>x0u)SbC(H>}H9b3DmA#-qTOCV9v2ODP z1F)e}Gl&t@l`aC^yim#6%V}Hb-64vmdTHxz-VJt+bMYMK=6POpx@o*gi~V0Hq>u!* z)hA@bXqJ;WFQ(}>uV(hdu}YD;6zQZu`D|xQ9d`f@@;u;XA1DffLx3GHkBJWI411tD zi@BZD_&J#1qP5P!oOU`hb1;sd&vkP1&k$YIxH(+ci?A1*;d1_mOLSRDV4eQJAPOqG zF|8LONz>@~F}ERVR68`tjG}j=(F?=2!Et-z4|RVFb;aFj{{45l%I6~yHn|3ob&_o& NwaE^wR$q%BJOdKHuc-h4 literal 0 HcmV?d00001 diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1AbstractAlgorithm.tex b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1AbstractAlgorithm.tex new file mode 100644 index 000000000..7bcb35c7c --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1AbstractAlgorithm.tex @@ -0,0 +1,37 @@ +\hypertarget{structpeoSynchronousMultiStart_1_1AbstractAlgorithm}{ +\section{peo\-Synchronous\-Multi\-Start$<$ Entity\-Type $>$::Abstract\-Algorithm Struct Reference} +\label{structpeoSynchronousMultiStart_1_1AbstractAlgorithm}\index{peoSynchronousMultiStart::AbstractAlgorithm@{peoSynchronousMultiStart::AbstractAlgorithm}} +} +Inheritance diagram for peo\-Synchronous\-Multi\-Start$<$ Entity\-Type $>$::Abstract\-Algorithm::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=2cm]{structpeoSynchronousMultiStart_1_1AbstractAlgorithm} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +\hypertarget{structpeoSynchronousMultiStart_1_1AbstractAlgorithm_c77be114590c79c1b96d3afbe73596e0}{ +virtual \hyperlink{structpeoSynchronousMultiStart_1_1AbstractAlgorithm_c77be114590c79c1b96d3afbe73596e0}{$\sim$Abstract\-Algorithm} ()} +\label{structpeoSynchronousMultiStart_1_1AbstractAlgorithm_c77be114590c79c1b96d3afbe73596e0} + +\item +\hypertarget{structpeoSynchronousMultiStart_1_1AbstractAlgorithm_a5f7790ac2b99e798e4e84f2d5a5f78c}{ +virtual void \hyperlink{structpeoSynchronousMultiStart_1_1AbstractAlgorithm_a5f7790ac2b99e798e4e84f2d5a5f78c}{operator()} (\hyperlink{structpeoSynchronousMultiStart_1_1AbstractDataType}{Abstract\-Data\-Type} \&data\-Type\-Instance)} +\label{structpeoSynchronousMultiStart_1_1AbstractAlgorithm_a5f7790ac2b99e798e4e84f2d5a5f78c} + +\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$typename Entity\-Type$>$ struct peo\-Synchronous\-Multi\-Start$<$ Entity\-Type $>$::Abstract\-Algorithm} + + + + + +Definition at line 139 of file peo\-Synchronous\-Multi\-Start.h. + +The documentation for this struct was generated from the following file:\begin{CompactItemize} +\item +peo\-Synchronous\-Multi\-Start.h\end{CompactItemize} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1AbstractDataType.eps b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1AbstractDataType.eps new file mode 100644 index 000000000..15195ea2c --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1AbstractDataType.eps @@ -0,0 +1,197 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 109.89 +%%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.55 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 2 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 +(peoSynchronousMultiStart< EntityType >::AbstractDataType) cw +(peoSynchronousMultiStart< EntityType >::DataType< Type >) 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 ----- + + (peoSynchronousMultiStart< EntityType >::AbstractDataType) 0 1 box + (peoSynchronousMultiStart< EntityType >::DataType< Type >) 0 0 box + +% ----- relations ----- + +solid +1 0 0.25 out +solid +0 0 0.75 in diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1AbstractDataType.pdf b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1AbstractDataType.pdf new file mode 100644 index 0000000000000000000000000000000000000000..efbd671a0ad361689be7a68f8c5159d0857e526d GIT binary patch literal 1291 zcmZ`(ZD>O7)?cc?oE30QM*WO60N2--b7`T2sg=TdPkDm-FwnT z5uu&v<_8wE3|)VSAGP58p)N!4V`3YWLd8Pu)QwfNKSY!|#GR8@Yo*S z77Jj?zUAo~=cI3?Pt?K{2&ul+n zJp0x2-BABX%-cughduh}lZD@&Z2y-gqj^W*A9s;^$A2xhDwKz+iUtRFwo>9(Vw5z{ zsH&{f(zr>0vLpyt6r7a~X9z)Er%8sbJOxB#YG^4vLJi2ruWOM2WlaPU#3V@5432x! zY<+-1M%X#c@M^#oxvY#JF;WNjAZTEobPmcl#-A{qJcvPOIMw;3mWymr)3V zLW)arwLDdvq2`%&3RB`*tROMneDS>f?eoQ^5oz={VA18u3-cNB+bG)+r^!W?+)#z8 z13BKV^4olIonlaK0|}}LYOI#Egp$lPN;ry0AQfgj3O+SFyD*idr~p<+QxU40Jpn&n z-=Z1Ji0Eo7!wylZ6f6~BE4&Cy)sk+o-t4Zn2!dS{1cxY!wkikI8?@;Em4YgZQ*&Kh zF^tVhf)>Oy-R#!VJ7Y8nNNtL>08laGOj@VS2-ZYI!pwzjl4O-|GcI6~19ImVPR?L< zCj?o7Nft=31hd+}!4gamVQES*YZZi4g4rzZa_#TIY_|7soo{fNuBdUU!`BFtfVzvq zyqL(E2J6Su#-u*ktYID$yc_jy++_Z7&A{=>V+-7~JJ+@eZF^cP-bF%ua}B2GEN7xq L5|PQ|Y4oDkha{gi literal 0 HcmV?d00001 diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1AbstractDataType.tex b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1AbstractDataType.tex new file mode 100644 index 000000000..540d77fd4 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1AbstractDataType.tex @@ -0,0 +1,37 @@ +\hypertarget{structpeoSynchronousMultiStart_1_1AbstractDataType}{ +\section{peo\-Synchronous\-Multi\-Start$<$ Entity\-Type $>$::Abstract\-Data\-Type Struct Reference} +\label{structpeoSynchronousMultiStart_1_1AbstractDataType}\index{peoSynchronousMultiStart::AbstractDataType@{peoSynchronousMultiStart::AbstractDataType}} +} +Inheritance diagram for peo\-Synchronous\-Multi\-Start$<$ Entity\-Type $>$::Abstract\-Data\-Type::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=2cm]{structpeoSynchronousMultiStart_1_1AbstractDataType} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +\hypertarget{structpeoSynchronousMultiStart_1_1AbstractDataType_4d868a93f8e97621ec5c7b6a2e28b265}{ +virtual \hyperlink{structpeoSynchronousMultiStart_1_1AbstractDataType_4d868a93f8e97621ec5c7b6a2e28b265}{$\sim$Abstract\-Data\-Type} ()} +\label{structpeoSynchronousMultiStart_1_1AbstractDataType_4d868a93f8e97621ec5c7b6a2e28b265} + +\item +\hypertarget{structpeoSynchronousMultiStart_1_1AbstractDataType_a4addfca8a9acecadb4c786deed36934}{ +template$<$typename Type$>$ \hyperlink{structpeoSynchronousMultiStart_1_1AbstractDataType_a4addfca8a9acecadb4c786deed36934}{operator Type \&} ()} +\label{structpeoSynchronousMultiStart_1_1AbstractDataType_a4addfca8a9acecadb4c786deed36934} + +\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$typename Entity\-Type$>$ struct peo\-Synchronous\-Multi\-Start$<$ Entity\-Type $>$::Abstract\-Data\-Type} + + + + + +Definition at line 122 of file peo\-Synchronous\-Multi\-Start.h. + +The documentation for this struct was generated from the following file:\begin{CompactItemize} +\item +peo\-Synchronous\-Multi\-Start.h\end{CompactItemize} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1AggregationAlgorithm.eps b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1AggregationAlgorithm.eps new file mode 100644 index 000000000..9a1dfebaa --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1AggregationAlgorithm.eps @@ -0,0 +1,197 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 72.2022 +%%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 6.925 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 2 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 +(peoSynchronousMultiStart< EntityType >::AggregationAlgorithm< AggregationAlgorithmType >) cw +(peoSynchronousMultiStart< EntityType >::AbstractAggregationAlgorithm) 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 ----- + + (peoSynchronousMultiStart< EntityType >::AggregationAlgorithm< AggregationAlgorithmType >) 0 0 box + (peoSynchronousMultiStart< EntityType >::AbstractAggregationAlgorithm) 0 1 box + +% ----- relations ----- + +solid +0 0 0 out +solid +1 0 1 in diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1AggregationAlgorithm.pdf b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1AggregationAlgorithm.pdf new file mode 100644 index 0000000000000000000000000000000000000000..60c13dc95632247db5e7c775224960b656832514 GIT binary patch literal 1296 zcmZ`(ZD>9&fMHeec^ICT-oP=I9jm!P&5ZNbSHZH0D*_>fzRQ>;Vej;jR%t|Uj2B* zje)go&#!+qVH}*7`RKQiUv^eKe>HY^vbg>H@Tb+Kd!;*{XNtZKNiDmUnaavXtX;>; z&5;KSi;J#%HyvqvICg8|j~?sZp0=CeH~YT}caC~GHt)DLm^oVUm#NnJ@tVno7s}xH z(`~=s^xh8*9cvrYp8a(2?3I<|#G>}cOK&Z9yWFKN%ZE+!(hqu8y-qA2{_N6{1zK~< zx1{9NlhN-j&*X_Oc7e0S=Ppbw@O;v5y=E!d9vkRtT4CzzI#yHurYbr`FG;bfU%Q%P zplsp2GlNg=_H~+v9{upM({pvvi9ahgBsz}bWF%({`^U}X7V=+75kU^BD)=1Ow+ADy z8pFtgBbr)I(l98nvMdNtkt(GSU{xI_DYWq@0PitZREHbck}LAX%8L>}{YLNjjPJW@n8g2#P2O4p9{CRSs77kjVQ=0gcA7 zxgo9^Mw6Prc`>4!og}?4hLa3gpQ5b{u*^7<)^QXFP!xeMb3wZ-+hiDpc}#Y&kog6Z zGni7%Or3?v5?j+*m`$0>6~wuiO`glO+gReW^ptmCc7-j~>~q5ZxKvlQIM&%G2_nC? zAG3KO@)5$;kEadM#$=R09u#{wHacO@eD&##-ouys*Np!Yy&b&#<1))!B*Zt@psG%@ OCRWRKU^2P3y1{>I>Y7Oa literal 0 HcmV?d00001 diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1AggregationAlgorithm.tex b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1AggregationAlgorithm.tex new file mode 100644 index 000000000..1ed41f60a --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1AggregationAlgorithm.tex @@ -0,0 +1,45 @@ +\hypertarget{structpeoSynchronousMultiStart_1_1AggregationAlgorithm}{ +\section{peo\-Synchronous\-Multi\-Start$<$ Entity\-Type $>$::Aggregation\-Algorithm$<$ Aggregation\-Algorithm\-Type $>$ Struct Template Reference} +\label{structpeoSynchronousMultiStart_1_1AggregationAlgorithm}\index{peoSynchronousMultiStart::AggregationAlgorithm@{peoSynchronousMultiStart::AggregationAlgorithm}} +} +Inheritance diagram for peo\-Synchronous\-Multi\-Start$<$ Entity\-Type $>$::Aggregation\-Algorithm$<$ Aggregation\-Algorithm\-Type $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=2cm]{structpeoSynchronousMultiStart_1_1AggregationAlgorithm} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +\hypertarget{structpeoSynchronousMultiStart_1_1AggregationAlgorithm_1e03bf7728d19f4649366238962ca365}{ +\hyperlink{structpeoSynchronousMultiStart_1_1AggregationAlgorithm_1e03bf7728d19f4649366238962ca365}{Aggregation\-Algorithm} (Aggregation\-Algorithm\-Type \&external\-Aggregation\-Algorithm)} +\label{structpeoSynchronousMultiStart_1_1AggregationAlgorithm_1e03bf7728d19f4649366238962ca365} + +\item +\hypertarget{structpeoSynchronousMultiStart_1_1AggregationAlgorithm_f8abe94db942aa42f0e3d9c1657db581}{ +void \hyperlink{structpeoSynchronousMultiStart_1_1AggregationAlgorithm_f8abe94db942aa42f0e3d9c1657db581}{operator()} (\hyperlink{structpeoSynchronousMultiStart_1_1AbstractDataType}{Abstract\-Data\-Type} \&data\-Type\-Instance\-A, \hyperlink{structpeoSynchronousMultiStart_1_1AbstractDataType}{Abstract\-Data\-Type} \&data\-Type\-Instance\-B)} +\label{structpeoSynchronousMultiStart_1_1AggregationAlgorithm_f8abe94db942aa42f0e3d9c1657db581} + +\end{CompactItemize} +\subsection*{Public Attributes} +\begin{CompactItemize} +\item +\hypertarget{structpeoSynchronousMultiStart_1_1AggregationAlgorithm_3c701a64f21aa00278c58b5b4ac914a1}{ +Aggregation\-Algorithm\-Type \& \hyperlink{structpeoSynchronousMultiStart_1_1AggregationAlgorithm_3c701a64f21aa00278c58b5b4ac914a1}{aggregation\-Algorithm}} +\label{structpeoSynchronousMultiStart_1_1AggregationAlgorithm_3c701a64f21aa00278c58b5b4ac914a1} + +\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$typename Entity\-Type$>$template$<$typename Aggregation\-Algorithm\-Type$>$ struct peo\-Synchronous\-Multi\-Start$<$ Entity\-Type $>$::Aggregation\-Algorithm$<$ Aggregation\-Algorithm\-Type $>$} + + + + + +Definition at line 164 of file peo\-Synchronous\-Multi\-Start.h. + +The documentation for this struct was generated from the following file:\begin{CompactItemize} +\item +peo\-Synchronous\-Multi\-Start.h\end{CompactItemize} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1Algorithm.eps b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1Algorithm.eps new file mode 100644 index 000000000..23ef940d6 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1Algorithm.eps @@ -0,0 +1,197 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 96.1538 +%%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 5.2 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 2 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 +(peoSynchronousMultiStart< EntityType >::Algorithm< AlgorithmType >) cw +(peoSynchronousMultiStart< EntityType >::AbstractAlgorithm) 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 ----- + + (peoSynchronousMultiStart< EntityType >::Algorithm< AlgorithmType >) 0 0 box + (peoSynchronousMultiStart< EntityType >::AbstractAlgorithm) 0 1 box + +% ----- relations ----- + +solid +0 0 0 out +solid +1 0 1 in diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1Algorithm.pdf b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1Algorithm.pdf new file mode 100644 index 0000000000000000000000000000000000000000..e583faaf5b2e83ea4a3d1b6584b370fcd480c3f8 GIT binary patch literal 1345 zcmZ`(e{2&~93MmtzUhDvH7bcuO`#)f?{4k2SKK<*wH?hU>)PsoZ85j@b-ks%BX_T} zn<&O58VEnuz(^3IbHW4-36QzOM6&^gVGO@ENyZ5K!$gM;bwLtCmZ|S`?J5QDpS$<@ zzVGLKzn{Lc*uMY^2gKA3~C@)7FvC>MS&_WSEa?3G-HHh3XiC`xV zsbOrl1D$ACii6~bJ*n@Mv)r=x{&;(rZLnhFH)zSLZH6BLOAmZquxInTr`L0zCujG1 z&h}|lsh^&mec|%<9qq&Q1$D0vO+EGIT>HrhQ_;r*uf;~b^%TqwrU#E7KKJ*u?|jSCQ}LDOj_h@nM@D{IJn8=Q zFYVfZtEnL*zJK$kJ}B+q?LFkXHSqXM?URLrU7y4&J0{jd#JZ~MkB-VuI0Bu|uRim^ zFTIbfDLnJi#p&ankByCVf9W{feZu|y*tM50RL+iH`ZM`+#r{djw63>7gDXcr8mskA zj<2|p*q&N`;uPrVuP^DZe`VtCAQIOe(*Sn#rt|h!j&>vlR2i=k{Cg-=8ZQpgNxy@^*WMnDvkuVZRly zG=GjI-BdOz0`dMRTV{d|NykhE6qMswFY&8!Nl6!q7z$7z(L$ILtZRC9wyUxn1C=_Q z2w~0W3ix16RMm+d(&TLfio8(Dl@(K2>Fpu1syM0iM(4URj>+1Zh5zIdO_F0+ zqrWhS0&*v&{X*ndRXTpmZHPQdM1{;KdN({y*l0Y}Rye$D%R4={uAcwrp7X~$#SbFQ VY;tuXX(TNowaE+&23MUM{0nX5xcUG9 literal 0 HcmV?d00001 diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1Algorithm.tex b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1Algorithm.tex new file mode 100644 index 000000000..4772f9628 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1Algorithm.tex @@ -0,0 +1,45 @@ +\hypertarget{structpeoSynchronousMultiStart_1_1Algorithm}{ +\section{peo\-Synchronous\-Multi\-Start$<$ Entity\-Type $>$::Algorithm$<$ Algorithm\-Type $>$ Struct Template Reference} +\label{structpeoSynchronousMultiStart_1_1Algorithm}\index{peoSynchronousMultiStart::Algorithm@{peoSynchronousMultiStart::Algorithm}} +} +Inheritance diagram for peo\-Synchronous\-Multi\-Start$<$ Entity\-Type $>$::Algorithm$<$ Algorithm\-Type $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=2cm]{structpeoSynchronousMultiStart_1_1Algorithm} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +\hypertarget{structpeoSynchronousMultiStart_1_1Algorithm_8ba4ac2674ca61a8e6b0af2e8e25ba66}{ +\hyperlink{structpeoSynchronousMultiStart_1_1Algorithm_8ba4ac2674ca61a8e6b0af2e8e25ba66}{Algorithm} (Algorithm\-Type \&external\-Algorithm)} +\label{structpeoSynchronousMultiStart_1_1Algorithm_8ba4ac2674ca61a8e6b0af2e8e25ba66} + +\item +\hypertarget{structpeoSynchronousMultiStart_1_1Algorithm_d8902e501b61a8d5727589a5a106bb10}{ +void \hyperlink{structpeoSynchronousMultiStart_1_1Algorithm_d8902e501b61a8d5727589a5a106bb10}{operator()} (\hyperlink{structpeoSynchronousMultiStart_1_1AbstractDataType}{Abstract\-Data\-Type} \&data\-Type\-Instance)} +\label{structpeoSynchronousMultiStart_1_1Algorithm_d8902e501b61a8d5727589a5a106bb10} + +\end{CompactItemize} +\subsection*{Public Attributes} +\begin{CompactItemize} +\item +\hypertarget{structpeoSynchronousMultiStart_1_1Algorithm_2d533c96d2eefea51a72d241d39abf22}{ +Algorithm\-Type \& \hyperlink{structpeoSynchronousMultiStart_1_1Algorithm_2d533c96d2eefea51a72d241d39abf22}{algorithm}} +\label{structpeoSynchronousMultiStart_1_1Algorithm_2d533c96d2eefea51a72d241d39abf22} + +\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$typename Entity\-Type$>$template$<$typename Algorithm\-Type$>$ struct peo\-Synchronous\-Multi\-Start$<$ Entity\-Type $>$::Algorithm$<$ Algorithm\-Type $>$} + + + + + +Definition at line 146 of file peo\-Synchronous\-Multi\-Start.h. + +The documentation for this struct was generated from the following file:\begin{CompactItemize} +\item +peo\-Synchronous\-Multi\-Start.h\end{CompactItemize} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1DataType.eps b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1DataType.eps new file mode 100644 index 000000000..b4f4c4665 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1DataType.eps @@ -0,0 +1,197 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 109.89 +%%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.55 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 2 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 +(peoSynchronousMultiStart< EntityType >::DataType< Type >) cw +(peoSynchronousMultiStart< EntityType >::AbstractDataType) 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 ----- + + (peoSynchronousMultiStart< EntityType >::DataType< Type >) 0 0 box + (peoSynchronousMultiStart< EntityType >::AbstractDataType) 0 1 box + +% ----- relations ----- + +solid +0 0 0 out +solid +1 0 1 in diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1DataType.pdf b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1DataType.pdf new file mode 100644 index 0000000000000000000000000000000000000000..5e993da808169b8b4052b9b46fa3196373013954 GIT binary patch literal 1289 zcmZ`(ZD>SMEL0 z=*ko(4B43VV@yR5m9kY-bXMJ{!pbbII7XQ|C+leSk062~=ork8_oPXqwYz_k`@H9Q z?)yH^d#^d*^{tf3?Z`a*c;89n#1v~CTTn#>S;taw-i2jAg2bmLIMXrlB^1uQEULv= zRTVP0&Xgp|9Q!6P*!T-IU3<8^d-nX&Z3jz_l$Lx{^zr=B|5k5EpXy3pk&7OUAN)OS z+Iw^1rmx38y>Q%^wRg5&@m=ff2e1DA`SOwlZ5@fBHKY4xHTHdf|3=;ZIr_*S<_TBF z&UNk0Wd}^&k)wlmA9QZMd~bB&vdCZk!>^wIIB)&pXXPuDJA2AZpZ)pm)AJiE9u_Zq zQh&H7{M!0S+tm-(HZSd+Sl-xo-Cb92Emo@8BHlZ4&hB4uwxNhFy`0#2sG8~TAW_VqQ zLq6Cu$?$2wmV|5&L0Y5+?m^JNBIPWUYfL<0GIbDx&TzIh1Cx3+X5cUqjR#Q#gF;$J z3bh)rE(rV(ihG+?Q!Dkm&v$ZcZKg#;~FP{|IJuey=@ z-Kx0F6{{742^&a@nq6Y410M~VC z1~;O*x|L(M0_3XnBv-UWbl%9)JLIuWdigy__TWvA2b#GN>gIbE=T;=-vZ%;kYy zn1(qeuyz_|mm%p0~JMSJVX4;Y)-`NZrX`UQB|T z2J0u%#>AiM)UXH&-VMJOhb`U37mXL}w7=anacobfq}6Jj0g8y-HMpYltc@Or3z^Ne HO+NGnWdoC$ literal 0 HcmV?d00001 diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1DataType.tex b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1DataType.tex new file mode 100644 index 000000000..d0230a652 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1DataType.tex @@ -0,0 +1,40 @@ +\hypertarget{structpeoSynchronousMultiStart_1_1DataType}{ +\section{peo\-Synchronous\-Multi\-Start$<$ Entity\-Type $>$::Data\-Type$<$ Type $>$ Struct Template Reference} +\label{structpeoSynchronousMultiStart_1_1DataType}\index{peoSynchronousMultiStart::DataType@{peoSynchronousMultiStart::DataType}} +} +Inheritance diagram for peo\-Synchronous\-Multi\-Start$<$ Entity\-Type $>$::Data\-Type$<$ Type $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=2cm]{structpeoSynchronousMultiStart_1_1DataType} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +\hypertarget{structpeoSynchronousMultiStart_1_1DataType_cf5b9add5416139738e152b461008a89}{ +\hyperlink{structpeoSynchronousMultiStart_1_1DataType_cf5b9add5416139738e152b461008a89}{Data\-Type} (Type \&external\-Data)} +\label{structpeoSynchronousMultiStart_1_1DataType_cf5b9add5416139738e152b461008a89} + +\end{CompactItemize} +\subsection*{Public Attributes} +\begin{CompactItemize} +\item +\hypertarget{structpeoSynchronousMultiStart_1_1DataType_76abc322ae058a820b2c964907bc0d80}{ +Type \& \hyperlink{structpeoSynchronousMultiStart_1_1DataType_76abc322ae058a820b2c964907bc0d80}{data}} +\label{structpeoSynchronousMultiStart_1_1DataType_76abc322ae058a820b2c964907bc0d80} + +\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$typename Entity\-Type$>$template$<$typename Type$>$ struct peo\-Synchronous\-Multi\-Start$<$ Entity\-Type $>$::Data\-Type$<$ Type $>$} + + + + + +Definition at line 132 of file peo\-Synchronous\-Multi\-Start.h. + +The documentation for this struct was generated from the following file:\begin{CompactItemize} +\item +peo\-Synchronous\-Multi\-Start.h\end{CompactItemize} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1NoAggregationFunction.eps b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1NoAggregationFunction.eps new file mode 100644 index 000000000..a3ef4d771 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1NoAggregationFunction.eps @@ -0,0 +1,197 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 93.6768 +%%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 5.3375 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 2 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 +(peoSynchronousMultiStart< EntityType >::NoAggregationFunction) cw +(peoSynchronousMultiStart< EntityType >::AbstractAggregationAlgorithm) 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 ----- + + (peoSynchronousMultiStart< EntityType >::NoAggregationFunction) 0 0 box + (peoSynchronousMultiStart< EntityType >::AbstractAggregationAlgorithm) 0 1 box + +% ----- relations ----- + +solid +0 0 0 out +solid +1 0 1 in diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1NoAggregationFunction.pdf b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1NoAggregationFunction.pdf new file mode 100644 index 000000000..8cf88d473 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1NoAggregationFunction.pdf @@ -0,0 +1,74 @@ +%PDF-1.3 +%Çì¢ +5 0 obj +<> +stream +xœ•ÛnÂ0 †ïó¾Üváåä¤AÓ$&±]m£/À*(h %hâí—ô0ŠÆ Š"ÛÑïØß¿Žx<}ÌJöøi!?0oáælÏD+€>d%¼¤A”€0(yéšu½¤Ci„‡š´‚´dw»U½8UÙ¦©«úxx?n}±ðËÆ?Á¬ò…?¥§Ý +ž'“zšçÍ*_ú¢®^Uã}úÍf)›3¡¸1ðFlÃÀ~åJFœÇdÛ%Ò&éBy™GÁ†iË-8qÑ’-`~©AK‰£P'œn"~|³ÌüˆwºÍë¦ð›òø +"iÜ•èPö¸‰à¨œhÇùY ’H&l­1nÝaG¥DðößPI##ûRsBÑ~Þzvµ¥ÓÐÐÒî@Ißr~ja$ɘ‚N‚É*Ф¶­¿Ððú!8ô (—¡©endstream +endobj +6 0 obj +327 +endobj +4 0 obj +<> +/Contents 5 0 R +>> +endobj +3 0 obj +<< /Type /Pages /Kids [ +4 0 R +] /Count 1 +>> +endobj +1 0 obj +<> +endobj +7 0 obj +<>endobj +9 0 obj +<> +endobj +10 0 obj +<> +endobj +8 0 obj +<> +endobj +2 0 obj +<>endobj +xref +0 11 +0000000000 65535 f +0000000642 00000 n +0000000856 00000 n +0000000583 00000 n +0000000431 00000 n +0000000015 00000 n +0000000412 00000 n +0000000690 00000 n +0000000790 00000 n +0000000731 00000 n +0000000760 00000 n +trailer +<< /Size 11 /Root 1 0 R /Info 2 0 R +/ID [(/g›’·FÕ1Y “Zd3)(/g›’·FÕ1Y “Zd3)] +>> +startxref +1013 +%%EOF diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1NoAggregationFunction.tex b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1NoAggregationFunction.tex new file mode 100644 index 000000000..6c3fe2a42 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/latex/structpeoSynchronousMultiStart_1_1NoAggregationFunction.tex @@ -0,0 +1,32 @@ +\hypertarget{structpeoSynchronousMultiStart_1_1NoAggregationFunction}{ +\section{peo\-Synchronous\-Multi\-Start$<$ Entity\-Type $>$::No\-Aggregation\-Function Struct Reference} +\label{structpeoSynchronousMultiStart_1_1NoAggregationFunction}\index{peoSynchronousMultiStart::NoAggregationFunction@{peoSynchronousMultiStart::NoAggregationFunction}} +} +Inheritance diagram for peo\-Synchronous\-Multi\-Start$<$ Entity\-Type $>$::No\-Aggregation\-Function::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=2cm]{structpeoSynchronousMultiStart_1_1NoAggregationFunction} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +\hypertarget{structpeoSynchronousMultiStart_1_1NoAggregationFunction_d094bb3cca92a48de0afadf576cda044}{ +void \hyperlink{structpeoSynchronousMultiStart_1_1NoAggregationFunction_d094bb3cca92a48de0afadf576cda044}{operator()} (\hyperlink{structpeoSynchronousMultiStart_1_1AbstractDataType}{Abstract\-Data\-Type} \&data\-Type\-Instance\-A, \hyperlink{structpeoSynchronousMultiStart_1_1AbstractDataType}{Abstract\-Data\-Type} \&data\-Type\-Instance\-B)} +\label{structpeoSynchronousMultiStart_1_1NoAggregationFunction_d094bb3cca92a48de0afadf576cda044} + +\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$typename Entity\-Type$>$ struct peo\-Synchronous\-Multi\-Start$<$ Entity\-Type $>$::No\-Aggregation\-Function} + + + + + +Definition at line 176 of file peo\-Synchronous\-Multi\-Start.h. + +The documentation for this struct was generated from the following file:\begin{CompactItemize} +\item +peo\-Synchronous\-Multi\-Start.h\end{CompactItemize} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/Communicable.3 b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/Communicable.3 new file mode 100644 index 000000000..d0e543861 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/Communicable.3 @@ -0,0 +1,62 @@ +.TH "Communicable" 3 "8 Oct 2007" "Version 1.0" "ParadisEO-PEOMovingObjects" \" -*- nroff -*- +.ad l +.nh +.SH NAME +Communicable \- +.SH SYNOPSIS +.br +.PP +Inherited by \fBCooperative\fP, \fBRunner\fP, \fBService\fP, and \fBWorker\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBCommunicable\fP ()" +.br +.ti -1c +.RI "virtual \fB~Communicable\fP ()" +.br +.ti -1c +.RI "COMM_ID \fBgetKey\fP ()" +.br +.ti -1c +.RI "void \fBlock\fP ()" +.br +.ti -1c +.RI "void \fBunlock\fP ()" +.br +.ti -1c +.RI "void \fBstop\fP ()" +.br +.ti -1c +.RI "void \fBresume\fP ()" +.br +.in -1c +.SS "Protected Attributes" + +.in +1c +.ti -1c +.RI "COMM_ID \fBkey\fP" +.br +.ti -1c +.RI "sem_t \fBsem_lock\fP" +.br +.ti -1c +.RI "sem_t \fBsem_stop\fP" +.br +.in -1c +.SS "Static Protected Attributes" + +.in +1c +.ti -1c +.RI "static unsigned \fBnum_comm\fP = 0" +.br +.in -1c +.SH "Detailed Description" +.PP +Definition at line 44 of file communicable.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-PEOMovingObjects from the source code. diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/Communicator.3 b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/Communicator.3 new file mode 100644 index 000000000..4c541f2d4 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/Communicator.3 @@ -0,0 +1,27 @@ +.TH "Communicator" 3 "8 Oct 2007" "Version 1.0" "ParadisEO-PEOMovingObjects" \" -*- nroff -*- +.ad l +.nh +.SH NAME +Communicator \- +.SH SYNOPSIS +.br +.PP +Inherits \fBReactiveThread\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBCommunicator\fP (int *__argc, char ***__argv)" +.br +.ti -1c +.RI "void \fBstart\fP ()" +.br +.in -1c +.SH "Detailed Description" +.PP +Definition at line 43 of file comm.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-PEOMovingObjects from the source code. diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/Cooperative.3 b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/Cooperative.3 new file mode 100644 index 000000000..9aa4a6bc7 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/Cooperative.3 @@ -0,0 +1,42 @@ +.TH "Cooperative" 3 "8 Oct 2007" "Version 1.0" "ParadisEO-PEOMovingObjects" \" -*- nroff -*- +.ad l +.nh +.SH NAME +Cooperative \- +.SH SYNOPSIS +.br +.PP +Inherits \fBCommunicable\fP. +.PP +Inherited by \fBpeoAsyncIslandMig< EOT >\fP, and \fBpeoSyncIslandMig< EOT >\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBRunner\fP * \fBgetOwner\fP ()" +.br +.ti -1c +.RI "void \fBsetOwner\fP (\fBRunner\fP &__runner)" +.br +.ti -1c +.RI "void \fBsend\fP (\fBCooperative\fP *__coop)" +.br +.ti -1c +.RI "virtual void \fBnotifySending\fP ()" +.br +.in -1c +.SS "Private Attributes" + +.in +1c +.ti -1c +.RI "\fBRunner\fP * \fBowner\fP" +.br +.in -1c +.SH "Detailed Description" +.PP +Definition at line 45 of file cooperative.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-PEOMovingObjects from the source code. diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/DisplayBestRoute.3 b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/DisplayBestRoute.3 new file mode 100644 index 000000000..18f1c70df --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/DisplayBestRoute.3 @@ -0,0 +1,34 @@ +.TH "DisplayBestRoute" 3 "8 Oct 2007" "Version 1.0" "ParadisEO-PEOMovingObjects" \" -*- nroff -*- +.ad l +.nh +.SH NAME +DisplayBestRoute \- +.SH SYNOPSIS +.br +.PP +Inherits \fBeoUpdater\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBDisplayBestRoute\fP (\fBeoPop\fP< \fBRoute\fP > &__pop)" +.br +.ti -1c +.RI "void \fBoperator()\fP ()" +.br +.in -1c +.SS "Private Attributes" + +.in +1c +.ti -1c +.RI "\fBeoPop\fP< \fBRoute\fP > & \fBpop\fP" +.br +.in -1c +.SH "Detailed Description" +.PP +Definition at line 46 of file display_best_route.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-PEOMovingObjects from the source code. diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/MergeRouteEval.3 b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/MergeRouteEval.3 new file mode 100644 index 000000000..96d7907c5 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/MergeRouteEval.3 @@ -0,0 +1,24 @@ +.TH "MergeRouteEval" 3 "8 Oct 2007" "Version 1.0" "ParadisEO-PEOMovingObjects" \" -*- nroff -*- +.ad l +.nh +.SH NAME +MergeRouteEval \- +.SH SYNOPSIS +.br +.PP +Inherits \fBpeoAggEvalFunc< EOT >< eoVector< int, Node > >\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "void \fBoperator()\fP (\fBRoute\fP &__route, const int &__part_fit)" +.br +.in -1c +.SH "Detailed Description" +.PP +Definition at line 44 of file merge_route_eval.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-PEOMovingObjects from the source code. diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/RandomExplorationAlgorithm.3 b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/RandomExplorationAlgorithm.3 new file mode 100644 index 000000000..9964708ac --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/RandomExplorationAlgorithm.3 @@ -0,0 +1,35 @@ +.TH "RandomExplorationAlgorithm" 3 "8 Oct 2007" "Version 1.0" "ParadisEO-PEOMovingObjects" \" -*- nroff -*- +.ad l +.nh +.SH NAME +RandomExplorationAlgorithm \- +.SH SYNOPSIS +.br +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBRandomExplorationAlgorithm\fP (\fBpeoPopEval\fP< \fBRoute\fP > &__popEval, \fBpeoSynchronousMultiStart\fP< \fBRoute\fP > &extParallelExecution)" +.br +.ti -1c +.RI "void \fBoperator()\fP ()" +.br +.in -1c +.SS "Public Attributes" + +.in +1c +.ti -1c +.RI "\fBpeoPopEval\fP< \fBRoute\fP > & \fBpopEval\fP" +.br +.ti -1c +.RI "\fBpeoSynchronousMultiStart\fP< \fBRoute\fP > & \fBparallelExecution\fP" +.br +.in -1c +.SH "Detailed Description" +.PP +Definition at line 56 of file LessonParallelAlgorithm/main.cpp. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-PEOMovingObjects from the source code. diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/ReactiveThread.3 b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/ReactiveThread.3 new file mode 100644 index 000000000..8467f49d3 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/ReactiveThread.3 @@ -0,0 +1,39 @@ +.TH "ReactiveThread" 3 "8 Oct 2007" "Version 1.0" "ParadisEO-PEOMovingObjects" \" -*- nroff -*- +.ad l +.nh +.SH NAME +ReactiveThread \- +.SH SYNOPSIS +.br +.PP +Inherits \fBThread\fP. +.PP +Inherited by \fBCommunicator\fP, and \fBWorker\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBReactiveThread\fP ()" +.br +.ti -1c +.RI "void \fBsleep\fP ()" +.br +.ti -1c +.RI "void \fBwakeUp\fP ()" +.br +.in -1c +.SS "Private Attributes" + +.in +1c +.ti -1c +.RI "sem_t \fBsem\fP" +.br +.in -1c +.SH "Detailed Description" +.PP +Definition at line 44 of file reac_thread.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-PEOMovingObjects from the source code. diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/RingTopology.3 b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/RingTopology.3 new file mode 100644 index 000000000..a8d404156 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/RingTopology.3 @@ -0,0 +1,24 @@ +.TH "RingTopology" 3 "8 Oct 2007" "Version 1.0" "ParadisEO-PEOMovingObjects" \" -*- nroff -*- +.ad l +.nh +.SH NAME +RingTopology \- +.SH SYNOPSIS +.br +.PP +Inherits \fBTopology\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "void \fBsetNeighbors\fP (\fBCooperative\fP *__mig, std::vector< \fBCooperative\fP * > &__from, std::vector< \fBCooperative\fP * > &__to)" +.br +.in -1c +.SH "Detailed Description" +.PP +Definition at line 42 of file ring_topo.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-PEOMovingObjects from the source code. diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/Runner.3 b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/Runner.3 new file mode 100644 index 000000000..abdc983ec --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/Runner.3 @@ -0,0 +1,57 @@ +.TH "Runner" 3 "8 Oct 2007" "Version 1.0" "ParadisEO-PEOMovingObjects" \" -*- nroff -*- +.ad l +.nh +.SH NAME +Runner \- +.SH SYNOPSIS +.br +.PP +Inherits \fBCommunicable\fP, and \fBThread\fP. +.PP +Inherited by \fBpeoEA< EOT >\fP, and \fBpeoParallelAlgorithmWrapper\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBRunner\fP ()" +.br +.ti -1c +.RI "void \fBstart\fP ()" +.br +.ti -1c +.RI "void \fBwaitStarting\fP ()" +.br +.ti -1c +.RI "bool \fBisLocal\fP ()" +.br +.ti -1c +.RI "void \fBterminate\fP ()" +.br +.ti -1c +.RI "RUNNER_ID \fBgetID\fP ()" +.br +.ti -1c +.RI "void \fBpackTermination\fP ()" +.br +.ti -1c +.RI "void \fBnotifySendingTermination\fP ()" +.br +.in -1c +.SS "Private Attributes" + +.in +1c +.ti -1c +.RI "sem_t \fBsem_start\fP" +.br +.ti -1c +.RI "unsigned \fBid\fP" +.br +.in -1c +.SH "Detailed Description" +.PP +Definition at line 47 of file runner.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-PEOMovingObjects from the source code. diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/SEND_REQUEST.3 b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/SEND_REQUEST.3 new file mode 100644 index 000000000..de6fbfb17 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/SEND_REQUEST.3 @@ -0,0 +1,28 @@ +.TH "SEND_REQUEST" 3 "8 Oct 2007" "Version 1.0" "ParadisEO-PEOMovingObjects" \" -*- nroff -*- +.ad l +.nh +.SH NAME +SEND_REQUEST \- +.SH SYNOPSIS +.br +.PP +.SS "Public Attributes" + +.in +1c +.ti -1c +.RI "\fBCommunicable\fP * \fBcomm\fP" +.br +.ti -1c +.RI "int \fBto\fP" +.br +.ti -1c +.RI "int \fBtag\fP" +.br +.in -1c +.SH "Detailed Description" +.PP +Definition at line 52 of file send.cpp. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-PEOMovingObjects from the source code. diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/Service.3 b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/Service.3 new file mode 100644 index 000000000..242238f59 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/Service.3 @@ -0,0 +1,69 @@ +.TH "Service" 3 "8 Oct 2007" "Version 1.0" "ParadisEO-PEOMovingObjects" \" -*- nroff -*- +.ad l +.nh +.SH NAME +Service \- +.SH SYNOPSIS +.br +.PP +Inherits \fBCommunicable\fP. +.PP +Inherited by \fBpeoPopEval< EOT >\fP, \fBpeoPopEval< eoVector< int, Node > >\fP, \fBpeoSynchronousMultiStart< EntityType >\fP, \fBpeoSynchronousMultiStart< eoVector< int, Node > >\fP, \fBpeoSyncMultiStart< EOT >\fP, and \fBpeoTransform< EOT >\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "void \fBsetOwner\fP (\fBThread\fP &__owner)" +.br +.ti -1c +.RI "\fBThread\fP * \fBgetOwner\fP ()" +.br +.ti -1c +.RI "void \fBrequestResourceRequest\fP (unsigned __how_many=1)" +.br +.ti -1c +.RI "void \fBpackResourceRequest\fP ()" +.br +.ti -1c +.RI "virtual void \fBpackData\fP ()" +.br +.ti -1c +.RI "virtual void \fBunpackData\fP ()" +.br +.ti -1c +.RI "virtual void \fBexecute\fP ()" +.br +.ti -1c +.RI "virtual void \fBpackResult\fP ()" +.br +.ti -1c +.RI "virtual void \fBunpackResult\fP ()" +.br +.ti -1c +.RI "virtual void \fBnotifySendingData\fP ()" +.br +.ti -1c +.RI "virtual void \fBnotifySendingResourceRequest\fP ()" +.br +.ti -1c +.RI "virtual void \fBnotifySendingAllResourceRequests\fP ()" +.br +.in -1c +.SS "Private Attributes" + +.in +1c +.ti -1c +.RI "\fBThread\fP * \fBowner\fP" +.br +.ti -1c +.RI "unsigned \fBnum_sent_rr\fP" +.br +.in -1c +.SH "Detailed Description" +.PP +Definition at line 45 of file service.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-PEOMovingObjects from the source code. diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/Thread.3 b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/Thread.3 new file mode 100644 index 000000000..668641367 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/Thread.3 @@ -0,0 +1,40 @@ +.TH "Thread" 3 "8 Oct 2007" "Version 1.0" "ParadisEO-PEOMovingObjects" \" -*- nroff -*- +.ad l +.nh +.SH NAME +Thread \- +.SH SYNOPSIS +.br +.PP +Inherited by \fBReactiveThread\fP, and \fBRunner\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBThread\fP ()" +.br +.ti -1c +.RI "virtual \fB~Thread\fP ()" +.br +.ti -1c +.RI "void \fBsetActive\fP ()" +.br +.ti -1c +.RI "void \fBsetPassive\fP ()" +.br +.in -1c +.SS "Private Attributes" + +.in +1c +.ti -1c +.RI "bool \fBact\fP" +.br +.in -1c +.SH "Detailed Description" +.PP +Definition at line 44 of file thread.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-PEOMovingObjects from the source code. diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/Topology.3 b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/Topology.3 new file mode 100644 index 000000000..5d4e939ee --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/Topology.3 @@ -0,0 +1,34 @@ +.TH "Topology" 3 "8 Oct 2007" "Version 1.0" "ParadisEO-PEOMovingObjects" \" -*- nroff -*- +.ad l +.nh +.SH NAME +Topology \- +.SH SYNOPSIS +.br +.PP +Inherited by \fBRingTopology\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "virtual \fB~Topology\fP ()" +.br +.ti -1c +.RI "void \fBadd\fP (\fBCooperative\fP &__mig)" +.br +.in -1c +.SS "Protected Attributes" + +.in +1c +.ti -1c +.RI "std::vector< \fBCooperative\fP * > \fBmig\fP" +.br +.in -1c +.SH "Detailed Description" +.PP +Definition at line 44 of file topology.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-PEOMovingObjects from the source code. diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/Worker.3 b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/Worker.3 new file mode 100644 index 000000000..2327bb56a --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/Worker.3 @@ -0,0 +1,64 @@ +.TH "Worker" 3 "8 Oct 2007" "Version 1.0" "ParadisEO-PEOMovingObjects" \" -*- nroff -*- +.ad l +.nh +.SH NAME +Worker \- +.SH SYNOPSIS +.br +.PP +Inherits \fBCommunicable\fP, and \fBReactiveThread\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBWorker\fP ()" +.br +.ti -1c +.RI "void \fBstart\fP ()" +.br +.ti -1c +.RI "void \fBpackResult\fP ()" +.br +.ti -1c +.RI "void \fBunpackData\fP ()" +.br +.ti -1c +.RI "void \fBpackTaskDone\fP ()" +.br +.ti -1c +.RI "void \fBnotifySendingResult\fP ()" +.br +.ti -1c +.RI "void \fBnotifySendingTaskDone\fP ()" +.br +.ti -1c +.RI "void \fBsetSource\fP (int __rank)" +.br +.in -1c +.SS "Private Attributes" + +.in +1c +.ti -1c +.RI "WORKER_ID \fBid\fP" +.br +.ti -1c +.RI "SERVICE_ID \fBserv_id\fP" +.br +.ti -1c +.RI "\fBService\fP * \fBserv\fP" +.br +.ti -1c +.RI "int \fBsrc\fP" +.br +.ti -1c +.RI "bool \fBtoto\fP" +.br +.in -1c +.SH "Detailed Description" +.PP +Definition at line 46 of file worker.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-PEOMovingObjects from the source code. diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peo.3 b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peo.3 new file mode 100644 index 000000000..ed1fecf92 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peo.3 @@ -0,0 +1,43 @@ +.TH "peo" 3 "8 Oct 2007" "Version 1.0" "ParadisEO-PEOMovingObjects" \" -*- nroff -*- +.ad l +.nh +.SH NAME +peo \- +.SH SYNOPSIS +.br +.PP +.SS "Functions" + +.in +1c +.ti -1c +.RI "void \fBfinalize\fP ()" +.br +.ti -1c +.RI "void \fBinit\fP (int &__argc, char **&__argv)" +.br +.ti -1c +.RI "void \fBloadParameters\fP (int &__argc, char **&__argv)" +.br +.ti -1c +.RI "void \fBrun\fP ()" +.br +.in -1c +.SS "Variables" + +.in +1c +.ti -1c +.RI "int * \fBargc\fP" +.br +.ti -1c +.RI "char *** \fBargv\fP" +.br +.ti -1c +.RI "int * \fBargc\fP" +.br +.ti -1c +.RI "char *** \fBargv\fP" +.br +.in -1c +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-PEOMovingObjects from the source code. diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoAggEvalFunc.3 b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoAggEvalFunc.3 new file mode 100644 index 000000000..4109b0e40 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoAggEvalFunc.3 @@ -0,0 +1,33 @@ +.TH "peoAggEvalFunc" 3 "8 Oct 2007" "Version 1.0" "ParadisEO-PEOMovingObjects" \" -*- nroff -*- +.ad l +.nh +.SH NAME +peoAggEvalFunc \- The \fBpeoAggEvalFunc\fP class offers only the interface for creating aggregate evaluation functions - there are no direct internal functions provided. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBeoBF< A1, A2, R >< const EOT &, EOT::Fitness &, void >\fP. +.PP +Inherited by \fBMergeRouteEval\fP, and \fBpeoNoAggEvalFunc< EOT >\fP. +.PP +.SH "Detailed Description" +.PP + +.SS "template class peoAggEvalFunc< EOT >" +The \fBpeoAggEvalFunc\fP class offers only the interface for creating aggregate evaluation functions - there are no direct internal functions provided. + +The class inherits \fBpublic eoBF< EOT&, const typename EOT :: Fitness&, void >\fP thus requiring, for the derived classes, the creation of a function having the following signature: +.PP +void operator()( EOT& __eot, const typename EOT :: Fitness& __partial_fittness ); +.PP +The aggregation object is called in an iterative manner for each of the results obtained by applying partial evaluation functions. +.PP +Definition at line 53 of file peoAggEvalFunc.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-PEOMovingObjects from the source code. diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoAsyncIslandMig.3 b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoAsyncIslandMig.3 new file mode 100644 index 000000000..fd5d5126c --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoAsyncIslandMig.3 @@ -0,0 +1,176 @@ +.TH "peoAsyncIslandMig" 3 "8 Oct 2007" "Version 1.0" "ParadisEO-PEOMovingObjects" \" -*- nroff -*- +.ad l +.nh +.SH NAME +peoAsyncIslandMig \- The \fBpeoAsyncIslandMig\fP class offers the elementary basis for implementating an asynchronous island migration model - requires the specification of several basic parameters, i.e. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBCooperative\fP, and \fBeoUpdater\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBpeoAsyncIslandMig\fP (\fBeoContinue\fP< EOT > &__cont, \fBeoSelect\fP< EOT > &__select, \fBeoReplacement\fP< EOT > &__replace, \fBTopology\fP &__topology, \fBeoPop\fP< EOT > &__source, \fBeoPop\fP< EOT > &__destination)" +.br +.RI "\fIConstructor for the \fBpeoAsyncIslandMig\fP class; the characteristics of the migration model are defined through the specified parameters - out of the box objects provided in \fBEO\fP, etc., or custom, derived objects may be passed as parameters. \fP" +.ti -1c +.RI "void \fBoperator()\fP ()" +.br +.RI "\fI\fBFunction\fP operator to be called as checkpoint for performing the migration step. \fP" +.ti -1c +.RI "void \fBpack\fP ()" +.br +.RI "\fIAuxiliary function dealing with sending the emigrant individuals. There is no need to explicitly call the function. \fP" +.ti -1c +.RI "void \fBunpack\fP ()" +.br +.RI "\fIAuxiliary function dealing with receiving immigrant individuals. There is no need to explicitly call the function. \fP" +.in -1c +.SS "Private Member Functions" + +.in +1c +.ti -1c +.RI "void \fBemigrate\fP ()" +.br +.ti -1c +.RI "void \fBimmigrate\fP ()" +.br +.in -1c +.SS "Private Attributes" + +.in +1c +.ti -1c +.RI "\fBeoContinue\fP< EOT > & \fBcont\fP" +.br +.ti -1c +.RI "\fBeoSelect\fP< EOT > & \fBselect\fP" +.br +.ti -1c +.RI "\fBeoReplacement\fP< EOT > & \fBreplace\fP" +.br +.ti -1c +.RI "\fBTopology\fP & \fBtopology\fP" +.br +.ti -1c +.RI "\fBeoPop\fP< EOT > & \fBsource\fP" +.br +.ti -1c +.RI "\fBeoPop\fP< EOT > & \fBdestination\fP" +.br +.ti -1c +.RI "std::queue< \fBeoPop\fP< EOT > > \fBimm\fP" +.br +.ti -1c +.RI "std::queue< \fBeoPop\fP< EOT > > \fBem\fP" +.br +.ti -1c +.RI "std::queue< \fBCooperative\fP * > \fBcoop_em\fP" +.br +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class peoAsyncIslandMig< EOT >" +The \fBpeoAsyncIslandMig\fP class offers the elementary basis for implementating an asynchronous island migration model - requires the specification of several basic parameters, i.e. + +continuation criterion, selection and replacement strategies, a topological model and the source and destination population for the migrating individuals. As opposed to the synchronous migration model, in the asynchronous migration approach, there is no synchronization step between islands after performing the emigration phase. +.PP +The migration operator is called at the end of each generation of an evolutionary algorithms as a checkpoint object - the following code exposes the structure of a classic evolutionary algorithm: +.PP +\fBdo\fP { select( population, offsprings ); // select the offsprings from the current population transform( offsprings ); // crossover and mutation operators are applied on the selected offsprings evaluate( offsprings ); // evaluation step of the resulting offsprings replace( population, offsprings ); // replace the individuals in the current population whith individuals from the offspring population, according to a specified replacement strategy } \fBwhile\fP ( eaCheckpointContinue( population ) ); // checkpoint operators are applied on the current population, including the migration operator, if any specified +.PP +Constructing an asynchronous island migration model requires having defined (1) a topological migration model, (2) the control parameters of the migration process, (3) a checkpoint object associated with an evolutionary algorithm, and (4) an owner object must be set. The owner object must be derived from the \fB\fBRunner\fP\fP class (for example a \fBpeoEA\fP object represents a possible owner). A simple example is offered bellow: +.PP +.PD 0 +.IP "1." 4 +topological model to be followed when performing migrations: +.br + +.br + \fBRingTopology\fP migTopology; // a simple ring topological model - each island communicates with two other islands +.PP + +.IP "2." 4 +the continuation criterion, selection and replacement strategy etc. are defined: +.br + +.br + eoPop< EOT > population( POP_SIZE, popInitializer ); // population of individuals to be used for the evolutionary algorithm eoPeriodicContinue< EOT > migCont( MIG_FREQ ); // migrations occur periodically at MIG_FREQ iterations eoRandomSelect< EOT > migSelectStrategy; // selection strategy - in this case a random selection is applied eoSelectNumber< EOT > migSelect( migSelectStrategy, MIG_SIZE ); // number of individuals to be selected using the specified strategy eoPlusReplacement< EOT > migReplace; // immigration strategy - the worse individuals in the destination population are replaced by the immigrant individuals peoAsyncIslandMig< EOT > asyncMigration( +.br + migCont, migSelect, migReplace, migTopology, +.br + population, population +.br + ); // asynchronous migration object - the emigrant individuals are selected from the same from population in which the immigrant individuals are being integrated +.PP + +.IP "3." 4 +creation of a checkpoint object as part of the definition of an evolutionary algoritm (details of th EA not given as being out of scope): +.br + +.br + ... eoGenContinue< EOT > eaCont( NUM_GEN ); // the evolutionary algorithm will stop after NUM_GEN generations eoCheckPoint< EOT > eaCheckpointContinue( eaCont ); // number of individuals to be selected using the specified strategy ... eaCheckpointContinue.add( asyncMigration ); // adding the migration operator as checkpoint element ... +.PP + +.IP "4." 4 +definition of an owner evolutionary algorithm (an object inheriting the \fB\fBRunner\fP\fP class): +.br + +.br + peoEA< EOT > eaAlg( eaCheckpointContinue, eaPopEval, eaSelect, eaTransform, eaReplace); // evolutionary algorithm having as checkpoint the eaCheckpointContinue object defined above asyncMigration.setOwner( eaAlg ); // setting the evolutionary algorithm as owner of the migration object eaAlg( population ); // applying the evolutionary algorithm on a given population +.PP +.PP +The source and the destination population for the migration object were specified as being the same, in step no. 2, as we are usually interested in selecting the emigrants and integrating the immigrant individuals from and in, respectively, one unique population, iteratively evolved by an evolutionary algorithm. There is no restriction in having two distinct populations as source and destination for the emigrant and immigrant individuals respectively. +.PP +The above steps only create an asynchronous migration object associated to an evolutionary algorithm. The creation of several islands requires the reiteration of the steps 2 through 4 for creating distinct algorithms, with distinct populations and the associated distinctly parametrized migration objects. The interconnecting element is the underlying topology, defined at step 1 (the same C++ migTopology object has to be passed as parameter for all the migration objects, in order to interconnect them). +.PP +Definition at line 140 of file peoAsyncIslandMig.h. +.SH "Constructor & Destructor Documentation" +.PP +.SS "template \fBpeoAsyncIslandMig\fP< EOT >::\fBpeoAsyncIslandMig\fP (\fBeoContinue\fP< EOT > & __cont, \fBeoSelect\fP< EOT > & __select, \fBeoReplacement\fP< EOT > & __replace, \fBTopology\fP & __topology, \fBeoPop\fP< EOT > & __source, \fBeoPop\fP< EOT > & __destination)" +.PP +Constructor for the \fBpeoAsyncIslandMig\fP class; the characteristics of the migration model are defined through the specified parameters - out of the box objects provided in \fBEO\fP, etc., or custom, derived objects may be passed as parameters. +.PP +\fBParameters:\fP +.RS 4 +\fIeoContinue<\fP EOT >& __cont - continuation criterion specifying whether the migration is performed or not; +.br +\fIeoSelect<\fP EOT >& __select - selection strategy to be applied for constructing a list of emigrant individuals out of the source population; +.br +\fIeoReplacement<\fP EOT >& __replace - replacement strategy used for integrating the immigrant individuals in the destination population; +.br +\fITopology&\fP __topology - topological model to be followed when performing migrations; +.br +\fIeoPop<\fP EOT >& __source - source population from which the emigrant individuals are selected; +.br +\fIeoPop<\fP EOT >& __destination - destination population in which the immigrant population are integrated. +.RE +.PP + +.PP +Definition at line 199 of file peoAsyncIslandMig.h. +.PP +References Topology::add(). +.SH "Member Function Documentation" +.PP +.SS "template void \fBpeoAsyncIslandMig\fP< EOT >::operator() ()\fC [virtual]\fP" +.PP +\fBFunction\fP operator to be called as checkpoint for performing the migration step. +.PP +The emigrant individuals are selected from the source population and sent to the next island (defined by the topology object) while the immigrant individuals are integrated in the destination population. There is no need to explicitly call the function - the wrapper checkpoint object (please refer to the above example) will perform the call when required. +.PP +Implements \fBeoF< void >\fP. +.PP +Definition at line 276 of file peoAsyncIslandMig.h. +.PP +References peoAsyncIslandMig< EOT >::cont, peoAsyncIslandMig< EOT >::emigrate(), peoAsyncIslandMig< EOT >::immigrate(), and peoAsyncIslandMig< EOT >::source. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-PEOMovingObjects from the source code. diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoEA.3 b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoEA.3 new file mode 100644 index 000000000..9bfa31f02 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoEA.3 @@ -0,0 +1,109 @@ +.TH "peoEA" 3 "8 Oct 2007" "Version 1.0" "ParadisEO-PEOMovingObjects" \" -*- nroff -*- +.ad l +.nh +.SH NAME +peoEA \- The \fBpeoEA\fP class offers an elementary evolutionary algorithm implementation. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBRunner\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBpeoEA\fP (\fBeoContinue\fP< EOT > &__cont, \fBpeoPopEval\fP< EOT > &__pop_eval, \fBeoSelect\fP< EOT > &__select, \fBpeoTransform\fP< EOT > &__trans, \fBeoReplacement\fP< EOT > &__replace)" +.br +.RI "\fIConstructor for the evolutionary algorithm object - several basic parameters have to be specified, allowing for different levels of parallelism. \fP" +.ti -1c +.RI "void \fBrun\fP ()" +.br +.RI "\fIEvolutionary algorithm function - a side effect of the fact that the class is derived from the \fB\fBRunner\fP\fP class, thus requiring the existence of a \fIrun\fP function, the algorithm being executed on a distinct thread. \fP" +.ti -1c +.RI "void \fBoperator()\fP (\fBeoPop\fP< EOT > &__pop)" +.br +.RI "\fI\fBFunction\fP operator for specifying the population to be associated with the algorithm. \fP" +.in -1c +.SS "Private Attributes" + +.in +1c +.ti -1c +.RI "\fBeoContinue\fP< EOT > & \fBcont\fP" +.br +.ti -1c +.RI "\fBpeoPopEval\fP< EOT > & \fBpop_eval\fP" +.br +.ti -1c +.RI "\fBeoSelect\fP< EOT > & \fBselect\fP" +.br +.ti -1c +.RI "\fBpeoTransform\fP< EOT > & \fBtrans\fP" +.br +.ti -1c +.RI "\fBeoReplacement\fP< EOT > & \fBreplace\fP" +.br +.ti -1c +.RI "\fBeoPop\fP< EOT > * \fBpop\fP" +.br +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class peoEA< EOT >" +The \fBpeoEA\fP class offers an elementary evolutionary algorithm implementation. + +In addition, as compared with the algorithms provided by the \fBEO\fP framework, the \fBpeoEA\fP class has the underlying necessary structure for including, for example, parallel evaluation and parallel transformation operators, migration operators etc. Although there is no restriction on using the algorithms provided by the \fBEO\fP framework, the drawback resides in the fact that the \fBEO\fP implementation is exclusively sequential and, in consequence, no parallelism is provided. A simple example for constructing a \fBpeoEA\fP object: +.PP +... eoPop< EOT > population( POP_SIZE, popInitializer ); // creation of a population with POP_SIZE individuals - the popInitializer is a functor to be called for each individual eoGenContinue< EOT > eaCont( NUM_GEN ); // number of generations for the evolutionary algorithm eoCheckPoint< EOT > eaCheckpointContinue( eaCont ); // checkpoint incorporating the continuation criterion - startpoint for adding other checkpoint objects peoSeqPopEval< EOT > eaPopEval( evalFunction ); // sequential evaluation functor wrapper - evalFunction represents the actual evaluation functor eoRankingSelect< EOT > selectionStrategy; // selection strategy for creating the offspring population - a simple ranking selection in this case eoSelectNumber< EOT > eaSelect( selectionStrategy, POP_SIZE ); // the number of individuals to be selected for creating the offspring population eoRankingSelect< EOT > selectionStrategy; // selection strategy for creating the offspring population - a simple ranking selection in this case eoSGATransform< EOT > transform( crossover, CROSS_RATE, mutation, MUT_RATE ); // transformation operator - crossover and mutation operators with their associated probabilities peoSeqTransform< EOT > eaTransform( transform ); // ParadisEO specific sequential operator - a parallel version may be specified in the same manner eoPlusReplacement< EOT > eaReplace; // replacement strategy - for integrating the offspring resulting individuals in the initial population peoEA< EOT > eaAlg( eaCheckpointContinue, eaPopEval, eaSelect, eaTransform, eaReplace ); // ParadisEO evolutionary algorithm integrating the above defined objects eaAlg( population ); // specifying the initial population for the algorithm ... +.PP +Definition at line 82 of file peoEA.h. +.SH "Constructor & Destructor Documentation" +.PP +.SS "template \fBpeoEA\fP< EOT >::\fBpeoEA\fP (\fBeoContinue\fP< EOT > & __cont, \fBpeoPopEval\fP< EOT > & __pop_eval, \fBeoSelect\fP< EOT > & __select, \fBpeoTransform\fP< EOT > & __trans, \fBeoReplacement\fP< EOT > & __replace)" +.PP +Constructor for the evolutionary algorithm object - several basic parameters have to be specified, allowing for different levels of parallelism. +.PP +Depending on the requirements, a sequential or a parallel evaluation operator may be specified or, in the same manner, a sequential or a parallel transformation operator may be given as parameter. Out of the box objects may be provided, from the \fBEO\fP package, for example, or custom defined ones may be specified, provided that they are derived from the correct base classes. +.PP +\fBParameters:\fP +.RS 4 +\fIeoContinue<\fP EOT >& __cont - continuation criterion specifying whether the algorithm should continue or not; +.br +\fIpeoPopEval<\fP EOT >& __pop_eval - evaluation operator; it allows the specification of parallel evaluation operators, aggregate evaluation functions, etc.; +.br +\fIeoSelect<\fP EOT >& __select - selection strategy to be applied for constructing a list of offspring individuals; +.br +\fIpeoTransform<\fP EOT >& __trans - transformation operator, i.e. crossover and mutation; allows for sequential or parallel transform; +.br +\fIeoReplacement<\fP EOT >& __replace - replacement strategy for integrating the offspring individuals in the initial population; +.RE +.PP + +.PP +Definition at line 126 of file peoEA.h. +.PP +References peoEA< EOT >::pop_eval, and peoEA< EOT >::trans. +.SH "Member Function Documentation" +.PP +.SS "template void \fBpeoEA\fP< EOT >::operator() (\fBeoPop\fP< EOT > & __pop)" +.PP +\fBFunction\fP operator for specifying the population to be associated with the algorithm. +.PP +\fBParameters:\fP +.RS 4 +\fIeoPop<\fP EOT >& __pop - initial population of the algorithm, to be iteratively evolved; +.RE +.PP + +.PP +Definition at line 142 of file peoEA.h. +.PP +References peoEA< EOT >::pop. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-PEOMovingObjects from the source code. diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoNoAggEvalFunc.3 b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoNoAggEvalFunc.3 new file mode 100644 index 000000000..caa54ee6a --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoNoAggEvalFunc.3 @@ -0,0 +1,35 @@ +.TH "peoNoAggEvalFunc" 3 "8 Oct 2007" "Version 1.0" "ParadisEO-PEOMovingObjects" \" -*- nroff -*- +.ad l +.nh +.SH NAME +peoNoAggEvalFunc \- The \fBpeoNoAggEvalFunc\fP class does nothing more than an association between a fitness value and a specified individual. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBpeoAggEvalFunc< EOT >< EOT >\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "void \fBoperator()\fP (EOT &__sol, const typename EOT::Fitness &__fit)" +.br +.RI "\fIOperator which sets as fitness the \fB__fit\fP value for the \fB__sol\fP individual. \fP" +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class peoNoAggEvalFunc< EOT >" +The \fBpeoNoAggEvalFunc\fP class does nothing more than an association between a fitness value and a specified individual. + +The class is provided as a mean of declaring that no aggregation is required for the evaluation function - the fitness value is explicitly specified. +.PP +Definition at line 47 of file peoNoAggEvalFunc.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-PEOMovingObjects from the source code. diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoParaPopEval.3 b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoParaPopEval.3 new file mode 100644 index 000000000..a2533e127 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoParaPopEval.3 @@ -0,0 +1,217 @@ +.TH "peoParaPopEval" 3 "8 Oct 2007" "Version 1.0" "ParadisEO-PEOMovingObjects" \" -*- nroff -*- +.ad l +.nh +.SH NAME +peoParaPopEval \- The \fBpeoParaPopEval\fP represents a wrapper for creating a functor capable of applying in parallel an EO-derived evaluation functor. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBpeoPopEval< EOT >< EOT >\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBpeoParaPopEval\fP (\fBeoEvalFunc\fP< EOT > &__eval_func)" +.br +.RI "\fIConstructor function - an EO-derived evaluation functor has to be specified; an internal reference is set towards the specified evaluation functor. \fP" +.ti -1c +.RI "\fBpeoParaPopEval\fP (const std::vector< \fBeoEvalFunc\fP< EOT > * > &__funcs, \fBpeoAggEvalFunc\fP< EOT > &__merge_eval)" +.br +.RI "\fIConstructor function - a vector of EO-derived evaluation functors has to be specified as well as an aggregation function. \fP" +.ti -1c +.RI "void \fBoperator()\fP (\fBeoPop\fP< EOT > &__pop)" +.br +.RI "\fIOperator for applying the evaluation functor (direct or aggregate) for each individual of the specified population. \fP" +.ti -1c +.RI "void \fBpackData\fP ()" +.br +.RI "\fIAuxiliary function for transferring data between the process requesting an evaluation operation and the process that performs the actual evaluation phase. \fP" +.ti -1c +.RI "void \fBunpackData\fP ()" +.br +.RI "\fIAuxiliary function for transferring data between the process requesting an evaluation operation and the process that performs the actual evaluation phase. \fP" +.ti -1c +.RI "void \fBexecute\fP ()" +.br +.RI "\fIAuxiliary function - it calls the specified evaluation functor(s). There is no need to explicitly call the function. \fP" +.ti -1c +.RI "void \fBpackResult\fP ()" +.br +.RI "\fIAuxiliary function for transferring data between the process requesting an evaluation operation and the process that performs the actual evaluation phase. \fP" +.ti -1c +.RI "void \fBunpackResult\fP ()" +.br +.RI "\fIAuxiliary function for transferring data between the process requesting an evaluation operation and the process that performs the actual evaluation phase. \fP" +.ti -1c +.RI "void \fBnotifySendingData\fP ()" +.br +.RI "\fIAuxiliary function for notifications between the process requesting an evaluation operation and the processes that performs the actual evaluation phase. \fP" +.ti -1c +.RI "void \fBnotifySendingAllResourceRequests\fP ()" +.br +.RI "\fIAuxiliary function for notifications between the process requesting an evaluation operation and the processes that performs the actual evaluation phase. \fP" +.in -1c +.SS "Private Attributes" + +.in +1c +.ti -1c +.RI "const std::vector< \fBeoEvalFunc\fP< EOT > * > & \fBfuncs\fP" +.br +.ti -1c +.RI "std::vector< \fBeoEvalFunc\fP< EOT > * > \fBone_func\fP" +.br +.ti -1c +.RI "\fBpeoAggEvalFunc\fP< EOT > & \fBmerge_eval\fP" +.br +.ti -1c +.RI "\fBpeoNoAggEvalFunc\fP< EOT > \fBno_merge_eval\fP" +.br +.ti -1c +.RI "std::queue< EOT * > \fBtasks\fP" +.br +.ti -1c +.RI "std::map< EOT *, std::pair< unsigned, unsigned > > \fBprogression\fP" +.br +.ti -1c +.RI "unsigned \fBnum_func\fP" +.br +.ti -1c +.RI "EOT \fBsol\fP" +.br +.ti -1c +.RI "EOT * \fBad_sol\fP" +.br +.ti -1c +.RI "unsigned \fBtotal\fP" +.br +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class peoParaPopEval< EOT >" +The \fBpeoParaPopEval\fP represents a wrapper for creating a functor capable of applying in parallel an EO-derived evaluation functor. + +The class offers the possibility of chosing between a single-function evaluation and an aggregate evaluation function, including several sub-evalution functions. +.PP +Definition at line 54 of file peoParaPopEval.h. +.SH "Constructor & Destructor Documentation" +.PP +.SS "template \fBpeoParaPopEval\fP< EOT >::\fBpeoParaPopEval\fP (\fBeoEvalFunc\fP< EOT > & __eval_func)" +.PP +Constructor function - an EO-derived evaluation functor has to be specified; an internal reference is set towards the specified evaluation functor. +.PP +\fBParameters:\fP +.RS 4 +\fIeoEvalFunc<\fP EOT >& __eval_func - EO-derived evaluation functor to be applied in parallel on each individual of a specified population +.RE +.PP + +.PP +Definition at line 130 of file peoParaPopEval.h. +.PP +References peoParaPopEval< EOT >::one_func. +.SS "template \fBpeoParaPopEval\fP< EOT >::\fBpeoParaPopEval\fP (const std::vector< \fBeoEvalFunc\fP< EOT > * > & __funcs, \fBpeoAggEvalFunc\fP< EOT > & __merge_eval)" +.PP +Constructor function - a vector of EO-derived evaluation functors has to be specified as well as an aggregation function. +.PP +\fBParameters:\fP +.RS 4 +\fIconst\fP std :: vector< \fBeoEvalFunc\fP < EOT >* >& __funcs - vector of EO-derived partial evaluation functors; +.br +\fIpeoAggEvalFunc<\fP EOT >& __merge_eval - aggregation functor for creating a fitness value out of the partial fitness values. +.RE +.PP + +.PP +Definition at line 139 of file peoParaPopEval.h. +.SH "Member Function Documentation" +.PP +.SS "template void \fBpeoParaPopEval\fP< EOT >::operator() (\fBeoPop\fP< EOT > & __pop)\fC [virtual]\fP" +.PP +Operator for applying the evaluation functor (direct or aggregate) for each individual of the specified population. +.PP +\fBParameters:\fP +.RS 4 +\fIeoPop<\fP EOT >& __pop - population to be evaluated by applying the evaluation functor specified in the constructor. +.RE +.PP + +.PP +Implements \fBpeoPopEval< EOT >\fP. +.PP +Definition at line 150 of file peoParaPopEval.h. +.PP +References peoParaPopEval< EOT >::funcs, peoParaPopEval< EOT >::progression, Service::requestResourceRequest(), Communicable::stop(), peoParaPopEval< EOT >::tasks, and peoParaPopEval< EOT >::total. +.SS "template void \fBpeoParaPopEval\fP< EOT >::packData ()\fC [virtual]\fP" +.PP +Auxiliary function for transferring data between the process requesting an evaluation operation and the process that performs the actual evaluation phase. +.PP +There is no need to explicitly call the function. +.PP +Reimplemented from \fBService\fP. +.PP +Definition at line 171 of file peoParaPopEval.h. +.PP +References peoParaPopEval< EOT >::progression, and peoParaPopEval< EOT >::tasks. +.SS "template void \fBpeoParaPopEval\fP< EOT >::unpackData ()\fC [virtual]\fP" +.PP +Auxiliary function for transferring data between the process requesting an evaluation operation and the process that performs the actual evaluation phase. +.PP +There is no need to explicitly call the function. +.PP +Reimplemented from \fBService\fP. +.PP +Definition at line 185 of file peoParaPopEval.h. +.PP +References peoParaPopEval< EOT >::ad_sol, peoParaPopEval< EOT >::num_func, and peoParaPopEval< EOT >::sol. +.SS "template void \fBpeoParaPopEval\fP< EOT >::packResult ()\fC [virtual]\fP" +.PP +Auxiliary function for transferring data between the process requesting an evaluation operation and the process that performs the actual evaluation phase. +.PP +There is no need to explicitly call the function. +.PP +Reimplemented from \fBService\fP. +.PP +Definition at line 202 of file peoParaPopEval.h. +.PP +References peoParaPopEval< EOT >::ad_sol, and peoParaPopEval< EOT >::sol. +.SS "template void \fBpeoParaPopEval\fP< EOT >::unpackResult ()\fC [virtual]\fP" +.PP +Auxiliary function for transferring data between the process requesting an evaluation operation and the process that performs the actual evaluation phase. +.PP +There is no need to explicitly call the function. +.PP +Reimplemented from \fBService\fP. +.PP +Definition at line 211 of file peoParaPopEval.h. +.PP +References peoParaPopEval< EOT >::ad_sol, Service::getOwner(), peoParaPopEval< EOT >::merge_eval, peoParaPopEval< EOT >::progression, Communicable::resume(), Thread::setActive(), and peoParaPopEval< EOT >::total. +.SS "template void \fBpeoParaPopEval\fP< EOT >::notifySendingData ()\fC [virtual]\fP" +.PP +Auxiliary function for notifications between the process requesting an evaluation operation and the processes that performs the actual evaluation phase. +.PP +There is no need to explicitly call the function. +.PP +Reimplemented from \fBService\fP. +.PP +Definition at line 242 of file peoParaPopEval.h. +.SS "template void \fBpeoParaPopEval\fP< EOT >::notifySendingAllResourceRequests ()\fC [virtual]\fP" +.PP +Auxiliary function for notifications between the process requesting an evaluation operation and the processes that performs the actual evaluation phase. +.PP +There is no need to explicitly call the function. +.PP +Reimplemented from \fBService\fP. +.PP +Definition at line 247 of file peoParaPopEval.h. +.PP +References Service::getOwner(), and Thread::setPassive(). + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-PEOMovingObjects from the source code. diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoParaSGATransform.3 b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoParaSGATransform.3 new file mode 100644 index 000000000..978501baf --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoParaSGATransform.3 @@ -0,0 +1,83 @@ +.TH "peoParaSGATransform" 3 "8 Oct 2007" "Version 1.0" "ParadisEO-PEOMovingObjects" \" -*- nroff -*- +.ad l +.nh +.SH NAME +peoParaSGATransform \- +.SH SYNOPSIS +.br +.PP +Inherits \fBpeoTransform< EOT >< EOT >\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBpeoParaSGATransform\fP (\fBeoQuadOp\fP< EOT > &__cross, double __cross_rate, \fBeoMonOp\fP< EOT > &__mut, double __mut_rate)" +.br +.ti -1c +.RI "void \fBoperator()\fP (\fBeoPop\fP< EOT > &__pop)" +.br +.ti -1c +.RI "void \fBpackData\fP ()" +.br +.ti -1c +.RI "void \fBunpackData\fP ()" +.br +.ti -1c +.RI "void \fBexecute\fP ()" +.br +.ti -1c +.RI "void \fBpackResult\fP ()" +.br +.ti -1c +.RI "void \fBunpackResult\fP ()" +.br +.ti -1c +.RI "void \fBnotifySendingData\fP ()" +.br +.ti -1c +.RI "void \fBnotifySendingAllResourceRequests\fP ()" +.br +.in -1c +.SS "Private Attributes" + +.in +1c +.ti -1c +.RI "\fBeoQuadOp\fP< EOT > & \fBcross\fP" +.br +.ti -1c +.RI "double \fBcross_rate\fP" +.br +.ti -1c +.RI "\fBeoMonOp\fP< EOT > & \fBmut\fP" +.br +.ti -1c +.RI "double \fBmut_rate\fP" +.br +.ti -1c +.RI "unsigned \fBidx\fP" +.br +.ti -1c +.RI "\fBeoPop\fP< EOT > * \fBpop\fP" +.br +.ti -1c +.RI "EOT \fBfather\fP" +.br +.ti -1c +.RI "EOT \fBmother\fP" +.br +.ti -1c +.RI "unsigned \fBnum_term\fP" +.br +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class peoParaSGATransform< EOT >" + +.PP +Definition at line 49 of file peoParaSGATransform.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-PEOMovingObjects from the source code. diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoParallelAlgorithmWrapper.3 b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoParallelAlgorithmWrapper.3 new file mode 100644 index 000000000..71288d753 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoParallelAlgorithmWrapper.3 @@ -0,0 +1,53 @@ +.TH "peoParallelAlgorithmWrapper" 3 "8 Oct 2007" "Version 1.0" "ParadisEO-PEOMovingObjects" \" -*- nroff -*- +.ad l +.nh +.SH NAME +peoParallelAlgorithmWrapper \- +.SH SYNOPSIS +.br +.PP +Inherits \fBRunner\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "template \fBpeoParallelAlgorithmWrapper\fP (AlgorithmType &externalAlgorithm)" +.br +.ti -1c +.RI "template \fBpeoParallelAlgorithmWrapper\fP (AlgorithmType &externalAlgorithm, AlgorithmDataType &externalData)" +.br +.ti -1c +.RI "\fB~peoParallelAlgorithmWrapper\fP ()" +.br +.ti -1c +.RI "void \fBrun\fP ()" +.br +.in -1c +.SS "Private Attributes" + +.in +1c +.ti -1c +.RI "\fBAbstractAlgorithm\fP * \fBalgorithm\fP" +.br +.in -1c +.SS "Classes" + +.in +1c +.ti -1c +.RI "struct \fBAbstractAlgorithm\fP" +.br +.ti -1c +.RI "struct \fBAlgorithm\fP" +.br +.ti -1c +.RI "struct \fBAlgorithm< AlgorithmType, void >\fP" +.br +.in -1c +.SH "Detailed Description" +.PP +Definition at line 47 of file peoParallelAlgorithmWrapper.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-PEOMovingObjects from the source code. diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoParallelAlgorithmWrapper_AbstractAlgorithm.3 b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoParallelAlgorithmWrapper_AbstractAlgorithm.3 new file mode 100644 index 000000000..4eda5a990 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoParallelAlgorithmWrapper_AbstractAlgorithm.3 @@ -0,0 +1,27 @@ +.TH "peoParallelAlgorithmWrapper::AbstractAlgorithm" 3 "8 Oct 2007" "Version 1.0" "ParadisEO-PEOMovingObjects" \" -*- nroff -*- +.ad l +.nh +.SH NAME +peoParallelAlgorithmWrapper::AbstractAlgorithm \- +.SH SYNOPSIS +.br +.PP +Inherited by \fBpeoParallelAlgorithmWrapper::Algorithm< AlgorithmType, AlgorithmDataType >\fP, and \fBpeoParallelAlgorithmWrapper::Algorithm< AlgorithmType, void >\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "virtual \fB~AbstractAlgorithm\fP ()" +.br +.ti -1c +.RI "virtual void \fBoperator()\fP ()" +.br +.in -1c +.SH "Detailed Description" +.PP +Definition at line 71 of file peoParallelAlgorithmWrapper.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-PEOMovingObjects from the source code. diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoParallelAlgorithmWrapper_Algorithm.3 b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoParallelAlgorithmWrapper_Algorithm.3 new file mode 100644 index 000000000..4982862ee --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoParallelAlgorithmWrapper_Algorithm.3 @@ -0,0 +1,41 @@ +.TH "peoParallelAlgorithmWrapper::Algorithm" 3 "8 Oct 2007" "Version 1.0" "ParadisEO-PEOMovingObjects" \" -*- nroff -*- +.ad l +.nh +.SH NAME +peoParallelAlgorithmWrapper::Algorithm \- +.SH SYNOPSIS +.br +.PP +Inherits \fBpeoParallelAlgorithmWrapper::AbstractAlgorithm\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBAlgorithm\fP (AlgorithmType &externalAlgorithm, AlgorithmDataType &externalData)" +.br +.ti -1c +.RI "virtual void \fBoperator()\fP ()" +.br +.in -1c +.SS "Public Attributes" + +.in +1c +.ti -1c +.RI "AlgorithmType & \fBalgorithm\fP" +.br +.ti -1c +.RI "AlgorithmDataType & \fBalgorithmData\fP" +.br +.in -1c +.SH "Detailed Description" +.PP + +.SS "template struct peoParallelAlgorithmWrapper::Algorithm< AlgorithmType, AlgorithmDataType >" + +.PP +Definition at line 81 of file peoParallelAlgorithmWrapper.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-PEOMovingObjects from the source code. diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoParallelAlgorithmWrapper_Algorithm_ AlgorithmType, void _.3 b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoParallelAlgorithmWrapper_Algorithm_ AlgorithmType, void _.3 new file mode 100644 index 000000000..cfd54f2b4 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoParallelAlgorithmWrapper_Algorithm_ AlgorithmType, void _.3 @@ -0,0 +1,38 @@ +.TH "peoParallelAlgorithmWrapper::Algorithm< AlgorithmType, void >" 3 "8 Oct 2007" "Version 1.0" "ParadisEO-PEOMovingObjects" \" -*- nroff -*- +.ad l +.nh +.SH NAME +peoParallelAlgorithmWrapper::Algorithm< AlgorithmType, void > \- +.SH SYNOPSIS +.br +.PP +Inherits \fBpeoParallelAlgorithmWrapper::AbstractAlgorithm\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBAlgorithm\fP (AlgorithmType &externalAlgorithm)" +.br +.ti -1c +.RI "virtual void \fBoperator()\fP ()" +.br +.in -1c +.SS "Public Attributes" + +.in +1c +.ti -1c +.RI "AlgorithmType & \fBalgorithm\fP" +.br +.in -1c +.SH "Detailed Description" +.PP + +.SS "template struct peoParallelAlgorithmWrapper::Algorithm< AlgorithmType, void >" + +.PP +Definition at line 95 of file peoParallelAlgorithmWrapper.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-PEOMovingObjects from the source code. diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoPopEval.3 b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoPopEval.3 new file mode 100644 index 000000000..2b0d9884f --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoPopEval.3 @@ -0,0 +1,37 @@ +.TH "peoPopEval" 3 "8 Oct 2007" "Version 1.0" "ParadisEO-PEOMovingObjects" \" -*- nroff -*- +.ad l +.nh +.SH NAME +peoPopEval \- The \fB\fBpeoPopEval\fP\fP class provides the interface for constructing ParadisEO specific evaluation functors. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBService\fP. +.PP +Inherited by \fBpeoParaPopEval< EOT >\fP, and \fBpeoSeqPopEval< EOT >\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "virtual void \fBoperator()\fP (\fBeoPop\fP< EOT > &__pop)=0" +.br +.RI "\fIInterface function providing the signature for constructing an evaluation functor. \fP" +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class peoPopEval< EOT >" +The \fB\fBpeoPopEval\fP\fP class provides the interface for constructing ParadisEO specific evaluation functors. + +The derived classes may be used as wrappers for \fB\fBEO\fP\fP-derived evaluation functors. In order to have an example, please refer to the implementation of the \fB\fBpeoSeqPopEval\fP\fP and \fB\fBpeoParaPopEval\fP\fP classes. +.PP +Definition at line 47 of file peoPopEval.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-PEOMovingObjects from the source code. diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoSeqPopEval.3 b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoSeqPopEval.3 new file mode 100644 index 000000000..745865e94 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoSeqPopEval.3 @@ -0,0 +1,78 @@ +.TH "peoSeqPopEval" 3 "8 Oct 2007" "Version 1.0" "ParadisEO-PEOMovingObjects" \" -*- nroff -*- +.ad l +.nh +.SH NAME +peoSeqPopEval \- The \fBpeoSeqPopEval\fP class acts only as a ParadisEO specific sequential evaluation functor - a wrapper for incorporating an \fBeoEvalFunc< EOT >\fP-derived class as evaluation functor. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBpeoPopEval< EOT >< EOT >\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBpeoSeqPopEval\fP (\fBeoEvalFunc\fP< EOT > &__eval)" +.br +.RI "\fIConstructor function - it only sets an internal reference to point to the specified evaluation object. \fP" +.ti -1c +.RI "void \fBoperator()\fP (\fBeoPop\fP< EOT > &__pop)" +.br +.RI "\fIOperator for evaluating all the individuals of a given population - in a sequential iterative manner. \fP" +.in -1c +.SS "Private Attributes" + +.in +1c +.ti -1c +.RI "\fBeoEvalFunc\fP< EOT > & \fBeval\fP" +.br +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class peoSeqPopEval< EOT >" +The \fBpeoSeqPopEval\fP class acts only as a ParadisEO specific sequential evaluation functor - a wrapper for incorporating an \fBeoEvalFunc< EOT >\fP-derived class as evaluation functor. + +The specified \fBEO\fP evaluation object is applyied in an iterative manner to each individual of a specified population. +.PP +Definition at line 49 of file peoSeqPopEval.h. +.SH "Constructor & Destructor Documentation" +.PP +.SS "template \fBpeoSeqPopEval\fP< EOT >::\fBpeoSeqPopEval\fP (\fBeoEvalFunc\fP< EOT > & __eval)" +.PP +Constructor function - it only sets an internal reference to point to the specified evaluation object. +.PP +\fBParameters:\fP +.RS 4 +\fIeoEvalFunc<\fP EOT >& __eval - evaluation object to be applied for each individual of a specified population +.RE +.PP + +.PP +Definition at line 69 of file peoSeqPopEval.h. +.SH "Member Function Documentation" +.PP +.SS "template void \fBpeoSeqPopEval\fP< EOT >::operator() (\fBeoPop\fP< EOT > & __pop)\fC [virtual]\fP" +.PP +Operator for evaluating all the individuals of a given population - in a sequential iterative manner. +.PP +\fBParameters:\fP +.RS 4 +\fIeoPop<\fP EOT >& __pop - population to be evaluated. +.RE +.PP + +.PP +Implements \fBpeoPopEval< EOT >\fP. +.PP +Definition at line 74 of file peoSeqPopEval.h. +.PP +References peoSeqPopEval< EOT >::eval. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-PEOMovingObjects from the source code. diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoSeqTransform.3 b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoSeqTransform.3 new file mode 100644 index 000000000..78cb6d706 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoSeqTransform.3 @@ -0,0 +1,96 @@ +.TH "peoSeqTransform" 3 "8 Oct 2007" "Version 1.0" "ParadisEO-PEOMovingObjects" \" -*- nroff -*- +.ad l +.nh +.SH NAME +peoSeqTransform \- The \fBpeoSeqTransform\fP represent a wrapper for offering the possibility of using \fBEO\fP derived transform operators along with the ParadisEO evolutionary algorithms. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBpeoTransform< EOT >< EOT >\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBpeoSeqTransform\fP (\fBeoTransform\fP< EOT > &__trans)" +.br +.RI "\fIConstructor function - sets an internal reference towards the specified EO-derived transform object. \fP" +.ti -1c +.RI "void \fBoperator()\fP (\fBeoPop\fP< EOT > &__pop)" +.br +.RI "\fIOperator for applying the specified transform operators on each individual of the given population. \fP" +.ti -1c +.RI "virtual void \fBpackData\fP ()" +.br +.RI "\fIInterface function for providing a link with the parallel architecture of the ParadisEO framework. \fP" +.ti -1c +.RI "virtual void \fBunpackData\fP ()" +.br +.RI "\fIInterface function for providing a link with the parallel architecture of the ParadisEO framework. \fP" +.ti -1c +.RI "virtual void \fBexecute\fP ()" +.br +.RI "\fIInterface function for providing a link with the parallel architecture of the ParadisEO framework. \fP" +.ti -1c +.RI "virtual void \fBpackResult\fP ()" +.br +.RI "\fIInterface function for providing a link with the parallel architecture of the ParadisEO framework. \fP" +.ti -1c +.RI "virtual void \fBunpackResult\fP ()" +.br +.RI "\fIInterface function for providing a link with the parallel architecture of the ParadisEO framework. \fP" +.in -1c +.SS "Private Attributes" + +.in +1c +.ti -1c +.RI "\fBeoTransform\fP< EOT > & \fBtrans\fP" +.br +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class peoSeqTransform< EOT >" +The \fBpeoSeqTransform\fP represent a wrapper for offering the possibility of using \fBEO\fP derived transform operators along with the ParadisEO evolutionary algorithms. + +A minimal set of interface functions is also provided for creating the link with the parallel architecture of the ParadisEO framework. +.PP +Definition at line 48 of file peoSeqTransform.h. +.SH "Constructor & Destructor Documentation" +.PP +.SS "template \fBpeoSeqTransform\fP< EOT >::\fBpeoSeqTransform\fP (\fBeoTransform\fP< EOT > & __trans)" +.PP +Constructor function - sets an internal reference towards the specified EO-derived transform object. +.PP +\fBParameters:\fP +.RS 4 +\fIeoTransform<\fP EOT >& __trans - EO-derived transform object including crossover and mutation operators. +.RE +.PP + +.PP +Definition at line 83 of file peoSeqTransform.h. +.SH "Member Function Documentation" +.PP +.SS "template void \fBpeoSeqTransform\fP< EOT >::operator() (\fBeoPop\fP< EOT > & __pop)" +.PP +Operator for applying the specified transform operators on each individual of the given population. +.PP +\fBParameters:\fP +.RS 4 +\fIeoPop<\fP EOT >& __pop - population to be transformed by applying the crossover and mutation operators. +.RE +.PP + +.PP +Definition at line 88 of file peoSeqTransform.h. +.PP +References peoSeqTransform< EOT >::trans. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-PEOMovingObjects from the source code. diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoSyncIslandMig.3 b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoSyncIslandMig.3 new file mode 100644 index 000000000..d9854a182 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoSyncIslandMig.3 @@ -0,0 +1,183 @@ +.TH "peoSyncIslandMig" 3 "8 Oct 2007" "Version 1.0" "ParadisEO-PEOMovingObjects" \" -*- nroff -*- +.ad l +.nh +.SH NAME +peoSyncIslandMig \- The \fBpeoSyncIslandMig\fP class offers the elementary basis for implementating a synchronous island migration model - requires the specification of several basic parameters, i.e. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBCooperative\fP, and \fBeoUpdater\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBpeoSyncIslandMig\fP (unsigned __frequency, \fBeoSelect\fP< EOT > &__select, \fBeoReplacement\fP< EOT > &__replace, \fBTopology\fP &__topology, \fBeoPop\fP< EOT > &__source, \fBeoPop\fP< EOT > &__destination)" +.br +.RI "\fIConstructor for the \fBpeoSyncIslandMig\fP class; the characteristics of the migration model are defined through the specified parameters - out of the box objects provided in \fBEO\fP, etc., or custom, derived objects may be passed as parameters. \fP" +.ti -1c +.RI "void \fBoperator()\fP ()" +.br +.RI "\fI\fBFunction\fP operator to be called as checkpoint for performing the migration step. \fP" +.ti -1c +.RI "void \fBpack\fP ()" +.br +.RI "\fIAuxiliary function dealing with sending the emigrant individuals. There is no need to explicitly call the function. \fP" +.ti -1c +.RI "void \fBunpack\fP ()" +.br +.RI "\fIAuxiliary function dealing with receiving immigrant individuals. There is no need to explicitly call the function. \fP" +.ti -1c +.RI "void \fBnotifySending\fP ()" +.br +.RI "\fIAuxiliary function dealing with migration notifications. There is no need to explicitly call the function. \fP" +.in -1c +.SS "Private Member Functions" + +.in +1c +.ti -1c +.RI "void \fBemigrate\fP ()" +.br +.ti -1c +.RI "void \fBimmigrate\fP ()" +.br +.in -1c +.SS "Private Attributes" + +.in +1c +.ti -1c +.RI "\fBeoPeriodicContinue\fP< EOT > \fBcont\fP" +.br +.ti -1c +.RI "\fBeoSelect\fP< EOT > & \fBselect\fP" +.br +.ti -1c +.RI "\fBeoReplacement\fP< EOT > & \fBreplace\fP" +.br +.ti -1c +.RI "\fBTopology\fP & \fBtopology\fP" +.br +.ti -1c +.RI "\fBeoPop\fP< EOT > & \fBsource\fP" +.br +.ti -1c +.RI "\fBeoPop\fP< EOT > & \fBdestination\fP" +.br +.ti -1c +.RI "std::queue< \fBeoPop\fP< EOT > > \fBimm\fP" +.br +.ti -1c +.RI "std::queue< \fBeoPop\fP< EOT > > \fBem\fP" +.br +.ti -1c +.RI "std::queue< \fBCooperative\fP * > \fBcoop_em\fP" +.br +.ti -1c +.RI "sem_t \fBsync\fP" +.br +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class peoSyncIslandMig< EOT >" +The \fBpeoSyncIslandMig\fP class offers the elementary basis for implementating a synchronous island migration model - requires the specification of several basic parameters, i.e. + +frequency of the migrations, selection and replacement strategies, a topological model and the source and destination population for the migrating individuals. The main difference as opposed to the asynchronous migration model is the synchronization step performed after selecting and sending the emigrant individuals. +.PP +The migration operator is called at the end of each generation of an evolutionary algorithms as a checkpoint object - the following code exposes the structure of a classic evolutionary algorithm: +.PP +\fBdo\fP { select( population, offsprings ); // select the offsprings from the current population transform( offsprings ); // crossover and mutation operators are applied on the selected offsprings evaluate( offsprings ); // evaluation step of the resulting offspring replace( population, offsprings ); // replace the individuals in the current population whith individuals from the offspring population, according to a specified replacement strategy } \fBwhile\fP ( eaCheckpointContinue( population ) ); // checkpoint operators are applied on the current population, including the migration operator, if any specified +.PP +Constructing a synchronous island migration model requires having defined (1) a topological migration model, (2) the control parameters of the migration process, (3) a checkpoint object associated with an evolutionary algorithm, and (4) an owner object must be set. The owner object must be derived from the \fB\fBRunner\fP\fP class (for example a \fBpeoEA\fP object represents a possible owner). A simple example is offered bellow: +.PP +.PD 0 +.IP "1." 4 +topological model to be followed when performing migrations: +.br + +.br + \fBRingTopology\fP migTopology; // a simple ring topological model - each island communicates with two other islands +.PP + +.IP "2." 4 +the continuation criterion, selection and replacement strategy etc. are defined: +.br + +.br + eoPop< EOT > population( POP_SIZE, popInitializer ); // population of individuals to be used for the evolutionary algorithm eoRandomSelect< EOT > migSelectStrategy; // selection strategy - in this case a random selection is applied eoSelectNumber< EOT > migSelect( migSelectStrategy, MIG_SIZE ); // number of individuals to be selected using the specified strategy eoPlusReplacement< EOT > migReplace; // immigration strategy - the worse individuals in the destination population are replaced by the immigrant individuals peoSyncIslandMig< EOT > syncMigration( +.br + MIG_FREQ, migSelect, migReplace, migTopology, +.br + population, population +.br + ); // synchronous migration object - the emigrant individuals are selected from the same from population in which the immigrant individuals are being integrated +.PP + +.IP "3." 4 +creation of a checkpoint object as part of the definition of an evolutionary algoritm (details of th EA not given as being out of scope): +.br + +.br + ... eoGenContinue< EOT > eaCont( NUM_GEN ); // the evolutionary algorithm will stop after NUM_GEN generations eoCheckPoint< EOT > eaCheckpointContinue( eaCont ); // number of individuals to be selected using the specified strategy ... eaCheckpointContinue.add( syncMigration ); // adding the migration operator as checkpoint element ... +.PP + +.IP "4." 4 +definition of an owner evolutionary algorithm (an object inheriting the \fB\fBRunner\fP\fP class): +.br + +.br + peoEA< EOT > eaAlg( eaCheckpointContinue, eaPopEval, eaSelect, eaTransform, eaReplace); // evolutionary algorithm having as checkpoint the eaCheckpointContinue object defined above syncMigration.setOwner( eaAlg ); // setting the evolutionary algorithm as owner of the migration object eaAlg( population ); // applying the evolutionary algorithm on a given population +.PP +.PP +The source and the destination population for the migration object were specified as being the same, in step no. 2, as we are usually interested in selecting the emigrants and integrating the immigrant individuals from and in, respectively, one unique population, iteratively evolved by an evolutionary algorithm. There is no restriction in having two distinct populations as source and destination for the emigrant and immigrant individuals respectively. +.PP +The above steps only create a synchronous migration object associated to an evolutionary algorithm. The creation of several islands requires the reiteration of the steps 2 through 4 for creating distinct algorithms, with distinct populations and the associated distinctly parametrized migration objects. The interconnecting element is the underlying topology, defined at step 1 (the same C++ migTopology object has to be passed as parameter for all the migration objects, in order to interconnect them). +.PP +Definition at line 142 of file peoSyncIslandMig.h. +.SH "Constructor & Destructor Documentation" +.PP +.SS "template \fBpeoSyncIslandMig\fP< EOT >::\fBpeoSyncIslandMig\fP (unsigned __frequency, \fBeoSelect\fP< EOT > & __select, \fBeoReplacement\fP< EOT > & __replace, \fBTopology\fP & __topology, \fBeoPop\fP< EOT > & __source, \fBeoPop\fP< EOT > & __destination)" +.PP +Constructor for the \fBpeoSyncIslandMig\fP class; the characteristics of the migration model are defined through the specified parameters - out of the box objects provided in \fBEO\fP, etc., or custom, derived objects may be passed as parameters. +.PP +\fBParameters:\fP +.RS 4 +\fIunsigned\fP __frequency - frequency of the migrations - the migrations occur periodically; +.br +\fIeoSelect<\fP EOT >& __select - selection strategy to be applied for constructing a list of emigrant individuals out of the source population; +.br +\fIeoReplacement<\fP EOT >& __replace - replacement strategy used for integrating the immigrant individuals in the destination population; +.br +\fITopology&\fP __topology - topological model to be followed when performing migrations; +.br +\fIeoPop<\fP EOT >& __source - source population from which the emigrant individuals are selected; +.br +\fIeoPop<\fP EOT >& __destination - destination population in which the immigrant population are integrated. +.RE +.PP + +.PP +Definition at line 206 of file peoSyncIslandMig.h. +.PP +References Topology::add(), and peoSyncIslandMig< EOT >::sync. +.SH "Member Function Documentation" +.PP +.SS "template void \fBpeoSyncIslandMig\fP< EOT >::operator() ()\fC [virtual]\fP" +.PP +\fBFunction\fP operator to be called as checkpoint for performing the migration step. +.PP +The emigrant individuals are selected from the source population and sent to the next island (defined by the topology object) while the immigrant individuals are integrated in the destination population. There is no need to explicitly call the function - the wrapper checkpoint object (please refer to the above example) will perform the call when required. +.PP +Implements \fBeoF< void >\fP. +.PP +Definition at line 280 of file peoSyncIslandMig.h. +.PP +References peoSyncIslandMig< EOT >::cont, peoSyncIslandMig< EOT >::emigrate(), Cooperative::getOwner(), peoSyncIslandMig< EOT >::immigrate(), Thread::setActive(), peoSyncIslandMig< EOT >::source, Communicable::stop(), and peoSyncIslandMig< EOT >::sync. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-PEOMovingObjects from the source code. diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoSyncMultiStart.3 b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoSyncMultiStart.3 new file mode 100644 index 000000000..5decd8736 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoSyncMultiStart.3 @@ -0,0 +1,211 @@ +.TH "peoSyncMultiStart" 3 "8 Oct 2007" "Version 1.0" "ParadisEO-PEOMovingObjects" \" -*- nroff -*- +.ad l +.nh +.SH NAME +peoSyncMultiStart \- The \fBpeoSyncMultiStart\fP class provides the basis for implementing the synchronous multi-start model, for launching several solution-based algorithms in parallel on a specified initial population. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBService\fP, and \fBeoUpdater\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBpeoSyncMultiStart\fP (\fBeoContinue\fP< EOT > &__cont, \fBeoSelect\fP< EOT > &__select, \fBeoReplacement\fP< EOT > &__replace, \fBmoAlgo\fP< EOT > &__ls, \fBeoPop\fP< EOT > &__pop)" +.br +.RI "\fIConstructor function - several simple parameters are required for defining the characteristics of the multi-start model. \fP" +.ti -1c +.RI "void \fBoperator()\fP ()" +.br +.RI "\fIOperator which synchronously executes the specified algorithm on the individuals selected from the initial population. \fP" +.ti -1c +.RI "void \fBpackData\fP ()" +.br +.RI "\fIAuxiliary function for transferring data between the process requesting the synchronous execution of the specified algorithm and the process which actually executes the algorithm. \fP" +.ti -1c +.RI "void \fBunpackData\fP ()" +.br +.RI "\fIAuxiliary function for transferring data between the process requesting the synchronous execution of the specified algorithm and the process which actually executes the algorithm. \fP" +.ti -1c +.RI "void \fBexecute\fP ()" +.br +.RI "\fIAuxiliary function for actually executing the specified algorithm on one assigned individual. \fP" +.ti -1c +.RI "void \fBpackResult\fP ()" +.br +.RI "\fIAuxiliary function for transferring data between the process requesting the synchronous execution of the specified algorithm and the process which actually executes the algorithm. \fP" +.ti -1c +.RI "void \fBunpackResult\fP ()" +.br +.RI "\fIAuxiliary function for transferring data between the process requesting the synchronous execution of the specified algorithm and the process which actually executes the algorithm. \fP" +.ti -1c +.RI "void \fBnotifySendingData\fP ()" +.br +.RI "\fIAuxiliary function for notifications between the process requesting the synchronous multi-start execution and the processes that performs the actual execution phase. \fP" +.ti -1c +.RI "void \fBnotifySendingAllResourceRequests\fP ()" +.br +.RI "\fIAuxiliary function for notifications between the process requesting the synchronous multi-start execution and the processes that performs the actual execution phase. \fP" +.in -1c +.SS "Private Attributes" + +.in +1c +.ti -1c +.RI "\fBeoContinue\fP< EOT > & \fBcont\fP" +.br +.ti -1c +.RI "\fBeoSelect\fP< EOT > & \fBselect\fP" +.br +.ti -1c +.RI "\fBeoReplacement\fP< EOT > & \fBreplace\fP" +.br +.ti -1c +.RI "\fBmoAlgo\fP< EOT > & \fBls\fP" +.br +.ti -1c +.RI "\fBeoPop\fP< EOT > & \fBpop\fP" +.br +.ti -1c +.RI "\fBeoPop\fP< EOT > \fBsel\fP" +.br +.ti -1c +.RI "\fBeoPop\fP< EOT > \fBimpr_sel\fP" +.br +.ti -1c +.RI "EOT \fBsol\fP" +.br +.ti -1c +.RI "unsigned \fBidx\fP" +.br +.ti -1c +.RI "unsigned \fBnum_term\fP" +.br +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class peoSyncMultiStart< EOT >" +The \fBpeoSyncMultiStart\fP class provides the basis for implementing the synchronous multi-start model, for launching several solution-based algorithms in parallel on a specified initial population. + +As a simple example, several hill climbing algorithms may be synchronously launched on the specified population, each algorithm acting upon one individual only, the final result being integrated back in the population. A \fBpeoSyncMultiStart\fP object can be specified as checkpoint object for a classic ParadisEO evolutionary algorithm thus allowing for simple hybridization schemes which combine the evolutionary approach with a local search approach, for example, executed at the end of each generation. +.PP +Definition at line 64 of file peoSyncMultiStart.h. +.SH "Constructor & Destructor Documentation" +.PP +.SS "template \fBpeoSyncMultiStart\fP< EOT >::\fBpeoSyncMultiStart\fP (\fBeoContinue\fP< EOT > & __cont, \fBeoSelect\fP< EOT > & __select, \fBeoReplacement\fP< EOT > & __replace, \fBmoAlgo\fP< EOT > & __ls, \fBeoPop\fP< EOT > & __pop)" +.PP +Constructor function - several simple parameters are required for defining the characteristics of the multi-start model. +.PP +\fBParameters:\fP +.RS 4 +\fIeoContinue<\fP EOT >& __cont - defined for including further functionality - no semantics associated at this time; +.br +\fIeoSelect<\fP EOT >& __select - selection strategy for obtaining a subset of the initial population on which to apply the specified algorithm; +.br +\fIeoReplacement<\fP EOT >& __replace - replacement strategy for integrating the resulting individuals in the initial population; +.br +\fImoAlgo<\fP EOT >& __ls - algorithm to be applied on each of the selected individuals - a \fBmoAlgo< EOT >\fP-derived object must be specified; +.br +\fIeoPop<\fP EOT >& __pop - the initial population from which the individuals are selected for applying the specified algorithm. +.RE +.PP + +.PP +Definition at line 134 of file peoSyncMultiStart.h. +.SH "Member Function Documentation" +.PP +.SS "template void \fBpeoSyncMultiStart\fP< EOT >::operator() ()\fC [virtual]\fP" +.PP +Operator which synchronously executes the specified algorithm on the individuals selected from the initial population. +.PP +There is no need to explicitly call the operator - automatically called as checkpoint operator. +.PP +Implements \fBeoF< void >\fP. +.PP +Definition at line 189 of file peoSyncMultiStart.h. +.PP +References peoSyncMultiStart< EOT >::idx, peoSyncMultiStart< EOT >::impr_sel, peoSyncMultiStart< EOT >::num_term, peoSyncMultiStart< EOT >::pop, Service::requestResourceRequest(), peoSyncMultiStart< EOT >::sel, peoSyncMultiStart< EOT >::select, and Communicable::stop(). +.SS "template void \fBpeoSyncMultiStart\fP< EOT >::packData ()\fC [virtual]\fP" +.PP +Auxiliary function for transferring data between the process requesting the synchronous execution of the specified algorithm and the process which actually executes the algorithm. +.PP +There is no need to explicitly call the function. +.PP +Reimplemented from \fBService\fP. +.PP +Definition at line 148 of file peoSyncMultiStart.h. +.PP +References peoSyncMultiStart< EOT >::idx, and peoSyncMultiStart< EOT >::sel. +.SS "template void \fBpeoSyncMultiStart\fP< EOT >::unpackData ()\fC [virtual]\fP" +.PP +Auxiliary function for transferring data between the process requesting the synchronous execution of the specified algorithm and the process which actually executes the algorithm. +.PP +There is no need to explicitly call the function. +.PP +Reimplemented from \fBService\fP. +.PP +Definition at line 154 of file peoSyncMultiStart.h. +.PP +References peoSyncMultiStart< EOT >::sol. +.SS "template void \fBpeoSyncMultiStart\fP< EOT >::execute ()\fC [virtual]\fP" +.PP +Auxiliary function for actually executing the specified algorithm on one assigned individual. +.PP +There is no need to explicitly call the function. +.PP +Reimplemented from \fBService\fP. +.PP +Definition at line 160 of file peoSyncMultiStart.h. +.PP +References peoSyncMultiStart< EOT >::ls, and peoSyncMultiStart< EOT >::sol. +.SS "template void \fBpeoSyncMultiStart\fP< EOT >::packResult ()\fC [virtual]\fP" +.PP +Auxiliary function for transferring data between the process requesting the synchronous execution of the specified algorithm and the process which actually executes the algorithm. +.PP +There is no need to explicitly call the function. +.PP +Reimplemented from \fBService\fP. +.PP +Definition at line 166 of file peoSyncMultiStart.h. +.PP +References peoSyncMultiStart< EOT >::sol. +.SS "template void \fBpeoSyncMultiStart\fP< EOT >::unpackResult ()\fC [virtual]\fP" +.PP +Auxiliary function for transferring data between the process requesting the synchronous execution of the specified algorithm and the process which actually executes the algorithm. +.PP +There is no need to explicitly call the function. +.PP +Reimplemented from \fBService\fP. +.PP +Definition at line 172 of file peoSyncMultiStart.h. +.PP +References Service::getOwner(), peoSyncMultiStart< EOT >::impr_sel, peoSyncMultiStart< EOT >::num_term, peoSyncMultiStart< EOT >::pop, peoSyncMultiStart< EOT >::replace, Communicable::resume(), peoSyncMultiStart< EOT >::sel, Thread::setActive(), and peoSyncMultiStart< EOT >::sol. +.SS "template void \fBpeoSyncMultiStart\fP< EOT >::notifySendingData ()\fC [virtual]\fP" +.PP +Auxiliary function for notifications between the process requesting the synchronous multi-start execution and the processes that performs the actual execution phase. +.PP +There is no need to explicitly call the function. +.PP +Reimplemented from \fBService\fP. +.PP +Definition at line 200 of file peoSyncMultiStart.h. +.SS "template void \fBpeoSyncMultiStart\fP< EOT >::notifySendingAllResourceRequests ()\fC [virtual]\fP" +.PP +Auxiliary function for notifications between the process requesting the synchronous multi-start execution and the processes that performs the actual execution phase. +.PP +There is no need to explicitly call the function. +.PP +Reimplemented from \fBService\fP. +.PP +Definition at line 205 of file peoSyncMultiStart.h. +.PP +References Service::getOwner(), and Thread::setPassive(). + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-PEOMovingObjects from the source code. diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoSynchronousMultiStart.3 b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoSynchronousMultiStart.3 new file mode 100644 index 000000000..166617ead --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoSynchronousMultiStart.3 @@ -0,0 +1,117 @@ +.TH "peoSynchronousMultiStart" 3 "8 Oct 2007" "Version 1.0" "ParadisEO-PEOMovingObjects" \" -*- nroff -*- +.ad l +.nh +.SH NAME +peoSynchronousMultiStart \- +.SH SYNOPSIS +.br +.PP +Inherits \fBService\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "template \fBpeoSynchronousMultiStart\fP (AlgorithmType &externalAlgorithm)" +.br +.ti -1c +.RI "template \fBpeoSynchronousMultiStart\fP (std::vector< AlgorithmType * > &externalAlgorithms, AggregationFunctionType &externalAggregationFunction)" +.br +.ti -1c +.RI "\fB~peoSynchronousMultiStart\fP ()" +.br +.ti -1c +.RI "template void \fBoperator()\fP (Type &externalData)" +.br +.ti -1c +.RI "template void \fBoperator()\fP (const Type &externalDataBegin, const Type &externalDataEnd)" +.br +.ti -1c +.RI "void \fBpackData\fP ()" +.br +.ti -1c +.RI "void \fBunpackData\fP ()" +.br +.ti -1c +.RI "void \fBexecute\fP ()" +.br +.ti -1c +.RI "void \fBpackResult\fP ()" +.br +.ti -1c +.RI "void \fBunpackResult\fP ()" +.br +.ti -1c +.RI "void \fBnotifySendingData\fP ()" +.br +.ti -1c +.RI "void \fBnotifySendingAllResourceRequests\fP ()" +.br +.in -1c +.SS "Private Attributes" + +.in +1c +.ti -1c +.RI "\fBAbstractAlgorithm\fP * \fBsingularAlgorithm\fP" +.br +.ti -1c +.RI "std::vector< \fBAbstractAlgorithm\fP * > \fBalgorithms\fP" +.br +.ti -1c +.RI "\fBAbstractAggregationAlgorithm\fP * \fBaggregationFunction\fP" +.br +.ti -1c +.RI "EntityType \fBentityTypeInstance\fP" +.br +.ti -1c +.RI "std::vector< \fBAbstractDataType\fP * > \fBdata\fP" +.br +.ti -1c +.RI "unsigned \fBidx\fP" +.br +.ti -1c +.RI "unsigned \fBnum_term\fP" +.br +.ti -1c +.RI "unsigned \fBdataIndex\fP" +.br +.ti -1c +.RI "unsigned \fBfunctionIndex\fP" +.br +.in -1c +.SS "Classes" + +.in +1c +.ti -1c +.RI "struct \fBAbstractAggregationAlgorithm\fP" +.br +.ti -1c +.RI "struct \fBAbstractAlgorithm\fP" +.br +.ti -1c +.RI "struct \fBAbstractDataType\fP" +.br +.ti -1c +.RI "struct \fBAggregationAlgorithm\fP" +.br +.ti -1c +.RI "struct \fBAlgorithm\fP" +.br +.ti -1c +.RI "struct \fBDataType\fP" +.br +.ti -1c +.RI "struct \fBNoAggregationFunction\fP" +.br +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class peoSynchronousMultiStart< EntityType >" + +.PP +Definition at line 45 of file peoSynchronousMultiStart.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-PEOMovingObjects from the source code. diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoSynchronousMultiStart_AbstractAggregationAlgorithm.3 b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoSynchronousMultiStart_AbstractAggregationAlgorithm.3 new file mode 100644 index 000000000..409b9e62f --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoSynchronousMultiStart_AbstractAggregationAlgorithm.3 @@ -0,0 +1,31 @@ +.TH "peoSynchronousMultiStart::AbstractAggregationAlgorithm" 3 "8 Oct 2007" "Version 1.0" "ParadisEO-PEOMovingObjects" \" -*- nroff -*- +.ad l +.nh +.SH NAME +peoSynchronousMultiStart::AbstractAggregationAlgorithm \- +.SH SYNOPSIS +.br +.PP +Inherited by \fBpeoSynchronousMultiStart< EntityType >::AggregationAlgorithm< AggregationAlgorithmType >\fP, and \fBpeoSynchronousMultiStart< EntityType >::NoAggregationFunction\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "virtual \fB~AbstractAggregationAlgorithm\fP ()" +.br +.ti -1c +.RI "virtual void \fBoperator()\fP (\fBAbstractDataType\fP &dataTypeInstanceA, \fBAbstractDataType\fP &dataTypeInstanceB)" +.br +.in -1c +.SH "Detailed Description" +.PP + +.SS "template struct peoSynchronousMultiStart< EntityType >::AbstractAggregationAlgorithm" + +.PP +Definition at line 157 of file peoSynchronousMultiStart.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-PEOMovingObjects from the source code. diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoSynchronousMultiStart_AbstractAlgorithm.3 b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoSynchronousMultiStart_AbstractAlgorithm.3 new file mode 100644 index 000000000..9bfd71852 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoSynchronousMultiStart_AbstractAlgorithm.3 @@ -0,0 +1,31 @@ +.TH "peoSynchronousMultiStart::AbstractAlgorithm" 3 "8 Oct 2007" "Version 1.0" "ParadisEO-PEOMovingObjects" \" -*- nroff -*- +.ad l +.nh +.SH NAME +peoSynchronousMultiStart::AbstractAlgorithm \- +.SH SYNOPSIS +.br +.PP +Inherited by \fBpeoSynchronousMultiStart< EntityType >::Algorithm< AlgorithmType >\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "virtual \fB~AbstractAlgorithm\fP ()" +.br +.ti -1c +.RI "virtual void \fBoperator()\fP (\fBAbstractDataType\fP &dataTypeInstance)" +.br +.in -1c +.SH "Detailed Description" +.PP + +.SS "template struct peoSynchronousMultiStart< EntityType >::AbstractAlgorithm" + +.PP +Definition at line 139 of file peoSynchronousMultiStart.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-PEOMovingObjects from the source code. diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoSynchronousMultiStart_AbstractDataType.3 b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoSynchronousMultiStart_AbstractDataType.3 new file mode 100644 index 000000000..ed1b5ee4d --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoSynchronousMultiStart_AbstractDataType.3 @@ -0,0 +1,31 @@ +.TH "peoSynchronousMultiStart::AbstractDataType" 3 "8 Oct 2007" "Version 1.0" "ParadisEO-PEOMovingObjects" \" -*- nroff -*- +.ad l +.nh +.SH NAME +peoSynchronousMultiStart::AbstractDataType \- +.SH SYNOPSIS +.br +.PP +Inherited by \fBpeoSynchronousMultiStart< EntityType >::DataType< Type >\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "virtual \fB~AbstractDataType\fP ()" +.br +.ti -1c +.RI "template \fBoperator Type &\fP ()" +.br +.in -1c +.SH "Detailed Description" +.PP + +.SS "template struct peoSynchronousMultiStart< EntityType >::AbstractDataType" + +.PP +Definition at line 122 of file peoSynchronousMultiStart.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-PEOMovingObjects from the source code. diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoSynchronousMultiStart_AggregationAlgorithm.3 b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoSynchronousMultiStart_AggregationAlgorithm.3 new file mode 100644 index 000000000..5f26001fc --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoSynchronousMultiStart_AggregationAlgorithm.3 @@ -0,0 +1,38 @@ +.TH "peoSynchronousMultiStart::AggregationAlgorithm" 3 "8 Oct 2007" "Version 1.0" "ParadisEO-PEOMovingObjects" \" -*- nroff -*- +.ad l +.nh +.SH NAME +peoSynchronousMultiStart::AggregationAlgorithm \- +.SH SYNOPSIS +.br +.PP +Inherits \fBpeoSynchronousMultiStart< EntityType >::AbstractAggregationAlgorithm\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBAggregationAlgorithm\fP (AggregationAlgorithmType &externalAggregationAlgorithm)" +.br +.ti -1c +.RI "void \fBoperator()\fP (\fBAbstractDataType\fP &dataTypeInstanceA, \fBAbstractDataType\fP &dataTypeInstanceB)" +.br +.in -1c +.SS "Public Attributes" + +.in +1c +.ti -1c +.RI "AggregationAlgorithmType & \fBaggregationAlgorithm\fP" +.br +.in -1c +.SH "Detailed Description" +.PP + +.SS "templatetemplate struct peoSynchronousMultiStart< EntityType >::AggregationAlgorithm< AggregationAlgorithmType >" + +.PP +Definition at line 164 of file peoSynchronousMultiStart.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-PEOMovingObjects from the source code. diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoSynchronousMultiStart_Algorithm.3 b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoSynchronousMultiStart_Algorithm.3 new file mode 100644 index 000000000..2336cfde9 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoSynchronousMultiStart_Algorithm.3 @@ -0,0 +1,38 @@ +.TH "peoSynchronousMultiStart::Algorithm" 3 "8 Oct 2007" "Version 1.0" "ParadisEO-PEOMovingObjects" \" -*- nroff -*- +.ad l +.nh +.SH NAME +peoSynchronousMultiStart::Algorithm \- +.SH SYNOPSIS +.br +.PP +Inherits \fBpeoSynchronousMultiStart< EntityType >::AbstractAlgorithm\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBAlgorithm\fP (AlgorithmType &externalAlgorithm)" +.br +.ti -1c +.RI "void \fBoperator()\fP (\fBAbstractDataType\fP &dataTypeInstance)" +.br +.in -1c +.SS "Public Attributes" + +.in +1c +.ti -1c +.RI "AlgorithmType & \fBalgorithm\fP" +.br +.in -1c +.SH "Detailed Description" +.PP + +.SS "templatetemplate struct peoSynchronousMultiStart< EntityType >::Algorithm< AlgorithmType >" + +.PP +Definition at line 146 of file peoSynchronousMultiStart.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-PEOMovingObjects from the source code. diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoSynchronousMultiStart_DataType.3 b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoSynchronousMultiStart_DataType.3 new file mode 100644 index 000000000..bd97d38d5 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoSynchronousMultiStart_DataType.3 @@ -0,0 +1,35 @@ +.TH "peoSynchronousMultiStart::DataType" 3 "8 Oct 2007" "Version 1.0" "ParadisEO-PEOMovingObjects" \" -*- nroff -*- +.ad l +.nh +.SH NAME +peoSynchronousMultiStart::DataType \- +.SH SYNOPSIS +.br +.PP +Inherits \fBpeoSynchronousMultiStart< EntityType >::AbstractDataType\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBDataType\fP (Type &externalData)" +.br +.in -1c +.SS "Public Attributes" + +.in +1c +.ti -1c +.RI "Type & \fBdata\fP" +.br +.in -1c +.SH "Detailed Description" +.PP + +.SS "templatetemplate struct peoSynchronousMultiStart< EntityType >::DataType< Type >" + +.PP +Definition at line 132 of file peoSynchronousMultiStart.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-PEOMovingObjects from the source code. diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoSynchronousMultiStart_NoAggregationFunction.3 b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoSynchronousMultiStart_NoAggregationFunction.3 new file mode 100644 index 000000000..2cd5af48d --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoSynchronousMultiStart_NoAggregationFunction.3 @@ -0,0 +1,28 @@ +.TH "peoSynchronousMultiStart::NoAggregationFunction" 3 "8 Oct 2007" "Version 1.0" "ParadisEO-PEOMovingObjects" \" -*- nroff -*- +.ad l +.nh +.SH NAME +peoSynchronousMultiStart::NoAggregationFunction \- +.SH SYNOPSIS +.br +.PP +Inherits \fBpeoSynchronousMultiStart< EntityType >::AbstractAggregationAlgorithm\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "void \fBoperator()\fP (\fBAbstractDataType\fP &dataTypeInstanceA, \fBAbstractDataType\fP &dataTypeInstanceB)" +.br +.in -1c +.SH "Detailed Description" +.PP + +.SS "template struct peoSynchronousMultiStart< EntityType >::NoAggregationFunction" + +.PP +Definition at line 176 of file peoSynchronousMultiStart.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-PEOMovingObjects from the source code. diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoTransform.3 b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoTransform.3 new file mode 100644 index 000000000..2ffdb3dd9 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/man/man3/peoTransform.3 @@ -0,0 +1,27 @@ +.TH "peoTransform" 3 "8 Oct 2007" "Version 1.0" "ParadisEO-PEOMovingObjects" \" -*- nroff -*- +.ad l +.nh +.SH NAME +peoTransform \- The \fBpeoTransform\fP class acts only as an interface for creating transform operators - for an example please refer to the \fB\fBpeoSeqTransform\fP\fP and the \fB\fBpeoParaSGATransform\fP\fP classes. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBService\fP, and \fBeoTransform< EOT >< EOT >\fP. +.PP +Inherited by \fBpeoParaSGATransform< EOT >\fP, and \fBpeoSeqTransform< EOT >\fP. +.PP +.SH "Detailed Description" +.PP + +.SS "template class peoTransform< EOT >" +The \fBpeoTransform\fP class acts only as an interface for creating transform operators - for an example please refer to the \fB\fBpeoSeqTransform\fP\fP and the \fB\fBpeoParaSGATransform\fP\fP classes. +.PP +Definition at line 48 of file peoTransform.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-PEOMovingObjects from the source code. diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/peo.doxyfile.cmake b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/peo.doxyfile.cmake new file mode 100644 index 000000000..70be700cf --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/doc/peo.doxyfile.cmake @@ -0,0 +1,239 @@ +# Doxyfile 1.4.7 + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- +PROJECT_NAME = @PACKAGE_NAME@ +PROJECT_NUMBER = @PACKAGE_VERSION@ +OUTPUT_DIRECTORY = @CMAKE_BINARY_DIR@/doc +CREATE_SUBDIRS = NO +OUTPUT_LANGUAGE = English +USE_WINDOWS_ENCODING = NO +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = YES +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the +ALWAYS_DETAILED_SEC = NO +INLINE_INHERITED_MEMB = NO +FULL_PATH_NAMES = NO +STRIP_FROM_PATH = @CMAKE_SOURCE_DIR@ +STRIP_FROM_INC_PATH = +SHORT_NAMES = NO +JAVADOC_AUTOBRIEF = YES +MULTILINE_CPP_IS_BRIEF = NO +DETAILS_AT_TOP = NO +INHERIT_DOCS = YES +SEPARATE_MEMBER_PAGES = NO +TAB_SIZE = 8 +ALIASES = +OPTIMIZE_OUTPUT_FOR_C = NO +OPTIMIZE_OUTPUT_JAVA = NO +BUILTIN_STL_SUPPORT = NO +DISTRIBUTE_GROUP_DOC = NO +SUBGROUPING = YES +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- +EXTRACT_ALL = NO +EXTRACT_PRIVATE = YES +EXTRACT_STATIC = YES +EXTRACT_LOCAL_CLASSES = YES +EXTRACT_LOCAL_METHODS = NO +HIDE_UNDOC_MEMBERS = YES +HIDE_UNDOC_CLASSES = YES +HIDE_FRIEND_COMPOUNDS = NO +HIDE_IN_BODY_DOCS = NO +INTERNAL_DOCS = NO +CASE_SENSE_NAMES = YES +HIDE_SCOPE_NAMES = NO +SHOW_INCLUDE_FILES = YES +INLINE_INFO = YES +SORT_MEMBER_DOCS = NO +SORT_BRIEF_DOCS = NO +SORT_BY_SCOPE_NAME = NO +GENERATE_TODOLIST = YES +GENERATE_TESTLIST = YES +GENERATE_BUGLIST = YES +GENERATE_DEPRECATEDLIST= YES +ENABLED_SECTIONS = +MAX_INITIALIZER_LINES = 30 +SHOW_USED_FILES = YES +SHOW_DIRECTORIES = NO +FILE_VERSION_FILTER = +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- +QUIET = YES +WARNINGS = NO +WARN_IF_UNDOCUMENTED = NO +WARN_IF_DOC_ERROR = NO +WARN_NO_PARAMDOC = NO +WARN_FORMAT = "$file:$line: $text" +WARN_LOGFILE = +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- +INPUT = @CMAKE_SOURCE_DIR@ +FILE_PATTERNS = *.cpp \ + *.h \ + NEWS \ + README +RECURSIVE = YES +EXCLUDE = +EXCLUDE_SYMLINKS = NO +EXCLUDE_PATTERNS = +EXAMPLE_PATH = +EXAMPLE_PATTERNS = * +EXAMPLE_RECURSIVE = NO +IMAGE_PATH = +INPUT_FILTER = +FILTER_PATTERNS = +FILTER_SOURCE_FILES = NO +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- +SOURCE_BROWSER = YES +INLINE_SOURCES = NO +STRIP_CODE_COMMENTS = YES +REFERENCED_BY_RELATION = YES +REFERENCES_RELATION = YES +REFERENCES_LINK_SOURCE = YES +USE_HTAGS = NO +VERBATIM_HEADERS = YES +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- +ALPHABETICAL_INDEX = YES +COLS_IN_ALPHA_INDEX = 3 +IGNORE_PREFIX = peo +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- +GENERATE_HTML = YES +HTML_OUTPUT = html +HTML_FILE_EXTENSION = .html +HTML_HEADER = +HTML_FOOTER = +HTML_STYLESHEET = +HTML_ALIGN_MEMBERS = YES +GENERATE_HTMLHELP = NO +CHM_FILE = +HHC_LOCATION = +GENERATE_CHI = NO +BINARY_TOC = NO +TOC_EXPAND = NO +DISABLE_INDEX = NO +ENUM_VALUES_PER_LINE = 4 +GENERATE_TREEVIEW = YES +TREEVIEW_WIDTH = 250 +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- +GENERATE_LATEX = YES +LATEX_OUTPUT = latex +LATEX_CMD_NAME = latex +MAKEINDEX_CMD_NAME = makeindex +COMPACT_LATEX = NO +PAPER_TYPE = a4wide +EXTRA_PACKAGES = +LATEX_HEADER = +PDF_HYPERLINKS = YES +USE_PDFLATEX = YES +LATEX_BATCHMODE = NO +LATEX_HIDE_INDICES = NO +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- +GENERATE_RTF = NO +RTF_OUTPUT = rtf +COMPACT_RTF = NO +RTF_HYPERLINKS = NO +RTF_STYLESHEET_FILE = +RTF_EXTENSIONS_FILE = +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- +GENERATE_MAN = YES +MAN_OUTPUT = man +MAN_EXTENSION = .3 +MAN_LINKS = NO +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- +GENERATE_XML = NO +XML_OUTPUT = xml +XML_SCHEMA = +XML_DTD = +XML_PROGRAMLISTING = YES +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- +GENERATE_AUTOGEN_DEF = NO +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- +GENERATE_PERLMOD = NO +PERLMOD_LATEX = NO +PERLMOD_PRETTY = YES +PERLMOD_MAKEVAR_PREFIX = +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- +ENABLE_PREPROCESSING = YES +MACRO_EXPANSION = NO +EXPAND_ONLY_PREDEF = NO +SEARCH_INCLUDES = YES +INCLUDE_PATH = +INCLUDE_FILE_PATTERNS = +PREDEFINED = +EXPAND_AS_DEFINED = +SKIP_FUNCTION_MACROS = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- +TAGFILES = @EO_BIN_DIR@/doc/eo.doxytag=http://eodev.sourceforge.net/eo/doc/html \ + @MO_BIN_DIR@/doc/mo.doxytag=@MO_BIN_DIR@/doc/html +GENERATE_TAGFILE = @CMAKE_BINARY_DIR@/doc/peo.doxytag +ALLEXTERNALS = NO +EXTERNAL_GROUPS = YES +PERL_PATH = /usr/bin/perl +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- +CLASS_DIAGRAMS = YES +HIDE_UNDOC_RELATIONS = YES +HAVE_DOT = NO +CLASS_GRAPH = YES +COLLABORATION_GRAPH = YES +GROUP_GRAPHS = YES +UML_LOOK = NO +TEMPLATE_RELATIONS = NO +INCLUDE_GRAPH = YES +INCLUDED_BY_GRAPH = YES +CALL_GRAPH = NO +CALLER_GRAPH = NO +GRAPHICAL_HIERARCHY = YES +DIRECTORY_GRAPH = YES +DOT_IMAGE_FORMAT = png +DOT_PATH = +DOTFILE_DIRS = +MAX_DOT_GRAPH_WIDTH = 1024 +MAX_DOT_GRAPH_HEIGHT = 1024 +MAX_DOT_GRAPH_DEPTH = 0 +DOT_TRANSPARENT = NO +DOT_MULTI_TARGETS = NO +GENERATE_LEGEND = YES +DOT_CLEANUP = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- +SEARCHENGINE = YES diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/peo-conf.cmake b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/peo-conf.cmake new file mode 100644 index 000000000..ba4c4c037 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/peo-conf.cmake @@ -0,0 +1,24 @@ + +###################################################################################### +###################################################################################### +### In this file, you can specify many CMake variables used to build paradisEO-PEO. +###################################################################################### +###################################################################################### + + +###################################################################################### +### 1) OPTIONNAL +###################################################################################### + +# SET (MYVAR MYVALUE) + +###################################################################################### + + +##################################################################################### +### 2) OPTIONNAL - Overwrite subdirs +###################################################################################### + +# SUBDIRS(doc tutorial) + +###################################################################################### diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/CMakeLists.txt b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/CMakeLists.txt new file mode 100644 index 000000000..67c2c2478 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/CMakeLists.txt @@ -0,0 +1,8 @@ + +###################################################################################### +### 1) Where must cmake go now ? +###################################################################################### + +SUBDIRS(core rmc) + +###################################################################################### diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/CMakeLists.txt b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/CMakeLists.txt new file mode 100644 index 000000000..fddf647d8 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/CMakeLists.txt @@ -0,0 +1,77 @@ + +###################################################################################### +### 1) Include the sources +###################################################################################### + +INCLUDE_DIRECTORIES(${EO_SRC_DIR}/src) + +###################################################################################### + + +###################################################################################### +### 2) Define your target(s): just the peo library here +###################################################################################### + +SET(CORE_LIB_OUTPUT_PATH ${ParadisEO-PEO_BINARY_DIR}/lib) +SET(LIBRARY_OUTPUT_PATH ${CORE_LIB_OUTPUT_PATH}) + +SET (CORE_SOURCES peo_init.cpp + peo_fin.cpp + peo_run.cpp + peo_param.cpp + peo_debug.cpp + thread.cpp + reac_thread.cpp + service.cpp + runner.cpp + communicable.cpp + topology.cpp + ring_topo.cpp) + + + +ADD_LIBRARY(peo STATIC ${CORE_SOURCES}) + +###################################################################################### + + +###################################################################################### +### 3) Optionnal: define your target(s)'s version: no effect for windows +###################################################################################### + +SET(CORE_VERSION ${GLOBAL_VERSION}) +SET_TARGET_PROPERTIES(peo PROPERTIES VERSION "${CORE_VERSION}") +###################################################################################### + + +###################################################################################### +### 4) Windows advanced config - especially for Microsoft Visual Studio 8 +###################################################################################### + + IF(CMAKE_CXX_COMPILER MATCHES cl) + IF(NOT WITH_SHARED_LIBS) + IF(CMAKE_GENERATOR STREQUAL "Visual Studio 8 2005") + SET(CMAKE_CXX_FLAGS "/nologo /W3 /Gy") + SET(CMAKE_CXX_FLAGS_DEBUG "/MTd /Z7 /Od") + SET(CMAKE_CXX_FLAGS_RELEASE "/MT /O2") + SET(CMAKE_CXX_FLAGS_MINSIZEREL "/MT /O2") + SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "/MTd /Z7 /Od") + SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SUBSYSTEM:CONSOLE") + + ENDIF(CMAKE_GENERATOR STREQUAL "Visual Studio 8 2005") + ENDIF(NOT WITH_SHARED_LIBS) + ENDIF(CMAKE_CXX_COMPILER MATCHES cl) +###################################################################################### + + +###################################################################################### +### 5) Where must cmake go now ? +###################################################################################### + +# nothing to be compiled in the subdirs + +###################################################################################### + + + + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/communicable.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/communicable.cpp new file mode 100644 index 000000000..6ca4fa80f --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/communicable.cpp @@ -0,0 +1,97 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include +#include +#include + +#include "communicable.h" + +static std :: vector key_to_comm (1); /* Vector of registered cooperators */ + +static std :: map comm_to_key; /* Map of registered cooperators */ + +unsigned Communicable :: num_comm = 0; + +Communicable :: Communicable () { + + comm_to_key [this] = key = ++ num_comm; + key_to_comm.push_back (this); + sem_init (& sem_lock, 0, 1); + sem_init (& sem_stop, 0, 0); +} + +Communicable :: ~ Communicable () { + +} + +COMM_ID Communicable :: getKey () { + + return key; +} + +Communicable * getCommunicable (COMM_ID __key) { + + assert (__key < key_to_comm.size ()); + return key_to_comm [__key]; +} + +COMM_ID getKey (const Communicable * __comm) { + + return comm_to_key [__comm]; +} + +void Communicable :: lock () { + + sem_wait (& sem_lock); +} + +void Communicable :: unlock () { + + sem_post (& sem_lock); +} + +void Communicable :: stop () { + sem_wait (& sem_stop); +} + +void Communicable :: resume () { + + sem_post (& sem_stop); +} + + + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/communicable.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/communicable.h new file mode 100644 index 000000000..11348707e --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/communicable.h @@ -0,0 +1,75 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef __communicable_h +#define __communicable_h + +#include + +typedef unsigned COMM_ID; + +class Communicable { + +public : + + Communicable (); + + virtual ~ Communicable (); + + COMM_ID getKey (); + + void lock (); /* It suspends the current process if the semaphore is locked */ + void unlock (); /* It unlocks the shared semaphore */ + + void stop (); /* It suspends the current process */ + void resume (); /* It resumes ___________ */ + +protected : + + COMM_ID key; + + sem_t sem_lock; + + sem_t sem_stop; + + static unsigned num_comm; +}; + +extern Communicable * getCommunicable (COMM_ID __key); + +//extern COMM_ID getKey (const Communicable * __comm); + +#endif diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/cooperative.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/cooperative.h new file mode 100644 index 000000000..573c06805 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/cooperative.h @@ -0,0 +1,69 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef __cooperative_h +#define __cooperative_h + +#include "communicable.h" +#include "runner.h" + +typedef unsigned COOP_ID; + +class Cooperative : public Communicable { + +public : + + Runner * getOwner (); + + void setOwner (Runner & __runner); + + virtual void pack () = 0; + + virtual void unpack () = 0; + + void send (Cooperative * __coop); + + virtual void notifySending (); + +private : + + Runner * owner; + +}; + +extern Cooperative * getCooperative (COOP_ID __key); + +#endif diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/eoPop_comm.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/eoPop_comm.h new file mode 100644 index 000000000..6071ae92a --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/eoPop_comm.h @@ -0,0 +1,60 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef __eoPop_comm_h +#define __eoPop_comm_h + +#include + +#include "messaging.h" + +template void pack (const eoPop & __pop) { + + pack ((unsigned) __pop.size ()); + for (unsigned i = 0; i < __pop.size (); i ++) + pack (__pop [i]); +} + +template void unpack (eoPop & __pop) { + + unsigned n; + + unpack (n); + __pop.resize (n); + for (unsigned i = 0; i < n; i ++) + unpack (__pop [i]); +} +#endif diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/eoVector_comm.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/eoVector_comm.h new file mode 100644 index 000000000..9921c3622 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/eoVector_comm.h @@ -0,0 +1,111 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar, Clive Canape +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef __eoVector_comm_h +#define __eoVector_comm_h + +#include + +#include "messaging.h" + +template void pack (const eoVector & __v) { + + + if ( !__v.invalid() ) + { + pack( (unsigned int) 1 ); + pack (__v.fitness ()) ; + } + else + pack( (unsigned int) 0 ); + unsigned len = __v.size (); + pack (len); + for (unsigned i = 0 ; i < len; i ++) + pack (__v [i]); +} + +template void unpack (eoVector & __v) { + + F fit; + unsigned int vfit; + unpack( vfit ); + if ( vfit ) + { + unpack (fit); + __v.fitness (fit); + } + else + __v.invalidate(); + unsigned len; + unpack (len); + __v.resize (len); + for (unsigned i = 0 ; i < len; i ++) + unpack (__v [i]); +} + +template void pack (const eoVectorParticle & __v) { + + pack (__v.fitness ()) ; + pack (__v.best()); + unsigned len = __v.size (); + pack (len); + for (unsigned i = 0 ; i < len; i ++) + pack (__v [i]); + for (unsigned i = 0 ; i < len; i ++) + pack (__v.bestPositions[i]); + for (unsigned i = 0 ; i < len; i ++) + pack (__v.velocities[i]); +} + +template void unpack (eoVectorParticle & __v) { + + F fit; + unpack(fit); + __v.fitness (fit); + unpack(fit); + __v.best(fit); + unsigned len; + unpack (len); + __v.resize (len); + for (unsigned i = 0 ; i < len; i ++) + unpack (__v [i]); + for (unsigned i = 0 ; i < len; i ++) + unpack (__v.bestPositions[i]); + for (unsigned i = 0 ; i < len; i ++) + unpack (__v.velocities[i]); +} + +#endif diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/messaging.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/messaging.h new file mode 100644 index 000000000..4b9d0b3d9 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/messaging.h @@ -0,0 +1,134 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef __mess_h +#define __mess_h + +#include + +/* Char */ +extern void pack (const char & __c); + +/* Float */ +extern void pack (const float & __f, int __nitem = 1); + +/* Double */ +extern void pack (const double & __d, int __nitem = 1); + +/* Integer */ +extern void pack (const int & __i, int __nitem = 1); + +/* Unsigned int. */ +extern void pack (const unsigned int & __ui, int __nitem = 1); + +/* Short int. */ +extern void pack (const short & __sh, int __nitem = 1); + +/* Unsigned short */ +extern void pack (const unsigned short & __ush, int __nitem = 1); + +/* Long */ +extern void pack (const long & __l, int __nitem = 1); + +/* Unsigned long */ +extern void pack (const unsigned long & __ul, int __nitem = 1); + +/* String */ +extern void pack (const char * __str); + +/* Pointer */ +template void pack (const T * __ptr) { + + pack ((unsigned long) __ptr); +} + +/* Pair */ +template void pack (const std :: pair & __pair) { + + pack (__pair.first); + pack (__pair.second); +} + + +// + +/* Char */ +extern void unpack (char & __c); + +/* Float */ +extern void unpack (float & __f, int __nitem = 1); + +/* Double */ +extern void unpack (double & __d, int __nitem = 1); + +/* Integer */ +extern void unpack (int & __i, int __nitem = 1); + +/* Unsigned int. */ +extern void unpack (unsigned int & __ui, int __nitem = 1); + +/* Short int. */ +extern void unpack (short & __sh, int __nitem = 1); + +/* Unsigned short */ +extern void unpack (unsigned short & __ush, int __nitem = 1); + +/* Long */ +extern void unpack (long & __l, int __nitem = 1); + +/* Unsigned long */ +extern void unpack (unsigned long & __ul, int __nitem = 1); + +/* String */ +extern void unpack (char * __str); + +/* Pointer */ +template void unpack (T * & __ptr) { + + unsigned long p; + unpack (p); + __ptr = (T *) p; +} + +/* Pair */ +template void unpack (std :: pair & __pair) { + + unpack (__pair.first); + unpack (__pair.second); +} + + +#endif diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/peo_debug.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/peo_debug.cpp new file mode 100644 index 000000000..26db32ba3 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/peo_debug.cpp @@ -0,0 +1,105 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include "peo_debug.h" + +#include +#include +#include +#include +#include +#include +#include + +#include "peo_debug.h" + +#define MAX_BUFF_SIZE 1000 + +#define DEBUG_PATH "./log/" + +static bool debug = true; + +static char host [MAX_BUFF_SIZE]; + +std :: vector files; + +void setDebugMode (bool __dbg) { + + debug = __dbg; + gethostname (host, MAX_BUFF_SIZE); +} + +extern int getNodeRank (); + +void initDebugging () { + + mkdir (DEBUG_PATH, S_IRWXU); + // files.push_back (stdout); + char buff [MAX_BUFF_SIZE]; + sprintf (buff, "%s/%d", DEBUG_PATH, getNodeRank ()); + files.push_back (fopen (buff, "w")); +} + +void endDebugging () { + + for (unsigned i = 0; i < files.size (); i ++) + if (files [i] != stdout) + fclose (files [i]); +} + +void printDebugMessage (const char * __mess) { + + if (debug) { + + char buff [MAX_BUFF_SIZE]; + time_t t = time (0); + + /* Date */ + sprintf (buff, "[%s][%s: ", host, ctime (& t)); + * strchr (buff, '\n') = ']'; + for (unsigned i = 0; i < files.size (); i ++) + fprintf (files [i], buff); + + /* Message */ + sprintf (buff, "%s", __mess); + + for (unsigned i = 0; i < files.size (); i ++) { + fputs (buff, files [i]); + fputs ("\n", files [i]); + fflush (files [i]); + } + } +} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/peo_debug.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/peo_debug.h new file mode 100644 index 000000000..d00b5e9c7 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/peo_debug.h @@ -0,0 +1,50 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef __peo_debug_h +#define __peo_debug_h + +extern void initDebugging (); + +extern void endDebugging (); + +extern void setDebugMode (bool __dbg = true); /* (Des)activating the Debugging mode */ + +extern void printDebugMessage (const char * __mess); /* Print a new message both on the + standard output and a target + text-file in a subdirectory) */ + +#endif diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/peo_fin.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/peo_fin.cpp new file mode 100644 index 000000000..c6b41cceb --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/peo_fin.cpp @@ -0,0 +1,52 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include "peo_fin.h" +#include "peo_debug.h" +#include "runner.h" +#include "rmc.h" + +void peo :: finalize () { + + printDebugMessage ("waiting for the termination of all threads"); + + joinRunners (); + + finalizeRMC (); + + printDebugMessage ("this is the end"); + endDebugging (); +} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/peo_fin.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/peo_fin.h new file mode 100644 index 000000000..9cdaf2bf8 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/peo_fin.h @@ -0,0 +1,45 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef __peo_finalize_h +#define __peo_finalize_h + +namespace peo { + + extern void finalize (); +} + +#endif diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/peo_init.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/peo_init.cpp new file mode 100644 index 000000000..301090a34 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/peo_init.cpp @@ -0,0 +1,65 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include + +#include "peo_init.h" +#include "peo_param.h" +#include "peo_debug.h" +#include "rmc.h" + +namespace peo { + + int * argc; + + char * * * argv; + + void init (int & __argc, char * * & __argv) { + + argc = & __argc; + + argv = & __argv; + + /* Initializing the the Resource Management and Communication */ + initRMC (__argc, __argv); + + /* Loading the common parameters */ + loadParameters (__argc, __argv); + + /* */ + initDebugging (); + } +} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/peo_init.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/peo_init.h new file mode 100644 index 000000000..b578cb501 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/peo_init.h @@ -0,0 +1,49 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef __peo_init_h +#define __peo_init_h + +namespace peo { + + extern int * argc; + + extern char * * * argv; + + extern void init (int & __argc, char * * & __argv); +} + +#endif diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/peo_param.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/peo_param.cpp new file mode 100644 index 000000000..a6023430e --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/peo_param.cpp @@ -0,0 +1,53 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include + +#include "peo_param.h" +#include "peo_debug.h" + + + +void peo :: loadParameters (int & __argc, char * * & __argv) { + + eoParser parser (__argc, __argv); + + /* Debug */ + eoValueParam debug_param ("false", "debug", "?"); + parser.processParam (debug_param); + if (debug_param.value () == "true") + setDebugMode (); +} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/peo_param.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/peo_param.h new file mode 100644 index 000000000..fd00bfc28 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/peo_param.h @@ -0,0 +1,45 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef __peo_param_h +#define __peo_param_h + +namespace peo { + + extern void loadParameters (int & __argc, char * * & __argv); +} + +#endif diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/peo_run.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/peo_run.cpp new file mode 100644 index 000000000..b379146af --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/peo_run.cpp @@ -0,0 +1,47 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include "peo_init.h" +#include "peo_run.h" +#include "rmc.h" +#include "runner.h" + +void peo :: run () { + + startRunners (); + + runRMC (); +} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/peo_run.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/peo_run.h new file mode 100644 index 000000000..e4bcc55c6 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/peo_run.h @@ -0,0 +1,45 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef __peo_run_h +#define __peo_run_h + +namespace peo { + + extern void run (); +} + +#endif diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/reac_thread.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/reac_thread.cpp new file mode 100644 index 000000000..d771a8ad4 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/reac_thread.cpp @@ -0,0 +1,64 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include "reac_thread.h" + +static bool the_end = false; + +static std :: vector reac_threads; + +ReactiveThread :: ReactiveThread () { + + reac_threads.push_back (this); + sem_init (& sem, 0, 0); +} + +void ReactiveThread :: sleep () { + + sem_wait (& sem); +} + +void ReactiveThread :: wakeUp () { + + sem_post (& sem); +} + +void stopReactiveThreads () { + + the_end = true; + for (unsigned i = 0; i < reac_threads.size (); i ++) + reac_threads [i] -> wakeUp (); +} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/reac_thread.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/reac_thread.h new file mode 100644 index 000000000..b3cd71912 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/reac_thread.h @@ -0,0 +1,63 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef REAC_THREAD_H_ +#define REAC_THREAD_H_ + +#include + +#include "thread.h" + +class ReactiveThread : public Thread { + +public: + + /* Ctor */ + ReactiveThread (); + + void sleep (); + + void wakeUp (); + +private: + + sem_t sem; + +}; + +extern void stopReactiveThreads (); + +#endif /*THREAD_H_*/ diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/ring_topo.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/ring_topo.cpp new file mode 100644 index 000000000..5dbf9933d --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/ring_topo.cpp @@ -0,0 +1,53 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include "ring_topo.h" + +void RingTopology :: setNeighbors (Cooperative * __mig, + std :: vector & __from, + std :: vector & __to) { + __from.clear () ; + __to.clear () ; + + int len = mig.size () ; + + for (int i = 0 ; i < len ; i ++) + if (mig [i] == __mig) { + __from.push_back (mig [(i - 1 + len) % len]) ; + __to.push_back (mig [(i + 1) % len]) ; + break; + } +} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/ring_topo.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/ring_topo.h new file mode 100644 index 000000000..40d7405c6 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/ring_topo.h @@ -0,0 +1,52 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef __ring_topo_h +#define __ring_topo_h + +#include "topology.h" + +class RingTopology : public Topology { + +public : + + void setNeighbors (Cooperative * __mig, + std :: vector & __from, + std :: vector & __to); + +}; + +#endif diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/rmc.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/rmc.h new file mode 100644 index 000000000..7efb1bac3 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/rmc.h @@ -0,0 +1,46 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef __rmc_h +#define __rmc_h + +extern void initRMC (int & __argc, char * * & __argv); + +extern void runRMC (); /* Resource Management and Communication */ + +extern void finalizeRMC (); + +#endif diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/runner.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/runner.cpp new file mode 100644 index 000000000..5df0bde41 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/runner.cpp @@ -0,0 +1,132 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include + +#include "runner.h" +#include "reac_thread.h" +#include "peo_debug.h" +#include "messaging.h" + +static unsigned num_act = 0; /* Number of active runners */ + +static std :: vector ll_threads; /* Low-level runner threads */ + +static std :: vector the_runners; + +static unsigned num_runners = 0; + +Runner :: Runner () { + + id = ++ num_runners; + the_runners.push_back (this); + sem_init (& sem_start, 0, 0); + num_act ++; +} + +extern int getNodeRank (); + +extern int getNumberOfNodes (); + +void unpackTerminationOfRunner () { + + RUNNER_ID id; + unpack (id); + num_act --; + printDebugMessage ("I'm noticed of the termination of a runner"); + if (! num_act) { + printDebugMessage ("all the runners have terminated. Now stopping the reactive threads."); + stopReactiveThreads (); + } +} + +bool atLeastOneActiveRunner () { + + return num_act; +} + +RUNNER_ID Runner :: getID () { + + return id; +} + +void Runner :: start () { + + setActive (); + sem_post (& sem_start); + run (); + terminate (); +} + +void Runner :: notifySendingTermination () { + + /* + char b [1000]; + sprintf (b, "Il reste encore %d !!!!!!!!!!!!", n); + printDebugMessage (b); + */ + printDebugMessage ("je suis informe que tout le monde a recu ma terminaison"); + setPassive (); + +} + +void Runner :: waitStarting () { + + sem_wait (& sem_start); +} + +Runner * getRunner (RUNNER_ID __key) { + + return dynamic_cast (getCommunicable (__key)); +} + +void startRunners () { + + /* Runners */ + for (unsigned i = 0; i < the_runners.size (); i ++) + if (the_runners [i] -> isLocal ()) { + addThread (the_runners [i], ll_threads); + the_runners [i] -> waitStarting (); + } + printDebugMessage ("launched the parallel runners"); +} + + +void joinRunners () { + + + joinThreads (ll_threads); +} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/runner.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/runner.h new file mode 100644 index 000000000..0567d3b4f --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/runner.h @@ -0,0 +1,86 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef __runner_h +#define __runner_h + +#include + +#include "communicable.h" +#include "thread.h" + +typedef unsigned RUNNER_ID; + +class Runner : public Communicable, public Thread { + +public : + + Runner (); + + void start (); + + void waitStarting (); + + bool isLocal (); + + void terminate (); + + virtual void run () = 0; + + RUNNER_ID getID (); + + void packTermination (); + + void notifySendingTermination (); + +private : + + sem_t sem_start; + + unsigned id; +}; + +extern bool atLeastOneActiveRunner (); + +extern void unpackTerminationOfRunner (); + +extern Runner * getRunner (RUNNER_ID __key); + +extern void startRunners (); + +extern void joinRunners (); + +#endif diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/service.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/service.cpp new file mode 100644 index 000000000..c843aec10 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/service.cpp @@ -0,0 +1,86 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include "service.h" + +void Service :: setOwner (Thread & __owner) { + + owner = & __owner; +} + +Thread * Service :: getOwner () { + + return owner; +} + +Service * getService (SERVICE_ID __key) { + + return dynamic_cast (getCommunicable (__key)); +} + +void Service :: notifySendingData () { + +} +void Service :: notifySendingResourceRequest () { + + num_sent_rr --; + if (! num_sent_rr) + notifySendingAllResourceRequests (); +} + +void Service :: notifySendingAllResourceRequests () { + +} + +void Service :: packData () { + +} + +void Service :: unpackData () { + +} + +void Service :: execute () { + +} + +void Service :: packResult () { + +} + +void Service :: unpackResult () { + +} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/service.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/service.h new file mode 100644 index 000000000..67a0fef03 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/service.h @@ -0,0 +1,78 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef __service_h +#define __service_h + +#include "communicable.h" +#include "thread.h" + +typedef unsigned SERVICE_ID; + +class Service : public Communicable { + +public : + + void setOwner (Thread & __owner); + + Thread * getOwner (); + + void requestResourceRequest (unsigned __how_many = 1); + void packResourceRequest (); + + virtual void packData (); + virtual void unpackData (); + + virtual void execute (); + + virtual void packResult (); + virtual void unpackResult (); + + virtual void notifySendingData (); + virtual void notifySendingResourceRequest (); + virtual void notifySendingAllResourceRequests (); + +private : + + Thread * owner; /* Owner thread (i.e. 'uses' that service) */ + + unsigned num_sent_rr; /* Number of RR not really sent (i.e. still in the sending queue)*/ + +}; + +extern Service * getService (SERVICE_ID __key); + +#endif diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/thread.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/thread.cpp new file mode 100644 index 000000000..4ce4beae2 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/thread.cpp @@ -0,0 +1,109 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include + +#include "thread.h" + +static std :: vector threads; + +unsigned num_act = 0; + +Thread :: Thread () { + + threads.push_back (this); + act = false; +} + +Thread :: ~ Thread () { + + /* Nothing ! */ +} + +extern int getNodeRank (); + +void Thread :: setActive () { + + if (! act ) { + + act = true; + num_act ++; + // if (getNodeRank () == 1) + // printf ("On passe a %d\n", num_act); + } +} + +void Thread :: setPassive () { + + if (act) { + + act = false; + num_act --; + // if (getNodeRank () == 1) + // printf ("On passe a %d\n", num_act); + + } +} + +bool atLeastOneActiveThread () { + + return num_act; +} + +unsigned numberOfActiveThreads () { + + return num_act; +} + +static void * launch (void * __arg) { + + Thread * thr = (Thread *) __arg; + thr -> start (); + return 0; +} + +void addThread (Thread * __hl_thread, std :: vector & __ll_threads) { + + pthread_t * ll_thr = new pthread_t; + __ll_threads.push_back (ll_thr); + pthread_create (ll_thr, 0, launch, __hl_thread); +} + +void joinThreads (std :: vector & __threads) { + + for (unsigned i = 0; i < __threads.size (); i ++) + pthread_join (* __threads [i], 0); +} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/thread.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/thread.h new file mode 100644 index 000000000..0508d60d4 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/thread.h @@ -0,0 +1,76 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef THREAD_H_ +#define THREAD_H_ + +#include + +/* A high-level thread */ + +class Thread { + +public: + + /* Ctor */ + Thread (); + + /* Dtor */ + virtual ~ Thread (); + + /* Go ! */ + virtual void start () = 0; + + void setActive ();/* It means the current process is going to send messages soon */ + void setPassive ();/* The current process is not going to perform send operations + (but it may receive messages) */ + +private : + + bool act; +}; + +extern void addThread (Thread * __hl_thread, std :: vector & __ll_threads); + +extern void joinThreads (std :: vector & __ll_threads); + +extern bool atLeastOneActiveThread (); /* It returns 'true' iff at least one process is going + to send messages */ + +extern unsigned numberOfActiveThreads (); + + +#endif /*THREAD_H_*/ diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/topology.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/topology.cpp new file mode 100644 index 000000000..4a685b406 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/topology.cpp @@ -0,0 +1,48 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include "topology.h" + +Topology :: ~ Topology () { + + /* Nothing ! */ +} + +void Topology :: add (Cooperative & __mig) { + + mig.push_back (& __mig) ; +} + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/topology.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/topology.h new file mode 100644 index 000000000..1addbf842 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/core/topology.h @@ -0,0 +1,61 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef __topology_h +#define __topology_h + +#include + +#include "cooperative.h" + +class Topology { + +public: + + virtual ~Topology (); + + void add (Cooperative & __mig); + + virtual void setNeighbors (Cooperative * __mig, + std :: vector & __from, + std :: vector & __to) = 0; + +protected: + + std :: vector mig ; +}; + +#endif diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peo b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peo new file mode 100644 index 000000000..e55873115 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peo @@ -0,0 +1,42 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef __peo_ +#define __peo_ + +#include "peo.h" + +#endif diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peo.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peo.h new file mode 100644 index 000000000..15dee65f4 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peo.h @@ -0,0 +1,351 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef __peo_h_ +#define __peo_h_ + +#include +#include + + +//! \mainpage The ParadisEO-PEO Framework +//! +//! \section intro Introduction +//! +//! ParadisEO is a white-box object-oriented framework dedicated to the reusable design +//! of parallel and distributed metaheuristics (PDM). ParadisEO provides a broad range of features including evolutionary +//! algorithms (EA), local searches (LS), the most common parallel and distributed models and hybridization +//! mechanisms, etc. This high content and utility encourages its use at European level. ParadisEO is based on a +//! clear conceptual separation of the solution methods from the problems they are intended to solve. This separation +//! confers to the user a maximum code and design reuse. Furthermore, the fine-grained nature of the classes +//! provided by the framework allow a higher flexibility compared to other frameworks. ParadisEO is one of the rare +//! frameworks that provide the most common parallel and distributed models. Their implementation is portable on +//! distributed-memory machines as well as on shared-memory multiprocessors, as it uses standard libraries such as +//! MPI, PVM and PThreads. The models can be exploited in a transparent way, one has just to instantiate their associated +//! provided classes. Their experimentation on the radio network design real-world application demonstrate their +//! efficiency. +//! +//! In practice, combinatorial optimization problems are often NP-hard, CPU time-consuming, +//! and evolve over time. Unlike exact methods, metaheuristics allow to tackle large-size problems +//! instances by delivering satisfactory solutions in a reasonable time. Metaheuristics are +//! general-purpose heuristics that split in two categories: evolutionary algorithms (EA) and local +//! search methods (LS). These two families have complementary characteristics: EA allow +//! a better exploration of the search space, while LS have the power to intensify the search in +//! promising regions. Their hybridization allows to deliver robust and better solutions +//! +//! Although serial metaheuristics have a polynomial temporal complexity, they remain +//! unsatisfactory for industrial problems. Parallel and distributed computing is a powerful way +//! to deal with the performance issue of these problems. Numerous parallel and distributed +//! metaheuristics (PDM) and their implementations have been proposed, and are available on +//! theWeb. They can be reused and adapted to his/her own problems. However, the user has to +//! deeply examine the code and rewrite its problem-specific sections. The task is tedious, errorprone, +//! takes along time and makes harder the produced code maintenance. A better way to +//! reuse the code of existing PDM is the reuse through libraries. These are often +//! more reliable as they are more tested and documented. They allow a better maintainability +//! and efficiency. However, libraries do not allow the reuse of design. +//! +//! \section parallel_metaheuristics Parallel and distributed metaheuristics +//! +//! \subsection parallel_distributed Parallel distributed evolutionary algorithms +//! +//! Evolutionary Algorithms (EA) are based on the iterative improvement of a +//! population of solutions. At each step, individuals are selected, paired and recombined in order +//! to generate new solutions that replace other ones, and so on. As the algorithm converges, +//! the population is mainly composed of individuals well adapted to the "environment", for +//! instance the problem. The main features that characterize EA are the way the population is +//! initialized, the selection strategy (deterministic/stochastic) by fostering "good" solutions, +//! the replacement strategy that discards individuals, and the continuation/stopping criterion +//! to decide whether the evolution should go on or not. +//! +//! Basically, three major parallel and distributed models for EA can been distinguished: +//! the island (a)synchronous cooperative model, the parallel evaluation of the +//! population, and the distributed evaluation of a single solution. +//!
    +//!
  • Island (a)synchronous cooperative model. Different EA are simultaneously deployed to +//! cooperate for computing better and robust solutions. They exchange in an asynchronous +//! way genetic stuff to diversify the search. The objective is to allow to delay the global +//! convergence, especially when theEAare heterogeneous regarding the variation operators. +//! The migration of individuals follows a policy defined by few parameters: the migration +//! decision criterion, the exchange topology, the number of emigrants, the emigrants selection +//! policy, and the replacement/integration policy.
  • +//! +//!
  • Parallel evaluation of the population. It is required as it is in general the most timeconsuming. +//! The parallel evaluation follows the centralized model. The farmer applies +//! the following operations: selection, transformation and replacement as they require a +//! global management of the population. At each generation, it distributes the set of new +//! solutions between differentworkers. These evaluate and return back the solutions and their +//! quality values. An efficient execution is often obtained particularly when the evaluation +//! of each solution is costly. The two main advantages of an asynchronous model over +//! the synchronous model are: (1) the fault tolerance of the asynchronous model; (2) the +//! robustness in case the fitness computation can take very different computation times (e.g. +//! for nonlinear numerical optimization). Whereas some time-out detection can be used to +//! address the former issue, the latter one can be partially overcome if the grain is set to very +//! small values, as individuals will be sent out for evaluations upon request of the workers.
  • +//! +//!
  • Distributed evaluation of a single solution. The quality of each solution is evaluated in +//! a parallel centralized way. That model is particularly interesting when the evaluation +//! function can be itself parallelized as it is CPU time-consuming and/or IO intensive. In +//! that case, the function can be viewed as an aggregation of a certain number of partial +//! functions. The partial functions could also be identical if for example the problem to deal +//! with is a data mining one. The evaluation is thus data parallel and the accesses to data +//! base are performed in parallel. Furthermore, a reduction operation is performed on the +//! results returned by the partial functions. As a summary, for this model the user has to +//! indicate a set of partial functions and an aggregation operator of these.
  • +//!
+//! +//! \subsection parallel_ls Parallel distributed local searches +//! +//! \subsubsection local_searches Local searches +//! +//! All metaheuristics dedicated to the improvement of a single solution +//! are based on the concept of neighborhood. They start from a solution randomly generated or +//! obtained from another optimization algorithm, and update it, step by step, by replacing the +//! current solution by one of its neighboring candidates. Some criterion have been identified to +//! differentiate such searches: the heuristic internal memory, the choice of the initial solution, +//! the candidate solutions generator, and the selection strategy of candidate moves. Three main +//! algorithms of local search stand out: Hill Climbing (HC), Simulated +//! Annealing (SA) and Tabu Search (TS). +//! +//! \subsubsection parallel_local_searches Parallel local searches +//! +//! Two parallel distributed models are commonly used in the literature: the parallel distributed +//! exploration of neighboring candidate solutions model, and the multi-start model. +//!
    +//!
  • Parallel exploration of neighboring candidates. It is a low-level Farmer-Worker model +//! that does not alter the behavior of the heuristic. A sequential search computes the same +//! results slower.At the beginning of each iteration, the farmer duplicates the current solution +//! between distributed nodes. Each one manages some candidates and the results are returned to the farmer. +//! The model is efficient if the evaluation of a each solution is time-consuming and/or there are a great +//! deal of candidate neighbors to evaluate. This is obviously not applicable to SA since only one candidate +//! is evaluated at each iteration. Likewise, the efficiency of the model for HC is not always guaranteed as +//! the number of neighboring solutions to process before finding one that improves the current objective function may +//! be highly variable.
  • +//! +//!
  • Multi-start model. It consists in simultaneously launching several local searches. They +//! may be heterogeneous, but no information is exchanged between them. The resultswould +//! be identical as if the algorithms were sequentially run.Very often deterministic algorithms +//! differ by the supplied initial solution and/or some other parameters. This trivial model is +//! convenient for low-speed networks of workstations.
  • +//!
+//! +//! \section hybridization Hybridization +//! +//! Recently, hybrid metaheuristics have gained a considerable interest. For many +//! practical or academic optimization problems, the best found solutions are obtained by +//! hybrid algorithms. Combinations of different metaheuristics have provided very powerful +//! search methods. Two levels and two modes +//! of hybridization have been distinguished: Low and High levels, and Relay and Cooperative modes. +//! The low-level hybridization addresses the functional composition of a single optimization +//! method. A function of a given metaheuristic is replaced by another metaheuristic. On the +//! contrary, for high-level hybrid algorithms the different metaheuristics are self-containing, +//! meaning no direct relationship to their internal working is considered. On the other hand, +//! relay hybridization means a set of metaheuristics is applied in a pipeline way. The output +//! of a metaheuristic (except the last) is the input of the following one (except the first). +//! Conversely, co-evolutionist hybridization is a cooperative optimization model. Each metaheuristic +//! performs a search in a solution space, and exchange solutions with others. +//! +//! \section paradiseo_goals Paradiseo goals and architecture +//! +//! The "EO" part of ParadisEO means Evolving Objects. EO is a C++ LGPL open source +//! framework and includes a paradigm-free Evolutionary Computation library (EOlib) +//! dedicated to the flexible design of EA through evolving objects superseding the most common +//! dialects (Genetic Algorithms, Evolution Strategies, Evolutionary Programming and +//! Genetic Programming). Furthermore, EO integrates several services including visualization +//! facilities, on-line definition of parameters, application check-pointing, etc. ParadisEO is an +//! extended version of the EO framework. The extensions include local search methods, hybridization +//! mechanisms, parallelism and distribution mechanisms, and other features that +//! are not addressed in this paper such as multi-objective optimization and grid computing. In +//! the next sections, we present the motivations and goals of ParadisEO, its architecture and +//! some of its main implementation details and issues. +//! +//! \subsection motivation Motivations and goals +//! +//! A framework is normally intended to be exploited by as many users as possible. Therefore, +//! its exploitation could be successful only if some important user criteria are satisfied. The +//! following criteria are the major of them and constitute the main objectives of the ParadisEO +//! framework: +//! +//!
    +//!
  • Maximum design and code reuse. The framework must provide for the user a whole +//! architecture design of his/her solution method. Moreover, the programmer may redo as +//! little code as possible. This objective requires a clear and maximal conceptual separation +//! between the solution methods and the problems to be solved, and thus a deep domain +//! analysis. The user might therefore develop only the minimal problem-specific code.
  • +//! +//!
  • Flexibility and adaptability. It must be possible for the user to easily add new features/ +//! metaheuristics or change existing ones without implicating other components. Furthermore, +//! as in practice existing problems evolve and new others arise these have to be +//! tackled by specializing/adapting the framework components.
  • +//! +//!
  • Utility. The framework must allow the user to cover a broad range of metaheuristics, +//! problems, parallel distributed models, hybridization mechanisms, etc.
  • +//! +//!
  • Transparent and easy access to performance and robustness. As the optimization applications +//! are often time-consuming the performance issue is crucial. Parallelism and +//! distribution are two important ways to achieve high performance execution. In order to +//! facilitate its use it is implemented so that the user can deploy his/her parallel algorithms in +//! a transparent manner. Moreover, the execution of the algorithms must be robust to guarantee +//! the reliability and the quality of the results. The hybridization mechanism allows +//! to obtain robust and better solutions.
  • +//! +//!
  • Portability. In order to satisfy a large number of users the framework must support +//! different material architectures and their associated operating systems.
  • +//!
+//! +//! \subsection architecture ParadisEO architecture +//! +//! The architecture of ParadisEO is multi-layer and modular allowing to achieve the objectives +//! quoted above. This allows particularly a high flexibility and adaptability, an +//! easier hybridization, and more code and design reuse. The architecture has three layers +//! identifying three major categories of classes: Solvers, Runners and Helpers. +//!
    +//!
  • Helpers. Helpers are low-level classes that perform specific actions related to the evolution +//! or search process. They are split in two categories: Evolutionary helpers (EH) +//! and Local search helpers (LSH). EH include mainly the transformation, selection and +//! replacement operations, the evaluation function and the stopping criterion. LSH can be +//! generic such as the neighborhood explorer class, or specific to the local search metaheuristic +//! like the tabu list manager class in the Tabu Search solution method. On the +//! other hand, there are some special helpers dedicated to the management of parallel and +//! distributed models 2 and 3, such as the communicators that embody the communication +//! services. +//! +//! Helpers cooperate between them and interact with the components of the upper layer +//! i.e. the runners. The runners invoke the helpers through function parameters. Indeed, +//! helpers have not their own data, but they work on the internal data of the runners.
  • +//! +//!
  • Runners. The Runners layer contains a set of classes that implement the metaheuristics +//! themselves. They perform the run of the metaheuristics from the initial state or +//! population to the final one. One can distinguish the Evolutionary runners (ER) such as +//! genetic algorithms, evolution strategies, etc., and Local search runners (LSR) like tabu +//! search, simulated annealing and hill climbing. Runners invoke the helpers to perform +//! specific actions on their data. For instance, an ER may ask the fitness function evaluation +//! helper to evaluate its population. An LSR asks the movement helper to perform +//! a given movement on the current state. Furthermore, runners can be serial or parallel +//! distributed.
  • +//! +//!
  • Solvers. Solvers are devoted to control the evolution process and/or the search. They +//! generate the initial state (solution or population) and define the strategy for combining +//! and sequencing different metaheuristics. Two types of solvers can be distinguished. +//! Single metaheuristic solvers (SMS) and Multiple metaheuristics solvers (MMS). SMSs +//! are dedicated to the execution of only one metaheuristic.MMS are more complex as they +//! control and sequence several metaheuristics that can be heterogeneous. Solvers interact with +//! the user by getting the input data and delivering the output (best solution, statistics, +//! etc).
  • +//!
+//! +//! According to the generality of their embedded features, the classes of the architecture split +//! in two major categories: Provided classes and Required classes. Provided classes embody +//! the factored out part of the metaheuristics. They are generic, implemented in the framework, +//! and ensure the control at run time. Required classes are those that must be supplied by the +//! user. They encapsulate the problem-specific aspects of the application. These classes are +//! fixed but not implemented in ParadisEO. The programmer has the burden to develop them +//! using the OO specialization mechanism. +//! +//! \section tutorials ParadisEO-PEO Tutorials +//! +//! The basisc of the ParadisEO framework philosophy are exposed in a few simple tutorials: +//! +//! All the presented examples have as case study the traveling salesman problem (TSP). Different operators and auxiliary objects were designed, +//! standing as a common shared source code base. While not being +//! part of the ParadisEO-PEO framework, it may represent a startpoint for a better understanding of the presented tutorials. +//! +//! \section LICENCE +//! +//! +//!This software is governed by the CeCILL license under French law and +//!abiding by the rules of distribution of free software. You can use, +//!modify and/ or redistribute the software under the terms of the CeCILL +//!license as circulated by CEA, CNRS and INRIA at the following URL +//!"http://www.cecill.info". +//! +//!As a counterpart to the access to the source code and rights to copy, +//!modify and redistribute granted by the license, users are provided only +//!with a limited warranty and the software's author, the holder of the +//!economic rights, and the successive licensors have only limited liability. +//! +//!In this respect, the user's attention is drawn to the risks associated +//!with loading, using, modifying and/or developing or reproducing the +//!software by the user in light of its specific status of free software, +//!that may mean that it is complicated to manipulate, and that also +//!therefore means that it is reserved for developers and experienced +//!professionals having in-depth computer knowledge. Users are therefore +//!encouraged to load and test the software's suitability as regards their +//!requirements in conditions enabling the security of their systems and/or +//!data to be ensured and, more generally, to use and operate it in the +//!same conditions as regards security. +//!The fact that you are presently reading this means that you have had +//!knowledge of the CeCILL license and that you accept its terms. +//! +//!ParadisEO WebSite : http://paradiseo.gforge.inria.fr +//!Contact: paradiseo-help@lists.gforge.inria.fr +//! + +#include "core/peo_init.h" +#include "core/peo_run.h" +#include "core/peo_fin.h" + +#include "core/eoVector_comm.h" + +#include "peoEA.h" + +/* Parallel steps of the E.A. */ +#include "peoSeqTransform.h" +#include "peoParaSGATransform.h" +#include "peoSeqPopEval.h" +#include "peoEvalFunc.h" +#include "peoParaPopEval.h" + +/* Cooperative island model */ +#include "core/ring_topo.h" +#include "peoAsyncIslandMig.h" +#include "peoSyncIslandMig.h" + +/* Synchronous multi-start model */ +#include "peoSyncMultiStart.h" + +/* Parallel PSO */ +#include "peoInitializer.h" +#include "peoPSO.h" +#include "peoEvalFuncPSO.h" +#include "peoPSOSelect.h" +#include "peoPSOReplacement.h" +#include "peoPSOVelocity.h" + +#endif diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoAggEvalFunc.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoAggEvalFunc.h new file mode 100644 index 000000000..8727112d3 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoAggEvalFunc.h @@ -0,0 +1,58 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef __peoAggEvalFunc_h +#define __peoAggEvalFunc_h + +#include + +//! Interface class for creating an aggregate evaluation function. + +//! The peoAggEvalFunc class offers only the interface for creating aggregate evaluation functions - there +//! are no direct internal functions provided. The class inherits public eoBF< EOT&, const typename EOT :: Fitness&, void > +//! thus requiring, for the derived classes, the creation of a function having the following signature: +//! +//! +//! +//!
void operator()( EOT& __eot, const typename EOT :: Fitness& __partial_fittness );    
+//! +//! The aggregation object is called in an iterative manner for each of the results obtained by applying partial evaluation functions. +template< class EOT > class peoAggEvalFunc : public eoBF< EOT&, const typename EOT :: Fitness&, void > { + +}; + + +#endif diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoAsyncIslandMig.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoAsyncIslandMig.h new file mode 100644 index 000000000..a2dc1140e --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoAsyncIslandMig.h @@ -0,0 +1,286 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef __peoAsyncIslandMig_h +#define __peoAsyncIslandMig_h + + +#include + +#include + +#include +#include +#include +#include + +#include "core/topology.h" +#include "core/cooperative.h" +#include "core/eoPop_comm.h" +#include "core/peo_debug.h" + + +//! Class providing the basis for the asynchronous island migration model. + +//! The peoAsyncIslandMig class offers the elementary basis for implementating an +//! asynchronous island migration model - requires the specification of several basic +//! parameters, i.e. continuation criterion, selection and replacement strategies, +//! a topological model and the source and destination population for the migrating individuals. +//! As opposed to the synchronous migration model, in the asynchronous migration approach, there is +//! no synchronization step between islands after performing the emigration phase. +//! +//! The migration operator is called at the end of each generation of an evolutionary algorithms +//! as a checkpoint object - the following code exposes the structure of a classic evolutionary algorithm: +//! +//! +//! +//! +//! +//! +//! +//! +//!
do {    
         select( population, offsprings );   // select the offsprings from the current population
         transform( offsprings );   // crossover and mutation operators are applied on the selected offsprings
         evaluate( offsprings );   // evaluation step of the resulting offsprings
         replace( population, offsprings );   // replace the individuals in the current population whith individuals from the offspring population, according to a specified replacement strategy
} while ( eaCheckpointContinue( population ) );   // checkpoint operators are applied on the current population, including the migration operator, if any specified
+//! +//! Constructing an asynchronous island migration model requires having defined (1) a topological migration model, +//! (2) the control parameters of the migration process, (3) a checkpoint object associated with an evolutionary algorithm, +//! and (4) an owner object must be set. The owner object must be derived from the Runner class (for example +//! a peoEA object represents a possible owner). +//! A simple example is offered bellow: +//! +//!
    +//!
  1. topological model to be followed when performing migrations:
    +//!
    +//! +//! +//!
    RingTopology migTopology;   // a simple ring topological model - each island communicates with two other islands
    +//!
  2. +//! +//!
  3. the continuation criterion, selection and replacement strategy etc. are defined:
    +//!
    +//! +//! +//! +//! +//! +//! +//! +//! +//! +//! +//!
    eoPop< EOT > population( POP_SIZE, popInitializer );   // population of individuals to be used for the evolutionary algorithm
       
    eoPeriodicContinue< EOT > migCont( MIG_FREQ );   // migrations occur periodically at MIG_FREQ iterations
    eoRandomSelect< EOT > migSelectStrategy;   // selection strategy - in this case a random selection is applied
    eoSelectNumber< EOT > migSelect( migSelectStrategy, MIG_SIZE );   // number of individuals to be selected using the specified strategy
    eoPlusReplacement< EOT > migReplace;   // immigration strategy - the worse individuals in the destination population are replaced by the immigrant individuals
       
    peoAsyncIslandMig< EOT > asyncMigration( +//!
             migCont, migSelect, migReplace, migTopology, +//!
             population, population +//!
    );  
    // asynchronous migration object - the emigrant individuals are selected from the same from population in which the immigrant individuals are being integrated
    +//!
  4. +//! +//!
  5. creation of a checkpoint object as part of the definition of an evolutionary algoritm (details of th EA not given as being out of scope):
    +//!
    +//! +//! +//! +//! +//! +//! +//! +//!
    ...    
    eoGenContinue< EOT > eaCont( NUM_GEN );   // the evolutionary algorithm will stop after NUM_GEN generations
    eoCheckPoint< EOT > eaCheckpointContinue( eaCont );   // number of individuals to be selected using the specified strategy
    ...    
    eaCheckpointContinue.add( asyncMigration );   // adding the migration operator as checkpoint element
    ...    
    +//!
  6. +//! +//!
  7. definition of an owner evolutionary algorithm (an object inheriting the Runner class):
    +//!
    +//! +//! +//! +//! +//!
    peoEA< EOT > eaAlg( eaCheckpointContinue, eaPopEval, eaSelect, eaTransform, eaReplace);   // evolutionary algorithm having as checkpoint the eaCheckpointContinue object defined above
    asyncMigration.setOwner( eaAlg );   // setting the evolutionary algorithm as owner of the migration object
    eaAlg( population );   // applying the evolutionary algorithm on a given population
    +//!
  8. +//!
+//! +//! The source and the destination population for the migration object were specified as being the same, in step no. 2, +//! as we are usually interested in selecting the emigrants and integrating the immigrant individuals from and in, respectively, one unique +//! population, iteratively evolved by an evolutionary algorithm. There is no restriction in having two distinct populations +//! as source and destination for the emigrant and immigrant individuals respectively. +//! +//! The above steps only create an asynchronous migration object associated to an evolutionary algorithm. The creation of several +//! islands requires the reiteration of the steps 2 through 4 for creating distinct algorithms, with distinct populations and +//! the associated distinctly parametrized migration objects. The interconnecting element is the underlying topology, defined at step 1 +//! (the same C++ migTopology object has to be passed as parameter for all the migration objects, in order to interconnect them). +template< class EOT > class peoAsyncIslandMig : public Cooperative, public eoUpdater { + +public: + + //! Constructor for the peoAsyncIslandMig class; the characteristics of the migration model are defined + //! through the specified parameters - out of the box objects provided in EO, etc., or custom, derived objects may be passed as parameters. + //! + //! @param eoContinue< EOT >& __cont - continuation criterion specifying whether the migration is performed or not; + //! @param eoSelect< EOT >& __select - selection strategy to be applied for constructing a list of emigrant individuals out of the source population; + //! @param eoReplacement< EOT >& __replace - replacement strategy used for integrating the immigrant individuals in the destination population; + //! @param Topology& __topology - topological model to be followed when performing migrations; + //! @param eoPop< EOT >& __source - source population from which the emigrant individuals are selected; + //! @param eoPop< EOT >& __destination - destination population in which the immigrant population are integrated. + peoAsyncIslandMig( + eoContinue< EOT >& __cont, + eoSelect< EOT >& __select, + eoReplacement< EOT >& __replace, + Topology& __topology, + eoPop< EOT >& __source, + eoPop< EOT >& __destination + ); + + //! Function operator to be called as checkpoint for performing the migration step. The emigrant individuals are selected + //! from the source population and sent to the next island (defined by the topology object) while the immigrant + //! individuals are integrated in the destination population. There is no need to explicitly call the function - the + //! wrapper checkpoint object (please refer to the above example) will perform the call when required. + void operator()(); + + //! Auxiliary function dealing with sending the emigrant individuals. There is no need to explicitly call the function. + void pack(); + //! Auxiliary function dealing with receiving immigrant individuals. There is no need to explicitly call the function. + void unpack(); + + +private: + + void emigrate(); + void immigrate(); + + +private: + + eoContinue< EOT >& cont; // continuator + eoSelect< EOT >& select; // the selection strategy + eoReplacement< EOT >& replace; // the replacement strategy + Topology& topology; // the neighboring topology + + // source and destination populations + eoPop< EOT >& source; + eoPop< EOT >& destination; + + // immigrants & emigrants in the queue + std :: queue< eoPop< EOT > > imm; + std :: queue< eoPop< EOT > > em; + + std :: queue< Cooperative* > coop_em; +}; + + +template< class EOT > peoAsyncIslandMig< EOT > :: peoAsyncIslandMig( + + eoContinue< EOT >& __cont, + eoSelect< EOT >& __select, + eoReplacement< EOT >& __replace, + Topology& __topology, + eoPop< EOT >& __source, + eoPop< EOT >& __destination + + ) : cont( __cont ), select( __select ), replace( __replace ), topology( __topology ), source( __source ), destination( __destination ) +{ + + __topology.add( *this ); +} + + +template< class EOT > void peoAsyncIslandMig< EOT > :: pack() +{ + + lock(); { + + :: pack( coop_em.front()->getKey() ); + :: pack( em.front() ); + coop_em.pop(); + em.pop(); + } + unlock(); +} + + +template< class EOT > void peoAsyncIslandMig< EOT > :: unpack() +{ + + lock(); { + + eoPop< EOT > mig; + :: unpack( mig ); + imm.push( mig ); + } + unlock(); +} + + +template< class EOT > void peoAsyncIslandMig< EOT > :: emigrate() +{ + + std :: vector< Cooperative* >in, out; + topology.setNeighbors( this, in, out ); + + for ( unsigned i = 0; i < out.size(); i++ ) { + + eoPop< EOT > mig; + select( source, mig ); + em.push( mig ); + coop_em.push( out[i] ); + send( out[i] ); + printDebugMessage( "sending some emigrants." ); + } +} + + +template< class EOT > void peoAsyncIslandMig< EOT > :: immigrate() +{ + + lock(); { + + while ( !imm.empty() ) { + + replace( destination, imm.front() ); + imm.pop(); + printDebugMessage( "receiving some immigrants." ); + } + } + unlock(); +} + + +template< class EOT > void peoAsyncIslandMig< EOT > :: operator()() { + + if ( !cont( source ) ) { + + emigrate(); // sending emigrants + immigrate(); // receiving immigrants + } +} + + +#endif diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoEA.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoEA.h new file mode 100644 index 000000000..f55996577 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoEA.h @@ -0,0 +1,174 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef __peoEA_h +#define __peoEA_h + +#include +#include +#include +#include +#include + +#include "peoPopEval.h" +#include "peoTransform.h" +#include "core/runner.h" +#include "core/peo_debug.h" + +//! Class providing an elementary ParadisEO evolutionary algorithm. + +//! The peoEA class offers an elementary evolutionary algorithm implementation. In addition, as compared +//! with the algorithms provided by the EO framework, the peoEA class has the underlying necessary structure +//! for including, for example, parallel evaluation and parallel transformation operators, migration operators +//! etc. Although there is no restriction on using the algorithms provided by the EO framework, the drawback resides +//! in the fact that the EO implementation is exclusively sequential and, in consequence, no parallelism is provided. +//! A simple example for constructing a peoEA object: +//! +//! +//! +//! +//! +//! +//! +//! +//! +//! +//! +//! +//! +//! +//! +//! +//! +//! +//! +//! +//! +//! +//!
...    
eoPop< EOT > population( POP_SIZE, popInitializer );   // creation of a population with POP_SIZE individuals - the popInitializer is a functor to be called for each individual
   
eoGenContinue< EOT > eaCont( NUM_GEN );   // number of generations for the evolutionary algorithm
eoCheckPoint< EOT > eaCheckpointContinue( eaCont );   // checkpoint incorporating the continuation criterion - startpoint for adding other checkpoint objects
   
peoSeqPopEval< EOT > eaPopEval( evalFunction );   // sequential evaluation functor wrapper - evalFunction represents the actual evaluation functor
   
eoRankingSelect< EOT > selectionStrategy;   // selection strategy for creating the offspring population - a simple ranking selection in this case
eoSelectNumber< EOT > eaSelect( selectionStrategy, POP_SIZE );   // the number of individuals to be selected for creating the offspring population
eoRankingSelect< EOT > selectionStrategy;   // selection strategy for creating the offspring population - a simple ranking selection in this case
   
eoSGATransform< EOT > transform( crossover, CROSS_RATE, mutation, MUT_RATE );   // transformation operator - crossover and mutation operators with their associated probabilities
peoSeqTransform< EOT > eaTransform( transform );   // ParadisEO specific sequential operator - a parallel version may be specified in the same manner
   
eoPlusReplacement< EOT > eaReplace;   // replacement strategy - for integrating the offspring resulting individuals in the initial population
   
peoEA< EOT > eaAlg( eaCheckpointContinue, eaPopEval, eaSelect, eaTransform, eaReplace );   // ParadisEO evolutionary algorithm integrating the above defined objects
eaAlg( population );   // specifying the initial population for the algorithm
...    
+template < class EOT > class peoEA : public Runner { + +public: + + //! Constructor for the evolutionary algorithm object - several basic parameters have to be specified, + //! allowing for different levels of parallelism. Depending on the requirements, a sequential or a parallel + //! evaluation operator may be specified or, in the same manner, a sequential or a parallel transformation + //! operator may be given as parameter. Out of the box objects may be provided, from the EO package, for example, + //! or custom defined ones may be specified, provided that they are derived from the correct base classes. + //! + //! @param eoContinue< EOT >& __cont - continuation criterion specifying whether the algorithm should continue or not; + //! @param peoPopEval< EOT >& __pop_eval - evaluation operator; it allows the specification of parallel evaluation operators, aggregate evaluation functions, etc.; + //! @param eoSelect< EOT >& __select - selection strategy to be applied for constructing a list of offspring individuals; + //! @param peoTransform< EOT >& __trans - transformation operator, i.e. crossover and mutation; allows for sequential or parallel transform; + //! @param eoReplacement< EOT >& __replace - replacement strategy for integrating the offspring individuals in the initial population; + peoEA( + eoContinue< EOT >& __cont, + peoPopEval< EOT >& __pop_eval, + eoSelect< EOT >& __select, + peoTransform< EOT >& __trans, + eoReplacement< EOT >& __replace + ); + + //! Evolutionary algorithm function - a side effect of the fact that the class is derived from the Runner class, + //! thus requiring the existence of a run function, the algorithm being executed on a distinct thread. + void run(); + + //! Function operator for specifying the population to be associated with the algorithm. + //! + //! @param eoPop< EOT >& __pop - initial population of the algorithm, to be iteratively evolved; + void operator()( eoPop< EOT >& __pop ); + +private: + + + eoContinue< EOT >& cont; + peoPopEval< EOT >& pop_eval; + eoSelect< EOT >& select; + peoTransform< EOT >& trans; + eoReplacement< EOT >& replace; + eoPop< EOT >* pop; +}; + + +template < class EOT > peoEA< EOT > :: peoEA( + + eoContinue< EOT >& __cont, + peoPopEval< EOT >& __pop_eval, + eoSelect< EOT >& __select, + peoTransform< EOT >& __trans, + eoReplacement< EOT >& __replace + + ) : cont( __cont ), pop_eval( __pop_eval ), select( __select ), trans( __trans ), replace( __replace ) +{ + + trans.setOwner( *this ); + pop_eval.setOwner( *this ); +} + + +template< class EOT > void peoEA< EOT > :: operator ()( eoPop< EOT >& __pop ) { + + pop = &__pop; +} + + +template< class EOT > void peoEA< EOT > :: run() { + + printDebugMessage( "performing the first evaluation of the population." ); + pop_eval( *pop ); + + do { + + eoPop< EOT > off; + + printDebugMessage( "performing the selection step." ); + select( *pop, off ); + trans( off ); + + printDebugMessage( "performing the evaluation of the population." ); + + pop_eval( off ); + + printDebugMessage( "performing the replacement of the population." ); + replace( *pop, off ); + + printDebugMessage( "deciding of the continuation." ); + + } while ( cont( *pop ) ); +} + + +#endif diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoEvalFunc.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoEvalFunc.h new file mode 100644 index 000000000..a5231d551 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoEvalFunc.h @@ -0,0 +1,60 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, INRIA, 2007 +* +* Clive Canape +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: clive.canape@inria.fr +* +*/ + +#ifndef PEOEVALFUNC_H +#define PEOEVALFUNC_H + +#ifdef _MSC_VER +template< class EOT, class FitT = EOT::Fitness, class FunctionArg = const EOT& > +#else +template< class EOT, class FitT = typename EOT::Fitness, class FunctionArg = const EOT& > +#endif +struct peoEvalFunc: public eoEvalFunc { + + peoEvalFunc( FitT (* _eval)( FunctionArg ) ) + : eoEvalFunc(), evalFunc( _eval ) {}; + + virtual void operator() ( EOT & _peo ) + { + _peo.fitness((*evalFunc)( _peo )); + }; + + private: + FitT (* evalFunc )( FunctionArg ); +}; + +#endif + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoEvalFuncPSO.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoEvalFuncPSO.h new file mode 100644 index 000000000..c7d17e30c --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoEvalFuncPSO.h @@ -0,0 +1,68 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, INRIA, 2007 +* +* Clive Canape +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: clive.canape@inria.fr +* +*/ + + +#ifndef PEOEVALFUNCPSO_H +#define PEOEVALFUNCPSO_H + +#include + +//! peoEvalFuncPSO: This class +//! takes an existing function pointer and converts it into a evaluation +//! function class. + +#ifdef _MSC_VER +template< class POT, class FitT = POT::Fitness, class FunctionArg = const POT& > +#else +template< class POT, class FitT = typename POT::Fitness, class FunctionArg = const POT& > +#endif +struct peoEvalFuncPSO: public eoEvalFunc { + + peoEvalFuncPSO( FitT (* _eval)( FunctionArg ) ) + : eoEvalFunc(), evalFunc( _eval ) {}; + + //!Applies the evaluation function to a PEO + virtual void operator() ( POT & _peo ) + { + _peo.fitness((*evalFunc)( _peo )); + }; + + private: + FitT (* evalFunc )( FunctionArg ); +}; + +#endif + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoInitializer.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoInitializer.h new file mode 100644 index 000000000..2f0ea133e --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoInitializer.h @@ -0,0 +1,98 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, INRIA, 2007 +* +* Clive Canape +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: clive.canape@inria.fr +* +*/ + +#ifndef _peoInitializer_H +#define _peoInitializer_H + +/** + Base (name) class for parallel initialization of algorithm PSO + + @see eoInitializerBase +*/ + +template class peoInitializer : public eoInitializerBase +{ + public: + + + //! Constructor + //! @param _proc Evaluation function + //! @param _initVelo Initialization of the velocity + //! @param _initBest Initialization of the best + //! @param _pop Population + peoInitializer( + peoPopEval< POT >& _proc, + eoVelocityInit < POT > &_initVelo, + eoParticleBestInit &_initBest, + eoPop < POT > &_pop + ) : proc(_proc), initVelo(_initVelo), initBest(_initBest) + { + pop = &_pop; + } + + //! Give the name of the class + //! @return The name of the class + virtual std::string className (void) const + { + return "peoInitializer"; + } + + //! void operator () + //! Parallel initialization of the population + virtual void operator()() + { + proc(*pop); + apply < POT > (initVelo, *pop); + apply < POT > (initBest, *pop); + } + + private : + + /* + @param proc First evaluation + @param initVelo Initialization of the velocity + @param initBest Initialization of the best + @param pop Population + */ + peoPopEval< POT >& proc; + eoVelocityInit < POT > & initVelo; + eoParticleBestInit & initBest; + eoPop * pop; +}; +#endif + + + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoNoAggEvalFunc.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoNoAggEvalFunc.h new file mode 100644 index 000000000..28d49db5f --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoNoAggEvalFunc.h @@ -0,0 +1,62 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef __peoNoAggEvalFunc_h +#define __peoNoAggEvalFunc_h + +#include "peoAggEvalFunc.h" + +//! Class providing a simple interface for associating a fitness value to a specified individual. + +//! The peoNoAggEvalFunc class does nothing more than an association between a fitness value and a specified individual. +//! The class is provided as a mean of declaring that no aggregation is required for the evaluation function - the fitness +//! value is explicitly specified. +template< class EOT > class peoNoAggEvalFunc : public peoAggEvalFunc< EOT > { + +public : + + //! Operator which sets as fitness the __fit value for the __sol individual + void operator()( EOT& __sol, const typename EOT :: Fitness& __fit ); +}; + + +template< class EOT > void peoNoAggEvalFunc< EOT > :: operator()( EOT& __sol, const typename EOT :: Fitness& __fit ) { + + __sol.fitness( __fit ); +} + + +#endif diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoPSO.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoPSO.h new file mode 100644 index 000000000..e18250ffc --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoPSO.h @@ -0,0 +1,125 @@ +/* +* +* (c) OPAC Team, October 2007 +* +* Clive Canape +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* Contact: clive.canape@inria.fr +*/ + +#ifndef __peoPSO_h +#define __peoPSO_h + +#include +#include +#include +#include +#include +#include +#include "peoPopEval.h" +#include "core/runner.h" +#include "core/peo_debug.h" + +//! Class providing an elementary ParadisEO evolutionary algorithm. + +//! The peoPSO class offers an elementary Particle Swarm Optimization implementation. In addition, as compared +//! with the algorithms provided by the EO framework, the peoPSO class has the underlying necessary structure +//! for including, for example, parallel evaluation, etc. + +template < class POT > class peoPSO : public Runner { + +public: + + + //! Constructor for the Particle Swarm Optimization + //! @param eoContinue< POT >& __cont - continuation criterion specifying whether the algorithm should continue or not; + //! @param peoPopEval< POT >& __pop_eval - evaluation operator; it allows the specification of parallel evaluation operators, aggregate evaluation functions, etc.; + //! @param eoVelocity< POT >& __velocity - velocity operator; + //! @param eoFlight< POT >& __flight - flight operator; + peoPSO( + eoInitializerBase & _Init, + eoContinue< POT >& __cont, + peoPopEval< POT >& __pop_eval, + eoVelocity < POT > &_velocity, + eoFlight < POT > &_flight); + + //! Particle Swarm Optimization function - a side effect of the fact that the class is derived from the Runner class + //! thus requiring the existence of a run function, the algorithm being executed on a distinct thread. + void run(); + + //! Function operator for specifying the population to be associated with the algorithm. + void operator()( eoPop< POT >& __pop ); + +private: + + eoInitializerBase & Init; + eoContinue< POT >& cont; + peoPopEval< POT >& pop_eval; + eoPop< POT >* pop; + eoVelocity < POT > &velocity; + eoFlight < POT > &flight; +}; + + +template < class POT > peoPSO< POT > :: peoPSO( + eoInitializerBase & _Init, + eoContinue< POT >& __cont, + peoPopEval< POT >& __pop_eval, + eoVelocity < POT > &__velocity, + eoFlight < POT > &__flight + ) : Init(_Init),cont( __cont ), pop_eval(__pop_eval ),velocity( __velocity),flight( __flight) +{ + pop_eval.setOwner( *this ); +} + + +template< class POT > void peoPSO< POT > :: operator ()( eoPop< POT >& __pop ) { + + pop = &__pop; +} + + +template< class POT > void peoPSO< POT > :: run() { + + printDebugMessage( "Performing the first evaluation of the population." ); + Init(); + velocity.getTopology().setup(*pop); + do { + printDebugMessage( "Performing the velocity evaluation." ); + velocity.apply ( *pop ); + printDebugMessage( "Performing the flight." ); + flight.apply ( *pop ); + printDebugMessage( "Performing the evaluation." ); + pop_eval(*pop); + velocity.updateNeighborhood( *pop ); + } while ( cont( *pop ) ); +} + + +#endif diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoPSOReplacement.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoPSOReplacement.h new file mode 100644 index 000000000..94ef1dafe --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoPSOReplacement.h @@ -0,0 +1,73 @@ +/* +* +* (c) OPAC Team, October 2007 +* +* Clive Canape +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* Contact: clive.canape@inria.fr +*/ + +#ifndef _peoPSOReplacement_h +#define _peoPSOReplacement_h + + +//----------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include + +template +class peoPSOReplacement : public eoReplacement +{ + public: + peoPSOReplacement(){} + + void operator()(eoPop& _dest, eoPop& _source) + { + unsigned ind=0; + double best=_dest[0].best(); + for(unsigned j=1;j<_dest.size();j++) + if(_dest[j].best() < best) + { + ind=j; + best=_dest[j].best(); + } + if(_dest[ind].best() < _source[0].best()) + { + _dest[ind].best(_source[0].best()); + for(unsigned j=0;j<_dest[ind].size();j++) + _dest[ind].bestPositions[j]=_source[0].bestPositions[j]; + } + } +}; +#endif + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoPSOSelect.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoPSOSelect.h new file mode 100644 index 000000000..160d3d786 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoPSOSelect.h @@ -0,0 +1,60 @@ +/* +* +* (c) OPAC Team, October 2007 +* +* Clive Canape +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* Contact: clive.canape@inria.fr +*/ + +#ifndef peoPSOSelect_h +#define peoPSOSelect_h + +#include +#include + +template class peoPSOSelect: public eoSelectOne +{ + public: + + peoPSOSelect(eoTopology < POT > & _topology):topology(_topology){} + + typedef typename PO < POT >::Fitness Fitness; + + virtual const POT& operator()(const eoPop& _pop) + { + return topology.globalBest(_pop); + } + + private: + eoTopology < POT > & topology; +}; + +#endif + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoPSOVelocity.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoPSOVelocity.h new file mode 100644 index 000000000..235b2e393 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoPSOVelocity.h @@ -0,0 +1,80 @@ +/* +* +* (c) OPAC Team, October 2007 +* +* Clive Canape +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* Contact: clive.canape@inria.fr +*/ + +#ifndef _peoPSOVelocity_h +#define _peoPSOVelocity_h + + +//----------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include + +template +class peoPSOVelocity : public eoReplacement +{ + public: + + typedef typename POT::ParticleVelocityType VelocityType; + + peoPSOVelocity( const double & _c3, + eoVelocity < POT > &_velocity): + c3 (_c3), + velocity (_velocity){} + + void operator()(eoPop& _dest, eoPop& _source) + { + + VelocityType newVelocity,r3; + r3 = (VelocityType) rng.uniform (1) * c3; + for(unsigned i=0;i<_dest.size();i++) + for(unsigned j=0;j<_dest[i].size();j++) + { + newVelocity= _dest[i].velocities[j] + r3 * (_source[0].bestPositions[j] - _dest[i][j]); + _dest[i].velocities[j]=newVelocity; + } + + } + + protected: + const double & c3; + eoVelocity < POT > & velocity; +}; +#endif + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoParaPopEval.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoParaPopEval.h new file mode 100644 index 000000000..dade642c7 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoParaPopEval.h @@ -0,0 +1,241 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef __peoParaPopEval_h +#define __peoParaPopEval_h + +#include +#include + +#include "core/messaging.h" +#include "core/peo_debug.h" +#include "peoAggEvalFunc.h" +#include "peoNoAggEvalFunc.h" + + +//! Parallel evaluation functor wrapper. + +//! The peoParaPopEval represents a wrapper for creating a functor capable of applying in parallel +//! an EO-derived evaluation functor. The class offers the possibility of chosing between a single-function evaluation +//! and an aggregate evaluation function, including several sub-evalution functions. +template< class EOT > class peoParaPopEval : public peoPopEval< EOT > { + +public: + + using peoPopEval< EOT > :: requestResourceRequest; + using peoPopEval< EOT > :: resume; + using peoPopEval< EOT > :: stop; + using peoPopEval< EOT > :: getOwner; + + //! Constructor function - an EO-derived evaluation functor has to be specified; an internal reference + //! is set towards the specified evaluation functor. + //! + //! @param eoEvalFunc< EOT >& __eval_func - EO-derived evaluation functor to be applied in parallel on each individual of a specified population + peoParaPopEval( eoEvalFunc< EOT >& __eval_func ); + + //! Constructor function - a vector of EO-derived evaluation functors has to be specified as well as an aggregation function. + //! + //! @param const std :: vector< eoEvalFunc < EOT >* >& __funcs - vector of EO-derived partial evaluation functors; + //! @param peoAggEvalFunc< EOT >& __merge_eval - aggregation functor for creating a fitness value out of the partial fitness values. + peoParaPopEval( const std :: vector< eoEvalFunc < EOT >* >& __funcs, peoAggEvalFunc< EOT >& __merge_eval ); + + //! Operator for applying the evaluation functor (direct or aggregate) for each individual of the specified population. + //! + //! @param eoPop< EOT >& __pop - population to be evaluated by applying the evaluation functor specified in the constructor. + void operator()( eoPop< EOT >& __pop ); + + //! Auxiliary function for transferring data between the process requesting an evaluation operation and the process that + //! performs the actual evaluation phase. There is no need to explicitly call the function. + void packData(); + + //! Auxiliary function for transferring data between the process requesting an evaluation operation and the process that + //! performs the actual evaluation phase. There is no need to explicitly call the function. + void unpackData(); + + //! Auxiliary function - it calls the specified evaluation functor(s). There is no need to explicitly call the function. + void execute(); + + //! Auxiliary function for transferring data between the process requesting an evaluation operation and the process that + //! performs the actual evaluation phase. There is no need to explicitly call the function. + void packResult(); + + //! Auxiliary function for transferring data between the process requesting an evaluation operation and the process that + //! performs the actual evaluation phase. There is no need to explicitly call the function. + void unpackResult(); + + //! Auxiliary function for notifications between the process requesting an evaluation operation and the processes that + //! performs the actual evaluation phase. There is no need to explicitly call the function. + void notifySendingData(); + + //! Auxiliary function for notifications between the process requesting an evaluation operation and the processes that + //! performs the actual evaluation phase. There is no need to explicitly call the function. + void notifySendingAllResourceRequests(); + +private: + + + const std :: vector< eoEvalFunc < EOT >* >& funcs; + std :: vector< eoEvalFunc < EOT >* > one_func; + + peoAggEvalFunc< EOT >& merge_eval; + peoNoAggEvalFunc< EOT > no_merge_eval; + + std :: queue< EOT* >tasks; + + std :: map< EOT*, std :: pair< unsigned, unsigned > > progression; + + unsigned num_func; + + EOT sol; + + EOT *ad_sol; + + unsigned total; +}; + + +template< class EOT > peoParaPopEval< EOT > :: peoParaPopEval( eoEvalFunc< EOT >& __eval_func ) : + + funcs( one_func ), merge_eval( no_merge_eval ) +{ + + one_func.push_back( &__eval_func ); +} + + +template< class EOT > peoParaPopEval< EOT > :: peoParaPopEval( + + const std :: vector< eoEvalFunc< EOT >* >& __funcs, + peoAggEvalFunc< EOT >& __merge_eval + + ) : funcs( __funcs ), merge_eval( __merge_eval ) +{ + +} + + +template< class EOT > void peoParaPopEval< EOT >::operator()( eoPop< EOT >& __pop ) { + for ( unsigned i = 0; i < __pop.size(); i++ ) { + __pop[ i ].fitness(typename EOT :: Fitness() ); + progression[ &__pop[ i ] ].first = funcs.size() - 1; + progression[ &__pop[ i ] ].second = funcs.size(); + for ( unsigned j = 0; j < funcs.size(); j++ ) { + /* Queuing the 'invalid' solution and its associated owner */ + tasks.push( &__pop[ i ] ); + } + } + total = funcs.size() * __pop.size(); + requestResourceRequest( funcs.size() * __pop.size() ); + stop(); +} + + +template< class EOT > void peoParaPopEval< EOT > :: packData() { + // printDebugMessage ("debut pakc data"); + pack( progression[ tasks.front() ].first-- ); + + /* Packing the contents :-) of the solution */ + pack( *tasks.front() ); + + /* Packing the addresses of both the solution and the owner */ + pack( tasks.front() ); + tasks.pop( ); +} + + +template< class EOT > void peoParaPopEval< EOT > :: unpackData() { + unpack( num_func ); + /* Unpacking the solution */ + unpack( sol ); + /* Unpacking the @ of that one */ + unpack( ad_sol ); +} + + +template< class EOT > void peoParaPopEval< EOT > :: execute() { + /* Computing the fitness of the solution */ + funcs[ num_func ]->operator()( sol ); +} + + +template< class EOT > void peoParaPopEval< EOT > :: packResult() { + /* Packing the fitness of the solution */ + pack( sol.fitness() ); + /* Packing the @ of the individual */ + pack( ad_sol ); +} + + +template< class EOT > void peoParaPopEval< EOT > :: unpackResult() { + typename EOT :: Fitness fit; + + /* Unpacking the computed fitness */ + unpack( fit ); + + /* Unpacking the @ of the associated individual */ + unpack( ad_sol ); + + + /* Associating the fitness the local solution */ + merge_eval( *ad_sol, fit ); + + progression[ ad_sol ].second--; + + /* Notifying the container of the termination of the evaluation */ + if ( !progression[ ad_sol ].second ) { + + progression.erase( ad_sol ); + } + + total--; + if ( !total ) { + + getOwner()->setActive(); + resume(); + } +} + + +template< class EOT > void peoParaPopEval< EOT > :: notifySendingData() { +} + + +template< class EOT > void peoParaPopEval< EOT > :: notifySendingAllResourceRequests() { + getOwner()->setPassive(); +} + + +#endif diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoParaSGATransform.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoParaSGATransform.h new file mode 100644 index 000000000..81f3a724a --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoParaSGATransform.h @@ -0,0 +1,183 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef __peoParaSGATransform_h +#define __peoParaSGATransform_h + +#include "peoTransform.h" +#include "core/thread.h" +#include "core/messaging.h" +#include "core/peo_debug.h" + + +extern int getNodeRank(); + + +template< class EOT > class peoParaSGATransform : public peoTransform< EOT > { + +public: + + using peoTransform< EOT > :: requestResourceRequest; + using peoTransform< EOT > :: resume; + using peoTransform< EOT > :: stop; + using peoTransform< EOT > :: getOwner; + + peoParaSGATransform( + + eoQuadOp< EOT >& __cross, + double __cross_rate, + eoMonOp< EOT >& __mut, + double __mut_rate + ); + + void operator()( eoPop< EOT >& __pop ); + + void packData(); + + void unpackData(); + + void execute(); + + void packResult(); + + void unpackResult(); + + void notifySendingData(); + void notifySendingAllResourceRequests(); + +private: + + eoQuadOp< EOT >& cross; + double cross_rate; + + eoMonOp< EOT >& mut; + double mut_rate; + + unsigned idx; + + eoPop< EOT >* pop; + + EOT father, mother; + + unsigned num_term; +}; + +template< class EOT > peoParaSGATransform< EOT > :: peoParaSGATransform( + + eoQuadOp< EOT >& __cross, + double __cross_rate, + eoMonOp < EOT >& __mut, + double __mut_rate + + ) : cross( __cross ), cross_rate( __cross_rate ), mut( __mut ), mut_rate( __mut_rate ) +{ + +} + + +template< class EOT > void peoParaSGATransform< EOT > :: packData() { + + pack( idx ); + :: pack( pop->operator[]( idx++ ) ); + :: pack( pop->operator[]( idx++ ) ); +} + + +template< class EOT > void peoParaSGATransform< EOT > :: unpackData() { + + unpack( idx ); + :: unpack( father ); + :: unpack( mother ); +} + + +template< class EOT > void peoParaSGATransform< EOT > :: execute() { + + if( rng.uniform() < cross_rate ) cross( mother, father ); + + if( rng.uniform() < mut_rate ) mut( mother ); + if( rng.uniform() < mut_rate ) mut( father ); +} + + +template< class EOT > void peoParaSGATransform< EOT > :: packResult() { + + pack( idx ); + :: pack( father ); + :: pack( mother ); +} + + +template< class EOT > void peoParaSGATransform< EOT > :: unpackResult() { + + unsigned sidx; + + unpack( sidx ); + :: unpack( pop->operator[]( sidx++ ) ); + :: unpack( pop->operator[]( sidx ) ); + num_term += 2; + // Can be used with a odd size + if( num_term == 2*(pop->size()/2) ) { + + getOwner()->setActive(); + resume(); + } +} + + +template< class EOT > void peoParaSGATransform< EOT > :: operator()( eoPop < EOT >& __pop ) { + + printDebugMessage( "performing the parallel transformation step." ); + pop = &__pop; + idx = 0; + num_term = 0; + requestResourceRequest( __pop.size() / 2 ); + stop(); +} + + +template< class EOT > void peoParaSGATransform< EOT > :: notifySendingData() { + +} + + +template< class EOT > void peoParaSGATransform< EOT > :: notifySendingAllResourceRequests() { + + getOwner()->setPassive(); +} + + +#endif diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoParallelAlgorithmWrapper.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoParallelAlgorithmWrapper.h new file mode 100644 index 000000000..64ebb6d05 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoParallelAlgorithmWrapper.h @@ -0,0 +1,113 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef __peoParaAlgorithm_h +#define __peoParaAlgorithm_h + + +#include "core/runner.h" +#include "core/peo_debug.h" + + + + +class peoParallelAlgorithmWrapper : public Runner { + +public: + + template< typename AlgorithmType > peoParallelAlgorithmWrapper( AlgorithmType& externalAlgorithm ) + : algorithm( new Algorithm< AlgorithmType, void >( externalAlgorithm ) ) { + + } + + template< typename AlgorithmType, typename AlgorithmDataType > peoParallelAlgorithmWrapper( AlgorithmType& externalAlgorithm, AlgorithmDataType& externalData ) + : algorithm( new Algorithm< AlgorithmType, AlgorithmDataType >( externalAlgorithm, externalData ) ) { + + } + + ~peoParallelAlgorithmWrapper() { + + delete algorithm; + } + + void run() { algorithm->operator()(); } + + +private: + + struct AbstractAlgorithm { + + // virtual destructor as we will be using inheritance and polymorphism + virtual ~AbstractAlgorithm() { } + + // operator to be called for executing the algorithm + virtual void operator()() { } + }; + + + template< typename AlgorithmType, typename AlgorithmDataType > struct Algorithm : public AbstractAlgorithm { + + Algorithm( AlgorithmType& externalAlgorithm, AlgorithmDataType& externalData ) + : algorithm( externalAlgorithm ), algorithmData( externalData ) { + + } + + virtual void operator()() { algorithm( algorithmData ); } + + AlgorithmType& algorithm; + AlgorithmDataType& algorithmData; + }; + + + template< typename AlgorithmType > struct Algorithm< AlgorithmType, void > : public AbstractAlgorithm { + + Algorithm( AlgorithmType& externalAlgorithm ) : algorithm( externalAlgorithm ) { + + } + + virtual void operator()() { algorithm(); } + + AlgorithmType& algorithm; + }; + + +private: + + AbstractAlgorithm* algorithm; +}; + + +#endif diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoPopEval.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoPopEval.h new file mode 100644 index 000000000..316b8e122 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoPopEval.h @@ -0,0 +1,56 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef __peoPopEval_h +#define __peoPopEval_h + +#include "core/service.h" + +//! Interface for ParadisEO specific evaluation functors. + +//! The peoPopEval class provides the interface for constructing ParadisEO specific evaluation functors. +//! The derived classes may be used as wrappers for EO-derived evaluation functors. In order to have an example, +//! please refer to the implementation of the peoSeqPopEval and peoParaPopEval classes. +template< class EOT > class peoPopEval : public Service { + +public: + + //! Interface function providing the signature for constructing an evaluation functor. + virtual void operator()( eoPop< EOT >& __pop ) = 0; +}; + + +#endif diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoSeqPopEval.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoSeqPopEval.h new file mode 100644 index 000000000..2c118a945 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoSeqPopEval.h @@ -0,0 +1,81 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef __peoSeqPopEval_h +#define __peoSeqPopEval_h + +#include + +#include "peoPopEval.h" + +//! Sequential evaluation functor wrapper. + +//! The peoSeqPopEval class acts only as a ParadisEO specific sequential evaluation functor - a wrapper for incorporating +//! an eoEvalFunc< EOT >-derived class as evaluation functor. The specified EO evaluation object is applyied in an +//! iterative manner to each individual of a specified population. +template< class EOT > class peoSeqPopEval : public peoPopEval< EOT > { + +public: + + //! Constructor function - it only sets an internal reference to point to the specified evaluation object. + //! + //! @param eoEvalFunc< EOT >& __eval - evaluation object to be applied for each individual of a specified population + peoSeqPopEval( eoEvalFunc< EOT >& __eval ); + + //! Operator for evaluating all the individuals of a given population - in a sequential iterative manner. + //! + //! @param eoPop< EOT >& __pop - population to be evaluated. + void operator()( eoPop< EOT >& __pop ); + +private: + + eoEvalFunc< EOT >& eval; +}; + + +template< class EOT > peoSeqPopEval< EOT > :: peoSeqPopEval( eoEvalFunc< EOT >& __eval ) : eval( __eval ) { + +} + + +template< class EOT > void peoSeqPopEval< EOT > :: operator()( eoPop< EOT >& __pop ) { + + for ( unsigned i = 0; i < __pop.size(); i++ ) + eval( __pop[i] ); +} + + +#endif diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoSeqTransform.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoSeqTransform.h new file mode 100644 index 000000000..981e8ac54 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoSeqTransform.h @@ -0,0 +1,94 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef __peoSeqTransform_h +#define __peoSeqTransform_h + +#include "peoTransform.h" + + +//! ParadisEO specific wrapper class offering the possibility of using EO derived transform operators. + +//! The peoSeqTransform represent a wrapper for offering the possibility of using EO derived transform operators +//! along with the ParadisEO evolutionary algorithms. A minimal set of interface functions is also provided for creating the +//! link with the parallel architecture of the ParadisEO framework. +template< class EOT > class peoSeqTransform : public peoTransform< EOT > { + +public: + + //! Constructor function - sets an internal reference towards the specified EO-derived transform object. + //! + //! @param eoTransform< EOT >& __trans - EO-derived transform object including crossover and mutation operators. + peoSeqTransform( eoTransform< EOT >& __trans ); + + //! Operator for applying the specified transform operators on each individual of the given population. + //! + //! @param eoPop< EOT >& __pop - population to be transformed by applying the crossover and mutation operators. + void operator()( eoPop< EOT >& __pop ); + + //! Interface function for providing a link with the parallel architecture of the ParadisEO framework. + virtual void packData() { } + + //! Interface function for providing a link with the parallel architecture of the ParadisEO framework. + virtual void unpackData() { } + + //! Interface function for providing a link with the parallel architecture of the ParadisEO framework. + virtual void execute() { } + + //! Interface function for providing a link with the parallel architecture of the ParadisEO framework. + virtual void packResult() { } + + //! Interface function for providing a link with the parallel architecture of the ParadisEO framework. + virtual void unpackResult() { } + +private: + + eoTransform< EOT >& trans; +}; + + +template< class EOT > peoSeqTransform< EOT > :: peoSeqTransform( eoTransform< EOT >& __trans ) : trans( __trans ) { + +} + + +template< class EOT > void peoSeqTransform< EOT > :: operator()( eoPop< EOT >& __pop ) { + + trans( __pop ); +} + + +#endif diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoSyncIslandMig.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoSyncIslandMig.h new file mode 100644 index 000000000..53f1215c6 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoSyncIslandMig.h @@ -0,0 +1,314 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef __peoSyncIslandMig_h +#define __peoSyncIslandMig_h + + +#include +#include + +#include + +#include + +#include +#include +#include +#include + +#include "core/topology.h" +#include "core/thread.h" +#include "core/eoPop_comm.h" +#include "core/peo_debug.h" + + +//! Class providing the basis for the synchronous island migration model. + +//! The peoSyncIslandMig class offers the elementary basis for implementating a +//! synchronous island migration model - requires the specification of several basic +//! parameters, i.e. frequency of the migrations, selection and replacement strategies, +//! a topological model and the source and destination population for the migrating individuals. +//! The main difference as opposed to the asynchronous migration model is the synchronization step +//! performed after selecting and sending the emigrant individuals. +//! +//! The migration operator is called at the end of each generation of an evolutionary algorithms +//! as a checkpoint object - the following code exposes the structure of a classic evolutionary algorithm: +//! +//! +//! +//! +//! +//! +//! +//! +//!
do {    
         select( population, offsprings );   // select the offsprings from the current population
         transform( offsprings );   // crossover and mutation operators are applied on the selected offsprings
         evaluate( offsprings );   // evaluation step of the resulting offspring
         replace( population, offsprings );   // replace the individuals in the current population whith individuals from the offspring population, according to a specified replacement strategy
} while ( eaCheckpointContinue( population ) );   // checkpoint operators are applied on the current population, including the migration operator, if any specified
+//! +//! Constructing a synchronous island migration model requires having defined (1) a topological migration model, +//! (2) the control parameters of the migration process, (3) a checkpoint object associated with an evolutionary algorithm, +//! and (4) an owner object must be set. The owner object must be derived from the Runner class (for example +//! a peoEA object represents a possible owner). +//! A simple example is offered bellow: +//! +//!
    +//!
  1. topological model to be followed when performing migrations:
    +//!
    +//! +//! +//!
    RingTopology migTopology;   // a simple ring topological model - each island communicates with two other islands
    +//!
  2. +//! +//!
  3. the continuation criterion, selection and replacement strategy etc. are defined:
    +//!
    +//! +//! +//! +//! +//! +//! +//! +//! +//! +//!
    eoPop< EOT > population( POP_SIZE, popInitializer );   // population of individuals to be used for the evolutionary algorithm
       
    eoRandomSelect< EOT > migSelectStrategy;   // selection strategy - in this case a random selection is applied
    eoSelectNumber< EOT > migSelect( migSelectStrategy, MIG_SIZE );   // number of individuals to be selected using the specified strategy
    eoPlusReplacement< EOT > migReplace;   // immigration strategy - the worse individuals in the destination population are replaced by the immigrant individuals
       
    peoSyncIslandMig< EOT > syncMigration( +//!
             MIG_FREQ, migSelect, migReplace, migTopology, +//!
             population, population +//!
    );  
    // synchronous migration object - the emigrant individuals are selected from the same from population in which the immigrant individuals are being integrated
    +//!
  4. +//! +//!
  5. creation of a checkpoint object as part of the definition of an evolutionary algoritm (details of th EA not given as being out of scope):
    +//!
    +//! +//! +//! +//! +//! +//! +//! +//!
    ...    
    eoGenContinue< EOT > eaCont( NUM_GEN );   // the evolutionary algorithm will stop after NUM_GEN generations
    eoCheckPoint< EOT > eaCheckpointContinue( eaCont );   // number of individuals to be selected using the specified strategy
    ...    
    eaCheckpointContinue.add( syncMigration );   // adding the migration operator as checkpoint element
    ...    
    +//!
  6. +//! +//!
  7. definition of an owner evolutionary algorithm (an object inheriting the Runner class):
    +//!
    +//! +//! +//! +//! +//!
    peoEA< EOT > eaAlg( eaCheckpointContinue, eaPopEval, eaSelect, eaTransform, eaReplace);   // evolutionary algorithm having as checkpoint the eaCheckpointContinue object defined above
    syncMigration.setOwner( eaAlg );   // setting the evolutionary algorithm as owner of the migration object
    eaAlg( population );   // applying the evolutionary algorithm on a given population
    +//!
  8. +//!
+//! +//! The source and the destination population for the migration object were specified as being the same, in step no. 2, +//! as we are usually interested in selecting the emigrants and integrating the immigrant individuals from and in, respectively, one unique +//! population, iteratively evolved by an evolutionary algorithm. There is no restriction in having two distinct populations +//! as source and destination for the emigrant and immigrant individuals respectively. +//! +//! The above steps only create a synchronous migration object associated to an evolutionary algorithm. The creation of several +//! islands requires the reiteration of the steps 2 through 4 for creating distinct algorithms, with distinct populations and +//! the associated distinctly parametrized migration objects. The interconnecting element is the underlying topology, defined at step 1 +//! (the same C++ migTopology object has to be passed as parameter for all the migration objects, in order to interconnect them). +template< class EOT > class peoSyncIslandMig : public Cooperative, public eoUpdater { + +public: + + //! Constructor for the peoSyncIslandMig class; the characteristics of the migration model are defined + //! through the specified parameters - out of the box objects provided in EO, etc., or custom, derived objects may be passed as parameters. + //! + //! @param unsigned __frequency - frequency of the migrations - the migrations occur periodically; + //! @param eoSelect< EOT >& __select - selection strategy to be applied for constructing a list of emigrant individuals out of the source population; + //! @param eoReplacement< EOT >& __replace - replacement strategy used for integrating the immigrant individuals in the destination population; + //! @param Topology& __topology - topological model to be followed when performing migrations; + //! @param eoPop< EOT >& __source - source population from which the emigrant individuals are selected; + //! @param eoPop< EOT >& __destination - destination population in which the immigrant population are integrated. + peoSyncIslandMig( + unsigned __frequency, + eoSelect< EOT >& __select, + eoReplacement< EOT >& __replace, + Topology& __topology, + eoPop< EOT >& __source, + eoPop< EOT >& __destination + ); + + //! Function operator to be called as checkpoint for performing the migration step. The emigrant individuals are selected + //! from the source population and sent to the next island (defined by the topology object) while the immigrant + //! individuals are integrated in the destination population. There is no need to explicitly call the function - the + //! wrapper checkpoint object (please refer to the above example) will perform the call when required. + void operator()(); + + //! Auxiliary function dealing with sending the emigrant individuals. There is no need to explicitly call the function. + void pack(); + //! Auxiliary function dealing with receiving immigrant individuals. There is no need to explicitly call the function. + void unpack(); + + //! Auxiliary function dealing with migration notifications. There is no need to explicitly call the function. + void notifySending(); + + +private: + + void emigrate(); + void immigrate(); + + +private: + + eoPeriodicContinue< EOT > cont; + eoSelect< EOT >& select; // selection strategy + eoReplacement< EOT >& replace; // replacement strategy + Topology& topology; // neighboring topology + + // source and target populations + eoPop< EOT >& source; + eoPop< EOT >& destination; + + // immigrants & emigrants in the queue + std :: queue< eoPop< EOT > > imm; + std :: queue< eoPop< EOT > > em; + + std :: queue< Cooperative* > coop_em; + + sem_t sync; +}; + + +template< class EOT > peoSyncIslandMig< EOT > :: peoSyncIslandMig( + + unsigned __frequency, + eoSelect< EOT >& __select, + eoReplacement< EOT >& __replace, + Topology& __topology, + eoPop< EOT >& __source, + eoPop< EOT >& __destination + + ) : cont( __frequency ), select( __select ), replace( __replace ), topology( __topology ), source( __source ), destination( __destination ) +{ + + __topology.add( *this ); + sem_init( &sync, 0, 0 ); +} + + +template< class EOT > void peoSyncIslandMig< EOT > :: pack() { + + lock(); { + + :: pack( coop_em.front()->getKey() ); + :: pack( em.front() ); + coop_em.pop(); + em.pop(); + } + unlock(); +} + + +template< class EOT > void peoSyncIslandMig< EOT > :: unpack() { + + lock(); { + + eoPop< EOT > mig; + :: unpack( mig ); + imm.push( mig ); + } + unlock(); + + sem_post( &sync ); +} + + +template< class EOT > void peoSyncIslandMig< EOT > :: emigrate() { + + std :: vector< Cooperative* > in, out; + topology.setNeighbors( this, in, out ); + + for ( unsigned i = 0; i < out.size(); i ++ ) { + + eoPop< EOT > mig; + select( source, mig ); + em.push( mig ); + coop_em.push( out[ i ] ); + send( out[ i ] ); + printDebugMessage( "sending some emigrants." ); + } +} + + +template< class EOT > void peoSyncIslandMig< EOT > :: immigrate() { + + lock(); { + + assert( imm.size() ); + replace( destination, imm.front() ) ; + imm.pop(); + printDebugMessage( "receiving some immigrants." ); + } + unlock(); +} + + +template< class EOT > void peoSyncIslandMig< EOT > :: operator()() { + + if ( !cont( source ) ) { + + // sending emigrants + emigrate(); + stop(); + + // synchronizing + sem_wait( &sync ); + getOwner()->setActive(); + + // receiving immigrants + immigrate(); + } +} + + +template< class EOT > void peoSyncIslandMig< EOT > :: notifySending() { + + lock(); { + + if ( imm.empty() ) { + + printDebugMessage( "entering pasive mode\n" ); + getOwner()->setPassive(); + } + } + unlock(); + + resume(); +} + + +#endif diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoSyncMultiStart.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoSyncMultiStart.h new file mode 100644 index 000000000..d0481ce76 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoSyncMultiStart.h @@ -0,0 +1,211 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef __peoSyncMultiStart_h +#define __peoSyncMultiStart_h + +#include +#include + +#include +#include +#include + +#include "core/service.h" +#include "core/messaging.h" +#include "core/peo_debug.h" + + +extern int getNodeRank(); + + +//! Class providing the basis for the synchronous multi-start model. + +//! The peoSyncMultiStart class provides the basis for implementing the synchronous multi-start model, +//! for launching several solution-based algorithms in parallel on a specified initial population. As a simple +//! example, several hill climbing algorithms may be synchronously launched on the specified population, each +//! algorithm acting upon one individual only, the final result being integrated back in the population. A +//! peoSyncMultiStart object can be specified as checkpoint object for a classic ParadisEO evolutionary algorithm +//! thus allowing for simple hybridization schemes which combine the evolutionary approach with a local search approach, +//! for example, executed at the end of each generation. +template< class EOT > class peoSyncMultiStart : public Service, public eoUpdater { + +public: + + //! Constructor function - several simple parameters are required for defining the characteristics of the multi-start model. + //! + //! @param eoContinue< EOT >& __cont - defined for including further functionality - no semantics associated at this time; + //! @param eoSelect< EOT >& __select - selection strategy for obtaining a subset of the initial population on which to apply the specified algorithm; + //! @param eoReplacement< EOT >& __replace - replacement strategy for integrating the resulting individuals in the initial population; + //! @param moAlgo< EOT >& __ls - algorithm to be applied on each of the selected individuals - a moAlgo< EOT >-derived object must be specified; + //! @param eoPop< EOT >& __pop - the initial population from which the individuals are selected for applying the specified algorithm. + peoSyncMultiStart( + + eoContinue< EOT >& __cont, + eoSelect< EOT >& __select, + eoReplacement< EOT >& __replace, + moAlgo< EOT >& __ls, + eoPop< EOT >& __pop + ); + + //! Operator which synchronously executes the specified algorithm on the individuals selected from the initial population. + //! There is no need to explicitly call the operator - automatically called as checkpoint operator. + void operator()(); + + //! Auxiliary function for transferring data between the process requesting the synchronous execution of the specified + //! algorithm and the process which actually executes the algorithm. There is no need to explicitly call the function. + void packData(); + + //! Auxiliary function for transferring data between the process requesting the synchronous execution of the specified + //! algorithm and the process which actually executes the algorithm. There is no need to explicitly call the function. + void unpackData(); + + //! Auxiliary function for actually executing the specified algorithm on one assigned individual. There is no need to + //! explicitly call the function. + void execute(); + + //! Auxiliary function for transferring data between the process requesting the synchronous execution of the specified + //! algorithm and the process which actually executes the algorithm. There is no need to explicitly call the function. + void packResult(); + + //! Auxiliary function for transferring data between the process requesting the synchronous execution of the specified + //! algorithm and the process which actually executes the algorithm. There is no need to explicitly call the function. + void unpackResult(); + + //! Auxiliary function for notifications between the process requesting the synchronous multi-start execution + //! and the processes that performs the actual execution phase. There is no need to explicitly call the function. + void notifySendingData(); + + //! Auxiliary function for notifications between the process requesting the synchronous multi-start execution + //! and the processes that performs the actual execution phase. There is no need to explicitly call the function. + void notifySendingAllResourceRequests(); + +private: + + eoContinue< EOT >& cont; + eoSelect< EOT >& select; + eoReplacement< EOT >& replace; + + moAlgo< EOT >& ls; + + eoPop< EOT >& pop; + eoPop< EOT > sel; + eoPop< EOT > impr_sel; + + EOT sol; + unsigned idx; + unsigned num_term; +}; + + +template< class EOT > peoSyncMultiStart< EOT > :: peoSyncMultiStart( + + eoContinue < EOT >& __cont, + eoSelect< EOT >& __select, + eoReplacement< EOT >& __replace, + moAlgo < EOT >& __ls, + eoPop< EOT >& __pop + + ) : cont( __cont ), select( __select ), replace( __replace ), ls( __ls ), pop( __pop ) +{ + +} + + +template< class EOT > void peoSyncMultiStart< EOT > :: packData() { + + :: pack( sel[ idx++ ] ); +} + + +template< class EOT > void peoSyncMultiStart< EOT > :: unpackData() { + + unpack( sol ); +} + + +template< class EOT > void peoSyncMultiStart< EOT > :: execute() { + + ls( sol ); +} + + +template< class EOT > void peoSyncMultiStart< EOT > :: packResult() { + + pack( sol ); +} + + +template< class EOT > void peoSyncMultiStart< EOT > :: unpackResult() { + + unpack( sol ); + impr_sel.push_back( sol ); + num_term++; + + if ( num_term == sel.size() ) { + + getOwner()->setActive(); + replace( pop, impr_sel ); + + printDebugMessage( "replacing the improved individuals in the population." ); + resume(); + } +} + + +template< class EOT > void peoSyncMultiStart< EOT > :: operator()() { + + printDebugMessage( "performing the parallel multi-start hybridization." ); + select( pop, sel ); + impr_sel.clear(); + idx = num_term = 0; + requestResourceRequest( sel.size() ); + stop(); +} + + +template< class EOT > void peoSyncMultiStart< EOT > :: notifySendingData() { + +} + + +template< class EOT > void peoSyncMultiStart< EOT > :: notifySendingAllResourceRequests() { + + getOwner()->setPassive(); +} + + +#endif diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoSynchronousMultiStart.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoSynchronousMultiStart.h new file mode 100644 index 000000000..580a2e61e --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoSynchronousMultiStart.h @@ -0,0 +1,269 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ +#ifndef __peoSynchronousMultiStart_h +#define __peoSynchronousMultiStart_h + +#include + +#include "core/service.h" +#include "core/messaging.h" + + +template < typename EntityType > class peoSynchronousMultiStart : public Service { + +public: + + template < typename AlgorithmType > peoSynchronousMultiStart( AlgorithmType& externalAlgorithm ) { + + singularAlgorithm = new Algorithm< AlgorithmType >( externalAlgorithm ); + algorithms.push_back( singularAlgorithm ); + + aggregationFunction = new NoAggregationFunction(); + } + + template < typename AlgorithmType, typename AggregationFunctionType > peoSynchronousMultiStart( std::vector< AlgorithmType* >& externalAlgorithms, AggregationFunctionType& externalAggregationFunction ) { + + for ( unsigned int index = 0; index < externalAlgorithms; index++ ) { + + algorithms.push_back( new Algorithm< AlgorithmType >( *externalAlgorithms[ index ] ) ); + } + + aggregationFunction = new Algorithm< AggregationFunctionType >( externalAggregationFunction ); + } + + + ~peoSynchronousMultiStart() { + + for ( unsigned int index = 0; index < data.size(); index++ ) delete data[ index ]; + for ( unsigned int index = 0; index < algorithms.size(); index++ ) delete algorithms[ index ]; + + delete aggregationFunction; + } + + + template < typename Type > void operator()( Type& externalData ) { + + for ( typename Type::iterator externalDataIterator = externalData.begin(); externalDataIterator != externalData.end(); externalDataIterator++ ) { + + data.push_back( new DataType< EntityType >( *externalDataIterator ) ); + } + + functionIndex = dataIndex = idx = num_term = 0; + requestResourceRequest( data.size() * algorithms.size() ); + stop(); + } + + + template < typename Type > void operator()( const Type& externalDataBegin, const Type& externalDataEnd ) { + + for ( Type externalDataIterator = externalDataBegin; externalDataIterator != externalDataEnd; externalDataIterator++ ) { + + data.push_back( new DataType< EntityType >( *externalDataIterator ) ); + } + + functionIndex = dataIndex = idx = num_term = 0; + requestResourceRequest( data.size() * algorithms.size() ); + stop(); + } + + + void packData(); + + void unpackData(); + + void execute(); + + void packResult(); + + void unpackResult(); + + void notifySendingData(); + + void notifySendingAllResourceRequests(); + + +private: + + template < typename Type > struct DataType; + + struct AbstractDataType { + + virtual ~AbstractDataType() { } + + template < typename Type > operator Type& () { + + return ( dynamic_cast< DataType< Type >& >( *this ) ).data; + } + }; + + template < typename Type > struct DataType : public AbstractDataType { + + DataType( Type& externalData ) : data( externalData ) { } + + Type& data; + }; + + struct AbstractAlgorithm { + + virtual ~AbstractAlgorithm() { } + + virtual void operator()( AbstractDataType& dataTypeInstance ) {} + }; + + template < typename AlgorithmType > struct Algorithm : public AbstractAlgorithm { + + Algorithm( AlgorithmType& externalAlgorithm ) : algorithm( externalAlgorithm ) { } + + void operator()( AbstractDataType& dataTypeInstance ) { algorithm( dataTypeInstance ); } + + AlgorithmType& algorithm; + }; + + + + struct AbstractAggregationAlgorithm { + + virtual ~AbstractAggregationAlgorithm() { } + + virtual void operator()( AbstractDataType& dataTypeInstanceA, AbstractDataType& dataTypeInstanceB ) {}; + }; + + template < typename AggregationAlgorithmType > struct AggregationAlgorithm : public AbstractAggregationAlgorithm { + + AggregationAlgorithm( AggregationAlgorithmType& externalAggregationAlgorithm ) : aggregationAlgorithm( externalAggregationAlgorithm ) { } + + void operator()( AbstractDataType& dataTypeInstanceA, AbstractDataType& dataTypeInstanceB ) { + + aggregationAlgorithm( dataTypeInstanceA, dataTypeInstanceB ); + } + + AggregationAlgorithmType& aggregationAlgorithm; + }; + + struct NoAggregationFunction : public AbstractAggregationAlgorithm { + + void operator()( AbstractDataType& dataTypeInstanceA, AbstractDataType& dataTypeInstanceB ) { + + static_cast< EntityType& >( dataTypeInstanceA ) = static_cast< EntityType& >( dataTypeInstanceB ); + } + }; + + + + AbstractAlgorithm* singularAlgorithm; + + std::vector< AbstractAlgorithm* > algorithms; + AbstractAggregationAlgorithm* aggregationFunction; + + + EntityType entityTypeInstance; + std::vector< AbstractDataType* > data; + + unsigned idx; + unsigned num_term; + unsigned dataIndex; + unsigned functionIndex; +}; + + +template < typename EntityType > void peoSynchronousMultiStart< EntityType >::packData() { + + ::pack( functionIndex ); + ::pack( idx ); + ::pack( ( EntityType& ) *data[ idx++ ] ); + + // done with functionIndex for the entire data set - moving to another + // function/algorithm starting all over with the entire data set ( idx is set to 0 ) + if ( idx == data.size() ) { + + ++functionIndex; idx = 0; + } +} + +template < typename EntityType > void peoSynchronousMultiStart< EntityType >::unpackData() { + + ::unpack( functionIndex ); + ::unpack( dataIndex ); + ::unpack( entityTypeInstance ); +} + +template < typename EntityType > void peoSynchronousMultiStart< EntityType >::execute() { + + // wrapping the unpacked data - the definition of an abstract algorithm imposes + // that its internal function operator acts only on abstract data types + AbstractDataType* entityWrapper = new DataType< EntityType >( entityTypeInstance ); + algorithms[ functionIndex ]->operator()( *entityWrapper ); + + delete entityWrapper; +} + +template < typename EntityType > void peoSynchronousMultiStart< EntityType >::packResult() { + + ::pack( dataIndex ); + ::pack( entityTypeInstance ); +} + +template < typename EntityType > void peoSynchronousMultiStart< EntityType >::unpackResult() { + + ::unpack( dataIndex ); + ::unpack( entityTypeInstance ); + + // wrapping the unpacked data - the definition of an abstract algorithm imposes + // that its internal function operator acts only on abstract data types + AbstractDataType* entityWrapper = new DataType< EntityType >( entityTypeInstance ); + aggregationFunction->operator()( *data[ dataIndex ], *entityWrapper ); + delete entityWrapper; + + num_term++; + + if ( num_term == data.size() * algorithms.size() ) { + + getOwner()->setActive(); + resume(); + } +} + +template < typename EntityType > void peoSynchronousMultiStart< EntityType >::notifySendingData() { + +} + +template < typename EntityType > void peoSynchronousMultiStart< EntityType >::notifySendingAllResourceRequests() { + + getOwner()->setPassive(); +} + + +#endif diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoTransform.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoTransform.h new file mode 100644 index 000000000..710b0b974 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/peoTransform.h @@ -0,0 +1,53 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef __peoTransform_h +#define __peoTransform_h + +#include + +#include "core/service.h" + +//! Interface class for constructing more complex transformation operators. + +//! The peoTransform class acts only as an interface for creating transform operators - for an example +//! please refer to the peoSeqTransform and the peoParaSGATransform classes. +template< class EOT > class peoTransform : public Service, public eoTransform< EOT > { + +}; + + +#endif diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/CMakeLists.txt b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/CMakeLists.txt new file mode 100644 index 000000000..cff45bfa7 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/CMakeLists.txt @@ -0,0 +1,9 @@ + + +###################################################################################### +### 1) Where must cmake go now ? +###################################################################################### + +SUBDIRS(mpi) + +###################################################################################### \ No newline at end of file diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/CMakeLists.txt b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/CMakeLists.txt new file mode 100644 index 000000000..cfdf54c78 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/CMakeLists.txt @@ -0,0 +1,95 @@ + +###################################################################################### +### 0) Set the compiler +###################################################################################### + +SET (CMAKE_CXX_COMPILER mpicxx) + +###################################################################################### + + +###################################################################################### +### 1) Include the sources +###################################################################################### + +INCLUDE_DIRECTORIES(${EO_SRC_DIR}/src) +INCLUDE_DIRECTORIES(${XML2_CFLAGS_WITH_WHITESPACE}) + +###################################################################################### + + + +###################################################################################### +### 2) Define your target(s): just the rmc_mpi library here +###################################################################################### + +SET(RMC_MPI_LIB_OUTPUT_PATH ${ParadisEO-PEO_BINARY_DIR}/lib) +SET(LIBRARY_OUTPUT_PATH ${RMC_MPI_LIB_OUTPUT_PATH}) + +SET (RMC_MPI_SOURCES node.cpp + param.cpp + comm.cpp + coop.cpp + mess.cpp + rmc.cpp + scheduler.cpp + worker.cpp + send.cpp + recv.cpp + xml_parser.cpp + schema.cpp + runner.cpp + service.cpp) + +ADD_LIBRARY(rmc_mpi STATIC ${RMC_MPI_SOURCES}) +ADD_DEPENDENCIES(rmc_mpi peo) +###################################################################################### + + + +###################################################################################### +### 3) Optionnal: define your lib version: +###################################################################################### + +SET(RMC_MPI_VERSION ${GLOBAL_VERSION}) +SET_TARGET_PROPERTIES(rmc_mpi PROPERTIES VERSION "${RMC_MPI_VERSION}") +###################################################################################### + + +###################################################################################### +### 4) Link the librairies for your target(s) +###################################################################################### + +# No library required + +###################################################################################### + + +###################################################################################### +### 5) Windows advanced config - especially for Microsoft Visual Studio 8 +###################################################################################### + + IF(CMAKE_CXX_COMPILER MATCHES cl) + IF(NOT WITH_SHARED_LIBS) + IF(CMAKE_GENERATOR STREQUAL "Visual Studio 8 2005") + SET(CMAKE_CXX_FLAGS "/nologo /W3 /Gy") + SET(CMAKE_CXX_FLAGS_DEBUG "/MTd /Z7 /Od") + SET(CMAKE_CXX_FLAGS_RELEASE "/MT /O2") + SET(CMAKE_CXX_FLAGS_MINSIZEREL "/MT /O2") + SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "/MTd /Z7 /Od") + SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SUBSYSTEM:CONSOLE") + + ENDIF(CMAKE_GENERATOR STREQUAL "Visual Studio 8 2005") + ENDIF(NOT WITH_SHARED_LIBS) + ENDIF(CMAKE_CXX_COMPILER MATCHES cl) +###################################################################################### + + +###################################################################################### +### 6) Where must cmake go now ? +###################################################################################### + +# nothing to be compiled in the subdirs + +###################################################################################### + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/comm.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/comm.cpp new file mode 100644 index 000000000..107d0666c --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/comm.cpp @@ -0,0 +1,95 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + + +#include + +#include "comm.h" +#include "mess.h" +#include "node.h" +#include "param.h" +#include "../../core/peo_debug.h" +#include "../../core/runner.h" +#include "send.h" +#include "recv.h" +#include "scheduler.h" + +static sem_t sem_comm_init; + +static Communicator * the_thread; + +Communicator :: Communicator (int * __argc, char * * * __argv) { + + the_thread = this; + initNode (__argc, __argv); + loadRMCParameters (* __argc, * __argv); + sem_post (& sem_comm_init); +} + +void Communicator :: start () { + + while (true) { + + /* Zzz Zzz Zzz :-))) */ + sleep (); + sendMessages (); + + if (! atLeastOneActiveRunner ()) + break; + receiveMessages (); + } + waitBuffers (); + printDebugMessage ("finalizing"); + MPI_Finalize (); +} + +void initCommunication () { + + sem_init (& sem_comm_init, 0, 0); +} + +void waitNodeInitialization () { + + sem_wait (& sem_comm_init); +} + +void wakeUpCommunicator () { + + the_thread -> wakeUp (); +} + + + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/comm.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/comm.h new file mode 100644 index 000000000..5184d45f1 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/comm.h @@ -0,0 +1,59 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef __comm_mpi_h +#define __comm_mpi_h + +#include "../../core/communicable.h" +#include "../../core/reac_thread.h" + +class Communicator : public ReactiveThread { + +public : + + /* Ctor */ + Communicator (int * __argc, char * * * __argv); + + void start (); +}; + +extern void initCommunication (); + +extern void waitNodeInitialization (); + +extern void wakeUpCommunicator (); + +#endif diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/coop.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/coop.cpp new file mode 100644 index 000000000..b4b57d7ba --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/coop.cpp @@ -0,0 +1,70 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include "../../core/cooperative.h" +#include "send.h" +#include "tags.h" +#include "schema.h" +#include "mess.h" +#include "../../core/peo_debug.h" + +Runner * Cooperative :: getOwner () { + + return owner; +} + +void Cooperative :: setOwner (Runner & __runner) { + + owner = & __runner; +} + +void Cooperative :: send (Cooperative * __coop) { + + :: send (this, getRankOfRunner (__coop -> getOwner () -> getID ()), COOP_TAG); + // stop (); +} + +Cooperative * getCooperative (COOP_ID __key) { + + return dynamic_cast (getCommunicable (__key)); +} + +void Cooperative :: notifySending () { + + //getOwner -> setPassive (); + // resume (); + // printDebugMessage (b); +} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/mess.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/mess.cpp new file mode 100644 index 000000000..2352e45ba --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/mess.cpp @@ -0,0 +1,265 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include +#include + +#include "mess.h" +#include "../../core/peo_debug.h" +#include "node.h" + +#define MPI_BUF_SIZE 1024*64 + +static char mpi_buf [MPI_BUF_SIZE]; + +static int pos_buf ; + +static std :: vector act_buf; /* Active buffers */ + +static std :: vector act_req; /* Active requests */ + +void cleanBuffers () { + + for (unsigned i = 0; i < act_req.size ();) { + + MPI_Status stat ; + int flag ; + MPI_Test (act_req [i], & flag, & stat) ; + if (flag) { + + delete act_buf [i] ; + delete act_req [i] ; + + act_buf [i] = act_buf.back () ; + act_buf.pop_back () ; + + act_req [i] = act_req.back () ; + act_req.pop_back () ; + } + else + i ++; + } +} + +void waitBuffers () { + + printDebugMessage ("waiting the termination of the asynchronous operations to complete"); + + for (unsigned i = 0; i < act_req.size (); i ++) { + + MPI_Status stat ; + + MPI_Wait (act_req [i], & stat) ; + + delete act_buf [i] ; + delete act_req [i] ; + } +} + +bool probeMessage (int & __src, int & __tag) { + + int flag; + + MPI_Status stat; + + MPI_Iprobe (MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, & flag, & stat); + + __src = stat.MPI_SOURCE; + __tag = stat.MPI_TAG; + + return flag; +} + +void waitMessage () { + + MPI_Status stat; + + MPI_Probe (MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, & stat); +} + +void initMessage () { + + pos_buf = 0; +} + +void sendMessage (int __to, int __tag) { + + cleanBuffers (); + act_buf.push_back (new char [pos_buf]); + act_req.push_back (new MPI_Request); + memcpy (act_buf.back (), mpi_buf, pos_buf); + MPI_Isend (act_buf.back (), pos_buf, MPI_PACKED, __to, __tag, MPI_COMM_WORLD, act_req.back ()); +} + +void sendMessageToAll (int __tag) { + + for (int i = 0; i < getNumberOfNodes (); i ++) + sendMessage (i, __tag); +} + +void receiveMessage (int __from, int __tag) { + + MPI_Status stat; + MPI_Request req; + + MPI_Irecv (mpi_buf, MPI_BUF_SIZE, MPI_PACKED, __from, __tag, MPI_COMM_WORLD, & req) ; + MPI_Wait (& req, & stat) ; +} + +/* Char */ +void pack (const char & __c) { + + MPI_Pack ((void *) & __c, 1, MPI_CHAR, mpi_buf, MPI_BUF_SIZE, & pos_buf, MPI_COMM_WORLD); +} + +/* Float */ +void pack (const float & __f, int __nitem) { + + MPI_Pack ((void *) & __f, __nitem, MPI_FLOAT, mpi_buf, MPI_BUF_SIZE, & pos_buf, MPI_COMM_WORLD); +} + +/* Double */ +void pack (const double & __d, int __nitem) { + + MPI_Pack ((void *) & __d, __nitem, MPI_DOUBLE, mpi_buf, MPI_BUF_SIZE, & pos_buf, MPI_COMM_WORLD); +} + +/* Integer */ +void pack (const int & __i, int __nitem) { + + MPI_Pack ((void *) & __i, __nitem, MPI_INT, mpi_buf, MPI_BUF_SIZE, & pos_buf, MPI_COMM_WORLD); +} + +/* Unsigned int. */ +void pack (const unsigned int & __ui, int __nitem) { + + MPI_Pack ((void *) & __ui, __nitem, MPI_UNSIGNED, mpi_buf, MPI_BUF_SIZE, & pos_buf, MPI_COMM_WORLD); +} + +/* Short int. */ +void pack (const short & __sh, int __nitem) { + + MPI_Pack ((void *) & __sh, __nitem, MPI_SHORT, mpi_buf, MPI_BUF_SIZE, & pos_buf, MPI_COMM_WORLD); +} + +/* Unsigned short */ +void pack (const unsigned short & __ush, int __nitem) { + + MPI_Pack ((void *) & __ush, __nitem, MPI_UNSIGNED_SHORT, mpi_buf, MPI_BUF_SIZE, & pos_buf, MPI_COMM_WORLD); +} + +/* Long */ +void pack (const long & __l, int __nitem) { + + MPI_Pack ((void *) & __l, __nitem, MPI_LONG, mpi_buf, MPI_BUF_SIZE, & pos_buf, MPI_COMM_WORLD); +} + +/* Unsigned long */ +void pack (const unsigned long & __ul, int __nitem) { + + MPI_Pack ((void *) & __ul, __nitem, MPI_UNSIGNED_LONG, mpi_buf, MPI_BUF_SIZE, & pos_buf, MPI_COMM_WORLD); +} + +/* String */ +void pack (const char * __str) { + + int len = strlen (__str) + 1; + MPI_Pack (& len, 1, MPI_INT, mpi_buf, MPI_BUF_SIZE, & pos_buf, MPI_COMM_WORLD); + MPI_Pack ((void *) __str, len, MPI_CHAR, mpi_buf, MPI_BUF_SIZE, & pos_buf, MPI_COMM_WORLD); +} + +/* Char */ +void unpack (char & __c) { + + MPI_Unpack (mpi_buf, MPI_BUF_SIZE, & pos_buf, & __c, 1, MPI_CHAR, MPI_COMM_WORLD); +} + +/* Float */ +void unpack (float & __f, int __nitem) { + + MPI_Unpack (mpi_buf, MPI_BUF_SIZE, & pos_buf, & __f, __nitem, MPI_FLOAT, MPI_COMM_WORLD); +} + +/* Double */ +void unpack (double & __d, int __nitem) { + + MPI_Unpack (mpi_buf, MPI_BUF_SIZE, & pos_buf, & __d, __nitem, MPI_DOUBLE, MPI_COMM_WORLD); +} + +/* Integer */ +void unpack (int & __i, int __nitem) { + + MPI_Unpack (mpi_buf, MPI_BUF_SIZE, & pos_buf, & __i, __nitem, MPI_INT, MPI_COMM_WORLD); +} + +/* Unsigned int. */ +void unpack (unsigned int & __ui, int __nitem) { + + MPI_Unpack (mpi_buf, MPI_BUF_SIZE, & pos_buf, & __ui, __nitem, MPI_UNSIGNED, MPI_COMM_WORLD); +} + +/* Short int. */ +void unpack (short & __sh, int __nitem) { + + MPI_Unpack (mpi_buf, MPI_BUF_SIZE, & pos_buf, & __sh, __nitem, MPI_SHORT, MPI_COMM_WORLD); +} + +/* Unsigned short */ +void unpack (unsigned short & __ush, int __nitem) { + + MPI_Unpack (mpi_buf, MPI_BUF_SIZE, & pos_buf, & __ush, __nitem, MPI_UNSIGNED_SHORT, MPI_COMM_WORLD); +} + +/* Long */ +void unpack (long & __l, int __nitem) { + + MPI_Unpack (mpi_buf, MPI_BUF_SIZE, & pos_buf, & __l, __nitem, MPI_LONG, MPI_COMM_WORLD); +} + +/* Unsigned long */ +void unpack (unsigned long & __ul, int __nitem) { + + MPI_Unpack (mpi_buf, MPI_BUF_SIZE, & pos_buf, & __ul, __nitem, MPI_UNSIGNED_LONG, MPI_COMM_WORLD); +} + +/* String */ +void unpack (char * __str) { + + int len; + MPI_Unpack (mpi_buf, MPI_BUF_SIZE, & pos_buf, & len, 1, MPI_INT, MPI_COMM_WORLD); + MPI_Unpack (mpi_buf, MPI_BUF_SIZE, & pos_buf, __str, len, MPI_CHAR, MPI_COMM_WORLD); +} + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/mess.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/mess.h new file mode 100644 index 000000000..2fb9a59d1 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/mess.h @@ -0,0 +1,59 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef __mess_rmc_h +#define __mess_rmc_h + +#include "../../core/messaging.h" + +extern void initMessage (); + +extern void sendMessage (int __to, int __tag); + +extern void sendMessageToAll (int __tag); + +extern void receiveMessage (int __from, int __tag); + +extern void cleanBuffers (); + +extern void waitBuffers (); + +extern bool probeMessage (int & __src, int & __tag); + +extern void waitMessage (); + +#endif + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/node.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/node.cpp new file mode 100644 index 000000000..dcd156781 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/node.cpp @@ -0,0 +1,86 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include +#include +#include +#include +#include + +static int rk, sz; /* Rank & size */ + +static std :: map name_to_rk; + +static std :: vector rk_to_name; + +int getNodeRank () { + + return rk; +} + +int getNumberOfNodes () { + + return sz; +} + +int getRankFromName (const std :: string & __name) { + + return atoi (__name.c_str ()); +} + +void initNode (int * __argc, char * * * __argv) { + + int provided; + MPI_Init_thread (__argc, __argv, MPI_THREAD_FUNNELED, & provided); + assert (provided == MPI_THREAD_FUNNELED); /* The MPI implementation must be multi-threaded. + Yet, only one thread performs the comm. + operations */ + MPI_Comm_rank (MPI_COMM_WORLD, & rk); /* Who ? */ + MPI_Comm_size (MPI_COMM_WORLD, & sz); /* How many ? */ + + char names [sz] [MPI_MAX_PROCESSOR_NAME]; + int len; + + /* Processor names */ + MPI_Get_processor_name (names [0], & len); /* Me */ + MPI_Allgather (names, MPI_MAX_PROCESSOR_NAME, MPI_CHAR, names, MPI_MAX_PROCESSOR_NAME, MPI_CHAR, MPI_COMM_WORLD); /* Broadcast */ + + for (int i = 0; i < sz; i ++) { + rk_to_name.push_back (names [i]); + name_to_rk [names [i]] = i; + } +} + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/node.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/node.h new file mode 100644 index 000000000..76babf5b7 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/node.h @@ -0,0 +1,52 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef __node_h +#define __node_h + +#include +#include + +extern int getNodeRank (); /* It gives the rank of the calling process */ + +extern int getNumberOfNodes (); /* It gives the size of the environment (Total number of nodes) */ + +extern int getRankFromName (const std :: string & __name); /* It gives the rank of the process + expressed by its name */ + +extern void initNode (int * __argc, char * * * __argv); + +#endif diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/param.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/param.cpp new file mode 100644 index 000000000..821e58179 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/param.cpp @@ -0,0 +1,49 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include + +#include "schema.h" + +void loadRMCParameters (int & __argc, char * * & __argv) { + + eoParser parser (__argc, __argv); + + /* Schema */ + eoValueParam schema_param ("schema.xml", "schema", "?"); + parser.processParam (schema_param); + loadSchema (schema_param.value ().c_str ()); +} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/param.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/param.h new file mode 100644 index 000000000..b868a1db7 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/param.h @@ -0,0 +1,42 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef __rmc_param_h +#define __rmc_param_h + +extern void loadRMCParameters (int & __argc, char * * & __argv); + +#endif diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/recv.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/recv.cpp new file mode 100644 index 000000000..39b98fd79 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/recv.cpp @@ -0,0 +1,140 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include "comm.h" +#include "tags.h" +#include "worker.h" +#include "scheduler.h" +#include "mess.h" +#include "node.h" +#include "../../core/runner.h" +#include "../../core/cooperative.h" +#include "../../core/peo_debug.h" + +void receiveMessages () { + + cleanBuffers (); + + do { + + if (! atLeastOneActiveThread ()) { + // printDebugMessage ("debut wait"); + waitMessage (); + //printDebugMessage ("fin wait"); + } + + int src, tag; + + while (probeMessage (src, tag)) { + + receiveMessage (src, tag); + initMessage (); + /* + char b [1000]; + sprintf (b, "traitement recv %d\n", tag); + printDebugMessage (b); + */ + + switch (tag) { + + case RUNNER_STOP_TAG: + unpackTerminationOfRunner (); + wakeUpCommunicator (); + break; + + case COOP_TAG: + // printDebugMessage ("reception de message de cooperation"); + COOP_ID coop_id; + unpack (coop_id); + getCooperative (coop_id) -> unpack (); + break; + + case SCHED_REQUEST_TAG: + unpackResourceRequest (); + break; + + case SCHED_RESULT_TAG: + { + /* Unpacking the resource */ + SERVICE_ID serv_id; + unpack (serv_id); + Service * serv = getService (serv_id); + int dest; + unpack (dest); + WORKER_ID worker_id; + unpack (worker_id); + + /* Going back ... */ + initMessage (); + pack (worker_id); + pack (serv_id); + serv -> packData (); + serv -> notifySendingData (); + sendMessage (dest, TASK_DATA_TAG); + break; + } + + case TASK_DATA_TAG: + { + WORKER_ID worker_id; + unpack (worker_id); + Worker * worker = getWorker (worker_id); + worker -> setSource (src); + worker -> unpackData (); + worker -> wakeUp (); + break; + } + + case TASK_RESULT_TAG: + { + SERVICE_ID serv_id; + unpack (serv_id); + Service * serv = getService (serv_id); + serv -> unpackResult (); + break; + } + + case TASK_DONE_TAG: + unpackTaskDone (); + break; + + default: + ; + }; + } + + } while (! atLeastOneActiveThread () && atLeastOneActiveRunner () /*&& ! allResourcesFree ()*/); +} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/recv.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/recv.h new file mode 100644 index 000000000..ad6eec330 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/recv.h @@ -0,0 +1,42 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef __recv_h +#define __recv_h + +extern void receiveMessages (); + +#endif diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/rmc.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/rmc.cpp new file mode 100644 index 000000000..21473a057 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/rmc.cpp @@ -0,0 +1,75 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include "send.h" +#include "worker.h" +#include "schema.h" +#include "comm.h" +#include "scheduler.h" +#include "../../core/peo_debug.h" + +static std :: vector ll_threads; /* Low level threads */ + +void runRMC () { + + /* Worker(s) ? */ + for (unsigned i = 0; i < my_node -> num_workers; i ++) + addThread (new Worker, ll_threads); + + wakeUpCommunicator (); +} + +void initRMC (int & __argc, char * * & __argv) { + + /* Communication */ + initCommunication (); + addThread (new Communicator (& __argc, & __argv), ll_threads); + waitNodeInitialization (); + initSending (); + + /* Scheduler */ + if (isScheduleNode ()) + initScheduler (); + + /// +} + +void finalizeRMC () { + + printDebugMessage ("before join threads RMC"); + joinThreads (ll_threads); + printDebugMessage ("after join threads RMC"); +} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/runner.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/runner.cpp new file mode 100644 index 000000000..2b844a2aa --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/runner.cpp @@ -0,0 +1,61 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include "../../core/messaging.h" +#include "../../core/runner.h" +#include "node.h" +#include "send.h" +#include "tags.h" +#include "schema.h" + +bool Runner :: isLocal () { + + for (unsigned i = 0; i < my_node -> id_run.size (); i ++) + if (my_node -> id_run [i] == id) + return true; + return false; +} + +void Runner :: packTermination () { + + pack (id); +} + +void Runner :: terminate () { + + sendToAll (this, RUNNER_STOP_TAG); +} + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/scheduler.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/scheduler.cpp new file mode 100644 index 000000000..aef662050 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/scheduler.cpp @@ -0,0 +1,106 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include + +#include "scheduler.h" +#include "tags.h" +#include "mess.h" +#include "../../core/peo_debug.h" + +static std :: queue resources; /* Free resources */ + +static std :: queue requests; /* Requests */ + +static unsigned initNumberOfRes = 0; + +void initScheduler () { + + for (unsigned i = 0; i < the_schema.size (); i ++) { + + const Node & node = the_schema [i]; + + if (node.rk_sched == my_node -> rk) + for (unsigned j = 0; j < node.num_workers; j ++) + resources.push (std :: pair (i, j + 1)); + } + initNumberOfRes = resources.size (); +} + +bool allResourcesFree () { + + return resources.size () == initNumberOfRes; +} + +static void update () { + + unsigned num_alloc = std :: min (resources.size (), requests.size ()); + + for (unsigned i = 0; i < num_alloc; i ++) { + + SCHED_REQUEST req = requests.front (); + requests.pop (); + + SCHED_RESOURCE res = resources.front (); + resources.pop (); + + printDebugMessage ("allocating a resource."); + initMessage (); + pack (req.second); + pack (res); + sendMessage (req.first, SCHED_RESULT_TAG); + } +} + +void unpackResourceRequest () { + + printDebugMessage ("queuing a resource request."); + SCHED_REQUEST req; + unpack (req); + requests.push (req); + update (); +} + +void unpackTaskDone () { + + printDebugMessage ("I'm notified a worker is now idle."); + SCHED_RESOURCE res; + unpack (res); + resources.push (res); + if (resources.size () == initNumberOfRes) + printDebugMessage ("all the resources are now free."); + update (); +} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/scheduler.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/scheduler.h new file mode 100644 index 000000000..cbb61891a --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/scheduler.h @@ -0,0 +1,60 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef __scheduler_h +#define __scheduler_h + +#include + +#include "schema.h" +#include "worker.h" + +typedef std :: pair SCHED_RESOURCE; + +typedef std :: pair SCHED_REQUEST; + +/* Initializing the list of available workers */ +extern void initScheduler (); + +/* Processing a resource request from a service */ +extern void unpackResourceRequest (); + +/* Being known a worker is now idle :-) */ +extern void unpackTaskDone (); + +extern bool allResourcesFree (); + +#endif diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/schema.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/schema.cpp new file mode 100644 index 000000000..56736ec7a --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/schema.cpp @@ -0,0 +1,163 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include +#include + +#include "schema.h" +#include "xml_parser.h" +#include "comm.h" +#include "node.h" +#include "../../core/peo_debug.h" + +std :: vector the_schema; + +Node * my_node; + +RANK_ID getRankOfRunner (RUNNER_ID __key) { + + for (unsigned i = 0; i < the_schema.size (); i ++) + for (unsigned j = 0; j < the_schema [i].id_run.size (); j ++) + if (the_schema [i].id_run [j] == __key) + return the_schema [i].rk; + assert (false); + return 0; +} + +static void loadNode (int __rk_sched) { + + Node node; + + node.rk_sched = __rk_sched; + + /* ATT: name*/ + node.rk = getRankFromName (getAttributeValue ("name")); + /* ATT: num_workers */ + node.num_workers = atoi (getAttributeValue ("num_workers").c_str ()); + + while (true) { + + /* TAG: | */ + std :: string name = getNextNode (); + assert (name == "runner" || name == "node"); + if (name == "runner") { + /* TAG: */ + node.id_run.push_back (atoi (getNextNode ().c_str ())); + /* TAG:
*/ + assert (getNextNode () == "runner"); + } + else { + /* TAG: */ + the_schema.push_back (node); + break; + } + } +} + +static void loadGroup () { + + std :: string name; + + /* ATT: scheduler*/ + int rk_sched = getRankFromName (getAttributeValue ("scheduler")); + + while (true) { + + /* TAG: | */ + name = getNextNode (); + assert (name == "node" || name == "group"); + if (name == "node") + /* TAG: */ + loadNode (rk_sched); + else + /* TAG: */ + break; + } +} + +bool isScheduleNode () { + + return my_node -> rk == my_node -> rk_sched; +} + +void loadSchema (const char * __filename) { + + openXMLDocument (__filename); + + std :: string name; + + /* TAG: */ + name = getNextNode (); + assert (name == "schema"); + + while (true) { + + /* TAG: | */ + name = getNextNode (); + assert (name == "group" || name == "schema"); + if (name == "group") + /* TAG: */ + loadGroup (); + else + /* TAG: */ + break; + } + + /* Looking for my node */ + for (unsigned i = 0; i < the_schema.size (); i ++) + if (the_schema [i].rk == getNodeRank ()) + my_node = & (the_schema [i]); + + /* About me */ + char mess [1000]; + + sprintf (mess, "my rank is %d", my_node -> rk); + printDebugMessage (mess); + if (isScheduleNode ()) + printDebugMessage ("I'am a scheduler"); + for (unsigned i = 0; i < my_node -> id_run.size (); i ++) { + sprintf (mess, "I manage the runner %d", my_node -> id_run [i]); + printDebugMessage (mess); + } + if (my_node -> num_workers) { + + sprintf (mess, "I manage %d worker(s)", my_node -> num_workers); + printDebugMessage (mess); + } + + closeXMLDocument (); +} + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/schema.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/schema.h new file mode 100644 index 000000000..5982bf41b --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/schema.h @@ -0,0 +1,67 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef __schema_h +#define __schema_h + +#include +#include +#include + +#include "../../core/runner.h" + +typedef int RANK_ID; + +struct Node { + + RANK_ID rk; /* Rank */ + std :: string name; /* Host name */ + unsigned num_workers; /* Number of parallel workers */ + int rk_sched; /* rank of the scheduler */ + std :: vector id_run; /* List of runners */ +}; + +extern std :: vector the_schema; + +extern Node * my_node; + +extern void loadSchema (const char * __filename); + +extern RANK_ID getRankOfRunner (RUNNER_ID __key); + +extern bool isScheduleNode (); + +#endif diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/send.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/send.cpp new file mode 100644 index 000000000..f2209884b --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/send.cpp @@ -0,0 +1,144 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include +#include +#include + +#include "tags.h" +#include "comm.h" +#include "worker.h" +#include "scheduler.h" +#include "mess.h" +#include "node.h" +#include "../../core/cooperative.h" +#include "../../core/peo_debug.h" + +#define TO_ALL -1 + +typedef struct { + + Communicable * comm; + int to; + int tag; + +} SEND_REQUEST; + +static std :: queue mess; + +static sem_t sem_send; + +void initSending () { + + sem_init (& sem_send, 0, 1); +} + +void send (Communicable * __comm, int __to, int __tag) { + + SEND_REQUEST req; + req.comm = __comm; + req.to = __to; + req.tag = __tag; + + sem_wait (& sem_send); + mess.push (req); + sem_post (& sem_send); + wakeUpCommunicator (); +} + +void sendToAll (Communicable * __comm, int __tag) { + + send (__comm, TO_ALL, __tag); +} + +void sendMessages () { + + sem_wait (& sem_send); + + while (! mess.empty ()) { + + SEND_REQUEST req = mess.front (); + /* + char b [1000]; + sprintf (b, "traitement send %d\n", req.tag); + printDebugMessage (b); + */ + + Communicable * comm = req.comm; + + initMessage (); + + switch (req.tag) { + + case RUNNER_STOP_TAG: + dynamic_cast (comm) -> packTermination (); + dynamic_cast (comm) -> notifySendingTermination (); + break; + + case COOP_TAG: + dynamic_cast (comm) -> pack (); + dynamic_cast (comm) -> notifySending (); + break; + + case SCHED_REQUEST_TAG: + dynamic_cast (comm) -> packResourceRequest (); + dynamic_cast (comm) -> notifySendingResourceRequest (); + break; + + case TASK_RESULT_TAG: + dynamic_cast (comm) -> packResult (); + dynamic_cast (comm) -> notifySendingResult (); + break; + + case TASK_DONE_TAG: + dynamic_cast (comm) -> packTaskDone (); + dynamic_cast (comm) -> notifySendingTaskDone (); + break; + + default : + break; + + }; + + if (req.to == TO_ALL) + sendMessageToAll (req.tag); + else + sendMessage (req.to, req.tag); + mess.pop (); + } + + sem_post (& sem_send); +} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/send.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/send.h new file mode 100644 index 000000000..b1bdc2300 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/send.h @@ -0,0 +1,50 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef __send_h +#define __send_h + +#include "../../core/communicable.h" + +extern void initSending (); + +extern void send (Communicable * __comm, int __to, int __tag); + +extern void sendToAll (Communicable * __comm, int __tag); + +extern void sendMessages (); + +#endif diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/service.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/service.cpp new file mode 100644 index 000000000..f26f70b3d --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/service.cpp @@ -0,0 +1,58 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include "../../core/service.h" +#include "../../core/messaging.h" +#include "node.h" +#include "tags.h" +#include "send.h" +#include "scheduler.h" + +void Service :: requestResourceRequest (unsigned __how_many) { + + num_sent_rr = __how_many; + for (unsigned i = 0; i < __how_many; i ++) + send (this, my_node -> rk_sched, SCHED_REQUEST_TAG); +} + +void Service :: packResourceRequest () { + + SCHED_REQUEST req; + req.first = getNodeRank (); + req.second = getKey (); + // printf ("demande de ressource pour %d\n", req.second); + :: pack (req); +} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/tags.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/tags.h new file mode 100644 index 000000000..3e4e15009 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/tags.h @@ -0,0 +1,52 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef __tags_h +#define __tags_h + +#define RUNNER_STOP_TAG 13 + +#define COOP_TAG 14 + +#define SCHED_REQUEST_TAG 16 + +#define SCHED_RESULT_TAG 17 +#define TASK_DATA_TAG 18 + +#define TASK_RESULT_TAG 19 +#define TASK_DONE_TAG 20 + +#endif diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/worker.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/worker.cpp new file mode 100644 index 000000000..53ad72925 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/worker.cpp @@ -0,0 +1,121 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include + +#include "tags.h" +#include "send.h" +#include "node.h" +#include "schema.h" +#include "worker.h" +#include "mess.h" +#include "../../core/peo_debug.h" + +static std :: vector key_to_worker (1); /* Vector of registered workers */ + +Worker * getWorker (WORKER_ID __key) { + + return key_to_worker [__key]; +} + +Worker :: Worker () { + + toto = false; + id = key_to_worker.size (); + key_to_worker.push_back (this); +} + +void Worker :: packResult () { + + pack (serv_id); + serv -> packResult (); +} + +void Worker :: unpackData () { + + printDebugMessage ("unpacking the ID. of the service."); + unpack (serv_id); + serv = getService (serv_id); + printDebugMessage ("found the service."); + serv -> unpackData (); + printDebugMessage ("unpacking the data."); + setActive (); +} + +void Worker :: packTaskDone () { + + pack (getNodeRank ()); + pack (id); +} + +void Worker :: notifySendingResult () { + + /* Notifying the scheduler of the termination */ + toto = true; + wakeUp (); +} + +void Worker :: notifySendingTaskDone () { + + setPassive (); +} + +void Worker :: setSource (int __rank) { + + src = __rank; +} + +void Worker :: start () { + + while (true) { + + sleep (); + + if (! atLeastOneActiveRunner ()) + break; + + if (toto) { + send (this, my_node -> rk_sched, TASK_DONE_TAG); + toto = false; + } + else { + + printDebugMessage ("executing the task."); + serv -> execute (); + send (this, src, TASK_RESULT_TAG); + } + } +} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/worker.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/worker.h new file mode 100644 index 000000000..43c4ec62c --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/worker.h @@ -0,0 +1,78 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef __worker_h +#define __worker_h + +#include "../../core/communicable.h" +#include "../../core/reac_thread.h" +#include "../../core/service.h" + +typedef unsigned WORKER_ID; + +class Worker : public Communicable, public ReactiveThread { + +public : + + Worker (); + + void start (); + + void packResult (); + + void unpackData (); + + void packTaskDone (); + + void notifySendingResult (); + + void notifySendingTaskDone (); + + void setSource (int __rank); + +private : + + WORKER_ID id; + SERVICE_ID serv_id; + Service * serv; + int src; + + bool toto; +}; + +extern Worker * getWorker (WORKER_ID __key); + +#endif diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/xml_parser.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/xml_parser.cpp new file mode 100644 index 000000000..1f044ba90 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/xml_parser.cpp @@ -0,0 +1,103 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include + +#include "xml_parser.h" + +static xmlTextReaderPtr reader; + +void openXMLDocument (const char * __filename) { + + reader = xmlNewTextReaderFilename (__filename); + + if (! reader) { + + fprintf (stderr, "unable to open '%s'.\n", __filename); + exit (1); + } +} + +void closeXMLDocument () { + + xmlFreeTextReader (reader); +} + +std :: string getAttributeValue (const std :: string & __attr) { + + xmlChar * value = xmlTextReaderGetAttribute (reader, (const xmlChar *) __attr.c_str ()); + + std :: string str ((const char *) value); + + xmlFree (value); + + return str; +} + +static bool isSep (const xmlChar * __text) { + + for (unsigned i = 0; i < strlen ((char *) __text); i ++) + if (__text [i] != ' ' && __text [i] != '\t' && __text [i] != '\n') + return false; + return true; +} + +std :: string getNextNode () { + + xmlChar * name, * value; + + do { + xmlTextReaderRead (reader); + name = xmlTextReaderName (reader); + value = xmlTextReaderValue (reader); + // printf ("value = %s\n", value); + } while (! strcmp ((char *) name, "#text") && isSep (value)); + + std :: string str; + + if (strcmp ((char *) name, "#text")) + str.assign ((char *) name); + else + str.assign ((char *) value); + + if (name) + xmlFree (name); + if (value) + xmlFree (value); + + return str; +} + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/xml_parser.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/xml_parser.h new file mode 100644 index 000000000..b54fbeed9 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/src/rmc/mpi/xml_parser.h @@ -0,0 +1,50 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef __xml_parser_h +#define __xml_parser_h + +#include + +extern void openXMLDocument (const char * __filename); + +extern void closeXMLDocument (); + +extern std :: string getAttributeValue (const std :: string & __attr); + +extern std :: string getNextNode (); + +#endif diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/test/CMakeLists.txt b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/test/CMakeLists.txt new file mode 100644 index 000000000..5bfa40daf --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/test/CMakeLists.txt @@ -0,0 +1,115 @@ +############################################################################### +## +## CMakeLists file for ParadisEO-PEO/test +## +############################################################################### + + + +###################################################################################### +### 1) Include the sources +###################################################################################### + +INCLUDE_DIRECTORIES(${EO_SRC_DIR}/src) +INCLUDE_DIRECTORIES(${MO_SRC_DIR}/src) +INCLUDE_DIRECTORIES(${ParadisEO-PEO_SOURCE_DIR}/src) +INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}) +INCLUDE(CheckLibraryExists) + +SET (CMAKE_CXX_COMPILER mpicxx) +ADD_CUSTOM_TARGET(install DEPENDS ${ParadisEO-PEO_SOURCE_DIR}/test/lesson.param ${ParadisEO-PEO_SOURCE_DIR}/test/schema.xml) +ADD_CUSTOM_COMMAND( + TARGET install + POST_BUILD + COMMAND ${CMAKE_COMMAND} + ARGS -E copy_if_different + ${ParadisEO-PEO_SOURCE_DIR}/test/lesson.param + ${ParadisEO-PEO_BINARY_DIR}/test) +ADD_CUSTOM_COMMAND( + TARGET install + POST_BUILD + COMMAND ${CMAKE_COMMAND} + ARGS -E copy_if_different + ${ParadisEO-PEO_SOURCE_DIR}/test/schema.xml + ${ParadisEO-PEO_BINARY_DIR}/test) +###################################################################################### + + +###################################################################################### +### 2) Specify where CMake can find the libraries +###################################################################################### + +IF(NOT WIN32 OR CYGWIN) + LINK_DIRECTORIES(${EO_BIN_DIR}/lib ${ParadisEO-PEO_BINARY_DIR}/lib ) +ENDIF(NOT WIN32 OR CYGWIN) + +# especially for Visual Studio +IF(WIN32 AND NOT CYGWIN) + LINK_DIRECTORIES(${EO_BIN_DIR}\\lib\\${CMAKE_BUILD_TYPE} + ${ParadisEO-PEO_BINARY_DIR}\\lib\\${CMAKE_BUILD_TYPE}) +ENDIF(WIN32 AND NOT CYGWIN) + +###################################################################################### + + + +###################################################################################### +### 3) Define your targets and link the librairies +###################################################################################### + +SET (TEST_LIST t-peo + t-peoPSO + t-peoInsularPSO + ) + +SET (TEST_LIBRARY t-peoPSOPara + t-peoPSOParaIsland) + + +FOREACH (test ${TEST_LIST} ${TEST_LIBRARY}) + SET ("T_${test}_SOURCES" "${test}.cpp") +ENDFOREACH (test) + + +IF(ENABLE_CMAKE_TESTING) + + # Add the tests + FOREACH (test ${TEST_LIST} ${TEST_LIBRARY}) + ADD_EXECUTABLE(${test} ${T_${test}_SOURCES}) + ENDFOREACH (test) + + FOREACH (test ${TEST_LIST}) + ADD_TEST(${test} ${test}) + ENDFOREACH (test) + + # Link the librairies + FOREACH (test ${TEST_LIST} ${TEST_LIBRARY}) + TARGET_LINK_LIBRARIES(${test} peo ${XML2_LIBS} rmc_mpi ga es eoutils eo) + ENDFOREACH (test) + +ENDIF(ENABLE_CMAKE_TESTING) + +###################################################################################### + + +###################################################################################### +### 5) Windows advanced config - especially for Microsoft Visual Studio 8 +###################################################################################### + + IF(CMAKE_CXX_COMPILER MATCHES cl) + IF(NOT WITH_SHARED_LIBS) + IF(CMAKE_GENERATOR STREQUAL "Visual Studio 8 2005") + SET(CMAKE_CXX_FLAGS "/nologo /W3 /Gy") + SET(CMAKE_CXX_FLAGS_DEBUG "/MTd /Z7 /Od") + SET(CMAKE_CXX_FLAGS_RELEASE "/MT /O2") + SET(CMAKE_CXX_FLAGS_MINSIZEREL "/MT /O2") + SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "/MTd /Z7 /Od") + SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SUBSYSTEM:CONSOLE") + + ENDIF(CMAKE_GENERATOR STREQUAL "Visual Studio 8 2005") + ENDIF(NOT WITH_SHARED_LIBS) + ENDIF(CMAKE_CXX_COMPILER MATCHES cl) +###################################################################################### + + + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/test/lesson.param b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/test/lesson.param new file mode 100644 index 000000000..eb843c65f --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/test/lesson.param @@ -0,0 +1,12 @@ +## miscallenous parameters + +--debug=false + +## deployment schema + +--schema=schema.xml + +## parameters + +--inst=../examples/tsp/benchs/eil101.tsp + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/test/schema.xml b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/test/schema.xml new file mode 100644 index 000000000..9b8bf316c --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/test/schema.xml @@ -0,0 +1,19 @@ + + + + + + + + + 1 + 2 + + + + + + + + + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/test/t-peo.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/test/t-peo.cpp new file mode 100644 index 000000000..2772a1fe0 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/test/t-peo.cpp @@ -0,0 +1,54 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ +//----------------------------------------------------------------------------- +// t-peo.cpp +//----------------------------------------------------------------------------- + +#include + +//----------------------------------------------------------------------------- + + +//----------------------------------------------------------------------------- + +int main() +{ + std::cout << "Please fill the test" << std::endl; + + return 0; +} + +//----------------------------------------------------------------------------- diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/test/t-peoInsularPSO.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/test/t-peoInsularPSO.cpp new file mode 100644 index 000000000..9c2b8a66d --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/test/t-peoInsularPSO.cpp @@ -0,0 +1,130 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Clive Canape +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* clive.canape@inria.fr +*/ +//----------------------------------------------------------------------------- +// t-peoInsularPSO.cpp +//----------------------------------------------------------------------------- + +#include + +#define N 4 + +typedef eoRealParticle < double >Indi; +double f (const Indi & _indi) +{ + const double PI = 4.0 * atan(1.0); + double sum=0.; + for (unsigned i = 0; i < _indi.size()-1; i++) + sum+=pow((_indi[i]-1),2)*(1+pow(sin(3*PI*_indi[i+1]),2)); + sum+=pow(sin(3*PI*_indi[0]),2); + sum+=(_indi[_indi.size()-1]-1)*(1+pow(sin(2*PI*_indi[_indi.size()-1]),2)); + return (-sum); + +} + +template < class POT > class eoPrint : public eoContinue +{ + public : + + bool operator () (const eoPop & __pop) + { + double result[__pop.size()]; + for(unsigned i=0;i<__pop.size();i++) + result[i]=__pop[i].best(); + std::sort(result,result+__pop.size()); + std::cout << "\n"< plainEvalSeq(f); + eoEvalFuncCounter < Indi > evalSeq (plainEvalSeq); + eoUniformGenerator < double >uGen (INIT_POSITION_MIN, INIT_POSITION_MAX); + eoInitFixedLength < Indi > random (VEC_SIZE, uGen); + eoUniformGenerator < double >sGen (INIT_VELOCITY_MIN, INIT_VELOCITY_MAX); + eoVelocityInitFixedLength < Indi > veloRandom (VEC_SIZE, sGen); + eoFirstIsBestInit < Indi > localInit; + eoRealVectorBounds bndsFlight(VEC_SIZE,INIT_POSITION_MIN,INIT_POSITION_MAX); + eoStandardFlight < Indi > flight(bndsFlight); + eoPop < Indi > popSeq; + popSeq.append (POP_SIZE, random); + apply(evalSeq, popSeq);; + apply < Indi > (veloRandom, popSeq); + apply < Indi > (localInit, popSeq); + eoLinearTopology topologySeq(NEIGHBORHOOD_SIZE); + topologySeq.setup(popSeq); + eoRealVectorBounds bndsSeq(VEC_SIZE,INIT_VELOCITY_MIN,INIT_VELOCITY_MAX); + eoStandardVelocity < Indi > velocitySeq (topologySeq,C1,C2,bndsSeq); + eoGenContinue < Indi > genContSeq (MAX_GEN); + eoPrint printSeq; + eoCombinedContinue continuatorSeq(genContSeq); + continuatorSeq.add(printSeq); + eoCheckPoint checkpointSeq(continuatorSeq); + eoSyncEasyPSO < Indi > psaSeq(checkpointSeq, evalSeq, velocitySeq, flight); + psaSeq (popSeq); + popSeq.sort (); +} + +void peoPSOPara() +{ + char *tmp="mpiexec -n ",*tmp2=" ./t-peoPSOParaIsland @lesson.param ",tmp3[4],buffer[256]; + sprintf(tmp3,"%d",N); + strcpy(buffer,tmp); + strcat(buffer,tmp3); + strcat(buffer,tmp2); + system(buffer); +} + +int main (int __argc, char *__argv[]) +{ + + peoPSOSeq (); + peoPSOPara(); +} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/test/t-peoPSO.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/test/t-peoPSO.cpp new file mode 100644 index 000000000..90cb5e349 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/test/t-peoPSO.cpp @@ -0,0 +1,119 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Clive Canape +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* clive.canape@inria.fr +*/ +//----------------------------------------------------------------------------- +// t-peoPSO.cpp +//----------------------------------------------------------------------------- + +#include + +#define N 4 + +typedef eoRealParticle < double >Indi; +double f (const Indi & _indi) +{ + double sum = 0; + for (unsigned i = 0; i < _indi.size (); i++) + sum += pow(_indi[i],2); + return (-sum); +} + +double peoPSOSeq () +{ + clock_t beginSeq,endSeq; + double timeSeq; + const unsigned int VEC_SIZE = 2; + const unsigned int POP_SIZE = 10; + const unsigned int NEIGHBORHOOD_SIZE= 5; + const unsigned int MAX_GEN = 5000; + const double FIT_CONT = -1e-6; + const double INIT_POSITION_MIN = -5.0; + const double INIT_POSITION_MAX = 5.0; + const double INIT_VELOCITY_MIN = -1; + const double INIT_VELOCITY_MAX = 1; + const double C1 = 2; + const double C2 = 2; + rng.reseed (36); + beginSeq=clock(); + eoEvalFuncPtr plainEvalSeq(f); + eoEvalFuncCounter < Indi > evalSeq (plainEvalSeq); + eoUniformGenerator < double >uGen (INIT_POSITION_MIN, INIT_POSITION_MAX); + eoInitFixedLength < Indi > random (VEC_SIZE, uGen); + eoUniformGenerator < double >sGen (INIT_VELOCITY_MIN, INIT_VELOCITY_MAX); + eoVelocityInitFixedLength < Indi > veloRandom (VEC_SIZE, sGen); + eoFirstIsBestInit < Indi > localInit; + eoRealVectorBounds bndsFlight(VEC_SIZE,INIT_POSITION_MIN,INIT_POSITION_MAX); + eoStandardFlight < Indi > flight(bndsFlight); + eoPop < Indi > popSeq; + popSeq.append (POP_SIZE, random); + apply(evalSeq, popSeq);; + apply < Indi > (veloRandom, popSeq); + apply < Indi > (localInit, popSeq); + eoLinearTopology topologySeq(NEIGHBORHOOD_SIZE); + topologySeq.setup(popSeq); + eoRealVectorBounds bndsSeq(VEC_SIZE,INIT_VELOCITY_MIN,INIT_VELOCITY_MAX); + eoStandardVelocity < Indi > velocitySeq (topologySeq,C1,C2,bndsSeq); + eoGenContinue < Indi > genContSeq (MAX_GEN); + eoFitContinue < Indi > fitContSeq (FIT_CONT); + eoCombinedContinue continuatorSeq (genContSeq); + continuatorSeq.add(fitContSeq); + eoCheckPoint checkpointSeq(continuatorSeq); + eoSyncEasyPSO < Indi > psaSeq(checkpointSeq, evalSeq, velocitySeq, flight); +//Sequential + psaSeq (popSeq); + popSeq.sort (); + endSeq=clock(); + timeSeq = endSeq-beginSeq; + return timeSeq; +} + +void peoPSOPara(long int arg) +{ + char *tmp="mpiexec -n ",*tmp2=" ./t-peoPSOPara @lesson.param ",tmp3[4],buffer[256]; + sprintf(tmp3,"%d",N); + strcpy(buffer,tmp); + strcat(buffer,tmp3); + strcat(buffer,tmp2); + sprintf(tmp3,"%ld",arg); + strcat(buffer,tmp3); + system(buffer); +} + +int main (int __argc, char *__argv[]) +{ + long int timeSeq; + timeSeq=(long int)peoPSOSeq (); + peoPSOPara(timeSeq); +} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/test/t-peoPSOPara.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/test/t-peoPSOPara.cpp new file mode 100644 index 000000000..1ae3d10cf --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/test/t-peoPSOPara.cpp @@ -0,0 +1,107 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Clive Canape +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* clive.canape@inria.fr +*/ +//----------------------------------------------------------------------------- +// t-peoPSOPara.cpp +//----------------------------------------------------------------------------- + +#include +#include "../src/rmc/mpi/schema.h" +#include "../src/rmc/mpi/node.h" + +typedef eoRealParticle < double >Indi; +double f (const Indi & _indi) +{ + double sum = 0; + for (unsigned i = 0; i < _indi.size (); i++) + sum += pow(_indi[i],2); + return (-sum); +} + +int main (int __argc, char *__argv[]) +{ + peo :: init( __argc, __argv ); + clock_t begin,end; + double time; + const unsigned int VEC_SIZE = 2; + const unsigned int POP_SIZE = 10; + const unsigned int NEIGHBORHOOD_SIZE= 5; + const unsigned int MAX_GEN = 500; + const double FIT_CONT = -1e-6; + const double INIT_POSITION_MIN = -5.0; + const double INIT_POSITION_MAX = 5.0; + const double INIT_VELOCITY_MIN = -1; + const double INIT_VELOCITY_MAX = 1; + const double C1 = 2; + const double C2 = 2; + rng.reseed (36); + if((isScheduleNode())&&(__argc >= 3)) + begin=clock(); + peoEvalFuncPSO plainEvalPara(f); + eoEvalFuncCounter < Indi > evalStartPara (plainEvalPara); + peoParaPopEval< Indi > evalPara(plainEvalPara); + eoUniformGenerator < double >uGen (INIT_POSITION_MIN, INIT_POSITION_MAX); + eoInitFixedLength < Indi > random (VEC_SIZE, uGen); + eoUniformGenerator < double >sGen (INIT_VELOCITY_MIN, INIT_VELOCITY_MAX); + eoVelocityInitFixedLength < Indi > veloRandom (VEC_SIZE, sGen); + eoFirstIsBestInit < Indi > localInit; + eoRealVectorBounds bndsFlight(VEC_SIZE,INIT_POSITION_MIN,INIT_POSITION_MAX); + eoStandardFlight < Indi > flight(bndsFlight); + eoPop < Indi > popPara; + popPara.append (POP_SIZE, random); + apply(evalStartPara, popPara); + apply < Indi > (veloRandom, popPara); + apply < Indi > (localInit, popPara); + eoLinearTopology topologyPara(NEIGHBORHOOD_SIZE); + topologyPara.setup(popPara); + eoRealVectorBounds bndsPara(VEC_SIZE,INIT_VELOCITY_MIN,INIT_VELOCITY_MAX); + eoStandardVelocity < Indi > velocityPara (topologyPara,C1,C2,bndsPara); + eoGenContinue < Indi > genContPara (MAX_GEN); + eoFitContinue < Indi > fitContPara (FIT_CONT); + eoCombinedContinue continuatorPara (genContPara); + continuatorPara.add(fitContPara); + eoCheckPoint checkpointPara(continuatorPara); + peoPSO < Indi > psaPara(checkpointPara, evalPara, velocityPara, flight); + psaPara(popPara); + peo :: run(); + peo :: finalize(); + if((isScheduleNode())&&(__argc >= 3)) + { + end=clock(); + time=end-begin; + std::cout<<"\n\nEfficiency : "<<(atoi(__argv[2])/(time*getNumberOfNodes()))<<"\n"; + } + return 1; +} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/test/t-peoPSOParaIsland.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/test/t-peoPSOParaIsland.cpp new file mode 100644 index 000000000..975d8bdbf --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/test/t-peoPSOParaIsland.cpp @@ -0,0 +1,170 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Clive Canape +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* clive.canape@inria.fr +*/ +//----------------------------------------------------------------------------- +// t-peoPSOParaIsland.cpp +//----------------------------------------------------------------------------- + +#include + +typedef eoRealParticle < double >Indi; + + +//Evaluation function +double f (const Indi & _indi) +{ + + const double PI = 4.0 * atan(1.0); + double sum=0.; + for (unsigned i = 0; i < _indi.size()-1; i++) + sum+=pow((_indi[i]-1),2)*(1+pow(sin(3*PI*_indi[i+1]),2)); + sum+=pow(sin(3*PI*_indi[0]),2); + sum+=(_indi[_indi.size()-1]-1)*(1+pow(sin(2*PI*_indi[_indi.size()-1]),2)); + return (-sum); + +} + +template < class POT > class eoPrint : public eoContinue +{ + public : + + bool operator () (const eoPop & __pop) + { + double result[__pop.size()]; + for(unsigned i=0;i<__pop.size();i++) + result[i]=__pop[i].best(); + std::sort(result,result+__pop.size()); + std::cout << "\n"< plainEval(f); + eoUniformGenerator < double >uGen (INIT_POSITION_MIN, INIT_POSITION_MAX); + eoInitFixedLength < Indi > random (VEC_SIZE, uGen); + eoUniformGenerator < double >sGen (INIT_VELOCITY_MIN, INIT_VELOCITY_MAX); + eoVelocityInitFixedLength < Indi > veloRandom (VEC_SIZE, sGen); + eoFirstIsBestInit < Indi > localInit; + eoRealVectorBounds bndsFlight(VEC_SIZE,INIT_POSITION_MIN,INIT_POSITION_MAX); + eoStandardFlight < Indi > flight(bndsFlight); + eoEvalFuncCounter < Indi > evalSeq (plainEval); + peoParaPopEval< Indi > eval(plainEval); + eoPop < Indi > pop; + pop.append (POP_SIZE, random); + apply(evalSeq, pop); + apply < Indi > (veloRandom, pop); + apply < Indi > (localInit, pop); + eoLinearTopology topology(NEIGHBORHOOD_SIZE); + topology.setup(pop); + eoRealVectorBounds bnds(VEC_SIZE,INIT_VELOCITY_MIN,INIT_VELOCITY_MAX); + eoStandardVelocity < Indi > velocity (topology,C1,C2,bnds); + eoGenContinue < Indi > genContPara (MAX_GEN); + eoPrint print; + eoCombinedContinue continuator(genContPara); + continuator.add(print); + eoCheckPoint checkpoint(continuator); + RingTopology topologyMig; + /*******************************************************************/ + eoPeriodicContinue< Indi > mig_cont( MIG_FREQ ); + peoPSOSelect mig_selec(topology); + eoSelectNumber< Indi > mig_select(mig_selec); + peoPSOReplacement mig_replace; +/*****************************************************************/ + + peoEvalFuncPSO plainEval2(f); + eoUniformGenerator < double >uGen2 (INIT_POSITION_MIN, INIT_POSITION_MAX); + eoInitFixedLength < Indi > random2 (VEC_SIZE, uGen); + eoUniformGenerator < double >sGen2 (INIT_VELOCITY_MIN, INIT_VELOCITY_MAX); + eoVelocityInitFixedLength < Indi > veloRandom2 (VEC_SIZE, sGen2); + eoFirstIsBestInit < Indi > localInit2; + eoRealVectorBounds bndsFlight2(VEC_SIZE,INIT_POSITION_MIN,INIT_POSITION_MAX); + eoStandardFlight < Indi > flight2(bndsFlight2); + eoEvalFuncCounter < Indi > evalSeq2 (plainEval2); + peoParaPopEval< Indi > eval2(plainEval2); + eoPop < Indi > pop2; + pop2.append (POP_SIZE, random2); + apply(evalSeq2, pop2); + apply < Indi > (veloRandom2, pop2); + apply < Indi > (localInit2, pop2); + eoLinearTopology topology2(NEIGHBORHOOD_SIZE); + topology2.setup(pop2); + eoRealVectorBounds bnds2(VEC_SIZE,INIT_VELOCITY_MIN,INIT_VELOCITY_MAX); + eoStandardVelocity < Indi > velocity2 (topology2,C1,C2,bnds2); + eoGenContinue < Indi > genContPara2 (MAX_GEN); + eoCheckPoint checkpoint2(genContPara2); + /*******************************************************************/ + eoPeriodicContinue< Indi > mig_cont2( MIG_FREQ ); + peoPSOSelect mig_selec2(topology2); + eoSelectNumber< Indi > mig_select2(mig_selec2); + peoPSOReplacement mig_replace2; + + peoAsyncIslandMig< Indi > mig( mig_cont, mig_select, mig_replace, topologyMig, pop, pop2); + checkpoint.add( mig ); + peoAsyncIslandMig< Indi > mig2( mig_cont2, mig_select2, mig_replace2, topologyMig, pop2, pop); + checkpoint2.add( mig2 ); + + peoPSO < Indi > psa(checkpoint, eval, velocity, flight); + mig.setOwner( psa ); + psa(pop); + peoPSO < Indi > psa2(checkpoint2, eval2, velocity2, flight2); + mig2.setOwner( psa2 ); + psa2(pop2); + + peo :: run(); + peo :: finalize(); +} + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/CMakeLists.txt b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/CMakeLists.txt new file mode 100644 index 000000000..75912cafb --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/CMakeLists.txt @@ -0,0 +1,16 @@ +# +##################################################################################### +### 1) Definitions (required for tsp target) +###################################################################################### + +SET(TSP_SRC_DIR ${ParadisEO-PEO_SOURCE_DIR}/tutorial/examples/tsp) +SET(TSP_BINARY_DIR ${ParadisEO-PEO_BINARY_DIR}/tutorial/examples/tsp) +###################################################################################### + +###################################################################################### +### 2) Where must cmake go now ? +###################################################################################### + +SUBDIRS(examples Lesson1 Lesson2 Lesson3 Lesson4 Lesson5 Lesson6 Walkthrough) + +###################################################################################### diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson1/CMakeLists.txt b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson1/CMakeLists.txt new file mode 100644 index 000000000..8f9cc5115 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson1/CMakeLists.txt @@ -0,0 +1,105 @@ + +###################################################################################### +### 0) Set the compiler and define targets to easily run the lessons +###################################################################################### + +SET (CMAKE_CXX_COMPILER mpicxx) + +ADD_CUSTOM_TARGET(install DEPENDS ${ParadisEO-PEO_SOURCE_DIR}/tutorial/Lesson1/lesson.param ${ParadisEO-PEO_SOURCE_DIR}/tutorial/Lesson1/schema.xml) + +ADD_CUSTOM_COMMAND( + TARGET install + POST_BUILD + COMMAND ${CMAKE_COMMAND} + ARGS -E copy_if_different + ${ParadisEO-PEO_SOURCE_DIR}/tutorial/Lesson1/lesson.param + ${ParadisEO-PEO_BINARY_DIR}/tutorial/Lesson1) +ADD_CUSTOM_COMMAND( + TARGET install + POST_BUILD + COMMAND ${CMAKE_COMMAND} + ARGS -E copy_if_different + ${ParadisEO-PEO_SOURCE_DIR}/tutorial/Lesson1/schema.xml + ${ParadisEO-PEO_BINARY_DIR}/tutorial/Lesson1) +ADD_CUSTOM_COMMAND( + TARGET install + POST_BUILD + COMMAND ${CMAKE_COMMAND} + ARGS -E copy_if_different + ${ParadisEO-PEO_SOURCE_DIR}/tutorial/Lesson1/ParadisEO-PEO_Lesson1.pdf + ${ParadisEO-PEO_BINARY_DIR}/tutorial/Lesson1) +###################################################################################### + + +###################################################################################### +### 1) Include the sources +###################################################################################### + +INCLUDE_DIRECTORIES(${EO_SRC_DIR}/src ${MO_SRC_DIR}/src ${ParadisEO-PEO_SOURCE_DIR}/src ${TSP_SRC_DIR}) + +###################################################################################### + + +###################################################################################### +### 2) Specify where CMake can find the libraries +###################################################################################### + +IF(NOT WIN32 OR CYGWIN) + LINK_DIRECTORIES(${EO_BIN_DIR}/lib ${ParadisEO-PEO_BINARY_DIR}/lib ${TSP_BINARY_DIR}/lib) +ENDIF(NOT WIN32 OR CYGWIN) + +# especially for Visual Studio +IF(WIN32 AND NOT CYGWIN) + LINK_DIRECTORIES(${EO_BIN_DIR}\\lib\\${CMAKE_BUILD_TYPE} ${ParadisEO-PEO_BINARY_DIR}\\lib\\${CMAKE_BUILD_TYPE} ${TSP_BINARY_DIR}\\lib\\${CMAKE_BUILD_TYPE}) +ENDIF(WIN32 AND NOT CYGWIN) +###################################################################################### + + +###################################################################################### +### 3) Define your target(s): just an executable here +###################################################################################### + +ADD_EXECUTABLE(tspExample main.cpp) +ADD_DEPENDENCIES(tspExample tsp peo rmc_mpi) +###################################################################################### + + +###################################################################################### +### 4) Optionnal: define properties +###################################################################################### + +SET(LESSON1_VERSION ${GLOBAL_VERSION}) +SET_TARGET_PROPERTIES(tspExample PROPERTIES VERSION "${LESSON1_VERSION}") +###################################################################################### + + +###################################################################################### +### 5) Link the librairies +###################################################################################### + +TARGET_LINK_LIBRARIES(tspExample ${XML2_LIBS} tsp peo rmc_mpi eo eoutils) + +###################################################################################### + + +###################################################################################### +### 6) Windows advanced config - especially for Microsoft Visual Studio 8 +###################################################################################### + + IF(CMAKE_CXX_COMPILER MATCHES cl) + IF(NOT WITH_SHARED_LIBS) + IF(CMAKE_GENERATOR STREQUAL "Visual Studio 8 2005") + SET(CMAKE_CXX_FLAGS "/nologo /W3 /Gy") + SET(CMAKE_CXX_FLAGS_DEBUG "/MTd /Z7 /Od") + SET(CMAKE_CXX_FLAGS_RELEASE "/MT /O2") + SET(CMAKE_CXX_FLAGS_MINSIZEREL "/MT /O2") + SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "/MTd /Z7 /Od") + SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SUBSYSTEM:CONSOLE") + + ENDIF(CMAKE_GENERATOR STREQUAL "Visual Studio 8 2005") + ENDIF(NOT WITH_SHARED_LIBS) + ENDIF(CMAKE_CXX_COMPILER MATCHES cl) +###################################################################################### + + + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson1/ParadisEO-PEO_Lesson1.pdf b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson1/ParadisEO-PEO_Lesson1.pdf new file mode 100755 index 0000000000000000000000000000000000000000..04f8e0174903131ed9d9c48f9361181cab227eb5 GIT binary patch literal 68414 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 Mi4(FaapeoEA.h +//! header file. The main elements to be considered when building an evolutionary algorithm are the transformation +//! operators, i.e. crossover and mutation, the evaluation function, the continuation criterion and the selection +//! and replacement strategy. +//! +//! +//! +//! +//! +//! +//! +//! +//!
do {    
         select( population, offsprings );   // select the offsprings from the current population
         transform( offsprings );   // crossover and mutation operators are applied on the selected offsprings
         evaluate( offsprings );   // evaluation step of the resulting offsprings
         replace( population, offsprings );   // replace the individuals in the current population whith individuals from the offspring population, according to a specified replacement strategy
} while ( eaCheckpointContinue( population ) );   // checkpoint operators are applied on the current population
+//! +//! The peoEA class offers an elementary evolutionary algorithm implementation. The peoEA class has the underlying structure +//! for including parallel evaluation and parallel transformation operators, migration operators etc. Although there is +//! no restriction on using the algorithms provided by the EO framework, no parallelism is provided - the EO implementation is exclusively sequential. +//!
+//! +//! \section requirements Requirements +//! +//! You should have already installed the ParadisEO-PEO package - this requires several additional packages which should be already +//! included in the provided archive. The installation script has to be launched in order to configure and compile all the required +//! components. At the end of the installation phase you should end up having a directory tree resembling the following: +//! +//!
     ... +//!
     paradiseo-mo +//!
     paradiseo-moeo +//!
     paradiseo-peo +//!
            docs +//!
            examples +//!
                   lesson1 +//!
                   lesson2 +//!
                   ... +//!
                   shared +//!
                   ... +//!
            src +//!
            ... +//!
     ... +//!
+//!
+//! +//! The source-code for this tutorial may be found in the paradiseo-peo/examples/lesson1 directory, in the main.cpp file. +//! We strongly encourage creating a backup copy of the file if you consider modifying the source code. For a complete reference on the +//! TSP-related classes and definitions please refer to the files under the paradiseo-peo/examples/shared. After the installation +//! phase you should end up having an tspExample executable file in the paradiseo-peo/examples/lesson1 directory. +//! We will discuss testing and launching aspects later in the tutorial. +//! +//! You are supposed to be familiar with working in C/C++ (with an extensive use of templates) and you should have at least an introductory +//! background in working with the EO framework. +//! +//!
+//! NOTE: All the presented examples have as case study the Traveling Salesman Problem (TSP). All the presented tutorials rely +//! on a
common shared source code defining transformation operators, +//! evaluation functions, etc. for the TSP problem. For a complete understanding of the presented tutorials please take your time for +//! consulting and for studying the additional underlying defined classes. +//!

+//! +//! \section problemDef Problem Definition and Representation +//! +//! As we are not directly concerned with the Traveling Salesman Problem, and to some extent out of scope, no in depth details are offered +//! for the TSP. The problem requires finding the shortest path connecting a given set of cities, while visiting each of +//! the specified cities only once and returning to the startpoint city. The problem is known to be NP-complete, i.e. no polynomial +//! time algorithm exists for solving the problem in exact manner. +//! +//! The construction of a ParadisEO-PEO evolutionary algorithm requires following a few simple steps - please take your time to study the signature +//! of the peoEA constructor: +//! +//! +//! +//! +//!
+//!      peoEA( +//!
            eoContinue< EOT >& __cont, +//!
            peoPopEval< EOT >& __pop_eval, +//!
            eoSelect< EOT >& __select, +//!
            peoTransform< EOT >& __trans, +//!
            eoReplacement< EOT >& __replace +//!
     ); +//!
+//! \image html peoEA.png +//!
+//! +//! A few remarks have to be made: while most of the parameters are passed as EO-specific types, the evaluation and the transformation objects have to be +//! derived from the ParadisEO-PEO peoPopEval and peoTransform classes. Derived classes like the peoParaPopEval and peoParaSGATransform classes allow +//! for parallel evaluation of the population and parallel transformation operators, respectively. Wrappers are provided thus allowing to make use +//! of the EO classes. +//! +//! In the followings, the main required elements for building an evolutionary algorithm are enumerated. For complete details regarding the +//! implementation aspects of each of the components, please refer to the common shared source code. +//! Each of the bellow referred header files may be found in the pardiseo-peo/examples/shared directory. +//! +//!
    +//!
  1. representation - the first decision to be taken concerns the representation of the individuals. You may create your +//! own representation or you may use/derive one of the predefined classes of the EO framework.
    +//! +//! For our case study, the TSP, each city is defined as a Node in the node.h header file - in fact an unsigned value defined +//! as typedef unsigned Node. Moreover, each individual (of the evolutionary algorithm) is represented as a Route object, a vector of Node objects, in +//! the route.h header file - typedef eoVector< int, Node > Route. The definition of the Route object implies two +//! elements: (1) a route is a vector of nodes, and (2) the fitness is an integer value (please refer to the eoVector +//! definition in the EO framework). +//! +//! In addition you should also take a look in the route_init.h header file which includes the RouteInit class, defined for +//! initializing in random manner Route objects. +//!
  2. +//!
  3. evaluation function - having a representation model, an evaluation object has to be defined, implementing a specific +//! fitness function. The designed class has to be derived (directly or indirectly) from the peoPopEval class - you have the choice of +//! using peoSeqPopEval or peoParaPopEval for sequential and parallel evaluation, respectively. These classes act as wrappers requiring +//! the specification of an EO evaluation object derived from the eoEvalFunc class - please refer to their respective documentation.
    +//! +//! The fitness function for our TSP case study is implemented in the route_eval.h header file. The class is derived from the eoEvalFunc +//! EO class, being defined as class RouteEval : public eoEvalFunc< Route >. +//!
  4. +//!
  5. transformation operators - in order to assure the evolution of the initial population, transformation operators have to be defined. +//! Depending on your problem, you may specify quadruple operators (two input individuals, two output resulting individuals), i.e. crossover operators, +//! binary operators (one input individual and one output resulting individual), i.e. mutation operators, or combination of both types. As for the +//! evaluation function, the signature of the peoEA constructor requires specifying a peoTransform derived object as transformation operator. +//! +//! The transform operators, crossover and mutation, for the herein presented example are defined in the order_xover.h and the city_swap.h +//! header files, respectively. +//!
  6. +//!
  7. continuation criterion - the evolutionary algorithm evolves in an iterative manner; a continuation criterion has to be specified. +//! One of the most common and simplest options considers a maximum number of generations. It is your choice whether to use +//! a predefined EO class for specifying the continuation criterion or using a custom defined class. In the later case you have to +//! make sure that your class derives the eoContinue class.
    +//!
  8. +//!
  9. selection strategy - at each iteration a set of individuals are selected for applying the transform operators, in order +//! to obtain the offspring population. As the specified parameter has to be derived from the eoSelect it is your option of whether using +//! the EO provided selection strategies or implementing your own, as long as it inherits the eoSelect class. +//! +//! For our example we chose to use the eoRankingSelect strategy, provided in the EO framework. +//!
  10. +//!
  11. replacement strategy - once the offspring population is obtained, the offsprings have to be integrated back into the initial +//! population, according to a given strategy. For custom defined strategies you have to inherit the eoReplacement EO class. We chose to +//! use an eoPlusReplacement as strategy (please review the EO documentation for details on the different strategies available). +//!
  12. +//!
+//!
+//! +//! \section example A simple example for constructing a peoEA object +//! +//! The source code for this example may be found in the main.cpp file, under the paradiseo-peo/examples/lesson1 directory. Please make sure you +//! At this point you have two options: (a) you can just follow the example without touching the main.cpp or, (b) you can start from scratch, +//! following the presented steps, in which case you are required make a backup copy of the main.cpp file and replace the original file with an +//! empty one. +//! +//!
    +//!
  1. include the necessary header files - as we will be using Route objects, we have to include the files +//! which define the Route type, the initializing functor and the evaluation functions. Furthermore, in order to make use of +//! transform operators, we require having the headers which define the crossover and the mutation operators. +//! All these files may be found in the shared directory that we mentioned in the beginning. At this point you +//! should have something like the following:
    +//! +//!
    +//!		##include "route.h"
    +//!		##include "route_init.h"
    +//!		##include "route_eval.h"
    +//!		
    +//!		##include "order_xover.h"
    +//!		##include "city_swap.h"
    +//!		
    +//! In addition we require having the paradiseo header file, in order to use the ParadisEO-PEO features, and a header specific +//! for our problem, dealing with processing command-line parameters - the param.h header file. The complete picture at this point +//! with all the required header files is as follows:
    +//! +//!
    +//!		##include "route.h"
    +//!		##include "route_init.h"
    +//!		##include "route_eval.h"
    +//!		
    +//!		##include "order_xover.h"
    +//!		##include "city_swap.h"
    +//!
    +//!		##include "param.h"
    +//!
    +//!		##include <paradiseo>
    +//!		
    +//! NOTE: the paradiseo header file is in fact a "super-header" - it includes all the esential ParadisEO-PEO header files. +//! It is at at your choice if you want use the paradiseo header file or to explicitly include different header files, +//! like the peoEA.h header file, for example. +//! +//!
  2. +//!
  3. define problem specific parameters - in our case we have to specify how many individuals we want to have in our population, the number +//! of generations for the evolutionary algorithm to iterate and the probabilities associated with the crossover and mutation operators.
    +//! +//!
    +//!		##include "route.h"
    +//!		##include "route_init.h"
    +//!		##include "route_eval.h"
    +//!		
    +//!		##include "order_xover.h"
    +//!		##include "city_swap.h"
    +//!
    +//!		##include "param.h"
    +//!
    +//!		##include <paradiseo>
    +//!
    +//!
    +//!		##define POP_SIZE 10
    +//!		##define NUM_GEN 100
    +//!		##define CROSS_RATE 1.0
    +//!		##define MUT_RATE 0.01
    +//!		
    +//!
  4. +//!
  5. construct the skeleton of a simple ParadisEO-PEO program - the main function including the code for initializing the ParadisEO-PEO +//! environment, for loading problem data and for shutting down the ParadisEO-PEO environment. From this point on we will make +//! abstraction of the previous part referring only to the main function.
    +//! +//!
    +//!		...
    +//!		
    +//!		int main( int __argc, char** __argv ) {
    +//!		
    +//!			// initializing the ParadisEO-PEO environment
    +//!			peo :: init( __argc, __argv );
    +//!		
    +//!			// processing the command line specified parameters
    +//!			loadParameters( __argc, __argv );
    +//!		
    +//!
    +//!			// EVOLUTIONARY ALGORITHM TO BE DEFINED
    +//!
    +//!		
    +//!			peo :: run( );
    +//!			peo :: finalize( );
    +//!			// shutting down the ParadisEO-PEO environment
    +//!		
    +//!			return 0;
    +//!		}
    +//!		
    +//!
  6. +//!
  7. initialization functors, evaluation function and transform operators - basically we only need to create instances for each of the +//! enumerated objects, to be passed later as parameters for higher-level components of the evolutionary algorithm.
    +//! +//!
    +//!		RouteInit route_init;	// random init object - creates random Route objects
    +//!		RouteEval full_eval;	// evaluator object - offers a fitness value for a specified Route object
    +//!
    +//!		OrderXover crossover;	// crossover operator - creates two offsprings out of two specified parents
    +//!		CitySwap mutation;	// mutation operator - randomly mutates one gene for a specified individual
    +//!		
    +//!
  8. +//!
  9. construct the components of the evolutionary algorithm - each of the components that has to be passed as parameter to the +//! peoEA constructor has to be defined along with the associated parameters. Except for the requirement to provide the +//! appropriate objects (for example, a peoPopEval derived object must be specified for the evaluation functor), there is no strict +//! path to follow. It is your option what elements to mix, depending on your problem - we aimed for simplicity in our example. +//! +//!
      +//!
    • an initial population has to be specified; the constructor accepts the specification of an initializing object. Further, +//! an evaluation object is required - the peoEA constructor requires a peoPopEval derived class. +//!
    • +//!
    +//!
    +//!		eoPop< Route > population( POP_SIZE, route_init );	// initial population for the algorithm having POP_SIZE individuals
    +//!		peoSeqPopEval< Route > eaPopEval( full_eval );		// evaluator object - to be applied at each iteration on the entire population
    +//!		
    +//!
      +//!
    • the evolutionary algorithm continues to iterate till a continuation criterion is not met. For our case we consider +//! a fixed number of generations. The continuation criterion has to be specified as a checkpoint object, thus requiring +//! the creation of an eoCheckPoint object in addition. +//!
    • +//!
    +//!
    +//!		eoGenContinue< Route > eaCont( NUM_GEN );		// continuation criterion - the algorithm will iterate for NUM_GEN generations
    +//!		eoCheckPoint< Route > eaCheckpointContinue( eaCont );	// checkpoint object - verify at each iteration if the continuation criterion is met
    +//!		
    +//!
      +//!
    • selection strategy - we are required to specify a selection strategy for extracting individuals out of the parent +//! population; in addition the number of individuals to be selected has to be specified. +//!
    • +//!
    +//!
    +//!		eoRankingSelect< Route > selectionStrategy;		// selection strategy - applied at each iteration for selecting parent individuals
    +//!		eoSelectNumber< Route > eaSelect( selectionStrategy, POP_SIZE ); // selection object - POP_SIZE individuals are selected at each iteration
    +//!		
    +//!
      +//!
    • transformation operators - we have to integrate the crossover and the mutation functors into an object which may be passed +//! as a parameter when creating the peoEA object. The constructor of peoEA requires a peoTransform derived +//! object. Associated probabilities have to be specified also. +//!
    • +//!
    +//!
    +//!		// transform operator - includes the crossover and the mutation operators with a specified associated rate
    +//!		eoSGATransform< Route > transform( crossover, CROSS_RATE, mutation, MUT_RATE );
    +//!		peoSeqTransform< Route > eaTransform( transform );	// ParadisEO transform operator (please remark the peo prefix) - wraps an e EO transform object
    +//!		
    +//!
      +//!
    • replacement strategy - required for defining the way for integrating the resulting offsprings into the initial population. +//! At your option whether you would like to chose one of the predefined replacement strategies that come with the EO framework +//! or if you want to define your own. +//!
    • +//!
    +//!
    +//!		eoPlusReplacement< Route > eaReplace;			// replacement strategy - for replacing the initial population with offspring individuals
    +//!		
    +//!
  10. +//!
  11. evolutionary algorithm - having defined all the previous components, we are ready for instanciating an evolutionary algorithm. +//! In the end we have to associate a population with the algorithm, which will serve as the initial population, to be iteratively evolved. +//! +//!
    +//!		peoEA< Route > eaAlg( eaCheckpointContinue, eaPopEval, eaSelect, eaTransform, eaReplace );
    +//!
    +//!		eaAlg( population );	// specifying the initial population for the algorithm, to be iteratively evolved
    +//!		
    +//!
  12. +//!
+//! +//! If you have not missed any of the enumerated points, your program should be like the following: +//! +//!
+//! ##include "route.h"
+//! ##include "route_init.h"
+//! ##include "route_eval.h"
+//! 
+//! ##include "order_xover.h"
+//! ##include "city_swap.h"
+//! 
+//! ##include "param.h"
+//! 
+//! ##include 
+//! 
+//! 
+//! ##define POP_SIZE 10
+//! ##define NUM_GEN 100
+//! ##define CROSS_RATE 1.0
+//! ##define MUT_RATE 0.01
+//! 
+//! 
+//! int main( int __argc, char** __argv ) {
+//! 
+//! 	// initializing the ParadisEO-PEO environment
+//! 	peo :: init( __argc, __argv );
+//! 
+//! 
+//! 	// processing the command line specified parameters
+//! 	loadParameters( __argc, __argv );
+//! 
+//! 
+//! 	// init, eval operators, EA operators -------------------------------------------------------------------------------------------------------------
+//! 
+//! 	RouteInit route_init;	// random init object - creates random Route objects
+//! 	RouteEval full_eval;	// evaluator object - offers a fitness value for a specified Route object
+//! 
+//! 	OrderXover crossover;	// crossover operator - creates two offsprings out of two specified parents
+//! 	CitySwap mutation;	// mutation operator - randomly mutates one gene for a specified individual
+//! 	// ------------------------------------------------------------------------------------------------------------------------------------------------
+//! 
+//! 
+//! 	// evolutionary algorithm components --------------------------------------------------------------------------------------------------------------
+//! 
+//! 	eoPop< Route > population( POP_SIZE, route_init );	// initial population for the algorithm having POP_SIZE individuals
+//! 	peoSeqPopEval< Route > eaPopEval( full_eval );		// evaluator object - to be applied at each iteration on the entire population
+//! 
+//! 	eoGenContinue< Route > eaCont( NUM_GEN );		// continuation criterion - the algorithm will iterate for NUM_GEN generations
+//! 	eoCheckPoint< Route > eaCheckpointContinue( eaCont );	// checkpoint object - verify at each iteration if the continuation criterion is met
+//! 
+//! 	eoRankingSelect< Route > selectionStrategy;		// selection strategy - applied at each iteration for selecting parent individuals
+//! 	eoSelectNumber< Route > eaSelect( selectionStrategy, POP_SIZE ); // selection object - POP_SIZE individuals are selected at each iteration
+//! 
+//! 	// transform operator - includes the crossover and the mutation operators with a specified associated rate
+//! 	eoSGATransform< Route > transform( crossover, CROSS_RATE, mutation, MUT_RATE );
+//! 	peoSeqTransform< Route > eaTransform( transform );	// ParadisEO transform operator (please remark the peo prefix) - wraps an e EO transform object
+//! 
+//! 	eoPlusReplacement< Route > eaReplace;			// replacement strategy - for replacing the initial population with offspring individuals
+//! 	// ------------------------------------------------------------------------------------------------------------------------------------------------
+//! 
+//! 
+//! 	// ParadisEO-PEO evolutionary algorithm -----------------------------------------------------------------------------------------------------------
+//! 
+//! 	peoEA< Route > eaAlg( eaCheckpointContinue, eaPopEval, eaSelect, eaTransform, eaReplace );
+//! 	
+//! 	eaAlg( population );	// specifying the initial population for the algorithm, to be iteratively evolved
+//! 	// ------------------------------------------------------------------------------------------------------------------------------------------------
+//! 
+//! 
+//! 	peo :: run( );
+//! 	peo :: finalize( );
+//! 	// shutting down the ParadisEO-PEO environment
+//! 
+//! 	return 0;
+//! }
+//! 
+//! +//! +//! \section testing Compilation and Execution +//! +//! First, please make sure that you followed all the previous steps in defining the evolutionary algorithm. Your file should be called main.cpp - please +//! make sure you do not rename the file (we will be using a pre-built makefile, thus you are required not to change the file names). Please make sure you +//! are in the paradiseo-peo/examples/lesson1 directory - you should open a console and you should change your current directory to the one of Lesson1. +//! +//! Compilation: being in the paradiseo-peo/examples/lesson1 directory, you have to type make. As a result the main.cpp file +//! will be compiled and you should obtain an executable file called tspExample. If you have errors, please verify any of the followings: +//! +//!
    +//!
  • you are under the right directory - you can verify by typing the pwd command - you should have something like .../paradiseo-peo/examples/lesson1
  • +//!
  • you saved your modifications in a file called main.cpp, in the paradiseo-peo/examples/lesson1 directory
  • +//!
  • there are no differences between the example presented above and your file
  • +//!
+//! +//! NOTE: in order to successfully compile your program you should already have installed an MPI distribution in your system. +//! +//! Execution: the execution of a ParadisEO-PEO program requires having already created an environment for launching MPI programs. For MPICH-2, +//! for example, this requires starting a ring of daemons. The implementation that we provided as an example is sequential and includes no parallelism - we +//! will see in the end how to include also parallelism. Executing a parallel program requires specifying a mapping of resources, in order to assing different +//! algorithms to different machines, define worker machines etc. This mapping is defined by an XML file called schema.xml, which, for our case, has +//! the following structure: +//! +//!
+//!	
+//!	
+//!	
+//!		
+//!			
+//!			
+//!			
+//!			
+//!			1
+//!			
+//!			
+//!			
+//!			
+//!			
+//!			
+//!		
+//!	
+//! 
+//! +//! Not going into details, the XML file presented above describes a mapping which includes four nodes, the first one having the role of scheduler, +//! the second one being the node on which the evolutionary algorithm is actually executed and the third and the fourth ones being slave nodes. Overall +//! the mapping says that we will be launching four processes, out of which only one will be executing the evolutionary algorithm. The other node entries +//! in the XML file have no real functionality as we have no parallelism in our program - the entries were created for you convenience, in order to provide +//! a smooth transition to creating a parallel program. +//! +//! Launching the program may be different, depending on your MPI distribution - for MPICH-2, in a console, in the paradiseo-peo/examples/lesson1 +//! directory you have to type the following command: +//! +//! mpiexec -n 4 ./tspExample @lesson.param +//! +//! NOTE: the "-n 4" indicates the number of processes to be launched. The last argument, "@lesson.param", indicates a file which specifies different +//! application specific parameters (the mapping file to be used, for example, whether to use logging or not, etc). +//! +//! The result of your execution should be similar to the following: +//!
+//! 	Loading '../data/eil101.tsp'.
+//! 	NAME: eil101.
+//! 	COMMENT: 101-city problem (Christofides/Eilon).
+//! 	TYPE: TSP.
+//! 	DIMENSION: 101.
+//! 	EDGE_WEIGHT_TYPE: EUC_2D.
+//! 	Loading '../data/eil101.tsp'.
+//! 	NAME: eil101.
+//! 	COMMENT: 101-city problem (Christofides/Eilon).
+//! 	EOF.
+//! 	TYPE: TSP.
+//! 	DIMENSION: 101.
+//! 	EDGE_WEIGHT_TYPE: EUC_2D.
+//! 	EOF.
+//! 	Loading '../data/eil101.tsp'.
+//! 	NAME: eil101.
+//! 	COMMENT: 101-city problem (Christofides/Eilon).
+//! 	TYPE: TSP.
+//! 	DIMENSION: 101.
+//! 	EDGE_WEIGHT_TYPE: EUC_2D.
+//! 	EOF.
+//! 	Loading '../data/eil101.tsp'.
+//! 	NAME: eil101.
+//! 	COMMENT: 101-city problem (Christofides/Eilon).
+//! 	TYPE: TSP.
+//! 	DIMENSION: 101.
+//! 	EDGE_WEIGHT_TYPE: EUC_2D.
+//! 	EOF.
+//! 	STOP in eoGenContinue: Reached maximum number of generations [100/100]
+//!	
+//! +//! +//! \section paraIntro Introducing parallelism +//! +//! Creating parallel programs with ParadisEO-PEO represents an easy task once you have the basic structure for your program. For experimentation, +//! in the main.cpp file, replace the line +//!
+//!	peoSeqPopEval< Route > eaPopEval( full_eval );
+//! 
+//! with +//!
+//!	peoParaPopEval< Route > eaPopEval( full_eval );
+//! 
+//! The second line only tells that we would like to evaluate individuals in parallel - this is very interesting if you have a time consuming fitness +//! evaluation function. If you take another look on the schema.xml XML file you will see the last two nodes being marked as slaves (the "num_workers" +//! attribute - these nodes will be used for computing the fitness of the individuals. +//! +//! At this point you only have to recompile your program and to launch it again - as we are not using a time consuming fitness fitness function, the +//! effects might not be visible - you may increase the number of individuals to experiment. diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson1/lesson.param b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson1/lesson.param new file mode 100644 index 000000000..eb843c65f --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson1/lesson.param @@ -0,0 +1,12 @@ +## miscallenous parameters + +--debug=false + +## deployment schema + +--schema=schema.xml + +## parameters + +--inst=../examples/tsp/benchs/eil101.tsp + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson1/main.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson1/main.cpp new file mode 100644 index 000000000..7478eb329 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson1/main.cpp @@ -0,0 +1,110 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include "route.h" +#include "route_init.h" +#include "route_eval.h" + +#include "order_xover.h" +#include "city_swap.h" + +#include "param.h" + +#include + + +#define POP_SIZE 10 +#define NUM_GEN 100 +#define CROSS_RATE 1.0 +#define MUT_RATE 0.01 + + +int main( int __argc, char** __argv ) { + + // initializing the ParadisEO-PEO environment + peo :: init( __argc, __argv ); + + + // processing the command line specified parameters + loadParameters( __argc, __argv ); + + + // init, eval operators, EA operators ------------------------------------------------------------------------------------------------------------- + + RouteInit route_init; // random init object - creates random Route objects + RouteEval full_eval; // evaluator object - offers a fitness value for a specified Route object + + OrderXover crossover; // crossover operator - creates two offsprings out of two specified parents + CitySwap mutation; // mutation operator - randomly mutates one gene for a specified individual + // ------------------------------------------------------------------------------------------------------------------------------------------------ + + + // evolutionary algorithm components -------------------------------------------------------------------------------------------------------------- + + eoPop< Route > population( POP_SIZE, route_init ); // initial population for the algorithm having POP_SIZE individuals + peoSeqPopEval< Route > eaPopEval( full_eval ); // evaluator object - to be applied at each iteration on the entire population + + eoGenContinue< Route > eaCont( NUM_GEN ); // continuation criterion - the algorithm will iterate for NUM_GEN generations + eoCheckPoint< Route > eaCheckpointContinue( eaCont ); // checkpoint object - verify at each iteration if the continuation criterion is met + + eoRankingSelect< Route > selectionStrategy; // selection strategy - applied at each iteration for selecting parent individuals + eoSelectNumber< Route > eaSelect( selectionStrategy, POP_SIZE ); // selection object - POP_SIZE individuals are selected at each iteration + + // transform operator - includes the crossover and the mutation operators with a specified associated rate + eoSGATransform< Route > transform( crossover, CROSS_RATE, mutation, MUT_RATE ); + peoSeqTransform< Route > eaTransform( transform ); // ParadisEO transform operator (please remark the peo prefix) - wraps an e EO transform object + + eoPlusReplacement< Route > eaReplace; // replacement strategy - for replacing the initial population with offspring individuals + // ------------------------------------------------------------------------------------------------------------------------------------------------ + + + // ParadisEO-PEO evolutionary algorithm ----------------------------------------------------------------------------------------------------------- + + peoEA< Route > eaAlg( eaCheckpointContinue, eaPopEval, eaSelect, eaTransform, eaReplace ); + + eaAlg( population ); // specifying the initial population for the algorithm, to be iteratively evolved + // ------------------------------------------------------------------------------------------------------------------------------------------------ + + + peo :: run( ); + peo :: finalize( ); + // shutting down the ParadisEO-PEO environment + + if(getNodeRank()==1) + std::cout<<"\n\nPopulation :\n"< + + + + + + + + 1 + + + + + + + + + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson2/CMakeLists.txt b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson2/CMakeLists.txt new file mode 100644 index 000000000..34d510325 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson2/CMakeLists.txt @@ -0,0 +1,105 @@ + +###################################################################################### +### 0) Set the compiler and define targets to easily run the lessons +###################################################################################### + +SET (CMAKE_CXX_COMPILER mpicxx) + +ADD_CUSTOM_TARGET(install DEPENDS ${ParadisEO-PEO_SOURCE_DIR}/tutorial/Lesson2/lesson.param ${ParadisEO-PEO_SOURCE_DIR}/tutorial/Lesson2/schema.xml) + +ADD_CUSTOM_COMMAND( + TARGET install + POST_BUILD + COMMAND ${CMAKE_COMMAND} + ARGS -E copy_if_different + ${ParadisEO-PEO_SOURCE_DIR}/tutorial/Lesson2/lesson.param + ${ParadisEO-PEO_BINARY_DIR}/tutorial/Lesson2) +ADD_CUSTOM_COMMAND( + TARGET install + POST_BUILD + COMMAND ${CMAKE_COMMAND} + ARGS -E copy_if_different + ${ParadisEO-PEO_SOURCE_DIR}/tutorial/Lesson2/schema.xml + ${ParadisEO-PEO_BINARY_DIR}/tutorial/Lesson2) +ADD_CUSTOM_COMMAND( + TARGET install + POST_BUILD + COMMAND ${CMAKE_COMMAND} + ARGS -E copy_if_different + ${ParadisEO-PEO_SOURCE_DIR}/tutorial/Lesson2/ParadisEO-PEO_Lesson2.pdf + ${ParadisEO-PEO_BINARY_DIR}/tutorial/Lesson2) +###################################################################################### + + +###################################################################################### +### 1) Include the sources +###################################################################################### + +INCLUDE_DIRECTORIES(${EO_SRC_DIR}/src ${MO_SRC_DIR}/src ${ParadisEO-PEO_SOURCE_DIR}/src ${TSP_SRC_DIR}) + +###################################################################################### + + +###################################################################################### +### 2) Specify where CMake can find the libraries +###################################################################################### + +IF(NOT WIN32 OR CYGWIN) + LINK_DIRECTORIES(${EO_BIN_DIR}/lib ${ParadisEO-PEO_BINARY_DIR}/lib ${TSP_BINARY_DIR}/lib) +ENDIF(NOT WIN32 OR CYGWIN) + +# especially for Visual Studio +IF(WIN32 AND NOT CYGWIN) + LINK_DIRECTORIES(${EO_BIN_DIR}\\lib\\${CMAKE_BUILD_TYPE} ${ParadisEO-PEO_BINARY_DIR}\\lib\\${CMAKE_BUILD_TYPE} ${TSP_BINARY_DIR}\\lib\\${CMAKE_BUILD_TYPE}) +ENDIF(WIN32 AND NOT CYGWIN) +###################################################################################### + + +###################################################################################### +### 3) Define your target(s): just an executable here +###################################################################################### + +ADD_EXECUTABLE(tspExample main.cpp) +ADD_DEPENDENCIES(tspExample tsp peo rmc_mpi) +###################################################################################### + + +###################################################################################### +### 4) Optionnal: define properties +###################################################################################### + +SET(LESSON2_VERSION ${GLOBAL_VERSION}) +SET_TARGET_PROPERTIES(tspExample PROPERTIES VERSION "${LESSON2_VERSION}") +###################################################################################### + + +###################################################################################### +### 5) Link the librairies +###################################################################################### + +TARGET_LINK_LIBRARIES(tspExample ${XML2_LIBS} tsp peo rmc_mpi eo eoutils) + +###################################################################################### + + +###################################################################################### +### 6) Windows advanced config - especially for Microsoft Visual Studio 8 +###################################################################################### + + IF(CMAKE_CXX_COMPILER MATCHES cl) + IF(NOT WITH_SHARED_LIBS) + IF(CMAKE_GENERATOR STREQUAL "Visual Studio 8 2005") + SET(CMAKE_CXX_FLAGS "/nologo /W3 /Gy") + SET(CMAKE_CXX_FLAGS_DEBUG "/MTd /Z7 /Od") + SET(CMAKE_CXX_FLAGS_RELEASE "/MT /O2") + SET(CMAKE_CXX_FLAGS_MINSIZEREL "/MT /O2") + SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "/MTd /Z7 /Od") + SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SUBSYSTEM:CONSOLE") + + ENDIF(CMAKE_GENERATOR STREQUAL "Visual Studio 8 2005") + ENDIF(NOT WITH_SHARED_LIBS) + ENDIF(CMAKE_CXX_COMPILER MATCHES cl) +###################################################################################### + + + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson2/ParadisEO-PEO_Lesson2.pdf b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson2/ParadisEO-PEO_Lesson2.pdf new file mode 100755 index 0000000000000000000000000000000000000000..d99d43f1ae2b235f4bf85e0b3fcfb5d3cf67aec7 GIT binary patch literal 145864 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 +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include "route.h" +#include "route_init.h" +#include "route_eval.h" + +#include "order_xover.h" +#include "city_swap.h" + +#include "param.h" + +#include "merge_route_eval.h" +#include "part_route_eval.h" + + +#include + + +#define POP_SIZE 10 +#define NUM_GEN 100 +#define CROSS_RATE 1.0 +#define MUT_RATE 0.01 + +#define NUM_PART_EVALS 2 + + +// by default, parallel evaluation of the population is performed; +// for parallel fitness evaluation, uncomment the following line + +#define PARALLEL_FIT_EVALUATION + + +int main( int __argc, char** __argv ) { + + // initializing the ParadisEO-PEO environment + peo :: init( __argc, __argv ); + + + // processing the command line specified parameters + loadParameters( __argc, __argv ); + + + // init, eval operators, EA operators ------------------------------------------------------------------------------------------------------------- + + RouteInit route_init; // random init object - creates random Route objects + RouteEval full_eval; // evaluator object - offers a fitness value for a specified Route object + + OrderXover crossover; // crossover operator - creates two offsprings out of two specified parents + CitySwap mutation; // mutation operator - randomly mutates one gene for a specified individual + // ------------------------------------------------------------------------------------------------------------------------------------------------ + + + // evolutionary algorithm components -------------------------------------------------------------------------------------------------------------- + + eoPop< Route > population( POP_SIZE, route_init ); // initial population for the algorithm having POP_SIZE individuals + + + #ifdef PARALLEL_FIT_EVALUATION + + MergeRouteEval merge_eval; + + std :: vector< eoEvalFunc< Route >* > part_eval; + for ( unsigned index = 1; index <= NUM_PART_EVALS; index++ ) + part_eval.push_back( new PartRouteEval( ( float )( index - 1 ) / NUM_PART_EVALS, ( float )index / NUM_PART_EVALS ) ); + + peoParaPopEval< Route > ox_pop_eval( part_eval, merge_eval ); + + #else + + peoParaPopEval< Route > ox_pop_eval( full_eval ); + + #endif + + + + peoParaPopEval< Route > eaPopEval( full_eval ); // evaluator object - to be applied at each iteration on the entire population + + eoGenContinue< Route > eaCont( NUM_GEN ); // continuation criterion - the algorithm will iterate for NUM_GEN generations + eoCheckPoint< Route > eaCheckpointContinue( eaCont ); // checkpoint object - verify at each iteration if the continuation criterion is met + + eoRankingSelect< Route > selectionStrategy; // selection strategy - applied at each iteration for selecting parent individuals + eoSelectNumber< Route > eaSelect( selectionStrategy, POP_SIZE ); // selection object - POP_SIZE individuals are selected at each iteration + + // transform operator - includes the crossover and the mutation operators with a specified associated rate + eoSGATransform< Route > transform( crossover, CROSS_RATE, mutation, MUT_RATE ); + peoSeqTransform< Route > eaTransform( transform ); // ParadisEO transform operator (please remark the peo prefix) - wraps an e EO transform object + + eoPlusReplacement< Route > eaReplace; // replacement strategy - for replacing the initial population with offspring individuals + // ------------------------------------------------------------------------------------------------------------------------------------------------ + + + // ParadisEO-PEO evolutionary algorithm ----------------------------------------------------------------------------------------------------------- + + peoEA< Route > eaAlg( eaCheckpointContinue, eaPopEval, eaSelect, eaTransform, eaReplace ); + + eaAlg( population ); // specifying the initial population for the algorithm, to be iteratively evolved + // ------------------------------------------------------------------------------------------------------------------------------------------------ + + + peo :: run( ); + peo :: finalize( ); + + if(getNodeRank()==1) + std::cout<<"\n\nPopulation :\n"< + + + + + + + + 1 + + + + + + + + + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson3/CMakeLists.txt b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson3/CMakeLists.txt new file mode 100644 index 000000000..6aad38f4b --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson3/CMakeLists.txt @@ -0,0 +1,105 @@ + +###################################################################################### +### 0) Set the compiler and define targets to easily run the lessons +###################################################################################### + +SET (CMAKE_CXX_COMPILER mpicxx) + +ADD_CUSTOM_TARGET(install DEPENDS ${ParadisEO-PEO_SOURCE_DIR}/tutorial/Lesson3/lesson.param ${ParadisEO-PEO_SOURCE_DIR}/tutorial/Lesson3/schema.xml) + +ADD_CUSTOM_COMMAND( + TARGET install + POST_BUILD + COMMAND ${CMAKE_COMMAND} + ARGS -E copy_if_different + ${ParadisEO-PEO_SOURCE_DIR}/tutorial/Lesson3/lesson.param + ${ParadisEO-PEO_BINARY_DIR}/tutorial/Lesson3) +ADD_CUSTOM_COMMAND( + TARGET install + POST_BUILD + COMMAND ${CMAKE_COMMAND} + ARGS -E copy_if_different + ${ParadisEO-PEO_SOURCE_DIR}/tutorial/Lesson3/schema.xml + ${ParadisEO-PEO_BINARY_DIR}/tutorial/Lesson3) +ADD_CUSTOM_COMMAND( + TARGET install + POST_BUILD + COMMAND ${CMAKE_COMMAND} + ARGS -E copy_if_different + ${ParadisEO-PEO_SOURCE_DIR}/tutorial/Lesson3/ParadisEO-PEO_Lesson3.pdf + ${ParadisEO-PEO_BINARY_DIR}/tutorial/Lesson3) +###################################################################################### + + +###################################################################################### +### 1) Include the sources +###################################################################################### + +INCLUDE_DIRECTORIES(${EO_SRC_DIR}/src ${MO_SRC_DIR}/src ${ParadisEO-PEO_SOURCE_DIR}/src ${TSP_SRC_DIR}) + +###################################################################################### + + +###################################################################################### +### 2) Specify where CMake can find the libraries +###################################################################################### + +IF(NOT WIN32 OR CYGWIN) + LINK_DIRECTORIES(${EO_BIN_DIR}/lib ${ParadisEO-PEO_BINARY_DIR}/lib ${TSP_BINARY_DIR}/lib) +ENDIF(NOT WIN32 OR CYGWIN) + +# especially for Visual Studio +IF(WIN32 AND NOT CYGWIN) + LINK_DIRECTORIES(${EO_BIN_DIR}\\lib\\${CMAKE_BUILD_TYPE} ${ParadisEO-PEO_BINARY_DIR}\\lib\\${CMAKE_BUILD_TYPE} ${TSP_BINARY_DIR}\\lib\\${CMAKE_BUILD_TYPE}) +ENDIF(WIN32 AND NOT CYGWIN) +###################################################################################### + + +###################################################################################### +### 3) Define your target(s): just an executable here +###################################################################################### + +ADD_EXECUTABLE(tspExample main.cpp) +ADD_DEPENDENCIES(tspExample tsp peo rmc_mpi) +###################################################################################### + + +###################################################################################### +### 4) Optionnal: define properties +###################################################################################### + +SET(LESSON3_VERSION ${GLOBAL_VERSION}) +SET_TARGET_PROPERTIES(tspExample PROPERTIES VERSION "${LESSON3_VERSION}") +###################################################################################### + + +###################################################################################### +### 5) Link the librairies +###################################################################################### + +TARGET_LINK_LIBRARIES(tspExample ${XML2_LIBS} tsp peo rmc_mpi eo eoutils) + +###################################################################################### + + +###################################################################################### +### 6) Windows advanced config - especially for Microsoft Visual Studio 8 +###################################################################################### + + IF(CMAKE_CXX_COMPILER MATCHES cl) + IF(NOT WITH_SHARED_LIBS) + IF(CMAKE_GENERATOR STREQUAL "Visual Studio 8 2005") + SET(CMAKE_CXX_FLAGS "/nologo /W3 /Gy") + SET(CMAKE_CXX_FLAGS_DEBUG "/MTd /Z7 /Od") + SET(CMAKE_CXX_FLAGS_RELEASE "/MT /O2") + SET(CMAKE_CXX_FLAGS_MINSIZEREL "/MT /O2") + SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "/MTd /Z7 /Od") + SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SUBSYSTEM:CONSOLE") + + ENDIF(CMAKE_GENERATOR STREQUAL "Visual Studio 8 2005") + ENDIF(NOT WITH_SHARED_LIBS) + ENDIF(CMAKE_CXX_COMPILER MATCHES cl) +###################################################################################### + + + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson3/ParadisEO-PEO_Lesson3.pdf b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson3/ParadisEO-PEO_Lesson3.pdf new file mode 100755 index 0000000000000000000000000000000000000000..dda6ad44f861aee4d2a5469dd909ae242c586959 GIT binary patch literal 117573 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 MbLLnqu~bq1AGl(L1^@s6 literal 0 HcmV?d00001 diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson3/lesson.param b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson3/lesson.param new file mode 100644 index 000000000..eb843c65f --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson3/lesson.param @@ -0,0 +1,12 @@ +## miscallenous parameters + +--debug=false + +## deployment schema + +--schema=schema.xml + +## parameters + +--inst=../examples/tsp/benchs/eil101.tsp + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson3/main.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson3/main.cpp new file mode 100644 index 000000000..a7caa0c8a --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson3/main.cpp @@ -0,0 +1,194 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include "route.h" +#include "route_init.h" +#include "route_eval.h" + +#include "order_xover.h" +#include "city_swap.h" + +#include "param.h" + + +#include + + +#define POP_SIZE 10 +#define NUM_GEN 100 +#define CROSS_RATE 1.0 +#define MUT_RATE 0.01 + +#define MIG_FREQ 10 +#define MIG_SIZE 5 + + +int main( int __argc, char** __argv ) { + + // initializing the ParadisEO-PEO environment + peo :: init( __argc, __argv ); + + + // processing the command line specified parameters + loadParameters( __argc, __argv ); + + + // init, eval operators, EA operators ------------------------------------------------------------------------------------------------------------- + + RouteInit route_init; // random init object - creates random Route objects + RouteEval full_eval; // evaluator object - offers a fitness value for a specified Route object + + OrderXover crossover; // crossover operator - creates two offsprings out of two specified parents + CitySwap mutation; // mutation operator - randomly mutates one gene for a specified individual + // ------------------------------------------------------------------------------------------------------------------------------------------------ + + + // evolutionary algorithm components -------------------------------------------------------------------------------------------------------------- + + eoPop< Route > population( POP_SIZE, route_init ); // initial population for the algorithm having POP_SIZE individuals + peoParaPopEval< Route > eaPopEval( full_eval ); // evaluator object - to be applied at each iteration on the entire population + + eoGenContinue< Route > eaCont( NUM_GEN ); // continuation criterion - the algorithm will iterate for NUM_GEN generations + eoCheckPoint< Route > eaCheckpointContinue( eaCont ); // checkpoint object - verify at each iteration if the continuation criterion is met + + eoRankingSelect< Route > selectionStrategy; // selection strategy - applied at each iteration for selecting parent individuals + eoSelectNumber< Route > eaSelect( selectionStrategy, POP_SIZE ); // selection object - POP_SIZE individuals are selected at each iteration + + // transform operator - includes the crossover and the mutation operators with a specified associated rate + eoSGATransform< Route > transform( crossover, CROSS_RATE, mutation, MUT_RATE ); + peoSeqTransform< Route > eaTransform( transform ); // ParadisEO transform operator (please remark the peo prefix) - wraps an e EO transform object + + eoPlusReplacement< Route > eaReplace; // replacement strategy - for replacing the initial population with offspring individuals + // ------------------------------------------------------------------------------------------------------------------------------------------------ + + + + RingTopology topology; + + // migration policy and components ---------------------------------------------------------------------------------------------------------------- + + eoPeriodicContinue< Route > mig_cont( MIG_FREQ ); // migration occurs periodically + + eoRandomSelect< Route > mig_select_one; // emigrants are randomly selected + eoSelectNumber< Route > mig_select( mig_select_one, MIG_SIZE ); + + eoPlusReplacement< Route > mig_replace; // immigrants replace the worse individuals + + peoSyncIslandMig< Route > mig( MIG_FREQ, mig_select, mig_replace, topology, population, population ); + //peoAsyncIslandMig< Route > mig( mig_cont, mig_select, mig_replace, topology, population, population ); + + eaCheckpointContinue.add( mig ); + // ------------------------------------------------------------------------------------------------------------------------------------------------ + + + + + + // ParadisEO-PEO evolutionary algorithm ----------------------------------------------------------------------------------------------------------- + + peoEA< Route > eaAlg( eaCheckpointContinue, eaPopEval, eaSelect, eaTransform, eaReplace ); + + mig.setOwner( eaAlg ); + + eaAlg( population ); // specifying the initial population for the algorithm, to be iteratively evolved + // ------------------------------------------------------------------------------------------------------------------------------------------------ + + + + + // evolutionary algorithm components -------------------------------------------------------------------------------------------------------------- + + eoPop< Route > population2( POP_SIZE, route_init ); // initial population for the algorithm having POP_SIZE individuals + peoParaPopEval< Route > eaPopEval2( full_eval ); // evaluator object - to be applied at each iteration on the entire population + + eoGenContinue< Route > eaCont2( NUM_GEN ); // continuation criterion - the algorithm will iterate for NUM_GEN generations + eoCheckPoint< Route > eaCheckpointContinue2( eaCont2 ); // checkpoint object - verify at each iteration if the continuation criterion is met + + eoRankingSelect< Route > selectionStrategy2; // selection strategy - applied at each iteration for selecting parent individuals + eoSelectNumber< Route > eaSelect2( selectionStrategy2, POP_SIZE ); // selection object - POP_SIZE individuals are selected at each iteration + + // transform operator - includes the crossover and the mutation operators with a specified associated rate + eoSGATransform< Route > transform2( crossover, CROSS_RATE, mutation, MUT_RATE ); + peoSeqTransform< Route > eaTransform2( transform2 ); // ParadisEO transform operator (please remark the peo prefix) - wraps an e EO transform object + + eoPlusReplacement< Route > eaReplace2; // replacement strategy - for replacing the initial population with offspring individuals + // ------------------------------------------------------------------------------------------------------------------------------------------------ + + + + + // migration policy and components ---------------------------------------------------------------------------------------------------------------- + + eoPeriodicContinue< Route > mig_cont2( MIG_FREQ ); // migration occurs periodically + + eoRandomSelect< Route > mig_select_one2; // emigrants are randomly selected + eoSelectNumber< Route > mig_select2( mig_select_one2, MIG_SIZE ); + + eoPlusReplacement< Route > mig_replace2; // immigrants replace the worse individuals + + peoSyncIslandMig< Route > mig2( MIG_FREQ, mig_select2, mig_replace2, topology, population2, population2 ); + //peoAsyncIslandMig< Route > mig2( mig_cont2, mig_select2, mig_replace2, topology, population2, population2 ); + + eaCheckpointContinue2.add( mig2 ); + // ------------------------------------------------------------------------------------------------------------------------------------------------ + + + + + + // ParadisEO-PEO evolutionary algorithm ----------------------------------------------------------------------------------------------------------- + + peoEA< Route > eaAlg2( eaCheckpointContinue2, eaPopEval2, eaSelect2, eaTransform2, eaReplace2 ); + + mig2.setOwner( eaAlg2 ); + + eaAlg2( population2 ); // specifying the initial population for the algorithm, to be iteratively evolved + // ------------------------------------------------------------------------------------------------------------------------------------------------ + + + + peo :: run( ); + peo :: finalize( ); + + if(getNodeRank()==1) + { + std::cout << "Population 1 :\n" << population << std::endl; + std::cout << "Population 2 :\n" << population2 << std::endl; + } + // shutting down the ParadisEO-PEO environment + + return 0; +} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson3/paradiseo-peo-lsn.doxyfile b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson3/paradiseo-peo-lsn.doxyfile new file mode 100644 index 000000000..1d97a8596 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson3/paradiseo-peo-lsn.doxyfile @@ -0,0 +1,241 @@ +# Doxyfile 1.4.7 + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- +PROJECT_NAME = "ParadisEO-PEO Lesson3" +PROJECT_NUMBER = 0.1 +OUTPUT_DIRECTORY = ../../../doc/html/lesson3 +CREATE_SUBDIRS = NO +OUTPUT_LANGUAGE = English +USE_WINDOWS_ENCODING = NO +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = YES +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the +ALWAYS_DETAILED_SEC = NO +INLINE_INHERITED_MEMB = NO +FULL_PATH_NAMES = NO +STRIP_FROM_PATH = +STRIP_FROM_INC_PATH = +SHORT_NAMES = NO +JAVADOC_AUTOBRIEF = YES +MULTILINE_CPP_IS_BRIEF = NO +DETAILS_AT_TOP = NO +INHERIT_DOCS = YES +SEPARATE_MEMBER_PAGES = NO +TAB_SIZE = 8 +ALIASES = +OPTIMIZE_OUTPUT_FOR_C = NO +OPTIMIZE_OUTPUT_JAVA = NO +BUILTIN_STL_SUPPORT = NO +DISTRIBUTE_GROUP_DOC = NO +SUBGROUPING = YES +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- +EXTRACT_ALL = NO +EXTRACT_PRIVATE = YES +EXTRACT_STATIC = YES +EXTRACT_LOCAL_CLASSES = YES +EXTRACT_LOCAL_METHODS = NO +HIDE_UNDOC_MEMBERS = YES +HIDE_UNDOC_CLASSES = YES +HIDE_FRIEND_COMPOUNDS = NO +HIDE_IN_BODY_DOCS = NO +INTERNAL_DOCS = NO +CASE_SENSE_NAMES = YES +HIDE_SCOPE_NAMES = NO +SHOW_INCLUDE_FILES = YES +INLINE_INFO = YES +SORT_MEMBER_DOCS = NO +SORT_BRIEF_DOCS = NO +SORT_BY_SCOPE_NAME = NO +GENERATE_TODOLIST = YES +GENERATE_TESTLIST = YES +GENERATE_BUGLIST = YES +GENERATE_DEPRECATEDLIST= YES +ENABLED_SECTIONS = +MAX_INITIALIZER_LINES = 30 +SHOW_USED_FILES = YES +SHOW_DIRECTORIES = NO +FILE_VERSION_FILTER = +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- +QUIET = YES +WARNINGS = YES +WARN_IF_UNDOCUMENTED = YES +WARN_IF_DOC_ERROR = YES +WARN_NO_PARAMDOC = NO +WARN_FORMAT = "$file:$line: $text" +WARN_LOGFILE = +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- +INPUT = . +FILE_PATTERNS = *.cpp \ + *.h \ + NEWS \ + README +RECURSIVE = YES +EXCLUDE = +EXCLUDE_SYMLINKS = NO +EXCLUDE_PATTERNS = +EXAMPLE_PATH = +EXAMPLE_PATTERNS = * +EXAMPLE_RECURSIVE = NO +IMAGE_PATH = ../../docs/images +INPUT_FILTER = +FILTER_PATTERNS = +FILTER_SOURCE_FILES = NO +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- +SOURCE_BROWSER = YES +INLINE_SOURCES = NO +STRIP_CODE_COMMENTS = YES +REFERENCED_BY_RELATION = YES +REFERENCES_RELATION = YES +REFERENCES_LINK_SOURCE = YES +USE_HTAGS = NO +VERBATIM_HEADERS = YES +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- +ALPHABETICAL_INDEX = YES +COLS_IN_ALPHA_INDEX = 3 +IGNORE_PREFIX = peo +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- +GENERATE_HTML = YES +HTML_OUTPUT = html +HTML_FILE_EXTENSION = .html +HTML_HEADER = +HTML_FOOTER = +HTML_STYLESHEET = +HTML_ALIGN_MEMBERS = YES +GENERATE_HTMLHELP = NO +CHM_FILE = +HHC_LOCATION = +GENERATE_CHI = NO +BINARY_TOC = NO +TOC_EXPAND = NO +DISABLE_INDEX = NO +ENUM_VALUES_PER_LINE = 4 +GENERATE_TREEVIEW = YES +TREEVIEW_WIDTH = 250 +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- +GENERATE_LATEX = YES +LATEX_OUTPUT = latex +LATEX_CMD_NAME = latex +MAKEINDEX_CMD_NAME = makeindex +COMPACT_LATEX = NO +PAPER_TYPE = a4wide +EXTRA_PACKAGES = +LATEX_HEADER = +PDF_HYPERLINKS = YES +USE_PDFLATEX = YES +LATEX_BATCHMODE = NO +LATEX_HIDE_INDICES = NO +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- +GENERATE_RTF = NO +RTF_OUTPUT = rtf +COMPACT_RTF = NO +RTF_HYPERLINKS = NO +RTF_STYLESHEET_FILE = +RTF_EXTENSIONS_FILE = +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- +GENERATE_MAN = YES +MAN_OUTPUT = man +MAN_EXTENSION = .3 +MAN_LINKS = NO +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- +GENERATE_XML = NO +XML_OUTPUT = xml +XML_SCHEMA = +XML_DTD = +XML_PROGRAMLISTING = YES +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- +GENERATE_AUTOGEN_DEF = NO +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- +GENERATE_PERLMOD = NO +PERLMOD_LATEX = NO +PERLMOD_PRETTY = YES +PERLMOD_MAKEVAR_PREFIX = +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- +ENABLE_PREPROCESSING = YES +MACRO_EXPANSION = NO +EXPAND_ONLY_PREDEF = NO +SEARCH_INCLUDES = YES +INCLUDE_PATH = +INCLUDE_FILE_PATTERNS = +PREDEFINED = +EXPAND_AS_DEFINED = +SKIP_FUNCTION_MACROS = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- +TAGFILES = ../../../paradiseo-mo/docs/eo.doxytag=../../../../../paradiseo-mo/docs/html \ + ../../../paradiseo-mo/docs/mo.doxytag=../../../../../paradiseo-mo/docs/html \ + ../../docs/paradiseo-peo.doxytag=../../ \ + ../shared/paradiseo-peo-lsn-shared.doxytag=../../lsnshared/html +GENERATE_TAGFILE = ../../docs/paradiseo-peo-lsn.doxytag +ALLEXTERNALS = NO +EXTERNAL_GROUPS = YES +PERL_PATH = /usr/bin/perl +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- +CLASS_DIAGRAMS = YES +HIDE_UNDOC_RELATIONS = YES +HAVE_DOT = NO +CLASS_GRAPH = YES +COLLABORATION_GRAPH = YES +GROUP_GRAPHS = YES +UML_LOOK = NO +TEMPLATE_RELATIONS = NO +INCLUDE_GRAPH = YES +INCLUDED_BY_GRAPH = YES +CALL_GRAPH = NO +CALLER_GRAPH = NO +GRAPHICAL_HIERARCHY = YES +DIRECTORY_GRAPH = YES +DOT_IMAGE_FORMAT = png +DOT_PATH = +DOTFILE_DIRS = +MAX_DOT_GRAPH_WIDTH = 1024 +MAX_DOT_GRAPH_HEIGHT = 1024 +MAX_DOT_GRAPH_DEPTH = 0 +DOT_TRANSPARENT = NO +DOT_MULTI_TARGETS = NO +GENERATE_LEGEND = YES +DOT_CLEANUP = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- +SEARCHENGINE = YES diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson3/schema.xml b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson3/schema.xml new file mode 100644 index 000000000..9b8bf316c --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson3/schema.xml @@ -0,0 +1,19 @@ + + + + + + + + + 1 + 2 + + + + + + + + + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson4/CMakeLists.txt b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson4/CMakeLists.txt new file mode 100644 index 000000000..7a4ac3edc --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson4/CMakeLists.txt @@ -0,0 +1,98 @@ + +###################################################################################### +### 0) Set the compiler and define targets to easily run the lessons +###################################################################################### + +SET (CMAKE_CXX_COMPILER mpicxx) + +ADD_CUSTOM_TARGET(install DEPENDS ${ParadisEO-PEO_SOURCE_DIR}/tutorial/Lesson4/lesson.param ${ParadisEO-PEO_SOURCE_DIR}/tutorial/Lesson4/schema.xml) + +ADD_CUSTOM_COMMAND( + TARGET install + POST_BUILD + COMMAND ${CMAKE_COMMAND} + ARGS -E copy_if_different + ${ParadisEO-PEO_SOURCE_DIR}/tutorial/Lesson4/lesson.param + ${ParadisEO-PEO_BINARY_DIR}/tutorial/Lesson4) +ADD_CUSTOM_COMMAND( + TARGET install + POST_BUILD + COMMAND ${CMAKE_COMMAND} + ARGS -E copy_if_different + ${ParadisEO-PEO_SOURCE_DIR}/tutorial/Lesson4/schema.xml + ${ParadisEO-PEO_BINARY_DIR}/tutorial/Lesson4) +###################################################################################### + + +###################################################################################### +### 1) Include the sources +###################################################################################### + +INCLUDE_DIRECTORIES(${EO_SRC_DIR}/src ${MO_SRC_DIR}/src ${ParadisEO-PEO_SOURCE_DIR}/src) + +###################################################################################### + + +###################################################################################### +### 2) Specify where CMake can find the libraries +###################################################################################### + +IF(NOT WIN32 OR CYGWIN) + LINK_DIRECTORIES(${EO_BIN_DIR}/lib ${ParadisEO-PEO_BINARY_DIR}/lib) +ENDIF(NOT WIN32 OR CYGWIN) + +# especially for Visual Studio +IF(WIN32 AND NOT CYGWIN) + LINK_DIRECTORIES(${EO_BIN_DIR}\\lib\\${CMAKE_BUILD_TYPE} ${ParadisEO-PEO_BINARY_DIR}\\lib\\${CMAKE_BUILD_TYPE}) +ENDIF(WIN32 AND NOT CYGWIN) +###################################################################################### + + +###################################################################################### +### 3) Define your target(s): just an executable here +###################################################################################### + +ADD_EXECUTABLE(psoExample main.cpp) +ADD_DEPENDENCIES(psoExample peo rmc_mpi) +###################################################################################### + + +###################################################################################### +### 4) Optionnal: define properties +###################################################################################### + +SET(LESSON4_VERSION ${GLOBAL_VERSION}) +SET_TARGET_PROPERTIES(psoExample PROPERTIES VERSION "${LESSON4_VERSION}") +###################################################################################### + + +###################################################################################### +### 5) Link the librairies +###################################################################################### + +TARGET_LINK_LIBRARIES(psoExample ${XML2_LIBS} peo rmc_mpi eo eoutils) + +###################################################################################### + + +###################################################################################### +### 6) Windows advanced config - especially for Microsoft Visual Studio 8 +###################################################################################### + + IF(CMAKE_CXX_COMPILER MATCHES cl) + IF(NOT WITH_SHARED_LIBS) + IF(CMAKE_GENERATOR STREQUAL "Visual Studio 8 2005") + SET(CMAKE_CXX_FLAGS "/nologo /W3 /Gy") + SET(CMAKE_CXX_FLAGS_DEBUG "/MTd /Z7 /Od") + SET(CMAKE_CXX_FLAGS_RELEASE "/MT /O2") + SET(CMAKE_CXX_FLAGS_MINSIZEREL "/MT /O2") + SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "/MTd /Z7 /Od") + SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SUBSYSTEM:CONSOLE") + + ENDIF(CMAKE_GENERATOR STREQUAL "Visual Studio 8 2005") + ENDIF(NOT WITH_SHARED_LIBS) + ENDIF(CMAKE_CXX_COMPILER MATCHES cl) +###################################################################################### + + + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson4/lesson.param b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson4/lesson.param new file mode 100644 index 000000000..6ba37c292 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson4/lesson.param @@ -0,0 +1,7 @@ +## miscallenous parameters + +--debug=false + +## deployment schema + +--schema=schema.xml \ No newline at end of file diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson4/main.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson4/main.cpp new file mode 100644 index 000000000..75f076531 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson4/main.cpp @@ -0,0 +1,128 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Clive Canape +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* clive.canape@inria.fr +*/ + +//For define a parallel PSO or a sequential PSO +#define PARA + +#include + +typedef eoRealParticle < double >Indi; +//Evaluation function + +double f (const Indi & _indi) +{ + //Levy function f* = -21.502356 x*=(1,1,1,-9.752356 ) for vector size = 4 + + const double PI = 4.0 * atan(1.0); + double sum=0.; + for (unsigned i = 0; i < _indi.size()-1; i++) + sum+=pow((_indi[i]-1),2)*(1+pow(sin(3*PI*_indi[i+1]),2)); + sum+=pow(sin(3*PI*_indi[0]),2); + sum+=(_indi[_indi.size()-1]-1)*(1+pow(sin(2*PI*_indi[_indi.size()-1]),2)); + return (-sum); +} + +int main (int __argc, char *__argv[]) +{ + +#ifdef PARA +//Initialization + peo :: init( __argc, __argv ); +#endif +//Parameters + const unsigned int VEC_SIZE = 4; + const unsigned int POP_SIZE = 20; + const unsigned int NEIGHBORHOOD_SIZE= 5; + const unsigned int MAX_GEN = 500; + const double INIT_POSITION_MIN = -10.0; + const double INIT_POSITION_MAX = 1.0; + const double INIT_VELOCITY_MIN = -1; + const double INIT_VELOCITY_MAX = 1; + const double C1 = 0.5; + const double C2 = 2; + rng.reseed (time(0)); +#ifndef PARA + eoEvalFuncPtr plainEval(f); + eoEvalFuncCounter < Indi > eval (plainEval); +#else + peoEvalFuncPSO plainEval(f); + eoEvalFuncCounter < Indi > evalSeq (plainEval); + peoParaPopEval< Indi > eval(plainEval); +#endif + eoUniformGenerator < double >uGen (INIT_POSITION_MIN, INIT_POSITION_MAX); + eoInitFixedLength < Indi > random (VEC_SIZE, uGen); +//Velocity + eoUniformGenerator < double >sGen (INIT_VELOCITY_MIN, INIT_VELOCITY_MAX); + eoVelocityInitFixedLength < Indi > veloRandom (VEC_SIZE, sGen); +//Initializing the best + eoFirstIsBestInit < Indi > localInit; +//Flight + eoRealVectorBounds bndsFlight(VEC_SIZE,INIT_POSITION_MIN,INIT_POSITION_MAX); + eoStandardFlight < Indi > flight(bndsFlight); + eoPop < Indi > pop; + pop.append (POP_SIZE, random); +#ifndef PARA + apply(eval, pop); +#else +//The first evaluation must be sequential + apply(evalSeq, pop); +#endif + apply < Indi > (veloRandom, pop); + apply < Indi > (localInit, pop); +//Topology + eoLinearTopology topology(NEIGHBORHOOD_SIZE); + topology.setup(pop); + eoRealVectorBounds bnds(VEC_SIZE,INIT_VELOCITY_MIN,INIT_VELOCITY_MAX); + eoStandardVelocity < Indi > velocity (topology,C1,C2,bnds); + eoGenContinue < Indi > genContPara (MAX_GEN); + eoCombinedContinue continuatorPara (genContPara); + eoCheckPoint checkpoint(continuatorPara); +#ifndef PARA +//Sequential algorithm + eoSyncEasyPSO < Indi > psa(checkpoint, eval, velocity, flight); + psa (pop); + pop.sort (); + std::cout << "Final population :\n" << pop << std::endl; +#else +//Parallel algorithm + peoPSO < Indi > psa(checkpoint, eval, velocity, flight); + psa(pop); + peo :: run(); + peo :: finalize(); + if(getNodeRank()==1) + std::cout << "Final population :\n" << pop << std::endl; +#endif +} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson4/paradiseo-peo.lsn.doxyfile b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson4/paradiseo-peo.lsn.doxyfile new file mode 100644 index 000000000..35766a845 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson4/paradiseo-peo.lsn.doxyfile @@ -0,0 +1,241 @@ +# Doxyfile 1.4.7 + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- +PROJECT_NAME = "ParadisEO-PEO Lesson4" +PROJECT_NUMBER = 0.1 +OUTPUT_DIRECTORY = ../../../doc/html/lesson4 +CREATE_SUBDIRS = NO +OUTPUT_LANGUAGE = English +USE_WINDOWS_ENCODING = NO +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = YES +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the +ALWAYS_DETAILED_SEC = NO +INLINE_INHERITED_MEMB = NO +FULL_PATH_NAMES = NO +STRIP_FROM_PATH = +STRIP_FROM_INC_PATH = +SHORT_NAMES = NO +JAVADOC_AUTOBRIEF = YES +MULTILINE_CPP_IS_BRIEF = NO +DETAILS_AT_TOP = NO +INHERIT_DOCS = YES +SEPARATE_MEMBER_PAGES = NO +TAB_SIZE = 8 +ALIASES = +OPTIMIZE_OUTPUT_FOR_C = NO +OPTIMIZE_OUTPUT_JAVA = NO +BUILTIN_STL_SUPPORT = NO +DISTRIBUTE_GROUP_DOC = NO +SUBGROUPING = YES +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- +EXTRACT_ALL = NO +EXTRACT_PRIVATE = YES +EXTRACT_STATIC = YES +EXTRACT_LOCAL_CLASSES = YES +EXTRACT_LOCAL_METHODS = NO +HIDE_UNDOC_MEMBERS = YES +HIDE_UNDOC_CLASSES = YES +HIDE_FRIEND_COMPOUNDS = NO +HIDE_IN_BODY_DOCS = NO +INTERNAL_DOCS = NO +CASE_SENSE_NAMES = YES +HIDE_SCOPE_NAMES = NO +SHOW_INCLUDE_FILES = YES +INLINE_INFO = YES +SORT_MEMBER_DOCS = NO +SORT_BRIEF_DOCS = NO +SORT_BY_SCOPE_NAME = NO +GENERATE_TODOLIST = YES +GENERATE_TESTLIST = YES +GENERATE_BUGLIST = YES +GENERATE_DEPRECATEDLIST= YES +ENABLED_SECTIONS = +MAX_INITIALIZER_LINES = 30 +SHOW_USED_FILES = YES +SHOW_DIRECTORIES = NO +FILE_VERSION_FILTER = +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- +QUIET = YES +WARNINGS = YES +WARN_IF_UNDOCUMENTED = YES +WARN_IF_DOC_ERROR = YES +WARN_NO_PARAMDOC = NO +WARN_FORMAT = "$file:$line: $text" +WARN_LOGFILE = +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- +INPUT = . +FILE_PATTERNS = *.cpp \ + *.h \ + NEWS \ + README +RECURSIVE = YES +EXCLUDE = +EXCLUDE_SYMLINKS = NO +EXCLUDE_PATTERNS = +EXAMPLE_PATH = +EXAMPLE_PATTERNS = * +EXAMPLE_RECURSIVE = NO +IMAGE_PATH = ../../docs/images +INPUT_FILTER = +FILTER_PATTERNS = +FILTER_SOURCE_FILES = NO +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- +SOURCE_BROWSER = YES +INLINE_SOURCES = NO +STRIP_CODE_COMMENTS = YES +REFERENCED_BY_RELATION = YES +REFERENCES_RELATION = YES +REFERENCES_LINK_SOURCE = YES +USE_HTAGS = NO +VERBATIM_HEADERS = YES +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- +ALPHABETICAL_INDEX = YES +COLS_IN_ALPHA_INDEX = 3 +IGNORE_PREFIX = peo +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- +GENERATE_HTML = YES +HTML_OUTPUT = html +HTML_FILE_EXTENSION = .html +HTML_HEADER = +HTML_FOOTER = +HTML_STYLESHEET = +HTML_ALIGN_MEMBERS = YES +GENERATE_HTMLHELP = NO +CHM_FILE = +HHC_LOCATION = +GENERATE_CHI = NO +BINARY_TOC = NO +TOC_EXPAND = NO +DISABLE_INDEX = NO +ENUM_VALUES_PER_LINE = 4 +GENERATE_TREEVIEW = YES +TREEVIEW_WIDTH = 250 +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- +GENERATE_LATEX = YES +LATEX_OUTPUT = latex +LATEX_CMD_NAME = latex +MAKEINDEX_CMD_NAME = makeindex +COMPACT_LATEX = NO +PAPER_TYPE = a4wide +EXTRA_PACKAGES = +LATEX_HEADER = +PDF_HYPERLINKS = YES +USE_PDFLATEX = YES +LATEX_BATCHMODE = NO +LATEX_HIDE_INDICES = NO +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- +GENERATE_RTF = NO +RTF_OUTPUT = rtf +COMPACT_RTF = NO +RTF_HYPERLINKS = NO +RTF_STYLESHEET_FILE = +RTF_EXTENSIONS_FILE = +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- +GENERATE_MAN = YES +MAN_OUTPUT = man +MAN_EXTENSION = .3 +MAN_LINKS = NO +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- +GENERATE_XML = NO +XML_OUTPUT = xml +XML_SCHEMA = +XML_DTD = +XML_PROGRAMLISTING = YES +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- +GENERATE_AUTOGEN_DEF = NO +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- +GENERATE_PERLMOD = NO +PERLMOD_LATEX = NO +PERLMOD_PRETTY = YES +PERLMOD_MAKEVAR_PREFIX = +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- +ENABLE_PREPROCESSING = YES +MACRO_EXPANSION = NO +EXPAND_ONLY_PREDEF = NO +SEARCH_INCLUDES = YES +INCLUDE_PATH = +INCLUDE_FILE_PATTERNS = +PREDEFINED = +EXPAND_AS_DEFINED = +SKIP_FUNCTION_MACROS = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- +TAGFILES = ../../../paradiseo-mo/docs/eo.doxytag=../../../../../paradiseo-mo/docs/html \ + ../../../paradiseo-mo/docs/mo.doxytag=../../../../../paradiseo-mo/docs/html \ + ../../docs/paradiseo-peo.doxytag=../../ \ + ../shared/paradiseo-peo-lsn-shared.doxytag=../../lsnshared/html +GENERATE_TAGFILE = ../../docs/paradiseo-peo-lsn.doxytag +ALLEXTERNALS = NO +EXTERNAL_GROUPS = YES +PERL_PATH = /usr/bin/perl +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- +CLASS_DIAGRAMS = YES +HIDE_UNDOC_RELATIONS = YES +HAVE_DOT = NO +CLASS_GRAPH = YES +COLLABORATION_GRAPH = YES +GROUP_GRAPHS = YES +UML_LOOK = NO +TEMPLATE_RELATIONS = NO +INCLUDE_GRAPH = YES +INCLUDED_BY_GRAPH = YES +CALL_GRAPH = NO +CALLER_GRAPH = NO +GRAPHICAL_HIERARCHY = YES +DIRECTORY_GRAPH = YES +DOT_IMAGE_FORMAT = png +DOT_PATH = +DOTFILE_DIRS = +MAX_DOT_GRAPH_WIDTH = 1024 +MAX_DOT_GRAPH_HEIGHT = 1024 +MAX_DOT_GRAPH_DEPTH = 0 +DOT_TRANSPARENT = NO +DOT_MULTI_TARGETS = NO +GENERATE_LEGEND = YES +DOT_CLEANUP = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- +SEARCHENGINE = YES diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson4/schema.xml b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson4/schema.xml new file mode 100644 index 000000000..9b8bf316c --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson4/schema.xml @@ -0,0 +1,19 @@ + + + + + + + + + 1 + 2 + + + + + + + + + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson5/CMakeLists.txt b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson5/CMakeLists.txt new file mode 100644 index 000000000..469ac6dfe --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson5/CMakeLists.txt @@ -0,0 +1,98 @@ + +###################################################################################### +### 0) Set the compiler and define targets to easily run the lessons +###################################################################################### + +SET (CMAKE_CXX_COMPILER mpicxx) + +ADD_CUSTOM_TARGET(install DEPENDS ${ParadisEO-PEO_SOURCE_DIR}/tutorial/Lesson5/lesson.param ${ParadisEO-PEO_SOURCE_DIR}/tutorial/Lesson5/schema.xml) + +ADD_CUSTOM_COMMAND( + TARGET install + POST_BUILD + COMMAND ${CMAKE_COMMAND} + ARGS -E copy_if_different + ${ParadisEO-PEO_SOURCE_DIR}/tutorial/Lesson5/lesson.param + ${ParadisEO-PEO_BINARY_DIR}/tutorial/Lesson5) +ADD_CUSTOM_COMMAND( + TARGET install + POST_BUILD + COMMAND ${CMAKE_COMMAND} + ARGS -E copy_if_different + ${ParadisEO-PEO_SOURCE_DIR}/tutorial/Lesson5/schema.xml + ${ParadisEO-PEO_BINARY_DIR}/tutorial/Lesson5) +###################################################################################### + + +###################################################################################### +### 1) Include the sources +###################################################################################### + +INCLUDE_DIRECTORIES(${EO_SRC_DIR}/src ${MO_SRC_DIR}/src ${ParadisEO-PEO_SOURCE_DIR}/src) + +###################################################################################### + + +###################################################################################### +### 2) Specify where CMake can find the libraries +###################################################################################### + +IF(NOT WIN32 OR CYGWIN) + LINK_DIRECTORIES(${EO_BIN_DIR}/lib ${ParadisEO-PEO_BINARY_DIR}/lib) +ENDIF(NOT WIN32 OR CYGWIN) + +# especially for Visual Studio +IF(WIN32 AND NOT CYGWIN) + LINK_DIRECTORIES(${EO_BIN_DIR}\\lib\\${CMAKE_BUILD_TYPE} ${ParadisEO-PEO_BINARY_DIR}\\lib\\${CMAKE_BUILD_TYPE}) +ENDIF(WIN32 AND NOT CYGWIN) +###################################################################################### + + +###################################################################################### +### 3) Define your target(s): just an executable here +###################################################################################### + +ADD_EXECUTABLE(psoExample main.cpp) +ADD_DEPENDENCIES(psoExample peo rmc_mpi) +###################################################################################### + + +###################################################################################### +### 4) Optionnal: define properties +###################################################################################### + +SET(LESSON4_VERSION ${GLOBAL_VERSION}) +SET_TARGET_PROPERTIES(psoExample PROPERTIES VERSION "${LESSON4_VERSION}") +###################################################################################### + + +###################################################################################### +### 5) Link the librairies +###################################################################################### + +TARGET_LINK_LIBRARIES(psoExample ${XML2_LIBS} peo rmc_mpi eo eoutils) + +###################################################################################### + + +###################################################################################### +### 6) Windows advanced config - especially for Microsoft Visual Studio 8 +###################################################################################### + + IF(CMAKE_CXX_COMPILER MATCHES cl) + IF(NOT WITH_SHARED_LIBS) + IF(CMAKE_GENERATOR STREQUAL "Visual Studio 8 2005") + SET(CMAKE_CXX_FLAGS "/nologo /W3 /Gy") + SET(CMAKE_CXX_FLAGS_DEBUG "/MTd /Z7 /Od") + SET(CMAKE_CXX_FLAGS_RELEASE "/MT /O2") + SET(CMAKE_CXX_FLAGS_MINSIZEREL "/MT /O2") + SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "/MTd /Z7 /Od") + SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SUBSYSTEM:CONSOLE") + + ENDIF(CMAKE_GENERATOR STREQUAL "Visual Studio 8 2005") + ENDIF(NOT WITH_SHARED_LIBS) + ENDIF(CMAKE_CXX_COMPILER MATCHES cl) +###################################################################################### + + + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson5/lesson.param b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson5/lesson.param new file mode 100644 index 000000000..6ba37c292 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson5/lesson.param @@ -0,0 +1,7 @@ +## miscallenous parameters + +--debug=false + +## deployment schema + +--schema=schema.xml \ No newline at end of file diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson5/main.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson5/main.cpp new file mode 100644 index 000000000..1f97d78c2 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson5/main.cpp @@ -0,0 +1,166 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Clive Canape +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* clive.canape@inria.fr +*/ + +#include + +// You can choose : a replacement or an affectation on the velocity +#define REPLAC + +typedef eoRealParticle < double >Indi; + + +//Evaluation function +double f (const Indi & _indi) +{ + //Levy function f* = -21.502356 x*=(1,1,1,-9.752356 ) for vector size = 4 + + const double PI = 4.0 * atan(1.0); + double sum=0.; + for (unsigned i = 0; i < _indi.size()-1; i++) + sum+=pow((_indi[i]-1),2)*(1+pow(sin(3*PI*_indi[i+1]),2)); + sum+=pow(sin(3*PI*_indi[0]),2); + sum+=(_indi[_indi.size()-1]-1)*(1+pow(sin(2*PI*_indi[_indi.size()-1]),2)); + return (-sum); +} + +int main (int __argc, char *__argv[]) +{ + +//Initialization + peo :: init( __argc, __argv ); +//Parameters + + const unsigned int MIG_FREQ = 10; // 1 or 2 for peoPSOVelocity ... + const unsigned int VEC_SIZE = 4; + const unsigned int POP_SIZE = 10; + const unsigned int NEIGHBORHOOD_SIZE= 5; + const unsigned int MAX_GEN = 100; + const double INIT_POSITION_MIN = -10.0; + const double INIT_POSITION_MAX = 1.0; + const double INIT_VELOCITY_MIN = -1; + const double INIT_VELOCITY_MAX = 1; + const double C1 = 1; + const double C2 = 0.5; +// c3 is used to calculate of an affectation on the velocity + const double C3 = 2; + rng.reseed (time(0)); + + peoEvalFuncPSO plainEval(f); + eoUniformGenerator < double >uGen (INIT_POSITION_MIN, INIT_POSITION_MAX); + eoInitFixedLength < Indi > random (VEC_SIZE, uGen); + eoUniformGenerator < double >sGen (INIT_VELOCITY_MIN, INIT_VELOCITY_MAX); + eoVelocityInitFixedLength < Indi > veloRandom (VEC_SIZE, sGen); + eoFirstIsBestInit < Indi > localInit; + eoRealVectorBounds bndsFlight(VEC_SIZE,INIT_POSITION_MIN,INIT_POSITION_MAX); + eoStandardFlight < Indi > flight(bndsFlight); + eoEvalFuncCounter < Indi > evalSeq (plainEval); + peoParaPopEval< Indi > eval(plainEval); + eoPop < Indi > pop; + pop.append (POP_SIZE, random); + apply(evalSeq, pop); + apply < Indi > (veloRandom, pop); + apply < Indi > (localInit, pop); + eoLinearTopology topology(NEIGHBORHOOD_SIZE); + topology.setup(pop); + eoRealVectorBounds bnds(VEC_SIZE,INIT_VELOCITY_MIN,INIT_VELOCITY_MAX); + eoStandardVelocity < Indi > velocity (topology,C1,C2,bnds); + eoGenContinue < Indi > genContPara (MAX_GEN); + eoCheckPoint checkpoint(genContPara); + RingTopology topologyMig; + /*******************************************************************/ + eoPeriodicContinue< Indi > mig_cont( MIG_FREQ ); + peoPSOSelect mig_selec(topology); + eoSelectNumber< Indi > mig_select(mig_selec); +#ifndef REPLAC + peoPSOVelocity mig_replace(C3,velocity); +#else + peoPSOReplacement mig_replace; +#endif +/*****************************************************************/ + + + peoEvalFuncPSO plainEval2(f); + eoUniformGenerator < double >uGen2 (INIT_POSITION_MIN, INIT_POSITION_MAX); + eoInitFixedLength < Indi > random2 (VEC_SIZE, uGen); + eoUniformGenerator < double >sGen2 (INIT_VELOCITY_MIN, INIT_VELOCITY_MAX); + eoVelocityInitFixedLength < Indi > veloRandom2 (VEC_SIZE, sGen2); + eoFirstIsBestInit < Indi > localInit2; + eoRealVectorBounds bndsFlight2(VEC_SIZE,INIT_POSITION_MIN,INIT_POSITION_MAX); + eoStandardFlight < Indi > flight2(bndsFlight2); + eoEvalFuncCounter < Indi > evalSeq2 (plainEval2); + peoParaPopEval< Indi > eval2(plainEval2); + eoPop < Indi > pop2; + pop2.append (POP_SIZE, random2); + apply(evalSeq2, pop2); + apply < Indi > (veloRandom2, pop2); + apply < Indi > (localInit2, pop2); + eoLinearTopology topology2(NEIGHBORHOOD_SIZE); + topology2.setup(pop2); + eoRealVectorBounds bnds2(VEC_SIZE,INIT_VELOCITY_MIN,INIT_VELOCITY_MAX); + eoStandardVelocity < Indi > velocity2 (topology2,C1,C2,bnds2); + eoGenContinue < Indi > genContPara2 (MAX_GEN); + eoCheckPoint checkpoint2(genContPara2); + /*******************************************************************/ + eoPeriodicContinue< Indi > mig_cont2( MIG_FREQ ); + peoPSOSelect mig_selec2(topology2); + eoSelectNumber< Indi > mig_select2(mig_selec2); +#ifndef REPLAC + peoPSOVelocity mig_replace2(C3,velocity2); +#else + peoPSOReplacement mig_replace2; +#endif +/*******************************************************************/ + + peoAsyncIslandMig< Indi > mig( mig_cont, mig_select, mig_replace, topologyMig, pop, pop2); + checkpoint.add( mig ); + peoAsyncIslandMig< Indi > mig2( mig_cont2, mig_select2, mig_replace2, topologyMig, pop2, pop); + checkpoint.add( mig2 ); + + peoPSO < Indi > psa(checkpoint, eval, velocity, flight); + mig.setOwner( psa ); + psa(pop); + peoPSO < Indi > psa2(checkpoint2, eval2, velocity2, flight2); + mig2.setOwner( psa2 ); + psa2(pop2); + + peo :: run(); + peo :: finalize(); + if(getNodeRank()==1) + { + std::cout << "Population 1 :\n" << pop << std::endl; + std::cout << "Population 2 :\n" << pop2 << std::endl; + } +} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson5/paradiseo-peo.lsn.doxyfile b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson5/paradiseo-peo.lsn.doxyfile new file mode 100644 index 000000000..8a0b3d3fe --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson5/paradiseo-peo.lsn.doxyfile @@ -0,0 +1,241 @@ +# Doxyfile 1.4.7 + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- +PROJECT_NAME = "ParadisEO-PEO Lesson5" +PROJECT_NUMBER = 0.1 +OUTPUT_DIRECTORY = ../../../doc/html/lesson5 +CREATE_SUBDIRS = NO +OUTPUT_LANGUAGE = English +USE_WINDOWS_ENCODING = NO +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = YES +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the +ALWAYS_DETAILED_SEC = NO +INLINE_INHERITED_MEMB = NO +FULL_PATH_NAMES = NO +STRIP_FROM_PATH = +STRIP_FROM_INC_PATH = +SHORT_NAMES = NO +JAVADOC_AUTOBRIEF = YES +MULTILINE_CPP_IS_BRIEF = NO +DETAILS_AT_TOP = NO +INHERIT_DOCS = YES +SEPARATE_MEMBER_PAGES = NO +TAB_SIZE = 8 +ALIASES = +OPTIMIZE_OUTPUT_FOR_C = NO +OPTIMIZE_OUTPUT_JAVA = NO +BUILTIN_STL_SUPPORT = NO +DISTRIBUTE_GROUP_DOC = NO +SUBGROUPING = YES +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- +EXTRACT_ALL = NO +EXTRACT_PRIVATE = YES +EXTRACT_STATIC = YES +EXTRACT_LOCAL_CLASSES = YES +EXTRACT_LOCAL_METHODS = NO +HIDE_UNDOC_MEMBERS = YES +HIDE_UNDOC_CLASSES = YES +HIDE_FRIEND_COMPOUNDS = NO +HIDE_IN_BODY_DOCS = NO +INTERNAL_DOCS = NO +CASE_SENSE_NAMES = YES +HIDE_SCOPE_NAMES = NO +SHOW_INCLUDE_FILES = YES +INLINE_INFO = YES +SORT_MEMBER_DOCS = NO +SORT_BRIEF_DOCS = NO +SORT_BY_SCOPE_NAME = NO +GENERATE_TODOLIST = YES +GENERATE_TESTLIST = YES +GENERATE_BUGLIST = YES +GENERATE_DEPRECATEDLIST= YES +ENABLED_SECTIONS = +MAX_INITIALIZER_LINES = 30 +SHOW_USED_FILES = YES +SHOW_DIRECTORIES = NO +FILE_VERSION_FILTER = +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- +QUIET = YES +WARNINGS = YES +WARN_IF_UNDOCUMENTED = YES +WARN_IF_DOC_ERROR = YES +WARN_NO_PARAMDOC = NO +WARN_FORMAT = "$file:$line: $text" +WARN_LOGFILE = +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- +INPUT = . +FILE_PATTERNS = *.cpp \ + *.h \ + NEWS \ + README +RECURSIVE = YES +EXCLUDE = +EXCLUDE_SYMLINKS = NO +EXCLUDE_PATTERNS = +EXAMPLE_PATH = +EXAMPLE_PATTERNS = * +EXAMPLE_RECURSIVE = NO +IMAGE_PATH = ../../docs/images +INPUT_FILTER = +FILTER_PATTERNS = +FILTER_SOURCE_FILES = NO +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- +SOURCE_BROWSER = YES +INLINE_SOURCES = NO +STRIP_CODE_COMMENTS = YES +REFERENCED_BY_RELATION = YES +REFERENCES_RELATION = YES +REFERENCES_LINK_SOURCE = YES +USE_HTAGS = NO +VERBATIM_HEADERS = YES +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- +ALPHABETICAL_INDEX = YES +COLS_IN_ALPHA_INDEX = 3 +IGNORE_PREFIX = peo +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- +GENERATE_HTML = YES +HTML_OUTPUT = html +HTML_FILE_EXTENSION = .html +HTML_HEADER = +HTML_FOOTER = +HTML_STYLESHEET = +HTML_ALIGN_MEMBERS = YES +GENERATE_HTMLHELP = NO +CHM_FILE = +HHC_LOCATION = +GENERATE_CHI = NO +BINARY_TOC = NO +TOC_EXPAND = NO +DISABLE_INDEX = NO +ENUM_VALUES_PER_LINE = 4 +GENERATE_TREEVIEW = YES +TREEVIEW_WIDTH = 250 +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- +GENERATE_LATEX = YES +LATEX_OUTPUT = latex +LATEX_CMD_NAME = latex +MAKEINDEX_CMD_NAME = makeindex +COMPACT_LATEX = NO +PAPER_TYPE = a4wide +EXTRA_PACKAGES = +LATEX_HEADER = +PDF_HYPERLINKS = YES +USE_PDFLATEX = YES +LATEX_BATCHMODE = NO +LATEX_HIDE_INDICES = NO +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- +GENERATE_RTF = NO +RTF_OUTPUT = rtf +COMPACT_RTF = NO +RTF_HYPERLINKS = NO +RTF_STYLESHEET_FILE = +RTF_EXTENSIONS_FILE = +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- +GENERATE_MAN = YES +MAN_OUTPUT = man +MAN_EXTENSION = .3 +MAN_LINKS = NO +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- +GENERATE_XML = NO +XML_OUTPUT = xml +XML_SCHEMA = +XML_DTD = +XML_PROGRAMLISTING = YES +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- +GENERATE_AUTOGEN_DEF = NO +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- +GENERATE_PERLMOD = NO +PERLMOD_LATEX = NO +PERLMOD_PRETTY = YES +PERLMOD_MAKEVAR_PREFIX = +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- +ENABLE_PREPROCESSING = YES +MACRO_EXPANSION = NO +EXPAND_ONLY_PREDEF = NO +SEARCH_INCLUDES = YES +INCLUDE_PATH = +INCLUDE_FILE_PATTERNS = +PREDEFINED = +EXPAND_AS_DEFINED = +SKIP_FUNCTION_MACROS = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- +TAGFILES = ../../../paradiseo-mo/docs/eo.doxytag=../../../../../paradiseo-mo/docs/html \ + ../../../paradiseo-mo/docs/mo.doxytag=../../../../../paradiseo-mo/docs/html \ + ../../docs/paradiseo-peo.doxytag=../../ \ + ../shared/paradiseo-peo-lsn-shared.doxytag=../../lsnshared/html +GENERATE_TAGFILE = ../../docs/paradiseo-peo-lsn.doxytag +ALLEXTERNALS = NO +EXTERNAL_GROUPS = YES +PERL_PATH = /usr/bin/perl +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- +CLASS_DIAGRAMS = YES +HIDE_UNDOC_RELATIONS = YES +HAVE_DOT = NO +CLASS_GRAPH = YES +COLLABORATION_GRAPH = YES +GROUP_GRAPHS = YES +UML_LOOK = NO +TEMPLATE_RELATIONS = NO +INCLUDE_GRAPH = YES +INCLUDED_BY_GRAPH = YES +CALL_GRAPH = NO +CALLER_GRAPH = NO +GRAPHICAL_HIERARCHY = YES +DIRECTORY_GRAPH = YES +DOT_IMAGE_FORMAT = png +DOT_PATH = +DOTFILE_DIRS = +MAX_DOT_GRAPH_WIDTH = 1024 +MAX_DOT_GRAPH_HEIGHT = 1024 +MAX_DOT_GRAPH_DEPTH = 0 +DOT_TRANSPARENT = NO +DOT_MULTI_TARGETS = NO +GENERATE_LEGEND = YES +DOT_CLEANUP = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- +SEARCHENGINE = YES diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson5/schema.xml b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson5/schema.xml new file mode 100644 index 000000000..9b8bf316c --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson5/schema.xml @@ -0,0 +1,19 @@ + + + + + + + + + 1 + 2 + + + + + + + + + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson6/CMakeLists.txt b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson6/CMakeLists.txt new file mode 100644 index 000000000..d4e2ec44f --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson6/CMakeLists.txt @@ -0,0 +1,99 @@ + +###################################################################################### +### 0) Set the compiler and define targets to easily run the lessons +###################################################################################### + +SET (CMAKE_CXX_COMPILER mpicxx) + +ADD_CUSTOM_TARGET(install DEPENDS ${ParadisEO-PEO_SOURCE_DIR}/tutorial/Lesson6/lesson.param ${ParadisEO-PEO_SOURCE_DIR}/tutorial/Lesson6/schema.xml) + +ADD_CUSTOM_COMMAND( + TARGET install + POST_BUILD + COMMAND ${CMAKE_COMMAND} + ARGS -E copy_if_different + ${ParadisEO-PEO_SOURCE_DIR}/tutorial/Lesson6/lesson.param + ${ParadisEO-PEO_BINARY_DIR}/tutorial/Lesson6) +ADD_CUSTOM_COMMAND( + TARGET install + POST_BUILD + COMMAND ${CMAKE_COMMAND} + ARGS -E copy_if_different + ${ParadisEO-PEO_SOURCE_DIR}/tutorial/Lesson6/schema.xml + ${ParadisEO-PEO_BINARY_DIR}/tutorial/Lesson6) + +###################################################################################### + + +###################################################################################### +### 1) Include the sources +###################################################################################### + +INCLUDE_DIRECTORIES(${EO_SRC_DIR}/src ${MO_SRC_DIR}/src ${ParadisEO-PEO_SOURCE_DIR}/src ${TSP_SRC_DIR}) + +###################################################################################### + + +###################################################################################### +### 2) Specify where CMake can find the libraries +###################################################################################### + +IF(NOT WIN32 OR CYGWIN) + LINK_DIRECTORIES(${EO_BIN_DIR}/lib ${ParadisEO-PEO_BINARY_DIR}/lib ${TSP_BINARY_DIR}/lib) +ENDIF(NOT WIN32 OR CYGWIN) + +# especially for Visual Studio +IF(WIN32 AND NOT CYGWIN) + LINK_DIRECTORIES(${EO_BIN_DIR}\\lib\\${CMAKE_BUILD_TYPE} ${ParadisEO-PEO_BINARY_DIR}\\lib\\${CMAKE_BUILD_TYPE} ${TSP_BINARY_DIR}\\lib\\${CMAKE_BUILD_TYPE}) +ENDIF(WIN32 AND NOT CYGWIN) +###################################################################################### + + +###################################################################################### +### 3) Define your target(s): just an executable here +###################################################################################### + +ADD_EXECUTABLE(tspExample main.cpp) +ADD_DEPENDENCIES(tspExample tsp peo rmc_mpi) +###################################################################################### + + +###################################################################################### +### 4) Optionnal: define properties +###################################################################################### + +SET(LESSON6_VERSION ${GLOBAL_VERSION}) +SET_TARGET_PROPERTIES(tspExample PROPERTIES VERSION "${LESSON6_VERSION}") +###################################################################################### + + +###################################################################################### +### 5) Link the librairies +###################################################################################### + +TARGET_LINK_LIBRARIES(tspExample ${XML2_LIBS} tsp peo rmc_mpi eo eoutils) + +###################################################################################### + + +###################################################################################### +### 6) Windows advanced config - especially for Microsoft Visual Studio 8 +###################################################################################### + + IF(CMAKE_CXX_COMPILER MATCHES cl) + IF(NOT WITH_SHARED_LIBS) + IF(CMAKE_GENERATOR STREQUAL "Visual Studio 8 2005") + SET(CMAKE_CXX_FLAGS "/nologo /W3 /Gy") + SET(CMAKE_CXX_FLAGS_DEBUG "/MTd /Z7 /Od") + SET(CMAKE_CXX_FLAGS_RELEASE "/MT /O2") + SET(CMAKE_CXX_FLAGS_MINSIZEREL "/MT /O2") + SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "/MTd /Z7 /Od") + SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SUBSYSTEM:CONSOLE") + + ENDIF(CMAKE_GENERATOR STREQUAL "Visual Studio 8 2005") + ENDIF(NOT WITH_SHARED_LIBS) + ENDIF(CMAKE_CXX_COMPILER MATCHES cl) +###################################################################################### + + + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson6/lesson.param b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson6/lesson.param new file mode 100644 index 000000000..eb843c65f --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson6/lesson.param @@ -0,0 +1,12 @@ +## miscallenous parameters + +--debug=false + +## deployment schema + +--schema=schema.xml + +## parameters + +--inst=../examples/tsp/benchs/eil101.tsp + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson6/main.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson6/main.cpp new file mode 100644 index 000000000..5287a4fec --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Lesson6/main.cpp @@ -0,0 +1,135 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Clive Canape +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* clive.canape@inria.fr +*/ + +#include "route.h" +#include "route_init.h" +#include "route_eval.h" + +#include "order_xover.h" +#include "city_swap.h" + +#include "param.h" + +#include "merge_route_eval.h" +#include "part_route_eval.h" + + +#include + + +#define POP_SIZE 10 +#define NUM_GEN 100 +#define CROSS_RATE 1.0 +#define MUT_RATE 0.01 + + +int main( int __argc, char** __argv ) { + + // initializing the ParadisEO-PEO environment + peo :: init( __argc, __argv ); + + + // processing the command line specified parameters + loadParameters( __argc, __argv ); + + // init, eval operators, EA operators ------------------------------------------------------------------------------------------------------------- + + RouteInit route_init; // random init object - creates random Route objects + RouteEval full_eval; // evaluator object - offers a fitness value for a specified Route object + OrderXover crossover; // crossover operator - creates two offsprings out of two specified parents + CitySwap mutation; // mutation operator - randomly mutates one gene for a specified individual + // ------------------------------------------------------------------------------------------------------------------------------------------------ + + + // evolutionary algorithm components -------------------------------------------------------------------------------------------------------------- + + /* + * You can change the size of the population thanks POP_SIZE + * + */ + + eoPop< Route > population( POP_SIZE, route_init ); + + /* + * If you want to use a parallel evaluation : peoParaPopEval< Route > eaPopEval( full_eval ); + * Else, you can use a sequential evaluation : peoSeqPopEval< Route > eaPopEval( full_eval ); + * + */ + peoParaPopEval< Route > eaPopEval( full_eval ); + + /* + * Continuation criterion + */ + eoGenContinue< Route > eaCont( NUM_GEN ); + eoCheckPoint< Route > eaCheckpointContinue( eaCont ); + + /* + * Selection strategy + */ + eoRankingSelect< Route > selectionStrategy; + eoSelectNumber< Route > eaSelect( selectionStrategy, POP_SIZE ); + + /* With this transform operator, you can use a parallel crossover and a parallel mutation + * + * Unfortunately, if you don't use a crossover which creates two children with two parents, + * you can't use this operator. + * In this case, you should send a mail to : paradiseo-help@lists.gforge.inria.fr + * + */ + peoParaSGATransform< Route > eaTransform( crossover, CROSS_RATE, mutation, MUT_RATE ); // ParadisEO transform operator (please remark the peo prefix) - wraps an e EO transform object + + /* + * Replacement strategy + */ + eoPlusReplacement< Route > eaReplace; + + + // ParadisEO-PEO evolutionary algorithm ----------------------------------------------------------------------------------------------------------- + + peoEA< Route > eaAlg( eaCheckpointContinue, eaPopEval, eaSelect, eaTransform, eaReplace ); + + eaAlg( population ); // specifying the initial population for the algorithm, to be iteratively evolved + // ------------------------------------------------------------------------------------------------------------------------------------------------ + + + peo :: run( ); + peo :: finalize( ); + + if(getNodeRank()==1) + std::cout<<"\n\nPopulation :\n"< + + + + + + + + 1 + + + + + + + + + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/LessonParallelAlgorithm/CMakeLists.txt b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/LessonParallelAlgorithm/CMakeLists.txt new file mode 100644 index 000000000..3d748c990 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/LessonParallelAlgorithm/CMakeLists.txt @@ -0,0 +1,89 @@ + +###################################################################################### +### 0) Set the compiler and define targets to easily run the lessons +###################################################################################### + +SET (CMAKE_CXX_COMPILER mpicxx) + +ADD_CUSTOM_TARGET(install DEPENDS ${ParadisEO-PEO_SOURCE_DIR}/tutorial/Lesson1/lesson.param ${ParadisEO-PEO_SOURCE_DIR}/tutorial/Lesson1/schema.xml) + +ADD_CUSTOM_COMMAND( + TARGET install + POST_BUILD + COMMAND ${CMAKE_COMMAND} + ARGS -E copy_if_different + ${ParadisEO-PEO_SOURCE_DIR}/tutorial/Lesson1/lesson.param + ${ParadisEO-PEO_BINARY_DIR}/tutorial/Lesson1) +ADD_CUSTOM_COMMAND( + TARGET install + POST_BUILD + COMMAND ${CMAKE_COMMAND} + ARGS -E copy_if_different + ${ParadisEO-PEO_SOURCE_DIR}/tutorial/Lesson1/schema.xml + ${ParadisEO-PEO_BINARY_DIR}/tutorial/Lesson1) +###################################################################################### + + +###################################################################################### +### 1) Include the sources +###################################################################################### + +INCLUDE_DIRECTORIES(${EO_SRC_DIR}) +INCLUDE_DIRECTORIES(${MO_SRC_DIR}) +INCLUDE_DIRECTORIES(${PEO_SRC_DIR}) +INCLUDE_DIRECTORIES(${TSP_SRC_DIR}) + +###################################################################################### + + +###################################################################################### +### 2) Specify where CMake can find the libraries (mandatory: before 3) ) +###################################################################################### + +LINK_DIRECTORIES( ${EO_SRC_DIR} + ${EO_SRC_DIR}/utils + ${ParadisEO-PEO_BINARY_DIR}/lib + ${TSP_BINARY_DIR}/lib) + +###################################################################################### + + +###################################################################################### +### 3) Define your target(s): just an executable here +###################################################################################### + +# no matter what is the OS, hopefully +ADD_EXECUTABLE(parallelAlgorithmExample main.cpp) + +ADD_DEPENDENCIES(parallelAlgorithmExample tsp) +ADD_DEPENDENCIES(parallelAlgorithmExample peo) +ADD_DEPENDENCIES(parallelAlgorithmExample rmc_mpi) +###################################################################################### + + +###################################################################################### +### 4) Optionnal: define your target(s)'s version: no effect for windows +###################################################################################### + +SET(LESSON1_VERSION "1.0.beta") +SET_TARGET_PROPERTIES(parallelAlgorithmExample PROPERTIES VERSION "${LESSONPARAALG_VERSION}") +###################################################################################### + + +###################################################################################### +### 5) Link the librairies +###################################################################################### + +TARGET_LINK_LIBRARIES(parallelAlgorithmExample ${XML2_LIBS}) # define in CMakeLists.txt at PEO root dir +TARGET_LINK_LIBRARIES(parallelAlgorithmExample tsp) +TARGET_LINK_LIBRARIES(parallelAlgorithmExample peo) +TARGET_LINK_LIBRARIES(parallelAlgorithmExample rmc_mpi) +TARGET_LINK_LIBRARIES(parallelAlgorithmExample eo) +TARGET_LINK_LIBRARIES(parallelAlgorithmExample eoutils) + +###################################################################################### + + + + + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/LessonParallelAlgorithm/lesson.param b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/LessonParallelAlgorithm/lesson.param new file mode 100644 index 000000000..eb843c65f --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/LessonParallelAlgorithm/lesson.param @@ -0,0 +1,12 @@ +## miscallenous parameters + +--debug=false + +## deployment schema + +--schema=schema.xml + +## parameters + +--inst=../examples/tsp/benchs/eil101.tsp + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/LessonParallelAlgorithm/main.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/LessonParallelAlgorithm/main.cpp new file mode 100644 index 000000000..adaeb9c3b --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/LessonParallelAlgorithm/main.cpp @@ -0,0 +1,337 @@ +// "main.cpp" + +// (c) OPAC Team, LIFL, January 2006 + +/* + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include +#include + +#include +#include + + + +#include "route.h" +#include "route_init.h" +#include "route_eval.h" + +#include "order_xover.h" +#include "city_swap.h" + +#include "param.h" + + + + +#include + +#include +#include +#include +#include + +#include +#include +#include +#include + + + +#define RANDOM_POP_SIZE 30 +#define RANDOM_ITERATIONS 10 + + +#define POP_SIZE 10 +#define NUM_GEN 100 +#define CROSS_RATE 1.0 +#define MUT_RATE 0.01 + +#define NUMBER_OF_POPULATIONS 3 + + + +struct RandomExplorationAlgorithm { + + RandomExplorationAlgorithm( peoPopEval< Route >& __popEval, peoSynchronousMultiStart< Route >& extParallelExecution ) + : popEval( __popEval ), parallelExecution( extParallelExecution ) { + } + + + // the sequential algorithm to be executed in parallel by the wrapper + void operator()() { + + RouteInit route_init; // random init object - creates random Route objects + RouteEval route_eval; + eoPop< Route > population( RANDOM_POP_SIZE, route_init ); + + popEval( population ); + + + // executing HCs on the population in parallel + parallelExecution( population ); + + + + // just to show off :: HCs on a vector of Route objects + { + Route* rVect = new Route[ 5 ]; + for ( unsigned int index = 0; index < 5; index++ ) { + + route_init( rVect[ index ] ); route_eval( rVect[ index ] ); + } + + // applying the HCs on the vector of Route objects + parallelExecution( rVect, rVect + 5 ); + delete[] rVect; + } + + + + Route bestRoute = population.best_element(); + + for ( unsigned int index = 0; index < RANDOM_ITERATIONS; index++ ) { + + for ( unsigned int routeIndex = 0; routeIndex < RANDOM_POP_SIZE; routeIndex++ ) { + + route_init( population[ routeIndex ] ); + } + + popEval( population ); + + if ( fabs( population.best_element().fitness() ) < fabs( bestRoute.fitness() ) ) bestRoute = population.best_element(); + + std::cout << "Random Iteration #" << index << "... [ " << bestRoute.fitness() << " ]" << std::flush << std::endl; + } + } + + + peoPopEval< Route >& popEval; + peoSynchronousMultiStart< Route >& parallelExecution; +}; + + + + +int main( int __argc, char** __argv ) { + + srand( time(NULL) ); + + + + // initializing the ParadisEO-PEO environment + peo :: init( __argc, __argv ); + + + // processing the command line specified parameters + loadParameters( __argc, __argv ); + + + + // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< + // #1 An EO evolutionary algorithm to be executed in parallel with other algorithms (no parallel evaluation, no etc.). + + // init, eval operators, EA operators ------------------------------------------------------------------------------------------------------------- + RouteInit route_init; // random init object - creates random Route objects + RouteEval full_eval; // evaluator object - offers a fitness value for a specified Route object + + OrderXover crossover; // crossover operator - creates two offsprings out of two specified parents + CitySwap mutation; // mutation operator - randomly mutates one gene for a specified individual + // ------------------------------------------------------------------------------------------------------------------------------------------------ + + + // evolutionary algorithm components -------------------------------------------------------------------------------------------------------------- + + eoPop< Route > population( POP_SIZE, route_init ); // initial population for the algorithm having POP_SIZE individuals + + eoGenContinue< Route > eaCont( NUM_GEN ); // continuation criterion - the algorithm will iterate for NUM_GEN generations + eoCheckPoint< Route > eaCheckpointContinue( eaCont ); // checkpoint object - verify at each iteration if the continuation criterion is met + + eoRankingSelect< Route > selectionStrategy; // selection strategy - applied at each iteration for selecting parent individuals + eoSelectNumber< Route > eaSelect( selectionStrategy, POP_SIZE ); // selection object - POP_SIZE individuals are selected at each iteration + + // transform operator - includes the crossover and the mutation operators with a specified associated rate + eoSGATransform< Route > transform( crossover, CROSS_RATE, mutation, MUT_RATE ); + + eoPlusReplacement< Route > eaReplace; // replacement strategy - for replacing the initial population with offspring individuals + // ------------------------------------------------------------------------------------------------------------------------------------------------ + + + + // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + // SEQENTIAL ALGORITHM DEFINITION ----------------------------------------------------------------------------------------------------------------- + eoEasyEA< Route > eaAlg( eaCheckpointContinue, full_eval, eaSelect, transform, eaReplace ); + // SEQENTIAL ALGORITHM DEFINITION ----------------------------------------------------------------------------------------------------------------- + + // SETTING UP THE PARALLEL WRAPPER ---------------------------------------------------------------------------------------------------------------- + peoParallelAlgorithmWrapper parallelEAAlg( eaAlg, population ); // specifying the embedded algorithm and the algorithm input data + // SETTING UP THE PARALLEL WRAPPER ---------------------------------------------------------------------------------------------------------------- + // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< + + + + + + // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< + // #2 A MO hill climbing to be executed in parallel with other algorithms (no parallel evaluation, no etc.). + + if ( getNodeRank() == 1 ) { + + Graph::load( __argv [ 1 ] ); + } + + Route route; + RouteInit init; init( route ); + RouteEval full_evalHC; full_evalHC( route ); + + if ( getNodeRank() == 1 ) { + + std :: cout << "[From] " << route << std :: endl; + } + + + TwoOptInit two_opt_init; + TwoOptNext two_opt_next; + TwoOptIncrEval two_opt_incr_eval; + + moBestImprSelect< TwoOpt > two_opt_select; + + + + // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + // SEQENTIAL ALGORITHM DEFINITION ----------------------------------------------------------------------------------------------------------------- + moHC< TwoOpt > hill_climbing( two_opt_init, two_opt_next, two_opt_incr_eval, two_opt_select, full_evalHC ); + // SEQENTIAL ALGORITHM DEFINITION ----------------------------------------------------------------------------------------------------------------- + + // SETTING UP THE PARALLEL WRAPPER ---------------------------------------------------------------------------------------------------------------- + peoParallelAlgorithmWrapper parallelHillClimbing( hill_climbing, route ); // specifying the embedded algorithm and the algorithm input data + // SETTING UP THE PARALLEL WRAPPER ---------------------------------------------------------------------------------------------------------------- + // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< + + + + + + + // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< + // #3 A user defined algorithm to be executed in parallel with other algorithms - parallel evaluation and synchronous + // multi-start of several hill-climbing algorithms (inside the user defined algorithm)!!. + + RouteEval full_evalRandom; + peoParaPopEval< Route > randomParaEval( full_evalRandom ); + + + peoSynchronousMultiStart< Route > parallelExecution( hill_climbing ); + + RandomExplorationAlgorithm randomExplorationAlgorithm( randomParaEval, parallelExecution ); + + + // SETTING UP THE PARALLEL WRAPPER ---------------------------------------------------------------------------------------------------------------- + peoParallelAlgorithmWrapper parallelRandExp( randomExplorationAlgorithm ); // specifying the embedded algorithm - no input data in this case + + randomParaEval.setOwner( parallelRandExp ); + parallelExecution.setOwner( parallelRandExp ); + // SETTING UP THE PARALLEL WRAPPER ---------------------------------------------------------------------------------------------------------------- + // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< + + + + + // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< + // #4 Synchronous Multi-Start: several hill-climbing algorithms launched in parallel on different initial solutions + + RouteInit ex_hc_route_init; // random init object - creates random Route objects + RouteEval ex_hc_full_eval; // evaluator object - offers a fitness value for a specified Route object + + eoPop< Route > ex_hc_population( POP_SIZE, ex_hc_route_init ); + + for ( unsigned int index = 0; index < POP_SIZE; index++ ) { + + ex_hc_full_eval( ex_hc_population[ index ] ); + } + + + // SETTING UP THE PARALLEL WRAPPER ---------------------------------------------------------------------------------------------------------------- + peoSynchronousMultiStart< Route > ex_hc_parallelExecution( hill_climbing ); + peoParallelAlgorithmWrapper ex_hc_parallel( ex_hc_parallelExecution, ex_hc_population ); // specifying the embedded algorithm - no input data in this case + + ex_hc_parallelExecution.setOwner( ex_hc_parallel ); + // SETTING UP THE PARALLEL WRAPPER ---------------------------------------------------------------------------------------------------------------- + // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< + + + + + + // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< + // #5 Synchronous Multi-Start: Multiple EO evolutionary algorithms to be executed in parallel + // (inside different processes, on different populations; no parallel evaluation, no etc.). + + RouteInit ex_route_init; // random init object - creates random Route objects + RouteEval ex_full_eval; // evaluator object - offers a fitness value for a specified Route object + + std::vector< eoPop< Route > > ex_population; + ex_population.resize( NUMBER_OF_POPULATIONS ); + + for ( unsigned int indexPop = 0; indexPop < NUMBER_OF_POPULATIONS; indexPop++ ) { + + ex_population[ indexPop ].resize( POP_SIZE ); + + for ( unsigned int index = 0; index < POP_SIZE; index++ ) { + + ex_route_init( ex_population[ indexPop ][ index ] ); + ex_full_eval( ex_population[ indexPop ][ index ] ); + } + } + + + // SETTING UP THE PARALLEL WRAPPER ---------------------------------------------------------------------------------------------------------------- + peoSynchronousMultiStart< eoPop< Route > > ex_parallelExecution( eaAlg ); + peoParallelAlgorithmWrapper ex_parallel( ex_parallelExecution, ex_population ); // specifying the embedded algorithm - no input data in this case + + ex_parallelExecution.setOwner( ex_parallel ); + // SETTING UP THE PARALLEL WRAPPER ---------------------------------------------------------------------------------------------------------------- + // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< + + + + + + + peo :: run( ); + peo :: finalize( ); + // shutting down the ParadisEO-PEO environment + + + + // the algorithm is executed in the #1 rank process + if ( getNodeRank() == 1 ) { + + std :: cout << "[To] " << route << std :: endl << std::endl; + + + std :: cout << "Synchronous Multi-Start HCs:" << std :: endl ; + for ( unsigned int index = 0; index < POP_SIZE; index++ ) { + + std::cout << ex_hc_population[ index ] << std::endl; + } + std::cout << std::endl << std::endl; + + + std :: cout << "Synchronous Multi-Start EAs:" << std :: endl ; + for ( unsigned int index = 0; index < NUMBER_OF_POPULATIONS; index++ ) { + + std::cout << ex_population[ index ] << std::endl; + } + std::cout << std::endl << std::flush; + + } + + + + return 0; +} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/LessonParallelAlgorithm/schema.xml b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/LessonParallelAlgorithm/schema.xml new file mode 100644 index 000000000..2bbd4e4af --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/LessonParallelAlgorithm/schema.xml @@ -0,0 +1,19 @@ + + + + + + + + 1 + 2 + 3 + 4 + 5 + + + + + + + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/CMakeLists.txt b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/CMakeLists.txt new file mode 100644 index 000000000..2b9f7fe96 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/CMakeLists.txt @@ -0,0 +1,116 @@ + +###################################################################################### +### 0) Pre-config +###################################################################################### + +SET (CMAKE_CXX_COMPILER mpicxx) + +ADD_CUSTOM_TARGET(install DEPENDS ${ParadisEO-PEO_SOURCE_DIR}/tutorial/Walkthrough/config) + +ADD_CUSTOM_COMMAND( + TARGET install + POST_BUILD + COMMAND ${CMAKE_COMMAND} + ARGS -E copy_directory + ${ParadisEO-PEO_SOURCE_DIR}/tutorial/Walkthrough/config + ${ParadisEO-PEO_BINARY_DIR}/tutorial/Walkthrough/config) +ADD_CUSTOM_COMMAND( + TARGET install + POST_BUILD + COMMAND ${CMAKE_COMMAND} + ARGS -E copy_if_different + ${ParadisEO-PEO_SOURCE_DIR}/tutorial/Walkthrough/ParadisEO-PEO_Walkthrough.pdf + ${ParadisEO-PEO_BINARY_DIR}/tutorial/Walkthrough) +###################################################################################### + + +###################################################################################### +### 1) Include the sources +###################################################################################### + +INCLUDE_DIRECTORIES(${EO_SRC_DIR}/src ${MO_SRC_DIR}/src ${ParadisEO-PEO_SOURCE_DIR}/src ${TSP_SRC_DIR}) + +###################################################################################### + + +###################################################################################### +### 2) Specify where CMake can find the libraries (mandatory: before 3) ) +###################################################################################### + +IF(NOT WIN32 OR CYGWIN) + LINK_DIRECTORIES(${EO_BIN_DIR}/lib ${ParadisEO-PEO_BINARY_DIR}/lib ${TSP_BINARY_DIR}/lib) +ENDIF(NOT WIN32 OR CYGWIN) + +# especially for Visual Studio +IF(WIN32 AND NOT CYGWIN) + LINK_DIRECTORIES(${EO_BIN_DIR}\\lib\\${CMAKE_BUILD_TYPE} ${ParadisEO-PEO_BINARY_DIR}\\lib\\${CMAKE_BUILD_TYPE} ${TSP_BINARY_DIR}\\lib\\${CMAKE_BUILD_TYPE}) +ENDIF(WIN32 AND NOT CYGWIN) + +###################################################################################### + + +###################################################################################### +### 3) Define your target(s): just an executable here +###################################################################################### + +# no matter what is the OS, hopefully +ADD_EXECUTABLE(exampleA exampleA.cpp) +ADD_EXECUTABLE(exampleB exampleB.cpp) +ADD_EXECUTABLE(exampleC exampleC.cpp) +ADD_EXECUTABLE(exampleD exampleD.cpp) +ADD_EXECUTABLE(exampleE exampleE.cpp) + +ADD_DEPENDENCIES(exampleA tsp peo rmc_mpi) +ADD_DEPENDENCIES(exampleB tsp peo rmc_mpi) +ADD_DEPENDENCIES(exampleC tsp peo rmc_mpi) +ADD_DEPENDENCIES(exampleD tsp peo rmc_mpi) +ADD_DEPENDENCIES(exampleE tsp peo rmc_mpi) + +###################################################################################### + + +###################################################################################### +### 4) Optionnal: define your target's properties +###################################################################################### + +SET(WALKTHROUGH_VERSION ${GLOBAL_VERSION}) +SET_TARGET_PROPERTIES(exampleA PROPERTIES VERSION "${WALKTHROUGH_VERSION}") +SET_TARGET_PROPERTIES(exampleB PROPERTIES VERSION "${WALKTHROUGH_VERSION}") +SET_TARGET_PROPERTIES(exampleC PROPERTIES VERSION "${WALKTHROUGH_VERSION}") +SET_TARGET_PROPERTIES(exampleD PROPERTIES VERSION "${WALKTHROUGH_VERSION}") +SET_TARGET_PROPERTIES(exampleE PROPERTIES VERSION "${WALKTHROUGH_VERSION}") +###################################################################################### + + +###################################################################################### +### 5) Link the librairies +###################################################################################### + +TARGET_LINK_LIBRARIES(exampleA ${XML2_LIBS} tsp peo rmc_mpi eo eoutils) +TARGET_LINK_LIBRARIES(exampleB ${XML2_LIBS} tsp peo rmc_mpi eo eoutils) +TARGET_LINK_LIBRARIES(exampleC ${XML2_LIBS} tsp peo rmc_mpi eo eoutils) +TARGET_LINK_LIBRARIES(exampleD ${XML2_LIBS} tsp peo rmc_mpi eo eoutils) +TARGET_LINK_LIBRARIES(exampleE ${XML2_LIBS} tsp peo rmc_mpi eo eoutils) + +###################################################################################### + + +###################################################################################### +### 6) Windows advanced config - especially for Microsoft Visual Studio 8 +###################################################################################### + + IF(CMAKE_CXX_COMPILER MATCHES cl) + IF(NOT WITH_SHARED_LIBS) + IF(CMAKE_GENERATOR STREQUAL "Visual Studio 8 2005") + SET(CMAKE_CXX_FLAGS "/nologo /W3 /Gy") + SET(CMAKE_CXX_FLAGS_DEBUG "/MTd /Z7 /Od") + SET(CMAKE_CXX_FLAGS_RELEASE "/MT /O2") + SET(CMAKE_CXX_FLAGS_MINSIZEREL "/MT /O2") + SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "/MTd /Z7 /Od") + SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SUBSYSTEM:CONSOLE") + + ENDIF(CMAKE_GENERATOR STREQUAL "Visual Studio 8 2005") + ENDIF(NOT WITH_SHARED_LIBS) + ENDIF(CMAKE_CXX_COMPILER MATCHES cl) +###################################################################################### + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/ParadisEO-PEO_Walkthrough.pdf b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/ParadisEO-PEO_Walkthrough.pdf new file mode 100755 index 0000000000000000000000000000000000000000..5c4fe78411d24e8148c46552ebaf13808360aee1 GIT binary patch literal 520966 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

of~ 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

FsDuoyM1|NKnkn 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 literal 0 HcmV?d00001 diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/config/lessonA.param b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/config/lessonA.param new file mode 100644 index 000000000..5719b59f3 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/config/lessonA.param @@ -0,0 +1,11 @@ +## miscallenous parameters + +--debug=false + +## deployment schema + +--schema=config/schemaA.xml + +## parameters + +--inst=../examples/tsp/benchs/eil101.tsp diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/config/lessonB.param b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/config/lessonB.param new file mode 100644 index 000000000..873dffa40 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/config/lessonB.param @@ -0,0 +1,11 @@ +## miscallenous parameters + +--debug=false + +## deployment schema + +--schema=config/schemaB.xml + +## parameters + +--inst=../examples/tsp/benchs/eil101.tsp diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/config/lessonC.param b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/config/lessonC.param new file mode 100644 index 000000000..cb47c9bf3 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/config/lessonC.param @@ -0,0 +1,11 @@ +## miscallenous parameters + +--debug=false + +## deployment schema + +--schema=config/schemaC.xml + +## parameters + +--inst=../examples/tsp/benchs/eil101.tsp diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/config/lessonD.param b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/config/lessonD.param new file mode 100644 index 000000000..8c177206b --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/config/lessonD.param @@ -0,0 +1,11 @@ +## miscallenous parameters + +--debug=false + +## deployment schema + +--schema=config/schemaD.xml + +## parameters + +--inst=../examples/tsp/benchs/eil101.tsp diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/config/lessonE.param b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/config/lessonE.param new file mode 100644 index 000000000..336c8fdea --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/config/lessonE.param @@ -0,0 +1,11 @@ +## miscallenous parameters + +--debug=false + +## deployment schema + +--schema=config/schemaE.xml + +## parameters + +--inst=../examples/tsp/benchs/eil101.tsp diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/config/schemaA.xml b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/config/schemaA.xml new file mode 100644 index 000000000..47b198b4c --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/config/schemaA.xml @@ -0,0 +1,10 @@ + + + + + + 1 + + + + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/config/schemaB.xml b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/config/schemaB.xml new file mode 100644 index 000000000..47b198b4c --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/config/schemaB.xml @@ -0,0 +1,10 @@ + + + + + + 1 + + + + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/config/schemaC.xml b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/config/schemaC.xml new file mode 100644 index 000000000..51754a346 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/config/schemaC.xml @@ -0,0 +1,13 @@ + + + + + + + + 1 + 2 + + + + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/config/schemaD.xml b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/config/schemaD.xml new file mode 100644 index 000000000..b352f8b19 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/config/schemaD.xml @@ -0,0 +1,16 @@ + + + + + + + + 1 + + + + + + + + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/config/schemaE.xml b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/config/schemaE.xml new file mode 100644 index 000000000..b352f8b19 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/config/schemaE.xml @@ -0,0 +1,16 @@ + + + + + + + + 1 + + + + + + + + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/exampleA.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/exampleA.cpp new file mode 100644 index 000000000..22a71196e --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/exampleA.cpp @@ -0,0 +1,108 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ +// (c) OPAC Team, LIFL, July 2007 +// +// Contact: paradiseo-help@lists.gforge.inria.fr + +#include "param.h" +#include "route_init.h" +#include "route_eval.h" + +#include "order_xover.h" +#include "edge_xover.h" +#include "partial_mapped_xover.h" +#include "city_swap.h" +#include "part_route_eval.h" +#include "merge_route_eval.h" +#include "two_opt_init.h" +#include "two_opt_next.h" +#include "two_opt_incr_eval.h" + +#include + +#define POP_SIZE 10 +#define NUM_GEN 10 +#define CROSS_RATE 1.0 +#define MUT_RATE 0.01 + + +int main (int __argc, char * * __argv) { + + peo :: init (__argc, __argv); + + + loadParameters (__argc, __argv); /* Processing some parameters relative to the tackled + problem (TSP) */ + + RouteInit route_init; /* It builds random routes */ + RouteEval full_eval; /* Full route evaluator */ + + + OrderXover order_cross; /* Recombination */ + PartialMappedXover pm_cross; + EdgeXover edge_cross; + CitySwap city_swap_mut; /* Mutation */ + + + /** Local Search */ + TwoOptInit pmx_two_opt_init; + TwoOptNext pmx_two_opt_next; + TwoOptIncrEval pmx_two_opt_incr_eval; + moBestImprSelect pmx_two_opt_move_select; + moHC hc (pmx_two_opt_init, pmx_two_opt_next, pmx_two_opt_incr_eval, pmx_two_opt_move_select, full_eval); + + /** The EA */ + eoPop ox_pop (POP_SIZE, route_init); /* Population */ + + eoGenContinue ox_cont (NUM_GEN); /* A fixed number of iterations */ + eoCheckPoint ox_checkpoint (ox_cont); /* Checkpoint */ + peoSeqPopEval ox_pop_eval (full_eval); + eoStochTournamentSelect ox_select_one; + eoSelectNumber ox_select (ox_select_one, POP_SIZE); + eoSGATransform ox_transform (order_cross, CROSS_RATE, city_swap_mut, MUT_RATE); + peoSeqTransform ox_para_transform (ox_transform); + eoEPReplacement ox_replace (2); + + peoEA ox_ea (ox_checkpoint, ox_pop_eval, ox_select, ox_para_transform, ox_replace); + + ox_ea (ox_pop); /* Application to the given population */ + + peo :: run (); + peo :: finalize (); /* Termination */ + + + return 0; +} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/exampleB.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/exampleB.cpp new file mode 100644 index 000000000..e5a5a6039 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/exampleB.cpp @@ -0,0 +1,114 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ +// (c) OPAC Team, LIFL, July 2007 +// +// Contact: paradiseo-help@lists.gforge.inria.fr + +#include "param.h" +#include "route_init.h" +#include "route_eval.h" + +#include "order_xover.h" +#include "edge_xover.h" +#include "partial_mapped_xover.h" +#include "city_swap.h" +#include "part_route_eval.h" +#include "merge_route_eval.h" +#include "two_opt_init.h" +#include "two_opt_next.h" +#include "two_opt_incr_eval.h" + +#include + +#define POP_SIZE 10 +#define NUM_GEN 10 +#define CROSS_RATE 1.0 +#define MUT_RATE 0.01 + + +int main (int __argc, char * * __argv) { + + peo :: init (__argc, __argv); + + + loadParameters (__argc, __argv); /* Processing some parameters relative to the tackled + problem (TSP) */ + + RouteInit route_init; /* Its builds random routes */ + RouteEval full_eval; /* Full route evaluator */ + + + OrderXover order_cross; /* Recombination */ + PartialMappedXover pm_cross; + EdgeXover edge_cross; + CitySwap city_swap_mut; /* Mutation */ + + + /** Local Search */ + TwoOptInit pmx_two_opt_init; + TwoOptNext pmx_two_opt_next; + TwoOptIncrEval pmx_two_opt_incr_eval; + moBestImprSelect pmx_two_opt_move_select; + moHC hc (pmx_two_opt_init, pmx_two_opt_next, pmx_two_opt_incr_eval, pmx_two_opt_move_select, full_eval); + + /** The EA */ + eoPop ox_pop (POP_SIZE, route_init); /* Population */ + + eoGenContinue ox_cont (NUM_GEN); /* A fixed number of iterations */ + eoCheckPoint ox_checkpoint (ox_cont); /* Checkpoint */ + peoSeqPopEval ox_pop_eval (full_eval); + eoStochTournamentSelect ox_select_one; + eoSelectNumber ox_select (ox_select_one, POP_SIZE); + eoSGATransform ox_transform (order_cross, CROSS_RATE, city_swap_mut, MUT_RATE); + peoSeqTransform ox_para_transform (ox_transform); + eoEPReplacement ox_replace (2); + + peoEA ox_ea (ox_checkpoint, ox_pop_eval, ox_select, ox_para_transform, ox_replace); + + ox_ea (ox_pop); /* Application to the given population */ + + + peo :: run (); + peo :: finalize (); /* Termination */ + + + std :: cout << ox_pop[ 0 ].fitness(); + hc( ox_pop[ 0 ] ); + std :: cout << " -> " << ox_pop[ 0 ].fitness() << std :: endl; + + + return 0; +} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/exampleC.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/exampleC.cpp new file mode 100644 index 000000000..7676ac577 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/exampleC.cpp @@ -0,0 +1,166 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ +// (c) OPAC Team, LIFL, July 2007 +// +// Contact: paradiseo-help@lists.gforge.inria.fr + +#include "param.h" +#include "route_init.h" +#include "route_eval.h" + +#include "order_xover.h" +#include "edge_xover.h" +#include "partial_mapped_xover.h" +#include "city_swap.h" +#include "part_route_eval.h" +#include "merge_route_eval.h" +#include "two_opt_init.h" +#include "two_opt_next.h" +#include "two_opt_incr_eval.h" + +#include + +#define POP_SIZE 10 +#define NUM_GEN 10 +#define CROSS_RATE 1.0 +#define MUT_RATE 0.01 + +#define MIG_FREQ 1 +#define MIG_SIZE 5 + + +int main (int __argc, char * * __argv) { + + peo :: init (__argc, __argv); + + + loadParameters (__argc, __argv); /* Processing some parameters relative to the tackled + problem (TSP) */ + + /* Migration topology */ + RingTopology topo; + + + + // The First EA ------------------------------------------------------------------------------------- + + RouteInit route_init; /* Its builds random routes */ + RouteEval full_eval; /* Full route evaluator */ + + OrderXover order_cross; /* Recombination */ + CitySwap city_swap_mut; /* Mutation */ + + eoPop ox_pop (POP_SIZE, route_init); /* Population */ + + eoGenContinue ox_cont (NUM_GEN); /* A fixed number of iterations */ + eoCheckPoint ox_checkpoint (ox_cont); /* Checkpoint */ + peoSeqPopEval ox_pop_eval (full_eval); + eoStochTournamentSelect ox_select_one; + eoSelectNumber ox_select (ox_select_one, POP_SIZE); + eoSGATransform ox_transform (order_cross, CROSS_RATE, city_swap_mut, MUT_RATE); + peoSeqTransform ox_seq_transform (ox_transform); + eoEPReplacement ox_replace (2); + + + /* The migration policy */ + eoPeriodicContinue ox_mig_cont (MIG_FREQ); /* Migration occurs periodically */ + eoStochTournamentSelect ox_mig_select_one; /* Emigrants are randomly selected */ + eoSelectNumber ox_mig_select (ox_mig_select_one, MIG_SIZE); + eoPlusReplacement ox_mig_replace; /* Immigrants replace the worse individuals */ + + peoAsyncIslandMig ox_mig (ox_mig_cont, ox_mig_select, ox_mig_replace, topo, ox_pop, ox_pop); + ox_checkpoint.add (ox_mig); + + peoEA ox_ea (ox_checkpoint, ox_pop_eval, ox_select, ox_seq_transform, ox_replace); + ox_mig.setOwner (ox_ea); + + ox_ea (ox_pop); /* Application to the given population */ + // -------------------------------------------------------------------------------------------------- + + + + // The Second EA ------------------------------------------------------------------------------------ + + RouteInit route_init2; /* Its builds random routes */ + RouteEval full_eval2; /* Full route evaluator */ + + OrderXover order_cross2; /* Recombination */ + CitySwap city_swap_mut2; /* Mutation */ + + + eoPop ox_pop2 (POP_SIZE, route_init2); /* Population */ + + + eoGenContinue ox_cont2 (NUM_GEN); /* A fixed number of iterations */ + eoCheckPoint ox_checkpoint2 (ox_cont2); /* Checkpoint */ + peoSeqPopEval ox_pop_eval2 (full_eval2); + eoStochTournamentSelect ox_select_one2; + eoSelectNumber ox_select2 (ox_select_one2, POP_SIZE); + eoSGATransform ox_transform2 (order_cross2, CROSS_RATE, city_swap_mut2, MUT_RATE); + peoSeqTransform ox_seq_transform2 (ox_transform2); + eoEPReplacement ox_replace2 (2); + + /* The migration policy */ + eoPeriodicContinue ox_mig_cont2 (MIG_FREQ); /* Migration occurs periodically */ + eoStochTournamentSelect ox_mig_select_one2; /* Emigrants are randomly selected */ + eoSelectNumber ox_mig_select2 (ox_mig_select_one2, MIG_SIZE); + eoPlusReplacement ox_mig_replace2; /* Immigrants replace the worse individuals */ + + peoAsyncIslandMig ox_mig2 (ox_mig_cont2, ox_mig_select2, ox_mig_replace2, topo, ox_pop2, ox_pop2); + ox_checkpoint2.add (ox_mig2); + + peoEA ox_ea2 (ox_checkpoint2, ox_pop_eval2, ox_select2, ox_seq_transform2, ox_replace2); + ox_mig2.setOwner (ox_ea2); + + ox_ea2 (ox_pop2); /* Application to the given population */ + // -------------------------------------------------------------------------------------------------- + + + + peo :: run (); + peo :: finalize (); /* Termination */ + + + // rank 0 is assigned to the scheduler in the XML mapping file + if ( getNodeRank() == 1 ) { + + std::cout << "EA[ 0 ] -----> " << ox_pop.best_element().fitness() << std::endl; + std::cout << "EA[ 1 ] -----> " << ox_pop2.best_element().fitness() << std::endl; + } + + + return 0; +} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/exampleD.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/exampleD.cpp new file mode 100644 index 000000000..5e2c17271 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/exampleD.cpp @@ -0,0 +1,110 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ +// (c) OPAC Team, LIFL, July 2007 +// +// Contact: paradiseo-help@lists.gforge.inria.fr + +#include "param.h" +#include "route_init.h" +#include "route_eval.h" + +#include "order_xover.h" +#include "edge_xover.h" +#include "partial_mapped_xover.h" +#include "city_swap.h" +#include "part_route_eval.h" +#include "merge_route_eval.h" +#include "two_opt_init.h" +#include "two_opt_next.h" +#include "two_opt_incr_eval.h" + +#include + +#define POP_SIZE 10 +#define NUM_GEN 10 +#define CROSS_RATE 1.0 +#define MUT_RATE 0.01 + + + +int main (int __argc, char * * __argv) { + + peo :: init (__argc, __argv); + + + loadParameters (__argc, __argv); /* Processing some parameters relative to the tackled + problem (TSP) */ + + RouteInit route_init; /* Its builds random routes */ + RouteEval full_eval; /* Full route evaluator */ + + + OrderXover order_cross; /* Recombination */ + CitySwap city_swap_mut; /* Mutation */ + + + /** The EA */ + eoPop ox_pop (POP_SIZE, route_init); /* Population */ + + eoGenContinue ox_cont (NUM_GEN); /* A fixed number of iterations */ + eoCheckPoint ox_checkpoint (ox_cont); /* Checkpoint */ + peoSeqPopEval ox_pop_eval (full_eval); + eoStochTournamentSelect ox_select_one; + eoSelectNumber ox_select (ox_select_one, POP_SIZE); + eoSGATransform ox_transform (order_cross, CROSS_RATE, city_swap_mut, MUT_RATE); + peoSeqTransform ox_para_transform (ox_transform); + eoEPReplacement ox_replace (2); + + + peoEA ox_ea (ox_checkpoint, ox_pop_eval, ox_select, ox_para_transform, ox_replace); + + + ox_ea (ox_pop); /* Application to the given population */ + + peo :: run (); + peo :: finalize (); /* Termination */ + + + + // rank 0 is assigned to the scheduler in the XML mapping file + if ( getNodeRank() == 1 ) { + + std::cout << "EA[ 0 ] -----> " << ox_pop.best_element().fitness() << std::endl; + } + + + return 0; +} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/exampleE.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/exampleE.cpp new file mode 100644 index 000000000..0812ce9f5 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/exampleE.cpp @@ -0,0 +1,118 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ +// (c) OPAC Team, LIFL, July 2007 +// +// Contact: paradiseo-help@lists.gforge.inria.fr + +#include "param.h" +#include "route_init.h" +#include "route_eval.h" + +#include "order_xover.h" +#include "edge_xover.h" +#include "partial_mapped_xover.h" +#include "city_swap.h" +#include "part_route_eval.h" +#include "merge_route_eval.h" +#include "two_opt_init.h" +#include "two_opt_next.h" +#include "two_opt_incr_eval.h" + +#include + +#define POP_SIZE 10 +#define NUM_GEN 10 +#define CROSS_RATE 1.0 +#define MUT_RATE 0.01 + +#define NUM_PART_EVALS 2 + + +int main (int __argc, char * * __argv) { + + peo :: init (__argc, __argv); + + + loadParameters (__argc, __argv); /* Processing some parameters relative to the tackled + problem (TSP) */ + + RouteInit route_init; /* Its builds random routes */ + RouteEval full_eval; /* Full route evaluator */ + + + MergeRouteEval merge_eval; + + std :: vector *> part_eval; + for (unsigned i = 1 ; i <= NUM_PART_EVALS ; i ++) + part_eval.push_back (new PartRouteEval ((float) (i - 1) / NUM_PART_EVALS, (float) i / NUM_PART_EVALS)); + + + OrderXover order_cross; /* Recombination */ + CitySwap city_swap_mut; /* Mutation */ + + + /** The EA */ + eoPop ox_pop (POP_SIZE, route_init); /* Population */ + + eoGenContinue ox_cont (NUM_GEN); /* A fixed number of iterations */ + eoCheckPoint ox_checkpoint (ox_cont); /* Checkpoint */ + peoParaPopEval ox_pop_eval (full_eval); + eoStochTournamentSelect ox_select_one; + eoSelectNumber ox_select (ox_select_one, POP_SIZE); + eoSGATransform ox_transform (order_cross, CROSS_RATE, city_swap_mut, MUT_RATE); + peoSeqTransform ox_para_transform (ox_transform); + eoEPReplacement ox_replace (2); + + + peoEA ox_ea (ox_checkpoint, ox_pop_eval, ox_select, ox_para_transform, ox_replace); + + + ox_ea (ox_pop); /* Application to the given population */ + + peo :: run (); + peo :: finalize (); /* Termination */ + + + + // rank 0 is assigned to the scheduler in the XML mapping file + if ( getNodeRank() == 1 ) { + + std::cout << "EA[ 0 ] -----> " << ox_pop.best_element().fitness() << std::endl; + } + + + return 0; +} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/paradiseo-peo-lsn.doxyfile b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/paradiseo-peo-lsn.doxyfile new file mode 100644 index 000000000..9f9d15d8f --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/Walkthrough/paradiseo-peo-lsn.doxyfile @@ -0,0 +1,241 @@ +# Doxyfile 1.4.7 + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- +PROJECT_NAME = "ParadisEO-PEO Lesson1" +PROJECT_NUMBER = 0.1 +OUTPUT_DIRECTORY = ../../docs/html/lesson1 +CREATE_SUBDIRS = NO +OUTPUT_LANGUAGE = English +USE_WINDOWS_ENCODING = NO +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = YES +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the +ALWAYS_DETAILED_SEC = NO +INLINE_INHERITED_MEMB = NO +FULL_PATH_NAMES = NO +STRIP_FROM_PATH = +STRIP_FROM_INC_PATH = +SHORT_NAMES = NO +JAVADOC_AUTOBRIEF = YES +MULTILINE_CPP_IS_BRIEF = NO +DETAILS_AT_TOP = NO +INHERIT_DOCS = YES +SEPARATE_MEMBER_PAGES = NO +TAB_SIZE = 8 +ALIASES = +OPTIMIZE_OUTPUT_FOR_C = NO +OPTIMIZE_OUTPUT_JAVA = NO +BUILTIN_STL_SUPPORT = NO +DISTRIBUTE_GROUP_DOC = NO +SUBGROUPING = YES +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- +EXTRACT_ALL = NO +EXTRACT_PRIVATE = YES +EXTRACT_STATIC = YES +EXTRACT_LOCAL_CLASSES = YES +EXTRACT_LOCAL_METHODS = NO +HIDE_UNDOC_MEMBERS = YES +HIDE_UNDOC_CLASSES = YES +HIDE_FRIEND_COMPOUNDS = NO +HIDE_IN_BODY_DOCS = NO +INTERNAL_DOCS = NO +CASE_SENSE_NAMES = YES +HIDE_SCOPE_NAMES = NO +SHOW_INCLUDE_FILES = YES +INLINE_INFO = YES +SORT_MEMBER_DOCS = NO +SORT_BRIEF_DOCS = NO +SORT_BY_SCOPE_NAME = NO +GENERATE_TODOLIST = YES +GENERATE_TESTLIST = YES +GENERATE_BUGLIST = YES +GENERATE_DEPRECATEDLIST= YES +ENABLED_SECTIONS = +MAX_INITIALIZER_LINES = 30 +SHOW_USED_FILES = YES +SHOW_DIRECTORIES = NO +FILE_VERSION_FILTER = +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- +QUIET = YES +WARNINGS = YES +WARN_IF_UNDOCUMENTED = YES +WARN_IF_DOC_ERROR = YES +WARN_NO_PARAMDOC = NO +WARN_FORMAT = "$file:$line: $text" +WARN_LOGFILE = +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- +INPUT = . +FILE_PATTERNS = *.cpp \ + *.h \ + NEWS \ + README +RECURSIVE = YES +EXCLUDE = +EXCLUDE_SYMLINKS = NO +EXCLUDE_PATTERNS = +EXAMPLE_PATH = +EXAMPLE_PATTERNS = * +EXAMPLE_RECURSIVE = NO +IMAGE_PATH = ../../docs/images +INPUT_FILTER = +FILTER_PATTERNS = +FILTER_SOURCE_FILES = NO +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- +SOURCE_BROWSER = YES +INLINE_SOURCES = NO +STRIP_CODE_COMMENTS = YES +REFERENCED_BY_RELATION = YES +REFERENCES_RELATION = YES +REFERENCES_LINK_SOURCE = YES +USE_HTAGS = NO +VERBATIM_HEADERS = YES +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- +ALPHABETICAL_INDEX = YES +COLS_IN_ALPHA_INDEX = 3 +IGNORE_PREFIX = peo +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- +GENERATE_HTML = YES +HTML_OUTPUT = html +HTML_FILE_EXTENSION = .html +HTML_HEADER = +HTML_FOOTER = +HTML_STYLESHEET = +HTML_ALIGN_MEMBERS = YES +GENERATE_HTMLHELP = NO +CHM_FILE = +HHC_LOCATION = +GENERATE_CHI = NO +BINARY_TOC = NO +TOC_EXPAND = NO +DISABLE_INDEX = NO +ENUM_VALUES_PER_LINE = 4 +GENERATE_TREEVIEW = YES +TREEVIEW_WIDTH = 250 +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- +GENERATE_LATEX = YES +LATEX_OUTPUT = latex +LATEX_CMD_NAME = latex +MAKEINDEX_CMD_NAME = makeindex +COMPACT_LATEX = NO +PAPER_TYPE = a4wide +EXTRA_PACKAGES = +LATEX_HEADER = +PDF_HYPERLINKS = YES +USE_PDFLATEX = YES +LATEX_BATCHMODE = NO +LATEX_HIDE_INDICES = NO +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- +GENERATE_RTF = NO +RTF_OUTPUT = rtf +COMPACT_RTF = NO +RTF_HYPERLINKS = NO +RTF_STYLESHEET_FILE = +RTF_EXTENSIONS_FILE = +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- +GENERATE_MAN = YES +MAN_OUTPUT = man +MAN_EXTENSION = .3 +MAN_LINKS = NO +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- +GENERATE_XML = NO +XML_OUTPUT = xml +XML_SCHEMA = +XML_DTD = +XML_PROGRAMLISTING = YES +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- +GENERATE_AUTOGEN_DEF = NO +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- +GENERATE_PERLMOD = NO +PERLMOD_LATEX = NO +PERLMOD_PRETTY = YES +PERLMOD_MAKEVAR_PREFIX = +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- +ENABLE_PREPROCESSING = YES +MACRO_EXPANSION = NO +EXPAND_ONLY_PREDEF = NO +SEARCH_INCLUDES = YES +INCLUDE_PATH = +INCLUDE_FILE_PATTERNS = +PREDEFINED = +EXPAND_AS_DEFINED = +SKIP_FUNCTION_MACROS = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- +TAGFILES = ../../../paradiseo-mo/docs/eo.doxytag=../../../../../paradiseo-mo/docs/html \ + ../../../paradiseo-mo/docs/mo.doxytag=../../../../../paradiseo-mo/docs/html \ + ../../docs/paradiseo-peo.doxytag=../../ \ + ../shared/paradiseo-peo-lsn-shared.doxytag=../../lsnshared/html +GENERATE_TAGFILE = ../../docs/paradiseo-peo-lsn.doxytag +ALLEXTERNALS = NO +EXTERNAL_GROUPS = YES +PERL_PATH = /usr/bin/perl +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- +CLASS_DIAGRAMS = YES +HIDE_UNDOC_RELATIONS = YES +HAVE_DOT = NO +CLASS_GRAPH = YES +COLLABORATION_GRAPH = YES +GROUP_GRAPHS = YES +UML_LOOK = NO +TEMPLATE_RELATIONS = NO +INCLUDE_GRAPH = YES +INCLUDED_BY_GRAPH = YES +CALL_GRAPH = NO +CALLER_GRAPH = NO +GRAPHICAL_HIERARCHY = YES +DIRECTORY_GRAPH = YES +DOT_IMAGE_FORMAT = png +DOT_PATH = +DOTFILE_DIRS = +MAX_DOT_GRAPH_WIDTH = 1024 +MAX_DOT_GRAPH_HEIGHT = 1024 +MAX_DOT_GRAPH_DEPTH = 0 +DOT_TRANSPARENT = NO +DOT_MULTI_TARGETS = NO +GENERATE_LEGEND = YES +DOT_CLEANUP = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- +SEARCHENGINE = YES diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/CMakeLists.txt b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/CMakeLists.txt new file mode 100644 index 000000000..4e14e7c71 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/CMakeLists.txt @@ -0,0 +1,9 @@ + + +###################################################################################### +### 1) Where must cmake go now ? +###################################################################################### + +SUBDIRS(tsp) + +###################################################################################### \ No newline at end of file diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/CMakeLists.txt b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/CMakeLists.txt new file mode 100644 index 000000000..b22a7fe63 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/CMakeLists.txt @@ -0,0 +1,110 @@ + +###################################################################################### +### 0) Copy the "benchs" directory in the build directory to easily run the lessons +###################################################################################### + +ADD_CUSTOM_TARGET(install DEPENDS ${ParadisEO-PEO_SOURCE_DIR}/tutorial/examples/tsp/benchs) +ADD_CUSTOM_COMMAND( + TARGET install + POST_BUILD + COMMAND ${CMAKE_COMMAND} + ARGS -E copy_directory + ${ParadisEO-PEO_SOURCE_DIR}/tutorial/examples/tsp/benchs + ${ParadisEO-PEO_BINARY_DIR}/tutorial/examples/tsp/benchs) + +###################################################################################### + + +###################################################################################### +### 1) Include the sources +###################################################################################### + +INCLUDE_DIRECTORIES(${EO_SRC_DIR}/src) +INCLUDE_DIRECTORIES(${MO_SRC_DIR}/src) +INCLUDE_DIRECTORIES(${ParadisEO-PEO_SOURCE_DIR}/src) + +###################################################################################### + + +###################################################################################### +### 2) Define your target(s): just the tsp lib here +###################################################################################### + +SET(TSP_LIB_OUTPUT_PATH ${TSP_BINARY_DIR}/lib) +SET(LIBRARY_OUTPUT_PATH ${TSP_LIB_OUTPUT_PATH}) + +SET (TSP_SOURCES data.h + data.cpp + opt_route.h + opt_route.cpp + param.h + param.cpp + node.h + node.cpp + route.h + route.cpp + route_init.h + route_init.cpp + route_eval.h + route_eval.cpp + two_opt.h + two_opt.cpp + two_opt_init.h + two_opt_init.cpp + two_opt_incr_eval.h + two_opt_incr_eval.cpp + two_opt_next.h + two_opt_next.cpp + order_xover.h + order_xover.cpp + partial_mapped_xover.h + partial_mapped_xover.cpp + edge_xover.h + edge_xover.cpp + city_swap.h + city_swap.cpp + part_route_eval.h + part_route_eval.cpp + merge_route_eval.h + merge_route_eval.cpp) + +ADD_LIBRARY(tsp STATIC ${TSP_SOURCES}) +###################################################################################### + + +###################################################################################### +### 3) Optionnal: define your lib's version +###################################################################################### + +SET(TSP_VERSION ${GLOBAL_VERSION}) +SET_TARGET_PROPERTIES(tsp PROPERTIES VERSION "${TSP_VERSION}") +###################################################################################### + + +###################################################################################### +### 4) Windows advanced config - especially for Microsoft Visual Studio 8 +###################################################################################### + + IF(CMAKE_CXX_COMPILER MATCHES cl) + IF(NOT WITH_SHARED_LIBS) + IF(CMAKE_GENERATOR STREQUAL "Visual Studio 8 2005") + SET(CMAKE_CXX_FLAGS "/nologo /W3 /Gy") + SET(CMAKE_CXX_FLAGS_DEBUG "/MTd /Z7 /Od") + SET(CMAKE_CXX_FLAGS_RELEASE "/MT /O2") + SET(CMAKE_CXX_FLAGS_MINSIZEREL "/MT /O2") + SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "/MTd /Z7 /Od") + SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SUBSYSTEM:CONSOLE") + + ENDIF(CMAKE_GENERATOR STREQUAL "Visual Studio 8 2005") + ENDIF(NOT WITH_SHARED_LIBS) + ENDIF(CMAKE_CXX_COMPILER MATCHES cl) +###################################################################################### + + +###################################################################################### +### 5) Where must cmake go now ? +###################################################################################### + +# nothing to be compiled in the subdirs + +###################################################################################### diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/benchs/eil101.opt.tour b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/benchs/eil101.opt.tour new file mode 100644 index 000000000..1d3fece5a --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/benchs/eil101.opt.tour @@ -0,0 +1,108 @@ +NAME : eil101.opt.tour +COMMENT : Optimum tour for eil101.tsp (Length 629) +TYPE : TOUR +DIMENSION : 101 +TOUR_SECTION +1 +69 +27 +101 +53 +28 +26 +12 +80 +68 +29 +24 +54 +55 +25 +4 +39 +67 +23 +56 +75 +41 +22 +74 +72 +73 +21 +40 +58 +13 +94 +95 +97 +87 +2 +57 +15 +43 +42 +14 +44 +38 +86 +16 +61 +85 +91 +100 +98 +37 +92 +59 +93 +99 +96 +6 +89 +52 +18 +83 +60 +5 +84 +17 +45 +8 +46 +47 +36 +49 +64 +63 +90 +32 +10 +62 +11 +19 +48 +82 +7 +88 +31 +70 +30 +20 +66 +71 +65 +35 +34 +78 +81 +9 +51 +33 +79 +3 +77 +76 +50 +-1 +EOF diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/benchs/eil101.tsp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/benchs/eil101.tsp new file mode 100644 index 000000000..9672f849e --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/benchs/eil101.tsp @@ -0,0 +1,108 @@ +NAME : eil101 +COMMENT : 101-city problem (Christofides/Eilon) +TYPE : TSP +DIMENSION : 101 +EDGE_WEIGHT_TYPE : EUC_2D +NODE_COORD_SECTION +1 41 49 +2 35 17 +3 55 45 +4 55 20 +5 15 30 +6 25 30 +7 20 50 +8 10 43 +9 55 60 +10 30 60 +11 20 65 +12 50 35 +13 30 25 +14 15 10 +15 30 5 +16 10 20 +17 5 30 +18 20 40 +19 15 60 +20 45 65 +21 45 20 +22 45 10 +23 55 5 +24 65 35 +25 65 20 +26 45 30 +27 35 40 +28 41 37 +29 64 42 +30 40 60 +31 31 52 +32 35 69 +33 53 52 +34 65 55 +35 63 65 +36 2 60 +37 20 20 +38 5 5 +39 60 12 +40 40 25 +41 42 7 +42 24 12 +43 23 3 +44 11 14 +45 6 38 +46 2 48 +47 8 56 +48 13 52 +49 6 68 +50 47 47 +51 49 58 +52 27 43 +53 37 31 +54 57 29 +55 63 23 +56 53 12 +57 32 12 +58 36 26 +59 21 24 +60 17 34 +61 12 24 +62 24 58 +63 27 69 +64 15 77 +65 62 77 +66 49 73 +67 67 5 +68 56 39 +69 37 47 +70 37 56 +71 57 68 +72 47 16 +73 44 17 +74 46 13 +75 49 11 +76 49 42 +77 53 43 +78 61 52 +79 57 48 +80 56 37 +81 55 54 +82 15 47 +83 14 37 +84 11 31 +85 16 22 +86 4 18 +87 28 18 +88 26 52 +89 26 35 +90 31 67 +91 15 19 +92 22 22 +93 18 24 +94 26 27 +95 25 24 +96 22 27 +97 25 21 +98 19 21 +99 20 26 +100 18 18 +101 35 35 +EOF diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/benchs/eil101.tsp.hc b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/benchs/eil101.tsp.hc new file mode 100644 index 000000000..f12903349 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/benchs/eil101.tsp.hc @@ -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-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/city_swap.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/city_swap.cpp new file mode 100644 index 000000000..4cf961da5 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/city_swap.cpp @@ -0,0 +1,49 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* 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-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/city_swap.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/city_swap.h new file mode 100644 index 000000000..8a0756968 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/city_swap.h @@ -0,0 +1,54 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* 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-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/data.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/data.cpp new file mode 100644 index 000000000..4bbdd1a96 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/data.cpp @@ -0,0 +1,126 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include +#include +#include +#include + +#include + +#include "data.h" +#include "node.h" + +#define MAX_TRASH_LENGTH 1000 +#define MAX_FIELD_LENGTH 1000 +#define MAX_LINE_LENGTH 1000 + +static void getNextField (FILE * __f, char * __buff) { + + char trash [MAX_TRASH_LENGTH]; + + fscanf (__f, "%[ \t:\n]", trash); /* Discarding sep. */ + fscanf (__f, "%[^:\n]", __buff); /* Reading the field */ + fgetc (__f); +} + +static void getLine (FILE * __f, char * __buff) { + + char trash [MAX_TRASH_LENGTH]; + + fscanf (__f, "%[ \t:\n]", trash); /* Discarding sep. */ + fscanf (__f, "%[^\n]", __buff); /* Reading the line */ +} + +void loadData (const char * __filename) { + + FILE * f = fopen (__filename, "r"); + + if (f) { + + printf ("Loading '%s'.\n", __filename); + + char field [MAX_FIELD_LENGTH]; + + getNextField (f, field); /* Name */ + assert (strstr (field, "NAME")); + getNextField (f, field); + printf ("NAME: %s.\n", field); + + getNextField (f, field); /* Comment */ + assert (strstr (field, "COMMENT")); + getLine (f, field); + printf ("COMMENT: %s.\n", field); + + getNextField (f, field); /* Type */ + assert (strstr (field, "TYPE")); + getNextField (f, field); + printf ("TYPE: %s.\n", field); + + getNextField (f, field); /* Dimension */ + assert (strstr (field, "DIMENSION")); + getNextField (f, field); + printf ("DIMENSION: %s.\n", field); + numNodes = atoi (field); + + getNextField (f, field); /* Edge weight type */ + assert (strstr (field, "EDGE_WEIGHT_TYPE")); + getNextField (f, field); + printf ("EDGE_WEIGHT_TYPE: %s.\n", field); + + getNextField (f, field); /* Node coord section */ + assert (strstr (field, "NODE_COORD_SECTION")); + loadNodes (f); + + getNextField (f, field); /* End of file */ + assert (strstr (field, "EOF")); + printf ("EOF.\n"); + } + else { + + fprintf (stderr, "Can't open '%s'.\n", __filename); + exit (1); + } +} + +void loadData (eoParser & __parser) { + + /* Getting the path of the instance */ + + eoValueParam param ("", "inst", "Path of the instance") ; + __parser.processParam (param) ; + loadData (param.value ().c_str ()); +} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/data.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/data.h new file mode 100644 index 000000000..2ec56fdd4 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/data.h @@ -0,0 +1,46 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef __data_h +#define __data_h + +#include + +extern void loadData (const char * __filename); + +extern void loadData (eoParser & __parser); + +#endif diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/display.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/display.cpp new file mode 100644 index 000000000..69ebfaf9d --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/display.cpp @@ -0,0 +1,145 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include +#include + +#include + +#include "display.h" +#include "node.h" +#include "opt_route.h" + +#define BORDER 20 +#define RATIO 0.5 + +#define screen_width 1024 +#define screen_height 768 + +static const char * filename; + +/* Computed coordinates */ +static unsigned * X_new_coord, * Y_new_coord ; + +/* this variable will contain the handle to the returned graphics context. */ +static GC gc; + +/* this variable will contain the pointer to the Display structure */ +static Display* disp; + +/* this variable will store the ID of the newly created window. */ +static Window win; + +static int screen; + +/* Create a new backing pixmap of the appropriate size */ + + /* Best tour */ + /* + gdk_gc_set_line_attributes (gc, 2, GDK_LINE_ON_OFF_DASH, GDK_CAP_NOT_LAST, GDK_JOIN_MITER) ; + + gdk_gc_set_foreground (gc, & color_green) ; + + for (int i = 0 ; i < (int) numNodes ; i ++) { + + gdk_draw_line (pixmap, gc, + X_new_coord [opt_route [i]], + Y_new_coord [opt_route [i]], + X_new_coord [opt_route [(i + 1) % numNodes]], + Y_new_coord [opt_route [(i + 1) % numNodes]]); + + }*/ + +void openMainWindow (const char * __filename) { + + filename = __filename; + + /* Map */ + int map_width = (int) (X_max - X_min); + int map_height = (int) (Y_max - Y_min); + int map_side = std :: max (map_width, map_height); + + /* Calculate the window's width and height. */ + int win_width = (int) (screen_width * RATIO * map_width / map_side); + int win_height = (int) (screen_height * RATIO * map_height / map_side); + + /* Computing the coordinates */ + X_new_coord = new unsigned [numNodes]; + Y_new_coord = new unsigned [numNodes]; + + for (unsigned i = 0; i < numNodes; i ++) { + X_new_coord [i] = (unsigned) (win_width * (1.0 - (X_coord [i] - X_min) / map_width) + BORDER); + Y_new_coord [i] = (unsigned) (win_height * (1.0 - (Y_coord [i] - Y_min) / map_height) + BORDER); + } + + /* Initialisation */ + XGCValues val ; + + disp = XOpenDisplay (NULL) ; + screen = DefaultScreen (disp) ; + win = XCreateSimpleWindow (disp, RootWindow (disp, screen), 0, 0, win_width + 2 * BORDER, win_height + 2 * BORDER, 2, BlackPixel (disp, screen), WhitePixel (disp, screen)) ; + val.foreground = BlackPixel(disp, screen) ; + val.background = WhitePixel(disp, screen) ; + gc = XCreateGC (disp, win, GCForeground | GCBackground, & val) ; + + XMapWindow (disp, win) ; + XFlush (disp) ; + + while (true) { + XClearWindow (disp, win) ; + + /* Vertices as circles */ + for (unsigned i = 1 ; i < numNodes ; i ++) + XDrawArc (disp, win, gc, X_new_coord [i] - 1, Y_new_coord [i] - 1, 3, 3, 0, 364 * 64) ; + + /* New tour */ + std :: ifstream f (filename); + if (f) { + Route route; + f >> route; + f.close (); + + for (int i = 0; i < (int) numNodes; i ++) + XDrawLine (disp, win, gc, + X_new_coord [route [i]], + Y_new_coord [route [i]], + X_new_coord [route [(i + 1) % numNodes]], + Y_new_coord [route [(i + 1) % numNodes]]); + } + XFlush (disp) ; + sleep (1) ; + } +} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/display.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/display.h new file mode 100644 index 000000000..b39c307ca --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/display.h @@ -0,0 +1,44 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef __display_h +#define __display_h + +#include "route.h" + +extern void openMainWindow (const char * __filename); + +#endif diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/display_best_route.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/display_best_route.cpp new file mode 100644 index 000000000..6bbe6630d --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/display_best_route.cpp @@ -0,0 +1,50 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include "display_best_route.h" +#include "display.h" + +DisplayBestRoute :: DisplayBestRoute (eoPop & __pop + ) : pop (__pop) { + + +} + +void DisplayBestRoute :: operator () () { + + displayRoute (pop.best_element ()); +} + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/display_best_route.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/display_best_route.h new file mode 100644 index 000000000..734f8a855 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/display_best_route.h @@ -0,0 +1,60 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef __display_best_route_h +#define __display_best_route_h + +#include + +#include + +#include "route.h" + +class DisplayBestRoute : public eoUpdater { + +public : + + DisplayBestRoute (eoPop & __pop); + + void operator () (); + +private : + + eoPop & pop; + +}; + +#endif diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/edge_xover.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/edge_xover.cpp new file mode 100644 index 000000000..a2dac3a9a --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/edge_xover.cpp @@ -0,0 +1,146 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include +#include + +#include + +#include "edge_xover.h" + +void EdgeXover :: build_map (const Route & __par1, const Route & __par2) { + + unsigned len = __par1.size () ; + + /* Initialization */ + _map.clear () ; + _map.resize (len) ; + + for (unsigned 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 __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 __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 len = __par1.size () ; + + /* Go ! */ + __child.clear () ; + + unsigned cur_vertex = rng.random (len) ; + + add_vertex (cur_vertex, __child) ; + + for (unsigned i = 1 ; i < len ; i ++) { + + unsigned len_min_entry = MAXINT ; + + std :: set & neigh = _map [cur_vertex] ; + + for (std :: set :: iterator it = neigh.begin () ; + it != neigh.end () ; + it ++) { + unsigned 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 l = _map [* it].size () ; + if (len_min_entry == l) + cand.push_back (* it) ; + } + + if (! cand.size ()) { + + /* Oh no ! Implicit mutation */ + for (unsigned 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) ; + + __route1.invalidate () ; + __route2.invalidate () ; + + return true ; +} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/edge_xover.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/edge_xover.h new file mode 100644 index 000000000..75d91a22e --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/edge_xover.h @@ -0,0 +1,71 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* 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 __vertex, std :: vector > & __map) ; + /* Updating the map of entries */ + + void build_map (const Route & __par1, const Route & __par2) ; + + void add_vertex (unsigned __vertex, Route & __child) ; + + std :: vector > _map ; /* The handled map */ + + std :: vector visited ; /* Vertices that are already visited */ + +} ; + +#endif diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/merge_route_eval.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/merge_route_eval.cpp new file mode 100644 index 000000000..dc005214b --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/merge_route_eval.cpp @@ -0,0 +1,45 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include "merge_route_eval.h" + +void MergeRouteEval :: operator () (Route & __route, const int & __part_fit) { + + int len = __route.fitness (); + len += __part_fit; + __route.fitness (len); +} + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/merge_route_eval.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/merge_route_eval.h new file mode 100644 index 000000000..78c7b8a65 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/merge_route_eval.h @@ -0,0 +1,52 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef __merge_route_eval_h +#define __merge_route_eval_h + +#include + +#include "route.h" + +class MergeRouteEval : public peoAggEvalFunc { + +public : + + void operator () (Route & __route, const int & __part_fit) ; + +}; + +#endif diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/mix.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/mix.h new file mode 100644 index 000000000..ce6e31a26 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/mix.h @@ -0,0 +1,52 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef __mix_h +#define __mix_h + +#include + +#include + +template void mix (std :: vector & __v) { + + unsigned len = __v.size () ; + + for (unsigned i = 0 ; i < len ; i ++) + std :: swap (__v [i], __v [rng.random (len)]) ; +} + +#endif diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/node.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/node.cpp new file mode 100644 index 000000000..48f76484d --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/node.cpp @@ -0,0 +1,105 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include +#include + +#include "node.h" + +unsigned numNodes; /* Number of nodes */ + +//static unsigned * * dist; /* Square matrix of distances */ + +double * X_coord, * Y_coord; + +double X_min = MAXDOUBLE, X_max = MINDOUBLE, Y_min = MAXDOUBLE, Y_max = MINDOUBLE; + +void loadNodes (FILE * __f) { + + /* Coord */ + + X_coord = new double [numNodes]; + + Y_coord = new double [numNodes]; + + unsigned num; + + for (unsigned i = 0; i < numNodes; i ++) { + + fscanf (__f, "%u%lf%lf", & num, X_coord + i, Y_coord + i); + + if (X_coord [i] < X_min) + X_min = X_coord [i]; + if (X_coord [i] > X_max) + X_max = X_coord [i]; + if (Y_coord [i] < Y_min) + Y_min = Y_coord [i]; + if (Y_coord [i] > Y_max) + Y_max = Y_coord [i]; + } + + /* Allocation */ + /* + dist = new unsigned * [numNodes]; + + for (unsigned i = 0; i < numNodes; i ++) + dist [i] = new unsigned [numNodes]; + */ + /* Computation of the distances */ + + /* + for (unsigned i = 0; i < numNodes; i ++) { + + dist [i] [i] = 0; + + for (unsigned j = 0; j < numNodes; j ++) { + + double dx = X_coord [i] - X_coord [j], dy = Y_coord [i] - Y_coord [j]; + + dist [i] [j] = dist [j] [i] = (unsigned) (sqrt (dx * dx + dy * dy) + 0.5) ; + } + }*/ +} + +unsigned distance (Node __from, Node __to) { + + // return dist [__from] [__to]; + + double dx = X_coord [__from] - X_coord [__to], dy = Y_coord [__from] - Y_coord [__to]; + + return (unsigned) (sqrt (dx * dx + dy * dy) + 0.5) ; +} + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/node.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/node.h new file mode 100644 index 000000000..bbc68c7f6 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/node.h @@ -0,0 +1,54 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef __node_h +#define __node_h + +#include + +typedef unsigned Node; + +extern double X_min, X_max, Y_min, Y_max; + +extern double * X_coord, * Y_coord; + +extern unsigned numNodes; /* Number of nodes */ + +extern void loadNodes (FILE * __f); + +extern unsigned distance (Node __from, Node __to); + +#endif diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/opt_route.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/opt_route.cpp new file mode 100644 index 000000000..a8f85e3a1 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/opt_route.cpp @@ -0,0 +1,135 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include "opt_route.h" + +#define MAX_TRASH_LENGTH 1000 +#define MAX_FIELD_LENGTH 1000 +#define MAX_LINE_LENGTH 1000 + +static void getNextField (FILE * __f, char * __buff) { + + char trash [MAX_TRASH_LENGTH]; + + fscanf (__f, "%[ \t:\n]", trash); /* Discarding sep. */ + fscanf (__f, "%[^:\n]", __buff); /* Reading the field */ + fgetc (__f); +} + +static void getLine (FILE * __f, char * __buff) { + + char trash [MAX_TRASH_LENGTH]; + + fscanf (__f, "%[ \t:\n]", trash); /* Discarding sep. */ + fscanf (__f, "%[^\n]", __buff); /* Reading the line */ +} + +static void loadBestRoute (FILE * __f) { + + opt_route.clear (); + + for (unsigned i = 0; i < numNodes; i ++) { + Node node; + fscanf (__f, "%u", & node); + opt_route.push_back (node - 1); + } + int d; /* -1 ! */ + fscanf (__f, "%d", & d); +} + +void loadOptimumRoute (const char * __filename) { + + FILE * f = fopen (__filename, "r"); + + if (f) { + + printf ("Loading '%s'.\n", __filename); + + char field [MAX_FIELD_LENGTH]; + + getNextField (f, field); /* Name */ + assert (strstr (field, "NAME")); + getNextField (f, field); + //printf ("NAME: %s.\n", field); + + getNextField (f, field); /* Comment */ + assert (strstr (field, "COMMENT")); + getLine (f, field); + // printf ("COMMENT: %s.\n", field); + + getNextField (f, field); /* Type */ + assert (strstr (field, "TYPE")); + getNextField (f, field); + //printf ("TYPE: %s.\n", field); + + getNextField (f, field); /* Dimension */ + assert (strstr (field, "DIMENSION")); + getNextField (f, field); + // printf ("DIMENSION: %s.\n", field); + numNodes = atoi (field); + + getNextField (f, field); /* Tour section */ + assert (strstr (field, "TOUR_SECTION")); + loadBestRoute (f); + + getNextField (f, field); /* End of file */ + assert (strstr (field, "EOF")); + //printf ("EOF.\n"); + + printf ("The length of the best route is %u.\n", length (opt_route)); + } + else { + + fprintf (stderr, "Can't open '%s'.\n", __filename); + exit (1); + } +} + +void loadOptimumRoute (eoParser & __parser) { + + /* Getting the path of the instance */ + + eoValueParam param ("", "optimumTour", "Optimum tour") ; + __parser.processParam (param) ; + if (strlen (param.value ().c_str ())) + loadOptimumRoute (param.value ().c_str ()); + else + opt_route.fitness (0); +} + +Route opt_route; /* Optimum route */ + + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/opt_route.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/opt_route.h new file mode 100644 index 000000000..8a5767285 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/opt_route.h @@ -0,0 +1,51 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef __opt_route_h +#define __opt_route_h + +#include +#include + +#include "route.h" + +extern void loadOptimumRoute (const char * __filename); + +extern void loadOptimumRoute (eoParser & __parser); + +extern Route opt_route; /* Optimum route */ + +#endif diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/order_xover.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/order_xover.cpp new file mode 100644 index 000000000..f69eaff30 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/order_xover.cpp @@ -0,0 +1,92 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include + +#include + +#include "order_xover.h" + +void OrderXover :: cross (const Route & __par1, const Route & __par2, Route & __child) { + + unsigned cut2 = 1 + rng.random (numNodes) ; + unsigned cut1 = rng.random (cut2); + unsigned l = 0; + + /* To store vertices that have already been crossed */ + std :: vector v (numNodes, false); + + /* Copy of the left partial route of the first parent */ + for (unsigned i = cut1 ; i < cut2 ; i ++) { + __child [l ++] = __par1 [i] ; + v [__par1 [i]] = true ; + } + + /* Searching the vertex of the second path, that ended the previous first one */ + unsigned from = 0 ; + for (unsigned i = 0; i < numNodes; i ++) + if (__par2 [i] == __child [cut2 - 1]) { + from = i ; + break ; + } + + /* Selecting a direction (Left or Right) */ + char direct = rng.flip () ? 1 : -1 ; + + for (unsigned i = 0; i < numNodes + 1; i ++) { + unsigned bidule = (direct * i + from + numNodes) % numNodes; + if (! v [__par2 [bidule]]) { + __child [l ++] = __par2 [bidule] ; + v [__par2 [bidule]] = true ; + } + } +} + +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) ; + + __route1.invalidate () ; + __route2.invalidate () ; + + return true ; +} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/order_xover.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/order_xover.h new file mode 100644 index 000000000..bd14f5a50 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/order_xover.h @@ -0,0 +1,56 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* 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-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/paradiseo-peo-lsn-shared.doxyfile b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/paradiseo-peo-lsn-shared.doxyfile new file mode 100644 index 000000000..5acf7de0b --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/paradiseo-peo-lsn-shared.doxyfile @@ -0,0 +1,240 @@ +# Doxyfile 1.4.7 + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- +PROJECT_NAME = "@PACKAGE_NAME@ - Lessons" +PROJECT_NUMBER = @PACKAGE_VERSION@ +OUTPUT_DIRECTORY = @CMAKE_BINARY_DIR@/doc/html/lsnshared +CREATE_SUBDIRS = NO +OUTPUT_LANGUAGE = English +USE_WINDOWS_ENCODING = NO +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = YES +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the +ALWAYS_DETAILED_SEC = NO +INLINE_INHERITED_MEMB = NO +FULL_PATH_NAMES = NO +STRIP_FROM_PATH = @CMAKE_SOURCE_DIR@ +STRIP_FROM_INC_PATH = +SHORT_NAMES = NO +JAVADOC_AUTOBRIEF = YES +MULTILINE_CPP_IS_BRIEF = NO +DETAILS_AT_TOP = NO +INHERIT_DOCS = YES +SEPARATE_MEMBER_PAGES = NO +TAB_SIZE = 8 +ALIASES = +OPTIMIZE_OUTPUT_FOR_C = NO +OPTIMIZE_OUTPUT_JAVA = NO +BUILTIN_STL_SUPPORT = NO +DISTRIBUTE_GROUP_DOC = NO +SUBGROUPING = YES +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- +EXTRACT_ALL = NO +EXTRACT_PRIVATE = YES +EXTRACT_STATIC = YES +EXTRACT_LOCAL_CLASSES = YES +EXTRACT_LOCAL_METHODS = NO +HIDE_UNDOC_MEMBERS = YES +HIDE_UNDOC_CLASSES = YES +HIDE_FRIEND_COMPOUNDS = NO +HIDE_IN_BODY_DOCS = NO +INTERNAL_DOCS = NO +CASE_SENSE_NAMES = YES +HIDE_SCOPE_NAMES = NO +SHOW_INCLUDE_FILES = YES +INLINE_INFO = YES +SORT_MEMBER_DOCS = NO +SORT_BRIEF_DOCS = NO +SORT_BY_SCOPE_NAME = NO +GENERATE_TODOLIST = YES +GENERATE_TESTLIST = YES +GENERATE_BUGLIST = YES +GENERATE_DEPRECATEDLIST= YES +ENABLED_SECTIONS = +MAX_INITIALIZER_LINES = 30 +SHOW_USED_FILES = YES +SHOW_DIRECTORIES = NO +FILE_VERSION_FILTER = +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- +QUIET = YES +WARNINGS = YES +WARN_IF_UNDOCUMENTED = YES +WARN_IF_DOC_ERROR = YES +WARN_NO_PARAMDOC = YES +WARN_FORMAT = "$file:$line: $text" +WARN_LOGFILE = +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- +INPUT = @CMAKE_CURRENT_SOURCE_DIR@ +FILE_PATTERNS = *.cpp \ + *.h \ + NEWS \ + README +RECURSIVE = YES +EXCLUDE = +EXCLUDE_SYMLINKS = NO +EXCLUDE_PATTERNS = +EXAMPLE_PATH = +EXAMPLE_PATTERNS = * +EXAMPLE_RECURSIVE = NO +IMAGE_PATH = +INPUT_FILTER = +FILTER_PATTERNS = +FILTER_SOURCE_FILES = NO +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- +SOURCE_BROWSER = YES +INLINE_SOURCES = NO +STRIP_CODE_COMMENTS = YES +REFERENCED_BY_RELATION = YES +REFERENCES_RELATION = YES +REFERENCES_LINK_SOURCE = YES +USE_HTAGS = NO +VERBATIM_HEADERS = YES +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- +ALPHABETICAL_INDEX = YES +COLS_IN_ALPHA_INDEX = 3 +IGNORE_PREFIX = peo +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- +GENERATE_HTML = YES +HTML_OUTPUT = html +HTML_FILE_EXTENSION = .html +HTML_HEADER = +HTML_FOOTER = +HTML_STYLESHEET = +HTML_ALIGN_MEMBERS = YES +GENERATE_HTMLHELP = NO +CHM_FILE = +HHC_LOCATION = +GENERATE_CHI = NO +BINARY_TOC = NO +TOC_EXPAND = NO +DISABLE_INDEX = NO +ENUM_VALUES_PER_LINE = 4 +GENERATE_TREEVIEW = YES +TREEVIEW_WIDTH = 250 +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- +GENERATE_LATEX = YES +LATEX_OUTPUT = latex +LATEX_CMD_NAME = latex +MAKEINDEX_CMD_NAME = makeindex +COMPACT_LATEX = NO +PAPER_TYPE = a4wide +EXTRA_PACKAGES = +LATEX_HEADER = +PDF_HYPERLINKS = YES +USE_PDFLATEX = YES +LATEX_BATCHMODE = NO +LATEX_HIDE_INDICES = NO +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- +GENERATE_RTF = NO +RTF_OUTPUT = rtf +COMPACT_RTF = NO +RTF_HYPERLINKS = NO +RTF_STYLESHEET_FILE = +RTF_EXTENSIONS_FILE = +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- +GENERATE_MAN = YES +MAN_OUTPUT = man +MAN_EXTENSION = .3 +MAN_LINKS = NO +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- +GENERATE_XML = NO +XML_OUTPUT = xml +XML_SCHEMA = +XML_DTD = +XML_PROGRAMLISTING = YES +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- +GENERATE_AUTOGEN_DEF = NO +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- +GENERATE_PERLMOD = NO +PERLMOD_LATEX = NO +PERLMOD_PRETTY = YES +PERLMOD_MAKEVAR_PREFIX = +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- +ENABLE_PREPROCESSING = YES +MACRO_EXPANSION = NO +EXPAND_ONLY_PREDEF = NO +SEARCH_INCLUDES = YES +INCLUDE_PATH = +INCLUDE_FILE_PATTERNS = +PREDEFINED = +EXPAND_AS_DEFINED = +SKIP_FUNCTION_MACROS = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- +TAGFILES = @EO_BIN_DIR@/doc/eo.doxytag=http://eodev.sourceforge.net/eo/doc/html \ + @MO_BIN_DIR@/doc/mo.doxytag=@MO_BIN_DIR@/doc/html \ + @ParadisEO-PEO_BINARY_DIR@/doc/peo.doxytag=@ParadisEO-PEO_BINARY_DIR@/doc/html +GENERATE_TAGFILE = @CMAKE_BINARY_DIR@/doc/paradiseo-peo-lsn-shared.doxytag +ALLEXTERNALS = NO +EXTERNAL_GROUPS = YES +PERL_PATH = /usr/bin/perl +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- +CLASS_DIAGRAMS = YES +HIDE_UNDOC_RELATIONS = YES +HAVE_DOT = NO +CLASS_GRAPH = YES +COLLABORATION_GRAPH = YES +GROUP_GRAPHS = YES +UML_LOOK = NO +TEMPLATE_RELATIONS = NO +INCLUDE_GRAPH = YES +INCLUDED_BY_GRAPH = YES +CALL_GRAPH = NO +CALLER_GRAPH = NO +GRAPHICAL_HIERARCHY = YES +DIRECTORY_GRAPH = YES +DOT_IMAGE_FORMAT = png +DOT_PATH = +DOTFILE_DIRS = +MAX_DOT_GRAPH_WIDTH = 1024 +MAX_DOT_GRAPH_HEIGHT = 1024 +MAX_DOT_GRAPH_DEPTH = 0 +DOT_TRANSPARENT = NO +DOT_MULTI_TARGETS = NO +GENERATE_LEGEND = YES +DOT_CLEANUP = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- +SEARCHENGINE = YES diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/param.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/param.cpp new file mode 100644 index 000000000..92dc5f256 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/param.cpp @@ -0,0 +1,51 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include + +#include "data.h" +#include "opt_route.h" + +void loadParameters (int __argc, char * * __argv) { + + eoParser parser (__argc, __argv); + + loadData (parser); + + loadOptimumRoute (parser); +} + + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/param.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/param.h new file mode 100644 index 000000000..25b981696 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/param.h @@ -0,0 +1,42 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef __param_h +#define __param_h + +extern void loadParameters (int __argc, char * * __argv); + +#endif diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/part_route_eval.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/part_route_eval.cpp new file mode 100644 index 000000000..d78c6c6e7 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/part_route_eval.cpp @@ -0,0 +1,58 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include "part_route_eval.h" +#include "node.h" + +PartRouteEval :: PartRouteEval (float __from, + float __to + ) : from (__from), + to (__to) { + +} + +void PartRouteEval :: operator () (Route & __route) { + + + unsigned len = 0 ; + + for (unsigned i = (unsigned) (__route.size () * from) ; + i < (unsigned) (__route.size () * to) ; + i ++) + len += distance (__route [i], __route [(i + 1) % numNodes]) ; + + __route.fitness (- (int) len) ; +} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/part_route_eval.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/part_route_eval.h new file mode 100644 index 000000000..8d144555d --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/part_route_eval.h @@ -0,0 +1,61 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* 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-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/partial_mapped_xover.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/partial_mapped_xover.cpp new file mode 100644 index 000000000..8c37ad6a0 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/partial_mapped_xover.cpp @@ -0,0 +1,89 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include + +#include + +#include "partial_mapped_xover.h" +#include "mix.h" + +void PartialMappedXover :: repair (Route & __route, unsigned __cut1, unsigned __cut2) { + + unsigned v [__route.size ()] ; // Number of times a cities are visited ... + + for (unsigned i = 0 ; i < __route.size () ; i ++) + v [i] = 0 ; + + for (unsigned i = 0 ; i < __route.size () ; i ++) + v [__route [i]] ++ ; + + std :: vector vert ; + + for (unsigned i = 0 ; i < __route.size () ; i ++) + if (! v [i]) + vert.push_back (i) ; + + mix (vert) ; + + for (unsigned i = 0 ; i < __route.size () ; i ++) + if (i < __cut1 || i >= __cut2) + if (v [__route [i]] > 1) { + __route [i] = vert.back () ; + vert.pop_back () ; + } +} + +bool PartialMappedXover :: operator () (Route & __route1, Route & __route2) { + + unsigned cut1 = rng.random (__route1.size ()), cut2 = rng.random (__route2.size ()) ; + + if (cut2 < cut1) + std :: swap (cut1, cut2) ; + + // Between the cuts + for (unsigned i = cut1 ; i < cut2 ; i ++) + std :: swap (__route1 [i], __route2 [i]) ; + + // Outside the cuts + repair (__route1, cut1, cut2) ; + repair (__route2, cut1, cut2) ; + + __route1.invalidate () ; + __route2.invalidate () ; + + return true ; +} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/partial_mapped_xover.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/partial_mapped_xover.h new file mode 100644 index 000000000..e3ff29ad7 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/partial_mapped_xover.h @@ -0,0 +1,56 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* 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-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/route.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/route.cpp new file mode 100644 index 000000000..73a035539 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/route.cpp @@ -0,0 +1,49 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include "route.h" + +unsigned length (const Route & __route) { + + unsigned len = 0 ; + + for (unsigned i = 0; i < numNodes; i ++) + len += distance (__route [i], __route [(i + 1) % numNodes]) ; + + return len; +} + + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/route.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/route.h new file mode 100644 index 000000000..13071e2ec --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/route.h @@ -0,0 +1,48 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef __route_h +#define __route_h + +#include + +#include "node.h" + +typedef eoVector Route; + +unsigned length (const Route & __route); + +#endif diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/route_eval.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/route_eval.cpp new file mode 100644 index 000000000..d16c15ed4 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/route_eval.cpp @@ -0,0 +1,41 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include "route_eval.h" + +void RouteEval :: operator () (Route & __route) { + __route.fitness (- (int) length (__route)); +} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/route_eval.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/route_eval.h new file mode 100644 index 000000000..5e79b7b9f --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/route_eval.h @@ -0,0 +1,51 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef __route_eval_h +#define __route_eval_h + +#include + +#include "route.h" + +class RouteEval : public eoEvalFunc { + +public : + + void operator () (Route & __route) ; +} ; + +#endif diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/route_init.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/route_init.cpp new file mode 100644 index 000000000..6e611d76e --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/route_init.cpp @@ -0,0 +1,51 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include + +#include "route_init.h" +#include "node.h" + +void RouteInit :: operator () (Route & __route) { + + __route.clear (); + + for (unsigned i = 0 ; i < numNodes ; i ++) + __route.push_back (i); + + for (unsigned i = 0 ; i < numNodes ; i ++) + std :: swap (__route [i], __route [rng.random (numNodes)]); +} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/route_init.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/route_init.h new file mode 100644 index 000000000..b5311b1f7 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/route_init.h @@ -0,0 +1,51 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* 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-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/two_opt.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/two_opt.cpp new file mode 100644 index 000000000..f149b6de1 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/two_opt.cpp @@ -0,0 +1,48 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include "two_opt.h" + +void TwoOpt :: operator () (Route & __route) { + + unsigned i = 0; + + while ((2 * i) < (second - first)) { + + std :: swap (__route [first + i], __route [second - i]); + i ++; + } +} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/two_opt.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/two_opt.h new file mode 100644 index 000000000..5c9e985ea --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/two_opt.h @@ -0,0 +1,53 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef __two_opt_h +#define __two_opt_h + +#include +#include + +#include "route.h" + +class TwoOpt : public moMove , public std :: pair { + +public : + + void operator () (Route & __route); + +} ; + +#endif diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/two_opt_incr_eval.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/two_opt_incr_eval.cpp new file mode 100644 index 000000000..60be43d9f --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/two_opt_incr_eval.cpp @@ -0,0 +1,52 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include "two_opt_incr_eval.h" +#include "node.h" + +int TwoOptIncrEval :: operator () (const TwoOpt & __move, const Route & __route) { + + /* From */ + Node v1 = __route [__move.first], v1_left = __route [(__move.first - 1 + numNodes) % numNodes]; + + /* To */ + Node v2 = __route [__move.second], v2_right = __route [(__move.second + 1) % numNodes]; + + if (v1 == v2 || v2_right == v1) + return __route.fitness (); + else + return __route.fitness () - distance (v1_left, v2) - distance (v1, v2_right) + distance (v1_left, v1) + distance (v2, v2_right); +} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/two_opt_incr_eval.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/two_opt_incr_eval.h new file mode 100644 index 000000000..7cce92aa7 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/two_opt_incr_eval.h @@ -0,0 +1,51 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef __two_opt_incr_eval_h +#define __two_opt_incr_eval_h + +#include +#include "two_opt.h" + +class TwoOptIncrEval : public moMoveIncrEval { + +public : + + int operator () (const TwoOpt & __move, const Route & __route) ; + +} ; + +#endif diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/two_opt_init.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/two_opt_init.cpp new file mode 100644 index 000000000..862b5236e --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/two_opt_init.cpp @@ -0,0 +1,42 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include "two_opt_init.h" + +void TwoOptInit :: operator () (TwoOpt & __move, const Route & __route) { + + __move.first = __move.second = 0; +} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/two_opt_init.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/two_opt_init.h new file mode 100644 index 000000000..fc290b4f8 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/two_opt_init.h @@ -0,0 +1,52 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef __two_opt_init_h +#define __two_opt_init_h + +#include + +#include "two_opt.h" + +class TwoOptInit : public moMoveInit { + +public : + + void operator () (TwoOpt & __move, const Route & __route) ; + +} ; + +#endif diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/two_opt_next.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/two_opt_next.cpp new file mode 100644 index 000000000..a80e973be --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/two_opt_next.cpp @@ -0,0 +1,55 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include "two_opt_next.h" +#include "node.h" + +bool TwoOptNext :: operator () (TwoOpt & __move, const Route & __route) { + + if (__move.first == numNodes - 1 && __move.second == numNodes - 1) + return false; + + else { + + __move.second ++; + if (__move.second == numNodes) { + + __move.first ++; + __move.second = __move.first; + } + return true ; + } +} diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/two_opt_next.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/two_opt_next.h new file mode 100644 index 000000000..09844b8c4 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/two_opt_next.h @@ -0,0 +1,52 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#ifndef __two_opt_next_h +#define __two_opt_next_h + +#include + +#include "two_opt.h" + +class TwoOptNext : public moNextMove { + +public : + + bool operator () (TwoOpt & __move, const Route & __route); + +}; + +#endif diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/two_opt_rand.cpp b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/two_opt_rand.cpp new file mode 100644 index 000000000..9fa9270c8 --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/two_opt_rand.cpp @@ -0,0 +1,49 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include + +#include "two_opt_rand.h" +#include "node.h" + +void TwoOptRand :: operator () (TwoOpt & __move, const Route & __route) { + + __move.second = rng.random (numNodes); + + __move.first = rng.random (__move.second); +} + + diff --git a/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/two_opt_rand.h b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/two_opt_rand.h new file mode 100644 index 000000000..c2cac3a7b --- /dev/null +++ b/tags/paradiseo-peo-08112007-before-new-lessons/paradiseo-peo/tutorial/examples/tsp/two_opt_rand.h @@ -0,0 +1,52 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Sebastien Cahon, Alexandru-Adrian Tantar +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* 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 eoMoveRand { + +public : + + void operator () (TwoOpt & __move, const Route & __route) ; + +} ; + +#endif