From c7d3cc755cd70c04b463c900ac8697ea7d965b07 Mon Sep 17 00:00:00 2001 From: legrand Date: Tue, 12 Dec 2006 14:46:07 +0000 Subject: [PATCH] git-svn-id: svn://scm.gforge.inria.fr/svnroot/paradiseo@36 331e1502-861f-0410-8da2-ba01fb791d7f --- trunk/paradiseo-moeo/AUTHORS | 3 + trunk/paradiseo-moeo/ChangeLog | 0 trunk/paradiseo-moeo/Makefile.am | 16 + trunk/paradiseo-moeo/NEWS | 7 + trunk/paradiseo-moeo/README | 63 ++ trunk/paradiseo-moeo/autogen.sh | 148 +++++ trunk/paradiseo-moeo/configure.in | 42 ++ trunk/paradiseo-moeo/docs/Makefile.am | 5 + trunk/paradiseo-moeo/docs/html/annotated.html | 59 ++ trunk/paradiseo-moeo/docs/html/classes.html | 50 ++ .../docs/html/classmoeoArchive-members.html | 42 ++ .../docs/html/classmoeoArchive.html | 205 ++++++ ...eoArchiveFitnessSavingUpdater-members.html | 43 ++ .../classmoeoArchiveFitnessSavingUpdater.html | 128 ++++ .../html/classmoeoArchiveUpdater-members.html | 41 ++ .../docs/html/classmoeoArchiveUpdater.html | 113 ++++ .../paradiseo-moeo/docs/html/classmoeoBM.html | 65 ++ .../paradiseo-moeo/docs/html/classmoeoBM.png | Bin 0 -> 2807 bytes ...moeoBinaryMetricSavingUpdater-members.html | 46 ++ .../classmoeoBinaryMetricSavingUpdater.html | 142 +++++ .../html/classmoeoCombinedMOLS-members.html | 42 ++ .../docs/html/classmoeoCombinedMOLS.html | 199 ++++++ .../docs/html/classmoeoCombinedMOLS.png | Bin 0 -> 532 bytes .../classmoeoContributionMetric-members.html | 42 ++ .../html/classmoeoContributionMetric.html | 255 ++++++++ .../docs/html/classmoeoContributionMetric.png | Bin 0 -> 1038 bytes ...eoDisctinctElitistReplacement-members.html | 41 ++ .../classmoeoDisctinctElitistReplacement.html | 196 ++++++ .../classmoeoDisctinctElitistReplacement.png | Bin 0 -> 848 bytes .../classmoeoElitistReplacement-members.html | 40 ++ .../html/classmoeoElitistReplacement.html | 147 +++++ .../docs/html/classmoeoElitistReplacement.png | Bin 0 -> 674 bytes .../html/classmoeoEntropyMetric-members.html | 47 ++ .../docs/html/classmoeoEntropyMetric.html | 142 +++++ .../docs/html/classmoeoEntropyMetric.png | Bin 0 -> 1030 bytes .../html/classmoeoHybridMOLS-members.html | 43 ++ .../docs/html/classmoeoHybridMOLS.html | 135 ++++ .../docs/html/classmoeoMOLS.html | 61 ++ .../docs/html/classmoeoMOLS.png | Bin 0 -> 539 bytes .../docs/html/classmoeoMetric.html | 63 ++ .../docs/html/classmoeoMetric.png | Bin 0 -> 5466 bytes .../docs/html/classmoeoReplacement.html | 60 ++ .../docs/html/classmoeoReplacement.png | Bin 0 -> 1222 bytes ...ssmoeoSelectOneFromPopAndArch-members.html | 46 ++ .../classmoeoSelectOneFromPopAndArch.html | 194 ++++++ .../docs/html/classmoeoSolutionUM.html | 60 ++ .../docs/html/classmoeoSolutionUM.png | Bin 0 -> 813 bytes .../html/classmoeoSolutionVsSolutionBM.html | 60 ++ .../html/classmoeoSolutionVsSolutionBM.png | Bin 0 -> 894 bytes .../paradiseo-moeo/docs/html/classmoeoUM.html | 59 ++ .../paradiseo-moeo/docs/html/classmoeoUM.png | Bin 0 -> 392 bytes .../docs/html/classmoeoVectorUM.html | 60 ++ .../docs/html/classmoeoVectorUM.png | Bin 0 -> 994 bytes .../html/classmoeoVectorVsSolutionBM.html | 60 ++ .../docs/html/classmoeoVectorVsSolutionBM.png | Bin 0 -> 1022 bytes .../docs/html/classmoeoVectorVsVectorBM.html | 60 ++ .../docs/html/classmoeoVectorVsVectorBM.png | Bin 0 -> 997 bytes trunk/paradiseo-moeo/docs/html/doxygen.css | 358 +++++++++++ trunk/paradiseo-moeo/docs/html/doxygen.png | Bin 0 -> 1281 bytes trunk/paradiseo-moeo/docs/html/files.html | 45 ++ trunk/paradiseo-moeo/docs/html/ftv2blank.png | Bin 0 -> 174 bytes trunk/paradiseo-moeo/docs/html/ftv2doc.png | Bin 0 -> 255 bytes .../docs/html/ftv2folderclosed.png | Bin 0 -> 259 bytes .../docs/html/ftv2folderopen.png | Bin 0 -> 261 bytes .../paradiseo-moeo/docs/html/ftv2lastnode.png | Bin 0 -> 233 bytes trunk/paradiseo-moeo/docs/html/ftv2link.png | Bin 0 -> 358 bytes .../docs/html/ftv2mlastnode.png | Bin 0 -> 160 bytes trunk/paradiseo-moeo/docs/html/ftv2mnode.png | Bin 0 -> 194 bytes trunk/paradiseo-moeo/docs/html/ftv2node.png | Bin 0 -> 235 bytes .../docs/html/ftv2plastnode.png | Bin 0 -> 165 bytes trunk/paradiseo-moeo/docs/html/ftv2pnode.png | Bin 0 -> 200 bytes .../paradiseo-moeo/docs/html/ftv2vertline.png | Bin 0 -> 229 bytes trunk/paradiseo-moeo/docs/html/functions.html | 209 ++++++ .../docs/html/functions_func.html | 145 +++++ .../docs/html/functions_type.html | 53 ++ .../docs/html/functions_vars.html | 95 +++ trunk/paradiseo-moeo/docs/html/hierarchy.html | 80 +++ trunk/paradiseo-moeo/docs/html/index.html | 8 + .../docs/html/index_8h-source.html | 36 ++ trunk/paradiseo-moeo/docs/html/installdox | 117 ++++ trunk/paradiseo-moeo/docs/html/main.html | 39 ++ ...ArchiveFitnessSavingUpdater_8h-source.html | 86 +++ .../html/moeoArchiveUpdater_8h-source.html | 72 +++ .../docs/html/moeoArchive_8h-source.html | 113 ++++ ...eoBinaryMetricSavingUpdater_8h-source.html | 101 +++ .../docs/html/moeoCombinedMOLS_8h-source.html | 79 +++ .../moeoContributionMetric_8h-source.html | 117 ++++ .../html/moeoEntropyMetric_8h-source.html | 195 ++++++ .../docs/html/moeoHybridMOLS_8h-source.html | 85 +++ .../docs/html/moeoMOLS_8h-source.html | 53 ++ .../docs/html/moeoMetric_8h-source.html | 111 ++++ .../docs/html/moeoReplacement_8h-source.html | 163 +++++ ...moeoSelectOneFromPopAndArch_8h-source.html | 95 +++ .../docs/html/moeo_8h-source.html | 60 ++ trunk/paradiseo-moeo/docs/html/pages.html | 33 + trunk/paradiseo-moeo/docs/html/search.idx | Bin 0 -> 311825 bytes trunk/paradiseo-moeo/docs/html/search.php | 382 +++++++++++ trunk/paradiseo-moeo/docs/html/tab_b.gif | Bin 0 -> 35 bytes trunk/paradiseo-moeo/docs/html/tab_l.gif | Bin 0 -> 706 bytes trunk/paradiseo-moeo/docs/html/tab_r.gif | Bin 0 -> 2585 bytes trunk/paradiseo-moeo/docs/html/tabs.css | 102 +++ trunk/paradiseo-moeo/docs/html/tree.html | 161 +++++ trunk/paradiseo-moeo/docs/html/webpages.html | 31 + trunk/paradiseo-moeo/docs/index.h | 53 ++ trunk/paradiseo-moeo/docs/moeo.doxyfile | 237 +++++++ trunk/paradiseo-moeo/src/Makefile.am | 1 + .../metric/moeoBinaryMetricSavingUpdater.h | 94 +++ .../src/metric/moeoContributionMetric.h | 116 ++++ .../src/metric/moeoEntropyMetric.h | 179 ++++++ trunk/paradiseo-moeo/src/metric/moeoMetric.h | 106 +++ trunk/paradiseo-moeo/src/moeo | 18 + trunk/paradiseo-moeo/src/moeo.h | 31 + trunk/paradiseo-moeo/src/moeoArchive.h | 106 +++ .../src/moeoArchiveFitnessSavingUpdater.h | 73 +++ trunk/paradiseo-moeo/src/moeoArchiveUpdater.h | 56 ++ trunk/paradiseo-moeo/src/moeoCombinedMOLS.h | 71 +++ trunk/paradiseo-moeo/src/moeoHybridMOLS.h | 74 +++ trunk/paradiseo-moeo/src/moeoMOLS.h | 28 + trunk/paradiseo-moeo/src/moeoReplacement.h | 169 +++++ .../src/moeoSelectOneFromPopAndArch.h | 93 +++ .../src/old/eoBinaryQualityIndicator.h | 420 ++++++++++++ trunk/paradiseo-moeo/src/old/eoIBEA.h | 490 ++++++++++++++ .../paradiseo-moeo/src/old/eoParetoPhenDist.h | 37 ++ .../paradiseo-moeo/src/old/eoParetoSharing.h | 147 +++++ trunk/paradiseo-moeo/src/old/make_algo_MOEO.h | 254 ++++++++ trunk/paradiseo-moeo/tutorials/Makefile.am | 1 + .../tutorials/lesson1/FlowShop.h | 148 +++++ .../lesson1/FlowShopBenchmarkParser.h | 189 ++++++ .../tutorials/lesson1/FlowShopEA | Bin 0 -> 3033752 bytes .../tutorials/lesson1/FlowShopEA.cpp | 170 +++++ .../tutorials/lesson1/FlowShopEA.param | 51 ++ .../tutorials/lesson1/FlowShopEval.h | 157 +++++ .../tutorials/lesson1/FlowShopFitness.h | 35 + .../tutorials/lesson1/FlowShopInit.h | 79 +++ .../lesson1/FlowShopOpCrossoverQuad.h | 149 +++++ .../lesson1/FlowShopOpMutationExchange.h | 98 +++ .../lesson1/FlowShopOpMutationShift.h | 108 ++++ .../tutorials/lesson1/Makefile.am | 9 + .../lesson1/benchmarks/020_05_01.txt | 63 ++ .../lesson1/benchmarks/020_05_02.txt | 63 ++ .../lesson1/benchmarks/020_10_01.txt | 63 ++ .../lesson1/benchmarks/020_10_02.txt | 63 ++ .../lesson1/benchmarks/020_20_01.txt | 63 ++ .../lesson1/benchmarks/050_05_01.txt | 153 +++++ .../lesson1/benchmarks/050_10_01.txt | 153 +++++ .../lesson1/benchmarks/050_20_01.txt | 153 +++++ .../lesson1/benchmarks/100_05_01.txt | 303 +++++++++ .../lesson1/benchmarks/100_10_01.txt | 303 +++++++++ .../lesson1/benchmarks/100_20_01.txt | 303 +++++++++ .../lesson1/benchmarks/200_10_01.txt | 603 ++++++++++++++++++ .../tutorials/lesson1/benchmarks/README | 1 + .../tutorials/lesson1/make_eval_FlowShop.h | 76 +++ .../lesson1/make_genotype_FlowShop.h | 69 ++ .../tutorials/lesson1/make_op_FlowShop.h | 142 +++++ 154 files changed, 13175 insertions(+) create mode 100644 trunk/paradiseo-moeo/AUTHORS create mode 100755 trunk/paradiseo-moeo/ChangeLog create mode 100755 trunk/paradiseo-moeo/Makefile.am create mode 100644 trunk/paradiseo-moeo/NEWS create mode 100644 trunk/paradiseo-moeo/README create mode 100755 trunk/paradiseo-moeo/autogen.sh create mode 100755 trunk/paradiseo-moeo/configure.in create mode 100644 trunk/paradiseo-moeo/docs/Makefile.am create mode 100644 trunk/paradiseo-moeo/docs/html/annotated.html create mode 100644 trunk/paradiseo-moeo/docs/html/classes.html create mode 100644 trunk/paradiseo-moeo/docs/html/classmoeoArchive-members.html create mode 100644 trunk/paradiseo-moeo/docs/html/classmoeoArchive.html create mode 100644 trunk/paradiseo-moeo/docs/html/classmoeoArchiveFitnessSavingUpdater-members.html create mode 100644 trunk/paradiseo-moeo/docs/html/classmoeoArchiveFitnessSavingUpdater.html create mode 100644 trunk/paradiseo-moeo/docs/html/classmoeoArchiveUpdater-members.html create mode 100644 trunk/paradiseo-moeo/docs/html/classmoeoArchiveUpdater.html create mode 100644 trunk/paradiseo-moeo/docs/html/classmoeoBM.html create mode 100644 trunk/paradiseo-moeo/docs/html/classmoeoBM.png create mode 100644 trunk/paradiseo-moeo/docs/html/classmoeoBinaryMetricSavingUpdater-members.html create mode 100644 trunk/paradiseo-moeo/docs/html/classmoeoBinaryMetricSavingUpdater.html create mode 100644 trunk/paradiseo-moeo/docs/html/classmoeoCombinedMOLS-members.html create mode 100644 trunk/paradiseo-moeo/docs/html/classmoeoCombinedMOLS.html create mode 100644 trunk/paradiseo-moeo/docs/html/classmoeoCombinedMOLS.png create mode 100644 trunk/paradiseo-moeo/docs/html/classmoeoContributionMetric-members.html create mode 100644 trunk/paradiseo-moeo/docs/html/classmoeoContributionMetric.html create mode 100644 trunk/paradiseo-moeo/docs/html/classmoeoContributionMetric.png create mode 100644 trunk/paradiseo-moeo/docs/html/classmoeoDisctinctElitistReplacement-members.html create mode 100644 trunk/paradiseo-moeo/docs/html/classmoeoDisctinctElitistReplacement.html create mode 100644 trunk/paradiseo-moeo/docs/html/classmoeoDisctinctElitistReplacement.png create mode 100644 trunk/paradiseo-moeo/docs/html/classmoeoElitistReplacement-members.html create mode 100644 trunk/paradiseo-moeo/docs/html/classmoeoElitistReplacement.html create mode 100644 trunk/paradiseo-moeo/docs/html/classmoeoElitistReplacement.png create mode 100644 trunk/paradiseo-moeo/docs/html/classmoeoEntropyMetric-members.html create mode 100644 trunk/paradiseo-moeo/docs/html/classmoeoEntropyMetric.html create mode 100644 trunk/paradiseo-moeo/docs/html/classmoeoEntropyMetric.png create mode 100644 trunk/paradiseo-moeo/docs/html/classmoeoHybridMOLS-members.html create mode 100644 trunk/paradiseo-moeo/docs/html/classmoeoHybridMOLS.html create mode 100644 trunk/paradiseo-moeo/docs/html/classmoeoMOLS.html create mode 100644 trunk/paradiseo-moeo/docs/html/classmoeoMOLS.png create mode 100644 trunk/paradiseo-moeo/docs/html/classmoeoMetric.html create mode 100644 trunk/paradiseo-moeo/docs/html/classmoeoMetric.png create mode 100644 trunk/paradiseo-moeo/docs/html/classmoeoReplacement.html create mode 100644 trunk/paradiseo-moeo/docs/html/classmoeoReplacement.png create mode 100644 trunk/paradiseo-moeo/docs/html/classmoeoSelectOneFromPopAndArch-members.html create mode 100644 trunk/paradiseo-moeo/docs/html/classmoeoSelectOneFromPopAndArch.html create mode 100644 trunk/paradiseo-moeo/docs/html/classmoeoSolutionUM.html create mode 100644 trunk/paradiseo-moeo/docs/html/classmoeoSolutionUM.png create mode 100644 trunk/paradiseo-moeo/docs/html/classmoeoSolutionVsSolutionBM.html create mode 100644 trunk/paradiseo-moeo/docs/html/classmoeoSolutionVsSolutionBM.png create mode 100644 trunk/paradiseo-moeo/docs/html/classmoeoUM.html create mode 100644 trunk/paradiseo-moeo/docs/html/classmoeoUM.png create mode 100644 trunk/paradiseo-moeo/docs/html/classmoeoVectorUM.html create mode 100644 trunk/paradiseo-moeo/docs/html/classmoeoVectorUM.png create mode 100644 trunk/paradiseo-moeo/docs/html/classmoeoVectorVsSolutionBM.html create mode 100644 trunk/paradiseo-moeo/docs/html/classmoeoVectorVsSolutionBM.png create mode 100644 trunk/paradiseo-moeo/docs/html/classmoeoVectorVsVectorBM.html create mode 100644 trunk/paradiseo-moeo/docs/html/classmoeoVectorVsVectorBM.png create mode 100644 trunk/paradiseo-moeo/docs/html/doxygen.css create mode 100644 trunk/paradiseo-moeo/docs/html/doxygen.png create mode 100644 trunk/paradiseo-moeo/docs/html/files.html create mode 100644 trunk/paradiseo-moeo/docs/html/ftv2blank.png create mode 100644 trunk/paradiseo-moeo/docs/html/ftv2doc.png create mode 100644 trunk/paradiseo-moeo/docs/html/ftv2folderclosed.png create mode 100644 trunk/paradiseo-moeo/docs/html/ftv2folderopen.png create mode 100644 trunk/paradiseo-moeo/docs/html/ftv2lastnode.png create mode 100644 trunk/paradiseo-moeo/docs/html/ftv2link.png create mode 100644 trunk/paradiseo-moeo/docs/html/ftv2mlastnode.png create mode 100644 trunk/paradiseo-moeo/docs/html/ftv2mnode.png create mode 100644 trunk/paradiseo-moeo/docs/html/ftv2node.png create mode 100644 trunk/paradiseo-moeo/docs/html/ftv2plastnode.png create mode 100644 trunk/paradiseo-moeo/docs/html/ftv2pnode.png create mode 100644 trunk/paradiseo-moeo/docs/html/ftv2vertline.png create mode 100644 trunk/paradiseo-moeo/docs/html/functions.html create mode 100644 trunk/paradiseo-moeo/docs/html/functions_func.html create mode 100644 trunk/paradiseo-moeo/docs/html/functions_type.html create mode 100644 trunk/paradiseo-moeo/docs/html/functions_vars.html create mode 100644 trunk/paradiseo-moeo/docs/html/hierarchy.html create mode 100644 trunk/paradiseo-moeo/docs/html/index.html create mode 100644 trunk/paradiseo-moeo/docs/html/index_8h-source.html create mode 100755 trunk/paradiseo-moeo/docs/html/installdox create mode 100644 trunk/paradiseo-moeo/docs/html/main.html create mode 100644 trunk/paradiseo-moeo/docs/html/moeoArchiveFitnessSavingUpdater_8h-source.html create mode 100644 trunk/paradiseo-moeo/docs/html/moeoArchiveUpdater_8h-source.html create mode 100644 trunk/paradiseo-moeo/docs/html/moeoArchive_8h-source.html create mode 100644 trunk/paradiseo-moeo/docs/html/moeoBinaryMetricSavingUpdater_8h-source.html create mode 100644 trunk/paradiseo-moeo/docs/html/moeoCombinedMOLS_8h-source.html create mode 100644 trunk/paradiseo-moeo/docs/html/moeoContributionMetric_8h-source.html create mode 100644 trunk/paradiseo-moeo/docs/html/moeoEntropyMetric_8h-source.html create mode 100644 trunk/paradiseo-moeo/docs/html/moeoHybridMOLS_8h-source.html create mode 100644 trunk/paradiseo-moeo/docs/html/moeoMOLS_8h-source.html create mode 100644 trunk/paradiseo-moeo/docs/html/moeoMetric_8h-source.html create mode 100644 trunk/paradiseo-moeo/docs/html/moeoReplacement_8h-source.html create mode 100644 trunk/paradiseo-moeo/docs/html/moeoSelectOneFromPopAndArch_8h-source.html create mode 100644 trunk/paradiseo-moeo/docs/html/moeo_8h-source.html create mode 100644 trunk/paradiseo-moeo/docs/html/pages.html create mode 100644 trunk/paradiseo-moeo/docs/html/search.idx create mode 100644 trunk/paradiseo-moeo/docs/html/search.php create mode 100644 trunk/paradiseo-moeo/docs/html/tab_b.gif create mode 100644 trunk/paradiseo-moeo/docs/html/tab_l.gif create mode 100644 trunk/paradiseo-moeo/docs/html/tab_r.gif create mode 100644 trunk/paradiseo-moeo/docs/html/tabs.css create mode 100644 trunk/paradiseo-moeo/docs/html/tree.html create mode 100644 trunk/paradiseo-moeo/docs/html/webpages.html create mode 100644 trunk/paradiseo-moeo/docs/index.h create mode 100644 trunk/paradiseo-moeo/docs/moeo.doxyfile create mode 100755 trunk/paradiseo-moeo/src/Makefile.am create mode 100644 trunk/paradiseo-moeo/src/metric/moeoBinaryMetricSavingUpdater.h create mode 100644 trunk/paradiseo-moeo/src/metric/moeoContributionMetric.h create mode 100644 trunk/paradiseo-moeo/src/metric/moeoEntropyMetric.h create mode 100644 trunk/paradiseo-moeo/src/metric/moeoMetric.h create mode 100644 trunk/paradiseo-moeo/src/moeo create mode 100644 trunk/paradiseo-moeo/src/moeo.h create mode 100644 trunk/paradiseo-moeo/src/moeoArchive.h create mode 100644 trunk/paradiseo-moeo/src/moeoArchiveFitnessSavingUpdater.h create mode 100644 trunk/paradiseo-moeo/src/moeoArchiveUpdater.h create mode 100644 trunk/paradiseo-moeo/src/moeoCombinedMOLS.h create mode 100644 trunk/paradiseo-moeo/src/moeoHybridMOLS.h create mode 100644 trunk/paradiseo-moeo/src/moeoMOLS.h create mode 100644 trunk/paradiseo-moeo/src/moeoReplacement.h create mode 100644 trunk/paradiseo-moeo/src/moeoSelectOneFromPopAndArch.h create mode 100644 trunk/paradiseo-moeo/src/old/eoBinaryQualityIndicator.h create mode 100644 trunk/paradiseo-moeo/src/old/eoIBEA.h create mode 100644 trunk/paradiseo-moeo/src/old/eoParetoPhenDist.h create mode 100644 trunk/paradiseo-moeo/src/old/eoParetoSharing.h create mode 100644 trunk/paradiseo-moeo/src/old/make_algo_MOEO.h create mode 100755 trunk/paradiseo-moeo/tutorials/Makefile.am create mode 100644 trunk/paradiseo-moeo/tutorials/lesson1/FlowShop.h create mode 100644 trunk/paradiseo-moeo/tutorials/lesson1/FlowShopBenchmarkParser.h create mode 100755 trunk/paradiseo-moeo/tutorials/lesson1/FlowShopEA create mode 100644 trunk/paradiseo-moeo/tutorials/lesson1/FlowShopEA.cpp create mode 100644 trunk/paradiseo-moeo/tutorials/lesson1/FlowShopEA.param create mode 100644 trunk/paradiseo-moeo/tutorials/lesson1/FlowShopEval.h create mode 100644 trunk/paradiseo-moeo/tutorials/lesson1/FlowShopFitness.h create mode 100644 trunk/paradiseo-moeo/tutorials/lesson1/FlowShopInit.h create mode 100644 trunk/paradiseo-moeo/tutorials/lesson1/FlowShopOpCrossoverQuad.h create mode 100644 trunk/paradiseo-moeo/tutorials/lesson1/FlowShopOpMutationExchange.h create mode 100644 trunk/paradiseo-moeo/tutorials/lesson1/FlowShopOpMutationShift.h create mode 100644 trunk/paradiseo-moeo/tutorials/lesson1/Makefile.am create mode 100644 trunk/paradiseo-moeo/tutorials/lesson1/benchmarks/020_05_01.txt create mode 100644 trunk/paradiseo-moeo/tutorials/lesson1/benchmarks/020_05_02.txt create mode 100644 trunk/paradiseo-moeo/tutorials/lesson1/benchmarks/020_10_01.txt create mode 100644 trunk/paradiseo-moeo/tutorials/lesson1/benchmarks/020_10_02.txt create mode 100644 trunk/paradiseo-moeo/tutorials/lesson1/benchmarks/020_20_01.txt create mode 100644 trunk/paradiseo-moeo/tutorials/lesson1/benchmarks/050_05_01.txt create mode 100644 trunk/paradiseo-moeo/tutorials/lesson1/benchmarks/050_10_01.txt create mode 100644 trunk/paradiseo-moeo/tutorials/lesson1/benchmarks/050_20_01.txt create mode 100644 trunk/paradiseo-moeo/tutorials/lesson1/benchmarks/100_05_01.txt create mode 100644 trunk/paradiseo-moeo/tutorials/lesson1/benchmarks/100_10_01.txt create mode 100644 trunk/paradiseo-moeo/tutorials/lesson1/benchmarks/100_20_01.txt create mode 100644 trunk/paradiseo-moeo/tutorials/lesson1/benchmarks/200_10_01.txt create mode 100644 trunk/paradiseo-moeo/tutorials/lesson1/benchmarks/README create mode 100644 trunk/paradiseo-moeo/tutorials/lesson1/make_eval_FlowShop.h create mode 100644 trunk/paradiseo-moeo/tutorials/lesson1/make_genotype_FlowShop.h create mode 100644 trunk/paradiseo-moeo/tutorials/lesson1/make_op_FlowShop.h diff --git a/trunk/paradiseo-moeo/AUTHORS b/trunk/paradiseo-moeo/AUTHORS new file mode 100644 index 000000000..6ec6becf5 --- /dev/null +++ b/trunk/paradiseo-moeo/AUTHORS @@ -0,0 +1,3 @@ +Sébastien Cahon +Arnaud Liefooghe +Thomas Legrand diff --git a/trunk/paradiseo-moeo/ChangeLog b/trunk/paradiseo-moeo/ChangeLog new file mode 100755 index 000000000..e69de29bb diff --git a/trunk/paradiseo-moeo/Makefile.am b/trunk/paradiseo-moeo/Makefile.am new file mode 100755 index 000000000..f82d6f279 --- /dev/null +++ b/trunk/paradiseo-moeo/Makefile.am @@ -0,0 +1,16 @@ +SUBDIRS = docs src tutorials + +clean_all: clean_aux clean_doc + -@make clean + -@(rm -rf aclocal.m4 autom4te.cache configure config.* CO* dep* INST* install-sh miss* mkins* Makefile Makefile.in;\ + cd docs; rm -rf Makefile Makefile.in *.doxytag; cd ../src ; rm -rf Makefile Makefile.in; cd ../tutorials; rm -rf Makefile Makefile.in;\ + cd lesson1; rm -rf .deps/ Makefile Makefile.in) + +clean_aux: + -@find . \( -name "*~" -o -name "*.old" -o -name "#*" -o -name "*.bak" \) -print -exec rm -rf \{\} \; + +doc: + -@(cd docs; make doc) + +clean_doc: + -@(cd docs; make clean-local) diff --git a/trunk/paradiseo-moeo/NEWS b/trunk/paradiseo-moeo/NEWS new file mode 100644 index 000000000..31fe551dc --- /dev/null +++ b/trunk/paradiseo-moeo/NEWS @@ -0,0 +1,7 @@ +* release 0.1 + +# Local Variables: +# coding: iso-8859-1 +# mode: text +# fill-column: 80 +# End: diff --git a/trunk/paradiseo-moeo/README b/trunk/paradiseo-moeo/README new file mode 100644 index 000000000..fa724d953 --- /dev/null +++ b/trunk/paradiseo-moeo/README @@ -0,0 +1,63 @@ + PARADISEO-MOEO README FILE +======================================================================= + check latest news at http://paradiseo.gforge.inria.fr/ +======================================================================= + +Welcome to ParadisEO-MOEO, the Multi-Objective Evolving Objects library. +The latest news about ParadisEO-MOEO 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-MOEO +================================================================== +The basic installation procedure goes the following: + +Go to your build-directory and run + $(SRCDIR)/configure + make + make doc + +where $(SRCDIR) is the top-level source directory of PARADISEO-MOEO, +i.e. where the sources where unpacked. + +In case of problems, you can read the INSTALL file - but remember this +is a standard installation file from GNU and that it contains nothing +specific about PARADISEO-MOEO. + +To clean everything, the simply run + make clean_all + +=================================================================== + DIRECTORY STRUCTURE +=================================================================== +After unpacking the archive file, you should end up with the following +structure: + +.../ The MAIN PARADISEO-MO directory, created when unpacking. + | + +-- src SOURCE directory Contains most PARADISEO-MOEO .h files. + | + | + +-- docs 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. + | + | + +-- tutorials APPLICATIONS - one directory per separate application. + | + +- lesson1 a bi-objective flow-shop problem example with main algorithms. + | + +-benchmarks Instance files for testing. + +=================================================================== + NOTES +=================================================================== + +Mailing list : paradiseo-help@lists.gforge.inria.fr diff --git a/trunk/paradiseo-moeo/autogen.sh b/trunk/paradiseo-moeo/autogen.sh new file mode 100755 index 000000000..293b7972e --- /dev/null +++ b/trunk/paradiseo-moeo/autogen.sh @@ -0,0 +1,148 @@ +#!/bin/sh +# Run this to generate all the initial makefiles, etc. + +srcdir=`dirname $0` +PKG_NAME="the package." + +DIE=0 + +(autoconf --version) < /dev/null > /dev/null 2>&1 || { + echo + echo "**Error**: You must have \`autoconf' installed to." + echo "Download the appropriate package for your distribution," + echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/" + DIE=1 +} + +(grep "^AM_PROG_LIBTOOL" $srcdir/configure.in >/dev/null) && { + (libtool --version) < /dev/null > /dev/null 2>&1 || { + echo + echo "**Error**: You must have \`libtool' installed." + echo "Get ftp://ftp.gnu.org/pub/gnu/libtool-1.2d.tar.gz" + echo "(or a newer version if it is available)" + DIE=1 + } +} + +grep "^AM_GNU_GETTEXT" $srcdir/configure.in >/dev/null && { + grep "sed.*POTFILES" $srcdir/configure.in >/dev/null || \ + (gettext --version) < /dev/null > /dev/null 2>&1 || { + echo + echo "**Error**: You must have \`gettext' installed." + echo "Get ftp://alpha.gnu.org/gnu/gettext-0.10.35.tar.gz" + echo "(or a newer version if it is available)" + DIE=1 + } +} + +grep "^AM_GNOME_GETTEXT" $srcdir/configure.in >/dev/null && { + grep "sed.*POTFILES" $srcdir/configure.in >/dev/null || \ + (gettext --version) < /dev/null > /dev/null 2>&1 || { + echo + echo "**Error**: You must have \`gettext' installed." + echo "Get ftp://alpha.gnu.org/gnu/gettext-0.10.35.tar.gz" + echo "(or a newer version if it is available)" + DIE=1 + } +} + +(automake --version) < /dev/null > /dev/null 2>&1 || { + echo + echo "**Error**: You must have \`automake' installed." + echo "Get ftp://ftp.gnu.org/pub/gnu/automake-1.3.tar.gz" + echo "(or a newer version if it is available)" + DIE=1 + NO_AUTOMAKE=yes +} + + +# if no automake, don't bother testing for aclocal +test -n "$NO_AUTOMAKE" || (aclocal --version) < /dev/null > /dev/null 2>&1 || { + echo + echo "**Error**: Missing \`aclocal'. The version of \`automake'" + echo "installed doesn't appear recent enough." + echo "Get ftp://ftp.gnu.org/pub/gnu/automake-1.3.tar.gz" + echo "(or a newer version if it is available)" + DIE=1 +} + +if test "$DIE" -eq 1; then + exit 1 +fi + +if test -z "$*"; then + echo "**Warning**: I am going to run \`configure' with no arguments." + echo "If you wish to pass any to it, please specify them on the" + echo \`$0\'" command line." + echo +fi + +case $CC in +xlc ) + am_opt=--include-deps;; +esac + +for coin in `find $srcdir -name configure.in -print` +do + dr=`dirname $coin` + if test -f $dr/NO-AUTO-GEN; then + echo skipping $dr -- flagged as no auto-gen + else + echo processing $dr + macrodirs=`sed -n -e 's,AM_ACLOCAL_INCLUDE(\(.*\)),\1,gp' < $coin` + ( cd $dr + aclocalinclude="$ACLOCAL_FLAGS" + for k in $macrodirs; do + if test -d $k; then + aclocalinclude="$aclocalinclude -I $k" + ##else + ## echo "**Warning**: No such directory \`$k'. Ignored." + fi + done + if grep "^AM_GNU_GETTEXT" configure.in >/dev/null; then + if grep "sed.*POTFILES" configure.in >/dev/null; then + : do nothing -- we still have an old unmodified configure.in + else + echo "Creating $dr/aclocal.m4 ..." + test -r $dr/aclocal.m4 || touch $dr/aclocal.m4 + echo "Running gettextize... Ignore non-fatal messages." + echo "no" | gettextize --force --copy + echo "Making $dr/aclocal.m4 writable ..." + test -r $dr/aclocal.m4 && chmod u+w $dr/aclocal.m4 + fi + fi + if grep "^AM_GNOME_GETTEXT" configure.in >/dev/null; then + echo "Creating $dr/aclocal.m4 ..." + test -r $dr/aclocal.m4 || touch $dr/aclocal.m4 + echo "Running gettextize... Ignore non-fatal messages." + echo "no" | gettextize --force --copy + echo "Making $dr/aclocal.m4 writable ..." + test -r $dr/aclocal.m4 && chmod u+w $dr/aclocal.m4 + fi + if grep "^AM_PROG_LIBTOOL" configure.in >/dev/null; then + echo "Running libtoolize..." + libtoolize --force --copy + fi + echo "Running aclocal $aclocalinclude ..." + aclocal $aclocalinclude + if grep "^AM_CONFIG_HEADER" configure.in >/dev/null; then + echo "Running autoheader..." + autoheader + fi + echo "Running automake --gnu $am_opt ..." + automake --add-missing --gnu $am_opt + echo "Running autoconf ..." + autoconf + ) + fi +done + +#conf_flags="--enable-maintainer-mode --enable-compile-warnings" #--enable-iso-c + +if test x$NOCONFIGURE = x; then + echo Running $srcdir/configure $conf_flags "$@" ... + $srcdir/configure $conf_flags "$@" \ + && echo Now type \`make\' to compile $PKG_NAME +else + echo Skipping configure process. +fi diff --git a/trunk/paradiseo-moeo/configure.in b/trunk/paradiseo-moeo/configure.in new file mode 100755 index 000000000..d9b053ddc --- /dev/null +++ b/trunk/paradiseo-moeo/configure.in @@ -0,0 +1,42 @@ +AC_INIT(configure.in) +AM_INIT_AUTOMAKE(moeo, 0.1) + +AC_ISC_POSIX +AC_PROG_CXX +AM_PROG_CC_STDC +AC_HEADER_STDC +AC_PROG_RANLIB + +AC_PROG_INSTALL +AC_PROG_LN_S +AC_PROG_MAKE_SET + +AC_C_CONST +AC_C_INLINE +AC_TYPE_SIZE_T + +AC_SUBST(EO_DIR) + +dnl EO +AC_ARG_WITH(EOdir, + --with-EOdir : Giving the path of the EO tree., + EO_DIR="$withval" + if test ! -d $EO_DIR + then + echo "" + echo "# --with-EOdir Invalid directory $withval" + exit 1 + fi, + echo "" + echo "# You forgot to give the path of the EO tree !" + echo "# Please write something like ... './configure --with-EOdir=\$HOME/eo'" + exit 1 + ) + +AC_OUTPUT([ +Makefile +src/Makefile +docs/Makefile +tutorials/Makefile +tutorials/lesson1/Makefile +]) diff --git a/trunk/paradiseo-moeo/docs/Makefile.am b/trunk/paradiseo-moeo/docs/Makefile.am new file mode 100644 index 000000000..254b2661c --- /dev/null +++ b/trunk/paradiseo-moeo/docs/Makefile.am @@ -0,0 +1,5 @@ +doc: + -@doxygen moeo.doxyfile + +clean-local: + rm -rf html latex man diff --git a/trunk/paradiseo-moeo/docs/html/annotated.html b/trunk/paradiseo-moeo/docs/html/annotated.html new file mode 100644 index 000000000..e1ae7f813 --- /dev/null +++ b/trunk/paradiseo-moeo/docs/html/annotated.html @@ -0,0 +1,59 @@ + + +ParadisEO-MOEO: Class List + + + + +
+
+
+
+

ParadisEO-MOEO Class List

Here are the classes, structs, unions and interfaces with brief descriptions: + + + + + + + + + + + + + + + + + + + + + +
moeoArchive< EOT >An archive is a secondary population that stores non-dominated solutions
moeoArchiveFitnessSavingUpdater< EOT >This class allows to save the fitnesses of solutions contained in an archive into a file at each generation
moeoArchiveUpdater< EOT >This class allows to update the archive at each generation with newly found non-dominated solutions
moeoBinaryMetricSavingUpdater< EOT >This class allows to save the progression of a binary metric comparing the fitness values of the current population (or archive) with the fitness values of the population (or archive) of the generation (n-1) into a file
moeoBM< A1, A2, R >Base class for binary metrics
moeoCombinedMOLS< EOT >This class allows to embed a set of local searches that are sequentially applied, and so working and updating the same archive of non-dominated solutions
moeoContributionMetric< EOT >The contribution metric evaluates the proportion of non-dominated solutions given by a Pareto set relatively to another Pareto set
moeoDisctinctElitistReplacement< EOT, WorthT >Same than moeoElitistReplacement except that distinct individuals are privilegied
moeoElitistReplacement< EOT, WorthT >Keep all the best individuals (almost cut-and-pasted from eoNDPlusReplacement, (c) Maarten Keijzer, Marc Schoenauer and GeNeura Team, 2002)
moeoEntropyMetric< EOT >The entropy gives an idea of the diversity of a Pareto set relatively to another Pareto set
moeoHybridMOLS< EOT >This class allows to apply a multi-objective local search to a number of selected individuals contained in the archive at every generation until a stopping criteria is verified
moeoMetricBase class for performance metrics (also called quality indicators)
moeoMOLS< EOT >Abstract class for local searches applied to multi-objective optimization
moeoReplacement< EOT, WorthT >Replacement strategy for multi-objective optimization
moeoSelectOneFromPopAndArch< EOT >Elitist selection process that consists in choosing individuals in the archive as well as in the current population
moeoSolutionUM< EOT, R, EOFitness >Base class for unary metrics dedicated to the performance evaluation of a single solution's Pareto fitness
moeoSolutionVsSolutionBM< EOT, R, EOFitness >Base class for binary metrics dedicated to the performance comparison between two solutions's Pareto fitnesses
moeoUM< A, R >Base class for unary metrics
moeoVectorUM< EOT, R, EOFitness >Base class for unary metrics dedicated to the performance evaluation of a Pareto set (a vector of Pareto fitnesses)
moeoVectorVsSolutionBM< EOT, R, EOFitness >Base class for binary metrics dedicated to the performance comparison between a Pareto set (a vector of Pareto fitnesses) and a single solution's Pareto fitness
moeoVectorVsVectorBM< EOT, R, EOFitness >Base class for binary metrics dedicated to the performance comparison between two Pareto sets (two vectors of Pareto fitnesses)
+
Generated on Tue Dec 12 11:16:35 2006 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/trunk/paradiseo-moeo/docs/html/classes.html b/trunk/paradiseo-moeo/docs/html/classes.html new file mode 100644 index 000000000..46f3bae98 --- /dev/null +++ b/trunk/paradiseo-moeo/docs/html/classes.html @@ -0,0 +1,50 @@ + + +ParadisEO-MOEO: Alphabetical List + + + + +
+
+
+
+

ParadisEO-MOEO Class Index

A | B | C | D | E | H | M | R | S | U | V

+ +
  A  
+
moeoDisctinctElitistReplacement   
  S  
+
moeoArchive   
  E  
+
moeoSelectOneFromPopAndArch   
moeoArchiveFitnessSavingUpdater   moeoElitistReplacement   moeoSolutionUM   
moeoArchiveUpdater   moeoEntropyMetric   moeoSolutionVsSolutionBM   
  B  
+
  H  
+
  U  
+
moeoBinaryMetricSavingUpdater   moeoHybridMOLS   moeoUM   
moeoBM   
  M  
+
  V  
+
  C  
+
moeoMetric   moeoVectorUM   
moeoCombinedMOLS   moeoMOLS   moeoVectorVsSolutionBM   
moeoContributionMetric   
  R  
+
moeoVectorVsVectorBM   
  D  
+
moeoReplacement   

A | B | C | D | E | H | M | R | S | U | V

+


Generated on Tue Dec 12 11:16:35 2006 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/trunk/paradiseo-moeo/docs/html/classmoeoArchive-members.html b/trunk/paradiseo-moeo/docs/html/classmoeoArchive-members.html new file mode 100644 index 000000000..d1ea2930f --- /dev/null +++ b/trunk/paradiseo-moeo/docs/html/classmoeoArchive-members.html @@ -0,0 +1,42 @@ + + +ParadisEO-MOEO: Member List + + + + +
+
+
+
+

moeoArchive< EOT > Member List

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

+ + + + + +
contains(const EOFitness &_fit) constmoeoArchive< EOT > [inline]
dominates(const EOFitness &_fit) constmoeoArchive< EOT > [inline]
EOFitness typedefmoeoArchive< EOT >
update(const EOT &_eo)moeoArchive< EOT > [inline]
update(const eoPop< EOT > &_pop)moeoArchive< EOT > [inline]


Generated on Tue Dec 12 11:16:35 2006 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/trunk/paradiseo-moeo/docs/html/classmoeoArchive.html b/trunk/paradiseo-moeo/docs/html/classmoeoArchive.html new file mode 100644 index 000000000..9ca690504 --- /dev/null +++ b/trunk/paradiseo-moeo/docs/html/classmoeoArchive.html @@ -0,0 +1,205 @@ + + +ParadisEO-MOEO: moeoArchive< EOT > Class Template Reference + + + + +
+
+
+
+

moeoArchive< EOT > Class Template Reference

An archive is a secondary population that stores non-dominated solutions. +More... +

+#include <moeoArchive.h> +

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

Public Types

+typedef EOT::Fitness EOFitness
 The fitness type of a solution.

Public Member Functions

bool dominates (const EOFitness &_fit) const
 Returns true if the current archive dominates _fit.
bool contains (const EOFitness &_fit) const
 Returns true if the current archive contains _fit.
void update (const EOT &_eo)
 Updates the archive with a given individual _eo.
void update (const eoPop< EOT > &_pop)
 Updates the archive with a given population _pop.
+


Detailed Description

+

template<class EOT>
+ class moeoArchive< EOT >

+ +An archive is a secondary population that stores non-dominated solutions. +

+ +

+Definition at line 21 of file moeoArchive.h.


Member Function Documentation

+ +
+
+
+template<class EOT>
+ + + + + + + + + +
bool moeoArchive< EOT >::dominates (const EOFitness _fit  )  const [inline]
+
+
+ +

+Returns true if the current archive dominates _fit. +

+

Parameters:
+ + +
_fit the (Pareto) fitness to compare with the current archive
+
+ +

+Definition at line 39 of file moeoArchive.h. +

+Referenced by moeoArchive< EOT >::update(). +

+

+ +

+
+
+template<class EOT>
+ + + + + + + + + +
bool moeoArchive< EOT >::contains (const EOFitness _fit  )  const [inline]
+
+
+ +

+Returns true if the current archive contains _fit. +

+

Parameters:
+ + +
_fit the (Pareto) fitness to search within the current archive
+
+ +

+Definition at line 51 of file moeoArchive.h. +

+

+ +

+
+
+template<class EOT>
+ + + + + + + + + +
void moeoArchive< EOT >::update (const EOT &  _eo  )  [inline]
+
+
+ +

+Updates the archive with a given individual _eo. +

+

Parameters:
+ + +
_eo the given individual
+
+ +

+Definition at line 63 of file moeoArchive.h. +

+References moeoArchive< EOT >::dominates(). +

+Referenced by moeoArchive< EOT >::update(). +

+

+ +

+
+
+template<class EOT>
+ + + + + + + + + +
void moeoArchive< EOT >::update (const eoPop< EOT > &  _pop  )  [inline]
+
+
+ +

+Updates the archive with a given population _pop. +

+

Parameters:
+ + +
_pop the given population
+
+ +

+Definition at line 98 of file moeoArchive.h. +

+References moeoArchive< EOT >::update(). +

+

+


The documentation for this class was generated from the following file: +
Generated on Tue Dec 12 11:16:35 2006 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/trunk/paradiseo-moeo/docs/html/classmoeoArchiveFitnessSavingUpdater-members.html b/trunk/paradiseo-moeo/docs/html/classmoeoArchiveFitnessSavingUpdater-members.html new file mode 100644 index 000000000..7a7baaa02 --- /dev/null +++ b/trunk/paradiseo-moeo/docs/html/classmoeoArchiveFitnessSavingUpdater-members.html @@ -0,0 +1,43 @@ + + +ParadisEO-MOEO: Member List + + + + +
+
+
+
+

moeoArchiveFitnessSavingUpdater< EOT > Member List

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

+ + + + + + +
archmoeoArchiveFitnessSavingUpdater< EOT > [private]
countermoeoArchiveFitnessSavingUpdater< EOT > [private]
filenamemoeoArchiveFitnessSavingUpdater< EOT > [private]
idmoeoArchiveFitnessSavingUpdater< EOT > [private]
moeoArchiveFitnessSavingUpdater(moeoArchive< EOT > &_arch, const std::string &_filename="Res/Arch", int _id=-1)moeoArchiveFitnessSavingUpdater< EOT > [inline]
operator()()moeoArchiveFitnessSavingUpdater< EOT > [inline]


Generated on Tue Dec 12 11:16:35 2006 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/trunk/paradiseo-moeo/docs/html/classmoeoArchiveFitnessSavingUpdater.html b/trunk/paradiseo-moeo/docs/html/classmoeoArchiveFitnessSavingUpdater.html new file mode 100644 index 000000000..c1074ee32 --- /dev/null +++ b/trunk/paradiseo-moeo/docs/html/classmoeoArchiveFitnessSavingUpdater.html @@ -0,0 +1,128 @@ + + +ParadisEO-MOEO: moeoArchiveFitnessSavingUpdater< EOT > Class Template Reference + + + + +
+
+
+
+

moeoArchiveFitnessSavingUpdater< EOT > Class Template Reference

This class allows to save the fitnesses of solutions contained in an archive into a file at each generation. +More... +

+#include <moeoArchiveFitnessSavingUpdater.h> +

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

Public Member Functions

 moeoArchiveFitnessSavingUpdater (moeoArchive< EOT > &_arch, const std::string &_filename="Res/Arch", int _id=-1)
 Ctor.
+void operator() ()
 Saves the fitness of the archive's members into the file.

Private Attributes

+moeoArchive< EOT > & arch
 local archive
+std::string filename
 target filename
+int id
 own ID
+unsigned counter
 counter
+


Detailed Description

+

template<class EOT>
+ class moeoArchiveFitnessSavingUpdater< EOT >

+ +This class allows to save the fitnesses of solutions contained in an archive into a file at each generation. +

+ +

+Definition at line 27 of file moeoArchiveFitnessSavingUpdater.h.


Constructor & Destructor Documentation

+ +
+
+
+template<class EOT>
+ + + + + + + + + + + + + + + + + + + + + + + + +
moeoArchiveFitnessSavingUpdater< EOT >::moeoArchiveFitnessSavingUpdater (moeoArchive< EOT > &  _arch,
const std::string &  _filename = "Res/Arch",
int  _id = -1 
) [inline]
+
+
+ +

+Ctor. +

+

Parameters:
+ + + + +
_arch local archive
_filename target filename
_id own ID
+
+ +

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

+

+


The documentation for this class was generated from the following file: +
Generated on Tue Dec 12 11:16:35 2006 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/trunk/paradiseo-moeo/docs/html/classmoeoArchiveUpdater-members.html b/trunk/paradiseo-moeo/docs/html/classmoeoArchiveUpdater-members.html new file mode 100644 index 000000000..fa02e65c6 --- /dev/null +++ b/trunk/paradiseo-moeo/docs/html/classmoeoArchiveUpdater-members.html @@ -0,0 +1,41 @@ + + +ParadisEO-MOEO: Member List + + + + +
+
+
+
+

moeoArchiveUpdater< EOT > Member List

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

+ + + + +
archmoeoArchiveUpdater< EOT > [private]
moeoArchiveUpdater(moeoArchive< EOT > &_arch, const eoPop< EOT > &_pop)moeoArchiveUpdater< EOT > [inline]
operator()()moeoArchiveUpdater< EOT > [inline]
popmoeoArchiveUpdater< EOT > [private]


Generated on Tue Dec 12 11:16:35 2006 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/trunk/paradiseo-moeo/docs/html/classmoeoArchiveUpdater.html b/trunk/paradiseo-moeo/docs/html/classmoeoArchiveUpdater.html new file mode 100644 index 000000000..9a5874d1b --- /dev/null +++ b/trunk/paradiseo-moeo/docs/html/classmoeoArchiveUpdater.html @@ -0,0 +1,113 @@ + + +ParadisEO-MOEO: moeoArchiveUpdater< EOT > Class Template Reference + + + + +
+
+
+
+

moeoArchiveUpdater< EOT > Class Template Reference

This class allows to update the archive at each generation with newly found non-dominated solutions. +More... +

+#include <moeoArchiveUpdater.h> +

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

Public Member Functions

 moeoArchiveUpdater (moeoArchive< EOT > &_arch, const eoPop< EOT > &_pop)
 Ctor.
+void operator() ()
 Updates the archive with newly found non-dominated solutions contained in the main population.

Private Attributes

+moeoArchive< EOT > & arch
 the archive of non-dominated solutions
+const eoPop< EOT > & pop
 the main population
+


Detailed Description

+

template<class EOT>
+ class moeoArchiveUpdater< EOT >

+ +This class allows to update the archive at each generation with newly found non-dominated solutions. +

+ +

+Definition at line 23 of file moeoArchiveUpdater.h.


Constructor & Destructor Documentation

+ +
+
+
+template<class EOT>
+ + + + + + + + + + + + + + + + + + +
moeoArchiveUpdater< EOT >::moeoArchiveUpdater (moeoArchive< EOT > &  _arch,
const eoPop< EOT > &  _pop 
) [inline]
+
+
+ +

+Ctor. +

+

Parameters:
+ + + +
_arch an archive of non-dominated solutions
_pop the main population
+
+ +

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

+

+


The documentation for this class was generated from the following file: +
Generated on Tue Dec 12 11:16:35 2006 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/trunk/paradiseo-moeo/docs/html/classmoeoBM.html b/trunk/paradiseo-moeo/docs/html/classmoeoBM.html new file mode 100644 index 000000000..e22e36294 --- /dev/null +++ b/trunk/paradiseo-moeo/docs/html/classmoeoBM.html @@ -0,0 +1,65 @@ + + +ParadisEO-MOEO: moeoBM< A1, A2, R > Class Template Reference + + + + +
+
+
+
+

moeoBM< A1, A2, R > Class Template Reference

Base class for binary metrics. +More... +

+#include <moeoMetric.h> +

+

Inheritance diagram for moeoBM< A1, A2, R >: +

+ +moeoMetric +moeoSolutionVsSolutionBM< EOT, R, EOFitness > +moeoVectorVsSolutionBM< EOT, R, EOFitness > +moeoVectorVsVectorBM< EOT, R, EOFitness > +moeoVectorVsVectorBM< EOT, double > +moeoContributionMetric< EOT > +moeoEntropyMetric< EOT > + + + +
+

Detailed Description

+

template<class A1, class A2, class R>
+ class moeoBM< A1, A2, R >

+ +Base class for binary metrics. +

+ +

+Definition at line 38 of file moeoMetric.h.


The documentation for this class was generated from the following file: +
Generated on Tue Dec 12 11:16:35 2006 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/trunk/paradiseo-moeo/docs/html/classmoeoBM.png b/trunk/paradiseo-moeo/docs/html/classmoeoBM.png new file mode 100644 index 0000000000000000000000000000000000000000..df485aced9431dd411258d2bca1b72fcbfb1dc96 GIT binary patch literal 2807 zcmcImX*k>28vk1wRdiEQTeZ_(QaYBZpiy)|)fT%bsqJqmY7ZK!t*OjZg-h^=T5IV< zg2onWm8p(cOD(ZB6je!?B2)4k?Gb&f5~x+y2(VX!Mq-T`p~e=)=q}49HthEnPtSnK3W_drK1k{5S5Shs+V$m5 zw6-M+c_ODq7-UMsmSjbC;HjZqP`+8&18V0PJGZU#5Rgf^ums}F7*+BhGx>u2as8fx zbIlLbRS->HsRpx@1pNf+Dr9R3`o~}(^!C?ADB5wD7*q&kdajx?R~Kh%g@B(|#|40E zJKOK9fRlp!jo5p4+53T`Na>2i(SyLrjsOuLmHE4#cQhLS&NpKKKn9Hf?u%C{07m~G zwflw-bC!Mscd|w(@GS`Y_?;U2G6yaenj;#;_vH?hD7Ym)w9*a6X>O)) zbz8Fbt%-QlD_x>>1p@`=SmD!nE{zSFqqy8H&%~>CjNjC2j|&%B*}uOp*b8)CpaFQ z^QHcBnbEv_K2u6JiCWb!3Yt0vs3Y)@&y3dvAr5fA#*d+fXZnix5slQM0NJ5w zd_%tSCZ1nG;RtC20aJOC3poGl)E@`&YF95SNBEm&6&6S~);#M*4v4yq{{bw)m&Xpq ztNlAwKUG?@g@JGQrP;YyHi`#M3V_Vpe=((guPd#$%%Xz|r~B2}0GDswguGz+d`}cc zRI=v@AG4Gs#S1@`oXy}SH=7#C8V3&VDz5lbK-t)=j&b^$94K{}Az46Hf?)*-!@{8TeJZhlB|2S6 z)(rKW({aiiZ}!GgG~sI0r9!cksV%VG!UdV(-UAO?<8-0fb|a4hMjs{VTg?`BY-l@n$v~kEuGLeua=wd+KYlg`gO)@nFW`!!BSFyNTVN8Y z3^%t~)l*`;boBeBpvj;fKX`9dwXT?!=d7+)UUs(#u`ZXCpHa)~@}cXz!)c;j6_e_Y zG(}b^fGMNFr+3Ru6vDW;qBlRtz+)1qBR{=YtBtad@mZ^{QtB()mnvmLOA*EIf8ayrhAFOhKGu` z+v;Jyr%QZKE1J8@CfeXlyE>O!*Mn{A;1LF-m{e-sKvgyTAa>T*;%TSbT6Ine=rwfQ z3;L$lQfeZ&l%;Z$vWm2wH@;f2=gQE4CgR?T`$BQ*K0UZ6{*|GrdOte%wdt!M4EwGy zWb2NxH8IQXSo(>I8I$d-d?BjP$`|(;|Gnl8ET|-U_NFl9Z~t03Hc@ zd%~;!Am;{SbOUP{7-?qKe1eXEuDr8BlQ?#^S% z3)XG-R0Ci2w7O$Kr}>D8h(Nd-6W4i-Hfzo!&!2$4D=L=6TBZbZJx^m{(kGXq+^ zB#mZNxwx!!D}h0iL+J=ed7w?gx<<=fZxWr-eYmr8s?^9IaK`;@h?ykska(A?RckC8 z+)DF$AGUQ2<^U_XzS0ozPh>0@SATU!vI*znx^!kVqjgFgAY2wIymd)L?{6vCZSuaE zwV_JMSFPN#TWNlyc8=4)j9uKbm1y!<+mI`VR6^6+EK!#cWP;N0(w^atkJIl}u%`rc8PnA2Y*t+xKfQQ!J# z_P9~jYNagG^Uo~)AH@0JHn*h5cjuY>=Zds3lRZ%k`wx!BBFUym{>I%>w8=>Nm zj>7a$3Dj?pj*0}S2h{EF36Z6HNuM>m)(oYhlH%WdmevA0Lc6PKH5c0AzZ#UYXq#cH zGVpjyt!m$tTWY}=VZyL!F*!G|N=rw{c#;;~E$dW|ri?9+shC`4Puq$|74wBj=|WC6 z5O5=gL>AjE6N|HXTD%wj^djP3{Rm!bPLliruHQi~Z}lM{=M+QSKMZ2eXgttxn}#GuY~Adw;(gR^I;#jY);cU2^77J8T)87FHD{kmdP| z>Ob6^<)&(`j+Hngl;Agch4H-S({PNQRx;=tB~DBRop9*00aWUtEXIY*+$l}>bJ!zj zRm7C$_fd|y*%AAr#M|WxV&4?dJ-=}Cm++Sx)F-y_mt(CRR*n;11h%HQTVe)FeY4M} z!#2SNuaIx=eX)KSrZaw&FuYi%iftCU#83BHM@GTLN!+!v(31FK5 literal 0 HcmV?d00001 diff --git a/trunk/paradiseo-moeo/docs/html/classmoeoBinaryMetricSavingUpdater-members.html b/trunk/paradiseo-moeo/docs/html/classmoeoBinaryMetricSavingUpdater-members.html new file mode 100644 index 000000000..0a61cdc35 --- /dev/null +++ b/trunk/paradiseo-moeo/docs/html/classmoeoBinaryMetricSavingUpdater-members.html @@ -0,0 +1,46 @@ + + +ParadisEO-MOEO: Member List + + + + +
+
+ +

moeoBinaryMetricSavingUpdater< EOT > Member List

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

+ + + + + + + + + +
countermoeoBinaryMetricSavingUpdater< EOT > [private]
EOFitness typedefmoeoBinaryMetricSavingUpdater< EOT >
filenamemoeoBinaryMetricSavingUpdater< EOT > [private]
firstGenmoeoBinaryMetricSavingUpdater< EOT > [private]
metricmoeoBinaryMetricSavingUpdater< EOT > [private]
moeoBinaryMetricSavingUpdater(moeoVectorVsVectorBM< EOT, double > &_metric, const eoPop< EOT > &_pop, std::string _filename)moeoBinaryMetricSavingUpdater< EOT > [inline]
oldPopmoeoBinaryMetricSavingUpdater< EOT > [private]
operator()()moeoBinaryMetricSavingUpdater< EOT > [inline]
popmoeoBinaryMetricSavingUpdater< EOT > [private]


Generated on Tue Dec 12 11:16:35 2006 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/trunk/paradiseo-moeo/docs/html/classmoeoBinaryMetricSavingUpdater.html b/trunk/paradiseo-moeo/docs/html/classmoeoBinaryMetricSavingUpdater.html new file mode 100644 index 000000000..2a1c5cf80 --- /dev/null +++ b/trunk/paradiseo-moeo/docs/html/classmoeoBinaryMetricSavingUpdater.html @@ -0,0 +1,142 @@ + + +ParadisEO-MOEO: moeoBinaryMetricSavingUpdater< EOT > Class Template Reference + + + + +
+
+ +

moeoBinaryMetricSavingUpdater< EOT > Class Template Reference

This class allows to save the progression of a binary metric comparing the fitness values of the current population (or archive) with the fitness values of the population (or archive) of the generation (n-1) into a file. +More... +

+#include <moeoBinaryMetricSavingUpdater.h> +

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

Public Types

+typedef EOT::Fitness EOFitness
 The fitness type of a solution.

Public Member Functions

 moeoBinaryMetricSavingUpdater (moeoVectorVsVectorBM< EOT, double > &_metric, const eoPop< EOT > &_pop, std::string _filename)
 Ctor.
+void operator() ()
 Saves the metric's value for the current generation.

Private Attributes

+moeoVectorVsVectorBM< EOT,
+ double > & 
metric
 binary metric comparing two Pareto sets
+const eoPop< EOT > & pop
 main population
+eoPop< EOT > oldPop
 (n-1) population
+std::string filename
 target filename
+bool firstGen
 is it the first generation ?
+unsigned counter
 counter
+


Detailed Description

+

template<class EOT>
+ class moeoBinaryMetricSavingUpdater< EOT >

+ +This class allows to save the progression of a binary metric comparing the fitness values of the current population (or archive) with the fitness values of the population (or archive) of the generation (n-1) into a file. +

+ +

+Definition at line 26 of file moeoBinaryMetricSavingUpdater.h.


Constructor & Destructor Documentation

+ +
+
+
+template<class EOT>
+ + + + + + + + + + + + + + + + + + + + + + + + +
moeoBinaryMetricSavingUpdater< EOT >::moeoBinaryMetricSavingUpdater (moeoVectorVsVectorBM< EOT, double > &  _metric,
const eoPop< EOT > &  _pop,
std::string  _filename 
) [inline]
+
+
+ +

+Ctor. +

+

Parameters:
+ + + + +
_metric the binary metric comparing two Pareto sets
_pop the main population
_filename the target filename
+
+ +

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

+

+


The documentation for this class was generated from the following file: +
Generated on Tue Dec 12 11:16:35 2006 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/trunk/paradiseo-moeo/docs/html/classmoeoCombinedMOLS-members.html b/trunk/paradiseo-moeo/docs/html/classmoeoCombinedMOLS-members.html new file mode 100644 index 000000000..ca83216a0 --- /dev/null +++ b/trunk/paradiseo-moeo/docs/html/classmoeoCombinedMOLS-members.html @@ -0,0 +1,42 @@ + + +ParadisEO-MOEO: Member List + + + + +
+
+ +

moeoCombinedMOLS< EOT > Member List

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

+ + + + + +
add(moeoMOLS< EOT > &_ls)moeoCombinedMOLS< EOT > [inline]
combinedMOLSmoeoCombinedMOLS< EOT > [private]
evalmoeoCombinedMOLS< EOT > [private]
moeoCombinedMOLS(eoEvalFunc< EOT > &_eval, moeoMOLS< EOT > &_first_ls)moeoCombinedMOLS< EOT > [inline]
operator()(const EOT &_eo, moeoArchive< EOT > &_arch)moeoCombinedMOLS< EOT > [inline]


Generated on Tue Dec 12 11:16:35 2006 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/trunk/paradiseo-moeo/docs/html/classmoeoCombinedMOLS.html b/trunk/paradiseo-moeo/docs/html/classmoeoCombinedMOLS.html new file mode 100644 index 000000000..ed34b6acd --- /dev/null +++ b/trunk/paradiseo-moeo/docs/html/classmoeoCombinedMOLS.html @@ -0,0 +1,199 @@ + + +ParadisEO-MOEO: moeoCombinedMOLS< EOT > Class Template Reference + + + + +
+
+ +

moeoCombinedMOLS< EOT > Class Template Reference

This class allows to embed a set of local searches that are sequentially applied, and so working and updating the same archive of non-dominated solutions. +More... +

+#include <moeoCombinedMOLS.h> +

+

Inheritance diagram for moeoCombinedMOLS< EOT >: +

+ +moeoMOLS< EOT > + +List of all members. + + + + + + + + + + + + + + + + + + +

Public Member Functions

 moeoCombinedMOLS (eoEvalFunc< EOT > &_eval, moeoMOLS< EOT > &_first_ls)
 Ctor.
void add (moeoMOLS< EOT > &_ls)
 Adds a new local search to combine.
void operator() (const EOT &_eo, moeoArchive< EOT > &_arch)
 Gives a new solution in order to explore the neigborhood.

Private Attributes

+eoEvalFunc< EOT > & eval
 the full evaluator of a solution
+std::vector< moeoMOLS< EOT > * > combinedMOLS
 the vector that contains the combined MOLS
+

Detailed Description

+

template<class EOT>
+ class moeoCombinedMOLS< EOT >

+ +This class allows to embed a set of local searches that are sequentially applied, and so working and updating the same archive of non-dominated solutions. +

+ +

+Definition at line 24 of file moeoCombinedMOLS.h.


Constructor & Destructor Documentation

+ +
+
+
+template<class EOT>
+ + + + + + + + + + + + + + + + + + +
moeoCombinedMOLS< EOT >::moeoCombinedMOLS (eoEvalFunc< EOT > &  _eval,
moeoMOLS< EOT > &  _first_ls 
) [inline]
+
+
+ +

+Ctor. +

+

Parameters:
+ + + +
_eval the full evaluator of a solution
_first_ls the first multi-objective local search to add
+
+ +

+Definition at line 33 of file moeoCombinedMOLS.h. +

+References moeoCombinedMOLS< EOT >::combinedMOLS. +

+

+


Member Function Documentation

+ +
+
+
+template<class EOT>
+ + + + + + + + + +
void moeoCombinedMOLS< EOT >::add (moeoMOLS< EOT > &  _ls  )  [inline]
+
+
+ +

+Adds a new local search to combine. +

+

Parameters:
+ + +
_ls the multi-objective local search to add
+
+ +

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

+References moeoCombinedMOLS< EOT >::combinedMOLS. +

+

+ +

+
+
+template<class EOT>
+ + + + + + + + + + + + + + + + + + +
void moeoCombinedMOLS< EOT >::operator() (const EOT &  _eo,
moeoArchive< EOT > &  _arch 
) [inline]
+
+
+ +

+Gives a new solution in order to explore the neigborhood. +

+The new non-dominated solutions are added to the archive

Parameters:
+ + + +
_eo the solution
_arch the archive of non-dominated solutions
+
+ +

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

+References moeoCombinedMOLS< EOT >::combinedMOLS, and moeoCombinedMOLS< EOT >::eval. +

+

+


The documentation for this class was generated from the following file: +
Generated on Tue Dec 12 11:16:35 2006 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/trunk/paradiseo-moeo/docs/html/classmoeoCombinedMOLS.png b/trunk/paradiseo-moeo/docs/html/classmoeoCombinedMOLS.png new file mode 100644 index 0000000000000000000000000000000000000000..5ebc17cd38d2137fcd5bca96ac32713aba07f00e GIT binary patch literal 532 zcmV+v0_**WP)td@H;iYg+Yfw5fxNx%v*^QL{Iy@6|a;fTy zmQ#3@sn8x?2BR6lnfnyZU@5>e_ni;uM{pvok+X-_OyjZa>4%-yJzQQWjo>FcuZt@i zwe*=gwVau`Q;VWm-z2K;$GXl>spao1-~qo3eCnsgDZ8CJej)h%`%U4u`~6MfZ>*Mp z2Rz^b4|u=>9`JvJ(>%k3Q?4i$@Qc8K&>cwNj`JE=ViFN=DJ_TdL?lOWbi8#Kp*<6a z(aKsJmOS5zoB`f%O-OYOv*&H(XS5g^T)3+{*^O3x85~JCkj!a7wuzs~Vt}n6zyeP) z723lAA8^hcz?W?oTf-SledfM%p|9aY&*43W=;1Q4(O8(i={y~Dp7wBgp)`UII@hbq zi4G?p197lXOP{$@%Xa1uwTNCtH3+5_Zcx>tXx2B0s=Hdc&Ub2=WdRTPW#BVEEq(yj W`Ah&6jG5B_0000 + +ParadisEO-MOEO: Member List + + + + +
+
+ +

moeoContributionMetric< EOT > Member List

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

+ + + + + +
card_C(const std::vector< EOFitness > &_set1, const std::vector< EOFitness > &_set2)moeoContributionMetric< EOT > [inline, private]
card_N(const std::vector< EOFitness > &_set1, const std::vector< EOFitness > &_set2)moeoContributionMetric< EOT > [inline, private]
card_W(const std::vector< EOFitness > &_set1, const std::vector< EOFitness > &_set2)moeoContributionMetric< EOT > [inline, private]
EOFitness typedefmoeoContributionMetric< EOT >
operator()(const std::vector< EOFitness > &_set1, const std::vector< EOFitness > &_set2)moeoContributionMetric< EOT > [inline]


Generated on Tue Dec 12 11:16:35 2006 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/trunk/paradiseo-moeo/docs/html/classmoeoContributionMetric.html b/trunk/paradiseo-moeo/docs/html/classmoeoContributionMetric.html new file mode 100644 index 000000000..86d00239e --- /dev/null +++ b/trunk/paradiseo-moeo/docs/html/classmoeoContributionMetric.html @@ -0,0 +1,255 @@ + + +ParadisEO-MOEO: moeoContributionMetric< EOT > Class Template Reference + + + + +
+
+ +

moeoContributionMetric< EOT > Class Template Reference

The contribution metric evaluates the proportion of non-dominated solutions given by a Pareto set relatively to another Pareto set. +More... +

+#include <moeoContributionMetric.h> +

+

Inheritance diagram for moeoContributionMetric< EOT >: +

+ +moeoVectorVsVectorBM< EOT, double > +moeoBM< A1, A2, R > +moeoMetric + +List of all members. + + + + + + + + + + + + + + + + + + + +

Public Types

+typedef EOT::Fitness EOFitness
 The fitness type of a solution.

Public Member Functions

double operator() (const std::vector< EOFitness > &_set1, const std::vector< EOFitness > &_set2)
 Returns the contribution of the Pareto set '_set1' relatively to the Pareto set '_set2'.

Private Member Functions

unsigned card_C (const std::vector< EOFitness > &_set1, const std::vector< EOFitness > &_set2)
 Returns the number of solutions both in '_set1' and '_set2'.
unsigned card_W (const std::vector< EOFitness > &_set1, const std::vector< EOFitness > &_set2)
 Returns the number of solutions in '_set1' dominating at least one solution of '_set2'.
unsigned card_N (const std::vector< EOFitness > &_set1, const std::vector< EOFitness > &_set2)
 Returns the number of solutions in '_set1' having no relation of dominance with those from '_set2'.
+

Detailed Description

+

template<class EOT>
+ class moeoContributionMetric< EOT >

+ +The contribution metric evaluates the proportion of non-dominated solutions given by a Pareto set relatively to another Pareto set. +

+(Meunier, Talbi, Reininger: 'A multiobjective genetic algorithm for radio network optimization', in Proc. of the 2000 Congress on Evolutionary Computation, IEEE Press, pp. 317-324) +

+ +

+Definition at line 23 of file moeoContributionMetric.h.


Member Function Documentation

+ +
+
+
+template<class EOT>
+ + + + + + + + + + + + + + + + + + +
double moeoContributionMetric< EOT >::operator() (const std::vector< EOFitness > &  _set1,
const std::vector< EOFitness > &  _set2 
) [inline]
+
+
+ +

+Returns the contribution of the Pareto set '_set1' relatively to the Pareto set '_set2'. +

+

Parameters:
+ + + +
_set1 the first Pareto set
_set2 the second Pareto set
+
+ +

+Definition at line 38 of file moeoContributionMetric.h. +

+References moeoContributionMetric< EOT >::card_C(), moeoContributionMetric< EOT >::card_N(), and moeoContributionMetric< EOT >::card_W(). +

+

+ +

+
+
+template<class EOT>
+ + + + + + + + + + + + + + + + + + +
unsigned moeoContributionMetric< EOT >::card_C (const std::vector< EOFitness > &  _set1,
const std::vector< EOFitness > &  _set2 
) [inline, private]
+
+
+ +

+Returns the number of solutions both in '_set1' and '_set2'. +

+

Parameters:
+ + + +
_set1 the first Pareto set
_set2 the second Pareto set
+
+ +

+Definition at line 57 of file moeoContributionMetric.h. +

+Referenced by moeoContributionMetric< EOT >::operator()(). +

+

+ +

+
+
+template<class EOT>
+ + + + + + + + + + + + + + + + + + +
unsigned moeoContributionMetric< EOT >::card_W (const std::vector< EOFitness > &  _set1,
const std::vector< EOFitness > &  _set2 
) [inline, private]
+
+
+ +

+Returns the number of solutions in '_set1' dominating at least one solution of '_set2'. +

+

Parameters:
+ + + +
_set1 the first Pareto set
_set2 the second Pareto set
+
+ +

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

+Referenced by moeoContributionMetric< EOT >::operator()(). +

+

+ +

+
+
+template<class EOT>
+ + + + + + + + + + + + + + + + + + +
unsigned moeoContributionMetric< EOT >::card_N (const std::vector< EOFitness > &  _set1,
const std::vector< EOFitness > &  _set2 
) [inline, private]
+
+
+ +

+Returns the number of solutions in '_set1' having no relation of dominance with those from '_set2'. +

+

Parameters:
+ + + +
_set1 the first Pareto set
_set2 the second Pareto set
+
+ +

+Definition at line 95 of file moeoContributionMetric.h. +

+Referenced by moeoContributionMetric< EOT >::operator()(). +

+

+


The documentation for this class was generated from the following file: +
Generated on Tue Dec 12 11:16:35 2006 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/trunk/paradiseo-moeo/docs/html/classmoeoContributionMetric.png b/trunk/paradiseo-moeo/docs/html/classmoeoContributionMetric.png new file mode 100644 index 0000000000000000000000000000000000000000..b997e833382bd5186e7bede349ea5eae436c0d29 GIT binary patch literal 1038 zcmV+p1o8WcP)9X==xZ&GM zkY`;v5r>pw!8ez!cnC3*Aw{4C;}G&@2)J@64iWj7Tgr=&bQ`$lNIU~iaH`o>eu@LI z8Sx2lE}jRs;#hw!-u8C0ax~t|c7D*bmz5*&U5nv{8-5ag=~w6X%J-Yce=Ppzaaa8D z_`WHA-`Q@s;f5P-xZ#EyZn)uwpMqa{ap1n!WDNiHI0hPcJ-=Mj?=~=f0A7VvSKc?` zc(p%JoF-l^4t^hNGKU2mBNR;)BFy52iILg;@BnR|LU<&GfRn7&nTYZ&HNkd`1YU}IAq|x=ta6qZGy+t zW(^QIlFKKd1&r`MJ<~^&lmky(D)=ZA%(wNf^=$Mc2J|dFT3nsYSc!r6gow z85_@b`J8KhSwH8+2RZkX*?w4Ah`El%--|PkEruI@GJfe-=S%--_*~p_wfo`so$ZDj zZn)uw8*aGah8u49DL7nM2ER)W{HQp?4WI4-We;5OZhWAVXI;?)^O1No0L&xHxUVPl zN_2|L)zDYfJ?QAs3omeoRW6^6-nXbB)m z{RK{c{np@lFme|_#bLhNC;F?F4_k0Q4C9uM@J%gOZRj^?TwRBcSL&EIvwi)T*V#^= zRGRfPy9S!=F1J-?yPCL*mlZjYe$F?{_7jWYh8unoe&tu^|CdVv5KX#_r~m)}07*qo IM6N<$f~JoH%>V!Z literal 0 HcmV?d00001 diff --git a/trunk/paradiseo-moeo/docs/html/classmoeoDisctinctElitistReplacement-members.html b/trunk/paradiseo-moeo/docs/html/classmoeoDisctinctElitistReplacement-members.html new file mode 100644 index 000000000..89e74461b --- /dev/null +++ b/trunk/paradiseo-moeo/docs/html/classmoeoDisctinctElitistReplacement-members.html @@ -0,0 +1,41 @@ + + +ParadisEO-MOEO: Member List + + + + +
+
+ +

moeoDisctinctElitistReplacement< EOT, WorthT > Member List

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

+ + + + +
createNewPop(eoPop< EOT > &_pop, unsigned _size)moeoDisctinctElitistReplacement< EOT, WorthT > [inline, private]
moeoDisctinctElitistReplacement(eoPerf2Worth< EOT, WorthT > &_perf2worth)moeoDisctinctElitistReplacement< EOT, WorthT > [inline]
operator()(eoPop< EOT > &_parents, eoPop< EOT > &_offspring)moeoDisctinctElitistReplacement< EOT, WorthT > [inline]
perf2worthmoeoDisctinctElitistReplacement< EOT, WorthT > [private]


Generated on Tue Dec 12 11:16:35 2006 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/trunk/paradiseo-moeo/docs/html/classmoeoDisctinctElitistReplacement.html b/trunk/paradiseo-moeo/docs/html/classmoeoDisctinctElitistReplacement.html new file mode 100644 index 000000000..464551158 --- /dev/null +++ b/trunk/paradiseo-moeo/docs/html/classmoeoDisctinctElitistReplacement.html @@ -0,0 +1,196 @@ + + +ParadisEO-MOEO: moeoDisctinctElitistReplacement< EOT, WorthT > Class Template Reference + + + + +
+
+ +

moeoDisctinctElitistReplacement< EOT, WorthT > Class Template Reference

Same than moeoElitistReplacement except that distinct individuals are privilegied. +More... +

+#include <moeoReplacement.h> +

+

Inheritance diagram for moeoDisctinctElitistReplacement< EOT, WorthT >: +

+ +moeoReplacement< EOT, WorthT > + +List of all members. + + + + + + + + + + + + + + + + +

Public Member Functions

 moeoDisctinctElitistReplacement (eoPerf2Worth< EOT, WorthT > &_perf2worth)
 constructor
void operator() (eoPop< EOT > &_parents, eoPop< EOT > &_offspring)
 replacement - result in _parents

Private Member Functions

void createNewPop (eoPop< EOT > &_pop, unsigned _size)
 creation of the new population of size _size

Private Attributes

+eoPerf2Worth< EOT, WorthT > & perf2worth
 the functor object to transform raw fitnesses into fitness for selection
+

Detailed Description

+

template<class EOT, class WorthT = double>
+ class moeoDisctinctElitistReplacement< EOT, WorthT >

+ +Same than moeoElitistReplacement except that distinct individuals are privilegied. +

+ +

+Definition at line 78 of file moeoReplacement.h.


Constructor & Destructor Documentation

+ +
+
+
+template<class EOT, class WorthT = double>
+ + + + + + + + + +
moeoDisctinctElitistReplacement< EOT, WorthT >::moeoDisctinctElitistReplacement (eoPerf2Worth< EOT, WorthT > &  _perf2worth  )  [inline]
+
+
+ +

+constructor +

+

Parameters:
+ + +
_perf2worth the functor class to transform raw fitnesses into fitness for selection
+
+ +

+Definition at line 87 of file moeoReplacement.h. +

+

+


Member Function Documentation

+ +
+
+
+template<class EOT, class WorthT = double>
+ + + + + + + + + + + + + + + + + + +
void moeoDisctinctElitistReplacement< EOT, WorthT >::operator() (eoPop< EOT > &  _parents,
eoPop< EOT > &  _offspring 
) [inline]
+
+
+ +

+replacement - result in _parents +

+

Parameters:
+ + + +
_parents parents population
_offspring offspring population
+
+ +

+Definition at line 99 of file moeoReplacement.h. +

+References moeoDisctinctElitistReplacement< EOT, WorthT >::createNewPop(). +

+

+ +

+
+
+template<class EOT, class WorthT = double>
+ + + + + + + + + + + + + + + + + + +
void moeoDisctinctElitistReplacement< EOT, WorthT >::createNewPop (eoPop< EOT > &  _pop,
unsigned  _size 
) [inline, private]
+
+
+ +

+creation of the new population of size _size +

+

Parameters:
+ + + +
_pop the initial population (will be modified)
_size the size of the population to create
+
+ +

+Definition at line 123 of file moeoReplacement.h. +

+References moeoDisctinctElitistReplacement< EOT, WorthT >::perf2worth. +

+Referenced by moeoDisctinctElitistReplacement< EOT, WorthT >::operator()(). +

+

+


The documentation for this class was generated from the following file: +
Generated on Tue Dec 12 11:16:35 2006 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/trunk/paradiseo-moeo/docs/html/classmoeoDisctinctElitistReplacement.png b/trunk/paradiseo-moeo/docs/html/classmoeoDisctinctElitistReplacement.png new file mode 100644 index 0000000000000000000000000000000000000000..ea7436ecb2a67739cadfc270da7781048a89a399 GIT binary patch literal 848 zcmeAS@N?(olHy`uVBq!ia0y~yU{nOM16Y`WVxn%%7hy z0muU50|yRNANv0U$Ym@E@(X5gcy=R=fr06nr;B4q#hka(1B)Ij@U)#hZKr(yfSqId zcc-dXfBQFhFg5DNOuEv0NAkaCPfp7hMTMC@|MiyjzkFY%d)Flyh-^K!Fs!J2V6^)A z9KFw6DI5MTN`BTV`#|AHu*zYu&XXrf#wvgq(sYn59|+4TI{PK%di z?y=x}yI3|bC@txD%wpvwih)iiC$7@8v@ESE-hH8I-CwD%oqZFInMS={HFcNB?uxa! zy*z=-EY`Zkzh8WI?YqTiBdryxa^+>`ZFQCJo_^reflswd0(=gp=eCwzou^`T;rc>@MQWY(A5QkoIV^#ZRf*qD~vnYF}6#KPum z^K6B>8hM48S%vH_uNG$~ymv5kV0KYjKCMP8FehEh#YAn1#RbK#Dbu?q%=Q#h_u$UD z+NWWvl>c=Ko70pqrlWF!auef(;yP}a3wt)%3jUrt@2nkHs{G3ZMVZSE`Re@6@Sb8a zHT=rg^FMS2`+Ig}RV%F({9gD_G5x$HV~Ym6&;q~SUoJgcR$sg#py}SeVqMfq?`_M2 z4sUa7(+IW+P>$Vt&g>gTe~DWM4fV5f9o literal 0 HcmV?d00001 diff --git a/trunk/paradiseo-moeo/docs/html/classmoeoElitistReplacement-members.html b/trunk/paradiseo-moeo/docs/html/classmoeoElitistReplacement-members.html new file mode 100644 index 000000000..4fd2af97f --- /dev/null +++ b/trunk/paradiseo-moeo/docs/html/classmoeoElitistReplacement-members.html @@ -0,0 +1,40 @@ + + +ParadisEO-MOEO: Member List + + + + +
+
+ +

moeoElitistReplacement< EOT, WorthT > Member List

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

+ + + +
moeoElitistReplacement(eoPerf2Worth< EOT, WorthT > &_perf2worth)moeoElitistReplacement< EOT, WorthT > [inline]
operator()(eoPop< EOT > &_parents, eoPop< EOT > &_offspring)moeoElitistReplacement< EOT, WorthT > [inline]
perf2worthmoeoElitistReplacement< EOT, WorthT > [private]


Generated on Tue Dec 12 11:16:35 2006 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/trunk/paradiseo-moeo/docs/html/classmoeoElitistReplacement.html b/trunk/paradiseo-moeo/docs/html/classmoeoElitistReplacement.html new file mode 100644 index 000000000..9bba334bc --- /dev/null +++ b/trunk/paradiseo-moeo/docs/html/classmoeoElitistReplacement.html @@ -0,0 +1,147 @@ + + +ParadisEO-MOEO: moeoElitistReplacement< EOT, WorthT > Class Template Reference + + + + +
+
+ +

moeoElitistReplacement< EOT, WorthT > Class Template Reference

Keep all the best individuals (almost cut-and-pasted from eoNDPlusReplacement, (c) Maarten Keijzer, Marc Schoenauer and GeNeura Team, 2002). +More... +

+#include <moeoReplacement.h> +

+

Inheritance diagram for moeoElitistReplacement< EOT, WorthT >: +

+ +moeoReplacement< EOT, WorthT > + +List of all members. + + + + + + + + + + + + +

Public Member Functions

 moeoElitistReplacement (eoPerf2Worth< EOT, WorthT > &_perf2worth)
 constructor
void operator() (eoPop< EOT > &_parents, eoPop< EOT > &_offspring)
 replacement - result in _parents

Private Attributes

+eoPerf2Worth< EOT, WorthT > & perf2worth
 the functor object to transform raw fitnesses into fitness for selection
+

Detailed Description

+

template<class EOT, class WorthT = double>
+ class moeoElitistReplacement< EOT, WorthT >

+ +Keep all the best individuals (almost cut-and-pasted from eoNDPlusReplacement, (c) Maarten Keijzer, Marc Schoenauer and GeNeura Team, 2002). +

+ +

+Definition at line 35 of file moeoReplacement.h.


Constructor & Destructor Documentation

+ +
+
+
+template<class EOT, class WorthT = double>
+ + + + + + + + + +
moeoElitistReplacement< EOT, WorthT >::moeoElitistReplacement (eoPerf2Worth< EOT, WorthT > &  _perf2worth  )  [inline]
+
+
+ +

+constructor +

+

Parameters:
+ + +
_perf2worth the functor class to transform raw fitnesses into fitness for selection
+
+ +

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

+

+


Member Function Documentation

+ +
+
+
+template<class EOT, class WorthT = double>
+ + + + + + + + + + + + + + + + + + +
void moeoElitistReplacement< EOT, WorthT >::operator() (eoPop< EOT > &  _parents,
eoPop< EOT > &  _offspring 
) [inline]
+
+
+ +

+replacement - result in _parents +

+

Parameters:
+ + + +
_parents parents population
_offspring offspring population
+
+ +

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

+References moeoElitistReplacement< EOT, WorthT >::perf2worth. +

+

+


The documentation for this class was generated from the following file: +
Generated on Tue Dec 12 11:16:35 2006 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/trunk/paradiseo-moeo/docs/html/classmoeoElitistReplacement.png b/trunk/paradiseo-moeo/docs/html/classmoeoElitistReplacement.png new file mode 100644 index 0000000000000000000000000000000000000000..3d0dd855cd4a9c10dcec3e9a878f88f8639ea0fd GIT binary patch literal 674 zcmV;T0$u%yP)NO zAPk0K)3wA6@CiEYg|f>1k5KdkJJ?Pp$+)diQiJg?eF(|ZgztmwGki_Q*dU*toDqGx zB1x`H<&q|(3G1`_q|5?b`fiau@-A8C*@a7TjnpUSOzvfKoPm(bG|{wKR#na^V)MLzCV z?=yCJ%KJ}}Kd$E^U$2+bkaIl{OUKfM0-#3+(*O&aSRJzbMfZqRy-Ajx(f~DjORkZW963Dgmj@vO z0t5_njl3F3i!Ow6C_Iv;lEL7WOg^#1!44Ua*d>$>O!lv?%AE@_f{g4Cp+{Da@&OhK znYBt5fXDSZN2{|xw2M7AKd?H_$;ElY{~4|uFn_IuCXxZO%7jrQMP9BXyqL);iC6yH8%$x#?}KGxv5}_BL2=M`>H$lyK~Q zu5b>I908is_D6SF+?UL3FYepOyYlzt{5tZhZII7GKI~WT51J&nGRFZ$R{#J207*qo IM6N<$f*?afUH||9 literal 0 HcmV?d00001 diff --git a/trunk/paradiseo-moeo/docs/html/classmoeoEntropyMetric-members.html b/trunk/paradiseo-moeo/docs/html/classmoeoEntropyMetric-members.html new file mode 100644 index 000000000..7c9ac682f --- /dev/null +++ b/trunk/paradiseo-moeo/docs/html/classmoeoEntropyMetric-members.html @@ -0,0 +1,47 @@ + + +ParadisEO-MOEO: Member List + + + + +
+
+ +

moeoEntropyMetric< EOT > Member List

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

+ + + + + + + + + + +
computeUnion(const std::vector< EOFitness > &_f1, const std::vector< EOFitness > &_f2, std::vector< EOFitness > &_f)moeoEntropyMetric< EOT > [inline, private]
EOFitness typedefmoeoEntropyMetric< EOT >
euclidianDistance(const EOFitness &_set1, const EOFitness &_to, unsigned _deg=2)moeoEntropyMetric< EOT > [inline, private]
howManyInNicheOf(const std::vector< EOFitness > &_f, const EOFitness &_s, unsigned _size)moeoEntropyMetric< EOT > [inline, private]
normalize(std::vector< EOFitness > &_f)moeoEntropyMetric< EOT > [inline, private]
operator()(const std::vector< EOFitness > &_set1, const std::vector< EOFitness > &_set2)moeoEntropyMetric< EOT > [inline]
prenormalize(const std::vector< EOFitness > &_f)moeoEntropyMetric< EOT > [inline, private]
removeDominated(std::vector< EOFitness > &_f)moeoEntropyMetric< EOT > [inline, private]
vect_max_valmoeoEntropyMetric< EOT > [private]
vect_min_valmoeoEntropyMetric< EOT > [private]


Generated on Tue Dec 12 11:16:35 2006 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/trunk/paradiseo-moeo/docs/html/classmoeoEntropyMetric.html b/trunk/paradiseo-moeo/docs/html/classmoeoEntropyMetric.html new file mode 100644 index 000000000..ea6f72f0b --- /dev/null +++ b/trunk/paradiseo-moeo/docs/html/classmoeoEntropyMetric.html @@ -0,0 +1,142 @@ + + +ParadisEO-MOEO: moeoEntropyMetric< EOT > Class Template Reference + + + + +
+
+ +

moeoEntropyMetric< EOT > Class Template Reference

The entropy gives an idea of the diversity of a Pareto set relatively to another Pareto set. +More... +

+#include <moeoEntropyMetric.h> +

+

Inheritance diagram for moeoEntropyMetric< EOT >: +

+ +moeoVectorVsVectorBM< EOT, double > +moeoBM< A1, A2, R > +moeoMetric + +List of all members. + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Public Types

+typedef EOT::Fitness EOFitness
 The fitness type of a solution.

Public Member Functions

double operator() (const std::vector< EOFitness > &_set1, const std::vector< EOFitness > &_set2)
 Returns the entropy of the Pareto set '_set1' relatively to the Pareto set '_set2'.

Private Member Functions

+void removeDominated (std::vector< EOFitness > &_f)
+void prenormalize (const std::vector< EOFitness > &_f)
+void normalize (std::vector< EOFitness > &_f)
+void computeUnion (const std::vector< EOFitness > &_f1, const std::vector< EOFitness > &_f2, std::vector< EOFitness > &_f)
+unsigned howManyInNicheOf (const std::vector< EOFitness > &_f, const EOFitness &_s, unsigned _size)
+double euclidianDistance (const EOFitness &_set1, const EOFitness &_to, unsigned _deg=2)

Private Attributes

+std::vector< double > vect_min_val
+std::vector< double > vect_max_val
+

Detailed Description

+

template<class EOT>
+ class moeoEntropyMetric< EOT >

+ +The entropy gives an idea of the diversity of a Pareto set relatively to another Pareto set. +

+(Basseur, Seynhaeve, Talbi: 'Design of Multi-objective Evolutionary Algorithms: Application to the Flow-shop Scheduling Problem', in Proc. of the 2002 Congress on Evolutionary Computation, IEEE Press, pp. 1155-1156) +

+ +

+Definition at line 23 of file moeoEntropyMetric.h.


Member Function Documentation

+ +
+
+
+template<class EOT>
+ + + + + + + + + + + + + + + + + + +
double moeoEntropyMetric< EOT >::operator() (const std::vector< EOFitness > &  _set1,
const std::vector< EOFitness > &  _set2 
) [inline]
+
+
+ +

+Returns the entropy of the Pareto set '_set1' relatively to the Pareto set '_set2'. +

+

Parameters:
+ + + +
_set1 the first Pareto set
_set2 the second Pareto set
+
+ +

+Definition at line 38 of file moeoEntropyMetric.h. +

+References moeoEntropyMetric< EOT >::computeUnion(), moeoEntropyMetric< EOT >::howManyInNicheOf(), moeoEntropyMetric< EOT >::normalize(), moeoEntropyMetric< EOT >::prenormalize(), and moeoEntropyMetric< EOT >::removeDominated(). +

+

+


The documentation for this class was generated from the following file: +
Generated on Tue Dec 12 11:16:35 2006 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/trunk/paradiseo-moeo/docs/html/classmoeoEntropyMetric.png b/trunk/paradiseo-moeo/docs/html/classmoeoEntropyMetric.png new file mode 100644 index 0000000000000000000000000000000000000000..edf5b923a048f377c6c8c85cbb3a96c2eb9b5b48 GIT binary patch literal 1030 zcmV+h1o``kP)Jlm_4I-CzII&d-$Zsxo+nkTv-xJI2Pk&nZ4IKDu zCF*@xI1s14PZfW;yo$$|G8y|s{3JNVyc%O!*cGQ#_>@~JPqDXklA1m73{2o$^IBPp z6N#D1o#6p*xOL2+Lk|aF2^>WlwUGV}oZ)8?q-15G`hxoRF+y`c9 z?M5wkW3HVY=kYDZ+|73WoF~`2!X(3qqDJW(%=U$)k(LL0+u+`NA<_Jx-|fJGzm1>z z)%nza8a@|Cu68~Ay0aZPaNxj!0|yQqIB?*H;HRD(xb8U_;6DU+xrv=mwyGgTY0?dM zwOZn|qg>fiv$ZC8+ZHe9^=U{IlGU}z-!wi-&p4iu)%;lM_JF6} zXAP7jlFJ9-CmP{xdSwCacPxe}}S7|ILcpKvk_>kvB z%j^uVyYiUx580TH@HQgS)QcW)z3{9ghIR}KlQdA`@RU3r?aDEF-tA-D<{>?_ysx-U z4v%vWL_PE)t}UO#EpwdecKLB*uJb(Uw09k-xV+59yqWEF%;}pkceB0MB%H59qoJ+Z z8=A4nY}e1Z<(I?fy!xcao|x^sm6@1pU;Mo|bKe3S_`&$8U!70=r{QyP%KTenFMtSSLG@QK}sc)xb%p!Z?H?H%%+^kr}2`aHt(D*4TR z@2)(JHY~(L*%0!Pxed~^(B-ABJmkf^xf49EQy20J0y#XGzXtCp@bPc@RI17%i7K^0 z-elQJYNRJdc$n(kN&MC|cpf}m^tBGxBgrW6-b2f$^jVy!wtR&1Lw?lv6|CJ)x_v^Q zZ~1Kk4~BQL$+vujuWq>;bBA||*Uh%Ej=7ud>&D#8cI{h|&p?^&e007MPd7i??Q_0z zwtru=Y44Wx`1g(48Q + +ParadisEO-MOEO: Member List + + + + +
+
+ +

moeoHybridMOLS< EOT > Member List

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

+ + + + + + +
archmoeoHybridMOLS< EOT > [private]
eoHybridMOLS(eoContinue< EOT > &_term, eoSelect< EOT > &_select, moeoMOLS< EOT > &_mols, moeoArchive< EOT > &_arch)moeoHybridMOLS< EOT > [inline]
molsmoeoHybridMOLS< EOT > [private]
operator()()moeoHybridMOLS< EOT > [inline]
selectmoeoHybridMOLS< EOT > [private]
termmoeoHybridMOLS< EOT > [private]


Generated on Tue Dec 12 11:16:35 2006 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/trunk/paradiseo-moeo/docs/html/classmoeoHybridMOLS.html b/trunk/paradiseo-moeo/docs/html/classmoeoHybridMOLS.html new file mode 100644 index 000000000..7b6b860ba --- /dev/null +++ b/trunk/paradiseo-moeo/docs/html/classmoeoHybridMOLS.html @@ -0,0 +1,135 @@ + + +ParadisEO-MOEO: moeoHybridMOLS< EOT > Class Template Reference + + + + +
+
+ +

moeoHybridMOLS< EOT > Class Template Reference

This class allows to apply a multi-objective local search to a number of selected individuals contained in the archive at every generation until a stopping criteria is verified. +More... +

+#include <moeoHybridMOLS.h> +

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

Public Member Functions

 eoHybridMOLS (eoContinue< EOT > &_term, eoSelect< EOT > &_select, moeoMOLS< EOT > &_mols, moeoArchive< EOT > &_arch)
 Ctor.
+void operator() ()
 Applies the multi-objective local search to selected individuals contained in the archive if the stopping criteria is not verified.

Private Attributes

+eoContinue< EOT > & term
 stopping criteria
+eoSelect< EOT > & select
 selector
+moeoMOLS< EOT > & mols
 multi-objective local search
+moeoArchive< EOT > & arch
 archive
+


Detailed Description

+

template<class EOT>
+ class moeoHybridMOLS< EOT >

+ +This class allows to apply a multi-objective local search to a number of selected individuals contained in the archive at every generation until a stopping criteria is verified. +

+ +

+Definition at line 27 of file moeoHybridMOLS.h.


Member Function Documentation

+ +
+
+
+template<class EOT>
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
moeoHybridMOLS< EOT >::eoHybridMOLS (eoContinue< EOT > &  _term,
eoSelect< EOT > &  _select,
moeoMOLS< EOT > &  _mols,
moeoArchive< EOT > &  _arch 
) [inline]
+
+
+ +

+Ctor. +

+

Parameters:
+ + + + + +
_term stopping criteria
_select selector
_mols a multi-objective local search
_arch the archive
+
+ +

+Definition at line 38 of file moeoHybridMOLS.h. +

+

+


The documentation for this class was generated from the following file: +
Generated on Tue Dec 12 11:16:35 2006 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/trunk/paradiseo-moeo/docs/html/classmoeoMOLS.html b/trunk/paradiseo-moeo/docs/html/classmoeoMOLS.html new file mode 100644 index 000000000..c334cd782 --- /dev/null +++ b/trunk/paradiseo-moeo/docs/html/classmoeoMOLS.html @@ -0,0 +1,61 @@ + + +ParadisEO-MOEO: moeoMOLS< EOT > Class Template Reference + + + + +
+
+ +

moeoMOLS< EOT > Class Template Reference

Abstract class for local searches applied to multi-objective optimization. +More... +

+#include <moeoMOLS.h> +

+

Inheritance diagram for moeoMOLS< EOT >: +

+ +moeoCombinedMOLS< EOT > + + + +
+

Detailed Description

+

template<class EOT>
+ class moeoMOLS< EOT >

+ +Abstract class for local searches applied to multi-objective optimization. +

+Starting from only one solution, it produces a set of new non-dominated solutions. +

+ +

+Definition at line 23 of file moeoMOLS.h.


The documentation for this class was generated from the following file: +
Generated on Tue Dec 12 11:16:35 2006 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/trunk/paradiseo-moeo/docs/html/classmoeoMOLS.png b/trunk/paradiseo-moeo/docs/html/classmoeoMOLS.png new file mode 100644 index 0000000000000000000000000000000000000000..d5c9ae6819816b02489f064e74284d54d6b18eb1 GIT binary patch literal 539 zcmV+$0_6RPP)5KDQq)syfTr6xD1of%xYsRh}M3jcX{f^bp{#l>=5 zfd`!m_VC!5Ko2h5yKn*P0W$Np^A7zH94Kd`)WSnTe=K|Y!_LDVt{)UV_+aN@c5$PY zI`c*?BQtN*QqZDrsH$sP)%lQGe$O24@YBE#{k0gf%Q08{1NiOxP2rc@?M>lttQLnm z+~E#)xWgUp@PCAVj@Z{w_BDJ=hnd4q0%y>?&MRIbB{yHQT-UUsaAw)hP3Y+*EMB%r-pOKQaOJMDqt3kTT + +ParadisEO-MOEO: moeoMetric Class Reference + + + + +
+
+ +

moeoMetric Class Reference

Base class for performance metrics (also called quality indicators). +More... +

+#include <moeoMetric.h> +

+

Inheritance diagram for moeoMetric: +

+ +moeoBM< A1, A2, R > +moeoBM< const const EOFitness &, EOFitness &, R > +moeoBM< const const std::vector< EOFitness > &, EOFitness &, R > +moeoBM< const const std::vector< EOFitness > &, std::vector< EOFitness > &, R > +moeoBM< const const std::vector< typename EOT::Fitness > &, std::vector< typename EOT::Fitness > &, double > +moeoUM< A, R > +moeoUM< const EOFitness &, R > +moeoUM< const std::vector< EOFitness > &, R > + + + +
+

Detailed Description

+Base class for performance metrics (also called quality indicators). +

+ +

+Definition at line 21 of file moeoMetric.h.


The documentation for this class was generated from the following file: +
Generated on Tue Dec 12 11:16:35 2006 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/trunk/paradiseo-moeo/docs/html/classmoeoMetric.png b/trunk/paradiseo-moeo/docs/html/classmoeoMetric.png new file mode 100644 index 0000000000000000000000000000000000000000..372641f943169711de073445530c4e7bf8391c80 GIT binary patch literal 5466 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 CkFZ|= literal 0 HcmV?d00001 diff --git a/trunk/paradiseo-moeo/docs/html/classmoeoReplacement.html b/trunk/paradiseo-moeo/docs/html/classmoeoReplacement.html new file mode 100644 index 000000000..f445347a9 --- /dev/null +++ b/trunk/paradiseo-moeo/docs/html/classmoeoReplacement.html @@ -0,0 +1,60 @@ + + +ParadisEO-MOEO: moeoReplacement< EOT, WorthT > Class Template Reference + + + + +
+
+ +

moeoReplacement< EOT, WorthT > Class Template Reference

Replacement strategy for multi-objective optimization. +More... +

+#include <moeoReplacement.h> +

+

Inheritance diagram for moeoReplacement< EOT, WorthT >: +

+ +moeoDisctinctElitistReplacement< EOT, WorthT > +moeoElitistReplacement< EOT, WorthT > + + + +
+

Detailed Description

+

template<class EOT, class WorthT>
+ class moeoReplacement< EOT, WorthT >

+ +Replacement strategy for multi-objective optimization. +

+ +

+Definition at line 24 of file moeoReplacement.h.


The documentation for this class was generated from the following file: +
Generated on Tue Dec 12 11:16:35 2006 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/trunk/paradiseo-moeo/docs/html/classmoeoReplacement.png b/trunk/paradiseo-moeo/docs/html/classmoeoReplacement.png new file mode 100644 index 0000000000000000000000000000000000000000..713145545fd9ea297d0f80000e111b0bb82a4422 GIT binary patch literal 1222 zcmeAS@N?(olHy`uVBq!ia0y~yVDbU716Y`Wq~t+!OCTi?;1lBd|Nnm=^Z)+?^XDf_ z0J6aNz<~qRhyFhSav4j4{DK)Ap4~`eU|@;yba4!+nDch#+jX-Ic-p$v=H9m`pD;&y zhFRwI;w7GY|9eNgxuMq5ze`p-^ZE8{&V)(V`PCAwrk_rfT3{?Y{nkXOb7mJ-nA@+p zm-F>m`_Sj~FLUV)OrM6iK-7k-ItZ&Vf`P^A^n|%Rq(y6nF2hvJsEOy(`5VY|9g@i-dY!bx} zq7$1K1s}Y9?wk2+?yn6ljPK&u+)R!i34e0lqcQbJ;_HLex<0!6t2FGC?45;OXFi@{ za(qhZ#Pciq--|83eq_o|kE&ZK0t~8MWyc#o$Aw+CTBhr_zSHwmTA1UVX)C;AeYt&l zp6y+oS)VuStzYrwoTbsnzql1&{^n(VDzQ(g>8Vp?{w$A+zZnAflfPcL`}}#%-PG6j zWWL=~=9hZp`D^+NInST=N4|92W4tVU1?K-(XT$RABKF>Vb(Vj%dGy|&i9h8R%v;sJ znRic{%w*5&>o?2pX_1-iDu4a;O|dw~zLRS65BV1Ps9CB_21@sxR5_k9DcR_x;mjv9 ze5$g2uIrVWO>NzG&TPZ7e_Wqm=P+mEP>U*jsc=S}+>-n3Uq8$G)>^OF91moD{-peM zY17Lb@m@RG$*wS)GI@hpJTyP}b$CWIRPz5%3^-L?m9@8cr^trGe|oPh_@Qt;AV1)1 z>cN)3BHC|O%Wj;?)AsntpQ((>waa|2CN2*3DZLk}J*_zKa`)*4+mvl%t$2$P`d0d# zZ_-?{YJ0%Xy{#*^n0B%*TN}a=ykySDzRPN2pSQ>>ns0SgS9oCgr&mPQF!cf-6JL9D z&&*U&X`c$;eOqt*)%Cfwvd1xU;o^uIRyo6KnFV2j$!b1<9=m19ohJjX&^1H+)hY8PJT+Q%kQG>wmJAqGb zCI|Yyp3!kxPfgaJzpyIHR!pGC{VCG}t+)_i`kNLU?7Q;Nl7cV;U;eov0^5()ty-Pg z*m=<=$Tzc3^QE)8s7mhEsPM~7!i#sVpS7jva7vC<^6c4ZyD#4{iGF#_@a-Ajw-Qwu z`M?DG>dur`Q}dWFpSu&HEBJKp$~VqaLOE0N7ERULrX4#WRO8dG=7})}|J*Z~xacU? ziuM58lHD^_P3?QG7WFb{_a)cZ4c=j`35`nceZ9Ia9GR5=_rlu5U)s5QSLI|rmi7Mn zBl^eMdD3^2|Gb=$*JjUq+4kZ2^~<8Gq?T1b`Tx}vl0G46&W`^#^OZoWFZ==RFZr|1 XG8Y)!lfMltbQnBc{an^LB{Ts5_2WO5 literal 0 HcmV?d00001 diff --git a/trunk/paradiseo-moeo/docs/html/classmoeoSelectOneFromPopAndArch-members.html b/trunk/paradiseo-moeo/docs/html/classmoeoSelectOneFromPopAndArch-members.html new file mode 100644 index 000000000..71ba70eca --- /dev/null +++ b/trunk/paradiseo-moeo/docs/html/classmoeoSelectOneFromPopAndArch-members.html @@ -0,0 +1,46 @@ + + +ParadisEO-MOEO: Member List + + + + +
+
+ +

moeoSelectOneFromPopAndArch< EOT > Member List

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

+ + + + + + + + + +
archmoeoSelectOneFromPopAndArch< EOT > [private]
archSelectOnemoeoSelectOneFromPopAndArch< EOT > [private]
moeoSelectOneFromPopAndArch(eoSelectOne< EOT > &_popSelectOne, eoSelectOne< EOT > _archSelectOne, moeoArchive< EOT > &_arch, double _ratioFromPop=0.5)moeoSelectOneFromPopAndArch< EOT > [inline]
moeoSelectOneFromPopAndArch(eoSelectOne< EOT > &_popSelectOne, moeoArchive< EOT > &_arch, double _ratioFromPop=0.5)moeoSelectOneFromPopAndArch< EOT > [inline]
operator()(const eoPop< EOT > &pop)moeoSelectOneFromPopAndArch< EOT > [inline, virtual]
popSelectOnemoeoSelectOneFromPopAndArch< EOT > [private]
randomSelectmoeoSelectOneFromPopAndArch< EOT > [private]
ratioFromPopmoeoSelectOneFromPopAndArch< EOT > [private]
setup(const eoPop< EOT > &_pop)moeoSelectOneFromPopAndArch< EOT > [inline, virtual]


Generated on Tue Dec 12 11:16:35 2006 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/trunk/paradiseo-moeo/docs/html/classmoeoSelectOneFromPopAndArch.html b/trunk/paradiseo-moeo/docs/html/classmoeoSelectOneFromPopAndArch.html new file mode 100644 index 000000000..c1ce3ee6e --- /dev/null +++ b/trunk/paradiseo-moeo/docs/html/classmoeoSelectOneFromPopAndArch.html @@ -0,0 +1,194 @@ + + +ParadisEO-MOEO: moeoSelectOneFromPopAndArch< EOT > Class Template Reference + + + + +
+
+ +

moeoSelectOneFromPopAndArch< EOT > Class Template Reference

Elitist selection process that consists in choosing individuals in the archive as well as in the current population. +More... +

+#include <moeoSelectOneFromPopAndArch.h> +

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

Public Member Functions

 moeoSelectOneFromPopAndArch (eoSelectOne< EOT > &_popSelectOne, eoSelectOne< EOT > _archSelectOne, moeoArchive< EOT > &_arch, double _ratioFromPop=0.5)
 Ctor.
 moeoSelectOneFromPopAndArch (eoSelectOne< EOT > &_popSelectOne, moeoArchive< EOT > &_arch, double _ratioFromPop=0.5)
 Ctor - the archive's selection operator is a random selector.
+virtual const EOT & operator() (const eoPop< EOT > &pop)
 The selection process.
+virtual void setup (const eoPop< EOT > &_pop)
 Setups some population stats.

Private Attributes

+eoSelectOne< EOT > & popSelectOne
 The population's selection operator.
+eoSelectOne< EOT > & archSelectOne
 The archive's selection operator.
+moeoArchive< EOT > & arch
 the archive
+double ratioFromPop
 the ratio of selected individuals from the population
+eoRandomSelect< EOT > randomSelect
 the random selection operator
+


Detailed Description

+

template<class EOT>
+ class moeoSelectOneFromPopAndArch< EOT >

+ +Elitist selection process that consists in choosing individuals in the archive as well as in the current population. +

+ +

+Definition at line 25 of file moeoSelectOneFromPopAndArch.h.


Constructor & Destructor Documentation

+ +
+
+
+template<class EOT>
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
moeoSelectOneFromPopAndArch< EOT >::moeoSelectOneFromPopAndArch (eoSelectOne< EOT > &  _popSelectOne,
eoSelectOne< EOT >  _archSelectOne,
moeoArchive< EOT > &  _arch,
double  _ratioFromPop = 0.5 
) [inline]
+
+
+ +

+Ctor. +

+

Parameters:
+ + + + + +
_popSelectOne the population's selection operator
_archSelectOne the archive's selection operator
_arch the archive
_ratioFromPop the ratio of selected individuals from the population
+
+ +

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

+

+ +

+
+
+template<class EOT>
+ + + + + + + + + + + + + + + + + + + + + + + + +
moeoSelectOneFromPopAndArch< EOT >::moeoSelectOneFromPopAndArch (eoSelectOne< EOT > &  _popSelectOne,
moeoArchive< EOT > &  _arch,
double  _ratioFromPop = 0.5 
) [inline]
+
+
+ +

+Ctor - the archive's selection operator is a random selector. +

+

Parameters:
+ + + + +
_popSelectOne the population's selection operator
_arch the archive
_ratioFromPop the ratio of selected individuals from the population
+
+ +

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

+

+


The documentation for this class was generated from the following file: +
Generated on Tue Dec 12 11:16:35 2006 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/trunk/paradiseo-moeo/docs/html/classmoeoSolutionUM.html b/trunk/paradiseo-moeo/docs/html/classmoeoSolutionUM.html new file mode 100644 index 000000000..a7c8797c0 --- /dev/null +++ b/trunk/paradiseo-moeo/docs/html/classmoeoSolutionUM.html @@ -0,0 +1,60 @@ + + +ParadisEO-MOEO: moeoSolutionUM< EOT, R, EOFitness > Class Template Reference + + + + +
+
+ +

moeoSolutionUM< EOT, R, EOFitness > Class Template Reference

Base class for unary metrics dedicated to the performance evaluation of a single solution's Pareto fitness. +More... +

+#include <moeoMetric.h> +

+

Inheritance diagram for moeoSolutionUM< EOT, R, EOFitness >: +

+ +moeoUM< const EOFitness &, R > +moeoMetric + + + +
+

Detailed Description

+

template<class EOT, class R, class EOFitness = typename EOT::Fitness>
+ class moeoSolutionUM< EOT, R, EOFitness >

+ +Base class for unary metrics dedicated to the performance evaluation of a single solution's Pareto fitness. +

+ +

+Definition at line 47 of file moeoMetric.h.


The documentation for this class was generated from the following file: +
Generated on Tue Dec 12 11:16:35 2006 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/trunk/paradiseo-moeo/docs/html/classmoeoSolutionUM.png b/trunk/paradiseo-moeo/docs/html/classmoeoSolutionUM.png new file mode 100644 index 0000000000000000000000000000000000000000..0a82769698a4981834d8c0f5124eeb362f930625 GIT binary patch literal 813 zcmV+|1JeA7P)U_wSyhR7wBsqlA_#$n(@YhdZwBi{of z79QmT@r~fzHZZ01MsVlh);JVA%Ifk#Nv%V(`jz5f2RrzM;L~1jpOBAdlz%1o_V;4o zkK65H;0tE8gB|Q(2Rqoo4tB7E9qeG0)BZ8P-X4g9e*l!JC?;1;k=0%{W znp{fQ3&y5C2lEkA-I||+>s;c(K7!^&3jUv&0vf) zt~ZFQiT|XaR!2xn6H_qHvgk!cnyWQ3>no0F8El0-8?hJ*7?HXPF~&z=EhPz< zOInyF;7E%r){<0pwba9s`f5sES#j#XvlXXhS5tMd6SsjroxHzg+n~D?cIWAz%hc2s2#5QF05wccWJ{-JO_WO~))ed&>li<@{ zZ%=!n|BYa;JN@_I3ud*09qeESJJ`VvcCdpT>|hlnqtd`OCxj;fBu1~;1iV=z>voeZ3FdNG%)p|d^IQgVRB+AJP`%i%SS>eKLzu02(92!0u6VPn)w1Q` z!ioo&fN=`0q1c?&BmI>ax2!JDpkx^gn$`TlP{B3E(pTBWvgf#fgIHS3>gQ$jE3;8v r1g=I_el3mz?-vI<_(1SkuebjI#aKEH^Euo-00000NkvXXu0mjf)w6*g literal 0 HcmV?d00001 diff --git a/trunk/paradiseo-moeo/docs/html/classmoeoSolutionVsSolutionBM.html b/trunk/paradiseo-moeo/docs/html/classmoeoSolutionVsSolutionBM.html new file mode 100644 index 000000000..0d8d708d1 --- /dev/null +++ b/trunk/paradiseo-moeo/docs/html/classmoeoSolutionVsSolutionBM.html @@ -0,0 +1,60 @@ + + +ParadisEO-MOEO: moeoSolutionVsSolutionBM< EOT, R, EOFitness > Class Template Reference + + + + +
+
+ +

moeoSolutionVsSolutionBM< EOT, R, EOFitness > Class Template Reference

Base class for binary metrics dedicated to the performance comparison between two solutions's Pareto fitnesses. +More... +

+#include <moeoMetric.h> +

+

Inheritance diagram for moeoSolutionVsSolutionBM< EOT, R, EOFitness >: +

+ +moeoBM< A1, A2, R > +moeoMetric + + + +
+

Detailed Description

+

template<class EOT, class R, class EOFitness = typename EOT::Fitness>
+ class moeoSolutionVsSolutionBM< EOT, R, EOFitness >

+ +Base class for binary metrics dedicated to the performance comparison between two solutions's Pareto fitnesses. +

+ +

+Definition at line 70 of file moeoMetric.h.


The documentation for this class was generated from the following file: +
Generated on Tue Dec 12 11:16:35 2006 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/trunk/paradiseo-moeo/docs/html/classmoeoSolutionVsSolutionBM.png b/trunk/paradiseo-moeo/docs/html/classmoeoSolutionVsSolutionBM.png new file mode 100644 index 0000000000000000000000000000000000000000..6ba76eee3a8a8131f6811ce23d38200e63fc5f4a GIT binary patch literal 894 zcmeAS@N?(olHy`uVBq!ia0y~yVAKY(J6M>3q;KhkVjv|E;1lBd|Nnm=^Z)+?^XDf_ z0J6aNz<~qRhyFhSav4j4{DK)Ap4~`eU|<&Uba4!+nDcg)_oT-PJZ*`WvybpTV2L#r zpA~xlKSy)RghHmPVM*I(YW}U9q2MroV}X|AyYF4UO7?$hGScbg@m?&vQE30RL$9rb zwV&~XRMf92-w<@laJdsx$%=@j42Gh?O}jTJDMaXSlz51W*t=`pX_@+%r#tK31Prp;Y%5jYj)RH^L~AK?(*@@ ztO)t|_;Tf*EgIKWDdtB=NltTXTRJf@GX*QNMC;n!{~LI>zL`Iz ztu&@>=|$;?9pZbuD{s^uh>f@x$P$oWv9CF_#`_)f#3Q-+#!Gd6uMeCrx$t1snQDmy zP6sd17wQ}2KFJk%8!b4)b4y69VTSp!uBj&BL9Jgmr1ouejkx;QSgg4qCv!*Kp{z>& zIVlJJZHU?+klMcDaaHcNPkh~fkLq=0+>>Ix9%mOFoAYsL_xFB#&Ez^Eq*c0Ax zWy1%jV>Lg$Y*xq~?w+YEp72#=ecFt__4hl&Pi-&(hJ_CQBR$=&t!al2E{f<@lhNtg znsq`Nua|)VF}I6VTWd$bGs}6ZhcBJjU?P>oxPkZnpKDvL^{mbP`k_G1{`aRvsiE3Y z&MT4=5?}wfotAI+bnWq3QG2!b)l4wVn)~^;<95TQEwd9U`;{MXUTB>4=;ZGtM*mQ` zSdqh5tPXtYeZ$FJdyT2(Kwa|}(KQS=xMTxa`TAY!oVlm2uFY}%ulPV%TISfH;)xSi z1mDqC!g@uu=Ow+{QR5sCh?MB>nmTghKHy4o%D+xa6kM}FRh73}kmPEMZLxo~P4 z_hQC0@r&La@6x*e=80cyUw*TwW=4|l+NPtMOMfVBijS0SzFG8-k-JLgyl(ro1B@4r zUTd6ssO;dy8*8zW>v2Pdqs7h=~1l{3iZmmVou@#$_$Q%);R5>gTe~DWM4f{c)uq literal 0 HcmV?d00001 diff --git a/trunk/paradiseo-moeo/docs/html/classmoeoUM.html b/trunk/paradiseo-moeo/docs/html/classmoeoUM.html new file mode 100644 index 000000000..6596c5ebe --- /dev/null +++ b/trunk/paradiseo-moeo/docs/html/classmoeoUM.html @@ -0,0 +1,59 @@ + + +ParadisEO-MOEO: moeoUM< A, R > Class Template Reference + + + + +
+
+ +

moeoUM< A, R > Class Template Reference

Base class for unary metrics. +More... +

+#include <moeoMetric.h> +

+

Inheritance diagram for moeoUM< A, R >: +

+ +moeoMetric + + + +
+

Detailed Description

+

template<class A, class R>
+ class moeoUM< A, R >

+ +Base class for unary metrics. +

+ +

+Definition at line 29 of file moeoMetric.h.


The documentation for this class was generated from the following file: +
Generated on Tue Dec 12 11:16:35 2006 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/trunk/paradiseo-moeo/docs/html/classmoeoUM.png b/trunk/paradiseo-moeo/docs/html/classmoeoUM.png new file mode 100644 index 0000000000000000000000000000000000000000..df4319015b6645eb01f75101cc8e1b79e78e9bf0 GIT binary patch literal 392 zcmV;30eAk1P)#6s;_p03M^eEAf55Xj#sUEgUM5Y>oYD>m9qdYCxhJB|EcbY mwQVnmYvDaU^3MZ%e~%Zs=F9muyiK710000 + +ParadisEO-MOEO: moeoVectorUM< EOT, R, EOFitness > Class Template Reference + + + + +
+
+ +

moeoVectorUM< EOT, R, EOFitness > Class Template Reference

Base class for unary metrics dedicated to the performance evaluation of a Pareto set (a vector of Pareto fitnesses). +More... +

+#include <moeoMetric.h> +

+

Inheritance diagram for moeoVectorUM< EOT, R, EOFitness >: +

+ +moeoUM< const std::vector< EOFitness > &, R > +moeoMetric + + + +
+

Detailed Description

+

template<class EOT, class R, class EOFitness = typename EOT::Fitness>
+ class moeoVectorUM< EOT, R, EOFitness >

+ +Base class for unary metrics dedicated to the performance evaluation of a Pareto set (a vector of Pareto fitnesses). +

+ +

+Definition at line 58 of file moeoMetric.h.


The documentation for this class was generated from the following file: +
Generated on Tue Dec 12 11:16:35 2006 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/trunk/paradiseo-moeo/docs/html/classmoeoVectorUM.png b/trunk/paradiseo-moeo/docs/html/classmoeoVectorUM.png new file mode 100644 index 0000000000000000000000000000000000000000..25c458116c66534279ebd1e335fb279d76776f55 GIT binary patch literal 994 zcmeAS@N?(olHy`uVBq!ia0y~yU{nUOJ6M>3WZa?&?LbN*z$e7@|Ns9$=Kuc(=Fd-< z0AzvjfddDs5B+}vEaktG3V_p?@5mpc-qb`yWSyvfOA)x zp2_Mv|2dMsJV><8JbKo|XX?KrsXe(L6;+lCrT*SK%WivorlI5{x3(o04VIjU&b@Qh zV#x%dCGQ`l+;#6VY!xZzIv}g~mY1W@UNn&{sDVfH+rvU}P9u5t93Ka-hmu0y?p$L~ zVNl}y&9;H%(mg#7#ignfc70vd>*?Wp>>{_p4)xSK_LCJeQ#_=AmUt_j{nuA=>A9Jg z{9zs5%S|5r_M18VqWE7v{y3wz;7XH+cH4HC+O{PVu`(|@EV;SAVD6SD{LO7&w(@u` z)?PAWg;-@|Tz_e~22)wP;07P@4IlS(Xol{t`8wTWVO%|TXO&X?f0mUS+S2}Yl<54F zpYX%y#O{{M2kV(zCQO>5_1SPHm|0z12V-PFO)XBM+ zxL5dNg_f;Q{28{4AdQ2{Dl)wj`=%y4F3R4q#y7n}M^odva8Smx{gnwEs;h2pfANTK zmsiccM$J>5A0%eKo0HT+Z3(%j}kP+Fao9Z@OZ}e0Q4)%~B6_ z{f`2gtzw!}E=udiDs*lP*c0N^AuS%4CDwOl`$m<80m+@m-z8~YjnI-5uVyx#*0ke| z)wHZ*suMQZdm8nL_3<2=Q#jG*W96wGMg2C@1vtIZzDcsbc@uo>?A4DmP32#Hku;Ql zsp5R;!~~Nlq0DdPOD4amXR=@Ywd)hNl5WJ5c!A8LAIwyGc|4WDYK*Wlr8-zvpUkhj z^X3@P7@!gnk2>w^J1#xl(EmHuPk4L&4E-yP=?dl<&1ZM}F8=ND+v1%0-JSk=1x4M{ zneX5GXE*8m<%5-%^R(L^6wm)I?%}t>&!bLwe$)4yOVg`MJsuc^m^E8hK1|#vm+`Qs zF5Sp9XdZiH*_N*9G1KFUZkq~yeds;GAgxH}t4FTR!`dGKdTQP}F@}4c4mEyivF$5# zDf-R!Xv*U0b7s8XJ7r>7aOp$68FAH_+8$R++KheIC3Q}G z5!b2edd!r&Tz%TCp2LMNE(9KXXnf*&_32{I6 + +ParadisEO-MOEO: moeoVectorVsSolutionBM< EOT, R, EOFitness > Class Template Reference + + + + +
+
+ +

moeoVectorVsSolutionBM< EOT, R, EOFitness > Class Template Reference

Base class for binary metrics dedicated to the performance comparison between a Pareto set (a vector of Pareto fitnesses) and a single solution's Pareto fitness. +More... +

+#include <moeoMetric.h> +

+

Inheritance diagram for moeoVectorVsSolutionBM< EOT, R, EOFitness >: +

+ +moeoBM< A1, A2, R > +moeoMetric + + + +
+

Detailed Description

+

template<class EOT, class R, class EOFitness = typename EOT::Fitness>
+ class moeoVectorVsSolutionBM< EOT, R, EOFitness >

+ +Base class for binary metrics dedicated to the performance comparison between a Pareto set (a vector of Pareto fitnesses) and a single solution's Pareto fitness. +

+ +

+Definition at line 82 of file moeoMetric.h.


The documentation for this class was generated from the following file: +
Generated on Tue Dec 12 11:16:35 2006 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/trunk/paradiseo-moeo/docs/html/classmoeoVectorVsSolutionBM.png b/trunk/paradiseo-moeo/docs/html/classmoeoVectorVsSolutionBM.png new file mode 100644 index 0000000000000000000000000000000000000000..9b7fe2ae91c76fc98a0983c92d21cf5b638fd2e7 GIT binary patch literal 1022 zcmeAS@N?(olHy`uVBq!ia0y~yU{nFJJ6M>3bel|i?O|wt>)6Q{ z_oiI$sbA*SG>atPQY`d7pzqYQBzG zy!$6e@=m<#1n>N}OY?M|UKZW2cGrB`F3IE9mtL7GpJ^j1UoRo#kuA&Putb?m5W1aF5{!!;Ht9?^R3` z=~~A8A?(9%>xHYI{8XL7^gc`U*2ljG`#t8(v#m9%L|s$PE>*AS7L*6 zkjAQXAzP;WiVt??S6+z)G2|Wbj(*x*{_^B@rhiWq_s_29xZ`l+=Dc4McdvcJl7Pd)LSYhHV9aedt8sZ;cm>yF3Yh)Ih-y;%MAwFZOhBj=BuMO!yb$m0K@ zEVN&rMSs!aIIiP+UH0xNzTL@u)qC9}r?oMjf1d51RHWZKe}~cDQ$82=PVt|kt$Zw8 zNc^kHdJiZ4+P + +ParadisEO-MOEO: moeoVectorVsVectorBM< EOT, R, EOFitness > Class Template Reference + + + + +
+
+ +

moeoVectorVsVectorBM< EOT, R, EOFitness > Class Template Reference

Base class for binary metrics dedicated to the performance comparison between two Pareto sets (two vectors of Pareto fitnesses). +More... +

+#include <moeoMetric.h> +

+

Inheritance diagram for moeoVectorVsVectorBM< EOT, R, EOFitness >: +

+ +moeoBM< A1, A2, R > +moeoMetric + + + +
+

Detailed Description

+

template<class EOT, class R, class EOFitness = typename EOT::Fitness>
+ class moeoVectorVsVectorBM< EOT, R, EOFitness >

+ +Base class for binary metrics dedicated to the performance comparison between two Pareto sets (two vectors of Pareto fitnesses). +

+ +

+Definition at line 95 of file moeoMetric.h.


The documentation for this class was generated from the following file: +
Generated on Tue Dec 12 11:16:35 2006 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/trunk/paradiseo-moeo/docs/html/classmoeoVectorVsVectorBM.png b/trunk/paradiseo-moeo/docs/html/classmoeoVectorVsVectorBM.png new file mode 100644 index 0000000000000000000000000000000000000000..bb555bf0f6a2cb3c996db6c0d9ab219ae2d4e00c GIT binary patch literal 997 zcmeAS@N?(olHy`uVBq!ia0y~yV3Y;2J6M>3q{a*-9v~$V;1lBd|Nnm=^Z)+?^XDf_ z0J6aNz<~qRhyFhSav4j4{DK)Ap4~`eU|_EHba4!+nDcg)Z_#4~0k@-R*ADP55%xJ7 zvm$)wf5EnQY&^NHfifrMO^&Qt2oot|>Gl|85W zYn=jmr_NVAPB^x6eO+C~R>$o?*9m?emwPSzE*m1fmW&WH2%>WaXiN6JFZ# zk3Zym#sBrQ?c9ClC&zu|ob);C((T;F$%U58$28BB|8Vh}J8h2j@!0L|LVCy6rf^)( zPkZA3dq&OgdFQYF$SMDQqo(>~;puQ;lip~h*Efz_d;Vp~T>1HS_1dr9`FOuRnJm03 z_3s?fU)%goZl5kw&Ud8lYP;;NjaK?!4*kfP+s_ttd#ccOceZ_3?wQ%W{dF;tOTFe@ zr2X6Pky+>Vwp=~2@y8O&=E8^ zb75a~LUHZqtux|wp34+%FMO)?^Wmevef`>A{&q4x{!QO47p%`+-On#{QCG^se#r^_ zbt^Bli|o+zc%U+s@0!)y!}5zC|Tl;?ftJ=l)>brtMSA3WM`f<~bvhUY(Z`{6d{m$#;_jA*udj9|B jJ_%0HkKKP)KbOxB{ixIMyEYw|CmB3l{an^LB{Ts5vR2_R literal 0 HcmV?d00001 diff --git a/trunk/paradiseo-moeo/docs/html/doxygen.css b/trunk/paradiseo-moeo/docs/html/doxygen.css new file mode 100644 index 000000000..c7db1a8a0 --- /dev/null +++ b/trunk/paradiseo-moeo/docs/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; + white-space: nowrap; +} +/* 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/trunk/paradiseo-moeo/docs/html/doxygen.png b/trunk/paradiseo-moeo/docs/html/doxygen.png new file mode 100644 index 0000000000000000000000000000000000000000..f0a274bbaffdd67f6d784c894d9cf28729db0e14 GIT binary patch literal 1281 zcmaJ>ZA?>F7(Vx-ms?uoS`b@hdRtpo6o^%HU>M$hfGrBvQnk$LE?p^P!kn&ikhyq! zX~V@&tPF5Qt@V?oTL96Bi%aRiwbe1)9DWQI#?)=HxS7QSw`J`5fAJ*eJbB;uNuKA& zdERDo*{Y<(If(#(B$Lr#;nB(8Y#ia=ZCeW?JfPLuQY`=@cW$k}Rivq|vbxGrRq1Tl9;+(gNt?}UtVKM2`T5t1jLzuL@0UIs`S#vlhl4)^ zLgSYrPj@$+`|j?eSbXTmiHGkWxV8V}BzNR?pl9k_s4pDu9vd5a_UzZEPk)}Ad{AV_ zzddrjrh4=Imr`E06;LY{)YYt?o}L~H@7C}F^WB!Ra=v`Q0bj{>5&$66CWF>mf6vjP z2N>RRY6ZYa=K`76>+|_)Xdwko+7wv}7cN|btOhWb(*{sta~6b?S8Omrxw}!4`NhGr zZVpNqpu1@BE`QGWNTpEpcJVW5izu~2B^GlM?1(OPg)zwW;QcP@Ltcclm>XbJL9C|j z=9!2?ua=uIlf0%AndzHsRC}IyTL$EhAee(fdKB`?27KeS^2M8M_7b~PiCFO&r5LC7 z7gl1*a<8;SjNaw#h=843_AV9iZbWQOAp5YOC^&_F*9K0> zB|6%IDb?aM#3viTxkLU4aXg&@+CkNTOnQ1iMP*^?b|^lJy$4C)Zk4isV!|RZ*XhXh zw8q3$=*0LeGC!XI_Wc?dkT~3+*Gu%%yIqP+Wr3H$=&ROMQU6q}Ag^P~>c5vAEO;a- z_dK-3PPeKar%)6$j~vI2#*-YH!1h6HYVtwCX5_wM`iF#UKz&&@9Oo5w3%XGYrX zW>dY~)SG-((Yim%`InwgTvyRC?e=Wh^8KCao!R6Eg&TpVWUY1sN~4G}V?nFnEGo-; zHZ_$eW9-GnC%^WS9b z@p;-$oH#MtC0v>Q$HX%4^JdFdO$0cbv-W)Q TtK}Eh@>>I#ipmV1>S*>q-hkC} literal 0 HcmV?d00001 diff --git a/trunk/paradiseo-moeo/docs/html/files.html b/trunk/paradiseo-moeo/docs/html/files.html new file mode 100644 index 000000000..bb65efff4 --- /dev/null +++ b/trunk/paradiseo-moeo/docs/html/files.html @@ -0,0 +1,45 @@ + + +ParadisEO-MOEO: File Index + + + + +
+
+

ParadisEO-MOEO File List

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

+

- h -

+

- i -

+

- m -

+

- n -

+

- o -

+

- p -

+

- r -

+

- s -

+

- t -

+

- u -

+

- v -

+
Generated on Tue Dec 12 11:16:35 2006 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/trunk/paradiseo-moeo/docs/html/functions_func.html b/trunk/paradiseo-moeo/docs/html/functions_func.html new file mode 100644 index 000000000..85f743834 --- /dev/null +++ b/trunk/paradiseo-moeo/docs/html/functions_func.html @@ -0,0 +1,145 @@ + + +ParadisEO-MOEO: Class Members - Functions + + + + +
+
+ + +
+ +
+ +

+  +

+

- a -

+

- c -

+

- d -

+

- e -

+

- h -

+

- m -

+

- n -

+

- o -

+

- p -

+

- r -

+

- s -

+

- u -

+
Generated on Tue Dec 12 11:16:35 2006 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/trunk/paradiseo-moeo/docs/html/functions_type.html b/trunk/paradiseo-moeo/docs/html/functions_type.html new file mode 100644 index 000000000..af94fe307 --- /dev/null +++ b/trunk/paradiseo-moeo/docs/html/functions_type.html @@ -0,0 +1,53 @@ + + +ParadisEO-MOEO: Class Members - Typedefs + + + + +
+
+ + +  +

+

+
Generated on Tue Dec 12 11:16:35 2006 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/trunk/paradiseo-moeo/docs/html/functions_vars.html b/trunk/paradiseo-moeo/docs/html/functions_vars.html new file mode 100644 index 000000000..df90f4103 --- /dev/null +++ b/trunk/paradiseo-moeo/docs/html/functions_vars.html @@ -0,0 +1,95 @@ + + +ParadisEO-MOEO: Class Members - Variables + + + + +
+
+ + +  +

+

+
Generated on Tue Dec 12 11:16:35 2006 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/trunk/paradiseo-moeo/docs/html/hierarchy.html b/trunk/paradiseo-moeo/docs/html/hierarchy.html new file mode 100644 index 000000000..8285ae01e --- /dev/null +++ b/trunk/paradiseo-moeo/docs/html/hierarchy.html @@ -0,0 +1,80 @@ + + +ParadisEO-MOEO: Hierarchical Index + + + + +
+
+ +

ParadisEO-MOEO Class Hierarchy

This inheritance list is sorted roughly, but not completely, alphabetically: +
Generated on Tue Dec 12 11:16:35 2006 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/trunk/paradiseo-moeo/docs/html/index.html b/trunk/paradiseo-moeo/docs/html/index.html new file mode 100644 index 000000000..7e73d848d --- /dev/null +++ b/trunk/paradiseo-moeo/docs/html/index.html @@ -0,0 +1,8 @@ + + +ParadisEO-MOEO + + + + + diff --git a/trunk/paradiseo-moeo/docs/html/index_8h-source.html b/trunk/paradiseo-moeo/docs/html/index_8h-source.html new file mode 100644 index 000000000..08aca4f72 --- /dev/null +++ b/trunk/paradiseo-moeo/docs/html/index_8h-source.html @@ -0,0 +1,36 @@ + + +ParadisEO-MOEO: index.h Source File + + + + +
+
+

index.h

00001 
+00048 // Local Variables:
+00049 // coding: iso-8859-1
+00050 // mode: C++
+00051 // c-file-style: "Stroustrup"
+00052 // fill-column: 80
+00053 // End:
+

Generated on Tue Dec 12 11:16:35 2006 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/trunk/paradiseo-moeo/docs/html/installdox b/trunk/paradiseo-moeo/docs/html/installdox new file mode 100755 index 000000000..9b89fe025 --- /dev/null +++ b/trunk/paradiseo-moeo/docs/html/installdox @@ -0,0 +1,117 @@ +#!/usr/bin/perl + +%subst = ( ); +$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/trunk/paradiseo-moeo/docs/html/main.html b/trunk/paradiseo-moeo/docs/html/main.html new file mode 100644 index 000000000..79ba3893f --- /dev/null +++ b/trunk/paradiseo-moeo/docs/html/main.html @@ -0,0 +1,39 @@ + + +ParadisEO-MOEO: Welcome to ParadisEO-MOEO + + + + +
+
+

Welcome to ParadisEO-MOEO

+

+

0.1

+Introduction

+ParadisEO-MOEO is a white-box object-oriented generic framework dedicated to the flexible design of evolutionary multi-objective algorithms. This paradigm-free software embeds some features and techniques for Pareto-based resolution and aims to provide a set of classes allowing to ease and speed up the development of computationally efficient programs. It is based on a clear conceptual distinction between the solution methods and the multi-objective problems they are intended to solve. This separation confers a maximum design and code reuse. ParadisEO-MOEO provides a broad range of archive-related features (such as elitism or performance metrics) and the most common Pareto-based fitness assignment strategies (MOGA, NSGA, SPEA, IBEA and more). Furthermore, parallel and distributed models as well as hybridization mechanisms can be applied to an algorithm designed within ParadisEO-MOEO using the whole version of ParadisEO.

+Tutorial

+A tutorial about a bi-objective flow-shop scheduling problem will be available soon.

+Installation

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

+Overall Design

+For an introduction to the design of ParadisEO-MOEO, you can look at the ParadisEO website.
Generated on Tue Dec 12 11:16:35 2006 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/trunk/paradiseo-moeo/docs/html/moeoArchiveFitnessSavingUpdater_8h-source.html b/trunk/paradiseo-moeo/docs/html/moeoArchiveFitnessSavingUpdater_8h-source.html new file mode 100644 index 000000000..6e69fe019 --- /dev/null +++ b/trunk/paradiseo-moeo/docs/html/moeoArchiveFitnessSavingUpdater_8h-source.html @@ -0,0 +1,86 @@ + + +ParadisEO-MOEO: moeoArchiveFitnessSavingUpdater.h Source File + + + + +
+
+

moeoArchiveFitnessSavingUpdater.h

00001 // -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+00002 
+00003 //-----------------------------------------------------------------------------
+00004 // moeoArchiveFitnessSavingUpdater.h
+00005 // (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2006
+00006 /*
+00007     This library...
+00008 
+00009     Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr
+00010  */
+00011 //-----------------------------------------------------------------------------
+00012 
+00013 #ifndef MOEOARCHIVEFITNESSSAVINGUPDATER_H_
+00014 #define MOEOARCHIVEFITNESSSAVINGUPDATER_H_
+00015 
+00016 #include <fstream>
+00017 #include <string>
+00018 #include <eoPop.h>
+00019 #include <utils/eoUpdater.h>
+00020 #include <moeoArchive.h>
+00021 
+00022 #define MAX_BUFFER_SIZE 1000
+00023 
+00027 template < class EOT > class moeoArchiveFitnessSavingUpdater:public eoUpdater
+00028 {
+00029 public:
+00030 
+00037 moeoArchiveFitnessSavingUpdater (moeoArchive < EOT > &_arch, const std::string & _filename = "Res/Arch", int _id = -1):arch (_arch), filename (_filename), id (_id),
+00038     counter
+00039     (0)
+00040   {
+00041   }
+00042 
+00046   void operator () ()
+00047   {
+00048     char buff[MAX_BUFFER_SIZE];
+00049     if (id == -1)
+00050       sprintf (buff, "%s.%u", filename.c_str (), counter++);
+00051     else
+00052       sprintf (buff, "%s.%u.%u", filename.c_str (), id, counter++);
+00053     std::ofstream f (buff);
+00054     for (unsigned i = 0; i < arch.size (); i++)
+00055       f << arch[i].fitness () << std::endl;
+00056     f.close ();
+00057   }
+00058 
+00059 
+00060 private:
+00061 
+00063   moeoArchive < EOT > &arch;
+00065   std::string filename;
+00067   int id;
+00069   unsigned counter;
+00070 
+00071 };
+00072 
+00073 #endif /*MOEOARCHIVEFITNESSSAVINGUPDATER_H_ */
+

Generated on Tue Dec 12 11:16:35 2006 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/trunk/paradiseo-moeo/docs/html/moeoArchiveUpdater_8h-source.html b/trunk/paradiseo-moeo/docs/html/moeoArchiveUpdater_8h-source.html new file mode 100644 index 000000000..cb7b608f6 --- /dev/null +++ b/trunk/paradiseo-moeo/docs/html/moeoArchiveUpdater_8h-source.html @@ -0,0 +1,72 @@ + + +ParadisEO-MOEO: moeoArchiveUpdater.h Source File + + + + +
+
+

moeoArchiveUpdater.h

00001 // -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+00002 
+00003 //-----------------------------------------------------------------------------
+00004 // moeoArchiveUpdater.h
+00005 // (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2006
+00006 /*
+00007     This library...
+00008 
+00009     Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr
+00010  */
+00011 //-----------------------------------------------------------------------------
+00012 
+00013 #ifndef MOEOARCHIVEUPDATER_H_
+00014 #define MOEOARCHIVEUPDATER_H_
+00015 
+00016 #include <eoPop.h>
+00017 #include <utils/eoUpdater.h>
+00018 #include <moeoArchive.h>
+00019 
+00023 template < class EOT > class moeoArchiveUpdater:public eoUpdater
+00024 {
+00025 public:
+00026 
+00032   moeoArchiveUpdater (moeoArchive < EOT > &_arch,
+00033                       const eoPop < EOT > &_pop):arch (_arch), pop (_pop)
+00034   {
+00035   }
+00036 
+00037 
+00041   void operator () ()
+00042   {
+00043     arch.update (pop);
+00044   }
+00045 
+00046 
+00047 private:
+00048 
+00050   moeoArchive < EOT > &arch;
+00052   const eoPop < EOT > &pop;
+00053 
+00054 };
+00055 
+00056 #endif /*MOEOARCHIVEUPDATER_H_ */
+

Generated on Tue Dec 12 11:16:35 2006 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/trunk/paradiseo-moeo/docs/html/moeoArchive_8h-source.html b/trunk/paradiseo-moeo/docs/html/moeoArchive_8h-source.html new file mode 100644 index 000000000..4ffbb4f45 --- /dev/null +++ b/trunk/paradiseo-moeo/docs/html/moeoArchive_8h-source.html @@ -0,0 +1,113 @@ + + +ParadisEO-MOEO: moeoArchive.h Source File + + + + +
+
+

moeoArchive.h

00001 // -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+00002 
+00003 //-----------------------------------------------------------------------------
+00004 // moeoArchive.h
+00005 // (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2006
+00006 /*
+00007     This library...
+00008 
+00009     Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr
+00010  */
+00011 //-----------------------------------------------------------------------------
+00012 
+00013 #ifndef MOEOARCHIVE_H_
+00014 #define MOEOARCHIVE_H_
+00015 
+00016 #include <eoPop.h>
+00017 
+00021 template < class EOT > class moeoArchive:public eoPop < EOT >
+00022 {
+00023 public:
+00024 
+00025   using std::vector < EOT >::size;
+00026   using std::vector < EOT >::operator[];
+00027   using std::vector < EOT >::back;
+00028   using std::vector < EOT >::pop_back;
+00029 
+00033   typedef typename EOT::Fitness EOFitness;
+00034 
+00039   bool dominates (const EOFitness & _fit) const
+00040   {
+00041     for (unsigned i = 0; i < size; i++)
+00042       if (operator[](i).fitness ().dominates (_fit))
+00043         return true;
+00044     return false;
+00045   }
+00046 
+00051   bool contains (const EOFitness & _fit) const
+00052   {
+00053     for (unsigned i = 0; i < size; i++)
+00054       if (operator[](i).fitness () == _fit)
+00055         return true;
+00056     return false;
+00057   }
+00058 
+00063   void update (const EOT & _eo)
+00064   {
+00065     // Removing the dominated solutions from the archive
+00066     for (unsigned j = 0; j < size ();)
+00067       {
+00068         if (_eo.fitness ().dominates (operator[](j).fitness ()))
+00069           {
+00070             operator[](j) = back ();
+00071             pop_back ();
+00072           }
+00073         else if (_eo.fitness () == operator[](j).fitness ())
+00074           {
+00075             operator[](j) = back ();
+00076             pop_back ();
+00077           }
+00078         else
+00079           j++;
+00080       }
+00081 
+00082     // Dominated ?
+00083     bool dom = false;
+00084     for (unsigned j = 0; j < size (); j++)
+00085       if (operator [](j).fitness ().dominates (_eo.fitness ()))
+00086         {
+00087           dom = true;
+00088           break;
+00089         }
+00090     if (!dom)
+00091       push_back (_eo);
+00092   }
+00093 
+00098   void update (const eoPop < EOT > &_pop)
+00099   {
+00100     for (unsigned i = 0; i < _pop.size (); i++)
+00101       update (_pop[i]);
+00102   }
+00103 
+00104 };
+00105 
+00106 #endif /*MOEOARCHIVE_H_ */
+

Generated on Tue Dec 12 11:16:35 2006 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/trunk/paradiseo-moeo/docs/html/moeoBinaryMetricSavingUpdater_8h-source.html b/trunk/paradiseo-moeo/docs/html/moeoBinaryMetricSavingUpdater_8h-source.html new file mode 100644 index 000000000..cfd08830f --- /dev/null +++ b/trunk/paradiseo-moeo/docs/html/moeoBinaryMetricSavingUpdater_8h-source.html @@ -0,0 +1,101 @@ + + +ParadisEO-MOEO: moeoBinaryMetricSavingUpdater.h Source File + + + + +
+
+

moeoBinaryMetricSavingUpdater.h

00001 // -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+00002 
+00003 //-----------------------------------------------------------------------------
+00004 // moeoBinaryMetricSavingUpdater.h
+00005 // (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2006
+00006 /*
+00007     This library...
+00008 
+00009     Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr
+00010  */
+00011 //-----------------------------------------------------------------------------
+00012 
+00013 #ifndef MOEOBINARYMETRICSAVINGUPDATER_H_
+00014 #define MOEOBINARYMETRICSAVINGUPDATER_H_
+00015 
+00016 #include <fstream>
+00017 #include <string>
+00018 #include <eoPop.h>
+00019 #include <utils/eoUpdater.h>
+00020 #include <metric/moeoMetric.h>
+00021 
+00026 template < class EOT > class moeoBinaryMetricSavingUpdater:public eoUpdater
+00027 {
+00028 public:
+00029 
+00033   typedef typename EOT::Fitness EOFitness;
+00034 
+00041   moeoBinaryMetricSavingUpdater (moeoVectorVsVectorBM < EOT, double >&_metric,
+00042                                  const eoPop < EOT > &_pop,
+00043                                  std::string _filename):metric (_metric),
+00044     pop (_pop), filename (_filename), counter (1)
+00045   {
+00046   }
+00047 
+00051   void operator () ()
+00052   {
+00053     if (pop.size ())
+00054       {
+00055         if (firstGen)
+00056           {
+00057             firstGen = false;
+00058           }
+00059         else
+00060           {
+00061             // creation of the two Pareto sets                              
+00062             std::vector < EOFitness > from;
+00063             std::vector < EOFitness > to;
+00064             for (unsigned i = 0; i < pop.size (); i++)
+00065               from.push_back (pop[i].fitness ());
+00066             for (unsigned i = 0; i < oldPop.size (); i++)
+00067               to.push_back (oldPop[i].fitness ());
+00068             // writing the result into the file
+00069             std::ofstream f (filename.c_str (), std::ios::app);
+00070             f << counter++ << ' ' << metric (from, to) << std::endl;
+00071             f.close ();
+00072           }
+00073         oldPop = pop;
+00074       }
+00075   }
+00076 
+00077 private:
+00078 
+00080   moeoVectorVsVectorBM < EOT, double >&metric;
+00082   const eoPop < EOT > &pop;
+00084   eoPop < EOT > oldPop;
+00086   std::string filename;
+00088   bool firstGen;
+00090   unsigned counter;
+00091 
+00092 };
+00093 
+00094 #endif /*MOEOBINARYMETRICSAVINGUPDATER_H_ */
+

Generated on Tue Dec 12 11:16:35 2006 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/trunk/paradiseo-moeo/docs/html/moeoCombinedMOLS_8h-source.html b/trunk/paradiseo-moeo/docs/html/moeoCombinedMOLS_8h-source.html new file mode 100644 index 000000000..8b5ab9c37 --- /dev/null +++ b/trunk/paradiseo-moeo/docs/html/moeoCombinedMOLS_8h-source.html @@ -0,0 +1,79 @@ + + +ParadisEO-MOEO: moeoCombinedMOLS.h Source File + + + + +
+
+

moeoCombinedMOLS.h

00001 // -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+00002 
+00003 //-----------------------------------------------------------------------------
+00004 // moeoCombinedMOLS.h
+00005 // (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2006
+00006 /*
+00007     This library...
+00008 
+00009     Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr
+00010  */
+00011 //-----------------------------------------------------------------------------
+00012 
+00013 #ifndef MOEOCOMBINEDMOLS_H_
+00014 #define MOEOCOMBINEDMOLS_H_
+00015 
+00016 #include <eoEvalFunc.h>
+00017 #include <moeoArchive.h>
+00018 #include <moeoMOLS.h>
+00019 
+00024 template < class EOT > class moeoCombinedMOLS:public moeoMOLS < EOT >
+00025 {
+00026 public:
+00027 
+00033 moeoCombinedMOLS (eoEvalFunc < EOT > &_eval, moeoMOLS < EOT > &_first_ls):eval
+00034     (_eval)
+00035   {
+00036     combinedMOLS.push_back (&_first_ls);
+00037   }
+00038 
+00043   void add (moeoMOLS < EOT > &_ls)
+00044   {
+00045     combinedMOLS.push_back (&_ls);
+00046   }
+00047 
+00054   void operator  () (const EOT & _eo, moeoArchive < EOT > &_arch)
+00055   {
+00056     eval (const_cast < EOT & >(_eo));
+00057     for (unsigned i = 0; i < combinedMOLS.size (); i++)
+00058       combinedMOLS[i]->operator ()(_eo, _arch);
+00059   }
+00060 
+00061 
+00062 private:
+00063 
+00065   eoEvalFunc < EOT > &eval;
+00067   std::vector < moeoMOLS < EOT > *>combinedMOLS;
+00068 
+00069 };
+00070 
+00071 #endif /*MOEOCOMBINEDMOLS_H_ */
+

Generated on Tue Dec 12 11:16:35 2006 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/trunk/paradiseo-moeo/docs/html/moeoContributionMetric_8h-source.html b/trunk/paradiseo-moeo/docs/html/moeoContributionMetric_8h-source.html new file mode 100644 index 000000000..548b4bf42 --- /dev/null +++ b/trunk/paradiseo-moeo/docs/html/moeoContributionMetric_8h-source.html @@ -0,0 +1,117 @@ + + +ParadisEO-MOEO: moeoContributionMetric.h Source File + + + + +
+
+

moeoContributionMetric.h

00001 // -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+00002 
+00003 //-----------------------------------------------------------------------------
+00004 // moeoContributionMetric.h
+00005 // (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2006
+00006 /*
+00007     This library...
+00008 
+00009     Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr
+00010  */
+00011 //-----------------------------------------------------------------------------
+00012 
+00013 #ifndef MOEOCONTRIBUTIONMETRIC_H_
+00014 #define MOEOCONTRIBUTIONMETRIC_H_
+00015 
+00016 #include <metric/moeoMetric.h>
+00017 
+00023 template < class EOT > class moeoContributionMetric:public moeoVectorVsVectorBM < EOT,
+00024   double >
+00025 {
+00026 public:
+00027 
+00031   typedef typename EOT::Fitness EOFitness;
+00032 
+00038   double operator () (const std::vector < EOFitness > &_set1,
+00039                       const std::vector < EOFitness > &_set2)
+00040   {
+00041     unsigned c = card_C (_set1, _set2);
+00042     unsigned w1 = card_W (_set1, _set2);
+00043     unsigned n1 = card_N (_set1, _set2);
+00044     unsigned w2 = card_W (_set2, _set1);
+00045     unsigned n2 = card_N (_set2, _set1);
+00046       return (double) (c / 2.0 + w1 + n1) / (c + w1 + n1 + w2 + n2);
+00047   }
+00048 
+00049 
+00050 private:
+00051 
+00057   unsigned card_C (const std::vector < EOFitness > &_set1,
+00058                    const std::vector < EOFitness > &_set2)
+00059   {
+00060     unsigned c = 0;
+00061     for (unsigned i = 0; i < _set1.size (); i++)
+00062       for (unsigned j = 0; j < _set2.size (); j++)
+00063         if (_set1[i] == _set2[j])
+00064           {
+00065             c++;
+00066             break;
+00067           }
+00068     return c;
+00069   }
+00070 
+00076   unsigned card_W (const std::vector < EOFitness > &_set1,
+00077                    const std::vector < EOFitness > &_set2)
+00078   {
+00079     unsigned w = 0;
+00080     for (unsigned i = 0; i < _set1.size (); i++)
+00081       for (unsigned j = 0; j < _set2.size (); j++)
+00082         if (_set1[i].dominates (_set2[j]))
+00083           {
+00084             w++;
+00085             break;
+00086           }
+00087     return w;
+00088   }
+00089 
+00095   unsigned card_N (const std::vector < EOFitness > &_set1,
+00096                    const std::vector < EOFitness > &_set2)
+00097   {
+00098     unsigned n = 0;
+00099     for (unsigned i = 0; i < _set1.size (); i++)
+00100       {
+00101         bool domin_rel = false;
+00102         for (unsigned j = 0; j < _set2.size (); j++)
+00103           if (_set1[i].dominates (_set2[j]) || _set2[j].dominates (_set1[i]))
+00104             {
+00105               domin_rel = true;
+00106               break;
+00107             }
+00108         if (!domin_rel)
+00109           n++;
+00110       }
+00111     return n;
+00112   }
+00113 
+00114 };
+00115 
+00116 #endif /*MOEOCONTRIBUTIONMETRIC_H_ */
+

Generated on Tue Dec 12 11:16:35 2006 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/trunk/paradiseo-moeo/docs/html/moeoEntropyMetric_8h-source.html b/trunk/paradiseo-moeo/docs/html/moeoEntropyMetric_8h-source.html new file mode 100644 index 000000000..6ba2ef629 --- /dev/null +++ b/trunk/paradiseo-moeo/docs/html/moeoEntropyMetric_8h-source.html @@ -0,0 +1,195 @@ + + +ParadisEO-MOEO: moeoEntropyMetric.h Source File + + + + +
+
+

moeoEntropyMetric.h

00001 // -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+00002 
+00003 //-----------------------------------------------------------------------------
+00004 // moeoEntropyMetric.h
+00005 // (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2006
+00006 /*
+00007     This library...
+00008 
+00009     Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr
+00010  */
+00011 //-----------------------------------------------------------------------------
+00012 
+00013 #ifndef MOEOENTROPYMETRIC_H_
+00014 #define MOEOENTROPYMETRIC_H_
+00015 
+00016 #include <metric/moeoMetric.h>
+00017 
+00023 template < class EOT > class moeoEntropyMetric:public moeoVectorVsVectorBM < EOT,
+00024   double >
+00025 {
+00026 public:
+00027 
+00031   typedef typename EOT::Fitness EOFitness;
+00032 
+00038   double operator () (const std::vector < EOFitness > &_set1,
+00039                       const std::vector < EOFitness > &_set2)
+00040   {
+00041     // normalization
+00042     std::vector < EOFitness > set1 = _set1;
+00043     std::vector < EOFitness > set2 = _set2;
+00044     removeDominated (set1);
+00045     removeDominated (set2);
+00046     prenormalize (set1);
+00047     normalize (set1);
+00048     normalize (set2);
+00049 
+00050     // making of PO*
+00051     std::vector < EOFitness > star;     // rotf :-)
+00052     computeUnion (set1, set2, star);
+00053     removeDominated (star);
+00054 
+00055     // making of PO1 U PO*
+00056     std::vector < EOFitness > union_set1_star;  // rotf again ...
+00057     computeUnion (set1, star, union_set1_star);
+00058 
+00059     unsigned C = union_set1_star.size ();
+00060     float omega = 0;
+00061     float entropy = 0;
+00062 
+00063     for (unsigned i = 0; i < C; i++)
+00064       {
+00065         unsigned N_i =
+00066           howManyInNicheOf (union_set1_star, union_set1_star[i],
+00067                             star.size ());
+00068         unsigned n_i =
+00069           howManyInNicheOf (set1, union_set1_star[i], star.size ());
+00070         if (n_i > 0)
+00071           {
+00072             omega += 1.0 / N_i;
+00073             entropy +=
+00074               (float) n_i / (N_i * C) * log (((float) n_i / C) / log (2.0));
+00075           }
+00076       }
+00077     entropy /= -log (omega);
+00078     entropy *= log (2.0);
+00079     return entropy;
+00080   }
+00081 
+00082 
+00083 private:
+00084 
+00085   std::vector < double >vect_min_val;
+00086   std::vector < double >vect_max_val;
+00087 
+00088   void removeDominated (std::vector < EOFitness > &_f)
+00089   {
+00090     for (unsigned i = 0; i < _f.size (); i++)
+00091       {
+00092         bool dom = false;
+00093         for (unsigned j = 0; j < _f.size (); j++)
+00094           if (i != j && _f[j].dominates (_f[i]))
+00095             {
+00096               dom = true;
+00097               break;
+00098             }
+00099         if (dom)
+00100           {
+00101             _f[i] = _f.back ();
+00102             _f.pop_back ();
+00103             i--;
+00104           }
+00105       }
+00106   }
+00107 
+00108   void prenormalize (const std::vector < EOFitness > &_f)
+00109   {
+00110     vect_min_val.clear ();
+00111     vect_max_val.clear ();
+00112 
+00113     for (unsigned char i = 0; i < EOFitness::fitness_traits::nObjectives ();
+00114          i++)
+00115       {
+00116         float min_val = _f.front ()[i], max_val = min_val;
+00117         for (unsigned j = 1; j < _f.size (); j++)
+00118           {
+00119             if (_f[j][i] < min_val)
+00120               min_val = _f[j][i];
+00121             if (_f[j][i] > max_val)
+00122               max_val = _f[j][i];
+00123           }
+00124         vect_min_val.push_back (min_val);
+00125         vect_max_val.push_back (max_val);
+00126       }
+00127   }
+00128 
+00129   void normalize (std::vector < EOFitness > &_f)
+00130   {
+00131     for (unsigned i = 0; i < EOFitness::fitness_traits::nObjectives (); i++)
+00132       for (unsigned j = 0; j < _f.size (); j++)
+00133         _f[j][i] =
+00134           (_f[j][i] - vect_min_val[i]) / (vect_max_val[i] - vect_min_val[i]);
+00135   }
+00136 
+00137   void computeUnion (const std::vector < EOFitness > &_f1,
+00138                      const std::vector < EOFitness > &_f2,
+00139                      std::vector < EOFitness > &_f)
+00140   {
+00141     _f = _f1;
+00142     for (unsigned i = 0; i < _f2.size (); i++)
+00143       {
+00144         bool b = false;
+00145         for (unsigned j = 0; j < _f1.size (); j++)
+00146           if (_f1[j] == _f2[i])
+00147             {
+00148               b = true;
+00149               break;
+00150             }
+00151         if (!b)
+00152           _f.push_back (_f2[i]);
+00153       }
+00154   }
+00155 
+00156   unsigned howManyInNicheOf (const std::vector < EOFitness > &_f,
+00157                              const EOFitness & _s, unsigned _size)
+00158   {
+00159     unsigned n = 0;
+00160     for (unsigned i = 0; i < _f.size (); i++)
+00161       {
+00162         if (euclidianDistance (_f[i], _s) < (_s.size () / (double) _size))
+00163           n++;
+00164       }
+00165     return n;
+00166   }
+00167 
+00168   double euclidianDistance (const EOFitness & _set1, const EOFitness & _to,
+00169                             unsigned _deg = 2)
+00170   {
+00171     double dist = 0;
+00172     for (unsigned i = 0; i < _set1.size (); i++)
+00173       dist += pow (fabs (_set1[i] - _to[i]), (int) _deg);
+00174     return pow (dist, 1.0 / _deg);
+00175   }
+00176 
+00177 };
+00178 
+00179 #endif /*MOEOENTROPYMETRIC_H_ */
+

Generated on Tue Dec 12 11:16:35 2006 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/trunk/paradiseo-moeo/docs/html/moeoHybridMOLS_8h-source.html b/trunk/paradiseo-moeo/docs/html/moeoHybridMOLS_8h-source.html new file mode 100644 index 000000000..13c4ec57c --- /dev/null +++ b/trunk/paradiseo-moeo/docs/html/moeoHybridMOLS_8h-source.html @@ -0,0 +1,85 @@ + + +ParadisEO-MOEO: moeoHybridMOLS.h Source File + + + + +
+
+

moeoHybridMOLS.h

00001 // -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+00002 
+00003 //-----------------------------------------------------------------------------
+00004 // moeoHybridMOLS.h
+00005 // (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2006
+00006 /*
+00007     This library...
+00008 
+00009     Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr
+00010  */
+00011 //-----------------------------------------------------------------------------
+00012 
+00013 #ifndef MOEOHYBRIDMOLS_H_
+00014 #define MOEOHYBRIDMOLS_H_
+00015 
+00016 #include <eoContinue.h>
+00017 #include <eoPop.h>
+00018 #include <eoUpdater.h>
+00019 #include <eoSelect.h>
+00020 #include <moeoArchive.h>
+00021 #include <moeoMOLS.h>
+00022 
+00027 template < class EOT > class moeoHybridMOLS:public eoUpdater
+00028 {
+00029 public:
+00030 
+00038 eoHybridMOLS (eoContinue < EOT > &_term, eoSelect < EOT > &_select, moeoMOLS < EOT > &_mols, moeoArchive < EOT > &_arch):term (_term), select (_select), mols (_mols),
+00039     arch
+00040     (_arch)
+00041   {
+00042   }
+00043 
+00047   void operator  () ()
+00048   {
+00049     if (!cont (arch))
+00050       {
+00051         // selection of solutions
+00052         eoPop < EOT > selectedSolutions;
+00053         select (arch, selectedSolutions);
+00054         // apply the local search to every selected solution
+00055         for (unsigned i = 0; i < selectedSolutions.size (); i++)
+00056           mols (selectedSolutions[i], arch);
+00057       }
+00058   }
+00059 
+00060 
+00061 private:
+00062 
+00064   eoContinue < EOT > &term;
+00066   eoSelect < EOT > &select;
+00068   moeoMOLS < EOT > &mols;
+00070   moeoArchive < EOT > &arch;
+00071 
+00072 };
+00073 
+00074 #endif /*MOEOHYBRIDMOLS_H_ */
+

Generated on Tue Dec 12 11:16:35 2006 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/trunk/paradiseo-moeo/docs/html/moeoMOLS_8h-source.html b/trunk/paradiseo-moeo/docs/html/moeoMOLS_8h-source.html new file mode 100644 index 000000000..59c624f47 --- /dev/null +++ b/trunk/paradiseo-moeo/docs/html/moeoMOLS_8h-source.html @@ -0,0 +1,53 @@ + + +ParadisEO-MOEO: moeoMOLS.h Source File + + + + +
+
+

moeoMOLS.h

00001 // -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+00002 
+00003 //-----------------------------------------------------------------------------
+00004 // moeoMOLS.h
+00005 // (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2006
+00006 /*
+00007     This library...
+00008 
+00009     Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr
+00010  */
+00011 //-----------------------------------------------------------------------------
+00012 
+00013 #ifndef MOEOMOLS_H_
+00014 #define MOEOMOLS_H_
+00015 
+00016 #include <eoFunctor.h>
+00017 #include <moeoArchive.h>
+00018 
+00023 template < class EOT > class moeoMOLS:public eoBF < const EOT &, moeoArchive < EOT > &,
+00024   void >
+00025 {
+00026 };
+00027 
+00028 #endif /*MOEOMOLS_H_ */
+

Generated on Tue Dec 12 11:16:35 2006 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/trunk/paradiseo-moeo/docs/html/moeoMetric_8h-source.html b/trunk/paradiseo-moeo/docs/html/moeoMetric_8h-source.html new file mode 100644 index 000000000..44515a48b --- /dev/null +++ b/trunk/paradiseo-moeo/docs/html/moeoMetric_8h-source.html @@ -0,0 +1,111 @@ + + +ParadisEO-MOEO: moeoMetric.h Source File + + + + +
+
+

moeoMetric.h

00001 // -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+00002 
+00003 //-----------------------------------------------------------------------------
+00004 // moeoMetric.h
+00005 // (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2006
+00006 /*
+00007     This library...
+00008 
+00009     Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr
+00010  */
+00011 //-----------------------------------------------------------------------------
+00012 
+00013 #ifndef MOEOMETRIC_H_
+00014 #define MOEOMETRIC_H_
+00015 
+00016 #include <eoFunctor.h>
+00017 
+00021 class moeoMetric:public eoFunctorBase
+00022 {
+00023 };
+00024 
+00025 
+00029 template < class A, class R > class moeoUM:public eoUF < A, R >,
+00030   public moeoMetric
+00031 {
+00032 };
+00033 
+00034 
+00038 template < class A1, class A2, class R > class moeoBM:public eoBF < A1, A2, R >,
+00039   public moeoMetric
+00040 {
+00041 };
+00042 
+00043 
+00047 template < class EOT, class R, class EOFitness = typename EOT::Fitness > class moeoSolutionUM:public moeoUM <
+00048   const
+00049   EOFitness &,
+00050   R >
+00051 {
+00052 };
+00053 
+00054 
+00058 template < class EOT, class R, class EOFitness = typename EOT::Fitness > class moeoVectorUM:public moeoUM <
+00059   const
+00060   std::vector <
+00061 EOFitness > &,
+00062   R >
+00063 {
+00064 };
+00065 
+00066 
+00070 template < class EOT, class R, class EOFitness = typename EOT::Fitness > class moeoSolutionVsSolutionBM:public moeoBM <
+00071   const
+00072   EOFitness &, const
+00073   EOFitness &,
+00074   R >
+00075 {
+00076 };
+00077 
+00078 
+00082 template < class EOT, class R, class EOFitness = typename EOT::Fitness > class moeoVectorVsSolutionBM:public moeoBM <
+00083   const
+00084   std::vector <
+00085 EOFitness > &, const
+00086   EOFitness &,
+00087   R >
+00088 {
+00089 };
+00090 
+00091 
+00095 template < class EOT, class R, class EOFitness = typename EOT::Fitness > class moeoVectorVsVectorBM:public moeoBM <
+00096   const
+00097   std::vector <
+00098 EOFitness > &, const
+00099   std::vector <
+00100 EOFitness > &,
+00101   R >
+00102 {
+00103 };
+00104 
+00105 
+00106 #endif /*MOEOMETRIC_H_ */
+

Generated on Tue Dec 12 11:16:35 2006 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/trunk/paradiseo-moeo/docs/html/moeoReplacement_8h-source.html b/trunk/paradiseo-moeo/docs/html/moeoReplacement_8h-source.html new file mode 100644 index 000000000..a08ed4aca --- /dev/null +++ b/trunk/paradiseo-moeo/docs/html/moeoReplacement_8h-source.html @@ -0,0 +1,163 @@ + + +ParadisEO-MOEO: moeoReplacement.h Source File + + + + +
+
+

moeoReplacement.h

00001 // -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+00002 
+00003 //-----------------------------------------------------------------------------
+00004 // moeoReplacement.h
+00005 // (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2006
+00006 /*
+00007     This library...
+00008 
+00009     Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr
+00010  */
+00011 //-----------------------------------------------------------------------------
+00012 
+00013 #ifndef MOEOREPLACEMENT_H_
+00014 #define MOEOREPLACEMENT_H_
+00015 
+00016 #include <eoPerf2Worth.h>
+00017 #include <eoPop.h>
+00018 #include <eoReplacement.h>
+00019 
+00020 
+00024 template < class EOT, class WorthT > class moeoReplacement:public eoReplacement <
+00025   EOT >
+00026 {
+00027 };
+00028 
+00029 
+00034 template < class EOT, class WorthT =
+00035   double >class moeoElitistReplacement:public moeoReplacement < EOT, WorthT >
+00036 {
+00037 public:
+00038 
+00043   moeoElitistReplacement (eoPerf2Worth < EOT,
+00044                           WorthT > &_perf2worth):perf2worth (_perf2worth)
+00045   {
+00046   }
+00047 
+00048 
+00054   void operator () (eoPop < EOT > &_parents, eoPop < EOT > &_offspring)
+00055   {
+00056     unsigned size = _parents.size ();
+00057     _parents.reserve (_parents.size () + _offspring.size ());
+00058     copy (_offspring.begin (), _offspring.end (), back_inserter (_parents));
+00059 
+00060     // calculate worths
+00061     perf2worth (_parents);
+00062     perf2worth.sort_pop (_parents);
+00063     perf2worth.resize (_parents, size);
+00064 
+00065     _offspring.clear ();
+00066   }
+00067 
+00068 private:
+00070   eoPerf2Worth < EOT, WorthT > &perf2worth;
+00071 };
+00072 
+00073 
+00077 template < class EOT, class WorthT =
+00078   double >class moeoDisctinctElitistReplacement:public moeoReplacement < EOT,
+00079   WorthT >
+00080 {
+00081 public:
+00082 
+00087   moeoDisctinctElitistReplacement (eoPerf2Worth < EOT,
+00088                                    WorthT >
+00089                                    &_perf2worth):perf2worth (_perf2worth)
+00090   {
+00091   }
+00092 
+00093 
+00099   void operator () (eoPop < EOT > &_parents, eoPop < EOT > &_offspring)
+00100   {
+00101     unsigned size = _parents.size ();
+00102     _parents.reserve (_parents.size () + _offspring.size ());
+00103     copy (_offspring.begin (), _offspring.end (), back_inserter (_parents));
+00104 
+00105     // creation of the new population (of size 'size')
+00106     createNewPop (_parents, size);
+00107 
+00108     _offspring.clear ();
+00109   }
+00110 
+00111 
+00112 private:
+00113 
+00115   eoPerf2Worth < EOT, WorthT > &perf2worth;
+00116 
+00117 
+00123   void createNewPop (eoPop < EOT > &_pop, unsigned _size)
+00124   {
+00125     // the number of occurences for each individual
+00126     std::map < EOT, unsigned >nb_occurences;
+00127     for (unsigned i = 0; i < _pop.size (); i++)
+00128       nb_occurences[_pop[i]] = 0;
+00129     // the new population
+00130     eoPop < EOT > new_pop;
+00131     new_pop.reserve (_pop.size ());
+00132     for (unsigned i = 0; i < _pop.size (); i++)
+00133       {
+00134         if (nb_occurences[_pop[i]] == 0)
+00135           new_pop.push_back (_pop[i]);
+00136         nb_occurences[_pop[i]]++;
+00137       }
+00138 
+00139     // calculate worths (on the new population)
+00140     perf2worth (new_pop);
+00141     perf2worth.sort_pop (new_pop);
+00142 
+00143     // if case there's not enough individuals in the population...
+00144     unsigned new_pop_size_init = new_pop.size ();
+00145     unsigned k = 0;
+00146     while (new_pop.size () < _size)
+00147       {
+00148         if (k < new_pop_size_init)
+00149           {
+00150             if (nb_occurences[new_pop[k]] > 1)
+00151               {
+00152                 new_pop.push_back (new_pop[k]);
+00153                 nb_occurences[new_pop[k]]--;
+00154               }
+00155             k++;
+00156           }
+00157         else
+00158           k = 0;
+00159       }
+00160 
+00161     // resize and swap the populations
+00162     perf2worth.resize (new_pop, _size);
+00163     _pop.resize (_size);
+00164     _pop.swap (new_pop);
+00165   }
+00166 
+00167 };
+00168 
+00169 #endif /*MOEOREPLACEMENT_H_ */
+

Generated on Tue Dec 12 11:16:35 2006 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/trunk/paradiseo-moeo/docs/html/moeoSelectOneFromPopAndArch_8h-source.html b/trunk/paradiseo-moeo/docs/html/moeoSelectOneFromPopAndArch_8h-source.html new file mode 100644 index 000000000..32ec70e17 --- /dev/null +++ b/trunk/paradiseo-moeo/docs/html/moeoSelectOneFromPopAndArch_8h-source.html @@ -0,0 +1,95 @@ + + +ParadisEO-MOEO: moeoSelectOneFromPopAndArch.h Source File + + + + +
+
+

moeoSelectOneFromPopAndArch.h

00001 // -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+00002 
+00003 //-----------------------------------------------------------------------------
+00004 // moeoSelectOneFormPopAndArch.h
+00005 // (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2006
+00006 /*
+00007     This library...
+00008 
+00009     Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr
+00010  */
+00011 //-----------------------------------------------------------------------------
+00012 
+00013 #ifndef MOEOSELECTONEFROMPOPANDARCH_H_
+00014 #define MOEOSELECTONEFROMPOPANDARCH_H_
+00015 
+00016 #include <eoPop.h>
+00017 #include <eoRandomSelect.h>
+00018 #include <eoSelectOne.h>
+00019 #include <utils/eoRNG.h>
+00020 #include <moeoArchive.h>
+00021 
+00025 template < class EOT > class moeoSelectOneFromPopAndArch:public eoSelectOne <
+00026   EOT >
+00027 {
+00028 public:
+00029 
+00037 moeoSelectOneFromPopAndArch (eoSelectOne < EOT > &_popSelectOne, eoSelectOne < EOT > _archSelectOne, moeoArchive < EOT > &_arch, double _ratioFromPop = 0.5):popSelectOne (_popSelectOne), archSelectOne (_archSelectOne), arch (_arch),
+00038     ratioFromPop
+00039     (_ratioFromPop)
+00040   {
+00041   }
+00042 
+00049 moeoSelectOneFromPopAndArch (eoSelectOne < EOT > &_popSelectOne, moeoArchive < EOT > &_arch, double _ratioFromPop = 0.5):popSelectOne (_popSelectOne), archSelectOne (randomSelect), arch (_arch),
+00050     ratioFromPop
+00051     (_ratioFromPop)
+00052   {
+00053   }
+00054 
+00058   virtual const EOT & operator  () (const eoPop < EOT > &pop)
+00059   {
+00060     if (arch.size () > 0)
+00061       if (rng.flip (ratioFromPop))
+00062         return popSelectOne (pop);
+00063       else
+00064         return archSelectOne (arch);
+00065     else
+00066       return popSelectOne (pop);
+00067   }
+00068 
+00072   virtual void setup (const eoPop < EOT > &_pop)
+00073   {
+00074     popSelectOne.setup (_pop);
+00075   }
+00076 
+00077 
+00078 private:
+00079 
+00081   eoSelectOne < EOT > &popSelectOne;
+00083   eoSelectOne < EOT > &archSelectOne;
+00085   moeoArchive < EOT > &arch;
+00087   double ratioFromPop;
+00089   eoRandomSelect < EOT > randomSelect;
+00090 
+00091 };
+00092 
+00093 #endif /*MOEOSELECTONEFROMPOPANDARCH_H_ */
+

Generated on Tue Dec 12 11:16:35 2006 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/trunk/paradiseo-moeo/docs/html/moeo_8h-source.html b/trunk/paradiseo-moeo/docs/html/moeo_8h-source.html new file mode 100644 index 000000000..ad8fe5b4c --- /dev/null +++ b/trunk/paradiseo-moeo/docs/html/moeo_8h-source.html @@ -0,0 +1,60 @@ + + +ParadisEO-MOEO: moeo.h Source File + + + + +
+
+

moeo.h

00001 // -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+00002 
+00003 //-----------------------------------------------------------------------------
+00004 // moeo.h
+00005 // (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2006
+00006 /*
+00007     This library...
+00008 
+00009     Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr
+00010  */
+00011 //-----------------------------------------------------------------------------
+00012 
+00013 #ifndef MOEO_H_
+00014 #define MOEO_H_
+00015 
+00016 #include <eo>
+00017 
+00018 #include <moeoArchiveFitnessSavingUpdater.h>
+00019 #include <moeoArchiveUpdater.h>
+00020 #include <moeoArchive.h>
+00021 #include <moeoCombinedMOLS.h>
+00022 #include <moeoHybridMOLS.h>
+00023 #include <moeoMOLS.h>
+00024 #include <moeoReplacement.h>
+00025 #include <moeoSelectOneFromPopAndArch.h>
+00026 #include <metric/moeoBinaryMetricSavingUpdater.h>
+00027 #include <metric/moeoContributionMetric.h>
+00028 #include <metric/moeoEntropyMetric.h>
+00029 #include <metric/moeoMetric.h>
+00030 
+00031 #endif /*MOEO_H_ */
+

Generated on Tue Dec 12 11:16:35 2006 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/trunk/paradiseo-moeo/docs/html/pages.html b/trunk/paradiseo-moeo/docs/html/pages.html new file mode 100644 index 000000000..7b9f41ff6 --- /dev/null +++ b/trunk/paradiseo-moeo/docs/html/pages.html @@ -0,0 +1,33 @@ + + +ParadisEO-MOEO: Page Index + + + + +
+
+

ParadisEO-MOEO Related Pages

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

".search_results()."

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

ParadisEO-MOEO

+
+

o*Welcome to ParadisEO-MOEO

+

o+Class List

+ +

o+Class Hierarchy

+ +

o*Class Members

+

o+File List

+
+

|o*index.h

+

|o*moeo.h

+

|o*moeoArchive.h

+

|o*moeoArchiveFitnessSavingUpdater.h

+

|o*moeoArchiveUpdater.h

+

|o*moeoBinaryMetricSavingUpdater.h

+

|o*moeoCombinedMOLS.h

+

|o*moeoContributionMetric.h

+

|o*moeoEntropyMetric.h

+

|o*moeoHybridMOLS.h

+

|o*moeoMetric.h

+

|o*moeoMOLS.h

+

|o*moeoReplacement.h

+

|\*moeoSelectOneFromPopAndArch.h

+
+

\+Related Pages

+ +
+
+ + diff --git a/trunk/paradiseo-moeo/docs/html/webpages.html b/trunk/paradiseo-moeo/docs/html/webpages.html new file mode 100644 index 000000000..51e8866d5 --- /dev/null +++ b/trunk/paradiseo-moeo/docs/html/webpages.html @@ -0,0 +1,31 @@ + + +ParadisEO-MOEO: Related webpages + + + + +
+
+

Related webpages

+
Generated on Tue Dec 12 11:16:35 2006 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/trunk/paradiseo-moeo/docs/index.h b/trunk/paradiseo-moeo/docs/index.h new file mode 100644 index 000000000..a8ab0ea63 --- /dev/null +++ b/trunk/paradiseo-moeo/docs/index.h @@ -0,0 +1,53 @@ +/** @mainpage Welcome to ParadisEO-MOEO + +@section intro Introduction + +ParadisEO-MOEO is a white-box object-oriented generic framework dedicated to the flexible design of evolutionary multi-objective algorithms. +This paradigm-free software embeds some features and techniques for Pareto-based resolution and +aims to provide a set of classes allowing to ease and speed up the development of computationally efficient programs. +It is based on a clear conceptual distinction between the solution methods and the multi-objective problems they are intended to solve. +This separation confers a maximum design and code reuse. +ParadisEO-MOEO provides a broad range of archive-related features (such as elitism or performance metrics) +and the most common Pareto-based fitness assignment strategies (MOGA, NSGA, SPEA, IBEA and more). +Furthermore, parallel and distributed models as well as hybridization mechanisms can be applied to an algorithm designed within ParadisEO-MOEO +using the whole version of ParadisEO. + + + +@section tutorial Tutorial + +A tutorial about a bi-objective flow-shop scheduling problem will be available soon. + + + +@section install Installation + +The installation procedure of the package is detailed in the README file in the top-directory of the source-tree. + + + +@section design Overall Design + +For an introduction to the design of ParadisEO-MOEO, +you can look at the ParadisEO website. +*/ + + + +/** @page webpages Related webpages + +- ParadisEO homepage +- INRIA GForge project page +- README +- NEWS +*/ + + + +// Local Variables: +// coding: iso-8859-1 +// mode: C++ +// c-file-style: "Stroustrup" +// fill-column: 80 +// End: diff --git a/trunk/paradiseo-moeo/docs/moeo.doxyfile b/trunk/paradiseo-moeo/docs/moeo.doxyfile new file mode 100644 index 000000000..fb44ccb41 --- /dev/null +++ b/trunk/paradiseo-moeo/docs/moeo.doxyfile @@ -0,0 +1,237 @@ +# Doxyfile 1.5.1 + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- +PROJECT_NAME = ParadisEO-MOEO +PROJECT_NUMBER = 0.1 +OUTPUT_DIRECTORY = +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 = . ../src +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 = moeo +#--------------------------------------------------------------------------- +# 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 = NO +USE_PDFLATEX = NO +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 = +GENERATE_TAGFILE = moeo.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/trunk/paradiseo-moeo/src/Makefile.am b/trunk/paradiseo-moeo/src/Makefile.am new file mode 100755 index 000000000..ae1e51b3c --- /dev/null +++ b/trunk/paradiseo-moeo/src/Makefile.am @@ -0,0 +1 @@ +# Nothing to compile ! diff --git a/trunk/paradiseo-moeo/src/metric/moeoBinaryMetricSavingUpdater.h b/trunk/paradiseo-moeo/src/metric/moeoBinaryMetricSavingUpdater.h new file mode 100644 index 000000000..01aadfaa5 --- /dev/null +++ b/trunk/paradiseo-moeo/src/metric/moeoBinaryMetricSavingUpdater.h @@ -0,0 +1,94 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +//----------------------------------------------------------------------------- +// moeoBinaryMetricSavingUpdater.h +// (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2006 +/* + This library... + + Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr + */ +//----------------------------------------------------------------------------- + +#ifndef MOEOBINARYMETRICSAVINGUPDATER_H_ +#define MOEOBINARYMETRICSAVINGUPDATER_H_ + +#include +#include +#include +#include +#include + +/** + * This class allows to save the progression of a binary metric comparing the fitness values of the current population (or archive) + * with the fitness values of the population (or archive) of the generation (n-1) into a file + */ +template < class EOT > class moeoBinaryMetricSavingUpdater:public eoUpdater +{ +public: + + /** + * The fitness type of a solution + */ + typedef typename EOT::Fitness EOFitness; + + /** + * Ctor + * @param _metric the binary metric comparing two Pareto sets + * @param _pop the main population + * @param _filename the target filename + */ + moeoBinaryMetricSavingUpdater (moeoVectorVsVectorBM < EOT, double >&_metric, + const eoPop < EOT > &_pop, + std::string _filename):metric (_metric), + pop (_pop), filename (_filename), counter (1) + { + } + + /** + * Saves the metric's value for the current generation + */ + void operator () () + { + if (pop.size ()) + { + if (firstGen) + { + firstGen = false; + } + else + { + // creation of the two Pareto sets + std::vector < EOFitness > from; + std::vector < EOFitness > to; + for (unsigned i = 0; i < pop.size (); i++) + from.push_back (pop[i].fitness ()); + for (unsigned i = 0; i < oldPop.size (); i++) + to.push_back (oldPop[i].fitness ()); + // writing the result into the file + std::ofstream f (filename.c_str (), std::ios::app); + f << counter++ << ' ' << metric (from, to) << std::endl; + f.close (); + } + oldPop = pop; + } + } + +private: + + /** binary metric comparing two Pareto sets */ + moeoVectorVsVectorBM < EOT, double >&metric; + /** main population */ + const eoPop < EOT > &pop; + /** (n-1) population */ + eoPop < EOT > oldPop; + /** target filename */ + std::string filename; + /** is it the first generation ? */ + bool firstGen; + /** counter */ + unsigned counter; + +}; + +#endif /*MOEOBINARYMETRICSAVINGUPDATER_H_ */ diff --git a/trunk/paradiseo-moeo/src/metric/moeoContributionMetric.h b/trunk/paradiseo-moeo/src/metric/moeoContributionMetric.h new file mode 100644 index 000000000..7da5702df --- /dev/null +++ b/trunk/paradiseo-moeo/src/metric/moeoContributionMetric.h @@ -0,0 +1,116 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +//----------------------------------------------------------------------------- +// moeoContributionMetric.h +// (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2006 +/* + This library... + + Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr + */ +//----------------------------------------------------------------------------- + +#ifndef MOEOCONTRIBUTIONMETRIC_H_ +#define MOEOCONTRIBUTIONMETRIC_H_ + +#include + +/** + * The contribution metric evaluates the proportion of non-dominated solutions given by a Pareto set relatively to another Pareto set + * + * (Meunier, Talbi, Reininger: 'A multiobjective genetic algorithm for radio network optimization', in Proc. of the 2000 Congress on Evolutionary Computation, IEEE Press, pp. 317-324) + */ +template < class EOT > class moeoContributionMetric:public moeoVectorVsVectorBM < EOT, + double > +{ +public: + + /** + * The fitness type of a solution + */ + typedef typename EOT::Fitness EOFitness; + + /** + * Returns the contribution of the Pareto set '_set1' relatively to the Pareto set '_set2' + * @param _set1 the first Pareto set + * @param _set2 the second Pareto set + */ + double operator () (const std::vector < EOFitness > &_set1, + const std::vector < EOFitness > &_set2) + { + unsigned c = card_C (_set1, _set2); + unsigned w1 = card_W (_set1, _set2); + unsigned n1 = card_N (_set1, _set2); + unsigned w2 = card_W (_set2, _set1); + unsigned n2 = card_N (_set2, _set1); + return (double) (c / 2.0 + w1 + n1) / (c + w1 + n1 + w2 + n2); + } + + +private: + + /** + * Returns the number of solutions both in '_set1' and '_set2' + * @param _set1 the first Pareto set + * @param _set2 the second Pareto set + */ + unsigned card_C (const std::vector < EOFitness > &_set1, + const std::vector < EOFitness > &_set2) + { + unsigned c = 0; + for (unsigned i = 0; i < _set1.size (); i++) + for (unsigned j = 0; j < _set2.size (); j++) + if (_set1[i] == _set2[j]) + { + c++; + break; + } + return c; + } + + /** + * Returns the number of solutions in '_set1' dominating at least one solution of '_set2' + * @param _set1 the first Pareto set + * @param _set2 the second Pareto set + */ + unsigned card_W (const std::vector < EOFitness > &_set1, + const std::vector < EOFitness > &_set2) + { + unsigned w = 0; + for (unsigned i = 0; i < _set1.size (); i++) + for (unsigned j = 0; j < _set2.size (); j++) + if (_set1[i].dominates (_set2[j])) + { + w++; + break; + } + return w; + } + + /** + * Returns the number of solutions in '_set1' having no relation of dominance with those from '_set2' + * @param _set1 the first Pareto set + * @param _set2 the second Pareto set + */ + unsigned card_N (const std::vector < EOFitness > &_set1, + const std::vector < EOFitness > &_set2) + { + unsigned n = 0; + for (unsigned i = 0; i < _set1.size (); i++) + { + bool domin_rel = false; + for (unsigned j = 0; j < _set2.size (); j++) + if (_set1[i].dominates (_set2[j]) || _set2[j].dominates (_set1[i])) + { + domin_rel = true; + break; + } + if (!domin_rel) + n++; + } + return n; + } + +}; + +#endif /*MOEOCONTRIBUTIONMETRIC_H_ */ diff --git a/trunk/paradiseo-moeo/src/metric/moeoEntropyMetric.h b/trunk/paradiseo-moeo/src/metric/moeoEntropyMetric.h new file mode 100644 index 000000000..e760e35f6 --- /dev/null +++ b/trunk/paradiseo-moeo/src/metric/moeoEntropyMetric.h @@ -0,0 +1,179 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +//----------------------------------------------------------------------------- +// moeoEntropyMetric.h +// (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2006 +/* + This library... + + Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr + */ +//----------------------------------------------------------------------------- + +#ifndef MOEOENTROPYMETRIC_H_ +#define MOEOENTROPYMETRIC_H_ + +#include + +/** + * The entropy gives an idea of the diversity of a Pareto set relatively to another Pareto set + * + * (Basseur, Seynhaeve, Talbi: 'Design of Multi-objective Evolutionary Algorithms: Application to the Flow-shop Scheduling Problem', in Proc. of the 2002 Congress on Evolutionary Computation, IEEE Press, pp. 1155-1156) + */ +template < class EOT > class moeoEntropyMetric:public moeoVectorVsVectorBM < EOT, + double > +{ +public: + + /** + * The fitness type of a solution + */ + typedef typename EOT::Fitness EOFitness; + + /** + * Returns the entropy of the Pareto set '_set1' relatively to the Pareto set '_set2' + * @param _set1 the first Pareto set + * @param _set2 the second Pareto set + */ + double operator () (const std::vector < EOFitness > &_set1, + const std::vector < EOFitness > &_set2) + { + // normalization + std::vector < EOFitness > set1 = _set1; + std::vector < EOFitness > set2 = _set2; + removeDominated (set1); + removeDominated (set2); + prenormalize (set1); + normalize (set1); + normalize (set2); + + // making of PO* + std::vector < EOFitness > star; // rotf :-) + computeUnion (set1, set2, star); + removeDominated (star); + + // making of PO1 U PO* + std::vector < EOFitness > union_set1_star; // rotf again ... + computeUnion (set1, star, union_set1_star); + + unsigned C = union_set1_star.size (); + float omega = 0; + float entropy = 0; + + for (unsigned i = 0; i < C; i++) + { + unsigned N_i = + howManyInNicheOf (union_set1_star, union_set1_star[i], + star.size ()); + unsigned n_i = + howManyInNicheOf (set1, union_set1_star[i], star.size ()); + if (n_i > 0) + { + omega += 1.0 / N_i; + entropy += + (float) n_i / (N_i * C) * log (((float) n_i / C) / log (2.0)); + } + } + entropy /= -log (omega); + entropy *= log (2.0); + return entropy; + } + + +private: + + std::vector < double >vect_min_val; + std::vector < double >vect_max_val; + + void removeDominated (std::vector < EOFitness > &_f) + { + for (unsigned i = 0; i < _f.size (); i++) + { + bool dom = false; + for (unsigned j = 0; j < _f.size (); j++) + if (i != j && _f[j].dominates (_f[i])) + { + dom = true; + break; + } + if (dom) + { + _f[i] = _f.back (); + _f.pop_back (); + i--; + } + } + } + + void prenormalize (const std::vector < EOFitness > &_f) + { + vect_min_val.clear (); + vect_max_val.clear (); + + for (unsigned char i = 0; i < EOFitness::fitness_traits::nObjectives (); + i++) + { + float min_val = _f.front ()[i], max_val = min_val; + for (unsigned j = 1; j < _f.size (); j++) + { + if (_f[j][i] < min_val) + min_val = _f[j][i]; + if (_f[j][i] > max_val) + max_val = _f[j][i]; + } + vect_min_val.push_back (min_val); + vect_max_val.push_back (max_val); + } + } + + void normalize (std::vector < EOFitness > &_f) + { + for (unsigned i = 0; i < EOFitness::fitness_traits::nObjectives (); i++) + for (unsigned j = 0; j < _f.size (); j++) + _f[j][i] = + (_f[j][i] - vect_min_val[i]) / (vect_max_val[i] - vect_min_val[i]); + } + + void computeUnion (const std::vector < EOFitness > &_f1, + const std::vector < EOFitness > &_f2, + std::vector < EOFitness > &_f) + { + _f = _f1; + for (unsigned i = 0; i < _f2.size (); i++) + { + bool b = false; + for (unsigned j = 0; j < _f1.size (); j++) + if (_f1[j] == _f2[i]) + { + b = true; + break; + } + if (!b) + _f.push_back (_f2[i]); + } + } + + unsigned howManyInNicheOf (const std::vector < EOFitness > &_f, + const EOFitness & _s, unsigned _size) + { + unsigned n = 0; + for (unsigned i = 0; i < _f.size (); i++) + { + if (euclidianDistance (_f[i], _s) < (_s.size () / (double) _size)) + n++; + } + return n; + } + + double euclidianDistance (const EOFitness & _set1, const EOFitness & _to, + unsigned _deg = 2) + { + double dist = 0; + for (unsigned i = 0; i < _set1.size (); i++) + dist += pow (fabs (_set1[i] - _to[i]), (int) _deg); + return pow (dist, 1.0 / _deg); + } + +}; + +#endif /*MOEOENTROPYMETRIC_H_ */ diff --git a/trunk/paradiseo-moeo/src/metric/moeoMetric.h b/trunk/paradiseo-moeo/src/metric/moeoMetric.h new file mode 100644 index 000000000..8e29440dd --- /dev/null +++ b/trunk/paradiseo-moeo/src/metric/moeoMetric.h @@ -0,0 +1,106 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +//----------------------------------------------------------------------------- +// moeoMetric.h +// (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2006 +/* + This library... + + Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr + */ +//----------------------------------------------------------------------------- + +#ifndef MOEOMETRIC_H_ +#define MOEOMETRIC_H_ + +#include + +/** + * Base class for performance metrics (also called quality indicators) + */ +class moeoMetric:public eoFunctorBase +{ +}; + + +/** + * Base class for unary metrics + */ +template < class A, class R > class moeoUM:public eoUF < A, R >, + public moeoMetric +{ +}; + + +/** + * Base class for binary metrics + */ +template < class A1, class A2, class R > class moeoBM:public eoBF < A1, A2, R >, + public moeoMetric +{ +}; + + +/** + * Base class for unary metrics dedicated to the performance evaluation of a single solution's Pareto fitness + */ +template < class EOT, class R, class EOFitness = typename EOT::Fitness > class moeoSolutionUM:public moeoUM < + const + EOFitness &, + R > +{ +}; + + +/** + * Base class for unary metrics dedicated to the performance evaluation of a Pareto set (a vector of Pareto fitnesses) + */ +template < class EOT, class R, class EOFitness = typename EOT::Fitness > class moeoVectorUM:public moeoUM < + const + std::vector < +EOFitness > &, + R > +{ +}; + + +/** + * Base class for binary metrics dedicated to the performance comparison between two solutions's Pareto fitnesses + */ +template < class EOT, class R, class EOFitness = typename EOT::Fitness > class moeoSolutionVsSolutionBM:public moeoBM < + const + EOFitness &, const + EOFitness &, + R > +{ +}; + + +/** + * Base class for binary metrics dedicated to the performance comparison between a Pareto set (a vector of Pareto fitnesses) and a single solution's Pareto fitness + */ +template < class EOT, class R, class EOFitness = typename EOT::Fitness > class moeoVectorVsSolutionBM:public moeoBM < + const + std::vector < +EOFitness > &, const + EOFitness &, + R > +{ +}; + + +/** + * Base class for binary metrics dedicated to the performance comparison between two Pareto sets (two vectors of Pareto fitnesses) + */ +template < class EOT, class R, class EOFitness = typename EOT::Fitness > class moeoVectorVsVectorBM:public moeoBM < + const + std::vector < +EOFitness > &, const + std::vector < +EOFitness > &, + R > +{ +}; + + +#endif /*MOEOMETRIC_H_ */ diff --git a/trunk/paradiseo-moeo/src/moeo b/trunk/paradiseo-moeo/src/moeo new file mode 100644 index 000000000..3bf19e773 --- /dev/null +++ b/trunk/paradiseo-moeo/src/moeo @@ -0,0 +1,18 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +//----------------------------------------------------------------------------- +// moeo +// (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2006 +/* + This library... + + Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr + */ +//----------------------------------------------------------------------------- + +#ifndef MOEO_ +#define MOEO_ + +#include + +#endif /*MOEO_H_*/ diff --git a/trunk/paradiseo-moeo/src/moeo.h b/trunk/paradiseo-moeo/src/moeo.h new file mode 100644 index 000000000..8478ee48e --- /dev/null +++ b/trunk/paradiseo-moeo/src/moeo.h @@ -0,0 +1,31 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +//----------------------------------------------------------------------------- +// moeo.h +// (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2006 +/* + This library... + + Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr + */ +//----------------------------------------------------------------------------- + +#ifndef MOEO_H_ +#define MOEO_H_ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#endif /*MOEO_H_ */ diff --git a/trunk/paradiseo-moeo/src/moeoArchive.h b/trunk/paradiseo-moeo/src/moeoArchive.h new file mode 100644 index 000000000..9547dd06e --- /dev/null +++ b/trunk/paradiseo-moeo/src/moeoArchive.h @@ -0,0 +1,106 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +//----------------------------------------------------------------------------- +// moeoArchive.h +// (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2006 +/* + This library... + + Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr + */ +//----------------------------------------------------------------------------- + +#ifndef MOEOARCHIVE_H_ +#define MOEOARCHIVE_H_ + +#include + +/** + * An archive is a secondary population that stores non-dominated solutions + */ +template < class EOT > class moeoArchive:public eoPop < EOT > +{ +public: + + using std::vector < EOT >::size; + using std::vector < EOT >::operator[]; + using std::vector < EOT >::back; + using std::vector < EOT >::pop_back; + + /** + * The fitness type of a solution + */ + typedef typename EOT::Fitness EOFitness; + + /** + * Returns true if the current archive dominates _fit + * @param _fit the (Pareto) fitness to compare with the current archive + */ + bool dominates (const EOFitness & _fit) const + { + for (unsigned i = 0; i < size; i++) + if (operator[](i).fitness ().dominates (_fit)) + return true; + return false; + } + + /** + * Returns true if the current archive contains _fit + * @param _fit the (Pareto) fitness to search within the current archive + */ + bool contains (const EOFitness & _fit) const + { + for (unsigned i = 0; i < size; i++) + if (operator[](i).fitness () == _fit) + return true; + return false; + } + + /** + * Updates the archive with a given individual _eo + * @param _eo the given individual + */ + void update (const EOT & _eo) + { + // Removing the dominated solutions from the archive + for (unsigned j = 0; j < size ();) + { + if (_eo.fitness ().dominates (operator[](j).fitness ())) + { + operator[](j) = back (); + pop_back (); + } + else if (_eo.fitness () == operator[](j).fitness ()) + { + operator[](j) = back (); + pop_back (); + } + else + j++; + } + + // Dominated ? + bool dom = false; + for (unsigned j = 0; j < size (); j++) + if (operator [](j).fitness ().dominates (_eo.fitness ())) + { + dom = true; + break; + } + if (!dom) + push_back (_eo); + } + + /** + * Updates the archive with a given population _pop + * @param _pop the given population + */ + void update (const eoPop < EOT > &_pop) + { + for (unsigned i = 0; i < _pop.size (); i++) + update (_pop[i]); + } + +}; + +#endif /*MOEOARCHIVE_H_ */ diff --git a/trunk/paradiseo-moeo/src/moeoArchiveFitnessSavingUpdater.h b/trunk/paradiseo-moeo/src/moeoArchiveFitnessSavingUpdater.h new file mode 100644 index 000000000..b1e839331 --- /dev/null +++ b/trunk/paradiseo-moeo/src/moeoArchiveFitnessSavingUpdater.h @@ -0,0 +1,73 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +//----------------------------------------------------------------------------- +// moeoArchiveFitnessSavingUpdater.h +// (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2006 +/* + This library... + + Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr + */ +//----------------------------------------------------------------------------- + +#ifndef MOEOARCHIVEFITNESSSAVINGUPDATER_H_ +#define MOEOARCHIVEFITNESSSAVINGUPDATER_H_ + +#include +#include +#include +#include +#include + +#define MAX_BUFFER_SIZE 1000 + +/** + * This class allows to save the fitnesses of solutions contained in an archive into a file at each generation. + */ +template < class EOT > class moeoArchiveFitnessSavingUpdater:public eoUpdater +{ +public: + + /** + * Ctor + * @param _arch local archive + * @param _filename target filename + * @param _id own ID + */ +moeoArchiveFitnessSavingUpdater (moeoArchive < EOT > &_arch, const std::string & _filename = "Res/Arch", int _id = -1):arch (_arch), filename (_filename), id (_id), + counter + (0) + { + } + + /** + * Saves the fitness of the archive's members into the file + */ + void operator () () + { + char buff[MAX_BUFFER_SIZE]; + if (id == -1) + sprintf (buff, "%s.%u", filename.c_str (), counter++); + else + sprintf (buff, "%s.%u.%u", filename.c_str (), id, counter++); + std::ofstream f (buff); + for (unsigned i = 0; i < arch.size (); i++) + f << arch[i].fitness () << std::endl; + f.close (); + } + + +private: + + /** local archive */ + moeoArchive < EOT > &arch; + /** target filename */ + std::string filename; + /** own ID */ + int id; + /** counter */ + unsigned counter; + +}; + +#endif /*MOEOARCHIVEFITNESSSAVINGUPDATER_H_ */ diff --git a/trunk/paradiseo-moeo/src/moeoArchiveUpdater.h b/trunk/paradiseo-moeo/src/moeoArchiveUpdater.h new file mode 100644 index 000000000..581742849 --- /dev/null +++ b/trunk/paradiseo-moeo/src/moeoArchiveUpdater.h @@ -0,0 +1,56 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +//----------------------------------------------------------------------------- +// moeoArchiveUpdater.h +// (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2006 +/* + This library... + + Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr + */ +//----------------------------------------------------------------------------- + +#ifndef MOEOARCHIVEUPDATER_H_ +#define MOEOARCHIVEUPDATER_H_ + +#include +#include +#include + +/** + * This class allows to update the archive at each generation with newly found non-dominated solutions + */ +template < class EOT > class moeoArchiveUpdater:public eoUpdater +{ +public: + + /** + * Ctor + * @param _arch an archive of non-dominated solutions + * @param _pop the main population + */ + moeoArchiveUpdater (moeoArchive < EOT > &_arch, + const eoPop < EOT > &_pop):arch (_arch), pop (_pop) + { + } + + + /** + * Updates the archive with newly found non-dominated solutions contained in the main population + */ + void operator () () + { + arch.update (pop); + } + + +private: + + /** the archive of non-dominated solutions */ + moeoArchive < EOT > &arch; + /** the main population */ + const eoPop < EOT > &pop; + +}; + +#endif /*MOEOARCHIVEUPDATER_H_ */ diff --git a/trunk/paradiseo-moeo/src/moeoCombinedMOLS.h b/trunk/paradiseo-moeo/src/moeoCombinedMOLS.h new file mode 100644 index 000000000..30c9dc206 --- /dev/null +++ b/trunk/paradiseo-moeo/src/moeoCombinedMOLS.h @@ -0,0 +1,71 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +//----------------------------------------------------------------------------- +// moeoCombinedMOLS.h +// (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2006 +/* + This library... + + Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr + */ +//----------------------------------------------------------------------------- + +#ifndef MOEOCOMBINEDMOLS_H_ +#define MOEOCOMBINEDMOLS_H_ + +#include +#include +#include + +/** + * This class allows to embed a set of local searches that are sequentially applied, + * and so working and updating the same archive of non-dominated solutions + */ +template < class EOT > class moeoCombinedMOLS:public moeoMOLS < EOT > +{ +public: + + /** + * Ctor + * @param _eval the full evaluator of a solution + * @param _first_ls the first multi-objective local search to add + */ +moeoCombinedMOLS (eoEvalFunc < EOT > &_eval, moeoMOLS < EOT > &_first_ls):eval + (_eval) + { + combinedMOLS.push_back (&_first_ls); + } + + /** + * Adds a new local search to combine + * @param _ls the multi-objective local search to add + */ + void add (moeoMOLS < EOT > &_ls) + { + combinedMOLS.push_back (&_ls); + } + + /** + * Gives a new solution in order to explore the neigborhood. + * The new non-dominated solutions are added to the archive + * @param _eo the solution + * @param _arch the archive of non-dominated solutions + */ + void operator () (const EOT & _eo, moeoArchive < EOT > &_arch) + { + eval (const_cast < EOT & >(_eo)); + for (unsigned i = 0; i < combinedMOLS.size (); i++) + combinedMOLS[i]->operator ()(_eo, _arch); + } + + +private: + + /** the full evaluator of a solution */ + eoEvalFunc < EOT > &eval; + /** the vector that contains the combined MOLS */ + std::vector < moeoMOLS < EOT > *>combinedMOLS; + +}; + +#endif /*MOEOCOMBINEDMOLS_H_ */ diff --git a/trunk/paradiseo-moeo/src/moeoHybridMOLS.h b/trunk/paradiseo-moeo/src/moeoHybridMOLS.h new file mode 100644 index 000000000..7ab4fc2ed --- /dev/null +++ b/trunk/paradiseo-moeo/src/moeoHybridMOLS.h @@ -0,0 +1,74 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +//----------------------------------------------------------------------------- +// moeoHybridMOLS.h +// (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2006 +/* + This library... + + Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr + */ +//----------------------------------------------------------------------------- + +#ifndef MOEOHYBRIDMOLS_H_ +#define MOEOHYBRIDMOLS_H_ + +#include +#include +#include +#include +#include +#include + +/** + * This class allows to apply a multi-objective local search to a number of selected individuals contained in the archive + * at every generation until a stopping criteria is verified. + */ +template < class EOT > class moeoHybridMOLS:public eoUpdater +{ +public: + + /** + * Ctor + * @param _term stopping criteria + * @param _select selector + * @param _mols a multi-objective local search + * @param _arch the archive + */ +eoHybridMOLS (eoContinue < EOT > &_term, eoSelect < EOT > &_select, moeoMOLS < EOT > &_mols, moeoArchive < EOT > &_arch):term (_term), select (_select), mols (_mols), + arch + (_arch) + { + } + + /** + * Applies the multi-objective local search to selected individuals contained in the archive if the stopping criteria is not verified + */ + void operator () () + { + if (!cont (arch)) + { + // selection of solutions + eoPop < EOT > selectedSolutions; + select (arch, selectedSolutions); + // apply the local search to every selected solution + for (unsigned i = 0; i < selectedSolutions.size (); i++) + mols (selectedSolutions[i], arch); + } + } + + +private: + + /** stopping criteria*/ + eoContinue < EOT > &term; + /** selector */ + eoSelect < EOT > &select; + /** multi-objective local search */ + moeoMOLS < EOT > &mols; + /** archive */ + moeoArchive < EOT > &arch; + +}; + +#endif /*MOEOHYBRIDMOLS_H_ */ diff --git a/trunk/paradiseo-moeo/src/moeoMOLS.h b/trunk/paradiseo-moeo/src/moeoMOLS.h new file mode 100644 index 000000000..b2ecd3353 --- /dev/null +++ b/trunk/paradiseo-moeo/src/moeoMOLS.h @@ -0,0 +1,28 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +//----------------------------------------------------------------------------- +// moeoMOLS.h +// (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2006 +/* + This library... + + Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr + */ +//----------------------------------------------------------------------------- + +#ifndef MOEOMOLS_H_ +#define MOEOMOLS_H_ + +#include +#include + +/** + * Abstract class for local searches applied to multi-objective optimization. + * Starting from only one solution, it produces a set of new non-dominated solutions. + */ +template < class EOT > class moeoMOLS:public eoBF < const EOT &, moeoArchive < EOT > &, + void > +{ +}; + +#endif /*MOEOMOLS_H_ */ diff --git a/trunk/paradiseo-moeo/src/moeoReplacement.h b/trunk/paradiseo-moeo/src/moeoReplacement.h new file mode 100644 index 000000000..a1148e119 --- /dev/null +++ b/trunk/paradiseo-moeo/src/moeoReplacement.h @@ -0,0 +1,169 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +//----------------------------------------------------------------------------- +// moeoReplacement.h +// (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2006 +/* + This library... + + Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr + */ +//----------------------------------------------------------------------------- + +#ifndef MOEOREPLACEMENT_H_ +#define MOEOREPLACEMENT_H_ + +#include +#include +#include + + +/** + * Replacement strategy for multi-objective optimization + */ +template < class EOT, class WorthT > class moeoReplacement:public eoReplacement < + EOT > +{ +}; + + +/** + * Keep all the best individuals + * (almost cut-and-pasted from eoNDPlusReplacement, (c) Maarten Keijzer, Marc Schoenauer and GeNeura Team, 2002) + */ +template < class EOT, class WorthT = + double >class moeoElitistReplacement:public moeoReplacement < EOT, WorthT > +{ +public: + + /** + * constructor + * @param _perf2worth the functor class to transform raw fitnesses into fitness for selection + */ + moeoElitistReplacement (eoPerf2Worth < EOT, + WorthT > &_perf2worth):perf2worth (_perf2worth) + { + } + + + /** + * replacement - result in _parents + * @param _parents parents population + * @param _offspring offspring population + */ + void operator () (eoPop < EOT > &_parents, eoPop < EOT > &_offspring) + { + unsigned size = _parents.size (); + _parents.reserve (_parents.size () + _offspring.size ()); + copy (_offspring.begin (), _offspring.end (), back_inserter (_parents)); + + // calculate worths + perf2worth (_parents); + perf2worth.sort_pop (_parents); + perf2worth.resize (_parents, size); + + _offspring.clear (); + } + +private: + /** the functor object to transform raw fitnesses into fitness for selection */ + eoPerf2Worth < EOT, WorthT > &perf2worth; +}; + + +/** + * Same than moeoElitistReplacement except that distinct individuals are privilegied + */ +template < class EOT, class WorthT = + double >class moeoDisctinctElitistReplacement:public moeoReplacement < EOT, + WorthT > +{ +public: + + /** + * constructor + * @param _perf2worth the functor class to transform raw fitnesses into fitness for selection + */ + moeoDisctinctElitistReplacement (eoPerf2Worth < EOT, + WorthT > + &_perf2worth):perf2worth (_perf2worth) + { + } + + + /** + * replacement - result in _parents + * @param _parents parents population + * @param _offspring offspring population + */ + void operator () (eoPop < EOT > &_parents, eoPop < EOT > &_offspring) + { + unsigned size = _parents.size (); + _parents.reserve (_parents.size () + _offspring.size ()); + copy (_offspring.begin (), _offspring.end (), back_inserter (_parents)); + + // creation of the new population (of size 'size') + createNewPop (_parents, size); + + _offspring.clear (); + } + + +private: + + /** the functor object to transform raw fitnesses into fitness for selection */ + eoPerf2Worth < EOT, WorthT > &perf2worth; + + + /** + * creation of the new population of size _size + * @param _pop the initial population (will be modified) + * @param _size the size of the population to create + */ + void createNewPop (eoPop < EOT > &_pop, unsigned _size) + { + // the number of occurences for each individual + std::map < EOT, unsigned >nb_occurences; + for (unsigned i = 0; i < _pop.size (); i++) + nb_occurences[_pop[i]] = 0; + // the new population + eoPop < EOT > new_pop; + new_pop.reserve (_pop.size ()); + for (unsigned i = 0; i < _pop.size (); i++) + { + if (nb_occurences[_pop[i]] == 0) + new_pop.push_back (_pop[i]); + nb_occurences[_pop[i]]++; + } + + // calculate worths (on the new population) + perf2worth (new_pop); + perf2worth.sort_pop (new_pop); + + // if case there's not enough individuals in the population... + unsigned new_pop_size_init = new_pop.size (); + unsigned k = 0; + while (new_pop.size () < _size) + { + if (k < new_pop_size_init) + { + if (nb_occurences[new_pop[k]] > 1) + { + new_pop.push_back (new_pop[k]); + nb_occurences[new_pop[k]]--; + } + k++; + } + else + k = 0; + } + + // resize and swap the populations + perf2worth.resize (new_pop, _size); + _pop.resize (_size); + _pop.swap (new_pop); + } + +}; + +#endif /*MOEOREPLACEMENT_H_ */ diff --git a/trunk/paradiseo-moeo/src/moeoSelectOneFromPopAndArch.h b/trunk/paradiseo-moeo/src/moeoSelectOneFromPopAndArch.h new file mode 100644 index 000000000..aea605b51 --- /dev/null +++ b/trunk/paradiseo-moeo/src/moeoSelectOneFromPopAndArch.h @@ -0,0 +1,93 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +//----------------------------------------------------------------------------- +// moeoSelectOneFormPopAndArch.h +// (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2006 +/* + This library... + + Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr + */ +//----------------------------------------------------------------------------- + +#ifndef MOEOSELECTONEFROMPOPANDARCH_H_ +#define MOEOSELECTONEFROMPOPANDARCH_H_ + +#include +#include +#include +#include +#include + +/** + * Elitist selection process that consists in choosing individuals in the archive as well as in the current population. + */ +template < class EOT > class moeoSelectOneFromPopAndArch:public eoSelectOne < + EOT > +{ +public: + + /** + * Ctor + * @param _popSelectOne the population's selection operator + * @param _archSelectOne the archive's selection operator + * @param _arch the archive + * @param _ratioFromPop the ratio of selected individuals from the population + */ +moeoSelectOneFromPopAndArch (eoSelectOne < EOT > &_popSelectOne, eoSelectOne < EOT > _archSelectOne, moeoArchive < EOT > &_arch, double _ratioFromPop = 0.5):popSelectOne (_popSelectOne), archSelectOne (_archSelectOne), arch (_arch), + ratioFromPop + (_ratioFromPop) + { + } + + /** + * Ctor - the archive's selection operator is a random selector + * @param _popSelectOne the population's selection operator + * @param _arch the archive + * @param _ratioFromPop the ratio of selected individuals from the population + */ +moeoSelectOneFromPopAndArch (eoSelectOne < EOT > &_popSelectOne, moeoArchive < EOT > &_arch, double _ratioFromPop = 0.5):popSelectOne (_popSelectOne), archSelectOne (randomSelect), arch (_arch), + ratioFromPop + (_ratioFromPop) + { + } + + /** + * The selection process + */ + virtual const EOT & operator () (const eoPop < EOT > &pop) + { + if (arch.size () > 0) + if (rng.flip (ratioFromPop)) + return popSelectOne (pop); + else + return archSelectOne (arch); + else + return popSelectOne (pop); + } + + /** + * Setups some population stats + */ + virtual void setup (const eoPop < EOT > &_pop) + { + popSelectOne.setup (_pop); + } + + +private: + + /** The population's selection operator */ + eoSelectOne < EOT > &popSelectOne; + /** The archive's selection operator */ + eoSelectOne < EOT > &archSelectOne; + /** the archive */ + moeoArchive < EOT > &arch; + /** the ratio of selected individuals from the population*/ + double ratioFromPop; + /** the random selection operator */ + eoRandomSelect < EOT > randomSelect; + +}; + +#endif /*MOEOSELECTONEFROMPOPANDARCH_H_ */ diff --git a/trunk/paradiseo-moeo/src/old/eoBinaryQualityIndicator.h b/trunk/paradiseo-moeo/src/old/eoBinaryQualityIndicator.h new file mode 100644 index 000000000..38df7f007 --- /dev/null +++ b/trunk/paradiseo-moeo/src/old/eoBinaryQualityIndicator.h @@ -0,0 +1,420 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "eoBinaryQualityIndicator.h" + +// (c) OPAC Team, LIFL, June 2006 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: Arnaud.Liefooghe@lifl.fr +*/ + +#ifndef _eoBinaryQualityIndicator_h +#define _eoBinaryQualityIndicator_h + +// for std::exceptions +#include +// for eoBF +#include + + +/** + * Functor + * Binary quality indicator + * Binary performance measure to use in the replacement selection process of IBEA (Indicator-Based Evolutionary Algorithm) + * Of course, EOFitness needs to be an eoParetoFitness object + */ +template < class EOFitness > class eoBinaryQualityIndicator:public eoBF < const EOFitness &, const EOFitness &, + double > +{ + +public: + + /** + * constructor + */ + eoBinaryQualityIndicator ():eoBF < const EOFitness &, const EOFitness &, + double >() + { + bounds.reserve (traits::nObjectives ()); + bounds.resize (traits::nObjectives ()); + } + + + /** + * set the bounds for objective _iObj + * @param unsigned _iObj the index of the objective + * @param double _min the minimum value + * @param double _max the maximum value + */ + void setBounds (const unsigned _iObj, const double _min, const double _max) + { + bounds[_iObj] = Range (_min, _max); + } + + +protected: + + /** + * Private class to represent the bounds + */ + class Range + { + public: + Range () + { + min = 0; + max = 0; + r = 0; + } + Range (const double _min, const double _max) + { + min = _min; + max = _max; + r = max - min; + if (r < 0) + throw std::logic_error ("Negative range in eoBinaryQualityIndicator"); + } + double minimum () + { + return min; + } + double maximum () + { + return max; + } + double range () + { + return r; + } + private: + double min, max, r; + }; + + + /** range (min and max double value) for each objective */ + std::vector < Range > bounds; + + +private: + + /** fitness traits */ + typedef typename EOFitness::fitness_traits traits; + +}; + + + + + +/** + * Functor + * Additive binary epsilon indicator for eoParetoFitness + */ +template < class EOFitness > class eoAdditiveBinaryEpsilonIndicator:public eoBinaryQualityIndicator < + EOFitness + > +{ + +public: + + /** + * constructor + */ +eoAdditiveBinaryEpsilonIndicator ():eoBinaryQualityIndicator < EOFitness > + () + { + } + + + /** + * computation of the maximum epsilon value by which individual _eo1 must be + * decreased in all objectives such that individual _eo2 is weakly dominated + * (do not forget to set the bounds before the call of this function) + * @param EOFitness & _fitness_eo1 the fitness of the first individual + * @param EOFitness & _fitness_eo2 the fitness of the second individual + */ + double operator () (const EOFitness & _fitness_eo1, + const EOFitness & _fitness_eo2) + { + double epsilon, tmp; + // computation of the epsilon value for the first objective + epsilon = epsilonValue (_fitness_eo1, _fitness_eo2, 0); + // computation of the epsilon value for other objectives + for (unsigned i = 1; i < traits::nObjectives (); i++) + { + tmp = epsilonValue (_fitness_eo1, _fitness_eo2, i); + epsilon = std::max (epsilon, tmp); + } + // the maximum epsilon value + return epsilon; + } + + +private: + + /** fitness traits */ + typedef typename EOFitness::fitness_traits traits; + /** bounds */ + using eoAdditiveBinaryEpsilonIndicator < EOFitness >::bounds; + + + /** + * computation of the epsilon value by which individual _eo1 must be + * decreased in the objective _iObj such that individual _eo2 is weakly dominated + * @param EOFitness & _fitness_eo1 the fitness of the first individual + * @param EOFitness & _fitness_eo2 the fitness of the second individual + * @param unsigned _iObj the index of the objective + */ + double epsilonValue (const EOFitness & _fitness_eo1, + const EOFitness & _fitness_eo2, const unsigned _iObj) + { + double result; + if (bounds[_iObj].range () == 0) + { + // min==max => every individuals has the same value for this objective + result = 0; + } + else + { + // computation of the epsilon value for the objective _iObj (in case of a minimization) + result = + (_fitness_eo1[_iObj] - + bounds[_iObj].minimum ()) / bounds[_iObj].range (); + result -= + (_fitness_eo2[_iObj] - + bounds[_iObj].minimum ()) / bounds[_iObj].range (); + // if we are maximizing, invert the value + if (traits::maximizing (_iObj)) + result = -result; + } + // the espilon value + return result; + } + +}; + + + + + +/** + * Functor + * Binary hypervolume indicator for eoParetoFitness + */ +template < class EOFitness > class eoBinaryHypervolumeIndicator:public eoBinaryQualityIndicator < + EOFitness > +{ + +public: + + /** + * constructor + * @param double _rho reference point for the hypervolume calculation (rho must not be smaller than 1) + */ +eoBinaryHypervolumeIndicator (double _rho):eoBinaryQualityIndicator < EOFitness > + () + { + rho = _rho; + // consistency check + if (rho < 1) + { + cout << + "Warning, reference point rho for the hypervolume calculation must not be smaller than 1" + << endl; + cout << "Adjusted to 1" << endl; + rho = 1; + } + } + + + /** + * indicator value of the hypervolume of the portion of the objective space + * that is dominated by individual _eo1 but not by individual _eo2 + * (don't forget to set the bounds before the call of this function) + * @param EOFitness & _fitness_eo1 the fitness of the first individual + * @param EOFitness & _fitness_eo2 the fitness of the second individual + */ + double operator () (const EOFitness & _fitness_eo1, + const EOFitness & _fitness_eo2) + { + double result; + if (_fitness_eo1.dominates (_fitness_eo2)) + result = + -hypervolumeIndicatorValue (_fitness_eo1, _fitness_eo2, + traits::nObjectives ()); + else + result = + hypervolumeIndicatorValue (_fitness_eo2, _fitness_eo1, + traits::nObjectives ()); + return result; + } + + +private: + + /** fitness traits */ + typedef typename EOFitness::fitness_traits traits; + /** bounds */ + using eoBinaryHypervolumeIndicator < EOFitness >::bounds; + + /** reference point for the hypervolume calculation */ + double rho; + + + /** + * computation of the hypervolume of the portion of the objective space + * that is dominated by individual _eo1 but not by individual _eo2 + * @param EOFitness & _fitness_eo1 the fitness of the first individual + * @param EOFitness & _fitness_eo2 the fitness of the second individual + * @param unsigned _iObj number of objectives (used for iteration) + * @param bool _flag = false (only used for iteration) + */ + double hypervolumeIndicatorValue (const EOFitness & _fitness_eo1, + const EOFitness & _fitness_eo2, + const unsigned _iObj, const bool _flag = + false) + { + double result; + if (bounds[_iObj - 1].range () == 0) + { + // min==max => every individuals as the same value for this objective + result = 0; + } + else + { + if (traits::maximizing (_iObj - 1)) // maximizing + result = + hypervolumeIndicatorValueMax (_fitness_eo1, _fitness_eo2, _iObj, + _flag); + else // minimizing + result = + hypervolumeIndicatorValueMin (_fitness_eo1, _fitness_eo2, _iObj, + _flag); + } + return result; + } + + + /** + * computation of the hypervolume of the portion of the objective space + * that is dominated by individual _eo1 but not by individual _eo2 + * in case of a minimization on the objective _iObj + * @param EOFitness & _fitness_eo1 the fitness of the first individual + * @param EOFitness & _fitness_eo2 the fitness of the second individual + * @param unsigned _iObj index of the objective + * @param bool _flag (only used for iteration) + */ + double hypervolumeIndicatorValueMin (const EOFitness & _fitness_eo1, + const EOFitness & _fitness_eo2, + const unsigned _iObj, const bool _flag) + { + double result; + double r = rho * bounds[_iObj - 1].range (); + double max = bounds[_iObj - 1].minimum () + r; + // fitness of individuals _eo1 and _eo2 for the objective _iObj (if flag==true, _eo2 is not taken into account) + double fitness_eo1 = _fitness_eo1[_iObj - 1]; + double fitness_eo2; + if (_flag) + fitness_eo2 = max; + else + fitness_eo2 = _fitness_eo2[_iObj - 1]; + // computation of the volume + if (_iObj == 1) + { + if (fitness_eo1 < fitness_eo2) + result = (fitness_eo2 - fitness_eo1) / r; + else + result = 0; + } + else + { + if (fitness_eo1 < fitness_eo2) + { + result = + hypervolumeIndicatorValue (_fitness_eo1, _fitness_eo2, + _iObj - 1) * (max - fitness_eo2) / r; + result += + hypervolumeIndicatorValue (_fitness_eo1, _fitness_eo2, + _iObj - 1, + true) * (fitness_eo2 - + fitness_eo1) / r; + } + else + result = + hypervolumeIndicatorValue (_fitness_eo1, _fitness_eo2, + _iObj - 1) * (max - fitness_eo2) / r; + } + // the volume + return result; + } + + + /** + * computation of the hypervolume of the portion of the objective space + * that is dominated by individual _eo1 but not by individual _eo2 + * in case of a maximization on the objective _iObj + * @param EOFitness & _fitness_eo1 the fitness of the first individual + * @param EOFitness & _fitness_eo2 the fitness of the second individual + * @param unsigned _iObj index of the objective + * @param bool _flag (only used for iteration) + */ + double hypervolumeIndicatorValueMax (const EOFitness & _fitness_eo1, + const EOFitness & _fitness_eo2, + const unsigned _iObj, const bool _flag) + { + double result; + double r = rho * bounds[_iObj - 1].range (); + double min = bounds[_iObj - 1].maximum () - r; + // fitness of individuals _eo1 and _eo2 for the objective _iObj (if flag==true, _eo2 is not taken into account) + double fitness_eo1 = _fitness_eo1[_iObj - 1]; + double fitness_eo2; + if (_flag) + fitness_eo2 = min; + else + fitness_eo2 = _fitness_eo2[_iObj - 1]; + // computation of the volume + if (_iObj == 1) + { + if (fitness_eo1 > fitness_eo2) + result = (fitness_eo1 - fitness_eo2) / r; + else + result = 0; + } + else + { + if (fitness_eo1 > fitness_eo2) + { + result = + hypervolumeIndicatorValue (_fitness_eo1, _fitness_eo2, + _iObj - 1) * (fitness_eo2 - min) / r; + result += + hypervolumeIndicatorValue (_fitness_eo1, _fitness_eo2, + _iObj - 1, + true) * (fitness_eo1 - + fitness_eo2) / r; + } + else + result = + hypervolumeIndicatorValue (_fitness_eo1, _fitness_eo2, + _iObj - 1) * (fitness_eo2 - min) / r; + } + // the volume + return result; + } + +}; + +#endif diff --git a/trunk/paradiseo-moeo/src/old/eoIBEA.h b/trunk/paradiseo-moeo/src/old/eoIBEA.h new file mode 100644 index 000000000..a3fa43372 --- /dev/null +++ b/trunk/paradiseo-moeo/src/old/eoIBEA.h @@ -0,0 +1,490 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "eoIBEA.h" + +// (c) OPAC Team, LIFL, June 2006 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: Arnaud.Liefooghe@lifl.fr +*/ + +#ifndef _eoIBEASorting_h +#define _eoIBEASorting_h + +#include +#include +#include +#include +#include "eoBinaryQualityIndicator.h" + + +/** + * Functor + * The sorting phase of IBEA (Indicator-Based Evolutionary Algorithm) + */ +template < class EOT, class Fitness > class eoIBEA:public eoPerf2WorthCached < EOT, + double > +{ + + public: + /** values */ + using eoIBEA < EOT, Fitness >::value; + + eoIBEA (eoBinaryQualityIndicator < Fitness > *_I) + { + I = _I; + } + + + /** + * mapping + * @param const eoPop& _pop the population + */ + void calculate_worths (const eoPop < EOT > &_pop) + { + /* resizing the worths beforehand */ + value ().resize (_pop.size ()); + + /* computation and setting of the bounds for each objective */ + setBounds (_pop); + + /* computation of the fitness for each individual */ + fitnesses (_pop); + + // higher is better, so invert the value + double max = *std::max_element (value ().begin (), value ().end ()); + for (unsigned i = 0; i < value ().size (); i++) + value ()[i] = max - value ()[i]; + } + + +protected: + + /** binary quality indicator to use in the selection process */ + eoBinaryQualityIndicator < Fitness > *I; + + virtual void setBounds (const eoPop < EOT > &_pop) = 0; + virtual void fitnesses (const eoPop < EOT > &_pop) = 0; + +}; + + + + + +/** + * Functor + * The sorting phase of IBEA (Indicator-Based Evolutionary Algorithm) without uncertainty + * Adapted from the Zitzler and Künzli paper "Indicator-Based Selection in Multiobjective Search" (2004) + * Of course, Fitness needs to be an eoParetoFitness object + */ +template < class EOT, class Fitness = typename EOT::Fitness > class eoIBEASorting:public eoIBEA < EOT, + Fitness + > +{ + +public: + + /** + * constructor + * @param eoBinaryQualityIndicator* _I the binary quality indicator to use in the selection process + * @param double _kappa scaling factor kappa + */ + eoIBEASorting (eoBinaryQualityIndicator < Fitness > *_I, + const double _kappa): + eoIBEA < + EOT, + Fitness > (_I) + { + kappa = _kappa; + } + + +private: + /** quality indicator */ + using eoIBEASorting < EOT, Fitness >::I; + /** values */ + using + eoIBEA < + EOT, + Fitness >::value; + /** scaling factor kappa */ + double + kappa; + + + /** + * computation and setting of the bounds for each objective + * @param const eoPop& _pop the population + */ + void + setBounds (const eoPop < EOT > &_pop) + { + typedef typename + EOT::Fitness::fitness_traits + traits; + double + min, + max; + for (unsigned i = 0; i < traits::nObjectives (); i++) + { + min = _pop[0].fitness ()[i]; + max = _pop[0].fitness ()[i]; + for (unsigned j = 1; j < _pop.size (); j++) + { + min = std::min (min, _pop[j].fitness ()[i]); + max = std::max (max, _pop[j].fitness ()[i]); + } + // setting of the bounds for the objective i + I->setBounds (i, min, max); + } + } + + + /** + * computation and setting of the fitness for each individual of the population + * @param const eoPop& _pop the population + */ + void + fitnesses (const eoPop < EOT > &_pop) + { + // reprsentation of the fitness components + std::vector < std::vector < double > > + fitComponents (_pop.size (), _pop.size ()); + // the maximum absolute indicator value + double + maxAbsoluteIndicatorValue = 0; + + // computation of the indicator values and of the maximum absolute indicator value + for (unsigned i = 0; i < _pop.size (); i++) + for (unsigned j = 0; j < _pop.size (); j++) + if (i != j) + { + fitComponents[i][j] = + (*I) (_pop[i].fitness (), _pop[j].fitness ()); + maxAbsoluteIndicatorValue = + std::max (maxAbsoluteIndicatorValue, + fabs (fitComponents[i][j])); + } + + // computation of the fitness components for each pair of individuals + // if maxAbsoluteIndicatorValue==0, every individuals have the same fitness values for all objectives (already = 0) + if (maxAbsoluteIndicatorValue != 0) + for (unsigned i = 0; i < _pop.size (); i++) + for (unsigned j = 0; j < _pop.size (); j++) + if (i != j) + fitComponents[i][j] = + exp (-fitComponents[i][j] / + (maxAbsoluteIndicatorValue * kappa)); + + // computation of the fitness for each individual + for (unsigned i = 0; i < _pop.size (); i++) + { + value ()[i] = 0; + for (unsigned j = 0; j < _pop.size (); j++) + if (i != j) + value ()[i] += fitComponents[j][i]; + } + } + +}; + + + + + +/** + * Functor + * The sorting phase of IBEA (Indicator-Based Evolutionary Algorithm) under uncertainty + * Adapted from the Basseur and Zitzler paper "Handling Uncertainty in Indicator-Based Multiobjective Optimization" (2006) + * Of course, the fitness of an individual needs to be an eoStochasticParetoFitness object + */ +template < class EOT, class FitnessEval = typename EOT::Fitness::FitnessEval > class eoIBEAStochSorting:public eoIBEA < EOT, + FitnessEval + > +{ + +public: + + /** + * constructor + * @param eoBinaryQualityIndicator* _I the binary quality indicator to use in the selection process + */ +eoIBEAStochSorting (eoBinaryQualityIndicator < FitnessEval > *_I):eoIBEA < EOT, + FitnessEval > + (_I) + { + } + + +private: + /** quality indicator */ + using eoIBEAStochSorting < EOT, FitnessEval >::I; + /** values */ + using + eoIBEAStochSorting < + EOT, + FitnessEval >::value; + + + /** + * approximated zero value + */ + static double + zero () + { + return 1e-7; + } + + + /** + * computation and setting of the bounds for each objective + * @param const eoPop& _pop the population + */ + void + setBounds (const eoPop < EOT > &_pop) + { + typedef typename + EOT::Fitness::FitnessTraits + traits; + double + min, + max; + for (unsigned i = 0; i < traits::nObjectives (); i++) + { + min = _pop[0].fitness ().minimum (i); + max = _pop[0].fitness ().maximum (i); + for (unsigned j = 1; j < _pop.size (); j++) + { + min = std::min (min, _pop[j].fitness ().minimum (i)); + max = std::max (max, _pop[j].fitness ().maximum (i)); + } + // setting of the bounds for the ith objective + I->setBounds (i, min, max); + } + } + + + /** + * computation and setting of the fitness for each individual of the population + * @param const eoPop& _pop the population + */ + void + fitnesses (const eoPop < EOT > &_pop) + { + typedef typename + EOT::Fitness::FitnessTraits + traits; + unsigned + nEval = traits::nEvaluations (); + unsigned + index; + double + eiv, + p, + sumP, + iValue; + std::list < std::pair < double, unsigned > > l; + std::vector < unsigned > + n (_pop.size ()); + + for (unsigned ind = 0; ind < _pop.size (); ind++) + { + value ()[ind] = 0.0; // fitness value for the individual ind + for (unsigned eval = 0; eval < nEval; eval++) + { + + // I-values computation for the evaluation eval of the individual ind + l.clear (); + for (unsigned i = 0; i < _pop.size (); i++) + { + if (i != ind) + { + for (unsigned j = 0; j < nEval; j++) + { + std::pair < double, unsigned > + pa; + // I-value + pa.first = + (*I) (_pop[ind].fitness ()[eval], + _pop[i].fitness ()[j]); + // index of the individual + pa.second = i; + // append this to the list + l.push_back (pa); + } + } + } + + // sorting of the I-values (in decreasing order) + l.sort (); + + // computation of the Expected Indicator Value (eiv) for the evaluation eval of the individual ind + eiv = 0.0; + n.assign (n.size (), 0); // n[i]==0 for all i + sumP = 0.0; + while (((1 - sumP) > zero ()) && (l.size () > 0)) + { + // we use the last element of the list (the greatest one) + iValue = l.back ().first; + index = l.back ().second; + // computation of the probability to appear + p = (1.0 / (nEval - n[index])) * (1.0 - sumP); + // eiv update + eiv += p * iValue; + // update of the number of elements for individual index + n[index]++; + // removing the last element of the list + l.pop_back (); + // sum of p update + sumP += p; + } + value ()[ind] += eiv / nEval; + } + } + + } + +}; + + + + + +/** + * Functor + * The sorting phase of IBEA (Indicator-Based Evolutionary Algorithm) under uncertainty using averaged values for each objective + * Follow the idea presented in the Deb & Gupta paper "Searching for Robust Pareto-Optimal Solutions in Multi-Objective Optimization", 2005 + * Of course, the fitness of an individual needs to be an eoStochasticParetoFitness object + */ +template < class EOT, class FitnessEval = typename EOT::Fitness::FitnessEval > class eoIBEAAvgSorting:public eoIBEA < EOT, + FitnessEval + > +{ + +public: + + /** + * constructor + * @param eoBinaryQualityIndicator* _I the binary quality indicator to use in the selection process + * @param double _kappa scaling factor kappa + */ + eoIBEAAvgSorting (eoBinaryQualityIndicator < FitnessEval > *_I, + const double _kappa): + eoIBEA < + EOT, + FitnessEval > (_I) + { + kappa = _kappa; + } + + +private: + /** quality indicator */ + using eoIBEAAvgSorting < EOT, FitnessEval >::I; + /** values */ + using + eoIBEAAvgSorting < + EOT, + FitnessEval >::value; + /** scaling factor kappa */ + double + kappa; + + + /** + * computation and setting of the bounds for each objective + * @param const eoPop& _pop the population + */ + void + setBounds (const eoPop < EOT > &_pop) + { + typedef typename + EOT::Fitness::FitnessTraits + traits; + double + min, + max; + for (unsigned i = 0; i < traits::nObjectives (); i++) + { + min = _pop[0].fitness ().averagedParetoFitnessObject ()[i]; + max = _pop[0].fitness ().averagedParetoFitnessObject ()[i]; + for (unsigned j = 1; j < _pop.size (); j++) + { + min = + std::min (min, + _pop[j].fitness ().averagedParetoFitnessObject ()[i]); + max = + std::max (max, + _pop[j].fitness ().averagedParetoFitnessObject ()[i]); + } + // setting of the bounds for the objective i + I->setBounds (i, min, max); + } + } + + + /** + * computation and setting of the fitness for each individual of the population + * @param const eoPop& _pop the population + */ + void + fitnesses (const eoPop < EOT > &_pop) + { + // reprsentation of the fitness components + std::vector < std::vector < double > > + fitComponents (_pop.size (), _pop.size ()); + // the maximum absolute indicator value + double + maxAbsoluteIndicatorValue = 0; + + // computation of the indicator values and of the maximum absolute indicator value + for (unsigned i = 0; i < _pop.size (); i++) + for (unsigned j = 0; j < _pop.size (); j++) + if (i != j) + { + fitComponents[i][j] = + (*I) (_pop[i].fitness ().averagedParetoFitnessObject (), + _pop[j].fitness ().averagedParetoFitnessObject ()); + maxAbsoluteIndicatorValue = + std::max (maxAbsoluteIndicatorValue, + fabs (fitComponents[i][j])); + } + + // computation of the fitness components for each pair of individuals + // if maxAbsoluteIndicatorValue==0, every individuals have the same fitness values for all objectives (already = 0) + if (maxAbsoluteIndicatorValue != 0) + for (unsigned i = 0; i < _pop.size (); i++) + for (unsigned j = 0; j < _pop.size (); j++) + if (i != j) + fitComponents[i][j] = + exp (-fitComponents[i][j] / + (maxAbsoluteIndicatorValue * kappa)); + + // computation of the fitness for each individual + for (unsigned i = 0; i < _pop.size (); i++) + { + value ()[i] = 0; + for (unsigned j = 0; j < _pop.size (); j++) + if (i != j) + value ()[i] += fitComponents[j][i]; + } + } + +}; + + +#endif diff --git a/trunk/paradiseo-moeo/src/old/eoParetoPhenDist.h b/trunk/paradiseo-moeo/src/old/eoParetoPhenDist.h new file mode 100644 index 000000000..e92e5314f --- /dev/null +++ b/trunk/paradiseo-moeo/src/old/eoParetoPhenDist.h @@ -0,0 +1,37 @@ +#include + +template < class EOT, class DistType > class eoParetoPhenDist +{ +public: + virtual DistType operator ()(const EOT & eopf1, const EOT & eopf2) = 0; + +}; + + + +//Euclidien distance + +template < class EOT, class DistType = + double >class eoParetoEuclidDist:public eoParetoPhenDist < EOT, DistType > +{ + +public: + DistType operator () (const EOT & eopf1, const EOT & eopf2) + { + double res = 0.0; + double max = 0.0; + double temp; + for (unsigned i = 0; i < eopf1.fitness ().size (); ++i) + { + temp = + (eopf1.fitness ().operator[](i) - + eopf2.fitness ().operator[](i)) * (eopf1.fitness ().operator[](i) - + eopf2.fitness ().operator[](i)); + if (temp > max) + max = temp; /* for normalization */ + res = res + temp; + } + return sqrt (res / max); + } + +}; diff --git a/trunk/paradiseo-moeo/src/old/eoParetoSharing.h b/trunk/paradiseo-moeo/src/old/eoParetoSharing.h new file mode 100644 index 000000000..3a215c72c --- /dev/null +++ b/trunk/paradiseo-moeo/src/old/eoParetoSharing.h @@ -0,0 +1,147 @@ +// -*- C++ -*- + +#include +#include +#include +#include + +template < class EOT, class worthT = + double >class eoParetoSharing:public eoPerf2Worth < EOT, worthT > +{ +public: + + eoParetoSharing (double _nicheSize):eoPerf2Worth < EOT, + worthT > ("ParetoSharing"), nicheSize (_nicheSize), dist (euc_dist), + Dmax (_nicheSize) + { + } + + + eoParetoSharing (double _nicheSize, eoParetoPhenDist < EOT, + worthT > &_dist):eoPerf2Worth < EOT, + worthT > ("ParetoSharing"), nicheSize (_nicheSize), dist (_dist), + Dmax (_nicheSize) + { + } + + + + + void operator () /*calculate_worths */ (const eoPop < EOT > &_pop) + { + + unsigned i, j, pSize = _pop.size (); + //cout<<"**************************************************************************************\n"; + // std :: cout << "psize = " << pSize << std :: endl ; + if (pSize <= 1) + throw std:: + runtime_error ("Apptempt to do sharing with population of size 1"); + eoPerf2Worth < EOT, worthT >::value ().resize (pSize); + std::vector < double >sim (pSize); // to hold the similarities + + dMatrix distMatrix (pSize); + +// compute the distance + distMatrix[0][0] = 0; + for (i = 1; i < pSize; i++) + { + distMatrix[i][i] = 0; + for (j = 0; j < i; j++) + { + //if + distMatrix[i][j] = distMatrix[j][i] = dist (_pop[i], _pop[j]); + //cout<<" "<"< Dmap1; + Dmap1.setup (_pop); + + eoParetoRanking < EOT > rnk1 (Dmap1); + rnk1.calculate_worths (_pop); +// now set the worthes values + for (i = 0; i < pSize; ++i) + { + typename EOT::Fitness v; + + + +//cout<<"voila: "<< +//rnk1.value().operator[](i); + +//vector v; +//v.resize(_pop[i].fitness().size()); +//for(unsigned k=0;k<_pop[i].fitness().size();++k) +//v[k]=_pop[i].fitness().operator[](k)/sim[i]; +//_pop[i].fitness(v);//.operator[](k)=0;//_pop[i].fitness().operator[](k)/sim[i]; + eoPerf2Worth < EOT, worthT >::value ()[i] = rnk1.value ().operator[](i) / sim[i]; //*_pop[i].fitness().operator[](1)*_pop[i].fitness().operator[](1)); +//cout<<"\n__________"< > + { + public: + dMatrix (unsigned _s):rSize (_s) + { + this->resize (_s); + for (unsigned i = 0; i < _s; ++i) + this->operator[] (i).resize (_s); + } + + void printOn (std::ostream & _os) + { + for (unsigned i = 0; i < rSize; i++) + for (unsigned j = 0; j < rSize; ++j) + { + _os << this->operator[](i)[j] << " "; + _os << endl; + } + _os << endl; + } +//public: +//std::vectorv; + + private: + + + + + unsigned rSize; + }; + +private: + + ; + + double sh (double dist, double Dmax) + { + if (dist < Dmax) + return (1.0 - dist / Dmax); + else + return (0.0); + } + + double nicheSize; + eoParetoPhenDist < EOT, worthT > &dist; + eoParetoEuclidDist < EOT > euc_dist; + double Dmax; + +}; diff --git a/trunk/paradiseo-moeo/src/old/make_algo_MOEO.h b/trunk/paradiseo-moeo/src/old/make_algo_MOEO.h new file mode 100644 index 000000000..46af0756c --- /dev/null +++ b/trunk/paradiseo-moeo/src/old/make_algo_MOEO.h @@ -0,0 +1,254 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "make_algo_MOEO.h" + +// (c) OPAC Team, LIFL, June 2006 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: Arnaud.Liefooghe@lifl.fr +*/ + +#ifndef _make_algo_MOEO_h +#define _make_algo_MOEO_h + +// the parser and parameter includes +#include "utils/eoParser.h" +#include "utils/eoState.h" +// selections +#include "eoNDSorting.h" +#include "eoIBEA.h" +#include "eoBinaryQualityIndicator.h" +#include "eoParetoRanking.h" +#include "eoParetoSharing.h" +#include "eoSelectFromWorth.h" +#include "moeoSelectOneFromPopAndArch.h" +// replacements +#include "eoReplacement.h" +#include "moeoReplacement.h" +// breeders +#include "eoGeneralBreeder.h" +// the algorithm +#include "eoEasyEA.h" + +/* + * This function builds the algorithm (i.e. selection and replacement) from existing continue (or checkpoint) and operators + * It uses a parser (to get user parameters) and a state (to store the memory) + * + * NB: this function is almost cut-and-pasted from EO/make_algo_pareto.h and integrates MOEO features + */ +template < class EOT > + eoAlgo < EOT > &do_make_algo_MOEO (eoParser & _parser, eoState & _state, + eoEvalFunc < EOT > &_eval, + eoContinue < EOT > &_continue, + eoGenOp < EOT > &_op, + moeoArchive < EOT > &_arch) +{ + + // the fitness of an EOT object + typedef typename EOT::Fitness EOFitness; + + + + + + /* the selection criteria */ + string & selStr = _parser.createParam (string ("NSGA-II"), "selCrit", + "Multi-objective selection criterion: NSGA, NSGA-II, IBEA, ParetoRanking, ParetoSharing", + 'S', "Evolution Engine").value (); + double nicheSize = _parser.createParam (1.0, "nicheSize", + "Size of niche for NSGA-I or ParetoSharing", + 'n', + "Evolution Engine").value (); + double kappa = + _parser.createParam (0.05, "kappa", "Scaling factor kappa for IBEA", 'k', + "Evolution Engine").value (); + string & indStr = + _parser.createParam (string ("Epsilon"), "indicator", + "Binary quality indicator for IBEA : Epsilon, Hypervolume", + 'I', "Evolution Engine").value (); + double rho = _parser.createParam (1.1, "rho", + "reference point for the hypervolume calculation (must not be smaller than 1)", + 'r', "Evolution Engine").value (); + // the eoPerf2Worth object + eoPerf2Worth < EOT, double >*p2w; + if ((selStr == string ("NSGA")) || (selStr == string ("NSGA-I"))) // NSGA-I + p2w = new eoNDSorting_I < EOT > (nicheSize); + else if (selStr == string ("NSGA-II")) // NSGA-II + p2w = new eoNDSorting_II < EOT > (); + /* + else if (selStr == string("IBEA")) { // IBEA + // the binary quality indicator + eoBinaryQualityIndicator* I; + if (indStr == string("Epsilon")) + I = new eoAdditiveBinaryEpsilonIndicator; + else if (indStr == string("Hypervolume")) + I = new eoBinaryHypervolumeIndicator(rho); + else { + string stmp = string("Invalid binary quality indicator (for IBEA): ") + indStr; + throw std::runtime_error(stmp.c_str()); + } + p2w = new eoIBEASorting(I, kappa); + } + */ + else if (selStr == string ("ParetoRanking")) + { // Pareto Ranking + eoDominanceMap < EOT > &dominance = + _state.storeFunctor (new eoDominanceMap < EOT >); + p2w = new eoParetoRanking < EOT > (dominance); + } + else if (selStr == string ("ParetoSharing")) + { // Pareto Sharing + p2w = new eoParetoSharing < EOT > (nicheSize); + } + else + { + string stmp = string ("Invalid Pareto selection criterion: ") + selStr; + throw std::runtime_error (stmp.c_str ()); + } + // store + _state.storeFunctor (p2w); + + + + + + /* the selector */ + eoValueParam < eoParamParamType > &selectionParam = + _parser.createParam (eoParamParamType ("DetTour(2)"), "selection", + "Selection: Roulette, DetTour(T), StochTour(t) or Random", + 's', "Evolution Engine"); + eoParamParamType & ppSelect = selectionParam.value (); // pair< string , vector > + // the select object + eoSelectOne < EOT > *select; + if (ppSelect.first == string ("DetTour")) + { // DetTour + unsigned detSize; + if (!ppSelect.second.size ()) + { // no parameter added + cerr << "WARNING, no parameter passed to DetTour, using 2" << endl; + detSize = 2; + // put back 2 in parameter for consistency (and status file) + ppSelect.second.push_back (string ("2")); + } + else // parameter passed by user as DetTour(T) + detSize = atoi (ppSelect.second[0].c_str ()); + select = new eoDetTournamentWorthSelect < EOT > (*p2w, detSize); + } + else if (ppSelect.first == string ("StochTour")) + { // StochTour + double p; + if (!ppSelect.second.size ()) + { // no parameter added + cerr << "WARNING, no parameter passed to StochTour, using 1" << + endl; + p = 1; + // put back p in parameter for consistency (and status file) + ppSelect.second.push_back (string ("1")); + } + else // parameter passed by user as DetTour(T) + p = atof (ppSelect.second[0].c_str ()); + select = new eoStochTournamentWorthSelect < EOT > (*p2w, p); + } + else if (ppSelect.first == string ("Roulette")) + { // Roulette + select = new eoRouletteWorthSelect < EOT > (*p2w); + } + else if (ppSelect.first == string ("Random")) + { // Random + select = new eoRandomSelect < EOT >; + } + else + { + string stmp = string ("Invalid selection: ") + ppSelect.first; + throw std::runtime_error (stmp.c_str ()); + } + // store + _state.storeFunctor (select); + + + + + + /* elitism */ + bool useElitism = _parser.createParam (false, "elitism", + "Use elitism in the selection process (individuals from the archive are randomly selected)", + 'E', "Evolution Engine").value (); + double ratioFromPop = _parser.createParam (0.8, "ratio", + "Ratio from the population for elitism (must not be greater than 1)", + '\0', + "Evolution Engine").value (); + if (useElitism) + { + eoSelectOne < EOT > *selectPop = select; + select = + new moeoSelectOneFromPopAndArch < EOT > (*selectPop, _arch, + ratioFromPop); + // store + _state.storeFunctor (select); + } + + + + + + /* the number of offspring */ + eoValueParam < eoHowMany > &offspringRateParam = + _parser.createParam (eoHowMany (1.0), "nbOffspring", + "Nb of offspring (percentage or absolute)", 'O', + "Evolution Engine"); + + + + + + /* the replacement */ + string & repStr = + _parser.createParam (string ("Plus"), "replacement", + "Replacement: Plus, DistinctPlus or Generational", + 'R', "Evolution Engine").value (); + eoReplacement < EOT > *replace; + if (repStr == string ("Plus")) // Plus + replace = new moeoElitistReplacement < EOT, double >(*p2w); + else if (repStr == string ("DistinctPlus")) // DistinctPlus + replace = new moeoDisctinctElitistReplacement < EOT, double >(*p2w); + else if (repStr == string ("Generational")) // Generational + replace = new eoGenerationalReplacement < EOT >; + else + { + string stmp = string ("Invalid replacement: ") + repStr; + throw std::runtime_error (stmp.c_str ()); + } + // store + _state.storeFunctor (replace); + + + + + + // the general breeder + eoGeneralBreeder < EOT > *breed = + new eoGeneralBreeder < EOT > (*select, _op, offspringRateParam.value ()); + _state.storeFunctor (breed); + + // the eoEasyEA + eoAlgo < EOT > *algo = + new eoEasyEA < EOT > (_continue, _eval, *breed, *replace); + _state.storeFunctor (algo); + // that's it! + return *algo; +} + +#endif diff --git a/trunk/paradiseo-moeo/tutorials/Makefile.am b/trunk/paradiseo-moeo/tutorials/Makefile.am new file mode 100755 index 000000000..40441b3b9 --- /dev/null +++ b/trunk/paradiseo-moeo/tutorials/Makefile.am @@ -0,0 +1 @@ +SUBDIRS=lesson1 diff --git a/trunk/paradiseo-moeo/tutorials/lesson1/FlowShop.h b/trunk/paradiseo-moeo/tutorials/lesson1/FlowShop.h new file mode 100644 index 000000000..284804b0a --- /dev/null +++ b/trunk/paradiseo-moeo/tutorials/lesson1/FlowShop.h @@ -0,0 +1,148 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "FlowShop.h" + +// (c) OPAC Team, LIFL, April 2006 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: Arnaud.Liefooghe@lifl.fr +*/ + +#ifndef _FlowShop_h +#define _FlowShop_h + +#include +// Fitness for multi-objective flow-shop +#include "FlowShopFitness.h" + + +/** + * Structure of the genotype for the flow-shop scheduling problem + */ +class FlowShop:public EO < FlowShopFitness > +{ + +public: + + /** + * default constructor + */ + FlowShop () + { + } + + /** + * destructor + */ + virtual ~ FlowShop () + { + } + + /** + * class name + */ + virtual string className () const + { + return "FlowShop"; + } + + /** + * set scheduling vector + * @param vector & _scheduling the new scheduling to set + */ + void setScheduling (vector < unsigned >&_scheduling) + { + scheduling = _scheduling; + } + + /** + * get scheduling vector + */ + const vector < unsigned >&getScheduling () const + { + return scheduling; + } + + /** + * printing... + */ + void printOn (ostream & _os) const + { + // fitness + EO < FlowShopFitness >::printOn (_os); + _os << "\t"; + // size + _os << scheduling.size () << "\t"; + // scheduling + for (unsigned i = 0; i < scheduling.size (); i++) + _os << scheduling[i] << ' '; + } + + /** + * reading... + */ + void readFrom (istream & _is) + { + // fitness + EO < FlowShopFitness >::readFrom (_is); + // size + unsigned size; + _is >> size; + // scheduling + scheduling.resize (size); + bool tmp; + for (unsigned i = 0; i < size; i++) + { + _is >> tmp; + scheduling[i] = tmp; + } + } + + + bool operator== (const FlowShop & _other) const + { + return scheduling == _other.getScheduling (); + } + bool operator!= (const FlowShop & _other) const + { + return scheduling != _other.getScheduling (); + } + bool operator< (const FlowShop & _other) const + { + return scheduling < _other.getScheduling (); + } + bool operator> (const FlowShop & _other) const + { + return scheduling > _other.getScheduling (); + } + bool operator<= (const FlowShop & _other) const + { + return scheduling <= _other.getScheduling (); + } + bool operator>= (const FlowShop & _other) const + { + return scheduling >= _other.getScheduling (); + } + + +private: + + /** scheduling (order of operations) */ + std::vector < unsigned >scheduling; + +}; + +#endif diff --git a/trunk/paradiseo-moeo/tutorials/lesson1/FlowShopBenchmarkParser.h b/trunk/paradiseo-moeo/tutorials/lesson1/FlowShopBenchmarkParser.h new file mode 100644 index 000000000..3b13d9872 --- /dev/null +++ b/trunk/paradiseo-moeo/tutorials/lesson1/FlowShopBenchmarkParser.h @@ -0,0 +1,189 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "FlowShopBenchmarkParser.h" + +// (c) OPAC Team, LIFL, March 2006 + +/* This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: Arnaud.Liefooghe@lifl.fr +*/ + +#ifndef _FlowShopBenchmarkParser_h +#define _FlowShopBenchmarkParser_h + +// general include +#include +#include + +/** Web site to download benchmarks */ +const static + std::string + BENCHMARKS_WEB_SITE = "www.lifl.fr/~liefooga/benchmarks/"; + + +/** + * Class to handle parameters of a flow-shop instance from a benchmark file + * benchmark files are available at www.lifl.fr/~basseur/BenchsUncertain/ + */ +class FlowShopBenchmarkParser +{ + +public: + + /** + * constructor + * @param const string _benchmarkFileName the name of the benchmark file + */ + FlowShopBenchmarkParser (const string _benchmarkFileName) + { + init (_benchmarkFileName); + } + + /** + * the number of machines + */ + const unsigned + getM () + { + return M; + } + + /** + * the number of jobs + */ + const unsigned + getN () + { + return N; + } + + /** + * the processing times + */ + const + std::vector < std::vector < unsigned > > + getP () + { + return p; + } + + /** + * the due-dates + */ + const + std::vector < unsigned > + getD () + { + return d; + } + + /** + * printing... + */ + void + printOn (ostream & _os) const + { + _os << + "M=" << + M << + " N=" << + N << + endl; + _os << + "*** processing times" << + endl; + for (unsigned i = 0; i < M; i++) + { + for (unsigned j = 0; j < N; j++) + { + _os << p[i][j] << " "; + } + _os << + endl; + } + _os << "*** due-dates" << endl; + for (unsigned j = 0; j < N; j++) + { + _os << d[j] << " "; + } + _os << endl << endl; + } + +private: + /** number of machines */ + unsigned + M; + /** number of jobs */ + unsigned + N; + /** p[i][j] = processing time of job j on machine i */ + std::vector < std::vector < unsigned > > + p; + /** d[j] = due-date of the job j */ + std::vector < unsigned > + d; + + + /** + * Initialisation of the parameters with the data contained in the benchmark file + * @param const string _benchmarkFileName the name of the benchmark file + */ + void + init (const string _benchmarkFileName) + { + string buffer; + string::size_type start, end; + ifstream inputFile (_benchmarkFileName.data (), ios::in); + // opening of the benchmark file + if (!inputFile) + cerr << "*** ERROR : Unable to open the benchmark file '" << + _benchmarkFileName << "'" << endl; + // number of jobs (N) + getline (inputFile, buffer, '\n'); + N = atoi (buffer.data ()); + // number of machines M + getline (inputFile, buffer, '\n'); + M = atoi (buffer.data ()); + // initial and current seeds (not used) + getline (inputFile, buffer, '\n'); + // processing times and due-dates + p = std::vector < std::vector < unsigned > > (M, N); + d = std::vector < unsigned > (N); + // for each job... + for (unsigned j = 0; j < N; j++) + { + // index of the job (<=> j) + getline (inputFile, buffer, '\n'); + // due-date of the job j + getline (inputFile, buffer, '\n'); + d[j] = atoi (buffer.data ()); + // processing times of the job j on each machine + getline (inputFile, buffer, '\n'); + start = buffer.find_first_not_of (" "); + for (unsigned i = 0; i < M; i++) + { + end = buffer.find_first_of (" ", start); + p[i][j] = atoi (buffer.substr (start, end - start).data ()); + start = buffer.find_first_not_of (" ", end); + } + } + // closing of the input file + inputFile.close (); + } + +}; + +#endif diff --git a/trunk/paradiseo-moeo/tutorials/lesson1/FlowShopEA b/trunk/paradiseo-moeo/tutorials/lesson1/FlowShopEA new file mode 100755 index 0000000000000000000000000000000000000000..6898829b10e117468217a1da659ceac856ca1740 GIT binary patch literal 3033752 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

4}#q}}xWmkHMqjpu>Z1$(5 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

ljqncU*eDfmxbq|`B)@4AI-z%rc5)k{|3Vgdoh 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�vgqWVQKJ zl~1qrsl9fuNc@u&_zOc<`qaz53$2nRrLbtc{?ezO_vwH5)P44ZYAv5ADO(J^NYayz zl^yj%eYd((^Oa-{6M0g*Uw`SB?Y3mXP&isoRJjwZ_n|`lliv9@VZ`A|ozb^z9KzuW zM=n+N3Wr?scfBP}?TjM}tA4ICE}zQlZHE4v)NlTuwfe%Z-wmiY1Ns@Qp3s^luW6F} zQ+A%}-JpKX^gnItH$wiGLi+i5|I_jM{RFi;UauLVo*$wchp3hz&pK)^qAoDb%%Tlm zF;c&@_ApA_Ck^qLUq2u4uMFtl#u+QLek#uYXq^6=ss0_Oe-%_KgZi}~t8->0RpXpO z+~ePFr*wUal5R=*P&#{~-UHMlS$Ltoncfq%S;xTBbbFjC^XWI@)Du4axL=Mz_Hv-+ z)6d1JCcl0wpms~AQ7`Bt?~7B5?d}$ztKT-%zodbrT)kuQ|K zpwKG$NEtR0^>>E4Qnwi#-f&F7LE;)iJ!*GH^0`9Y7EL`=CcVq$cx$a}IXS3HjPszx7hSwMPEgVrp$&zb|i4eE`i{|!@r5%PZ!((e!Pzn`E#PEcPb zkO7@0I_#xB6K~cJ8>-dN|2EY9Rylg+nl3|s>r-F)ZeAHDV`7O`_iFvMRvlWiq{&*( zI#WLw@-GVM#(4jlcwINdziNnnVyJpBLBElp8WMDSf+{`a4M#V%`)59kQhpTj{ z|5z3KU+&8|w^?Ky&L6FeoF|ljv}gZ`S#oqg z*pdG;zGGt^`NvPb^?gHi+8dQ5bHM3qj4t~EhE;sF{eSRuam)n$q?|4?CT8gd>vWNW zxnCNxfJp(j!LF_&WeA=p2ZGn=8bjT~yPk`BWU@svS>fYonzI{D^qUR!wjm21^NBmq zQ|H#9gDzoga@UrEEw>z7Kus4LO1P*51s~H~IK7?if;ArT)7yliji}bDy=dH098y^^|S(267#c`)q#~Mdv>UKk2W@Y=X;b+%f zVfZ&1Ka_pVJ+glwL-WYg-ZO;+8IQ;4EH#5;3|X1=ewDGsP=A$`?X(MKo~fs+g)AUV zLK2m7y5`88Es*yTbAsj~Q8bSU=W%XWCV|iR^xxyu?|l0CIMwFUzw@hFc5QyOCGhjb zaVnz4elIgGxgtjDt2f6NeYzr~{^Zjgrt0u%K3e>PUq28~ zr2)M{tCoP?&+E9ijapMZZ%Wejp=kEUCBiJtpqr*2G!)0hysS0!dxqL8=ljl- zVk-3kyKIBggFhG>P4#X-e;H6u+gp`9<`6laxQ)xc-|OEG z50h!*1bvq}lWSC@u(tiM#|+L@)Te&^tzSKCA800WHGrQ5H1wN>YPS;(9mDzY0$pZb z@S%PWJ�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\!M|DP z?H~K9X{Quxm}y+er@98|Tns(BYy&`zADXjH>p&J({m z6#{-PGe;E6_h7(rTew!{fGAdTQ`EIQlE8X;dor|#$;M9|TI)}y60srCVn21wJ;60M zOVyl>!?DmFw=PtiSgKR>we8PHU)-UAZAFLELzyvE6B(t}to}~QX@U)2c6N%_iNl;g zA>5dxLa5ns0}4F{3Q1*FL=*jqfkf)l(nZVG*uIi*|>acn+ah^|g zESmYM8 zFzY!8#oXhj`>DjSoKlFoYW-tknhln}v4x#ecD_ z6C3zYvK8|`J8)9m0dRaUdwTGO4o<+ zRl-TjUj_Nx(%F{RvS~O^$-K98=9G!)q+pW{ea*9i#zcs`j4#(2FSjMq`7W_*k|OuG zAc$wZbkYZhs2#QbR-*!smFygKsZIj(lQgd#g~Do`i=Pg&6~iuC*v8f<7Pcq6?lM`; z!uFU6>T{LbLqs{2G=*Z5r@oP;`tq^i!YVJnYR+ekTTy}M4nT6XrZTuePkQoq8jYAv z_cJ_b^{?wv?A>#F7uN^@?sVj#eBCYL+~rukHq{m1xwr65R~yV7+9|NN^ou5xYX!sn zBFfp2U-;to+~r*>!u8whflb=x51x%Adpy~e6&6J)D94Tm#m| zMQgWLd_`?q_8m z)}jZsb^_zyEcE){K%U(0QZHs9yBnRnn>*g7*W^}BUdz-u_rGOynrzOdNq#di*QB*S zmTU6*zw0c6UjizlJqEkHQI+^FEq!lg_svPPQ%U79mXjBGTqy%tr93$3Tzt!M|DPrjMmb7teUsj#o$}D#Ukl zfT6W*?@b=^=Nd@qOkZe>A8Cj_Vb>V`%{J?b4JYH#bPum$ZhfRXtXoHK#f+M>{*UZq zaAbHzbVUN50LrSR?C%3fFDbN_9oS|1*};YLfy2|e9*z@)<<8lhWZ8o2_!iP=)YL-G zEu;lM5tW4Zkknn<5Xcwv>&`aZvwa9{sHZoI2B(y>Abrle751`x`wZN-J@*r;uUL2A z$Z+Prw#Ggu-t~$`6-8{im39X!XU0HmW#Y3?VdO0GXgw!WT|`Xr#;zJP?FJs2fORnF zILueQL_0aM3{(y+Iz9MV(0O(zmA^-uW*(`M3K+v$(K-Y4Itu|HKqip(fUA$kwPTn!DICVg=W>JA1H-N{%A4r69} z<}z=0J8vzD-x7^-@;+Y1RC_Ym`P&93%kjo!{vUQ|_%Npt#IN!pQ9=i8Nup>@6mH_) zv(#EI?sR3rBY4dK9x6}m?$GYk5sA{<{bDPsJebA|rO8S4r{O^KXJF2iuSMl67S0VXeeiciI=cyPfs8uzL}>7K#qPEb~2Xl_Bl=00l?Ox$PO)|Tw^bSSfV zS!P^$z7<#ABMJBSSaD_Ajn{Z4#+9dSPbyTxshhGA3yc453_Z@@0rY6bLN}TYJ^E48 z>hccK>U8DH;yUMvh%DI}eYl04v?Fh%z9O<}n<}!6s-$u^&jKQ+I#u~=ouDhOEZSd4-+9?5b`lQO%ITN05$RS!9xg){EwqtR2K4>ml|e;DY)D|3w?UH@x+ z$YF*an@F7H9q3bKDALeXQn}SpTtH4Ù&u{YI=V$B*s%abZj^y6JgpZUbzRQZck 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

DG+SbDKmf|rd-GjBiP6s?fS=<RbZ{N27 zl_c22ux!D`uhf|YNfK;gAThy4A++B`1h-%lD<2VTg6iP?FaHKaf?yNFkb({8gL=f^ zpe4L{2EifNxF9&p`EAn|Y%V86l3){qa0@olA--VqOQN|2n;4c7Y^*A^ZTBA^!6Dc< zA*?ES#}Fbxu!%t!!6syg@IGw-9D+>}LdXu`JxzoJ!6pWv1)GQk+rO>LI|Q2qfQSLd z6CgpbiI?{U8+F_FNB_^7@(#f!0YI%U{2u=j0TKk8Sb2wFqq+%eB#Jx#7f1<$O$;e2 z*r=)$u4Q?*U=u6em|zpSY2|pFQ)X}Xe?F~4uo)$<5p0y3B&nIjh{Abfb_+H!;(7&} zcvVH=EyHCAHlyRBU=yd4?iI!T{)hS{2sSa&h+w0<#d((~o=S`a!6t?g5^Pk98hn(6 z-GWW5Y!$&qSrc5gg+~a?ni2$?MA(J}8)wrQe3Ujg-s1`>DsIAPMVpWTvcoLs%YYlv znw5ddNTp{DKI-1RyfVDDXQcO}eZ#Lc#am6cY>`2r`qRm_byKIhf%t`p^?1GM^zN>% zZp3V_>+2rDRwoK*q3aANT%sksnzg%o<-oe`-i;gg z-n+YdU~s6vXN`#@-&cLiW_V=z-g`UPYQ2p%_9ELxVJw$p-4er`v< z@dU5S#UWo=JG)!(78bpfU+>2YbNNG&WD~5?%Gv!e0CcKD{&vWO(w#`%dq*rI&E`H8 zX0A8)u}zHeHqBqawT<4~$3jp~zG%|0xlg9ak8`QFZf~bI_Q{MuL0N!8rT%ea#nT5V zDe@0Q(Ng5O$N=(xO&X*~nU=c%IU>Jp7WrC=lo@&{x`sLFq{uzj_Ed%rS&lw2qi6Z@ zp}yhaxr-Tott|Z{O~`E|UEyv6T2q8{fy$t6))lYUm#Ak-)G1?;l1hFIKx4wAGF5p- zc3UMpt|xLT;W0ptNsel3i9#leFFD>TZBDg;EP%GxMbZtTeFu6YmDm`7MP$aQd^sA-w3BTX@$&MQ2_4ycmQ*E?*R zPhiW1cN&waJD!d+tLl!X{(47E())19k!fATUpx~tut|zzYFySg(|VM`-Dy+&Q&nrU zaV?dRj?swu1Bj?qMrpnBaQ=9c0hLi@$POg^pWnb-tuo47J-$51oN6kgZDCAbRDCv} z6zw~)_SN)78`Dx2aTCzjCl~ZrsE4cy{?Kmx*%nt0f7mYYhu0D9Nj0U-@J~nfIM~w3 z!_r|}j}=F@D`k-hQdzv1rs}O=JR{@#^H!4qWl?2Ff3h?Br#xs*fwHJhSpozx<&VrT z%A(BC?%r)YvRumIh~*O_EuKKL!UV-riQ<$NZ5T^ij8#T>-zS<=TeQ)PxR^Vb;-bXD z3o#6WB`#KhxJg1RXYEAW0h{5EQ(d$Xe0ec!LfhGX+l;R0QajJ|qNK9r7wQ=6wgm)vc+%lsLX6uZ8yT8Xe&5`2P z8f^@>*eIRii;X41xx_{rOsS1lt=i7l5SH4Qgkjandw>{DxzWZjdSl2G;k8cG2$tSh z1tMgL@D>olDLC2)T5*inaESr16vt$QhzXAo!6`X90Q4Ji(bvpqxaA}bU}=uY2x?WK z2LK{CMMoRJp*pHA!%E>5sDyH=jy6FhJ=&}h z?NK?56EjhKgCI`r(FO^LkE&e_F4zjCUE-r%xQhCy>W-$CN2!C2q z4Yy(W(b<69`^6mmqtzZm?6T8f+TVjIcsaWi7pPMm^0z}KlzzO;SaIBY5o+0fJl|B; zJGf?WNVNBONWz+cNo#wC`UXZs`!b%27*M9I>05!6UX`*bQ-&%lPeRgil{BHyf|E19 z-C2nCmFlH-GrJcrgDTnA2YqmPUpL>K*|kUalJ0(JqW$aoA$4^N7RF~z@r(CB8i0Y6 z0P}(HphV!WD14a5zuN^StgC_0v(aTjk1Bk6%EB>vICvF2-jRI_W_0qfbnnYR6dbCTWMiu6E}qx7T`LS zFojDFUkQ6i+M7ZN3xMsJyL2i90D3ru4i-Qqs9+&0rB_p_U;%1e0}J4&fo*`59oaMR zyPB8pRA@|Fjo+33ujyXDc4Vm2Z$9E%pWBopL*~SxzO{!A4y;_z)88k?uV*Z=d~qp~ zOMNSP)~y*4<2R_(OZF$bsgvPNT8AeTv^kU8rUk*}`FT2h{O*2+$Pb&e{q)JCl|kd` zhio}wixr>Z$vVthjGvcb-Th*IZ(H{W&v_VMXc<2rgTj2>rDm?|8##(EaK#HENst*c zaf~Ych3VtavDc4(H_Ck$oooCelrzPKbusmph%pmeLY%obKQT^-_Z-Ng!*q~xw0za7 zMwn$Xz|6X2S{37a*0b0eb9s)5n5)xKh$N=att^DMsRfs*J6x`-E0h;2TlhW8PMwG< zE)SQPxx8gydD9Fq6kL(G6sOB5zUruBIKio%Nq z)GZ39MrBEa~K7DYxrbF%eTWZZl;9TG5#Nr)j7bgLy{A_vH^w2E<^MA$`ev zl7Gst%_$Ir)hSy6K}`7vGmIE4bF`~x?0_tX7;JgONWldf6^1WEpWZ>gCw^IfQFWaWe$7SGTfUin`cGe3YKqG)l1h&fi5^$Kl?SrOtTmnui z9wzthW^tDQY?Th=-`miHg6bDFKwSQS^!%5jTrDDQ#>yHCYF!T z-^21w;nyx7k$rvhH}O#3Df?RG?Wv=}C>~A>m*{Ij#3bKPYvv6M;jct;O1>79E%^F1 z`Xw=(g0F=UlY13Fdwxd%IOJZdctq?C>LR?QL~x0{7KGYWDsK*9fNKmuTToSK^U<6*S z6HP~d)s&A5yvYC|D-Zy@6VP1pu2o)(yAl4?rg&W3O)MXw|1!(Fq+PqXFYKzDx@=X# z`;#di7j_fNtL3rk6UAwmsX1j`tGGkdRV|y<5yc?_xkOzHC@SfydK6w_afhU9m2OPX z4c(h^JkBYjdv^9&}Mt)f*#TxCme#TH&c zP?v~X1+`%b*V$;C60XfYS^+o2EjtOO>I0ZIm$Q>`VLH_ze>-GCX>#XSku785iHP6% zoH=SyaRxH5-dt|dAS%kV+e)B()b~=;STSMq z;BRhM5*PN{O~cm^7;C}L=ldvk2;p~0{OgFHLTq%y$Am{^zVe%FjY@bN`#x}_5FXte zF%fdQ+}@)&$mffY$CD#n1hCpK6TJ-ftWsVC(S8qcQwWl7+au!SbZ*hZMbIrvS}(6c zDsj@y5E3e5&=e{?2>SRO6Wr9vLxfJsUnX>9cSXxBXXh}JhaK{;^dtQLL7YWxhRIT! z*?>f&&F~ELl}k(-v>BO}`w5an{>#jm3O%@3@iY9svTf!q$brR``t)B<#p&Q(fCA<0 zL-_6FVQDVXH~PKwZv@l5bQvfUdVHdXgdNgM0&Gh~lfv^2r*@yohc+Z2x-pz5W&r1l^nFQ{mLid3lvfs{; z1zb?wmSr8~6-_xVq$CXu6)`q;!Z+klaX9?j$-}ZtC}){~$8xfV4lt94xXI$M^f-S0 z<_{H2mP5t$NHjwQ&p?O0!=z!TkZC#D_qR2}giQ21E8tH-fpYe@`0eE3oYlC@nJtG) zv!;y|lXm6tv*Vvf1{r%YbMdXeEq_m;8hv#QcCYg*AiezR5Z-WXz9Po58TGPV{gU4U zkkt7Ka5}O_zK?Zg!n{L|8Y_B0l5amG^8xN6ZvR$>*;M+x7l=X?w*5r;y4)or=2Xu_oKB}n$Nm+ozJ?+(L>=9V@HlgiOQ6U zzQ4J~>Tx^U&7NvV*Ph6A;aZ5w|IvaDM25GY)?5oX4erI0Cf|TX{MKN6 z%%VraS0~3CfLM6pUa;xBcGz@Yb8VXHe=10|jFi{tzqIBWe6O?pyG^x5e!XvSa0D&% zcr;CYT|{MYh9>+03E{XVb&L=rcSwNI?};yvaTmPYr2Vd@RuO?{YOhE?-q3B;^SGIs z^~cSvXPh=#*`Jg427F+&{r=`wmT`G<8;rBI^Ji(=hnrm6IB&GNKOpZ^yxP6}v8Gm+ zn|_w{t*i{hN7%|9duzrgnp@K_B}a;&0e_B^7voc;?N2wgl6#?&cm!irane4T@7d;7 zF(8aq@G25sKOPnQLsKg_6Facvw`b=j4$!<$jLE2>xl-5{c07QoOZ!VrwPP>XvAXY+ zWGgtoF;?6}EAHbx{MDvfF#}d`Ya2GBjdYnoH`uV|->lRQwaRY$X)FHv4q3r_rppY~ zHga;CTje&I@kM-{p#Alxn!%Zb$x|=CCa-z@5{hXB(-mfj$ z^c}P$sfnn2qTgd)qA7A?=!AE`6tkH$g;RzP)Rs(q2Q5kElr3k&lvm!3VdQ=44Fslb zjcyS*3%5{Thff$)m&~DBfaS>pSdq5)3pLql)Q?)IeAC!>z&mDNf}@s{d;@29h74qr zk`2mVNtNfofje;=zAxL%4$oP8@8H_xd*dQFP~Mr0?|6SuE6jyIr&T8-%BlU8rdq|h zSlPTVY6tS?Wv~Q__j=(}}q<IJIN78}aq5=za`<2#s`^-hkLe9Pq zVFyP8Yf`tGiP;jGML$1E{t7O)Udwr3A|v-LwI9~hA;s)+VlUNdikF|K*^X##{R|!Z zoUUBkxuoNssPS#^UNS7`b(!y|<}jwBG1| zQCg4C9If#M0}}3qF|Ga5rV@5dQ?s7#bpw@?5gMSTIDeGALiR#6ZSYpj2S1-qwl8ij z|5TqJ``&xxg9CqtrK>NeRo=S})z!bbx%9E>V`0f734*zwwv5BD z@10wWd4G6^&6^s`VdM*|%=@cCMyerOT|FNAMjm>YzJ%L1b&k~)y@UUkHmYBfuvN0p%WG4d za=7-=*6)N>eDNFK`lkKCFEQu%BZ?m;Gk4~--^zP((^eFreSH2b@jqnx3HIc-7n)kf zJy%qqsmtaUnsKYI@p>mO)}(uqw0SG05GyaCzozh6Um|Oz6;&-amvwsY;JSekRaw>7 zu!mW!`%UgiL;mGv zSKVUo?~3)agEKpAi)w$X+05PDL(96?_YGB6oB};W#c`?y1@^%##yr1s5mcp)EPu;c z3eshnT$U-NvAx)xHx=7sy4RctU28;iU(PeJJEmpx4LQ^ye-o9R^UzVdzm#d^>DU5v zk4d}LPm|h}zh&@glly(0yBW%f!ag5BX{u1&e^tYGKVqdT{XJ`;vzlGBvE4NOdm^~` zhaXz-zqBy3TWmv9ltDQKe=Xs;o2UCtfB0+wKWXRA6j^ic-{hdi)IG+3#?kSztU8KF7+j|N+HK4o^>*N9E^sC%o%&5lS#%ILOtE!Du=kHYAPF64W^N{I2E7nnT;E+1(%4~8w~P+qcB@TM~wbC zp{eC`A2bT+m~i7er1Mx{Q@H6qbQIW8mBxquIH9T1bRRwnXj_u;;r~u}h6Z&nBYa~$ zQily;wZE5o(xZnhr9-SgPLrHEdXj`S#$Mf2VPf_zG>{Dzy8PjoVqSsPIBIBGw~%(V zZnA=ee>Dy&u*+qx*(r0xII0SP8RJK5HD3EPZ%x|u7gJ((#g7|NNc5+Q-q7tUh%9+PEE z&R%R``qfH218shxN$btD%Cy{hND}!9Gj#Z#%<$X%wwbqaV`KQ9I=y=pP6ux*3Y4=S z!*3@KOAl4XiXp$ZeVt&sx4n!EFyC*|(A#8M?k~s@`RAFTdz;MAz3s4-$Vu1Rthfm+ z2gv>x?tmE1XlkbQ-~7!zLmLXW8>X5aFg25m`g}Y@^}M8d?@6Fd)hBB(#k#4glyYpS zn_fY>RNb@&U99J-fLujKYQN{cC2NOuR$C8eZL`c*Z@Q)p^lj+wS+i!aS3TCWLtUbm z%>i zmI?T#20BPN`%h-_utOe}mZBf_;#_ulCd)3r3ldG2=NagDvrQVhyiCiLTST4@79?;awXJM^v*vRJ?!FFf|%bx5v-3)g_l9dOquSJf~(_`|U0WE-s9 zM-$v(c8!?e2(Cj&X1LZldGo9s-Va`Pa9tz3X+r8)`-mkRq{YG~Xvul)(B7?(x<)Li z9Z2W63i}Sg26rG`12%+$+5GT1)!r&M8X7x%Zgf0q6S?j~69-WpchFn|H1U|VXr0b5 zTz05j6Ud?!`xD9B0dkFS#lzF0H9LB(CbPrhn!y&W+KZq>JQ`>lgJ(T)&NfseHN|GzYL2V?lvl#Xk|u*P#JfSTLUaLLfbe% zag;`YiX0*}=HhsT{C=BOKrkHfz9u6d`5@QsKfRee4Vw!6m1P zp%61QU2i=_TV;iqjnb+Fr(lPlGV9c^S!^mQuuPeC70q%7mNj5j^>8xWnHKRu9>>WR ze+eh=k7^~gFn=m+afg#NU`zENGTtSP4Kzqhc^~Ob5Sg0rPdUgWGKfrF+DEY97E@N3 z90rjEIZ76sa<<845Shx}1B+HMJD-WF zxP!hLAkiCkA{DvNP}refqu_{C<8S0h2=HovBepw8t>e5S&jLw8SXToi(QQIL#}CMn z5X{v8hpk~Np5l&YgU21h)c{Ro>xUYnIaUhqYSOp^w;G^vgll2Cu=Ol6h$%_W+x&xI zb%$#;!Wxb63FavJRv>2p-i;)cRkeb&8X-*=nuXi1Z4ZY--xCL%qm8mcvzlU5m9PwB zni@J)tKhM3+Rtg4yhv6+RwJfGFH*t|C}UITj*$zwtN%mVCMyi988$WUt>P=R%pH8y zfMwP9zj02d+cupeii78Bb}Qs+H0;&=VQgTd5#CeA1}o62aT`M6RjPq<4J?X1=jr-d z;Z==uCAUenD^D39Tch&&YsLyIsA@D;RQGz=7TH^+_lw7WSbM|@rE1(389+6Q4NBZkrreQFM;UCr4SpqlQ0r-mq_8|zTbt3&fN)ib_rDD5z( z=5SuNcdUmb1~)at=L%_36Kw1%XvYk=^9iitJF@&O%Y?E#F5Q2{SaIb(*k&;2coobv z=fgY)yA1qbrlmvF8W3OTT1tZ!x(jCkk&egKEf} z=VWNWG{!Mumx7L8Qaci&n_raXfo=G|A+<6f_lSf$^g^U?7sQ;G)xPL7cy_Ro+UxMF ztXbg-Vp89j^N-Xf##9XDqr!6r>FxB^87S2)lu>ORABR!YD&}O>{_HdrjYty8rnV6S z)Jh--jddV}P4a$3Bq|Scwn=YNTwqXEd94>|tU?`D1z>6cu6*TvfMC=S=Ior_u&7+% zn{~ZG>Z-#m4HYr!&xE2XFlSaBP_f0oU%^=y1B;9QIs4av6VUGB z@;=Yj%{hW_=^7V4y|s7=wtoHt;p)13%R#wqr%M2b&t1(~l^%^>zDj^wui=L4 zsH?$a7(=F2R@9$#JV-nSI?a)vj7wMBP+${Yu%ZM5+1&Ip`BDvfL;6Z<(1dwC-kXi3 zIq1}kP|?ZRz0?beH$$d?h4OO-i$)B$N$BrsF8&G6vx8Zo&d znR7t;ipLioP6r(PNsYXq4r?9Iwj-`5G}jk%j;_b(=rY1-^nVTVvbv16plzc+z2 z3v<@hV{~*;0Hf8SAT+*sw;JU0>oVGcR&)PQ^I#wkCe(=Gk$k~^<9*S2Ffj*lr#j>> zX6;BQ-FVel@unYDFz!>Rw2msc3mMqlTrg>fDv)Wp`;a5@vzVcy3S@?kD!7z6>7ok! zm<`O;tsov6hOe6NH}@?v7XD;#YsL^H;K~4#FNc8dkiZ9B36fM10}Hy^43=T0M-?sRt`1I(A3G;}(dmb(i%B7X}rbf=RUy3=iU z4RX?Ty2L;V)eU2@JhU~_`VfC}U!xI)^9)tZewdz02J_q);`)~4`X{+kb9E!(4po3eU70pSt2;lWCl5XLTN#_o^83kRMs2gcOj@F3E`#%RO+)+0TTHy}7 z3D-R*?{$@jN$n22X^=W?>`lZNj;Uhd5!b;OckE4r#-t9v315yoX@)!erZF?@2prY? zD!W{-nd}IhQB$dnw7O$mNh)^`PGd|7aX5a>HoZa9*>O0{;fq#pBl+B+I1SPzMC17N zd)e^W(Kt;aj8^c78&N@bKu%+P;h3CoUlf%e87ey_XY^d`>KK6i@qU+^P%U>@PGeL- zWKOhFml+~EGH0|*(JF2Ac~r?AoYNRliufE3=7^Dz!)WC)8sLu4Y0Q8~(1I&O$N!R! zqTk{Rpm&GpG)7-DN=IF3KT78lhTe+O87+On=5(R1zaO%&#TQY1cc4yV{Iz3sBK5z_ z@LRDuqvlWLfUUly+rJgA)3^aOB6j@t&mmJ(E~5eNh@Hj^h_ruK(2n2!75z3}2E99I zr!o5a<94n#CRlMh%`hRU8K^s!-w(FG8E$Zg?u^EUdZKr(GbUKkJIyd5l^gc{3f$lh z;AzZ;I%0S}g=Jiezt#!G@Ti&pFN|SU4A1BdOK^<|<5@5}WEq={3gc0h^?nsDbBFOX zW?8yO9*&~MTO88W>TKZ)G{+su)0jD_f_Xv0kfVgbDTkSC2J@)wHCPUdDJL<<1oOxoUp?@C!7O($Ph(Cn@jOFZiHFVb4)_{U z65@FpBMU$FQ{RA6(@*d7q;iM!G{$5$v9Ry?)e>Ir>zc-n>KP>udy<|_w+)lW9oW+t zjlYp5T$#2f4T&AwGb)yFRlEbgfvUK}dm1AN_RMTHCv<7PYBin}K|qZ;&P- z;HNPfTjy3(#dm)bRPLCc#+dX*3%PegjpiIug?Blb++jbBF}WjuzE(25Nok7Sgl~b^ z9r@EBaWt+(1>1ziB%k+2^16e68sx1r{wHh_kA1sle_PvS#s4(RuIk|g%3*4FRV{?a zzI9L1I(GICK69tsuwDsT7W?4}{O){%-pB3Mraqd8%#*C}JHA}?;sVhf! ziQ<{JYXhuUpivr7-79)ZlVbxC-fPATD;#K4W`rVwRITNkl#A=Xt7~mV1dWO=xrwSk zoWS!r<^HkX(}q|w_gV6}!-N{6i|?v)I(6$GXjVH?sA;seb3aB}cd$^StkK34hZ?1H#SW>7 zI<`mjU>e;y8#^F6vivQ}gt9y?t$uKQAYAgs7XQF#YBup8Px_ffk7&6DUA4gjTi|ussoaDmrSdyu|IR!`^PZSiZ!YY zsUw3_{Et#8l&SJ5gZB-C8xA*0kDIV)FcC*;im4cRtd`rw?S6vlSP@6HX{)agRnSpD zCcHtz6An5`%@c|{3SHmg?+j`iLQBVPYp|!_-Y@zYcquP906qC_M3Y9lO zQ9PA^R`gMAz|fbEB%JUbB9a||R2#~E7~yyDwx0sgjzOx87z;zXobw3PhlIDDpjH@C zZA`sb!gls>OIEYLhYV;W5~(iK&`r?q>E8V?)ec6gjcS%YFjg&n!UM?Jgtg+4YNN(i zI8IOe)__Msk{Uv{J+jXOFx`quN&_BUuQ*M=%78}#lNv&|P5&3st=ObA;L+6wOjoOq z&@kj3!Re+1kAx>Rgsv7Dp#~E~C`rm-|MW)mt8#V&xI5J$e>-GCIs4RZSyB4J&&G=3 z!&Jz`EwoXGOx%kMY}vlgq#td93>`8dGjzzryoZpJE@Z+)q%7*1+BdkU zZ)mtOJkmEX68Z8FHmTFfOzRW;&D~D=!dDDQ&0vW%Br;6mt09&99w}ic@he zL!g)}10k|VG=UI21HEc{lZHSDnU-6EB$1!N3>^X`GyGn)Z6>=FCIbk8Qm23M=Qtg_ zPr-z8b}5Q=^04&w<736Eet$lbV7fnVhXP>!lu1K>mT9>Hq4M8ghVIWYL-*%h9z{;N z{#+&W#A-s}c&HiOf`;P-NVGE7N{b5D8{V2-yg}aiOF%q^ls@s6lDO~~Qd0H$x_Dy) zfvT{&1fhZ8(5dZtt?b@=B*1LF%Fo4Jt8CcGnNfL1j}kvrZnCWkNa2gpTY9=z@6N4>Ng) zR{`O$bUl8~_6HRv%Ryx+63w8(Gtjk%Od19inU<5IME*i%=s`thm_g-Iyc33liaK46 zLEzm31s+gk3FpbFBCu3<-x_F++x39q|irqzSuH-@!FEtDONEoVOiTT%p=HD*iAXfxG1 z{Ajb*-)dW`N1Kh-mV|%`x!!_fI53FH)ifqW=viaN)Q&@ocxLC{X=AF#p^e&@RId3p zt&zQ{dQe*9*3^hl^LvxJP_v(fH7O$08nY(Sn`(xuJx*IvgsU}XOZ~BHz0YZTs>iN1 z!=9w3qwceQulffKN)gC58iVSIYCHG$+MeoBZOyPJm4iB-he0Vq+!`||MZDV_Y7$s9 zZNU1u#a~K>;@#Bp=`mwv^?0|@TbbarB_-d?*TZJAsj1*MWoG{$;LH@kZ;hE*JrWLg z+C@v|sKux8Bk%ueCA{!$+Lj^`t})xHhsALgU~J-zMogLX0?aXCacW9FWml8PusE40 z_gIN3Ws}3OxFAP~#Z#7>Y=*_D?Bx(8#FVp`W5VKOjxYImZ!#-ISX^TsQ89A($k-~1 zBVn7owSPoPni#ppnC)lOY6|ZCfxIaK<{G0l8^PF<{R#_j>5H1PM)ce$N!c&;TBGej zlBNiyYmC$1RTi#h+x{HAWiU zU*~h4{0cbJgzPoOX+L98yv3Kun<9R%FY7hZ{StXrU>S1jMfp^hw0Q8 zWdBijLOD6{{y{5JMD{gkMKo|MnA2%jC?l?XO}oPS##b}c=5#TCn2y-?aX43Ey*KC2 z+Q{lLe+_!dGO|kCkTF#a{px!1*f;e>nwla2ut8I!7d3eYU{!Zs`WJ0u^=QB*+1R)@ zi-o_!(iEYAjaiyz7pS_xY>T3Jo3W;PoZu*}sqQZ`l(EqXZ}-1x4^2twr# zxpA@hW5ZoNf^bya$!(mAD?OOW!9rc7p1*64R1YT{rB&6hQrI>*I>@V4e9qWbJ+^RE zw#h)l*@16Dfrf|w1HMTSXxJcs5OpY<3AXi;FGbX0V|;p7En=#8>2+IByJ`=9T~pTx zK^!$VFRj1Q@%P^TnA~aN5gX$+J9JTTwL@1M>!NPyR4JpDF8#N)iC)nwRpBocu#4t9^2HOosy#Y6*2xx57gy{ZaxM9yl@t*h_ zV?vGS#-`b@-{G+ynJ(0^QGQq4qgvo#f6`K{I6A)z*{>tZUu=j(LRlV{4j4C1EMAOl zOF`Tt&k4mnex6#Dj(gm3lX2KlwDew+hPX$Wrs5vu7OADrm|Vm?s@x8g6NUZW0+b#1 z7^`$_gHy2GWJwqHI?XjNnwm~qBKX%6-w_2_AAubcsdiKCBkNxHFG=i}$oe>9!kBVv zVd=j$bTmS;L2T6(mDz2#5!(?jSs!*p=TcU;<^H3QW6_fhL5Gd@RukG0OIaUsT(?qo zd-oggSY&0R=t{Uz{`Pi!8>TzrEb9Z0>QKJnXB+5P)MaDX5wo8mwkrm+KJ1vT78X*qYurDbw!TW2W&s1^M{@d#COG!)`uU9D!q`iv{s+uH>7YxmDb0gSHoyp;hv*b z!~3^ridc+k!yKWhfLX?+}Kb!+-ac%aK=LE?x%t&bzVigo(zR6`YuMjbVm z?YkGq<%mtKmnym{byn-}v6?CtsXA&dyIS8Tmm_YqUaIIS6V+0y%+TQJ?TodQGm3T8 zTxvBLYJ@>dt2DshzJLYZT-dOhY0F!L$Zj(IFK=%u#`A}PG5zalA#?D#KCb*SxwE!= zmk|9Qji-wZcQT1DH#FFfFW*)$otW4XDxB+n2CphZCD&r;DrfgVEj!gAe-W62gmRYkDrXO4 zCJ##!HXA2SU7%ukhmdMw{&qnI0)swg(&l7ZWm;}`p$@qiU1 zns`8-fo^|}N$btD%Cy|IND{%<)?{KZvc4a=TlDibDB)e*udp|hI|p))hgX~a=~cV;$2I};19ikKi`L| z@rO+tf7r&*B~)+ty6hA8;=E2Cmd@H?oVW^IVS;zRI zS7-9(I^$P5LtY&YKK?1w%qcJFQ_cf|n6iKwYqtmJ=9rF1RDJR8U=}AarSqf*_gXJ| z;3ztuQJ*iN^?n_s9mPE+BIN}(y$#8P^E!Dw0x- z_6}_psnMnQg&muBiL6?fQRb--4?VZr9D*3W?xI%4@ z8=93(tB}tVu8z0w7N`z2Y;SF|suKv>mmbZ>OtMu7?+b?Ml%~}vp!(KPq*B+&+k8t@ zit4s^PO~bdrS3?THX5FfHLXgTC{m&4NJMGcyR>;k!=TY-oZNbicK z5!n+*MOM6vWXJCcvYVQ9nf4m$lhs;f4M?1v39oZ&P@cXGj&5yU{d#-W_ViXpPKi77 zN|Nzug?C5O$YPH!lqcI;wgJsd(G=#|kxf);whI$58_I3B3)YrQj zbws3xykLs8?RK)_p^CT3m?m8{K4EdVvdzo;OxuwO^X<{!9Tk=3O7B8aZQw0m3aQPY zn!aLa5bqURA8sSU`W=hL#}3zX;y`1 ztz9>K5*EX_Ows8rJt>MqWZaC?>A_|(&RjdVRuQh(BcUivngSj^w=5msq%lH2!(0$j zhh}tl4-5|V_pAwIK(4y*n$)>|?L(8(9FKF#4Yz6Yyi1$qhI;Lbtv;l2!4jl!(Dra3 zpN5tOn&d$L$!J>tiMZ=T;dx`zssDd$;_lnHS@N=q;==d9Uwq2xJ=3f!8hPZY)`(o6 z;*lr0_{h_HwOL%D=bvg28k|}H$vu$fOE)*k+49c5qOxX9cXR=a+qO_u`t$^hnQBXiTXM8BsPGha5{NZ&)8&l2eb=k<4!k$hZmVQ5VoY?wUCCW2Fit-oITrJA;jEwKs zubB*p@+w36l|9ox<)`Kpi1O-`mw+IqJkJax%F7(>_V>LPSq@P?!7oa2$7{p?LDRw{ z#j}X?0$W5(aZi8>%jt*{&|s!g!uv51U2=K?qEWD~<$X~ZC%g$eYm~TFUJK@b66P(| zRJ1K3j7tblK=IY*uqkbyG#GJ}yE;hN5btS%xFqZZj6gJg42{jWWyf7KOkAI?iF2sL zQGW3%#Bqtw2{2mljTrMa0}@x3YoJ6-`6p4FvT+hhL=*NabU+7CoSJX~ihVm)NX3hZ zbE>%sfHN(r*019Zy8_86)g~atbXWz`eiC6EI&1<+L}U$y zFyVcTI4+Sj0Z7W4YS(rc<_!ZAS5T|rsLj)|M!q~+-VNqB<V(pFdZl4(kMgWaJ!W{$@>Re{a+@VVpC zTa(DC7KFSenS;4V;dIhFbhQNbw4#|`bF0##@J~Y+70sGM$d}Apj%I==?%#!)x)iYl zW-WJNQmE%}oE(bc*#vUQT?s%TElahx!KaAe(6SN$0;MP3PU4Y7vhRH2e=s8?c&^sA@^vQuHrdjggQF7Pk{Nor@p{s#IdB%3!c78h#nOc^4Wtq^C{T~{5Ir{`NdDtNj zOSASGCl(#2v?V4>ZRuS|G};o+Kua&0G-yjQEq4HtLfVo{4784KT##2Op~+7gqgE&YfDRkS7J56VjTVtt~lM2bx7CHxhIZD(lI1X(FHENhFW`3m+V z!d6q1Y*WMBkW_~BCi|s-%4V~4Sx89glzt$H zDLXO4NJuhAJ9{;=ToRJy5~UvD{lD={{EZh~yLWQ{jDv5KhU*!jNhYr+RwC;GiYEXAOd-_P8N9%;C8t z`=>ATbncI1x6orjxHX;-TH9KpxilUNOUXM{mD+C82$sB)0AW?hdz}zYWygXrqE5&V z;q7&R2Czh(WQ33%2-+ZmQ_rygw3HLE;5(+gCFLXnL=1R?08SOhF7FFC>V7X9sPJaK zUzfK8oJ0V%f>8aVcn$%a+Kp8{D%*s5J!>S2cN57e+gM0Z#YR=7FzY~+cPTbj@zi3? z)NZ^DUhb2EwV|6kD=_HCNh5^F}y%k^}~O_J2iVnm@Z8x?lxG!}7MiN>$5RaH^A z%y7jdn$dFcd)=02nIMY4BBxWGu}HNrgZY*oIXUkV#jWN5!zs*I7$HqYwWz^WEbP)` ztg=oy2A2*(L~tii4QAn=iRzSNs=%gIV*D%Uw;V$sYdUTv#-^`Vgo*T*D7ow`n9yH` ziFr9YjEmE$4*A<56H131G)^3Tgc4zHR`JFGgtE?7?*d%ZI~C46Y+BLy$Jj$W0(+;Q|9(ONmJYR-K!eKJpe4 z`6VK!kz-=OF-=C9th^)#4W-G? zD&L2|cM4E=*>D5fQ|KiJfhY7!4lbQ2UvfaOOm6F~`LcvNcuY7%8-~+=7Ec!|-e3~m zhY;Y3ix*^QlV8;DAM5ryn3zz~E?$hyf%BskomCl@y`gV8wtqjlOBT1+iLzpu)yw=OsxzbRvEAi z85e;Va|j?R*yMOIgPvpc=psbVMhjw-2*kmJ*ob(!i=~1Tbw$@6mEl8_5yNwrYiDd4 z0?3`msrvehhysU*i)8?E3}xDi!8OYRpvBAS(szYXw!H}ZS=axJC|_>{%4)khGe?Hj z4ItRRZ>}mo-YUOtvogw`f_T@9*V^T0^j8Kd{p&#;TmST|5vfsO2Q7f(mC9$2YO z&xIgzyKjW^PRT4^w^m$ywv90j86cN^XUxRSLnYa7H$i9ZWL{Zz;j&EV$exRPOF6qE zGkMq{4@>9c|Km?kaw?OhoO(18jhxCeaL+o~q(M%VX}OD#6p~YAqTe3@zdLfv*~{_U z$wRz46Evm2A2v>G#6cjZGMRGfR)>P8ikup4fwi{kktfsoCVxd?t$|L^RO`cLy)&)< zr?7uQ>}tYl0=A{D(n%UM|2v{;bye0vc{~4KlL2*AWyqVNycYRwX_Ho0Wv-q-3^J#R zx|(2ROk!2{;(%7P|BSd*B-R96OJ`ME^%Qb&AEuTH0{o%<_;WLyggNw$WL6M#lH+F(v~#tICjm<;~SUW!RhoomHK3 z84$#ji{PGPe*sv*W?_Z=bECIGENZ1hX zBLs1(ux^Y%ioFkw&A8KM}<(&$?0U8MQ(x?!6dDPL0+L6bQBP{=l21@XjTkTc~vd+G?#| z#|MezR%_izG09fJv~RftFfPf~4HD69gWisSL*h7fTQ`stZ@D_uBM?VI;azWFEb+Dq z4hK-bHTw$gKZ)a3aNRg=8CN<cO$lZ+JIR4ZgrH1DbEqbDe@+O_)4#u zcE~0zy!RfZK`f=WItmxDdR#58CyG<0f4xKU$;rA)!)dLqR<^P$K#x;z_&HGrT#XD+-%iT1CwMn6D(19@6o8bO9FPY zr`3V=R=s$oMd5RXFs1`Hg^*kI;+)dkqWCh2ono+?Su4VFBaLz%Cx@cA>rwzY6=63} zNETM@ZSccHaLK}M0H-#rw(2Rng6p|(bI$6V+HfuGv;wiURnOV5+yZfe4fU$Tk$wf0 zIAnqBR9N%A3-kYS_9}RzQyucRLncgr1F3SqT;IsxyvoQx-|+AeLp_y|VZ0o7*Hbei zgKNaZ-Ld$e+T}cJ8cxs(gqZ&Hu>?D+XQB$Ts%zfgK)ynPBPhqBVYGq(0UKAqLI(3&9rD-RO6MG#AoVIECw^<{tt1|-{ z#n#8^H0bIwEjJ4}BELH`w5~2Q^a5=obJFPQ%R)-}GI8%Rh={Ev(&iq(u_)YafNJRI zVW9cT#Eq*0r1Kxd`ymQj91qkKy7{uXF{NA?rRpvFqEgCFBwh-oeA(QnHolDS)lq0f zRu`dgqqHu?mPMF{E7=`c14xI7_P-M&g%-YSZdmg9@$%7@#4>DrG<18=V zu2C7O^sK>q{6x!7R1GYk$Z6^wWcw3Eb-;zYEC&?d`_b}PH2}V6M83rXuj<7$uZ)-% z1udg96yjNZxRG&AftLysmhxxI9?>_u_!TsAC(HQd@yH`tw%a->$i2}Lu5jpXYZo$`-O|cS- z+0_clJv|WA%e#T)C{MN=?4;9jWQ6QVQ|M4PnJyKf+I$75C_lC=N+=bbYDmX>hp-go z#+D=8rR*_VwP5c-WxR-~?9@_Q^v`LE?TcgdLC=NJ1Mi&3U)Ig!Pz8Mu_? z?mE#lM%6vMT~_L1%iV0UoSa9uN+wmVxSHiC!?m2`F6WTlFy#$8X4~~dfa=x~(>(m< zsZ=)0;I`lBV#97;Rn9Va%Ihr0J@PFZOn;WQiYfV%bk1oeN6rTbq6Y3MQ_VT&M$Qpa z4mCL!nw%q1O)+I9bNFDV<*Pc!AK|_0nZ*Y?EnjzDEcGM@t7ER0^yni|i!ZY%m)$M* zI*Z!tY|dDN5mAj_#rIYK^TJMmdBO=}9soH@pUBeGmRmM!aW%Gxm>h6p0AxXGn=MnE z1&x*&y70n#*p%9VrR?#=6boH<;f+}ZGHRDCJ37g1dZ-7I6EBc1|273GC?#mp#B!7grkwBChTNXNjw6^HDmxk_9x!`tMe1eEnd|F1F zh(W9N6&?$ERp2IxYkIIK?y^Rkdx;Y~(cCJSClGTp_Mgk0m{Ez=zfXRNg{V`uT|N@O0qh9oMk*iZzwBqU9UT z;(Ia^QjYEd2TA#{<-5+4Lvo|?ohX&ojuV6aYW5D2>DBB7C*vQH|Ak4zYF4J@E5a?-437tQJ$JZx~Fg3m{UgdF;kR%KeRp$WM&NmsbafYw;qxOR)+L+Zh&sV5Qzj9vSa!$VKd^1SPPbUoI7I@wmA0R5KkBD zf6b&$OqyG#;$9edZswYv;gLD`s08~MzT8B9A55IK4I5O?^5vp+W~9(Gq~QgqI`WzY zrQzC&ZCYT(y2DvIi}#qf?#J*@NveMr_6lb5utOe}{*C|N#Cn~w8k41v@Bk8xkiauA z96WE*ASB4NoESp?3_dU;69Y4@LxFO39M0+FVMlg;4|bd_8W|@h;vm>@#$>P-&cT`0 zcAN!X(vR(uUJOT$OzTnn6@}jz*j_c&iG4XH)C_Ckvc8$t;}q_0!}zD#PBVwS)-E$T zMkD6u67eqF0{KEXX}$7rzSm@6mzm0tr#*yW${m^lTz%hV}L zfgq;5$_%r+Oy+2JPhE#B*X}agCuV2aa+(z;D4tCeE+nj%z}YZnQK8?w603~x?k1XZ zSDB4wB$khHR-lX$-q`gT!P-$)1>*M-VijvA+U63%xtq*J@Kuzs32h%X<*l7$i2z{( zy!#2@+(l-W52TgeWf&H<8(KGL2x|vfHH;V0C^N0f58eV|ICqcP5L$GJ7;%XKuy&3m zBScJioCxk+V-AFfgyUBtzYz%T9b-0vJ^4^5#pOhC?iRB_%sg4WT`1JXd3zJymx<-x zDQ1J&yTtr@y+#!GE-@P=CK)M+_O4R^;o2c)14I_|L5+krLJa5bFdIZlNt`6>5rm_d z@NPE{*3Pg53=VvLEA>_0O-@CMdsmo^;gF^v&`75!xVAFkTsy*SFr_zHwQ9RaLs+}P zk}#}Vd5;pqxf9IBFcL_}6ya@onntj8fmMMBSt7h62;tlTW+P~ABx1uA1|Y6PJLWPP zA!5R>h~V7$0X8^#p)5|WerHz_zP><|J3EjdUtolD=P}88nW2#u2GY5XIGq0dRP>HNK)s{E}K;=d~#Qpau_FO zqWE8eICpi~AR&oGwX4A+&O&L|jxM`!pvPG+UQ_l2*KXmHgmv!bs)pO}PA+Eya_{7F z@Q-#ESBPD98ch3FVhUc)cH;tdszd&E$b`~%9~vhPI7;nFx`eY&EoyCXF8&euFPSum zS~4w{M~=wf!wfBI$qYTM&wmg(X+^Cg*J8Nri;G&cD%0xGgxomN6$T7w3Q@}jm7>;v zLZ}lY>Q9N9Qq6Ex)xFob(sF6 zkda{yR4ksK$@OeO6{`|Y7wbREB&t{wI+P&gTM<{WNa%x!bx-mi>QEDQ^>rw}luL(_ zwq{z_zye=~@=q2S3F@N;0#F8RvXf?)Wo64*Cg5x5=xOEbdzi_?4tZEQ2me3G1s8NE zCQBV^F%pdq#WT=@SDQ5GP%_zzPtfDWZHttN{vbZ zrD*>qF{|rPam)lAN}&cL60{~(1%GHa{@euT;1Amc{_r}YJ*lR2m26Od!g-xMEIsv! zapF^GNBl}K6QmBc{YPM`)}eSt#`ov@O$Kx*l_CAf;l@8@sW}BYlse@(Ac!d=%rH8X z%+c=t9 zDB*qFAh>j>B#2uj#NSyv(e^MQl60sTg0Dk`O=!z~RF`+@P;P**0p8&RNYbHV(%IV9ys6O7T^qBrfXHBTdQUNjg*vz@bB_F2hQR;`=TJ)MmV6#&+OQmWx3}btqMv!c7E7(4k`G z8`Ggece5OibIR}?F7bI?I@BnMjSi(eC0WfRM-)Cz>I5As#$2xs6|bx)jJZ^k**etd z$f!fb`J{(M@gR~W=}Zhl=x$R)-3)%T9xJ-GCIs1Q1<_?bC z=B*jru;iq{wSG{cxTtONWmxa;@F^?aa9?*6;QnI5#QyPjUxH`^hywYQD4nTbYvjbC zOe;~aC_dYyt@G1zk6eSjjXONg3_sHFG_3Kv@R}nPj_8|nNK)+K+?2tGg&CKFLIx6^ zULQeMVr*gIa$BtR!&2lB*k)d{*X8T2xO4!jSb->VaJ4c_9FQ2mz(dINUSPyAt> zpevI>_qzh1=MnVYIzjtRPPFtB1pUB7fIeC$=s=>SBexS2o2VkafC8KBO8y$U|52XB zPNp+d+c`t7t6@wXjmGRfUvT9nF*uAC919>xp<#CNuq+SHoO;zb@da#V-eHT56Au$x zoXt@eoxkP81!9X2seiI9C$1G+e0Y<8a#+~3<;3M;i;w>KbNpwkmi#4b?gZFkYNnN7 znHW?CX*M<{pVZ$ov>JXv?9QG%2Yb-=|19^*O9b(r@mH$C zFrrke@Pc^ZgZ#pa#1@pit1>S_;r&|12F&OBg-c?KqiYo|q3{J?3CwQ4kA=^nGkQ>V zej@XXwL_JGk%a?u7cUtE^-Sru1<$~3XKlh`yxwj^Y;kE-ex5UT$*^dNxPAM~nF)So zgOJ`0^vW5yL><}v!Pv>eQa6siw;U~T%az+@KE0!Cl5Ibr2#eOzhs@QdetMjE4!g&9 zoV4Q~9@y~Fa29$?xcz8Di*%Q5*$S*ZHSam zW2CFZi!8w#r=B&dxlH--T=cA8%g*CP!7ZeQVOmgph6` zvJ4QI%v6S@2~8#&AwVE7Gms8hNWubP3Rkv1d7$}L%E{9AS z>FXHWKxdiNbm2fd-lUU8I=TishPyjO&7`%ZzS3Yvj~F9*+Sd;Z4;BC_ZuzF1VypTk z%r3`$kud4e<1t5PiP+A^@< zuV&6Vj8wLF7hVx{77kr#22Sf7LTFryvOJjTAIpt-^Jq5 z@*}FNEro^UlDlQy)!!T^wm4GeQJ;WuI*>c~maTT}(BiZu4(Yz0RX@ zg>s>O9crBNsB=sGhfxoNJPf`jK+AE%J}>(X7?V2-#P#Duw0E9zO7qOV(#h@gyn8<_0^2{haG8}P9!cd+5KYU_BQBX&D{LqSI}0xs@S5uZ z>$w-)a-7K(h{wcT&cVE#fDP`$CS3j&Bw)PP`%ifO zl+SYuICT2Nq^_HUF@*A6&hxTdAw~{I8P0&ae42$!69wjS=w$fXG=2x529|l*TX|OV zI{7$%_M%x!>))UfyR`BR?Y8`jHoHOxDD{eBzRUbI z6`Is5j-W~ZvMHm~E0^WQ{4dSD@+$ybST^HI`avO|IZiC3opS0G z#l%{FAstyQ^=j)_Bw_LC%StZ;fX&NZfUT&1+YnSp!j6UkZQx}uk_?N#MgORlj;+cN zOU$C#G z;t-P?P+^j_T%)_-BvjdwwbfcjUbD|`7hA)HAXVdiz@#2nM55~kh|FCxu9jUTgHi< zj*@}K1-PQufyURVf?^KGm@*19a#`-LR3qw!QK18kT%m8N9zl&$pplkoptTgL#Tj89 z#X7LfJqOKS1FUWwcRP zgN%{_bSlWWV;LC{#x1CI z@|mq^TSBj^krxUut_cSiAAdsy7>}ppy+bLaNWpu+c)17vf&k-5x_lQ}(3UI2$So-2 z03(0m%VMWBz6iU#?2`mrUSouk5gwN-@N!)5DLT3U!Xmp>%%C8jX`qQ$%)Ez6?B;p5 z<+vY=6FqBXcoD@MUYtgSCcKCvXsWlGG72wpS#C8I1;UG5STY?1wujbHbisi4@RtY9tSuBrO~wK}%QwOWObgvrgcprL;T zMY?GTt{Lq|(E8*3gL2{5Wz|fLgchZamAOUJ?EtS5TC4_MA+jjp%Nj<}LpVo&;0gWt z1T`1^!62eP=xZ8$a@-A3Sw8bN9aq3^%iLd#69=9kBa0~D$l}yn$z~l{#1Woq;e$;D zMHXcRw=m>L9kR+CLXkyz$b3Q&lTSm1i7axB?tuGIWs59UX&e(+TnPJuOpOhl6V11vlmcnt-;N4DttWm`(P%5Yx zG^$~d0g43`laYcZ`CkT-HKtevs2ozijgKe?^^!jH)? zYecaMmJTR}%-Ud(VgW@5sE|>21IivxtOgYdCo2Cw`V)e(hZCzn#V=wcT;mCVvqlrE zphbd-foX)(Fn#w8p!Q&571VevQMo+k4uZ4C605*PLWvTqX&JC=p~Nakp-5ucS>ay> zFl!{S3K|CzarLeh4e~1dR}EGykeCDpX;$N3#Ss_$luGPz#42F+Fd{dc#BKN-aBX44 zDyTAw7<0Jc_Zlk}MN9;XIqWyxNrqX2h*iK$3^8Dw@J}*Ou^6HYR=_sl-wrHm2(b#3 zjv$7t8uv4e6pJ7_K!uE21}JL)u^N(!AIhsACES-9q*(mW0SY%BTDBYC1e7&=SOv)v zJ(SZE{))!Ee@>Xz=wTJiaPUw%T7MgmY{A1SK%UU#-52#U?$)f4$l<1AMc^<>%#AM^&jh3?v_lV{sH{%CHi96lC~Z(0llTna8ZwhDr|`0F-5AHW6MPM^cihx$hbJ4<3ocNK&= z@*r{m&8i)!|22O9r?EueSLMfh_pezqgjWI9((lnD`u96+ejojQxYW}#AeP|i>q<>N zn~$MiV}|QrPbuQpL#5J*^y`sozvg4;!z;S&_-b{h|H02or<~9+GBjN35=-zfcO?V% zHph_>@&zdF1~KwGpiDs%@XJ~i#>||dQV+#y=*Q?cdJw%PF#NoX{s)(;M*Lx(m;F6#$^8Vp_5QCkx;K- zCq(=^b@{aYRD~G14rP7xp_*xUA%;%VQ8Sxo;X`NxgZ*72^!>;FJ}pc%tzn!2dJF$R z>R=k)?!p@8Q6yXHV2s4rp6v6)`uP~%t@JI8X{~l+I(u4|hh>XS6ZCEly(beeCWjM` zILrG2;C?`FyG&bZhnw9oFwnE1669DwQchAfA!G8x)9e=oN8zxlRZ>D7_9Nmf;1{%D z6>m|H&)|}xnE4$lv76`Jmc4&7PCSZB5qfqS#hl#Oj0#P114odmHJUO?Zg5#{e<}(j zH@L8D#&g6}%(T)m1?8z$znz-O8gGwwXHs$l zWM1~?*oykyAJX`hlN)IX&;nlemy+O9AV^4VR3wNcH_&Dpy6$p7>*NOeBOAZ&C#Hgu z8?u6Ble?zwan$PM2G{Bn&McT*J-JcQ)JSqeN_LrBG<^l&)sq_)!7C&;Bz#$}DS-j! z=np)hKgUr|&>svU`h&iv!6(PvGAhew9;D+6*lpSR*>U1KH0ZF#6$&`H;XOh&>*NNG z@Kg&=H5HWHkQLm*P+oP&e&!HLZpcG+AOtb_C{&o_2G{5gxEfUzk{gv8$0Rp)hJ8V% z#(x8@QgWjbUM#s0aZmUQA0^mI$&E^|Cb?0>MUpg=)_pQiw&X@4)~$>+4UUV3XMj~H zxlsv9B{zabHSGFZ4P;AhBp?M%@`r&`DY;PzsGQt5<3y5R-Bdp_ShnOwGT5JKaMNcW zxvl)oe@BK@N^Vrb(#egGSw|QoTXG`_DrD3ZfU20>s0bBGZYclW0#wE1MkT2D^_qlh zY<-O2DkV26p+%A#foX&ju<$PdXvO44CDeFwL%IAM;3_6JD#1mP8xpH&kH-nCLUN-L zlDWUdEneAKdi)h&m698k&^Wn)86{GN=el-#I@q>>x*>W3$R@J}&Fw&X?nmee;G&>k{gwb({Z)L zmFGhbWCl*xIqc`8D?9u_8DL9pY$^*(azi#E)0=BQQGXF^sF2*KWJ22HM$~;#zs1v< zHJ;qqM65_|M2WfaMdR^cuaw-VL?23S$hO24tZ2LvXmfoUkgtcoIf{p?Dxn3E8*()E zXPzOL3dxO1C{>ah(!z2_FZ}}WDEZl;Qv z2I|Cu+{KojpQM6P%^wjeS~_r0f8TINH?2Jp2pG*R?v8-bnBw`Lr97m%-8yEsBOU(Rh)c>^(3bht!a$|EGaWh;iE> zd7&|0azfEZP@!OTGgiRh?+pj6GEk$3YMNKi3zCyKF~=iQd6FOCxvdq@K))QMsab-oKfXHTJ%QHPhs5j3K+_`_us z>g2Lqo{9pYPA*iVnc#m#AjQmdI;Mc#eCBAPX&HEVoM@z-a;Ou<2z6cyg36&z<2|my zXnt2*8UhSnc0IPDUc971?eR@#RQT#;KQ2+10kuj{GmaXIWTHtlUR^ivbR?54mu*{j zo~fWnrmWy8!!2KT1!{F9lWVn>yn~v`k<7S#k?^IQqh&(TbSONp9KMVr#$uM!dF2|3 zS)QL1mxLSi2R756gQ=nE4@Lw1LI2Sxk^^WTD$8d+NtP6_+w$H!X5h1Ar!Nehy0rm#N>&8A{-O5a8E~2Tc{HF{@%JJ6Kj8P)C}RBg zq0pf+f6AZf_twy1?Dz5Wq{L`k2Mk-hFa}W$5=KWePF=#k9!S<8VGJrB8B`v<2@Gpw zFoqEc2TFjZ=GO?o5)O?0JQM>g&rIPD0>Ksoj6rbVPd?Za1i0A%L<4_z1b)Ipjz|^l z^Ij(ttkJ$0f<45?jiEw(2Lj9z;)_AaxL(YkhI2GPG_F?xA?A;NHxO*WycmLs;04T} zFW|nRe;*W>PqLv z{6+sf8kMW~dwDOQrud=wy)6_M`*}G27MSL6M>Jjlpv`gai^ShzK;fX9^rPN;lYVXq zy2XC&9BG^0PG75U#qz~uYvA0J!@gX7v+-2T8jZAVG%dnwfi_}JbD1LQUjnfuycXki zjj1VbV~&dYqu$a~;h5USQmvR{X;%0t8ZQN4%LyxJeGZ%>!dCFD z8a4u8TX9j=>XWtd#PsG%^P9OCED#_L~HA zP%pjbKL6ti=5z%7;y82=;Vk10q2)v6GqtBN6kv1M2r&Up(sSY71Q>|`$%NK%D4FE- zHvWwUXpt5?rWoqozlIHH22nRhm(Ooe6{2pXDO;ou=6=4PekYo~j@r*|F2sC1MIEzs z4m}b_H&w0cmd`2mFQoOzIS4}HCt1rtbw4mPC+XS;kEcbZ*F1p=`2@O{zurS{r~}l! z?3B&^PDMlggTrDz9s!OSF$;C{prQJim~v$K2NzhISpFigY`1J|3gOJ6aYsOBKZr&< z^d1`JQ$EjVCycCF(^C@jzhbjsuOV3-G~)Tt&n~yxVSeXk%1(uUP)l?Vx38u*1KR1a z>E2QwHOjR%lbUBojw9Rf>VR&fokoBa2Kv6$$mSWrqXPru4vPX!d{6ooI!Mg_snxkTK`CNR_?kD6=ttOJKxieryr@u>twWvA&#eG%)a_@%#q69k#qm zO~4kh_N#!{gS24&RI3@y)4TiDcl31A9SvT9q4pRTutS&+dBp6O!8hs-e)U7^B5Sp1 zdGuf7#9IhqHO#Dg6Bg*ziVph^{X^7^|4^4vGKb4@M^X(v{)-Bo%;5?h6+8zuF3Fr_ z&C^T$$f&YA=Oin zA(Hu#PRIu26PC>U+yWYh%uhv{NFqoskuGUKsS-hx(1cF!GF0l4c)W`{L^N#xv_oE~ zq6eWgQF)>CfDhawPHCcwB!R3Eua#a#$EDqqC5ENx2|3FSco5K) zbRCrOdYk@DEs&?T&*(Y`NS^53FItrQE?qu}k#kWFnb>1js8xl=wrRx}Sm$MbKrr-D z!h^tpWbJ`(V^@HQ=@xsaY?QjSep?KD=;t1LRxv0lqGJQbt+I8XY$xD*%5Vz znF`9}$qJT0?xwmEQL8g~T&qtc51^)UCNI(4NMcV)aG75;%|g3WPV6NT#PWP{Nq0$6 zmS4){!Abf9kLb^f)NJ$z1B?Ek?`c5FvG@d!$aQ2`0lO^=C)J7?g_AO?SG%izXD^ z0e5FW*>?V~0BFlECgJIHW5~Si$7!@^y3rLbWL!7ktl7szxKJ`u`TAqPS(A}TaPez3 z3E8-HEkW9HlSzo>RAqF^;dCzi698;YRVE?FGndN!9|6*uxlDqLBr+vl(`Mrd&yvVY zLJQ?J%UUD+qXB5kYbGIbniDrNLG2R$wFWPm=5zvt#CutGR%JcMZAJ!Kvz|$S_9SQk zyWt36Tautj$TBAybH3qfjTg;{x&g+V_x}z+TZ%LZ&}2*lMhd@ef`*G`Or7xpHqr|~ zz_TS#li+kdHDuij1}&OTb%hHV*St9yXG^apqN!}FywXzV&od2LG~4P5C-2VXJZ^jf zaJJ-Y5?VMH8_+TME*f{9NVv9KY!YrbH7lL2|1Quhso5kj=S*$roru6CK@R&l>C()s zG9sF(-PBf?_adY|vI*w8Q`G+-?64$mlgx0<7bXK+;!^(*EgN5R@h9n}lS|0n?14?3uK* z-1$p?4h~xm*qy{RC9KAQ8jZ%7$Z)j3FHs?eVs7HoW`{%bGi(Y^P6|8p(+yWKb2xQs zLGEIk=Yp0?K3XfX$H}nlr*Pk(!?J(bivA($E;nTqmgTbCyHq3UZbgL-%W{RjiEH=> z)wqRaDb2QmtIJS?dHjNwTP&N}jNi1u+%D56)G=pP_* z3ei^Oi3Dn;L$XPE7|TFy*Oo-)6sWCAW)0U$G7zh9?L8oK3)fadkkXBMD&2 zXu)K~oBN-AX!?v?4-$lk=Pu)jY&8~JpqN{MJ}f~NtA+2wQ(1V-sYuIF(Wi;GfCeaX zYZfyo$Y<7&o)j}5pc1=z-fj8V*0rL2Kn7<~%)!|L6`J5Ijv$>n*pyLlmdkQoR1^r# za$(twu~b{ktfOrKyZOvZMAP!ox>|8Q?UaMFC`NGheLARWaJE|e8Fk;A9%jMXUMmOm z<2L<+lw$*}m)#CqQQx(VW~vmT-54sgikGdIRQG|ZYM|DMDi*Fqi)xa(=Ru;wwd|wp znmVzquAp$OtY9JJj;q@qwK`nOwfY2e7HXO+ua94K!kDgz1Z|}pm#q*@Z-S;;(AKSO zsK>iX>H(+{J&Ytnx00wV#T1@}!}JH<;SV(-{lT!KKNu4QGR1$R*|w3f;;>{z3?1^7l|- zLbqI_J7xTKRAmj_x-^ps;Jyz_gPe`s0JaBkU65m8+=$DVMEIqG2si?IB$kP!-q>8rpEXfs6-sQ(y+o^gpr#nQ0I2x#53!uq(Ye31=b!c<_4Aw4W9;sHCXI|FGI$$=4g0MqsBwV?y#}u@MljU zW9@-s7g!TM4j3%_3k+yHe4Gk3V6X6>1*$!W>;kGo$stQ;HE7IuC^-#i$k6ivY7Zzo zVXCmQycSfaou>_EJgl4sRK*pfI_}d*hT4P6E|``Ovy=t2hG@JH==Kn^3wk)vESsTz zd!I0^fo2!T(S@4>7b-dI=cIerXj9_h=KqE*Cg?1im<=&k%%XnRsnjsmptFlHX+zJ^ zCK2^F82)JJ`Mi^Gz9rr@1V*kZMHTQK-=2X|B*Ws<)xW zEj&$64JQYtVWO8^iEVB#aM$m+t7b?HOeZpMNP1d;Vn3!h2NX^r=?V;yV6=2XHXsjR z8H|1nG)}?j3N+R*w4?#03PZQ;25%gekKt5~txMv!A>1LN>3e{73P4xzphD<5-~;!F zW9Yd8Ni^tOMn}+j3u-C){wZz8mIq`Y)a>OmGpMqFKrPrRa-gQ{m!p$V$u2%24&nKBBha#`+HDhdQuxv(5mJ%(zFnV-_OfL%&G z4N*|FNG}`gL_6i6DvA+QJ!E&{NqFMb(%mM8S0S7VLNB`vTS^KWj!NNFd#5Ckpe4NQ z5t3x$H2O!?KxzU>EQE^o)9`gofY%{Z_Dgm|-9e^;La4HWr!RL?-SMc^Aylr_B6tUC zs)bM!%#8$3rF@k6Mbpk`mukV&1cC}ryh@6)bWms%PSPKEM1LNmW}`nCSo8;dPXkhp z#rt_g9!G{1u-mc^r9pnr!}9V8DB!T^g|J(PO>u;$TKYy)L19x_!7Yv1uMYW@IfTNd z@{k3DASS0l7pTe_Hm%-3CSZCfYz(qBUIIvaz_dDMEL0kCQ}{0c+8!#c z4sC*@r{QES%@zL4JvCfBNa~394&yCHBZ!7GfoBhoR))n(T!qkQ0$eEQseHX2a20}{)#2jT84|Lwb_PM(!=2R;BZ1Dql*5T!_{RXaLZGuc zay-PT+`kr(6+)cVAtS*}iP!WY@T|ej>S&>`X4!G!FPce!_ONDkL=I@;B3vsXB$_^b zYVhI#O$R_oyq9HXRVed409FWPRtK~PF$35Qhs+{uYY?+KvJ79woNxH5#*2q9T>xXw z`>z1d9=NOyXhN0&BZWVAwuXy`EFJLzHVXe!z_SM{tHbFqWyreU8MJtq(hV+ToIi(* zvj->>&{SwrUTLY5z@R~khbGMPuDwgli8+R>uto zBBj&yUk92s5Lq2;bRo#VB|#4RIq6cFI(WeqY`N2(HDl$Mq|f9cKOu!k32Nk$!5v<}A#fyD%4Ha4Uf zFoh>4g&jKRhO3x4m^!r}cd^ZLLCY|e9zH^s(t#y(wz-Fw&}qSwac4*Bj^A+t-CGdc zmjL%1)wcYQ_I6kgh@tJg$Fj8JWpBSjt-|vY9Oj=aMB9@G)QUeHFh*pio?3I{cj>{t zsUNTT-K816(VYA)9p;_C0~MY}PwnDRPfX73s|!D)3v6@BO%HTYub)GuSfq(yt1 zwV9gtimlDGke>fD&jNN)Aft@Vh$^GAgV$Us!;?hk+ zF@R-k;IN^Xvma65`>9he2gOD^!CzYa8_ZWN=zrZXe0x(dbc>&(uOx$9PsRTaXtqOJ zeRq@4^!8%Om!KnS=4*xPHbI@Z)*Z5kH3q8`E$GLSH>0VKniPQ}biR9JvI=qHuJG5}_v4FsgaNVu?dZEQd`Y#F7hhKcgz)KY$u{v0SubsO%Q) z(~5&bt*!FX@(nV<%Ra!2{?vmB*Ignj;Ic5nHG_K^aGiy*5-jBKaTqGwLimpxSQk00 z4BIVsMT4p)mLgaK7(=NENK>3RK0+y;NAhe9dPb!LBUDwykSvt;if07OkhWXl=2Gz>H|&P!g@(Od&*z z3v=tJO894@#$B|kXx2NdEh9|mKMq)T&9cL?WWg~nt6=vylwh4Ds{$$%>r9v_8$$T! z8&ns?s)*Vxp5~5}%_{}#89+M=mK~b)DrE59i#4i?UR6Z38T@5HyUUdwTd7rGM5qb> zF3_FT$_}o?D$pPbeEAXrcNeP)=u)d>Px7c!=-&gnvsT%`l~lz|&tf>bOH~DQsZ=r3 z(%mFw(Z=Nwc^|rVWGNWwp<=<@{a&!gbIg} zP(5M_AyizLyMU_baffAefV)sFTSVWYT-Gtz(HpqPibn8$LbiC>FEO=$2?*RJD~W)` z3(gvXcR}DRUWxdSu`6J@Y$jUj=rE1%B4ZBt-QrW|4%H1(&~62Zv!ErBu(XAo*lD@O zcab&+e47)W0*SlGC9x>E3ydbE8E=5cS?-c(l<)IGS&D7j z^GDZ;ft6u_TzIe&$R`121QLgmK)z!NA&^{{dxffK`X5dQq!7sF8KwT^^ltTm{Ud!{ z!CTQ8oaew7X5`K2#6=LXcbMP*DOggdqzem6CEPYFQ;#4Pcd2wDfnNR_PRLdh{^t#e zlU_QKbc?IeMXGD0Xubm`chPiVV&x3EbNrE-#7Q|FNo?-i52h6I=|ZJ6G%(hb=*&5a z$lNv5g-Z!(p!F2jx4@M`NS(-}n#w`JlSq+mfwAbWrY>AcQsa(&99$_R)rm~%YRs`z zy6Qrt#T7EA6@s)B#Kp{CsIUO-$YimibF|U zmzhF{D;MStqblM55H;@Nx@eh;W1L0alGXJ%Ho)KMSfX)PS2r4#S2*rv70o%Iah6v{ z7U=6*xFH)(_-`5(7kzbR=@uDuhUy+Eu!kQBU2(9Xh21_*~f^?U1S~Eq{_;X!J}NUtp}U4%DRy$nT@;l zBFNlj){#x>Y|OPZI_t)yg%*;hwSsgN%*D)+R9JwDq{W?matkV~*3yI&$zQJ^UCqPrk zss)rq6iyk?9|F`}L~WRm%=ciTYy#m=>d=@@l4-~67QJX*)vQt=y8!GikQQK;!;rB* zF_=zrXvee}yWMIsHih_Ekd@R0MuF0UVPLyUodsG6Tc9Zv^h1D7A#65mDPyw#c0?Gi{paZGq;~B z5km@fN@8HCg1cT;G4zAMU8)iZpj%BaUbd9*e`g4sbjyLDTl||lU3P^Ou{mpq(p|)o zSXj|QZd_&voD|K0z~;u-wd6($c}t>ES{E2oN;G;wZ9v4m{tnNQjX(qd+7Dl9+~ z@|h{vm8ICWeZH5T?v7l&&CpkG#{QJRZc? zS(h`LU%!qp-R04O$$|)%ysW|;1g5hf+8`l;*TO*QzwqxjkS-EvhwK)+qXAWuO3~Z# zL@IF>Jqs?&T*%ZB1L-1jc1WA44*}O**et+G$^!kbW`4ehpq-`6f~>?V&<+auTp+uP zmknCVmFzkmU<&$KKs(Eo1z8DH+~|22dF}#bgO-vMGdhhVSzxsYK@Rk6Bh3K~tyoNj z1I<|^#UQf%Aq9jq1awuNsYzj&Rxg?t`hMuc!EiO@eyAw-A^bHAo4;kWnE0q!Cc zc-uqWL0aGTIESq9vQIF%|8r2dYf>@=OB5V76jS?&!dapm7@$}$z;n?LQVsciy zWFjSgfksnA7lFuK{2Z917Rph;lSMIo048TGOeRv&7&`oUzE8RW~nWQ5$;-xc&FR;I5mA3@n>)*UKt~V}^;rSvHdipqi6lylg4q z-)RV3RMUl^TfEAhF1tdCX2S?kI*Vo^3u|V`jq?nFi)OkI*xYyvEbfw-NTU=pFs78e z9JQW^oE0;XM+s)2#T3uaz~e5M$wX2w?uVafiMD9(TD+CX#9y zb102kCX#5egly@VPud95Vn)zxEkG0Una!~)OR;TfIjvTl^f9?0;v7tBy&z)W$LSxU zZmB7w1rfO{H%v96t{WA4K}4?5OHe(G8n*=z>67n^m$r2e_mzg|ahs0e^0(CK4dcB! zy1E9bqILNS`t&sn^|GIURk_u$pnl#4&6Bt+q9YG4j(8*}6wwJxbTx>a7Dueg6Imir zIwYHvU&5D5ByM#okvT1qSe4AWP@*IQv05l`1Y~XtC01pNFJr_VC7NCYfzxt{Rq-n< zni%khd&+Uq#Hv)$r4!2>SURytZI{n1qiqS}Br<%>8j91p`bSpxl;(?Fk35LK+H>yb z<+6yY`d6PzHuI5!IG_|ZDvCsL`z#~n;pY!4GqKD?D@c1BgRC$fY1ZEnt_Hfjxy*R=D^Rwc@A5S6(U-#l%{_;dJ7uwp3)b z_SCB$RQg0ZXua%Lu@&_%8m3AMMs5rhT7|+2l4{`@^pC2`MmkZ&7LP=WYLdFuAkm9Q zvX8QB>drJ3w0NYf;Ni+0SNAp4>cu0uR-Z6D7+-DiNGGEsOGrw2En6X)`ax4|2}viK z3JXa}qO!EoVv%r|{=hr@p;178Fzo0L#sm#lIa2?|!u7KT^6G$w+NW*lZfB6Iy z;OVToCt$r^ND@bQs?|R<6||6~tl(CMBC12SI#d6a7Lt^Q^bvxXyeBHmLXupgJLP;- zSr?LYX(qFrwNz>`Ow+1x6 zv}7vOmUf_i0?i^C{sdI}0+TMFYMIHPp$+?dQbWdb%~|udpno3x0fYO4T5X z&n4gri&MG)N0z9Rs7+S_)w)Eb3ub7c%5qZ({{z4xIN(3)(KTJ*immG9oxU8QSim}g znzsRj)hI{wpSsC{`$Crq`-rMwp8i6;Ex4Q70i%QT=W zP9W9sc7WQKx^%&`EO;qp0j(h#xA+X9+ZViaK@Tr`DVw4GYrwQFd+7o>y2UR87b-dI z=cIePUZ6~gFMj#ou*EEaDVvxLF;~o@{u)?wFEx8?2}~Db(k_GG%R^)7Q(&?$keQBZ)XQXAhirvqGM!A?*u^pf2JvL3z{|CCLt4xXQ)d_CF1C3t zC|!18_#@Zlh}qC^*SvY_DK^$WxUYQlF-c>WanPfVSA3<7Iojy&j!|EU!d z@M&nok|uzl#?N@YwY1~iwj0OP7Em;%v`5Xc}3=Wr|rxuS(Zmgl0LSqi3YV zFX-=^vNfhm`1I-9jTK`SPvh3WK3b!5fc&3u7yPU7x2oygftt!Yl`aWsebKJ((SB~( zM>nH5Dkq76N9!ru7v>#fO@?QjXrU04-nE`2|n4O7Ck(ZT-Yd;UfZ;T~GABc(G%^lK!6muN{-WZ7|oBX{mj1w3Qxhd2ST%p=m zj|NI{6Jr5YrN_Teb-vJgh~1s-L&JmJeQWpaJfUMy%^B>r4-a;94-awi{McN=5ppI? zRx|0Sj^{28&LmLtOgfBq^h~PfnbgEHsb804Cdmp+A~ln4N3Fw58nREFThQp)>7l8^ zWr|8SR_V4&Y*S}bG)$eGR1+ez2|n^{>Zaz>vuU%fX|>+m7PJ+0r|WXeCaw^5*P1e# zP4ZyVR^;D(#Vkn@hWyx1+#jA**HO#Dg z3A{R8xsoa{VHR*a0UzA zV0Q=QdSuN?o^zqx<;-?5<;!^Upac_h@Icg$`I070$X$+(bP=u0EOrjCHq*YSKOL+N ziOe*lk*ub4Rkl1|ImxW%Kfvse)l9=2Npa3>Uq_8BnPG)WahARepB=shmxekXCF9N& zO@9QNL%uT&St$8Avz<;V)VU!~xp$qCpJ{jlna~I!QWx7_j3?*sq4`$KtfDbpz;2#* zTkfWRpK>al-YCn5VqA;VU4r31n@)O-9bOhk&~*JjQ$|@nF3a6dMS(0I7nYUaM5--j z9-?glyZOx2)96O+wo7Zp^~6`s@}Zbm>wCURJe9M2DVhT@HY@;ADdh(nyzHIWQp(TJ z+Ead;kQeRcWq%=gkN6t>qe}j7G`z87AR1mX*7bu?Cj;4g*@JbTGZmB!lohN8+`n~K zqgE#axmL^Z4)CP8o?=sH(Ai|gaPy4zBlxbM9g9CN9E}H&%%GI0vPq)pOW>@W85|8~ zEKN9r%Z<%v>(XbSoRzv<7PsB!5J#x4E9IHK_`hx$`I;2)sl3fOHKdwnf^w_c_R zQ9$FprtUv*MW+dIgs1wW@iJXOX+l}S{Q>PzhwNhxp){d91Yaf)laD}!NfUC7?yeuB z%917=MVrZ-AwBA|Im`|k(3t-^mDqBIqo4^U5NAM0BaI>a&w|aCKpX{|$tL=%=&D6> z(K--@A(~Cx7>Y-j;v;B1(XjLz^v9N390h~QGX`B~xWV8@^Ngb>2s+?@^m1~*mUJ8i zemMi#`Efce>25gLP((A38^v)UoqW8k><9k|aM;q3qoB~a$&eHCzNrbKxyg-S2)S?> z7_5oP(J+Lvma36zt{?_$)^ZdK@ryIb(%1(UTMBa&B;|Z&R6}rKB>dlk%bL#|1z9|~ zsoHI?|0Nb{a&r_ckxZwgXu1>>mQ3d;2tsMkvg!)|-{7#NJx4*p$x7U01%+MstG}fw zqB+pfa^S?NX1Pj;J`4_PLUa@y_UtHkipq}8x{~ND+0jvu$y8~q)f&E{DWa*;QFFvv z&Hn%#w!G;mI7|{X;0k5@uF?$ABh!T+Ll8~8ZUlo2awvgcay7YN%fgO=Ae@p7h&&oiG=2|M zwv_BBsKWVK*;@4nUqb|z{Ol<3os+e+%;hY)#ia-X`5U;}%V9q!9e-Zi6;0Oue=rQ0 z+dxmSRpur})c1dfn#_{99ff7CX5a$fY$|1P0hvc01Kx2Aq+e9=3A<*O4p?3ca( zT3hOOqj+8Oz-pMO@o(&lOo09~uOlPBuq#Ex-sjlK9GOoYRnR1DVmPE7VGCI}PV(9p zx2s%kslB7GtG%;-V8g!c?Q8o++B;7Io)U?=?~CMOJmx+>uX0=} zhwS*PSYpiacSu5WBHI5~_z|j6jE5Q1ZB4T<`E!P<&0AZSku0uT*}mc+nQJi3&*FGq z*JdJz4PIb*nBqf4-sUs-vSbNKN%FZgxMs$Y{e#0Nlr!@B9hRw!r*W!%@c?qd6N*=k z=YXzBwQunVJ+SEYo`Sf;WF$4cY=*v0>E$Ni8GH)hbOqq4r%UxBB4(Kr04z2CVO?fpJ&MV)tpDqlRJ zD`a~gfeO4YwD@#1&D>zGOA~{w&aVtb+Ph{QI2Bv-yL272{&s+_C&^iSxdUkPoX(D( z&XJyu;Zpm_7;W@&-=YY~*f_~H)Sz;tT@0Z9iS_Znkce$)W}w* zJS3V?wWA(8Ek7npnophDl^b7Ts-hF8{w0we&xH59Y+&{@r0bfdWFGjletXE{+52XH$)+n{YGL>x?&7=$L&wYFskj z%NEUT>*+sv#R;Unfwyrf8wjgtQ6_A2CxNd176Y1)(YAwfQgclJ^<+lf;ud0X$XEwK zBN=IFs%#k^0x~1r4P=LmbP(B^ahAwnk#oNOhitP$#yJQb4_b2Lil&dEO&l`HL9hxL zqIe*pi%yqDWgO&m*w7}qCldU3-z?kXD*@IV&;9?7O{My#6)M4iZG>tzeq9bqackt-{B8gcvA4WL#ha=BKk%-yJ|oXE9V7)jL1nOmk5 zP4)1;a-!CTSs@WCQOmQIlC5xs{=jbfGl_bR{$O0tAM_)QCpnZd^pAYzaI&R<-Ilg{ zY6ZUIj`uZDz=_!NVX98V;s{T*=XXs7C1Pa-w|DHjJ zCQ7S8V>IlL1Mb8n|VwnV4}K_xnaCNyj?zmFz5D+2@#@P7;dTO!l)`*Nc4Yo8!l z)XgA%tRbR_%BmP!FotXge*rLTiAW2CPBey$INJb36OC06LMGe;1ZyJEh7d{=DknDo z2_aY$g%*VPIaQ)G9tjj%BG3Y&FZtKW$YWrP<0L2iuLH}P=(B*u6M4$7=YV2OBF%zfPn2<^NVtameoAnbM41IlCcyMSR!bXhP=A}e5u z@WYC1-ux@MlqSrQm&k50V-ceLl z<4+PTGZgY`y3)%|+?*a^5p^?7*)^&x z_s>V@eW&_Qp#rO4HeE-dJz7Ajd9U{6tLep}QmMUrxHQ;7FYD3kU9$!{x(651yH5Ox zFA9ZYId|Mh;*> z%N=2!YLNO*8brL&GAhJwfqv4>$tzga{}!-V!LsSDQNi+(l_5iS|D{I6%RA`}B}AK{ z=K=QIZOG6^2zC_xUOEX65zKBEcs)?{ea@#Q7WFRx`^ZUz{n+TR`%0Ctcl6GP4NuG; z9_D)fv_1H%T2X%{O|0z>^cwD_iQ*v<+1@ALxokhMdzdnlly@{ET%`!PMvwaWV!Kwk zLPzt=cFttB_w^6O zT<-O?BnG^}zeU5*_uI_XMs2*IVT-D~?wT~oUIhKV)w&otb)y9@iuA4kYxTi%HMHLuJ} z>)?2vsG}um*n_9e*~X5&+E>g`k@g%1s?0`+wyhto6`$QNygK}EPE)JHiwCHM%p%7) zlomPO-V|byV=m0?Kvlv&3pMVG94~90S?X^a>BFnq2huwk<@bB35%sB8ekb>3vdGKs z%m(cQ;9l&uzv*g!Ae@4vK$#anH1Xr4-uR5ipXwcYFXsCYuAI!eOY8jHn}!(%(XOY zBfBwCFk=Wy4nXp>R?y`?Qyv>E_ zzaMTky18t>P{sop4f|)=gl~Q&)PYOlT`8%R7EYRI*npVU-Nf|`oT=Gs@mmqJ|K36;8P zg%D{j%=J-~@UKBl3X!JM&f@+)SB-v-tn#uO*a-ilPZL!NjdrGDiADn$s?$N`F468x zQ0Q~uj%-BXziybE6gmx4w|JWehU_jW&__H&-0lMHOvm~ha_k<%g(-%PrXm|2j~m6J|Fm7G^Yn zq1xsJqDm#qj!Y2d9pR2_MB$%nm|TU~nWZfshZA(2{BNQc2*%w(ys0JX_y>aZ(Iv2D4S z{_XEp`B9FOIqsXOYX`1=lwKgw~sDWgX@xJ*9E@kI*ImLKKd3Z05>`62!0AH-*Q zl*6Ygew1UES8BzjGlMow+8Lh>(~p9ot+bPD;2!>>IQx{K$*8={&qhbBZHGTLMaj0e!hr)|zUiL+%_TK=3`>8aEfKQ-s)(|ZIGZ8qSKojwC z+I$nH%VrY(jRxQ4wCRA~Ezrrj8|2Ay%h#yH`DB?y!l%fP6DJ#dms6wzzRiheLE?U5 zOkz=|!@y`#=Zd!1iO2bLm_(yaf`R5zG}nX1{Un&kBTs#@?|E`4o~<$3oKJm8H0p#G zcjt7_xS#M6dE{v>=1!W^ToQ*qxyfg$rJ&Hc44nDQpUIyBc8grl_R3#t#UT+@{JK`f zUH(GO8&$-iq>2knAyknIbAO>K;a`CocU3g6js}ABQBiFFDm3eTX7;@|3Ey256YyCR z;i|!31$<{sOoE3bX5Jx0*+#;@+rYa>VlsTU_!}#(>;kEX{#!)otcVF5EQlc&&NJ{X zf|v|%bKx)GaM!~G5+#R$aisKP<=aH#EQbj!N(}>TrC4qUi@O>o(MU0r-OiIj(KKL! zIE!Hdi_*flGv|ZFT?>~dmzBCj`VTvbnXx1+1t?lRGYPx06x+6)|6MDNJt7=C*zRlVag#TAV;H2vg1l?i>G`#8xDdHjnd-4m{Owj84$T^aT1Rb-av~fo_D~LLU`D~9s4gLa#z_T9wn)9hwcVX3Q0{QlKL5QD3yLDk!Z1mZ0VU#+6dBOW(E}&pb7cR ze%O_z*tV@0GoIgi4PHIt%@n?RJ{4d_EO97_xe@9IUv9!iUW^$x; zrirx5*VVh2+dt|*#E?QPlNeYm<=g0r;Z`uXi)A7K#Ihg8%a#&;y`X> znzCJ;`rNyGmy};3T`@dk&LFLm+uz&X(b-uV8Zs}Wwhwo#ZJmYJOH;pGItTBUR(QE| z%2=|77v<%zk8boQ6!n6<8xKV9QjWHPmaQ0~H&^wmo$}qX%FB&zsjW(%ZYCbtyGy!T}r8P)nMd1L)7z9&bJ&(QqG3gC*`3h$605A-%r82XzpPmC$c=F@&C1Mk zjHh$k$!+-s#~gpR%WUXPa``S=eVUnGqSl_tzP#g7On+?48`1C`mkL zY`m2sU-Fka%;~8dw&jgz*k^)nxo%lN8fDu^i|{BxjyL$XXqd3Mw#YPy zT5Di+2QAMl7k4qICz`ypNOxJkc$xIk3wXKthG$H-@h#K~Nb@a#YG65tf3qC~s@%Z% zw`j;r)b7Xz4i4qu3IegU;e(a5`g>$p2Wu05x-kQa7Ua;6nXIFSOx9uj_vrLJ<2nrT zFVa?S@Nd!ZnDIR5^XmToo|wTXjQd#i(2en_?9ys-X?1IBY}(F$4jy4!-iU@@WW#+K z9iaX6aqLn@Z+UR)18BvDD&NcA$T3@8Y1(yCMRVXY-3vSEg*7#H4{Tqt zpk4f}5o5PJ74dJi0EPN6f>~^XJ2T3%udM#>`q^dmudAAOa%MjLbM)p!EbYM?{F|1w z_|z8TMUT2XmWyr3Wm#xJp>Q|4I5!Qeg3zbW%WIKrZoABGp4;6wFj8LcC46~3CrZ80 z=3RH|vM$|y^4dtQU2^~3F7%52Y8_}7BVJ&uxsiz6y%0(xvxa&7$);&P6t zq@hA=r3oam9qI9JL*)`%Nk`Q!Fq(Cj$tcTP;B$_$q~POtOUSiVTWTtocuP7en`@7P z&pq;zf>6a^0^?DIELuNGl+H1j6pShw6KGGx_#-g7M`O}Z%D9XiGCUC!WqvE7bdJlU zU{n#BxRYN8qkDuV4W*3L#GFhMt4Tqpqc)IBtu7Re0evyEH5C@1JNe8M?8;JX+tzG9 zUR=IBoDb~qRX*@|fSC|C4keL3*%U&gxiHs5Rl_!4f{v@1`ttR{}x78#rlI%*-Ep|sosIHM>d@`7v z#n_37WjN%{9}S6%47-xp+*wjb?zjuE6P1$Qz*tkNbQ{Q=rPql|iEg0v6xS}>5tqB@ zx{*n_m4kvOks`YoWX^Ky#HEBb?wG*1cNbbWGAXe!$I?iw6Ok5I$edOP(ozr?GlNuE zfOh0Fr(;)^V%xUol<{KQW5eS5=)aV>-Ucuut~iv$^|z)F;>v}&*;FO`gLa?;(unKy zQvX5yeH33EDFq^&0hNs|AJY0C=-&Zsh<_vK(x_}2I+j~BgrS=x86>G7cSW~EV8d4?OaaZpIX&Tv1 z#VYkX=4v|qPQ$2$9FnTFhjbej6f^r!VF9X?&$MAzmSWp>z|P~vyyL<`e#uAGgCJ)E z%m_ISB_aR1DTI)7VXlp;=%TNI4oD;9bLca3lqf4v0IFjctB|_M`SV-hxrf8p9REC! zrjhgXq%7)a6hrzUNK=UVC^#YQ$H7I}#KIqL)SPb8J}S;`aTvN+b*mKkS3sOX;L{Vc z%!i!q@HMBK%#VuG=IqlTP9yf|nU&-RMzPYtqoxvf3dv7Tt%N_&)QbAIpiU$Fqu`eE zFUJ>8Ud6q%iMUh9e|l0(tp@d%p6LE z1t?lRb0l_UDYk9ByN?$a93DO)v<#>#`%3_3P6#-ZP6*eVLYxq|FgHY1!k@GY9gyOL zKuYhJBz53oKKdB-87JZD`V8jw2f>g+{gW72>fx?ocoYooQlCfwUH>$Umn|jy zy?50FPP*u%wXZBpRi~fia~- z>0uDLYjF~f65c?IDV}+G;z=RAi9}Lm0M}AGBbr$a?eGZ-;bTf|y&^|3bF@%&dw(IG$5_`8VUqsKIP}243B7JC* zH@xOXn#G;Q z=F)C6$R+nH7e_L6{Sp{=>U95Q&^cefII^j$m_QpUwsA9w&HXCIl}=vE$l<}0O3@92 z&iPu#kxgCE#GQKqZ0=Vyu5|LcCgxn4>l#NYeRTu*)2cxiGoUVJj-4y!gM!S2NC`mC#spF9(6BrRO{8AvlYf zQ>d^2CCF#a#;z>Iwr$7#$BS=AzM!$5K2^a2c_+Y(K;lpm$lsen2qYKge5#^vI?tm6 z(g>vc+VgyAdLDm5qrhhPH-jvVSh|z3aH0{stRkDT50Rx1&JVlg%*}Kn z?arqK8`7zDhV&Wy#msJ0SbzfMGqbQOOR;VHdCPclYh=;(8)F4su)hnDzQDUbX#Ew!-f`fVk4=wKEsXHJZT7Dy|2?l|ruF zsi4-+z#-X=^zOp~P35N6X{frz{^%gpWm2ra1HKeu?aaqo9dd2E12vVKR;Qt|x%OG` zrIBi9LZ#G!@u(#1-=IvP)Xt1br~~b(7*9Hg7}E%~JEhcVIb?VuD9RT=nL?+X8I?@O zojd|FB#lhFQ%aSNIhjtSo$0hlLoT(tkS2q^n0b&23(%c>=1J_zQf%8kTsU6b7+J{c z!?Tr0Z_`R(Mx=2liS%?+2$AN(oL7WMUyPbGB2Ag1VGlc*r(Xj4@ z968@GxaqC~gUyk@f+mgJCh;hh4U8-$K*t_JOes`0iAafSpwSf3Js?UWu8B-iQ{^b& zk*t^sn6)W1HHk<`Y22l+fGCZWCNfC{jk%OgL6cata6-bg29QpIwV0`;!UEJGpV<<- zvJ~64Sxd)@-0JY7J8Sf!UP}RHgcFC7aCVzQ2qzcj=24aKA3#kS;S9blZE}s#RlVeL z=dDcc@41L5(ggiA+*BgiA+*BV=ko=&LkEsoRBcB0i=^) zEoKg&!UEJGpIL-mS&D7j4o8d^SMp;#=X(tU%jm~gL92bWT()52m%cLVtPFK`w$maA zSQ)C?!WFS~Ja919@u0;yz9LsYXr3)s8EeO4DkpagcDXD!Hb=U((0M(rhPj7D8e^cN zd(bRO5nL?AETmH9h)rhx@GP(_>{{0vSTlv5NSf0w?ifQkyBxOVjc9l^>PP#5-Q~q1 zRC|ZYHj%Bgw8p5G6Z^&Ta>EB!^eQjNlWsw=O)_d6o)2?dT z7G0i7F1&?pdA%{w@a>glzk_S{=yg!ItfQx=zq5m$fmYKjzJ5>Q;hSjeE-OE~rJrMq z`e|Q=YyRP7KlM^Qk%hQ6Ne`7DZ*y9dORhzuWnHafR&_BXB@8ZyZu&OY&&x&I+`5L6 zXj^^kc=4aedIxLi}tf<^>Oi*Z_a_kwlZ`4#0(m?*ibsmsK>Ef+odXfD;Su1kQjPvf+e3 z?kLUTb|>J-LW_x`GgSA;yMZ21rMMe#q2fD&kVB6f7PmVBM;4nytw)nXY3>SKxYV6N zV8p4*=o`V7;?BT@Ox+y>8c>lv}u$(4XcvyxU=_yHI;;?qLo@6b2g=xr=irM4tdooL>dkgikX9`umF9^XO>`B zmSWqsa_x9=cVr!e$7!7b7WE4NW<(u_lBi#03L)xTm^+55gulaTIv|y(r+>YdrTrCN z2%*IG_!ogSm9(d4Wr0Vtcv;0du9H~P2>d8WA@c)pQns@2&orctGCwNPZgDiaSaq!w z`@exXjo7DWX2}n^+ux;09VLHMq&9b72XiXnPfxAnKQNY+BA!qp@-*_Fo?D#+05OX}`X(2taJ~=?9 zwSv*P0EQGZtEjL5ZOdm)#I7vGw(WC0=_Y0d;m6fFC2*vl%4KZ7EL>?blnln4hJO%WY=A`zt#;Y22>xN;QmNLEaDf+>aKCJ`xljk}b`5Kkko ziA+*UV=krB(j*owoRBcB0i=^)EoQz-g$1ZXK652@Whu68>juV)F_G7{C+s{%3g;gI zW`q-ml5l=#3L%_am>Zxf;VC)LW%&T)F#kZYHH5!Cop%l;Z{1db@`(1U}Gz+3xJhEP#8>VhHP{mL<;P2fVpc1 zx7Wf7hE2t|NFfUhCTD)kuv9Z2Kzedxn&}Zva~Z(J%xTN-tv~TK)@u(Qt|0Fu7Z?X{6{TvwAyDX&)Hu?;7bG?(XlSsrCn& z8D7n#n)BEz<`V0_1hgM)Lugl4L7Uw%FwnE1bveGJMIXT#=|MJj;fm?)tw0W4F=TGZO3p0LY%v&IymJl;yf(#~nFopnUKv$}9NcUI#t*)_5ych*WO^m510R@CjI%cmVhp$o29 zf{KyzQNf*cjA~y^>egA0pdlopSpN*bxU-I{43^MY0YKGRJHuS=tkt@+EH+v@OM;aE zAUjL{Pr_i)vW62@24vY{NxXt zb6H)@ssUZ}%+RSgY)Z|lAvP(%{oEN`HMM5d>cLW}OU(MC_i-FMy+-=5xHP!7Bxb!d zkxOT((&Z&mRw{n^JT7jjS=Ec!HJzWP^{-~V`p6mh=gOMiU#_PP>6yZ# z^l2*eaxc(U)V-z4XC2~YWyL4S)7)5cB{z;Za*y+IbtkLe&srBc?i6w&cwDPF?zGTx zWxT%-UT)1NKt5;={%ri<=jf2!F=rYJt~3XKquRk``1P;j7p+@RJ6uPjm|kj>V<<4o zI_a81fA374RccP8e%A!Y-$Z9fJ{icL3Xf}5wI0JIjEz$Nf}XYgf$^D{u`7?y@1BP) z5MFN^9p#-bh2rK<)4u5aShOg28&ya~z>y(1!prjUny-K!DrTOgb%aY8hU6HHzqXOS z&LI6(d8WVluZsSDAa(A+BjDKgXg}9MThaS;v|Kr?AjxDL;AQzY#su_dF@vho-`E5? zKOd@QLcogg^Y&#ca10tj&YpRP+5Imo%W3Hf zA7xxwN#_N+{wkl%0^UsAXC}8Jj$s+$lb+aT!SBgn=*X%;d0yP-z-PIHhVyN3;@Dle zsb7S{xj)0Zx+iq`KC`{7tO%Sl3dF#!@3Xg(mw-i;z1Q-B{?Moqc?sYMkB?Ianijyx zy41hCG|2-BUQ-851ci*Mm5>DExhk}+ZXbw-Z0v+b{N#VN?IwE@8qD8qc zLR$FD%IzXNFpy3B18q|=gW+3(+Mr!<ks_Cr643h81_|AF$u{41DPZynE+b%eGLktB5rlxtqbmTU+Px1R%@%RZLO`=wrc%a z+uHj3e9pb^&6_PuhWPva@%!VwxpVHl=bU@)x#ym{yn91Jxc6yB#cv^%!?Xb_LyH69 zCsRSbgAn0}L|iG0G(cH$Bq)DOqI5qTgXX0?=D_44521eTiSrSG=LX%iACe04-R5@f z+NLRsG@Kj>%C#g)#b&cJuBw;#xC4Z^>sMSuN>{>31*!+nMOekQr-FQsA;M{fj{9qo zl9S1yA7Wz&v8sbMwKQyhj#MEAG0a874cit39ulKRnZfK%OTDCa_(<;;2_rk2qYaak zU3{r9&KDbTpR3USifyU|LTiF{0>w&tJic?!}UY&qpg+)kH=^&wBCjfU3_iVc*@7Ggz?3^L=7$Q zs^-=Wm{Vv%5iQ7zsui}&!FhYOS4%6#cpo_F9=4s{}k!uKAgVpWHqDJiTevr$OQ zJsU<+>|Dk!n_ZfNGNsElSd=AcOd?0Wf;Ky{ussd5LktFOCd2u61TYw(4G^tz?*aE- zfINJpxL}DEF+7`o)jRt26w7J!t5bLTzf1-BE@QWUru7XYjDFE?fJtHwN58@}XsP<; z2q>Xo3$Wi>>ljXX9jBcf4>n&yV(D6z4O^F*MnwtRSAn|_gCW|?5Y1Q6ro$Arw=;^t z5dG+&O$Rq@ze*^B5&D{$n{uw=p5lmm6un&|?h(3cIx-dH3$bfD(^|y{BX0I>R*B?r z#QhMXQ^jq(j)b()kevqYc$6Mox=D+lpDygoxVjWIJ@ByI8=iZJ!LzKV5#(%vJ@#E` zv>X+QU7LsqOJ)|V5+;IWo|g*py$FcvxSDVlbnLrmikZf$oXo7^GRe8>DUfnt>~ z5sI-lf4m^yb%3aj;|Z5yyq&EW*exKuxqVxvLHJuFsfl^U0?GL>p~O@sS)yQshV7fd zNr=G+`$QZjk)e}v`lXnZmoJvL&nb=~f5XyXHkm}8*WG%5cCcQM?-h3IXIi5fu^hwe z;^QrL%_fJV$Zii$%S7y|#5+*{O_vMclio@Yb&gTG)SY&GSmBP5 z<7EB<$9sN(L^U~&g-ock<2Ok5gof>Fz)gt3pv}UB?RyAdFlci!C2T)M0E0oB zA`aVc62M?&?FCd7OaMn(>l$VB7imp&G-_bE9#19>tIHeCzmP)1AOuS+<&n$eUr}N0 z>gIK`>zX#G@|D*K2&*o0&PM@%rn~7?>{fg+_B#F!2VRaLwvOmT9^Y2J5*@bxN;e&5 z>r&H^it6}^Nmv`@^H3Y*Xl=>G$)#_92Lf^MCwi**R7gi=h0E)JdS;inGtLcbyz5zT zZKRS}QK+p?Ngwz!deZ%N-s@&+~3caeejo#jM$ z^zr~Vw%&=AT|NFI+=x|9giHvmT*(M5vQ0OQr0*Jw`fC!I!j)deR8;1^t&lw&RFfPQ zWQ|@}G)xN8jyIY7bc{Uvo=yc#q@U1&PrcjcHo??jP8Exhn$|!m;G7TW3ztwUKSa~) zdtnl(iLH^khH0(MG31R(HF@~-)i7__5pLeiS@JGybBgAxnujcPvdG-`-lXJBt1xu% zU{|nEY!P9*4Fp0A1|=Ajd8e>_KEX6bL7UDc{67L1j9k%~uw-0_t!wnm0C-HAJ!r8Q z{zYb>5&ME=@#)bdkyyTK@K!Nf!X7wU20^TyK}%7N3b<0bJ*Ux2v=a`yoZ%Qvzhn8Y zBh?a3FJ;~&3r=N89+Syw4MCgGuze#~3o#g}zNARSn$iD6+pr>yk(wTzv}Y2>Nc}NLSmO{P zAqImsr5Uz&CxF4A%pZpB00A^9L7M}yusxOl1|#Dx(?WH-HQH9_>6E61DXsOZJ*H{k zk^6~A*|o6|a#hvMrH-6WOyYLcA)hB=;h_>yR9MRhb>!kPmos6%!un4}D0Spfy6fwY zIpeyfhUS>gsg7JWNs{>sV_$(;>pMMxx%(BYD?i@KKX9{wA6aIV=m_!B$e?c`a*L~` z{FB{u(Cg~M_`wG8|EPq$L!3)`FPS1)Rgw>DwRUsL-IB!60x9+uiQV#j zi?{NxaNx&8oCpz^IF<2d87l%?LxFMHFbhvPiR)LCzagIxS2mQ`lfv{SLqb@DhV24O zBZL?X+H9a@ox#DEQ>v}kB%pim`6u9QC=e}W7sX@_!b^?dR8KR8ZsNE zF6ScYHHGcj;6KD*&?cd7+xu=~D1VCS z+F2Lt#yYI9wgCs>s9BxQTuT>lWMOS2USFeO8($OH=)&46>{(W`F41|$7VdhFAF3Mr zH%0!*UZS<Y+;Z-nnf&`}*{FqTy?YY@~q;dPjj zb*aO2@#@Krp(pw~|5ajaTdiiDy(5GbZL6yr8Wh>Y@GZf!Hcet{hSW?_NBbib zqEjLBR!5pJq)u#6aBIX4*{r$7nvRzC)=+AC^&o^Oe%)eVvyRbop-)r3Di%ux`Cg>R zPq##Hq24Sf?11Lg;UGY)d(fxpskMAH%1$> z6|Fz9_2Em(un)0b#;v1P$(0PNSa~YQcP$`p8TMcqVElC%62x{?3M#9i;VnhbW=)0d z&7cutFlaMn*uIGX29Kb?IT<$zagQM!v~QO;3xV|?reiSj^Xn5rfYY?r+uSCpu}AAI z4{Pqx?W|V&&`tG`*>x@I=&I0-6v^nqSUJ#G8}v5ALjbgVlkrymume9jWR>WMF^uTA zgApAglsdX1NskQ=3BgpCkFUqd7rz3C)U2cTME^a>C&fnrZ=paAfrOpc;x;I;aKuC= zm8;$?0y-HP8|ZSm=4O%_xNNl8nJ^Nu>iaDD16PY|tNwJ%L@c}Z&8sMv{wV*CfO@(1 z%#OVYVc!b8Rjeu%uF6g!Xd<@xFB{8}!&&tb_Y{0wePg7q6_bOwG>#~-3zAuBO_m+r zb=EZZfwqKIZBS{GK6sBC0BMcHnmZzDS#{Sa$Ln;Mfpu_5hh0`f9CR_4&F>mP=250D zn&xNF1H{!9kJXr=T61fgTGj!yGrJH|`Pk$f5ZE&tIbw^6&<5>-y7M4yY6nhE_I8PL zOadn|q@Wbj>8&(niENEv9MuX@)5A8Sf;M$8Y*zykVlcuQ?aE`wvPik~Fx?PiSF==R zMY8ZkgjMXpRFJP25pWZJ!3g6fP?N0^$zk~H*pG7Bv76v*Y>=r351QQFgATOi4BKX$ zWl9PvY_A44AuTfo&$iCKnUb1QwGeF|)~RO33{L|cJO6%5S}0Soh4!j%jYf%_ zKBg&JzdBOW62VM+J3d*OnK*iH4X*iJQ=MX}L@^8c_iiI`L-fo$ZKY)>dgUbry=6j^ z($T93nf36LB#whb8jij0+f>)qzM-ZeQs3Cz6scL+ShuRCeRW-XO>NsB$h@YF4RPe_?M;V_Yqa>vkH0cO`T ze-f)V8`WI89WMpxc1}5k$SG@AifTS5|Fe=Alax3`U*NZC8EWLeA@bBJqAkmceQa{- zF4509l+7cS;2ibeUs^ym5mk5-ca8fT;%Kg7-lf71tZ?A-PjO?INpH4WeFvjO#ZQycVo!w2IZRn%6qdIwd7P3pEG4u&)s`qr z(wT$_DG?gBKLD2@27@+LI&A-q00x6LZAsYvjsOOOHV0i{yZ;>kFc|UONx6z;Xuy>I z!uGnv_+XM6ytGbC(u0?np&IuvEY0?xXaDP|MEU{HdQ)9#`OXEb32j#E`Q zeAv5_c9QDXPw#{;J3~*8*SEs`>^GU&WGw{8zP7Y+{-xg$TCms&{~Tyoz4cb{vyss9 zU5K~x|K5T3!%lb|QF#rzAaUn9{7gx~_M1q-LR~#vp+kc>;gG_cTuL-LzltBjT>Nsd z-w%*$W_q?v8$)c3;&SHILidou7wjZpC^#Yyk<*}L4BM9?V~DAO5{z7X4~1CS99t1> ziZoPWdOq3|Pg-PHpg)e{Csgzm>Zjtvhy_cV3#gfp*w^IbUQD@yERk8hoA6ftUGFyV z1z6e95&RZQ`44s@CVC@$5J&?Yo&-+_!F2C>x(!N{-g6~$<8ZLG|o z6-CqaE+I!NV*e%G4W*(6%xd|5hqv2nP(K{CsC zIo`_uQwKid0INht5Wn*O$&J9gL?XgBt`5tn@k8$e3fAfjuENurc?6J4oqkE#8@$pg zIxZs0pTL2bAx$8llJMQ`tT(kNec!?eV)}_ z@16y*$q#_x6QE~kWrxUav&ncX|3U}e=OPoK{HMCGtDMBHpCitW?xhAfP zvNGlyvuu>D&l8bL=35nO{>>+@J9UMFHdq|T2~GY0C|38}Mdf&Fy`YU>Qk@(qR* zCBl@)siP2^YEZN#Y+nspA=V_i09M^)kD5I^P3^6?N@jKhm%eyElODW$AF*6a#|o_N zz=*d7+XHGKLA87_$LVwl3>=4>2z-f#V{vQ9b`%EzT-!rsVs=dQ6lSml6DGuIcx2zAQmKf_IE^pj1Qx)DE7=!i@OIlPXJ`9#T{G7H!ehzU{_po$I9|0?z+={nH7B^vUr&@l& z4!OaeK2MIFl@4@k!NLhOiF$LD$|p5A|8??cHo(tln!~xVxhvK3t9Q)j_|#lG%PSON z9KQ3TDRtFM*yRo$J=U4O7OmgH(jZoTqII&aRfiP-wfwdn^E)9e8yN0R8yFAf%*vc@ z1HxB=IdoLAQ_pKClqD_Nv>L|{Mwp*zm%xTKw=QYZzf)(s^MYoPt{Xe&i}qeA_VL3f zwSA23MjLmA9!yq0jj(Sf-YPaM70wJ! zVLx@P#&9pJ>%hdXxfj+g)g(3YIK5TS85QGD6xw-p+&p5DfiX4@s^b>CE`MRp;bdZl zLLIkA?=!>Zz%%+Pb=(qmU^uU(uy$p%wXGfgfjVxf_AQ4M%2@ljqjl##qA)fP$gGLl z*ZeudzW4CP{yztP+(Fp!DiJT?Ek3=OwYZ2-b_K_A%UH!B6jauNCU*;Z(7l4<*2o<} zXU&i8b4+cLI}#6(r?Ab+2+=bQ+DwK0uKkQkQS?i|Sowk5GU8OPn8iffl7@={JMmhWN`sSv#_QBq3!kp#% z9ej9{c6(rs`3B>YrQsw0KO*aX0O{ef<=R5UxS2$e4-g|(!GJJ_p-=`!P1I6rk17Y6}@m8_Fr@|dY z)}0?t5Mlz8C!x$#aqRyEwGe|ro8`y;Uji76v_7wGirFS@tVcGVX3t{>3cIdPBVRKd zJDFJM(TKxx>=f;=6cyG+8`QCt&Ubv`svKLbT@~y~d6610TCZ8H0|Lu;65h)HsRKV2 zpET$Q`AUIqQwM(>ES3k=xX%k(CLBi|7D z3fhbc+h>5M5QCB5y+DhBkGs>&rG_{=2663S%B_wm@nUqdY_@23+F>7%b2eLi$*_tI zO$GVB0R-)EDkIEhi*qT&63Jl-)Ulb-lxxzS%*3E|p68NX4C&d<^u`OcFfO}zQ2J!G zD#O0a9bn7YYV;-y%>RPF&~!g>C^~ql>!<+=vRy{UIK^gV{(DLnrxAI@*z)OcX5u&wvg7r6yrC>`B zgu<3jWH)Zq&9Ib7NB3kdO(jJ~O(q=h!z3n6l3E)7nekz}6fA}qjI4Zxx>>n8QonXy zGrm9d3|Oj`=r75g33FM1T2kdKK-IR%qN7?;9rUvY*t4*<4U4I5YRR;^g9*R@CDz;& z#V8N3BUiO^84J5x!X2Jic_!{1>!pv1~tW@IM`vRW6JY-Q=Xu!-~D zU6Gw3SZ;Q)a2<6Ar34mNNln4dBbNB*#KQHXC0ux%nH5dOS$tiOoj_!%K~wmH8*wY0 zlarxi@{x5`oaJMZk~@>bB^sejzbEtx2Y6F!jM_MjD`*oMwp&3wq=Pg_I4(BG_q>+g zc(Z>DN|MMOuO@W{aJQ2W4&oKF8Ft+7<$P-PXBHCDA|sCj7p%MDj~C>71`t^H!Hh80 z{W9j$ISlLZHH=QP?q;)UVz0*vXSco6cs!`|8ej&io&igjmi))yB}7XTv>6QABoek? zBACITe3TWo-y?wEX9Xp=_PN)J)CjCy*u5t5lRS4v_gvW)me|QX4CyQ;gxK!dhi3-d zkGG0VNQJ9)s|ebqKq;srmV-5>x`iAG;>K|1O+vBqLZ-(t0fuC+!z^-Q(imA|dpK3R z*EFiQi!@24tMJV|`%InrInv?B^_=?&+i!qIb5BTg8T?!d1M1Ao8^rH}}qj9U^j%{Y+xeteX^)7pvr9qGm6oGvRAzf(^+; z5W0^SH>Qv%bhQu;e4XGParB}JRGc8kP%FZ(?Fs$TT#sA3c zS=XyP*)uI%oyVdZOdSbNY?b8XCv2xp6X|*rQl=51%p(T=43BLO^M?p}6-?NZL35d?}ZNOXkzjokM z0*O%mz?&v5l|UyZp3F)RW#Vi~V7}w1i@BU8l;KQrVMvzV>te~I3|*l)U(jsiTg40b zlT|4)pvj~h=TIai8e_*%#F$MvG9gS?5{*yGF-b`z!iXTDB!q_TQ$RPQgOokA24|22 z1swVK=TwJlgoI~J{LOgaRAUU-?DV_)%Gz3HhI`!D5!1rf50Bh4#Oh(ejnzt^7+I_<=L55{Xdp>j`5K4-88Yu{p#; z#Us2-B`o+a%T^L34Hf?fQPBZ8(Ag7`854ISaU*0!jsCnHtM3|*=9LG^c}|t{;82#N zGrT86Mku^8a1mk<*DW9zIqn^bY#!F&xp|-G(IiQ2V))!7-HfegDelu!V_wVGfVYZW zkP25Fe{1+kB9e6-M=41CJgwv zdrA$uF#{J#o7TF|M;Dvv5}cgi;e>ng)S$7yOqWOM{=x1u)AcUK1V8tA_~Fh?HR$0? z{A8FN$hCU14J{KqeCpwWV`w$#(D%}1;@NDQyuB$`M$+~M8xHUl=FmY2{ood3HR!br z9L%2UOon>5jE@{_79(=y1A3B#Dbey9suMyv+QU-#L@eJ9n*6JDp-hW5Miw^JwY05n zZqKo~ur+yd8HzBhmwG7nD#Xxe&|?`W9@!LcX>4vUuj(dQIHGA;6SQCU&|dsFX;=R` zy|hVt=DXh}AowH<3Bh~hUQn7)1@7-xgC5DmNjoaN9hb&%aw|u{le{-uqV$J)Xnx(% z7c|GcpI-XP=6DmfK5-7u|06FoX#- z30}O7o(D@f%-DC3nJa&jE)@4TBM&dYjjsrEIAtX~>Ay=Cg%=sjZXPU^!w#ll$;ijD+XJ6B@cJ?iy2rX8%63C^8LCa;%yzhaSd0qqS`J2!Ue_HRz=byyU4K@J@Bk zjAG!Gg^rfqg#oG>H17}TV(<=(T|=0&y~sY|Pl#af(1d1kh_42{k%13XCmMV{3W+x2 zWX>pur5^gcnh$dLC|wTNP?tY_Cv!&n8$I-SkE0s&RtEa4$UGT9ALHiE$iYh<4tOW0 z8Z-lA%hb_h@_cxX%^-cMJ5lj3%lx(;F5dDFkX@5X(zygnJ64|4w{xV<8>munWE4O} zAfbY_UxO12vNb?V>Q@?()y{P5ur+9zzP92(iOb$$&NkV6au$LEK;>w9M zA3#}>&{RTVc8k!kJsm8B7z|1zq#ycCv=C;g^V?qFP)z$0kSJySIiX>IDv!r|`ahBXk zEGoX5KNQzNvTwW#T$Ge+q@8wEsF7)wopzO-A7x2;QaRuW zBpg-NFPI{&Kagq0Kw3(61{(m~~AfzP`Dn5nrlvYqnYfL(K3s*;1wr3R8eMDID zCQ+#PM*dJ#K@n9pM49EJF==MA%SkxFDgw!x5+sB~DDFQ37a<0N5{$h5H`B{IcqxNbNUn3*Ve32Tu{YFXqqnn_~gZHy6#1pj^@p6Nh%6XK&Ajp=7b&-iu3=#c!KVFdUc|f4i2Qb2HHounn zN+gG)(QS+tjrLr}=PD&?#8GNb3;n8Bb;tq$Ao6To0lf@^R1vPjipm91!iKHz{Gal|*BqXx{>yQ^^>L>W?9Oor-V z4$F5N-pW78fe*lkU^;?%RL9ATpjZaT$$u42-Eh2>q_eVX=}#1*$)9TNm_u2T!X!zk z2BEnB2(&^BMmXS-A&f&V>!_s?tG+U7`HqaD!LnqH->_t@c&pg%K$QfCDpU|=j2m}M znH+|nj%G$@HEw#Cf)>hcTAtiVb?>?P%B}ky93{sJ3)}aDc8I~C1S9u-MMTXd0XvkfTAo^`=8ZcBBgTRN4lNpt23YaYeSrTbg82z$Xy`bakX8mwT2szGRr~~I-A&F4_xh@QQg>+)#$-GzSOeW5@ zS16X)8pKci9SWt7x|uR<4f5nVOmdCU#~J*Gxw7sAidARY_`~YAN;HCw$*ksV8-I{L zeV>ocu4Rz4&qpFmd7O$e_cO8%asMr7g&15LM!PG-jWfe)_4TigYSzwHweuZIR69r2 zF4TXDu$M>GF5cz;xUr`n4nkJ7N9p}MxZ&a*7J=BHB}8ob=CN7(|L4GK$2t+jCVi7{ zLSZlEj%e-tvzb3uw>Hw&QrDzvYtoQR zbRw%0sLV&wn%@X7I-LIo@wDU9OPur6)~0INPbYJ8h#T8ArZP%_pUC5Eez^QxTvN5@ zrJ*Yyo1Dgjl#)i@?qLrbI2}t%!9c+&2$RIA?x0O**j@q#LJZ%d^oa6XS&dRO~hy6+~MeP~X!3H(MI z+?Y-J6X-n)*UkGEieNVIR#eZO(Vb;0z0Vh$0?0q)@Js&qeuKAaUq!stb5p>}PB7s8 z#+&47<&^}TjHLS=Vx0t$mpq+OHC5yNk7aw2>(0CxF>0OWF0rD$L3)E!~u-%PV$IW0!#=P<=DWw?u8Is{P~? zpYC!!!DI)=vOV3%qIAiBfcn4KLA~FSd_>&X&h6e%0}oQI1*P{A^KRH4zTZ*#U|y9K zb9^^eBZnUQ(b#lbEs{ngX0vvI);_Hu9c?7=A%zmnLqXCGKPvR7wm$r5z0BHd+u4Sd_RqqL{~lGgW-j`hP;iZn)J z%J;Aa4Akd-_#V;82N%}X$6IkWQ9Ji~&B28-%J-;FIjpdjL+eVJENoD|$8@iWlR~B` z=sKB$ev?nj*O%MC{OcXK5BI+62%^&dmV^?2iA)Ko@a$Hl&*0b`_i4>0Y z#>sJ)vSu_LHK@=6A{^ai7TT2WShN+{5$f5)Rz5nB0*ELA7r``xARz}H|B!~E92lG= zK*0hzCm z_Pd5QwXwmn1~R&27Lq%sL<~HWAY$7XMeC6$Jy*8+4aSVXK@=OCc%m{_RnpNO5^WRw zkp^5?ARY(m-$TaW+S_(;HRpuOxJ1}3@4=;3uOXURd?>N;`0QxP$DwtaVozzG(#Xqf z4QI9oo8jzX7iDXAP`V8E@}N|!i+X{V>BtFPbZCuv{zA-CtepA~F&0$;hngtD19VmmPx zY?-<2>qRbHuC{jpm+SWcmnUV%i(!gKs11%%_Vc0>Ug@Z))hk?_C+CPWF)i-M)aZSQ zm&7w0A=lM+68nY&!Lgi|p1E~Tz)6kKSUiRnM4nJXJ})LRt5$zaOrPU4=Z$A&=W_xs zfl9`-YdWS$MZk2(e!z5Ic1+`NT>UCkw8K&VbUfz~&q{Pv8!yg|r@Vq&k?U4PaBU6n zbvXET^Wamfe@j%SVk&3j=Ip2@#G9hH)B$4R<;x4Oq+z7By9bxFXx}KDj-rm#7`Ntt zF45{|K^0&29Xm)AlYvu_2(=&e1Wf3Z3nmDGRZVbW(5&!PWjTkcqcww+(_n^Wy{ zr{P{FbsPH(=0_(%RF>~lyw$ot6Yfk{V54v*EY8T}0_ID~zH+}l0Ga+Ojrhh%(!H4+ zrd#xnVit0;ajJ>Id0j4SnuA{&(k0~4zt)Y#Ncyeo9s`Z^CT!(VkjAe6pt{f-c3>g>`Gc5Ed=>FiGG3SpMsE)}2d?K=MD zB0aMkNYk6Kba!4F(vfsbF9FZe-SKO?Y?YMW-+3{K>PvsualMP~vYgOm=CiLCyYLzR znuw*t^my^bJ_qTIxgyQp<#}mHmlwZ|=%vfMy9@Lg`aCZx-Om3) zRMO{h?4Pap89KdmRAYAqD(UoO?@|`~lh*5{BRZ9cq}O|}3!buedme-;{w{GzxA#;R zxU%?x#iub|mUic&bod%@+KdI*qG*Wg zn?jtSw>2B(;3&@mB4hq{7w8Vn#bzVxU4WkNWExV0;IDhL7wMt$-zAt382Fqh>BXif`)0?){ z(H5>5HMb;Iy0NLcZU)4U`2aywJ|-#o40wx3pSpn>)A#s}VYz%#C1mtbHQ-U7Rl#E` zf;Ja7!*&Qc43%y)rpBG^R(-JM3!yZbwy&@_2m_u)Y246 z=ewCQO}lz>o%>2Jk^j5An1692xQvzO;jk4WlG3#2J)v* zyXx#(2H#*}$~|RYB20M_lRbpu{5OyZF&LB}c8XofvzVUR%=dmMONfSO?KsS*-vZah z?mU|l?0pEN*@?|(aTx=%!$g+vFj)d^(%cHQDe|8tp+E>sE+><19ypcK9G@@6d$C(%Y*nJ8?1(S zi|TwdQ|>W{!c@gvG)Q;r~y2paN4~6 ziq$8l!dwkI&FXW?-CWL7)-0S5+FpmPC9P`M85U1N1GHe^Ui(6R{}_s`I2XW%F{kBY zU#J3W7{j@SVOMhIWMO;7=oNMKYipuSZIRaYnkX*Jtb;d}p;y&25ZL~cJ5UM6h_eRbyV*UQInyAin8 z7iD4%3!8{#%CzJf!6jo;8S$wQ@doWafCudx@eVOqHF5u9^)ha2v}ga+W$$eQg}o1n zMc8}AD)|ARme0%HYr-DBLrJh#S%r(XrhfhU@(DG#447BSB%0#9h3#Wo>Y}YP8rFC=ZDTtPuhFT%nY-1}iq`k0 ztF}gH2aX#A3Zu9e@2Vc5(9({!#p1dYo+Jfnr`M9g&K5x$Z=B2<@de6C9RfG^5P_(g zL&0kTK55l~vq@zi3hIuYpc0EgPD#c1%q4JN4-v>zjK#R9)LM!*JnSJ-*=dc6uEz$b zsPgEP?+IQ>7I=b$zM*-3tS5@oGE3-qBxdLg9|Ag`z=s(2WRDc61zVI+Agut>NDQHi zNoW`q;MtxiP;5q)0{xS8{=ovh*dqmsMKc#@y0xhC%nNe}cWRc$MBOg%d{FW25CZbnYp~srw1b zH{RKeN9308WSBd7(P{gf^iRaA>Xl)|YWLIdHN?JKT_>r2Dn?!V-gwD#(oYxG{{|zD zeQ)X`JH~DFe*xfo5G!5#-e#3Bzoqw^`D@&W2fYzK=ETMrH}(-H_Dy6~r9Wo`U95ed zM3EP^myd65Yj2Iz#S$jn-7#E`=yH6zhs(@c>!R&#GwQ3WwWEdY^zV}w!;v^zrDcS$ ztEw!+W)2Cz+voR4LvKubFMGTPKA=VuR-ppm+j{g(D;SOybhmjDjpd`HuPW|bu-rE;fy=YAaUIOn(FEa*g(^YE#;Vq#Y`93 zvq~EH_8m#OrN<3-u+P~k>@tydxCi}gLH{(-FNWP5!aFm&$@@f8HY`EUo7rKQ7eVTo z?#J1}%7z^P5(ga&63e?!qI`4%W>-Xlk!qd;xCZjkBq%HGh?ky75{qFThScRDBzyv} zzJ^y>!$iK$wS8Rys_a9e9Rd?DWL5V$KSXYQXpPsm3*UMsGl_SpfokhgTzENTZTAUG zXo$cdHE$5~Nm8N8pO1zVw5LKwAqK+&2nzs~A1WKRYZ%F3P=ZzO$P?fktwt3#&IU-|qoZ{udZgfqEDkH4&zf>}?&tFQBWO6@a?o9a z3}O4vc!wCQI(lTWdcZW#k^_OvX`bs40m{Q&7@DWRd?z7B`Hx_P(>x`@X`Vl3Om5Ay zd`!)P6)@qE2)y?O9N=&It)vF)ZL#Rg$T2>Zf+_7<7g0-FMp(LC?|KlZ=G3lpqngsxd0U}V$K=2?^$nz&TT{=CY+3<4@Msf1FSIU0oAXnJf!3Ng06N5w|0gm6O)h6NC|2?*MM zm8N+HBN@c{7lKs^4fg?KBM257@epEM8^IK4sc*P2*a(67q|y67WrSlRB*L{3d*Q1I z+6bLoObX~;j0|DBAJB#vtXhT8S7c$24^!QQ-_!b|)i$C-?b1gejuamuMgqIx6|`SJ zox&hs+LQB&RWJPYm(8$_x)dMYmOW@On)3yLJww2<87^m8t+>St+b22(BthLZBKWkD zBmZ*vDv?Iqn_1r0E|={%{PO4x&IR!Po$@i*?wfEO&@s_G;*)2vW2xu`Bzz29j+!OXox9H{kbMj@{bkYbfh=yB)nqYKlBV4dipz+PT&d_b za&t1JAM0Um#zF}7;%RDz&{W}FdS&60zB^hz8Y~0@U_tg!_GJB&1s?frL;|hOD3c_n z*fXfPPm!s!a8GoZY(nforYelb(XDE#C(Q400z(ewt0YcI=$bl6o7q^0y8eO$Ib9v8l>Au#} zOi)ZN;x9?@M}1Jlk9xL<6KfXM=#S&(Wi!_7Gzu)AnCWQEcrfxZ#!6*>?pa30gORln z3=6Zd!Ko3KjgQI3i|o@s>sdB%L#G%n3{Tt3U9%)zM-AsAO@Hcp9)?s!n_A2|u6=nya>?d98^XT;N9 zGS!S}FS=$r$%wQU#Yyp=>*|u)OC~lyoY zu5L3oyQ~y_pR8n46Wv3ac2j;B#PZt%A(npM2QOyBOip5X!eyoZ_sL35Vma<`h~+O> zQ7${Uut$~l5Ok<|vqv_2vT!P=7%*;GeTL$3Au@&&&CxGCf>A$k7@Yk5F_=YE3o8wW zH+wmxT8UDbG1leea5ydUi*}ESkj{L4b4&J)avnq|y_73Gb`^T`Id{k;uys7=xBt?! zY|%Tz?j0=HWg7>(?8rEH;COQK8n(@q1>G^wz3x+Z{dbiPjQIV^l;$}HE+=Z50Y9GOMPW4d$wrf zTb-)=)LV7Kr#kf3^l<4C1dli~QFnpOBzQ5cWK+);a4Zg>;J7WRc!iY?wbmXko_D%M`hI(nGgxJay}eFKW8x4P+JaNzf(cNk5}2|Y}2Y|=8LA-A{+8A() z!`unZGDKpp3YQfU{-DDeO|tg00=^?1{yzG?`Kw5*v&tfQCN8!4))mOG;qoqWDYdwN z&$?asUPAAk*0q?Y5Eo2$*jxBLvzNaNhyI#OzKCt)W!LsBljF4Cnq79TO`zVXp=)M1 zjNJ7-G19e^Tz05nD)2j(oyWcxb{6pLJiWn0>$U6#8`>Inr0}2bg>3ff;P@uV66k6v zp6M`D)T>8FT&{j}T`gX=r0Glb3_a6jYp?Hxt$EywJtZNL8@PjvFE#YJ79+cV zdv2&PuD&r+*9!l`RD%jcW`WcToL?&K*;0;O8HFP!I_Po4^%l9n`!3b7q}qdnDGymz zqZw=%vWsS;uu%?O!#zxPTs?1E)Wy|JPCOq&_bt-xPj7i~&kDJ`ys>#*q_t)R&kV^X z?D=yX>Z^LV)EUU93;ky#|2NL~Z|Ld5$6H!B5WSP@|9Jk!JR(#|ITtADGEm455B|j~70TeEh7G<~H3LzBdZ~V2_ioscBtNgA;_J zD^rJ3*i7?0${acw(eQ8FAd`qO9KB~0!N>TU3kTgl8`5ZEDp@Xu7DA6tD zh11Js;AZ0FR8ZxBeArCPzvvke&1vAjF4oe#I8C6{Gap)}f%%KTET?rUN94n-Gndh|B^1N7ekR~zuEs=7Hrt*-ykfuz;IK^KKtel9coRk;VP$g>Ml&jf0UB0?$C(9klfH2cg?^C9a@Gon9snhN`6HS`qXWtZ7Ggw=WgtZU*R~PrNy!iGY_w>ugY|K0cjB`L(IXW-o?ywK6YhCvm zrF)2-!@kPN`G_TTbd^y&dmii1n3GotG7w1@(|Qu&5Uz4*eg#P$DP=6k2QG~jc@`v% zNP0o0(8uL~s4|{kL6S#3D2N_(c`RJuW|zjfc@`v%h#p#bR11eUaFBw78-%i17srt2 zeKgCk{Zp_I(m}q10+<$QC{}^m!2qXh^k*vyNxR7vk>kh7dfAWu+v<~SqVvEm{{j9 zkjq&KJ;6XGF+5E!az9I9r`a%PEqL05IhtU`3NVuMSqnSOhdGPEQzM3tx5!8CXEE$N zBl@fct)OBg3?oO^gOQxiYS?K$%vlcU0{H{^$o(vboo7U!^^hiz?ws|o(@Z#LL9p9! zEGIf7G8MLu2QWmN8nl1Npoa22ZP40c^;Sw}HQec}9w9Qfvtm+oRzG)v?5qUn8-^$q zSQ0^k+&in8J6&k`mW{VnStX-{xxjm5A@|;D=UI^MiUM<4IA$eS$ho`f0S?$-9m?YC z%20vdyBy@wU-bwFQFRX0!l;Apuo_kYl5>Z(^K3|ul_ZG2xE$otWAz9JnFJAE4MF7I zW$ip4rqA-U3}d4IM^19?vv!^l(`k7s#V~Si6pZBFY4rdny4TWLD#pTavfCPPl5?-M z^Ng5oD_ta4k&)cHtsdY+_giTq=}y13^ISL`7rPM0hN7P$S7AE{V2IW=Xpdu1L;0>c zzo}Ri*6R~rYMIwLQsNdw;6wEdF09fj5t#2T#3=tJMmR@GNQ85w#CMFz2pC}*aOc|y?GgSN$SiMyuFyHciu4WEtr73(OwC;~D}d5)7)P+ezR6eB&43y_}e^ zuBg%XyU5pwGj=Q-XYQk%-`?Rq`?4sq}pLZjgoCs;>Qi=ZGGWIjfq6a!m ztYb^VEI>JH>g1iQ7Je!39u>7lX^SJ(q1%4h<0Q46Oq{-xq{e_$(z#S)k5r|gUIOYq_VIOXZP8UtxNJ%` zeLMKwqN~8=B*NVjfm!(yad$h6p%l6q3*NqVtzp|H&8@4U#=ZL+(!{O zE?<_-UJ5V6L#}htuF9KXgV)P$;NQf{{S<+geA!KGemMPHE;oq|s=(s7gLy;V94An} zjK+kM-9*NLyNH_mDgvkH%e1o%B8lbR9S&Yu_J$$uzE(JhlNhccV(x?pT#~mel6ONG zNjy%(bch05@V~)(H?yq_u{z%6Bv5Wa{d5c3(vs*H4QTNSrXKeuFCb|K#Zl71f zDd)LOvj4IMCx_RsMHw*hC<511hTKdl*hmxDMXxq?zj1QQO9s&lu}(0U_c3dX`Jzq} zP2gyvUdJv>7TohODdSeQ;(`H8|9R?E1s-q_kIb8C7qf?N73g;&SjI{9Dlj%*L1Va& z8cg9h;^I9#Z;l+~>*2bwtm}#R zNseZY&X?gsTHd?qj_gyQxg+JkF4hVV^GM7Y;jtOY$vdclk;2R)v{_%UT*g83N+& zvZ|&$1!Q)7@~t6fyBNkHPLIa% zh#GnyadW#^;In*jd$x>e4R0QNDv&;lWA>|faZWxOE72M+EMCzE1{bGr-V5~l!t zorqF_QKut8?n|6G45;0a1ZDs^6*bnqGDLUkTZN^-tt6cL!e+jNWjRxKb%yZZGe9`! z<;=Y4auM?;7FCN|1+I4K=CX*n6Lh0$4XfK!vtGK~>r6m$Ub@VexGY#E75Y+_ZY~R! zJ3%*7p?5zEh0cAMGGFRuanhsRW+mP@-_S{rm#}>q zfFW8w+(F8qhVorG_B>26;UbH&bBopa5`MSO9Y})?B-=$6J7$rW+DebcK;bkQl#wpU-pInt>%|l1c8TTs~EMgxfM5PsQF)6B@ghwzEM@* zvoZf`bk#GnEn1G(S-p3IJt`Q)dF4x~5HGn4+M@vv+E3vfVsP5}i;LAimM3p@9U0t3 zcdh><61Qt*Qgp4mo#z1AwF=O8GNM%AG{)rKwa%PZK3d;7I~9j&dDdVPj#*ld`U9{A zLob{Jz97Bad(>{yla7?4aOu^a4|+Lwq}?UQ{&O=6re&%EZ@c7j=|8(qE~=hq{hBJ& z-Dc$lfaKh5c9W*`mPti?$R(FcZ`plvnTi;?5Jk+rlk6r@(>Hqb)N~Fvl5Ea>V>hXq zF3}@fLv_E4KsEO+vAbk-PpH*M8l@q73CZT%6LyoT=>XFUTg29rdk5HEvbx_(D{OcA zy>60px;vUz#|puElZCK-CV(N@r=Z=*poa22ZOZ0ibz+K9FLsRjt3>7+btZ*T|JVi6 zs0+|{B%-j^(}@JR8}&SF`UJ7D3xtutb0n9$P46B#G3gY9Rbt3hYy`QSO?o$}(V{PB zv9v(3*5Xpj#iDncT2yUiHJa+v27Ql90Lj^)caNml^P~cv?NZCdo_CvCrUHITlDV7n z?$I>X+@qn!z#V@nsOD_VyGPU*bB|yR(La%B?#8^ERJASF8YHd5P(5}NsOD_TyGPWR z^7NvJNnPbQ58doa&efA(WXy#rPNKLkxxm z5EekybAa;pyAeOA9FSu~^2lK2F(H-UA z;=&dgn0%w`<5>qPb`N9sMUk*&N-G;XLQCx zP-q9)9a{Y12u?Sh3Y1kc*>}3xQ0&gxHgzs%r)7t9jGvNTpcv`o?x*aSkakVd3e+9fWQRl? zZ-i#cY5B0!BpSAV4Pb~iA!vWhpoa22t>{O^YS-#yV_D@G%fQt@<{C>Tg|YmB3#73W zpwEXW6}XNuxf@H*wxh1BP^eb1CFvF>|7jsUY8xOztLg z$8?O%^k|kbF{`fwrJQZ%jtLo~=@FVC^cD%_ZZvbCq^+jb0?}kc>9FfTDQBy>V?xGk zrWffZ63X3d=0Hi?&9owQ$8PSJieorw!WQ71XMx{h6NB7z_jb{C|3N;!MhiT8!*wP3I^WF;<`=GjW1JCBNzI~CkN~5S{rcLY-_BpamK6_qpSH; zPjqn4fRM)|p~mG8)zyne*DR`GmkQCI62S=E$9LkT)LB;e?qbDH&j!w~`RLUm)#s#d ziliO~+>8BB^K12#vVYxoD3g3Tiz>~wp~^W0LVqNS%RywXqg5jNYW3Ex*xn##-F%=- zG<)H}RJi(~b+S2C0(Ur*x^FjRa*H8nW?@i-yQzbUrs=t4?d=y~XNiG>SDyv<}ZwBqW(SRdC|Nkh!6{!u@Njjn*;9 z^j$5Q;w9Ff@C6|MT9+czdQ})cYlW>C-hl9HNTWg*0J6!t6p2V|J&0V42d!Lfwk7}q z5}U2560kR0b0km%)*eErybh&A>f7<$iyW5;LB?3frb3qhcc=9^{x>5fQ+04g#du_2 zgQq{f_t)}f3~SS%*m@=Yi@cjq?$8FjI<2<=Yi_U=bDodq@NBtnVoJ%aGxoc`SZ#rR zGt;AZRwE+`K^e9)&d`OnZr@G*8j?bHqjfM~o56vpWd21Z|6&y@WC8vRz(cej;Mok+ zo2?;$P_i4X(-68fC9i2E&v`2OIjQ7L*8NCMl)nM0@9;b&=$31Ao2}InK>fB$fc5)J zgkAsv^}bznD4x$;p)dv_MOl6gRy(bN2a44mt#Jw%uWNu%>8tVOEu_AF2{R5ttKzOrt z8z3n0X6pe7K%`Ggpa^t=$T2=MoqZ)zh3*y9OOcT1KLXl5AJ|1-3F_Sd5!3@Ez`~z| z&^%ydq8WGwqrSB08KbS(cA)IEZo&WakTQ%^wRmQ^DW$l&lHNz6wy3R`;3Pcj(-Lik zB+wF%uo4w8WP7ptD>9vo43Fcv(amIduuY~pCR5Q>x(4Q1pP}AZ1zW5`fn?ZgMXJ|C z(-;UqW4LP{TD%(kAsM271k(S{-y+p}q{&SHa&M8`SK|*cyo#K^ z#`CS@ZUjW<-i}a5@7`*caVGcdUEq;|>^q2H=J%25UwB5K=ihAIZZdXS|3T=04qN>j zarSTQqD6?;(r1j8eiK;ev}zwh&98$&N2(?~r@AQ_!<1XCwn(Hw6>YJ$-zNR+qYS5{I?v~3gYXxS!)!eD0LA3p$e@QB9{Zz5$(1jf%Ea)nMULyVmZeU09$*Z z6Slz?Q=jpnUG&Se9NVmx(W>YsLwGg*RwVv5;_vLl-xe?_iG_ghT+UeiS2KOH%XFtT z9n`;#qve8f!S5i#-j4Vjp=`4@sG`S>MA)yMfGjtnh)lj1&*-!)7g;e?bj?}PGqfPb zoyhSE!6LirtX6oD_m9|*_MyAKmT#82- z9s1pgaJ`{J`#w^vi18(0dKb?Fz_!`?8z5TwCL(@Ln(F!pR-tXE*G<++go);t$o?lh z9}0>C00D~4R)qxUHk^sjacPR|BUpt_*@w99Lzwvf3_SgQj|boAZnoM05nLxrfcD~D zgr@A*OEJ;jcqSsD*6oMKp>=5H{|||N3CFbWG*fB`ze|8rXCqsjft#cXlgQ#npx?0ch>5yR(EB z;1AIpjqL02JTA1321N6GBSK3+qTdLUTQDQzbBJK(^~iJ?o*D@?{t>l1`-Xz8uC zAnqzWd%}Iz64`LP%Ui)?#p+l6J-iVB-Yy2eo2&!yhiJAT`y+Uc0E*4l*Di@!h+nVJ z=_Br^cp6<2jL`G7;rV!82BP=yTp`4c14M)#l>pV| zF@&B;mb7QFnBNb`|R@s`Hs_VTKQO?548s}ZX3CX~}ah{)1MUhHiV8~my_Fx30G{c9>WXgMjt$XNqfYCeNVE}$H4a095T1575o2^!Rb1H{DTh2!tX@M( zraA-<)+h}+H)YVSMA9wR5lA{0p*>a^-6R0oLlm2=2;K+aITT1H<9QW`Hd|u>Axm4V zlM(vv%OX`AGr0*s?naF6H(58}4>25poU8GCBe`1v(YYT-=;ifAYR{m_O#pHqBe{Qv zKg7VCXW<#vhqUhnMCbkvp?+!ow~t_a(?$-v&s4n z@2Bw)(Qom*Ey!L6L`%p2WU)Hu8Pv?BCN}}d9Y8zUWc>hth~Y!zEcytea%|$;Z1n?F z=U#%)`_C4sy$6`w1R!^Z*wz#AhZvZ%49`f(9R@__-i**5Pb0Tu?+8Hd-G%le_(KfC zk@HwQOC|TYfau(BA++0L$i33gCIGpsfpL@dPy8VU<~);+K+7wBY~S=PSh&KgaVvQqiNYQ~Ny3IHcv@ z74BcOY+~-TZo~Wc=)&Gct}pNu!EESueEz^*#xk_Ex2ir-rj!BAH<$9uzfwP65z1nbcBw~ zK&pAg8u$&2RiUdvV3Tz(!o*L!)p#xx+^Ycr({KYMK&8JM$+uWP!~aJSawR|jBtSHq ztgrCij%OMW&BXJtAbS=NErGtzK=Gb;CBVPPJM~2}G8%uFe-`qs!}F2k{m#w181YA> zdjmDe?2^pN0I7zJgeQ5jL|7?zhoDr{1*S4|5v15K&m(KY<5#JMyEXSJC3Hu zKMR|7fl_ZF)xYpOg_K5%UuPVcHCk-`LLYvI`Do}rVylt!-^exOV~oQ+Ig|DOb^Vu_ zE<>i)j86H>Z#nmP>ecL` z{s8EO2)Txk0MzSq_}OF?J%>&NA!3@0rv=zHTkirwo!DXxLHzsZp)8!HXjyB_Gll4oyx8fnSPCQ=;N4Ef?%ku?7eg5X@atT20-vYMD z8t^>aV*oZH=fijgV}WF|^+!OM8{aTU*D?;N8rZcs91s8;%)QAv8t;L4nEwepvjoS1 zfM^cd5IX-x4+jJwcj1fV;0pX9hMyqk$9UFD?p1(j4zBw#JGY1M|4xKl4hR4a=H6tz zkM}irnEx+$ZWJ7M0HQhgKZNSHc{m^dxffhb4)%QkH4eaM$hqgAFm#vPpSZclApXe< zuoU5R_5>jJ6v@5x|Do&L1FV|fH@^1FG&4;}5{l@aC`VU9NJ0{lBuS!D(oKcvB1w`s zqjMxgMF{cj%OHdhk|-om2z?1f2qFAF&%5_t=c3;q&&>P2>v^BG_S$RT*WL$53d(E= zc3JkpM8di+$C`3SsXOqn=m4Vt*$p|_O$D=Xq|l1YGeJ`(?x%x+M8c&%fxG9kf~W9L z$MPdu0W_4I3O?rV9MFyYb3hN%c$i4of}gSK+>kY*6(GB5N-e1M1}6msdXhO2OtS2+ zeRfOAubWuv4mu-hzXD|MXW2b*q@c{Z!6M6UOeCy(1lEtYl6_8;tpM4xld3z7BZWC+ zJ`2`cc7GzuE)QPCn!qTDa^(j128|l>!S4DiaPAFyva6|E|7~oS*n0*0h<0?fy&azl zidJy%l9K08{st87rM{g@1a)qbn89J{X){WBns7B4!GIALj=Exa*3+7LO)uSF_ za&l$&BLZZ2K3%arK%?n|kM3lj}8| zVlG?yM2s#)dvIE7k4nmec?9;n+8>nU(qTVwv7QQE!?_7mMSd^P#}+9~BwwkR66rwlNuVk(^`wJxBDPNN zHbakSe!^;%*A^X~FLDj~tBgBR)+_Z^R(29S8L@t#oe6$yIw=3o40YeB5mBUTz<}Ko zlfiI^DYQkJ49X#f2R4<2hpP`Ks*QKxPkhm@ExC46_fpqrdchn#PTpT(h`h|7RIrl3 zXdunoz*1|#L?X86H<_U$>knAJarHP8(hFdVZ@~XL*u|kpHQ%c2E}mKBUWD*1sL7{g z!&Z7ydC&~f^Edkj%4Ik;yj9KVh9eOr{{T85kPhk+2?xUn8tR>i8>=bEGca4oYp^BKisU0foto;PV~E)LI@t^jgL|<0 z=e0E+sw#7dJ5BH{Y>Bo*tUKszf;SK`!E!USYIa0Kk%odXyC=>HYQ4=MV4vHtd$g7m z2(tSrvB0W6mbg@FZvmk7vG)~Es8yV815RqR3K`>Z5#|<;8H6YyoI|WUF4KC893e)3_CVz z19#>1q>+!%hR?{Aw4J1H-YIfQm=2ozB$b3c_c;$JlEMC~E4wi)j96*V%QICHGFNrc z+US9Q_RB?1td(GjXR1V<5jKQHIFEoW!Yb{&!sWQ0*lc!nN?i*U=cj8FErIk83oF8* z-*Fx7NzpzjUfA!m7WNa8c70UIDWNSW-7oGTm4u7XcV{Jr$?y1md2SL76S?e>4yjVi zpg3p^7vcntK;anB29fb6`ffa>>2Za(m+_zdd>7X)E+iGf>p^fn}tV{FS8t=_i<`Q#F z@J?)rPC@Km(B1^kCSrnp&CvGxN<0;EvZ(_!gj@9SkDg&xeSY84K<`L$7u_s z@DbQ*wR9j74vT46cfyQ@lw5K@vE0XSl>ae#+d!?_>h1AF!rawZALP}WJ0O05A(ijR z{uy*Kg(Y5LulIS5omYFVLQ5D@*+F*6RxXrH;SaBHI^|3A+E7hFml$meF%DZIr6lhG z=9oZxBDRK4F+)SIYf!3qmxw4*N3dh} zMD~AcQEOD}MCti~M5zKiV*f3D#K9)iYHhrY`eGy846W^YDq? z;oRT=rX$oJG>Br`8@@?A@hX4HgX@V^Y3*0NDbVcu2@eI*pP+iEBOP320@?{ZhxLo8 z+bkftjF_X2&}jP%NBI-UyA3R`+{cN8BPRHO6NkJibJur$7*d%@_8nl2DSYb{PNcj6 zbw%UVYR^^Z4?`-m$$k{n@nlFqKR0rj`H6j?{hHJau*T_ zbN|Fzn^$k{AUojW%1$a@ko`57Z3>&c!m*UUkym@J!UZs-vW4tF!E#e*LPTvy1rwt3 zU6k$lJr|QX<>kShls})>#%c<>#28!1H?SpAo#cH$9e%?h9ZVxa1?eDVhKA|4SdZtm zH6ErabBWC+SZf2zgugFhEkI`ze9v?c{KO2cniC?TNL|2~-4ka810hc4YR(T+1#*Y! z4_5Vb;!>5`1z?^jo?50Eb0yL@@%S9yB*>EGLd?<-f`U4k*`6MZIhV;?EVkg1?Fg~9o zrD2c`K}m!OV4)}JW&Eg3_d$A&Hcf=^7g+l*Qg}60*smbGtkVOUH>7-8iTj&`((POe z){hrNC1Jl@!KRoDe#D>uN2wEQKhWGWRT474;fYByIN%dbQu`LUTCf^}UY@CvkogF+ zn9GBc@DG3)ZGv*`Y2k=VE^$r9v}mH|)(c>!g3%P!15MC74@^Nb9W*0iWAz9#H1TOR z)>W65xZaQkfW^LYm4ubg9j1Lp1^!7t_{!z7{a5`-)qR9>50Jv8V53#Hkcfs8=K@&m zU`7p>OYV5f-RD!*D1jm5O#r10)YQ#B_ejb|<<*(KU26kQb+~QM&+|9dlbybDK8H`p!~eNHda%R2k5qtg`crA$6rM9 zf58$HSWd*&$7(aQikm>}n%CBN-=Q*>m~4VQuqFBgVynPr6RbwW1Z$h2RWl(Xiu4tz z&Yk;o@Gs)5U_QiKSZ{vcp+N4w;})y>b>dQ$+V7yfDNZM%?oI~ZVLb-(56TLDM=r9Nz}H+CPlBdgMTNaM#-@afvnd3^hfO)ViQ@F_>dYrx8IZ9rQFqe`+L`o}9)rU1mgo!G4~A<&nF?azF672U6Z~ ztNVC{*o#Qm1Lt8~@RV=v224FQxtg$2m6G_0D@RK^-KUjf zeYw?FDVHjjZBvy`;V55uJ;7MZokAq6auwE7-}zj*1D)>=lKzS3v0?S=SM7f6+ zo%6aLmRJ9hGcPRvU{wJ$l+FAXoZqmNe?3@Z8bw5gS13S~6ITb=pytoXUOyJtz;i zag~JIgXmlLgzc@ZUSNNe>Vl$! zwX6e)gdO}JtPkGG>R<)PUb;#hycS0a^~mfDT3Gh|M8fQCST+7Gc84{I_6!~V3A=cY z|8Y)Cp^_$oK9=}-lvo~gqstQp!#Zot~N+^fosRnOam z;}Y-daYCqC?Q2cb;Q1?x-9fpjzDmSY-!Vf+$JP)JT3zZyx&SPN7_JYMgzMuBCin4S zK%1d(F3}O$GZYk{XWH>E6^!TaaiA|s{lONi_B0~lTDcwTvFo#DC@4U7l9>ak;5i&A z3?Op`sCkIi%1uPV?Dw&r9#`sG#1q>UAbX-^@5GUUG9LyVEc*>2$}SI%+`_9B(|!NR z)p09)FVeN_+@1hFpZIUt`2_5HgD-hv*0S@3EWJw%q7HlUF>%)nwe>m}s__wO`W_6m z+6swU2UjzLk$;dGrRm^MGpf>&*IGx;!@pS_8BeuQfQ6AT&;R**BarmZV7AGpiG*G8 zDc1jP%-UTjK=x}lsd0thFav(yQN?q$iqK!iVvhTO-YjLD-G@0juI)`c{oTB&REZj`M6 z*)uKs1so~#BJ&E+*|KL43A5K>-AvtW500`GAp0p4Q^B7&Qn-@L6c}UKD~W{JHNR!@ z&s6GO8)Yj%_FeR3DmV&93TZO`3+7pNDbX;yJ62<5e;8#eK=#YTQo&U?Qh0*Q)nJun zpG-vA%-yxMJ`4Y$?9E33G?dLmVE#@3Ysmiq>@_{94H`95×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

Vn2NZcFw$0%FnF*>x6-9#9yL{@nt|LEiQPK^E< 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