From a082e32513f38a3b198dffb1905cde6908bb352a Mon Sep 17 00:00:00 2001 From: legrand Date: Wed, 16 Jan 2008 10:09:51 +0000 Subject: [PATCH] fill paradiseo-peo-16012008-before-mig-modifs tag git-svn-id: svn://scm.gforge.inria.fr/svnroot/paradiseo@887 331e1502-861f-0410-8da2-ba01fb791d7f --- .../AUTHORS | 3 + .../CMakeLists.txt | 161 ++++++ .../README | 82 +++ .../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 ++++++++++++ .../doc/html/README-source.html | 107 ++++ .../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 +++ .../doc/html/classRunner.html | 86 +++ .../doc/html/classRunner.png | Bin 0 -> 996 bytes .../doc/html/classService-members.html | 62 +++ .../doc/html/classService.html | 103 ++++ .../doc/html/classService.png | Bin 0 -> 2743 bytes .../doc/html/classThread-members.html | 42 ++ .../doc/html/classThread.html | 73 +++ .../doc/html/classThread.png | Bin 0 -> 1445 bytes .../doc/html/classTopology-members.html | 40 ++ .../doc/html/classTopology.html | 62 +++ .../doc/html/classTopology.png | Bin 0 -> 359 bytes .../doc/html/classWorker-members.html | 68 +++ .../doc/html/classWorker.html | 94 ++++ .../doc/html/classWorker.png | Bin 0 -> 624 bytes .../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 +++ .../doc/html/classpeoEA.html | 236 ++++++++ .../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 ++++++++++++++++++ .../doc/html/doxygen.css | 358 ++++++++++++ .../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 +++++ .../doc/html/files.html | 153 +++++ .../doc/html/ftv2blank.png | Bin 0 -> 174 bytes .../doc/html/ftv2doc.png | Bin 0 -> 255 bytes .../doc/html/ftv2folderclosed.png | Bin 0 -> 259 bytes .../doc/html/ftv2folderopen.png | Bin 0 -> 261 bytes .../doc/html/ftv2lastnode.png | Bin 0 -> 233 bytes .../doc/html/ftv2link.png | Bin 0 -> 358 bytes .../doc/html/ftv2mlastnode.png | Bin 0 -> 160 bytes .../doc/html/ftv2mnode.png | Bin 0 -> 194 bytes .../doc/html/ftv2node.png | Bin 0 -> 235 bytes .../doc/html/ftv2plastnode.png | Bin 0 -> 165 bytes .../doc/html/ftv2pnode.png | Bin 0 -> 200 bytes .../doc/html/ftv2vertline.png | Bin 0 -> 229 bytes .../doc/html/functions.html | 245 ++++++++ .../doc/html/functions_func.html | 171 ++++++ .../doc/html/functions_vars.html | 161 ++++++ .../doc/html/hierarchy.html | 129 +++++ .../doc/html/index.html | 8 + .../doc/html/installdox | 117 ++++ .../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 ++++++ .../doc/html/mix_8h-source.html | 81 +++ .../doc/html/namespacemembers.html | 51 ++ .../doc/html/namespacemembers_func.html | 49 ++ .../doc/html/namespacemembers_vars.html | 47 ++ .../doc/html/namespacepeo.html | 65 +++ .../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 +++ .../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 ++++ .../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 ++++ .../doc/html/search.idx | Bin 0 -> 422353 bytes .../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 ++ .../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 +++ .../doc/html/tab_b.gif | Bin 0 -> 35 bytes .../doc/html/tab_l.gif | Bin 0 -> 706 bytes .../doc/html/tab_r.gif | Bin 0 -> 2585 bytes .../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 +++ .../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 +++ .../doc/latex/FreeSans.ttf | Bin 0 -> 22932 bytes .../doc/latex/Makefile | 17 + .../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 ++ .../doc/latex/classRunner.eps | 215 +++++++ .../doc/latex/classRunner.pdf | Bin 0 -> 1433 bytes .../doc/latex/classRunner.tex | 80 +++ .../doc/latex/classService.eps | 241 ++++++++ .../doc/latex/classService.pdf | Bin 0 -> 1897 bytes .../doc/latex/classService.tex | 100 ++++ .../doc/latex/classThread.eps | 227 ++++++++ .../doc/latex/classThread.pdf | Bin 0 -> 1528 bytes .../doc/latex/classThread.tex | 54 ++ .../doc/latex/classTopology.eps | 197 +++++++ .../doc/latex/classTopology.pdf | Bin 0 -> 1288 bytes .../doc/latex/classTopology.tex | 44 ++ .../doc/latex/classWorker.eps | 209 +++++++ .../doc/latex/classWorker.pdf | Bin 0 -> 1477 bytes .../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 ++++++++ .../doc/latex/classpeoEA.eps | 209 +++++++ .../doc/latex/classpeoEA.pdf | Bin 0 -> 1495 bytes .../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 + .../doc/latex/doxygen.sty | 78 +++ .../doc/latex/hierarchy.tex | 88 +++ .../doc/latex/main.tex | 59 ++ .../doc/latex/namespacepeo.tex | 52 ++ .../doc/latex/namespaces.tex | 4 + .../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 ++ .../doc/man/man3/Communicable.3 | 62 +++ .../doc/man/man3/Communicator.3 | 27 + .../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 ++ .../doc/man/man3/RingTopology.3 | 24 + .../doc/man/man3/Runner.3 | 57 ++ .../doc/man/man3/SEND_REQUEST.3 | 28 + .../doc/man/man3/Service.3 | 69 +++ .../doc/man/man3/Thread.3 | 40 ++ .../doc/man/man3/Topology.3 | 34 ++ .../doc/man/man3/Worker.3 | 64 +++ .../doc/man/man3/peo.3 | 43 ++ .../doc/man/man3/peoAggEvalFunc.3 | 33 ++ .../doc/man/man3/peoAsyncIslandMig.3 | 176 ++++++ .../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 ++ .../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 + .../doc/man/man3/peoTransform.3 | 27 + .../doc/peo.doxyfile.cmake | 239 ++++++++ .../peo-conf.cmake | 24 + .../src/CMakeLists.txt | 8 + .../src/core/CMakeLists.txt | 77 +++ .../src/core/communicable.cpp | 102 ++++ .../src/core/communicable.h | 78 +++ .../src/core/cooperative.h | 80 +++ .../src/core/eoPop_mesg.h | 62 +++ .../src/core/eoVector_mesg.h | 204 +++++++ .../src/core/messaging.h | 132 +++++ .../src/core/peo_debug.cpp | 111 ++++ .../src/core/peo_debug.h | 50 ++ .../src/core/peo_fin.cpp | 51 ++ .../src/core/peo_fin.h | 45 ++ .../src/core/peo_init.cpp | 99 ++++ .../src/core/peo_init.h | 49 ++ .../src/core/peo_param.cpp | 52 ++ .../src/core/peo_param.h | 45 ++ .../src/core/peo_run.cpp | 47 ++ .../src/core/peo_run.h | 45 ++ .../src/core/reac_thread.cpp | 74 +++ .../src/core/reac_thread.h | 65 +++ .../src/core/ring_topo.cpp | 53 ++ .../src/core/ring_topo.h | 52 ++ .../src/core/rmc.h | 46 ++ .../src/core/runner.cpp | 205 +++++++ .../src/core/runner.h | 105 ++++ .../src/core/service.cpp | 73 +++ .../src/core/service.h | 79 +++ .../src/core/thread.cpp | 108 ++++ .../src/core/thread.h | 75 +++ .../src/core/topology.cpp | 52 ++ .../src/core/topology.h | 63 +++ .../src/peo | 42 ++ .../src/peo.h | 351 ++++++++++++ .../src/peoAggEvalFunc.h | 57 ++ .../src/peoAsyncIslandMig.h | 300 ++++++++++ .../src/peoEvalFunc.h | 62 +++ .../src/peoGlobalBestVelocity.h | 81 +++ .../src/peoMoeoPopEval.h | 273 +++++++++ .../src/peoMultiStart.h | 342 ++++++++++++ .../src/peoNoAggEvalFunc.h | 64 +++ .../src/peoPSOSelect.h | 61 ++ .../src/peoPopEval.h | 252 +++++++++ .../src/peoSyncIslandMig.h | 346 ++++++++++++ .../src/peoTransform.h | 185 ++++++ .../src/peoWorstPositionReplacement.h | 74 +++ .../src/peoWrapper.h | 161 ++++++ .../src/rmc/CMakeLists.txt | 9 + .../src/rmc/mpi/CMakeLists.txt | 102 ++++ .../src/rmc/mpi/comm.cpp | 105 ++++ .../src/rmc/mpi/comm.h | 59 ++ .../src/rmc/mpi/cooperative.cpp | 82 +++ .../src/rmc/mpi/mess.cpp | 277 +++++++++ .../src/rmc/mpi/mess.h | 62 +++ .../src/rmc/mpi/node.cpp | 141 +++++ .../src/rmc/mpi/node.h | 74 +++ .../src/rmc/mpi/param.cpp | 49 ++ .../src/rmc/mpi/param.h | 42 ++ .../src/rmc/mpi/recv.cpp | 150 +++++ .../src/rmc/mpi/recv.h | 42 ++ .../src/rmc/mpi/rmc.cpp | 86 +++ .../src/rmc/mpi/runner.cpp | 62 +++ .../src/rmc/mpi/scheduler.cpp | 116 ++++ .../src/rmc/mpi/scheduler.h | 62 +++ .../src/rmc/mpi/schema.cpp | 190 +++++++ .../src/rmc/mpi/schema.h | 58 ++ .../src/rmc/mpi/send.cpp | 168 ++++++ .../src/rmc/mpi/send.h | 50 ++ .../src/rmc/mpi/service.cpp | 58 ++ .../src/rmc/mpi/synchron.cpp | 123 ++++ .../src/rmc/mpi/synchron.h | 85 +++ .../src/rmc/mpi/tags.h | 54 ++ .../src/rmc/mpi/worker.cpp | 139 +++++ .../src/rmc/mpi/worker.h | 85 +++ .../src/rmc/mpi/xml_parser.cpp | 101 ++++ .../src/rmc/mpi/xml_parser.h | 50 ++ .../test/CMakeLists.txt | 115 ++++ .../test/lesson.param | 12 + .../test/schema.xml | 19 + .../test/t-peo.cpp | 54 ++ .../test/t-peoInsularPSO.cpp | 131 +++++ .../test/t-peoPSO.cpp | 120 ++++ .../test/t-peoPSOPara.cpp | 107 ++++ .../test/t-peoPSOParaIsland.cpp | 170 ++++++ .../tutorial/CMakeLists.txt | 19 + .../Introduction/Technical introduction.pdf | Bin 0 -> 298281 bytes .../tutorial/Lesson1/CMakeLists.txt | 110 ++++ .../tutorial/Lesson1/Lesson1.pdf | Bin 0 -> 336647 bytes .../tutorial/Lesson1/mainEA.cpp | 125 +++++ .../tutorial/Lesson1/mainPSO.cpp | 142 +++++ .../Lesson1/paradiseo-peo-lsn.doxyfile | 242 ++++++++ .../tutorial/Lesson1/param | 9 + .../tutorial/Lesson1/schema.xml | 19 + .../tutorial/Lesson2/CMakeLists.txt | 106 ++++ .../tutorial/Lesson2/Lesson2.pdf | Bin 0 -> 330101 bytes .../tutorial/Lesson2/mainEA.cpp | 105 ++++ .../Lesson2/paradiseo-peo-lsn.doxyfile | 242 ++++++++ .../tutorial/Lesson2/param | 9 + .../tutorial/Lesson2/schema.xml | 19 + .../tutorial/Lesson3/CMakeLists.txt | 110 ++++ .../tutorial/Lesson3/Lesson3.pdf | Bin 0 -> 385679 bytes .../tutorial/Lesson3/mainEA.cpp | 148 +++++ .../tutorial/Lesson3/mainPSO.cpp | 152 +++++ .../Lesson3/paradiseo-peo-lsn.doxyfile | 242 ++++++++ .../tutorial/Lesson3/param | 9 + .../tutorial/Lesson3/schema.xml | 20 + .../tutorial/Lesson4/CMakeLists.txt | 110 ++++ .../tutorial/Lesson4/Lesson4.pdf | Bin 0 -> 332834 bytes .../tutorial/Lesson4/mainEA.cpp | 152 +++++ .../tutorial/Lesson4/mainPSO.cpp | 159 ++++++ .../Lesson4/paradiseo-peo-lsn.doxyfile | 242 ++++++++ .../tutorial/Lesson4/param | 9 + .../tutorial/Lesson4/schema.xml | 21 + .../tutorial/Lesson5/CMakeLists.txt | 109 ++++ .../tutorial/Lesson5/Lesson5.pdf | Bin 0 -> 308478 bytes .../tutorial/Lesson5/example.cpp | 118 ++++ .../Lesson5/paradiseo-peo-lsn.doxyfile | 242 ++++++++ .../tutorial/Lesson5/param | 13 + .../tutorial/Lesson5/schema.xml | 19 + .../tutorial/Lesson6/CMakeLists.txt | 91 +++ .../tutorial/Lesson6/Lesson6.pdf | Bin 0 -> 308708 bytes .../tutorial/Lesson6/main.cpp | 105 ++++ .../Lesson6/paradiseo-peo-lsn.doxyfile | 242 ++++++++ .../tutorial/Lesson6/param | 12 + .../tutorial/Lesson6/schema.xml | 19 + .../tutorial/Lesson7/CMakeLists.txt | 81 +++ .../tutorial/Lesson7/FlowShopEA.param | 49 ++ .../tutorial/Lesson7/main.cpp | 35 ++ .../tutorial/Lesson7/make_checkpoint_moeo.h | 201 +++++++ .../tutorial/Lesson7/make_continue_moeo.h | 130 +++++ .../tutorial/Lesson7/make_ea_moeo.h | 297 ++++++++++ .../tutorial/Lesson7/make_para_eval.h | 25 + .../tutorial/Lesson7/param | 12 + .../tutorial/Lesson7/schema.xml | 15 + .../tutorial/Wrapper/CMakeLists.txt | 95 ++++ .../tutorial/Wrapper/main1.cpp | 60 ++ .../tutorial/Wrapper/main2.cpp | 62 +++ .../tutorial/Wrapper/main3.cpp | 61 ++ .../tutorial/Wrapper/main4.cpp | 120 ++++ .../tutorial/Wrapper/main5.cpp | 76 +++ .../tutorial/Wrapper/main6.cpp | 76 +++ .../tutorial/Wrapper/main7.cpp | 87 +++ .../tutorial/Wrapper/param | 12 + .../tutorial/Wrapper/schema.xml | 16 + .../tutorial/examples/CMakeLists.txt | 11 + .../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 | 50 ++ .../tutorial/examples/tsp/city_swap.h | 55 ++ .../tutorial/examples/tsp/data.cpp | 132 +++++ .../tutorial/examples/tsp/data.h | 46 ++ .../tutorial/examples/tsp/display.cpp | 149 +++++ .../tutorial/examples/tsp/display.h | 44 ++ .../examples/tsp/display_best_route.cpp | 51 ++ .../examples/tsp/display_best_route.h | 61 ++ .../tutorial/examples/tsp/edge_xover.cpp | 156 ++++++ .../tutorial/examples/tsp/edge_xover.h | 72 +++ .../examples/tsp/merge_route_eval.cpp | 46 ++ .../tutorial/examples/tsp/merge_route_eval.h | 53 ++ .../tutorial/examples/tsp/mix.h | 53 ++ .../tutorial/examples/tsp/node.cpp | 108 ++++ .../tutorial/examples/tsp/node.h | 54 ++ .../tutorial/examples/tsp/opt_route.cpp | 143 +++++ .../tutorial/examples/tsp/opt_route.h | 51 ++ .../tutorial/examples/tsp/order_xover.cpp | 98 ++++ .../tutorial/examples/tsp/order_xover.h | 57 ++ .../tsp/paradiseo-peo-lsn-shared.doxyfile | 240 ++++++++ .../tutorial/examples/tsp/param.cpp | 52 ++ .../tutorial/examples/tsp/param.h | 42 ++ .../tutorial/examples/tsp/part_route_eval.cpp | 59 ++ .../tutorial/examples/tsp/part_route_eval.h | 62 +++ .../examples/tsp/partial_mapped_xover.cpp | 92 +++ .../examples/tsp/partial_mapped_xover.h | 57 ++ .../tutorial/examples/tsp/route.cpp | 50 ++ .../tutorial/examples/tsp/route.h | 48 ++ .../tutorial/examples/tsp/route_eval.cpp | 42 ++ .../tutorial/examples/tsp/route_eval.h | 52 ++ .../tutorial/examples/tsp/route_init.cpp | 52 ++ .../tutorial/examples/tsp/route_init.h | 52 ++ .../tutorial/examples/tsp/two_opt.cpp | 50 ++ .../tutorial/examples/tsp/two_opt.h | 54 ++ .../examples/tsp/two_opt_incr_eval.cpp | 53 ++ .../tutorial/examples/tsp/two_opt_incr_eval.h | 52 ++ .../tutorial/examples/tsp/two_opt_init.cpp | 43 ++ .../tutorial/examples/tsp/two_opt_init.h | 53 ++ .../tutorial/examples/tsp/two_opt_next.cpp | 58 ++ .../tutorial/examples/tsp/two_opt_next.h | 53 ++ .../tutorial/examples/tsp/two_opt_rand.cpp | 50 ++ .../tutorial/examples/tsp/two_opt_rand.h | 53 ++ 631 files changed, 54892 insertions(+) create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/AUTHORS create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/CMakeLists.txt create mode 100755 tags/paradiseo-peo-16012008-before-mig-modifs/README create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/CMakeLists.txt create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/Lesson1_2main_8cpp-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/Lesson2_2main_8cpp-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/Lesson3_2main_8cpp-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/LessonParallelAlgorithm_2main_8cpp-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/README-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/annotated.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/city__swap_8cpp-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/city__swap_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classCommunicable-members.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classCommunicable.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classCommunicable.png create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classCommunicator-members.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classCommunicator.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classCommunicator.png create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classCooperative-members.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classCooperative.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classCooperative.png create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classDisplayBestRoute-members.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classDisplayBestRoute.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classDisplayBestRoute.png create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classMergeRouteEval-members.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classMergeRouteEval.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classMergeRouteEval.png create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classReactiveThread-members.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classReactiveThread.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classReactiveThread.png create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classRingTopology-members.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classRingTopology.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classRingTopology.png create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classRunner-members.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classRunner.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classRunner.png create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classService-members.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classService.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classService.png create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classThread-members.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classThread.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classThread.png create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classTopology-members.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classTopology.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classTopology.png create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classWorker-members.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classWorker.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classWorker.png create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classes.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoAggEvalFunc-members.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoAggEvalFunc.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoAggEvalFunc.png create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoAsyncIslandMig-members.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoAsyncIslandMig.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoAsyncIslandMig.png create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoEA-members.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoEA.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoEA.png create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoNoAggEvalFunc-members.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoNoAggEvalFunc.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoNoAggEvalFunc.png create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoParaPopEval-members.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoParaPopEval.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoParaPopEval.png create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoParaSGATransform-members.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoParaSGATransform.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoParaSGATransform.png create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoParallelAlgorithmWrapper-members.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoParallelAlgorithmWrapper.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoParallelAlgorithmWrapper.png create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoPopEval-members.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoPopEval.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoPopEval.png create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoSeqPopEval-members.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoSeqPopEval.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoSeqPopEval.png create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoSeqTransform-members.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoSeqTransform.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoSeqTransform.png create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoSyncIslandMig-members.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoSyncIslandMig.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoSyncIslandMig.png create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoSyncMultiStart-members.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoSyncMultiStart.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoSyncMultiStart.png create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoSynchronousMultiStart-members.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoSynchronousMultiStart.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoSynchronousMultiStart.png create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoTransform-members.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoTransform.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoTransform.png create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/comm_8cpp-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/comm_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/communicable_8cpp-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/communicable_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/coop_8cpp-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/cooperative_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/core_2runner_8cpp-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/core_2service_8cpp-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/data_8cpp-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/data_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/display_8cpp-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/display_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/display__best__route_8cpp-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/display__best__route_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/doclsn_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/doxygen.css create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/doxygen.png create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/edge__xover_8cpp-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/edge__xover_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/eoPop__comm_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/eoVector__comm_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/exampleA_8cpp-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/exampleB_8cpp-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/exampleC_8cpp-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/exampleD_8cpp-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/exampleE_8cpp-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/files.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/ftv2blank.png create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/ftv2doc.png create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/ftv2folderclosed.png create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/ftv2folderopen.png create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/ftv2lastnode.png create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/ftv2link.png create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/ftv2mlastnode.png create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/ftv2mnode.png create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/ftv2node.png create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/ftv2plastnode.png create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/ftv2pnode.png create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/ftv2vertline.png create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/functions.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/functions_func.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/functions_vars.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/hierarchy.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/index.html create mode 100755 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/installdox create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/main.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/merge__route__eval_8cpp-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/merge__route__eval_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/mess_8cpp-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/mess_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/messaging_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/mix_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/namespacemembers.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/namespacemembers_func.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/namespacemembers_vars.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/namespacepeo.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/namespaces.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/node_8cpp-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/node_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/opt__route_8cpp-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/opt__route_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/order__xover_8cpp-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/order__xover_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/paradiseo_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/param_8cpp-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/param_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/part__route__eval_8cpp-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/part__route__eval_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/partial__mapped__xover_8cpp-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/partial__mapped__xover_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/peoAggEvalFunc_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/peoAsyncIslandMig_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/peoEA_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/peoNoAggEvalFunc_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/peoParaPopEval_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/peoParaSGATransform_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/peoParallelAlgorithmWrapper_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/peoPopEval_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/peoSeqPopEval_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/peoSeqTransform_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/peoSyncIslandMig_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/peoSyncMultiStart_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/peoSynchronousMultiStart_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/peoTransform_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/peo_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/peo__debug_8cpp-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/peo__debug_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/peo__fin_8cpp-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/peo__fin_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/peo__init_8cpp-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/peo__init_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/peo__param_8cpp-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/peo__param_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/peo__run_8cpp-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/peo__run_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/reac__thread_8cpp-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/reac__thread_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/recv_8cpp-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/recv_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/ring__topo_8cpp-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/ring__topo_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/rmc_2mpi_2runner_8cpp-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/rmc_2mpi_2service_8cpp-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/rmc_8cpp-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/rmc_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/route_8cpp-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/route_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/route__eval_8cpp-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/route__eval_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/route__init_8cpp-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/route__init_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/runner_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/scheduler_8cpp-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/scheduler_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/schema_8cpp-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/schema_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/search.idx create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/search.php create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/send_8cpp-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/send_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/service_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/src_2rmc_2mpi_2node_8cpp-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/src_2rmc_2mpi_2node_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/src_2rmc_2mpi_2param_8cpp-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/src_2rmc_2mpi_2param_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/structNode-members.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/structNode.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/structRandomExplorationAlgorithm-members.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/structRandomExplorationAlgorithm.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/structSEND__REQUEST-members.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/structSEND__REQUEST.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/structpeoParallelAlgorithmWrapper_1_1AbstractAlgorithm-members.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/structpeoParallelAlgorithmWrapper_1_1AbstractAlgorithm.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/structpeoParallelAlgorithmWrapper_1_1AbstractAlgorithm.png create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/structpeoParallelAlgorithmWrapper_1_1Algorithm-members.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/structpeoParallelAlgorithmWrapper_1_1Algorithm.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/structpeoParallelAlgorithmWrapper_1_1Algorithm.png create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/structpeoParallelAlgorithmWrapper_1_1Algorithm_3_01AlgorithmType_00_01void_01_4-members.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/structpeoParallelAlgorithmWrapper_1_1Algorithm_3_01AlgorithmType_00_01void_01_4.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/structpeoParallelAlgorithmWrapper_1_1Algorithm_3_01AlgorithmType_00_01void_01_4.png create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/structpeoSynchronousMultiStart_1_1AbstractAggregationAlgorithm-members.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/structpeoSynchronousMultiStart_1_1AbstractAggregationAlgorithm.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/structpeoSynchronousMultiStart_1_1AbstractAggregationAlgorithm.png create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/structpeoSynchronousMultiStart_1_1AbstractAlgorithm-members.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/structpeoSynchronousMultiStart_1_1AbstractAlgorithm.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/structpeoSynchronousMultiStart_1_1AbstractAlgorithm.png create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/structpeoSynchronousMultiStart_1_1AbstractDataType-members.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/structpeoSynchronousMultiStart_1_1AbstractDataType.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/structpeoSynchronousMultiStart_1_1AbstractDataType.png create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/structpeoSynchronousMultiStart_1_1AggregationAlgorithm-members.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/structpeoSynchronousMultiStart_1_1AggregationAlgorithm.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/structpeoSynchronousMultiStart_1_1AggregationAlgorithm.png create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/structpeoSynchronousMultiStart_1_1Algorithm-members.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/structpeoSynchronousMultiStart_1_1Algorithm.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/structpeoSynchronousMultiStart_1_1Algorithm.png create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/structpeoSynchronousMultiStart_1_1DataType-members.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/structpeoSynchronousMultiStart_1_1DataType.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/structpeoSynchronousMultiStart_1_1DataType.png create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/structpeoSynchronousMultiStart_1_1NoAggregationFunction-members.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/structpeoSynchronousMultiStart_1_1NoAggregationFunction.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/structpeoSynchronousMultiStart_1_1NoAggregationFunction.png create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/t-peo_8cpp-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/tab_b.gif create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/tab_l.gif create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/tab_r.gif create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/tabs.css create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/tags_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/thread_8cpp-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/thread_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/topology_8cpp-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/topology_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/tree.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/tutorial_2examples_2tsp_2node_8cpp-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/tutorial_2examples_2tsp_2node_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/tutorial_2examples_2tsp_2param_8cpp-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/tutorial_2examples_2tsp_2param_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/two__opt_8cpp-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/two__opt_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/two__opt__incr__eval_8cpp-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/two__opt__incr__eval_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/two__opt__init_8cpp-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/two__opt__init_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/two__opt__next_8cpp-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/two__opt__next_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/two__opt__rand_8cpp-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/two__opt__rand_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/worker_8cpp-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/worker_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/xml__parser_8cpp-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/xml__parser_8h-source.html create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/FreeSans.ttf create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/Makefile create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/annotated.tex create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classCommunicable.eps create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classCommunicable.pdf create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classCommunicable.tex create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classCommunicator.eps create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classCommunicator.pdf create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classCommunicator.tex create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classCooperative.eps create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classCooperative.pdf create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classCooperative.tex create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classDisplayBestRoute.eps create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classDisplayBestRoute.pdf create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classDisplayBestRoute.tex create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classMergeRouteEval.eps create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classMergeRouteEval.pdf create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classMergeRouteEval.tex create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classReactiveThread.eps create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classReactiveThread.pdf create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classReactiveThread.tex create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classRingTopology.eps create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classRingTopology.pdf create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classRingTopology.tex create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classRunner.eps create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classRunner.pdf create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classRunner.tex create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classService.eps create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classService.pdf create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classService.tex create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classThread.eps create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classThread.pdf create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classThread.tex create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classTopology.eps create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classTopology.pdf create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classTopology.tex create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classWorker.eps create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classWorker.pdf create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classWorker.tex create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoAggEvalFunc.eps create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoAggEvalFunc.pdf create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoAggEvalFunc.tex create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoAsyncIslandMig.eps create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoAsyncIslandMig.pdf create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoAsyncIslandMig.tex create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoEA.eps create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoEA.pdf create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoEA.tex create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoNoAggEvalFunc.eps create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoNoAggEvalFunc.pdf create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoNoAggEvalFunc.tex create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoParaPopEval.eps create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoParaPopEval.pdf create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoParaPopEval.tex create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoParaSGATransform.eps create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoParaSGATransform.pdf create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoParaSGATransform.tex create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoParallelAlgorithmWrapper.eps create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoParallelAlgorithmWrapper.pdf create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoParallelAlgorithmWrapper.tex create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoPopEval.eps create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoPopEval.pdf create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoPopEval.tex create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoSeqPopEval.eps create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoSeqPopEval.pdf create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoSeqPopEval.tex create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoSeqTransform.eps create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoSeqTransform.pdf create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoSeqTransform.tex create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoSyncIslandMig.eps create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoSyncIslandMig.pdf create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoSyncIslandMig.tex create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoSyncMultiStart.eps create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoSyncMultiStart.pdf create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoSyncMultiStart.tex create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoSynchronousMultiStart.eps create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoSynchronousMultiStart.pdf create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoSynchronousMultiStart.tex create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoTransform.eps create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoTransform.pdf create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoTransform.tex create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/doxygen.sty create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/hierarchy.tex create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/main.tex create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/namespacepeo.tex create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/namespaces.tex create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/refman.tex create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/structRandomExplorationAlgorithm.tex create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/structSEND__REQUEST.tex create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/structpeoParallelAlgorithmWrapper_1_1AbstractAlgorithm.eps create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/structpeoParallelAlgorithmWrapper_1_1AbstractAlgorithm.pdf create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/structpeoParallelAlgorithmWrapper_1_1AbstractAlgorithm.tex create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/structpeoParallelAlgorithmWrapper_1_1Algorithm.eps create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/structpeoParallelAlgorithmWrapper_1_1Algorithm.pdf create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/structpeoParallelAlgorithmWrapper_1_1Algorithm.tex create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/structpeoParallelAlgorithmWrapper_1_1Algorithm_3_01AlgorithmType_00_01void_01_4.eps create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/structpeoParallelAlgorithmWrapper_1_1Algorithm_3_01AlgorithmType_00_01void_01_4.pdf create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/structpeoParallelAlgorithmWrapper_1_1Algorithm_3_01AlgorithmType_00_01void_01_4.tex create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/structpeoSynchronousMultiStart_1_1AbstractAggregationAlgorithm.eps create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/structpeoSynchronousMultiStart_1_1AbstractAggregationAlgorithm.pdf create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/structpeoSynchronousMultiStart_1_1AbstractAggregationAlgorithm.tex create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/structpeoSynchronousMultiStart_1_1AbstractAlgorithm.eps create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/structpeoSynchronousMultiStart_1_1AbstractAlgorithm.pdf create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/structpeoSynchronousMultiStart_1_1AbstractAlgorithm.tex create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/structpeoSynchronousMultiStart_1_1AbstractDataType.eps create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/structpeoSynchronousMultiStart_1_1AbstractDataType.pdf create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/structpeoSynchronousMultiStart_1_1AbstractDataType.tex create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/structpeoSynchronousMultiStart_1_1AggregationAlgorithm.eps create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/structpeoSynchronousMultiStart_1_1AggregationAlgorithm.pdf create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/structpeoSynchronousMultiStart_1_1AggregationAlgorithm.tex create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/structpeoSynchronousMultiStart_1_1Algorithm.eps create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/structpeoSynchronousMultiStart_1_1Algorithm.pdf create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/structpeoSynchronousMultiStart_1_1Algorithm.tex create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/structpeoSynchronousMultiStart_1_1DataType.eps create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/structpeoSynchronousMultiStart_1_1DataType.pdf create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/structpeoSynchronousMultiStart_1_1DataType.tex create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/structpeoSynchronousMultiStart_1_1NoAggregationFunction.eps create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/structpeoSynchronousMultiStart_1_1NoAggregationFunction.pdf create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/structpeoSynchronousMultiStart_1_1NoAggregationFunction.tex create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/Communicable.3 create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/Communicator.3 create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/Cooperative.3 create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/DisplayBestRoute.3 create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/MergeRouteEval.3 create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/RandomExplorationAlgorithm.3 create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/ReactiveThread.3 create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/RingTopology.3 create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/Runner.3 create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/SEND_REQUEST.3 create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/Service.3 create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/Thread.3 create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/Topology.3 create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/Worker.3 create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/peo.3 create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/peoAggEvalFunc.3 create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/peoAsyncIslandMig.3 create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/peoEA.3 create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/peoNoAggEvalFunc.3 create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/peoParaPopEval.3 create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/peoParaSGATransform.3 create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/peoParallelAlgorithmWrapper.3 create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/peoParallelAlgorithmWrapper_AbstractAlgorithm.3 create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/peoParallelAlgorithmWrapper_Algorithm.3 create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/peoParallelAlgorithmWrapper_Algorithm_ AlgorithmType, void _.3 create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/peoPopEval.3 create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/peoSeqPopEval.3 create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/peoSeqTransform.3 create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/peoSyncIslandMig.3 create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/peoSyncMultiStart.3 create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/peoSynchronousMultiStart.3 create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/peoSynchronousMultiStart_AbstractAggregationAlgorithm.3 create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/peoSynchronousMultiStart_AbstractAlgorithm.3 create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/peoSynchronousMultiStart_AbstractDataType.3 create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/peoSynchronousMultiStart_AggregationAlgorithm.3 create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/peoSynchronousMultiStart_Algorithm.3 create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/peoSynchronousMultiStart_DataType.3 create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/peoSynchronousMultiStart_NoAggregationFunction.3 create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/peoTransform.3 create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/doc/peo.doxyfile.cmake create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/peo-conf.cmake create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/CMakeLists.txt create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/core/CMakeLists.txt create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/core/communicable.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/core/communicable.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/core/cooperative.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/core/eoPop_mesg.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/core/eoVector_mesg.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/core/messaging.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/core/peo_debug.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/core/peo_debug.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/core/peo_fin.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/core/peo_fin.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/core/peo_init.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/core/peo_init.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/core/peo_param.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/core/peo_param.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/core/peo_run.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/core/peo_run.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/core/reac_thread.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/core/reac_thread.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/core/ring_topo.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/core/ring_topo.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/core/rmc.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/core/runner.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/core/runner.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/core/service.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/core/service.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/core/thread.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/core/thread.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/core/topology.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/core/topology.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/peo create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/peo.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/peoAggEvalFunc.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/peoAsyncIslandMig.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/peoEvalFunc.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/peoGlobalBestVelocity.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/peoMoeoPopEval.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/peoMultiStart.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/peoNoAggEvalFunc.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/peoPSOSelect.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/peoPopEval.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/peoSyncIslandMig.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/peoTransform.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/peoWorstPositionReplacement.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/peoWrapper.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/CMakeLists.txt create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/CMakeLists.txt create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/comm.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/comm.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/cooperative.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/mess.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/mess.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/node.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/node.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/param.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/param.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/recv.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/recv.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/rmc.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/runner.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/scheduler.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/scheduler.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/schema.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/schema.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/send.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/send.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/service.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/synchron.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/synchron.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/tags.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/worker.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/worker.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/xml_parser.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/xml_parser.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/test/CMakeLists.txt create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/test/lesson.param create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/test/schema.xml create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/test/t-peo.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/test/t-peoInsularPSO.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/test/t-peoPSO.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/test/t-peoPSOPara.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/test/t-peoPSOParaIsland.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/CMakeLists.txt create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Introduction/Technical introduction.pdf create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson1/CMakeLists.txt create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson1/Lesson1.pdf create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson1/mainEA.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson1/mainPSO.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson1/paradiseo-peo-lsn.doxyfile create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson1/param create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson1/schema.xml create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson2/CMakeLists.txt create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson2/Lesson2.pdf create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson2/mainEA.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson2/paradiseo-peo-lsn.doxyfile create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson2/param create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson2/schema.xml create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson3/CMakeLists.txt create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson3/Lesson3.pdf create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson3/mainEA.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson3/mainPSO.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson3/paradiseo-peo-lsn.doxyfile create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson3/param create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson3/schema.xml create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson4/CMakeLists.txt create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson4/Lesson4.pdf create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson4/mainEA.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson4/mainPSO.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson4/paradiseo-peo-lsn.doxyfile create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson4/param create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson4/schema.xml create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson5/CMakeLists.txt create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson5/Lesson5.pdf create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson5/example.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson5/paradiseo-peo-lsn.doxyfile create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson5/param create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson5/schema.xml create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson6/CMakeLists.txt create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson6/Lesson6.pdf create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson6/main.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson6/paradiseo-peo-lsn.doxyfile create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson6/param create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson6/schema.xml create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson7/CMakeLists.txt create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson7/FlowShopEA.param create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson7/main.cpp create mode 100755 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson7/make_checkpoint_moeo.h create mode 100755 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson7/make_continue_moeo.h create mode 100755 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson7/make_ea_moeo.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson7/make_para_eval.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson7/param create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson7/schema.xml create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Wrapper/CMakeLists.txt create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Wrapper/main1.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Wrapper/main2.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Wrapper/main3.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Wrapper/main4.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Wrapper/main5.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Wrapper/main6.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Wrapper/main7.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Wrapper/param create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Wrapper/schema.xml create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/CMakeLists.txt create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/CMakeLists.txt create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/benchs/eil101.opt.tour create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/benchs/eil101.tsp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/benchs/eil101.tsp.hc create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/city_swap.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/city_swap.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/data.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/data.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/display.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/display.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/display_best_route.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/display_best_route.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/edge_xover.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/edge_xover.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/merge_route_eval.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/merge_route_eval.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/mix.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/node.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/node.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/opt_route.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/opt_route.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/order_xover.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/order_xover.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/paradiseo-peo-lsn-shared.doxyfile create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/param.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/param.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/part_route_eval.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/part_route_eval.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/partial_mapped_xover.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/partial_mapped_xover.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/route.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/route.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/route_eval.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/route_eval.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/route_init.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/route_init.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/two_opt.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/two_opt.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/two_opt_incr_eval.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/two_opt_incr_eval.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/two_opt_init.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/two_opt_init.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/two_opt_next.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/two_opt_next.h create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/two_opt_rand.cpp create mode 100644 tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/two_opt_rand.h diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/AUTHORS b/tags/paradiseo-peo-16012008-before-mig-modifs/AUTHORS new file mode 100644 index 000000000..91f92d5ca --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/AUTHORS @@ -0,0 +1,3 @@ +Sébastien Cahon +Alexandru-Adrian Tantar +Clive Canape diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/CMakeLists.txt b/tags/paradiseo-peo-16012008-before-mig-modifs/CMakeLists.txt new file mode 100644 index 000000000..60ee6cebc --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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" "MOEO_SRC_DIR" "MOEO_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-16012008-before-mig-modifs/README b/tags/paradiseo-peo-16012008-before-mig-modifs/README new file mode 100755 index 000000000..d60eb05c3 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/README @@ -0,0 +1,82 @@ + 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 + | + +-- examples TSP + | + +-- Introduction Technical introduction + | + +-- Lesson1 Parallel evaluation for EA and PSO + | + +-- Lesson2 Parallel transformation (crossover + mutation) for EA + | + +-- Lesson3 Insular model for PSO and EA + | + +-- Lesson4 PSO and EA completely parallel + | + +-- Lesson5 Hybridization + | + +-- Lesson6 Multi-start : several local searches + +=================================================================== + NOTES +=================================================================== + +Mailing list : paradiseo-help@lists.gforge.inria.fr diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/doc/CMakeLists.txt b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/CMakeLists.txt new file mode 100644 index 000000000..5934e8857 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/Lesson1_2main_8cpp-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/Lesson1_2main_8cpp-source.html new file mode 100644 index 000000000..9342a2ab5 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/Lesson2_2main_8cpp-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/Lesson2_2main_8cpp-source.html new file mode 100644 index 000000000..1c9f16bfe --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/Lesson3_2main_8cpp-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/Lesson3_2main_8cpp-source.html new file mode 100644 index 000000000..95fcf0fac --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/LessonParallelAlgorithm_2main_8cpp-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/LessonParallelAlgorithm_2main_8cpp-source.html new file mode 100644 index 000000000..147881a07 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/README-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/README-source.html new file mode 100644 index 000000000..4aa422480 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/annotated.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/annotated.html new file mode 100644 index 000000000..8bbde05d0 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/city__swap_8cpp-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/city__swap_8cpp-source.html new file mode 100644 index 000000000..cae89d871 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/city__swap_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/city__swap_8h-source.html new file mode 100644 index 000000000..4b77e3b33 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classCommunicable-members.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classCommunicable-members.html new file mode 100644 index 000000000..09c8fb595 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classCommunicable.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classCommunicable.html new file mode 100644 index 000000000..a9090f07e --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classCommunicable.png b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classCommunicator-members.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classCommunicator-members.html new file mode 100644 index 000000000..5fe11b6d9 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classCommunicator.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classCommunicator.html new file mode 100644 index 000000000..466885c2b --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classCommunicator.png b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classCooperative.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classCooperative.html new file mode 100644 index 000000000..12e67471f --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classCooperative.png b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classDisplayBestRoute.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classDisplayBestRoute.html new file mode 100644 index 000000000..9915fa19a --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classDisplayBestRoute.png b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classMergeRouteEval-members.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classMergeRouteEval-members.html new file mode 100644 index 000000000..c85d970f1 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classMergeRouteEval.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classMergeRouteEval.html new file mode 100644 index 000000000..212fc625d --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classMergeRouteEval.png b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classReactiveThread-members.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classReactiveThread-members.html new file mode 100644 index 000000000..efc2b058b --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classReactiveThread.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classReactiveThread.html new file mode 100644 index 000000000..9a1793083 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classReactiveThread.png b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classRingTopology-members.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classRingTopology-members.html new file mode 100644 index 000000000..ce31afe98 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classRingTopology.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classRingTopology.html new file mode 100644 index 000000000..ca95bba4c --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classRingTopology.png b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classRunner.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classRunner.html new file mode 100644 index 000000000..03025fd30 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classRunner.png b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classService.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classService.html new file mode 100644 index 000000000..a996a9c8e --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classService.png b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classThread.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classThread.html new file mode 100644 index 000000000..df5463856 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classThread.png b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classTopology.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classTopology.html new file mode 100644 index 000000000..3140e314d --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classTopology.png b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classWorker-members.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classWorker-members.html new file mode 100644 index 000000000..cdd934364 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classWorker.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classWorker.html new file mode 100644 index 000000000..6fa5e8e62 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classWorker.png b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classes.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classes.html new file mode 100644 index 000000000..e1552e671 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classpeoAggEvalFunc-members.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoAggEvalFunc-members.html new file mode 100644 index 000000000..9da1e9cef --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classpeoAggEvalFunc.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoAggEvalFunc.html new file mode 100644 index 000000000..bfe4d5547 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classpeoAggEvalFunc.png b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classpeoAsyncIslandMig-members.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoAsyncIslandMig-members.html new file mode 100644 index 000000000..f48ac21dc --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classpeoAsyncIslandMig.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoAsyncIslandMig.html new file mode 100644 index 000000000..be4ff7a22 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classpeoAsyncIslandMig.png b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classpeoEA-members.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoEA-members.html new file mode 100644 index 000000000..c12e05db0 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classpeoEA.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoEA.html new file mode 100644 index 000000000..cf847b231 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classpeoEA.png b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classpeoNoAggEvalFunc-members.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoNoAggEvalFunc-members.html new file mode 100644 index 000000000..02f4c5c2b --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classpeoNoAggEvalFunc.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoNoAggEvalFunc.html new file mode 100644 index 000000000..e7abd2ce1 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classpeoNoAggEvalFunc.png b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classpeoParaPopEval-members.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoParaPopEval-members.html new file mode 100644 index 000000000..0e1cc0c86 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classpeoParaPopEval.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoParaPopEval.html new file mode 100644 index 000000000..96e841252 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classpeoParaPopEval.png b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classpeoParaSGATransform.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoParaSGATransform.html new file mode 100644 index 000000000..d2691e70b --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classpeoParaSGATransform.png b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classpeoParallelAlgorithmWrapper.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoParallelAlgorithmWrapper.html new file mode 100644 index 000000000..2cacf76fb --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classpeoParallelAlgorithmWrapper.png b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classpeoPopEval-members.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoPopEval-members.html new file mode 100644 index 000000000..d233f1ae2 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classpeoPopEval.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoPopEval.html new file mode 100644 index 000000000..f7509c195 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classpeoPopEval.png b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classpeoSeqPopEval-members.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoSeqPopEval-members.html new file mode 100644 index 000000000..c16b20bd7 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classpeoSeqPopEval.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoSeqPopEval.html new file mode 100644 index 000000000..ad1a5ffc0 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classpeoSeqPopEval.png b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classpeoSeqTransform.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoSeqTransform.html new file mode 100644 index 000000000..afab019be --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classpeoSeqTransform.png b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classpeoSyncIslandMig-members.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoSyncIslandMig-members.html new file mode 100644 index 000000000..f2cb522e3 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classpeoSyncIslandMig.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoSyncIslandMig.html new file mode 100644 index 000000000..edd7ebfca --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classpeoSyncIslandMig.png b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classpeoSyncMultiStart-members.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoSyncMultiStart-members.html new file mode 100644 index 000000000..ba4f886c9 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classpeoSyncMultiStart.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoSyncMultiStart.html new file mode 100644 index 000000000..d8fcdc3b2 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classpeoSyncMultiStart.png b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classpeoSynchronousMultiStart.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoSynchronousMultiStart.html new file mode 100644 index 000000000..010e7e956 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classpeoSynchronousMultiStart.png b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classpeoTransform-members.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoTransform-members.html new file mode 100644 index 000000000..a1a2a4231 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classpeoTransform.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/classpeoTransform.html new file mode 100644 index 000000000..f5abe2875 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/classpeoTransform.png b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/comm_8cpp-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/comm_8cpp-source.html new file mode 100644 index 000000000..d9118ed38 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/comm_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/comm_8h-source.html new file mode 100644 index 000000000..4829f60ac --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/communicable_8cpp-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/communicable_8cpp-source.html new file mode 100644 index 000000000..3aa2cf96a --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/communicable_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/communicable_8h-source.html new file mode 100644 index 000000000..f625215d2 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/coop_8cpp-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/coop_8cpp-source.html new file mode 100644 index 000000000..0c17572a4 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/cooperative_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/cooperative_8h-source.html new file mode 100644 index 000000000..aedb3ed27 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/core_2runner_8cpp-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/core_2runner_8cpp-source.html new file mode 100644 index 000000000..5cc7127ca --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/core_2service_8cpp-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/core_2service_8cpp-source.html new file mode 100644 index 000000000..f9385b2e8 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/data_8cpp-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/data_8cpp-source.html new file mode 100644 index 000000000..47c771d78 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/data_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/data_8h-source.html new file mode 100644 index 000000000..88fa11847 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/display_8cpp-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/display_8cpp-source.html new file mode 100644 index 000000000..782dc66f4 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/display_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/display_8h-source.html new file mode 100644 index 000000000..ff79c926d --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/display__best__route_8cpp-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/display__best__route_8cpp-source.html new file mode 100644 index 000000000..3e1c1f630 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/display__best__route_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/display__best__route_8h-source.html new file mode 100644 index 000000000..41d920518 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/doclsn_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/doclsn_8h-source.html new file mode 100644 index 000000000..739191d90 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/doxygen.css b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/doxygen.css new file mode 100644 index 000000000..5d583694e --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/doxygen.png b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/edge__xover_8cpp-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/edge__xover_8cpp-source.html new file mode 100644 index 000000000..2741022d3 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/edge__xover_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/edge__xover_8h-source.html new file mode 100644 index 000000000..97da77c21 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/eoPop__comm_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/eoPop__comm_8h-source.html new file mode 100644 index 000000000..967a4a442 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/eoVector__comm_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/eoVector__comm_8h-source.html new file mode 100644 index 000000000..d3bc66666 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/exampleA_8cpp-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/exampleA_8cpp-source.html new file mode 100644 index 000000000..7e60ddf3b --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/exampleB_8cpp-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/exampleB_8cpp-source.html new file mode 100644 index 000000000..8c3f16b32 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/exampleC_8cpp-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/exampleC_8cpp-source.html new file mode 100644 index 000000000..89e01e5bb --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/exampleD_8cpp-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/exampleD_8cpp-source.html new file mode 100644 index 000000000..f124d4a0b --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/exampleE_8cpp-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/exampleE_8cpp-source.html new file mode 100644 index 000000000..d5604c8aa --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/files.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/files.html new file mode 100644 index 000000000..dcdc3a4dd --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/ftv2blank.png b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/ftv2doc.png b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/ftv2folderclosed.png b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/ftv2folderopen.png b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/ftv2lastnode.png b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/ftv2mlastnode.png b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/ftv2mnode.png b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/ftv2plastnode.png b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/ftv2pnode.png b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/ftv2vertline.png b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/functions.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/functions.html new file mode 100644 index 000000000..2173748ff --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/functions_func.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/functions_func.html new file mode 100644 index 000000000..988196720 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/functions_vars.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/functions_vars.html new file mode 100644 index 000000000..a99036961 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/hierarchy.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/hierarchy.html new file mode 100644 index 000000000..dc125554e --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/index.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/index.html new file mode 100644 index 000000000..80a524ff7 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/index.html @@ -0,0 +1,8 @@ + + +ParadisEO-PEOMovingObjects + + + + + diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/installdox b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/installdox new file mode 100755 index 000000000..294677f26 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/main.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/main.html new file mode 100644 index 000000000..a52382cd1 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/merge__route__eval_8cpp-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/merge__route__eval_8cpp-source.html new file mode 100644 index 000000000..579cec80a --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/merge__route__eval_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/merge__route__eval_8h-source.html new file mode 100644 index 000000000..cdbb4a651 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/mess_8cpp-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/mess_8cpp-source.html new file mode 100644 index 000000000..c7f5446d0 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/mess_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/mess_8h-source.html new file mode 100644 index 000000000..533c566e8 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/messaging_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/messaging_8h-source.html new file mode 100644 index 000000000..2aef19eda --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/mix_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/mix_8h-source.html new file mode 100644 index 000000000..113e73171 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/namespacemembers.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/namespacemembers.html new file mode 100644 index 000000000..8c60760fa --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/namespacemembers_func.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/namespacemembers_func.html new file mode 100644 index 000000000..66dbca22c --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/namespacemembers_vars.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/namespacemembers_vars.html new file mode 100644 index 000000000..d4063dec2 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/namespacepeo.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/namespacepeo.html new file mode 100644 index 000000000..a694168dc --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/namespaces.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/namespaces.html new file mode 100644 index 000000000..29be8b450 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/node_8cpp-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/node_8cpp-source.html new file mode 100644 index 000000000..e67d771dc --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/node_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/node_8h-source.html new file mode 100644 index 000000000..457f6e4aa --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/opt__route_8cpp-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/opt__route_8cpp-source.html new file mode 100644 index 000000000..33a72622f --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/opt__route_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/opt__route_8h-source.html new file mode 100644 index 000000000..7fbb643aa --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/order__xover_8cpp-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/order__xover_8cpp-source.html new file mode 100644 index 000000000..b73368e34 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/order__xover_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/order__xover_8h-source.html new file mode 100644 index 000000000..93b2d10d1 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/paradiseo_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/paradiseo_8h-source.html new file mode 100644 index 000000000..fb84c6c22 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/param_8cpp-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/param_8cpp-source.html new file mode 100644 index 000000000..819d3aaab --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/param_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/param_8h-source.html new file mode 100644 index 000000000..39df99494 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/part__route__eval_8cpp-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/part__route__eval_8cpp-source.html new file mode 100644 index 000000000..34a6d4e92 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/part__route__eval_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/part__route__eval_8h-source.html new file mode 100644 index 000000000..43fc31513 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/partial__mapped__xover_8cpp-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/partial__mapped__xover_8cpp-source.html new file mode 100644 index 000000000..75f1c08a9 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/partial__mapped__xover_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/partial__mapped__xover_8h-source.html new file mode 100644 index 000000000..5c5b555d6 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/peoAggEvalFunc_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/peoAggEvalFunc_8h-source.html new file mode 100644 index 000000000..d3c30f0b8 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/peoAsyncIslandMig_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/peoAsyncIslandMig_8h-source.html new file mode 100644 index 000000000..221bda745 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/peoEA_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/peoEA_8h-source.html new file mode 100644 index 000000000..3913a0cc9 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/peoNoAggEvalFunc_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/peoNoAggEvalFunc_8h-source.html new file mode 100644 index 000000000..a549ffcc8 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/peoParaPopEval_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/peoParaPopEval_8h-source.html new file mode 100644 index 000000000..48ce8e736 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/peoParaSGATransform_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/peoParaSGATransform_8h-source.html new file mode 100644 index 000000000..22c18d626 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/peoParallelAlgorithmWrapper_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/peoParallelAlgorithmWrapper_8h-source.html new file mode 100644 index 000000000..4e630d7f9 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/peoPopEval_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/peoPopEval_8h-source.html new file mode 100644 index 000000000..5a841add6 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/peoSeqPopEval_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/peoSeqPopEval_8h-source.html new file mode 100644 index 000000000..02a67d54a --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/peoSeqTransform_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/peoSeqTransform_8h-source.html new file mode 100644 index 000000000..ba1ffcf5d --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/peoSyncIslandMig_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/peoSyncIslandMig_8h-source.html new file mode 100644 index 000000000..fe6024a01 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/peoSyncMultiStart_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/peoSyncMultiStart_8h-source.html new file mode 100644 index 000000000..3193f103c --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/peoSynchronousMultiStart_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/peoSynchronousMultiStart_8h-source.html new file mode 100644 index 000000000..683518196 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/peoTransform_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/peoTransform_8h-source.html new file mode 100644 index 000000000..e658e6ce8 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/peo_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/peo_8h-source.html new file mode 100644 index 000000000..698147329 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/peo__debug_8cpp-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/peo__debug_8cpp-source.html new file mode 100644 index 000000000..80f5471a8 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/peo__debug_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/peo__debug_8h-source.html new file mode 100644 index 000000000..aa8049514 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/peo__fin_8cpp-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/peo__fin_8cpp-source.html new file mode 100644 index 000000000..59534a903 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/peo__fin_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/peo__fin_8h-source.html new file mode 100644 index 000000000..3b51acf47 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/peo__init_8cpp-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/peo__init_8cpp-source.html new file mode 100644 index 000000000..aa826f960 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/peo__init_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/peo__init_8h-source.html new file mode 100644 index 000000000..23a8d401f --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/peo__param_8cpp-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/peo__param_8cpp-source.html new file mode 100644 index 000000000..e96644b1a --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/peo__param_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/peo__param_8h-source.html new file mode 100644 index 000000000..c8adfbebb --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/peo__run_8cpp-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/peo__run_8cpp-source.html new file mode 100644 index 000000000..aeac16030 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/peo__run_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/peo__run_8h-source.html new file mode 100644 index 000000000..d694de425 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/reac__thread_8cpp-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/reac__thread_8cpp-source.html new file mode 100644 index 000000000..8f4efaaab --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/reac__thread_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/reac__thread_8h-source.html new file mode 100644 index 000000000..d7b48b719 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/recv_8cpp-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/recv_8cpp-source.html new file mode 100644 index 000000000..4062ac302 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/recv_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/recv_8h-source.html new file mode 100644 index 000000000..fa8af7233 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/ring__topo_8cpp-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/ring__topo_8cpp-source.html new file mode 100644 index 000000000..f6b67ce85 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/ring__topo_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/ring__topo_8h-source.html new file mode 100644 index 000000000..2d19ad101 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/rmc_2mpi_2runner_8cpp-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/rmc_2mpi_2runner_8cpp-source.html new file mode 100644 index 000000000..cf9389486 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/rmc_2mpi_2service_8cpp-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/rmc_2mpi_2service_8cpp-source.html new file mode 100644 index 000000000..d24a7dccb --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/rmc_8cpp-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/rmc_8cpp-source.html new file mode 100644 index 000000000..d12de1681 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/rmc_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/rmc_8h-source.html new file mode 100644 index 000000000..6e2d24667 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/route_8cpp-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/route_8cpp-source.html new file mode 100644 index 000000000..9937479a9 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/route_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/route_8h-source.html new file mode 100644 index 000000000..b5139e667 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/route__eval_8cpp-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/route__eval_8cpp-source.html new file mode 100644 index 000000000..26cded3dd --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/route__eval_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/route__eval_8h-source.html new file mode 100644 index 000000000..0fcfb21fb --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/route__init_8cpp-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/route__init_8cpp-source.html new file mode 100644 index 000000000..824282875 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/route__init_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/route__init_8h-source.html new file mode 100644 index 000000000..451e81a9a --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/runner_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/runner_8h-source.html new file mode 100644 index 000000000..3975d3624 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/scheduler_8cpp-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/scheduler_8cpp-source.html new file mode 100644 index 000000000..20dc2624d --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/scheduler_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/scheduler_8h-source.html new file mode 100644 index 000000000..b012f4aa7 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/schema_8cpp-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/schema_8cpp-source.html new file mode 100644 index 000000000..27e89390c --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/schema_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/schema_8h-source.html new file mode 100644 index 000000000..b5044a17f --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/search.idx b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/search.idx new file mode 100644 index 0000000000000000000000000000000000000000..50b796a59b1583f4fd42069669069542d932ed7f GIT binary patch literal 422353 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 literal 0 HcmV?d00001 diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/search.php b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/search.php new file mode 100644 index 000000000..861442bae --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/send_8cpp-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/send_8cpp-source.html new file mode 100644 index 000000000..80d5342f7 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/send_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/send_8h-source.html new file mode 100644 index 000000000..53b935c60 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/service_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/service_8h-source.html new file mode 100644 index 000000000..a5a83054b --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/src_2rmc_2mpi_2node_8cpp-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/src_2rmc_2mpi_2node_8cpp-source.html new file mode 100644 index 000000000..d52cbc6c3 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/src_2rmc_2mpi_2node_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/src_2rmc_2mpi_2node_8h-source.html new file mode 100644 index 000000000..c107521e7 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/src_2rmc_2mpi_2param_8cpp-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/src_2rmc_2mpi_2param_8cpp-source.html new file mode 100644 index 000000000..4799a4a15 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/src_2rmc_2mpi_2param_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/src_2rmc_2mpi_2param_8h-source.html new file mode 100644 index 000000000..5de9ceb5d --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/structNode-members.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/structNode-members.html new file mode 100644 index 000000000..607b10646 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/structNode.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/structNode.html new file mode 100644 index 000000000..feca8d02e --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/structRandomExplorationAlgorithm-members.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/structRandomExplorationAlgorithm-members.html new file mode 100644 index 000000000..f45769568 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/structRandomExplorationAlgorithm.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/structRandomExplorationAlgorithm.html new file mode 100644 index 000000000..400d3148d --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/structSEND__REQUEST-members.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/structSEND__REQUEST-members.html new file mode 100644 index 000000000..e3d9f7ca9 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/structSEND__REQUEST.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/structSEND__REQUEST.html new file mode 100644 index 000000000..307bc5ff4 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/structpeoParallelAlgorithmWrapper_1_1AbstractAlgorithm-members.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/structpeoParallelAlgorithmWrapper_1_1AbstractAlgorithm-members.html new file mode 100644 index 000000000..875eaa683 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/structpeoParallelAlgorithmWrapper_1_1AbstractAlgorithm.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/structpeoParallelAlgorithmWrapper_1_1AbstractAlgorithm.html new file mode 100644 index 000000000..cc8b12e0d --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/structpeoParallelAlgorithmWrapper_1_1AbstractAlgorithm.png b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/structpeoParallelAlgorithmWrapper_1_1Algorithm.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/structpeoParallelAlgorithmWrapper_1_1Algorithm.html new file mode 100644 index 000000000..81a64ce4f --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/structpeoParallelAlgorithmWrapper_1_1Algorithm.png b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/structpeoParallelAlgorithmWrapper_1_1Algorithm_3_01AlgorithmType_00_01void_01_4.html b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/structpeoParallelAlgorithmWrapper_1_1Algorithm_3_01AlgorithmType_00_01void_01_4.png b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/structpeoSynchronousMultiStart_1_1AbstractAggregationAlgorithm.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/structpeoSynchronousMultiStart_1_1AbstractAggregationAlgorithm.html new file mode 100644 index 000000000..4d647d542 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/structpeoSynchronousMultiStart_1_1AbstractAggregationAlgorithm.png b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/structpeoSynchronousMultiStart_1_1AbstractAlgorithm.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/structpeoSynchronousMultiStart_1_1AbstractAlgorithm.html new file mode 100644 index 000000000..d12786ed0 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/structpeoSynchronousMultiStart_1_1AbstractAlgorithm.png b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/structpeoSynchronousMultiStart_1_1AbstractDataType.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/structpeoSynchronousMultiStart_1_1AbstractDataType.html new file mode 100644 index 000000000..0b9ce2e85 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/structpeoSynchronousMultiStart_1_1AbstractDataType.png b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/structpeoSynchronousMultiStart_1_1AggregationAlgorithm.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/structpeoSynchronousMultiStart_1_1AggregationAlgorithm.html new file mode 100644 index 000000000..8b82eb1cf --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/structpeoSynchronousMultiStart_1_1AggregationAlgorithm.png b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/structpeoSynchronousMultiStart_1_1Algorithm.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/structpeoSynchronousMultiStart_1_1Algorithm.html new file mode 100644 index 000000000..74d0eeb9f --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/structpeoSynchronousMultiStart_1_1Algorithm.png b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/structpeoSynchronousMultiStart_1_1DataType-members.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/structpeoSynchronousMultiStart_1_1DataType-members.html new file mode 100644 index 000000000..ca702c581 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/structpeoSynchronousMultiStart_1_1DataType.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/structpeoSynchronousMultiStart_1_1DataType.html new file mode 100644 index 000000000..7887d2433 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/structpeoSynchronousMultiStart_1_1DataType.png b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/structpeoSynchronousMultiStart_1_1NoAggregationFunction-members.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/structpeoSynchronousMultiStart_1_1NoAggregationFunction-members.html new file mode 100644 index 000000000..63011af07 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/structpeoSynchronousMultiStart_1_1NoAggregationFunction.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/structpeoSynchronousMultiStart_1_1NoAggregationFunction.html new file mode 100644 index 000000000..45c1478e8 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/structpeoSynchronousMultiStart_1_1NoAggregationFunction.png b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/tab_b.gif b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/tab_l.gif b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/tab_r.gif b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/tabs.css b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/tabs.css new file mode 100644 index 000000000..a61552a67 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/tags_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/tags_8h-source.html new file mode 100644 index 000000000..5527f749f --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/thread_8cpp-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/thread_8cpp-source.html new file mode 100644 index 000000000..766870290 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/thread_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/thread_8h-source.html new file mode 100644 index 000000000..0ed667519 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/topology_8cpp-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/topology_8cpp-source.html new file mode 100644 index 000000000..d7bb2dd7c --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/topology_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/topology_8h-source.html new file mode 100644 index 000000000..6bc3277cd --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/tree.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/tree.html new file mode 100644 index 000000000..560832a67 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/tutorial_2examples_2tsp_2node_8cpp-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/tutorial_2examples_2tsp_2node_8cpp-source.html new file mode 100644 index 000000000..9d6d9f2cb --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/tutorial_2examples_2tsp_2node_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/tutorial_2examples_2tsp_2node_8h-source.html new file mode 100644 index 000000000..c8d476ad7 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/tutorial_2examples_2tsp_2param_8cpp-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/tutorial_2examples_2tsp_2param_8cpp-source.html new file mode 100644 index 000000000..2200d9b71 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/tutorial_2examples_2tsp_2param_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/tutorial_2examples_2tsp_2param_8h-source.html new file mode 100644 index 000000000..1d8690989 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/two__opt_8cpp-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/two__opt_8cpp-source.html new file mode 100644 index 000000000..ddf4275dc --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/two__opt_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/two__opt_8h-source.html new file mode 100644 index 000000000..629e5011a --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/two__opt__incr__eval_8cpp-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/two__opt__incr__eval_8cpp-source.html new file mode 100644 index 000000000..2a3fceadf --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/two__opt__incr__eval_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/two__opt__incr__eval_8h-source.html new file mode 100644 index 000000000..7a25390a2 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/two__opt__init_8cpp-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/two__opt__init_8cpp-source.html new file mode 100644 index 000000000..4453764a6 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/two__opt__init_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/two__opt__init_8h-source.html new file mode 100644 index 000000000..0ce10347e --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/two__opt__next_8cpp-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/two__opt__next_8cpp-source.html new file mode 100644 index 000000000..d5b5f6eed --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/two__opt__next_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/two__opt__next_8h-source.html new file mode 100644 index 000000000..e0b7e9092 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/two__opt__rand_8cpp-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/two__opt__rand_8cpp-source.html new file mode 100644 index 000000000..5ffc4e7c4 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/two__opt__rand_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/two__opt__rand_8h-source.html new file mode 100644 index 000000000..a2c308c36 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/worker_8cpp-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/worker_8cpp-source.html new file mode 100644 index 000000000..869d2133f --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/worker_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/worker_8h-source.html new file mode 100644 index 000000000..7b0ee17e7 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/xml__parser_8cpp-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/xml__parser_8cpp-source.html new file mode 100644 index 000000000..d8f7d6632 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/html/xml__parser_8h-source.html b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/html/xml__parser_8h-source.html new file mode 100644 index 000000000..1d76ecd6d --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/FreeSans.ttf b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/Makefile b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/Makefile new file mode 100644 index 000000000..a67f1b7f6 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/annotated.tex b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/annotated.tex new file mode 100644 index 000000000..c9220430d --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classCommunicable.eps b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classCommunicable.eps new file mode 100644 index 000000000..bc98683b5 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classCommunicable.pdf b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classCommunicable.tex b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classCommunicable.tex new file mode 100644 index 000000000..44bcd5647 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classCommunicator.eps b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classCommunicator.eps new file mode 100644 index 000000000..3d7cc0668 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classCommunicator.pdf b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classCommunicator.tex b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classCommunicator.tex new file mode 100644 index 000000000..1252e00ff --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classCooperative.eps b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classCooperative.eps new file mode 100644 index 000000000..60c6b6b94 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classCooperative.pdf b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classDisplayBestRoute.pdf b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classDisplayBestRoute.tex b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classDisplayBestRoute.tex new file mode 100644 index 000000000..390c5544a --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classMergeRouteEval.eps b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classMergeRouteEval.eps new file mode 100644 index 000000000..a46755cc0 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classMergeRouteEval.pdf b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classMergeRouteEval.tex b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classMergeRouteEval.tex new file mode 100644 index 000000000..d2fcb7425 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classReactiveThread.eps b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classReactiveThread.eps new file mode 100644 index 000000000..9c8a085ba --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classReactiveThread.pdf b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classReactiveThread.pdf new file mode 100644 index 000000000..2e0f92b3c --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classReactiveThread.tex b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classReactiveThread.tex new file mode 100644 index 000000000..1b9508e9d --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classRingTopology.eps b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classRingTopology.eps new file mode 100644 index 000000000..04c98c56e --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classRingTopology.pdf b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classRunner.eps b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classRunner.eps new file mode 100644 index 000000000..0bc955061 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classRunner.pdf b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classRunner.tex b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classRunner.tex new file mode 100644 index 000000000..ce98b3b32 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classService.eps b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classService.eps new file mode 100644 index 000000000..b2c160b85 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classService.pdf b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classService.tex b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classService.tex new file mode 100644 index 000000000..fad0d49e2 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classThread.eps b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classThread.eps new file mode 100644 index 000000000..b0fe5e8f1 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classThread.pdf b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classWorker.eps b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classWorker.eps new file mode 100644 index 000000000..5972d40a6 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classWorker.pdf b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classWorker.tex b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classWorker.tex new file mode 100644 index 000000000..4cd676866 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classpeoAggEvalFunc.eps b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoAggEvalFunc.eps new file mode 100644 index 000000000..de2aa80a5 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classpeoAggEvalFunc.pdf b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoAggEvalFunc.pdf new file mode 100644 index 000000000..474c0d8dd --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classpeoAggEvalFunc.tex b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoAggEvalFunc.tex new file mode 100644 index 000000000..378801387 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classpeoAsyncIslandMig.eps b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoAsyncIslandMig.eps new file mode 100644 index 000000000..292b6cce7 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classpeoAsyncIslandMig.pdf b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classpeoAsyncIslandMig.tex b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoAsyncIslandMig.tex new file mode 100644 index 000000000..bb0bcc2cf --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classpeoEA.eps b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoEA.eps new file mode 100644 index 000000000..e4aabc826 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classpeoEA.pdf b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classpeoNoAggEvalFunc.eps b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoNoAggEvalFunc.eps new file mode 100644 index 000000000..b9f8ee753 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classpeoNoAggEvalFunc.pdf b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classpeoParaPopEval.eps b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoParaPopEval.eps new file mode 100644 index 000000000..25c8b8af1 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classpeoParaPopEval.pdf b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoParaPopEval.pdf new file mode 100644 index 000000000..fcb9725ca --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classpeoParaPopEval.tex b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoParaPopEval.tex new file mode 100644 index 000000000..7c1d7ae9f --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classpeoParaSGATransform.eps b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoParaSGATransform.eps new file mode 100644 index 000000000..7b2968db4 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classpeoParaSGATransform.pdf b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoParaSGATransform.pdf new file mode 100644 index 000000000..644de362e --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classpeoParaSGATransform.tex b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoParaSGATransform.tex new file mode 100644 index 000000000..c86bf9422 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classpeoParallelAlgorithmWrapper.eps b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoParallelAlgorithmWrapper.eps new file mode 100644 index 000000000..d3b1407fa --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classpeoParallelAlgorithmWrapper.pdf b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoParallelAlgorithmWrapper.pdf new file mode 100644 index 000000000..897fdc562 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classpeoParallelAlgorithmWrapper.tex b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoParallelAlgorithmWrapper.tex new file mode 100644 index 000000000..ff8968483 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classpeoPopEval.eps b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoPopEval.eps new file mode 100644 index 000000000..b486aceee --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classpeoPopEval.pdf b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classpeoPopEval.tex b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoPopEval.tex new file mode 100644 index 000000000..a43d26bb8 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classpeoSeqPopEval.eps b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoSeqPopEval.eps new file mode 100644 index 000000000..e8cf5fd7e --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classpeoSeqPopEval.pdf b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classpeoSeqPopEval.tex b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoSeqPopEval.tex new file mode 100644 index 000000000..1fb6c32f0 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classpeoSeqTransform.eps b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoSeqTransform.eps new file mode 100644 index 000000000..200358ca0 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classpeoSeqTransform.pdf b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classpeoSeqTransform.tex b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoSeqTransform.tex new file mode 100644 index 000000000..723940aa1 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classpeoSyncIslandMig.eps b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoSyncIslandMig.eps new file mode 100644 index 000000000..6f0fb127a --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classpeoSyncIslandMig.pdf b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classpeoSyncIslandMig.tex b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoSyncIslandMig.tex new file mode 100644 index 000000000..9a94013a2 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classpeoSyncMultiStart.eps b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoSyncMultiStart.eps new file mode 100644 index 000000000..6a97a65f8 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classpeoSyncMultiStart.pdf b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classpeoSynchronousMultiStart.eps b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoSynchronousMultiStart.eps new file mode 100644 index 000000000..6e4832756 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classpeoSynchronousMultiStart.pdf b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classpeoSynchronousMultiStart.tex b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoSynchronousMultiStart.tex new file mode 100644 index 000000000..8b103fb89 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classpeoTransform.eps b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoTransform.eps new file mode 100644 index 000000000..685b4bc71 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classpeoTransform.pdf b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoTransform.pdf new file mode 100644 index 000000000..936add316 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/classpeoTransform.tex b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/classpeoTransform.tex new file mode 100644 index 000000000..5207893f6 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/doxygen.sty b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/doxygen.sty new file mode 100644 index 000000000..e00898f58 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/hierarchy.tex b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/hierarchy.tex new file mode 100644 index 000000000..385abf60e --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/main.tex b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/main.tex new file mode 100644 index 000000000..fe3667dc0 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/namespacepeo.tex b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/namespacepeo.tex new file mode 100644 index 000000000..ee1f78ba8 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/namespaces.tex b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/namespaces.tex new file mode 100644 index 000000000..c69deee37 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/refman.tex b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/refman.tex new file mode 100644 index 000000000..e2e595b18 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/structRandomExplorationAlgorithm.tex b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/structRandomExplorationAlgorithm.tex new file mode 100644 index 000000000..73b474c3a --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/structSEND__REQUEST.tex b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/structSEND__REQUEST.tex new file mode 100644 index 000000000..7b319bcac --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/structpeoParallelAlgorithmWrapper_1_1AbstractAlgorithm.eps b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/structpeoParallelAlgorithmWrapper_1_1AbstractAlgorithm.eps new file mode 100644 index 000000000..c20f6ccc6 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/structpeoParallelAlgorithmWrapper_1_1AbstractAlgorithm.pdf b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/structpeoParallelAlgorithmWrapper_1_1AbstractAlgorithm.pdf new file mode 100644 index 000000000..b76ae706b --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/structpeoParallelAlgorithmWrapper_1_1AbstractAlgorithm.tex b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/structpeoParallelAlgorithmWrapper_1_1AbstractAlgorithm.tex new file mode 100644 index 000000000..c6241f877 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/structpeoParallelAlgorithmWrapper_1_1Algorithm.eps b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/structpeoParallelAlgorithmWrapper_1_1Algorithm.eps new file mode 100644 index 000000000..5950e1a42 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/structpeoParallelAlgorithmWrapper_1_1Algorithm.pdf b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/structpeoParallelAlgorithmWrapper_1_1Algorithm.tex b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/structpeoParallelAlgorithmWrapper_1_1Algorithm.tex new file mode 100644 index 000000000..afe682d32 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/structpeoParallelAlgorithmWrapper_1_1Algorithm_3_01AlgorithmType_00_01void_01_4.eps b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/structpeoParallelAlgorithmWrapper_1_1Algorithm_3_01AlgorithmType_00_01void_01_4.pdf b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/structpeoParallelAlgorithmWrapper_1_1Algorithm_3_01AlgorithmType_00_01void_01_4.tex b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/structpeoSynchronousMultiStart_1_1AbstractAggregationAlgorithm.eps b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/structpeoSynchronousMultiStart_1_1AbstractAggregationAlgorithm.eps new file mode 100644 index 000000000..62a992443 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/structpeoSynchronousMultiStart_1_1AbstractAggregationAlgorithm.pdf b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/structpeoSynchronousMultiStart_1_1AbstractAggregationAlgorithm.tex b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/structpeoSynchronousMultiStart_1_1AbstractAggregationAlgorithm.tex new file mode 100644 index 000000000..d232dea56 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/structpeoSynchronousMultiStart_1_1AbstractAlgorithm.eps b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/structpeoSynchronousMultiStart_1_1AbstractAlgorithm.eps new file mode 100644 index 000000000..863be5db9 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/structpeoSynchronousMultiStart_1_1AbstractAlgorithm.pdf b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/structpeoSynchronousMultiStart_1_1AbstractAlgorithm.tex b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/structpeoSynchronousMultiStart_1_1AbstractAlgorithm.tex new file mode 100644 index 000000000..7bcb35c7c --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/structpeoSynchronousMultiStart_1_1AbstractDataType.eps b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/structpeoSynchronousMultiStart_1_1AbstractDataType.eps new file mode 100644 index 000000000..15195ea2c --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/structpeoSynchronousMultiStart_1_1AbstractDataType.pdf b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/structpeoSynchronousMultiStart_1_1AbstractDataType.tex b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/structpeoSynchronousMultiStart_1_1AbstractDataType.tex new file mode 100644 index 000000000..540d77fd4 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/structpeoSynchronousMultiStart_1_1AggregationAlgorithm.eps b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/structpeoSynchronousMultiStart_1_1AggregationAlgorithm.eps new file mode 100644 index 000000000..9a1dfebaa --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/structpeoSynchronousMultiStart_1_1AggregationAlgorithm.pdf b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/structpeoSynchronousMultiStart_1_1AggregationAlgorithm.tex b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/structpeoSynchronousMultiStart_1_1AggregationAlgorithm.tex new file mode 100644 index 000000000..1ed41f60a --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/structpeoSynchronousMultiStart_1_1Algorithm.eps b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/structpeoSynchronousMultiStart_1_1Algorithm.eps new file mode 100644 index 000000000..23ef940d6 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/structpeoSynchronousMultiStart_1_1Algorithm.pdf b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/structpeoSynchronousMultiStart_1_1Algorithm.tex b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/structpeoSynchronousMultiStart_1_1Algorithm.tex new file mode 100644 index 000000000..4772f9628 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/structpeoSynchronousMultiStart_1_1DataType.eps b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/structpeoSynchronousMultiStart_1_1DataType.eps new file mode 100644 index 000000000..b4f4c4665 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/structpeoSynchronousMultiStart_1_1DataType.pdf b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/structpeoSynchronousMultiStart_1_1DataType.tex b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/structpeoSynchronousMultiStart_1_1DataType.tex new file mode 100644 index 000000000..d0230a652 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/structpeoSynchronousMultiStart_1_1NoAggregationFunction.eps b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/structpeoSynchronousMultiStart_1_1NoAggregationFunction.eps new file mode 100644 index 000000000..a3ef4d771 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/structpeoSynchronousMultiStart_1_1NoAggregationFunction.pdf b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/structpeoSynchronousMultiStart_1_1NoAggregationFunction.pdf new file mode 100644 index 000000000..8cf88d473 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/latex/structpeoSynchronousMultiStart_1_1NoAggregationFunction.tex b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/latex/structpeoSynchronousMultiStart_1_1NoAggregationFunction.tex new file mode 100644 index 000000000..6c3fe2a42 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/man/man3/Communicable.3 b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/Communicable.3 new file mode 100644 index 000000000..d0e543861 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/man/man3/Communicator.3 b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/Communicator.3 new file mode 100644 index 000000000..4c541f2d4 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/man/man3/Cooperative.3 b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/Cooperative.3 new file mode 100644 index 000000000..9aa4a6bc7 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/man/man3/DisplayBestRoute.3 b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/DisplayBestRoute.3 new file mode 100644 index 000000000..18f1c70df --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/man/man3/MergeRouteEval.3 b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/MergeRouteEval.3 new file mode 100644 index 000000000..96d7907c5 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/man/man3/RandomExplorationAlgorithm.3 b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/RandomExplorationAlgorithm.3 new file mode 100644 index 000000000..9964708ac --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/man/man3/ReactiveThread.3 b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/ReactiveThread.3 new file mode 100644 index 000000000..8467f49d3 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/man/man3/RingTopology.3 b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/RingTopology.3 new file mode 100644 index 000000000..a8d404156 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/man/man3/Runner.3 b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/Runner.3 new file mode 100644 index 000000000..abdc983ec --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/man/man3/SEND_REQUEST.3 b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/SEND_REQUEST.3 new file mode 100644 index 000000000..de6fbfb17 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/man/man3/Service.3 b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/Service.3 new file mode 100644 index 000000000..242238f59 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/man/man3/Thread.3 b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/Thread.3 new file mode 100644 index 000000000..668641367 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/man/man3/Topology.3 b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/Topology.3 new file mode 100644 index 000000000..5d4e939ee --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/man/man3/Worker.3 b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/Worker.3 new file mode 100644 index 000000000..2327bb56a --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/man/man3/peo.3 b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/peo.3 new file mode 100644 index 000000000..ed1fecf92 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/man/man3/peoAggEvalFunc.3 b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/peoAggEvalFunc.3 new file mode 100644 index 000000000..4109b0e40 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/man/man3/peoAsyncIslandMig.3 b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/peoAsyncIslandMig.3 new file mode 100644 index 000000000..fd5d5126c --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/man/man3/peoEA.3 b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/peoEA.3 new file mode 100644 index 000000000..9bfa31f02 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/man/man3/peoNoAggEvalFunc.3 b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/peoNoAggEvalFunc.3 new file mode 100644 index 000000000..caa54ee6a --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/man/man3/peoParaPopEval.3 b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/peoParaPopEval.3 new file mode 100644 index 000000000..a2533e127 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/man/man3/peoParaSGATransform.3 b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/peoParaSGATransform.3 new file mode 100644 index 000000000..978501baf --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/man/man3/peoParallelAlgorithmWrapper.3 b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/peoParallelAlgorithmWrapper.3 new file mode 100644 index 000000000..71288d753 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/man/man3/peoParallelAlgorithmWrapper_AbstractAlgorithm.3 b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/peoParallelAlgorithmWrapper_AbstractAlgorithm.3 new file mode 100644 index 000000000..4eda5a990 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/man/man3/peoParallelAlgorithmWrapper_Algorithm.3 b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/peoParallelAlgorithmWrapper_Algorithm.3 new file mode 100644 index 000000000..4982862ee --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/man/man3/peoParallelAlgorithmWrapper_Algorithm_ AlgorithmType, void _.3 b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/peoParallelAlgorithmWrapper_Algorithm_ AlgorithmType, void _.3 new file mode 100644 index 000000000..cfd54f2b4 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/man/man3/peoPopEval.3 b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/peoPopEval.3 new file mode 100644 index 000000000..2b0d9884f --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/man/man3/peoSeqPopEval.3 b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/peoSeqPopEval.3 new file mode 100644 index 000000000..745865e94 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/man/man3/peoSeqTransform.3 b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/peoSeqTransform.3 new file mode 100644 index 000000000..78cb6d706 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/man/man3/peoSyncIslandMig.3 b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/peoSyncIslandMig.3 new file mode 100644 index 000000000..d9854a182 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/man/man3/peoSyncMultiStart.3 b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/peoSyncMultiStart.3 new file mode 100644 index 000000000..5decd8736 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/man/man3/peoSynchronousMultiStart.3 b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/peoSynchronousMultiStart.3 new file mode 100644 index 000000000..166617ead --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/man/man3/peoSynchronousMultiStart_AbstractAggregationAlgorithm.3 b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/peoSynchronousMultiStart_AbstractAggregationAlgorithm.3 new file mode 100644 index 000000000..409b9e62f --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/man/man3/peoSynchronousMultiStart_AbstractAlgorithm.3 b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/peoSynchronousMultiStart_AbstractAlgorithm.3 new file mode 100644 index 000000000..9bfd71852 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/man/man3/peoSynchronousMultiStart_AbstractDataType.3 b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/peoSynchronousMultiStart_AbstractDataType.3 new file mode 100644 index 000000000..ed1b5ee4d --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/man/man3/peoSynchronousMultiStart_AggregationAlgorithm.3 b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/peoSynchronousMultiStart_AggregationAlgorithm.3 new file mode 100644 index 000000000..5f26001fc --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/man/man3/peoSynchronousMultiStart_Algorithm.3 b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/peoSynchronousMultiStart_Algorithm.3 new file mode 100644 index 000000000..2336cfde9 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/man/man3/peoSynchronousMultiStart_DataType.3 b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/peoSynchronousMultiStart_DataType.3 new file mode 100644 index 000000000..bd97d38d5 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/man/man3/peoSynchronousMultiStart_NoAggregationFunction.3 b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/peoSynchronousMultiStart_NoAggregationFunction.3 new file mode 100644 index 000000000..2cd5af48d --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/man/man3/peoTransform.3 b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/man/man3/peoTransform.3 new file mode 100644 index 000000000..2ffdb3dd9 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/doc/peo.doxyfile.cmake b/tags/paradiseo-peo-16012008-before-mig-modifs/doc/peo.doxyfile.cmake new file mode 100644 index 000000000..70be700cf --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/peo-conf.cmake b/tags/paradiseo-peo-16012008-before-mig-modifs/peo-conf.cmake new file mode 100644 index 000000000..ba4c4c037 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/src/CMakeLists.txt b/tags/paradiseo-peo-16012008-before-mig-modifs/src/CMakeLists.txt new file mode 100644 index 000000000..67c2c2478 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/src/CMakeLists.txt @@ -0,0 +1,8 @@ + +###################################################################################### +### 1) Where must cmake go now ? +###################################################################################### + +SUBDIRS(core rmc) + +###################################################################################### diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/CMakeLists.txt b/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/CMakeLists.txt new file mode 100644 index 000000000..fddf647d8 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/src/core/communicable.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/communicable.cpp new file mode 100644 index 000000000..b6beca2ad --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/communicable.cpp @@ -0,0 +1,102 @@ +/* +* +* 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); +} + +void initCommunicableEnv () { + + key_to_comm.resize (1); + comm_to_key.clear (); + Communicable :: num_comm = 0; +} diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/communicable.h b/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/communicable.h new file mode 100644 index 000000000..4d0dae9f2 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/communicable.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 __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 ___________ */ + +public : + + static unsigned num_comm; + +protected : + + COMM_ID key; + + sem_t sem_lock; + + sem_t sem_stop; +}; + +extern void initCommunicableEnv (); + +extern Communicable * getCommunicable (COMM_ID __key); + +#endif diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/cooperative.h b/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/cooperative.h new file mode 100644 index 000000000..65862d4b4 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/cooperative.h @@ -0,0 +1,80 @@ +/* +* +* 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 +#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; + + virtual void packSynchronizeReq () = 0; + + void send (Cooperative * __coop); + + void synchronizeCoopEx (); + + virtual void notifySending (); + + virtual void notifyReceiving (); + + virtual void notifySendingSyncReq (); + + virtual void notifySynchronized (); + +private : + + Runner * owner; + +}; + +extern Cooperative * getCooperative (COOP_ID __key); + +#endif diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/eoPop_mesg.h b/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/eoPop_mesg.h new file mode 100644 index 000000000..948e17ae2 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/eoPop_mesg.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 __eoPop_mesg_h +#define __eoPop_mesg_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-16012008-before-mig-modifs/src/core/eoVector_mesg.h b/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/eoVector_mesg.h new file mode 100644 index 000000000..7581444df --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/eoVector_mesg.h @@ -0,0 +1,204 @@ +/* +* +* 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_mesg_h +#define __eoVector_mesg_h + +#include +#include + +#include "messaging.h" + + +template void pack (const eoVector & __v) { + + if (__v.invalid()) { + pack((unsigned)0); + } + else { + pack((unsigned)1); + pack (__v.fitness ()); + } + + unsigned len = __v.size (); + pack (len); + for (unsigned i = 0 ; i < len; i ++) + pack (__v [i]); +} + +template void unpack (eoVector & __v) { + + unsigned valid; unpack(valid); + + if (! valid) { + __v.invalidate(); + } + else { + F fit; + unpack (fit); + __v.fitness (fit); + } + + unsigned len; + unpack (len); + __v.resize (len); + for (unsigned i = 0 ; i < len; i ++) + unpack (__v [i]); +} + +template void pack (const eoVectorParticle & __v) { + + if (__v.invalid()) { + pack((unsigned)0); + } + else { + pack((unsigned)1); + 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) { + +unsigned valid; unpack(valid); + + if (! valid) { + __v.invalidate(); + } + else { + 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]); +} + +template void unpack (moeoVector &_v) +{ + unsigned valid; + unpack(valid); + if (! valid) + _v.invalidate(); + else + { + T fit; + unpack (fit); + _v.fitness (fit); + } + unpack(valid); + if (! valid) + _v.invalidateDiversity(); + else + { + V diver; + unpack(diver); + _v.diversity(diver); + } + unsigned len; + unpack (len); + _v.resize (len); + for (unsigned i = 0 ; i < len; i ++) + unpack (_v [i]); + unpack(valid); + if (! valid) + _v.invalidateObjectiveVector(); + else + { + F object; + unpack (len); + object.resize(len); + for (unsigned i = 0 ; i < len; i ++) + unpack (object[i]); + _v.objectiveVector(object); + } +} + + +template void pack (moeoVector &_v) +{ + if (_v.invalid()) + pack((unsigned)0); + else + { + pack((unsigned)1); + pack (_v.fitness ()); + } + if (_v.invalidDiversity()) + pack((unsigned)0); + else + { + pack((unsigned)1); + pack(_v.diversity()); + } + unsigned len = _v.size (); + pack (len); + for (unsigned i = 0 ; i < len; i ++) + pack (_v[i]); + if (_v.invalidObjectiveVector()) + pack((unsigned)0); + else + { + pack((unsigned)1); + F object; + object=_v.objectiveVector(); + len=object.nObjectives(); + pack (len); + for (unsigned i = 0 ; i < len; i ++) + pack (object[i]); + } +} + +#endif diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/messaging.h b/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/messaging.h new file mode 100644 index 000000000..a5d7246ed --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/messaging.h @@ -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 +* +*/ + +#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-16012008-before-mig-modifs/src/core/peo_debug.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/peo_debug.cpp new file mode 100644 index 000000000..dc79f09fd --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/peo_debug.cpp @@ -0,0 +1,111 @@ +/* +* +* 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]); + files.clear(); +} + +void printDebugMessage (const char * __mess) { + + if (debug) { + + char buff [MAX_BUFF_SIZE]; + char localTime [MAX_BUFF_SIZE]; + time_t t = time (0); + + /* Date */ + strcpy( localTime, ctime (& t) ); + localTime[ strlen( localTime )-1 ] = ']'; + sprintf (buff, "[%s][%s: ", host, localTime ); + + 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-16012008-before-mig-modifs/src/core/peo_debug.h b/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/peo_debug.h new file mode 100644 index 000000000..d00b5e9c7 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/src/core/peo_fin.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/peo_fin.cpp new file mode 100644 index 000000000..8c0bf3ff4 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/peo_fin.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 "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-16012008-before-mig-modifs/src/core/peo_fin.h b/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/peo_fin.h new file mode 100644 index 000000000..cf23cbfdb --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/src/core/peo_init.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/peo_init.cpp new file mode 100644 index 000000000..52c35bcf5 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/peo_init.cpp @@ -0,0 +1,99 @@ +/* +* +* 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" +#include "runner.h" + + +extern void initCommunicableEnv (); +extern void initBuffers (); + +extern void initThreadsEnv (); +extern void initReactiveThreadsEnv (); + +extern void initRunnersEnv (); +extern void initWorkersEnv (); + +extern void initScheduler (); +extern void initSynchron (); + + +static void initExecutionEnv() { + + initCommunicableEnv (); + initBuffers (); + initScheduler(); + initSynchron (); + + initThreadsEnv (); + initReactiveThreadsEnv (); + + initRunnersEnv (); + initWorkersEnv (); +} + + +namespace peo { + + int * argc; + + char * * * argv; + + void init (int & __argc, char * * & __argv) { + + argc = & __argc; + + argv = & __argv; + + /* Initializing the execution environment */ + initExecutionEnv(); + + /* Loading the common parameters */ + loadParameters (__argc, __argv); + + /* Initializing the the Resource Management and Communication */ + initRMC ( *peo::argc, *peo::argv); + + /* */ + initDebugging (); + } +} diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/peo_init.h b/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/peo_init.h new file mode 100644 index 000000000..9b4a90362 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/src/core/peo_param.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/peo_param.cpp new file mode 100644 index 000000000..6e3f4b6e5 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/peo_param.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 + +#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-16012008-before-mig-modifs/src/core/peo_param.h b/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/peo_param.h new file mode 100644 index 000000000..4ec838e0b --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/src/core/peo_run.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/peo_run.cpp new file mode 100644 index 000000000..166a45a44 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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_run.h" +#include "rmc.h" +#include "runner.h" + + +void peo :: run () { + + startRunners (); + + runRMC (); +} diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/peo_run.h b/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/peo_run.h new file mode 100644 index 000000000..b5ca43365 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/src/core/reac_thread.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/reac_thread.cpp new file mode 100644 index 000000000..bd669948f --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/reac_thread.cpp @@ -0,0 +1,74 @@ +/* +* +* 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 initReactiveThreadsEnv () { + + the_end = false; + reac_threads.clear (); +} + +void stopReactiveThreads () { + + the_end = true; + for (unsigned i = 0; i < reac_threads.size (); i ++) + reac_threads [i] -> wakeUp (); + reac_threads.clear (); +} + +bool theEnd () { return the_end; } diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/reac_thread.h b/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/reac_thread.h new file mode 100644 index 000000000..79619090a --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/reac_thread.h @@ -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 +* +*/ + +#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 initReactiveThreadsEnv (); + +extern void stopReactiveThreads (); + +#endif /*REAC_THREAD_H_*/ diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/ring_topo.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/ring_topo.cpp new file mode 100644 index 000000000..c52ebb454 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/src/core/ring_topo.h b/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/ring_topo.h new file mode 100644 index 000000000..363a69850 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/src/core/rmc.h b/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/rmc.h new file mode 100644 index 000000000..7efb1bac3 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/src/core/runner.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/runner.cpp new file mode 100644 index 000000000..4f421b32f --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/runner.cpp @@ -0,0 +1,205 @@ +/* +* +* 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" + +#include "../rmc/mpi/mess.h" +#include "../rmc/mpi/tags.h" + +#include "../rmc/mpi/node.h" +#include "../rmc/mpi/schema.h" + + +static std :: vector ll_threads; /* Low-level runner threads */ + +static std :: vector the_runners; + +static unsigned num_def_runners = 0; /* Number of defined runners */ + +static unsigned num_local_exec_runners = 0; /* Number of locally executing runners */ + +static unsigned num_exec_runners = 0; /* Number of globally executing runners */ + + +extern int getNodeRank (); + +extern int getNumberOfNodes (); + +extern void wakeUpCommunicator (); + + +Runner :: Runner () { + + exec_id = 0; + def_id = ++ num_def_runners; + + the_runners.push_back (this); + + sem_init (& sem_start, 0, 0); + sem_init (& sem_cntxt, 0, 0); +} + +RUNNER_ID Runner :: getDefinitionID () { + + return def_id; +} + +RUNNER_ID Runner :: getExecutionID () { + + return exec_id; +} + +void Runner :: setExecutionID (const RUNNER_ID& execution_id) { + + exec_id = execution_id; +} + +Runner * getRunner (RUNNER_ID __key) { + + return dynamic_cast (getCommunicable (__key)); +} + +void initializeContext () { + + num_local_exec_runners = 0; + + // setting up the execution IDs & counting the number of local exec. runners + for (unsigned i = 0; i < the_runners.size (); i ++) { + the_runners [i] -> setExecutionID ( my_node -> execution_id_run[ i ] ); + if (the_runners [i] -> isAssignedLocally ()) num_local_exec_runners ++; + } + + collectiveCountOfRunners( &num_local_exec_runners, &num_exec_runners ); + + // synchronizeNodes (); + + for (unsigned i = 0; i < the_runners.size (); i ++) + if (the_runners [i] -> isAssignedLocally ()) the_runners [i] -> notifyContextInitialized (); +} + +void Runner :: waitStarting () { + + sem_wait (& sem_start); +} + +void Runner :: waitContextInitialization () { + + sem_wait (& sem_cntxt); +} + +void Runner :: start () { + + setActive (); + + sem_post (& sem_start); + + waitContextInitialization (); + run (); + terminate (); +} + +void startRunners () { + + /* Runners */ + for (unsigned i = 0; i < the_runners.size (); i ++) + if (the_runners [i] -> isAssignedLocally ()) { + addThread (the_runners [i], ll_threads); + the_runners [i] -> waitStarting (); + } + + printDebugMessage ("launched the parallel runners"); +} + +void joinRunners () { + + joinThreads (ll_threads); + the_runners.clear(); +} + +bool atLeastOneActiveRunner () { + + return num_exec_runners; +} + +unsigned numberOfActiveRunners () { + + return num_exec_runners; +} + +void Runner :: notifyContextInitialized () { + + sem_post (& sem_cntxt); +} + +void Runner :: notifySendingTermination () { + + printDebugMessage ("I am informed that everyone received my termination notification."); + setPassive (); +} + +void unpackTerminationOfRunner () { + + RUNNER_ID finished_id; + unpack (finished_id); + + num_exec_runners --; + + printDebugMessage ("I'm noticed of the termination of a runner"); + + if (!num_exec_runners) { + + printDebugMessage ("All the runners have terminated - now stopping the reactive threads."); + stopReactiveThreads (); + printDebugMessage ("Reactive threads stopped!"); + } + + wakeUpCommunicator (); +} + +void initRunnersEnv () { + + ll_threads.clear (); + the_runners.clear (); + + num_def_runners = 0; + num_local_exec_runners = 0; + num_exec_runners = 0; +} diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/runner.h b/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/runner.h new file mode 100644 index 000000000..fd6bf294e --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/runner.h @@ -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 +* +*/ + +#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 (); + + RUNNER_ID getDefinitionID (); + + RUNNER_ID getExecutionID (); + + void setExecutionID (const RUNNER_ID& execution_id); + + bool isAssignedLocally (); + + void waitStarting (); + + void waitContextInitialization (); + + void start (); + + virtual void run () = 0; + + void terminate (); + + void notifyContextInitialized (); + + void notifySendingTermination (); + + void packTermination (); + +private : + + sem_t sem_start; + sem_t sem_cntxt; + + unsigned def_id; + unsigned exec_id; +}; + + +extern void initRunnersEnv (); + +extern Runner * getRunner (RUNNER_ID __key); + +extern void initializeContext (); + +extern void startRunners (); + +extern void joinRunners (); + +extern bool atLeastOneActiveRunner (); + +extern unsigned numberOfActiveRunners (); + +extern void unpackTerminationOfRunner (); + +#endif diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/service.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/service.cpp new file mode 100644 index 000000000..322769fe5 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/service.cpp @@ -0,0 +1,73 @@ +/* +* +* 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-16012008-before-mig-modifs/src/core/service.h b/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/service.h new file mode 100644 index 000000000..3e48ebd80 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/service.h @@ -0,0 +1,79 @@ +/* +* +* 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-16012008-before-mig-modifs/src/core/thread.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/thread.cpp new file mode 100644 index 000000000..0c7ba956b --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/thread.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 +* +*/ + +#include + +#include "thread.h" + +static std :: vector threads; + +unsigned num_act = 0; + + +Thread :: Thread () { + + threads.push_back (this); + act = false; +} + +Thread :: ~ Thread () { + + /* Nothing ! */ +} + +void Thread :: setActive () { + + if (! act) { + + act = true; + num_act ++; + } +} + +void Thread :: setPassive () { + + if (act) { + + act = false; + num_act --; + } +} + +void initThreadsEnv () { + + threads.clear (); + num_act = 0; +} + +bool atLeastOneActiveThread () { + + 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); + delete __threads [i]; + } + __threads.clear(); +} diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/thread.h b/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/thread.h new file mode 100644 index 000000000..42b1c0edb --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/thread.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 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 initThreadsEnv (); + +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 */ + +#endif /*THREAD_H_*/ diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/topology.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/topology.cpp new file mode 100644 index 000000000..465210b93 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/topology.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 "topology.h" + +Topology :: ~ Topology () { + + /* Nothing ! */ +} + +void Topology :: add (Cooperative & __mig) { + + mig.push_back (& __mig) ; +} + +Topology :: operator std :: vector & () { + + return mig; +} diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/topology.h b/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/topology.h new file mode 100644 index 000000000..8c818561f --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/src/core/topology.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 __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; + + operator std :: vector & (); + +protected: + + std :: vector mig; +}; + +#endif diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/src/peo b/tags/paradiseo-peo-16012008-before-mig-modifs/src/peo new file mode 100644 index 000000000..e55873115 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/src/peo.h b/tags/paradiseo-peo-16012008-before-mig-modifs/src/peo.h new file mode 100644 index 000000000..59c274c0a --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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, 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 __peo_h_ +#define __peo_h_ + +#include +#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/messaging.h" +#include "core/eoPop_mesg.h" +#include "core/eoVector_mesg.h" + +#include "peoWrapper.h" + +/* <------- components for parallel algorithms -------> */ +#include "peoTransform.h" +#include "peoEvalFunc.h" +#include "peoPopEval.h" +#include "peoMoeoPopEval.h" + + +/* Cooperative island model */ +#include "core/ring_topo.h" +#include "peoSyncIslandMig.h" +#include "peoAsyncIslandMig.h" + +/* Synchronous multi-start model */ +#include "peoMultiStart.h" +/* <------- components for parallel algorithms -------> */ + +/* Parallel PSO */ +#include "peoPSOSelect.h" +#include "peoWorstPositionReplacement.h" +#include "peoGlobalBestVelocity.h" + +#endif diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/src/peoAggEvalFunc.h b/tags/paradiseo-peo-16012008-before-mig-modifs/src/peoAggEvalFunc.h new file mode 100644 index 000000000..b1d41b459 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/src/peoAggEvalFunc.h @@ -0,0 +1,57 @@ +/* +* +* 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-16012008-before-mig-modifs/src/peoAsyncIslandMig.h b/tags/paradiseo-peo-16012008-before-mig-modifs/src/peoAsyncIslandMig.h new file mode 100644 index 000000000..96a4db782 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/src/peoAsyncIslandMig.h @@ -0,0 +1,300 @@ +/* +* +* 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/messaging.h" +#include "core/eoPop_mesg.h" +#include "core/eoVector_mesg.h" + +#include "core/topology.h" +#include "core/thread.h" +#include "core/cooperative.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(); + //! Auxiliary function dealing with the packing of synchronization requests - not the case. + void packSynchronizeReq(); + + + 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 > :: packSynchronizeReq() { +} + +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-16012008-before-mig-modifs/src/peoEvalFunc.h b/tags/paradiseo-peo-16012008-before-mig-modifs/src/peoEvalFunc.h new file mode 100644 index 000000000..b19e27335 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/src/peoEvalFunc.h @@ -0,0 +1,62 @@ +/* +* +* 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-16012008-before-mig-modifs/src/peoGlobalBestVelocity.h b/tags/paradiseo-peo-16012008-before-mig-modifs/src/peoGlobalBestVelocity.h new file mode 100644 index 000000000..8416a2f4d --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/src/peoGlobalBestVelocity.h @@ -0,0 +1,81 @@ +/* +* +* (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 _peoGlobalBestVelocity_h +#define _peoGlobalBestVelocity_h + + +//----------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include + +template +class peoGlobalBestVelocity : public eoReplacement + { + public: + + typedef typename POT::ParticleVelocityType VelocityType; + + peoGlobalBestVelocity( 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-16012008-before-mig-modifs/src/peoMoeoPopEval.h b/tags/paradiseo-peo-16012008-before-mig-modifs/src/peoMoeoPopEval.h new file mode 100644 index 000000000..1beda1f54 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/src/peoMoeoPopEval.h @@ -0,0 +1,273 @@ +/* +* +* 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 __peoMoeoPopEval_h +#define __peoMoeoPopEval_h + +#include +#include + +#include "core/messaging.h" +#include "core/peo_debug.h" +#include "peoAggEvalFunc.h" +#include "peoNoAggEvalFunc.h" + + +//! Parallel evaluation functor wrapper. + +//! The peoMoeoPopEval 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 peoMoeoPopEval : public Service, public eoPopEvalFunc + { + + public: + + //! 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 + peoMoeoPopEval( 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. + peoMoeoPopEval( 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); + void operator()( eoPop< EOT >& __dummy, 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 > peoMoeoPopEval< EOT > :: peoMoeoPopEval( eoEvalFunc< EOT >& __eval_func ) : + + funcs( one_func ), merge_eval( no_merge_eval ) +{ + + one_func.push_back( &__eval_func ); +} + + +template< class EOT > peoMoeoPopEval< EOT > :: peoMoeoPopEval( + + const std :: vector< eoEvalFunc< EOT >* >& __funcs, + peoAggEvalFunc< EOT >& __merge_eval + +) : funcs( __funcs ), merge_eval( __merge_eval ) +{} + +template< class EOT > void peoMoeoPopEval< EOT >::operator()(eoPop< EOT >& __dummy, eoPop< EOT >& __pop ) +{ + this->operator()(__pop); +} + +template< class EOT > void peoMoeoPopEval< 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 peoMoeoPopEval< 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 peoMoeoPopEval< EOT > :: unpackData() +{ + unpack( num_func ); + /* Unpacking the solution */ + unpack( sol ); + /* Unpacking the @ of that one */ + unpack( ad_sol ); +} + + +template< class EOT > void peoMoeoPopEval< EOT > :: execute() +{ + + /* Computing the fitness of the solution */ + funcs[ num_func ]->operator()( sol ); +} + + +template< class EOT > void peoMoeoPopEval< EOT > :: packResult() +{ +// std::cout<<"\nD"; + /* Packing the fitness of the solution */ + /* typedef typename PO < F >::Fitness Fitness; + MOEOObjectiveVector ObjectiveVector;*/ + std::vector < double > object; + unsigned len; + object=sol.objectiveVector(); + len=object.size(); + pack (len); + for (unsigned i = 0 ; i < len; i ++) + pack (object[i]); + + + +// pack( sol.fitness() ); + /* Packing the @ of the individual */ + pack( ad_sol ); +// std::cout<<"\nF"; +} + + +template< class EOT > void peoMoeoPopEval< EOT > :: unpackResult() +{ +// typename EOT :: Fitness fit; + + /* Unpacking the computed fitness */ +// unpack( fit ); +unsigned len; +std::vector < double > object; + +unpack(len); +object.resize(len); +for (unsigned i = 0 ; i < len; i ++) + unpack (object[i]); + /* Unpacking the @ of the associated individual */ + unpack( ad_sol ); + + + /* Associating the fitness the local solution */ +// merge_eval( *ad_sol, object ); +ad_sol->objectiveVector(object); + 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 peoMoeoPopEval< EOT > :: notifySendingData() +{} + + +template< class EOT > void peoMoeoPopEval< EOT > :: notifySendingAllResourceRequests() +{ + getOwner()->setPassive(); +} + + +#endif diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/src/peoMultiStart.h b/tags/paradiseo-peo-16012008-before-mig-modifs/src/peoMultiStart.h new file mode 100644 index 000000000..319c00ffd --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/src/peoMultiStart.h @@ -0,0 +1,342 @@ +/* +* +* 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 __peoMultiStart_h +#define __peoMultiStart_h + +#include + +#include "core/service.h" +#include "core/messaging.h" + + +template < typename EntityType > class peoMultiStart : public Service +{ + + public: + + template < typename AlgorithmType > peoMultiStart( AlgorithmType& externalAlgorithm ) + { + + singularAlgorithm = new Algorithm< AlgorithmType >( externalAlgorithm ); + algorithms.push_back( singularAlgorithm ); + + aggregationFunction = new NoAggregationFunction(); + } + + template < typename AlgorithmReturnType, typename AlgorithmDataType > peoMultiStart( AlgorithmReturnType (*externalAlgorithm)( AlgorithmDataType& ) ) + { + + singularAlgorithm = new FunctionAlgorithm< AlgorithmReturnType, AlgorithmDataType >( externalAlgorithm ); + algorithms.push_back( singularAlgorithm ); + + aggregationFunction = new NoAggregationFunction(); + } + + template < typename AlgorithmType, typename AggregationFunctionType > peoMultiStart( std::vector< AlgorithmType* >& externalAlgorithms, AggregationFunctionType& externalAggregationFunction ) + { + + for ( unsigned int index = 0; index < externalAlgorithms.size(); index++ ) + { + + algorithms.push_back( new Algorithm< AlgorithmType >( *externalAlgorithms[ index ] ) ); + } + + aggregationFunction = new AggregationAlgorithm< AggregationFunctionType >( externalAggregationFunction ); + } + + template < typename AlgorithmReturnType, typename AlgorithmDataType, typename AggregationFunctionType > + peoMultiStart( std::vector< AlgorithmReturnType (*)( AlgorithmDataType& ) >& externalAlgorithms, + AggregationFunctionType& externalAggregationFunction ) + { + + for ( unsigned int index = 0; index < externalAlgorithms.size(); index++ ) + { + + algorithms.push_back( new FunctionAlgorithm< AlgorithmReturnType, AlgorithmDataType >( externalAlgorithms[ index ] ) ); + } + + aggregationFunction = new AggregationAlgorithm< AggregationFunctionType >( externalAggregationFunction ); + } + + ~peoMultiStart() + { + + 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; + }; + + + template < typename AlgorithmReturnType, typename AlgorithmDataType > struct FunctionAlgorithm : public AbstractAlgorithm + { + + FunctionAlgorithm( AlgorithmReturnType (*externalAlgorithm)( AlgorithmDataType& ) ) : algorithm( externalAlgorithm ) + { } + + void operator()( AbstractDataType& dataTypeInstance ) + { + algorithm( dataTypeInstance ); + } + + AlgorithmReturnType (*algorithm)( AlgorithmDataType& ); + }; + + 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 peoMultiStart< 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 peoMultiStart< EntityType >::unpackData() +{ + + unpack( functionIndex ); + unpack( dataIndex ); + unpack( entityTypeInstance ); +} + +template < typename EntityType > void peoMultiStart< 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 peoMultiStart< EntityType >::packResult() +{ + + pack( dataIndex ); + pack( entityTypeInstance ); +} + +template < typename EntityType > void peoMultiStart< 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 peoMultiStart< EntityType >::notifySendingData() +{} + +template < typename EntityType > void peoMultiStart< EntityType >::notifySendingAllResourceRequests() +{ + + getOwner()->setPassive(); +} + + +#endif diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/src/peoNoAggEvalFunc.h b/tags/paradiseo-peo-16012008-before-mig-modifs/src/peoNoAggEvalFunc.h new file mode 100644 index 000000000..3e169341e --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/src/peoNoAggEvalFunc.h @@ -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 +* +*/ + +#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-16012008-before-mig-modifs/src/peoPSOSelect.h b/tags/paradiseo-peo-16012008-before-mig-modifs/src/peoPSOSelect.h new file mode 100644 index 000000000..50f3f2862 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/src/peoPSOSelect.h @@ -0,0 +1,61 @@ +/* +* +* (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-16012008-before-mig-modifs/src/peoPopEval.h b/tags/paradiseo-peo-16012008-before-mig-modifs/src/peoPopEval.h new file mode 100644 index 000000000..a2792c46d --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/src/peoPopEval.h @@ -0,0 +1,252 @@ +/* +* +* 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 +#include + +#include "core/messaging.h" +#include "core/peo_debug.h" +#include "peoAggEvalFunc.h" +#include "peoNoAggEvalFunc.h" + + +//! Parallel evaluation functor wrapper. + +//! The peoPopEval 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 peoPopEval : public Service, public eoPopEvalFunc + { + + public: + + //! 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 + peoPopEval( 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. + peoPopEval( 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); + void operator()( eoPop< EOT >& __dummy, 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 > peoPopEval< EOT > :: peoPopEval( eoEvalFunc< EOT >& __eval_func ) : + + funcs( one_func ), merge_eval( no_merge_eval ) +{ + + one_func.push_back( &__eval_func ); +} + + +template< class EOT > peoPopEval< EOT > :: peoPopEval( + + const std :: vector< eoEvalFunc< EOT >* >& __funcs, + peoAggEvalFunc< EOT >& __merge_eval + +) : funcs( __funcs ), merge_eval( __merge_eval ) +{} + +template< class EOT > void peoPopEval< EOT >::operator()(eoPop< EOT >& __dummy, eoPop< EOT >& __pop ) +{ + this->operator()(__pop); +} + +template< class EOT > void peoPopEval< 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 peoPopEval< 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 peoPopEval< EOT > :: unpackData() +{ + unpack( num_func ); + /* Unpacking the solution */ + unpack( sol ); + /* Unpacking the @ of that one */ + unpack( ad_sol ); +} + + +template< class EOT > void peoPopEval< EOT > :: execute() +{ + + /* Computing the fitness of the solution */ + funcs[ num_func ]->operator()( sol ); +} + + +template< class EOT > void peoPopEval< EOT > :: packResult() +{ + /* Packing the fitness of the solution */ + pack( sol.fitness() ); + /* Packing the @ of the individual */ + pack( ad_sol ); +} + + +template< class EOT > void peoPopEval< 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 peoPopEval< EOT > :: notifySendingData() +{} + + +template< class EOT > void peoPopEval< EOT > :: notifySendingAllResourceRequests() +{ + getOwner()->setPassive(); +} + + +#endif diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/src/peoSyncIslandMig.h b/tags/paradiseo-peo-16012008-before-mig-modifs/src/peoSyncIslandMig.h new file mode 100644 index 000000000..f161fc1c9 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/src/peoSyncIslandMig.h @@ -0,0 +1,346 @@ +/* +* +* 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/messaging.h" +#include "core/eoPop_mesg.h" +#include "core/eoVector_mesg.h" + +#include "core/topology.h" +#include "core/thread.h" +#include "core/cooperative.h" +#include "core/peo_debug.h" + +#include "rmc/mpi/synchron.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 the packing of synchronization requests. There is no need to explicitly call the function. + void packSynchronizeReq(); + + //! Auxiliary function dealing with migration notifications. 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. + void notifyReceiving(); + + //! Auxiliary function dealing with synchronizing runners for migrations. There is no need to explicitly call the function. + void notifySendingSyncReq(); + + //! Auxiliary function for notifying the synchronization of the runners involved in migration. + void notifySynchronized(); + + +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; + + bool explicitPassive; + bool standbyMigration; + + std :: vector< Cooperative* > in, out, all; + unsigned nbMigrations; +}; + + +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() +{ + ::pack( coop_em.front()->getKey() ); + ::pack( em.front() ); + coop_em.pop(); + em.pop(); +} + +template< class EOT > void peoSyncIslandMig< EOT > :: unpack() +{ + eoPop< EOT > mig; + ::unpack( mig ); + imm.push( mig ); + explicitPassive = true; +} + +template< class EOT > void peoSyncIslandMig< EOT > :: packSynchronizeReq() { + + packSynchronRequest( all ); +} + +template< class EOT > void peoSyncIslandMig< EOT > :: emigrate() +{ + + 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( "peoSyncIslandMig: sending some emigrants." ); + } +} + +template< class EOT > void peoSyncIslandMig< EOT > :: immigrate() +{ + assert( imm.size() ); + + while ( imm.size() ) { + replace( destination, imm.front() ) ; + imm.pop(); + } + + printDebugMessage( "peoSyncIslandMig: receiving some immigrants." ); +} + +template< class EOT > void peoSyncIslandMig< EOT > :: operator()() +{ + + if ( !cont( source ) ) + { + explicitPassive = standbyMigration = false; + topology.setNeighbors( this, in, out ); all = topology; + nbMigrations = 0; + + synchronizeCoopEx(); stop(); + + // sending emigrants + emigrate(); + // synchronizing + sem_wait( &sync ); + // receiving immigrants + immigrate(); + + synchronizeCoopEx(); stop(); + } +} + +template< class EOT > void peoSyncIslandMig< EOT > :: notifySending() +{ + if ( !explicitPassive ) getOwner()->setPassive(); +} + +template< class EOT > void peoSyncIslandMig< EOT > :: notifyReceiving() +{ + nbMigrations++; + + if ( nbMigrations == in.size() ) { + + if ( standbyMigration ) getOwner()->setActive(); + sem_post( &sync ); + } +} + +template< class EOT > void peoSyncIslandMig< EOT > :: notifySendingSyncReq () { + + getOwner()->setPassive(); +} + +template< class EOT > void peoSyncIslandMig< EOT > :: notifySynchronized () { + + standbyMigration = true; + getOwner()->setActive(); + resume(); +} + + +#endif diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/src/peoTransform.h b/tags/paradiseo-peo-16012008-before-mig-modifs/src/peoTransform.h new file mode 100644 index 000000000..b7f43b386 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/src/peoTransform.h @@ -0,0 +1,185 @@ +/* +* +* 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 "core/thread.h" +#include "core/messaging.h" +#include "core/peo_debug.h" +#include "core/service.h" + + +extern int getNodeRank(); + + +template< class EOT > class peoTransform : public Service, public eoTransform< EOT > +{ + +public: + + peoTransform( + + 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 > peoTransform< EOT > :: peoTransform( + + 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 peoTransform< EOT > :: packData() +{ + + pack( idx ); + pack( pop->operator[]( idx++ ) ); + pack( pop->operator[]( idx++ ) ); +} + + +template< class EOT > void peoTransform< EOT > :: unpackData() +{ + + unpack( idx ); + unpack( father ); + unpack( mother ); +} + + +template< class EOT > void peoTransform< 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 peoTransform< EOT > :: packResult() +{ + + pack( idx ); + pack( father ); + pack( mother ); +} + + +template< class EOT > void peoTransform< EOT > :: unpackResult() +{ + + unsigned sidx; + + unpack( sidx ); + unpack( pop->operator[]( sidx++ ) ); + unpack( pop->operator[]( sidx ) ); + num_term += 2; + + // Can be used with an odd size + if ( num_term == 2*(pop->size()/2) ) + { + + getOwner()->setActive(); + resume(); + } +} + + +template< class EOT > void peoTransform< EOT > :: operator()( eoPop < EOT >& __pop ) +{ + + printDebugMessage( "peoTransform: performing the parallel transformation step." ); + pop = &__pop; + idx = 0; + num_term = 0; + requestResourceRequest( __pop.size() / 2 ); + stop(); +} + + +template< class EOT > void peoTransform< EOT > :: notifySendingData() +{} + + +template< class EOT > void peoTransform< EOT > :: notifySendingAllResourceRequests() +{ + + getOwner()->setPassive(); +} + + +#endif diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/src/peoWorstPositionReplacement.h b/tags/paradiseo-peo-16012008-before-mig-modifs/src/peoWorstPositionReplacement.h new file mode 100644 index 000000000..7925a5ab7 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/src/peoWorstPositionReplacement.h @@ -0,0 +1,74 @@ +/* +* +* (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 _peoWorstPositionReplacement_h +#define _peoWorstPositionReplacement_h + + +//----------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include + +template +class peoWorstPositionReplacement : public eoReplacement + { + public: + peoWorstPositionReplacement() + {} + + 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-16012008-before-mig-modifs/src/peoWrapper.h b/tags/paradiseo-peo-16012008-before-mig-modifs/src/peoWrapper.h new file mode 100644 index 000000000..1e380d2c8 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/src/peoWrapper.h @@ -0,0 +1,161 @@ +/* +* +* 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 peoWrapper : public Runner +{ + + public: + + template< typename AlgorithmType > peoWrapper( AlgorithmType& externalAlgorithm ) + : algorithm( new Algorithm< AlgorithmType, void >( externalAlgorithm ) ) + {} + + template< typename AlgorithmType, typename AlgorithmDataType > peoWrapper( AlgorithmType& externalAlgorithm, AlgorithmDataType& externalData ) + : algorithm( new Algorithm< AlgorithmType, AlgorithmDataType >( externalAlgorithm, externalData ) ) + {} + + template< typename AlgorithmReturnType > peoWrapper( AlgorithmReturnType& (*externalAlgorithm)() ) + : algorithm( new FunctionAlgorithm< AlgorithmReturnType, void >( externalAlgorithm ) ) + {} + + template< typename AlgorithmReturnType, typename AlgorithmDataType > peoWrapper( AlgorithmReturnType& (*externalAlgorithm)( AlgorithmDataType& ), AlgorithmDataType& externalData ) + : algorithm( new FunctionAlgorithm< AlgorithmReturnType, AlgorithmDataType >( externalAlgorithm, externalData ) ) + {} + + ~peoWrapper() + { + + 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; + }; + + template< typename AlgorithmReturnType, typename AlgorithmDataType > struct FunctionAlgorithm : public AbstractAlgorithm + { + + FunctionAlgorithm( AlgorithmReturnType (*externalAlgorithm)( AlgorithmDataType& ), AlgorithmDataType& externalData ) + : algorithm( externalAlgorithm ), algorithmData( externalData ) + {} + + virtual void operator()() + { + algorithm( algorithmData ); + } + + AlgorithmReturnType (*algorithm)( AlgorithmDataType& ); + AlgorithmDataType& algorithmData; + }; + + template< typename AlgorithmReturnType > struct FunctionAlgorithm< AlgorithmReturnType, void > : public AbstractAlgorithm + { + + FunctionAlgorithm( AlgorithmReturnType (*externalAlgorithm)() ) + : algorithm( externalAlgorithm ) + {} + + virtual void operator()() + { + algorithm(); + } + + AlgorithmReturnType (*algorithm)(); + }; + + private: + + AbstractAlgorithm* algorithm; +}; + + +#endif diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/CMakeLists.txt b/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/CMakeLists.txt new file mode 100644 index 000000000..cff45bfa7 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/src/rmc/mpi/CMakeLists.txt b/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/CMakeLists.txt new file mode 100644 index 000000000..5ab0ccd94 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/CMakeLists.txt @@ -0,0 +1,102 @@ +SET(CMAKE_DEFAULT_BUILD_TYPE Debug CACHE STRING "Variable that stores the default CMake build type" FORCE) +SET(CMAKE_CXX_FLAGS "-O0 -g") +SET(CMAKE_CXX_FLAGS_DEBUG "-O0 -g") +SET(CMAKE_CXX_FLAGS_RELEASE "-O0 -g") +SET(CMAKE_CXX_FLAGS_MINSIZEREL "-O0 -g") +SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O0 -g") + +###################################################################################### +### 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 + cooperative.cpp + mess.cpp + rmc.cpp + scheduler.cpp + synchron.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-16012008-before-mig-modifs/src/rmc/mpi/comm.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/comm.cpp new file mode 100644 index 000000000..7210f1202 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/comm.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 "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 () && ! atLeastOneActiveThread() && allResourcesFree ()) + break; + + receiveMessages (); + } + + waitBuffers (); + printDebugMessage ("finalizing"); + + //synchronizeNodes (); +} + +void initCommunication () { + + static bool initializedSemaphore = false; + + if (initializedSemaphore) { + sem_destroy(& sem_comm_init); + } + + sem_init (& sem_comm_init, 0, 0); + initializedSemaphore = true; +} + +void waitNodeInitialization () { + + sem_wait (& sem_comm_init); +} + +void wakeUpCommunicator () { + + the_thread -> wakeUp (); +} diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/comm.h b/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/comm.h new file mode 100644 index 000000000..7a343a595 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/src/rmc/mpi/cooperative.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/cooperative.cpp new file mode 100644 index 000000000..8d750f4aa --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/cooperative.cpp @@ -0,0 +1,82 @@ +/* +* +* 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 () -> getDefinitionID ()), COOP_TAG); + // stop (); +} + +void Cooperative :: synchronizeCoopEx () { + :: send (this, my_node -> rk_sched, SYNCHRONIZE_REQ_TAG); +} + +Cooperative * getCooperative (COOP_ID __key) { + + return dynamic_cast (getCommunicable (__key)); +} + +void Cooperative :: notifySending () { + + //getOwner -> setPassive (); + // resume (); +} + +void Cooperative :: notifyReceiving () { +} + +void Cooperative :: notifySendingSyncReq () { +} + +void Cooperative :: notifySynchronized () { +} diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/mess.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/mess.cpp new file mode 100644 index 000000000..addadc3b2 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/mess.cpp @@ -0,0 +1,277 @@ +/* +* +* 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 initBuffers () { + + pos_buf = 0; + act_buf.clear (); + act_req.clear (); +} + +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); +} + +void synchronizeNodes () { + + MPI_Barrier ( MPI_COMM_WORLD ); +} + +/* 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-16012008-before-mig-modifs/src/rmc/mpi/mess.h b/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/mess.h new file mode 100644 index 000000000..f7efecee7 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/mess.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 __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 initBuffers (); + +extern void cleanBuffers (); + +extern void waitBuffers (); + +extern bool probeMessage (int & __src, int & __tag); + +extern void waitMessage (); + +extern void synchronizeNodes (); + +#endif diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/node.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/node.cpp new file mode 100644 index 000000000..e1e3707ce --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/node.cpp @@ -0,0 +1,141 @@ +/* +* +* 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 "mess.h" + + +class MPIThreadedEnv { + +public: + + static void init ( int * __argc, char * * * __argv ) { + + static MPIThreadedEnv mpiThreadedEnv( __argc, __argv ); + } + + static void finalize () { + + static bool finalizedEnvironment = false; + + if (! finalizedEnvironment ) { + + MPI_Finalize (); + finalizedEnvironment = true; + } + } + +private: + + /* No instance of this class can be created outside its domain! */ + MPIThreadedEnv ( int * __argc, char * * * __argv ) { + + static bool MPIThreadedEnvInitialized = false; + int provided = 1; + + if (! MPIThreadedEnvInitialized) { + + 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 */ + MPIThreadedEnvInitialized = true; + } + } + + ~MPIThreadedEnv() { + + finalize (); + } +}; + + +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; +} + +void collectiveCountOfRunners ( unsigned int* num_local_exec_runners, unsigned int* num_exec_runners ) { + + MPI_Allreduce( num_local_exec_runners, num_exec_runners, 1, MPI_UNSIGNED, MPI_SUM, MPI_COMM_WORLD ); +} + +int getRankFromName (const std :: string & __name) { + + return atoi (__name.c_str ()); +} + +void initNode (int * __argc, char * * * __argv) { + + rk_to_name.clear (); + name_to_rk.clear (); + + MPIThreadedEnv :: init ( __argc, __argv ); + //synchronizeNodes(); + + 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-16012008-before-mig-modifs/src/rmc/mpi/node.h b/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/node.h new file mode 100644 index 000000000..92d289bc1 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/node.h @@ -0,0 +1,74 @@ +/* +* +* 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 + +#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 runner def. IDs */ + std :: vector execution_id_run; /* List of runtime execution runner IDs */ +}; + +extern Node * my_node; + +extern bool isScheduleNode (); + +extern int getNodeRank (); /* It gives the rank of the calling process */ + +extern RANK_ID getRankOfRunner (RUNNER_ID __key); + +extern int getNumberOfNodes (); /* It gives the size of the environment (Total number of nodes) */ + +extern void collectiveCountOfRunners ( unsigned int* num_local_exec_runners, unsigned int* num_exec_runners ); + +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-16012008-before-mig-modifs/src/rmc/mpi/param.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/param.cpp new file mode 100644 index 000000000..821e58179 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/src/rmc/mpi/param.h b/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/param.h new file mode 100644 index 000000000..b868a1db7 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/src/rmc/mpi/recv.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/recv.cpp new file mode 100644 index 000000000..4562cd8dd --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/recv.cpp @@ -0,0 +1,150 @@ +/* +* +* 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 "synchron.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 ()) { + + waitMessage (); + } + + int src, tag; + + while (probeMessage (src, tag)) { + + receiveMessage (src, tag); + initMessage (); + + switch (tag) { + + case RUNNER_STOP_TAG: + unpackTerminationOfRunner (); + break; + + case SYNCHRONIZE_REQ_TAG: + unpackSynchronRequest (); + break; + + case SYNCHRONIZED_TAG: + { + RUNNER_ID runner_id; + unpack (runner_id); + + COOP_ID coop_id; + unpack (coop_id); + + getCooperative (coop_id) -> notifySynchronized (); + break; + } + + case COOP_TAG: + COOP_ID coop_id; + unpack (coop_id); + getCooperative (coop_id) -> unpack (); + getCooperative (coop_id) -> notifyReceiving (); + 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-16012008-before-mig-modifs/src/rmc/mpi/recv.h b/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/recv.h new file mode 100644 index 000000000..ad6eec330 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/src/rmc/mpi/rmc.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/rmc.cpp new file mode 100644 index 000000000..34e30a94a --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/rmc.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 "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 */ +static std :: vector worker_threads; /* Worker threads */ +static Communicator* communicator_thread = NULL; /* Communicator thread */ + + +void runRMC () { + + /* Worker(s) ? */ + for (unsigned i = 0; i < my_node -> num_workers; i ++) { + worker_threads.push_back (new Worker); + addThread (worker_threads.back(), ll_threads); + } + + wakeUpCommunicator (); +} + +void initRMC (int & __argc, char * * & __argv) { + + /* Communication */ + initCommunication (); + communicator_thread = new Communicator (& __argc, & __argv); + addThread (communicator_thread, ll_threads); + waitNodeInitialization (); + initSending (); + + /* Scheduler */ + if (isScheduleNode ()) + initScheduler (); +} + +void finalizeRMC () { + + printDebugMessage ("before join threads RMC"); + + joinThreads (ll_threads); + for (unsigned i = 0; i < worker_threads.size(); i++ ) { + delete worker_threads [i]; + } + worker_threads.clear (); + delete communicator_thread; + + printDebugMessage ("after join threads RMC"); +} diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/runner.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/runner.cpp new file mode 100644 index 000000000..67fb3e9fe --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/runner.cpp @@ -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 +* +*/ + +#include "../../core/messaging.h" +#include "../../core/runner.h" +#include "node.h" +#include "mess.h" +#include "send.h" +#include "tags.h" +#include "schema.h" + + +bool Runner :: isAssignedLocally () { + + for (unsigned i = 0; i < my_node -> id_run.size (); i ++) + if (my_node -> id_run [i] == def_id) + return true; + return false; +} + +void Runner :: terminate () { + + sendToAll (this, RUNNER_STOP_TAG); +} + +void Runner :: packTermination () { + + pack (def_id); +} diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/scheduler.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/scheduler.cpp new file mode 100644 index 000000000..617c81cf5 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/scheduler.cpp @@ -0,0 +1,116 @@ +/* +* +* 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; + +extern void wakeUpCommunicator(); + +void initScheduler () { + + resources = std :: queue (); + requests = std :: queue (); + initNumberOfRes = 0; + + 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; +} + +unsigned numResourcesFree () { + return resources.size (); +} + +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 (); + wakeUpCommunicator(); +} diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/scheduler.h b/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/scheduler.h new file mode 100644 index 000000000..f5fc71a13 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/scheduler.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 __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 (); + +extern unsigned numResourcesFree (); + +#endif diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/schema.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/schema.cpp new file mode 100644 index 000000000..b1185d365 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/schema.cpp @@ -0,0 +1,190 @@ +/* +* +* 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; + +static unsigned maxSpecifiedRunnerID = 0; + + +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 ())); + if ( node.id_run.back() > maxSpecifiedRunnerID ) + maxSpecifiedRunnerID = node.id_run.back(); + /* TAG:
*/ + assert (getNextNode () == "runner"); + } + else { + /* TAG: */ + node.execution_id_run = node.id_run; + 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"); + + the_schema.clear(); + maxSpecifiedRunnerID = 0; + + while (true) { + + /* TAG: | */ + name = getNextNode (); + assert (name == "group" || name == "schema"); + if (name == "group") + /* TAG: */ + loadGroup (); + else + /* TAG: */ + break; + } + + + std :: set uniqueRunnerIDs; unsigned nbUniqueIDs = 0; + for (unsigned i = 0; i < the_schema.size (); i ++) { + for (unsigned j = 0; j < the_schema [i].id_run.size(); j ++) { + uniqueRunnerIDs.insert( the_schema [i].id_run[j] ); + /* In case a duplicate ID has been found */ + if ( uniqueRunnerIDs.size() == nbUniqueIDs ) { + the_schema [i].execution_id_run[j] = ++maxSpecifiedRunnerID; + } + nbUniqueIDs = uniqueRunnerIDs.size(); + } + } + + /* 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-16012008-before-mig-modifs/src/rmc/mpi/schema.h b/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/schema.h new file mode 100644 index 000000000..30e061c2c --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/schema.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 __schema_h +#define __schema_h + +#include +#include +#include + +#include "node.h" +#include "../../core/runner.h" + + +extern Node * my_node; + +extern bool isScheduleNode (); + +extern RANK_ID getRankOfRunner (RUNNER_ID __key); + +extern std :: vector the_schema; + +extern void loadSchema (const char * __filename); + +#endif diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/send.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/send.cpp new file mode 100644 index 000000000..cf10b9b6e --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/send.cpp @@ -0,0 +1,168 @@ +/* +* +* 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; + +static bool contextInitialized = false; + + +void initSending () { + + static bool initializedSemaphore = false; + + mess = std :: queue (); + + if (initializedSemaphore) { + sem_destroy(& sem_send); + } + + sem_init (& sem_send, 0, 1); + initializedSemaphore = true; + + contextInitialized = false; +} + +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); +} + +extern void initializeContext (); + +void sendMessages () { + + if (! contextInitialized) { + contextInitialized = true; + initializeContext(); + } + + sem_wait (& sem_send); + + while (! mess.empty ()) { + + SEND_REQUEST req = mess.front (); + + 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 SYNCHRONIZE_REQ_TAG: + dynamic_cast (comm) -> packSynchronizeReq (); + dynamic_cast (comm) -> notifySendingSyncReq (); + 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-16012008-before-mig-modifs/src/rmc/mpi/send.h b/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/send.h new file mode 100644 index 000000000..b1bdc2300 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/src/rmc/mpi/service.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/service.cpp new file mode 100644 index 000000000..df2556426 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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 (); + + :: pack (req); +} diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/synchron.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/synchron.cpp new file mode 100644 index 000000000..12468c226 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/synchron.cpp @@ -0,0 +1,123 @@ +/* +* +* 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 "synchron.h" +#include "../../core/messaging.h" +#include "node.h" +#include "tags.h" +#include "mess.h" + + + +static SYNC syncRunners; /* Runners to be synchronized */ + +extern void wakeUpCommunicator(); + +extern RANK_ID getRankOfRunner (RUNNER_ID __key); + +/* Initializing the list of runners to be synchronized */ +void initSynchron () { + + syncRunners = SYNC(); +} + +/* packing a synchronization request from a service */ +void packSynchronRequest ( const std :: vector & coops ) { + + /* Number of coops to synchronize */ + pack( (unsigned)( coops.size() ) ); + + /* Coops to synchronize */ + for (unsigned i = 0; i < coops.size(); i ++) { + pack( coops[ i ]->getOwner()->getDefinitionID() ); + pack( coops[ i ]->getKey() ); + } +} + +/* Processing a synchronization request from a service */ +void unpackSynchronRequest () { + + unsigned req_num_entries; + unpack (req_num_entries); + + /* Creating a sync vector + adding the created entry */ + std::pair< SYNC_RUNNERS, unsigned > req_sync; + + /* Adding entries for each of the runners to be synchronized */ + SyncEntry req_entry; + for (unsigned i = 0; i < req_num_entries; i ++) { + + unpack (req_entry.runner); + unpack (req_entry.coop); + + req_sync.first.push_back (req_entry); + } + + /* Looking for the sync vector */ + SYNC::iterator sync_it = syncRunners.find (req_sync); + + /* The vector does not exist - insert a new sync */ + if (sync_it == syncRunners.end ()) { + req_sync.second = 1; + syncRunners.insert (req_sync); + } + else { + + /* The vector exists - updating the entry */ + std::pair< SYNC_RUNNERS, unsigned >& sync_req_entry = const_cast< std::pair< SYNC_RUNNERS, unsigned >& > (*sync_it); + sync_req_entry.second ++; + + /* All the runners to be synchronized sent the SYNC_REQUEST signal */ + if (sync_req_entry.second == sync_req_entry.first.size()) { + + /* Remove the entry */ + syncRunners.erase (sync_it); + + /* Send SYNCHRONIZED signals to all the coop objects */ + for (unsigned i = 0; i < req_sync.first.size(); i ++) { + + initMessage (); + + pack (req_sync.first [i].runner); + pack (req_sync.first [i].coop); + + RANK_ID dest_rank = getRankOfRunner (req_sync.first [i].runner); + sendMessage (dest_rank, SYNCHRONIZED_TAG); + } + } + } +} diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/synchron.h b/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/synchron.h new file mode 100644 index 000000000..b9ac7e6b7 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/synchron.h @@ -0,0 +1,85 @@ +/* +* +* 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 __synchron_h +#define __synchron_h + +#include +#include +#include + +#include "../../core/runner.h" +#include "../../core/cooperative.h" + +struct SyncEntry { + + RUNNER_ID runner; + COOP_ID coop; +}; + +struct SyncCompare { + + bool operator()( const std::pair< std::vector< SyncEntry >, unsigned >& A, const std::pair< std::vector< SyncEntry >, unsigned >& B ) { + + const std::vector< SyncEntry >& syncA = A.first; + const std::vector< SyncEntry >& syncB = B.first; + + if ( syncA.size() == syncB.size() ) { + std::vector< SyncEntry >::const_iterator itA = syncA.begin(); + std::vector< SyncEntry >::const_iterator itB = syncB.begin(); + + while ( (*itA).runner < (*itB).runner && itA != syncA.end() ) { itA++; itB++; } + + return itA == syncA.end(); + } + + return syncA.size() < syncB.size(); + } +}; + +typedef std::vector< SyncEntry > SYNC_RUNNERS; +typedef std::set< std::pair< SYNC_RUNNERS, unsigned >, SyncCompare > SYNC; + +/* Initializing the list of runners to be synchronized */ +extern void initSynchron (); + +/* packing a synchronization request from a service */ +extern void packSynchronRequest ( const std :: vector & coops ); + +/* Processing a synchronization request from a service */ +extern void unpackSynchronRequest (); + +#endif diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/tags.h b/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/tags.h new file mode 100644 index 000000000..67a7a71be --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/tags.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 __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 + +#define SYNCHRONIZE_REQ_TAG 1000 +#define SYNCHRONIZED_TAG 1001 + +#endif diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/worker.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/worker.cpp new file mode 100644 index 000000000..ee88cfb19 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/worker.cpp @@ -0,0 +1,139 @@ +/* +* +* 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 */ + +extern void wakeUpCommunicator (); + +Worker * getWorker (WORKER_ID __key) { + + return key_to_worker [__key]; +} + +Worker :: Worker () { + + recvAndCompleted = false; + taskAssigned = 0; + id = key_to_worker.size (); + key_to_worker.push_back (this); + + sem_init( &sem_task_done, 0, 0 ); +} + +void Worker :: packResult () { + + pack (serv_id); + serv -> packResult (); +} + +void Worker :: unpackData () { + + taskAssigned ++; + 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 */ + recvAndCompleted = true; + wakeUp (); +} + +void Worker :: notifySendingTaskDone () { + + sem_post(&sem_task_done); + setPassive (); +} + +void Worker :: setSource (int __rank) { + + src = __rank; +} + +void Worker :: start () { + + while (true) { + + sleep (); + + if (! atLeastOneActiveRunner () && ! taskAssigned) + break; + + if (recvAndCompleted) { + send (this, my_node -> rk_sched, TASK_DONE_TAG); + recvAndCompleted = false; + sem_wait(&sem_task_done); + taskAssigned --; + } + else { + + serv -> execute (); + send (this, src, TASK_RESULT_TAG); + } + } + + printDebugMessage ("Worker finished execution."); + setPassive (); + + wakeUpCommunicator(); +} + +void initWorkersEnv () { + + key_to_worker.resize (1); +} diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/worker.h b/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/worker.h new file mode 100644 index 000000000..5576fa4f0 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/worker.h @@ -0,0 +1,85 @@ +/* +* +* 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 recvAndCompleted; + unsigned taskAssigned; + + sem_t sem_task_done; + sem_t sem_task_asgn; +}; + +extern void initWorkersEnv (); + +extern Worker * getWorker (WORKER_ID __key); + +#endif diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/xml_parser.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/xml_parser.cpp new file mode 100644 index 000000000..052f4c1b3 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/xml_parser.cpp @@ -0,0 +1,101 @@ +/* +* +* 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); + } 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-16012008-before-mig-modifs/src/rmc/mpi/xml_parser.h b/tags/paradiseo-peo-16012008-before-mig-modifs/src/rmc/mpi/xml_parser.h new file mode 100644 index 000000000..b54fbeed9 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/test/CMakeLists.txt b/tags/paradiseo-peo-16012008-before-mig-modifs/test/CMakeLists.txt new file mode 100644 index 000000000..5bfa40daf --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/test/lesson.param b/tags/paradiseo-peo-16012008-before-mig-modifs/test/lesson.param new file mode 100644 index 000000000..eb843c65f --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/test/schema.xml b/tags/paradiseo-peo-16012008-before-mig-modifs/test/schema.xml new file mode 100644 index 000000000..9b8bf316c --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/test/schema.xml @@ -0,0 +1,19 @@ + + + + + + + + + 1 + 2 + + + + + + + + + diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/test/t-peo.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/test/t-peo.cpp new file mode 100644 index 000000000..a0742284b --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/test/t-peoInsularPSO.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/test/t-peoInsularPSO.cpp new file mode 100644 index 000000000..cf8830459 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/test/t-peoInsularPSO.cpp @@ -0,0 +1,131 @@ +/* +* +* 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-16012008-before-mig-modifs/test/t-peoPSO.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/test/t-peoPSO.cpp new file mode 100644 index 000000000..936f0b04a --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/test/t-peoPSO.cpp @@ -0,0 +1,120 @@ +/* +* +* 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-16012008-before-mig-modifs/test/t-peoPSOPara.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/test/t-peoPSOPara.cpp new file mode 100644 index 000000000..275bf3b21 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/test/t-peoPSOParaIsland.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/test/t-peoPSOParaIsland.cpp new file mode 100644 index 000000000..0d6690da6 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/tutorial/CMakeLists.txt b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/CMakeLists.txt new file mode 100644 index 000000000..9e6d3923c --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/CMakeLists.txt @@ -0,0 +1,19 @@ +# +##################################################################################### +### 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) +SET(FLOWSHOP_SRC_DIR "${MOEO_SRC_DIR}/tutorial/examples/flowshop" CACHE PATH "Flowshop source directory" FORCE) +SET(FLOWSHOP_BIN_DIR "${MOEO_BIN_DIR}/tutorial/examples/flowshop" CACHE PATH "Flowshop binary directory" FORCE) + +###################################################################################### + +###################################################################################### +### 2) Where must cmake go now ? +###################################################################################### + +SUBDIRS(examples Wrapper Lesson7) + +###################################################################################### diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Introduction/Technical introduction.pdf b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Introduction/Technical introduction.pdf new file mode 100644 index 0000000000000000000000000000000000000000..fb6d5eb58325e3203ca33637d1c8a37449836b9f GIT binary patch literal 298281 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

l7q`Vo## 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%0Aor?wC&84jq{H#>h{4GycaSd=+gf+|-vy94 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

U;tgRz<^_0u`em3h3<^OAq}@*F39c=U+! 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 literal 0 HcmV?d00001 diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson1/CMakeLists.txt b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson1/CMakeLists.txt new file mode 100644 index 000000000..d140a9dac --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson1/CMakeLists.txt @@ -0,0 +1,110 @@ + +###################################################################################### +### 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/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/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/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) + +###################################################################################### + + +###################################################################################### +### 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(pso mainPSO.cpp) +ADD_DEPENDENCIES(pso peo rmc_mpi) +ADD_EXECUTABLE(ea mainEA.cpp) +ADD_DEPENDENCIES(ea peo rmc_mpi) +###################################################################################### + + +###################################################################################### +### 4) Optionnal: define properties +###################################################################################### + +SET(LESSON1_VERSION ${GLOBAL_VERSION}) +SET_TARGET_PROPERTIES(pso PROPERTIES VERSION "${LESSON1_VERSION}") +SET_TARGET_PROPERTIES(ea PROPERTIES VERSION "${LESSON1_VERSION}") +###################################################################################### + + +###################################################################################### +### 5) Link the librairies +###################################################################################### + +TARGET_LINK_LIBRARIES(pso ${XML2_LIBS} peo rmc_mpi eo eoutils) +TARGET_LINK_LIBRARIES(ea ${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-16012008-before-mig-modifs/tutorial/Lesson1/Lesson1.pdf b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson1/Lesson1.pdf new file mode 100644 index 0000000000000000000000000000000000000000..5f6b05a6d67145885312a63c52b770197ea83aa6 GIT binary patch literal 336647 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

TvkP?f< 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 z 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%0D-asO3~Yc_YmZ$H-9uX~TW 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 literal 0 HcmV?d00001 diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson1/mainEA.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson1/mainEA.cpp new file mode 100644 index 000000000..7a4169e6c --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson1/mainEA.cpp @@ -0,0 +1,125 @@ +/* +* +* 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: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include +#include + +typedef eoReal Indi; + +//Evaluation function + +double f (const Indi & _indi) +{ + // Rosenbrock function f(x) = 100*(x[1]-x[0]^2)^2+(1-x[0])^2 + // => optimal : f* = 0 , with x* =(1,1) + + double sum; + sum=_indi[1]-pow(_indi[0],2); + sum=100*pow(sum,2); + sum+=pow((1-_indi[0]),2); + return (-sum); +} + +int main (int __argc, char *__argv[]) +{ + + +// Initialization of the parallel environment : thanks this instruction, ParadisEO-PEO can initialize himself + peo :: init( __argc, __argv ); + +//Parameters + + const unsigned int VEC_SIZE = 2; // Don't change this parameter when you are resolving the Rosenbrock function + const unsigned int POP_SIZE = 20; // As with a sequential algorithm, you change the size of the population + const unsigned int MAX_GEN = 300; // Define the number of maximal generation + const double INIT_POSITION_MIN = -2.0; // For initialize x + const double INIT_POSITION_MAX = 2.0; // In the case of the Rosenbrock function : -2 < x[i] < 2 + const float CROSS_RATE = 0.8; // Crossover rate + const double EPSILON = 0.01; // Range for real uniform mutation + const float MUT_RATE = 0.3; // Mutation rate + rng.reseed (time(0)); + +// Stopping + eoGenContinue < Indi > genContPara (MAX_GEN); + eoCombinedContinue continuatorPara (genContPara); + eoCheckPoint checkpoint(continuatorPara); + + + /* In this lesson, you should define a peoEvalFunc witch will allow to initialize : + * + * - peoSeqPopEval : using to the sequential evaluation + * + * OR + * + * - peoParaPopEval : using to the parallel evaluation + * + */ + +// For a parallel evaluation + peoEvalFunc plainEval(f); + peoParaPopEval< Indi > eval(plainEval); + + +// Initialization + eoUniformGenerator < double >uGen (INIT_POSITION_MIN, INIT_POSITION_MAX); + eoInitFixedLength < Indi > random (VEC_SIZE, uGen); + +// Selection + eoRankingSelect selectionStrategy; + eoSelectNumber select(selectionStrategy,POP_SIZE); + +// Transformation + eoSegmentCrossover crossover; // Crossover + eoUniformMutation mutation(EPSILON); // Mutation + eoSGATransform transform(crossover,CROSS_RATE,mutation,MUT_RATE); + peoSeqTransform eaTransform(transform); + +// Replacement + eoPlusReplacement replace; + +// Creation of the population + eoPop < Indi > pop; + pop.append (POP_SIZE, random); + +//Parallel algorithm + peoEA Algo(checkpoint,eval,select,eaTransform,replace); + Algo(pop); + + peo :: run(); + peo :: finalize(); + if (getNodeRank()==1) + std::cout << "Final population :\n" << pop << std::endl; +} diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson1/mainPSO.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson1/mainPSO.cpp new file mode 100644 index 000000000..ac53c2970 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson1/mainPSO.cpp @@ -0,0 +1,142 @@ +/* +* +* 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: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include + +typedef eoRealParticle < double >Indi; + +//Evaluation function + +double f (const Indi & _indi) +{ + // Rosenbrock function f(x) = 100*(x[1]-x[0]^2)^2+(1-x[0])^2 + // => optimal : f* = 0 , with x* =(1,1) + + double sum; + sum=_indi[1]-pow(_indi[0],2); + sum=100*pow(sum,2); + sum+=pow((1-_indi[0]),2); + return (-sum); +} + +int main (int __argc, char *__argv[]) +{ + + +// Initialization of the parallel environment : thanks this instruction, ParadisEO-PEO can initialize himself + peo :: init( __argc, __argv ); + +//Parameters + + const unsigned int VEC_SIZE = 2; // Don't change this parameter when you are resolving the Rosenbrock function + + const unsigned int POP_SIZE = 20; // As with a sequential algorithm, you change the size of the population + + const unsigned int NEIGHBORHOOD_SIZE= 6; // This parameter define the neighborhoods in the PSO's topology + + const unsigned int MAX_GEN = 150; // Define the number of maximal generation + + const double INIT_POSITION_MIN = -2.0; // For initialize x + const double INIT_POSITION_MAX = 2.0; // In the case of the Rosenbrock function : -2 < x[i] < 2 + + const double INIT_VELOCITY_MIN = -1.; // For initialize PSO's velocity + const double INIT_VELOCITY_MAX = 1.; // ie Lesson 6 of ParadisEO-EO + + const double C1 = 0.5; // For calculate the velocity + const double C2 = 2.; // ie Lesson 6 of ParadisEO-EO + rng.reseed (time(0)); + +// Stopping + eoGenContinue < Indi > genContPara (MAX_GEN); + eoCombinedContinue continuatorPara (genContPara); + eoCheckPoint checkpoint(continuatorPara); + + + + + /* In this lesson, you should define a peoEvalFuncPSO witch will allow to initialize : + * + * - peoSeqPopEval : using to the sequential evaluation + * + * OR + * + * - peoParaPopEval : using to the parallel evaluation + * + */ + +// For a parallel evaluation + peoEvalFunc plainEval(f); + peoParaPopEval< Indi > eval(plainEval); + + + + + +// Initialization + eoUniformGenerator < double >uGen (INIT_POSITION_MIN, INIT_POSITION_MAX); + eoInitFixedLength < Indi > random (VEC_SIZE, uGen); + +// Velocity (ie Lesson 6 of ParadisEO-PEO) + eoUniformGenerator < double >sGen (INIT_VELOCITY_MIN, INIT_VELOCITY_MAX); + eoVelocityInitFixedLength < Indi > veloRandom (VEC_SIZE, sGen); + +// Initializing the best (ie Lesson 6 of ParadisEO-PEO) + eoFirstIsBestInit < Indi > localInit; + +// Flight (ie Lesson 6 of ParadisEO-PEO) + eoRealVectorBounds bndsFlight(VEC_SIZE,INIT_POSITION_MIN,INIT_POSITION_MAX); + eoStandardFlight < Indi > flight(bndsFlight); + +// Creation of the population + eoPop < Indi > pop; + pop.append (POP_SIZE, random); + +// Initialization + peoInitializer init(eval,veloRandom,localInit,pop); + +// Topology (ie Lesson 6 of ParadisEO-PEO) + eoLinearTopology topology(NEIGHBORHOOD_SIZE); + eoRealVectorBounds bnds(VEC_SIZE,INIT_VELOCITY_MIN,INIT_VELOCITY_MAX); + eoStandardVelocity < Indi > velocity (topology,C1,C2,bnds); + +//Parallel algorithm + peoPSO < Indi > psa(init,checkpoint, eval, velocity, flight); + psa(pop); + peo :: run(); + peo :: finalize(); + if (getNodeRank()==1) + std::cout << "Final population :\n" << pop << std::endl; +} diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson1/paradiseo-peo-lsn.doxyfile b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson1/paradiseo-peo-lsn.doxyfile new file mode 100644 index 000000000..dcbaf631a --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson1/paradiseo-peo-lsn.doxyfile @@ -0,0 +1,242 @@ +# Doxyfile 1.4.7 + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- +PROJECT_NAME = "ParadisEO-PEO Lesson1" +PROJECT_NUMBER = 0.1 +OUTPUT_DIRECTORY = ../../../doc/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-16012008-before-mig-modifs/tutorial/Lesson1/param b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson1/param new file mode 100644 index 000000000..730f547e1 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson1/param @@ -0,0 +1,9 @@ +## miscallenous parameters + +--debug=false + +## deployment schema + +--schema=schema.xml + + diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson1/schema.xml b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson1/schema.xml new file mode 100644 index 000000000..f34107574 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson1/schema.xml @@ -0,0 +1,19 @@ + + + + + + + + + 1 + + + + + + + + + + diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson2/CMakeLists.txt b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson2/CMakeLists.txt new file mode 100644 index 000000000..f00f4a277 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson2/CMakeLists.txt @@ -0,0 +1,106 @@ + +###################################################################################### +### 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/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/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/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) + +###################################################################################### + + +###################################################################################### +### 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(ea mainEA.cpp) +ADD_DEPENDENCIES(ea peo rmc_mpi) +###################################################################################### + + +###################################################################################### +### 4) Optionnal: define properties +###################################################################################### + +SET(LESSON2_VERSION ${GLOBAL_VERSION}) +SET_TARGET_PROPERTIES(ea PROPERTIES VERSION "${LESSON2_VERSION}") +###################################################################################### + + +###################################################################################### +### 5) Link the librairies +###################################################################################### + +TARGET_LINK_LIBRARIES(ea ${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-16012008-before-mig-modifs/tutorial/Lesson2/Lesson2.pdf b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson2/Lesson2.pdf new file mode 100644 index 0000000000000000000000000000000000000000..134355409d72a50927f389869bb45aba9a14711b GIT binary patch literal 330101 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�WLWMv%Y??I4>ozaoBhl?ZNUljY63VL&qK(Lew(_E|H2dy$q=2b+3g>3LOQqv z?}CV3zY2Uz9WFKZJ%IFdtu`)$G+Y)fQox92F^0brwVNZ3XgiRbQkg?A~63H3Hv@Y4yx5Xr|C(T%-)43(2ge!>cy(?wY6pH@+N7 zU!)DhWbI~&?s_@WIQ?XR!G8_BOu))3qnWCI3U+PCsD=b)$0O6CMhR$gCZ-%jls~^q zq5L)4*=Nr1*4@pse_Mv2$f^auXwtHuoGEpJT%HTBW<}@yLZltnS{832@iNHD=PyW@klR;60qMm)(I%bC!FJ6-%+R=3XO)^Rf_nHF&8uhgV zQxn=9R$P0a!>wJ|y;O0CV8t{Sl5lY9-t^$Zor7e9!#Qq!9^MT|3kDZ1h}M#^zC~Ig z&XcoLJ(^lm%GvNwcMAK5u;g32H57}U_xi-Ktfk&ZA6XAJv}Nk651Acp(M5K2Wq@0C)vyJ`rErT0^+L)VKtr~_o2_{qv9%-x<}X?u4J)XmKv~E25^nnuI6Zn zkNf5NhQ&iU7Du$an-=4t~5&NmaMtf4y{lHaWR^!K%asQirEI#M%PnhOq?F~qh}wCYEcl326Y^bgl1G(E1wB~2i;9G= zh?VcthuAINFP{!wIb7s36SY;%+coso!y(Gu&aotLo{W+YpE@Q0zxxV{rINkWea8-) zBHb{ZUwQXD`N-~l^Tvb{1am%^*0;=Vs8RM%jUS9MveO7A9n?2T$AO)7X&462UXBgt zRibOO!HoSsfk%ke7b$Dp9m9)8?-J(re!aEH6t&U4$(;Tu5&p=oNm$Zcf>R(n|1ra~ z4yPbnjHjeE5)5TD`oxJnj&znSGp{ed)!2!Mv!tr<)m5c5tvc$0{>k|!VLk)%_V|!6 z50SaJ3E@fN)Z3|`lgBitst`3t$Ij$QlF+`=sqkr&A!DLT;k_C9CNb3N8MUEZn>BSI zv751|tsrjaVzzrZm~ui}GE_rLQ@zdAHkN;jj-@-1{z4n~3VX>|V%RG6VzR-s0#Mkh z9ut~UOA_})(k6XPbV^aO_Gb}uLP=U|Y=m2y(z+7Mm_D*my%NJ&;>xwryb|L!z9QcO z`E}+ldYX2OgA;YBxyEJBcvfQ*e}jYfK+MS#sGT~uaw9KWvd8q9ag;qduS%W%)R%XuHw$xn0l^hO`99-Eg!(Q^^R7?%{si8x1=ZCxQuMy*mn5?7 zLS*ZT?8OE71?UN*+72XrjsW{w`8LJ7l=qVtc#2@xf&2Qr>MX%TbZ6<|IvlL4b~_2? z8Vc^+1N5`cFH5<%%f>(J(mzY>nn>tthLzp1TAHIC2DY(hjyJvHr&SM}Nne-xbrtG+ zx1V>-b~pIXhA+zl3aG~{m@ONhEA{J)Gs^g@abFwNz9wqdSw9<%>j1DQ&1)E_&k?^W z&Ff^aH|l2%Fpq~?obrdKI^U;6Iz&6x^y&omG2}`On_qnYP;_9|>**pXS z+i03Cj6&^`z=#yL_nJ@kh-{CB3MpM^eWIiTyRZVethb8R^?NSX*vOl%{MV`yo3>QS zEVsU`VI8cQ@2Egox3tK#4EUv;ZIde9k>agC&)6S`zfRv1(SAW*Cz`C{rYZzlmrJO<-QJAZ^(IAiuU{B-vu%rLi!E{@odeYv zceSNiOYJy}ND}c6ZGA#J)D_WE=ho=H%dClVzZoz78TgmP$M4 z;Nuy<4%2=P)XChCCM-SF*yFW&#-PU81;%P}5ox6+{0U&VP=%UuA>aw9O4*et(%YNg z=LqQ+{3zne5-3omM9xPRy%ip^HjwSx*iV;>0wtqopM*6=YjQ;|D|ANe-{{fkW z0OtBCPKx^04u9C--#}*iKNZq2v9SK(f`52313fF-|Av`47}@_FGc&RLJ7)gt!2g9a z|3w!S{tY)WGW_cf{`na-BNN;I#hK;!&HL!#+s{xqNrUm#M`qAN1-pam3#{?*B`s9t zBn@cr-rp+s>jQC#jgvF1_BS~BAKv%haPmK_`QLCd zCH1mthzth|AwWAp$IOW%@@t$J zFh@|cx2sZkQ)`Y4U`H4k7=U(t;*zy?!Kq;h)PuEx07zuf0hYr-G}(x#iYv$^qc!3S z))nH#715S%H&30HTi&qZtb?pWiD5N?|nWHxbKp2)!RZb>5V$SUPj<$k#Vr`1yl`t*F23Z)YSC z2sf&`cz~hsn5^si?t-^pX2pKCS#&oVbNs{$I69~?lG6lqX$Bn??X)mfUPxTTv+22h zfB8*X-@IwIrUWrH1b@4pC}CW?BpHPX{!p~+MOjhAe4kQr?ExoXk5MjuZQ%V)lG43V zUtNCY>wwp+U_LZ5`)KDw@E-j&Ll2gZe9mz?FX_(dl5TrsW`c^ba971nzHD#Jb)%o~o@l9e$UB zQ){o&Su+>xKCsiYE&ijVn}}!QY*%=k*vmg36bJ9~ICjsY*@*tIY?6cB`6gmk%}o?ZfCI4pTEwJYsQjP zDvHfDydFznuEwIA(IqKY)h_#dV6DY zm6V!S6C_H;W0VTGj|c4^R1`!;lZGn`5@dq4l`UiIfR&rgDWj}8&Y>+iq=4BhInE96 z0Oy7fZ{#L;DCc>xo=RZW%a1twoG;^pHzrw9%9d5t((Tv#{LJB&NXlcZ%5-avVCEm% zYiUE2U(+fbW^)I69UTg8FpcM<7Uy_B!`URZIMukc*5t#;h~Gv<8U!@-b$wN7wOe*Z zVU{FRca!Kiv0HO0Ma(;_Lg^l=%+B#T*23R}i;KEe#{t1OqlC~f~f=G?X_b6yL2 zaj!BU(v3mQh7Ay-G3+FV0&feGQb`%1Q?di8deL5E)KBwIGwQ^tn()T8@#rOxG|k;B z_EQ?6rIN@{B3mNIR)wL_i-L))A(qmDPNQ83G3N=;reKAT_k2XC+QH?#4nFdJ*gUY zH7ahK>dCv4&qq4)Thb--{!)q${nY4&e5d=~$oztMi`A@})kPvd)SRNc zn)G{|AKJrQG^B0!UuCqyUpLkx38nH$h7fX9;{`n)PuQhF95Hq_8PP#lf-r|H&Ku9M z;oMl#1O?^rxFb9`XqBT)t!mc&vUl8_a#wwPcUS}o6BJ|^3UUqVvloY~xYdm!Fa&OH zLp|HhF}G~{*ku7tCg8^2m2}XmL{nF*Yx$ zmZDUP)-Nbha;OmSxmTJm6dPp#0ZK=!IY3oaEo5UlMpD5XNNW**d99^}EK*s>u{($T z%6YVAqOx;Y!y~;|d9wM^#9~FE;!i4B>1b%yT|@Lnp>{PbmnCW{Dju4G=Js_QbV7c+ zh|3(c?zTTcmvLSkKD2fVJzH}Rc{|oVPcdd2(v;rbCrsKVSGUksE-lAxH0$0^Ne}XA zQ%l&AsjjnNGBkT%xq^nA&<@kwNqj_^}7Tqe=ir9ncrRu0==S}(= z^<|!Au9di`YJx@5$94B4YZJs%hp3AEC#z^*7QyB=jjYq=9|$zcXNi0lvsv7W>(-sx z+f~!+4%2vRA^g;rBTzS>R54!BF`NP+|B^D2id&%z9aiKtly~Ihq(|NSk{2^JFpWLIb!f9R0;e9ZB9&?Ka$xq|+wUbok z(^j^Z&M`}l!0+~Pvx=*(sXRI+GMsrwok_-iKov=0yF45f5gwd`l*u~en+b22IWLmha1CdY|fRhiS{zZhqni~TJRlX}~u-i!5H$w8r)dG<@N7pA<_ zO|qAI^s~wLvb6fhi3JsCAXY`K57hHW^JUUf^Jw!mQc>NY(T4z9fvLq+uv6>vlvhsK zV+}}HUE+fUyVrE-^#ViI8Gc~>Re2BeMQ<#88Ucgkv-p>*__w`dk0mGD*!d*?Z|j^I z0**^zg-AcL{JhlHsIjwJwil)n5eDl+r{#CAvx+Kaz+{{uW$WQxJ0DoG!d86^>}v3M z%IB|MtSYUie+gONZxVfor4>Cgee~a2J#xJWiy8v-`k3Z5Jz~Am>Fej;y1j=~cj`W9 zw&dj<&K15D3a?GK)rRKm_*vnGr)T;sRvjOAG^Yo&myyOSYmL=ITZ<__nib?}#XsR_ zL_Xcc<>k-wFzS6B`AFeS7jEGK4TNlJ(=mR(E@xNss(!+!FKG&RZu%_i&(W&bgSvPDo6@l*>f}xH3d&OC@FKw^m z_&=WNNK>RqLp|Cu^A)v_Jy;@27@RQy?)md7SlZ<%A2sZY+k&$FnCKcg*fYWnO2iHNAiJSQIJArV5w`N)~`RYWQLV}r;+NBfe51vsOm zd4`ObE2x@u6A#c521tcVk))Klq+_X)*t%Pl`6g8Pda!4;Ba`CB(A-hPHIT?ln1THPbOsL(L{i3+?!)6^&WS7MqEO zaDq6ash}UtpiU(MntvXh&@%lVftV5{s>494WejvU1^=E7 zQ&0laFLq-E#y3UohYm?Qh=DOvPT3?v0XTv9Q# zGyQVw9;j>qk0^DTICN4D{gaaC7yS|Y%tQltV|#y-LJ+u0O1S1^nDNJFhduGxnb(#f z%?yn;Mt?)bonk&Rmx+)wRda=c-j6vlr>o2CBn5@%X;DKQ7Re4fHvd^i$ixwF4xE*RSJScVEpQq_3 zBitEd92u?Zj;>NtsDCg7^;sRGa`}w3M=&J7(Xf=Vc4_}vY3B$26JpeBd)HRu91GY? zly&^;9e3y_d6soBBAa!DZ2(?@dkxA#8F8zAuM zU13|lzFpW={JxnD#dLK9YzXb>#}F2}LUrncGoIn#5In!Tzk^v5!Sv>5fPZ9LU;B>q z49WVfA*EiF;1xkMf)gzA42Md*@qT_bE?{CozjS4T22XS@@NlvM$@xSI0=BY!ZA@dG z-TTnwO?p-q;bl(Go?jq08#h>hr$$E_!dU5Ma((!L$PeyNUEcCN8PRYa9iDI?0&gGN z)gU9_I{}n$ZSB8B0!X*d#s7fb&>~ycH_c3l`GOL>tPHX3A0hg;Mat`s5{_2XFLCTS zDaY(^^pni*6M{Ku@`kv(LPq)vXx=~ub<>JlTK#bb!6?9hboSu;?6nOn1BERF$E=^| zpeZe>r)?3l%czQLQEYH&cUw-E1yO3{01dLJwnK_0FQxT9OWmrn)o<8ewQAPg<|pdd zC1cjMG1Uq|Nc~eqmPR4DEMuIHt$S(UkGQ>1QmkR-#nkekR_$Ys#hL))`XU50A0oH2foNOnX z51qQS*Y9}Mt>3(bgI@0#&VoqZ08Y`4A@w7tb=u95dx7csV^U}^GvH)xQmBv-YOWzO zV6>m>7waq0abn$cq!{F4f3NVgky`$8rRX+c0}9jrP4tx1AnmF{deW#{X40=eYWXHy zG;#55Kw4vR`*O{&?AJ=saO0xAJ38zXAa4kTUH33K$uPOQ+&;=r#guPr-W^g@NwQO} z7@334Xc^H+nTHDr3T7X}d=nPtI57!|H)nAQl$%I+OM<`V9&gj;+$0baGe+Db%Z{S| zS%wyn`6^CBX}R&|9MYmS>XXr=yl;q0@H|g8uslakp$Od}0}yuu(VcDYL0#|KbBXbDd3dLCf=5?qI=HSz^J? z#gChEe;6!Y+#+@P5F{`a`rJxJ@_C#wu-&={U@wh}uo~3d*O)lW?#4H)=yK^3MSrqJ z%u|IID}Wmzi&ZEhu?@K3w&UrlgRw$mp*excVHg3k#JT4c@Y?}ic3NxWa*$f7z6jH*u!O*&c>jW{XYw8Q}*0V+%Oms3%MXBaEG1T zv(=9_6h}LCB#*MjalmSZEIABHK~*lAg4hI!{7t?|OjOj5d(tsuT>6fvE|3t6USTHc zIiDZpG^B;Wx1}(R*BFm6k2hhKkPf-UUb5*g()W~5NY1R0U0Ae=Sy@IVJ)Ir8;(6bo z<#JHaO{9K-tyGTIm5zc%-81sZg3r*d{PpIC;3Ak1N$42z`;*b0(N=l?#^z8{MSNNXE0jAI=oP3ggv87`-Ddb2eVD^2$fPJ)anFrGR@*)BFeChxzBWUK;n}aI z)M+kEL_AtXXC=JpPdn2jxjJ?CTN#oo3cRKCh{!Z~Uq>cq@&+&TraA#VJM6ycZv-vw zJh`TsdB#4!Bc@nLpB;fb%W`39fT8cY7Yxs)8;`adR95aMBgS<`CA(!%o z3V%U^PL1#~I&J#yS7=Tgcm+;>rv+tTkbB%9(zhY==0}FxUnqTWE&X{F7M1qO7Ur09Cc_(s5~n>0 zj<|zGDTZ9Li|=WQiziF+@>4NQvYhfK9+ z8%8F7OAmW~8*a~2NK2E@QW>TW8#o@}B#x(D#|$|-M7WM{{(eB)$~-7YIPy~4_bTdL z(Hc8onJ-UyEeWB2%bc#NC7ZIX5YFtji@UF7vU&D|0rOZk+t5ffGM;*v;nAaT>!OTs zoci}(a%YI+ToB zIm#q|kK9Jg&uO>!dSDNauu?1sn>d*CTfXWW@QHA37#`C%43=3D6m zW41>58jFCiYy)c75qEU`MyT5LjnJ~OHzQWj%*S!T%Ry@J#YY^O*x-BJh0M#;`03~7 zEkUwBdVAzA+pT>tD<&p}R>?BBVH0zQ8$3U2t|TuC=`2&@~* zE{R(5pq^y4J9PjoD8=Hx|DCGG7H2p?2kPp_gMlqf?T=oZ9zDpMVMH65vyM%+ zcBPdOkG|_V50I^W1Uji&1VCs&32+f_T3)o;7ACkDyP%(ksaj?RJ{bqe9qoCK#ExdZ zJcnN+^5=&>hxUe9uaDw+H%Un&wEo)BL{I-+6S_ljZ}ZZt^WrdsGm! zu}{>k0Gh|u_eeqCcTyGRny4)^mq>4uz%eg4l&}D;9(r-@K?cd+P zR28j!2z#5Fo~le#K2Y$e&BoB zgIvkJzuVodAtLV{uCZC#ri+=~{ zTlN-yobon4`jzkYYX|8a`&G2u$a7W~Pd)c}nS5dp2mb-BwP(1E+4OM~B3B7+PEgO< z^wn?(+SW_v)%LFE=By#+&9z`q24w$XZAr4ji%qpwo1SxjN76aQp0YA*j-GO@8h2FI zm`~a8w*dO=7zglE)sau@;5yXGW@Kyx-m?|jrvcu_0KumV&xcOA+OrDYXQ?-aZMP__ zzcFcCa9^q;Zb#N{_yIeLAvPR05^$awe$O~B1CZTIy&lc1KRtwBL?FA1V6L;hq}Hr} zYrj#)FO*%KYdS58CD+*eT%1N(WL?*L+qg2}cV)Qbb~XzOMP80nn(Q4=VoLfC$5n6Qa@;@$;y#jq&S(ykfUiKPD)e=*{w|9qGj%xz!^aSs@r% zsk~OHX1ZCL*>(0^m$;!QAPwTU>ca)vb#VL+)RMfK4|tkNnf|n6i-V`hw6s%G~ z&$Oju;bi;A(b+iv8;(xL@=xde--Ye}pCtW%1*`u9N&oMRZRY}_=&)aCUL=@~Di^UNP#JhU}lx!5@3+CK@ZwyzO%~Y|)bwQMHhdMH< zL8We?pv@A98%U0ou~To8cK*lM9^0sL2rO#~sIchYR<@4*Q`C{*%*TuLgu@DMAkqGA z*^cHC@ywChE3Sn^TpCQg)F$;GWBX*ig}dmVu|0N2`J%z65N+4?UySYFX#UG75k&fr zJvvQXZ$e&Uv57`X7-FhngLto}T=$@99BG7ch`jg6uc7JY9s&kA9z&ZyTrC2F{VTeVuP3=CHX(VOHI?kj)|yju?VQSqd9ezQ46Xex^bq=@CIz3Tt9zy?>x70dDL`0X?;KX2rO@_>TLi; z-4_FY)TgMSuXMUS%vJr!Q%CAQnpb^PLsUJt$@?T0*0I!_x+~YkOpida31pI|ud$>R zX_>JJd{_Pv^=Z`Buo|cKkyC(-BY>SPPaP7CRHg;-%w{Xl-dXNFb>VA?zbOFsT$NNk zzej^UgGq{pFLqrKzOs0smW2-N#=WXq8d9C6dG5-Fdsg3l5|65=_D1Hu;}dT4DVnh` z&tl8y&<(6>+aW513FL=^`YZ`4{&mgO51TJlHFx$vkPTTdc5!&QZ*hB%_yZ3e4eu{J zJS?FVE-I7r=I=Pg{Q`r(`+Jl!GO3B2TxR2oW(y`{8_G%x^DN9J)8oS5HDBkV|Jw8M z1;AIBmm7jMd|UkrP_qJ#@o-nd81}4QxJ(I!y==DwyZg27NaO<5FemBuMDki7E)7_; zM|TtfTtVA{n6n%s!naT$RvSR-LfEV6J~#YR5;0D2^}LZ=WZzbVWyd^t zJe@XA-w$dZY+C>@VLhFxf3p}!?3 zRWMN0R67W}%AC;?LN>i0PNlK56g@=OyHlQ=J?T0kba*5avoMa5C&*oj5!851p+>E7 zdc)C9iTu`VJ#Z}r79b6Qo`B~(-!*=5CSiGpSK;Vb0BefS4!^T?+)O@lmy|VNhj5RK zH)4it?8Xp3C(1c5fRP1^GaxpCtoMw*QEru(uoOS~wjW_0<_4SN2Hcu^eI#l3()W@M zSR7GUAgV$7t2LT^zXa5#P%GvvkRY&gu7O$+2pyuBxa1nyV8j)@c1>U3-N@+ZxfrTl zp=iVxd>8G;s>Rdu&0iCWh=xIcDvnRe{>ZeA@iiC2_hIU}nAu5ULD_6rNTbh^TqI&5 zgv@%1?*MAMos=;lUQeGXeJzxz0<(6Ym8LX8Zc zMd*&xixNdM=YZwC5hRir6ewp58NNfNHqf*2MComxvycp5vgPLly^r#e`1R#Nc$0VF zb{gq;rRjNt1i5QlDxE%q>HiUBik7ZVNKSO^Yb<|l?38kB?HQd3&z$DOLdT2JHc146 zMYtnT*XjOv7NxuIq^zV=IfZ7O4rBqyhjL^@>bS0A@!H9_rk?Cy@(_EY=z8smK3I*!y#UAMzEYa;tic_{~|rZVe!Cy>qd2SjQ7;TM&t(hinwZjBBEJ@#fwkdqgJ1 zo$IpXiXV-;G9_7DsBwWxZIF1fA2v`mYAEVkON|34r|vGj-d~UipH@-L?2veqbH~)~ z@jO45`^u}z$YHgArbo%~GP9p=h>PQd_V~lsEbYVNa}#E;SYrv`H37}$HWb=*W~f_> zOn>}+wB?P{K%AB8W&FZaXy_TaVo;aC0F62#O7*cPBhI3}{Q(S^;vw*~9ciku@$$Z0 zrn~FwuzBo!)}7J5zDm$d`4V~iDZGrT#YS0^B`I z^{RmO;(I@Xj#19I{CXyczw*M6hvMY(?fLN{kqgjs(H%XRyK$yU?=$!i}v=)KcM)Xo` zby|12ZCOhCZ)-5(Ce7XFP)NszXJH2aA*28SLX%I8XoEk7{rWK+DZ-?~DwoP>Cfv#3 z#`Y}O_vRFllhtJdvH>ool3i-mrcyW!RySLxDMA18U6?z4R~j9&JDmr@L%-R(vh*D&DMt*S$TW2&2$V~ zTj3f-1?$^z&7WuCwznG1=U07vSx4dYC!lUMFyULj2Sgz5W_WN%9tb?1EVCfYY6VeeeqM zsu!;!(V7!?C0TXNE)3_rBkq*X819%dsEEdt>BfmO4TFxlBh&hJ-9|gEf?pniRP4Au zFK$hZUkxL10pNvmg%Q+)1o}`5gFHbQM5uFy4acF~&$<$j`O4P22RrN>s2uBg9=~il z70u`kLRtU0t@~Q3=6(40INiM8t`DjMrZE`CNInDpYi2IZ@$k z2(v3)_fAm@0;_Zv2!L^VDNCQq+o&oDNS9E?z3uhx>?u)OEYWtGGa3HfJ7Y~mv@P01 zS^Rz$#s4o;G?ohDRxbFIyBe!uVQFf)3hD?#2t+VNJVAIPsKvYC0s0X2IzSWL@Pt8! z{Zp@MA8MI$g_Z66El;3j$ddIZon(D3S}bT>@cSs`WW35x5oxlGOs z@FeR9pKkNSNJy!r6U(mt{*PV#qo5PH(QqY@m>gLjbzY>r6C9f-MClvA#$B;#-W@cNnre<5Q#>-p0=G7=9O^e2R z6V6%GK)RAopQ!ob>7w5QI)a*oxSOh*CmWd+Nkb479a{+#TKaFxIk?Pd{pSO<^FaEj3PF0VsI-b9u zI4kR;zB@G;BYwO{kt4uGiqKB)7WtQNlA!-t0Ld#IHx+*wIWJ6qIgz4;X9HridTB;t zpZpE+u5KWAzP8u#bE3O1M|c~V)gbO@#Jo|<1xc!W`j1T3zg_JjgHxt8C9Y}{Ze_9J zNPKYIHiBIpHd-#c3+)xRXs(@U_Na|=aQ!NZ{bg5*Gvg9E^jQ%cQn=hj1bDB5%K6V% z9Vscz4@0pNbX-{ysnbB`Q<{0AbUy=P=YUp3j0XkczZh{j$!9K}3=QhGe03TJo}E+4 zH%vPHq7EcxtDR;GM*u5CflZ3^8YyLgPto+dQzy@>0YqCDhEWn|$9>*|Iv1hf=fp1X zzjyrbOZ!%w~9KBg%G92V$nz`rhQmN6lZKC7%IV>hyrMm{VH}=N3{yt+O`#L zE#rWwA?momvn9{JhNU~Jf+AGcMFbWI@G2fyfPyLhgsAHPpHud3q7Jll^w|c@+XM!k zE~n3`o?cQe4Zm%~DD^8?r)>WVUN%?Az!EH^%$CynKnVpgvEC(7m&JNGaE>HOwat0B z%+a8I0J6akZ_lU9r|eAsW3>;}w}-FG+d76XCL`se#YgNRHf0LB?&G2^7rJN|IF9(s z&y;hw>ZAqrfmc-AO|akV4vYk0LWdPcqr_Pq?0&Th$M+q1|xD%uNt4{HXB@ z=r2gZEYk&WEH8gYf3`%T-yx7rKulJKH%C`Kg9VGmep5Xkv_kYwP8-9=oNBfo%|fc| zOy4<$2hLvgF(5*1LB9wGVHRutwd=E>P=eItv6+?UKN98XA;w>xN^VQrO|6#YFTXdb~7@W@Q3PldjS3Jg?jQ@VAgxe$gS}E=py|% zvZmv&DB*Wt=afIIT zkcNS{Hj`Y%44Dp-Dz5T#&}cWGX=AYO#gB8X2F7k6uJ>jtsfh-;n@?$Vo|Q;6!{vXM z>e4l=D(Tla*5WTxE^_c<@ltuIxv02W!&q-+g%ef_&6POJ(i>&lF?KMdBlIGCqy?q* zCrXoZlYzFK;0?aOm=N%=xH*3h-papE7%RJhlbvND3C1SmpI^^;MPqAn_FihkMyCN^ zOPj+!%T@1%K7f|n2^{ys6uOM$Oi3?iWZhwo_<%}ln8x#00Er7o8H9p4n`-QfU%F(N zAMIR`fZR7(%KEh92g=Ed`K%Z^Of&8a!mVaCfDgbp>IhR919}=ji_qDLIK+jf*B{dJ zp+t?+rQLmL@rSt$f_W@3wK7QKT6W#FT6VQu*b2v~6-!2ea~Tw8%d1OD1~M?$7Zt@4 zl}c_ERX#2n*qL%$*qyTe8hkOm*5a{l^sWuwYG=Lq3(8w9w>9sSWCUQnb=w7K_1h>m z7v(HFnP3pRw)t8nxr5`l=p~G$wnn`fUGzh+721BU!FvGpN5%R^$`dQI}nZAh(%Y&an9OF4;}<0qW6v5`wUV{ z7qs%F7Zrev>f3K+>gTk}q}IVNlHa3%mi!xU?(d$?FOpR>wm7vsqmF6z&!st=XoXQ4 zR{uf6Dz`;#T~#aoDJ@%N-6?cF6BLUCf|CzFCvG3t4`&_BD9a<=q0r%9fi&K9-U?qB zx6@mL?p?N(`>5@ol1c&o_bp_=iL-Nm(@z31`#jc~(Btfd>Bmh)+u|2}{bdJ0NAsIt zT)f|Y%QEy&<=23g2gqyI@Fqs3&AkQuHs3lWrvjXq-=ARMZ0sD7hyu*MlMCI;(WAz@ zHWL-(h%FOYa18R_K`hlsZgJFts5$Zi!^}zY1Vet!Ul<9hV`ql4_3WA{5%zZUDHT&o zbYjxCO4eo0W!3`gG0zU~W8U69wR)R1>owaoYc*RnJmJxM1)GZYi2~Gk=rQHd7bM`K#a}fgBJZAQ~*7FBk87`JP-TQu*8-y==M^g;lt#$z&*{LZhoLrO{ z8A-1u*RE{lPcsNF=qJ1+0z8YXw`Ba5CvOUkH_tuAsxFL~R z2o?c!f5e$_r08lNSxgLfq~O1XX|C?1B++PZVFxT(jWPpK%!(O}b3yWqFbct2{dneA zY*F6HIhkG9x9*ju?l2>E2HJz7$M`NUFOTgWBAcw*&Iy0XdXUq9t>>gCKeSDuB7Z6%wh6psoI2-~)Z#flxLyh)Hi}+e;CArlo@umBX=CjE%)kE%I5T~aJb6^ApVFc3(bZF&QUpmB)X$PC9BiG zpDk`;mxb{JebW}M8g7{lT!4g^YQ1 zS(2zZm(RzfFOC#A)ecC9s=1mj!dBI6vRn41+SC~?zJw~myWVy@MeHNo7!i0qlT z9#7Rje8|pB!i^nHDmxC~3ALKAYjiJ@Bb*FooYKN_+L20blM!2r=4HV7a|bkQ1b+9I87Dh@AoquG};E-ZH3Y{Jzl5tJl9g{Z-w28e)w~W zP%&jII~`c^ebkl1%0~?DKj06{*mDO6hgJa(8+_APbI#u^-BW|Bm8T>ffX+#GGGj=P zz1u5Uu2aaZyzr(r7YLCMiYr#5W2*+jsg$?E=UVuCm+P^y^|phUnJiEHwd%ye(Oe0o>|9F4!Y*cR!67(a@4#GKW97X=b;0 zXm2#BM24QuHNH3vD~uV#g%=}%ri%|M#6%gTZn{8AJgBQ>3;$q9x)HNXKNflErtd&o z)nC~kS0Ib|mOHTKid;T-z<<>#uL1eK0SDkx+hVQ6HvVaeQMKLt{KDlG zT#>VuJ4{d9bn^q@i_zG$2xglRohxKz8o0%kzo)e5+LPTXWEf0+Sm-QlAxCWSs&7u& zuU>i7I7%#Nok%3zMmeNr0=tkb(vd+dRz(qU z_eP6l#tAITq-&xclQP1F=>ko9d=Cv#%ERl4mjq zw^~HThvj#MGao)(a(ZY7AN1T^?~k%V_`R>keI5vtz1#t#u5~;dO&(_JaD`JPOSKz_ zL+6xXw@2Ut20OJbs8^kE%xpEpR`pgB*<0Gp7uyYoQ8n-HHeOp$L4$0WL4ZQ}B9kJy zQ{{`8hQcN#)B^+UTZ~OIHYWUl@iZIo^heVMJ}G!hwK-~lgT{azrz&i}MDKZtlfSqu z9}ze|zc@|424ZmXBzSr@92H6xvFjm6VK5e5X%i0Y6DdYh4rDnbvpAm|3p8b%KPN`P50=&}t=4k9{sh?^zn&#iU3El;_VQ+0cgoxLPlTHp$QJ?V z7YBvg%lZ;3-H-<8&hcVb!l)?IrJDhEx;YYDsBOuN@X&I2LQ-uu!BiZix{=e?x6UthTMO3LVfLojLRSrUM`AHXv+dOs|CrBw9M%N4hzI9WuvOn@|x zER*KC?{YrJdJi_G;@w6~7o-2(&HlidY@4>K;EoZ%_j|IXOFyTePN=H{vTJ27LLC0j zFR}aIe+^j2>&C@7@#p{O2hyvSVCdUDG>R_@*^NSn=1>pkmaS{phN{0;BZN-aOSE`| zC?t;xuNflxt-L}byV7D)M$Vz1F55=+n`cFLlX8^8o7>O};=}O9sBAbwZ}M8_wf{Ok zIO8nfIWe>4{MdcH25NF1{&xSH$4dps7zJef z5MH>*`vM(J0dI`LISL5?d-74nCv104H^ck%lZvTT4X zuvtsT`K2JV#>1$YlF}y@h$w8+Dfs1#gck+I7|;!eDSt+$(1BxF_NjOcYj6sntIU^= zl|y9y`wg5qaJjtEn*=L7HLPI}!j+32vy9p;Xdd2$GstG-hmXUR2U*z+G~bRaP_GMr ztmkbDyf>=*S_b?pN{l5>?ausu&Uyv!&J-*H2j$76NN;rJ-}ALM>I#~}S&`N;5v;+m`p z26VD^Ov%TrlMFTkZ>@|=-$=7V9~WY}X;w`fYlToRP_e}Q;q!>=dI1U)hhE7U@DI_( zzeKiSHa0s(_$_DRZ;e?WT;biG`;u(dUPq6rcnITkw_j$}Ykq&7H=%2lIFBz8p@BaPZ>eyv={5)OdUD_Cn~?AF20fH8e}Q zF+8x}1bM3pottz`ChMbwP=q_K_!}4gg9VnP=a&(ihx{S41I{&!>(HI42>1R(di7YL z*tZ%BM=cwnEs(hWvUWO*;qU~Z%y-qL^*_!3%ohhSbrl^lF8P^u-sf-YTV?j>%a#g# z+bbEHzlVoEHAep2bgZwC*J~Q|Icqdi{=`&|*Y-Nh;mzT78c!@^nVz`4a(kNsSq$ZV z{hg4bE0PYMZk)3fT;1FCHENlCT7o&`ORUEP=e5H6kP$?@!z?;`DLCJ*`epsc;(J8V zV?y`qVqI+H>SS7uUi{V6Pdh;mT>K;G0rB+1-yi>h1wGQ;uVe(9|M*gQ5o2vct9Qga z7g9l61?dqyf=W>TfDQ>;xvvk!9^-N;+}w{cA2Q-!Zg3XR94kR{^?3H<8OGUH=s2}m_G@sBit>z2fOiyEKh2yu12g@#uB zS3s4~Vztrf28+q)-E!aGG@}c7o6XrLrgZz%`E33D2?1+I!v05(*GNccqNODkPg=>( zf)9xNalsv(2Dj%AJ>y((dL-pS3p*9{+iOK0mTyN*@f+GRZRqa}R!2*F)H`ZSv$+^B z45`HLw9ekCPpaPRVGF;3TPv}T%X34_dUGh^(*|Ji_G}lu5w{ufDOvw%4A`7fusNGW zebUTTjdjuZQIn797lI^A8|!d-^3GZ%RxtFCzaTtcQCCWQzf|rzS&@fvn23>5gi&@h z_n|(f`SsXa{Z~_y@ua34PQ6rZS3K!QTesBWn`y}nYE#6^s}@_J4Ls(wKgS80Pt8Gp z7GJDP_DNq>{5d)=g2c_lo51+^=VUeZHK4k1D>mN6j}{?>o6gz^R>i zCpbGjJ2vQ(yEMcw@g}N^=*n)(@{?@cI;)sG9eZytjGBio6<>CLx4eBGsM$C6B>akSJQtZwiFm-(?*{i&jPpXv zyJla+h<@8Za7=cbb&na*{53f{e_8oLSn*7;;68K35+*}k>Wl}P>zLGYY`6Padm}7r9P&89x!!L~DaijK8*CeLxCSyToY!k^;hi6q z#?W4-_JIgDT1RbgLX@}vSpUd@lXdf00Wr#IaC7Nd{>*VO>%xn1uYc#uu#fMkDAfNOA2#RSyfUvilOv=yFaTGe%&+`*mja%xiJOo`^M# zQ;p*gNfS8|xs$4v=56pcIhj^472^TnI^>acC%*k>n*|MFT0B9>zkUcO4xckR5Taag zwA=OMekdE@smtB#07sfaZG|x0mdNh+#a%Qd;*l_qk$bgW)+lxm_C#aF#+)ZWZH0ee z^;>E~qye?7q>+zUSe>*TG2gF){!*wYDo(XU#?0YYm4(te_*)CL6~TH)61!nSdrD$+ zsQ4+r%DOpP@wxIkH>((7Wg}nb@JU2sGbJ_Rt7>{hab5FYH@7Y)%TrDZPs$-JQhl$1phnXyK()SKcR|Ltr`Ta>al4E!9>;WQmUfDk_@ei zeMVDTRdIy#N5Mo^lbnWyo0XkY*8;K;T?NG69~>k&%kcW;j>@5>sAU`=myB)FBA^d_ zY2r_kl3;ptC4&n!9s@m{lj>5hEq87=UM?UZbIGX}$T%EdYX>s zQW))5Sz~>l5R>L_MZGKYQYgc6>cpUv7p=4;kmfvuVP*ULN>w>=wgj8sZi}&O`6ua2 z)mj!=s0SbgG$5)$AIQ?m2OyU4Mvh(m+|9FR_UcQBlnP9VY>R3G{&MVdyY79c z00$<^?RS5P$_LAA;b%d}83@EnDsUe1m$eSdownmFExZh(8Y;0c!jt20z8cG0+dwb)D&Xb)EHf#huY|`8ZlS zFoI_%a2)(jr0Vf()5I*5t@b~Bkp&aotaTuX!NQl4qL#z|lp~NWai99w4-U_Z;~P;V zMQw;?=DNtG`7Tv!No28E_F@d2tY1MbGn%*miL@fhvK%s&%G8%dGY5?Nq1275GWn)D z$nt4KHMJH)%2c)%&Px)GJ^&7o{eLo4w87G+T+t1qRYp^`|CgvT~BLQwKQcvbFvVfX~voVnOFw$7*I!kr4+30%f zS_?t;{(`FI(&S2et(6+ygd+k2DLOo&o197Ks$hhnKo>SiY+@83=QFUD`pTpV|3e>} zX=5ak4=U~ZXDU^m5_3{&Y`VGF7##!c$fR(x$l#}o@zKF_5pQ}*Lbg(BQig%-6o`_N zQUi#0W^EaH6hB$$_K zs@N#-Z2)CGcDq>{7X-G;OaKDbu`U=m^Z!EKI|kYIg=wDYylGoEZQHhO+qP}nwr$(C zdDFaUbyiJPcUAX)rZF)e=EIH?J7TSkbKbQgPQ1_adnf~`0YQrTbTJ2`;&XwI6xf2> zUxR_msKzM9!Wv4BOi|>J86F$~wJBuN_|3DxKZ*t>v{T6`lb%VCKbKdSjGjZUdZ`lKs5f${2r^>nIh@fL^j>xTo`Qavk~LmOhr zGE5%(R^Aq1eMt*YNmWgC8MvtdwT<7-Mntm&S&g#5vKZtk1>s$-^U5+`QH9!Zl~q(o zeKS)Iy%a?S{&t0enCT^Db?(7a{^QCqbQ|!m&?2ghiqCN`Y7^(-iHJ1FTY1X@%Lz*Z zWYO@2-$=Fm(PgO0dB<{4%Y>AekrMN4Z6k$hY$SY@AR=n=6j9}&R^7NFobvQb{PJ^| z!4>*mOic=M#MmlHya1Ik+wA-2LF|=#mwxdYNwC!@0Qx*iA}VRxuvZpohenJM7+#co z-N0QUOa=nuqw{xlhn<465%|Bh;|I(9R8^^O_(DJ>7O_8Aj#!VF_e>8lp!l}S-xe?8cbilc5}<$ zwr2O)?c8FH!2`mSoLx~#5b+q>$!u$3Mr#|%JgP|9Atwurn6a)+LP-P%Tj~b z&@vdF=h$k}DRouS^3b$sgLN6xweo+pboxQ%E>Iv;>8j(*$(7lzLeyvL&}$Bd=_-=U z#iD_>Vf{FS?$E!qE_UiC85J!ka|8T4|$LuRZI!2(p8R1ZYR#zFwov$OY`cC92 zm!ICP0b+xz=DEn+)q-orJ!aLgjUjC)0-K^$E%e=D4~_Jbm6>*^0LfmgD?VfL_6Q^y zNEZ940|yd37%?yUJD5B?LYh{n?aD=L-CBm47e`qGAL=i`pUt_TB$jHf1U_kkHx~K? z#gqYZ7^dykGmJHGkJV8k*TANJ$tqr*WJOs|`-!Z^&UNrds4)5{eM(ZcRp&>&PFVyC z{E0)sxs+NBGfQ5YnUOtoFaULA$ur`h}6!h+!b5{{@tS2Z>0PMY5VNSE! zwaDi5nO8RQVFpMtV40PU57d`9R^|@En$*WGF3~!x#5oX*On(~dxX>{q@;&!SDaq%V zp_dwrNRPS>>X$WS@am5DYDbEZkJzGI?~2I1J#UTxcVPIa2c8%aA|Tdl~vyzZkX z)fjxys#bG?!FE8VG|5?Jr!y@3FwXMbFqlX$ZEdj34k%1CUy8kml-kbrV)NeU6M^}2 zo84xCGti#T@Nu(Yh4YYeoyKkEY!g|4A#}_Kt57+G4qG2${#SyHR+Wfkbl75KGyZk- z8zT1cP$`*=MWJ?RxB*aRS^&c;TPq3J)hS!6jZz5eckYzwY(w5GQ*<9w# zQNlpZ+#mfZOf zKLWNaT8v5dP9m6prvg1Ua>C76C~8xI8zIxL=G>9dFct+)@wA-TRMf46Sxp@GY4G-D z6>>@dE~&s`5AcTBgg4oN-ApLbO6YLq$B<1h^^&Hq&2G5bPWsz`MrM&k8l$XX3-OV1 zCYy}tppC@G(2M(-;Z{lrO@MTQp`khy@);N+# zm@(FP60D)pYf0-DDW+3LgSNv@T))u*eQ+0KnxYZKzi! z9D#Y7_)?Ei4`iO5!@ib@pVTIvWdHn$JDTA!+NE9<5p2{2pIkiFs|JFJI=MWLPX44 z?wzcO+{_49!oAMx*9olf!MzNIw&FYQnr@{2hYmz9dPrfQvCljeRIPu{K1T5eHOSi+ zoEbvLU@wvu(i8jFEh4@#@)Lh`SYLbi=XWEKnP+_?M*6;$fi)o~)*LRIXG6>Ao$nN~ zg4G&ubtoryL%(|H!G4wTEt6Feru%^U@CE@EVI9lt8^p!F8e9u)QW#PE*JF_^!LIm` z3)kxt(W?pf>zhjBZL?4h&){xHyIk9{lnwJ8t8Em54Gj_N)kie_QEyKK!q)}MD@Djh zsZdYS7~0)Y2kWaT!T9JwN4ZrcjO8(dV;Q&@=IU4xD>ya@T_@-abzFhjXaR zOC_AUC%3yLw6Jco#{$fug(#fL2JV0zrt@uk>DZGj)-iP(&Zg^26~ z>+j=u#P>x)UwR~0i0%hR1ihYKUALW&M|XEet%&So@uNfz zdcD1Nef&?~BV?D)q`mYBqRmFRLQew(KZe55z{?#J>dTa|8nXqki`M3Z6;T<;YD9Ms zr;GT+qj-|9eQ@i6LCLW}7oSq0FKq(2{!c;D@j#XZpeZwPd^mt+IJZO`js<9(Y1jsw zw3cm=Yu0#c#C3{zYQ%QiM)5XTf=ub7U7`kYf?k$l$X=S?Si}oWAyzNT9{PboKFv8* za3sA+V;r&#Dg>3p4H5(}j~@B`e3%^c4ZV}A7vi57Ju_10mtNIEKKSvN;cXRAAgYw* zHJFr2XmJ(wMG6FzhvSgpN<)eFn?Igv1rmf(A#6l)Y6w&bVugSx0dYF=lre^Is^qcm zNT-4B9Ha0+DxdHzVAf~1L}3mfOzk6SR57C-p%c(IsD}gbd?84p1lst{)kLoFBacMv z@TuX$;C94u9`TbX;>O00p!IMf%4sU2*LZadp8=}ysi4ku*aQgIbW-sUJn_(&zd{Kq z7KjT|MAeCno6KGo5&UAz@k=tW{n`=RiemI}Nitqw*O%iS{nz4`*=-Ql36Gfg>aq!( z_1o8brea1Md32vF=_K*xhU3WLM1X;b*hUUoesu1z;z?sgcRK?_;Y3sTNQS^c;f`Y< zZBlV!T+mUeV%S_UP`~Q|iNG}IeTXy;DTQ*04hy@2?skm4NJUel88U*%Xc2|yt&a(B z8X)2k+o42uj0q3h$OqWMqmspfghtTArdgHijN|6P5NYD+0{MR>ij_Hc!FS}SjV8vi z6QQfXrijG}i2&M)iW9*XA)d+t5gpJX@P?}a1P~{_yhWjTDTc?k%HLwhc0~_Cjkvob zF;1~c4uK?PDug4b&}D?lpJewd(xU&E1s-M=1u5Om!%L?);r6maQ``V6qF64>7dNKeoJoiaTZa?=iHD|09N$nThd#W}Zuuj?JWl z54rh(jM*H7yj^osjUX^ij7}2dU9$2803;Q*06=gU>#f~&-&Q%tpAW={&Bd@n+Z?>6 z`zv{8jk{^6cJIjRm5}qdx0^*#WvG30)EZ)S&<hO0$m46Q^~e8JP1PSBvor=MsZ<5A9^>PIaW$k9A_kZ2E44-RA|Sly9IjXvfuy3JzLhng_uV}aO{jUER?ZjVK zOj%!kYLw6Hk-1&6#ohO@kgtH9j3wVC8-?$Ayu=UIy`$J>=ud73%s0>IQs3&=Gu=Z? z^f%8Xo1Y66^@{Ss{7fzSDs&O_t#m)V=@ak`<@z}^g1%6@QQkD&AU~((4bE)$tP*)GTFt-nNLj9Y+18GFmj}~iaAJtBqj^WUZEqg1V>@(cJVxw0-tj-W zeM{^Is6IczNEuO!{$c$v{%?YN|L@kzKY9yU8UF*lm*F=H-T(0c`Tt_>zufo#H}kds zuPx`l@v?va>sI!kjF$hpG5jZ^CFB1{G-mvt5{>DZ=;;5G(ehXW$_Z&Ty+_qmq=i@= zPBXh2L4&h8|0)5-IwGAL$^3<46*BCA!U^6M6S_l3TE7+Z~{|7uAnwcqa@z-YbHJgI1gmTpy}91JsHB# z;~K#j1KGL}f{SN7a%s6QF;Q|9VT@qfiz>YJ;`9LW#=#MMF0{=mAsQjTyM1{Kz~- zg`N*Ov5>W>W>?lzht?Llum}9;@%xfS`mH$@=*H|J!+__NT_cAOAVixkcTUL@m{iM>6>@i5seX*- zP@eA3FH*VZ@DGIjqh!i$toHSf5~PnTq#}-I5LIpFJDo_R$V7-AP0C5!bJzxs?WVzAcO| zb|$Rk!c474#|TF-2#RBSb@?5=d~w@xTG~ub)2FHg15JJZVJn6cEGPGNNU_Eym42_M z;)9amGMm@+<4IcT(%#bSL>W_V5=qF^IAURCJLR|^Et&_jN*&Z-(aCT%Z`*6?0hH~o zlSqoK&(#T|U3XM_rp_=Z>tO*StG~qkwp*#!GyChZ<2^r@P_1Lz8}^R-E9HIV(k3Po zWCz~DwV*p09Ok5b5=|)|FLI*0Sc4V<=7S~)Vp6OvS7-yY~J>Zq@b|8y}Dt({qhH_3~E`3=+~`OrA|6~D)gx4iY0dpPO=J|nPY1(we0$8Ev{ zPVGD`+!)oBJOzna-M8`NqOEz)WOlZeK|?VHU-^0W`874T>8O=sQd@6mXn z-MrflkjGUBTcZF=OJ@bN@asxonHkeAq7Wg`_YUI86T2{rksZ2qqxHrHd*1d@@nXdT z>2z_x|`a8P)b1rgOs3uUEA0`2l&i&(r(=Be#7?* zB~4dWDBeqxlgB7$hLP4rv2KeVpiYqKA&^($2jgq?J}1x02R^n0%&rU63k{fkeHt%N zkLD%CesnttLj=`J9U`V&kktuLVKT|@qg+LZxYm^19H$C;g`$yPZPoF@Q77bGqC0=I zS?`{TOOJH-8NR|ks>3JIR@z8;zG*RSfOdZ|*v7FsJPUTE&DBj-FJ8n!z`_L01{Oxn z2T8q#c%dI-J?M|;tzJ|-Ji40{{Sh7a7Wvd?q}0_2aFEV2ukV?Ge#vf`12T~TN7Vx# zW*eRIr5(+x)Zyy%qal6v%%pH9)Ct1^?1$6W@`s{i+HK$8&-TUKxzsgFTn#jw*R>lQ zi+}g2CuqrX6g0>+Y_^cnnS}|oHJ@T`pJ+6^_M`W|Aq@Q^(8aEPw7gj6*kEA5XH4Hz;AR-yhlwYtB7OUlM|IEg8BUKS|o$acGeHk?^7U+VxSW^D!#5G>`2C z^da_;56|3Yg5S*^8fEZMMxPuC_kda$?!lm1nteU~keBls(CF9E5Y~}!A}DM)sBj`z zed63D&qLEo(HlNJI{SUMN_o*{`zWooA^IfcTdX_SPGrHt!2yeNeAaryLLriQNAliRl5^AVeU@^o6*JnZ#ub!x>t;ubKPxHADXWkVlqcG%OOcCL#afCX zkyRQNy}>Bxb_zHydcPpZVvo=)bGO#eUdnfPzs6T*B~1wro^5cqdQRpx4&gqoFIRjI zRJ8bEqNP_|Im4Sz<_C4(6qHd!CNol5wR^i7@=i{_3T0CXq5sGZUFkp8uNX6Hi08nn zhcATYEC2RJa3Uy{>|%C*Y7(|jP&kfas{}-I^gMrd{)<~hPM)MYybP6#sgq;%8|upC zIhuL@^jLDMg|sF3WG4Om^9OBTgIGu$TUO2M{J6p^UMYsO6pxX;o3Q-a$vS)bLD(0E}neO58KSg>$!P{>~?8aTYcFUg(-{0Caae>L)kDX)Tk zI4DVu8~b?3q`Df=Sf>CGipDs+;%(b2Up!oM1s9b$X*qQj3I;_mLr8w01@CI~-T6J@ zX?!>%DIwu@_F4>m7m9Z8 zI%~y}QeEk})=-eOru5`@z=Y#E)C5$buf0t79lt0WaH(pP!x=et`MU$b{nq8`KzeQX zR;+wnwl|*W=)MsP>?-Q%5NjTN+2L(UC~hd1JN7oT;aje29NC;MQ ztQ49IVmfE(su{K^{#>N)Ba*uQMT~$6T?*pi-4fK)`x7zWR!9v)f>;qkJZcTpwrLl? zZBV~ov^*g|Rze~?TcI!CGPx!4B6QDMCJI(UoL@>zfQ(`&^lc#D2OmB%EZ;1nL^O&d zI7W@Bg#i_IDhp}H(V;s@EW|**|4eNw4}Q+Mql?UPmX8Y3qnK|~j{?QErV^^}V+LQ8 zfhFlQ70e)fIlg~Ye-OH~IAAAT9KfMI z7CJQDda#ldd?BF#wqGbreGf7^b_8rdl8;=5LP6Sf)D%!an$*afAi)?g$a^S(0uymb84qwiogP=NgArCx&KjQuI$dp*aRyP58v!c% zc`AA)-!EvWN0?%wlEEezmsr&piiEWI0HvT!>C^g!wo_M(BM8gTVPb#fo9Dxl5EH$v>WfH%i$jt;N^=Mk zg>j10>#?Q$A_|_6qES&;KLgEAD6t_9gy~wWIg!c*Sr=-D^~Wni;55vSGFYfVHj4f| zau{b|psQ8@^>a)25W@fiiC+=odt}0;hd>7<1YEzNg@G#uk{2%|iVgOgxiW*^pwg$c zL~)2A^)>i^>n;S@*ZYRD{R-iy5#W|xjfKNiTNL7-2SO>n1yHtV7FAnbK11{9PMzi|cwei?hHkcw$S_|5C3*u9+WV#S3EozfW_qf0Zf*uA>-fg* z{;_wJ(}^( z>gQ)|a_8XYaqZMTJ$q_$I|H!$`^H7>BLcAojCdurol-M{JGg2C8}G*#^Nq0Qqfk_@wh8>?;i-o>pHtlUE*m->d}B8RmKn6u=bUD2~7>U6z5 z52)nSYN1y-x(y5MS%!I25PW)nd7gSej=5>!KzSUWtWfN;p}s^R3?R@(4H;fJRgXW! zXoPyfB@vt{L9>x?W${{k3|xTK5wG9_%t>4pAg&?to7bQz4LUS|YB3*1#K2-#GD067 ztdl`Wj&_*NO44L0D@X1u1YI^rZ_qQ!c%oU8>%!%nJ-aF>LdI8K<3EY=~b0o|*6-!x$MTy5bj* zUHE`4w%MDX?XOdiH9X*U0?o|v(op++Yz{vP$W@89fx17Rr$N2`4&0685E(;hIWl!t z^cHC&_}#qSp7Wk#7Lgd1339UHi48yFGn6<)=6^`XG#0Q(&U(@VAhZyTCAz%cJT8j+pvY zOJJBsgeIFcFm@YA4U%o*sS@hM!voilFAw6QqC`-CQY@I~ke3YqMMv|m$Q2gTI?g%a zD@WN*7E4h3B16zhM!JAGC!of~My#ZGxbKQlMIS(_vVELWe_jG{7WJ^sp9_>ZNj zRGhMh|8`Lr z+kGL7UC!TnX4)wTyPSvq2@f}m;B}P~G*-?0i)1P+*1j}{OMwe?+Tc()AMzV%Ize}+ z%XFSajl)yhhny({C7vM-kqWE@wMzgoo>=O*a#GfAdUW=k_U zrDkJe0M7 z+rVrdemj}z@(1&iR@U|#srb`Yp zX9}6N!OL+VYnv|5aIK8*mTD~468R55Un!a=fxWA9yKjmZoIO4M%=}f#T7?pxjP`jfr)h_3o^x%)E z_o@~_H`+^Zr^~&EC~0u`UPQGX3`Mn8JU{Snq&yGu_J820?v@Kc>wDxlm3bkNefqEj zLkRP|UZ@y_tdQI;+KUyNce^flOL>pJ7O)$+hKg{J8&M_yH(GKL%i@7s>G|i1T#-cQ1(J(h=(+OB}_W{)5*khC59OOtpw>lll@ImGJ# z=WayndbyAJwMODFHO#Fgh?_8umUU!?@cQ9~_3fVS^>vht*I8qCnCtj(Xno{p<8ag{ z^EC#0uTJVNN0QqvhTA5_L!I~zHC9?Nt_JZMB=yBl@;rW2CnZA6$lH;*q>l<;oJGuRMXYo~|F?NK$UZlRHHku8Hj>K+?)4hOKhgDP9#ML|FP#CPlEX!{ZPk^yIKF$BcJPtdG`e z2)+&rw<#MRcOk(HF_5F@2R&d-#|Or@z=sh(Mf5w-C;jiZ(3W(|_|XZ#`n^77uP_N- zOTx5FgSk9l@3;ud#u%7VpKaW@2dO$Kl5cFzbEbG~&dbV%+b+8LruE6{hFEL5(|A!M zVV`SEd<=kj>NsZl))DoQEhgcPK*Jk>d8e4l6-myDz)oXk6KX;V;sHwn9Q$}QYJ)+0 zye@v?G3)8;v4}%p4ihWN!?a=1nFsf-l2pdiPa@m+BaO}a0;114Lj!V>riK6}mc+{l zbCG^{vMm|DWYti6TaYW*n1Py(mcaRigceIrPx4YSJh&A5#27(mu&xpxYW7l_mV1_W zet4^9*k=(~|Kb3sh);ev6<2s}Xep=$PH&$WYSxgaHdfmPvr$jDR%^)86y?6Y}9cCV$HMgahUwuuCh$A~TG78p7bVDB3PD$gCj) zm;02+A?QjIQhE&5`;zUUU$P_7M0jgQsR)5PLs%1GJ3>x$xtWH0j?zS`^>pA=Q}l7z z7W%lQ#}97RF=ny`tBcsVqA!W)?Go%ZQSj0{vJ-o$dVBtpzbJmc5W#M_|Dyfi{p9x* zU3dJ3x=-*_{im++e?=G5voroT(Z&BNx>)R=L>JTowpK>}sJvieV);>Cu>Xtl;wJ!@ zo{s+iOnLD$@t>6!|JptMkJ#d$l-d89X8Ugez>IV(|1;%9{H#qN9rVZzmvGE>K0!XU zHF40=Jc0chUi1~9nL&pbp%6az?Ng*-i#R9I+xizad+uTdJFCe1-{t5A&{+@bq(Jj7 zPKZlLR%^s~`r=~U0=LQhMsZA!P4{~`rV_kJ0`Xk|>w6oM%0$fC+qfcH8UMwT5fwaT ztb-?;D>P_5u0wHk22gLeKjn?H+W_X58mtsa&AF@j$FjFPntJL{pwR@Ppov#RZ8KZH z$=PVt3Up}wtq>S~l-HAi(GW-Ce29{d&Pi6JL2|NCOtfPNaB+#?}f2K(IhtB=~ zfJpw=!urph`~QGQ{)gaXcROQxS^<4W?vX68uN@a#p)xl96^QvxfO*Op~?p zM$5F=X3Ni~h;gy9`DTmu*_7t&=C+aug;s@IVin-yDOJBoJEJapF2e6IJyN^{M0vQt#8ec$p!qi@J zhbI>Rc0ySIN+iGZ$k6cc&}fLhfuW%u zDt>86$>-f)jI6AzeQOWB1OW1krg_0Qeh0qrAHv&HR+l(m=1FM3@6lT70W$!othjKf zvH?X(N=!<=?aHv$)6{{7{8{+G!97_4l7BsZ8@+0hF@E|gLB-KEGCIC(F7zUPBWP^x zj1OGuc7JrM0Vt)=(7u_x@%J(ydw@GG%|c}ey~V`y2OA|-&)^33-6tu zB~LCaIp5scJ7X)*x4n;_Hy8s0Pq+ZK9wx9f0NhY$jDG3ikGXI*G=4YVMenWf-^2sG za>9grzNq7Wce4~+PM!d+zfX^A!@k$y{N}HCqhRvhM%R}7zWcvhB|Opc!q;_YKQ_}l ze7$d1lYTOZzbg&DML%|XKEF+uecOb-^xte_zwl5ZIycrnB;_l<<&bYx6$m-|bd>=c z{Ctg?=^fs96QivBe;%^6>D#a)WZl zQtDFL-vt!_CAAlp)q&yj=O4w|(DL|M?b`RoO>g@*GYj}v_59S-;1ozoxV~~6rO9^y zA;6%vBzV~t4_FIA5Tjzk9flD7p0)*D0?3=>+i1VEK_CKu_i*h-+iVl>-@lU(2lcLG z!hzZ)HxZN^@-}b?(V?!flTqBo7j`u4>qVvEaqy_LgNW(8tW`d43;1UR5-<gVM zi7YwZCD}@{+*%GIx>Sl}l0ab3#8tMYmy_K~vh+5iaB%Q$Jn~0%e>N!qMu7Y(EIJYr zRaG!jIdS7*H%=F8uXUdvZM!0NWtUf1R-$&?d8%4iRv7}|k;P;$OO(=(f~S(8Xn{{U z+6xS{;XTz-duihC`0aPo8WiQdN`%2F@$|{T7jHB!&oTsBkSo@`jmb~Wre~oD_T9;M zgUwgM7iCe2QNJOlnPcw$IqK(WcvXSUh8nt2qH!H~vlqA&<&l0k3v}{JI-L*J-#bi+ ztU%pMGtU27GX?M5^&%QS{0Oo7?`~#k^Sz25aSD$h6fLq`aRRO?e+PMYHmNUD$J(He zhUTxWk-6Ih+ggEo8gbK-6`LxQ8EAi(^z%tBYBVnA@T+o-;g(#yP&TPdCiHMlJnh(NaSXMzOOAC{=QU`2lX%DEaaaG zdqEMb5s7``MAjXj{D^-SJMCnw9!<6Tx4yzYulI+CML%(PM8{S{Kq^kG%5B7_jSllG)#<*e54KY1SDub+8^|Wwk#OTfx0_MjT&*X$@$Idv%V~%EB}y3I=X;?XB0TwH&bKS;LMuC&4MczKlA zSxup2y^~LqhBc3`i_WY?KJ>dbxu<|5^sM-KmxkauQrjaw^tS zeQ8ZdXdU@Gg*0JavZOp_89Gmd`gf|Fp7OiIT(<8XSI=Z($EQK|&;&stasDP~)lYK) zdW19f0z~5_h2FiKm!xJd6rPJ~TCk*U>AFy90^0<+qn%~Ky1W%1!F#K5TQOJl6so6$ zHWM3lgDpfUeNC=9no)2;^;5xnjFymuNa3d7SKzf>Tc{2bo|R#AS+;PYvj;H&J{2LY z5>lAAw<&(}J@Rf=Vk3jOh3m8O?s zJZ`Fm!UT`?F@3Hp%*W7QnJzLwHL6J+#yz~Svk@sFX|b%NyF$Co^5#)TCFx7}?jo6p z3*K!;X1eoMDJ}veOJU#4J$(@hF)itFBhG1=eASlc!*Y$#sd6D4#U;-|en-wx)zYSs zK6HIb%O+vknfFLGQ{B=i9OBXYxASlZppTwK+D}aO+J0pnT3?uZrh%jbY3ZZN)dqz( zCcOTQiNhGTadPn-Od;>r=?N4U%>`7yQ%iu$TmJra3rbDIUkryS!N4-{G<;hJ$u6O# zgdqM4wXZ|la|=|7I-HOp`nhT_=ywa0f9o%Q34@{O3Kxqp=|ce@8hx-;KB`>BS#>h4 z&0Y*QWVfq$+u34qQPGRltGM8ic6D!hG8mVJJ&#bBbJopk60ur64KG~6qU6lBe9Cio z1Z@20xdZE5GE34=l8d7A;byTeWa~N_34h|3egi+uFOlemk>T6x6ApkmekRoqpsjqq5e)J~J@H+#%1LB0Y;496-nilOgsKEk{=>3H$WY!=-*xw#s%#VpJ(myuiO60xINKH(E&8 zAdA%9A@cnN4jm~6)zfaQ({E73D$)*z#S2f1#&4B-f}bnrn3j2NQK*mN>)ilDYG zoZgo-lhg(yOijr==WZh4ze4-CAm=f^ZR1X657>E6C||d4=>KFO@)Gtyxe5yXO;fKY zZ+>RpcYUgGFP9Hp+T|CppN?mwW6&x9I$E0Vep%o(7bx5xDH*v^8o)&S9x_ zRLuT+9L{+>2&>Djv)gI96tnM^hZc(-37tk%<#O9zWI4JzW>f`K2H!gya^g5<)=?}z z+Ejh8RKY=(*Yp!WqVN?O4O?OFW&rCKu&qG^U#H;e_ZZ6w+6o=X1lSrc2e>4=us+pV z?B>&N8)qn7r1Tyf?svfi#{k9Nx3~kJfX6u=f>`=FV!}pf6}~Mxs!P+V?R|g|QPvgp zD%E$SjQtpg{-H{Kn|C0hXF+Q!CN`sQMd?F0M=!Sz9Gk(}yA?q3Rbc7L>1#weAY-%# z5g2e~UF`}h3xfV%U8lL*&$AfDNtD8+Lqh{(f=6``I%hs_KB8^O5|OqbQZk^t7<}S_ zRUrbb+n%1KC?^`s4xy_dL7!5F#%d*SJR&J-=Fb^~*xp3$E7%dWhU^bKo@M0Sju=00 zpkdIX7D6g<%cmj;`L<6A-Bg#Od6goMDR%}{d;9hb7KYP|+NErUAn}oTm$;$C^f($& z31(J!N;EOwMrQtZH7AMkf(5!i06lk3rvF!U``tFOh~L6Nw96Xtx^ zHbt1ZP{K%-j06w40j6>5@PXhr6Ahg0re1dIB(H!n85^k??=|78e0-nZ@&){2fQcyy zm9aGOK?)~79^JhUQa21tOK0}lNRKJOzAOfO4j$si-W`20Lnl%IgJ~639R$HD^SZY6 zuvu)hAs$rqWobP*VA6X+C#KNr%=yS%+K3(wFGkwtSBo4v>VDg=0IqluK`^MzbFL>q z@~-7->5SfKa8?$ngf-2Xzy02~*G9*Hac7HOJ?n>3K5xHWqFs@dbDzA|!oR3!;GR={ zIZyG;sQ8}WUMMXwmVSV)8~wpfvDrZ-q%rutm486hAK{WRB96Qai7IT zqy$%JdV1^US%|S&3RK0y&=C>P42Q*opH9NW@Di+-%U0UR3pi)bM`5Q?QUiKTzCJtiQ-NBOl z>geF;r$d^)%kHc$fS)$K6}H)q&(SOXB2JOG$YR61MxTM$79p|SBgL9&!C!+=c~R@= zoiR@NjTImmGOH-F@ywg_SE$Kg+^I3Nc96)f*HGWQQr?Y&JX;MMrvN#eqG9f=jo1Wu zu!nffUQKN~91&}$S)XZ7&)fvRl;&NHYqu30OFZ$@NerRf=ffqNOqJ}=i%H^33chMa zplG0&q<(f3YOu2BYj~Lo;F|yGw7#0E_=b4yy{8fB?v~;v=S2Y=e3|3PZ)8@5_vrkP z)}tjvmdwZ$(cJQRGCd%AxXx1gO>vKrl`JDY(rTr%=Bkwoh=pphyO+UWnQKSQdf+3@ z2S~$#)Ea`ll*C$NV<$_qM+)a_t6H*kcM*&GqzRQcrkHPr13H3Dv8%L~mw;L=!?`lt zVEX{b&=fwxS|YW$=$lD#B>WhS9IXA`pi!bjEVi=_b6^k?C|^M_iMBXW-ZLd_D$p%h z@Qq!H(5mS~6aTv1jx%@N84c;_sxzhqS4PLAp64&zB%PLD$BF_9(&m=`FqAhLe|m8{ z|A#W7R)|(rvLuuvX;AyqCOym~$hBbH(Vbt$xTk@n!SG$5>gvq-BnmO%JR1;Lt7LxT zbe*!L%HyWA+4pdxDtH2R&Vc!8ew=*4r@J6a#d}6st{|-PYDRmj1l+GC?8M)qjBha^ zbvN;-kT8dqauK~1L<|TE2~7zwDYw!*Ios^q9)<2pkK8HlAnUH=40?G8851~ zJ>Yk%HX8QORA`}~N@Hw5kUTolI6I-O9;fWl89eDRZl~P;mPuWaENo4MX2L$Zj>)jt1tRt=Dx7eyJJZT*_pV+yEMY zf|@6V6~pIK;W`yJKc|m8A*Zo2u}68$?R9j94fRcT?1FLr)h-fZc?He0KMlTeW=OXq_?v!9wW=gxws2^9j z6rmwKLNX)^4pSnUG?f z=E7@jLqy&ojX}t06IAaqU94tMrg>RQs{~`DfPu`RW>g~KvK7X+Z_95cOeQOy4-e2eyB529baCDMOK*A*1+1C7ShtEmQCH_dhnMBGaci`jUdBJ- z*BQm1X<(1a#^HeaYY78oh1O@w9=Jpgc%E(DIt#pmAal>4w7ImN_;*T63imdxZ`5)| z8EV?c&9x8b)WuQb*QOvR3_F<~Q3_MeJZC6K3azpDrVtqK`Vvp2dtC{e1D#Rt=OG!OgCB(4DpSV#m`_0eWAu*alk3(9fVTvkd%!=zEEwqsoxB@O}HE4$A&G zG3}OLy7|{0I&j&A1K0ayXA_P^GrFa!$)oo*=^En#7|BkDVH{bZjgfw_Si3cw*zS-A z_G`4Ex&ifNmB!CPcR^I6e3Cf(VPxXJRJdLiGb)$rV~jl_wAfGjDV`SnQ;`|@KWjYG zK9zVSl0wL)-I4~)tgX&0+emA%YZ8;6_#~2KQaJN#^bs~kW9BIK`q4|BXA~HuEBTkM;vi;(Oc?`S@M)G>1a!_ zV6W3`Dg?45!rb`B-dfxlUy&-X=y|lhORqgUTXn`;+GhHb$JN3vp;4lvIP&p(TQ&it z1H%ouhx_L}H&8A}y2HzJfS834cPhtUfAs!P^)xh#Y#mMEVM*m z`-^#Z_Rw5=(p&z+J__&kcS%FB=EOv9-#BA6_H#BS@8NJ@*D(g@ldVp1OpWdXl4b25 z8XROR@(i#5B5H$ncALEVwyksORRsHO)ixbKMMAo%I2`{C>JZ`2j5O5?7+v9mJ`om~ zX^ghrk>UERaE0 z^5k(jSYXYhB|l$a%8TJOYE8#S@z^HMywIJ(M^r-m^1a!ojxinsvEKSw#HJ4 zmRA%(gYtAKZbQ#A8pgP0GM&-M%kUE)IfGK(PV?T@wN&QBV6t5{bI(!{^GV2ebr zeQy-L8i%_B$ryJHA6*MXtzxhki9_#Z+w2Gqk3fy_-A4DfSpJUw)1u`)RXy;1VX?4@ zX}vt)7|Y#VM|nu|v=leMi(Sms+P^6RUxor? ziO0RlwY;3He1LKt;@Dgqq zX~2>(HuTjk4`-6$Ku2<^{jq>QveMxIG57Y4LL$LCIpAem$pTfYq$RNF_)sj|3}3_7 zJOWh9(vWShFxO8KXAQw(z)9ze9mGxDFmb$?&%cVR6+YAWy)j|Mde95rF2Z(F!%@JlMpRvSD}z6b^QsfR&#EByn$ zHHFEc^!S_*$5<@hPO+TC43a~@)vIDDqa~IzA$iz+!Vr(I1&`M$p|kF0PmUHAQ{rSC zGs?d3Wc`;{Y7%qyuqrU^MH3rC9vW53Y7>HK@H#ltI9WnF<)_9O)l|IilfYS zfPzFkGHY1*s8;BQQK8YcVy4bY%MG^!c1iffjf3sJP^Fvv3LRFpq@@wAf`ZQ{YTwoN zHVDR+b{{=Gi(aj6=P~^RRaUE^*6~YyU4&&P1`K|7BqpPC=Gx>YVvHzmrE*fx&GdD9 zLaTK9xa6|IHt}J?H%=I)46B|)tIh@c#UqIk=#z=#E9Hyvm<5 zK&$GGf%FyDgO<%@%1)=iUXDlC^OPz-Pgn6NQ(+288I9(#c`MbytWH&k7mcxOw&cu( z6ldni!O+a4Rfx&oi^@9WSfDCBZX)#pE$dPkhRBAmurzNE+|LRao{7t zBE53u2m|gfw$^UIn2(gSUW5I?LhMVm5bo8;dfu>W7S?M0Rc5@Q8jz2})41zT1^G1Y z+2|sRI%TP==NvLYsad$PIhcbem{Cw#`%6ug!3?BT_6;G4Cbk?;eEyB!pKF$DS;|!r zDSRZ!A4R^3EFxHB$n?4~-c8{0{5#Hzd~jrFJS>F7oGcCe^ljnvIWxN}tex^OGt6X? zdhi0;C&6@QTCNE-P3Hry2>fZz@WE0w7N{X!4_$X%uv5rwdH7?a#R(^ggHB4lOnBLx z-QU4h$M&!S0#MqHohG{_We|vStI{m-M{$qH$?y~ME?l$VZ;;V$^7XdYJ&(OtK5o#6 z%93kY#(F4eC%U>??q>OqaarH_w>~6ZU-IA2N%~Re#@R&OmrIq5n9{3xr^f|!ei7nX z%B2h+t&hP+_vLFhg-lp+v{KJ7pt;8?QraINe&?7Zb!RDU%z8>Xw~8*r11cgO1sbLH z>};61f)X8EI;8~Pyo~S?vq}aC6xQ<;$UV!HdB5qc^h)pbEQLR#_!eqCz@}Sdyw@c; zwpYce$8*T{^YT%31vrj+X5I*?X}v~NG#q58(f$r+Qe;Vn0{*rmoK1VJYc|Sz(O4*h zPJV_fX_UD@f-_dJW#V5FRcQw-0Oo$6q(UUQFWT#-FmNoZt=aQ=?e8+xXJ@yp==m}2~FVJ zGQD@e9fx zgxm&J*shd%B-%U&5_<jr zXw*1Sj>lc;o9`eb4B9uRTuoWapi~>>Yei?&b8^5=79qXd#dA#-0*3FJ^R=mQ4t4U z!j_0nc0aq&W$77DNi3(&+Lc46@E^c@V@^K!ZY~?Cq%aQLbyA=XR@Rl|znVA#7r4>( zu?W4`83Oix$9&SysBuMDAsR>);#bM8!MV~d|6Mo~1BN_(vj~76k4n($q5o||4Ap2t zw>47GLZXc<*FXOEwEJ*L5uyAeO2zYN{`Ki6NUw!X#(eEF&^S`vy`MoSC*?9j);0jX zBel&L{cYZ+DKP*hH`yK7R&rKZ9R?a+D|$jSpsMuD628$wXryeh`qh^*(udmgem>}_ zgF%poDD=BqIyN42Hd(RKDPZP~ zmU`%~sXN=thTl=`l$Iw_tnXEiCKvWIn`%FbYu4_E#y~bNpakp1l}Vc}^C(JI0)@LR z?et|zCqQ%aN9cTt+Fmo~d`*dm$tvQ;=kVuCY3I}@zX|@F*Z4_jy{X8#uIdh~8|}#J zvosAQMUAUv0)MbfaWa0|31Mn+oZV({`xy_#CchRB+H*mjKL|a!02XW>9c=eR^kQjw z$V99e`>3v+dP6KTk5JrplyF4J6IO8=s-QT$N~IXHvgtpn&i6JxWic_+Fn8-ayTDM1 zd9JntqQ0%IC_K?aB1hq0d6b6%RcB$%)*AQ}IAuxzkC>#5$|%#q}KMP_7-&*wdoe#1ImTP ztzKrgT}qEmRnQ1%Ho+XuU;tMoZd%!6s`sat?!C0p7EHu^+t2#RDNwORWlWBJ2qSnx zF)k=_vdVZ@{uswa(Yt7j+T>R?!_V~vRv`J3@bKn&y7!r{K=rIiLq{kkJoTk|BB{Mv z-B-cK8}j+LLd!`Wt~g`7VRr@)-ta;yS1J5Z9^pbI+VS~fquUt$L|S?HaaTgx0_cht zspulCYX76PVF2u z0c3ir{8*)btL%Ugf37=I%lEbeh_4vkI_{0j!@H&(^$R-T_jw4Wk00%Pxh$?ZZx7xn zq+|ZsgoDD1>)=7}xdQ=)=;7Pd3*rZSE_K}ay1ua%SgdXZ3*eF?VZ?IqW^pxwL%Z;`?$>K-FZlxoHPPUmgOmgtwDLZv?Z}GnT_?*avb746O_@6iEQxL>aBmL z*hOBZ~q8{a~7(9n>#Z`YUGk zpov=G6)P#ypi_S|QJ|`LIUp4%ur~Y1zN)gH}zYaIllDf8X`{n~Na!;j0PYhzB$b0}UT+kLO9QVM-r8nY+$k@#kP#x; z(FgQS9-04O`?-v@X+7HYd2>Q+c^^hnv}aN;^w<*oCvkkw1`vNNI+N zQ22-=aB3e1TOWUoIQT$!**9)MXYyC!D^K!442RB`7POpi8qYY6Od=-_Xo1%q#wzzi zbjUISR3|vnz~mV07~lyj+sqy~>yh zsVY=O5}f?5KwERn>2><5@J| zaQT<-Dpjtr>v_FDk(NIZ*W1kIm;H`vjR4vwr5#GFce}_daEw$R|_A_n21y=9yeAznRzPvg(0vr=^)N7;e#Kk%Dk$hgDzLV#BD* zL_I`=w@&~P`qHAWI&6>L2J)HAiL zecvw_%bKTvE(fWyTe;Dt-9n-`>Z}Ec+xPR+6_N*Ss#;DA}1_=AS=gaW^B1MKp(aH9%nBu6nC?pS2iR=-MC{ ze6IG!iQ7@J8ii8~7<6d~Jb0ZO;dnBFbeWDf2g{1skQWOl{E%O@QAdxk@v?wnXqOve zkoIt7ghDn~CJ)qp^Ey>b8o&Pjb$C&~yEhgL zu6jD9re{`2HX6tWW^=U|ZGmj|8C#qIeW_e&O6R?OBLukvitZ6_IOWu#_Ny1l+kMEY z{U>bjbfaq5b%!WJr0o}agwRGVM$PRAy|`3unBRaKPTrP{;PA6_io4ax*EeRCgukz^ ziK3qk^s?;=)!*QZpkyBx>($-77*;4UyAaClee|&p*U-)4VzWj(D_%Q(gtHay-D0Jh zdQm1j%=t}&$gBDZ+gr*XRO`Oc{jl#lppsmBbzjq;`_Y29ZjN=;FdP|`??-Uc*2hKp zU`CnYFcxsRW>MdoIo&A^LPE;Ue=0f)bz?LnqMO|{x@9})(S>sg?w46pwpBMlCJ%xg z4!naz@z7s=O;~H~rt@hHt-o}qXE?Iy{ry_xvdY6I@M5z-Dpu_PpLfv9wIMKgA3)la zb;4(ODA27V5talkkyNIp*L5HM21XOsajaXTS*?C=^#o~ym5{$F=VRQU_ZxBXr?mA~ zab}!$m2sSccFJ2PgeO0XQ+LaGqQzl^H!BT&R!3O|Qd3`~L-}x&(V%($u04C7FUfjH zJD-C_hnNv1xUNcUH4$rN*l^vqKypx{fZ%doaPB{OGb<1+qIF9x~mv~ zrSk$!G%l%h+yB5B|geLJDrt+oBD zH?!}>L<`>F=qG?r5?4iecEdFj2> zWv_*j@~LAz$78%~vQQg2WP>c6WBsG?mkFolWoP17w@vV((Wz8ktxMKB3B0M-CKSgG z?g{#oS0so5(VXGO+MQ3c0MWf~utKHY|bsc<{iI%EFTlYMr zKgPoQ+n3Zhuz=C<>}X4jdh|Xl?amVrzY$%u;kOZvH$28z;mC#d?5LvJ?R3El;xIW4 zFLInYn39(%@EfiB&Y0kOXrIz)fm%t7>*ePDDCjt~!w*>qtJkb~;owa*|AW47R)Scs ze);4oQ;OxRjdVcszzpT2>#q*D!fgrM;#b-=_((16f*%Gt^TV5e^ zy{b&p@*npDvbZUa3de`)Ob4vKo$+e7GPMI+JtAqt;)32Rt}ZEbEg5Gnn`X!+Cykq> z8D_jY@Y33-HHbO^j%@?5{LqQcm2U(=c5GXNWcei!aVK)9n%6@JxN{vjr+&)6K0V_Z z3IR}Fx+0rgr+qOgxfx~1$U0=4(tlHDI26aShV*fUe61?}QMD6T!^P+s!U z`ALb+%X7bqDnCnv-Vz-`c_J!lm}FxO9{oRr-uA4aGqAeW4^)O-mC&wU)dArI?a!7<=j33##8-xEJPqe^SLK4FpbU6ySTe+2#tZF zcsVQPv3YOScEB*-5sY{%-P|@R&y`m(+>UBnrwh)3{xp>h?ZkFaavBiDTRgmp z`F9xM=fr;h(kQ3la1L}Ig(gcv>9aYBU%g2sk;fyX_t}5%cS#U+f@bWKnoHtc;kG{9(%L|vpQ$#&%Ly%q$NYK=bd;M z6H~MTRip$XYb!t0zGxw^zV(fjvymr|KR?PmTqg>=f7*fN;I2KoSTyH)Kt5@SOt!hyOe0JA*=>{%)?&?y1Y^%arsj35{&FbcxdV&D zD>LJe!nw3bfXx$5Qg`+XlXlgVyR8W1Foh-uTcf8T4nqE9%6C)bazYSW-SP%ABd*?Z zT5IPh;GE+hOLa<5aq?SC{2YFHJ0A=y(QO(zNxDDBsOW*I`*DbCJPKn8s_>d&yA2a3 zAxy$CwYU!l#liKfU}u(Zk2L~5DmJn_g3_K1HDb>+49<=jT6GdWb-8^X7gcu6Zey;; zJq90=^aIgf=9=B~ZjeCu$4qfX^2ezTj+v$f;-`hv69|&6i@F3hnhR2-E>#8-mUS8S z^9oS=SnjO}Ed-ww@pk#f`Zc_kvL zmVouNV@f4(RKk3>wBwIrDr-BNtsDSMaph)f|d_hpK zlzad}wo%#QXuH6Pfp{-@v+q3<<=4(^v508TM%_%68~o%o>w6TU6g!l`IQzs?;wBl8 zk(_a~jXSciVEa)&3#l(8JTnSaX9auKmW)X1E&ZOCw-9z)BuZfCN*~Ayy(*-sXb0+A zkxmv;YmJ%{eCfWw`t<3a(#~Y8Xd{??t!ka$Idg^#|_I>BSlaIQ8k5huzuf_G3@n8gvqi#YIu` zgk~hfurkDdLPvrx6z-g%G_}Rn&y32B9HUWbQ4Vh88hM^SvU?5*%QHn{5-_ZLXbI9L zuf$SL^{vX829NL9r|&Ou!dj|tG5Clj`DhlrVaKrTDw9Lnu0=C|l%3i232SLIM8+cn z(f)rb5h^k0;1!_~hpkh_eazqiLBI0UjL~IiUvRGaQ~GLk*z~p|d%s7E>9F>w*IE~S z;QJna)E%F(t0Ev$re_N@qB(12QZm?J(&*n{DSG%}tx`lvtkUCpYsZ%75(fThe~ zVNgVxPxB2*s`x(QjEDt&GuzQ*ZON3PLyc5?=SB?nUXZVen=Dt#=5QS&9TZ5O*jb?y zzYwQ61wf|!;sPLI6?ehEE1eQ>JB){3VkogZ5V{oydWBf&DoW_>*&848;J64%to9=n zy*;lQnXygjJVoLn8AOL_F%_qqS`xd(O6Sbl`(Du@-O`hU0T<$Yjqhu|gDV=x-9Z7E zV9W1twdv0KnxkRv`$A7T#aCVm957G$<-f1Y2Uaf;nzTTQg5BX)P2B-DxX2$m+5Lml z`zRC29^tKVfOaY$uy`KUn^j9!TFfDG_0?{9U=JeolIlVTJzA5k6lqI|rc{oMqN{0c z@#WI)RAa)3w8Ae*x9xWm40?=XD^U#4=_`8cM#b(fKVt(c=U6h-iUh#FXVhRm+KrNPmfJJa8 zqS^~<5<~Yu)cKak<_Ds@^TCs2>>BnYTQ2O^Swb!Z))A_yWPq!| zaAa!A6;Unxy9tNDA^?e$PYo*qV4cR(+myi6_(_N%diN^7{|I9KAmOOqIai+4u4jzA zqwjf2kn+=+`=|Sw=*etl*7$;>!I<2g4|wF*sLMRsq{j6hduiWM^#wntQSg=w<|)Be z3GeXN3G~VAZ6@g;UH&{<8SQ7J!zq`3XZT@m5Dcty`2ww7rQm%&=I48PIhZELj~^90 zYm5Cvjc3(JDP5!0q_;^H>@lFTQwrluA{2R1cCMXqJNB{Tq?cr+Kazh9ZBHB|(S3u1 z;QTm8oBfHg@R-$NVJJn)p&v z6b~|Q#|~ZoBMWOdm?KrQLDq7;ob^cj4J*MNVVadaPm-p5nLQ26yY8H!_pQm`K(1eh zQVpwxD$>O{wc7yIUvoQgPlci`goGfL(EwSoMyk87Wa8-26wr3(Ap8sNj1DL)BKI?1 zlHGZdkXz?f#gR)qWZcC=jk6Y0h7vv2stvPfw-45>3;`WB8T@S30f~bE3r8R*RpM>k zi9>smalp#Z29fU}JQIws)Q@vynFm(vRl2P5MA|mIjD>1nmEO@+MA3_X&oEN&jF)am z_fA;8dE{U?iD|A6KiXa4>ZQO(JvEv&9qfKdlNl0Ad{$wa71`j*bKA0O0hvmKA#u2- z*#^7x_Xgf>AZ)Ma(3ycaBysmiy`F-iMQC=euOWRWG4&u6$gGabBPm%M1q3(ohhd<_ zY^RRgNG$SPFTBnd`*UG|TTuOYjMzdq*!IP({I)ri;Q_Jlr`SzTrMY<9u6Xqtd5xuJ zDYhg&Yv8x39!ei=WttR|V;^PxzG|umw(zH)n3u3P1xMm?nXQE?!qPPk$~HID({{0p z>uH^gag;ssNu}vy!zx;~q$>m%=-{H;yd)Cn)HO)o^G$>@}x1DuKqV()y8XEz7p_giGTX z)Zk)K1j09=2|zkStzj2agCE$VcBMTfl-$0>`56Zi=h>IOFlh{;PXIzg(MS%`d9UaO zWDh5a&6vjr0=NaA`tq>?v(L4@kQ4Zg1dJaz1KUPBND`wX@$v%EOqc})98pNLIDM4i z(HupphInqWbapzXJzZXIt6gmMy>Et-Hn-QXQ`aXd&H9vCnLkzc%+lLCPfqMPob>5O zSQe$`mFVIbc;OQwHU$T0;QOs(1eIfD1aUh&9y0t%Y``<8X1_;zVWdY3noc|w+*aAb z%w>HX<@p)nQ->QN>+*tFR{#k-i8JpRdHZZ%?-nOY_Vfjt8hHHpyg@-(eJ!Oad<5%) zS8Pr-QaYEnGm)6BM2ZG)O}BXoB@uWURx4F(L7wW*;GkDQh0td&z6V zrEmj<%2dlgEqSe#|Gv@=Vq9$n9--t{`6^kp!%%_YvlgUjs9?VMn{Ql|v!lL4*zUHM zOjiH%pH6j*LAQiHpE^&Jx_5zH%)X}Q_-=rfY^NqRu;7+po#CWrJM0&DE2E;+DNdBy zRJ)Q|W25S=e^pq(x8~w-7B__xP(Kgvez2iAFWQ()&x)5;?Wko56CG9+sfqc%=9d@j zMCc_QQFXshBh#06;Pzwl=Xz6%BF}nYPFi5a1&^-*d+MKg4(3;%z$~lJ%be+}c-_fYQNxW zLMl{WJT77XAbRLvTu+ud%jjgXA4VaGAMl^T9RTq$|aXTxUxsw>*}UlElnqI9avZBH3Z7p;rSwmr4o|}6l3m_ob@1Wps?(+ z7Ug5JQrlpMP=B0V-gc2S3uik&qp>H`GC34l z+pUVFZW4j9o2qq#00;ksTfG`oDva9uFL!X=b|_MPjtp=G_j~v(&=?>%SXWl&sH1>i zxjD~XqW)fP&u%Tp#-DheK`*QfoLn?T&$Jv;M(*+lpN-E~3a^8q@<{(Y(IdCBpI`Q@ zl)z1_Gzx|r2{%ELBQa2h2Y&CKbd3*1Xx{j{h=9!5v1C|~6-IEQ8E*d=v%l`KBB}(N6TmH+A52ErFYm{EFovSW*Sw$s% zlY322tPsmy#R`H4=Iq!}jkq{eMJ0sSDik4UjaSTy>Mn*ZtJa;Yxf&B$l?*7Vk%QaG zp4ToZ2b6=4k%~s@&l{op2zL#{BHfkz6b)iwL+9i=6OBtcflJ;)Qzt#C|0JNoPcQczWA|BS#?6&sLt= z|Eft-u8{627O6<0Df)X*!Vk(oKB#!8A6uic6?0fABdLv znp7ShXD?JSvx3pg`^jq=9_Gg6iMkdKNMcJr==SM%T9SV*=JNg{V7jr=X8^5X5Yc%- zbZ%mdol;wx*9wtD;WoS_&@AR^v(@5!HIwZFpvar;@ZdOnOl9~j%g#454=p$=4BuF- z8Gu%L*R*xya||Y@{AI{M&MJgk7FmCM zc06(vX}Wk&{YIUM2@8lyYBF1xZkSnEob$y#Ltl}$G!ZkDR0qdv7&siy}+WaF2bl%&R^UsIFGHKG$XwePlR6+H8EAYOul&3c)FC=IBqZ5SSKq9e-Xy z!?X?g>)};qdvYE<;pN?>JrB3rP#yyl64APFDmD6auxOSI)YTjZDkAyUL-vEnH5-jI zxG+pY%Sg6eMYpv*EeY#9Mgtmbd#DO6F@1LX>!AkM`rTNxj|qIiJTRQ3EN9P6M#x_` z(3V(G>43cJ`+{NzGO!wX zK}!^<@+J&?qkgT%!)(_lxT(asd%ONu8axeH{Fo2{rrm-Mnf{mh&vr>U0L&{0t%{n; z`(6b`g0&liG?*4tbQ>=1Ye0$YJU6{}dUtMoHz+?kW7>sY{D8X^@W|Bqw@zSv z+s-Zo0TJ5^-^ZFlXf$?@(C@h$c&D4x7i7%Ls5oGrs?R-eTgh17Y)fyJ4T!HQkn}fH z@YoxNJF{h-^k<=SC&|m$47LV@Z|e5N(WXc_c|YMHUM3 zK~-zg87i2}NS3kXMXL6XXK^-6iLS*wZxIkAklzThCIYoaTeyuxF`v4SMmk@1(#`~v zv#a+EIO<_02>CLEa6r{ZLy!8_i7Utqw`si8xKNLn>7=+#?Y4}~YIG-7eWGtYa=RJN zUGA>R?QnS{=P6MU?S0Jvo3rNJGJ^HQnuZF*;nt@zEAwfdK*wz6S*33zC8O;W|N5Ah zNMG(R7To4##6+%O0aeB#Iawpb?28yQGLS9pLjGafm}ML{Ygw~DWQQDNn#LK;F>yNW z02+Y2hrkYL3}!D_{;VqKy7?2o7$K%=6J2@W?nwt%Jh2y|OhPNh{qfw1~%!p)VQRk(2y>*AWs@_q;}ET!JUA`|!h)(?6}{ ztu>Zc7w>qA5mO&T5()xXwFc5$5H)qwP~!Y|a60%3vDW_z;pY&pzOMsFtpj2s`V&R5 zPG^yV;Ts~|jzrNx9X!hH>md-7&}QsIgpVnVBCZqAT!`L2Iu6$RAE$r!Mms zDU*VYLBEXFXx=AS42wpaZp-~vQp*H9jh80m!3W!l_`IcF&fFCtU`q=CvD3Z)VlEv3W*8WelsJSX6=f3}R$m&@&^o&i&V1=;nz^(hP8W z^YDUecDA`aD5R*X|GUrZU!+%rCO>$CsTX1^YBrO3pS-%vT6ot>UQXtG@({!cA0(~( z(N_x=qCKAyWFNOEif-ekr;l4ha|5ui_DKi*v~bmA`ldz%f12-K3QlZMtUSv*ZRuWl z;u5lW-5no{d=+d7Z#Rl+8j5s;Al|YvT09Z0?EXrC#MlbbMg^#f?c5OLrhQg!-9ll+ ze%Ouc``Plp;wFa<|HWx=sc69We=zl)v3!9mU09^VqL<`8*Tcp*Iv}L4p70Gyw z`?+nZe-`yL%Z^U%1Mt6>_zZeDggV$`K{3f(!D)fP^^zxJd`_XLnu!0|lS2LOQeC71 zmv3Cuc)a;fYiA`rZ0WjE4UhVy9GObH(u+68`}U2E$RLR*4NS>Y zH54wKhsM>rHd(jnr}L-&s4$&^)p0B(kU96qYe8Pz!@ip}3+ zP?4NQs`^L3FVXZE_6Q|fbS$98OG~)oe^sG;O_H*V1bfOYM1sa2%RkEiS>K=eHW;8< zyJb>@K7e?tY^YBP0@1lTNC$!EE8^Kw~?t$wtz@brY$jCk$#!etHc)s~IDIILHBW~inxL4)=X z149f)hyUktb!k*(fPSZ4;UMk|A`c>l#6htIM2L2n%8F${AnFD5zgSbE|24#uoo87L zwwG}8Um4j}P(y)h-)63=8Q6+yJeT~97z|8IuHvD;{n>3YmSwlYeGdx_WqIi;4NhKcaDUHXZ)6W=JQ$%6qz$3vo z#SAGoR+O4vZj%ec^;zc}Q5K5y;9TVaK#6~DO$Dx&Av3|c))$M9YhI(21VO!_R1Epx zu5ZCzRw7ByhB|6jGN;Q51F{h$%yaQWTZ0A_yt11XY0p-lNjUg5ZU*j;*vU-c@`4Xb zDeR%`Jv{)7p#7Iz;lK+b8j^7;>hcUptaXTsypj=)xkZ!Hi`>vz+sjC>MP+I%hhVXt z;LX6tRD;*`Lh=!M-19z#cO{^A#)K&2XQ}tuITON~59qdo-|K)LM)9MkMKESMKr4oE znf&U!-diB@#Xe>FvqZPtl&bBm|NT(zs%{r1JXD>msWKbCw#E7z)Yt2Dr$D6Bd)s^D z3bMMn2?eN=8MB%ypk!3xsL;VaawPdd;%_>-CW#1m?D9+okn#QgB|_%deUE*cB{~=R z73;on^Ei3an|-n8QxqXxC1(q~=(yZv?Bq_u3^DyB)0%Nm`!)A&;eniKo7tr)Ez0Ye zVDs$>7i;g5e5uX~?kJY~d%j_D?F(uEMhZQ_7!byWbx^>)^h3_eU);(H$ou~Xz#H~@ z=EfCpuPKK%pn}DWs?P`=Pw^pa>PxL(@&F&5v;V zB3pV;HXU?5oUL{jFGVV9tcA_k^YptX3O6tTU@f)YilL|+rS&^?S|>ALJP^6o$Q+dadd3%JDm0NX zjD7^%#1^JB53)axy3Zb8`|EPzJhkz?ofi=!{7JPCTC_LOt~px5H~E}CdD+KHWa^8F ztdD?-FOa+5tSY=A%z%IU7!L+W#BnyYTVYh;^3uf+?X$|kgzPC3>c=(-A@Yc)pJEK0)i>Oixw|)dOQ=M3%uU4aoeXKk~W> zRZ0p98pPoJ=*DWGZ=8s*p{MfQ1O7`a4V#dTg@=Ujd$O;Y6I3mK_zhfYfV)8JP}AWuL%t1Zw$*n zH}8MoA7)S_o`5gpejJ4Ij zjabfJG`S8u%RBkMkW@h6A}^yqZOq{KQkq74sK`l9^eHVYWBBs>4@V(pK7NL2$u5*8 zmbD7TB)isH^*Mz3z5!JGwTOTy5<^;Pq`>zAXCV#2jgLp@6I{{?S6Y#Lo_IYFZp_;j z*~$SM=+70slke@K5T@PZ%>=gm*>TW4o&2bER)AvWy}%0CoG~LkyIV3Ax5Osyf8ZXX zPgKm}s=}Q)tFcNw6gC!TI;ky-omCRcRc8Vm$4?0;#yDh&wzOwPmJ%H?G*iLSXm6I(Es-A zOu&vkf6#>W!Pf)%GpUwlhIIUU%t?q87~4ZSI4wcmY}xx#E?X9nV-$ifo_8`c($nd4 zpBM9Mxw;hh5l8Wt9+_?vMD;zyri)JUHEff1Fe$9)Ms$HDogzu!8+e+>!g(Kh`GDxT zO2y@x;w3@x#~ip~bawKZf?ijfUB7hB*!sD@qSN}OFNWE{TNC%#;zOPtS6$r-3fBeVxGiQtW3A43(D2#!#} zj2HIsAbxg?^Yff3>TiNk)KIK;fXq-axXk9rz=WF7M1_K^F&JcQ!>!?QNY;BL!VJuX z<4KU3LdMT-px6s*M4T%l6#-$TxYlj1Zng1y^oY*7ed-PiuyormUY#2ns4 z-eHhxEYCilT6v4?+c0lijvhSQOxlLY?H3SG#-sa=Us?DULvI+%K^W(!M2N7 zHSz(NOC-Qa86|`;8;%mJW7$J+0&P1p`kAwpBR<7~vjy6p7Z51@--}fb;bAOU)_%|% z`b_xHk{<}cwR{d?pLSI&^ZB+PpFUo3k7#AO#4uQvGQs!=LM!;4hUn0zHhk5T2s2;}Ve;YO0#r zJ=}02!2iF@@*V#;pWIO)bhYFTRM7Y%(&Bt0@O$x(6yW}G4>2{AFTWruX7{NFgl9wp zG2z2<+H4P&RwE0kKWbnaQ79@V^O$&0;OH|b!#GZMl1&P2oo*d4Adg&$N0ppR%n24~ zgGe5ENcZ-s&M6rKD3fLN8Qn=FM_oj}<(xOn0%;ugaZHP~iX+AMCd;O(QT|x`Ci=DBG8CP)wY!c>RYI_= zBSC)BJq*`6rF6| zXJ!VZ5`5Ig0$>870U#riz~MEV;ssX3dV={^F{&gXXWvbY`*@--M8BlZnJ8d`=^vHt znGV0)4!RikxpIQ*S4`r-f%M*eD%s8IQ`otMz`8vuv5VNehUJ7a_}7sEQV9)nUb zwFKB6F;QaFQ1wK}f76k60NO5x5vhmYKorsyYmkBJ8^YJl$QKc>K3ksxpXUUETmrTo zm>pH-wBnoCVVB#}?uxVYZP}vrV#+GS<=9kHM5Szz}2VAcX*liRGuMQ4B}ISuyTY~h{|)8BMBpHhNHTU92%9#Wc=$B z(2k#qG+WMi_@M4MAt>#H)Q1kqcj-^Z7+8s9sQ&cu0Zl*o$c+$bdTs2<_KC=HGn5P- zdmO8{h6Pxv|Jo);4!*TKUtnf2mnsc;xfHf@b|~d;QL3(pm8q> zKiinv;Kz&t#6~JvBVT}v`~5%WU40+$L4TPh?(BP1({AC1@-!6qiDxNA4GfX-8t9vZ z-_LWd6uE$>!&hws3SPL396zJ?;2-u4<)hJjB|p;k{mWS1SC>>Rry`8Rhr}sKX)vO8 zpXG!P1HI0XFrlJd9nlVwvg~ALrz4J09}6|drJbUUhra;4td|J>|Mw^m0sY6ZL5w*%^;14~eE|%4sn~w1jYZO=8DWw$O+cg zV8uw1KJfV5jJ@`zkP^?HWb;%#ZH^$t9%j<1F5l~Wk_hmSRIrQ6c5&3cSX9Oefd##% zzrRVu#k3wyY5oS!q>(hJ<4@k~!9yy`s11@3tIoo~B^8}Y&OyO(SEzh?844E-Bfeh& zdwQzTxvA2HN|%9QnDSZi1$;JlvoJD~sRpZ!pUP3Onh6S`UX1`TdPkf4Ul_Q4%!D`A zcss1ImQ?CnFSZY=ATm`}w)8=vv~m#9Mb9rs-Ev18crok9t+AEy$c-KsM)VP##NG{% z3b(wgJ!~@=o#(`7g$Lu`($aDw{sN8Y*?ZipVy``@m@)V0jJoG6$Y4T+_It{TJW48l5swT|6BRqB2PzO1AwBPDFcAFD2Qy^O@gW6;fiT=~ zNhGn&^5EgQH8>}J;JbAAQP>ja}PHd`>5!&n8nK>_8pe9gjU_b2e?x*Zds*m%JYgV2)j?<`#Wo&r}2Kly^G>iv8E#xi6bl(AiUBgk6_iXc@J=*wH7VbC(El#Igrro?)dcpwq1C0W& zbvpy1xr#+>7#LAcXNmdua=&pU`vQ^#W~)2oWyVa(iY?&K4K$;m1+J58wvs`Mkowr@ zJL(WutlpJx>SOn(n+ykP%*F90poCd<4-hsFg370gKVQtLPaQiEBNI_@e~w_HT#q?(I& zF{BzVh_q=2Yau!Gu#@VQ#LU+M`Vq?NGm3n z11)k2j)1pnEYBC*jd9iC;-bt`e)X_=HBv^l1CiCwy0#G}8zs!;WJ!_AGaDP(4GWCQ zz+l{xSfd;}F<);(8tiKhF|(ZD>gF;da0;H76RCnn4i1*d6%N-D<>K&4oJ|Fh6=B(jbXa>A}{)MjhY&ZcXo=e zln>~80G5Hhm{DDFSAnYyewfz7R2-rxs>IT|o(Xlk*?X=J==IuW?E&76oAsfsgSt4PffvJ6HYG9`m zb}M)SkuUb@Y!BZn7lv^ihjQVusE(BmN1=_!O7cX&5>{cDnJbTIWb8smm>75 zF*IW*V3A?hEeo+4`2PyiSkm->zEHc3NASF(o}v_RX%Sx{wUx9>8xB8%VrUG zQ)4E=n#zit36X;AZ`~6!#Vw2opmoq0*qng;G46Ez1OXs;Ih_a;8$v|XGd@!BUm&N; zo9>N)vg$2csy3Pl;U6%O*tz!r&3f{ED^*Z=k{6NF&dVjxx-pmtY|b8ssY6tQokUw} zO|>7AT-C=`c4grNmt8b$U}YWOe?Ud**3D^+U{Nl$qS=S5H`)*ze)dM1nMdexurZrj zZ=;p4M;=j6qpx!AI(FeT4US`zTcN5`Lb;)#Y1#PljbgffJ!I{118`PnPwBFkBNb@P zHmF$&+emt0Yq?!}*ZV?C{LClC+T2v40sFP4ap?j>x379pskX6E%d~%YNYI@2RhlsK zn^PTevntF$SG3jn{XuHmt5(+&!HcaW+gLInPOp$rmsss#km>p?ME~i+9>J#iX=i21 zE^(x6I;PpRl{TK}^WJN`MfbTD{trMBa7Kh0FO!*Pc>Y^Q#3cZJCW!V^@e}JFnb&Qu zmAbOl?*RTI;Xe30I?Lk=VmxF4FT-EC{{pypK&9LjsYywhgTXfB*7A zejvZ!DJ-hQR0C^{t=;q2bc+ynmb7^`1d!|q!HY=d!n4+zZ4j6S)r+04uub1i3Nwv0 z&M%!Fx3T(7`hhDGtunHU#76=>A}nCF1Hu03{XNbBaY5F00ryto`?SgnmedwEI)wDpvGQd3yu#gKnI;G>{si*b3X;#(TLE z39dBnzXG!B7n6&}IWx#hD1Oxu4gkvR3&0{LP%qg644iF>d_2O^{w{)YI$P-LBQ1+= z!J~X~Y&73O_&PVzNNhXpWkw`1&~U;PbWrfjNw@cX;CCKzwWH%@WZd;Q#+GFLN2M!Y zQ2qZ=4oQ+517|I_@FENK|9OQBVK-)i#1qF&a!^`@;(VT3Y+Z8J* z0N^VTlp-^ypW)?eA3yI6l1~OACbV9K%Cu?r$^(w3wD<+={*cQEsikEmj?S4hFl!Q_ z!TDN}#4?Z>s-9agEwz9Z-x~d@n4JO%4`hVD?DjQWb7Xz?4fo1HGAYXWw9d8m`f}R6 zZwuzov>a~q0xYM=@=RO$`JK5OLwUNpcPWrt=`Ex7IqaSBpsQyyfM}gKPaAznmB+6? z7Po!F+XEbQf9h9Zd6qj_JfrAosh*9-LR5-Z+mZqfEm1V|T`8usN~m)0%=Eac3q@Mp z&pUn-BvFzQGf5&GsZ6)h2`GmF6lXA>GkYUhu$S-V()4B-t)cTip7|N`otV%Zj9Yz+ zW6H7nOG0kh`Y97tew1g}PKpG)P9zH^*k ztWFRl z-!u2(-QMYLpgQxe+C!jY&T&HBaEDq}a$jrr^kVkoi~WX#r&PEU2hqL_$38c~k?7!t ztZLI!fefdUieOJ%5S(ja2apwvN2vNCk|ky(<)-p*L`D=+jcx$q{!ft}XaEkF(5|tw zHv1W15n4H|toYitqcD|L>NsY@Qw}K(P-XOCjfY!za7<@zfpksb*q^4zhc#WSo}W+f zNV@ko>rcfQ#N)L{rVmberl`v#Esz=_v!LNza0tK3GI#?qo%15K#-*FpgLhC`sT;`B zYjEw-+6H_<;Skv8OE)=+M}8;AfUE*Uo-SIi!^>oB8=f6!53ON}c26}V!BJ>2&yj(_ zS?ArPr+w^HwV+SY9D$j@L690}Pa#xY*{hJKPE^a|V}^@e6$s(?`3aRea~lOm;lpk4s2W{#+n%#F8a~tr zaZb&aW$Yt9pdrGr2CUf(gy~evcy$uy(AT7&BtGf=w`RqGR-Q=NcSTiJd-a6Jy1^_G zhhT8q_?5-xN98M1=#OM<$QtYxkE4L*dzJ>;7Qs7oT3jwh-(dR z%YQ&#dmWwPA{8GekH}{Bc8Nsc$~O+!aFK=pxxDZ}(_{XKf$&grfZwPYS;wP9-4__Q~2U}@Lv!6H+;1DNC@IaV4Wpyl@vD0?WQVDuwz#o^s-1=OEpgHlz%J0`iR92 zw}R!XinMqPdKNTuQ+AIp20V9G0|!`IC9GO1I_|8~WRZ^qKwo)V70HFRr|@Y#wwpU` zEjMcRCh2&!Cw=TfmhrvMk z0(E*`qc{-i5uuuckoPJlK}fr|wig8Dq+d+H+K!&m;MUDR>BPrH&CH#nS%~#Imstr(!}31AArYMWcShBWjH>H0zfTqm;ju``)w20 z(P7%bZHB>+r)pKQk)8ET%mkS3sP$)9e*(cz{Jh}li~}T1!1%rw_mm(#E(2i*T-Wuo z!$dHH*}$D3WroPAjH!-|v6cS(n>xuW>MBUyhYLSku)$ z{~J!tVm9s~r)BrHv|Q1RT%iKmxpW>z67mI$1>OAVGDTKTHsreBkP=c$!WZD~SI$F3 zN;lK7)q1J4XRz%)s)Z@P9g|znD0b<8=Y772OHUhdKt7Uog1ICw@#1x%V9OBfPDFIs zig{nV?y~X<*)vcBlobZJhWfX_+?MDny@f>Hixm8!OrP~Pnjh(PWjEzTWkP;yk;+YP zmM`^}IS7{^&N&Y>YAL=uvSq5ivNCeBlrXy})!wA0hIb>am0P)zX$^Whu{nD-#R_ra zW88yU^tblwNk>kNj8#rPk*rBqbwQNM;NA|!EdkW1O-P!bn%aC}JsOoFu^^AzSfsY? z=sr4*@kiwNE_r))h0d>@q+QbaQnj2RZFCC+Hg`9>^eq37r?T8!)D=iM9y^xnQPdqk zL_=>N$U0-+2H+qN*GadsL1O0#vDrCeH;+Qs({Y+O^Gn>$#2}{Uv_2(HtrBf9#qsp* zXQZX=5Sondq{FxOTxY13`MCQDz}){=y~A=au$#+q(4ME*dn_GQ&_>69j-(xI$94Tl zBjfw48$9;11u<94`YqsS+sYxi2f5?!gKos85wWIcb3jVYT7wRm5U)~vW=$()5p#4Annxn{x@n~XutHic%a|CK_J492v z3Y`q{%Y8jFhwwGQ{3P5&KD@O?)wZPnx!EUoG1A3EcULd7akjo)-b9)5d808>Q{`1E z=t4ZL>wB`dT5lkm9ttbevZZ3iTqsxIVxT4T>D9}=a}a$)`Ku`M+}au(n4s`S+Y*t~ zwZnt6_IgZYT1GdXqo|1xD)svz>+_MB88$)-9XLOmf&=t@(tcwnj{1NrG`NhjI!BCj ze`0fjy~qTZ2VfNjQx3BemD2LFR+4#?7A!*YUGQWJTVl+vt_~8qb#8@HjpJC`yLI0B zxCV$>Gl*hIJY*|&IXMa$mx0xBiZI8!#NYcZK#Ykp(MgD2$RF9%|zLrK=K=Cs5M$!iGW2b)9BheB<*`5t<34exjjlO zxipgG5;HKmh&zRy1AVDiv0yE@f7GOy$0>^`SiAIO3$BB?M26e^gESs2)TiK6Lypi! zRy0exX!}X$x$JH5OKfF!4Xz6txbOiMl5fxTxgF&J2rK2-noZoZEy^8m8>?7i_1kl8dyOC$~Y8HXMum<9Pr@Zc~x*de6 zY7UWbjF|SLqg3Y4y%_77cOCW{aw_N?QLUj^F?L4O<`%KJ*F|rWUnv|%r?qMV+{#y( zpU&8vWTLmyQUl>kWT4eX<1Dp`rL&MASE(#qX+Ev|(pySvLC^F4vdx&U!J82P@k$TS zez;tmq$!|XASeko)df~;V%mv+CR~r}9c4Q0F>?t=I z!Qs=H^*)KGVPX)YtL_g9m`EayvgvJoSBfpn_?sm8H-^#Blye33*KowBZz$WMEa*l} zw?EHsT>^MTI2jCpbLJTcgDW^s(PVrN7Q7cF15PUv_(tO63YjICcTGlaLaH8KMwosT z4h>PxKlDE(USkJyW1DW&pMwp%=*&PSC)%tHiui80pXJcinXa(}?2qPPdX4LGT0Uri znz=p=UY@f5>b^)^?=Vpvai*f6U;@WIhWWR%OJLU$L7vqgdn5kW;Pfq#ugK z=fhn=^HOUOkZlJ@)i^rv7$}Q#{&J0->;%gd^)(rTNZN>m)fK>vy(LJ#8|Ohj)p7ui zEu?x02%sY3D%g?gAZ0i2)u~8K3XV!pIJ~}) ztD|!&jzCLjUYdmyT?T=jb-4i)9|T6gyTc+$`Z5dN15zbOlX-cJBq>BVE3$U@TRW)8 z>xv<L;3iOYE=rI(9a@#-EneOBO zI&JBgazqBKkh;OID{=@K)ileCyTLX&FWbRsN-2b5%AJ=^&%n(<5r%Sc5+ zC&QeeNH={iZk{-G0$bRX)Jx|1Zk%VLu#<%8l+d}J@Tn`p>gDBI5oB_OUYAuS zN+yY$$aEY$g%N~JhSV$Is|br8Y(7fdGwdV(m+?4dW)|IGasH5y&WvruPP_E?9WQHXD~QHD`$TLm`FuXiB0Mc>4pvui{gcaa z+MJ9c_!kV!xGG-1g*aN33C~2WiBmuL$PuNni+VKYObw-7-S4;B(dt~Ai2I_NsTvEQ z9>!VPAzL(;n?^*>g_mPU#S^D?Q-ZPp`F2TaY%}Fp{IC6sj%~-{18*@3Sw+x$<0U4r z&Pl6%DHFdes6{7N1XUW!1#t8HTNb2zg1W%W*81z)XM&H3J>F(J6paq9V_Ht?{mAMsli*U z>(j{Iqx^+}qVi;uV!yB*=*U&9vrEouw>dv0FnjS;gHXsj?R{A zmlz3;SkqD=W`FQ>yjRjt3L$qv}R=-GoUGUc62u2N|;4U>mLXy3dW z3kuTNpbf_(h%);&kk9?u`fJHL6D1|BN`@pknFh-`@~> z_G`YMtUjc>LY*jDzvHsT$8C*IlqQgtosE{Y9dTViG6)Hb3$Ji!IIlCT@g{}h-5PHe zS@q2!u}e<4u)`v%%b{mRwB0jpXMyZTCe7wJkB)YTdt#|^cI!O`JANGRh~z&zyRSg_ z?mp)`aKfakfD!n*r{=0Il&ju%6&6tS^1K=eO$v!&Qm5QrqS?)$J-{2p9` z3r4*gjSR{d!%FB=D)m$%7LKV=OVW};wi0vHQ;MqIh|yAfzuFCc?Z?A zF?3D--@Gj$vBD#BTDnOqrLK8`EO~3Zj3uWjk*xNE%kcrF z#xx_>kd=0%+Yr0@DmCV8Ln(1@tRsO6^=f_5nZv`X3w=_$YEj*9i0Q@NwTt}t1N5d& zi4oazY=X>+i<}+A6aG{rCiNByW>F;C@|%TM>Y5F^S2?M&OrX-*{WbnSeL3LH^y(V_u>9!TFDk=af!*bu%GF2o>lK`6t;j%JjudDb}!gKN>eBW%P;qGRo-! zL<76eP&U@5w^!5hp*;i^(;vF;>IAfv_kWf;p4>i+_TU>Et1EBVlYj4rYSVR=HfzJR zd>;=5*JgR8R_zz)n-p36a<_A9HxYF+jS1$8dE~(<%vgsmOM>$NP{se{_gFUT-Uo3&Ws3%|TtX0Fmy$oBA(gN1-Et7yR&ADP zeV6*V7p~kHBx)30-_%2%%KX zWnd34$TgR>bWHs(y~AAZF(L-mk^d-fxAvdmM_KFCwU~JjYl08`6xb*N8iT;Js=?~D zunq6CXEvq9EZp=B62P;F|2psjTv+%W#a_?F;or~h6E+QVUPQ-b2m;EQnU9~Hir>KS z(tyjCC2TB5--WBC`!sDDvluXGLP2XlYJztC71V(EG8T;~obhv9_kb28cdP%NWtAEu zOw9u>C@5PL8f}8lcjcm> zqeE7BWR(G9(OO$R@8^9dr7;g-0L}wKQ)F!J+)R}X+FyN|R%#NqpH=eX=P?^)T=-_m z^21F7U`GX9RANSHPTnXJy@IWlKmm!ksHJvhWaHJ$cTWZ zdjM&PI}z4{q$pDZel;}>BF$>aoZ{$;KPgmDxgKM&G#V%m(T5L06Cq`z%cgJ2@Zz*A z?KP=L|L>_UsRL3~_+E~?gJciLOyJD}%~W%Ct3W8(oYC+ua?wlfTs1k|mR2@hHG*+i z`^7KQ^@TNcRAy53)O-g%?j+*XI(;S@X5%W<8N^T zezkCmS6gXRJEJL`ScIo;bk>vE69{u%HJssZk_5KGRGfZb7%{9$`>DBIY6c<2UUa0KuTz(62DGDqa1BB+N zsXWL0IoFmI!<%NeC~eFSh0Pz-)2e6fOhj2#Uwks6IIN}}9AS2?1pb3z&MF#E+)h!^ z(7B>%JuA#alb22fux&JT0;?x<$NV-5uvPM=S=NO&;)kmO3S*g+6rs%pUHOc2*UPuW z8TQMih>?w^ZRajLs>GFZ>uyG}=r8!HemkZ{x2E#vI5izwI9+O2IU?{BllU|{n=9g#Kmp|u@S|y2p(;r*Y&uE zgnk#Vc~Os$L_SD%v4=T@`*htR;&xB+ygxb8G}Z;#L_qehX^V__0$IyA>!{2PoBln7 zvOOE`mt@x%UrpIW806OS0;z zL*k_Ipx{b4{pdja-0(e=7nrgsMHK4_Yjeyy$hyvBe{+vYyr3eu)bDOIwXu^#CNu~hDlf7hlBa6eT%mOb4CMz|AJs4r~2KK zz1vSrH{9$MyHx65;Z>RY#_$Ng7;s3eHlMThJQVH}vMy&fs2?fmbHYV+8NX$mBIR>Is!XgUwFv3>1v2^ik2J# z>w~`VAg*CAt#c|6$%4Q)xY~+>Dmce^A8RBEj-L-lS<5!~-N4awzbT5Ul;P&L7xo1g z%?5uczS7;{eXbKBGBaLsXoXRpY2;yKe)trP*17X5gvvgPPsUW{r*Pg%ufN9jz}o%7 zRq14`*ul&$E_WD@1wjUztKNEVteQFGxc(zs4wQ!BIEF$r)5*;r99;6A0zqtWjjQo` z!AH~3yb=;wXA}niSP>vnXXyWPkq7yN#}h=hgkezi3Qe5Slc5^}VUKf-ct4E{(Qe<5 z&k*USUaWTQeN*Zq>!$78uG0FT!Ik>itzHg(S7`e>a&39JZ_2t{LlDPoXk(ynfiExa zk1*Tq1g*1bCD$s-Xpx#G8OF!LIAKcLQS_xg1-Tz|g1i;mEr8s2*{J&fADRXd+3qCz z;ezx?<}h2GN!%Dno+h}fI$D5Vpd0reXeki3kkvBe%$d=IP@@{@zc!Lw!tfX3e89W; z#?wccre$LloHCkzt0n)Pa;t~zW4-XwhR@}bqH5gXtZ&Qpl|rC0j1VK)ni?5l-oBLX z<%q8ta@=I1I?2a#Q3mdq*Z{12fy7~X8!&C1kqz4HE9-2(h(rlr^LM`+V=0M z;+sNE3p5Ut0qQ9ce9>ixkBxGlQ_5EJqf>Lj@%)kq67+ ze#{I1%u#+ht`EA-FC=YZ)e#Hv0b+{f=$5BJ)ur{0+#MxiMj79AXo}^=wa1ZN*RbfX z!VCJ!v$&vp%$hy+=gumIl|6b;FnRkaeDDnb5J2z0d(fOYCZ4UgGn6E6$Z0aJu{E5c zjJ&>YLQQ!PxtScdgCeYuw)N+*W{mM;^j<>$UnPmF$oW`1UmO~eGzT0~bg7`yx&8Ae zx6lVRohK4*5r%L_)b@QNOa#=Ipw)e9?JdG=9n$s6-D>VgB;Yq{<7|WPcnFeJ;+ybP z*Lempzwq1@Wkvwt{Ca!_77qysG_WwQU$N@g?IEcu!Mhb9b3Pxp`D@7Jt7?R;or9b^ zj1c9is=vTjFRUgM+f%#`E>kq&G!^U!(}Om)Rvh-n)IABS>mjZacbt9h{748HBDXw8 z&GlWNKtA1Qg3q9gC{A4j_inlh5c1aZ8dA)C=OlZo2?ET5Mj2j}g>PIoR;`C2y3Zz` z8TJtK*xT;$hqn=K0oKmd<%9r|{p1RJG5O+qy$@?d$SJ#B%x0|8+IfM8ua=LK&b6GJ zK%LUK-E0n^+?8l*>!zy>v5W5HDC=ji*1iAV`+4+aZ3$oXP)3Xd~y0jx0b!&#OJnFJVGzL>5~s@nH>uT$cYYJ z)!^f4NkHr*5M9B)5YMv89oZgYDppu30`meC`gik%Bfq>T=Z6IP@VNenv<9}-`ntEm zV3EUZb;CIa0K`qrQ1r*H>Gz-1gAy*dGP>oV@(dz^Zgnb_XULIfn8Uk%?V>bl9U$T> z*J|E(#PJ4@s$a_0^8+M|<8iojubMBNM=E3y&znL#zJh9gpIC3tW9Y;**#2MWbF~4E z7rG9V$NLVD=x5NM>*rjpa;EB%Ba%#Nq}uekHu`)t6Tlc%(n|%=dO@a9(Zf- zQWbq!2r^er%`xDX6IFX99jqjtcjFTc?YaXDB*DN=jJK>6^fbB;a}Fl7b&do4PGsGL zzn|1!0Lspf8Ak4O00HRl@B>(+-D^@JH+VUTEqmz53KiGa?5Oyh4{V1wdVdDKaYJjx z2;_B9`_3kpe$&mLQhW=aQZ`=VYytf`=!L;%uMO2`rwjrthVV(+8vOPY4gTs9&yXCu z5GVj%rF!}JZAVEfP9}MDiZW*C{>X)3KMoQq+7mP}4HX;>A9%>#5gBcKBugFk^^#v+ z%6RO!jJg7LQ^uWJk~-Zy#(k6VJ1;nWFFIkG@b*4-?ZSDtsxfFD2~B?+h&7)Ii3d1w zD>~%+^;I|GEt`%=7U4cI)wg+jgzW)$|D>>0+ho40`xQVEXPEl{d!#|*UZhk z*#>!CWd^RH3UpiLxZV1VNV^;~8f(7UG{C2t#8}>^TYFXkBM5|SGF0U##wiA#f3{rJ zvb-4E;R6t%cRWtJlG=$!olW61yJx5__XE)flAb(Mz)jQ|Y}3r>t-NHklQ5sh^j`@X z_m>hG1%?zTbAKshL21A)AT!m`P4bQKYfX-va#G%Mpz}Ymb4QG8r>H+99tMpG+oA&r zXa3S0n1WaW6`R@8k2EXJ&Ei!t&f7@*x<;r$k%Yw+(}c>57nTy)MS24#e#_Y;SiD1y zWn`G87Pfh*5OS>Fjm@=0=!ISaKExyA6{L;+=N7Gj(;j{WQy$`h*5XbV?;`KpyffHX z`CVN(q012h`{7A!)lbuZ(ZPw&>UjJ1x$XxblS?J(^*iCQk_1G5_Co=~6SAOuGMWw} z%Udt<&XI*l1~6orwLAPg>2}Z-INUYLuqtZ6J>r zVIfDMA3~M$59EDl2vS?s;?`G2Vr_pOM3b=9#qPf{{rtBn)4oFk!7U~SF5Zq%^H+D- z!xa9|p329V|BAx?mJ|>(b~)p*F60P@E9#+`oz9M;W1?w2j;r|_YK(<8P8WT+Jn6U~9LTmwM#JRLVcS}gH{pm!Bcz@v zoGwiT4Ca~$022N^2;EEzdmxn0c90{|L2I{T_Yl9aga3+zEQbZ@fJGMwvk z+Lj=#!u)LoZk~H4WEQyeI?IYRUS_2br&YPd93r_|-Q(9|2u~4_I6`DpD%HV(`2mL& z%^D9_tI=AZ5ImW@F5ec^8o3#!py;_zc?dP1$Lir$k^IQlQRp?axSvh;<4MihpYEyC z!jm`=<`|F6oWQs^8@xp-gC3DU&<zsh=cAjm3SFzM+^iU34%o5HOBx zQdX)&B}`(^MpMkQy3=7Yg#%pT(O0ny!no7T9#`9=HNx%eF)BH>mnswpW7Xka?-G9D zLLM75SBT5305@E2bD$Dix>=MV7fxTTeOq-fjvcTojx_Xq(l{iOcUza_>(B!K9`TyJmh z_i9kFFBN;wo6^CMQOjT$B#@z#hyJ| zH5o9i-ud#&a|_2NnNB+cXk8TuYG(RlR4KyQKnbe>?fK)+vYd)f<&j!*_Fg;3R6d`& zekGI&}a9l?i0g;+o(y)VH!!79s*Xrfos}0A^N01mqVVPg-kGd zowlA0GSX#=S*7M9^*EYdd_#B8>VlSke@@xU@#0*R2Y_g1pk>$Kq_GZM$%^euW5#QX-;j~>oy;24*cR4kFwO- zMS>+od{Jt*4E!yLWK=+Ok=O)&snXjV?K!Cd3VOdIIeS2lMTAyYci)v`!ww<{J0tiS z{ZmMS9!_V=RMIC1)F%z$qrl2}vVO2GCZp!LOM!3PAtRP4#1b>nD*?g~0j-mMN|dNA zXn`v^C|(3vl_$6!f(Q7E$MgiYpE1v$b`D3R(|b_?Kv4RoL0{Slv>eB{`Q%DNhRfa= z-vj5E&!*3i2Y<_U#?vria>7GM*t3^vsSf>YmOM14tu^L#@7m5&S#*BZ490^OFxfjyp=tM+ZFscx|9r5M+h%>RfPpR_J zon}-`GsTADGMz-wEMOvL7L#5pdyd7FA&gSd2+D7)XSG)Qo_n!BIyl zytTiW39EJ71I4Jb5#Zmz%V(#}zH4L69hO)e(HjlSDibR|a1EjAq9=@x@+2xkdO+8(MV|N!}h{uAlT)}ZfyZqTbxY17}%GY zMDH68(W&Y{U4?qY`5CpjUK{oM>x5T%z?=q;iz_^eOaTx)R3jK_!2i0kWPnf%#*%qd z*5;=tkN{NHf&&y|6Y`|CV)+BOSU>_nZ<_=acV%Qvo5OnAqaAfSwH3mU{Vm8ZGHtzR26|J2louVzS0;KHvqNh!<(g z{J1akc+n}y(IbD{8Gac>Yi)yGYgwhAeUYoZLerqesal{*2=VMSuqeR#lV_)#^AhX(|icth)}Gz1U4q0@bR;-|8R%QQ|s=Qg4Yix zEs7Rf#>_s3KhL;Y6sY{Mfl@*42xg~4{LTHC>%K{@I9I$!87da6Y28pFI}2(;7F&4W%`UFZ0}of zs|3VjL{rTV`n9O?u#K47AqA`^rvh3%Z#7loYKKjkRwSrq4Et+ z!M<^|a;laK*bs~Z!}EVaRCJiSLhHrIqgUy_jBXWJqN{cLBne!~%@>2R&W%`%Jc10R zsw*KWbMfD+N>dj?%0})Lq#HwWQowi=aQXC10X{4x_#XahCkO*BU3>)F2jP{|gZ|=b z`^^epBw|E8qvQ0usyN_s&4X0mDWk6lA8P_Zx(u6H5N*H=^Kf66-H=zgC^Le0b3YWC z`%GjJP7;SRu~sigXIJBcp2umBNuZ>QE5RWKpe->QEikTY!6`Fb3}ChdR~^ygB-TN z*yrbhlky+q6$N}P}b|AlQSLuJD2SMdCG|l z{mog|s%3!s6+2SBh%|r4Vx*l^MbKZAD_5ug+pp9MTv^YHP6l{9p}HpmEYCYuLyNTs z_A*&7lIXU{Xm;X3MtjGvM(mPOA^Z)zx$Iu$zIXV~&3dhYo+#fO-LL_<%(%HB_a!s= z^JrCoLB!v`*IlS%KZGf8@k7CV>|({9o3H2CzWtBsk>$3VIwmlHlEj6y?b8}+&0h^# z=6OpJdtR7-aPG_^*?G@m zZtdD^n`(Mz`yE+Ndc5^W6vq{Xy&@`r%3LuJD%VCE7g_#`+?*nB!+90Bvlc4}uN=Qx z*2i)3mEEurX?RxfJ)ZbjgQh!juf>4>=$Y$8jtO)g;HSkG<-_q{nd(+V)j8*;&&W{S z&9hx`A5>;nTYGf$Y!7a0l)Q1&wji|GmMA2ec?x2WNauRnx4-m6oR6%>4!f)i{m!7#9z+ux zJ^QKmG(51j+tLZRniwBBsnc|v6;>Q6#ib8jFl&)y2zfBuaLXajY1!F2*lLwW2ZxXv zNBuHTtbXSST`7=b-lx(6!plyqW-3hC`>2He1^O|F-hyclc>1@vu1sKaRZOfbQx#q= za<-tqgYRT@$Rf)u+Ra1_Qcb#YV6d`LUbxeSpYd8%KP2!J8$sCU15uLZJA3`rHJUnlSnOsUyyjX1 zh@Kv=66CvtzeMc#hqj5`Y(OkYzxj5T;%tYiQBeQBl!ui>(PZVS&uL@$SZM|`oTJd7 z+IRJ?MBBbWW~l{xh_KghV62jK2298ot0KH>s_Ad6etD+5C^E;;ra+k`o#oI1RHn~bIs|MS6TrI06sG_YwA7YD*=hUlu+MCC;vRp zjfv2oqm+N{{Oh~tnI_r_qwODo>s#V@ohs$3$23VJKZohD?(vEmZ(Kc>V7L0bDQBfj|eh4Lyl>*aCMtUy`lFvOJa^%#m zvq9ZJD^xy*_PN?1AMg<<#E!s14fzCSUvxg6@+(V~TOw{_vDp%Nb)60K z#UDU$;BLi(0Zg7JxT(ETVX%+yk|B+uME`P;7!0`(j+clZ7=3?ToARM3;r{G> z>*Ys@AH@(g!{{EN1Mj6OA^UCD=Ck^p$x2aU6uff}w=Ku$>q83EI z5^8o(ihVP^n;#f!BA1UlzRK-5iftZ=1ZdH-!R#<|NTo~QSxdfbX7;nuNzofhE03@F z_{`(eHmxB`tzB(g1s6yXcFQ*W1X5MOHK+->%=b6yiwtk!xUBV}fH-=j2U*&%4=VV4 zV!%fI59hKFa1`tGZssPZ)YUTQ2hE=MM8JZ% z*{s8fLFk)CZCy|o`9B>1Ogqj5F}7WIk-Vs?9(hVJl7PmVV^7kn6&eQukzN)#p*XGp z8v1z3ZQCub5#T?nS_)K^(c8r%BTM9hOLDxXU65<={q~Cq3V5}wjc<$jW2WmvAb$4m zP@;UiaLn=p5F_LUul{#1OP-I}WG!SowPh?BPpDzJP1tv!Z-|?P+M1&*eP5@s;;5OP z69iXi1AjBO)<9{#FP@socC_k%wRvsP4ZLj*e$c9+f&PBhHK+{qD5gP%wBW3Y;4GgG zC?hE*3`C&d>KsSEv-YN5>LvI(rP^>E%#ujNO z&&zwoPDMIEf7*1eZn-`O+G9v4=6m0wEJ|DXpz_KFk?==1#~Y8<6M&4HNBj>$D2cVG zjR_Bd&Yb`E%oH+h*ogC#-F;e=n(83eU>qfB+|(A+>q;Z;9Gq41)E_X{o<1-XATf}X zJf}JHCIdekt>R9zt&tn+nW%6%OE($Xotdo$}Q3sUYWF4TG6gO;=zkI&`fGuhPpU`Ck3Rr1P8* zvj!9iveVElGHmq9*qYBQB{vF1sK9y@ii?}zdOK_On&i9%@v=#25=1ySry{d7Yd+zi zz|X0@XJ|_MHnaUP^O!zia3MB3@f3qs{_+(w|8|nh-@B)yz?^w>+`e9RXnb=ZOXrSO zqyL6?U)MRx68;66pP2@vHGd-_?hgj0=jlvf8?f|Pm{+WxZ@1WGTs;?I!x_0&&St+L zi)<-YGoK%?(JqYz>j@t)^p2a_@;NTe=6dE}c$=e{d{m&)&kKQrBfOueC+8iWBBiLhq?@O`oQOOc6v{n(0rI60kYX+o)Ph1^0N7(mcNh_D)}SwI=KJU!0PxOUErjcAJ

    -DXgH-?bX8yG2DH&P8yS56l-zdyA{q>=*{`uzZATG)fOIb1e?2D?tknljVu=DeW^j_g&ro9%M=azq z%*e@yeiM3#TQ1~LCl(m4UVR~;?DZ;&fC!~6(BT^eyb}|OW)|aeR&)5j$7XV^cT4k$ z1){|~tswoG55GLXIPicpmE{VnsLjWucMfgXW%tmUo7c@`OYkvfgPj*TPl;n6Yd5UJ&G|78_RNpCO--;~ho@Cmb1eO)o-`+Fm$&E>G% z-PB)C(U^6KNOu4UsaE;YrHu>%hqLl)db-r&h<4?r7c|dxto77k(hv#9Do6mmmix}YKzX# zRX6)j)QDGw4PpG;8g%&DYyq?06IKEB4E*{m3T5f=wV)s0bALEw z?^e3t(txrW3`CR|0}%LxYND*W(uU+GDPCmaPCJ$L8`(XkU^mO(`MyS_R@{mAA*H`^iT`#hU% zY!|tyDKVpF>YzRazD=ItIq)IY+xO?PRDB5sb`rg58l;WtuOk_O-*lrb%Y0O5`HXKT zqyIf;>%4`N$wL3294rvQB{uMkUmJ|2&mNYn0pmN0yx3HuxppMC$0A2iTs3U| z@l}zsbBw%zR_y0b!0l?Y+54=vVsu1F3FN@7f7=)%1Br4X#KtrR8hrdG**k~jVRk~FfooC&(@Dfo-}7NjPJ`iKNAh5$zW^0!ZmFF29YBk{ zE_z%W5GEz#BdsTRdEpA3Y}#{|V5OauA9bS7iH}yb$`<$$aNASa@9hi|CQnr^LtL_a zZ3^(Po35y3U6pU1q~E!l*W{H3%~@fApy;%n?~mNu2yzh4FQHAZwVQHx(l;wwF+reb zFi`=cLin~SzOOt=#D&n)lF#)!e&TtwFcaDwp$DZcoL*WATFCK06qy1!V%0V48$h<}Xxl z`J@LUv*s$aRI*PTG)0#cOqJbwGu))Lai`1@vp^mhJB4}YaWb+36@nCgAEkPH;>xxN z1$hZN?a=Okr`Fu@wx+!bk0J=7uRZVOp_3GY1@aP~CU?W)+UqhpE%=gf>PjSpv{7o) z4nF&!8&xvFEweNe`-IeMEENZ;!jxT3(ay)Co$0A(y1Nr0#;uqdj|us#)Z0Nh2Pi>% zfnRS6P7r4=DY7cop}xE$;VTNwFopjvb8n0RmKA(%qX4hsbm#R60I!bpq<71>ch{*vnszNvf zOjqb9;nD30m1;ny9Q2;_=&B@%+gv`bMkWqah0$Y1YcaAdD~_@sb^nA^4Sy(HDN>hL ztaB31?s3pUZWA**6k7~Bo6W?$Kybt*+qEK~PoUYNZAnz2zPCGIU}~>@<=Azg55V8} zJ#_O&A#i$)DN*M>0V<~@TvDU-3(&rYqgs^UPVcS2?HB zX=`V}ZRBv6m0SGkW5o3YyRf3(lN|8kO7N8!8VbC+xk@7GM4i#PGw-Zvq%B^nj~+lp zNH5_VwMyYHv2)rumKZsoCy7$NCzLT0|H|gxWCH0-aEgO1bTqCmN8SIQ9=VA`=qaLo z?NMWO0^Uc4(Fl%wF86LRMlhDK!lgd&UkDn{<*B2SB{rcAF1h9(1M~G^7L_;FTw~Sy zUFaMMBm*Kd`#CjbIcD$W-4ZGwRdaoSx)kV!ik;h z#pWwGw<@rCU9-M(LukM`(%K2>hU(UPnd+Xk`2;UDa4kN~cm8SgO);+G+2CSq6v-dS!o^<&$0$`XJrW?_aC@`FOdVu#&8v->6M{w9 zghcmmpuX@-RJ6IQ!J7@w>F6i3{kwKKD#Ll$thcSvT%L5y=m<2Kc5W%$rg$Um0Ib2; zx5QS^YB|MnwdL@|J}67RZyR<|Hq}ZvjXQHWMbouQZ!5s^ch82+=5ZK^+Sx`K*DgcG z5;~*d-{iE7{p=ZSVpx4q59b!T2zpFE4Em`Ing)~Fbv%h4)Yr6}w8{;>R4 zkE{R%Jg29l!K_)1)t&$Nr7a;>{KN{iCORu`6NcG=26iyzYmA$&(DHFi`+)Lvpyt0V z~yYiXG9(Rb*+ zmq0X|m>3*$zBgj3tY7!j!k(@JTSO`D&Utpy>l{Sl)|{XaJ{x}vd?boX4%}6DaU(}= zKW3k$%8U~F(s1#uh66Y%@N0=-mlni_H|!Tiyc`9 z-&yR1J7ORM)ZVVRI1dplgh5?hLxVpLO1N4rMVC-|DnLnd~Iy$a~YwiPzaUIIF;- zxL1e8M#tT~iqa?1ff+|ECZ5F1h~%nI*dQ1zBL7PCwM%vt=r&^y+v3A;trPE4s@)v8 zQWQd}t?@uz>GJE!Q!A%U3l+r*aSaHV%>~xcRXc);1dkaRBLaA-!_>k&{vHm_3&qf0 zBuhnWjA4Aqw3uV{+7}l#!M>R#?jo!%*69n4Psf#ZLki`wq0I;Wo5FAg-)CsLR2Dtc zxrY1DlQp9kB^6i)r)y)jI&CE;@Ai4YP?aRPIrlIOXGY$NFhy)mpmP>i=>qd_Y)7DW zp-keG!v@${6~HODJgq6344x3%*6UE27^Xxv8=J%4*6#Wa#9aeu=rqhF8%nuby^gx$iS|y8 z)~|u|D(?lqhJiAf8`wrfnzW0Uo)TQ(VQa`qrAP5uwE|r_nGGE*uX=Fu{ zC*;Yj-?iR4ANjqT)(dm>8BAjOAx8AmJR%e8!LUiRKqFx45fQ3&9Wn}gy^3{P0?Am{ z#!&B{y$lLuNE=K1;PTWB2880bo*Yg;fDmC;_|)#*a5AA401j#e&!f#U@8^z_GWuUg z90HfJ-^D7N?~nY|!STn9yS_4QkE8BE`orh9+^PL2Qqbh%ZFLV-0w?<>*lFpa9Bpe< z88!n^z1+qAOz5ZHWt%=<8rV;(i9i1|a@O7`a{;1nWm3FGJjfO2`AdCC5zg6W(u5R$S&{8_e2tlfwn z?6qsi3~&E~WM0Wpx*To&XoKXM#vW&T?$t~9oz){~LUQo4f_T>c$%WZUABb$=?n@=*cX{`=lNEO-&Ar3M(<={ zfI)9=D6GsTJ6m`8*S|7m>XB0oA)aBg2QuZ6Op5Xmm3ZDNSn4DU12KEn$K<_1t)%~l z&KsWo#&-B``|^Cy!>3=6XG76D$k3*eSEG>6i1(rxFq*~T((JRh?vZnXYP^> z<@>KB9;(xrrmSWL%p8gHh_E>fv$y}4S6%)9Cz58!^-17`W##H-%9Wt6QmY1fH#n>F)$Xb&)>lnUP-e_)0<{e;{$qmvu=m$2$myB6-m=+l(Q zG=N(Y0qlz(tZvDpm7jW43}j1P*ok4r_N9SfZ)Q=`o^Q4Kl|1z?I26yNUwz?8ux32$ z2_`*YPU%v=@A^+ub1h(}SdXs=#ozw@@r5@B+trDt)MW=d$ETMD*31(QXwN8yrnHI2riUg?gO84$072bT$S_ ztFaO1mbNh>0}$&sBrrZRd89!69mL3q8>IFn*$5pBlk1H{go~4?UQr{2ax#1xqYXt? zIrt#SAigw8#e+9^NQ!n&jJ!F&3Ur!_0k&z89y~oFS&;lm{}mC~i8e_Eo|Pb6l!}O9 zTiCy#7ufyZhf}gVB3tKPC-L~`uGpqnN%wxa1G87hq(D*@;Ly?Rxx*H^OeJ7S6!4mE z=sDb1RwyKX8D7L-xjnXRoSyT#DTh_In9NfH;nP6i1Imj`XS59aKqA9@+H#!%J9p)j zDgB^fgnkCX)?@k;M#xmMg1H$KfNFd;HSs2ppwN;~1G~5WDIIm`#UGRv2ujJ=K8{EX zK(M_cJp&Rg~|lt_gw=oZsNcNiX_4`Iz;qz|I?;Vm1h@TBI zE#8pqT`J2tnsZD-JR^d&x7iLSWxah06tr{#9weDp8-`hDm5w(oqU4Og=5zXphmXs)Mq{XMe%m zQWH1W0xZKN5=aSBH*kNRvi}cCGiYrE)9Mc&62MR3chesw*+-H-H_>{KQFz!8zryG3 zYi*Q~n!l%VIPz(gu)($ToOQg|to<-#gS;0-3%poV+5oOH4pJxMd>u5h$;h#!5YA#Z z);KDj6Dyn}ic;~Pv~HyKgUi`b(;dMWOu5RZpB5dN!*aT}6xjKr9CDrX+I{T>n2~3< zdvRi*21pXtX*+AN#glexxG|+C_-f2e!hcqytFZPgTJj1Iy(($yeqQ*1iVvn;{1JM) z#i5>`>R%BIg0|)n3a~pa7GIF`YimBMwa>#yZDLZ+=ZOw~t(X#r>-N66L|#aB#SJv!d1Q`*7r5tk>z>$f{J!EaT9Ya}c$&V0d_PzcCGweU&ZJfhH&?}N zClF8q*gK+S79%T?~rLC&0&n8x9L592ZORu2ED}pJctHu3>+RuEW*l?b-Nbmkrlej-zH9|5?(Ad5ZoL zNeFl5Ub6&5%f()_mCk~T=T|d%pD9q1CK%h>FaGl$cUy>wAXEA65b0hmbhQM&67@#x zQ4YT$!=a~&h3ZoV$vBHxAa45>4G8a^WeeJ2(d1m7I~@fV1el;7Z-PAm6l zRCPepW@N}fT|nA=T{20%<^mTa^w*2oMB&7+My0FgP$e9I5-}K#$aZ05Kn>oc#v*HW z|46T@4sa89uswS?t^^fhgy5Zd%8E*60L>J$HLQ6bne2asgdvW{F}h;Sgd) zMmR2;=`hx{B5+Uak5jEbtfRigk{LKB6B~f6H^Nd*9g(~*iFYQ~MhwJy!0!_|y|j5p z&dQy^pBMI(Jnd>1B;_K<3dE0y#&2P5<&x{Qu+T=^($%deg^^zjL*I@8^zy(xoSRjG zexITgz+O}9ss{HkE%~17cP$?k&qsTUa&2IiwFzvFdInSFyEJ}|IYU#zi9HvOmE*~4 z@i?bZ#mh>h2jEXM4&b2Cn#->iqodE^8-38M{Y^GQ@^9jPCB$00!qOe;xHCEhOfW#D z-w6E*=Xr{GMs&m4x!IuE=LC52VVOJW%%zEXD9dc=A_6dwp*ixAoe;Na+Er3if*Fs$ zEVf?FleM?uf49|d$SE$IPr*p*GFPL>%@GI0=lt%+M+y`KJ^&s!^Ob?jXGr-)O?lnO zO)~&P`Hex_QNjC$dk&n3zWR%2+%jBIC1+vU!qz}N>h*`m`lgC7lS)C{zrO=V0}DA0 ziCRx!0>K&&t+Mc9FYH=WU+_Ocr+oRGJ&i(Rj+922Vi(o)HOu|j5GEyQ`4+Zhjh za+^aY{k>cm!O<`T5=+^Q+39ocdZR|jWNJd7(#thC4pe5Mnxmj*{SOmHf^7;MSc}< z$Mi_G=JC7VP>&1;V{QnMSmJ>6s%g{X1s?w2_Iks0%QCV4XIWmkye`64ri=5Bu9dCJ z_)wTMt&Jk&lz1{hK4>>WPv=9#SyANW@UPwL55|cSM0N9ZxD!R~i&Sf~XgXZUJV_#9 zE=GCF>Uun<YiUdxC`O zUdE81wDbPzSjS6jyd#Xct|8~P6wi?)>Gs72?Ey+b1Z?f4-=a!wvkP%U%dnhab5;~P zsMOB7Jap_e5ZU3MfxtN;oSkV2#W^tJvZI6{Ti=Am^Qz*f6Q?Cudg)x zqo{F;)8V$Yy)0F{JTdG-@cw;Pl+)$Xqj#4oE42*rw;jOVDyy|SQM1GKw$%d5&$wks z>R@uN10bd^tj2;v(vLjC!P^{Tnm=aa5Z%=vM0d1~YLfI)r1vgXd8mk$04_l1Pb^dN zO=ukkb_QSQtp?UJc$jt4BXbJ5@2AMC{OmR1N?BvUkFYpGv{XDiKe|$Uew~(DaA)JC zQ16v&8GY{6b$IAy=~=q?j5t=p2a4PJZm6h>9Yi}7$?)oqb3eY6zI|>N(~y-pQ|cWq zXU-IkP+jV1MW`dfezj1=6r>%l%x}28z>oyX)(mAte7Z2SE}`EF>)$1%sOc2O`9ku%IJws; zgUen#{+cjxnOH@9pXWGA9Yl17E?iyhL}dmU7(2Bjas;qB;T-hy){Y?1 zF}ci8E%L3$Z5UD4$N;ddd-TKf5*U^iV|^F!sV?AUS&|W0O|(AAP_n zU>v1$%h*jc>qud0lHeXX7+KC`Q$3QnX=Iu>=k?49SXbf*L6|8g?In8(Imduo_z#P@wQATXs zls;j3WsAqeqv*qFX9Nr)k+ngf0n&^d-*#1cjSi;F@eh3IC`Yj&vJ9a7T8{820uKu- z?5973$z{I;e*Bos*PV8aFFeLML3`i=K-0^8Tq!_D(x(nv?SJmumSqgwaUT{?N>f5Z zgbM&IG1t+@FkP`AkHwC31OPBpf|7rkxl-&BVE$ zR$sV>M$2Vs3&@5*K&MDQ z#O45GbPKjY#?w1yax*Z6;`iTYIFANm* zo9ew8p1>a<3+e_343*Q4vY8C@LK)y0rI3Tl!e#|c+NIJAu@r-~Bp^cF(rC*v?a(~U z$&cU(V;Tc85YvNpI9W*3)u@Be^k~QrS^|wE?t?<3C8|nlq{8*;)*eJlqf@cp-HCavwKk++=&e_`9uFMaQelQ`vdI#YaK-Ji&mjC8u&qeul{{NP?yqaQo) zYSXa-(=c%S7wF;iR@7;nM{2bDq~>RUHA%!J37k*WI=8WI5s%O*V4!hjh$?iqv#u+L zS?${vcq{_Q(PoLbIPWL*G)N3-n?Ew27!KN zzv6qc@Voi3`S^Y$_D>4WN1K(%N_I+Hm1BJ~)i6ChLtXr7UYS=W&*PRmQZr+#12Rc8 zIjlO&wj&__or5@6Q9jX8NTkx{qC}=(OJANe7Amt9Ljs%VQ*3gP^!~B3nH<=9GLx;t zZal3}(t{Mia*nTD6iQK!0DrJN9>_1fk)G@`+a^r3i|lN6aq8DzB}B-JuP2~g|3J>0 zcrSx*%>uy*-vD;Cs3G(5QmaEw&SfR+IVtLdSoO@IdW<<=l;ZTTQu}GW>;hRfHusLa z#89CV5daH7^uHOx7XN+fJ%Pm4E{De$JMJ6ECxPk}sj>ft(SDQoG@YUoXHDEo&{dz_ ziypv-6tv_T@wYkcuptKm_;4#(s0dU9_xNC*C;bv`2cPHHRiZZK3k|2 zaPXWaj>(XIREHEeWK%7qOUDE#ATT`6ZLZbr&QpN#@TK9a z63=(crsfr9A@yHhEd#bt}1Ts3+KpYK;)jmWWFl0NQ3u8 z07Q~FKe8;0&n@get4S+^#qN#YV4SCW*Nb|++W)D#{`DF`d6_@?oPMaPTVCcMLv+QM zn3@0fJS&~LFScH;RN!Bj9oGHB4tpnQHo_9~*it#9AO=~>R8-0~*4z3KAO8xR7!_7o zPp=jZpocKc^(|(eOXQg6^P5dA5CvX!aQ$qi0MK^C`&%T=md#wmQE38m zrglOD9S2(`XXSU!M)Xwq&$tnECbi1oOOnjIIAHS5y5zIC7)h++pPF6)@(n%Z77wPQ z>`X9tTRh*Ud1~*g?z}l>$usu){y-`}yMYygRMsCiCTU$K6j;66su*Xj(OrZ32QSSI zI~uBp+IE;ea4x)&$IOlp-Msgwff^QM8Zoq(yBqF%c~1#iA&Ued+xzcz!QCGEw!Pvw z`yJr^l{h{v^-epO+-ZV4KUbPi$HrR5le->;)S)?DVEZ%EnZF2w{?^P9;F znhLjAGOcYpb%$?1zy~gr6}jCS*=erNMm3gtO3}TB(vu}#-9hQ4tWkZDh{8*~nkt=3 zVCZqoc89Wpd8^PgE*M*s-A+H(ht(0Q)z7FeJEg=g_nOQASd1naR?b&KwFCj8N6DB| zRk}>BM{&c)4Op+&(K*P`%t>#`DLdf7EXHj*ZJfFHZk|w_YMF;N9o+WVE1?f*p z9HB>sjy{s-2Ir_j1sEfk0Yze_cchFiMs#a_D`~eFyTc+@x7UWFX1y89kGcly;nc1@ zVFzp8ahAi_1>#F19}xujzx)Tdv)aHI1%VPTfIoL+;@n?DDPZ>IMD2VUvueeP4LVu{ zL3O*9hv6}qGBfBbu-D16qlSdVP*}YtPqB%%Mm8isyn`043DZmOI;1NC3AcEQX4qo` zE)G!d#m~7lMD(h{Oe<_fKqt){8QvJb`3!Ia{Gx5hOD-}rANBd<EHXjU6M{oE6!5F}pv_alF-ix9Wls4ZJ@Ebg{EulcN%P~#W)BfAqQGwGp(i-573S6!Cw$_HJ3(?e_0$1bIHFDs1cE>?-H+WCZY+ zbwPvBZ&_#G-Pj_io(D6Chf+)ju$sE!X-%L?=Qomw_&@Dd%#im0b%BND!3#XA-6#gFQ%t44v=*4k5$Vr z|Ebaxr8FtAzjy60mTxG$^5uf(qy*73VDvUmvH`ZhvDrK_EZunYP|A@8*{_UE&FX_5 zN!p~Z4d`o$FXD9NF9}NCgn2FywjlIK6R(CZs@5s1kRZ-+d`y^|n*2R?jP!uBfjizs zv2{9SA?(BK&;1S+O@vbA1CTbkDO=$CiZJHp zH*{|^JMe$9ZP@ON=HZbUF-F`m(}gfH2o_k(MJzpo>un?t)CMtW9;VF>o?Rl2;E)9`uy=@;tv&31?DkUTQ{FO<``q^38I*ZC z7otP%Yhc{X%}qe3l}b=!+BQswD{%b!(car%=lDT#0e&CEXWwd*NrVwgKKBZN6&EE3 zDqX8Ii=^U`98vFm^<^K`bnwqhX33)68Od+ce_4;H@?8dDV}?%hOQmf5xL>F5uqQZ5M5X%iY4HbX+~E z$9G7(B7Wl(gQ~FFagIUXUP8sf33#`S+70o)kiGh8$M1owFI~p}#~LUN+JI?;ClJrl zUqX74#J2NI!Nkb<;wk?KdckOryk`ldBr6*vg$4mCB|NgYLI;{t?xV(y2Eyx^ z<+Qy1&AW3_4MtYGXB4g+V|VZsBz{Tc&X#o~mBy z!18?}RNpbRfJYP6+_A zY|Yn`KOpa&Ph7{sf*FpnVb_wJ?z=*ei7(hrM|X}%k+0KyG?cUoS%ZW(jx(5Km^oVA zP~JDXddeZx&>U5Wwx8lTe4QSCvg3w0fGo-_)JKlYlBwm^wfsil+aCU^#E%Ht$Q(ND z%!x(qh$q*TB!L`M&ofCcGw9F|6fEe+9LVi9DGb)4W3T_0Btc277OEb9GPq4I5~U>m zFM}@?o7o?vB!w>&GXXHTy;4iL8(akQ_P8B!4^9Ux&=q}0b8 zmBU+iW3p_apd7=Bwq>m>rMt4+_gCO!2>>$e^=oj}LRIdujh*Dt0A(E}QT}d(%{-3A zi!p@SE6>IG^7NatlxVItCOHLkAHAQFV@#77TEgR#)+XZCsAkW~b;MeT{SVV|PNsws z)xhDlVCqr~NDjfVG^>GATYf}uMwTjE(R(6NoqyTorjKs`%n#q4a7yEpB_;HQzE!bP z)3*P`@)z$(f0LA_q_HbZ3G=eYVb+@&M(U;&u0?n?_#iUrJ^F!GGezhSEm<(yn;T#- zSMT`Y@zL-DJc1!|O>f&ogF~preJ(tExA}1TCN|$tgt7CDC@2L~k@QI6Vp@~J65ix?(6Yx{l(tMHXQT2)p@z9{^#WpJ z6y(#)Oes6Z!_s))-f#oQBSvS_wNVwC9gpN|F+xZ=x_u8ppv6zEVFaY{8;|1pwkGv? zuT7AstA11n;~Jx0mcSR}w#)pO%Jj6XAwRmQ+kb*)Z0ou=rmq#OIi>_%q2@G+sE-24 z%ys>CEf?p?nT!20Z`VHAbb{JmsR8#9dvpI&MeiPIW~_gMOU06Qcf<)A5$ zsl1nH_ok=Q_4v#gj08t)I9Sk)g8v}UsHT@nLmSjS z;UAv(RFqnQB4tbjZe%?cs)KGp~zq+aC$*UMekFu+k$69U%2&9mA^mwzix;{uiY zd|NdV3xN=6+7s#HGuFp}cuDitR(;IW|Tr7=_CA+FJ_PFTE(`$F%7 zmM(QEnms*nTMMt|74QYk?w91!5+(hhRAa@-g)5Et3a;+&QhD&Tp_>ko+y||}b{Q)) zg?aJhCeLowD_x)$f){!ooUF*5JoXeIgo8pcM>fXdaDHHc-$x)TDdcpx;Dq8H$n2*~WH65c`~E}j>gGMN*<&wa%B#<{nK6IdG~R?=N`?*L`rUcj zW|gL4)orI~p^%X_p}`bwQ-mD1IN}RvQTnmxS)1&kC91nEPJk`JcM57(F7@YW;{ONs z!0#uLN3pOj9MASuJg3m448xja&vU(w400PmxMA>|b`I}1T#CIen0)t|Dimh?%+`p3 zbxj-A#O*4q&rVITYa+iFfPgBq;i%ULw2Y9|dLteKi8bOfH;!;0s`4t}DGQz>}XgN#Ev-3@sdW**nD@mxd!QQ@Rfn1AJI(tESK8Rk4As}rlC zGbj@vnLoFpO!PaFVbD_+NljKwe$6#|yT`EuF>_L$i0q6T`!|ab#dtS%@g3IZv67zF zklh*fOxeJ{$kk*U-^)q-+kX+xf^_X)wWivZ{B&0dB|TOM%>c-;10bzoF2ZwNU72da zX_=lGUuI=cFss(Z5?%V%U`MzcKgz?iZet&O%fr&s8G#Q|V_y9<5Qqj7(O;*0&j8?4 z!!BxCC>tw5LJpw!+BkI2EMvum)d(fWQc42~mI;6z_FmNxi$eURFkSAmX#qj z!=_3qy%3P(wJE+2n_9=X8UpOsHB*~-gK`$3+1bUnYbMoqP#LpE4KLd3Vu8uQJOTlfA}|?YHm)B$8nu-a;PzZ48TG=TU#p z2JwBh7Q1cj8u3LqvR(KZuO%*KVJHVpmO}xsKIwnY#msgB`khkFg97zD zt50!+owFqUy?$B9U3MJu0!L?@z4X zf}bQ|P^=;lBO-VhKmtC)4qxHh4ChwE+hDHj_Dxrl8?{i(TBwtGcse7QGJ5MRxF7@2{zvf`W`sUw&w#J^Y0Yrb9k|Ii8L|<=Ip85Z5oh%wNPw3BivnJzh|x269cOe%Hqk5_xrG*PddE;oPPzLZaBC%WRg@gOe zxv63K%hPwC4gRC2e9W0l(Monq42rANS8X;%RKf}*LucNC{JLW(4o>qRg`)i$#t0}( z3<9?cQgXy{;!!+16@PsZ#|j*}Z$wNZDxc{@=W0|lg)DXa$$o@&!{?^ICs-Dj;KS{` z%PK|HJ~a`Yd4{U+#Vr+k@9U&?1%93jYAYuF#I|l(3~ZzpsVI0TMbEIaYrkq!bJw)e zIL?Se!r`~0Oq^;u^w3JyZ>5}1PC|@HJjk>`cUSy<2|zt0HG+eXJitd2`o$r`ZjUS>p2kEKix>LeK?eQ-%`4n4k@mf4 z!+aMoPcGrRr3Ck5vN-cUep0rG*G>!sW0T`2jWA#tzELB&v==4z`{+?g>?5P#QI~W zX*NmDmazi6o8eG^;k~5h5*>u4d-Y2U=dRY={42K(EibOuY6ZJ68yBIi8d{x5#zhJ# zUv9YxB!fgOx`w-}A3@o8)9AV{Kw*c};YBay`){O(k0EUij&bZjC&3c?faFuh$Q1;j zK~KA*xNF1T@G%(+GRjAQ#vI8d71I}m_Wdxb+!Yrba5fsV0KRf>We1$77WDh~1T&P_ znPm%bxMdjdk4h+eO=$LE6I!Hi63%#)bdPcjfP{h^8!5EbG0dX(?3Sb+%2U;D>YPp& zH9HM4Te?bhNO-a&GB=Px!YVr$Ap%%x{=QLI98x!(g|FhuO>o2=0w%C2)Wq;v1pEN` zs+UU!FXILlD4d?~+G_<5XL+&Jv7z5Pu+)N%HqNv?ST33LzuHNeSM1qaVvsnTP4eI2 zYOGEsIB{ML9~&4S`6TLW5?)AeY*M-~B;p~yik7|k4w3FiBu%t|SP z30qE-PA&kWcrmYxNs3O0f0xbJNL*@;k;*4*GsP9>X=B#C3=C*c)EznTGZAqp+_msE zQ-BzkzsZ)jqPTOjeqhPD=th>_g)$?`88%dd=!{}SQu7|2=$Z4w`Z5Cd*YRv zcb`wT$yTF9KHv&zr(q|w9LUe4O7m#-4l-%baFe22n}|%m&^8;+P+`XG7U3MFMjIo{ zTdnquFdZayc?9!H83c(}>`scM@>l_NRbR58HC|$D)ROsipPqonPdO4iU9Sr3Mt)2; zPXUNoymb|XFK$3Xl>~KH>Ix{UL(PKw6BavYpYrqForuVQ%}B%Y3F+L%a=e_%ZouziZM$ocq}G1Yknlo;Hs4sJ%vg$o{#VM4A$n~9s>;`%zd7qBX%&v~7mb%f++gp#h$^-3rI-a4pr{qMIcRJ4w*hdXWv>fj zymx{QEMs^4L4(^ew;?|A&!=OmiO}Hbn{gEKX3KQdtTp|bH(ueWC`l{FA5wdqP#%Z@ zpvuiQa`f)Qo)It?Y6U^vH^_k0DIi%T@c7H;eN16I4PFuw|F``++;eoGxx#DUW2xQBK>zwuxb_6B5fX}lr@ z<{JDJ1(+x_nER~>OQ@;OI8a_5)s=L`)H-BG1F`q)nH1!wfJ8cXK%G-sA*N#VaCzA) z!!v9+s_Ll?SH9HxTaP`Z-uOG%11H~oML&VeCy2p@3wD^7qi7lkXC4JZNo%r9V*!pH z%(Qo=VQFR$0Z3=IO-eCJvf5=3Cnl{|&JZ1oW>nG?WFx;MIVSn~tWQOD`|vn)T$R-vxGP&W3J<8M zbp$!^O#XQ2pC%{I5YZ0ui?iUZ-PxU>L8Bl?5o2+2O%aaD#<73%e%!xbvfk1&rK(4~ zS}xBXoN|V0+nIDD-V`KuU)Awr#wHdxi{t7FXmAJip-H_#hihb>KJ@9GsCcA+(H>BA8g=1*>9 zYrSDw+7D1xBIIGoOO}W6!zI;|sPmf0$zng(LTZ#iA|P~dusATMnAOWl((_gXTP}dh zi($$=4J{cj@yyBK3cuw;B(1i1OZCD*tj0970%MHyYB;iV&UFZmwNth!{=wK&hd_rCnus3x`ed6(mD;@R zxHeBry>+%qNJnjCewMDN1zPSQ%ZnDW=-HDaj79Ypqh(H~xkhbKkx44H1=T_htuz#>nsxS=g0yE^@CZK78zlNg zgBW`1N9(Zi`edD%CJK3&ikUNb0WbNIrZQWWM*?jGvR9x@Qbwf-nOI4H40*+6B!&|_ z*kOf{u`E(cg1m9i_r{tkzyPcM9-a~UNGqbyqtuW`KO@&ko8`cj z&Ze^}34mQ1ujI%4pz~mxgS0;2P4UX-Yrp-Jp}S(aG05pXwMkOYNx1H<7=>?u1pP5G z1r78^KpF2Hw9u2i%&-Ed?y(AaF+?`M!%7*trpFaEv(%z$XH~pvV{>nz`i+rWi`(0&(z4WmlDG^smWk}DS4jb=&Uv5fv%_Z2Ee8ES*sD;o4}E#> z6n)tUdBgMQE(vq*bFhMn`)BI9JOfg^`S)j{vxJ(q=mVhPket#WmgbXFL9m`P7+hly z9!PR+gf|7>7$0TV{FoLO5;~V(aE47_xVU4#KH`IzetEFcgPdSQ>vAxQv z0dyUi5lLKe0i!nOu)8mT-f_3&I^g5?-5rErRD4$w<@|=;4$CznQWo?;zKM z<(vas)Za7lEB7TqYUz(J>A&lDK7&GL$$Sv323xr@H>w-e@^#FpOC=+tQk~k%LV*@c z)zNpJH}mTB(??fiJt-_1bSJGfRcb9EgK-tp1RHt^NsIKII1Xmm=};d&U!|_-SQy^E zPU{0Mv5^OxksHxqp+!yRTfMrYL&2{*UigZ{q-14m6D-?Cw#|lyEgw}#g)LDSvYZkuutGMs)0!{2|mobp@Z0=kaKhTJfC}_jxf@A@HLUwap0&>rLcVfz&vgQ z(og{NFHlqBFp8sAFcj$jN7J18xC||^lMJ6KU>EZet3P8mgU{3*4ivGeeK1p46}ca! zs7s1`t6mG#(6#!ZBhG=J02pkO^M~9EN+8rkGqZ30mDzrwycYoh%Cld!c|3*?^f;8K zxQF`5go!BXhKE(0t_l4hZ{T(7SzbpuhCMJC#AF^bwHlSW27I_9Y$ZoIAKOJ91GpBG zk^BT89hpB4ujx^0;znnk3g6x3xmCZm767zEp!YeFxB#Vfdul%{Nf=6}*$zRub=WnJ zpB=s^UKk@S1D(Bnj8ujES2+5(a4;(1??C4h$G4@<#J(-T_}1is z3m=U%bvJKaUo?%=iZ`rGiKv{Nf*jW?riF3Ifa+^whYk5zvHFXttf&JZ;l;i?Vrnz% z@lw^9PyN8r=wK55u6Jz*+k!}y#0DLc^xNp37-8;(#A@jR*LdeI;o~^ys<2_?pX37O z7QWxQ-NYj{+#&+{Nz}HvU@}C`?6Gyofrz+1NlD?p_ZMp@q==*l)9rBIzc&!uGmOFr zBl0@1jLyY|3O%Xp8`BxyJZ8BiSf|O$z~#TM85e*g)om?;^7;Ch!avGA=NNaZ2Oje+ zD659ugIyzo4W#ZLj%DM6kzQJc^ey;0-{|GMsx&u!#2)EjIX<%7k8@OEqO^~nH?wmk zW??7Qsm?SXDWd0f4N3VA_iQ9i57$Qj`Hlm8;FAf+MWDwonx&D}x&bX#05|LemRqY2 z1ip6fB46_^#%}+~H<8h2`2LXjF8v%i2WPaiYO7y8uu8qc+rE<}PEp%JEIyjuUwx3W zf#LQ~%t-TNlC1?ZPu*7homt${@OX->qE#$ef`rX337w%oT?K563{W(NbwiA%z4}JX z=HlallGc1}q zX@oeB<8NB*T1{#+d>;A=SLfYiQW@z3_;e+9INuB>ib2xu3AAfZ-#2Q6@d`=-nUi_v z%CX_G<;O15S@K(vHWmD0Z0nxzu4koKZVZI(TqKo#?g8v<5pE|#XCr=p^2OHkxzf{w z;FmHJ_hVHp@NHD&&SfXL6dG}A?{8}!J}z1)my!_Jn{0@B+u?<2D|r+$7I&K&%AGAi z7`44|z12ynCAc!HYI3Wm(UpP}Js3}uf}4|Tan(s45S-x;|LbFR%n!Ed3ji*umo-Mq z0dcac=v$R}Uw9s*x-{fvk)w!glmno2&l(d<;DqLxl`Aovcx*ejwIl=9Q!XDDN2>i#HF2g6b=L_?`+RnsoByuw*olpv5blwsr+PVQN~N z7&%cb*lbWx+azo9Ti1j}(ow55aQ|c`g;2{!6-;M1bQ3BF`SBnS1W-Ilz~S%u_8EU8 zl%+dx2Q!30+jo$a)r@@)O55MIg4*H|8Tk+cpzW8%&0@j=!VA+Ll-( zhPYWYrx63u4+hJKI~;HrIaw|G467#FwyEcP|I()|GD0dFM?jvhl4rRMo^YIgxMA*` z%H5v@mx}m2Ejla+DREsX%k!&&e(i4h8aOcJ4U~aUAlL6YxY}Y`-|`woaA9oi;-I9* zLv+C~x$?f+UQe<8ZvDCO=TIW00zJDBymwzjqLWp4SVfZ2Y$8BrKZ>CkX`xBOt32Vp z9d5$nM4F|>(!gAG`1aNnF)B#0yf~1CS4+?uy{ifYyEO%KY8KxzkvJG_5!&1`?O}mz zwZSBHItawGW9}qSZkw^t^{Lp* zZrAq2uwhAH4}9SpEjqo5`XT&nJHxsQ*W4ppyK&Dd($>Q`7RcTbz;=K25XX|+Tz2GbV#Mz!D#e+)X| zDJ4M|SH0M(&OpF(5kwLB$g*+B+og->W~@1vy_?= zI-NGyxZ20!Cc85vX$X!YqyjGCaE!%{N>LSSv?V{osD3@Z80-ds?RND^+jodFfv!9G z`c_kD1hRU!J3hK!?$fY(;Dk?|ZgA#P&|t~L;-t%U7iQS^IN1eTIv&XzR_k)?kON>c zeJ}qR&HqEUq(khS-!hhxOKlpgBKarF*ONZG9@^_V2e*)8GQZDB%XzwV1z}y6RJcTT zRDAL~q|kTCjKE`30U^!HmB?9xyq|o7jSknimmqcuzT%Z}a9%OXq5-Y?m_3FVO?Klj zu4)m{d}WDx+w@%<)9`1Q-~fuwuJ zz}6S=z=#|{{3f_VkzQ=@HSy}1C?p`REsau2HbcP=T6_o-E@pU>Z~g#jU!~`mKwC#7 z_4ZAQ0a(m%WU4P)CQx&%O%fB@m#}!n)FkJdcHg~`1#~b(;9DK8;@vR=3pV`VAvt$W zZn;k15W-~1WCNhk&iBC(XvJCZoE;$}zl@B;r0WJVDQ&sXpyI4taJ)L%0bMB9mT|=Z z>}qfswJ4{G&Tu~AZ=2Gi7Cx#6;!p@}SGP@qnP+Iw?ePAmWz(#Q+k?gFL_H*9iCN_p z>cEtDWm>q4%$A6qkU;KXFCCyfIISvukO{*PCgMZ~h=67Y7^Yl1l@119C=}de(R2BIrzmFMg+_sVMmH z+?X2gv$$Dt8?+b8I=V!_yD1TeJJt<7M#Tyio1J{*5<+j#)|po%06vm`Vc0f4K-d+A z^BC&rdPm?p%DXp$q^mq<@hdakZw+qx*}IoZ{-9(XGr7K!9e~$!+gW4EZpgy5Mq>dF zQ3zGd45ivRUoA^WAPlhb3_)j8>=-ScTqR2Qusw2Tk3A zDNl+;bKilrA8`(BJ!2Ph1hxo~WE(^TQa`*;rYFvFBZt?+3*7C%iJe!y&y;Cih~+iO zvq%S+nsf!FwBF~i=&#hO$Kh*-i`YR z#0N{|5D%vFOnJD&H7~f;u#Bn6)CaWuH7jy_+i`y4V*(3Rj3q+aow$SN+$TXxIdE}M zP7r;_oNpncrt0l7@#q9aAMY!qGj*kG#%9X56xXGM*7Pl-oZg+H=lqgp>Vt&1G@oAX zIaZs~V3-=dg2v|3S4V>se8T1rcI#?u`}R&aAPS|}2}5ptRT~9wf;o+;(@AsX>T46( zZhVNvZPB72sVNt^p~h3~N|r3ILF!W&Mpp_?|I9bt>Wm6vCw@hk_n@@LVpsa3{qhhB zR+8|a?313v?FJ5H?__cMt20hRbW3ct)jF#wo=MM0cnOMGn$o}ndu(AoZ8&h@8scIFiKrET2B(RyyY~tq~~V=8i7#srJFlN^!kK*Ws0u#Kmkb!*2NJk0Tula z@iMV2;tJ)-q_OVq(k&tP8$VM$3tUiZ+Pk6$!)0Y+5mdlZ z>iLp5M9mp@Y2zkwd&;uD3n@@IsvgivuawAjWW9*A7M}{kAS%V&R;Ejkf;Kg=bEq2j zUutHBQ?Kr-h2~7zi{iXq0-@?Lp~~Wk3(K5nFN!Lu_wk$cPo^TzL#f63Z#x0uUl5-# zH%B(!(8KItJ<~fA+8{1KKng;tA*1#P44?qFS2_~ocGjEmq!SO(AaD%CN>Fu64KPM4ce(b_NYrqp@1pX1Q-5`ZV{HTmcGzQ4$(N{T zjv{iir)1-X(snDL+SH*=jMDvi@Oa(gWlT24zkOXvZm=*bgU4MjNcL)eSI&2W4obVb znAy(?*YLX;tRczf>(4b6YnSlqNC@$QQAFmE_ncXA8+w@h{`^iwR4rE2)zaFTv8)%; z1FP~)^(yNzIOKMpocs@xpPk{Jts*!ej(#5;jz|~3BcZT=oqAPn62L2Eoyh5Z33UFI z6Gp>qdobNtE}%NU(N(cxY~Ih*-M?CPdb7DTL(MdEpR;kE>fGTK@U>Rr0UL?$*X5?9 z7(^CFJK&q2<(Dq55<(8cqfPuHn$g@N6WCY?Tgy2z@%~V?N+$yo$&`Pg5H7`}3 zzJ?>k{%FAceR#-eH~2bysM@<MK2*tHn5 zxRg1hD5sGtZ3;9tZDahxuPVp^N(Ajsl1IYlg}?=!TQ)LpY;y~-1x3fdWY7u9y4=^L zPvGB0%u~T`jN$jhGb<*K3`HtIxAFL)ROpt?w^6Epoe#U5n!g;<2m~F^a;&6M*`fTG zlnZRae&~&*yUFvPkAvw_0p1P;XqI00GhpSyYHN8-5y?E%G7ii`hyJcqB5}%7t|eDDS-Re^0s3hc824Qp*50`DfhIv{m|G*> zpSiB|+ZE8|pB3DR7ph5|yPcBZTLsNyIx;VmW}UiqC~{zWEnjqpye+7orG8LWT5!r> zIS+L|9rfUlNS{5oq(;B%>2LiI4Q~CxGgW}bbJ(V6YEY+{twz|4J>8sodJfB{)uIRY z*WI9qHsZWAD4?$_=TnI_7VjMfy^@G!`<2P`KgOmbruB_|V4BW~*(o95 z9gRSHP{#}a;Clk0>bWPmo)GU&BW4e93Hvj`y)tn0L;9uHzuBDuimQW{-!f^e5Rqli zI5t+v)Cwckh(J%3t~H(VYK=B6#0IN^KOl^>`Y9uBi!KFyuk&?!-|Y-?TbC-hPSumj zX4Q6@m^kl~uSAucU%&dG+K5QV!(W)cO*MB7slV~OlPhoc(Plb3Fi-k3hNXqYLyX+D zcA^EAp;Z?&LMbNYTp&^X%#x2NZmCfLwMDS0F*ZT~Q|8t?v#kQti^&+~(o&JcAy8F| z=a872ruHK{AZwjwqGWELZAbkH8hj7US33PTIrQxgT(3X;Gi^tu1u9OxO3*ixMRtS>6_1Nkc zrTTF`b(>EHF0WElzZq**a!Z7q#cH;H1{3m)PKDnKaVN`R361fjPxORrBC#{JmQo`% zV-oug)WuRUMLn{r}Okft6j!r|(oQDoGaNxOR>0I;g7_zgF;^M@*Ihlzq#Px*HYXb|7E@1SZ21xBX4=m3l8MZYCqIAXH zfR)Batx22WUser?5IQT@{0BGO&Gx0bgssK@G z|7pAv^EUENgH1RhW+uSUMdY67)}E?qh&9W0{sC36n?I18q(J7Xp~Z3mSB^}8XOs5U z)#q!gzrf-@$c01^+PTD@06m>Ob|4I&e^Z>_Xn>lzJ`yBe65369C(U!4H_{Yzc7nN2 zoAKl!>3TCB11Rd-hW*(e%XDOtYDrY^KuBYjks+8v&2Rb62ELNa^GNX8FH94P?`vK% zngedUL!f4pJYfPuUzg@s@>DeqgKPu?Ar>4pL&q>6Dah#=JfqGv?WTy>Hyzc~d1MgN zW&x-eE1^za4E9Gg-Zs#IofEX~bGrF*Z9Z9**%L1$OD#skea9|U^Yfe5;6mZBGX6QN zj0q+1sklhl*Q&Ql6|pdGjJrUgM$I&mqRceSD?r4J=`wG{6tG&Kd^gj78)aU=m1o+M zZkSDN4E-vS9P*JV>lHjEbgG$PyAp*v=r*Qqp7# zVlfD&il7^}gv(1Eb~b#>l+*G?LI&%|KBL!&5{hQ6XMd?2Ha$s<8i`%fIKle4s!Fy) zGjm}>oPjEYTb!Ty&d;s^^$xU>+ADn*eo2N2$ouDe6DyOiZhO)0WrI~(Ssa+;UDYcH zx>-0MZA&=~`=?=#SJ5SrBqKu-4u8%hDICh}i@Aul^{B=`B&{~ik4nKH#}5_6HQ4CC z#1Fq%M?5o{yjW%it7x?qIJokxGIYWdJDpvy$&pV1ni?;9EWq!0e{m|ZjgifI&~Sc@ zK1Z8y>ex)D{lrAnx_{(RoVBgPTN7E>^ji+BVF0GinB#GD4AE_R0R!^Pj1#qW)Y%gZ zyPp#Djr;No*H8iBUH3%SovIl)-@Rta{--ZJ7qz2Tg*z2U5*%Tg560lrMzdXb(al$@ z9dt`5y_DGY;UoVGph>)KxT!z;-Wi%mz8{HKjk{LJEuJj3gZ6I|DFyPTc(^*fX?A)n z!uBVf;*pww2dG#i^bCZuRi2x*+6MMV6UnpD!*GECn5#Riyd>#j1bFP^gZuyXJ)Z}4 z$BPCQ5182(!W}61e{PFLsmL#ln%j14?SDi@%;&K0?>nAcv%SNCtt4+6X@M06mZHQG z*amC40Fm(%Y`#Hr?BmV~{Py9_&%E=Wk>7AQc$tTDDWn0qXP>!7UE33Xw(CY(WmjCZ=)4D^m z%FqWJY4gl9UuEG?{~(!gt=idOlC-0uKfZQN8o=yylhUKv(tKPe>3y1+;e=bFbmoT?CEkTmLm<+R6ybIGhYKpM0~h zdioebi$HFK<&dDZi2Fsnl-+kcN$dr<@FWg4lqKE6TGvD2yav$ICa|~lr8bxL$jw$i zAL^kd#xSb@w5BvJe}Y1oD){91V#tzrT`F@uVyIBxo^uE^gZ^swXZtl6PIyI$ z>hIi6m`^QDNvDUh>%*>nCD&UTE^K~c;{ubUYMS*_{Lj-Wt?$j2;S-&Uii!viW>&Lb9FR;K5(Qn(zFMPoC#e^`}!;~Qw_m5qKD@K>Vfv6yeZQK{%N zfbZc>8$1TWQwXDH040X1#jmeQwgB>X{aTNhil15HC6bs z$tDkyQ;yoVu3rA#^6-*|F^T%&mE3M?@gKUQMGA_V7kzj{D7J5H4QX%2-W%cK_0Iws z7XC&t>=S`WQRH>+YNg~)k=~(I+rKGcJ!iRK!*3s?l94OED!Qo(f-O_dT&KmhF*s7_nGYDGC8m@{KIFD6Xn(mi#4n^O1){+z`g(lK>EKN&IvxF@mmiQ{YO;4VJMbV zFz~5_%E)WFDJ->i49a-wKXaefa~43p0x3y?5oc=)0bYvl5qd;ftwePEE@LQmsK$X` zeRx(|*$SdH4J!vy=+MAIBI}$|&NrypvfKVE-aznxFC~5^N|4g|q~!$w`6t;PfnlP_ z^P`|2&H7u&tb5xs1GAqXvcoYV8lg{^%(@vy-44~Ds>Rq0UMM4Ad!%f}u5bXEHZ7^t zg-XB3B&+={5>RsMS)8cO5z%;Rq=x~)CBENt3QP~plhVO3Vtl1$Y$i5__@WCU3M$Ti zkQzBCq#YzoR-X#+T31wlX^w7}30cixBfh9~!3MJ)9{D5|-KfMg-dHfsRqOp` zA`%A9iY^N@9&5ngB(m?#Mwx>z&3_^A{zz@d>v`L)9A8(3yrR#WOUeTD{-J3o(pWtNp)N}>I54RKq$gb zBj@V@M;`amY8!U+_|I?jd}wkK{&qLO5Qw(RsMhHrWlL*_yIf7wl48-Um6bGn%0lk}xQechr(}>t0f=I|9F4m(B zI!{;=b89K4;JxM zUM<_;mRvZf4Pyj4xW@sWSf7}72xMf*R^DjsWih}3{ULM85fDgVO4#C$4ehI^vjMRB zS;%ac+PQ9m)-;2p5>U^M9PK=*Toi8)@5+(xBSk;w)5BBZy{sVx{^#&&-cri4!`brt zgXlgB!Qo#)SQWXOV;XAylG^#B(eYtb!o3uXG{j!xf!M?fYVCGX;zJ~Bs7N|=rn{YT z9ei0-YH7ew5KFlU8-KD;R+>dfH$Ef9N^`&8SWy>)k-k+2rOuu{H3Y6e&=e2jFvdh? zsOB}a@svi~$(>AfxdWwbz^}GIhY1N zR^IM0nc^OF+oS{_d-`PL67VXn7qg$u=+nt^TOH?Hlb@;dg7X8~Qt^Lxk* zRK#Y6|K9*}xK*tr(%stCXfdIXx4kDqT~$(%l2)S3PZ5=ZkUgFzLoC9^!@{Ot#s%j^ zn(fuG5|LiWahyknXSWi9yWDE-F&>ONHW4inxjtkbKL7owIiWhAqXSg{Xd(Gj}i>5S(I;O)bMXJ?&694X+>)30E1%rS_i>!V#@I za^70WCuda)vF`WA&PyGZz{6QWP-+m?2b^e{?*@-)w%+quYuXZLfip5k&t|%3@+cgr^w+nY;b@SO&T>NV0~SMT9a{ z*#@BX7|zz~q_uQQoW^s$#>DUoV4Xjy2_3VTXRKVpSJxdF(i{&2H&1MW}=vjr^*R|n&s~%eA}X)p)t~3#dxbSoRiWNb~ang z1lrQEbxQMjH^xQD__av|dTLW2P@=(Q* z47bVGTz=gW1fNy}@3rE#zBmQ*C@?oU(uF0&{{)KgP2F2FPr}D((iNVAX)++utbZVL z!p1Wh(rj9eLR8q$Fu5}A~+-cvLkefJCA%^o`Hu4I-yO;gc3ot3%wiH<*$uRDQ; zdvd-!&6Y|cW4z;WanrcR23EzM3b7ErH5d@4yL@A*f)A^rf?nsiE4q*N;Qh?Cl-$LJ| zsRn4h<|sBV3lZK08BodYhUB{>)1@NG8HaGdQ7O7bb8h*aF>66E{@Av6XamP`^yIfGCtqZ@7yU-j3wSugbPZwiI)1N!5a zBat4aizDa7V!N4*DJ6x$0gd`pGEP$exIV>)yZf=idH8>kWqMuM86Yo-Tm)Om?g znHnQZbEKXkM)BGu>G}OwgGIr~&3bSq>%HYmnb3MN^jOqm;ALk~K?~USpM5cWpy}<~ z3lrZEtD>d!x#XDk(Ng>+@3dHgWoV8oFizvEG(GfG7ti?C` z)sl1m8UFcF;-tL@*sZA@z~}womzdiO4+V77vEyJeQO=sKbxCI}8y-p!z%MbFKquG5D=+cJtFIl= zt6y{h4i_*=a<$YT4Qc41K!P?$h8R-(<>^b9k0)30waB+(N zJV(Q7?#CGbr6J=WQ=B8s^9>|0h%|Ft8VrWMk#4=lfF;bz0~T2$0%(c9`v~Dcg~I6u zZPp_)j%Fg`X~K(NgBV7k!pcZvsLY%TP7Mc~e3_XW`nTm;b%~L0nSu*uC#!bR)X*|` ztaJXX`VeK76QJrLR;&@>tU) zly4)+IL6IaU>i)M?d;p$CR7;+rs;A9n|JpAj-Fg(#a_gE7B?)BR~V*z1HOF;;WL!h zj#>e%{N^IMsZT=2P>;>DwBt*bm;`3WnRA^baEM>6ZMfWV!ImMqTD>+ zyeqCB998!(FIf4q35AH_%u~1{YkeKYF5Ccr1${VG1@g+)b~`&QteGx=@Y+uwSIK4U z_k6S`s=is*4 zJ*!*hH>mU3T?_0Cj15L;OY)`U*=8wC_R7=E-OdnIq41>q zAQ-4J42IJWIB4AV*2P3AX_!t{4)%+GL7JW;iGU@&|7kV_bYA0-J7nr;?rG(3HEc%e ztj?ZO&5T%3{B~KGx`1XBm-^xS34c9`qSPa@Yo)-*q`{;Rq*@q$E3-D5%k$_OUqQ?R z-#!kkgi>5rr#EJEk(r#*4vbg@K(!t#1;pBOPJypUzrv6?>R}B*{196&Wit@8( zo(w(~_j*@jP_0t*GfVf6An0jaNCn(YuWSUE7V6Kjm*5;WiS>|GcX>FLsS9}Zfi06` z+}p^y@*3cFKX?T0IXnfsZxqZ*f7Gw#DW~ry{^?!|?H|24MHn%PVe1d%zn2^{T8oRYMF>F>P8FGxBhXI)ig-^gSpOtwrYoY^3BMFKq_4;DTyp z`G3!~%2}#K4IKYjnyk1OF$a~)n}AM`3f+sA!Il;3I|7I}<^8DJ1&lDnRn6udZ2-qw zuhNE9#otpkB~Rm4#YWJV(~hV!Tu-LiIwyVe3%Y_A4+|_}w z;Eu$!l(!8_cO@5f)UHv;rtNoIT*ek`I-)Ustkd8q^mG?r(rSY4mfb?1e*L>KOEZG0 z*&++)vE>?Xo6G5F;O?DZ4haIEocUvSNht2llt=IR=0L_WAKEc}(CbsHq~dpfsr^gGX1QHUc>&%-L*27- ziM8%e;9C^G2B^!FxMj9m(c;<+z)QTGNl&97TI*j5yz6wUyc2{663g1fNmG}QqVn7T za#COW6)6BSK+M0YY+KMGso4gV*f<-9SPP{fPhfR0yks}XmasFL+8TP7^vinHM6s{0 zgt zdyVpmt!z-V<=U=#@g1*aVg{2^Ts7snb6Er~8Kg3&?ZWR4?_|`4T$J#UdK6r_+)*C! zQII^|EAm7BbPuDTrvH&Pl{@_zb(L(RypH3z{WJb30(0I!(M9|#0Pc`7(gp4W)uzH% zrUf`BEIRpWN^Cd62lixRKB>hlxc(*lJ=@ShFgq81*cxA7rl0yp++Y!wiMZdsN6iw+ zoO9N6?eT~0%sYGl7rZ7r0|BI|f?ezqzbo|szfzWPt=@%qpn6;@1cB8KM&DTlbKi^q z4{CXwLkweXFinq>r&*o|^}&f=b2|TOCs3wy2>o z1VPxY4Fa>EW~8)RkR$Uvq6~|{kFAYQwm;hI!m|R@(fc1wbpFHuSQPt<#1)0Hs^pK*~6)pYv9 z&YhLF{0&T&MWZ}p33sJ_O#}$pOxh%94?<|sCX@N}WfpjHoB7DbfA??nt0D}b=S}kB zsQW3ab>uLssY^^F^#U(NEf?2=X1Sv(iTqX0kLp$kW!II#k$*cZ(lmdVCVYWec!Can zPin~6uc2@B*vVX2$$BHIWyYh2z@75p<6115xj+4naXPOCP;_%M!qK#5yUB!wSetroTA0+_3>V zpna#^yTr}`>fX|Oiz)#Lpe)A2Jt{iOXSzfMgnQ_^z+s(iu@&upYZnTJU$B>S=Plp| z24Bs<=lA8BJ%ZYy*u;9?5+~gJVnq;q!2M{5R87ySrpBsp+S#q8q)ci*V6+`GQb;@_ z>;##9*7{=AqB|Ix*Ww{32jPmt-dQ*B;~NCuCrF~&?cnVc!K!!fs&eMn%QXM#3KhKt zz<_bCA!y%XRoZAbwoYkk3f(e8aeXXTb{N}T|K@PDRKsAMwS4=3xL`;OCDD4t##vE$n`X*cjpcZn!)M6`vc)927kH0T?ZGuw1%YxLiEqGs0rj$v68IkJ zr{%X*>1ofzE;?Mia;4VZJF%g6wOl@Nqh+DpGf5eRC2iA1*YxdCq7niRy(b+A8$sLw ziNR3R_L05}VS&by7*FnSph-git!QSKCYFs=a@42wJ0%2EJwp|vjS zzF(T=Kat$S8$t`GzfqYLSRls~hNir^c6mJ$6929qQ~ATZ@q3-DoTI%~J9GbOR^d2W zG@V%X>B{8kRvDm|Qyq1ZCjOoH{8fA?#X$bu>D9hFRj@_@#q)c3=daSB|NQ{}t`Fl1 zIJcffpIV9bt_&L;^s#M;-PS5!-nzQ}%tz;I?)d=r zZthWPpm}pFpB|g)7RNfK5vppuX zp_{K9hd-Lju7JPv^tx06&!5(q%?A-q!tdzNLlb{F(djN?C?3WnB-GrmgvLOjvoRVI zJ!r%-X8-)bE3COsZUD+CdWw4m@YAYNETG+}+K6xgN^vrUA%p_eQdDU&Ws(>D@M5h6V8R^88N)3#L%hf zO3zOLw<=wu9%%8cT&4jzTw0me%HXIu`Xhs^cqzGr{ z%==C2;W4zjqa#fOos(ww<2#MIWyYjE^zW;aRONN7UvT{c-z~95G43-`1Fz=G5`!C4 z-NW#X#>GG36|~S#GnrZ|DfV{J+iXcV^Rsj7G? zM}b8ZJVe{bU=hmEyF2i@I@dY*=5eRbj+(K@AE~q|202HiEr~Cvi0KnQ)l(^F#}yQSmRAy_rLxWvp)Ao< zt$$Sc6Wn+N{fjh%fWh<;)x2v@&BS?^x~P$KdW3opG$Cv4qe;Y^Z<+3hkUGv%y=$Ni z6ooDG_xMdJibaoU_FO+xFGX67Ejf7Wd1S6Q4Smzz-_u#J4`=I-(l719TBnZ@!Q2f^ z>XJV_%&Q;K^t%>g1n6PLwFsV`1~;8yBdA5?OhJjVf(e^^C-}hvGCa2EJ)${`!o?o| zAASFNOzHr>XhNTeh%uj>DysZ*8ek=Fdh$&jyZ*sG_&Rtrj?*IffsbN)5vbTA1htAX zIF(6WbwQ|{=9q-i^EUR19b=tQS-?T1`zw0>39NJNOj!n1j7uZjjoc|yCll;0`5n_Q zw419l`Yu+~nvPRpMxKDU?Fc&njar$TuUWjA5*XY_1G?f(z+^1`SiuTw#r17l+raZ0 z?gb3N4reJ;q$p4I&v=^vO;IAY_0U$(i5J9i6oksh=+6Kfm_E~n*o4@&PVuV5jF%l%Y)yX-T)e%6fwxfOSq|s?w&%D0` zs_`Y}CbuEm+B$i^5p~y$Jmi2a(1zlrXQlYtX=U+WsIlR~416;p*V(5}#fhr&JDGKd z)v5W0q;?Gk2`taB6RQ6Mg6m=JaY7(h$0qghYKvQ}(KylZ4_`bktp<0lN%izVryBRk zG4MLd6644? zkzC%U==k&Gnc&ARZg-rtr`8_xSc;c!{ai_{>O9JUd(qpd(4WvPR0qypvHP&EaBy}- z141!t#wbxXN8hV>)b!xas~H29%3z|bm}MJ4ulQt-*I_0oYr-XLXfpI7*@FISHh`L^ zT3|<<0p;DQZ3f{F7ZA65&w~Kq&^AhMWYZ>nfo0F)PUT)o!VaL@!{d;2SsSIGa+zp- zfO?&w%9To={BW8%1%0|6rhT(Gr9v1^zDD49OJ)91#VwDvdAVAau0!`dfUaiK;Iu1w zHL~Z}l7zM;J5}7qd z!AYSkAHf2~pV0?PwVX=v-8>bU1t=?(p&SN0f_YLoqolc{javB2ZK%Y68s{GEj}J+W&&W)8vRYlT+4~N6umF7{EI<^6xY`_B@;FC>rF6S-|PX zEBZ&ne9JTNtHen^#gPFOO|QjUTe^Pet9O~Qt{IbYWDI!q%V^XitL!DHQzVB%MxjHl z)a^N^QR12fvbCb37C*#bg=DaW_=nBHFGloR^rpvIfltLw+cE#3TgPqH8qS>mx1@rp zO9{k^pm8i$+Ob14tA2LkeXC8yW(zizpQ35QQ{a26gM62ik|)Yt2JW9mM7FUO1=5hB z?fqj0O3Q+06$}b$AHjz37w#k}UzTvK`>dCKTWX=pD3? z(mx%~LX5|bqQuMN?2@#QfK*rrO0H8WBuaYgN*0N+EX=H#p!dA?{1>)(4(qu{-5`N0Mv zM5_>nx%J^zYAri|+e6%kyYFH$3Mv|b0M6jplfWFUFO>?s(Ue;*!E_X4s# z$c&37z=~`?X$aT|(Sf-nONo1o^x8%v_TC^+j$`(p7;cXyfFi70!BnF($&Bgu?Ur^$ z-X7g>@?Rsw(8KGiugk^>20hK#=r21eOjNU|PUG#pZcod_d8xRY>=nI|8mOrO!BnmP zLZCAR%puHOt_8Yt4IE&jDEH2-h;dDHxWyC!N!}c-T6`I#Pxm(3b0y91F!gs(5Mr3h z(Vm2}xn%DsBm0%8-7K{5U|-Q7z~e?t?2^o#>r=f#@yVHmu7{jmF86G=08iJ%MiH++K>k zZ~|Q0t89x7m9JPzW=CtSv-5xxaP@{AN5U}c2THLjHT-+4QwHZ;I=|Ksx0g60wjBPb z>UF}wTn$@+&M*picqOoKLi3}=&30+mR57UV#Pgts^ezGKMCLpvDVMSawn7w1qb$3? zn~BJ;`m^uF)Y$@1Ih9I*o3>j2WkAQ`hzdl&%Ic1hRW%DrwOx^ZYlp1AO%nb@@#fpm3-jGg>b{S&!z$FCHD~3txym%>)dm)vh%nCMrOqf$W1i6S z?)0CV5?3ESR4A!cD2|dOar3~S6hjMgL1~m8k^%65WQo{)h*r89fZa7P|BKmR7|)e0 zu@i?!@~aO4tf&K?IGzsfP^43FWxID;lP7UIgT2v+h$b>d|(|+PKM{Jvm4H&q1_6F(zm-&J3-+W09%g(P0VZtV^Ar7qZ5CvfX(h+C0Sg3!MCvfL_1hev z;2=bkwF{eni(W_0lh!8$YF&}&4Q2V!;%+o`}(LgEHrRRVkvnv^L{{4cwFG>g<{4tefc z>y~LVn7~?>T#Pyc?~-k$Ujgt1f!rvZ7mSPo&k`_PipHZ*^o5H8loK`S+@@V>iq%`p zE|Qe6U}su(DT2V((sp}*bzroh7BWu+_L*brxW^VLwsF?}aTW16fA0vb#VRz>)C^Z-|zKS`SWpAhc=shAoVX(H zxh(C9=!av|U;tR&>LL9iWR7i$+pz@A(? z`&mVpoBwB0kyN|bVpjcjX>cU~7k3bA?y2^%I27HgGVEIxH5a>NgW456CgpINT zS=hRVXQ&jvucXsR1g3fkue!E-PRNplFFfh3Rg~E*YekRS#O#{9aTq~aTdp2wl}2#I zOdho=ZkbJ&XDS-vw6*&X(fgqj>n5>=ZB`FBV8yaL*Wc0~HBeJ+4K1^|y4u1+@QF&5 z8DvG4;}4v2CxV1!9BCMgMy-E5cMQdnS@%>1Ut*6cLTz9%N@IdPu+TjshyTq~dX7Gx z0olK^C%by@l}S`pQ6T})@A;p?FaCCX7H`<{_E{0;y@>I4n-M^4xHb?Vk84A zztp$IJfTkpgF7P2n+c5t4(SymWEl~pW^D9iZrho?8$@{;;?~e}E!^cqtfc9**}oIZ zy#V00?`R|q{yoN}vOAqsC{>*Y>$f8V3Y0X;OhB(Ve3|imc4T&rX zg>^3eX#c72D(!t9mz~qH%eOcc_}22PUJhm7e?VF^&2+15o-z+)iuBMt?{ea`S8oXc zs67S~_+X&#|Gq$!aJ{$KCiDC{hAyZtd-@)-N@P)bb=q0mTPvUqjTYRtgI7Wz_M_&g zRvh2rW=84*_Ay;UErKu8-Jks9Hl7v`BXh#;L$9Uvewt`KIaCSPGHjE;K#ae`@FcpH zW{a2^3DHj*3*~yvKx8w|_{v`CH-5TJLu8}y-*&4(ZXP3rf*|C01gLwRhSlvRIP&~d z5^EQ?lsp@GXcz9UO8x|t?H3F~M_ZbVNyJr#FmvbS@s4U5Zv&qTCqF7 zVf|(-KwFsmVg;)x08=)KO2jO5ll+>#CEKNPQdpW4n8zq(HhJzjizcaR=xViD_8zeLjIE4Tp=aEgLD zA*JGLp7WNqA-o!U5}!+7hO@jDAlz?Cf=rg|7#@-xlY+Fh(*9TG-!Bm_wOu4%FhEIH zs7Qzr7=FZQ$D(t19$~RDHDN_~zNDD>K%~>}rqFwR2Xr8#%RgD6*9iv;#$GG?it7uh zsM$g7@uv9QMKJ8cu?UeFKVM=6%2zv_5nj0E+%|=_u?d$agr`RDCgEu!`*+*FoGe=4 z-(v1DCegM7(?G>n6leJ_c9TDE>ZtyVxl9tgPq@SIJGl|8`e>hf5|X*hJnsj4POQX( z6WCB=HUc+{R0n{fvZjPN;#o$##-MRJ1oAP>uw6!s^BN@AW3BazcxGtkSxEnms@f%$ za;W!pr0IzNDQ(=EIev<=b8S; ziHG8U>@ZJy|9QlHfzoznCIF%4w9rP{MMC^~ehvy4*9ZSw!abN-|@+R#*J4-mCY*yk#NC-TcyLJgt5R^0tB>ls= zcEI~m^l2&frRH7sXgqL9Qk~s_m$+tGd%mS4TeSYJJ@byJR@t~Qk_=jaHK{lQ zBR0+=99h6JrCNYBQ3!$CQidMAX-!0(#ab!#_ANR)0AiMYzpNf|`--&2Nu?Kn>R;Gq zeC0{^HVmQsf%l69czYC2t%I1Q@Jls~6kC}Pt57`VfHogdu;1%L8yc?4xNnKajp3%{ z)jhW#Qx0jS+B2~?(81l}bLe3!pdj;iM9DK)_X$aI;I^u@AF#A#wFIi7nMGeC0~F7_ zBI0TQ^23N$7juXvcji<<7(BRtid>QYDD#^Bihc2e1T!+&@hd6qOll%l%W@`&p+Nsd4O0%X{jp&;vzMi3_kbv4P^4AR)Cc3d@*> z7x!Fv_4slj)mTsen*v)2v zB-{&tN1e65N^UB?Q!7bYDGgONhIflwe_Rgf$;N>s;*NNsa`dY_^n?O3q^Z3qkxzK$I9oX20s?;UY&GZ@P=+B* z2i?4h%gtBIDlxJjea%V6)5Y{ahPp|($nPz6PetKs@i^n;XU1i06p1>Sd1uSaGx*;v zm2>xzvAF_OYn?d8zws;`D_D*IEIWqQMKg*!K`vdRE_MsVKg7a!FmOhn~y zGLEm*EInD_Q_J5UI)`JxmCe9;XhHDj+mqHZxMtexkW$kP%LDMh1u)}(aHf-0~A9MBY8FG(G>5p zci4KKH#6{DP6+fnkyN&S1Vx`L=}}@$YE(MfBHb4iA{k1U1nQH)W6DunX|xJ#fII*x^aI%JBJ3k%P0V?J z4BTic#wb-O2U%cHuOIrk0=T2qpfUOYt;Gs3E26dVi}(Ie9POI%3+EGKl2%vEbJ{L| zVw{yLWd&W{aQB?s2c2~`*Aa0N5VB9{irTArJw zs>XRL6oZpcxwPDTaeWsXV-(6;12eLc@fE1;<3Z-D!pu?X9=HN*Ib!CY*&A zrHAv+mcnW-IpFBxRRZ~}>akT3DJ|YEEVruUr6vXyldzSnL!stPK7l}H+8TUtYvf+x z`@{ja#t(>O=bo_9>4LB*QM8Lhfe63LiD~8)8{Eh-E8wt0lFMkAX=ZXs&sPeCZ^}8) zhRnfsZOp52r!D^s4YiYjh?}N?01x@PLzO%bb_aiP-@hX8m@g!q?Xxr%p{8clAqn+6 zBc`ht1zMU^1~<{qnSWyfzBm(3wzH=3l4Z%xQ>B`0qG6^!Ll|qLi3(^b3m;78`GPWf z6CpZSKnHO!hsxR&lQQtc*gzG%E&5g%1|=WD9E&I*V`plf;G5gX$UZ)T48WEK;Odzn z6HhIPGhPq(d}o#;fTY!cw^gY`^^@fJNTeYZ+NFS%+MtU;KbX}%-I$Hs@GuZ@w45Br zBWtpBdWKCtt*pRozpg(@rU2xIGw3nn|3Ror1!;QQ#APZwku7VRrPQ-33^v&A$qjd` zQ;v(8pnI4_LiX-M?Jp2+ne}19&jByQ0D(yf?6^drr38yJHihp&iS%@q$imh%R11zq zgyvSzL%PUOV#_yJ-^-GH)Qo|fNoCEoiDgBPdCPaiY(>~)uF2?Z_0|uM7u7UW9`A9+ z)#n}_0fmZ@;OH!$=Pd)Snwr%~Ktvxi>2NJO3(}?7VKl73YZ%H*wNIEq!G6tbm!W|7 zLmd>kfhv(l8Br8ifkdD?@eW~`DINZ3Wuf!qQ7h=65w5F*dUOfws04~vILFql`Na(E z*YXFeRi(_6-L2R&aSIxl9ihQ7jQJPNX`>zV_+AQq|1fc@sMo;=Ypsu>4n{ujGe59F|nhP?y zTog7{ByX}UnpO^n_sphRg;uQm+_4KayCl~YxSPR5D76Beds%_RS0%Pk$>u^`Y+#G7 zI#nhDmh-35W(a8v z4@F(36x5&$ZmVYtcr8`fPlDAxvDX+z+rZ-gW{p9(*VYfF4k~T&2lYAW!A`VldN3Ui z^A1&ILaS*jv;{0rb_c5BPaIJDpx0J{$qBd0$@O6w9wctT9`Ks9Le+PLGcPFUgUGOW z?S&0ek({Zg_bmhBOKLpAOTnA}0N)76+UInA=)CzFf& zZ8r*bEAN#AxsaQ*#yJsqndFy_ybQo=#w2Fg&pMq;zi2d&cqqY?lYHJFVkXwx@)pj4 zWJzMaJ@j9Add6305@+~OtrOA{^muk0*Fi9OhQ+1MpsQWo%T{sWc!x}q6|@z>pG|V= zOqDm6)XOB~8$0e%o-o1yVD~0t@@c_KR|+&)YxynDr-L!)Ca#B29=OO+xD%Z!HK3n> zi5S?aA6`5mqf@fBD=1Dy+O;74e{+$S+h)>{2 zIrd4=g!%O^DMM+SSzmh3n@J%?){wghy|7^bvn8C}3*S)OCqpP$L5+kbt`#WJ zn({yFCkR%MhNJ)rX_sd#=Pv64uQ|rK=k{_V-ep6)aTAhk2ORk5)Qev+-Y~6`@+)rn zBEDre;v|@%zj;CZX^S5BN+$@8=oF^?@a4k=nhJk<$^L(5Aic=Qb^jl$Up|SP2JNt3 z&hPi}AL~>u4`=WbA1ljhg_8X#y+~t{wD_sN5kd|=OV}K0(3L|v)!6Tw&p^|J8F4*Xf52x4nnl4pS2^*KwI~7MB%sxj~r_ zlrTJp6qPeaV-DRks*n?%vv39t9LpxM**TP!ri7{Fmx$r#JR(f&SeCo&0{uMqbKDTz z3WMd^6v8;SVs|a$^1UpoKx9%1Ou|A_V-cjUI7rX1WPB{{*EjTrHwVXWLvsALe(`iF z7LU<4e%;rnT0>^l)Tv>iDLz7UWa-#{uB@6OeBks@A`>#L&FCa>A+&$8yD}Y?f3jJ_ z-xK-Mh*FMWmFuzU;4Ke>pET40D0F>(Q=K+0SaoYeLsCe%unF2t2Xy>XSfU1JskIHj z+>gEu)nJB3CX9#*I6iQI>Owz}z1+tqz0TkWw}ViiQ|IU;|}>07+1A$(2*Q z>Q$NMI>FZ2Y$U{fYXYL;;7S6?)z#kWA1uMpmypJdP z(v+PFzUlKsZ~m2+*f)rb^^nA_QYpbpw2L0`Q!&?YGTSw?9s@OEsIz0*5qoJv1LGT~7qPBqpdT!Q8l=Vn7d2C8Pl&U_5l%*zn8puT;xl&bWL z1)c(GhO$(?xFMj8*hu5}9Bd(NL!*s(ykl-YEZ1n;kKqOy{Xc>-vIt;+Z^q}o?Ql@-Ka280AP^(~MHt03C#0nl zj`awD09A+BWUX2#W4MO=ALziP#Oiw`qo||;(?giuFhhk&Hf ztJN$KM4TE`pC6*gJM7j@eq?Y*aY`@+KamBxxOkM0cNhz^Nz*7ca|i>(yM<_|SO5h; z`oEpQH^N#N_7JRcRjv4aMD6JENJiXy3ywj^HQ`;&8fi7as`q1%Cw4^}^;Yjp85-q6NtdcOzA--esiQ+po(FK? zbD=y55nIlV6=}aLHN(c2(h4rdN-$X zQaLK?s+yN%LufIB`Mlg85L5SY?e3eN5d?&Rhrt*Czsg}*AqDZq=#MMSCBfG2>_og@ zs;1u!&7

    56l-zdyA{q>=*{`uzZATG)fOIb1e?2D?tknljVu=DeW^j_g&ro9% zM=azq%*e@yeiM3#TQ1~LCl(m4UVR~;?DZ;&fC!~6(BT^eyb}|OW)|aeR&)5j$7XV^ zcT4k$1){|~tswoG55GLXIPicpmE{VnsLjWucMfgXW%tmUo7c@`OYkvfgPj*TPl;n6Yd5UJ&G|78_RNpCO--;~ho@Cmb1eO)o-`+Fm$ z&E>G%-PB)C(U^6KNOu4UsaE;YrHu>%hqLl)db-r&h<4?r7c|dxto77k(hv#9Do6mmmix} zYKzX#RX6)j)QDGw4PpG;8g%&DYyq?06IKEB4E*{m3T5f=wV)s0 zbALEw?^e3t(txrW3`CR|0}%LxYND*W(uU+GDPCmaPCJ$L8`(XkU^mO(`MyS_R@{mAA*H`^iT`#hU%Y!|tyDKVpF>YzRazD=ItIq)IY+xO?PRDB5sb`rg58l;WtuOk_O-*lrb%Y0O5 z`HXKTqyIf;>%4`N$wL3294rvQB{uMkUmJ|2&mNYn0pmN0yx3HuxppMC$0A2i zTs3U|@l}zsbBw%zR_y0b!0l?Y+54=vVsu1F3FN@7f7=)%1Br4X#KtrR8hrdG**k~jVRk~FfooC&(@Dfo-}7NjPJ`iKNAh5$zW^0!ZmFF2 z9YBk{E_z%W5GEz#BdsTRdEpA3Y}#{|V5OauA9bS7iH}yb$`<$$aNASa@9hi|CQnr^ zLtL_aZ3^(Po35y3U6pU1q~E!l*W{H3%~@fApy;%n?~mNu2yzh4FQHAZwVQHx(l;ww zF+rebFi`=cLin~SzOOt=#D&n)lF#)!e&TtwFcaDwp$DZcoL*WATFCK06qy1!V%0V< zvW#iyb@atbB(hKX(BnC48$h<}Xxl`J@LUv*s$aRI*PTG)0#cOqJbwGu))Lai`1@vp^mhJB4}YaWb+36@nCgAEkPH z;>xxN1$hZN?a=Okr`Fu@wx+!bk0J=7uRZVOp_3GY1@aP~CU?W)+UqhpE%=gf>PjSp zv{7o)4nF&!8&xvFEweNe`-IeMEENZ;!jxT3(ay)Co$0A(y1Nr0#;uqdj|us#)Z0Nh z2Pi>%fnRS6P7r4=DY7cop}xE$;VTNwFopjvb8n0RmKA(%qX4hsbm#R60I!bpq<71>ch{*vn zszNvfOjqb9;nD30m1;ny9Q2;_=&B@%+gv`bMkWqah0$Y1YcaAdD~_@sb^nA^4Sy(H zDN>hLtaB31?s3pUZWA**6k7~Bo6W?$Kybt*+qEK~PoUYNZAnz2zPCGIU}~>@<=Azg z55V8}J#_O&A#i$)DN*M>0V<~@TvDU-3(&rYqgs^UPVc zS2?HBX=`V}ZRBv6m0SGkW5o3YyRf3(lN|8kO7N8!8VbC+xk@7GM4i#PGw-Zvq%B^n zj~+lpNH5_VwMyYHv2)rumKZsoCy7$NCzLT0|H|gxWCH0-aEgO1bTqCmN8SIQ9=VA` z=qaLo?NMWO0^Uc4(Fl%wF86LRMlhDK!lgd&UkDn{<*B2SB{rcAF1h9(1M~G^7L_;F zTw~SyUFaMMBm*Kd`#CjbIcD$W-4ZGwRdaoSx)kV z!ik;h#pWwGw<@rCU9-M(LukM`(%K2>hU(UPnd+Xk`2;UDa4kN~cm8SgO);+G+2CSq6v-dS!o^<&$0$`XJrW?_aC@`FOdVu#&8v-> z6M{w9ghcmmpuX@-RJ6IQ!J7@w>F6i3{kwKKD#Ll$thcSvT%L5y=m<2Kc5W%$rg$Um z0Ib2;x5QS^YB|MnwdL@|J}67RZyR<|Hq}ZvjXQHWMbouQZ!5s^ch82+=5ZK^+Sx`K z*DgcG5;~*d-{iE7{p=ZSVpx4q59b!T2zpFE4Em`Ing)~Fbv%h4)Yr6}w8{;>R4kE{R%Jg29l!K_)1)t&$Nr7a;>{KN{iCORu`6NcG=26iyzYmA$&(DHFi`+)Lv zpyt0V~yYiXG9 z(Rb*+mq0X|m>3*$zBgj3tY7!j!k(@JTSO`D&Utpy>l{Sl)|{XaJ{x}vd?boX4%}6D zaU(}=KW3k$%8U~F(s1#uh66Y%@N0=-mlni_H|!T ziyc`9-&yR1J7ORM)ZVVRI1dplgh5?hLxVpLO1N4rMVC-|DnLnd~Iy$a~YwiPzaU zIIF;-xL1e8M#tT~iqa?1ff+|ECZ5F1h~%nI*dQ1zBL7PCwM%vt=r&^y+v3A;trPE4 zs@)v8QWQd}t?@uz>GJE!Q!A%U3l+r*aSaHV%>~xcRXc);1dkaRBLaA-!_>k&{vHm_ z3&qf0BuhnWjA4Aqw3uV{+7}l#!M>R#?jo!%*69n4Psf#ZLki`wq0I;Wo5FAg-)CsL zR2DtcxrY1DlQp9kB^6i)r)y)jI&CE;@Ai4YP?aRPIrlIOXGY$NFhy)mpmP>i=>qd_ zY)7DWp-keG!v@${6~HODJgq6344x3%*6UE27^Xxv8=J%4*6#Wa#9aeu=rqhF8%nuby^gx$ ziS|y8)~|u|D(?lqhJiAf8`wrfnzW0Uo)TQ(VQa`qrAP5uwE|r_nGGE*u zX=Fu{C*;Yj-?iR4ANjqT)(dm>8BAjOAx8AmJR%e8!LUiRKqFx45fQ3&9Wn}gy^3{P z0?Am{#!&B{y$lLuNE=K1;PTWB2880bo*Yg;fDmC;_|)#*a5AA401j#e&!f#U@8^z_ zGWuUg90HfJ-^D7N?~nY|!STn9yS_4QkE8BE`orh9+^PL2Qqbh%ZFLV-0w?<>*lFpa z9Bpe<88!n^z1+qAOz5ZHWt%=<8rV;(i9i1|a@O7`a{;1nWm3FGJjfO2`AdCC5zg6W(u5R$S&{8_e2 ztlfwn?6qsi3~&E~WM0Wpx*To&XoKXM#vW&T?$t~9oz){~LUQo4f_T>c$%WZUABb$=?n@=*cX{`=lNEO-&Ar3 zM(<={fI)9=D6GsTJ6m`8*S|7m>XB0oA)aBg2QuZ6Op5Xmm3ZDNSn4DU12KEn$K<_1 zt)%~l&KsWo#&-B``|^Cy!>3=6XG76D$k3*eSEG>6i1(rxFq*~T((JRh?vZnXYP^><@>KB9;(xrrmSWL%p8gHh_E>fv$y}4S6%)9Cz58!^-17`W##H-%9Wt6QmY1fH#n>F)$Xb&)>lnUP-e_)0<{e;{$qmvu=m$2$myB6-m z=+l(QG=N(Y0qlz(tZvDpm7jW43}j1P*ok4r_N9SfZ)Q=`o^Q4Kl|1z?I26yNUwz?8 zux32$2_`*YPU%v=@A^+ub1h(}SdXs=#ozw@@r5@B+trDt)MW=d$ETMD*31(QXwN8yrnHI2riUg?gO84$072 zbT$S_tFaO1mbNh>0}$&sBrrZRd89!69mL3q8>IFn*$5pBlk1H{go~4?UQr{2ax#1x zqYXt?Irt#SAigw8#e+9^NQ!n&jJ!F&3Ur!_0k&z89y~oFS&;lm{}mC~i8e_Eo|Pb6 zl!}O9TiCy#7ufyZhf}gVB3tKPC-L~`uGpqnN%wxa1G87hq(D*@;Ly?Rxx*H^OeJ7S z6!4mE=sDb1RwyKX8D7L-xjnXRoSyT#DTh_In9NfH;nP6i1Imj`XS59aKqA9@+H#!% zJ9p)jDgB^fgnkCX)?@k;M#xmMg1H$KfNFd;HSs2ppwN;~1G~5WDIIm`#UGRv2ujJ= zK8{EXK(M_cJp&Rg~| zlt_gw=oZsNcNiX_4`Iz;qz|I?;Vm1 zh@TBIE#8pqT`J2tnsZD-JR^d&x7iLSWxah06tr{#9weDp8-`hDm5w(oqU4Og=5zXphmXs)Mq{ zXMe%mQWH1W0xZKN5=aSBH*kNRvi}cCGiYrE)9Mc&62MR3chesw*+-H-H_>{KQFz!8 zzryG3Yi*Q~n!l%VIPz(gu)($ToOQg|to<-#gS;0-3%poV+5oOH4pJxMd>u5h$;h#! z5YA#Z);KDj6Dyn}ic;~Pv~HyKgUi`b(;dMWOu5RZpB5dN!*aT}6xjKr9CDrX+I{T> zn2~3`>R%BIg0|)n3a~pa7GIF`YimBMwa>#yZDLZ+=ZOw~t(X#r>-N66L|#aB#SJv!d1Q`*7r5tk>z>$f{J!EaT9Ya}c$&V0d_PzcCGweU&ZJfh zH&?}NClF8q*gK+S79%T?~rLC&0&n8x9L592ZORu2ED}pJctHu3>+RuEW*l?b-Nbmkrlej-zH9|5?(A zd5ZoLNeFl5Ub6&5%f()_mCk~T=T|d%pD9q1CK%h>FaGl$cUy>wAXEA65b0hmbhQM& z67@#xQ4YT$!=a~&h3ZoV$vBHxAa45>4G8a^WeeJ2(d1m7I~@fV1el;7Z- zPAm6lRCPepW@N}fT|nA=T{20%<^mTa^w*2oMB&7+My0FgP$e9I5-}K#$aZ05Kn>oc z#v*HW|46T@4sa89uswS?t^^fhgy5Zd%8E*60L>J$HLQ6bne2asgdvW{F}h z;Sgd)MmR2;=`hx{B5+Uak5jEbtfRigk{LKB6B~f6H^Nd*9g(~*iFYQ~MhwJy!0!_| zy|j5p&dQy^pBMI(Jnd>1B;_K<3dE0y#&2P5<&x{Qu+T=^($%deg^^zjL*I@8^zy(x zoSRjGexITgz+O}9ss{HkE%~17cP$?k&qsTUa&2IiwFzvFdInSFyEJ}|IYU#zi9HvO zmE*~4@i?bZ#mh>h2jEXM4&b2Cn#->iqodE^8-38M{Y^GQ@^9jPCB$00!qOe;xHCEh zOfW#D-w6E*=Xr{GMs&m4x!IuE=LC52VVOJW%%zEXD9dc=A_6dwp*ixAoe;Na+Er3i zf*Fs$EVf?FleM?uf49|d$SE$IPr*p*GFPL>%@GI0=lt%+M+y`KJ^&s!^Ob?jXGr-) zO?lnOO)~&P`Hex_QNjC$dk&n3zWR%2+%jBIC1+vU!qz}N>h*`m`lgC7lS)C{zrO=V z0}DA0iCRx!0>K&&t+Mc9FYH=WU+_Ocr+oRGJ&i(Rj+922Vi(o)HOu|j5GEyQ`4 z+Zhjha+^aY{k>cm!O<`T5=+^Q+39ocdZR|jWNJd7(#thC4pe5Mnxmj*{SOmHf^7; zMSc}<$Mi_G=JC7VP>&1;V{QnMSmJ>6s%g{X1s?w2_Iks0%QCV4XIWmkye`64ri=5B zu9dCJ_)wTMt&Jk&lz1{hK4>>WPv=9#SyANW@UPwL55|cSM0N9ZxD!R~i&Sf~XgXZU zJV_#9E=GCF>Uun<YiU zdxC`OUdE81wDbPzSjS6jyd#Xct|8~P6wi?)>Gs72?Ey+b1Z?f4-=a!wvkP%U%dnha zb5;~PsMOB7Jap_e5ZU3MfxtN;oSkV2#W^tJvZI6{Ti=Am^Qz*f6Q?C zudg)xqo{F;)8V$Yy)0F{JTdG-@cw;Pl+)$Xqj#4oE42*rw;jOVDyy|SQM1GKw$%d5 z&$wks>R@uN10bd^tj2;v(vLjC!P^{Tnm=aa5Z%=vM0d1~YLfI)r1vgXd8mk$04_l1 zPb^dNO=ukkb_QSQtp?UJc$jt4BXbJ5@2AMC{OmR1N?BvUkFYpGv{XDiKe|$Uew~(D zaA)JCQ16v&8GY{6b$IAy=~=q?j5t=p2a4PJZm6h>9Yi}7$?)oqb3eY6zI|>N(~y-p zQ|cWqXU-IkP+jV1MW`dfezj1=6r>%l%x}28z>oyX)(mAte7Z2SE}`EF>)$1%sOc2O`9ku% zIJws;gUen#{+cjxnOH@9pXWGA9Yl17E?iyhL}dmU7(2Bjas;qB;T-hy z){Y?1F}ci8E%L3$Z5UD4$N;ddd-TKf5*U^iV|^F!sV?AUS&|W0O|( zAAP_nU>v1$%h*jc>qud0lHeXX7+KC`Q$3QnX=Iu>=k?49SXbf*L6|8g?In8(Imduo_z#P@w zQATXsls;j3WsAqeqv*qFX9Nr)k+ngf0n&^d-*#1cjSi;F@eh3IC`Yj&vJ9a7T8{82 z0uKu-?5973$z{I;e*Bos*PV8aFFeLML3`i=K-0^8Tq!_D(x(nv?SJmumSqgwaUT{? zN>f5ZgbM&IG1t+@FkP`AkHwC31OPBpf|7rkxl- z&BVE$R$sV>M$2Vs3&@5* zK&MDQ#O45GbPKjY#?w1yax*Z6;`iTYI zFANm*o9ew8p1>a<3+e_343*Q4vY8C@LK)y0rI3Tl!e#|c+NIJAu@r-~Bp^cF(rC*v z?a(~U$&cU(V;Tc85YvNpI9W*3)u@Be^k~QrS^|wE?t?<3C8|nlq{8*;)*eJlqf@cp z-HCavwKk++=&e_`9uFMaQelQ`vdI#YaK-Ji&mjC8u&qeul{{NP?y zqaQo)YSXa-(=c%S7wF;iR@7;nM{2bDq~>RUHA%!J37k*WI=8WI5s%O*V4!hjh$?iq zv#u+LS?${vcq{_Q(PoLbIPWL*G)N3-n?Ew z27!KNzv6qc@Voi3`S^Y$_D>4WN1K(%N_I+Hm1BJ~)i6ChLtXr7UYS=W&*PRmQZr+# z12Rc8IjlO&wj&__or5@6Q9jX8NTkx{qC}=(OJANe7Amt9Ljs%VQ*3gP^!~B3nH<=9 zGLx;tZal3}(t{Mia*nTD6iQK!0DrJN9>_1fk)G@`+a^r3i|lN6aq8DzB}B-JuP2~g z|3J>0crSx*%>uy*-vD;Cs3G(5QmaEw&SfR+IVtLdSoO@IdW<<=l;ZTTQu}GW>;hRf zHusLa#89CV5daH7^uHOx7XN+fJ%Pm4E{De$JMJ6ECxPk}sj>ft(SDQoG@YUoXHDEo z&{dz_iypv-6tv_T@wYkcuptKm_;4#(s0dU9_xNC*C;bv`2cPHHRiZZK3k|2aPXWaj>(XIREHEeWK%7qOUDE#ATT`6ZLZbr&QpN# z@TK9a63=(crsfr9A@yHhEd#bt}1Ts3+KpYK;)jmWWFl0 zNQ3u807Q~FKe8;0&n@get4S+^#qN#YV4SCW*Nb|++W)D#{`DF`d6_@?oPMaPTVCcM zLv+QMn3@0fJS&~LFScH;RN!Bj9oGHB4tpnQHo_9~*it#9AO=~>R8-0~*4z3KAO8xR z7!_7oPp=jZpocKc^(|(eOXQg6^P5dA5CvX!aQ$qi0MK^C`&%T=md#wm zQE38mrglOD9S2(`XXSU!M)Xwq&$tnECbi1oOOnjIIAHS5y5zIC7)h++pPF6)@(n%Z z77wPQ>`X9tTRh*Ud1~*g?z}l>$usu){y-`}yMYygRMsCiCTU$K6j;66su*Xj(OrZ3 z2QSSII~uBp+IE;ea4x)&$IOlp-Msgwff^QM8Zoq(yBqF%c~1#iA&Ued+xzcz!QCGE zw!Pvw`yJr^l{h{v^-epO+-ZV4KUbPi$HrR5le->;)S)?DVEZ%EnZF2w{? z^P9;FnhLjAGOcYpb%$?1zy~gr6}jCS*=erNMm3gtO3}TB(vu}#-9hQ4tWkZDh{8*~ znkt=3VCZqoc89Wpd8^PgE*M*s-A+H(ht(0Q)z7FeJEg=g_nOQASd1naR?b&KwFCj8 zN6DB|Rk}>BM{&c)4Op+&(K*P`%t>#`DLdf7EXHj*ZJfFHZk|w_YMF;N9o+WVE z1?f*p9HB>sjy{s-2Ir_j1sEfk0Yze_cchFiMs#a_D`~eFyTc+@x7UWFX1y89kGcly z;nc1@VFzp8ahAi_1>#F19}xujzx)Tdv)aHI1%VPTfIoL+;@n?DDPZ>IMD2VUvueeP z4LVu{L3O*9hv6}qGBfBbu-D16qlSdVP*}YtPqB%%Mm8isyn`043DZmOI;1NC3AcEQ zX4qo`E)G!d#m~7lMD(h{Oe<_fKqt){8QvJb`3!Ia{Gx5hOD-}rANBd<EHXjU6M{oE6!5F}pv_alF-ix9Wls4ZJ@E zbg{EulcN%P~#W)BfAqQGwGp(i-573S6!Cw$_HJ3(?e_0$1bIHFDs1cE>?-H+ zWCZY+bwPvBZ&_#G-Pj_io(D6Chf+)ju$sE!X-%L?=Qomw_&@Dd%#im0b%BND!3#XA-6#gFQ%t44v=*4 zk5$Vr|Ebaxr8FtAzjy60mTxG$^5uf(qy*73VDvUmvH`ZhvDrK_EZunYP|A@8*{_UE z&FX_5N!p~Z4d`o$FXD9NF9}NCgn2FywjlIK6R(CZs@5s1kRZ-+d`y^|n*2R?jP!uB zfjizsv2{9SA?(BK&;1S+O@vbA1CTbkDO=$C ziZJHpH*{|^JMe$9ZP@ON=HZbUF-F`m(}gfH2o_k(MJzpo>un?t)CMtW9;VF>o?Rl2;E)9`uy=@;tv&31?DkUTQ{FO<``q^3 z8I*ZC7otP%Yhc{X%}qe3l}b=!+BQswD{%b!(car%=lDT#0e&CEXWwd*NrVwgKKBZN z6&EE3DqX8Ii=^U`98vFm^<^K`bnwqhX33)68Od+ce_4;H@?8dDV}?%hOQmf5xL>F5uqQZ5M5X%iY4H zbX+~E$9G7(B7Wl(gQ~FFagIUXUP8sf33#`S+70o)kiGh8$M1owFI~p}#~LUN+JI?; zClJrlUqX74#J2NI!Nkb<;wk?KdckOryk`ldBr6*vg$4mCB|NgYLI;{t?xV(y z2Eyx^<+Qy1&AW3_4MtYGXB4g+V|VZsBz{Tc&X# zo~mBy!18?}RNpbRfJY zP6+_AY|Yn`KOpa&Ph7{sf*FpnVb_wJ?z=*ei7(hrM|X}%k+0KyG?cUoS%ZW(jx(5K zm^oVAP~JDXddeZx&>U5Wwx8lTe4QSCvg3w0fGo-_)JKlYlBwm^wfsil+aCU^#E%Ht z$Q(ND%!x(qh$q*TB!L`M&ofCcGw9F|6fEe+9LVi9DGb)4W3T_0Btc277OEb9GPq4I z5~U>mFM}@?o7o?vB!w>&GXXHTy;4iL8(akQ_P8B!4^9Ux&= zq}0b8mBU+iW3p_apd7=Bwq>m>rMt4+_gCO!2>>$e^=oj}LRIdujh*Dt0A(E}QT}d( z%{%}xK+eC8#)~n8+AGh+`SSFevy^DAHYPa*bRWH+l4DGh8Ct^Qlh!8U)~IIB%5}tA zi2V=KaZaX$64k)rwqWW~3`h>au{5iJQ(JySZ$_3XT+w?XQk{R<<))8s0L%~Hop4Iy zlqDtfg}zm>Q`5Hp#qt;LNq>`+r=+nfObPR{$6?l+8Aj@+6|O~iHTWPh={@>^Rx?HD z5G`3S+M63-Fjw#R;qlS%13ZEua!qgBM1w=9#eFV9lA|WFepjzPPfg;Z8Yf6!LaAlY zS8*ytw2VyZ39}xho)Tt<5pgf6vp&bGTm?a-2mchz1QgR*P3DIqefDDh6peIC3&tc7 za5=hI5QRz-c3m;Bxj@Y zMxlneZ}kFVV-)1m%uFde$HUTi-`;Qo$0J5()3s3*njMeiYcWDdIl6rhL7>G?tziVD z@f(lg`nD$Zd9O{7sH=Wd2;&-~UY5WYR%@tU0Cx zU7_YQiKveP$;@^Ab}bj@%9)G(GH=&D*>r;1Ua0~15qoq0Q$_C{X=bc{gGPQ5Jg&RrQ$+}7NKe9l5`Dat%UHQy0@vKH8e@gr z+3>oQ=Ss#=i`vJyVSyHz$Iprjaj9l#Zqlx&cK*S#NoN3Yb)vuA0{uBa^_)YuB`V4yLi zEvmd>#w0Q8oj)jH6AM}Ul;H2Xq{7TSSBI0Fvr7t=*jw_`GW2@2sZTuVc{o_mje`Fm z(5R-DN<$meKH(pp_*9fyfg)v0AhOU7*$2EN-g+c4qy zvTn7oyPIyst0uBu(dOU0qd+>Yli=o@Jk1Ir^*+`JAf#U90@ur3*D%0QQxgK#z|FJT zN0)yqPU8ZV`+Qq95(|M4Y1$L&8+_?lx%->2`*XYrXy$IsZEM}(^f|f$n+9_U`HJ(d z>{TNgu=78kMkTqBVCKE98;vOKNGtX#S@}xVK*q&fPcV|==PDH^GT^bG>7_AK;UTWk ztxj0Hiu*$EgO)CJDVjY!aa#+o<`wV-&F+`v(h?>8pj2bU$%QM8_zJG>?^1d2wV|61 zk=zHZ!FCxdG=+KbV zT}p-x;riWq+GdreVbyJ?X`zsjHle{3ZBv9Cw>aVpXi@sH=UJQVp(U!jElz+f!FLL3 zS1$GEY2yC}_Q3Bal1H(yE*#JHRXnHAqzuEFWY2TGjtp`eLAYV?oOTZHH(ZLnE|`4x znkp1#{LI#ffptwA*2L{9tj|tOv1=l~7l42&v*D=M2(*ll)p{cy1Bo@_GB=KJtj1se z1|+4MlC!)vjEQl*Oy{Z$G-C|OD(JGtiUBYs?m8Kyqb1tGY@@J2z0KA5{su9z!4H$% zX)E1e-%w`Jor?N=>FfQZ!47_+i&H6h)`N^gJKYU=7-k;Vu<=|(0a4+kQJ8<_Y0`VM zycy;^BdZgup))8GAele6qD=HVl3~zO7D-K3O@7Tad%MT612J<_o`~#>8~Znl5yf~n zcJUq7=dqHW){xy9_DtEpzsS{O8{f-G{M&yK&VqF9U$v&%mi%;A2_-#N2+aV&Bj zVJ^aRU0s=K!fBbF8DC~)P%x|3#S&fm)?i1t8$Zg!vu$hu~tcb=YBtdp=!Bd~o2!qI;~D8?&*FQ1jUl#jBH}R75w9}K8k4=okL|bc10<4RAl^bA z{cQ}3VCPYP&j#^*wHCW>36VQ8RyGwABpUHWII>;%8m}cTW??7?O_oCeus-R3&&AAk z0{Wd&&VvH=JgZM}gq^b_{k?u!$X#|E@&d0E>a{F!AcZxgf&A�Qd)$%kahhu%GXp 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

    ;MNBuc2!cjaVIvjZf-K@_gRPRgoMhQJR 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�?Lc9CS{eCop(oa4f3 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⪚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 C1Bj*o literal 0 HcmV?d00001 diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson3/mainEA.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson3/mainEA.cpp new file mode 100644 index 000000000..b6bf2bee8 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson3/mainEA.cpp @@ -0,0 +1,148 @@ +/* +* +* 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/syncor 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 + +typedef eoReal Indi; + +double f (const Indi & _indi) +{ + double sum; + sum=_indi[1]-pow(_indi[0],2); + sum=100*pow(sum,2); + sum+=pow((1-_indi[0]),2); + return (-sum); +} + +int main (int __argc, char *__argv[]) +{ + + peo :: init( __argc, __argv ); + const unsigned int VEC_SIZE = 2; + const unsigned int POP_SIZE = 20; + const unsigned int MAX_GEN = 300; + const double INIT_POSITION_MIN = -2.0; + const double INIT_POSITION_MAX = 2.0; + const float CROSS_RATE = 0.8; + const double EPSILON = 0.01; + const float MUT_RATE = 0.3; +// MIG_FREQ define the frequency of the migration. + const unsigned int MIG_FREQ = 10; +// MIG_SIZE define the size of each migration. + const unsigned int MIG_SIZE = 5; + rng.reseed (time(0)); + +// Define the topology of your island model + RingTopology topology; + +// First algorithm + /*****************************************************************************************/ + eoGenContinue < Indi > genContPara (MAX_GEN); + eoCombinedContinue continuatorPara (genContPara); + eoCheckPoint checkpoint(continuatorPara); + peoEvalFunc plainEval(f); + peoSeqPopEval< Indi > eval(plainEval); // Here, the evaluation is sequential + eoUniformGenerator < double >uGen (INIT_POSITION_MIN, INIT_POSITION_MAX); + eoInitFixedLength < Indi > random (VEC_SIZE, uGen); + eoRankingSelect selectionStrategy; + eoSelectNumber select(selectionStrategy,POP_SIZE); + eoSegmentCrossover crossover; + eoUniformMutation mutation(EPSILON); + eoSGATransform transform(crossover,CROSS_RATE,mutation,MUT_RATE); + peoSeqTransform eaTransform(transform); // Here, the transformation is sequential + eoPlusReplacement replace; + eoPop < Indi > pop; + pop.append (POP_SIZE, random); + + eoPeriodicContinue mig_cont( MIG_FREQ ); // Migration occurs periodically + eoRandomSelect mig_select_one; // Emigrants are randomly selected + eoSelectNumber mig_select (mig_select_one,MIG_SIZE); + eoPlusReplacement mig_replace; // Immigrants replace the worse individuals + + /*****************************************************************************************/ + +// Second algorithm (on the same model but with others names) + /*****************************************************************************************/ + eoGenContinue < Indi > genContPara2 (MAX_GEN); + eoCombinedContinue continuatorPara2 (genContPara2); + eoCheckPoint checkpoint2(continuatorPara2); + peoEvalFunc plainEval2(f); + peoSeqPopEval< Indi > eval2(plainEval2); + eoUniformGenerator < double >uGen2 (INIT_POSITION_MIN, INIT_POSITION_MAX); + eoInitFixedLength < Indi > random2 (VEC_SIZE, uGen2); + eoRankingSelect selectionStrategy2; + eoSelectNumber select2(selectionStrategy2,POP_SIZE); + eoSegmentCrossover crossover2; + eoUniformMutation mutation2(EPSILON); + eoSGATransform transform2(crossover2,CROSS_RATE,mutation2,MUT_RATE); + peoSeqTransform eaTransform2(transform2); + eoPlusReplacement replace2; + eoPop < Indi > pop2; + pop2.append (POP_SIZE, random2); + eoPeriodicContinue mig_cont2( MIG_FREQ ); + eoRandomSelect mig_select_one2; + eoSelectNumber mig_select2 (mig_select_one2,MIG_SIZE); + eoPlusReplacement mig_replace2; + + /*****************************************************************************************/ + +// You can choose between : +// +// - Synchronous communication : peoSyncIslandMig mig(MIG_FREQ,mig_select,mig_replace,topology,pop,pop); +// - Asynchronous communication : peoAsyncIslandMig mig(mig_cont,mig_select,mig_replace,topology,pop,pop); +// With a grid, you should use an asynchronous communication + peoAsyncIslandMig mig(mig_cont,mig_select,mig_replace,topology,pop,pop2); + checkpoint.add(mig); + peoAsyncIslandMig mig2(mig_cont2,mig_select2,mig_replace2,topology,pop2,pop); + checkpoint2.add(mig2); + +// Initialization of the algorithms + peoEA Algo(checkpoint,eval,select,eaTransform,replace); + mig.setOwner(Algo); + Algo(pop); + peoEA Algo2(checkpoint2,eval2,select2,eaTransform2,replace2); + mig2.setOwner(Algo2); + Algo2(pop2); + + peo :: run(); + peo :: finalize(); + if (getNodeRank()==1) + { + std::cout << "Final population 1 :\n" << pop << std::endl; + std::cout << "Final population 2 :\n" << pop2 << std::endl; + } +} diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson3/mainPSO.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson3/mainPSO.cpp new file mode 100644 index 000000000..0635a90f8 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson3/mainPSO.cpp @@ -0,0 +1,152 @@ +/* +* +* 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: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include + +typedef eoRealParticle < double >Indi; + +double f (const Indi & _indi) +{ + double sum; + sum=_indi[1]-pow(_indi[0],2); + sum=100*pow(sum,2); + sum+=pow((1-_indi[0]),2); + return (-sum); +} + +int main (int __argc, char *__argv[]) +{ + +// In this lesson, we define two algorithms of the PSO witch represents two islands. +// Obviously, you can define more algorithms. + +// The parameters are common between the two algorithms. + /*****************************************************************************************/ + peo :: init( __argc, __argv ); + const unsigned int VEC_SIZE = 2; + const unsigned int POP_SIZE = 20; + const unsigned int NEIGHBORHOOD_SIZE= 6; + const unsigned int MAX_GEN = 150; + const double INIT_POSITION_MIN = -2.0; + const double INIT_POSITION_MAX = 2.0; + const double INIT_VELOCITY_MIN = -1.; + const double INIT_VELOCITY_MAX = 1.; + const double C1 = 0.5; + const double C2 = 2.; +// C3 is used for the calculation of one of the strategies of the island model. + const double C3 = 2.; +// MIG_FREQ define the frequency of the migration. + const unsigned int MIG_FREQ = 10; // The optimal value is 1 or 2 for the component peoPSOVelocity. + rng.reseed (time(0)); + /*****************************************************************************************/ + +// Define the topology of your island model + RingTopology topologyMig; + +// First algorithm + /*****************************************************************************************/ + peoEvalFunc plainEval(f); + peoSeqPopEval< Indi > eval(plainEval); // Here, the evaluation is sequential ! + 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 > pop; + pop.append (POP_SIZE, random); + peoInitializer init(eval,veloRandom,localInit,pop); + eoLinearTopology topology(NEIGHBORHOOD_SIZE); + 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); +// Specific implementation for the island model + eoPeriodicContinue< Indi > mig_cont( MIG_FREQ ); + peoPSOSelect mig_selec(topology); + eoSelectNumber< Indi > mig_select(mig_selec); +// If you want to use a replacement stategy : peoPSOReplacement mig_replace; +// If you want to use a consideration of the migration in the calculation of the velocity : peoPSOVelocity mig_replace(C3,velocity); + peoPSOReplacement mig_replace; + /*****************************************************************************************/ + +// Second algorithm (on the same model but with others names) + /*****************************************************************************************/ + peoEvalFunc plainEval2(f); + peoSeqPopEval< Indi > eval2(plainEval2); + eoUniformGenerator < double >uGen2 (INIT_POSITION_MIN, INIT_POSITION_MAX); + eoInitFixedLength < Indi > random2 (VEC_SIZE, uGen2); + 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); + eoPop < Indi > pop2; + pop2.append (POP_SIZE, random2); + peoInitializer init2(eval2,veloRandom2,localInit2,pop2); + eoLinearTopology topology2(NEIGHBORHOOD_SIZE); + 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; + /*****************************************************************************************/ + +// Define the communication between the islands + peoAsyncIslandMig< Indi > mig( mig_cont, mig_select, mig_replace, topologyMig, pop, pop); + checkpoint.add( mig ); + peoAsyncIslandMig< Indi > mig2( mig_cont2, mig_select2, mig_replace2, topologyMig, pop2, pop2); + checkpoint2.add( mig2 ); +// Initialization of the algorithms + peoPSO < Indi > psa(init,checkpoint, eval, velocity, flight); + mig.setOwner( psa ); + psa(pop); + peoPSO < Indi > psa2(init2,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-16012008-before-mig-modifs/tutorial/Lesson3/paradiseo-peo-lsn.doxyfile b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson3/paradiseo-peo-lsn.doxyfile new file mode 100644 index 000000000..646a2fb7d --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson3/paradiseo-peo-lsn.doxyfile @@ -0,0 +1,242 @@ +# 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-16012008-before-mig-modifs/tutorial/Lesson3/param b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson3/param new file mode 100644 index 000000000..730f547e1 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson3/param @@ -0,0 +1,9 @@ +## miscallenous parameters + +--debug=false + +## deployment schema + +--schema=schema.xml + + diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson3/schema.xml b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson3/schema.xml new file mode 100644 index 000000000..ba6389de9 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson3/schema.xml @@ -0,0 +1,20 @@ + + + + + + + + + 1 + 2 + + + + + + + + + + diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson4/CMakeLists.txt b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson4/CMakeLists.txt new file mode 100644 index 000000000..56edc1a4d --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson4/CMakeLists.txt @@ -0,0 +1,110 @@ + +###################################################################################### +### 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/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/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) +ADD_CUSTOM_COMMAND( + TARGET install + POST_BUILD + COMMAND ${CMAKE_COMMAND} + ARGS -E copy_if_different + ${ParadisEO-PEO_SOURCE_DIR}/tutorial/Lesson4/Lesson4.pdf + ${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(pso mainPSO.cpp) +ADD_DEPENDENCIES(pso peo rmc_mpi) +ADD_EXECUTABLE(ea mainEA.cpp) +ADD_DEPENDENCIES(ea peo rmc_mpi) +###################################################################################### + + +###################################################################################### +### 4) Optionnal: define properties +###################################################################################### + +SET(LESSON4_VERSION ${GLOBAL_VERSION}) +SET_TARGET_PROPERTIES(pso PROPERTIES VERSION "${LESSON4_VERSION}") +SET_TARGET_PROPERTIES(ea PROPERTIES VERSION "${LESSON4_VERSION}") +###################################################################################### + + +###################################################################################### +### 5) Link the librairies +###################################################################################### + +TARGET_LINK_LIBRARIES(pso ${XML2_LIBS} peo rmc_mpi eo eoutils) +TARGET_LINK_LIBRARIES(ea ${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-16012008-before-mig-modifs/tutorial/Lesson4/Lesson4.pdf b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson4/Lesson4.pdf new file mode 100644 index 0000000000000000000000000000000000000000..95abc2da940f209c713a875944c6bb3d60931ad5 GIT binary patch literal 332834 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�Qd)$ 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%0Dk9ce1!1N$uM&cq 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 literal 0 HcmV?d00001 diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson4/mainEA.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson4/mainEA.cpp new file mode 100644 index 000000000..e79caf9a2 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson4/mainEA.cpp @@ -0,0 +1,152 @@ +/* +* +* 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: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include +#include + +typedef eoReal Indi; + +double f (const Indi & _indi) +{ + double sum; + sum=_indi[1]-pow(_indi[0],2); + sum=100*pow(sum,2); + sum+=pow((1-_indi[0]),2); + return (-sum); +} + +int main (int __argc, char *__argv[]) +{ + +// In this lesson, we can see an example of an evolutionary algorithms with three islands. +// The evaluation is parallel. +// The transformation is parallel. + + peo :: init( __argc, __argv ); + const unsigned int VEC_SIZE = 2; + const unsigned int POP_SIZE = 20; + const unsigned int MAX_GEN = 300; + const double INIT_POSITION_MIN = -2.0; + const double INIT_POSITION_MAX = 2.0; + const float CROSS_RATE = 0.8; + const double EPSILON = 0.01; + const float MUT_RATE = 0.3; + const unsigned int MIG_FREQ = 10; + const unsigned int MIG_SIZE = 5; + rng.reseed (time(0)); + RingTopology topology; + eoGenContinue < Indi > genContPara (MAX_GEN); + eoCombinedContinue continuatorPara (genContPara); + eoCheckPoint checkpoint(continuatorPara); + peoEvalFunc plainEval(f); + peoParaPopEval< Indi > eval(plainEval); + eoUniformGenerator < double >uGen (INIT_POSITION_MIN, INIT_POSITION_MAX); + eoInitFixedLength < Indi > random (VEC_SIZE, uGen); + eoRankingSelect selectionStrategy; + eoSelectNumber select(selectionStrategy,POP_SIZE); + eoSegmentCrossover crossover; + eoUniformMutation mutation(EPSILON); + peoParaSGATransform eaTransform(crossover,CROSS_RATE,mutation,MUT_RATE); + eoPlusReplacement replace; + eoPop < Indi > pop; + pop.append (POP_SIZE, random); + eoPeriodicContinue mig_cont( MIG_FREQ ); + eoRandomSelect mig_select_one; + eoSelectNumber mig_select (mig_select_one,MIG_SIZE); + eoPlusReplacement mig_replace; + eoGenContinue < Indi > genContPara2 (MAX_GEN); + eoCombinedContinue continuatorPara2 (genContPara2); + eoCheckPoint checkpoint2(continuatorPara2); + peoEvalFunc plainEval2(f); + peoParaPopEval< Indi > eval2(plainEval2); + eoUniformGenerator < double >uGen2 (INIT_POSITION_MIN, INIT_POSITION_MAX); + eoInitFixedLength < Indi > random2 (VEC_SIZE, uGen2); + eoRankingSelect selectionStrategy2; + eoSelectNumber select2(selectionStrategy2,POP_SIZE); + eoSegmentCrossover crossover2; + eoUniformMutation mutation2(EPSILON); + peoParaSGATransform eaTransform2(crossover2,CROSS_RATE,mutation2,MUT_RATE); + eoPlusReplacement replace2; + eoPop < Indi > pop2; + pop2.append (POP_SIZE, random2); + eoPeriodicContinue mig_cont2( MIG_FREQ ); + eoRandomSelect mig_select_one2; + eoSelectNumber mig_select2 (mig_select_one2,MIG_SIZE); + eoPlusReplacement mig_replace2; + eoGenContinue < Indi > genContPara3 (MAX_GEN); + eoCombinedContinue continuatorPara3 (genContPara3); + eoCheckPoint checkpoint3(continuatorPara3); + peoEvalFunc plainEval3(f); + peoParaPopEval< Indi > eval3(plainEval3); + eoUniformGenerator < double >uGen3 (INIT_POSITION_MIN, INIT_POSITION_MAX); + eoInitFixedLength < Indi > random3 (VEC_SIZE, uGen3); + eoRankingSelect selectionStrategy3; + eoSelectNumber select3(selectionStrategy3,POP_SIZE); + eoSegmentCrossover crossover3; + eoUniformMutation mutation3(EPSILON); + peoParaSGATransform eaTransform3(crossover3,CROSS_RATE,mutation3,MUT_RATE); + eoPlusReplacement replace3; + eoPop < Indi > pop3; + pop3.append (POP_SIZE, random3); + eoPeriodicContinue mig_cont3( MIG_FREQ ); + eoRandomSelect mig_select_one3; + eoSelectNumber mig_select3 (mig_select_one3,MIG_SIZE); + eoPlusReplacement mig_replace3; + peoAsyncIslandMig mig(mig_cont,mig_select,mig_replace,topology,pop,pop2); + checkpoint.add(mig); + peoAsyncIslandMig mig2(mig_cont2,mig_select2,mig_replace2,topology,pop2,pop); + checkpoint2.add(mig2); + peoAsyncIslandMig mig3(mig_cont3,mig_select3,mig_replace3,topology,pop3,pop); + checkpoint3.add(mig3); + peoEA Algo(checkpoint,eval,select,eaTransform,replace); + mig.setOwner(Algo); + Algo(pop); + peoEA Algo2(checkpoint2,eval2,select2,eaTransform2,replace2); + mig2.setOwner(Algo2); + Algo2(pop2); + peoEA Algo3(checkpoint3,eval3,select3,eaTransform3,replace3); + mig3.setOwner(Algo3); + Algo3(pop3); + + peo :: run(); + peo :: finalize(); + if (getNodeRank()==1) + { + std::cout << "Final population 1 :\n" << pop << std::endl; + std::cout << "Final population 2 :\n" << pop2 << std::endl; + std::cout << "Final population 3 :\n" << pop3 << std::endl; + } +} diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson4/mainPSO.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson4/mainPSO.cpp new file mode 100644 index 000000000..3cfe8ed98 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson4/mainPSO.cpp @@ -0,0 +1,159 @@ +/* +* +* 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: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include + +typedef eoRealParticle < double >Indi; + +double f (const Indi & _indi) +{ + double sum; + sum=_indi[1]-pow(_indi[0],2); + sum=100*pow(sum,2); + sum+=pow((1-_indi[0]),2); + return (-sum); +} + +int main (int __argc, char *__argv[]) +{ + +// In this lesson, we can see an example of a PSO with three islands. +// The strategy of migration is the replacement. +// The evaluation is parallel. + + peo :: init( __argc, __argv ); + const unsigned int VEC_SIZE = 2; + const unsigned int POP_SIZE = 20; + const unsigned int NEIGHBORHOOD_SIZE= 6; + const unsigned int MAX_GEN = 150; + const double INIT_POSITION_MIN = -2.0; + const double INIT_POSITION_MAX = 2.0; + const double INIT_VELOCITY_MIN = -1.; + const double INIT_VELOCITY_MAX = 1.; + const double C1 = 0.5; + const double C2 = 2.; + const double C3 = 2.; + const unsigned int MIG_FREQ = 10; + rng.reseed (time(0)); + RingTopology topologyMig; + peoEvalFunc plainEval(f); + peoParaPopEval< Indi > eval(plainEval); + 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 > pop; + pop.append (POP_SIZE, random); + peoInitializer init(eval,veloRandom,localInit,pop); + eoLinearTopology topology(NEIGHBORHOOD_SIZE); + 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); + eoPeriodicContinue< Indi > mig_cont( MIG_FREQ ); + peoPSOSelect mig_selec(topology); + eoSelectNumber< Indi > mig_select(mig_selec); + peoPSOReplacement mig_replace; + peoEvalFunc plainEval2(f); + peoParaPopEval< Indi > eval2(plainEval2); + eoUniformGenerator < double >uGen2 (INIT_POSITION_MIN, INIT_POSITION_MAX); + eoInitFixedLength < Indi > random2 (VEC_SIZE, uGen2); + 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); + eoPop < Indi > pop2; + pop2.append (POP_SIZE, random2); + peoInitializer init2(eval2,veloRandom2,localInit2,pop2); + eoLinearTopology topology2(NEIGHBORHOOD_SIZE); + 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; + peoEvalFunc plainEval3(f); + peoParaPopEval< Indi > eval3(plainEval3); + eoUniformGenerator < double >uGen3 (INIT_POSITION_MIN, INIT_POSITION_MAX); + eoInitFixedLength < Indi > random3 (VEC_SIZE, uGen3); + eoUniformGenerator < double >sGen3 (INIT_VELOCITY_MIN, INIT_VELOCITY_MAX); + eoVelocityInitFixedLength < Indi > veloRandom3 (VEC_SIZE, sGen3); + eoFirstIsBestInit < Indi > localInit3; + eoRealVectorBounds bndsFlight3(VEC_SIZE,INIT_POSITION_MIN,INIT_POSITION_MAX); + eoStandardFlight < Indi > flight3(bndsFlight3); + eoPop < Indi > pop3; + pop3.append (POP_SIZE, random3); + peoInitializer init3(eval3,veloRandom3,localInit3,pop3); + eoLinearTopology topology3(NEIGHBORHOOD_SIZE); + eoRealVectorBounds bnds3(VEC_SIZE,INIT_VELOCITY_MIN,INIT_VELOCITY_MAX); + eoStandardVelocity < Indi > velocity3 (topology3,C1,C2,bnds3); + eoGenContinue < Indi > genContPara3 (MAX_GEN); + eoCheckPoint checkpoint3(genContPara3); + eoPeriodicContinue< Indi > mig_cont3( MIG_FREQ ); + peoPSOSelect mig_selec3(topology3); + eoSelectNumber< Indi > mig_select3(mig_selec3); + peoPSOReplacement mig_replace3; + 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, pop3); + checkpoint2.add( mig2 ); + peoAsyncIslandMig< Indi > mig3( mig_cont3, mig_select3, mig_replace3, topologyMig, pop3, pop); + checkpoint3.add( mig3 ); + peoPSO < Indi > psa(init,checkpoint, eval, velocity, flight); + mig.setOwner( psa ); + psa(pop); + peoPSO < Indi > psa2(init2,checkpoint2, eval2, velocity2, flight2); + mig2.setOwner( psa2 ); + psa2(pop2); + peoPSO < Indi > psa3(init3,checkpoint3, eval3, velocity3, flight3); + mig3.setOwner( psa3 ); + psa3(pop3); + + peo :: run(); + peo :: finalize(); + if (getNodeRank()==1) + { + std::cout << "Population 1 :\n" << pop << std::endl; + std::cout << "Population 2 :\n" << pop2 << std::endl; + std::cout << "Population 3 :\n" << pop3 << std::endl; + } +} diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson4/paradiseo-peo-lsn.doxyfile b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson4/paradiseo-peo-lsn.doxyfile new file mode 100644 index 000000000..bd82ebc84 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson4/paradiseo-peo-lsn.doxyfile @@ -0,0 +1,242 @@ +# 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-16012008-before-mig-modifs/tutorial/Lesson4/param b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson4/param new file mode 100644 index 000000000..730f547e1 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson4/param @@ -0,0 +1,9 @@ +## miscallenous parameters + +--debug=false + +## deployment schema + +--schema=schema.xml + + diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson4/schema.xml b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson4/schema.xml new file mode 100644 index 000000000..90b7b0bde --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson4/schema.xml @@ -0,0 +1,21 @@ + + + + + + + + + 1 + 2 + 3 + + + + + + + + + + diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson5/CMakeLists.txt b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson5/CMakeLists.txt new file mode 100644 index 000000000..f85ca5819 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson5/CMakeLists.txt @@ -0,0 +1,109 @@ + +###################################################################################### +### 0) Pre-config +###################################################################################### + +SET (CMAKE_CXX_COMPILER mpicxx) + +ADD_CUSTOM_TARGET(install DEPENDS ${ParadisEO-PEO_SOURCE_DIR}/tutorial/Lesson5/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/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) +ADD_CUSTOM_COMMAND( + TARGET install + POST_BUILD + COMMAND ${CMAKE_COMMAND} + ARGS -E copy_if_different + ${ParadisEO-PEO_SOURCE_DIR}/tutorial/Lesson5/Lesson5.pdf + ${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 ${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(example example.cpp) +ADD_DEPENDENCIES(example tsp peo rmc_mpi) + + +###################################################################################### + + +###################################################################################### +### 4) Optionnal: define your target's properties +###################################################################################### + +SET(WALKTHROUGH_VERSION ${GLOBAL_VERSION}) +SET_TARGET_PROPERTIES(example PROPERTIES VERSION "${WALKTHROUGH_VERSION}") + +###################################################################################### + + +###################################################################################### +### 5) Link the librairies +###################################################################################### + +TARGET_LINK_LIBRARIES(example ${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-16012008-before-mig-modifs/tutorial/Lesson5/Lesson5.pdf b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson5/Lesson5.pdf new file mode 100644 index 0000000000000000000000000000000000000000..56a993a1d4b91729eb4a07a09686e3bc67c781a2 GIT binary patch literal 308478 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 z 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

    =4y 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 vhfqc +* 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 +* +*/ +// (c) OPAC Team, LIFL, 2007 +// +// Contact: paradiseo-help@lists.gforge.inria.fr + +// Libraries of problem +#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) +{ + + // Example of a problem (TSP) with an hybridization + + 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 */ + + if (getNodeRank()==1) + std :: cout << "\nResult : "< + + + + + + + + 1 + + + + + + + + + + diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson6/CMakeLists.txt b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson6/CMakeLists.txt new file mode 100644 index 000000000..b1b8458aa --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson6/CMakeLists.txt @@ -0,0 +1,91 @@ + +###################################################################################### +### 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/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/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) +ADD_CUSTOM_COMMAND( + TARGET install + POST_BUILD + COMMAND ${CMAKE_COMMAND} + ARGS -E copy_if_different + ${ParadisEO-PEO_SOURCE_DIR}/tutorial/Lesson6/Lesson6.pdf + ${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 (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 +###################################################################################### + +ADD_EXECUTABLE(example main.cpp) +ADD_DEPENDENCIES(example tsp peo rmc_mpi) + +###################################################################################### + + +###################################################################################### +### 4) Optionnal: define your target(s)'s version: no effect for windows +###################################################################################### + +SET(LESSON6_VERSION ${GLOBAL_VERSION}) +SET_TARGET_PROPERTIES(example PROPERTIES VERSION "${LESSON6_VERSION}") + +###################################################################################### + + +###################################################################################### +### 5) Link the librairies +###################################################################################### + +TARGET_LINK_LIBRARIES(example ${XML2_LIBS} tsp peo rmc_mpi eo eoutils) + + +###################################################################################### + + + + + diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson6/Lesson6.pdf b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson6/Lesson6.pdf new file mode 100644 index 0000000000000000000000000000000000000000..24f6c1cfb073ce49156adb7a9fe51bd586615fa6 GIT binary patch literal 308708 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

    `Lk^dr$Rn^Ea`86kAVF2h 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

    ;MNBuc2!cjaVIvjZf-K@ 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±6#Fy)|gq&%A<$_J5TtKY}+JCZK$ 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%0DA%4Cs`Ar6&97AgKf~u)e?q~aILI=RX^sU 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⪚eu^78V5)VI1Sj}I9&Fp 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 +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, INRIA, 2007 +* +* 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 +* +*/ + + +#include + +// Specific libraries (TSP) +#include +#include +#include +#include +#include +#include +#include +#include + + +int main( int __argc, char** __argv ) +{ + + /* In this lesson you will learn to use a multi-start. + * + * Thanks to this method, you can use several local searches together !!! + * + */ + +// Parameter + const unsigned int POP_SIZE = 10; + srand( time(NULL) ); + +// Initializing the ParadisEO-PEO environment + peo :: init( __argc, __argv ); +// Processing the command line specified parameters + loadParameters( __argc, __argv ); + +// Define a Hill Climbing (you can choose an other local search) +// ie Lessons of ParadisEO - MO + Route route; + RouteInit init; + init(route); + RouteEval eval; + eval(route); + TwoOptInit initHC; + TwoOptNext nextHC; + TwoOptIncrEval incrHC; + moBestImprSelect< TwoOpt > selectHC; + moHC< TwoOpt > hc(initHC, nextHC, incrHC, selectHC, eval); + +// Define a population + RouteInit initPop; // Creates random Route objects + RouteEval evalPop; // Offers a fitness value for a specified Route object + eoPop < Route > pop(POP_SIZE, initPop); + for ( unsigned int index = 0; index < POP_SIZE; index++ ) + evalPop( pop[ index ] ); + +// Setting up the parallel wrapper + peoSynchronousMultiStart< Route > parallelHC(hc); + peoParallelAlgorithmWrapper WrapHC (parallelHC, pop); + parallelHC.setOwner( WrapHC ); + + peo :: run( ); + peo :: finalize( ); + if ( getNodeRank() == 1 ) + { + + std :: cout << "\n\nBefore : \n" << route; + std :: cout << "\n\nWith the synchronous Multi-Start HCs:"; + for ( unsigned int index = 0; index < POP_SIZE; index++ ) + std::cout <<"\n"<< pop[ index ]; + } + +} diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson6/paradiseo-peo-lsn.doxyfile b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson6/paradiseo-peo-lsn.doxyfile new file mode 100644 index 000000000..c3dd5bbe6 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson6/paradiseo-peo-lsn.doxyfile @@ -0,0 +1,242 @@ +# Doxyfile 1.4.7 + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- +PROJECT_NAME = "ParadisEO-PEO Lesson6" +PROJECT_NUMBER = 0.1 +OUTPUT_DIRECTORY = ../../../doc/html/lesson6 +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-16012008-before-mig-modifs/tutorial/Lesson6/param b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson6/param new file mode 100644 index 000000000..eb843c65f --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson6/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-16012008-before-mig-modifs/tutorial/Lesson6/schema.xml b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson6/schema.xml new file mode 100644 index 000000000..2bbd4e4af --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson6/schema.xml @@ -0,0 +1,19 @@ + + + + + + + + 1 + 2 + 3 + 4 + 5 + + + + + + + diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson7/CMakeLists.txt b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson7/CMakeLists.txt new file mode 100644 index 000000000..76106a5d2 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson7/CMakeLists.txt @@ -0,0 +1,81 @@ + +###################################################################################### +### 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/Lesson7/param ${ParadisEO-PEO_SOURCE_DIR}/tutorial/Lesson7/FlowShopEA.param ${ParadisEO-PEO_SOURCE_DIR}/tutorial/Lesson7/schema.xml) + +ADD_CUSTOM_COMMAND( + TARGET install + POST_BUILD + COMMAND ${CMAKE_COMMAND} + ARGS -E copy_if_different + ${ParadisEO-PEO_SOURCE_DIR}/tutorial/Lesson7/FlowShopEA.param + ${ParadisEO-PEO_BINARY_DIR}/tutorial/Lesson7) +ADD_CUSTOM_COMMAND( + TARGET install + POST_BUILD + COMMAND ${CMAKE_COMMAND} + ARGS -E copy_if_different + ${ParadisEO-PEO_SOURCE_DIR}/tutorial/Lesson7/param + ${ParadisEO-PEO_BINARY_DIR}/tutorial/Lesson7) +ADD_CUSTOM_COMMAND( + TARGET install + POST_BUILD + COMMAND ${CMAKE_COMMAND} + ARGS -E copy_if_different + ${ParadisEO-PEO_SOURCE_DIR}/tutorial/Lesson7/schema.xml + ${ParadisEO-PEO_BINARY_DIR}/tutorial/Lesson7) + +###################################################################################### + + +###################################################################################### +### 1) Include the sources +###################################################################################### + +INCLUDE_DIRECTORIES(${EO_SRC_DIR}/src ${MOEO_SRC_DIR}/src ${FLOWSHOP_SRC_DIR} ${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 ${MOEO_BIN_DIR}/lib ${FLOWSHOP_BIN_DIR}/lib ${ParadisEO-PEO_BINARY_DIR}/lib ${TSP_BINARY_DIR}/lib) +ENDIF(NOT WIN32 OR CYGWIN) + + + +###################################################################################### + + +###################################################################################### +### 3) Define your target(s): just an executable here +###################################################################################### + +ADD_EXECUTABLE(example main.cpp) +ADD_DEPENDENCIES(example flowshop moeo peo rmc_mpi) + + +###################################################################################### + + +###################################################################################### +### 4) Optionnal: define your target(s)'s version: no effect for windows +###################################################################################### + + +###################################################################################### + +###################################################################################### +### 5) Link the librairies +###################################################################################### + +TARGET_LINK_LIBRARIES(example ${XML2_LIBS} flowshop moeo peo rmc_mpi eo eoutils) + +###################################################################################### diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson7/FlowShopEA.param b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson7/FlowShopEA.param new file mode 100644 index 000000000..ac4abc1a8 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson7/FlowShopEA.param @@ -0,0 +1,49 @@ +###### General ###### +--help=0 # -h : Prints this message +--stopOnUnknownParam=1 # Stop if unkown param entered +# --seed=1183379758 # -S : Random number seed + +###### Evolution Engine ###### +--popSize=20 # -P : Population Size +--updateArch=1 # Update the archive at each gen. +--fitness=FastNonDominatedSorting # -F : Fitness assignment scheme: Dummy, FastNonDominatedSorting or IndicatorBased +--indicator=Epsilon # -i : Binary indicator for IndicatorBased: Epsilon, Hypervolume +--rho=1.1 # -r : reference point for the hypervolume indicator +--kappa=0.05 # -k : Scaling factor kappa for IndicatorBased +--diversity=Crowding # -D : Diversity assignment scheme: Dummy, Sharing(nicheSize) or Crowding +--comparator=FitnessThenDiversity # -C : Comparator scheme: FitnessThenDiversity, DiversityThenFitness or Aggregative +--selection=DetTour(2) # -S : Selection scheme: DetTour(T), StochTour(t) or Random +--replacement=Elitist # -R : Replacement scheme: Elitist, Environmental or Generational +--nbOffspring=100% # -O : Number of offspring (percentage or absolute) + +###### Output ###### +#--resDir=Res # Directory to store DISK outputs +--eraseDir=1 # erase files in dirName if any +--printPop=0 # Print sorted pop. every gen. +--storeArch=0 # Store the archive's objective vectors at each gen. +--contribution=0 # Store the contribution of the archive at each gen. +--entropy=0 # Store the entropy of the archive at each gen. + +###### Persistence ###### +--Load= # -L : A save file to restart from +--recomputeFitness=0 # -r : Recompute the fitness after re-loading the pop.? +--saveFrequency=0 # Save every F generation (0 = only final state, absent = never) +--saveTimeInterval=0 # Save every T seconds (0 or absent = never) +--status=./FlowShopEA.status # Status file + +###### Representation ###### +--BenchmarkFile=../../../../paradiseo-moeo/tutorial/examples/flowshop/benchs/020_10_01.txt # -B : Benchmark file name REQUIRED + +###### Stopping criterion ###### +--maxGen=100 # -G : Maximum number of generations (0 = none) +--maxEval=0 # -E : Maximum number of evaluations (0 = none) +--maxTime=0 # -T : Maximum running time in seconds (0 = none) +#--CtrlC=1 # -C : Terminate current generation upon Ctrl C (only available on Unix platforms) + +###### Variation Operators ###### +--crossRate=1 # Relative rate for the only crossover +--shiftMutRate=0.5 # Relative rate for shift mutation +--exchangeMutRate=0.5 # Relative rate for exchange mutation +--pCross=0.25 # -c : Probability of Crossover +--pMut=0.35 # -m : Probability of Mutation + diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson7/main.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson7/main.cpp new file mode 100644 index 000000000..9b2e6d6d6 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson7/main.cpp @@ -0,0 +1,35 @@ +#include +#include +#include +#include +#include +#include +#include <../tutorial/Lesson7/make_continue_moeo.h> +#include <../tutorial/Lesson7/make_checkpoint_moeo.h> +#include <../tutorial/Lesson7/make_ea_moeo.h> +#include <../tutorial/Lesson7/make_para_eval.h> +#include + + + +int main(int argc, char* argv[]) +{ + + peo :: init( argc,argv ); + eoParser parser(argc, argv); + eoState state; + peoMoeoPopEval& eval = do_make_para_eval(parser, state); + eoInit& init = do_make_genotype(parser, state); + eoGenOp& op = do_make_op(parser, state); + eoPop& pop = do_make_pop(parser, state, init); + moeoArchive arch; + eoContinue& term = do_make_continue_moeo(parser, state, eval); + eoCheckPoint& checkpoint = do_make_checkpoint_moeo(parser, state, eval, term, pop, arch); + eoAlgo& algo = do_make_ea_moeo(parser, state, eval, checkpoint, op, arch); + peoWrapper parallelMOEO( algo, pop); + eval.setOwner(parallelMOEO); + peo :: run(); + peo :: finalize(); + if (getNodeRank()==1) + std::cout << "Final population :\n" << pop << std::endl; +} diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson7/make_checkpoint_moeo.h b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson7/make_checkpoint_moeo.h new file mode 100755 index 000000000..02685e311 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson7/make_checkpoint_moeo.h @@ -0,0 +1,201 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Arnaud Liefooghe +* +* 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 MAKE_CHECKPOINT_MOEO_H_ +#define MAKE_CHECKPOINT_MOEO_H_ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +bool testDirRes(std::string _dirName, bool _erase); + +/** + * This functions allows to build an eoCheckPoint for multi-objective optimization from the parser (partly taken from make_checkpoint_pareto.h) + * @param _parser the parser + * @param _state to store allocated objects + * @param _eval the funtions evaluator + * @param _continue the stopping crietria + * @param _pop the population + * @param _archive the archive of non-dominated solutions + */ +template < class MOEOT > +eoCheckPoint < MOEOT > & do_make_checkpoint_moeo (eoParser & _parser, eoState & _state, eoPopEvalFunc < MOEOT > & _eval, eoContinue < MOEOT > & _continue, eoPop < MOEOT > & _pop, moeoArchive < MOEOT > & _archive) +{ + eoCheckPoint < MOEOT > & checkpoint = _state.storeFunctor(new eoCheckPoint < MOEOT > (_continue)); + /* the objective vector type */ + typedef typename MOEOT::ObjectiveVector ObjectiveVector; + + /////////////////// + // Counters + ////////////////// + // is nb Eval to be used as counter? + //bool useEval = _parser.getORcreateParam(true, "useEval", "Use nb of eval. as counter (vs nb of gen.)", '\0', "Output").value(); + // Create anyway a generation-counter parameter + eoValueParam *generationCounter = new eoValueParam(0, "Gen."); + // Create an incrementor (sub-class of eoUpdater). + eoIncrementor & increment = _state.storeFunctor( new eoIncrementor(generationCounter->value()) ); + // Add it to the checkpoint + checkpoint.add(increment); + // dir for DISK output + std::string & dirName = _parser.getORcreateParam(std::string("Res"), "resDir", "Directory to store DISK outputs", '\0', "Output").value(); + // shoudl we empty it if exists + eoValueParam& eraseParam = _parser.getORcreateParam(true, "eraseDir", "erase files in dirName if any", '\0', "Output"); + bool dirOK = false; // not tested yet + + // Dump of the whole population + //----------------------------- + bool printPop = _parser.getORcreateParam(false, "printPop", "Print sorted pop. every gen.", '\0', "Output").value(); + eoSortedPopStat * popStat; + if ( printPop ) // we do want pop dump + { + popStat = & _state.storeFunctor(new eoSortedPopStat); + checkpoint.add(*popStat); + } + + ////////////////////////////////// + // State savers + ////////////////////////////// + // feed the state to state savers + // save state every N generation + eoValueParam& saveFrequencyParam = _parser.createParam((unsigned int)(0), "saveFrequency", "Save every F generation (0 = only final state, absent = never)", '\0', "Persistence" ); + if (_parser.isItThere(saveFrequencyParam)) + { + // first make sure dirName is OK + if (! dirOK ) + dirOK = testDirRes(dirName, eraseParam.value()); // TRUE + unsigned int freq = (saveFrequencyParam.value()>0 ? saveFrequencyParam.value() : UINT_MAX ); +#ifdef _MSVC + std::string stmp = dirName + "\generations"; +#else + std::string stmp = dirName + "/generations"; +#endif + eoCountedStateSaver *stateSaver1 = new eoCountedStateSaver(freq, _state, stmp); + _state.storeFunctor(stateSaver1); + checkpoint.add(*stateSaver1); + } + // save state every T seconds + eoValueParam& saveTimeIntervalParam = _parser.getORcreateParam((unsigned int)(0), "saveTimeInterval", "Save every T seconds (0 or absent = never)", '\0',"Persistence" ); + if (_parser.isItThere(saveTimeIntervalParam) && saveTimeIntervalParam.value()>0) + { + // first make sure dirName is OK + if (! dirOK ) + dirOK = testDirRes(dirName, eraseParam.value()); // TRUE +#ifdef _MSVC + std::string stmp = dirName + "\time"; +#else + std::string stmp = dirName + "/time"; +#endif + eoTimedStateSaver *stateSaver2 = new eoTimedStateSaver(saveTimeIntervalParam.value(), _state, stmp); + _state.storeFunctor(stateSaver2); + checkpoint.add(*stateSaver2); + } + + /////////////////// + // Archive + ////////////////// + // update the archive every generation + bool updateArch = _parser.getORcreateParam(true, "updateArch", "Update the archive at each gen.", '\0', "Evolution Engine").value(); + if (updateArch) + { + moeoArchiveUpdater < MOEOT > * updater = new moeoArchiveUpdater < MOEOT > (_archive, _pop); + _state.storeFunctor(updater); + checkpoint.add(*updater); + } + // store the objective vectors contained in the archive every generation + bool storeArch = _parser.getORcreateParam(false, "storeArch", "Store the archive's objective vectors at each gen.", '\0', "Output").value(); + if (storeArch) + { + if (! dirOK ) + dirOK = testDirRes(dirName, eraseParam.value()); // TRUE +#ifdef _MSVC + std::string stmp = dirName + "\arch"; +#else + std::string stmp = dirName + "/arch"; +#endif + moeoArchiveObjectiveVectorSavingUpdater < MOEOT > * save_updater = new moeoArchiveObjectiveVectorSavingUpdater < MOEOT > (_archive, stmp); + _state.storeFunctor(save_updater); + checkpoint.add(*save_updater); + } + // store the contribution of the non-dominated solutions + bool cont = _parser.getORcreateParam(false, "contribution", "Store the contribution of the archive at each gen.", '\0', "Output").value(); + if (cont) + { + if (! dirOK ) + dirOK = testDirRes(dirName, eraseParam.value()); // TRUE +#ifdef _MSVC + std::string stmp = dirName + "\contribution"; +#else + std::string stmp = dirName + "/contribution"; +#endif + moeoContributionMetric < ObjectiveVector > * contribution = new moeoContributionMetric < ObjectiveVector >; + moeoBinaryMetricSavingUpdater < MOEOT > * contribution_updater = new moeoBinaryMetricSavingUpdater < MOEOT > (*contribution, _archive, stmp); + _state.storeFunctor(contribution_updater); + checkpoint.add(*contribution_updater); + } + // store the entropy of the non-dominated solutions + bool ent = _parser.getORcreateParam(false, "entropy", "Store the entropy of the archive at each gen.", '\0', "Output").value(); + if (ent) + { + if (! dirOK ) + dirOK = testDirRes(dirName, eraseParam.value()); // TRUE +#ifdef _MSVC + std::string stmp = dirName + "\entropy"; +#else + std::string stmp = dirName + "/entropy"; +#endif + moeoEntropyMetric < ObjectiveVector > * entropy = new moeoEntropyMetric < ObjectiveVector >; + moeoBinaryMetricSavingUpdater < MOEOT > * entropy_updater = new moeoBinaryMetricSavingUpdater < MOEOT > (*entropy, _archive, stmp); + _state.storeFunctor(entropy_updater); + checkpoint.add(*entropy_updater); + } + + // and that's it for the (control and) output + return checkpoint; +} + +#endif /*MAKE_CHECKPOINT_MOEO_H_*/ diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson7/make_continue_moeo.h b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson7/make_continue_moeo.h new file mode 100755 index 000000000..014c274db --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson7/make_continue_moeo.h @@ -0,0 +1,130 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Arnaud Liefooghe +* +* 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 MAKE_CONTINUE_MOEO_H_ +#define MAKE_CONTINUE_MOEO_H_ +#include +#include +#include +#include +#include +#ifndef _MSC_VER +#include +#endif +#include +#include + + +/** + * Helper function + * @param _combined the eoCombinedContinue object + * @param _cont the eoContinue to add + */ +template +eoCombinedContinue * make_combinedContinue(eoCombinedContinue *_combined, eoContinue *_cont) +{ + if (_combined) // already exists + _combined->add(*_cont); + else + _combined = new eoCombinedContinue(*_cont); + return _combined; +} + + +/** + * This functions allows to build a eoContinue for multi-objective optimization from the parser (partly taken from make_continue_pareto.h) + * @param _parser the parser + * @param _state to store allocated objects + * @param _eval the funtions evaluator + */ +template +eoContinue & do_make_continue_moeo(eoParser& _parser, eoState& _state, eoPopEvalFunc & _eval) +{ + // the combined continue - to be filled + eoCombinedContinue *continuator = NULL; + // First the eoGenContinue - need a default value so you can run blind + // but we also need to be able to avoid it <--> 0 + eoValueParam& maxGenParam = _parser.createParam((unsigned int)(100), "maxGen", "Maximum number of generations (0 = none)",'G',"Stopping criterion"); + if (maxGenParam.value()) // positive: -> define and store + { + eoGenContinue *genCont = new eoGenContinue(maxGenParam.value()); + _state.storeFunctor(genCont); + // and "add" to combined + continuator = make_combinedContinue(continuator, genCont); + } + // maxEval + eoValueParam& maxEvalParam = _parser.getORcreateParam((unsigned long)(0), "maxEval", "Maximum number of evaluations (0 = none)", 'E', "Stopping criterion"); + /* if (maxEvalParam.value()) + { + eoEvalContinue *evalCont = new eoEvalContinue(_eval, maxEvalParam.value()); + _state.storeFunctor(evalCont); + // and "add" to combined + continuator = make_combinedContinue(continuator, evalCont); + }*/ + // maxTime + eoValueParam& maxTimeParam = _parser.getORcreateParam((unsigned long)(0), "maxTime", "Maximum running time in seconds (0 = none)", 'T', "Stopping criterion"); + if (maxTimeParam.value()) // positive: -> define and store + { + eoTimeContinue *timeCont = new eoTimeContinue(maxTimeParam.value()); + _state.storeFunctor(timeCont); + // and "add" to combined + continuator = make_combinedContinue(continuator, timeCont); + } + // CtrlC +#ifndef _MSC_VER + // the CtrlC interception (Linux only I'm afraid) + eoCtrlCContinue *ctrlCCont; + eoValueParam& ctrlCParam = _parser.createParam(true, "CtrlC", "Terminate current generation upon Ctrl C",'C', "Stopping criterion"); + if (_parser.isItThere(ctrlCParam)) + { + ctrlCCont = new eoCtrlCContinue; + // store + _state.storeFunctor(ctrlCCont); + // add to combinedContinue + continuator = make_combinedContinue(continuator, ctrlCCont); + } +#endif + // now check that there is at least one! + if (!continuator) + throw std::runtime_error("You MUST provide a stopping criterion"); + // OK, it's there: store in the eoState + _state.storeFunctor(continuator); + // and return + return *continuator; +} + +#endif /*MAKE_CONTINUE_MOEO_H_*/ diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson7/make_ea_moeo.h b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson7/make_ea_moeo.h new file mode 100755 index 000000000..f0eaa47bb --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson7/make_ea_moeo.h @@ -0,0 +1,297 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 +* (C) OPAC Team, LIFL, 2002-2007 +* +* Arnaud Liefooghe +* +* 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 MAKE_EA_MOEO_H_ +#define MAKE_EA_MOEO_H_ + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +/** + * This functions allows to build a moeoEA from the parser + * @param _parser the parser + * @param _state to store allocated objects + * @param _eval the funtions evaluator + * @param _continue the stopping crietria + * @param _op the variation operators + * @param _archive the archive of non-dominated solutions + */ +template < class MOEOT > +moeoEA < MOEOT > & do_make_ea_moeo(eoParser & _parser, eoState & _state, eoPopEvalFunc < MOEOT > & _eval, eoContinue < MOEOT > & _continue, eoGenOp < MOEOT > & _op, moeoArchive < MOEOT > & _archive) +{ + + /* the objective vector type */ + typedef typename MOEOT::ObjectiveVector ObjectiveVector; + + + /* the fitness assignment strategy */ + std::string & fitnessParam = _parser.createParam(std::string("FastNonDominatedSorting"), "fitness", + "Fitness assignment scheme: Dummy, FastNonDominatedSorting or IndicatorBased", 'F', + "Evolution Engine").value(); + std::string & indicatorParam = _parser.createParam(std::string("Epsilon"), "indicator", + "Binary indicator for IndicatorBased: Epsilon, Hypervolume", 'i', + "Evolution Engine").value(); + double rho = _parser.createParam(1.1, "rho", "reference point for the hypervolume indicator", 'r', + "Evolution Engine").value(); + double kappa = _parser.createParam(0.05, "kappa", "Scaling factor kappa for IndicatorBased", 'k', + "Evolution Engine").value(); + moeoFitnessAssignment < MOEOT > * fitnessAssignment; + if (fitnessParam == std::string("Dummy")) + { + fitnessAssignment = new moeoDummyFitnessAssignment < MOEOT> (); + } + else if (fitnessParam == std::string("FastNonDominatedSorting")) + { + fitnessAssignment = new moeoFastNonDominatedSortingFitnessAssignment < MOEOT> (); + } + else if (fitnessParam == std::string("IndicatorBased")) + { + // metric + moeoNormalizedSolutionVsSolutionBinaryMetric < ObjectiveVector, double > *metric; + if (indicatorParam == std::string("Epsilon")) + { + metric = new moeoAdditiveEpsilonBinaryMetric < ObjectiveVector >; + } + else if (indicatorParam == std::string("Hypervolume")) + { + metric = new moeoHypervolumeBinaryMetric < ObjectiveVector > (rho); + } + else + { + std::string stmp = std::string("Invalid binary quality indicator: ") + indicatorParam; + throw std::runtime_error(stmp.c_str()); + } + fitnessAssignment = new moeoExpBinaryIndicatorBasedFitnessAssignment < MOEOT > (*metric, kappa); + } + else + { + std::string stmp = std::string("Invalid fitness assignment strategy: ") + fitnessParam; + throw std::runtime_error(stmp.c_str()); + } + _state.storeFunctor(fitnessAssignment); + + + /* the diversity assignment strategy */ + eoValueParam & diversityParam = _parser.createParam(eoParamParamType("Dummy"), "diversity", + "Diversity assignment scheme: Dummy, Sharing(nicheSize) or Crowding", 'D', "Evolution Engine"); + eoParamParamType & diversityParamValue = diversityParam.value(); + moeoDiversityAssignment < MOEOT > * diversityAssignment; + if (diversityParamValue.first == std::string("Dummy")) + { + diversityAssignment = new moeoDummyDiversityAssignment < MOEOT> (); + } + else if (diversityParamValue.first == std::string("Sharing")) + { + double nicheSize; + if (!diversityParamValue.second.size()) // no parameter added + { + std::cerr << "WARNING, no niche size given for Sharing, using 0.5" << std::endl; + nicheSize = 0.5; + diversityParamValue.second.push_back(std::string("0.5")); + } + else + { + nicheSize = atoi(diversityParamValue.second[0].c_str()); + } + diversityAssignment = new moeoFrontByFrontSharingDiversityAssignment < MOEOT> (nicheSize); + } + else if (diversityParamValue.first == std::string("Crowding")) + { + diversityAssignment = new moeoFrontByFrontCrowdingDiversityAssignment < MOEOT> (); + } + else + { + std::string stmp = std::string("Invalid diversity assignment strategy: ") + diversityParamValue.first; + throw std::runtime_error(stmp.c_str()); + } + _state.storeFunctor(diversityAssignment); + + + /* the comparator strategy */ + std::string & comparatorParam = _parser.createParam(std::string("FitnessThenDiversity"), "comparator", + "Comparator scheme: FitnessThenDiversity, DiversityThenFitness or Aggregative", 'C', "Evolution Engine").value(); + moeoComparator < MOEOT > * comparator; + if (comparatorParam == std::string("FitnessThenDiversity")) + { + comparator = new moeoFitnessThenDiversityComparator < MOEOT> (); + } + else if (comparatorParam == std::string("DiversityThenFitness")) + { + comparator = new moeoDiversityThenFitnessComparator < MOEOT> (); + } + else if (comparatorParam == std::string("Aggregative")) + { + comparator = new moeoAggregativeComparator < MOEOT> (); + } + else + { + std::string stmp = std::string("Invalid comparator strategy: ") + comparatorParam; + throw std::runtime_error(stmp.c_str()); + } + _state.storeFunctor(comparator); + + + /* the selection strategy */ + eoValueParam < eoParamParamType > & selectionParam = _parser.createParam(eoParamParamType("DetTour(2)"), "selection", + "Selection scheme: DetTour(T), StochTour(t) or Random", 'S', "Evolution Engine"); + eoParamParamType & ppSelect = selectionParam.value(); + moeoSelectOne < MOEOT > * select; + if (ppSelect.first == std::string("DetTour")) + { + unsigned int tSize; + if (!ppSelect.second.size()) // no parameter added + { + std::cerr << "WARNING, no parameter passed to DetTour, using 2" << std::endl; + tSize = 2; + // put back 2 in parameter for consistency (and status file) + ppSelect.second.push_back(std::string("2")); + } + else // parameter passed by user as DetTour(T) + { + tSize = atoi(ppSelect.second[0].c_str()); + } + select = new moeoDetTournamentSelect < MOEOT > (*comparator, tSize); + } + else if (ppSelect.first == std::string("StochTour")) + { + double tRate; + if (!ppSelect.second.size()) // no parameter added + { + std::cerr << "WARNING, no parameter passed to StochTour, using 1" << std::endl; + tRate = 1; + // put back 1 in parameter for consistency (and status file) + ppSelect.second.push_back(std::string("1")); + } + else // parameter passed by user as StochTour(T) + { + tRate = atof(ppSelect.second[0].c_str()); + } + select = new moeoStochTournamentSelect < MOEOT > (*comparator, tRate); + } + /* + else if (ppSelect.first == string("Roulette")) + { + // TO DO ! + // ... + } + */ + else if (ppSelect.first == std::string("Random")) + { + select = new moeoRandomSelect (); + } + else + { + std::string stmp = std::string("Invalid selection strategy: ") + ppSelect.first; + throw std::runtime_error(stmp.c_str()); + } + _state.storeFunctor(select); + + + /* the replacement strategy */ + std::string & replacementParam = _parser.createParam(std::string("Elitist"), "replacement", + "Replacement scheme: Elitist, Environmental or Generational", 'R', "Evolution Engine").value(); + moeoReplacement < MOEOT > * replace; + if (replacementParam == std::string("Elitist")) + { + replace = new moeoElitistReplacement < MOEOT> (*fitnessAssignment, *diversityAssignment, *comparator); + } + else if (replacementParam == std::string("Environmental")) + { + replace = new moeoEnvironmentalReplacement < MOEOT> (*fitnessAssignment, *diversityAssignment, *comparator); + } + else if (replacementParam == std::string("Generational")) + { + replace = new moeoGenerationalReplacement < MOEOT> (); + } + else + { + std::string stmp = std::string("Invalid replacement strategy: ") + replacementParam; + throw std::runtime_error(stmp.c_str()); + } + _state.storeFunctor(replace); + + + /* the number of offspring */ + eoValueParam < eoHowMany > & offspringRateParam = _parser.createParam(eoHowMany(1.0), "nbOffspring", + "Number of offspring (percentage or absolute)", 'O', "Evolution Engine"); + + + // the general breeder + eoGeneralBreeder < MOEOT > * breed = new eoGeneralBreeder < MOEOT > (*select, _op, offspringRateParam.value()); + _state.storeFunctor(breed); + // the eoEasyEA + moeoEA < MOEOT > * algo = new moeoEasyEA < MOEOT > (_continue, _eval, *breed, *replace, *fitnessAssignment, *diversityAssignment); + _state.storeFunctor(algo); + return *algo; + +} + +#endif /*MAKE_EA_MOEO_H_*/ diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson7/make_para_eval.h b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson7/make_para_eval.h new file mode 100644 index 000000000..b243e8fdb --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson7/make_para_eval.h @@ -0,0 +1,25 @@ +#include +#include +#include + +peoMoeoPopEval & do_make_para_eval(eoParser& _parser, eoState& _state) +{ + std::string benchmarkFileName = _parser.getORcreateParam(std::string(), "BenchmarkFile", "Benchmark file name (benchmarks are available at www.lifl.fr/~liefooga/benchmarks)", 'B',"Representation", true).value(); + if (benchmarkFileName == "") + { + std::string stmp = "*** Missing name of the benchmark file\n"; + stmp += " Type '-B=the_benchmark_file_name' or '--BenchmarkFile=the_benchmark_file_name'\n"; + stmp += " Benchmarks files are available at www.lifl.fr/~liefooga/benchmarks"; + throw std::runtime_error(stmp.c_str()); + } + FlowShopBenchmarkParser fParser(benchmarkFileName); + unsigned int M = fParser.getM(); + unsigned int N = fParser.getN(); + std::vector< std::vector > p = fParser.getP(); + std::vector d = fParser.getD(); + + FlowShopEval* plainEval = new FlowShopEval(M, N, p, d); + peoMoeoPopEval* eval = new peoMoeoPopEval (* plainEval); + _state.storeFunctor(eval); + return *eval; +} diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson7/param b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson7/param new file mode 100644 index 000000000..eb843c65f --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson7/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-16012008-before-mig-modifs/tutorial/Lesson7/schema.xml b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson7/schema.xml new file mode 100644 index 000000000..262e2a9d7 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson7/schema.xml @@ -0,0 +1,15 @@ + + + + + + + + 1 + + + + + + + diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Wrapper/CMakeLists.txt b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Wrapper/CMakeLists.txt new file mode 100644 index 000000000..f34c8fcbc --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Wrapper/CMakeLists.txt @@ -0,0 +1,95 @@ + +###################################################################################### +### 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/Wrapper/param ${ParadisEO-PEO_SOURCE_DIR}/tutorial/Wrapper/schema.xml) + +ADD_CUSTOM_COMMAND( + TARGET install + POST_BUILD + COMMAND ${CMAKE_COMMAND} + ARGS -E copy_if_different + ${ParadisEO-PEO_SOURCE_DIR}/tutorial/Wrapper/param + ${ParadisEO-PEO_BINARY_DIR}/tutorial/Wrapper) +ADD_CUSTOM_COMMAND( + TARGET install + POST_BUILD + COMMAND ${CMAKE_COMMAND} + ARGS -E copy_if_different + ${ParadisEO-PEO_SOURCE_DIR}/tutorial/Wrapper/schema.xml + ${ParadisEO-PEO_BINARY_DIR}/tutorial/Wrapper) + +###################################################################################### + + +###################################################################################### +### 1) Include the sources +###################################################################################### + +INCLUDE_DIRECTORIES(${EO_SRC_DIR}/src ${MOEO_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 ${MOEO_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(example1 main1.cpp) +ADD_DEPENDENCIES(example1 peo rmc_mpi) +ADD_EXECUTABLE(example2 main2.cpp) +ADD_DEPENDENCIES(example2 peo rmc_mpi) +ADD_EXECUTABLE(example3 main3.cpp) +ADD_DEPENDENCIES(example3 peo rmc_mpi) +ADD_EXECUTABLE(example4 main4.cpp) +ADD_DEPENDENCIES(example4 peo rmc_mpi) +ADD_EXECUTABLE(example5 main5.cpp) +ADD_DEPENDENCIES(example5 tsp peo rmc_mpi) +ADD_EXECUTABLE(example6 main6.cpp) +ADD_DEPENDENCIES(example6 tsp peo rmc_mpi) +ADD_EXECUTABLE(example7 main7.cpp) +ADD_DEPENDENCIES(example7 peo rmc_mpi) + +###################################################################################### + + +###################################################################################### +### 4) Optionnal: define your target(s)'s version: no effect for windows +###################################################################################### + + +###################################################################################### + + +###################################################################################### +### 5) Link the librairies +###################################################################################### + +TARGET_LINK_LIBRARIES(example1 ${XML2_LIBS} peo rmc_mpi eo eoutils) +TARGET_LINK_LIBRARIES(example2 ${XML2_LIBS} peo rmc_mpi eo eoutils) +TARGET_LINK_LIBRARIES(example3 ${XML2_LIBS} peo rmc_mpi eo eoutils) +TARGET_LINK_LIBRARIES(example4 ${XML2_LIBS} peo rmc_mpi eo eoutils) +TARGET_LINK_LIBRARIES(example5 ${XML2_LIBS} tsp peo rmc_mpi eo eoutils) +TARGET_LINK_LIBRARIES(example6 ${XML2_LIBS} tsp peo rmc_mpi eo eoutils) +TARGET_LINK_LIBRARIES(example7 ${XML2_LIBS} tsp peo rmc_mpi eo eoutils) + +###################################################################################### diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Wrapper/main1.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Wrapper/main1.cpp new file mode 100644 index 000000000..9c2f7300f --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Wrapper/main1.cpp @@ -0,0 +1,60 @@ +#include +#include +typedef eoReal Indi; + +double f (const Indi & _indi) +{ + double sum; + sum=_indi[1]-pow(_indi[0],2); + sum=100*pow(sum,2); + sum+=pow((1-_indi[0]),2); + return (-sum); +} + +int main( int __argc, char** __argv ) +{ + + + + peo :: init( __argc, __argv ); + +// Parameters + const unsigned int VEC_SIZE = 2; + const unsigned int POP_SIZE = 20; + const unsigned int MAX_GEN = 300; + const double INIT_POSITION_MIN = -2.0; + const double INIT_POSITION_MAX = 2.0; + const float CROSS_RATE = 0.8; + const double EPSILON = 0.01; + const float MUT_RATE = 0.3; + rng.reseed (time(0)); + + +// Algorithm + eoGenContinue < Indi > genContPara (MAX_GEN); + eoCombinedContinue continuatorPara (genContPara); + eoCheckPoint checkpoint(continuatorPara); + peoEvalFunc mainEval( f ); + peoPopEval eval(mainEval); + eoUniformGenerator < double >uGen (INIT_POSITION_MIN, INIT_POSITION_MAX); + eoInitFixedLength < Indi > random (VEC_SIZE, uGen); + eoRankingSelect selectionStrategy; + eoSelectNumber select(selectionStrategy,POP_SIZE); + eoSegmentCrossover crossover; + eoUniformMutation mutation(EPSILON); + eoSGATransform transform(crossover,CROSS_RATE,mutation,MUT_RATE); + eoPlusReplacement replace; + eoEasyEA< Indi > eaAlg( checkpoint, eval, select, transform, replace ); + +// Population + eoPop < Indi > pop; + pop.append (POP_SIZE, random); + +// Wrapper + peoWrapper parallelEA( eaAlg, pop); + eval.setOwner(parallelEA); + peo :: run(); + peo :: finalize(); + if (getNodeRank()==1) + std::cout << "Final population :\n" << pop << std::endl; +} diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Wrapper/main2.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Wrapper/main2.cpp new file mode 100644 index 000000000..3b0514b64 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Wrapper/main2.cpp @@ -0,0 +1,62 @@ +#include +#include +typedef eoReal Indi; + +double f (const Indi & _indi) +{ + double sum; + sum=_indi[1]-pow(_indi[0],2); + sum=100*pow(sum,2); + sum+=pow((1-_indi[0]),2); + return (-sum); +} + +int main( int __argc, char** __argv ) +{ + peo :: init( __argc, __argv ); + +// Parameters + const unsigned int VEC_SIZE = 2; + const unsigned int POP_SIZE = 20; + const unsigned int MAX_GEN = 300; + const double INIT_POSITION_MIN = -2.0; + const double INIT_POSITION_MAX = 2.0; + const float CROSS_RATE = 0.8; + const double EPSILON = 0.01; + const float MUT_RATE = 0.5; + rng.reseed (time(0)); + +// Algorithm + eoGenContinue < Indi > genContPara (MAX_GEN); + eoCombinedContinue continuatorPara (genContPara); + eoCheckPoint checkpoint(continuatorPara); + + peoEvalFunc mainEval( f ); + peoPopEval eval(mainEval); + + eoUniformGenerator < double >uGen (INIT_POSITION_MIN, INIT_POSITION_MAX); + eoInitFixedLength < Indi > random (VEC_SIZE, uGen); + eoRankingSelect selectionStrategy; + eoSelectNumber select(selectionStrategy,POP_SIZE); + eoSegmentCrossover crossover; + eoUniformMutation mutation(EPSILON); + + peoTransform transform(crossover,CROSS_RATE,mutation,MUT_RATE); + + eoPlusReplacement replace; + eoEasyEA< Indi > eaAlg( checkpoint, eval, select, transform, replace ); + +// Population*/ + eoPop < Indi > pop; + pop.append (POP_SIZE, random); + peoWrapper parallelEA( eaAlg, pop); + eval.setOwner(parallelEA); + transform.setOwner(parallelEA); + peo :: run(); + peo :: finalize(); + + + + if (getNodeRank()==1) + std::cout << "Final population :\n" << pop << std::endl; +} diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Wrapper/main3.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Wrapper/main3.cpp new file mode 100644 index 000000000..9c5b20739 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Wrapper/main3.cpp @@ -0,0 +1,61 @@ +#include +#include + +typedef eoRealParticle < double >Indi; + +double f (const Indi & _indi) +{ + double sum; + sum=_indi[1]-pow(_indi[0],2); + sum=100*pow(sum,2); + sum+=pow((1-_indi[0]),2); + return (-sum); +} + +int main( int __argc, char** __argv ) +{ + + peo :: init( __argc, __argv ); + const unsigned int VEC_SIZE = 2; + const unsigned int POP_SIZE = 20; + const unsigned int NEIGHBORHOOD_SIZE= 6; + const unsigned int MAX_GEN = 300; + const double INIT_POSITION_MIN = -2.0; + const double INIT_POSITION_MAX = 2.0; + const double INIT_VELOCITY_MIN = -1.; + const double INIT_VELOCITY_MAX = 1.; + const double weight = 1; + const double C1 = 0.5; + const double C2 = 2.; + rng.reseed (time(0)); + eoGenContinue < Indi > genContPara (MAX_GEN); + eoCombinedContinue continuatorPara (genContPara); + eoCheckPoint checkpoint(continuatorPara); + + peoEvalFunc plainEval(f); + peoPopEval< Indi > eval(plainEval); + + 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 > pop; + pop.append (POP_SIZE, random); + eoLinearTopology topology(NEIGHBORHOOD_SIZE); + eoRealVectorBounds bnds(VEC_SIZE,INIT_VELOCITY_MIN,INIT_VELOCITY_MAX); + eoStandardVelocity < Indi > velocity (topology,weight,C1,C2,bnds); + eoInitializer init(eval,veloRandom,localInit,topology,pop); + +// Parallel algorithm + + eoSyncEasyPSO psa(init,checkpoint,eval, velocity, flight); + peoWrapper parallelPSO( psa, pop); + eval.setOwner(parallelPSO); + peo :: run(); + peo :: finalize(); + if (getNodeRank()==1) + std::cout << "Final population :\n" << pop << std::endl; +} diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Wrapper/main4.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Wrapper/main4.cpp new file mode 100644 index 000000000..491e8f863 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Wrapper/main4.cpp @@ -0,0 +1,120 @@ +#include +#include + +typedef eoRealParticle < double >Indi; + +double f (const Indi & _indi) +{ + double sum; + sum=_indi[1]-pow(_indi[0],2); + sum=100*pow(sum,2); + sum+=pow((1-_indi[0]),2); + return (-sum); +} + +int main( int __argc, char** __argv ) +{ + + peo :: init( __argc, __argv ); + const unsigned int VEC_SIZE = 2; + const unsigned int POP_SIZE = 20; + const unsigned int NEIGHBORHOOD_SIZE= 6; + const unsigned int MAX_GEN = 100; + const double INIT_POSITION_MIN = -2.0; + const double INIT_POSITION_MAX = 2.0; + const double INIT_VELOCITY_MIN = -1.; + const double INIT_VELOCITY_MAX = 1.; + const unsigned int MIG_FREQ = 10; + const double omega = 1; + const double C1 = 0.5; + const double C2 = 2.; + rng.reseed (time(0)); + +// Island model + + RingTopology topologyMig; + +// First + eoGenContinue < Indi > genContPara (MAX_GEN); + eoCombinedContinue continuatorPara (genContPara); + eoCheckPoint checkpoint(continuatorPara); + peoEvalFunc plainEval(f); + peoPopEval< Indi > eval(plainEval); + 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 > pop; + pop.append (POP_SIZE, random); + eoLinearTopology topology(NEIGHBORHOOD_SIZE); + eoRealVectorBounds bnds(VEC_SIZE,INIT_VELOCITY_MIN,INIT_VELOCITY_MAX); + eoStandardVelocity < Indi > velocity (topology,omega,C1,C2,bnds); + eoInitializer init(eval,veloRandom,localInit,topology,pop); + +// Island model + + eoPeriodicContinue< Indi > mig_cont( MIG_FREQ ); + peoPSOSelect mig_selec(topology); + eoSelectNumber< Indi > mig_select(mig_selec); + peoWorstPositionReplacement mig_replace; + + +// Second + + eoGenContinue < Indi > genContPara2 (MAX_GEN); + eoCombinedContinue continuatorPara2 (genContPara2); + eoCheckPoint checkpoint2(continuatorPara2); + peoEvalFunc plainEval2(f); + peoPopEval< Indi > eval2(plainEval2); + eoUniformGenerator < double >uGen2 (INIT_POSITION_MIN, INIT_POSITION_MAX); + eoInitFixedLength < Indi > random2 (VEC_SIZE, uGen2); + 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); + eoPop < Indi > pop2; + pop2.append (POP_SIZE, random2); + eoLinearTopology topology2(NEIGHBORHOOD_SIZE); + eoRealVectorBounds bnds2(VEC_SIZE,INIT_VELOCITY_MIN,INIT_VELOCITY_MAX); + eoStandardVelocity < Indi > velocity2 (topology2,omega,C1,C2,bnds2); + eoInitializer init2(eval2,veloRandom2,localInit2,topology2,pop2); + +// Island model + + eoPeriodicContinue< Indi > mig_cont2( MIG_FREQ ); + peoPSOSelect mig_selec2(topology2); + eoSelectNumber< Indi > mig_select2(mig_selec2); + peoWorstPositionReplacement mig_replace2; + + + +// Island model + + peoAsyncIslandMig< Indi > mig( mig_cont, mig_select, mig_replace, topologyMig, pop, pop); + checkpoint.add( mig ); + peoAsyncIslandMig< Indi > mig2( mig_cont2, mig_select2, mig_replace2, topologyMig, pop2, pop2); + checkpoint2.add( mig2 ); + + +// Parallel algorithm + + eoSyncEasyPSO psa(init,checkpoint,eval, velocity, flight); + peoWrapper parallelPSO( psa, pop); + eval.setOwner(parallelPSO); + mig.setOwner(parallelPSO); + eoSyncEasyPSO psa2(init2,checkpoint2,eval2, velocity2, flight2); + peoWrapper parallelPSO2( psa2, pop2); + eval2.setOwner(parallelPSO2); + mig2.setOwner(parallelPSO2); + peo :: run(); + peo :: finalize(); + if (getNodeRank()==1) + { + std::cout << "Final population :\n" << pop << std::endl; + std::cout << "Final population :\n" << pop2 << std::endl; + } +} diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Wrapper/main5.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Wrapper/main5.cpp new file mode 100644 index 000000000..45000dada --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Wrapper/main5.cpp @@ -0,0 +1,76 @@ +#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 100 +#define CROSS_RATE 1.0 +#define MUT_RATE 0.01 + + +int main (int __argc, char * * __argv) +{ + + peo :: init (__argc, __argv); + loadParameters (__argc, __argv); + RouteInit route_init; + RouteEval full_eval; + OrderXover order_cross; + PartialMappedXover pm_cross; + EdgeXover edge_cross; + CitySwap city_swap_mut; + +// Initialization of the 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); + +// EA + eoPop pop (POP_SIZE, route_init); + eoGenContinue cont (NUM_GEN); + eoCheckPoint checkpoint (cont); + eoEvalFuncCounter< Route > eval(full_eval); + eoStochTournamentSelect select_one; + eoSelectNumber select (select_one, POP_SIZE); + eoSGATransform transform (order_cross, CROSS_RATE, city_swap_mut, MUT_RATE); + eoEPReplacement replace (2); + eoEasyEA< Route > eaAlg( checkpoint, eval, select, transform, replace ); + peoWrapper parallelEA( eaAlg, pop); + peo :: run (); + peo :: finalize (); + + if (getNodeRank()==1) + { + std :: cout << "\nResult before the local search\n"; + for(unsigned i=0;i initParallelHC (hc); + peoWrapper parallelHC (initParallelHC, pop); + initParallelHC.setOwner(parallelHC); + peo :: run( ); + peo :: finalize( ); + + if (getNodeRank()==1) + { + std :: cout << "\nResult after the local search\n"; + for(unsigned i=0;i + +#define POP_SIZE 10 +#define NUM_GEN 200 +#define CROSS_RATE 1.0 +#define MUT_RATE 0.1 + + +int main (int __argc, char * * __argv) +{ + + peo :: init (__argc, __argv); + loadParameters (__argc, __argv); + RouteInit route_init; + RouteEval full_eval; + OrderXover order_cross; + PartialMappedXover pm_cross; + EdgeXover edge_cross; + CitySwap city_swap_mut; + +// 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); + eoPop pop (POP_SIZE, route_init); + peoMultiStart initParallelHC (hc); + peoWrapper parallelHC (initParallelHC, pop); + initParallelHC.setOwner(parallelHC); + peo :: run( ); + peo :: finalize( ); + + if (getNodeRank()==1) + { + std :: cout << "\nResult before the EA\n"; + for(unsigned i=0;i cont (NUM_GEN); + eoCheckPoint checkpoint (cont); + eoEvalFuncCounter< Route > eval(full_eval); + eoStochTournamentSelect select_one; + eoSelectNumber select (select_one, POP_SIZE); + eoSGATransform transform (order_cross, CROSS_RATE, city_swap_mut, MUT_RATE); + eoEPReplacement replace (2); + eoEasyEA< Route > eaAlg( checkpoint, eval, select, transform, replace ); + peoWrapper parallelEA( eaAlg, pop); + peo :: run (); + peo :: finalize (); + + if (getNodeRank()==1) + { + std :: cout << "\nResult after the EA\n"; + for(unsigned i=0;i +#include + +typedef eoRealParticle < double >Indi; + +double f (const Indi & _indi) +{ + double sum; + sum=_indi[1]-pow(_indi[0],2); + sum=100*pow(sum,2); + sum+=pow((1-_indi[0]),2); + return (-sum); +} + +template +class eoResizerInit: public eoInit +{ + public: + + typedef typename EOT::AtomType AtomType; + + eoResizerInit(unsigned _size) + : size(_size){} + + virtual void operator()(EOT& chrom) + { + chrom.resize(size); + chrom.invalidate(); + } + private : + unsigned size; +}; + + +int main( int __argc, char** __argv ) +{ + + peo :: init( __argc, __argv ); + const unsigned int VEC_SIZE = 2; + const unsigned int POP_SIZE = 20; + const unsigned int NEIGHBORHOOD_SIZE= 6; + const unsigned int MAX_GEN = 300; + const double INIT_POSITION_MIN = -2.0; + const double INIT_POSITION_MAX = 2.0; + const double INIT_VELOCITY_MIN = -1.; + const double INIT_VELOCITY_MAX = 1.; + const double omega = 1; + const double C1 = 0.5; + const double C2 = 2.; + rng.reseed (time(0)); + eoGenContinue < Indi > genContPara (MAX_GEN); + eoCombinedContinue continuatorPara (genContPara); + eoCheckPoint checkpoint(continuatorPara); + eoUniformGenerator < double >uGen (INIT_POSITION_MIN, INIT_POSITION_MAX); + 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); + eoLinearTopology topology(NEIGHBORHOOD_SIZE); + eoRealVectorBounds bnds(VEC_SIZE,INIT_VELOCITY_MIN,INIT_VELOCITY_MAX); + eoStandardVelocity < Indi > velocity (topology,omega,C1,C2,bnds); + + eoResizerInit sizeInit(VEC_SIZE); + // need at least a size initialization + eoPop < Indi > pop(POP_SIZE,sizeInit); + eoInitFixedLength < Indi > randomSeq (VEC_SIZE, uGen); + peoMultiStart initRandom (randomSeq); + peoWrapper random (initRandom,pop); + initRandom.setOwner(random); + peo :: run( ); + peo :: finalize( ); + +// Parallel algorithm + + peo :: init (__argc, __argv); + peoEvalFunc plainEval(f); + peoPopEval< Indi > eval(plainEval); + eoInitializer init(eval,veloRandom,localInit,topology,pop); + eoSyncEasyPSO psa(init,checkpoint,eval, velocity, flight); + peoWrapper parallelPSO( psa, pop); + eval.setOwner(parallelPSO); + peo :: run(); + peo :: finalize(); + if (getNodeRank()==1) + std::cout << "Final population :\n" << pop << std::endl; +} diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Wrapper/param b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Wrapper/param new file mode 100644 index 000000000..eb843c65f --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Wrapper/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-16012008-before-mig-modifs/tutorial/Wrapper/schema.xml b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Wrapper/schema.xml new file mode 100644 index 000000000..23da1d55e --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Wrapper/schema.xml @@ -0,0 +1,16 @@ + + + + + + + + 1 + 2 + + + + + + + diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/CMakeLists.txt b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/CMakeLists.txt new file mode 100644 index 000000000..c7dbb5197 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/CMakeLists.txt @@ -0,0 +1,11 @@ + + +####################################################################################### +### 1) Where must cmake go now ? +###################################################################################### + +SUBDIRS(tsp) + +###################################################################################### + + diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/CMakeLists.txt b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/CMakeLists.txt new file mode 100644 index 000000000..b22a7fe63 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/tutorial/examples/tsp/benchs/eil101.opt.tour b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/benchs/eil101.opt.tour new file mode 100644 index 000000000..1d3fece5a --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/tutorial/examples/tsp/benchs/eil101.tsp b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/benchs/eil101.tsp new file mode 100644 index 000000000..9672f849e --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/tutorial/examples/tsp/benchs/eil101.tsp.hc b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/benchs/eil101.tsp.hc new file mode 100644 index 000000000..f12903349 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/tutorial/examples/tsp/city_swap.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/city_swap.cpp new file mode 100644 index 000000000..a9da49f6c --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/city_swap.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 + +#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-16012008-before-mig-modifs/tutorial/examples/tsp/city_swap.h b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/city_swap.h new file mode 100644 index 000000000..91770db04 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/city_swap.h @@ -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 +* +*/ + +#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-16012008-before-mig-modifs/tutorial/examples/tsp/data.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/data.cpp new file mode 100644 index 000000000..fc7223342 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/data.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 +#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-16012008-before-mig-modifs/tutorial/examples/tsp/data.h b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/data.h new file mode 100644 index 000000000..4f501e463 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/tutorial/examples/tsp/display.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/display.cpp new file mode 100644 index 000000000..66757006c --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/display.cpp @@ -0,0 +1,149 @@ +/* +* +* 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-16012008-before-mig-modifs/tutorial/examples/tsp/display.h b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/display.h new file mode 100644 index 000000000..6bc271746 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/tutorial/examples/tsp/display_best_route.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/display_best_route.cpp new file mode 100644 index 000000000..bd4257833 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/display_best_route.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 "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-16012008-before-mig-modifs/tutorial/examples/tsp/display_best_route.h b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/display_best_route.h new file mode 100644 index 000000000..745a50222 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/display_best_route.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 __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-16012008-before-mig-modifs/tutorial/examples/tsp/edge_xover.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/edge_xover.cpp new file mode 100644 index 000000000..a4c46f617 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/edge_xover.cpp @@ -0,0 +1,156 @@ +/* +* +* 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-16012008-before-mig-modifs/tutorial/examples/tsp/edge_xover.h b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/edge_xover.h new file mode 100644 index 000000000..c9249512c --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/edge_xover.h @@ -0,0 +1,72 @@ +/* +* +* 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-16012008-before-mig-modifs/tutorial/examples/tsp/merge_route_eval.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/merge_route_eval.cpp new file mode 100644 index 000000000..5f67b5b3a --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/merge_route_eval.cpp @@ -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 +* +*/ + +#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-16012008-before-mig-modifs/tutorial/examples/tsp/merge_route_eval.h b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/merge_route_eval.h new file mode 100644 index 000000000..40dd1a5a7 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/merge_route_eval.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 __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-16012008-before-mig-modifs/tutorial/examples/tsp/mix.h b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/mix.h new file mode 100644 index 000000000..11942f5cc --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/mix.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 __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-16012008-before-mig-modifs/tutorial/examples/tsp/node.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/node.cpp new file mode 100644 index 000000000..a3a668d70 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/node.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 +* +*/ + +#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-16012008-before-mig-modifs/tutorial/examples/tsp/node.h b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/node.h new file mode 100644 index 000000000..6200d1da8 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/tutorial/examples/tsp/opt_route.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/opt_route.cpp new file mode 100644 index 000000000..0867869b4 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/opt_route.cpp @@ -0,0 +1,143 @@ +/* +* +* 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-16012008-before-mig-modifs/tutorial/examples/tsp/opt_route.h b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/opt_route.h new file mode 100644 index 000000000..d454a7b82 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/tutorial/examples/tsp/order_xover.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/order_xover.cpp new file mode 100644 index 000000000..0602ccaf9 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/order_xover.cpp @@ -0,0 +1,98 @@ +/* +* +* 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-16012008-before-mig-modifs/tutorial/examples/tsp/order_xover.h b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/order_xover.h new file mode 100644 index 000000000..17f66eaf1 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/order_xover.h @@ -0,0 +1,57 @@ +/* +* +* 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-16012008-before-mig-modifs/tutorial/examples/tsp/paradiseo-peo-lsn-shared.doxyfile b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/paradiseo-peo-lsn-shared.doxyfile new file mode 100644 index 000000000..5acf7de0b --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/tutorial/examples/tsp/param.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/param.cpp new file mode 100644 index 000000000..03c2c19ab --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/param.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 + +#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-16012008-before-mig-modifs/tutorial/examples/tsp/param.h b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/param.h new file mode 100644 index 000000000..4b0485879 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/tutorial/examples/tsp/part_route_eval.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/part_route_eval.cpp new file mode 100644 index 000000000..eb04105f0 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/part_route_eval.cpp @@ -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 +* +*/ + +#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-16012008-before-mig-modifs/tutorial/examples/tsp/part_route_eval.h b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/part_route_eval.h new file mode 100644 index 000000000..241a1aa08 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/part_route_eval.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 __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-16012008-before-mig-modifs/tutorial/examples/tsp/partial_mapped_xover.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/partial_mapped_xover.cpp new file mode 100644 index 000000000..a55689aa2 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/partial_mapped_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 "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-16012008-before-mig-modifs/tutorial/examples/tsp/partial_mapped_xover.h b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/partial_mapped_xover.h new file mode 100644 index 000000000..23453bb9b --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/partial_mapped_xover.h @@ -0,0 +1,57 @@ +/* +* +* 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-16012008-before-mig-modifs/tutorial/examples/tsp/route.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/route.cpp new file mode 100644 index 000000000..249056f30 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/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 "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-16012008-before-mig-modifs/tutorial/examples/tsp/route.h b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/route.h new file mode 100644 index 000000000..30c8e16b5 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/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-16012008-before-mig-modifs/tutorial/examples/tsp/route_eval.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/route_eval.cpp new file mode 100644 index 000000000..97c87114c --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/route_eval.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 "route_eval.h" + +void RouteEval :: operator () (Route & __route) +{ + __route.fitness (- (int) length (__route)); +} diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/route_eval.h b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/route_eval.h new file mode 100644 index 000000000..55ceb9b48 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/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 __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-16012008-before-mig-modifs/tutorial/examples/tsp/route_init.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/route_init.cpp new file mode 100644 index 000000000..c3301cd46 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/route_init.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 + +#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-16012008-before-mig-modifs/tutorial/examples/tsp/route_init.h b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/route_init.h new file mode 100644 index 000000000..4f48fc26c --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/route_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 __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-16012008-before-mig-modifs/tutorial/examples/tsp/two_opt.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/two_opt.cpp new file mode 100644 index 000000000..577723730 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/two_opt.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 "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-16012008-before-mig-modifs/tutorial/examples/tsp/two_opt.h b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/two_opt.h new file mode 100644 index 000000000..68d4d95cb --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/two_opt.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 __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-16012008-before-mig-modifs/tutorial/examples/tsp/two_opt_incr_eval.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/two_opt_incr_eval.cpp new file mode 100644 index 000000000..ba5548789 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/two_opt_incr_eval.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 "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-16012008-before-mig-modifs/tutorial/examples/tsp/two_opt_incr_eval.h b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/two_opt_incr_eval.h new file mode 100644 index 000000000..9ee08fad4 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/two_opt_incr_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 __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-16012008-before-mig-modifs/tutorial/examples/tsp/two_opt_init.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/two_opt_init.cpp new file mode 100644 index 000000000..32487b5b4 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/two_opt_init.cpp @@ -0,0 +1,43 @@ +/* +* +* 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-16012008-before-mig-modifs/tutorial/examples/tsp/two_opt_init.h b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/two_opt_init.h new file mode 100644 index 000000000..bb4eb0dcc --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/two_opt_init.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_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-16012008-before-mig-modifs/tutorial/examples/tsp/two_opt_next.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/two_opt_next.cpp new file mode 100644 index 000000000..a2ec7face --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/two_opt_next.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 "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-16012008-before-mig-modifs/tutorial/examples/tsp/two_opt_next.h b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/two_opt_next.h new file mode 100644 index 000000000..6c2f51442 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/two_opt_next.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_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-16012008-before-mig-modifs/tutorial/examples/tsp/two_opt_rand.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/two_opt_rand.cpp new file mode 100644 index 000000000..f38fb80c8 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/two_opt_rand.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 + +#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-16012008-before-mig-modifs/tutorial/examples/tsp/two_opt_rand.h b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/two_opt_rand.h new file mode 100644 index 000000000..85868d236 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/examples/tsp/two_opt_rand.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_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

    v_81#)^v;Hu7IsYDw7o1~H23 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±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 z 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ϊ+Nn@uG%`2f3qGKwtBX~p9R=@z= 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 z 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

    ;MNBuc2!cjaVIvjZf-K@_gRPRgoMhQJRp&eqj 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%0A^Vq9hXCRunA@Fyhs#m^eBfr}d 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 literal 0 HcmV?d00001 diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson2/mainEA.cpp b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson2/mainEA.cpp new file mode 100644 index 000000000..e2be01508 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson2/mainEA.cpp @@ -0,0 +1,105 @@ +/* +* +* 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: paradiseo-help@lists.gforge.inria.fr +* +*/ + +#include +#include + +typedef eoReal Indi; + +double f (const Indi & _indi) +{ + double sum; + sum=_indi[1]-pow(_indi[0],2); + sum=100*pow(sum,2); + sum+=pow((1-_indi[0]),2); + return (-sum); +} + +int main (int __argc, char *__argv[]) +{ + + peo :: init( __argc, __argv ); + const unsigned int VEC_SIZE = 2; + const unsigned int POP_SIZE = 20; + const unsigned int MAX_GEN = 300; + const double INIT_POSITION_MIN = -2.0; + const double INIT_POSITION_MAX = 2.0; + const float CROSS_RATE = 0.8; + const double EPSILON = 0.01; + const float MUT_RATE = 0.3; + rng.reseed (time(0)); + eoGenContinue < Indi > genContPara (MAX_GEN); + eoCombinedContinue continuatorPara (genContPara); + eoCheckPoint checkpoint(continuatorPara); + peoEvalFunc plainEval(f); + peoSeqPopEval< Indi > eval(plainEval); // Here, the evaluation is sequential + eoUniformGenerator < double >uGen (INIT_POSITION_MIN, INIT_POSITION_MAX); + eoInitFixedLength < Indi > random (VEC_SIZE, uGen); + eoRankingSelect selectionStrategy; + eoSelectNumber select(selectionStrategy,POP_SIZE); + eoSegmentCrossover crossover; + eoUniformMutation mutation(EPSILON); + + /******************************************************************************************/ + + /* In this lesson, you can choose between : + * + * - A sequential transformation (crossover + mutation) : eoSGATransform transform(crossover,CROSS_RATE,mutation,MUT_RATE); + * peoSeqTransform eaTransform(transform); + * + * OR + * + * - A parallel transformation (crossover + mutation) : peoParaSGATransform eaTransform(crossover,CROSS_RATE,mutation,MUT_RATE); + * + * 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 eaTransform(crossover,CROSS_RATE,mutation,MUT_RATE); + + /******************************************************************************************/ + + eoPlusReplacement replace; + eoPop < Indi > pop; + pop.append (POP_SIZE, random); + peoEA Algo(checkpoint,eval,select,eaTransform,replace); + Algo(pop); + peo :: run(); + peo :: finalize(); + if (getNodeRank()==1) + std::cout << "Final population :\n" << pop << std::endl; +} diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson2/paradiseo-peo-lsn.doxyfile b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson2/paradiseo-peo-lsn.doxyfile new file mode 100644 index 000000000..f85ae31ec --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson2/paradiseo-peo-lsn.doxyfile @@ -0,0 +1,242 @@ +# Doxyfile 1.4.7 + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- +PROJECT_NAME = "ParadisEO-PEO Lesson2" +PROJECT_NUMBER = 0.1 +OUTPUT_DIRECTORY = ../../../doc/html/lesson2 +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-16012008-before-mig-modifs/tutorial/Lesson2/param b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson2/param new file mode 100644 index 000000000..730f547e1 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson2/param @@ -0,0 +1,9 @@ +## miscallenous parameters + +--debug=false + +## deployment schema + +--schema=schema.xml + + diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson2/schema.xml b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson2/schema.xml new file mode 100644 index 000000000..f34107574 --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson2/schema.xml @@ -0,0 +1,19 @@ + + + + + + + + + 1 + + + + + + + + + + diff --git a/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson3/CMakeLists.txt b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson3/CMakeLists.txt new file mode 100644 index 000000000..254777acb --- /dev/null +++ b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson3/CMakeLists.txt @@ -0,0 +1,110 @@ + +###################################################################################### +### 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/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/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/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) + +###################################################################################### + + +###################################################################################### +### 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(pso mainPSO.cpp) +ADD_DEPENDENCIES(pso peo rmc_mpi) +ADD_EXECUTABLE(ea mainEA.cpp) +ADD_DEPENDENCIES(ea peo rmc_mpi) +###################################################################################### + + +###################################################################################### +### 4) Optionnal: define properties +###################################################################################### + +SET(LESSON3_VERSION ${GLOBAL_VERSION}) +SET_TARGET_PROPERTIES(pso PROPERTIES VERSION "${LESSON3_VERSION}") +SET_TARGET_PROPERTIES(ea PROPERTIES VERSION "${LESSON3_VERSION}") +###################################################################################### + + +###################################################################################### +### 5) Link the librairies +###################################################################################### + +TARGET_LINK_LIBRARIES(pso ${XML2_LIBS} peo rmc_mpi eo eoutils) +TARGET_LINK_LIBRARIES(ea ${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-16012008-before-mig-modifs/tutorial/Lesson3/Lesson3.pdf b/tags/paradiseo-peo-16012008-before-mig-modifs/tutorial/Lesson3/Lesson3.pdf new file mode 100644 index 0000000000000000000000000000000000000000..1f5d54e07f2c6626d33aa964227905086403c643 GIT binary patch literal 385679 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