From 02bbc51df3a625baff86f5b51a714727708339da Mon Sep 17 00:00:00 2001 From: liefooga Date: Tue, 17 Apr 2007 15:01:19 +0000 Subject: [PATCH] last tag for MOEO old release git-svn-id: svn://scm.gforge.inria.fr/svnroot/paradiseo@255 331e1502-861f-0410-8da2-ba01fb791d7f --- .../paradiseo-moeo-0.2/paradiseo-moeo/AUTHORS | 4 + .../paradiseo-moeo/ChangeLog | 0 .../paradiseo-moeo/Makefile.am | 16 + tags/paradiseo-moeo-0.2/paradiseo-moeo/NEWS | 7 + tags/paradiseo-moeo-0.2/paradiseo-moeo/README | 60 ++ .../paradiseo-moeo/autogen.sh | 148 +++++ .../paradiseo-moeo/configure.in | 43 ++ .../paradiseo-moeo/docs/Makefile.am | 5 + .../docs/html/README-source.html | 30 + .../paradiseo-moeo/docs/html/annotated.html | 73 +++ .../paradiseo-moeo/docs/html/classes.html | 52 ++ ...dditiveBinaryEpsilonIndicator-members.html | 47 ++ ...assmoeoAdditiveBinaryEpsilonIndicator.html | 173 +++++ ...lassmoeoAdditiveBinaryEpsilonIndicator.png | Bin 0 -> 1487 bytes .../docs/html/classmoeoArchive-members.html | 74 +++ .../docs/html/classmoeoArchive.html | 212 ++++++ .../docs/html/classmoeoArchive.png | Bin 0 -> 1083 bytes ...eoArchiveFitnessSavingUpdater-members.html | 48 ++ .../classmoeoArchiveFitnessSavingUpdater.html | 134 ++++ .../classmoeoArchiveFitnessSavingUpdater.png | Bin 0 -> 922 bytes .../html/classmoeoArchiveUpdater-members.html | 46 ++ .../docs/html/classmoeoArchiveUpdater.html | 119 ++++ .../docs/html/classmoeoArchiveUpdater.png | Bin 0 -> 765 bytes .../paradiseo-moeo/docs/html/classmoeoBM.html | 67 ++ .../paradiseo-moeo/docs/html/classmoeoBM.png | Bin 0 -> 3649 bytes ...oeoBinaryHypervolumeIndicator-members.html | 50 ++ .../classmoeoBinaryHypervolumeIndicator.html | 342 ++++++++++ .../classmoeoBinaryHypervolumeIndicator.png | Bin 0 -> 1432 bytes ...moeoBinaryMetricSavingUpdater-members.html | 51 ++ .../classmoeoBinaryMetricSavingUpdater.html | 148 +++++ .../classmoeoBinaryMetricSavingUpdater.png | Bin 0 -> 877 bytes ...assmoeoBinaryQualityIndicator-members.html | 44 ++ .../html/classmoeoBinaryQualityIndicator.html | 134 ++++ .../html/classmoeoBinaryQualityIndicator.png | Bin 0 -> 1942 bytes ...naryQualityIndicator_1_1Range-members.html | 44 ++ ...ssmoeoBinaryQualityIndicator_1_1Range.html | 81 +++ .../html/classmoeoCombinedMOLS-members.html | 41 ++ .../docs/html/classmoeoCombinedMOLS.html | 202 ++++++ .../docs/html/classmoeoCombinedMOLS.png | Bin 0 -> 1403 bytes .../classmoeoContributionMetric-members.html | 41 ++ .../html/classmoeoContributionMetric.html | 257 ++++++++ .../docs/html/classmoeoContributionMetric.png | Bin 0 -> 1734 bytes ...eoDisctinctElitistReplacement-members.html | 40 ++ .../classmoeoDisctinctElitistReplacement.html | 200 ++++++ .../classmoeoDisctinctElitistReplacement.png | Bin 0 -> 1508 bytes .../classmoeoElitistReplacement-members.html | 39 ++ .../html/classmoeoElitistReplacement.html | 149 +++++ .../docs/html/classmoeoElitistReplacement.png | Bin 0 -> 1458 bytes .../html/classmoeoEntropyMetric-members.html | 46 ++ .../docs/html/classmoeoEntropyMetric.html | 144 +++++ .../docs/html/classmoeoEntropyMetric.png | Bin 0 -> 1724 bytes .../html/classmoeoHybridMOLS-members.html | 48 ++ .../docs/html/classmoeoHybridMOLS.html | 141 ++++ .../docs/html/classmoeoHybridMOLS.png | Bin 0 -> 757 bytes .../docs/html/classmoeoIBEA-members.html | 65 ++ .../docs/html/classmoeoIBEA.html | 111 ++++ .../docs/html/classmoeoIBEA.png | Bin 0 -> 2306 bytes .../html/classmoeoIBEAAvgSorting-members.html | 69 ++ .../docs/html/classmoeoIBEAAvgSorting.html | 195 ++++++ .../docs/html/classmoeoIBEAAvgSorting.png | Bin 0 -> 2615 bytes .../html/classmoeoIBEASorting-members.html | 69 ++ .../docs/html/classmoeoIBEASorting.html | 195 ++++++ .../docs/html/classmoeoIBEASorting.png | Bin 0 -> 2294 bytes .../classmoeoIBEAStochSorting-members.html | 69 ++ .../docs/html/classmoeoIBEAStochSorting.html | 183 ++++++ .../docs/html/classmoeoIBEAStochSorting.png | Bin 0 -> 2623 bytes .../docs/html/classmoeoMOLS.html | 62 ++ .../docs/html/classmoeoMOLS.png | Bin 0 -> 1421 bytes .../docs/html/classmoeoMetric.html | 63 ++ .../docs/html/classmoeoMetric.png | Bin 0 -> 5840 bytes .../html/classmoeoNDSorting__II-members.html | 68 ++ .../docs/html/classmoeoNDSorting__II.html | 86 +++ .../docs/html/classmoeoNDSorting__II.png | Bin 0 -> 2237 bytes ...Sorting__II_1_1compare__nodes-members.html | 37 ++ ...ssmoeoNDSorting__II_1_1compare__nodes.html | 59 ++ .../docs/html/classmoeoNSGA__II-members.html | 49 ++ .../docs/html/classmoeoNSGA__II.html | 152 +++++ .../docs/html/classmoeoNSGA__II.png | Bin 0 -> 878 bytes .../classmoeoParetoEuclidDist-members.html | 37 ++ .../docs/html/classmoeoParetoEuclidDist.html | 57 ++ .../docs/html/classmoeoParetoEuclidDist.png | Bin 0 -> 734 bytes .../html/classmoeoParetoPhenDist-members.html | 36 ++ .../docs/html/classmoeoParetoPhenDist.html | 53 ++ .../docs/html/classmoeoParetoPhenDist.png | Bin 0 -> 735 bytes .../html/classmoeoParetoSharing-members.html | 69 ++ .../docs/html/classmoeoParetoSharing.html | 87 +++ .../docs/html/classmoeoParetoSharing.png | Bin 0 -> 1683 bytes ...smoeoParetoSharing_1_1dMatrix-members.html | 39 ++ .../classmoeoParetoSharing_1_1dMatrix.html | 61 ++ .../docs/html/classmoeoReplacement.html | 62 ++ .../docs/html/classmoeoReplacement.png | Bin 0 -> 2057 bytes ...ssmoeoSelectOneFromPopAndArch-members.html | 49 ++ .../classmoeoSelectOneFromPopAndArch.html | 200 ++++++ .../html/classmoeoSelectOneFromPopAndArch.png | Bin 0 -> 985 bytes .../docs/html/classmoeoSolutionUM.html | 62 ++ .../docs/html/classmoeoSolutionUM.png | Bin 0 -> 1489 bytes .../html/classmoeoSolutionVsSolutionBM.html | 62 ++ .../html/classmoeoSolutionVsSolutionBM.png | Bin 0 -> 1664 bytes .../paradiseo-moeo/docs/html/classmoeoUM.html | 61 ++ .../paradiseo-moeo/docs/html/classmoeoUM.png | Bin 0 -> 830 bytes .../docs/html/classmoeoVectorUM.html | 62 ++ .../docs/html/classmoeoVectorUM.png | Bin 0 -> 1761 bytes .../html/classmoeoVectorVsSolutionBM.html | 62 ++ .../docs/html/classmoeoVectorVsSolutionBM.png | Bin 0 -> 1770 bytes .../docs/html/classmoeoVectorVsVectorBM.html | 62 ++ .../docs/html/classmoeoVectorVsVectorBM.png | Bin 0 -> 1711 bytes .../paradiseo-moeo/docs/html/doxygen.css | 358 +++++++++++ .../paradiseo-moeo/docs/html/doxygen.png | Bin 0 -> 1281 bytes .../paradiseo-moeo/docs/html/files.html | 52 ++ .../paradiseo-moeo/docs/html/ftv2blank.png | Bin 0 -> 174 bytes .../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 .../paradiseo-moeo/docs/html/ftv2link.png | Bin 0 -> 358 bytes .../docs/html/ftv2mlastnode.png | Bin 0 -> 160 bytes .../paradiseo-moeo/docs/html/ftv2mnode.png | Bin 0 -> 194 bytes .../paradiseo-moeo/docs/html/ftv2node.png | Bin 0 -> 235 bytes .../docs/html/ftv2plastnode.png | Bin 0 -> 165 bytes .../paradiseo-moeo/docs/html/ftv2pnode.png | Bin 0 -> 200 bytes .../paradiseo-moeo/docs/html/ftv2vertline.png | Bin 0 -> 229 bytes .../paradiseo-moeo/docs/html/functions.html | 335 ++++++++++ .../docs/html/functions_func.html | 216 +++++++ .../docs/html/functions_type.html | 58 ++ .../docs/html/functions_vars.html | 194 ++++++ .../paradiseo-moeo/docs/html/hierarchy.html | 205 ++++++ .../paradiseo-moeo/docs/html/index.html | 8 + .../docs/html/index_8h-source.html | 35 + .../paradiseo-moeo/docs/html/installdox | 117 ++++ .../paradiseo-moeo/docs/html/main.html | 38 ++ .../docs/html/make__algo__MOEO_8h-source.html | 278 ++++++++ ...ArchiveFitnessSavingUpdater_8h-source.html | 85 +++ .../html/moeoArchiveUpdater_8h-source.html | 71 +++ .../docs/html/moeoArchive_8h-source.html | 112 ++++ ...eoBinaryMetricSavingUpdater_8h-source.html | 100 +++ .../moeoBinaryQualityIndicator_8h-source.html | 350 ++++++++++ .../docs/html/moeoCombinedMOLS_8h-source.html | 78 +++ .../moeoContributionMetric_8h-source.html | 116 ++++ .../html/moeoEntropyMetric_8h-source.html | 194 ++++++ .../docs/html/moeoHybridMOLS_8h-source.html | 84 +++ .../docs/html/moeoIBEA_8h-source.html | 427 +++++++++++++ .../docs/html/moeoMOLS_8h-source.html | 52 ++ .../docs/html/moeoMetric_8h-source.html | 110 ++++ .../docs/html/moeoNDSorting_8h-source.html | 121 ++++ .../docs/html/moeoNSGA__II_8h-source.html | 115 ++++ .../html/moeoParetoPhenDist_8h-source.html | 78 +++ .../html/moeoParetoSharing_8h-source.html | 185 ++++++ .../docs/html/moeoReplacement_8h-source.html | 162 +++++ ...moeoSelectOneFromPopAndArch_8h-source.html | 94 +++ .../docs/html/moeo_8h-source.html | 59 ++ .../paradiseo-moeo/docs/html/pages.html | 33 + .../paradiseo-moeo/docs/html/search.idx | Bin 0 -> 353919 bytes .../paradiseo-moeo/docs/html/search.php | 381 +++++++++++ .../paradiseo-moeo/docs/html/tab_b.gif | Bin 0 -> 35 bytes .../paradiseo-moeo/docs/html/tab_l.gif | Bin 0 -> 706 bytes .../paradiseo-moeo/docs/html/tab_r.gif | Bin 0 -> 2585 bytes .../paradiseo-moeo/docs/html/tabs.css | 102 +++ .../paradiseo-moeo/docs/html/tree.html | 306 +++++++++ .../paradiseo-moeo/docs/html/webpages.html | 31 + .../paradiseo-moeo/docs/index.h | 53 ++ .../paradiseo-moeo/docs/latex/FreeSans.ttf | Bin 0 -> 22932 bytes .../paradiseo-moeo/docs/latex/Helvetica.ttf | Bin 0 -> 32760 bytes .../paradiseo-moeo/docs/latex/Makefile | 39 ++ .../paradiseo-moeo/docs/latex/annotated.tex | 39 ++ .../classeoAdditiveBinaryEpsilonIndicator.eps | 209 ++++++ .../classeoAdditiveBinaryEpsilonIndicator.tex | 83 +++ .../classeoBinaryHypervolumeIndicator.eps | 209 ++++++ .../classeoBinaryHypervolumeIndicator.tex | 149 +++++ .../latex/classeoBinaryQualityIndicator.eps | 215 +++++++ .../latex/classeoBinaryQualityIndicator.tex | 69 ++ ...classeoBinaryQualityIndicator_1_1Range.tex | 51 ++ .../paradiseo-moeo/docs/latex/classeoIBEA.eps | 233 +++++++ .../paradiseo-moeo/docs/latex/classeoIBEA.tex | 60 ++ .../docs/latex/classeoIBEAAvgSorting.eps | 233 +++++++ .../docs/latex/classeoIBEAAvgSorting.tex | 99 +++ .../docs/latex/classeoIBEASorting.eps | 233 +++++++ .../docs/latex/classeoIBEASorting.tex | 99 +++ .../docs/latex/classeoIBEAStochSorting.eps | 233 +++++++ .../docs/latex/classeoIBEAStochSorting.tex | 97 +++ .../docs/latex/classeoParetoEuclidDist.eps | 197 ++++++ .../docs/latex/classeoParetoEuclidDist.tex | 28 + .../docs/latex/classeoParetoPhenDist.eps | 197 ++++++ .../docs/latex/classeoParetoPhenDist.tex | 22 + .../docs/latex/classeoParetoSharing.eps | 221 +++++++ .../docs/latex/classeoParetoSharing.tex | 60 ++ .../latex/classeoParetoSharing_1_1dMatrix.tex | 31 + ...lassmoeoAdditiveBinaryEpsilonIndicator.eps | 209 ++++++ ...lassmoeoAdditiveBinaryEpsilonIndicator.tex | 83 +++ .../docs/latex/classmoeoArchive.eps | 215 +++++++ .../docs/latex/classmoeoArchive.tex | 111 ++++ .../classmoeoArchiveFitnessSavingUpdater.eps | 209 ++++++ .../classmoeoArchiveFitnessSavingUpdater.tex | 67 ++ .../docs/latex/classmoeoArchiveUpdater.eps | 209 ++++++ .../docs/latex/classmoeoArchiveUpdater.tex | 61 ++ .../paradiseo-moeo/docs/latex/classmoeoBM.eps | 247 +++++++ .../paradiseo-moeo/docs/latex/classmoeoBM.tex | 27 + .../classmoeoBinaryHypervolumeIndicator.eps | 209 ++++++ .../classmoeoBinaryHypervolumeIndicator.tex | 147 +++++ .../classmoeoBinaryMetricSavingUpdater.eps | 209 ++++++ .../classmoeoBinaryMetricSavingUpdater.tex | 79 +++ .../latex/classmoeoBinaryQualityIndicator.eps | 215 +++++++ .../latex/classmoeoBinaryQualityIndicator.tex | 71 +++ ...assmoeoBinaryQualityIndicator_1_1Range.tex | 51 ++ .../docs/latex/classmoeoCombinedMOLS.eps | 209 ++++++ .../docs/latex/classmoeoCombinedMOLS.tex | 101 +++ .../latex/classmoeoContributionMetric.eps | 227 +++++++ .../latex/classmoeoContributionMetric.tex | 116 ++++ .../classmoeoDisctinctElitistReplacement.eps | 215 +++++++ .../classmoeoDisctinctElitistReplacement.tex | 101 +++ .../latex/classmoeoElitistReplacement.eps | 215 +++++++ .../latex/classmoeoElitistReplacement.tex | 76 +++ .../docs/latex/classmoeoEntropyMetric.eps | 227 +++++++ .../docs/latex/classmoeoEntropyMetric.tex | 89 +++ .../docs/latex/classmoeoHybridMOLS.eps | 209 ++++++ .../docs/latex/classmoeoHybridMOLS.tex | 67 ++ .../docs/latex/classmoeoIBEA.eps | 233 +++++++ .../docs/latex/classmoeoIBEA.tex | 60 ++ .../docs/latex/classmoeoIBEAAvgSorting.eps | 233 +++++++ .../docs/latex/classmoeoIBEAAvgSorting.tex | 103 +++ .../docs/latex/classmoeoIBEASorting.eps | 233 +++++++ .../docs/latex/classmoeoIBEASorting.tex | 103 +++ .../docs/latex/classmoeoIBEAStochSorting.eps | 233 +++++++ .../docs/latex/classmoeoIBEAStochSorting.tex | 101 +++ .../docs/latex/classmoeoMOLS.eps | 209 ++++++ .../docs/latex/classmoeoMOLS.tex | 29 + .../docs/latex/classmoeoMetric.eps | 236 +++++++ .../docs/latex/classmoeoMetric.tex | 25 + .../docs/latex/classmoeoNDSorting__II.eps | 233 +++++++ .../docs/latex/classmoeoNDSorting__II.tex | 51 ++ ...assmoeoNDSorting__II_1_1compare__nodes.tex | 27 + .../docs/latex/classmoeoNSGA__II.eps | 209 ++++++ .../docs/latex/classmoeoNSGA__II.tex | 83 +++ .../docs/latex/classmoeoParetoEuclidDist.eps | 197 ++++++ .../docs/latex/classmoeoParetoEuclidDist.tex | 28 + .../docs/latex/classmoeoParetoPhenDist.eps | 197 ++++++ .../docs/latex/classmoeoParetoPhenDist.tex | 22 + .../docs/latex/classmoeoParetoSharing.eps | 221 +++++++ .../docs/latex/classmoeoParetoSharing.tex | 60 ++ .../classmoeoParetoSharing_1_1dMatrix.tex | 31 + .../docs/latex/classmoeoReplacement.eps | 221 +++++++ .../docs/latex/classmoeoReplacement.tex | 27 + .../classmoeoSelectOneFromPopAndArch.eps | 209 ++++++ .../classmoeoSelectOneFromPopAndArch.tex | 89 +++ .../docs/latex/classmoeoSolutionUM.eps | 221 +++++++ .../docs/latex/classmoeoSolutionUM.tex | 27 + .../latex/classmoeoSolutionVsSolutionBM.eps | 221 +++++++ .../latex/classmoeoSolutionVsSolutionBM.tex | 27 + .../paradiseo-moeo/docs/latex/classmoeoUM.eps | 215 +++++++ .../paradiseo-moeo/docs/latex/classmoeoUM.tex | 27 + .../docs/latex/classmoeoVectorUM.eps | 221 +++++++ .../docs/latex/classmoeoVectorUM.tex | 27 + .../latex/classmoeoVectorVsSolutionBM.eps | 221 +++++++ .../latex/classmoeoVectorVsSolutionBM.tex | 27 + .../docs/latex/classmoeoVectorVsVectorBM.eps | 221 +++++++ .../docs/latex/classmoeoVectorVsVectorBM.tex | 27 + .../paradiseo-moeo/docs/latex/doxygen.sty | 78 +++ .../paradiseo-moeo/docs/latex/hierarchy.tex | 138 ++++ .../paradiseo-moeo/docs/latex/main.tex | 5 + .../paradiseo-moeo/docs/latex/pages.tex | 5 + .../paradiseo-moeo/docs/latex/refman.tex | 74 +++ .../paradiseo-moeo/docs/latex/webpages.tex | 3 + .../man3/eoAdditiveBinaryEpsilonIndicator.3 | 91 +++ .../man/man3/eoBinaryHypervolumeIndicator.3 | 171 +++++ .../docs/man/man3/eoBinaryQualityIndicator.3 | 81 +++ .../man/man3/eoBinaryQualityIndicator_Range.3 | 55 ++ .../paradiseo-moeo/docs/man/man3/eoIBEA.3 | 62 ++ .../docs/man/man3/eoIBEAAvgSorting.3 | 101 +++ .../docs/man/man3/eoIBEASorting.3 | 101 +++ .../docs/man/man3/eoIBEAStochSorting.3 | 97 +++ .../docs/man/man3/eoParetoEuclidDist.3 | 28 + .../docs/man/man3/eoParetoPhenDist.3 | 21 + .../docs/man/man3/eoParetoSharing.3 | 64 ++ .../docs/man/man3/eoParetoSharing_dMatrix.3 | 36 ++ .../man3/moeoAdditiveBinaryEpsilonIndicator.3 | 91 +++ .../docs/man/man3/moeoArchive.3 | 111 ++++ .../man3/moeoArchiveFitnessSavingUpdater.3 | 75 +++ .../docs/man/man3/moeoArchiveUpdater.3 | 65 ++ .../paradiseo-moeo/docs/man/man3/moeoBM.3 | 27 + .../man/man3/moeoBinaryHypervolumeIndicator.3 | 169 +++++ .../man/man3/moeoBinaryMetricSavingUpdater.3 | 91 +++ .../man/man3/moeoBinaryQualityIndicator.3 | 83 +++ .../man3/moeoBinaryQualityIndicator_Range.3 | 55 ++ .../docs/man/man3/moeoCombinedMOLS.3 | 107 ++++ .../docs/man/man3/moeoContributionMetric.3 | 125 ++++ .../man3/moeoDisctinctElitistReplacement.3 | 105 +++ .../docs/man/man3/moeoElitistReplacement.3 | 77 +++ .../docs/man/man3/moeoEntropyMetric.3 | 93 +++ .../docs/man/man3/moeoHybridMOLS.3 | 77 +++ .../paradiseo-moeo/docs/man/man3/moeoIBEA.3 | 62 ++ .../docs/man/man3/moeoIBEAAvgSorting.3 | 105 +++ .../docs/man/man3/moeoIBEASorting.3 | 105 +++ .../docs/man/man3/moeoIBEAStochSorting.3 | 101 +++ .../paradiseo-moeo/docs/man/man3/moeoMOLS.3 | 29 + .../paradiseo-moeo/docs/man/man3/moeoMetric.3 | 25 + .../docs/man/man3/moeoNDSorting_II.3 | 60 ++ .../man/man3/moeoNDSorting_II_compare_nodes.3 | 30 + .../docs/man/man3/moeoNSGA_II.3 | 95 +++ .../docs/man/man3/moeoParetoEuclidDist.3 | 28 + .../docs/man/man3/moeoParetoPhenDist.3 | 21 + .../docs/man/man3/moeoParetoSharing.3 | 64 ++ .../docs/man/man3/moeoParetoSharing_dMatrix.3 | 36 ++ .../docs/man/man3/moeoReplacement.3 | 27 + .../man/man3/moeoSelectOneFromPopAndArch.3 | 105 +++ .../docs/man/man3/moeoSolutionUM.3 | 25 + .../docs/man/man3/moeoSolutionVsSolutionBM.3 | 25 + .../paradiseo-moeo/docs/man/man3/moeoUM.3 | 25 + .../docs/man/man3/moeoVectorUM.3 | 25 + .../docs/man/man3/moeoVectorVsSolutionBM.3 | 25 + .../docs/man/man3/moeoVectorVsVectorBM.3 | 25 + .../paradiseo-moeo/docs/man/man3/webpages.3 | 15 + .../paradiseo-moeo/docs/moeo.doxyfile | 237 +++++++ .../paradiseo-moeo/src/Makefile.am | 1 + .../metric/moeoBinaryMetricSavingUpdater.h | 94 +++ .../src/metric/moeoContributionMetric.h | 116 ++++ .../src/metric/moeoEntropyMetric.h | 179 ++++++ .../paradiseo-moeo/src/metric/moeoMetric.h | 106 +++ .../paradiseo-moeo/src/moeo | 18 + .../paradiseo-moeo/src/moeo.h | 31 + .../paradiseo-moeo/src/moeoArchive.h | 106 +++ .../src/moeoArchiveFitnessSavingUpdater.h | 73 +++ .../paradiseo-moeo/src/moeoArchiveUpdater.h | 56 ++ .../paradiseo-moeo/src/moeoCombinedMOLS.h | 71 +++ .../paradiseo-moeo/src/moeoHybridMOLS.h | 74 +++ .../paradiseo-moeo/src/moeoMOLS.h | 28 + .../paradiseo-moeo/src/moeoNDSorting.h | 108 ++++ .../paradiseo-moeo/src/moeoNSGA_II.h | 106 +++ .../paradiseo-moeo/src/moeoReplacement.h | 169 +++++ .../src/moeoSelectOneFromPopAndArch.h | 93 +++ .../paradiseo-moeo/src/old/README | 2 + .../paradiseo-moeo/src/old/make_algo_MOEO.h | 250 ++++++++ .../src/old/moeoBinaryQualityIndicator.h | 409 ++++++++++++ .../paradiseo-moeo/src/old/moeoIBEA.h | 476 ++++++++++++++ .../src/old/moeoParetoPhenDist.h | 50 ++ .../src/old/moeoParetoSharing.h | 157 +++++ .../paradiseo-moeo/tutorials/Makefile.am | 1 + .../tutorials/lesson1/FlowShop.h | 137 ++++ .../lesson1/FlowShopBenchmarkParser.h | 182 ++++++ .../tutorials/lesson1/FlowShopEA | Bin 0 -> 3033752 bytes .../tutorials/lesson1/FlowShopEA.cpp | 158 +++++ .../tutorials/lesson1/FlowShopEA.param | 51 ++ .../tutorials/lesson1/FlowShopEval.h | 146 +++++ .../tutorials/lesson1/FlowShopFitness.h | 24 + .../tutorials/lesson1/FlowShopInit.h | 68 ++ .../lesson1/FlowShopOpCrossoverQuad.h | 138 ++++ .../lesson1/FlowShopOpMutationExchange.h | 87 +++ .../lesson1/FlowShopOpMutationShift.h | 97 +++ .../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 | 65 ++ .../lesson1/make_genotype_FlowShop.h | 58 ++ .../tutorials/lesson1/make_op_FlowShop.h | 131 ++++ .../tutorials/lesson2/Makefile.am | 9 + .../paradiseo-moeo/tutorials/lesson2/Sch1 | Bin 0 -> 957335 bytes .../paradiseo-moeo/tutorials/lesson2/Sch1.cpp | 109 ++++ 366 files changed, 34595 insertions(+) create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/AUTHORS create mode 100755 tags/paradiseo-moeo-0.2/paradiseo-moeo/ChangeLog create mode 100755 tags/paradiseo-moeo-0.2/paradiseo-moeo/Makefile.am create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/NEWS create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/README create mode 100755 tags/paradiseo-moeo-0.2/paradiseo-moeo/autogen.sh create mode 100755 tags/paradiseo-moeo-0.2/paradiseo-moeo/configure.in create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/Makefile.am create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/README-source.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/annotated.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classes.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoAdditiveBinaryEpsilonIndicator-members.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoAdditiveBinaryEpsilonIndicator.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoAdditiveBinaryEpsilonIndicator.png create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoArchive-members.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoArchive.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoArchive.png create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoArchiveFitnessSavingUpdater-members.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoArchiveFitnessSavingUpdater.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoArchiveFitnessSavingUpdater.png create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoArchiveUpdater-members.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoArchiveUpdater.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoArchiveUpdater.png create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoBM.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoBM.png create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoBinaryHypervolumeIndicator-members.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoBinaryHypervolumeIndicator.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoBinaryHypervolumeIndicator.png create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoBinaryMetricSavingUpdater-members.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoBinaryMetricSavingUpdater.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoBinaryMetricSavingUpdater.png create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoBinaryQualityIndicator-members.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoBinaryQualityIndicator.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoBinaryQualityIndicator.png create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoBinaryQualityIndicator_1_1Range-members.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoBinaryQualityIndicator_1_1Range.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoCombinedMOLS-members.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoCombinedMOLS.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoCombinedMOLS.png create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoContributionMetric-members.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoContributionMetric.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoContributionMetric.png create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoDisctinctElitistReplacement-members.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoDisctinctElitistReplacement.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoDisctinctElitistReplacement.png create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoElitistReplacement-members.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoElitistReplacement.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoElitistReplacement.png create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoEntropyMetric-members.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoEntropyMetric.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoEntropyMetric.png create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoHybridMOLS-members.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoHybridMOLS.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoHybridMOLS.png create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoIBEA-members.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoIBEA.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoIBEA.png create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoIBEAAvgSorting-members.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoIBEAAvgSorting.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoIBEAAvgSorting.png create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoIBEASorting-members.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoIBEASorting.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoIBEASorting.png create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoIBEAStochSorting-members.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoIBEAStochSorting.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoIBEAStochSorting.png create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoMOLS.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoMOLS.png create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoMetric.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoMetric.png create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoNDSorting__II-members.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoNDSorting__II.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoNDSorting__II.png create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoNDSorting__II_1_1compare__nodes-members.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoNDSorting__II_1_1compare__nodes.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoNSGA__II-members.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoNSGA__II.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoNSGA__II.png create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoParetoEuclidDist-members.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoParetoEuclidDist.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoParetoEuclidDist.png create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoParetoPhenDist-members.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoParetoPhenDist.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoParetoPhenDist.png create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoParetoSharing-members.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoParetoSharing.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoParetoSharing.png create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoParetoSharing_1_1dMatrix-members.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoParetoSharing_1_1dMatrix.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoReplacement.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoReplacement.png create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoSelectOneFromPopAndArch-members.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoSelectOneFromPopAndArch.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoSelectOneFromPopAndArch.png create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoSolutionUM.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoSolutionUM.png create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoSolutionVsSolutionBM.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoSolutionVsSolutionBM.png create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoUM.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoUM.png create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoVectorUM.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoVectorUM.png create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoVectorVsSolutionBM.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoVectorVsSolutionBM.png create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoVectorVsVectorBM.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoVectorVsVectorBM.png create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/doxygen.css create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/doxygen.png create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/files.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/ftv2blank.png create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/ftv2doc.png create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/ftv2folderclosed.png create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/ftv2folderopen.png create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/ftv2lastnode.png create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/ftv2link.png create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/ftv2mlastnode.png create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/ftv2mnode.png create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/ftv2node.png create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/ftv2plastnode.png create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/ftv2pnode.png create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/ftv2vertline.png create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/functions.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/functions_func.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/functions_type.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/functions_vars.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/hierarchy.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/index.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/index_8h-source.html create mode 100755 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/installdox create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/main.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/make__algo__MOEO_8h-source.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoArchiveFitnessSavingUpdater_8h-source.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoArchiveUpdater_8h-source.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoArchive_8h-source.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoBinaryMetricSavingUpdater_8h-source.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoBinaryQualityIndicator_8h-source.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoCombinedMOLS_8h-source.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoContributionMetric_8h-source.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoEntropyMetric_8h-source.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoHybridMOLS_8h-source.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoIBEA_8h-source.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoMOLS_8h-source.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoMetric_8h-source.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoNDSorting_8h-source.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoNSGA__II_8h-source.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoParetoPhenDist_8h-source.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoParetoSharing_8h-source.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoReplacement_8h-source.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoSelectOneFromPopAndArch_8h-source.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeo_8h-source.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/pages.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/search.idx create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/search.php create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/tab_b.gif create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/tab_l.gif create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/tab_r.gif create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/tabs.css create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/tree.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/webpages.html create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/index.h create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/FreeSans.ttf create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/Helvetica.ttf create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/Makefile create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/annotated.tex create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoAdditiveBinaryEpsilonIndicator.eps create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoAdditiveBinaryEpsilonIndicator.tex create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoBinaryHypervolumeIndicator.eps create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoBinaryHypervolumeIndicator.tex create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoBinaryQualityIndicator.eps create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoBinaryQualityIndicator.tex create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoBinaryQualityIndicator_1_1Range.tex create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoIBEA.eps create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoIBEA.tex create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoIBEAAvgSorting.eps create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoIBEAAvgSorting.tex create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoIBEASorting.eps create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoIBEASorting.tex create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoIBEAStochSorting.eps create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoIBEAStochSorting.tex create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoParetoEuclidDist.eps create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoParetoEuclidDist.tex create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoParetoPhenDist.eps create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoParetoPhenDist.tex create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoParetoSharing.eps create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoParetoSharing.tex create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoParetoSharing_1_1dMatrix.tex create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoAdditiveBinaryEpsilonIndicator.eps create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoAdditiveBinaryEpsilonIndicator.tex create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoArchive.eps create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoArchive.tex create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoArchiveFitnessSavingUpdater.eps create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoArchiveFitnessSavingUpdater.tex create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoArchiveUpdater.eps create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoArchiveUpdater.tex create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoBM.eps create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoBM.tex create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoBinaryHypervolumeIndicator.eps create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoBinaryHypervolumeIndicator.tex create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoBinaryMetricSavingUpdater.eps create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoBinaryMetricSavingUpdater.tex create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoBinaryQualityIndicator.eps create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoBinaryQualityIndicator.tex create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoBinaryQualityIndicator_1_1Range.tex create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoCombinedMOLS.eps create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoCombinedMOLS.tex create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoContributionMetric.eps create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoContributionMetric.tex create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoDisctinctElitistReplacement.eps create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoDisctinctElitistReplacement.tex create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoElitistReplacement.eps create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoElitistReplacement.tex create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoEntropyMetric.eps create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoEntropyMetric.tex create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoHybridMOLS.eps create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoHybridMOLS.tex create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoIBEA.eps create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoIBEA.tex create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoIBEAAvgSorting.eps create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoIBEAAvgSorting.tex create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoIBEASorting.eps create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoIBEASorting.tex create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoIBEAStochSorting.eps create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoIBEAStochSorting.tex create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoMOLS.eps create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoMOLS.tex create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoMetric.eps create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoMetric.tex create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoNDSorting__II.eps create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoNDSorting__II.tex create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoNDSorting__II_1_1compare__nodes.tex create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoNSGA__II.eps create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoNSGA__II.tex create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoParetoEuclidDist.eps create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoParetoEuclidDist.tex create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoParetoPhenDist.eps create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoParetoPhenDist.tex create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoParetoSharing.eps create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoParetoSharing.tex create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoParetoSharing_1_1dMatrix.tex create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoReplacement.eps create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoReplacement.tex create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoSelectOneFromPopAndArch.eps create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoSelectOneFromPopAndArch.tex create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoSolutionUM.eps create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoSolutionUM.tex create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoSolutionVsSolutionBM.eps create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoSolutionVsSolutionBM.tex create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoUM.eps create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoUM.tex create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoVectorUM.eps create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoVectorUM.tex create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoVectorVsSolutionBM.eps create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoVectorVsSolutionBM.tex create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoVectorVsVectorBM.eps create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoVectorVsVectorBM.tex create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/doxygen.sty create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/hierarchy.tex create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/main.tex create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/pages.tex create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/refman.tex create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/webpages.tex create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/eoAdditiveBinaryEpsilonIndicator.3 create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/eoBinaryHypervolumeIndicator.3 create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/eoBinaryQualityIndicator.3 create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/eoBinaryQualityIndicator_Range.3 create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/eoIBEA.3 create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/eoIBEAAvgSorting.3 create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/eoIBEASorting.3 create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/eoIBEAStochSorting.3 create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/eoParetoEuclidDist.3 create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/eoParetoPhenDist.3 create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/eoParetoSharing.3 create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/eoParetoSharing_dMatrix.3 create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoAdditiveBinaryEpsilonIndicator.3 create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoArchive.3 create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoArchiveFitnessSavingUpdater.3 create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoArchiveUpdater.3 create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoBM.3 create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoBinaryHypervolumeIndicator.3 create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoBinaryMetricSavingUpdater.3 create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoBinaryQualityIndicator.3 create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoBinaryQualityIndicator_Range.3 create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoCombinedMOLS.3 create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoContributionMetric.3 create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoDisctinctElitistReplacement.3 create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoElitistReplacement.3 create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoEntropyMetric.3 create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoHybridMOLS.3 create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoIBEA.3 create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoIBEAAvgSorting.3 create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoIBEASorting.3 create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoIBEAStochSorting.3 create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoMOLS.3 create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoMetric.3 create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoNDSorting_II.3 create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoNDSorting_II_compare_nodes.3 create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoNSGA_II.3 create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoParetoEuclidDist.3 create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoParetoPhenDist.3 create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoParetoSharing.3 create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoParetoSharing_dMatrix.3 create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoReplacement.3 create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoSelectOneFromPopAndArch.3 create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoSolutionUM.3 create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoSolutionVsSolutionBM.3 create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoUM.3 create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoVectorUM.3 create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoVectorVsSolutionBM.3 create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoVectorVsVectorBM.3 create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/webpages.3 create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/moeo.doxyfile create mode 100755 tags/paradiseo-moeo-0.2/paradiseo-moeo/src/Makefile.am create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/src/metric/moeoBinaryMetricSavingUpdater.h create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/src/metric/moeoContributionMetric.h create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/src/metric/moeoEntropyMetric.h create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/src/metric/moeoMetric.h create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/src/moeo create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/src/moeo.h create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/src/moeoArchive.h create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/src/moeoArchiveFitnessSavingUpdater.h create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/src/moeoArchiveUpdater.h create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/src/moeoCombinedMOLS.h create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/src/moeoHybridMOLS.h create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/src/moeoMOLS.h create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/src/moeoNDSorting.h create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/src/moeoNSGA_II.h create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/src/moeoReplacement.h create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/src/moeoSelectOneFromPopAndArch.h create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/src/old/README create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/src/old/make_algo_MOEO.h create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/src/old/moeoBinaryQualityIndicator.h create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/src/old/moeoIBEA.h create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/src/old/moeoParetoPhenDist.h create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/src/old/moeoParetoSharing.h create mode 100755 tags/paradiseo-moeo-0.2/paradiseo-moeo/tutorials/Makefile.am create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/tutorials/lesson1/FlowShop.h create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/tutorials/lesson1/FlowShopBenchmarkParser.h create mode 100755 tags/paradiseo-moeo-0.2/paradiseo-moeo/tutorials/lesson1/FlowShopEA create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/tutorials/lesson1/FlowShopEA.cpp create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/tutorials/lesson1/FlowShopEA.param create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/tutorials/lesson1/FlowShopEval.h create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/tutorials/lesson1/FlowShopFitness.h create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/tutorials/lesson1/FlowShopInit.h create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/tutorials/lesson1/FlowShopOpCrossoverQuad.h create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/tutorials/lesson1/FlowShopOpMutationExchange.h create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/tutorials/lesson1/FlowShopOpMutationShift.h create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/tutorials/lesson1/Makefile.am create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/tutorials/lesson1/benchmarks/020_05_01.txt create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/tutorials/lesson1/benchmarks/020_05_02.txt create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/tutorials/lesson1/benchmarks/020_10_01.txt create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/tutorials/lesson1/benchmarks/020_10_02.txt create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/tutorials/lesson1/benchmarks/020_20_01.txt create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/tutorials/lesson1/benchmarks/050_05_01.txt create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/tutorials/lesson1/benchmarks/050_10_01.txt create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/tutorials/lesson1/benchmarks/050_20_01.txt create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/tutorials/lesson1/benchmarks/100_05_01.txt create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/tutorials/lesson1/benchmarks/100_10_01.txt create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/tutorials/lesson1/benchmarks/100_20_01.txt create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/tutorials/lesson1/benchmarks/200_10_01.txt create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/tutorials/lesson1/benchmarks/README create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/tutorials/lesson1/make_eval_FlowShop.h create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/tutorials/lesson1/make_genotype_FlowShop.h create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/tutorials/lesson1/make_op_FlowShop.h create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/tutorials/lesson2/Makefile.am create mode 100755 tags/paradiseo-moeo-0.2/paradiseo-moeo/tutorials/lesson2/Sch1 create mode 100644 tags/paradiseo-moeo-0.2/paradiseo-moeo/tutorials/lesson2/Sch1.cpp diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/AUTHORS b/tags/paradiseo-moeo-0.2/paradiseo-moeo/AUTHORS new file mode 100644 index 000000000..50787a3ef --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/AUTHORS @@ -0,0 +1,4 @@ +Sébastien Cahon +Arnaud Liefooghe +Thomas Legrand +Abdelhakim Deneche diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/ChangeLog b/tags/paradiseo-moeo-0.2/paradiseo-moeo/ChangeLog new file mode 100755 index 000000000..e69de29bb diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/Makefile.am b/tags/paradiseo-moeo-0.2/paradiseo-moeo/Makefile.am new file mode 100755 index 000000000..f82d6f279 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/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/tags/paradiseo-moeo-0.2/paradiseo-moeo/NEWS b/tags/paradiseo-moeo-0.2/paradiseo-moeo/NEWS new file mode 100644 index 000000000..31fe551dc --- /dev/null +++ b/tags/paradiseo-moeo-0.2/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/tags/paradiseo-moeo-0.2/paradiseo-moeo/README b/tags/paradiseo-moeo-0.2/paradiseo-moeo/README new file mode 100644 index 000000000..7da34dc2b --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/README @@ -0,0 +1,60 @@ + 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. + +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-MOEO 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. + | + |-- lesson2 Implement NSGA-II for the SCH1 problem. + +=================================================================== + NOTES +=================================================================== + +Mailing list : paradiseo-help@lists.gforge.inria.fr diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/autogen.sh b/tags/paradiseo-moeo-0.2/paradiseo-moeo/autogen.sh new file mode 100755 index 000000000..293b7972e --- /dev/null +++ b/tags/paradiseo-moeo-0.2/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/tags/paradiseo-moeo-0.2/paradiseo-moeo/configure.in b/tags/paradiseo-moeo-0.2/paradiseo-moeo/configure.in new file mode 100755 index 000000000..253a290ba --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/configure.in @@ -0,0 +1,43 @@ +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 +tutorials/lesson2/Makefile +]) diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/Makefile.am b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/Makefile.am new file mode 100644 index 000000000..254b2661c --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/Makefile.am @@ -0,0 +1,5 @@ +doc: + -@doxygen moeo.doxyfile + +clean-local: + rm -rf html latex man diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/README-source.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/README-source.html new file mode 100644 index 000000000..dd3e7c100 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/README-source.html @@ -0,0 +1,30 @@ + + +ParadisEO-MOEO: README Source File + + + + +
+
+

README

00001 All the files contained in src/old/ will be fully rebuilt in the next version of ParadisEO-MOEO. 
+00002 For more informations, please contact paradiseo-help@lists.gforge.inria.fr.
+

Generated on Tue Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/annotated.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/annotated.html new file mode 100644 index 000000000..ffd680783 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/annotated.html @@ -0,0 +1,73 @@ + + +ParadisEO-MOEO: Class List + + + + +
+
+
+
+

ParadisEO-MOEO Class List

Here are the classes, structs, unions and interfaces with brief descriptions: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
moeoAdditiveBinaryEpsilonIndicator< EOFitness >Functor Additive binary epsilon indicator for eoParetoFitness
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
moeoBinaryHypervolumeIndicator< EOFitness >Functor Binary hypervolume indicator for eoParetoFitness
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
moeoBinaryQualityIndicator< EOFitness >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
moeoBinaryQualityIndicator< EOFitness >::RangePrivate class to represent the bounds
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
moeoIBEA< EOT, Fitness >Functor The sorting phase of IBEA (Indicator-Based Evolutionary Algorithm)
moeoIBEAAvgSorting< EOT, FitnessEval >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
moeoIBEASorting< EOT, Fitness >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
moeoIBEAStochSorting< EOT, FitnessEval >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
moeoMetricBase class for performance metrics (also called quality indicators)
moeoMOLS< EOT >Abstract class for local searches applied to multi-objective optimization
moeoNDSorting_II< EOT >Fast Elitist Non-Dominant Sorting Genetic Algorithm assignment strategie Note : This is a corrected version of the original eoNDSorting_II class
moeoNDSorting_II< EOT >::compare_nodesA class to compare the nodes
moeoNSGA_II< EOT >
moeoParetoEuclidDist< EOT, DistType >
moeoParetoPhenDist< EOT, DistType >
moeoParetoSharing< EOT, worthT >
moeoParetoSharing< EOT, worthT >::dMatrix
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 Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classes.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classes.html new file mode 100644 index 000000000..169e8a677 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classes.html @@ -0,0 +1,52 @@ + + +ParadisEO-MOEO: Alphabetical List + + + + +
+
+
+
+

ParadisEO-MOEO Class Index

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

+ +
  A  
+
moeoElitistReplacement   moeoParetoEuclidDist   
moeoAdditiveBinaryEpsilonIndicator   moeoEntropyMetric   moeoParetoPhenDist   
moeoArchive   
  H  
+
moeoParetoSharing   
moeoArchiveFitnessSavingUpdater   moeoHybridMOLS   moeoParetoSharing::dMatrix   
moeoArchiveUpdater   
  I  
+
  R  
+
  B  
+
moeoIBEA   moeoReplacement   
moeoBinaryHypervolumeIndicator   moeoIBEAAvgSorting   
  S  
+
moeoBinaryMetricSavingUpdater   moeoIBEASorting   moeoSelectOneFromPopAndArch   
moeoBinaryQualityIndicator   moeoIBEAStochSorting   moeoSolutionUM   
moeoBinaryQualityIndicator::Range   
  M  
+
moeoSolutionVsSolutionBM   
moeoBM   moeoMetric   
  U  
+
  C  
+
moeoMOLS   moeoUM   
moeoCombinedMOLS   
  N  
+
  V  
+
moeoContributionMetric   moeoNDSorting_II   moeoVectorUM   
  D  
+
moeoNDSorting_II::compare_nodes   moeoVectorVsSolutionBM   
moeoDisctinctElitistReplacement   moeoNSGA_II   moeoVectorVsVectorBM   
  E  
+
  P  
+

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

+


Generated on Tue Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoAdditiveBinaryEpsilonIndicator-members.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoAdditiveBinaryEpsilonIndicator-members.html new file mode 100644 index 000000000..f4ee6424b --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoAdditiveBinaryEpsilonIndicator-members.html @@ -0,0 +1,47 @@ + + +ParadisEO-MOEO: Member List + + + + +
+
+
+
+

moeoAdditiveBinaryEpsilonIndicator< EOFitness > Member List

This is the complete list of members for moeoAdditiveBinaryEpsilonIndicator< EOFitness >, including all inherited members.

+ + + + + + + + + + + +
boundsmoeoBinaryQualityIndicator< EOFitness > [protected]
epsilonValue(const EOFitness &_fitness_eo1, const EOFitness &_fitness_eo2, const unsigned _iObj)moeoAdditiveBinaryEpsilonIndicator< EOFitness > [inline, private]
functor_category()eoBF< A1, A2, R > [static]
moeoAdditiveBinaryEpsilonIndicator()moeoAdditiveBinaryEpsilonIndicator< EOFitness > [inline]
moeoBinaryQualityIndicator()moeoBinaryQualityIndicator< EOFitness > [inline]
operator()(const EOFitness &_fitness_eo1, const EOFitness &_fitness_eo2)moeoAdditiveBinaryEpsilonIndicator< EOFitness > [inline]
moeoBinaryQualityIndicator::operator()(A1, A2)=0eoBF< A1, A2, R > [pure virtual]
setBounds(const unsigned _iObj, const double _min, const double _max)moeoBinaryQualityIndicator< EOFitness > [inline]
traits typedefmoeoAdditiveBinaryEpsilonIndicator< EOFitness > [private]
~eoBF()eoBF< A1, A2, R > [virtual]
~eoFunctorBase()eoFunctorBase [virtual]


Generated on Tue Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoAdditiveBinaryEpsilonIndicator.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoAdditiveBinaryEpsilonIndicator.html new file mode 100644 index 000000000..6ed3058ed --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoAdditiveBinaryEpsilonIndicator.html @@ -0,0 +1,173 @@ + + +ParadisEO-MOEO: moeoAdditiveBinaryEpsilonIndicator< EOFitness > Class Template Reference + + + + +
+
+
+
+

moeoAdditiveBinaryEpsilonIndicator< EOFitness > Class Template Reference

Functor Additive binary epsilon indicator for eoParetoFitness. +More... +

+#include <moeoBinaryQualityIndicator.h> +

+

Inheritance diagram for moeoAdditiveBinaryEpsilonIndicator< EOFitness >: +

+ +moeoBinaryQualityIndicator< EOFitness > +eoBF< A1, A2, R > +eoFunctorBase + +List of all members. + + + + + + + + + + + + + + + + +

Public Member Functions

moeoAdditiveBinaryEpsilonIndicator ()
 constructor
double operator() (const EOFitness &_fitness_eo1, const EOFitness &_fitness_eo2)
 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)

Private Types

+typedef EOFitness::fitness_traits traits
 fitness traits

Private Member Functions

double epsilonValue (const EOFitness &_fitness_eo1, const EOFitness &_fitness_eo2, const unsigned _iObj)
 computation of the epsilon value by which individual _eo1 must be decreased in the objective _iObj such that individual _eo2 is weakly dominated
+

Detailed Description

+

template<class EOFitness>
+ class moeoAdditiveBinaryEpsilonIndicator< EOFitness >

+ +Functor Additive binary epsilon indicator for eoParetoFitness. +

+ +

+Definition at line 115 of file moeoBinaryQualityIndicator.h.


Member Function Documentation

+ +
+
+
+template<class EOFitness>
+ + + + + + + + + + + + + + + + + + +
double moeoAdditiveBinaryEpsilonIndicator< EOFitness >::operator() (const EOFitness &  _fitness_eo1,
const EOFitness &  _fitness_eo2 
) [inline]
+
+
+ +

+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) +

+

Parameters:
+ + + +
EOFitness & _fitness_eo1 the fitness of the first individual
EOFitness & _fitness_eo2 the fitness of the second individual
+
+ +

+Definition at line 138 of file moeoBinaryQualityIndicator.h. +

+References moeoAdditiveBinaryEpsilonIndicator< EOFitness >::epsilonValue(). +

+

+ +

+
+
+template<class EOFitness>
+ + + + + + + + + + + + + + + + + + + + + + + + +
double moeoAdditiveBinaryEpsilonIndicator< EOFitness >::epsilonValue (const EOFitness &  _fitness_eo1,
const EOFitness &  _fitness_eo2,
const unsigned  _iObj 
) [inline, private]
+
+
+ +

+computation of the epsilon value by which individual _eo1 must be decreased in the objective _iObj such that individual _eo2 is weakly dominated +

+

Parameters:
+ + + + +
EOFitness & _fitness_eo1 the fitness of the first individual
EOFitness & _fitness_eo2 the fitness of the second individual
unsigned _iObj the index of the objective
+
+ +

+Definition at line 170 of file moeoBinaryQualityIndicator.h. +

+References moeoBinaryQualityIndicator< EOFitness >::bounds. +

+Referenced by moeoAdditiveBinaryEpsilonIndicator< EOFitness >::operator()(). +

+

+


The documentation for this class was generated from the following file: +
Generated on Tue Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoAdditiveBinaryEpsilonIndicator.png b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoAdditiveBinaryEpsilonIndicator.png new file mode 100644 index 0000000000000000000000000000000000000000..ab02eb8afe24440cce99248269bb92ac439a3412 GIT binary patch literal 1487 zcmbtUX;6~~5DkbIhfP)FQV2TI0CI`SAs9dq6OeG_BOKB|2GEdzC@~_Jaww=ARRThT z)KO6KB|;z{7$gt@NgHfJmC#Vm7J{6jAP5vlQ~&gT{jt06&Ft*XynVB|zCNB>>iX(1 z7)%R&+T9-pQ!!Oyf!ZczX5P-hDvPeKcc6ztp-@7FLQqjbC{&^^ArJ_X+Z1C;s*>pM z6997=mqo*1o1@U~u7Ot=vkb4|Q6${s)nlPxN4NS^Vm$H`q&Uc3&Rh%2CHED)Z~wJ` zk~Lzs+a9a`c(!8u3bf9b2gtKIUUJmaB%qzUl;n!^3Dm`a|bvkm-;oO_f1Va z&%?!QOMWUSn?BVpWRvf-Ujhp+ElF9e#x-GANmyW50!C{(8aSdbVS6);YZwW`Mwv#@ z!Flzp&R}5lHR;ucmBz=|7vJzW?7!g+u)k`C$(uSDKx?{2sEYLyDWk82Wr-lG3tuygp5p$2z6l-t2_Zt%~oOsTiC-tcvn0ZAeMF@%!T2M)A>I zMG113>LqQ^8heYi)Jam*;YuULz@NKc@#aDfw4Me^u%jSgVxf_eJ286s?DSRE(tFLaK)mhKv%*3zl%aW15Gpv;sb*gHNL8?lAB)_8`LT6L z{J}FMo7PJhBuR6d>%(W$7ik~b4}l5AQu|ovOTpMU+U9T_i>Y%e#rmdnt|5v^?Y6G+#%aF!*TOV{$@| zM_BvL{6bB36;hI{14f^0^ehu_3;H`*YxJS>ZAZe_XGQBeZET&khsEGaT5M$LqBND| zO#^R`qAnrV4LKB@mYd4is{An1Ic4XPlXI(GkobvbKpM4?lry*lK;f8co{$jF<3s96 zbR8d=m=w<@Pa^GhS}ha=e2U zG;&qKxT`)-Hy)*zJ18#|4Mi$SvhmY;$k)7!1Ru~LXvgdGM`IeSK#i}n>wkV9kQJB0 z`I80(A1sx==pyYUSH87^&g0CG#QcnW;`6aQ=#P6DmrIt3Dbu3>MjNa;13C9dM|e|) zhOERmG%9YIU4*ihua9On`iI1iBkfl05%Sxqp)Cj?z%2W~?yPqk6ceX~gViH4$+_XG zUMVI%>ihD3jbT20N8W_YZ`EJe1s@ID%l1xTCpL(vZr4q5-t`sn5+hbxEpsu@sT>mo za${qpz4@Ve=zcqTi(6dQc%an}mj@#y9KI}K;NVO@PHbA(6AH@E0}n%1CX76opWvVF z64X0v&75>;$IIEK^995fa*Gl|xCxy^)8>h(TScy_|1*U7ty#9GGK;VtxAL~E^@`7~`d z*JsgCI1>BRv1e{v%Y4vzKr{`kP?9V`Y~7b GLdHL3X2R + +ParadisEO-MOEO: Member List + + + + +
+
+ +

moeoArchive< EOT > Member List

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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
append(unsigned _newPopSize, eoInit< EOT > &_chromInit)eoPop< EOT >
best_element() consteoPop< EOT >
className() consteoPop< EOT > [virtual]
contains(const EOFitness &_fit) constmoeoArchive< EOT > [inline]
dominates(const EOFitness &_fit) constmoeoArchive< EOT > [inline]
EOFitness typedefmoeoArchive< EOT >
eoPop()eoPop< EOT >
eoPop(unsigned _popSize, eoInit< EOT > &_chromInit)eoPop< EOT >
eoPop(std::istream &_is)eoPop< EOT >
Fitness typedefeoPop< EOT >
fitness_traits typedefeoPop< EOT >
getPerf2Worth()eoPop< EOT >
invalidate()eoPop< EOT > [virtual]
it_best_element()eoPop< EOT >
it_worse_element()eoPop< EOT >
nth_element(int nth)eoPop< EOT >
nth_element(int which, std::vector< const EOT * > &result) consteoPop< EOT >
nth_element_fitness(int which) consteoPop< EOT >
printOn(std::ostream &_os) consteoPop< EOT > [virtual]
readFrom(std::istream &_is)eoPop< EOT > [virtual]
scale()eoPop< EOT >
setPerf2Worth(eoPerf2Worth< EOT > &_p2w)eoPop< EOT >
setPerf2Worth(eoPerf2Worth< EOT > *_p2w)eoPop< EOT >
shuffle(void)eoPop< EOT >
shuffle(std::vector< const EOT * > &result) consteoPop< EOT >
sort(void)eoPop< EOT >
sort(std::vector< const EOT * > &result) consteoPop< EOT >
sort()eoPop< EOT >
sortedPrintOn(std::ostream &_os) consteoPop< EOT > [virtual]
swap(eoPop< EOT > &other)eoPop< EOT >
swap(eoPop< EOT > &other)eoPop< EOT >
update(const EOT &_eo)moeoArchive< EOT > [inline]
update(const eoPop< EOT > &_pop)moeoArchive< EOT > [inline]
worse_element() consteoPop< EOT >
~eoObject()eoObject [virtual]
~eoPersistent()eoPersistent [virtual]
~eoPop()eoPop< EOT > [virtual]
~eoPrintable()eoPrintable [virtual]


Generated on Tue Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoArchive.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoArchive.html new file mode 100644 index 000000000..6b8bf7e47 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoArchive.html @@ -0,0 +1,212 @@ + + +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> +

+

Inheritance diagram for moeoArchive< EOT >: +

+ +eoPop< EOT > +eoObject +eoPersistent +eoPrintable + +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 Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoArchive.png b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoArchive.png new file mode 100644 index 0000000000000000000000000000000000000000..c691aff7637833d7cb84e6d555c87c5f006e19cf GIT binary patch literal 1083 zcmeAS@N?(olHy`uVBq!ia0y~yV3Y!~53n!;NlpKaB|u6dz$e7@|Ns9$=Kuc(=Fd-< z0AzvjfddDs5B+}vMVtyT0Fq?7v{?p{YVNy#aryP?M zzL)d&(UT0L7L(qMc7~nDqF&GWn!fLBn_0TvvX9PeeIChwcH3`Ss4LUXCpl|FUJg^| z)IZabjvtH$D_FmHHy=0QP#(GBa z!Kux2xt1_y-Ic$@vh~=aN*f2Mg_j~slGi3JtyG-A=D?K6ph6wWVt>n9MFDSxZR{yJ zjZ@q*Z)C<4%$Ro8u`X36xN$;i#%l%tvYVW}z5k+Jzw=7%{=f2jrrCAf8#fNh^zyQw z)9@9(v-3e+`r>o9L{4mPy>L+`fALD0lV^|ViKS|v&HAh+Y`k-(UiGYZCo*yu-duC* zd)lgqnTGZ+wcARjTHbTpY zR=ZfMA$R^(WvS?*l?eeqtq^ojRM=Yrl5(s%3gn=3m$4hXgDxr`6;(Kt}jjN z!Ix9Ma`v09m?YX1yIeLj|I9Tt<5T3!?VIve&3d&JNSrcRxQy#;7|^@R;(cqipdPta f?_GRV_KbM=>61oE?M`ceIi11N)z4*}Q$iB}hK%WG literal 0 HcmV?d00001 diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoArchiveFitnessSavingUpdater-members.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoArchiveFitnessSavingUpdater-members.html new file mode 100644 index 000000000..2994ae738 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoArchiveFitnessSavingUpdater-members.html @@ -0,0 +1,48 @@ + + +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]
className(void) consteoUpdater [virtual]
countermoeoArchiveFitnessSavingUpdater< EOT > [private]
filenamemoeoArchiveFitnessSavingUpdater< EOT > [private]
functor_category()eoF< void > [static]
idmoeoArchiveFitnessSavingUpdater< EOT > [private]
lastCall()eoUpdater [virtual]
moeoArchiveFitnessSavingUpdater(moeoArchive< EOT > &_arch, const std::string &_filename="Res/Arch", int _id=-1)moeoArchiveFitnessSavingUpdater< EOT > [inline]
operator()()moeoArchiveFitnessSavingUpdater< EOT > [inline, virtual]
result_type typedefeoF< void >
~eoF()eoF< void > [virtual]
~eoFunctorBase()eoFunctorBase [virtual]


Generated on Tue Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoArchiveFitnessSavingUpdater.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoArchiveFitnessSavingUpdater.html new file mode 100644 index 000000000..ed42eef73 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoArchiveFitnessSavingUpdater.html @@ -0,0 +1,134 @@ + + +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> +

+

Inheritance diagram for moeoArchiveFitnessSavingUpdater< EOT >: +

+ +eoUpdater +eoF< void > +eoFunctorBase + +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 Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoArchiveFitnessSavingUpdater.png b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoArchiveFitnessSavingUpdater.png new file mode 100644 index 0000000000000000000000000000000000000000..b15ca800a1e0b0efa0cc08727352f903fad8b5ae GIT binary patch literal 922 zcmeAS@N?(olHy`uVBq!ia0y~yU}Ofe53qp9PhX_NfRsdlPl)UP|Nnu^|NjrnpPw)R z$O7X72M$yp`u_yTWh@Eu3ubV5b|Z~}f!V;*#WAE}&fDAGMUNE(*b+9L-1U&{1xxVB z*0iU;ulR{`56s18b-5!#fcxjFP@u1;4u3 zb0Ok`;+)xn&rJjz7!s`xy?FoOrT3rRZ(qMPu3>ukseDTU)1m86nGT6O}6I2H+|r2xgl1+CF%0ig4LVF7p^)Zp_b*&GnXT@R;%z8pB`ssxO!8_qB1q@ zF5BFSc>!5d%_2Fh4_$5(4^zCZmAk3!LZaxchzmx!=OcEU;?TTMcDCcOG|(mk*~Bm9 z6<0L*vmST12n(ob2>Ch8P?T|GU}OQh6h^QKxczTuF7*jd zBRH<+POarwY9qSn+LBebwSEhStv>T~_fIRqqLoI%JKW!YdE*jsy)8lfk)P>bkwbqY zUbt-NnXo&e*o|fP+D*a>w}dZadB}1|ke5Y(i#Uh;dEv&r_rKn~Y=wpoGaRnA-QE`b zLGQ^o=DEwiNlZ7-EZ35qckHv_B#wTLb5rm3u2u}V{gGQyK3G<*#YFY-CF!g7J|6q$ zY^*CZI<{%L&BWfx@{_htJGLayZ&$_KZD&pN-aa|FP9R1*oT+l=iJLWl3O;#FvwQz= za`yDeb;rB*+@5F~I@`*l?Pqq=Vy7FvDJ;^_-%dP_;9c}qCspreq~8=ytqBn;!X5kX z30gd;xcawm!nDBeI#(_B3e@Pdi(m9@Vlm(kJNUJAL+G0DgKDuc-Wv{RJvLdE5xspj zOZ1$jYn+^SY~=c>a!#)7)Y7ijqAaZzoA+}gBD{1$BrhIwI?17&A*P|2&T`yxYEMB? z%V`$R=90EKf=eVfsy_X;vtX*A`?l!$a{FZqH5!iz$8`P)Yzdd*P!Iv7wt4>;nf)v) U+_~O717;)!Pgg&ebxsLQ0Ks~aNB{r; literal 0 HcmV?d00001 diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoArchiveUpdater-members.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoArchiveUpdater-members.html new file mode 100644 index 000000000..c74b32df3 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoArchiveUpdater-members.html @@ -0,0 +1,46 @@ + + +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]
className(void) consteoUpdater [virtual]
functor_category()eoF< void > [static]
lastCall()eoUpdater [virtual]
moeoArchiveUpdater(moeoArchive< EOT > &_arch, const eoPop< EOT > &_pop)moeoArchiveUpdater< EOT > [inline]
operator()()moeoArchiveUpdater< EOT > [inline, virtual]
popmoeoArchiveUpdater< EOT > [private]
result_type typedefeoF< void >
~eoF()eoF< void > [virtual]
~eoFunctorBase()eoFunctorBase [virtual]


Generated on Tue Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoArchiveUpdater.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoArchiveUpdater.html new file mode 100644 index 000000000..1841b34f2 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoArchiveUpdater.html @@ -0,0 +1,119 @@ + + +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> +

+

Inheritance diagram for moeoArchiveUpdater< EOT >: +

+ +eoUpdater +eoF< void > +eoFunctorBase + +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 Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoArchiveUpdater.png b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoArchiveUpdater.png new file mode 100644 index 0000000000000000000000000000000000000000..f31a59d019b56bf90e25911ac97c62078adec73b GIT binary patch literal 765 zcmVWa}t(R7noN|#U1JFyW`qPBEz{RB@8S10C(iHWzaxrVy-lykU zUq%ooP4C)2MO|xsf~@F{sGGHxvg8?S-DC)L&&iOkX0*{Cqz7&m25xaKLR+2hee^vu z#Au_9Hri;TjW+sBdf?Xmp8v}j{SsZ@vcvjuWx5t}aEjDL{aRliUCU2YZsMAgdads? zI+jXVeT%J+uBE<8BaHy`)3wxx^9{uEnqM!yxz@dO&JcQ=v1SOC*ZTVC#SI*4|2}=N z8U0Rr;AUaq7Uv?g)%o5>-!nsuHri;TjW*h7qtB#aSaV^_{W<52{xBU>$IpFV&T(p( z8|6d#aGpCmv{#(I-ZmX%Be3`nlOWK{5N0|QeL)9c zz-NaUJ^~u7-{fPE5xydw+|n@93n0^c%V9<5t}Ap9+2y~z8Z|UDPe`%Ag7&lmplJ^j zJS~#Q?SeoPb;cN8(D^aWx8^e^_L^>^E@x%B90j+v) + +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 >: +

+ +eoBF< A1, A2, R > +moeoMetric +eoFunctorBase +eoFunctorBase +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 Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoBM.png b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoBM.png new file mode 100644 index 0000000000000000000000000000000000000000..f5e291872cb4379de2846b8f4fa13d3986b8b499 GIT binary patch literal 3649 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 DvcTLd literal 0 HcmV?d00001 diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoBinaryHypervolumeIndicator-members.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoBinaryHypervolumeIndicator-members.html new file mode 100644 index 000000000..65e8c3015 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoBinaryHypervolumeIndicator-members.html @@ -0,0 +1,50 @@ + + +ParadisEO-MOEO: Member List + + + + +
+
+ +

moeoBinaryHypervolumeIndicator< EOFitness > Member List

This is the complete list of members for moeoBinaryHypervolumeIndicator< EOFitness >, including all inherited members.

+ + + + + + + + + + + + + + +
boundsmoeoBinaryQualityIndicator< EOFitness > [protected]
functor_category()eoBF< A1, A2, R > [static]
hypervolumeIndicatorValue(const EOFitness &_fitness_eo1, const EOFitness &_fitness_eo2, const unsigned _iObj, const bool _flag=false)moeoBinaryHypervolumeIndicator< EOFitness > [inline, private]
hypervolumeIndicatorValueMax(const EOFitness &_fitness_eo1, const EOFitness &_fitness_eo2, const unsigned _iObj, const bool _flag)moeoBinaryHypervolumeIndicator< EOFitness > [inline, private]
hypervolumeIndicatorValueMin(const EOFitness &_fitness_eo1, const EOFitness &_fitness_eo2, const unsigned _iObj, const bool _flag)moeoBinaryHypervolumeIndicator< EOFitness > [inline, private]
moeoBinaryHypervolumeIndicator(double _rho)moeoBinaryHypervolumeIndicator< EOFitness > [inline]
moeoBinaryQualityIndicator()moeoBinaryQualityIndicator< EOFitness > [inline]
operator()(const EOFitness &_fitness_eo1, const EOFitness &_fitness_eo2)moeoBinaryHypervolumeIndicator< EOFitness > [inline]
moeoBinaryQualityIndicator::operator()(A1, A2)=0eoBF< A1, A2, R > [pure virtual]
rhomoeoBinaryHypervolumeIndicator< EOFitness > [private]
setBounds(const unsigned _iObj, const double _min, const double _max)moeoBinaryQualityIndicator< EOFitness > [inline]
traits typedefmoeoBinaryHypervolumeIndicator< EOFitness > [private]
~eoBF()eoBF< A1, A2, R > [virtual]
~eoFunctorBase()eoFunctorBase [virtual]


Generated on Tue Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoBinaryHypervolumeIndicator.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoBinaryHypervolumeIndicator.html new file mode 100644 index 000000000..daddecc1d --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoBinaryHypervolumeIndicator.html @@ -0,0 +1,342 @@ + + +ParadisEO-MOEO: moeoBinaryHypervolumeIndicator< EOFitness > Class Template Reference + + + + +
+
+ +

moeoBinaryHypervolumeIndicator< EOFitness > Class Template Reference

Functor Binary hypervolume indicator for eoParetoFitness. +More... +

+#include <moeoBinaryQualityIndicator.h> +

+

Inheritance diagram for moeoBinaryHypervolumeIndicator< EOFitness >: +

+ +moeoBinaryQualityIndicator< EOFitness > +eoBF< A1, A2, R > +eoFunctorBase + +List of all members. + + + + + + + + + + + + + + + + + + + + + + + + + + +

Public Member Functions

 moeoBinaryHypervolumeIndicator (double _rho)
 constructor
double operator() (const EOFitness &_fitness_eo1, const EOFitness &_fitness_eo2)
 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)

Private Types

+typedef EOFitness::fitness_traits traits
 fitness traits

Private Member Functions

double hypervolumeIndicatorValue (const EOFitness &_fitness_eo1, const EOFitness &_fitness_eo2, const unsigned _iObj, const bool _flag=false)
 computation of the hypervolume of the portion of the objective space that is dominated by individual _eo1 but not by individual _eo2
double hypervolumeIndicatorValueMin (const EOFitness &_fitness_eo1, const EOFitness &_fitness_eo2, const unsigned _iObj, const bool _flag)
 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
double hypervolumeIndicatorValueMax (const EOFitness &_fitness_eo1, const EOFitness &_fitness_eo2, const unsigned _iObj, const bool _flag)
 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

Private Attributes

+double rho
 reference point for the hypervolume calculation
+

Detailed Description

+

template<class EOFitness>
+ class moeoBinaryHypervolumeIndicator< EOFitness >

+ +Functor Binary hypervolume indicator for eoParetoFitness. +

+ +

+Definition at line 206 of file moeoBinaryQualityIndicator.h.


Constructor & Destructor Documentation

+ +
+
+
+template<class EOFitness>
+ + + + + + + + + +
moeoBinaryHypervolumeIndicator< EOFitness >::moeoBinaryHypervolumeIndicator (double  _rho  )  [inline]
+
+
+ +

+constructor +

+

Parameters:
+ + +
double _rho reference point for the hypervolume calculation (rho must not be smaller than 1)
+
+ +

+Definition at line 216 of file moeoBinaryQualityIndicator.h. +

+References moeoBinaryHypervolumeIndicator< EOFitness >::rho. +

+

+


Member Function Documentation

+ +
+
+
+template<class EOFitness>
+ + + + + + + + + + + + + + + + + + +
double moeoBinaryHypervolumeIndicator< EOFitness >::operator() (const EOFitness &  _fitness_eo1,
const EOFitness &  _fitness_eo2 
) [inline]
+
+
+ +

+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) +

+

Parameters:
+ + + +
EOFitness & _fitness_eo1 the fitness of the first individual
EOFitness & _fitness_eo2 the fitness of the second individual
+
+ +

+Definition at line 239 of file moeoBinaryQualityIndicator.h. +

+References moeoBinaryHypervolumeIndicator< EOFitness >::hypervolumeIndicatorValue(). +

+

+ +

+
+
+template<class EOFitness>
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
double moeoBinaryHypervolumeIndicator< EOFitness >::hypervolumeIndicatorValue (const EOFitness &  _fitness_eo1,
const EOFitness &  _fitness_eo2,
const unsigned  _iObj,
const bool  _flag = false 
) [inline, private]
+
+
+ +

+computation of the hypervolume of the portion of the objective space that is dominated by individual _eo1 but not by individual _eo2 +

+

Parameters:
+ + + + + +
EOFitness & _fitness_eo1 the fitness of the first individual
EOFitness & _fitness_eo2 the fitness of the second individual
unsigned _iObj number of objectives (used for iteration)
bool _flag = false (only used for iteration)
+
+ +

+Definition at line 274 of file moeoBinaryQualityIndicator.h. +

+References moeoBinaryQualityIndicator< EOFitness >::bounds, moeoBinaryHypervolumeIndicator< EOFitness >::hypervolumeIndicatorValueMax(), and moeoBinaryHypervolumeIndicator< EOFitness >::hypervolumeIndicatorValueMin(). +

+Referenced by moeoBinaryHypervolumeIndicator< EOFitness >::hypervolumeIndicatorValueMax(), moeoBinaryHypervolumeIndicator< EOFitness >::hypervolumeIndicatorValueMin(), and moeoBinaryHypervolumeIndicator< EOFitness >::operator()(). +

+

+ +

+
+
+template<class EOFitness>
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
double moeoBinaryHypervolumeIndicator< EOFitness >::hypervolumeIndicatorValueMin (const EOFitness &  _fitness_eo1,
const EOFitness &  _fitness_eo2,
const unsigned  _iObj,
const bool  _flag 
) [inline, private]
+
+
+ +

+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 +

+

Parameters:
+ + + + + +
EOFitness & _fitness_eo1 the fitness of the first individual
EOFitness & _fitness_eo2 the fitness of the second individual
unsigned _iObj index of the objective
bool _flag (only used for iteration)
+
+ +

+Definition at line 309 of file moeoBinaryQualityIndicator.h. +

+References moeoBinaryQualityIndicator< EOFitness >::bounds, moeoBinaryHypervolumeIndicator< EOFitness >::hypervolumeIndicatorValue(), and moeoBinaryHypervolumeIndicator< EOFitness >::rho. +

+Referenced by moeoBinaryHypervolumeIndicator< EOFitness >::hypervolumeIndicatorValue(). +

+

+ +

+
+
+template<class EOFitness>
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
double moeoBinaryHypervolumeIndicator< EOFitness >::hypervolumeIndicatorValueMax (const EOFitness &  _fitness_eo1,
const EOFitness &  _fitness_eo2,
const unsigned  _iObj,
const bool  _flag 
) [inline, private]
+
+
+ +

+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 +

+

Parameters:
+ + + + + +
EOFitness & _fitness_eo1 the fitness of the first individual
EOFitness & _fitness_eo2 the fitness of the second individual
unsigned _iObj index of the objective
bool _flag (only used for iteration)
+
+ +

+Definition at line 363 of file moeoBinaryQualityIndicator.h. +

+References moeoBinaryQualityIndicator< EOFitness >::bounds, moeoBinaryHypervolumeIndicator< EOFitness >::hypervolumeIndicatorValue(), and moeoBinaryHypervolumeIndicator< EOFitness >::rho. +

+Referenced by moeoBinaryHypervolumeIndicator< EOFitness >::hypervolumeIndicatorValue(). +

+

+


The documentation for this class was generated from the following file: +
Generated on Tue Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoBinaryHypervolumeIndicator.png b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoBinaryHypervolumeIndicator.png new file mode 100644 index 0000000000000000000000000000000000000000..817ee9099d5d431b866f3af27e280869e2e74a3b GIT binary patch literal 1432 zcmbtUYfw@N6u#P;JtWQElF_bPZZ+Z~Ge_N$0nJfm4G74v@`p^>Bl+eJ9GY=`Of#9yofLiVwuA- z000mNg95MsVBu)S9p5Z6=WZ4oVJ_<qobpP+-Vvyw-#yG zFdX1NCO-}UR_KEPd+}#)Ox}n+quy*6SPAPFXPi4+P@;&SCYplRYja6fU5tC(A*Zii zbfFC`aj1Ij6}@27C7LE9^WI2^h7bDRn9?Sny2ic&iZUk!&1XibGzqh(6_^LQSC{$1 z!X)*@%csG%^Sso2CQD8Z1%`Hz3)nRPn@?K!%Pr6S zX$26L1D$JuFBvqlzy0JJ;i7Jh-wkDlz#wn5o#Np^6!aXvszO_>6Au*e>Qg*kD7SxH zJ3ZK_EQKiVrXCYHl!kuF8Mdchw{)qZAM4~80FQ5-+=6msDatt3uy@9`oLlzU&oG*7 z$}tRB7h2uRc*)uq&Jas`iW&4R*ohYMc1W$;*d@L$Myj1_Tx&RZ>L>Rn&bQhKt(n!n zRQ*nWncj1mEA_wxRcHJdb|)M*lQX6|wNGy8Qa;*@nc3i?`mscur1gWszLJ9fNE>12 z%BTGKmu7PYKfG~=3~5l>Kw=CbSUD){D}8!FAJG4Mcm2fsku=FKvhky?X>%mIVxTw@TCAX=-c?(B z%Y^cej`vET+m6WKzo@E5*{bMx=Z%TA@y|}8W-f_)NebqIUSuKG4Y>K4q*FLcNtO64 z__qDmnBxn^O$WL&nP!c)kv-ww*I9-eU!%|e75z90@un;yziC2KDtdn2l^S!e1+L>|63bA3abRa=YOc&Jqq?(4%%HY@9oENIvX=ZvE zuW5Gynprg%nH01`b{E@)sT{_|R5r|KYRc1+yc?!`Wy5Eq__nLr@15egoaGXQ(K}6U zxRy=&qh)jDu|gq6gv=y%7L!MNZdUN#;x?tO3;qYE=RGg9E$!MZ#fO#IRgzHDz>O#> z$tOK7hS|%-Yt(cS95ue9?*XOIS3JXKU(iN7z-~5Wq|AHR%0;jor;YRmF`#>$%vD&$ zfcK+rE|>MGFV4`l + +ParadisEO-MOEO: Member List + + + + +
+
+ +

moeoBinaryMetricSavingUpdater< EOT > Member List

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

+ + + + + + + + + + + + + + + +
className(void) consteoUpdater [virtual]
countermoeoBinaryMetricSavingUpdater< EOT > [private]
EOFitness typedefmoeoBinaryMetricSavingUpdater< EOT >
filenamemoeoBinaryMetricSavingUpdater< EOT > [private]
firstGenmoeoBinaryMetricSavingUpdater< EOT > [private]
functor_category()eoF< void > [static]
lastCall()eoUpdater [virtual]
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, virtual]
popmoeoBinaryMetricSavingUpdater< EOT > [private]
result_type typedefeoF< void >
~eoF()eoF< void > [virtual]
~eoFunctorBase()eoFunctorBase [virtual]


Generated on Tue Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoBinaryMetricSavingUpdater.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoBinaryMetricSavingUpdater.html new file mode 100644 index 000000000..85e30b801 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoBinaryMetricSavingUpdater.html @@ -0,0 +1,148 @@ + + +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> +

+

Inheritance diagram for moeoBinaryMetricSavingUpdater< EOT >: +

+ +eoUpdater +eoF< void > +eoFunctorBase + +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 Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoBinaryMetricSavingUpdater.png b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoBinaryMetricSavingUpdater.png new file mode 100644 index 0000000000000000000000000000000000000000..333491908f46334a597ec49f560c8789191b30df GIT binary patch literal 877 zcmV-z1CsoSP)U33(Jg&)?(n8uujL57%5LA+~t0HLtRLrfj50 z&i1_K6hg0T?@)jP2YwPh^rQ1z5yImB&aJB;n4jede;J|?c2M+uc zeCU@0*Zocg_^05p-O9+j5GUdHg8lJow?VrRb0CK9c(u=xI#LICgCmE!Wyye z?9+GRWp7QH5LWm;eecL^Z%vs7?>h2!&GS~`IcvVjcG*NcDccV&z<~ol2_O2=dFVe4 zpNnH(?Q-~qvmH2a;J|?c2M!!KaNwulL%$rj?sqc4KL{_+hy{E3-*MY)2$7%H388vy ztv6n_SwhTvE7fCbXX3N&D%tZ>-ErGmGn^y&8M^NHJU6&b`-A=6gYm~}-W}I$muCVk z+k-x~)*UZpHwOF&{Otn#iullv&O`rc_*@+OYL~+=obAAY0|yQqIB?*=fdfAUr*Xwk z{*Wp7Q2`E|izAv`ds+T12abGQDIq)bb$Dsh%RQ3h-{I3HNGZB*(YO73g4;dSZGt<; z@dQZkq>&WS^Hk{+C!cD)=L2b4u1#0EROh^x`|@GFRBkW0Yx|sWPt1F1Y08ZxPtIMA zrm$99e6m~k8hNP>UAc_5_%e-*%Sa0@Ypyl;%^16{V zUR5s#`NYHrYd)1Vud=;e^D5hI%}G+&>43SKmIEih&TvWbbf0Cr&)L4b)t2}9CflEs z%^UiD@jI@49e?Q$u + +ParadisEO-MOEO: Member List + + + + +
+
+ +

moeoBinaryQualityIndicator< EOFitness > Member List

This is the complete list of members for moeoBinaryQualityIndicator< EOFitness >, including all inherited members.

+ + + + + + + + +
boundsmoeoBinaryQualityIndicator< EOFitness > [protected]
functor_category()eoBF< A1, A2, R > [static]
moeoBinaryQualityIndicator()moeoBinaryQualityIndicator< EOFitness > [inline]
operator()(A1, A2)=0eoBF< A1, A2, R > [pure virtual]
setBounds(const unsigned _iObj, const double _min, const double _max)moeoBinaryQualityIndicator< EOFitness > [inline]
traits typedefmoeoBinaryQualityIndicator< EOFitness > [private]
~eoBF()eoBF< A1, A2, R > [virtual]
~eoFunctorBase()eoFunctorBase [virtual]


Generated on Tue Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoBinaryQualityIndicator.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoBinaryQualityIndicator.html new file mode 100644 index 000000000..65056970d --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoBinaryQualityIndicator.html @@ -0,0 +1,134 @@ + + +ParadisEO-MOEO: moeoBinaryQualityIndicator< EOFitness > Class Template Reference + + + + +
+
+ +

moeoBinaryQualityIndicator< EOFitness > Class Template Reference

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. +More... +

+#include <moeoBinaryQualityIndicator.h> +

+

Inheritance diagram for moeoBinaryQualityIndicator< EOFitness >: +

+ +eoBF< A1, A2, R > +eoFunctorBase +moeoAdditiveBinaryEpsilonIndicator< EOFitness > +moeoBinaryHypervolumeIndicator< EOFitness > + +List of all members. + + + + + + + + + + + + + + + + + + + + +

Public Member Functions

moeoBinaryQualityIndicator ()
 constructor
void setBounds (const unsigned _iObj, const double _min, const double _max)
 set the bounds for objective _iObj

Protected Attributes

+std::vector< Rangebounds
 range (min and max double value) for each objective

Private Types

+typedef EOFitness::fitness_traits traits
 fitness traits

Classes

class  Range
 Private class to represent the bounds. More...
+

Detailed Description

+

template<class EOFitness>
+ class moeoBinaryQualityIndicator< EOFitness >

+ +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. +

+ +

+Definition at line 28 of file moeoBinaryQualityIndicator.h.


Member Function Documentation

+ +
+
+
+template<class EOFitness>
+ + + + + + + + + + + + + + + + + + + + + + + + +
void moeoBinaryQualityIndicator< EOFitness >::setBounds (const unsigned  _iObj,
const double  _min,
const double  _max 
) [inline]
+
+
+ +

+set the bounds for objective _iObj +

+

Parameters:
+ + + + +
unsigned _iObj the index of the objective
double _min the minimum value
double _max the maximum value
+
+ +

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

+Referenced by moeoIBEAAvgSorting< EOT, FitnessEval >::setBounds(), moeoIBEAStochSorting< EOT, FitnessEval >::setBounds(), and moeoIBEASorting< EOT, Fitness >::setBounds(). +

+

+


The documentation for this class was generated from the following file: +
Generated on Tue Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoBinaryQualityIndicator.png b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoBinaryQualityIndicator.png new file mode 100644 index 0000000000000000000000000000000000000000..14f128256aaed085cc6b638e1dfea6cc858ced10 GIT binary patch literal 1942 zcmbW2c{J4PAIHZJDSqOXY~4$ixe~sT#xDDseQC0MZ6hwSHNF#R=#mlT5;qKu5n0AC z?vRTa_a+J%OR5?BRR-B*8C&Ge>DM`(-#NeEKlhL4^}L?*{P#ZZ&-0`?Iamn`N(;hZ zFku^Oa~BxwU*24A<>Td2;Ye{dcawCobF(-&IN<8RK`W8ym&LU&tF^T?zU^R&d*q36 zad3qh&kO~@U;?T(<|b~j50?nx5s!65aV84Ak&7qun_EMzM%K-xmA8!ACacyYWC>XP zt5LICHm}DeQRx*7t%eiKmi3y1?J9`pbyX zhzTT;K8q$zuq>Jg6gWBQIOxB#3goKtQ+4i8wr%H~@^lNZucs#&#UgUK zy}}3iM^&a41Bd66{vl$IfO{)ZqI>3(eQ;nU78bqOVS zuXZYyWAFIK*`$7^k0&xKvTb>`JHXV*`7NSQq1I9OVZ5lcb9f)!wvcvZ1F-$ zCr~IwAlFvjk4br~Qj@TQUzN)!bo6dtu!v#eifmQb7BK{V$izv4?<+Q{7v@D?ZZ>&# zBR?LKWfTcOCLh}li@r^16;d#Ek~oxlcLc5x61gnW-UVh-0DbI@qsr;!gg)Iez~r7P^F>Z05#+T7Y{ z4g;7ZD*BEEJOR5_IyE@YJqM@Eap`!syf@R)RS>Cs!=Nm+MV^I}t)WyEae6Z9BOiz5 zOM~Yy_Vd<>*DwfLcAK)cJl4@}HVZMu>h|*2_x-esqva|vhT&j8zM6Cf&%z+QT(k;O z?J+M97lYLZ12xIBx$TS6(qOKd>&AI4f^&B$$o`RztD&4X>slACBg@dG!O|OJ0}WDi z+&RoNo;ugOB}uQsYh;2Ew#gZHbKWb$&k0w)rWQ#l5u{uTcUmrDPNC=QgF2K#iHT8- z0}a>HcUD7`y1^K%{k3t+L5YF?8|@(@9r~TT?aP}6+#!*$yj2YF`AG64(a!3;HTzbB zZ`N{)vK7%h(gQ>y1)|J}q+JXIv-)=ZzwJ4m)<;hqAinY3RXK$D%dp_HZcW)l`vh{r zJxqWJL1OxQB>>;oQ5zb35RoV|iT(49+HLkY8`&s|S;ei<>fH2CS85L!Nq9|6|4iBZ zafJ0bK{Fxv(IVC3WI(;iXK$$MBnC?HTSDBwy|hHy?^}3f(7S+ICBdJ9d2z*I@tVda+;8s#qV;EdXx%ETh$H8d6-`O`r5a4d358ulTb^z?4@@ z*jmav7q4A9Ynrg^v_&@Z_xN==JKddIs&_dQH!DGJ%4F4&;+_Zg3C;Eozel?bKt<=} zNg?S%EzgBeAy@Mdv`09!HqxZuIN;7)pF0%>)=$h=iI@%Q1uwuu;NnPr?@_9KaE9@y z>v3Az)loMGL*r1yu)8)vI|o&N7A@v~JRX9%$D)7H&Oh=)-OSA_xS8tySP?K@D_jv5 zNmU3z&+Vhp>EXX?Z&)LvZ1Ok_5TX-C46D_)X literal 0 HcmV?d00001 diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoBinaryQualityIndicator_1_1Range-members.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoBinaryQualityIndicator_1_1Range-members.html new file mode 100644 index 000000000..b76118225 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoBinaryQualityIndicator_1_1Range-members.html @@ -0,0 +1,44 @@ + + +ParadisEO-MOEO: Member List + + + + +
+
+ +

moeoBinaryQualityIndicator< EOFitness >::Range Member List

This is the complete list of members for moeoBinaryQualityIndicator< EOFitness >::Range, including all inherited members.

+ + + + + + + + +
maxmoeoBinaryQualityIndicator< EOFitness >::Range [private]
maximum()moeoBinaryQualityIndicator< EOFitness >::Range [inline]
minmoeoBinaryQualityIndicator< EOFitness >::Range [private]
minimum()moeoBinaryQualityIndicator< EOFitness >::Range [inline]
rmoeoBinaryQualityIndicator< EOFitness >::Range [private]
Range()moeoBinaryQualityIndicator< EOFitness >::Range [inline]
Range(const double _min, const double _max)moeoBinaryQualityIndicator< EOFitness >::Range [inline]
range()moeoBinaryQualityIndicator< EOFitness >::Range [inline]


Generated on Tue Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoBinaryQualityIndicator_1_1Range.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoBinaryQualityIndicator_1_1Range.html new file mode 100644 index 000000000..8d33a2340 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoBinaryQualityIndicator_1_1Range.html @@ -0,0 +1,81 @@ + + +ParadisEO-MOEO: moeoBinaryQualityIndicator< EOFitness >::Range Class Reference + + + + +
+
+ + +

moeoBinaryQualityIndicator< EOFitness >::Range Class Reference

Private class to represent the bounds. +More... +

+#include <moeoBinaryQualityIndicator.h> +

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

Public Member Functions

Range ()
Range (const double _min, const double _max)
+double minimum ()
+double maximum ()
+double range ()

Private Attributes

+double min
+double max
+double r
+


Detailed Description

+

template<class EOFitness>
+ class moeoBinaryQualityIndicator< EOFitness >::Range

+ +Private class to represent the bounds. +

+ +

+Definition at line 62 of file moeoBinaryQualityIndicator.h.


The documentation for this class was generated from the following file: +
Generated on Tue Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoCombinedMOLS-members.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoCombinedMOLS-members.html new file mode 100644 index 000000000..e1a6cac54 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoCombinedMOLS-members.html @@ -0,0 +1,41 @@ + + +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, virtual]


Generated on Tue Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoCombinedMOLS.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoCombinedMOLS.html new file mode 100644 index 000000000..d69308c40 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoCombinedMOLS.html @@ -0,0 +1,202 @@ + + +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 > +eoBF< const EOT &, moeoArchive< EOT > &, void > +eoFunctorBase + +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, virtual]
+
+
+ +

+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
+
+ +

+Implements eoBF< const EOT &, moeoArchive< EOT > &, void >. +

+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 Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoCombinedMOLS.png b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoCombinedMOLS.png new file mode 100644 index 0000000000000000000000000000000000000000..26f6e97e68acb74388c99db3fdc87446bcba4eaf GIT binary patch literal 1403 zcmeAS@N?(olHy`uVBq!ia0y~yU~~Yo53n!;$@a?SUxAcFfKQ0)|NsAi%>Vxn%%7hy z0muU50|yRNANv0U$Ym@E@(X5gcy=R=fq_-f)5S5QV$Rz+(M4Z0c--DjuiSQn@eE&@ z*^=dN>N%5-T%De`w7$bW=dzs$}G3d_1Kh z$kV<}b($@U=b{-g%?moS3-U`X4&GhZ_aM-~XJh|TTa}BGo77yMZ(Xp)|MC=_yVn-< z?w>VTp@cUqGN-rVjjmbB#x;)KVzZ9=8?Z*tY+4I+NnNADujHl2E=j+$OG=l}UGU+$ z_$`OTii7L*-L&_lR~&peIfcvYa0Vl<8+V35ltc4HCaE5=3kh2q*cP*z0M#EPQR=&# zz+cv-$9}{!`X4k~mY}_L!Tnv^^-smtEWUEQ#ctE_|5=OgU)w(?E9{Woru)9@-X*VZ z)!q42;YZrx1H~QxW{Vp|-KDOz2v3a>I=c(IP+{fJFd6j3s@VqpS^>14B z8{OHj-Rd4~%~amUaqCHipilL;y8r(aW~}B73NKn}7$UobBdn>iOY<7DiuC>FRoTgf ztg)<*?<~{Q3+2D$B<|Rys`BKM#mX$DwFj-5c5?%*=BhAl+vE~ zX3fOTS5LfF>Rz9$eg5DUHqCv(AN3<;SRZdasFq$>#V5CEM$lXT7gc8;vF#EutctU3 zkY?R|#ei%5y_f5MMcb$ZZ0Vsn-_GZErOXr9a_#Bg z(x3N57V@Z0)qRrpZk@+7K}YA%)~1bS8pm&S$C#DIt9r7E^NrX+kbNYy+yyKy_>QwdOH7)We;Bc zUR!OT!u3$>-&OPce-+)&w`uG+y0F`)=gq^tr6PAcVy>y~J2BTRQ?1_T*ox;EiO-Mfh8q_r>mdK II;Vst0Q`%5`~Uy| literal 0 HcmV?d00001 diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoContributionMetric-members.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoContributionMetric-members.html new file mode 100644 index 000000000..2968de3e0 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoContributionMetric-members.html @@ -0,0 +1,41 @@ + + +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 Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoContributionMetric.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoContributionMetric.html new file mode 100644 index 000000000..97a3e1bec --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoContributionMetric.html @@ -0,0 +1,257 @@ + + +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 > +eoBF< A1, A2, R > +moeoMetric +eoFunctorBase +eoFunctorBase + +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 Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoContributionMetric.png b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoContributionMetric.png new file mode 100644 index 0000000000000000000000000000000000000000..5ba0e67df0b4d0729ea555d792aad5b767575938 GIT binary patch literal 1734 zcmcIldoz?!Ze7~RXIp6brobMmsJaoVw6Jtwb z2n1r{v)3~i0x?kQ_2e&5z5SNGty%BP(SG~9bUK}0>U07Cz!vJ&ECm9=$tK;PJ~T)U z4hVtl7?K=;Knx>&Ja_IpaqaWjYS$~Z)0EaNUWPV1+Bbo@|<-Up;(6qMMGZ< z9RHtaWS${&hd5hJcP%TY{WBo$5#mNL{Nqp>jFlYT0UeC(@@3tEuZgwEHvPrN6W zK=)?e>rO}-!;_X58xLZI{mhYd-|l(C*Q-ZYsmLxvtRk5XrvqK>>7aE7_Y`w$0HVI2ajZuyBr`^e8y}2> zsWlta57e5kZPW-{P&$ro*>s6ROZhOS$4#v>zY>tB>=g`^Z-%LZitFwx@- z#m_t^Qq>Ius48$16t!>z7rfef+EP-b?9x1$>kP3gaItbLTEmP^weff1eF_ScS7%vf zn9-L17bkblN69K39vW0!jOP9u+Aj6n`l)xAEi)frUs{T9g8Hr~Dv@+x$hBQDe?pp% zZ25-Dwoj(1xdHrKAxD&!{axh?iMgK`XxS?{%-Tkw0(FIGS=2~-U+Ol`RKE(PJ-7lm zs6M!hthxnsk?Z>D^CqO34F!Ie=dIkGn)AItklSuDu#>;_rOE<4Sw7pf3M8;#n)9i^ z7wzkOcCmKi-+!3Gn{e}>RJixuUL9)vb_3ERn^u<%mrv(*$n&~GbdD5d*b zXT+e*^>1&$s;oS~Ux)gBZ9Q~HNFo_dCI3S094Ss9iSo9*0q-w8dS9MHC!rj|eu^~q zRx`GNiEfji7ez1WzFh`}^U7*#@Ntr_=+qTog%1U85xs9Ea@(OgB=3qJi{*!j$j2RF z5Z2pu_ft#jtu%{-ipkJ~jfldhlekt{3*!-XRZIBN1B@a!5k0V%D0?JuxJc>XjBxU1 z#*BpvtIu0ld{7AHkA)>HhMzG~76HDmo3bb$6?`iVc2zu>p3;l7^9OfZng;L5mGY1( z;UtU&_sGSU(WQ-x;z|QYg<;yI+8ntNtKS>0x&}@tbz3(c&jV= Prvvfv3h?Ca!e;#q$)1rI literal 0 HcmV?d00001 diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoDisctinctElitistReplacement-members.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoDisctinctElitistReplacement-members.html new file mode 100644 index 000000000..28cbb57ec --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoDisctinctElitistReplacement-members.html @@ -0,0 +1,40 @@ + + +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, virtual]
perf2worthmoeoDisctinctElitistReplacement< EOT, WorthT > [private]


Generated on Tue Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoDisctinctElitistReplacement.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoDisctinctElitistReplacement.html new file mode 100644 index 000000000..32ebc7acd --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoDisctinctElitistReplacement.html @@ -0,0 +1,200 @@ + + +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 > +eoReplacement< EOT > +eoBF< eoPop< EOT > &, eoPop< EOT > &, void > +eoFunctorBase + +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, virtual]
+
+
+ +

+replacement - result in _parents +

+

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

+Implements eoBF< eoPop< EOT > &, eoPop< EOT > &, void >. +

+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, and eoPop< EOT >::swap(). +

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

+

+


The documentation for this class was generated from the following file: +
Generated on Tue Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoDisctinctElitistReplacement.png b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoDisctinctElitistReplacement.png new file mode 100644 index 0000000000000000000000000000000000000000..3848ed8dcc2e4a52b8e0de4238d18bc87f501539 GIT binary patch literal 1508 zcmb`HX;70_6ox|q9YIzLltpAmS)_@OpezEiCL!nt1!GVYL#QDTD6#|y#R6%{QduO( zE+Qa^Fos1eG*I>!wkQySmc;-O2_Q=-Dw;;yPM!Ylk9+QW-kCdR&U5D6pH8FPEuhr2TX0!cu`dPho997_Z-S>o%f(?}l|kw_$#B2i~q*~O3Mr_7YYJY4#t6Yx@tusuN|^&2+n?@&=U)@SOQEM04DEBg|T1F}{Ta7Ur6_(7zlI zY=GyzX;Nhb$$}Xf(lk;vyx0Rf4>Px@^YUz~;>6`Msd#szblza~v}23q1#X?L?5`dS z7)N_U6~ZsgO|4w{BL&PeD;#OTKFnx*3_A$!%;{nmv z_Jgm$KnG<43T)<(ciW0)-Jj;Xf4kGFIp?sM<0+7Eq96vs_o@H$CO>OV8RGx1X+;yP z9(pZrwcb$fM1c>4k7F;P+Dpz)r(8(UnivV1K(Ay0^=VaSvyYeZLL-UkHr?KA7th}q zKp29?k6ErWWD^UqQbk^24>Riltp>#}OeU~FC|jH%$6&*UgbZj_vM~^{dI6(5qm+z( zv@Kn3fV#wTs2M2@fq80@D*;W z8AF3-nv{m^ukSDbbMyo5X2c>?ziI=rs#@fR@;icit{%)Rr{YIyBq4YUgkM!&zEXeF z7Hy*^owIMVUtXWU|79vSL^R+&l=u#uCR@-=Uc9*2XS!D}1^wphNEs0( zP64gLeZ3D|kkeOk~zPaS-MBNS1Yfvv6?M<%z7lJ-mu z=1n7`)1Doj8XSj)FfZU5`8+~1rVqVP)Swysj&TK`XRdpLwR`fGxh!(yoWML5=m!pvy_kShpU_&)NOldb%M(2i>7mm) zTQ#cZ05edBY3lR0M>OrAA&S57EO$eKp0rt6*WONi+$T+6j?mbP9T`PU2?C2L>6YE0 z(N-uPRWN03vpv)(E|uLIQ+cx%7SG&H?bDidG;nM%UY0A3O&&TSv}3SmOm(}hj&Xm7 z5r5Q(TYKxh%67v~-KCP4ibf0SU;3E_~6Id?X(p z1wWgcSEvC|DO~5P_@*hOl3iH1X_>w5?=C0SIE5`>%Kfix2hVcsy>y=n)sGceRM6sH z?km_{iLdAxPqy(~FWm4wev6B}maULz;r$2o_FcwwBY(=Dpl}dC1BL znrx*@6#SCPIjWj4jlk9?U)5Gq4@IcrM<2m3^qjoF%xhK#;m@3rs-|h4p`k5aG|2~gspCU?+(2m+M=6onKbkr@l{;$QhOAx_k_=)+Yz)9|_5j^%sK3l}MZoH0Jy_r%jhb8Izz=5k|XRAMu6 l>z$Y}&Ztc|yi)K%Qe{=t3uQst#9uPV!v*DB?{x8pKLPP()$;%V literal 0 HcmV?d00001 diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoElitistReplacement-members.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoElitistReplacement-members.html new file mode 100644 index 000000000..f448e4a76 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoElitistReplacement-members.html @@ -0,0 +1,39 @@ + + +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, virtual]
perf2worthmoeoElitistReplacement< EOT, WorthT > [private]


Generated on Tue Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoElitistReplacement.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoElitistReplacement.html new file mode 100644 index 000000000..d5512822d --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoElitistReplacement.html @@ -0,0 +1,149 @@ + + +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 > +eoReplacement< EOT > +eoBF< eoPop< EOT > &, eoPop< EOT > &, void > +eoFunctorBase + +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, virtual]
+
+
+ +

+replacement - result in _parents +

+

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

+Implements eoBF< eoPop< EOT > &, eoPop< EOT > &, void >. +

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

+

+


The documentation for this class was generated from the following file: +
Generated on Tue Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoElitistReplacement.png b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoElitistReplacement.png new file mode 100644 index 0000000000000000000000000000000000000000..b12d591f6f47ba7811dc0555edac81bfef1175b7 GIT binary patch literal 1458 zcmb_cdpy$%6kko<61R}tMO_jqulljNw3f#vGgQoDNX3tZU9Un`dU*Aj(9C-t%cT$| zGp(f%39(jJ9vhdCQ6^SsbVtkQ-p}X$asRk~+&|7a-*Z0ab3W(s`5y8K$771}+vOn; zh$6-o(=`fs@A->g$R|&4!H!d%dloKd@syMr$yERNw@y%==2F| ztTa&Ift|-L%+CbJYDZufrlzKXw zO^0!9Gl~0P`*d1dsA8Ig6cL?HdJ3;R-DyxE&~;_B-*u;$;m1z(4bcv3V_)O-Tg>&@ zI@qatzaFp28QP>=o?|fk);|3Xx3}?0I(ToD%`P2P@_yxr4CAE@Q02Dq-!ey(1(XiN zrdvc6z-ke3@S4gRvf2MUI9 z#8zeM4c+9Ln5UI9W5VyTeCl=&lsgex12Mf_N%Kd%Uw@@iM?U0=KHg+o!=FS-_x4R1 z_WbIKY6PYJ=(+!}xNKq2U`63@sSALkqg_ESjmnF6P;%ax6PeBu-}i73?cbupe7rlw zSYQcefklTvxBl6uQg=~bnct3I%zN6e_NZOA0L7h(%^sW@v3s~lCE0BI!OD#4_S;HT zTG{{%2!1!E29(_nO+_uhV%MiBlV)S4 zRq&#rIvnY#g_{VF&@;)6Ra$t}aW>IQv%au2%wl1~bP3N$mTb{INO1dXn%d6b){gZf z@=DL{!b_^QIw$)Z@*7^|LlNZoc@k6bj(kW`=|mSNEqm{UF$z0AHe5W6>kjIpho=lV z{jqx0knacHaqQZ^G2tKdsM9I-hTA*vY71;uss56Zg6j4e!X<)zyVRrHLm(F zBw@*!HPTylt|G~PxeeTM>57dmVKmCwz@0jtk&_+J0+w|32wsv-EgPNUc zDZl*jmk5Brbp*&|!zLojVu`y>BcoI!y^N&^PG)wh0r?ot;*s_sNDnGJSQzZSGRZ>hGC + +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 Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoEntropyMetric.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoEntropyMetric.html new file mode 100644 index 000000000..daf0c80fb --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoEntropyMetric.html @@ -0,0 +1,144 @@ + + +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 > +eoBF< A1, A2, R > +moeoMetric +eoFunctorBase +eoFunctorBase + +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 Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoEntropyMetric.png b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoEntropyMetric.png new file mode 100644 index 0000000000000000000000000000000000000000..bcc3bdbfdb4a02c1793abe9f5112233919cb1fdf GIT binary patch literal 1724 zcmcJQdoa{%7{`B(Vv22x%AJm8$e}h-l(kz~xg@($NLaZ`NXpg^s~eJBjv7R4WG!V^ zD!J4y5vzpN5~3AicU@ZYW8HT5Z04MQ&dizqIy0Z|`+lEyo_S`T_jzaDB%GrSY`yw= z003ZiwiqV>kXe%Yg*CF$b^hl5Ch4Y%b2wowkw~OgBB>{lywjy_RrU4t(G8Ms(op82 zlcO_maI7}~0OXwPFo#ZDelV5id0}MR#+%g7kC6&tK=d{07lqMxLUcoeqOEPFZ-GwL zw1a+Mi)!?e@^8^vm-zGWlGB^J>hW-PcwwSC4s?qkyMo!*J`Xo%4`*t)Ph}3D=E3*k zPRF>vg;Bp(OiZlCPiw0cULhyFkCMwG_q|lr$fc$~e#gP%s|B{a z;z&Fm6ci#@!%c7zAd-wqxI0MIVV^OEr+?p%xc{u^4Tc|3d6q{h zg>!Ff0`d(BVNa3;#b(B(2RFP#f?F(`v@?0JhXjLGI#z1$(kUCAiYPd*58qD8?df5` z*JV3k6ZhF%ZPs2qQizXS2rn=*xR+sd;1jpM_>YXcie(ftgQ+HOI8=H*UuZaOmO`J! z@9LYcFZGN2W4Ik)S}|hGCa7qKNQ4Uo!_)2)A2m zAd`t_ICX{S5Kc$hN@9w7ciCd|W-N+DQE|@|prYF-Yui(YkgZk6I3=B8A?QzkzrCC+ z1Y2_eSH@@%iHKi)TQcNC>8#pD4#Cd#2-}&0tzEzi^Uqf&F*)bJz9iE==$We}nYsSw z%)#~U5fl_{0)ZxPTGGV^(lSM7MBw1<2nIyv6cw@ho6GVV8F`;|2p+;jp<_IgyJ2{iC52Q7+#) zu8@wUO7{Aa{Mc2ov{A35VoB|zkvq2Uid7in26T^KQt60To?JT=NZYYmbXhmVuJ8jV$U;Td0+~b20Atmww?|utwl%p3+wxb!ucbCjo@|?$0l`7SA09srQhsUpM?N}@UdQX@9_^|bE(DV} zGx=WyJ{*0J=$0?MyBFONO&Gm`FI(Jir-OLR3?ZJiZ_GgizDL0I%9F}gKs3YtM~-0f zWX}p4(#@OigUYWbk&a31f6iNqBmnFr1qqxd;@W!k`=CPQ;Aeb){f~ZZ1^nDSFWN70 zrw9}sE!D-JWI_xrUF_2`KKfRsqKsGydCQPV*k*boHcNZnfyxpl=gGSFs1UN~7E5y` zgZ}(w)W9aMbPKDxp!3Ii#}Cx1HSdivjtw#`h#P2ukCAAnK(@7bm#RbEur0GKzoMqH zZq%zZJ}q8N#C{}s23;c;r74?-W-j{`Q8JO6s)gqB9n%P`4kvZ2g2ZOV`5-vPn2zZ* z8?o|AD_i-kk|hk;IqNyv+riJ(TK3_nKzf~N1mWz@n+t7U_G#;wMbVWYy`i~*)^9Ku zB0W5+O>#=~NgjoQx#aTUPdU3pndfA`r9>3^2U+!+Kk){fyZ(ys=vvv$PL I4trn!3)ft9`2YX_ literal 0 HcmV?d00001 diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoHybridMOLS-members.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoHybridMOLS-members.html new file mode 100644 index 000000000..a7a394db8 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoHybridMOLS-members.html @@ -0,0 +1,48 @@ + + +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]
className(void) consteoUpdater [virtual]
eoHybridMOLS(eoContinue< EOT > &_term, eoSelect< EOT > &_select, moeoMOLS< EOT > &_mols, moeoArchive< EOT > &_arch)moeoHybridMOLS< EOT > [inline]
functor_category()eoF< void > [static]
lastCall()eoUpdater [virtual]
molsmoeoHybridMOLS< EOT > [private]
operator()()moeoHybridMOLS< EOT > [inline, virtual]
result_type typedefeoF< void >
selectmoeoHybridMOLS< EOT > [private]
termmoeoHybridMOLS< EOT > [private]
~eoF()eoF< void > [virtual]
~eoFunctorBase()eoFunctorBase [virtual]


Generated on Tue Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoHybridMOLS.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoHybridMOLS.html new file mode 100644 index 000000000..033287b4e --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoHybridMOLS.html @@ -0,0 +1,141 @@ + + +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> +

+

Inheritance diagram for moeoHybridMOLS< EOT >: +

+ +eoUpdater +eoF< void > +eoFunctorBase + +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 Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoHybridMOLS.png b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoHybridMOLS.png new file mode 100644 index 0000000000000000000000000000000000000000..134f540d415021145c0c04d9de8bd80c406a9c9c GIT binary patch literal 757 zcmVc!M2XN*fafW1aecIqGew7&%rs2Tb85=D(~NPF!>98c_Dx>vxRI;p>xtuLoSCn#r^-7<9-1O3 zdFS;+z*qBru9<0OJF~~N_;9-&@A^*j&;1(a{eHWId6m4IX{MQGnrWt)*D-tC(_ZC% z-ptJg^ZG;_>S{q#V$rHiRcpw4lmJwlswOg^uC{R1LPC`$S3jaY$XHp~Mz_sJjcFW> zIB0Vl-J55rG0EteSu@YYdP)K8)Os%RPMat5Uf;|#vz^)FTHNEF;hm<{mm0SYq?u-# zX{MQGn)%sgk9*py+|Qf2*UH01SYCdYSxOB!MA}6C7*nNLN+MJO;W~(VjOn}?bG@cK z%2R2U5>qjeA^<1MQewi#lw*FZsoLCJ&uVkbJ3XjX@{aj2rb=@%<>T#tGhb~D%Cb+t zobJOW_wuP1P=Nb;mq&RqyzV^q@f1(T=7UO)w8JOKr+q$*W{@3fyw4}HGy@1STG^yP z`lSso2Nu)usl(Fr;bD@a%(OW9Z4OOM@*uCLo+qPIGg}hTrVBxvF2MS^6FQrxE2iHu zIY+Q&uFO-drCB9<=si%MWoLq@TYP9`CR0EwblQBZJK^P ne9AoWHE`wcrOz=tT#Nq!4ncA^wcbA~00000NkvXXu0mjf1lxKr literal 0 HcmV?d00001 diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoIBEA-members.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoIBEA-members.html new file mode 100644 index 000000000..38f9dace9 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoIBEA-members.html @@ -0,0 +1,65 @@ + + +ParadisEO-MOEO: Member List + + + + +
+
+ +

moeoIBEA< EOT, Fitness > Member List

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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
calculate_worths(const eoPop< EOT > &_pop)moeoIBEA< EOT, Fitness > [inline, virtual]
defValue() consteoParam
defValue(const std::string &str)eoParam
description() consteoParam
eoParam()eoParam
eoParam(std::string _longName, std::string _default, std::string _description, char _shortName=0, bool _required=false)eoParam
eoPerf2Worth(std::string _description="Worths")eoPerf2Worth< EOT, WorthT >
eoPerf2WorthCached(std::string _description="Worths")eoPerf2WorthCached< EOT, double >
eoValueParam(void)eoValueParam< std::vector< WorthT > >
eoValueParam(std::vector< WorthT >_defaultValue, std::string _longName, std::string _description="No description", char _shortHand=0, bool _required=false)eoValueParam< std::vector< WorthT > >
functor_category()eoUF< const eoPop< EOT > &, void > [static]
getValue(void) consteoValueParam< std::vector< WorthT > > [virtual]
ImoeoIBEA< EOT, Fitness > [protected]
longName() consteoParam
moeoIBEA(moeoBinaryQualityIndicator< Fitness > *_I)moeoIBEA< EOT, Fitness > [inline]
operator()(const eoPop< EOT > &_pop)eoPerf2WorthCached< EOT, double > [virtual]
eoPerf2Worth::operator()(eoPop< EOT > &_pop)eoPerf2Worth< EOT, WorthT > [virtual]
repValueeoValueParam< std::vector< WorthT > > [protected]
required() consteoParam
resize(eoPop< EOT > &_pop, unsigned sz)eoPerf2WorthCached< EOT, double > [virtual]
setLongName(std::string _longName)eoParam
setValue(const std::string &_value)eoValueParam< std::vector< WorthT > > [virtual]
shortName() consteoParam
sort_pop(eoPop< EOT > &_pop)eoPerf2WorthCached< EOT, double > [virtual]
value()eoValueParam< std::vector< WorthT > >
value() consteoValueParam< std::vector< WorthT > >
~eoFunctorBase()eoFunctorBase [virtual]
~eoParam()eoParam [virtual]
~eoUF()eoUF< const eoPop< EOT > &, void > [virtual]


Generated on Tue Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoIBEA.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoIBEA.html new file mode 100644 index 000000000..ee63a094f --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoIBEA.html @@ -0,0 +1,111 @@ + + +ParadisEO-MOEO: moeoIBEA< EOT, Fitness > Class Template Reference + + + + +
+
+ +

moeoIBEA< EOT, Fitness > Class Template Reference

Functor The sorting phase of IBEA (Indicator-Based Evolutionary Algorithm). +More... +

+#include <moeoIBEA.h> +

+

Inheritance diagram for moeoIBEA< EOT, Fitness >: +

+ +eoPerf2WorthCached< EOT, double > +eoPerf2Worth< EOT, WorthT > +eoUF< const eoPop< EOT > &, void > +eoValueParam< std::vector< WorthT > > +eoFunctorBase +eoParam +moeoIBEASorting< EOT, Fitness > + +List of all members. + + + + + + + + + + + +

Public Member Functions

moeoIBEA (moeoBinaryQualityIndicator< Fitness > *_I)
void calculate_worths (const eoPop< EOT > &_pop)
 mapping

Protected Attributes

+moeoBinaryQualityIndicator<
+ Fitness > * 
I
 binary quality indicator to use in the selection process
+

Detailed Description

+

template<class EOT, class Fitness>
+ class moeoIBEA< EOT, Fitness >

+ +Functor The sorting phase of IBEA (Indicator-Based Evolutionary Algorithm). +

+ +

+Definition at line 28 of file moeoIBEA.h.


Member Function Documentation

+ +
+
+
+template<class EOT, class Fitness>
+ + + + + + + + + +
void moeoIBEA< EOT, Fitness >::calculate_worths (const eoPop< EOT > &  _pop  )  [inline, virtual]
+
+
+ +

+mapping +

+

Parameters:
+ + +
const eoPop<EOT>& _pop the population
+
+ +

+Implements eoPerf2WorthCached< EOT, double >. +

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

+

+


The documentation for this class was generated from the following file: +
Generated on Tue Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoIBEA.png b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoIBEA.png new file mode 100644 index 0000000000000000000000000000000000000000..2c0c9137b9b932684767b6e70cbbebd0f3cf9a56 GIT binary patch literal 2306 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 literal 0 HcmV?d00001 diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoIBEAAvgSorting-members.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoIBEAAvgSorting-members.html new file mode 100644 index 000000000..84399a0cb --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoIBEAAvgSorting-members.html @@ -0,0 +1,69 @@ + + +ParadisEO-MOEO: Member List + + + + +
+
+ +

moeoIBEAAvgSorting< EOT, FitnessEval > Member List

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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
calculate_worths(const eoPop< EOT > &_pop)moeoIBEA< EOT, FitnessEval > [inline, virtual]
defValue() consteoParam
defValue(const std::string &str)eoParam
description() consteoParam
eoParam()eoParam
eoParam(std::string _longName, std::string _default, std::string _description, char _shortName=0, bool _required=false)eoParam
eoPerf2Worth(std::string _description="Worths")eoPerf2Worth< EOT, WorthT >
eoPerf2WorthCached(std::string _description="Worths")eoPerf2WorthCached< EOT, double >
eoValueParam(void)eoValueParam< std::vector< WorthT > >
eoValueParam(std::vector< WorthT >_defaultValue, std::string _longName, std::string _description="No description", char _shortHand=0, bool _required=false)eoValueParam< std::vector< WorthT > >
fitnesses(const eoPop< EOT > &_pop)moeoIBEAAvgSorting< EOT, FitnessEval > [inline, private, virtual]
functor_category()eoUF< const eoPop< EOT > &, void > [static]
getValue(void) consteoValueParam< std::vector< WorthT > > [virtual]
ImoeoIBEA< EOT, FitnessEval > [protected]
kappamoeoIBEAAvgSorting< EOT, FitnessEval > [private]
longName() consteoParam
moeoIBEA(moeoBinaryQualityIndicator< FitnessEval > *_I)moeoIBEA< EOT, FitnessEval > [inline]
moeoIBEAAvgSorting(moeoBinaryQualityIndicator< FitnessEval > *_I, const double _kappa)moeoIBEAAvgSorting< EOT, FitnessEval > [inline]
operator()(const eoPop< EOT > &_pop)eoPerf2WorthCached< EOT, double > [virtual]
eoPerf2Worth::operator()(eoPop< EOT > &_pop)eoPerf2Worth< EOT, WorthT > [virtual]
repValueeoValueParam< std::vector< WorthT > > [protected]
required() consteoParam
resize(eoPop< EOT > &_pop, unsigned sz)eoPerf2WorthCached< EOT, double > [virtual]
setBounds(const eoPop< EOT > &_pop)moeoIBEAAvgSorting< EOT, FitnessEval > [inline, private, virtual]
setLongName(std::string _longName)eoParam
setValue(const std::string &_value)eoValueParam< std::vector< WorthT > > [virtual]
shortName() consteoParam
sort_pop(eoPop< EOT > &_pop)eoPerf2WorthCached< EOT, double > [virtual]
value()eoValueParam< std::vector< WorthT > >
value() consteoValueParam< std::vector< WorthT > >
~eoFunctorBase()eoFunctorBase [virtual]
~eoParam()eoParam [virtual]
~eoUF()eoUF< const eoPop< EOT > &, void > [virtual]


Generated on Tue Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoIBEAAvgSorting.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoIBEAAvgSorting.html new file mode 100644 index 000000000..b1e460dde --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoIBEAAvgSorting.html @@ -0,0 +1,195 @@ + + +ParadisEO-MOEO: moeoIBEAAvgSorting< EOT, FitnessEval > Class Template Reference + + + + +
+
+ +

moeoIBEAAvgSorting< EOT, FitnessEval > Class Template Reference

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. +More... +

+#include <moeoIBEA.h> +

+

Inheritance diagram for moeoIBEAAvgSorting< EOT, FitnessEval >: +

+ +moeoIBEA< EOT, FitnessEval > +eoPerf2WorthCached< EOT, double > +eoPerf2Worth< EOT, WorthT > +eoUF< const eoPop< EOT > &, void > +eoValueParam< std::vector< WorthT > > +eoFunctorBase +eoParam + +List of all members. + + + + + + + + + + + + + + + + +

Public Member Functions

 moeoIBEAAvgSorting (moeoBinaryQualityIndicator< FitnessEval > *_I, const double _kappa)
 constructor

Private Member Functions

void setBounds (const eoPop< EOT > &_pop)
 computation and setting of the bounds for each objective
void fitnesses (const eoPop< EOT > &_pop)
 computation and setting of the fitness for each individual of the population

Private Attributes

+double kappa
 scaling factor kappa
+

Detailed Description

+

template<class EOT, class FitnessEval = typename EOT::Fitness::FitnessEval>
+ class moeoIBEAAvgSorting< EOT, FitnessEval >

+ +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. +

+ +

+Definition at line 361 of file moeoIBEA.h.


Constructor & Destructor Documentation

+ +
+
+
+template<class EOT, class FitnessEval = typename EOT::Fitness::FitnessEval>
+ + + + + + + + + + + + + + + + + + +
moeoIBEAAvgSorting< EOT, FitnessEval >::moeoIBEAAvgSorting (moeoBinaryQualityIndicator< FitnessEval > *  _I,
const double  _kappa 
) [inline]
+
+
+ +

+constructor +

+

Parameters:
+ + + +
eoBinaryQualityIndicator<EOT>* _I the binary quality indicator to use in the selection process
double _kappa scaling factor kappa
+
+ +

+Definition at line 373 of file moeoIBEA.h. +

+References moeoIBEAAvgSorting< EOT, FitnessEval >::kappa. +

+

+


Member Function Documentation

+ +
+
+
+template<class EOT, class FitnessEval = typename EOT::Fitness::FitnessEval>
+ + + + + + + + + +
void moeoIBEAAvgSorting< EOT, FitnessEval >::setBounds (const eoPop< EOT > &  _pop  )  [inline, private, virtual]
+
+
+ +

+computation and setting of the bounds for each objective +

+

Parameters:
+ + +
const eoPop<EOT>& _pop the population
+
+ +

+Implements moeoIBEA< EOT, FitnessEval >. +

+Definition at line 398 of file moeoIBEA.h. +

+References moeoIBEA< EOT, FitnessEval >::I, and moeoBinaryQualityIndicator< EOFitness >::setBounds(). +

+

+ +

+
+
+template<class EOT, class FitnessEval = typename EOT::Fitness::FitnessEval>
+ + + + + + + + + +
void moeoIBEAAvgSorting< EOT, FitnessEval >::fitnesses (const eoPop< EOT > &  _pop  )  [inline, private, virtual]
+
+
+ +

+computation and setting of the fitness for each individual of the population +

+

Parameters:
+ + +
const eoPop<EOT>& _pop the population
+
+ +

+Implements moeoIBEA< EOT, FitnessEval >. +

+Definition at line 431 of file moeoIBEA.h. +

+References moeoIBEAAvgSorting< EOT, FitnessEval >::kappa, and eoValueParam< std::vector< WorthT > >::value(). +

+

+


The documentation for this class was generated from the following file: +
Generated on Tue Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoIBEAAvgSorting.png b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoIBEAAvgSorting.png new file mode 100644 index 0000000000000000000000000000000000000000..865d40459d71e4af8cc34279310cd11e8a5233b9 GIT binary patch literal 2615 zcmcJRYdF-~9>)iv{?tzM&oydjGY-vmDIqhMh8bdvp;Sf@l}m}n6mp%KOs+%1Cb^AE zZe5(pTymKdC1Qkfi4=orLaxc>%;`DjyxM!8H|M-q&-(t>i}kGE=lQJltQ!P8b~B&~ zKp>FKb~p?X0+AGF34;w%;+5TF7z6R7OmJ|uSzlil$MyAwygW~aIQ<+A4GmX#>z~D? zL|rg4nQu(x?Y4uiB?m#E?$YT;u&X% z)EN^Waua2}JD0C{z7n=`R(g*qm2qxFN4l-<0ogg@fiWNsrm~9$buoAWTCxWG^Ngo8 zX*$h=S*C&c8r`Euo=h#%W0iC*%)Y*8l92jpA{+R*D)D@7jjy3%TMsWOgn^Qkw>Sjj zbO!Hx4#8Hp&w>wgx*OYWhMhTMaj>yvJI?Cu)ucs1 zRrk6+&9pkDsNWL*(ZthC$saH`4t69x3XcjHJ_gX#N-tmkt^gdlHya6Dv`PLRdK!@) z$ZcEv6pVa|s9ov^gohkeipoMiz?$kQ-q#muz!pn6RgRYR*iaQW+x1OAG`e(kaHdTL z7Yn9I5O>jhem1L2MKA7ej0@FSJ50+=nU#k=9#fly2clxHGWp1#SWa=_{2#)@F8>$V6tHEQBU8sFWFZp=zSgU!_F@4DGAaU z{a7BCbhOw?a~G3Tl@2D_{W9-~r$!1%^xuY@;T{n-jhSHLOx-z0?~)BC{fyK#lf6=x+ulEn zxX`T(0A_h*64t^1;6s_5H$P}*6Z8$4j5Uq)TY1?Rj}B7-fKF(vp_&H=5t9R|0O^ki!A?!8C{{_VcuZxxi3 z79GZ&&a06etVOZxx1y8H7P4Yfvo!LjDVfLM5od>`;M_)tE(2|31uz-%^40}Ea)u9b zq3h+mR&40ie`?qfw(=E*65r*oGWlP%m*bWYQd#4HkjV>$i%W(7-O)Ld=_?y3rPJ)F zc@u+cI0;Q@I=G7%^G9J>9*Cx_ZG2(*RD!-X`6GCT6TlQ7D+mPy)DkC&qN|Y)GCOeu z`vZMD_V8cFe=i3{m%tvbExuweymCU*Jp=)dP8m(Rbrs_-p#(vG$oU7ucPL?I2mUti}r29VA{`4$Sa z!f+o=m|=Z3FS{>-j#hit0AAc`ock#|cJK{NofbM)nkQE^nYtMevI!!E^MJrzseCdu z{D}7RiPq2}_-Y+t%}MrL{80Z$vZ)$PKrzi&ya6Wns;**yW}Ba#SpiZm!v|(AbevtO zcwM0>Jq|^&mf5(ERGjaW!}vx`X$3dzpVImZkm8+;;nOZVwpw;drAlIet-4lBhzJhO z?@rnufN2tthO?6gP`+)Hi@U(Cg#oXw`)T3{wE46#e$P)MDLVc2B++Qizt&!R*P0pZrxp0ZI^ChXt z=}`!`I{iiZ!}ekg+@dr&8#yu)jAoaV%6|HXL7rQ>#r>#gInvHinL?UKoqMowYfs4U^Wq20uJ$`K0O)_qdx zvBn)5_2#TeKxm1h7nH#hGX0CW+oH(}Ew|IC`}$wIm7B%au%Nf!veQkTHdSq^1YelD z?L!GfsP(hN+G%_c@y>~pn)?swPiIYX?o=3gmoOwV!Vt=zret);Nkp%VuNwz2h7s>y z7@(x50sta;`a}@_9vODY5&Xgu@Gg0Dyh^xCy;;ZB;f?Dh{|PflsGS?+y3&nz+nb1MY*9HSDSYDK#llGP z*~2~{eWmQYFZUqq5*z1)^wAhw2)BH{L=WZ6GGh@>vw>a-O z9H=+}%5pLCpPcE4URHjo4{wGU`A_kVNg;|<2GHA z8aP6#9VlgJucg8Dz2DG8?E6GUh79eZ$2*b2sB;%P|Hte5Li8hS6Q!UqX0^dLuGWi` zfYe;AV_1!6-f%~AwU|)zlh^?*4cFG73Q@ZMpOAC7jgeeO{Jg1VrQh iW9C(Y>H2}0b*WRd@sNH4?GW)V4`OG7$5f*|ss8}Iv8X5j literal 0 HcmV?d00001 diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoIBEASorting-members.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoIBEASorting-members.html new file mode 100644 index 000000000..eb270232e --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoIBEASorting-members.html @@ -0,0 +1,69 @@ + + +ParadisEO-MOEO: Member List + + + + +
+
+ +

moeoIBEASorting< EOT, Fitness > Member List

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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
calculate_worths(const eoPop< EOT > &_pop)moeoIBEA< EOT, Fitness > [inline, virtual]
defValue() consteoParam
defValue(const std::string &str)eoParam
description() consteoParam
eoParam()eoParam
eoParam(std::string _longName, std::string _default, std::string _description, char _shortName=0, bool _required=false)eoParam
eoPerf2Worth(std::string _description="Worths")eoPerf2Worth< EOT, WorthT >
eoPerf2WorthCached(std::string _description="Worths")eoPerf2WorthCached< EOT, double >
eoValueParam(void)eoValueParam< std::vector< WorthT > >
eoValueParam(std::vector< WorthT >_defaultValue, std::string _longName, std::string _description="No description", char _shortHand=0, bool _required=false)eoValueParam< std::vector< WorthT > >
fitnesses(const eoPop< EOT > &_pop)moeoIBEASorting< EOT, Fitness > [inline, private, virtual]
functor_category()eoUF< const eoPop< EOT > &, void > [static]
getValue(void) consteoValueParam< std::vector< WorthT > > [virtual]
ImoeoIBEA< EOT, Fitness > [protected]
kappamoeoIBEASorting< EOT, Fitness > [private]
longName() consteoParam
moeoIBEA(moeoBinaryQualityIndicator< Fitness > *_I)moeoIBEA< EOT, Fitness > [inline]
moeoIBEASorting(moeoBinaryQualityIndicator< Fitness > *_I, const double _kappa)moeoIBEASorting< EOT, Fitness > [inline]
operator()(const eoPop< EOT > &_pop)eoPerf2WorthCached< EOT, double > [virtual]
eoPerf2Worth::operator()(eoPop< EOT > &_pop)eoPerf2Worth< EOT, WorthT > [virtual]
repValueeoValueParam< std::vector< WorthT > > [protected]
required() consteoParam
resize(eoPop< EOT > &_pop, unsigned sz)eoPerf2WorthCached< EOT, double > [virtual]
setBounds(const eoPop< EOT > &_pop)moeoIBEASorting< EOT, Fitness > [inline, private, virtual]
setLongName(std::string _longName)eoParam
setValue(const std::string &_value)eoValueParam< std::vector< WorthT > > [virtual]
shortName() consteoParam
sort_pop(eoPop< EOT > &_pop)eoPerf2WorthCached< EOT, double > [virtual]
value()eoValueParam< std::vector< WorthT > >
value() consteoValueParam< std::vector< WorthT > >
~eoFunctorBase()eoFunctorBase [virtual]
~eoParam()eoParam [virtual]
~eoUF()eoUF< const eoPop< EOT > &, void > [virtual]


Generated on Tue Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoIBEASorting.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoIBEASorting.html new file mode 100644 index 000000000..38ee8e396 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoIBEASorting.html @@ -0,0 +1,195 @@ + + +ParadisEO-MOEO: moeoIBEASorting< EOT, Fitness > Class Template Reference + + + + +
+
+ +

moeoIBEASorting< EOT, Fitness > Class Template Reference

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. +More... +

+#include <moeoIBEA.h> +

+

Inheritance diagram for moeoIBEASorting< EOT, Fitness >: +

+ +moeoIBEA< EOT, Fitness > +eoPerf2WorthCached< EOT, double > +eoPerf2Worth< EOT, WorthT > +eoUF< const eoPop< EOT > &, void > +eoValueParam< std::vector< WorthT > > +eoFunctorBase +eoParam + +List of all members. + + + + + + + + + + + + + + + + +

Public Member Functions

 moeoIBEASorting (moeoBinaryQualityIndicator< Fitness > *_I, const double _kappa)
 constructor

Private Member Functions

void setBounds (const eoPop< EOT > &_pop)
 computation and setting of the bounds for each objective
void fitnesses (const eoPop< EOT > &_pop)
 computation and setting of the fitness for each individual of the population

Private Attributes

+double kappa
 scaling factor kappa
+

Detailed Description

+

template<class EOT, class Fitness = typename EOT::Fitness>
+ class moeoIBEASorting< EOT, Fitness >

+ +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. +

+ +

+Definition at line 84 of file moeoIBEA.h.


Constructor & Destructor Documentation

+ +
+
+
+template<class EOT, class Fitness = typename EOT::Fitness>
+ + + + + + + + + + + + + + + + + + +
moeoIBEASorting< EOT, Fitness >::moeoIBEASorting (moeoBinaryQualityIndicator< Fitness > *  _I,
const double  _kappa 
) [inline]
+
+
+ +

+constructor +

+

Parameters:
+ + + +
eoBinaryQualityIndicator<EOT>* _I the binary quality indicator to use in the selection process
double _kappa scaling factor kappa
+
+ +

+Definition at line 96 of file moeoIBEA.h. +

+References moeoIBEASorting< EOT, Fitness >::kappa. +

+

+


Member Function Documentation

+ +
+
+
+template<class EOT, class Fitness = typename EOT::Fitness>
+ + + + + + + + + +
void moeoIBEASorting< EOT, Fitness >::setBounds (const eoPop< EOT > &  _pop  )  [inline, private, virtual]
+
+
+ +

+computation and setting of the bounds for each objective +

+

Parameters:
+ + +
const eoPop<EOT>& _pop the population
+
+ +

+Implements moeoIBEA< EOT, Fitness >. +

+Definition at line 121 of file moeoIBEA.h. +

+References moeoIBEA< EOT, Fitness >::I, and moeoBinaryQualityIndicator< EOFitness >::setBounds(). +

+

+ +

+
+
+template<class EOT, class Fitness = typename EOT::Fitness>
+ + + + + + + + + +
void moeoIBEASorting< EOT, Fitness >::fitnesses (const eoPop< EOT > &  _pop  )  [inline, private, virtual]
+
+
+ +

+computation and setting of the fitness for each individual of the population +

+

Parameters:
+ + +
const eoPop<EOT>& _pop the population
+
+ +

+Implements moeoIBEA< EOT, Fitness >. +

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

+References moeoIBEASorting< EOT, Fitness >::kappa, and eoValueParam< std::vector< WorthT > >::value(). +

+

+


The documentation for this class was generated from the following file: +
Generated on Tue Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoIBEASorting.png b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoIBEASorting.png new file mode 100644 index 0000000000000000000000000000000000000000..a3fac48f001d400be3c1a059e9e243b80ae2f775 GIT binary patch literal 2294 zcmb_ec{JN=8cwRMTB~Chw5m-pT3o8PqO>Zu+8R`is}f4aO+qa<)utHK&e%#VjkG0b zV@b3Lr3hI{wbW96N|>l_S47>Bq%Dz2@1HaGoH=LCob$Zj_rA~hzVp5BbDlrGJbzzz zHDv>35D28^>EVh1fxrTJSnpJjGdW+v73G_rzjq*9CX>linT$yyAxq@h@4;j;34^j_ zc?nKJ_y&MZzXzg0pgo12u4e+1@2nET%2v!&vpjuXr`QWX(Fy^!klzB<(v%|EBv3gJ zZ*Zkyva{@Q(LR!m*CM;=&^DwYjosMq2G^C<*dzd%8M2o^3I~vKfSf~Q*ZxmkLBzk` z*cFPdPdP9jxHB+~Q>Ke)Ya;fmNxY zOI+Q);x5aTjYlZ03Kbvz*4WLXBt(yEAr}$gJlO&ApA=XT&Iv1wn81sp!HykbV980 zS6f*JRk*^o|Gd;sJ|EulXm3mZ&_d535GL=bA~I9dfcn)1Lecq$dO5QCbY0${(>-r| zK}ufhjoeov&CM+P3KOq)o0GgPB(gLr90n9!RPLV=IT78A9Votw<^smdiY1;G!1Ud= zu(RtQzuw1$mRRm|5O|ykIysTsdM5@$061depa)qJ?fB2@=~C|pe^YeNJo3^W4j{25 ze{!2;j&23Dtvx;uhq>7mvW?s*2B8L-bxY^ph#o2nPS@Po@6&!8qFw0DuXL~zovF`* ze>;C4HN2Z~E0yGS)?N=%Jz#iqCkau5yPDkL(pY*}cnX_I!?XwMRdkx5ScPkY_2wAY z4d-q>9mm~*kL?-04dzsOK|u9@qsuR)=Vk__jpKGuVeTp{YkKrGnP(r6+`9zVqOO|s zk)Mfu41he?C}RM4jdh=%P;HDfco+?X_U-7Y!)a2-;jwscKd^G-X608bVQS`)6pK4T z3Bql7V<1rpY2%Gj>_x2x?ACD~CBmr+7F#YMh^`_f>3@hCI{)y2~AaOZ# zu~6#T$?1b~g;rdlrF<2q_ul(%EY4znlDhY#23)JQ*(Bf0e*6{}P+$YZKXTAF{f8)E z#xAxyJD+Br_wQJ1B&1rU84-Xmy~3A(96V}ykg7MF4j=Bc*ow56&k#zLJAz`c2tkq` zAz^X~s7PyJ$1ZRjA^2GBM{bsyL_?rjn`VnCQf{6 zQR!jU@%j~&6a+R-J8`Dv;Zd*6Z5poZcn60~MkJ197qvuyja1K_#E&>nGuxh^S)(lx z=I#|b3o{y&x*4Q{$+NL`v02#6WuiG34$G=f)ijiNqqQ)UR0D_ok8- z$8|!te=`syMqs(oatMl1lUvL$`LSCfruIILaST=8tOigp@-dYQ_p?_d)+^$_q1(oO zyj}EQfj#hDoWjU{5F-4b>`7Kj=B?YOgQ$RkBhn>FM4oba)on zEYds&)&^)vC2=d5z?Zp4GixVnC} z%;29d(>zR{<^;DL`)d=6aJ_PvwTVA;wR+y^WzDd2>&*M+c6RFO%}p=C%pc3y7?XQ2 z-)HK(3I7)@lW4@eoj>heU*JE~(wo}r@KfxPF>p`0YV-yYZf>1;|2g*-@Z8109sJ`i z13=D%T6)9NfJ?)7hH2yrPfXZ{(!42Jdf3z3)^Vp|sD62^N&HMD3`Es*lgw;T#ao5{ zJdBIG;#XvppUIhJKn%#tEv%w$*wZ1&lP0b@XJChYRjQoSVAu@rPkJ_cY=$8@Ev($Z z0#00-3xP^7kl9-l1X4Xz{-~Pm*ASw`F7a{TgI9Wrni%qb6GVJgeFBM%h*!)(W4-wL zgpSW6mG5wk;f&k%@2uhp3+fXc7>l>r9piajr#7@;2b=^HAjy30No-{o`r7zI!?Eo2@%$bZMmi1Qyj1sA}(?#-dQ zQl*)1XP=3S?m|8uMw9l;scE2c=)IsyLN>84%QT%_NF%e0mN=w%zuaCm7zyWr5#B&z z$Hr?`Ii#-S(nz5aEgg( + +ParadisEO-MOEO: Member List + + + + +
+
+ +

moeoIBEAStochSorting< EOT, FitnessEval > Member List

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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
calculate_worths(const eoPop< EOT > &_pop)moeoIBEA< EOT, FitnessEval > [inline, virtual]
defValue() consteoParam
defValue(const std::string &str)eoParam
description() consteoParam
eoParam()eoParam
eoParam(std::string _longName, std::string _default, std::string _description, char _shortName=0, bool _required=false)eoParam
eoPerf2Worth(std::string _description="Worths")eoPerf2Worth< EOT, WorthT >
eoPerf2WorthCached(std::string _description="Worths")eoPerf2WorthCached< EOT, double >
eoValueParam(void)eoValueParam< std::vector< WorthT > >
eoValueParam(std::vector< WorthT >_defaultValue, std::string _longName, std::string _description="No description", char _shortHand=0, bool _required=false)eoValueParam< std::vector< WorthT > >
fitnesses(const eoPop< EOT > &_pop)moeoIBEAStochSorting< EOT, FitnessEval > [inline, private, virtual]
functor_category()eoUF< const eoPop< EOT > &, void > [static]
getValue(void) consteoValueParam< std::vector< WorthT > > [virtual]
ImoeoIBEA< EOT, FitnessEval > [protected]
longName() consteoParam
moeoIBEA(moeoBinaryQualityIndicator< FitnessEval > *_I)moeoIBEA< EOT, FitnessEval > [inline]
moeoIBEAStochSorting(moeoBinaryQualityIndicator< FitnessEval > *_I)moeoIBEAStochSorting< EOT, FitnessEval > [inline]
operator()(const eoPop< EOT > &_pop)eoPerf2WorthCached< EOT, double > [virtual]
eoPerf2Worth::operator()(eoPop< EOT > &_pop)eoPerf2Worth< EOT, WorthT > [virtual]
repValueeoValueParam< std::vector< WorthT > > [protected]
required() consteoParam
resize(eoPop< EOT > &_pop, unsigned sz)eoPerf2WorthCached< EOT, double > [virtual]
setBounds(const eoPop< EOT > &_pop)moeoIBEAStochSorting< EOT, FitnessEval > [inline, private, virtual]
setLongName(std::string _longName)eoParam
setValue(const std::string &_value)eoValueParam< std::vector< WorthT > > [virtual]
shortName() consteoParam
sort_pop(eoPop< EOT > &_pop)eoPerf2WorthCached< EOT, double > [virtual]
value()eoValueParam< std::vector< WorthT > >
value() consteoValueParam< std::vector< WorthT > >
zero()moeoIBEAStochSorting< EOT, FitnessEval > [inline, private, static]
~eoFunctorBase()eoFunctorBase [virtual]
~eoParam()eoParam [virtual]
~eoUF()eoUF< const eoPop< EOT > &, void > [virtual]


Generated on Tue Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoIBEAStochSorting.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoIBEAStochSorting.html new file mode 100644 index 000000000..54e138a2e --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoIBEAStochSorting.html @@ -0,0 +1,183 @@ + + +ParadisEO-MOEO: moeoIBEAStochSorting< EOT, FitnessEval > Class Template Reference + + + + +
+
+ +

moeoIBEAStochSorting< EOT, FitnessEval > Class Template Reference

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. +More... +

+#include <moeoIBEA.h> +

+

Inheritance diagram for moeoIBEAStochSorting< EOT, FitnessEval >: +

+ +moeoIBEA< EOT, FitnessEval > +eoPerf2WorthCached< EOT, double > +eoPerf2Worth< EOT, WorthT > +eoUF< const eoPop< EOT > &, void > +eoValueParam< std::vector< WorthT > > +eoFunctorBase +eoParam + +List of all members. + + + + + + + + + + + + + + + + +

Public Member Functions

 moeoIBEAStochSorting (moeoBinaryQualityIndicator< FitnessEval > *_I)
 constructor

Private Member Functions

void setBounds (const eoPop< EOT > &_pop)
 computation and setting of the bounds for each objective
void fitnesses (const eoPop< EOT > &_pop)
 computation and setting of the fitness for each individual of the population

Static Private Member Functions

+static double zero ()
 approximated zero value
+

Detailed Description

+

template<class EOT, class FitnessEval = typename EOT::Fitness::FitnessEval>
+ class moeoIBEAStochSorting< EOT, FitnessEval >

+ +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. +

+ +

+Definition at line 203 of file moeoIBEA.h.


Constructor & Destructor Documentation

+ +
+
+
+template<class EOT, class FitnessEval = typename EOT::Fitness::FitnessEval>
+ + + + + + + + + +
moeoIBEAStochSorting< EOT, FitnessEval >::moeoIBEAStochSorting (moeoBinaryQualityIndicator< FitnessEval > *  _I  )  [inline]
+
+
+ +

+constructor +

+

Parameters:
+ + +
eoBinaryQualityIndicator<EOT>* _I the binary quality indicator to use in the selection process
+
+ +

+Definition at line 214 of file moeoIBEA.h. +

+

+


Member Function Documentation

+ +
+
+
+template<class EOT, class FitnessEval = typename EOT::Fitness::FitnessEval>
+ + + + + + + + + +
void moeoIBEAStochSorting< EOT, FitnessEval >::setBounds (const eoPop< EOT > &  _pop  )  [inline, private, virtual]
+
+
+ +

+computation and setting of the bounds for each objective +

+

Parameters:
+ + +
const eoPop<EOT>& _pop the population
+
+ +

+Implements moeoIBEA< EOT, FitnessEval >. +

+Definition at line 243 of file moeoIBEA.h. +

+References moeoIBEA< EOT, FitnessEval >::I, and moeoBinaryQualityIndicator< EOFitness >::setBounds(). +

+

+ +

+
+
+template<class EOT, class FitnessEval = typename EOT::Fitness::FitnessEval>
+ + + + + + + + + +
void moeoIBEAStochSorting< EOT, FitnessEval >::fitnesses (const eoPop< EOT > &  _pop  )  [inline, private, virtual]
+
+
+ +

+computation and setting of the fitness for each individual of the population +

+

Parameters:
+ + +
const eoPop<EOT>& _pop the population
+
+ +

+Implements moeoIBEA< EOT, FitnessEval >. +

+Definition at line 272 of file moeoIBEA.h. +

+References eoValueParam< std::vector< WorthT > >::value(), and moeoIBEAStochSorting< EOT, FitnessEval >::zero(). +

+

+


The documentation for this class was generated from the following file: +
Generated on Tue Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoIBEAStochSorting.png b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoIBEAStochSorting.png new file mode 100644 index 0000000000000000000000000000000000000000..bdd99113ffc6fc8d3d5c8a500fcbdf54b96592cd GIT binary patch literal 2623 zcmb7Gc{tQtA0Jd>$%KUPlgg4zu4%FShAvI^ZH%RcEK%0MC}T>5q)8Y{xfFAU#z+}7 zNko>6X08+oV@+A_EE1xHZeF=Py*=;qyzhP9KhASL=llJh?{l8-`Fua;q@W$Gq$QOl zArOePjrCy+1R|;mfr#j@6I->w+^eaplM>qA)na93WfiWhG*hX*nX71RG&eV&Ygw6C zU5Z3u99jakv^&o`6=7)(@7$4ev?f7I|2 z2~Xmy^Uh_5)H4$}=Hf@DRZPDM6XMl2$5Xs4-pp10N-Z9r-mUeugsd!pl!_I?e5o*h z`^EfrySE*?5B7}~-h4IPok)5+k1>o`Qh@S;QU^JfKsX3>*(QGO_w!&NOU|F=7n(%w zSAQ_jq7B+JwhP3aycnG`CI}V6I%s!=8;KBXBXh#)r_;h3A zJttC%>EY)ZfIFLv9*_XX`m;U=Uv3>_Spwa%eGOuS;#AFrtL0)t+F)ANi0mCHu;s$9 z#Vi5;XtyjU=lPKts|HpXEO+ILF+e98xT5 z#}n#(+3UK#NoB+Lykrun#iC`(DiHp%>jF#XLJfJ5G3^e7dL9BauL=UBPyq()8@3Z| zd?`9)$elvymye>HkG+kGmdR+g9+`G?H?TZg-pe9~a$+NbJouN3;QoG3B6tb*A%jlX zpwq2z=-9l}$iPF`c-&%U->Kj-v?C2AeeJ|hh`WKCQfL*y?v?{RLA8G$CeqE1Fu)M# zTMiogNR$#>j}J!SwE~Rn-dUIBTF2bJx5%tu^?_4ZY&m+z4FVc%upJtT5Al4uyN&BYEVO*%*&^G3eH3iiF#obmL5OH-S4FDzk!5I{Dd}1;RW!-V^XSv2&>}F>y%d z_@Xh*JwTYD=w~CgNoZ$i>v^g521JN-@!zlQ|7!Mb-tCq5hbY16W|Dn(V4tbVI0EySJLi0(=| ziFq0Mfh3t&rK#FhelU7TRRD=eQH&NP^n9u7`q;K90hEE!e{TAJ=*~4^_&cV#JZe^` z2Wi^4{znDjyi%=<10&aP8J&n1*;m4-t!;RgP!km1(P}??se|B}VwJ9&2$LdR1|Kzg zJDeuE0Vgq@(vO!Iv|>M(Y`Zb^-W5i9l#zZ(_Xc+G0T=O)J3s}k3YphRDiP>n_%62RBszn*ZqcPIRmX`lV*GDiDjFg2~_V`kjj)N`4*3@Dna|}YOdE> zrOw-s_F=6&%Ip)DF(mTc>I`oJk6)pkxmcwX^zf*Fw0HfCVuODG%?GI9;mg2BVKC-a zMxHHM!vgPGKLs>qQi(UP8Lj4ZEp69uT-wbNpk2KF=^s4(FFr7R!E0hBnq1o|ZbnC9+ zd5!z*AhbJqBxGk<@Zy$jxm`uwFQ-Oi6&Uu1bQ@5o+dlhA^c}&}OpWgaqdYu%Wydpg zufA{x9~o=`X0#e;08%5l(MTe!oTi4AmLksp4=@)o4(=wDVs@d|3HWZOCF{S3bqHAg)GBLa8B;||A z7&bqA^Ni8>!v5hH_H3pK>2)>~>WVZjim`(}Pz?1sBkySzHK4sPulff4z4I zV(JJx8Ay|ILUtoAB~cxhe8*5_JK;{1FqA;2Xf){Agbu@5xV6{X+n0?9i@qH1LYs45 zd^i%7w_RLqY1ZOF85L%1MTyuD{i= zpF$ literal 0 HcmV?d00001 diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoMOLS.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoMOLS.html new file mode 100644 index 000000000..e2a3284c7 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoMOLS.html @@ -0,0 +1,62 @@ + + +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 >: +

+ +eoBF< const EOT &, moeoArchive< EOT > &, void > +eoFunctorBase +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 Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoMOLS.png b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoMOLS.png new file mode 100644 index 0000000000000000000000000000000000000000..e3241c9a14262ccef667b997b093b92c83a9254b GIT binary patch literal 1421 zcmeAS@N?(olHy`uVBq!ia0y~yU~~Yo53n!;$@a?SUxAcFfKQ0)|NsAi%>Vxn%%7hy z0muU50|yRNANv0U$Ym@E@(X5gcy=R=fq_-o)5S5QV$R#S(Rq(81YFn7|5;YZzVzn7 zFKv1k9KP*u5uCqB&TpabHhty~44t{N7WI4UuyW4)^!WM%n}5;m&+cp9I3bd=w0%KG zNdJ~CyPi$FZr9{4sJpi6?XTx1oUg=o>iX%uun2t~edK4_^F0YK1b!8;?7g~dBJ12^ zV(WDjn?5ewc4Slgf)l!aE$=rzwpZDNdfcpmx3IC1#OXViLnB1i2_Izu?jQQ&{ zBX^y3^ew;ZIl+p3wN9A0%{H;#NSS8~x`HeT@Iz&0)7b{y1jcO*tT&j%61XEM;8gLS_{Y5T=#P4) zc}=-MCuBM9FIlg@ZTF938|>A-ac2KnFZOHezT#V(g~BKP%_{n8Rdx49P!wO&eVzNe zzbt)t?C3lFYb#^(_VX<()UmZI|GY~5;D>GJnpR$X-^SVfA~NWFQ{6_}uYBFF^=g(T ze|Gw#x8mkUr5V@X{QdRUal;$46S1jxr5~?rmO1FPVNR0gZ^li%?-j3Z%q(t=VZFTb z?DC5HUj?F`C~0JJcdkjDvnN~W{6VXxRN*V@0$E~j3Qb~tydY8iwA{fJ&-9u;iZ0>k zx*|B`tICRZdQE!#b678%&H5l$?sz}DI!*pdL6>RSWt&L8rh6)`1-5e@6|-Ew9UK#v z(*GdpQLRYH*9Fr#rdbw?-BJE=S0;wPc*Cir>FN((iijWlqA~x24KTW{P09VOvS)s? zWuoh=C#P1*_DwI{&-cty7Ar#>_t&iAH%ylOOmuJ~4Wyf$)Kf-*2w z$u)WZxh15>^DIAk_le@)-@b@0x>r7V7&&N}~5f3;qJ#b%eMCJ`2gi$r7YS%tsntlB=kDNfJhmt}*k=yXy{?*@iHurw~x3XltJ)>#u9?cb@TW2I+WSQO- zc%({drJl3RlXX|l+!tDNdZSFduE@*@tK?4Z3SYQG)AX`;K&kFj4U?;zIapKowAH`4 zRIJCjjQ{k?ly}}|ON2{;u6`=el+rWluGiVA)e+o#Z)KCGrd>&V*0R|TUgfcR7k|AI zSfKkgI}fN@TxV)#9?R$Ab61;QmoH8G#htd%`rxH7&MeK}MbTN$^f{jOC*HDe@qG3C zOHk;G+d;;)tlxF`u5X@j)-PCW`6T0)k7qsl>VGIypT96VYuR*#esD;pa&7y>%wqk2 d+KsvY83UW*)E-XODgc(944$rjF6*2UngGE2mvjIC literal 0 HcmV?d00001 diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoMetric.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoMetric.html new file mode 100644 index 000000000..91ecb8d04 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoMetric.html @@ -0,0 +1,63 @@ + + +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: +

+ +eoFunctorBase +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 Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoMetric.png b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoMetric.png new file mode 100644 index 0000000000000000000000000000000000000000..a11119d0a79ec6c21480499dbd22da994def8c0e GIT binary patch literal 5840 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 literal 0 HcmV?d00001 diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoNDSorting__II-members.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoNDSorting__II-members.html new file mode 100644 index 000000000..9d02d4345 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoNDSorting__II-members.html @@ -0,0 +1,68 @@ + + +ParadisEO-MOEO: Member List + + + + +
+
+ +

moeoNDSorting_II< EOT > Member List

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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
calculate_worths(const eoPop< EOT > &_pop)eoNDSorting< EOT > [virtual]
defValue() consteoParam
defValue(const std::string &str)eoParam
description() consteoParam
double_index_pair typedefmoeoNDSorting_II< EOT >
eoNDSorting(bool nasty_flag_=false)eoNDSorting< EOT >
eoParam()eoParam
eoParam(std::string _longName, std::string _default, std::string _description, char _shortName=0, bool _required=false)eoParam
eoPerf2Worth(std::string _description="Worths")eoPerf2Worth< EOT, WorthT >
eoPerf2WorthCached(std::string _description="Worths")eoPerf2WorthCached< EOT, double >
eoValueParam(void)eoValueParam< std::vector< WorthT > >
eoValueParam(std::vector< WorthT >_defaultValue, std::string _longName, std::string _description="No description", char _shortHand=0, bool _required=false)eoValueParam< std::vector< WorthT > >
functor_category()eoUF< const eoPop< EOT > &, void > [static]
getValue(void) consteoValueParam< std::vector< WorthT > > [virtual]
longName() consteoParam
moeoNDSorting_II(bool nasty_flag_=false)moeoNDSorting_II< EOT > [inline]
nasty_declone_flag_that_only_is_implemented_for_two_objectiveseoNDSorting< EOT >
niche_penalty(const std::vector< unsigned > &_cf, const eoPop< EOT > &_pop)moeoNDSorting_II< EOT > [inline, virtual]
operator()(const eoPop< EOT > &_pop)eoPerf2WorthCached< EOT, double > [virtual]
eoPerf2Worth::operator()(eoPop< EOT > &_pop)eoPerf2Worth< EOT, WorthT > [virtual]
repValueeoValueParam< std::vector< WorthT > > [protected]
required() consteoParam
resize(eoPop< EOT > &_pop, unsigned sz)eoPerf2WorthCached< EOT, double > [virtual]
setLongName(std::string _longName)eoParam
setValue(const std::string &_value)eoValueParam< std::vector< WorthT > > [virtual]
shortName() consteoParam
sort_pop(eoPop< EOT > &_pop)eoPerf2WorthCached< EOT, double > [virtual]
value()eoValueParam< std::vector< WorthT > >
value() consteoValueParam< std::vector< WorthT > >
~eoFunctorBase()eoFunctorBase [virtual]
~eoParam()eoParam [virtual]
~eoUF()eoUF< const eoPop< EOT > &, void > [virtual]


Generated on Tue Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoNDSorting__II.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoNDSorting__II.html new file mode 100644 index 000000000..56dffdbd1 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoNDSorting__II.html @@ -0,0 +1,86 @@ + + +ParadisEO-MOEO: moeoNDSorting_II< EOT > Class Template Reference + + + + +
+
+ +

moeoNDSorting_II< EOT > Class Template Reference

Fast Elitist Non-Dominant Sorting Genetic Algorithm assignment strategie Note : This is a corrected version of the original eoNDSorting_II class. +More... +

+#include <moeoNDSorting.h> +

+

Inheritance diagram for moeoNDSorting_II< EOT >: +

+ +eoNDSorting< EOT > +eoPerf2WorthCached< EOT, double > +eoPerf2Worth< EOT, WorthT > +eoUF< const eoPop< EOT > &, void > +eoValueParam< std::vector< WorthT > > +eoFunctorBase +eoParam + +List of all members. + + + + + + + + + + + + + + + + +

Public Types

+typedef std::pair< double,
+ unsigned > 
double_index_pair
 index pair

Public Member Functions

moeoNDSorting_II (bool nasty_flag_=false)
 constructor
+std::vector< double > niche_penalty (const std::vector< unsigned > &_cf, const eoPop< EOT > &_pop)
 _cf points into the elements that consist of the current front

Classes

class  compare_nodes
 A class to compare the nodes. More...
+

Detailed Description

+

template<class EOT>
+ class moeoNDSorting_II< EOT >

+ +Fast Elitist Non-Dominant Sorting Genetic Algorithm assignment strategie Note : This is a corrected version of the original eoNDSorting_II class. +

+

See also:
eoNDSorting_II
+ +

+ +

+Definition at line 26 of file moeoNDSorting.h.


The documentation for this class was generated from the following file: +
Generated on Tue Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoNDSorting__II.png b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoNDSorting__II.png new file mode 100644 index 0000000000000000000000000000000000000000..4ad772517d7aa15c5eb8e4acc95ef181ea3f36f0 GIT binary patch literal 2237 zcmbW3X*ApE9>+rlQ(HS1simmVsil_MYiV^lRizP?)K**UG@(_*HbmQN*Q%nDhNx1t zv=K|=l7`eCu^i0AUxJPnrJ|Us(1_f0=0(pv_r*QuzWANz_x-+j&Urq+@AI4|=Q7Mu zPFhtO1Omx9T|5s5fyB6?I{6(~kk@q5A`)sKBQ5Sz`$XEovLL&!nf}p!X9!8 zDod{!!>1JGKN)d-Y*vz3--o@kRp9k`s&@Hp!08L}DVI08Zq0hqKN=&uj{P{4hKOmf zJF+WF(NEsYycblOs2}YfKdEDrL0cPiqvgL~ty1sRR(1c+*pe^Y8a({5fvaG<(eI-F|X&(m}#t0cEA|wWZpbY{Q1xl)B>V&|hBfBU{bwvEkEAySzcREd2zqT(Y z)_C7>_r)>cV$`nmS?@bdj;SHGJK%R_S7GX@aBQZ7f2IQj+$7w~&qZ&w$Vv|@^25DC z0!h2Id83MiNN4aiNQ~O@FtAX9Ohu_cyg^jz|1I83)Ecwq!K=m;9tlKkNS_V(iSm+Y z4)vSvug{3jDtrkIA?DmoJ@?@)gl|aM((10$1dNMGvTn^Y6(5({Bq3}fN{af!r6pr` zn(I?yR*`$@`XLNwHC~Z=20@4I*FQ(4Rc-$2O*q?psFtiPQNkf!K(9c3R(p&n_H}D| zN!RJa5f}mnr^h`{&6OJOe{Ir`uS~A$8Y2F4OVX$PREf&4_LZVCUl|@@ zDAOdy5sig&*zFy~oEj_t##1@s6zkr$Euhm0Y#TE$&a%c>unXf+k_Zzy_bPRTHzhVd`%okp2B6H&)fk_ZJB?Ox#jOj8K$5 z;zVCMhK&6OdA%kj%^0hZ0{AJ@B`wLfX60|YM1NHJF?Pe!}4zpBMpux_C=0qG7S?Xb;ei!Z&&LUzB zzEqa+^SaC2KA-Q>rL^U?Tc1GXO>|<>>LDf5L2u!8?Twk`-hJX776v7Nq0kFVT@vja zsC3Et8p@5$D~K#e?ix3G5#+-46MD(;B~jGY+;#)VUPrqbvwow1k-jFNnGzOC2hswf zn1EHVW{YR4+_s6B8u0ZvSUJLbss8Y|ca2h`*?QX-?~I(??A2I~P}Qped=aW->jOa9 zcmECLn?0*cSeg3bd;Kj)#6}{3%%}KWQTR`8zAOmE~F}8;mo|l|mw!0d7VLgIJkO=tmKNG zt##n90qfF##mN5F$S2XG-my6a4)0YYJk!e6vqb!&h(MF{X)Pmdp!>koq@ z+(<;mN+0B|W>yT_Kk?4S-PSP)ms`4_L8zJ%P8Nlv9^_63!D@D2B_Ml=vm|dt&&An) zX(F`uLi9%H)6XJrR;?}%Q*xG)Og)1si4xle&CFPXXycdUaMQAuo^ox<(ZGRUukwcX zU$qpK=N1*rt1-Qf$S$koouygRDa)5{b@WpCg2DMu3VeG7J))L`nmoo z$?I#%&?P@RPSIR5+;(xah2H$xLBfP_5TQ+8zQ45{t=8&(4P4%YR9nzwETjwAYO OfSep)=Sk;~xBm_JCuD8_ literal 0 HcmV?d00001 diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoNDSorting__II_1_1compare__nodes-members.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoNDSorting__II_1_1compare__nodes-members.html new file mode 100644 index 000000000..1a4034cc2 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoNDSorting__II_1_1compare__nodes-members.html @@ -0,0 +1,37 @@ + + +ParadisEO-MOEO: Member List + + + + +
+
+ +

moeoNDSorting_II< EOT >::compare_nodes Member List

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

+ +
operator()(const double_index_pair &a, const double_index_pair &b) constmoeoNDSorting_II< EOT >::compare_nodes [inline]


Generated on Tue Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoNDSorting__II_1_1compare__nodes.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoNDSorting__II_1_1compare__nodes.html new file mode 100644 index 000000000..84b775d60 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoNDSorting__II_1_1compare__nodes.html @@ -0,0 +1,59 @@ + + +ParadisEO-MOEO: moeoNDSorting_II< EOT >::compare_nodes Class Reference + + + + +
+
+ + +

moeoNDSorting_II< EOT >::compare_nodes Class Reference

A class to compare the nodes. +More... +

+#include <moeoNDSorting.h> +

+List of all members. + + + + +

Public Member Functions

+bool operator() (const double_index_pair &a, const double_index_pair &b) const
+


Detailed Description

+

template<class EOT>
+ class moeoNDSorting_II< EOT >::compare_nodes

+ +A class to compare the nodes. +

+ +

+Definition at line 46 of file moeoNDSorting.h.


The documentation for this class was generated from the following file: +
Generated on Tue Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoNSGA__II-members.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoNSGA__II-members.html new file mode 100644 index 000000000..041872050 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoNSGA__II-members.html @@ -0,0 +1,49 @@ + + +ParadisEO-MOEO: Member List + + + + +
+
+ +

moeoNSGA_II< EOT > Member List

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

+ + + + + + + + + + + + + +
breedmoeoNSGA_II< EOT > [protected]
continuatormoeoNSGA_II< EOT > [protected]
evalmoeoNSGA_II< EOT > [protected]
genBreedmoeoNSGA_II< EOT > [protected]
loopEvalmoeoNSGA_II< EOT > [protected]
moeoNSGA_II(unsigned _max_gen, eoEvalFunc< EOT > &_eval, eoGenOp< EOT > &_op)moeoNSGA_II< EOT > [inline]
moeoNSGA_II(unsigned _max_gen, eoEvalFunc< EOT > &_eval, eoQuadOp< EOT > &crossover, double pCross, eoMonOp< EOT > &mutation, double pMut)moeoNSGA_II< EOT > [inline]
moeoNSGA_II(eoContinue< EOT > &_continuator, eoEvalFunc< EOT > &_eval, eoGenOp< EOT > &_op)moeoNSGA_II< EOT > [inline]
operator()(eoPop< EOT > &_pop)moeoNSGA_II< EOT > [inline, virtual]
popEvalmoeoNSGA_II< EOT > [protected]
replacemoeoNSGA_II< EOT > [protected]
selectOnemoeoNSGA_II< EOT > [protected]
sortingmoeoNSGA_II< EOT > [protected]


Generated on Tue Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoNSGA__II.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoNSGA__II.html new file mode 100644 index 000000000..ca6c61d22 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoNSGA__II.html @@ -0,0 +1,152 @@ + + +ParadisEO-MOEO: moeoNSGA_II< EOT > Class Template Reference + + + + +
+
+ +

moeoNSGA_II< EOT > Class Template Reference

Inheritance diagram for moeoNSGA_II< EOT >: +

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

Public Member Functions

 moeoNSGA_II (unsigned _max_gen, eoEvalFunc< EOT > &_eval, eoGenOp< EOT > &_op)
 This constructor builds the algorithm as descibed in the paper.
moeoNSGA_II (unsigned _max_gen, eoEvalFunc< EOT > &_eval, eoQuadOp< EOT > &crossover, double pCross, eoMonOp< EOT > &mutation, double pMut)
 Ctor taking _max_gen, crossover and mutation.
moeoNSGA_II (eoContinue< EOT > &_continuator, eoEvalFunc< EOT > &_eval, eoGenOp< EOT > &_op)
 Ctor taking a continuator instead of _gen_max.
+virtual void operator() (eoPop< EOT > &_pop)
 Apply a few generation of evolution to the population.

Protected Attributes

+eoContinue< EOT > & continuator
+eoEvalFunc< EOT > & eval
+eoPopLoopEval< EOT > loopEval
+eoPopEvalFunc< EOT > & popEval
+moeoNDSorting_II< EOT > sorting
 NSGAII sorting.
+eoDetTournamentWorthSelect<
+ EOT > 
selectOne
 Binary tournament selection.
+moeoElitistReplacement< EOT > replace
 Elitist replacement.
+eoGeneralBreeder< EOT > genBreed
+eoBreed< EOT > & breed
+

Detailed Description

+

template<class EOT>
+ class moeoNSGA_II< EOT >

+ + +

+ +

+Definition at line 31 of file moeoNSGA_II.h.


Constructor & Destructor Documentation

+ +
+
+
+template<class EOT>
+ + + + + + + + + + + + + + + + + + + + + + + + +
moeoNSGA_II< EOT >::moeoNSGA_II (unsigned  _max_gen,
eoEvalFunc< EOT > &  _eval,
eoGenOp< EOT > &  _op 
) [inline]
+
+
+ +

+This constructor builds the algorithm as descibed in the paper. +

+Deb, K., S. Agrawal, A. Pratap, and T. Meyarivan, A fast elitist non-dominated sorting genetic algorithm for multi-objective optimization: NSGA-II. In IEEE Transactions on Evolutionary Computation, Vol. 6, No 2, pp 182-197, April 2002.

Parameters:
+ + + + +
_max_gen number of generations before stopping
_eval evaluation function
_op variation operator
+
+ +

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

+

+


The documentation for this class was generated from the following file: +
Generated on Tue Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoNSGA__II.png b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoNSGA__II.png new file mode 100644 index 0000000000000000000000000000000000000000..3d85e6dca1077cb6fe87a1472e68dd6dc8d0d19d GIT binary patch literal 878 zcmV-!1CjiRP)NHLJ>G$COAOqjF~bZB>`Y_;?pl7c=#7VFF{5n^ zfE>q+P!IGTWB4#x9ug3=9_XaK&1IbGft1qhe4VsWU1@%44}6uBk`XSG-g!au^V9A=C-M-pl8~)YNULxl+-VHgE@y?$3y(^40#ufKISKPzh zk|Fx;tr(B#D`5yj7{U;SFoYotVJzAe&p1zc9u&s84ATg(U6J<)!)_FLhZsSh3qRGh z>Gza> zAq-&%Lm0wXH2Azt`ut2QQ^NQ*hQ>eN9Fqc#6WAHH*p~R_Kg69;25>~}U%1gFLsJkw zksS<;0sJ{DppB185morGW$1|6&H#lJ{De1{0R)DMD8Es4>?0| zP`-@kJUWmi20%pVc;;BzFh=SATD6enJf_G{kr8V<=TS3u<`LJ*M+#IHW z$onc?A4MKvX~Olfv#-v!5r#kYU6bybhcLdKalyUMe+-c8I6FAb + +ParadisEO-MOEO: Member List + + + + +
+
+ +

moeoParetoEuclidDist< EOT, DistType > Member List

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

+ +
operator()(const EOT &eopf1, const EOT &eopf2)moeoParetoEuclidDist< EOT, DistType > [inline, virtual]


Generated on Tue Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoParetoEuclidDist.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoParetoEuclidDist.html new file mode 100644 index 000000000..296c298dd --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoParetoEuclidDist.html @@ -0,0 +1,57 @@ + + +ParadisEO-MOEO: moeoParetoEuclidDist< EOT, DistType > Class Template Reference + + + + +
+
+ +

moeoParetoEuclidDist< EOT, DistType > Class Template Reference

Inheritance diagram for moeoParetoEuclidDist< EOT, DistType >: +

+ +moeoParetoPhenDist< EOT, DistType > + +List of all members. + + + + +

Public Member Functions

+DistType operator() (const EOT &eopf1, const EOT &eopf2)
+

Detailed Description

+

template<class EOT, class DistType = double>
+ class moeoParetoEuclidDist< EOT, DistType >

+ + +

+ +

+Definition at line 27 of file moeoParetoPhenDist.h.


The documentation for this class was generated from the following file: +
Generated on Tue Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoParetoEuclidDist.png b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoParetoEuclidDist.png new file mode 100644 index 0000000000000000000000000000000000000000..49237bed5feeec69eed132ce992cc2f2561a61fb GIT binary patch literal 734 zcmV<40wMj0P))tfbO8Pp?S*wmr(ReTx_sUdz#jrF(k&aEbBuToVY(%4fmF=8Lx|cV={AS z7ZDS)3e5nQW*4Ez2iv1!kDD<|{Bd&VDbc17CkCOjfihM_*a`>aAa1d2oWzHSSN@Mg zCgzxWvKA}oN42PPw=}~BfKlfuIaP8fWJB-Ba1gaMkS8cK=Cn0HwvofrY#TY0A0I+s&AxADr zPsn!Z?XsT>-1al4Xn8y8?Wc}7Rqc26caSG;CnAWxRap z>3@^__(pOY8|u`m^hH5CVL~REN!E-L9EeDH&evJ= z@BnRwk{7Z(gqxM@`&E0Vrp2KrQpkqvnVkC6lZvDYvcwbv`5GDDYMO@eY?5IWY!)NgHL@#Y#{;?fN3)>UwlQzX*##;1INL_nFiNlS5Oeik zB6jCwbAC*AmTj^GIyaBG*13}VI@h{uo&8Yfp|@L|N!w;x=S^>mC{EehSE`shy6bJ- z&ukI5{aoR?p9wa)kV$VpeN21~yZT$mlQ#zq+MjxF`^(7VSme8qFZ + +ParadisEO-MOEO: Member List + + + + +
+
+ +

moeoParetoPhenDist< EOT, DistType > Member List

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

+


Generated on Tue Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoParetoPhenDist.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoParetoPhenDist.html new file mode 100644 index 000000000..c84bb02c2 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoParetoPhenDist.html @@ -0,0 +1,53 @@ + + +ParadisEO-MOEO: moeoParetoPhenDist< EOT, DistType > Class Template Reference + + + + +
+
+ +

moeoParetoPhenDist< EOT, DistType > Class Template Reference

Inheritance diagram for moeoParetoPhenDist< EOT, DistType >: +

+ +moeoParetoEuclidDist< EOT, DistType > + +List of all members. + +
+

Detailed Description

+

template<class EOT, class DistType>
+ class moeoParetoPhenDist< EOT, DistType >

+ + +

+ +

+Definition at line 15 of file moeoParetoPhenDist.h.


The documentation for this class was generated from the following file: +
Generated on Tue Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoParetoPhenDist.png b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoParetoPhenDist.png new file mode 100644 index 0000000000000000000000000000000000000000..6a7bfb562f6af2272961903f6365a12ed1852a5f GIT binary patch literal 735 zcmV<50wDc~P))p5PO5&nLW=w<^D%l^n(lrXFB7wZfi)4LCE^h4^9GJ)j|x{G+5*tlM!R9 z!dI6f&ymB9ARu zb)2lpiuzHhK>##H5P}dH6oE;TrNVcO7cPDoj;CyTOD^#LK*AxrqTDQt8XQ43k(8 zX@OE=GCw4XPEPHvQ&!b#FcB%FBPXP+Hua`MQh`ddEAZFI@-2GDeP z^LRVY4%hQcqN5v`)b`8UJK4L-W)VYKkL1nE+da^k?%r2^T+j6`w!N%r + +ParadisEO-MOEO: Member List + + + + +
+
+ +

moeoParetoSharing< EOT, worthT > Member List

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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
defValue() consteoParam
defValue(const std::string &str)eoParam
description() consteoParam
distmoeoParetoSharing< EOT, worthT > [private]
DmaxmoeoParetoSharing< EOT, worthT > [private]
eoParam()eoParam
eoParam(std::string _longName, std::string _default, std::string _description, char _shortName=0, bool _required=false)eoParam
eoPerf2Worth(std::string _description="Worths")eoPerf2Worth< EOT, worthT >
eoValueParam(void)eoValueParam< std::vector< worthT > >
eoValueParam(std::vector< worthT >_defaultValue, std::string _longName, std::string _description="No description", char _shortHand=0, bool _required=false)eoValueParam< std::vector< worthT > >
euc_distmoeoParetoSharing< EOT, worthT > [private]
functor_category()eoUF< const eoPop< EOT > &, void > [static]
getValue(void) consteoValueParam< std::vector< worthT > > [virtual]
longName() consteoParam
moeoParetoSharing(double _nicheSize)moeoParetoSharing< EOT, worthT > [inline]
moeoParetoSharing(double _nicheSize, moeoParetoPhenDist< EOT, worthT > &_dist)moeoParetoSharing< EOT, worthT > [inline]
nicheSizemoeoParetoSharing< EOT, worthT > [private]
operator()(const eoPop< EOT > &_pop)moeoParetoSharing< EOT, worthT > [inline]
operator()(eoPop< EOT > &_pop)eoPerf2Worth< EOT, worthT > [virtual]
eoUF< const eoPop< EOT > &, void >::operator()(const eoPop< EOT > &)=0eoUF< const eoPop< EOT > &, void > [pure virtual]
repValueeoValueParam< std::vector< worthT > > [protected]
required() consteoParam
resize(eoPop< EOT > &_pop, unsigned sz)eoPerf2Worth< EOT, worthT > [virtual]
setLongName(std::string _longName)eoParam
setValue(const std::string &_value)eoValueParam< std::vector< worthT > > [virtual]
sh(double dist, double Dmax)moeoParetoSharing< EOT, worthT > [inline, private]
shortName() consteoParam
sort_pop(eoPop< EOT > &_pop)eoPerf2Worth< EOT, worthT > [virtual]
value()eoValueParam< std::vector< worthT > >
value() consteoValueParam< std::vector< worthT > >
~eoFunctorBase()eoFunctorBase [virtual]
~eoParam()eoParam [virtual]
~eoUF()eoUF< const eoPop< EOT > &, void > [virtual]


Generated on Tue Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoParetoSharing.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoParetoSharing.html new file mode 100644 index 000000000..841fa5779 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoParetoSharing.html @@ -0,0 +1,87 @@ + + +ParadisEO-MOEO: moeoParetoSharing< EOT, worthT > Class Template Reference + + + + +
+
+ +

moeoParetoSharing< EOT, worthT > Class Template Reference

Inheritance diagram for moeoParetoSharing< EOT, worthT >: +

+ +eoPerf2Worth< EOT, worthT > +eoUF< const eoPop< EOT > &, void > +eoValueParam< std::vector< worthT > > +eoFunctorBase +eoParam + +List of all members. + + + + + + + + + + + + + + + + + + + + + + + +

Public Member Functions

moeoParetoSharing (double _nicheSize)
moeoParetoSharing (double _nicheSize, moeoParetoPhenDist< EOT, worthT > &_dist)
+void operator ()(const eoPop< EOT > &_pop)

Private Member Functions

+double sh (double dist, double Dmax)

Private Attributes

+double nicheSize
+moeoParetoPhenDist< EOT, worthT > & dist
+moeoParetoEuclidDist< EOT > euc_dist
+double Dmax

Classes

class  dMatrix
+

Detailed Description

+

template<class EOT, class worthT = double>
+ class moeoParetoSharing< EOT, worthT >

+ + +

+ +

+Definition at line 19 of file moeoParetoSharing.h.


The documentation for this class was generated from the following file: +
Generated on Tue Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoParetoSharing.png b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoParetoSharing.png new file mode 100644 index 0000000000000000000000000000000000000000..2658cacc5d038e050d2783f7ffde69fb18e97abd GIT binary patch literal 1683 zcmb7FdsNZ~6h`eK_()Af(QJgXu|%1ore!5zBBpa@<|7}-T9~3XQ4=4P0_LWfX{(?l zdT4H`CHM%2Ql>eS{3-cJM~{U{Q#6$%HRotMJ7?$Yubp!r-@WHM_uTLPbBlt5{EQ$l z2nYl+^2g&sKp-8Z7K_*DX`}ao3eYC2;QgV#tE;P8xVkFlaN^Es(O)hWi?biDDzv2z zH6-W&XwUfYHz3eDq(9Cl^u!g_)s%19Xp;^p)qzu%{K-4rs|(nixs}pjzVLjQzAd`Q z@_KIaMn{9nyrqfacJ|Iceo^+42A$#ak7J#;(0`cyqZTl_1(e(ZINjEyX9w7X4K|$9 zPBzC6`*FLg-7nZBcUY5!NsoP0%*q`@*66hPc2=+plpenxc%}dQlq?D`PSWwR9Rc#6 zt&mG+80$h(5PWc9JHaHF@)+F4SM@P@fv0)W|zi ze&Vg_n*}Imt#G`z!dl=_h{Yj!fL^HM4!lQ3IoG0U0dcd zGJDq9qqry$?5Cf*Xs9~HWcB@DA6&4!_#@ZjNoEI8T0lhR2^S@z3BPO2{>Ip$dNYi{ z&U@VJ58q1LO{zwhDLL>)-Kd6jC0TY|F10@82J|h4V-}Z+(t=spXw2GroLj^m#|4n$ zyKz0z6&@S#eff**Y4Pc673Ez%XWwJVd)Efedj-u}jZtcI8x3@vMO zeduFmyoJk+02%)1vHYOZTdfjcHw;zC)NlsRkcg^kZa?sv%3F&OY$Z1^ceyy+lA^ch zwT8o><^I5{ieb6_CN>XpwMK@|-X*$-P$Ay9T)9AdaR_l$Y6%SBm-VGpnXHI}{?Qh+ zV__9*48Nl}@n&r8n=83L>RrqVJ@H@ zgsTZqIw1(rSk3)1BsDP*+X|6KmY=J~HV@h>egbOUz>5pu74r&nwP(?jjoKm3Av|OOyqPZMtn}T$&Y?-%0D~Jr{ay^;$3OL4k|x?88Vw!cDZ_s4B>y&ui1ukCghpEn z&LmT?^<(!xbbq8n`%s3hu%&|Z@VI#)v^Q<6HLL8l;4}5;$l27DIOX2c)g0Yi{NI~H zatYCSYjUufmAk8S0loE&_sNN;2tHZt|Idm3t6%=Txd8g_!}R5HON#e>MTTcGraPj! z*~i=L)p0!y{pghYH4DLE9^9o5C(#{Q;c4`tfE$TeXnpbfBg09Pmx5}J8P0ZiHd@uzl5;{a7yBxq$3sA^z;gtjh=uWVK3Vc7vSw`f)AJ2!kpX{EKL99rFa1NU<$L& za2W14VU3jDS`%p1UH1Iclc&%EW`n8q?ChD>oWe}cemC_Un-XfI3``qljwcF+MeFkx z8i%O&vJ2ZmyP;N&9d4A)Vb?6p*%?`p%{Tb%2@XeO!iEcdo|;d)rvsitY2l0*)tP#} xcm09snUj{OB<1KciC`Pmc^V==tofk-ez(FIvNSexR7d+kK>of#xH@cH{-1Q=JPiN< literal 0 HcmV?d00001 diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoParetoSharing_1_1dMatrix-members.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoParetoSharing_1_1dMatrix-members.html new file mode 100644 index 000000000..262e15ddd --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoParetoSharing_1_1dMatrix-members.html @@ -0,0 +1,39 @@ + + +ParadisEO-MOEO: Member List + + + + +
+
+ +

moeoParetoSharing< EOT, worthT >::dMatrix Member List

This is the complete list of members for moeoParetoSharing< EOT, worthT >::dMatrix, including all inherited members.

+ + + +
dMatrix(unsigned _s)moeoParetoSharing< EOT, worthT >::dMatrix [inline]
printOn(std::ostream &_os)moeoParetoSharing< EOT, worthT >::dMatrix [inline]
rSizemoeoParetoSharing< EOT, worthT >::dMatrix [private]


Generated on Tue Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoParetoSharing_1_1dMatrix.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoParetoSharing_1_1dMatrix.html new file mode 100644 index 000000000..d65c1cc78 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoParetoSharing_1_1dMatrix.html @@ -0,0 +1,61 @@ + + +ParadisEO-MOEO: moeoParetoSharing< EOT, worthT >::dMatrix Class Reference + + + + +
+
+ + +

moeoParetoSharing< EOT, worthT >::dMatrix Class Reference

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

Public Member Functions

dMatrix (unsigned _s)
+void printOn (std::ostream &_os)

Private Attributes

+unsigned rSize
+

Detailed Description

+

template<class EOT, class worthT = double>
+ class moeoParetoSharing< EOT, worthT >::dMatrix

+ + +

+ +

+Definition at line 109 of file moeoParetoSharing.h.


The documentation for this class was generated from the following file: +
Generated on Tue Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoReplacement.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoReplacement.html new file mode 100644 index 000000000..f3e70b893 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoReplacement.html @@ -0,0 +1,62 @@ + + +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 >: +

+ +eoReplacement< EOT > +eoBF< eoPop< EOT > &, eoPop< EOT > &, void > +eoFunctorBase +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 Jan 16 15:49:54 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoReplacement.png b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoReplacement.png new file mode 100644 index 0000000000000000000000000000000000000000..149fe72e38cdbf3a829d086a93cb9b457bc1a44f GIT binary patch literal 2057 zcmcIldsxzE8>U=r-xU6KfiC+wLjkbz2Enb=Xu}zdhX}R z3r70uZ!_Np0)g}czVHnJfi@GgeDwnzE!NnkqP3f8@Uc+8jg1X0-Pq`=s*1d*W$#v3 zR~Pls#)S5`i4=l70rHZKeggu1SQX%VG?Y@Iti)boxElH?tJZCsb%Y+%d8JEz=-KS8 zKFnRYR|^^r7$z1m^m;EAAJ3%X2-PcV@u;t zuRS0 z&(F+C7(T8xD)6JEP2T~|)B1lAq)2U&l`g+RlSS})74-cR5VHaquV^YIsAO}KMZ{ED z2}WaEEsECUZ%>Qo{5CoN;8;+7N|X_$|L5Ib{c@z7<(c}xlMY9vhM)CCcZ|aj>gsgP3&% zR-e?H*as|}+D#^mi^?1gtryW1(COq=r@-2-!Sb9$FcI%@A6bp(KSuG*%o&eq-N5hc9e0k+)WK3}*T>n&H<~5>c zIEQvJj!Eq93hB;l7sNaaG+UW(!5olU1LPn6P?SL?`e%=^dWF&C38ch>xRo81XsM@{ z{@qJ=Q`5gs{q8A%X6$7mtDEFnCbV=25;UuEiiWAWF#f9oR@P^$Q`>c%CInxWKDI!s z=N#>gE?r6?Q%a>3=0E9XUp^T|kO}_fcNACQLtGpm%1D>cQqKqst>OlX+A~RY5&h-4 zGsa90iNRqoss)OW0Ps&z_Ykceod|R?!;JpY!O_a-`I%B&ja6>jMb>a57;pcE)x>U& zr9!A}XQNa~ zVfiAqr6xsU?SJ7{x<}@0yNxR6VT!Z1a?j61Mh-we>e=#NGrqUw|IYF~(k`EJJJkm% zW9WpvOe2B*WbUxp6X+J_4li6}Hrx$(?d=U+EN1d4c;Z5+oyhBzt%CevY%Llqa1G`+nR5%3jJFTuhFt?-fRZkqvRQj zghP9cl7Ed_%(rGL@qqYX($2XO^Jmu!xSHY_R0}JQHU0VG=e%5lZFmag;=oy(Srh@Fv@pANG%+TSEgXUT7(yg1A((&pn%5%4uZbfz z2pG(ya74q=2GfRC<#-WIRXIsWVnntrToc&N@5CruNt&oMV$oWQ2k&FS=SQK?dDawL z8J2aG7lscRHnzr2;X8A4gbtL0RV|~7TnF8=HYHy1n93K&r`= zvE7;(`cQ&sU^R0z5SXz_93L5Z;TAWVn;HdyCZ9uf8;v=HTHRFD7bQFq?;EVNE?Y6V zMp6iPtrn5O&b8t432%A5Apt^-R{G|k$oJ&3g{3PT+_DRe#LA7J-WB0GkUhZL+eY!M z`wn{^?=iZWZ_KT!>}Xv?$($urKK;!OVLb6G>_Q1%K$&Tvsc79A7xvr9TON6zA(oF* z3>LYO96^LsZ + +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]
functor_category()eoUF< A1, R > [static]
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]
eoSelectOne< EOT >::operator()(A1)=0eoUF< A1, R > [pure virtual]
popSelectOnemoeoSelectOneFromPopAndArch< EOT > [private]
randomSelectmoeoSelectOneFromPopAndArch< EOT > [private]
ratioFromPopmoeoSelectOneFromPopAndArch< EOT > [private]
setup(const eoPop< EOT > &_pop)moeoSelectOneFromPopAndArch< EOT > [inline, virtual]
~eoFunctorBase()eoFunctorBase [virtual]
~eoUF()eoUF< A1, R > [virtual]


Generated on Tue Jan 16 15:49:54 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoSelectOneFromPopAndArch.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoSelectOneFromPopAndArch.html new file mode 100644 index 000000000..fa40eb572 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoSelectOneFromPopAndArch.html @@ -0,0 +1,200 @@ + + +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> +

+

Inheritance diagram for moeoSelectOneFromPopAndArch< EOT >: +

+ +eoSelectOne< EOT > +eoUF< A1, R > +eoFunctorBase + +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 Jan 16 15:49:54 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoSelectOneFromPopAndArch.png b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoSelectOneFromPopAndArch.png new file mode 100644 index 0000000000000000000000000000000000000000..919ea21fbb479737e30676d1ce163ef8814576a6 GIT binary patch literal 985 zcmV;~119{5P)73kevaWL<+bXmcurO)8$*Ew=8z>6vN(i{FA7EH3VdcJNW}*hN!}0@>t)D0 z{BQtI#RGLGf)5(|B#l?$6TwNr%1RUwhm){5SCe65u9@v3^jO>gV{^$mD? z7>VksyO2*H#da#M<2mlBYHYykQ7jIzoxv()9l`6NtXkNy_zgv!?fAS}$H(?i&jUt@ zy|w;p{sz1r!;5kfP#-Kl3B>&?=YPrHWWCnV+WEVsS>$JM%CGonczBLHZlD>v%)jH(}ntKt`8Ra z_KI^xXtrV|in=$`eVOOerqbTZQ<;&vUdNQzN-Ct%G9mZ8ZY=jn@I^`S>3Uksd4u=! z4J+PLelDvOs#sjdqLZX5$P;ppT;704sZ8{uMB=a_%c_&}Ydm$lAR1ohS6X`zP + +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 > +eoUF< const EOFitness &, R > +moeoMetric +eoFunctorBase +eoFunctorBase + + + +
+

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 Jan 16 15:49:54 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoSolutionUM.png b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoSolutionUM.png new file mode 100644 index 0000000000000000000000000000000000000000..6fa08b71bcb925521369c2e4c4ddb9eadf6df3ca GIT binary patch literal 1489 zcmah}c{J1s93O+RXd>$V2k6C zAdqB~lO5dqP6e+rsEBNNAQQu`Pj;A2Yd!j?E&hU4gwW;iiNQr843yi1#T7xMzEAnx z#|!Q5w$Yil?_IfnNG4do%GN~;_Uy9&**AdfATXm3+I~eFY0MH&0YS+|TFtvP_-3pk zu6-qLWwuKbRuG;srMj4PJ;nkXZ!PX2B<-!G8U%@(OQrW2SVj`_VNy8`40c?0m~P^{ zHDXi@J7mbq)Olxk><0KcVO#O38E?1aoGqBwnlR0`Qp}Tlz->9Yx%f%fw5!k-v0g^; zWJ^OI@Om^!)=$uC^bH2+wJQ=pWLV0U!b^Pg6o*<<>)OOHEh)NQBMBrLx^Kgje)jT9t@ zcbb!CdSoYRO>9jn+oLBeWue?|joTRp@TDu;S&XUd=8vP$4e1JN$Op1#ZiPQax8%aS zfxs#srFV>YARp46Si?s?Yq*ZXBK%DbXZ93 zaIUZidDR!SJ}30yxE;ZU9l<(@{HaXkU1esXKk*l(9I8S9+1^RJ$vL;k8C97%^p#27 zLUc-KOD4HjuiH688twlJ!DWSA>aM0IYM|WWz$5^j1a1&E#pSxXbC()|kOV?9CysN5 zN$ZCp^DbTDxHJY8q*bZb78P&~#<0SHD0-1Z68`xLhOv{<{DbCOb&(Q&a^5@rx7U*! zFpkaWujU~)csNBqfXlj8H8*g#=J|>-BOWz8xj`kd8iG1iac+=U#%Cls>ve){NUMTp z!VGUj3fDSi>G7d}u@5J-|J}xzpWy$4w_6B&UbH8Q#DO$wx4~oX?Vm-Z?mwK|kg|-P z`&P{-lx6L8>UN^4d5_JHWLshEczW5z_>4*B;NRXT2GA-gv4}VdwPUnAfo`@MR!WZF)uF6RASJA@eOOc3~$*dZ$$5*1qY|LT7> qGTmv@a1D!RDzJgvmGhn8ecA48g|i*myHle73v#k|x1%9K)Bgdw3giR; literal 0 HcmV?d00001 diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoSolutionVsSolutionBM.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoSolutionVsSolutionBM.html new file mode 100644 index 000000000..5d7b851c4 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoSolutionVsSolutionBM.html @@ -0,0 +1,62 @@ + + +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 > +eoBF< A1, A2, R > +moeoMetric +eoFunctorBase +eoFunctorBase + + + +
+

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 Jan 16 15:49:54 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoSolutionVsSolutionBM.png b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoSolutionVsSolutionBM.png new file mode 100644 index 0000000000000000000000000000000000000000..c739cd66aa37ccb8a3860c37a803d06fdcb1f811 GIT binary patch literal 1664 zcmbVNc~H|w7!A@Q1PBo@+(p8vq$HwHAR@OR2;m5qa{1#_E)7vmBLWFj0YN}WML>ih z2qXlMQw1g|H;k5B3D|PVa0wJ?I838cr%v0McKXM@ec#*NnQz|r?d~lH97Y^04+eoi z;#g}-ClKhs1wL>8N|29^oh&u}B{+MFDkl_$!DKNdwY8vi#N*;1+F^b z@F3Iq@jwtr2!^#ZbB=znQs5O)Vgx-?9PUzhH}c4;P}%C_%Tocov$Dg%Q-|RO7nT>wLEgn0C0SK4L0xjihWu*8$Z~AuhsAIhBheH zE(3AEVon-~9_e4P3T!U0W~0h+AM#?y_nJ|QTdn%s#%@3d(;zcylJa$t;H1dz2SwMk zth%8zd34KW2!uElrL3N0e;Me9=-Sxa7S_4W)8dYBwrqHPe|Yi95I)o(s&4KILwvKiMTakNHHp{F)ACdnzC!nlTK!pO7NGZh5jdOz*({J zrYq1sLRHW#EmDz!&8duinMGI>etdVeEfJ!2cGnRgCkl{@UUm0i5+l`;v zJ`|bB{s3RzC60IDH-O^%uN?=QYm>W<*&@5l!&mifguX@9-&y2KI?hAyZQ_F#di7rH zGk(oDs^rxxT@A02`_fn6bM9*st|{)V1EY6jn(t0P_|-C$GWM+#6Qm?C#RP>Z#i+$3 z2U%fC!r!2KXZ8{kwvOkS*fSxNsb=)czZwh$;XaWs<%LhhIFNJy2B1q5}vVU)5{!WJM$;+ zL-dPL(i)`Cd;dK3-&v;2p?QSvR>OvfhTjRf9A91iY_p?(r4i74qDS9J7#g=gC-~<# z&=h8Nn)a$JrphH!6$XhvQdZXE#e2mvYSJsyNp)a!m{Ljy%V2K7dLo&?E1e+P#GehV3>9BZKb#=Gi%{+4{F=-b1zRLbmH7u+G7GLt@9N8I4OoEN3N0 zkyfN?>pD|}2Wa$j)c4F^Ug4cG^1D)$N7%{hNhmk4!nGIdQLOy}JjM994J?C4Fbq{t zA9Bg^=Mi2Ku8lagEa|`{OV*+5i9m literal 0 HcmV?d00001 diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoUM.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoUM.html new file mode 100644 index 000000000..77847c696 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoUM.html @@ -0,0 +1,61 @@ + + +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 >: +

+ +eoUF< A, R > +moeoMetric +eoFunctorBase +eoFunctorBase + + + +
+

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 Jan 16 15:49:54 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoUM.png b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoUM.png new file mode 100644 index 0000000000000000000000000000000000000000..63de5940132cb3a60b3db46cffcf979283b5104b GIT binary patch literal 830 zcmV-E1Ht@>P)658HH)vg>jpsfw5b}?xM4eKG``xO2Vq9!P! zniv{KY_o?=)Rf z-t!U)Q1cU1a>}#zpuoG$`~*eGX`F5i1*mtrfO2>thF8m?h6ZK5(-xY-8~3dBSa$0B zP=2RUEbUHxAIkATEvU_$g8H`5BRM71sT$~3POIwmATCP=gxOpawOlK|coil7EW7&zXZkp9w`ijMoOs&F;z`6y;S0JJ8Aov8eBYLOgKJ z(1jGJ9#0QK7Tg6yzj5&x1Z+Lv?(A z8w#o0R6`}Fg}UA;`5REI8WjtuHdj)E11095OY#l%CN$4OlzK~Ds5Vzf+76<`D!j*b z>I+ns+ktN6bOG(C&~u?M zCi9n|gWd);=$^L=N|!!W!BW@kDbSz>HJP)i>$u$sbuP{q7{DJ-g3b`JA*S*XUM? zuc433X{p|jyUCSICg?mpxOzv-o&j}B#Yg=18q}Zza?T^@KbC + +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 > +eoUF< const std::vector< EOFitness > &, R > +moeoMetric +eoFunctorBase +eoFunctorBase + + + +
+

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 Jan 16 15:49:54 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoVectorUM.png b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoVectorUM.png new file mode 100644 index 0000000000000000000000000000000000000000..3ddd615a4e6068c819c1afae7d4e8e2cb0c5d698 GIT binary patch literal 1761 zcmb7_dpOf;9KaVxr&dG}4=I()QZC7KCPcOg(SB^DVlLy9xtwy}FqV*s?YNg^nd3Cm zluDD3lrEUW)|6Wpo6BOIiISt8DF&sf-&_h_Bk28a5m zFP_7pEUh0g+X@C77LMombJJ6hF14>`6K#;|p|+I7FO`th6s2;AIz)IIIkX8^u5@Jj?z!WKH zDu$SeO`O>m3Yfy&Xlo7=--~RtUKImSzwn{{B&b>moBaPRrG)d-ncjFq8+$jwJm$EY$)(K4PX&A^vwi$Q$#AU%jxhlwjfZn0T2s5T!2(xdg_y&- zzKbwRFe-Z6-a2ECk7SDHya2{1D=+A1Zl2l8VGNoF#PYKx`ZqUdxqWQ-&1KM^Sel*| zj%*s657nPQL5i^sJRL*-_La|T+qn0t2VHnpWVpV*u%e97@xV@)OWgUiwHr}$!)mP6 z>EY0MX~u$KyqFp+x4rbWgBIIp5w)iH504!6u8@3VwJhYz#xN+&vrVR>XPTl&6s17e z-W7;)%kycAFZ%-?%Tjc*8>zFhe4R=9?01Qmj`-hb#oEx%cd&Y-92?n6o4cYDOZT90 zSU#(q;y=w1G|LX4eK6J}e{>|wih4Q_0NkA2ca9_ZX`{fk9j2d}%MQa4uu+X^h|hXx zW-{O`1`?J71U8x8>3kNq7>I1Wfv*MzCVM(e?1MI{NSH5KyWNk5PFvX}Y*e|=d>EBN zMF8{RQ}S)#GfYRwH(a6UE{yY+S2Jtgi1vb-z!W9IWK`O!a>%*erMr~-(wL}{PN${i zKW|uU0XIW0Vq{%sTZp+qo3F1}$?JO+QBU2z#Y2}GhxX2HQ^oYkAh_o}H2Is}eWXvN zrI9PH8slN}PhxphoN&v+;`-}vJ{L1qpHT0w_a#aysUw$<`OTQu!MI!T4OQDCPA~^J zANES=Q#}IVmSryj^okjI?3gGSniLG3QDs=z7k@GGzs3sQEhV%IU)OL(H3|>nT+osE zj4f_aKsyiyB5wGS~Gyn&?9Ikp2 z`1y&(hnFu*Ik4;5krT=2^& + +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 > +eoBF< A1, A2, R > +moeoMetric +eoFunctorBase +eoFunctorBase + + + +
+

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 Jan 16 15:49:54 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoVectorVsSolutionBM.png b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoVectorVsSolutionBM.png new file mode 100644 index 0000000000000000000000000000000000000000..2fce3121080c7f36d413a7d469cb45dabc357661 GIT binary patch literal 1770 zcmc&#XH*kb6b?{8_Na^^3TTmr%7%h)08K&JB8d+0AYavD4&T4PHRemmf%u#cY)aR`FsK7^C=jNe}Mq)8HGYg>gKZqu277J z8yIln-Dn5^AeQQAcM=l+V5$5<(L)P)do9Z^Cqf9X4Y#7A%XOR9&Jb*`rgM2 zw=yghbm%@(K4#S83}3c)|B1{g7k&hiYgMXdIFed8h?X_MQe8q@tALzjvz9~H0h8JWIAZwlF8sa-$!7DNw z4+=m&-cm~9B-xXMG&1UVxw~qEXyrW~Mquwf7z_o^n`c@)BHkj4L1RtdWRLZs%Hgpq`7kE*KvX`E<0%@$rGrU`An zFu6?|FnqEy-Wjfqx&rS}R&yQao%MY~h`YpwA&!kG;;VrgiS|7{XJGSZ!SyrPpfIA# zRR?fo!xdC3RhH2OQ8(4fEuq=S_abp9awiqi(cy7=o~amov@G$x;*BBn%Y)(0)vVyJ zSIJFMQ7C#){~USEQP||}3_6x=bnfK{9=_c@JjAH6?oAv-^Wf$Ek^xNePxpSPyU0Wm zEK78eI;3#RhRLg8%;j1ejMOzf4{ObnKv6n=DMXjL>jwr|ts`*cmU7FB$q`kBJxLfI zU0)8oSr`m72wYCC=la2rI>$mM?q{EBvw8Ri$XMLOR=f&cW;NQ*?*PE%hQCTepmKpa zGR)FbqO(lc?a=Y>Qp(s8zmHK>B(_CPS~Z;Fa8oESZ*)9G%~-G>!bf@z{}(g2=}n{g z`SpuiQked@#$upeh*M6n|3gLIf%LL2S?JA+t9LAJd(S3B9Ywd(6H9CFVVOzkzE65f_@dDk)ib*%^b6 z^5BDiZRYFSMg%;}XSe(nOh8M8Q%qAZ!LnweJKk#cJafUyIg> z>fU`SgY$qtw!++a78W`OF60Hr^5G=4WiOcJNa@p$9enhGu?JpKqM-*abtgv_>0b)d zFG5}1q$e=s5V3TpN)pM>v;FGR#^>O2Q@KHhpiHc(3G3I?;I zey{klPRZ>uCD&F%4V{kYgv@1VoEj62xs&r~>cj1ZE~KsGt$f2mM7s7gW~Vou^Ej0O zp(RBCYhwt+Km|Fx`t}$^x6DVs7{7o7|8j2iDg>M{hcCT&d2i zI$TtFX`>frz??Gl;fZT`zjy_i7~4Nv#X#GZISt&6b&BK=M-aqVLK_e3Y4hU6!o>ZY zl?L|+)*Nth+ldHX-l4BT3gOR>S5y}P=T=fC-%arJm|jvJ@VFN*A8(nRdb&Ga{mb6` g_Q1Aov_ttq(rfSCn))^x1s@Z@(caCj7UX~HXH1MsZvX%Q literal 0 HcmV?d00001 diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoVectorVsVectorBM.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoVectorVsVectorBM.html new file mode 100644 index 000000000..461bc2cc9 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoVectorVsVectorBM.html @@ -0,0 +1,62 @@ + + +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 > +eoBF< A1, A2, R > +moeoMetric +eoFunctorBase +eoFunctorBase + + + +
+

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 Jan 16 15:49:54 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoVectorVsVectorBM.png b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/classmoeoVectorVsVectorBM.png new file mode 100644 index 0000000000000000000000000000000000000000..1c3bcd6ce322fcd972b44157e985af2bab0ac7b7 GIT binary patch literal 1711 zcma)7c~sI_6sF0Fad!s9rEQor#WEMN1Z^>Y3T}yzyC&s^W=?LE20E2fA}VHXk*ScD zI;bh8R+?j3Zlgg8TCRn=rkRFh#V}4Y!6OV=2WAGHazf>?dNf^iXrOBLEVKL<%L6hTL2qx)iOfhK7ciMu|{*T@&Ht zfCn8I?ePbJ)&p3}gM>5JXL4|1C3}^D{6fSa2CZEAb5XW}Sa11g;~{niowi*7KGw2y z<3VN|%|4v&PUua#B)Ru0mpEL;$6b||beO9^s*;&Qp$H2{m5bD^1R2x3X0O|ji>-};+^_l_cDwL zJtPWW(u`5|=2k5Cwhm|&_nP8_nZAtvE}ePra~tmkdIi4a(H5BHlR+Qw1#p;1Lp8~2 zJXXBKD`t-$-T+abz;c~?>bgCJkAm`>v-+GJZ`NX%=hB%?76XYk05MPenUJm(3{_7P zG0}k0GuoEG-Dy~_UDslrw~e(r7tBn0BPG9LDEEswWF*X#VS#{DwFBCKD>l&L*#N@;I;gji(BkqhB^1#_1c&b-&Psk$Jdj@ohiY*OEi z(A>jxBQq)?hRam)Sh1`|ycd-(OE|JEMxm*3O7#=~ok^Ug!-M6c#4NwH>&>ag!7Br36oK^V~U&zgj$80GqgD`>JEs$7$jA*<2PL(qupmsT?2- z`B6t})dCIGOWn4Yb*8WtqPY(cJcjH82kr&Wi;y}4Sib^COv!)aSK^O6UXg&*<+c5& zxrOqHrftGk5AhED!Qf$#)pB;9^>zBV>VNpH$arGr^=WD56^ls2BB>RVyF;2?rms&nM^UQh(;+P`Y5`3t zCd=RS&6&?Shs+?tVgdkB_kt2cOFc|3PKglVV!!`s*r{640o;?#(e%VNBbnSyA))N? z(q_RJ90y6Jlwb-1^`rS*EyxHUiJHLn{_e_zi#z5#1@Dse^8;_l0nyVYZ75zYuOG8u zVwBsJIM0+AJUFJltVG?n9p-0zEdjd7wWJR-;rn~0KjMsEq-|uABp|>#ls319n*4A3 z1epmuZmK%o#(ioDDE;XC8Y?yaLzM7M9{jN&(sobBd8&b(;P1z-(*FNZbUi%{dlwG> z?d3a>pmk(`wE!g?jl#P<&<_CO(*1zm%rAa z>aFd^3u}fsAFufm?PB7%oUwAIAIUSro^LivO;6qEP zP!hwETQP*rnmlWjD$)=sTjeBZMqaY|v?iFL*U?2{+`T|ijC!LroC=lmaG%@q9r literal 0 HcmV?d00001 diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/doxygen.css b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/doxygen.css new file mode 100644 index 000000000..c7db1a8a0 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/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/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/doxygen.png b/tags/paradiseo-moeo-0.2/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/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/files.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/files.html new file mode 100644 index 000000000..d58a286c7 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/files.html @@ -0,0 +1,52 @@ + + +ParadisEO-MOEO: File Index + + + + +
+
+

ParadisEO-MOEO File List

Here is a list of all documented files with brief descriptions: + + + + + + + + + + + + + + + + + + + + + + +
index.h [code]
make_algo_MOEO.h [code]
moeo.h [code]
moeoArchive.h [code]
moeoArchiveFitnessSavingUpdater.h [code]
moeoArchiveUpdater.h [code]
moeoBinaryMetricSavingUpdater.h [code]
moeoBinaryQualityIndicator.h [code]
moeoCombinedMOLS.h [code]
moeoContributionMetric.h [code]
moeoEntropyMetric.h [code]
moeoHybridMOLS.h [code]
moeoIBEA.h [code]
moeoMetric.h [code]
moeoMOLS.h [code]
moeoNDSorting.h [code]
moeoNSGA_II.h [code]
moeoParetoPhenDist.h [code]
moeoParetoSharing.h [code]
moeoReplacement.h [code]
moeoSelectOneFromPopAndArch.h [code]
README [code]
+
Generated on Tue Jan 16 15:49:54 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/ftv2blank.png b/tags/paradiseo-moeo-0.2/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/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/ftv2doc.png b/tags/paradiseo-moeo-0.2/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/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/ftv2folderclosed.png b/tags/paradiseo-moeo-0.2/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/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/ftv2folderopen.png b/tags/paradiseo-moeo-0.2/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/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/ftv2lastnode.png b/tags/paradiseo-moeo-0.2/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/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/ftv2mlastnode.png b/tags/paradiseo-moeo-0.2/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/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/ftv2mnode.png b/tags/paradiseo-moeo-0.2/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/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/ftv2plastnode.png b/tags/paradiseo-moeo-0.2/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/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/ftv2pnode.png b/tags/paradiseo-moeo-0.2/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/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/ftv2vertline.png b/tags/paradiseo-moeo-0.2/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/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/functions.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/functions.html new file mode 100644 index 000000000..ea5f79b5c --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/functions.html @@ -0,0 +1,335 @@ + + +ParadisEO-MOEO: Class Members + + + + +
+
+ + +
+ +
+ +

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

+

- a -

+

- b -

+

- c -

+

- d -

+

- e -

+

- f -

+

- g -

+

- h -

+

- i -

+

- k -

+

- l -

+

- m -

+

- n -

+

- o -

+

- p -

+

- r -

+

- s -

+

- t -

+

- u -

+

- v -

+

- z -

+
Generated on Tue Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/functions_func.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/functions_func.html new file mode 100644 index 000000000..f5671357c --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/functions_func.html @@ -0,0 +1,216 @@ + + +ParadisEO-MOEO: Class Members - Functions + + + + +
+
+ + +
+ +
+ +

+  +

+

- a -

+

- c -

+

- d -

+

- e -

+

- f -

+

- h -

+

- m -

+

- n -

+

- o -

+

- p -

+

- r -

+

- s -

+

- u -

+

- z -

+
Generated on Tue Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/functions_type.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/functions_type.html new file mode 100644 index 000000000..00ae20e8d --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/functions_type.html @@ -0,0 +1,58 @@ + + +ParadisEO-MOEO: Class Members - Typedefs + + + + +
+
+ + +  +

+

+
Generated on Tue Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/functions_vars.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/functions_vars.html new file mode 100644 index 000000000..8a89371a4 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/functions_vars.html @@ -0,0 +1,194 @@ + + +ParadisEO-MOEO: Class Members - Variables + + + + +
+
+ + +
+ +
+ +

+  +

+

- a -

+

- b -

+

- c -

+

- d -

+

- e -

+

- f -

+

- g -

+

- i -

+

- k -

+

- l -

+

- m -

+

- n -

+

- o -

+

- p -

+

- r -

+

- s -

+

- t -

+

- v -

+
Generated on Tue Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/hierarchy.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/hierarchy.html new file mode 100644 index 000000000..e80288c2a --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/hierarchy.html @@ -0,0 +1,205 @@ + + +ParadisEO-MOEO: Hierarchical Index + + + + +
+
+ +

ParadisEO-MOEO Class Hierarchy

This inheritance list is sorted roughly, but not completely, alphabetically: +
Generated on Tue Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/index.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/index.html new file mode 100644 index 000000000..7e73d848d --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/index.html @@ -0,0 +1,8 @@ + + +ParadisEO-MOEO + + + + + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/index_8h-source.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/index_8h-source.html new file mode 100644 index 000000000..eb75defd3 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/index_8h-source.html @@ -0,0 +1,35 @@ + + +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 Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/installdox b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/installdox new file mode 100755 index 000000000..1628445b3 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/installdox @@ -0,0 +1,117 @@ +#!/usr/bin/perl + +%subst = ( "eo.doxytag", ""); +$quiet = 0; + +if (open(F,"search.cfg")) +{ + $_= ; s/[ \t\n]*$//g ; $subst{"_doc"} = $_; + $_= ; s/[ \t\n]*$//g ; $subst{"_cgi"} = $_; +} + +while ( @ARGV ) { + $_ = shift @ARGV; + if ( s/^-// ) { + if ( /^l(.*)/ ) { + $v = ($1 eq "") ? shift @ARGV : $1; + ($v =~ /\/$/) || ($v .= "/"); + $_ = $v; + if ( /(.+)\@(.+)/ ) { + if ( exists $subst{$1} ) { + $subst{$1} = $2; + } else { + print STDERR "Unknown tag file $1 given with option -l\n"; + &usage(); + } + } else { + print STDERR "Argument $_ is invalid for option -l\n"; + &usage(); + } + } + elsif ( /^q/ ) { + $quiet = 1; + } + elsif ( /^\?|^h/ ) { + &usage(); + } + else { + print STDERR "Illegal option -$_\n"; + &usage(); + } + } + else { + push (@files, $_ ); + } +} + +foreach $sub (keys %subst) +{ + if ( $subst{$sub} eq "" ) + { + print STDERR "No substitute given for tag file `$sub'\n"; + &usage(); + } + elsif ( ! $quiet && $sub ne "_doc" && $sub ne "_cgi" ) + { + print "Substituting $subst{$sub} for each occurence of tag file $sub\n"; + } +} + +if ( ! @files ) { + if (opendir(D,".")) { + foreach $file ( readdir(D) ) { + $match = ".html"; + next if ( $file =~ /^\.\.?$/ ); + ($file =~ /$match/) && (push @files, $file); + ($file =~ "tree.js") && (push @files, $file); + } + closedir(D); + } +} + +if ( ! @files ) { + print STDERR "Warning: No input files given and none found!\n"; +} + +foreach $f (@files) +{ + if ( ! $quiet ) { + print "Editing: $f...\n"; + } + $oldf = $f; + $f .= ".bak"; + unless (rename $oldf,$f) { + print STDERR "Error: cannot rename file $oldf\n"; + exit 1; + } + if (open(F,"<$f")) { + unless (open(G,">$oldf")) { + print STDERR "Error: opening file $oldf for writing\n"; + exit 1; + } + if ($oldf ne "tree.js") { + while () { + s/doxygen\=\"([^ \"\:\t\>\<]*)\:([^ \"\t\>\<]*)\" (href|src)=\"\2/doxygen\=\"$1:$subst{$1}\" \3=\"$subst{$1}/g; + print G "$_"; + } + } + else { + while () { + s/\"([^ \"\:\t\>\<]*)\:([^ \"\t\>\<]*)\", \"\2/\"$1:$subst{$1}\" ,\"$subst{$1}/g; + print G "$_"; + } + } + } + else { + print STDERR "Warning file $f does not exist\n"; + } + unlink $f; +} + +sub usage { + print STDERR "Usage: installdox [options] [html-file [html-file ...]]\n"; + print STDERR "Options:\n"; + print STDERR " -l tagfile\@linkName tag file + URL or directory \n"; + print STDERR " -q Quiet mode\n\n"; + exit 1; +} diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/main.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/main.html new file mode 100644 index 000000000..80c794d7c --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/main.html @@ -0,0 +1,38 @@ + + +ParadisEO-MOEO: Welcome to ParadisEO-MOEO + + + + +
+
+

Welcome to ParadisEO-MOEO

+

+

0.1

+intro

+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.

+install

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

+design

+For an introduction to the design of ParadisEO-MOEO, you can look at the ParadisEO website.
Generated on Tue Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/make__algo__MOEO_8h-source.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/make__algo__MOEO_8h-source.html new file mode 100644 index 000000000..bf0a9bc93 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/make__algo__MOEO_8h-source.html @@ -0,0 +1,278 @@ + + +ParadisEO-MOEO: make_algo_MOEO.h Source File + + + + +
+
+

make_algo_MOEO.h

00001 // -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+00002 
+00003 //-----------------------------------------------------------------------------
+00004 // make_algo_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 _make_algo_MOEO_h
+00014 #define _make_algo_MOEO_h
+00015 
+00016 // the parser and parameter includes
+00017 #include "utils/eoParser.h"
+00018 #include "utils/eoState.h"
+00019 // selections
+00020 #include "eoNDSorting.h"
+00021 #include "old/moeoIBEA.h"
+00022 #include "old/moeoBinaryQualityIndicator.h"
+00023 #include "eoParetoRanking.h"
+00024 #include "moeoParetoSharing.h"
+00025 #include "eoSelectFromWorth.h"
+00026 #include "moeoSelectOneFromPopAndArch.h"
+00027 // replacements
+00028 #include "eoReplacement.h"
+00029 #include "moeoReplacement.h"
+00030 // breeders
+00031 #include "eoGeneralBreeder.h"
+00032 // the algorithm
+00033 #include "eoEasyEA.h"
+00034 
+00035 /*
+00036  * This function builds the algorithm (i.e. selection and replacement) from existing continue (or checkpoint) and operators
+00037  * It uses a parser (to get user parameters) and a state (to store the memory)
+00038  *
+00039  * NB: this function is almost cut-and-pasted from EO/make_algo_pareto.h and integrates MOEO features
+00040  */
+00041 template < class EOT >
+00042   eoAlgo < EOT > &do_make_algo_MOEO (eoParser & _parser, eoState & _state,
+00043                                      eoEvalFunc < EOT > &_eval,
+00044                                      eoContinue < EOT > &_continue,
+00045                                      eoGenOp < EOT > &_op,
+00046                                      moeoArchive < EOT > &_arch)
+00047 {
+00048 
+00049   // the fitness of an EOT object
+00050   typedef typename EOT::Fitness EOFitness;
+00051 
+00052 
+00053 
+00054 
+00055 
+00056   /* the selection criteria */
+00057   string & selStr = _parser.createParam (string ("NSGA-II"), "selCrit",
+00058                                          "Multi-objective selection criterion: NSGA, NSGA-II, IBEA, ParetoRanking, ParetoSharing",
+00059                                          'S', "Evolution Engine").value ();
+00060   double nicheSize = _parser.createParam (1.0, "nicheSize",
+00061                                           "Size of niche for NSGA-I or ParetoSharing",
+00062                                           'n',
+00063                                           "Evolution Engine").value ();
+00064   double kappa =
+00065     _parser.createParam (0.05, "kappa", "Scaling factor kappa for IBEA", 'k',
+00066                          "Evolution Engine").value ();
+00067   string & indStr =
+00068     _parser.createParam (string ("Epsilon"), "indicator",
+00069                          "Binary quality indicator for IBEA : Epsilon, Hypervolume",
+00070                          'I', "Evolution Engine").value ();
+00071   double rho = _parser.createParam (1.1, "rho",
+00072                                     "reference point for the hypervolume calculation (must not be smaller than 1)",
+00073                                     'r', "Evolution Engine").value ();
+00074   // the eoPerf2Worth object
+00075   eoPerf2Worth < EOT, double >*p2w;
+00076   if ((selStr == string ("NSGA")) || (selStr == string ("NSGA-I")))     // NSGA-I
+00077     p2w = new eoNDSorting_I < EOT > (nicheSize);
+00078   else if (selStr == string ("NSGA-II"))        // NSGA-II
+00079     p2w = new eoNDSorting_II < EOT > ();
+00080   else if (selStr == string ("IBEA"))
+00081     {                           // IBEA
+00082       // the binary quality indicator
+00083       moeoBinaryQualityIndicator < EOFitness > *I;
+00084       if (indStr == string ("Epsilon"))
+00085         I = new moeoAdditiveBinaryEpsilonIndicator < EOFitness >;
+00086       else if (indStr == string ("Hypervolume"))
+00087         I = new moeoBinaryHypervolumeIndicator < EOFitness > (rho);
+00088       else
+00089         {
+00090           string stmp =
+00091             string ("Invalid binary quality indicator (for IBEA): ") + indStr;
+00092           throw std::runtime_error (stmp.c_str ());
+00093         }
+00094       p2w = new moeoIBEASorting < EOT > (I, kappa);
+00095     }
+00096   else if (selStr == string ("ParetoRanking"))
+00097     {                           // Pareto Ranking
+00098       eoDominanceMap < EOT > &dominance =
+00099         _state.storeFunctor (new eoDominanceMap < EOT >);
+00100       p2w = new eoParetoRanking < EOT > (dominance);
+00101     }
+00102   else if (selStr == string ("ParetoSharing"))
+00103     {                           // Pareto Sharing    
+00104       p2w = new moeoParetoSharing < EOT > (nicheSize);
+00105     }
+00106   else
+00107     {
+00108       string stmp = string ("Invalid Pareto selection criterion: ") + selStr;
+00109       throw std::runtime_error (stmp.c_str ());
+00110     }
+00111   // store  
+00112   _state.storeFunctor (p2w);
+00113 
+00114 
+00115 
+00116 
+00117 
+00118   /* the selector */
+00119   eoValueParam < eoParamParamType > &selectionParam =
+00120     _parser.createParam (eoParamParamType ("DetTour(2)"), "selection",
+00121                          "Selection: Roulette, DetTour(T), StochTour(t) or Random",
+00122                          's', "Evolution Engine");
+00123   eoParamParamType & ppSelect = selectionParam.value ();        // pair< string , vector<string> >
+00124   // the select object
+00125   eoSelectOne < EOT > *select;
+00126   if (ppSelect.first == string ("DetTour"))
+00127     {                           // DetTour
+00128       unsigned detSize;
+00129       if (!ppSelect.second.size ())
+00130         {                       // no parameter added       
+00131           cerr << "WARNING, no parameter passed to DetTour, using 2" << endl;
+00132           detSize = 2;
+00133           // put back 2 in parameter for consistency (and status file)
+00134           ppSelect.second.push_back (string ("2"));
+00135         }
+00136       else                      // parameter passed by user as DetTour(T)
+00137         detSize = atoi (ppSelect.second[0].c_str ());
+00138       select = new eoDetTournamentWorthSelect < EOT > (*p2w, detSize);
+00139     }
+00140   else if (ppSelect.first == string ("StochTour"))
+00141     {                           // StochTour
+00142       double p;
+00143       if (!ppSelect.second.size ())
+00144         {                       // no parameter added       
+00145           cerr << "WARNING, no parameter passed to StochTour, using 1" <<
+00146             endl;
+00147           p = 1;
+00148           // put back p in parameter for consistency (and status file)
+00149           ppSelect.second.push_back (string ("1"));
+00150         }
+00151       else                      // parameter passed by user as DetTour(T)
+00152         p = atof (ppSelect.second[0].c_str ());
+00153       select = new eoStochTournamentWorthSelect < EOT > (*p2w, p);
+00154     }
+00155   else if (ppSelect.first == string ("Roulette"))
+00156     {                           // Roulette
+00157       select = new eoRouletteWorthSelect < EOT > (*p2w);
+00158     }
+00159   else if (ppSelect.first == string ("Random"))
+00160     {                           // Random
+00161       select = new eoRandomSelect < EOT >;
+00162     }
+00163   else
+00164     {
+00165       string stmp = string ("Invalid selection: ") + ppSelect.first;
+00166       throw std::runtime_error (stmp.c_str ());
+00167     }
+00168   // store  
+00169   _state.storeFunctor (select);
+00170 
+00171 
+00172 
+00173 
+00174 
+00175   /* elitism */
+00176   bool useElitism = _parser.createParam (false, "elitism",
+00177                                          "Use elitism in the selection process (individuals from the archive are randomly selected)",
+00178                                          'E', "Evolution Engine").value ();
+00179   double ratioFromPop = _parser.createParam (0.8, "ratio",
+00180                                              "Ratio from the population for elitism (must not be greater than 1)",
+00181                                              '\0',
+00182                                              "Evolution Engine").value ();
+00183   if (useElitism)
+00184     {
+00185       eoSelectOne < EOT > *selectPop = select;
+00186       select =
+00187         new moeoSelectOneFromPopAndArch < EOT > (*selectPop, _arch,
+00188                                                  ratioFromPop);
+00189       // store  
+00190       _state.storeFunctor (select);
+00191     }
+00192 
+00193 
+00194 
+00195 
+00196 
+00197   /* the number of offspring  */
+00198   eoValueParam < eoHowMany > &offspringRateParam =
+00199     _parser.createParam (eoHowMany (1.0), "nbOffspring",
+00200                          "Nb of offspring (percentage or absolute)", 'O',
+00201                          "Evolution Engine");
+00202 
+00203 
+00204 
+00205 
+00206 
+00207   /* the replacement */
+00208   string & repStr =
+00209     _parser.createParam (string ("Plus"), "replacement",
+00210                          "Replacement: Plus, DistinctPlus or Generational",
+00211                          'R', "Evolution Engine").value ();
+00212   eoReplacement < EOT > *replace;
+00213   if (repStr == string ("Plus"))        // Plus
+00214     {
+00215       replace = new moeoElitistReplacement < EOT, double >(*p2w);
+00216     }
+00217   else if (repStr == string ("DistinctPlus"))   // DistinctPlus
+00218     {
+00219       replace = new moeoDisctinctElitistReplacement < EOT, double >(*p2w);
+00220     }
+00221   else if (repStr == string ("Generational"))   // Generational
+00222     {
+00223       replace = new eoGenerationalReplacement < EOT >;
+00224     }
+00225   else
+00226     {
+00227       string stmp = string ("Invalid replacement: ") + repStr;
+00228       throw std::runtime_error (stmp.c_str ());
+00229     }
+00230   // store
+00231   _state.storeFunctor (replace);
+00232 
+00233 
+00234 
+00235 
+00236 
+00237   // the general breeder
+00238   eoGeneralBreeder < EOT > *breed =
+00239     new eoGeneralBreeder < EOT > (*select, _op, offspringRateParam.value ());
+00240   _state.storeFunctor (breed);
+00241 
+00242   // the eoEasyEA
+00243   eoAlgo < EOT > *algo =
+00244     new eoEasyEA < EOT > (_continue, _eval, *breed, *replace);
+00245   _state.storeFunctor (algo);
+00246   // that's it!
+00247   return *algo;
+00248 }
+00249 
+00250 #endif
+

Generated on Tue Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoArchiveFitnessSavingUpdater_8h-source.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoArchiveFitnessSavingUpdater_8h-source.html new file mode 100644 index 000000000..2bddb793f --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoArchiveFitnessSavingUpdater_8h-source.html @@ -0,0 +1,85 @@ + + +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 Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoArchiveUpdater_8h-source.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoArchiveUpdater_8h-source.html new file mode 100644 index 000000000..e6a730fab --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoArchiveUpdater_8h-source.html @@ -0,0 +1,71 @@ + + +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 Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoArchive_8h-source.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoArchive_8h-source.html new file mode 100644 index 000000000..75c1006f5 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoArchive_8h-source.html @@ -0,0 +1,112 @@ + + +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 Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoBinaryMetricSavingUpdater_8h-source.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoBinaryMetricSavingUpdater_8h-source.html new file mode 100644 index 000000000..133f7b251 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoBinaryMetricSavingUpdater_8h-source.html @@ -0,0 +1,100 @@ + + +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 Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoBinaryQualityIndicator_8h-source.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoBinaryQualityIndicator_8h-source.html new file mode 100644 index 000000000..645b9bc56 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoBinaryQualityIndicator_8h-source.html @@ -0,0 +1,350 @@ + + +ParadisEO-MOEO: moeoBinaryQualityIndicator.h Source File + + + + +
+
+

moeoBinaryQualityIndicator.h

00001 // -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+00002 
+00003 //-----------------------------------------------------------------------------
+00004 // moeoBinaryQualityIndicator.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 _moeoBinaryQualityIndicator_h
+00014 #define _moeoBinaryQualityIndicator_h
+00015 
+00016 // for std::exceptions
+00017 #include <stdexcept>
+00018 // for eoBF
+00019 #include <eoFunctor.h>
+00020 
+00021 
+00028 template < class EOFitness > class moeoBinaryQualityIndicator:public eoBF < const EOFitness &, const EOFitness &,
+00029   double >
+00030 {
+00031 
+00032 public:
+00033 
+00037   moeoBinaryQualityIndicator ():eoBF < const EOFitness &, const EOFitness &,
+00038     double >()
+00039   {
+00040     bounds.reserve (traits::nObjectives ());
+00041     bounds.resize (traits::nObjectives ());
+00042   }
+00043 
+00044 
+00051   void setBounds (const unsigned _iObj, const double _min, const double _max)
+00052   {
+00053     bounds[_iObj] = Range (_min, _max);
+00054   }
+00055 
+00056 
+00057 protected:
+00058 
+00062   class Range
+00063   {
+00064   public:
+00065     Range ()
+00066     {
+00067       min = 0;
+00068       max = 0;
+00069       r = 0;
+00070     }
+00071     Range (const double _min, const double _max)
+00072     {
+00073       min = _min;
+00074       max = _max;
+00075       r = max - min;
+00076       if (r < 0)
+00077         throw std::logic_error ("Negative range in eoBinaryQualityIndicator");
+00078     }
+00079     double minimum ()
+00080     {
+00081       return min;
+00082     }
+00083     double maximum ()
+00084     {
+00085       return max;
+00086     }
+00087     double range ()
+00088     {
+00089       return r;
+00090     }
+00091   private:
+00092     double min, max, r;
+00093   };
+00094 
+00095 
+00097   std::vector < Range > bounds;
+00098 
+00099 
+00100 private:
+00101 
+00103   typedef typename EOFitness::fitness_traits traits;
+00104 
+00105 };
+00106 
+00107 
+00108 
+00109 
+00110 
+00115 template < class EOFitness > class moeoAdditiveBinaryEpsilonIndicator:public moeoBinaryQualityIndicator <
+00116   EOFitness
+00117   >
+00118 {
+00119 
+00120 public:
+00121 
+00125 moeoAdditiveBinaryEpsilonIndicator ():moeoBinaryQualityIndicator < EOFitness >
+00126     ()
+00127   {
+00128   }
+00129 
+00130 
+00138   double operator  () (const EOFitness & _fitness_eo1,
+00139                        const EOFitness & _fitness_eo2)
+00140   {
+00141     double epsilon, tmp;
+00142     // computation of the epsilon value for the first objective
+00143     epsilon = epsilonValue (_fitness_eo1, _fitness_eo2, 0);
+00144     // computation of the epsilon value for other objectives
+00145     for (unsigned i = 1; i < traits::nObjectives (); i++)
+00146       {
+00147         tmp = epsilonValue (_fitness_eo1, _fitness_eo2, i);
+00148         epsilon = std::max (epsilon, tmp);
+00149       }
+00150     // the maximum epsilon value
+00151     return epsilon;
+00152   }
+00153 
+00154 
+00155 private:
+00156 
+00158   typedef typename EOFitness::fitness_traits traits;
+00160   using moeoBinaryQualityIndicator < EOFitness >::bounds;
+00161 
+00162 
+00170   double epsilonValue (const EOFitness & _fitness_eo1,
+00171                        const EOFitness & _fitness_eo2, const unsigned _iObj)
+00172   {
+00173     double result;
+00174     if (bounds[_iObj].range () == 0)
+00175       {
+00176         // min==max => every individuals has the same value for this objective      
+00177         result = 0;
+00178       }
+00179     else
+00180       {
+00181         // computation of the epsilon value for the objective _iObj (in case of a minimization)
+00182         result =
+00183           (_fitness_eo1[_iObj] -
+00184            bounds[_iObj].minimum ()) / bounds[_iObj].range ();
+00185         result -=
+00186           (_fitness_eo2[_iObj] -
+00187            bounds[_iObj].minimum ()) / bounds[_iObj].range ();
+00188         // if we are maximizing, invert the value
+00189         if (traits::maximizing (_iObj))
+00190           result = -result;
+00191       }
+00192     // the espilon value
+00193     return result;
+00194   }
+00195 
+00196 };
+00197 
+00198 
+00199 
+00200 
+00201 
+00206 template < class EOFitness > class moeoBinaryHypervolumeIndicator:public moeoBinaryQualityIndicator <
+00207   EOFitness >
+00208 {
+00209 
+00210 public:
+00211 
+00216 moeoBinaryHypervolumeIndicator (double _rho):moeoBinaryQualityIndicator < EOFitness >
+00217     ()
+00218   {
+00219     rho = _rho;
+00220     // consistency check
+00221     if (rho < 1)
+00222       {
+00223         cout <<
+00224           "Warning, reference point rho for the hypervolume calculation must not be smaller than 1"
+00225           << endl;
+00226         cout << "Adjusted to 1" << endl;
+00227         rho = 1;
+00228       }
+00229   }
+00230 
+00231 
+00239   double operator  () (const EOFitness & _fitness_eo1,
+00240                        const EOFitness & _fitness_eo2)
+00241   {
+00242     double result;
+00243     if (_fitness_eo1.dominates (_fitness_eo2))
+00244       result =
+00245         -hypervolumeIndicatorValue (_fitness_eo1, _fitness_eo2,
+00246                                     traits::nObjectives ());
+00247     else
+00248       result =
+00249         hypervolumeIndicatorValue (_fitness_eo2, _fitness_eo1,
+00250                                    traits::nObjectives ());
+00251     return result;
+00252   }
+00253 
+00254 
+00255 private:
+00256 
+00258   typedef typename EOFitness::fitness_traits traits;
+00260   using moeoBinaryQualityIndicator < EOFitness >::bounds;
+00261 
+00263   double rho;
+00264 
+00265 
+00274   double hypervolumeIndicatorValue (const EOFitness & _fitness_eo1,
+00275                                     const EOFitness & _fitness_eo2,
+00276                                     const unsigned _iObj, const bool _flag =
+00277                                     false)
+00278   {
+00279     double result;
+00280     if (bounds[_iObj - 1].range () == 0)
+00281       {
+00282         // min==max => every individuals as the same value for this objective      
+00283         result = 0;
+00284       }
+00285     else
+00286       {
+00287         if (traits::maximizing (_iObj - 1))     // maximizing
+00288           result =
+00289             hypervolumeIndicatorValueMax (_fitness_eo1, _fitness_eo2, _iObj,
+00290                                           _flag);
+00291         else                    // minimizing
+00292           result =
+00293             hypervolumeIndicatorValueMin (_fitness_eo1, _fitness_eo2, _iObj,
+00294                                           _flag);
+00295       }
+00296     return result;
+00297   }
+00298 
+00299 
+00309   double hypervolumeIndicatorValueMin (const EOFitness & _fitness_eo1,
+00310                                        const EOFitness & _fitness_eo2,
+00311                                        const unsigned _iObj, const bool _flag)
+00312   {
+00313     double result;
+00314     double r = rho * bounds[_iObj - 1].range ();
+00315     double max = bounds[_iObj - 1].minimum () + r;
+00316     // fitness of individuals _eo1 and _eo2 for the objective _iObj (if flag==true, _eo2 is not taken into account)
+00317     double fitness_eo1 = _fitness_eo1[_iObj - 1];
+00318     double fitness_eo2;
+00319     if (_flag)
+00320       fitness_eo2 = max;
+00321     else
+00322       fitness_eo2 = _fitness_eo2[_iObj - 1];
+00323     // computation of the volume
+00324     if (_iObj == 1)
+00325       {
+00326         if (fitness_eo1 < fitness_eo2)
+00327           result = (fitness_eo2 - fitness_eo1) / r;
+00328         else
+00329           result = 0;
+00330       }
+00331     else
+00332       {
+00333         if (fitness_eo1 < fitness_eo2)
+00334           {
+00335             result =
+00336               hypervolumeIndicatorValue (_fitness_eo1, _fitness_eo2,
+00337                                          _iObj - 1) * (max - fitness_eo2) / r;
+00338             result +=
+00339               hypervolumeIndicatorValue (_fitness_eo1, _fitness_eo2,
+00340                                          _iObj - 1,
+00341                                          true) * (fitness_eo2 -
+00342                                                   fitness_eo1) / r;
+00343           }
+00344         else
+00345           result =
+00346             hypervolumeIndicatorValue (_fitness_eo1, _fitness_eo2,
+00347                                        _iObj - 1) * (max - fitness_eo2) / r;
+00348       }
+00349     // the volume
+00350     return result;
+00351   }
+00352 
+00353 
+00363   double hypervolumeIndicatorValueMax (const EOFitness & _fitness_eo1,
+00364                                        const EOFitness & _fitness_eo2,
+00365                                        const unsigned _iObj, const bool _flag)
+00366   {
+00367     double result;
+00368     double r = rho * bounds[_iObj - 1].range ();
+00369     double min = bounds[_iObj - 1].maximum () - r;
+00370     // fitness of individuals _eo1 and _eo2 for the objective _iObj (if flag==true, _eo2 is not taken into account)
+00371     double fitness_eo1 = _fitness_eo1[_iObj - 1];
+00372     double fitness_eo2;
+00373     if (_flag)
+00374       fitness_eo2 = min;
+00375     else
+00376       fitness_eo2 = _fitness_eo2[_iObj - 1];
+00377     // computation of the volume
+00378     if (_iObj == 1)
+00379       {
+00380         if (fitness_eo1 > fitness_eo2)
+00381           result = (fitness_eo1 - fitness_eo2) / r;
+00382         else
+00383           result = 0;
+00384       }
+00385     else
+00386       {
+00387         if (fitness_eo1 > fitness_eo2)
+00388           {
+00389             result =
+00390               hypervolumeIndicatorValue (_fitness_eo1, _fitness_eo2,
+00391                                          _iObj - 1) * (fitness_eo2 - min) / r;
+00392             result +=
+00393               hypervolumeIndicatorValue (_fitness_eo1, _fitness_eo2,
+00394                                          _iObj - 1,
+00395                                          true) * (fitness_eo1 -
+00396                                                   fitness_eo2) / r;
+00397           }
+00398         else
+00399           result =
+00400             hypervolumeIndicatorValue (_fitness_eo1, _fitness_eo2,
+00401                                        _iObj - 1) * (fitness_eo2 - min) / r;
+00402       }
+00403     // the volume
+00404     return result;
+00405   }
+00406 
+00407 };
+00408 
+00409 #endif
+

Generated on Tue Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoCombinedMOLS_8h-source.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoCombinedMOLS_8h-source.html new file mode 100644 index 000000000..0f5b261e3 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoCombinedMOLS_8h-source.html @@ -0,0 +1,78 @@ + + +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 Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoContributionMetric_8h-source.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoContributionMetric_8h-source.html new file mode 100644 index 000000000..236649b54 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoContributionMetric_8h-source.html @@ -0,0 +1,116 @@ + + +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 Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoEntropyMetric_8h-source.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoEntropyMetric_8h-source.html new file mode 100644 index 000000000..67cadebee --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoEntropyMetric_8h-source.html @@ -0,0 +1,194 @@ + + +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 Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoHybridMOLS_8h-source.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoHybridMOLS_8h-source.html new file mode 100644 index 000000000..b1632fa73 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoHybridMOLS_8h-source.html @@ -0,0 +1,84 @@ + + +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 Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoIBEA_8h-source.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoIBEA_8h-source.html new file mode 100644 index 000000000..d7c8a6d22 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoIBEA_8h-source.html @@ -0,0 +1,427 @@ + + +ParadisEO-MOEO: moeoIBEA.h Source File + + + + +
+
+

moeoIBEA.h

00001 // -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+00002 
+00003 //-----------------------------------------------------------------------------
+00004 // moeoIBEASorting.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 
+00014 #ifndef _moeoIBEASorting_h
+00015 #define _moeoIBEASorting_h
+00016 
+00017 #include <math.h>
+00018 #include <list>
+00019 #include <eoPop.h>
+00020 #include <eoPerf2Worth.h>
+00021 #include "moeoBinaryQualityIndicator.h"
+00022 
+00023 
+00028 template < class EOT, class Fitness > class moeoIBEA:public eoPerf2WorthCached < EOT,
+00029   double >
+00030 {
+00031 
+00032 public:
+00034   using eoPerf2WorthCached < EOT, double >::value;
+00035 
+00036     moeoIBEA (moeoBinaryQualityIndicator < Fitness > *_I)
+00037   {
+00038     I = _I;
+00039   }
+00040 
+00041 
+00046   void calculate_worths (const eoPop < EOT > &_pop)
+00047   {
+00048     /* resizing the worths beforehand */
+00049     value ().resize (_pop.size ());
+00050 
+00051     /* computation and setting of the bounds for each objective */
+00052     setBounds (_pop);
+00053 
+00054     /* computation of the fitness for each individual */
+00055     fitnesses (_pop);
+00056 
+00057     // higher is better, so invert the value
+00058     double max = *std::max_element (value ().begin (), value ().end ());
+00059     for (unsigned i = 0; i < value ().size (); i++)
+00060       value ()[i] = max - value ()[i];
+00061   }
+00062 
+00063 
+00064 protected:
+00065 
+00067   moeoBinaryQualityIndicator < Fitness > *I;
+00068 
+00069   virtual void setBounds (const eoPop < EOT > &_pop) = 0;
+00070   virtual void fitnesses (const eoPop < EOT > &_pop) = 0;
+00071 
+00072 };
+00073 
+00074 
+00075 
+00076 
+00077 
+00084 template < class EOT, class Fitness = typename EOT::Fitness > class moeoIBEASorting:public moeoIBEA < EOT,
+00085   Fitness
+00086   >
+00087 {
+00088 
+00089 public:
+00090 
+00096   moeoIBEASorting (moeoBinaryQualityIndicator < Fitness > *_I,
+00097                    const double _kappa):
+00098     moeoIBEA <
+00099     EOT,
+00100   Fitness > (_I)
+00101   {
+00102     kappa = _kappa;
+00103   }
+00104 
+00105 
+00106 private:
+00108   using moeoIBEA < EOT, Fitness >::I;
+00110   using moeoIBEA < EOT, Fitness >::value;
+00112   double
+00113     kappa;
+00114 
+00115 
+00120   void
+00121   setBounds (const eoPop < EOT > &_pop)
+00122   {
+00123     typedef
+00124       typename
+00125       EOT::Fitness::fitness_traits
+00126       traits;
+00127     double
+00128       min,
+00129       max;
+00130     for (unsigned i = 0; i < traits::nObjectives (); i++)
+00131       {
+00132         min = _pop[0].fitness ()[i];
+00133         max = _pop[0].fitness ()[i];
+00134         for (unsigned j = 1; j < _pop.size (); j++)
+00135           {
+00136             min = std::min (min, _pop[j].fitness ()[i]);
+00137             max = std::max (max, _pop[j].fitness ()[i]);
+00138           }
+00139         // setting of the bounds for the objective i
+00140         I->setBounds (i, min, max);
+00141       }
+00142   }
+00143 
+00144 
+00149   void
+00150   fitnesses (const eoPop < EOT > &_pop)
+00151   {
+00152     // reprsentation of the fitness components
+00153     std::vector < std::vector < double > >
+00154     fitComponents (_pop.size (), _pop.size ());
+00155     // the maximum absolute indicator value
+00156     double
+00157       maxAbsoluteIndicatorValue = 0;
+00158 
+00159     // computation of the indicator values and of the maximum absolute indicator value
+00160     for (unsigned i = 0; i < _pop.size (); i++)
+00161       for (unsigned j = 0; j < _pop.size (); j++)
+00162         if (i != j)
+00163           {
+00164             fitComponents[i][j] =
+00165               (*I) (_pop[i].fitness (), _pop[j].fitness ());
+00166             maxAbsoluteIndicatorValue =
+00167               std::max (maxAbsoluteIndicatorValue,
+00168                         fabs (fitComponents[i][j]));
+00169           }
+00170 
+00171     // computation of the fitness components for each pair of individuals
+00172     // if maxAbsoluteIndicatorValue==0, every individuals have the same fitness values for all objectives (already = 0)
+00173     if (maxAbsoluteIndicatorValue != 0)
+00174       for (unsigned i = 0; i < _pop.size (); i++)
+00175         for (unsigned j = 0; j < _pop.size (); j++)
+00176           if (i != j)
+00177             fitComponents[i][j] =
+00178               exp (-fitComponents[i][j] /
+00179                    (maxAbsoluteIndicatorValue * kappa));
+00180 
+00181     // computation of the fitness for each individual
+00182     for (unsigned i = 0; i < _pop.size (); i++)
+00183       {
+00184         value ()[i] = 0;
+00185         for (unsigned j = 0; j < _pop.size (); j++)
+00186           if (i != j)
+00187             value ()[i] += fitComponents[j][i];
+00188       }
+00189   }
+00190 
+00191 };
+00192 
+00193 
+00194 
+00195 
+00196 
+00203 template < class EOT, class FitnessEval = typename EOT::Fitness::FitnessEval > class moeoIBEAStochSorting:public moeoIBEA < EOT,
+00204   FitnessEval
+00205   >
+00206 {
+00207 
+00208 public:
+00209 
+00214 moeoIBEAStochSorting (moeoBinaryQualityIndicator < FitnessEval > *_I):moeoIBEA < EOT,
+00215     FitnessEval >
+00216     (_I)
+00217   {
+00218   }
+00219 
+00220 
+00221 private:
+00223   using moeoIBEAStochSorting < EOT, FitnessEval >::I;
+00225   using moeoIBEAStochSorting < EOT, FitnessEval >::value;
+00226 
+00227 
+00231   static double
+00232   zero ()
+00233   {
+00234     return 1e-7;
+00235   }
+00236 
+00237 
+00242   void
+00243   setBounds (const eoPop < EOT > &_pop)
+00244   {
+00245     typedef
+00246       typename
+00247       EOT::Fitness::FitnessTraits
+00248       traits;
+00249     double
+00250       min,
+00251       max;
+00252     for (unsigned i = 0; i < traits::nObjectives (); i++)
+00253       {
+00254         min = _pop[0].fitness ().minimum (i);
+00255         max = _pop[0].fitness ().maximum (i);
+00256         for (unsigned j = 1; j < _pop.size (); j++)
+00257           {
+00258             min = std::min (min, _pop[j].fitness ().minimum (i));
+00259             max = std::max (max, _pop[j].fitness ().maximum (i));
+00260           }
+00261         // setting of the bounds for the ith objective
+00262         I->setBounds (i, min, max);
+00263       }
+00264   }
+00265 
+00266 
+00271   void
+00272   fitnesses (const eoPop < EOT > &_pop)
+00273   {
+00274     typedef
+00275       typename
+00276       EOT::Fitness::FitnessTraits
+00277       traits;
+00278     unsigned
+00279       nEval = traits::nEvaluations ();
+00280     unsigned
+00281       index;
+00282     double
+00283       eiv,
+00284       p,
+00285       sumP,
+00286       iValue;
+00287     std::list < std::pair < double, unsigned > >
+00288       l;
+00289     std::vector < unsigned >
+00290     n (_pop.size ());
+00291 
+00292     for (unsigned ind = 0; ind < _pop.size (); ind++)
+00293       {
+00294         value ()[ind] = 0.0;    // fitness value for the individual ind
+00295         for (unsigned eval = 0; eval < nEval; eval++)
+00296           {
+00297 
+00298             // I-values computation for the evaluation eval of the individual ind
+00299             l.clear ();
+00300             for (unsigned i = 0; i < _pop.size (); i++)
+00301               {
+00302                 if (i != ind)
+00303                   {
+00304                     for (unsigned j = 0; j < nEval; j++)
+00305                       {
+00306                         std::pair < double, unsigned >
+00307                           pa;
+00308                         // I-value
+00309                         pa.first =
+00310                           (*I) (_pop[ind].fitness ()[eval],
+00311                                 _pop[i].fitness ()[j]);
+00312                         // index of the individual
+00313                         pa.second = i;
+00314                         // append this to the list
+00315                         l.push_back (pa);
+00316                       }
+00317                   }
+00318               }
+00319 
+00320             // sorting of the I-values (in decreasing order)
+00321             l.sort ();
+00322 
+00323             // computation of the Expected Indicator Value (eiv) for the evaluation eval of the individual ind
+00324             eiv = 0.0;
+00325             n.assign (n.size (), 0);    // n[i]==0 for all i
+00326             sumP = 0.0;
+00327             while (((1 - sumP) > zero ()) && (l.size () > 0))
+00328               {
+00329                 // we use the last element of the list (the greatest one)
+00330                 iValue = l.back ().first;
+00331                 index = l.back ().second;
+00332                 // computation of the probability to appear
+00333                 p = (1.0 / (nEval - n[index])) * (1.0 - sumP);
+00334                 // eiv update
+00335                 eiv += p * iValue;
+00336                 // update of the number of elements for individual index
+00337                 n[index]++;
+00338                 // removing the last element of the list
+00339                 l.pop_back ();
+00340                 // sum of p update
+00341                 sumP += p;
+00342               }
+00343             value ()[ind] += eiv / nEval;
+00344           }
+00345       }
+00346 
+00347   }
+00348 
+00349 };
+00350 
+00351 
+00352 
+00353 
+00354 
+00361 template < class EOT, class FitnessEval = typename EOT::Fitness::FitnessEval > class moeoIBEAAvgSorting:public moeoIBEA < EOT,
+00362   FitnessEval
+00363   >
+00364 {
+00365 
+00366 public:
+00367 
+00373   moeoIBEAAvgSorting (moeoBinaryQualityIndicator < FitnessEval > *_I,
+00374                       const double _kappa):
+00375     moeoIBEA <
+00376     EOT,
+00377   FitnessEval > (_I)
+00378   {
+00379     kappa = _kappa;
+00380   }
+00381 
+00382 
+00383 private:
+00385   using moeoIBEAAvgSorting < EOT, FitnessEval >::I;
+00387   using moeoIBEAAvgSorting < EOT, FitnessEval >::value;
+00389   double
+00390     kappa;
+00391 
+00392 
+00397   void
+00398   setBounds (const eoPop < EOT > &_pop)
+00399   {
+00400     typedef
+00401       typename
+00402       EOT::Fitness::FitnessTraits
+00403       traits;
+00404     double
+00405       min,
+00406       max;
+00407     for (unsigned i = 0; i < traits::nObjectives (); i++)
+00408       {
+00409         min = _pop[0].fitness ().averagedParetoFitnessObject ()[i];
+00410         max = _pop[0].fitness ().averagedParetoFitnessObject ()[i];
+00411         for (unsigned j = 1; j < _pop.size (); j++)
+00412           {
+00413             min =
+00414               std::min (min,
+00415                         _pop[j].fitness ().averagedParetoFitnessObject ()[i]);
+00416             max =
+00417               std::max (max,
+00418                         _pop[j].fitness ().averagedParetoFitnessObject ()[i]);
+00419           }
+00420         // setting of the bounds for the objective i
+00421         I->setBounds (i, min, max);
+00422       }
+00423   }
+00424 
+00425 
+00430   void
+00431   fitnesses (const eoPop < EOT > &_pop)
+00432   {
+00433     // reprsentation of the fitness components
+00434     std::vector < std::vector < double > >
+00435     fitComponents (_pop.size (), _pop.size ());
+00436     // the maximum absolute indicator value
+00437     double
+00438       maxAbsoluteIndicatorValue = 0;
+00439 
+00440     // computation of the indicator values and of the maximum absolute indicator value
+00441     for (unsigned i = 0; i < _pop.size (); i++)
+00442       for (unsigned j = 0; j < _pop.size (); j++)
+00443         if (i != j)
+00444           {
+00445             fitComponents[i][j] =
+00446               (*I) (_pop[i].fitness ().averagedParetoFitnessObject (),
+00447                     _pop[j].fitness ().averagedParetoFitnessObject ());
+00448             maxAbsoluteIndicatorValue =
+00449               std::max (maxAbsoluteIndicatorValue,
+00450                         fabs (fitComponents[i][j]));
+00451           }
+00452 
+00453     // computation of the fitness components for each pair of individuals
+00454     // if maxAbsoluteIndicatorValue==0, every individuals have the same fitness values for all objectives (already = 0)
+00455     if (maxAbsoluteIndicatorValue != 0)
+00456       for (unsigned i = 0; i < _pop.size (); i++)
+00457         for (unsigned j = 0; j < _pop.size (); j++)
+00458           if (i != j)
+00459             fitComponents[i][j] =
+00460               exp (-fitComponents[i][j] /
+00461                    (maxAbsoluteIndicatorValue * kappa));
+00462 
+00463     // computation of the fitness for each individual
+00464     for (unsigned i = 0; i < _pop.size (); i++)
+00465       {
+00466         value ()[i] = 0;
+00467         for (unsigned j = 0; j < _pop.size (); j++)
+00468           if (i != j)
+00469             value ()[i] += fitComponents[j][i];
+00470       }
+00471   }
+00472 
+00473 };
+00474 
+00475 
+00476 #endif
+

Generated on Tue Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoMOLS_8h-source.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoMOLS_8h-source.html new file mode 100644 index 000000000..d5727c28e --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoMOLS_8h-source.html @@ -0,0 +1,52 @@ + + +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 Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoMetric_8h-source.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoMetric_8h-source.html new file mode 100644 index 000000000..c617783c3 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoMetric_8h-source.html @@ -0,0 +1,110 @@ + + +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 Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoNDSorting_8h-source.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoNDSorting_8h-source.html new file mode 100644 index 000000000..27e39555a --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoNDSorting_8h-source.html @@ -0,0 +1,121 @@ + + +ParadisEO-MOEO: moeoNDSorting.h Source File + + + + +
+
+

moeoNDSorting.h

00001 // -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+00002 
+00003 //-----------------------------------------------------------------------------
+00004 // moeoNDSorting.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 moeoNDSorting_h
+00014 #define moeoNDSorting_h
+00015 
+00016 #include <cfloat>
+00017 #include <eoNDSorting.h>
+00018 
+00019 # define INF 1.0e14             // DBL_MAX
+00020 
+00026 template < class EOT > class moeoNDSorting_II:public eoNDSorting < EOT >
+00027 {
+00028 public:
+00029 
+00033 moeoNDSorting_II (bool nasty_flag_ = false):eoNDSorting < EOT >
+00034     (nasty_flag_)
+00035   {
+00036   }
+00037 
+00041   typedef std::pair < double, unsigned >double_index_pair;
+00042 
+00046   class compare_nodes
+00047   {
+00048     public:bool operator () (const double_index_pair & a,
+00049                              const double_index_pair & b) const
+00050     {
+00051       return a.first < b.first;
+00052     }
+00053   };
+00054 
+00056   std::vector < double >niche_penalty (const std::vector < unsigned >&_cf,
+00057                                        const eoPop < EOT > &_pop)
+00058   {
+00059     typedef typename EOT::Fitness::fitness_traits traits;
+00060     unsigned i;
+00061     std::vector < double >niche_count (_cf.size (), 0.);
+00062 
+00063 
+00064     unsigned nObjectives = traits::nObjectives ();      //_pop[_cf[0]].fitness().size();
+00065 
+00066     for (unsigned o = 0; o < nObjectives; ++o)
+00067       {
+00068         std::vector < std::pair < double,
+00069           unsigned > >performance (_cf.size ());
+00070         for (i = 0; i < _cf.size (); ++i)
+00071           {
+00072             performance[i].first = _pop[_cf[i]].fitness ()[o];
+00073             performance[i].second = i;
+00074           }
+00075 
+00076         std::sort (performance.begin (), performance.end (), compare_nodes ()); // a lambda operator would've been nice here
+00077 
+00078         // set boundary at INF (so it will get chosen over all the others
+00079         niche_count[performance[0].second] = INF;
+00080         niche_count[performance.back ().second] = INF;
+00081 
+00082         if (performance[0].first != performance.back ().first)
+00083           {
+00084             for (i = 1; i < _cf.size () - 1; ++i)
+00085               {
+00086                 if (niche_count[performance[i].second] != INF)
+00087                   {
+00088                     niche_count[performance[i].second] +=
+00089                       (performance[i + 1].first -
+00090                        performance[i -
+00091                                    1].first) / (performance.back ().first -
+00092                                                 performance[0].first);
+00093                   }
+00094               }
+00095           }
+00096       }
+00097 
+00098     // transform niche_count into penality
+00099     for (i = 0; i < niche_count.size (); ++i)
+00100       {
+00101         niche_count[i] = INF - niche_count[i];
+00102       }
+00103 
+00104     return niche_count;
+00105   }
+00106 };
+00107 
+00108 #endif
+

Generated on Tue Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoNSGA__II_8h-source.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoNSGA__II_8h-source.html new file mode 100644 index 000000000..ce36165c8 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoNSGA__II_8h-source.html @@ -0,0 +1,115 @@ + + +ParadisEO-MOEO: moeoNSGA_II.h Source File + + + + +
+
+

moeoNSGA_II.h

00001 // -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+00002 
+00003 //-----------------------------------------------------------------------------
+00004 // moeoNSGA_II.h
+00005 // (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2006
+00006 // (c) Deneche Abdelhakim, 2006
+00007 /*
+00008     This library...
+00009 
+00010     Contact: paradiseo-help@lists.gforge.inria.fr
+00011  */
+00012 //-----------------------------------------------------------------------------
+00013 #ifndef MOEONSGA_II_H_
+00014 #define MOEONSGA_II_H_
+00015 
+00016 #include <eoGeneralBreeder.h>
+00017 #include <eoBreed.h>
+00018 #include <eoContinue.h>
+00019 #include <eoEvalFunc.h>
+00020 #include <eoGenContinue.h>
+00021 #include <eoGenOp.h>
+00022 #include <eoPopEvalFunc.h>
+00023 #include <eoSelectOne.h>
+00024 #include <eoSGAGenOp.h>
+00025 
+00026 #include <moeoNDSorting.h>
+00027 #include <moeoReplacement.h>
+00028 
+00031 template < class EOT > class moeoNSGA_II:public eoAlgo < EOT >
+00032 {
+00033 public:
+00034 
+00046   moeoNSGA_II (unsigned _max_gen, eoEvalFunc < EOT > &_eval, eoGenOp < EOT > &_op):continuator (*(new eoGenContinue < EOT > (_max_gen))), eval (_eval), loopEval (_eval), popEval (loopEval), selectOne (sorting, 2),   // binary tournament selection
+00047     replace (sorting), genBreed (selectOne, _op), breed (genBreed)
+00048   {
+00049   }
+00050 
+00052   moeoNSGA_II (unsigned _max_gen, eoEvalFunc < EOT > &_eval, eoQuadOp < EOT > &crossover, double pCross, eoMonOp < EOT > &mutation, double pMut):continuator (*(new eoGenContinue < EOT > (_max_gen))), eval (_eval), loopEval (_eval), popEval (loopEval), selectOne (sorting, 2),     // binary tournament selection
+00053    
+00054     replace (sorting),
+00055     genBreed (selectOne,
+00056               *new eoSGAGenOp < EOT > (crossover, pCross, mutation, pMut)),
+00057     breed (genBreed)
+00058   {
+00059   }
+00060 
+00062 moeoNSGA_II (eoContinue < EOT > &_continuator, eoEvalFunc < EOT > &_eval, eoGenOp < EOT > &_op):
+00063   continuator (_continuator), eval (_eval), loopEval (_eval), popEval (loopEval), selectOne (sorting, 2),       // binary tournament selection
+00064     replace (sorting), genBreed (selectOne, _op), breed (genBreed)
+00065   {
+00066   }
+00067 
+00069   virtual void operator () (eoPop < EOT > &_pop)
+00070   {
+00071     eoPop < EOT > offspring, empty_pop;
+00072     popEval (empty_pop, _pop);  // a first eval of _pop
+00073     do
+00074       {
+00075         // generate offspring, worths are recalculated if necessary
+00076         breed (_pop, offspring);
+00077 
+00078         // eval of offspring
+00079         popEval (_pop, offspring);
+00080 
+00081         // after replace, the new pop is in _pop. Worths are recalculated if necessary
+00082         replace (_pop, offspring);
+00083 
+00084       }
+00085     while (continuator (_pop));
+00086   }
+00087 
+00088 protected:
+00089   eoContinue < EOT > &continuator;
+00090 
+00091   eoEvalFunc < EOT > &eval;
+00092   eoPopLoopEval < EOT > loopEval;
+00093 
+00094   eoPopEvalFunc < EOT > &popEval;
+00095 
+00097   moeoNDSorting_II < EOT > sorting;
+00099   eoDetTournamentWorthSelect < EOT > selectOne;
+00101   moeoElitistReplacement < EOT > replace;
+00102   eoGeneralBreeder < EOT > genBreed;
+00103   eoBreed < EOT > &breed;
+00104 };
+00105 
+00106 #endif
+

Generated on Tue Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoParetoPhenDist_8h-source.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoParetoPhenDist_8h-source.html new file mode 100644 index 000000000..7d154df16 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoParetoPhenDist_8h-source.html @@ -0,0 +1,78 @@ + + +ParadisEO-MOEO: moeoParetoPhenDist.h Source File + + + + +
+
+

moeoParetoPhenDist.h

00001 // -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+00002 
+00003 //-----------------------------------------------------------------------------
+00004 // moeoParetoPhenDist.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 #include<eoParetoFitness.h>
+00014 
+00015 template < class EOT, class DistType > class moeoParetoPhenDist
+00016 {
+00017 public:
+00018   virtual DistType operator  ()(const EOT & eopf1, const EOT & eopf2) = 0;
+00019 
+00020 };
+00021 
+00022 
+00023 
+00024 //Euclidien distance
+00025 
+00026 template < class EOT, class DistType =
+00027   double >class moeoParetoEuclidDist:public moeoParetoPhenDist < EOT,
+00028   DistType >
+00029 {
+00030 
+00031 public:
+00032   DistType operator  () (const EOT & eopf1, const EOT & eopf2)
+00033   {
+00034     double res = 0.0;
+00035     double max = 0.0;
+00036     double temp;
+00037     for (unsigned i = 0; i < eopf1.fitness ().size (); ++i)
+00038       {
+00039         temp =
+00040           (eopf1.fitness ().operator[](i) -
+00041            eopf2.fitness ().operator[](i)) * (eopf1.fitness ().operator[](i) -
+00042                                               eopf2.fitness ().operator[](i));
+00043         if (temp > max)
+00044           max = temp;           /* for normalization */
+00045         res = res + temp;
+00046       }
+00047     return sqrt (res / max);
+00048   }
+00049 
+00050 };
+

Generated on Tue Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoParetoSharing_8h-source.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoParetoSharing_8h-source.html new file mode 100644 index 000000000..0d95ff627 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoParetoSharing_8h-source.html @@ -0,0 +1,185 @@ + + +ParadisEO-MOEO: moeoParetoSharing.h Source File + + + + +
+
+

moeoParetoSharing.h

00001 // -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+00002 
+00003 //-----------------------------------------------------------------------------
+00004 // moeoParetoSharing.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 #include <EO.h>
+00014 #include <eoPerf2Worth.h>
+00015 #include <old/moeoParetoPhenDist.h>
+00016 #include <eoParetoRanking.h>
+00017 
+00018 template < class EOT, class worthT =
+00019   double >class moeoParetoSharing:public eoPerf2Worth < EOT, worthT >
+00020 {
+00021 public:
+00022 
+00023   moeoParetoSharing (double _nicheSize):eoPerf2Worth < EOT,
+00024     worthT > ("ParetoSharing"), nicheSize (_nicheSize), dist (euc_dist),
+00025     Dmax (_nicheSize)
+00026   {
+00027   }
+00028 
+00029 
+00030   moeoParetoSharing (double _nicheSize, moeoParetoPhenDist < EOT,
+00031                      worthT > &_dist):eoPerf2Worth < EOT,
+00032     worthT > ("ParetoSharing"), nicheSize (_nicheSize), dist (_dist),
+00033     Dmax (_nicheSize)
+00034   {
+00035   }
+00036 
+00037 
+00038 
+00039 
+00040   void operator  () /*calculate_worths */ (const eoPop < EOT > &_pop)
+00041   {
+00042 
+00043     unsigned i, j, pSize = _pop.size ();
+00044     //cout<<"**************************************************************************************\n";
+00045     // std :: cout << "psize = " << pSize << std :: endl ;
+00046     if (pSize <= 1)
+00047       throw std::
+00048         runtime_error ("Apptempt to do sharing with population of size 1");
+00049     eoPerf2Worth < EOT, worthT >::value ().resize (pSize);
+00050     std::vector < double >sim (pSize);  // to hold the similarities
+00051 
+00052     dMatrix distMatrix (pSize);
+00053 
+00054 // compute the distance
+00055     distMatrix[0][0] = 0;
+00056     for (i = 1; i < pSize; i++)
+00057       {
+00058         distMatrix[i][i] = 0;
+00059         for (j = 0; j < i; j++)
+00060           {
+00061             //if
+00062             distMatrix[i][j] = distMatrix[j][i] = dist (_pop[i], _pop[j]);
+00063             //cout<<"   "<<distMatrix[j][i]<<"  "<<dist(_pop[i],_pop[j])<<"\n";
+00064           }
+00065 
+00066       }
+00067 
+00068 //compute the similarities
+00069     for (i = 0; i < pSize; i++)
+00070       {
+00071         double sum = 0.0;
+00072         for (j = 0; j < pSize; j++)
+00073 
+00074           sum += sh (distMatrix[i][j], Dmax);
+00075         sim[i] = sum;
+00076 
+00077 //cout<<"\n  i  ----->"<<sim[i]<<"\n";
+00078       }
+00079 
+00080     eoDominanceMap < EOT > Dmap1;
+00081     Dmap1.setup (_pop);
+00082 
+00083     eoParetoRanking < EOT > rnk1 (Dmap1);
+00084     rnk1.calculate_worths (_pop);
+00085 // now set the worthes values
+00086     for (i = 0; i < pSize; ++i)
+00087       {
+00088         typename EOT::Fitness v;
+00089 
+00090 
+00091 
+00092 //cout<<"voila: "<<
+00093 //rnk1.value().operator[](i);
+00094 
+00095 //vector<double> v;
+00096 //v.resize(_pop[i].fitness().size());
+00097 //for(unsigned k=0;k<_pop[i].fitness().size();++k)
+00098 //v[k]=_pop[i].fitness().operator[](k)/sim[i];
+00099 //_pop[i].fitness(v);//.operator[](k)=0;//_pop[i].fitness().operator[](k)/sim[i];
+00100         eoPerf2Worth < EOT, worthT >::value ()[i] = rnk1.value ().operator[](i) / sim[i];       //*_pop[i].fitness().operator[](1)*_pop[i].fitness().operator[](1));
+00101 //cout<<"\n__________"<<pSize<<"  "<<value()[i]<<"    "<<i;
+00102       }
+00103 
+00104   }
+00105 
+00106 
+00107 
+00108 
+00109   class dMatrix:public std::vector < std::vector < double > >
+00110   {
+00111   public:
+00112     dMatrix (unsigned _s):rSize (_s)
+00113     {
+00114       this->resize (_s);
+00115       for (unsigned i = 0; i < _s; ++i)
+00116         this->operator[] (i).resize (_s);
+00117     }
+00118 
+00119     void printOn (std::ostream & _os)
+00120     {
+00121       for (unsigned i = 0; i < rSize; i++)
+00122         for (unsigned j = 0; j < rSize; ++j)
+00123           {
+00124             _os << this->operator[](i)[j] << " ";
+00125             _os << endl;
+00126           }
+00127       _os << endl;
+00128     }
+00129 //public:
+00130 //std::vector<double>v;
+00131 
+00132   private:
+00133 
+00134 
+00135 
+00136 
+00137     unsigned rSize;
+00138   };
+00139 
+00140 private:
+00141 
+00142   ;
+00143 
+00144   double sh (double dist, double Dmax)
+00145   {
+00146     if (dist < Dmax)
+00147       return (1.0 - dist / Dmax);
+00148     else
+00149       return (0.0);
+00150   }
+00151 
+00152   double nicheSize;
+00153   moeoParetoPhenDist < EOT, worthT > &dist;
+00154   moeoParetoEuclidDist < EOT > euc_dist;
+00155   double Dmax;
+00156 
+00157 };
+

Generated on Tue Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoReplacement_8h-source.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoReplacement_8h-source.html new file mode 100644 index 000000000..5485128dc --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoReplacement_8h-source.html @@ -0,0 +1,162 @@ + + +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 Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoSelectOneFromPopAndArch_8h-source.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoSelectOneFromPopAndArch_8h-source.html new file mode 100644 index 000000000..4c2870e3e --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeoSelectOneFromPopAndArch_8h-source.html @@ -0,0 +1,94 @@ + + +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 Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeo_8h-source.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeo_8h-source.html new file mode 100644 index 000000000..73cd939e3 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/moeo_8h-source.html @@ -0,0 +1,59 @@ + + +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 Jan 16 15:49:53 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/pages.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/pages.html new file mode 100644 index 000000000..2d51f632a --- /dev/null +++ b/tags/paradiseo-moeo-0.2/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 Mon Jan 15 14:18:07 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/search.idx b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/search.idx new file mode 100644 index 0000000000000000000000000000000000000000..2fb41de671cf78f8f83a736f99feb2bb5f95ffa5 GIT binary patch literal 353919 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 literal 0 HcmV?d00001 diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/search.php b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/search.php new file mode 100644 index 000000000..fd9075842 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/search.php @@ -0,0 +1,381 @@ + + +Search + + + + +
+
    +
  • Main Page
  • +
  • Classes
  • +
  • Files
  • +
  • +
    + + + + +1 document matching your query."; + } + else // $num>1 + { + return "Found $num documents matching your query. Showing best matches first."; + } +} + +function report_matches() +{ + return "Matches: "; +} +function end_form($value) +{ + echo " \n \n
    \n
    \n
  • \n
\n
\n"; +} + +function readInt($file) +{ + $b1 = ord(fgetc($file)); $b2 = ord(fgetc($file)); + $b3 = ord(fgetc($file)); $b4 = ord(fgetc($file)); + return ($b1<<24)|($b2<<16)|($b3<<8)|$b4; +} + +function readString($file) +{ + $result=""; + while (ord($c=fgetc($file))) $result.=$c; + return $result; +} + +function readHeader($file) +{ + $header =fgetc($file); $header.=fgetc($file); + $header.=fgetc($file); $header.=fgetc($file); + return $header; +} + +function computeIndex($word) +{ + // Fast string hashing + //$lword = strtolower($word); + //$l = strlen($lword); + //for ($i=0;$i<$l;$i++) + //{ + // $c = ord($lword{$i}); + // $v = (($v & 0xfc00) ^ ($v << 6) ^ $c) & 0xffff; + //} + //return $v; + + // Simple hashing that allows for substring search + if (strlen($word)<2) return -1; + // high char of the index + $hi = ord($word{0}); + if ($hi==0) return -1; + // low char of the index + $lo = ord($word{1}); + if ($lo==0) return -1; + // return index + return $hi*256+$lo; +} + +function search($file,$word,&$statsList) +{ + $index = computeIndex($word); + if ($index!=-1) // found a valid index + { + fseek($file,$index*4+4); // 4 bytes per entry, skip header + $index = readInt($file); + if ($index) // found words matching the hash key + { + $start=sizeof($statsList); + $count=$start; + fseek($file,$index); + $w = readString($file); + while ($w) + { + $statIdx = readInt($file); + if ($word==substr($w,0,strlen($word))) + { // found word that matches (as substring) + $statsList[$count++]=array( + "word"=>$word, + "match"=>$w, + "index"=>$statIdx, + "full"=>strlen($w)==strlen($word), + "docs"=>array() + ); + } + $w = readString($file); + } + $totalHi=0; + $totalFreqHi=0; + $totalFreqLo=0; + for ($count=$start;$count $idx, + "freq" => $freq>>1, + "rank" => 0.0, + "hi" => $freq&1 + ); + if ($freq&1) // word occurs in high priority doc + { + $totalHi++; + $totalFreqHi+=$freq*$multiplier; + } + else // word occurs in low priority doc + { + $totalFreqLo+=$freq*$multiplier; + } + } + // read name and url info for the doc + for ($i=0;$i<$numDocs;$i++) + { + fseek($file,$docInfo[$i]["idx"]); + $docInfo[$i]["name"]=readString($file); + $docInfo[$i]["url"]=readString($file); + } + $statInfo["docs"]=$docInfo; + } + $totalFreq=($totalHi+1)*$totalFreqLo + $totalFreqHi; + for ($count=$start;$count$key, + "name"=>$di["name"], + "rank"=>$rank + ); + } + $docs[$key]["words"][] = array( + "word"=>$wordInfo["word"], + "match"=>$wordInfo["match"], + "freq"=>$di["freq"] + ); + } + } + return $docs; +} + +function filter_results($docs,&$requiredWords,&$forbiddenWords) +{ + $filteredDocs=array(); + while (list ($key, $val) = each ($docs)) + { + $words = &$docs[$key]["words"]; + $copy=1; // copy entry by default + if (sizeof($requiredWords)>0) + { + foreach ($requiredWords as $reqWord) + { + $found=0; + foreach ($words as $wordInfo) + { + $found = $wordInfo["word"]==$reqWord; + if ($found) break; + } + if (!$found) + { + $copy=0; // document contains none of the required words + break; + } + } + } + if (sizeof($forbiddenWords)>0) + { + foreach ($words as $wordInfo) + { + if (in_array($wordInfo["word"],$forbiddenWords)) + { + $copy=0; // document contains a forbidden word + break; + } + } + } + if ($copy) $filteredDocs[$key]=$docs[$key]; + } + return $filteredDocs; +} + +function compare_rank($a,$b) +{ + if ($a["rank"] == $b["rank"]) + { + return 0; + } + return ($a["rank"]>$b["rank"]) ? -1 : 1; +} + +function sort_results($docs,&$sorted) +{ + $sorted = $docs; + usort($sorted,"compare_rank"); + return $sorted; +} + +function report_results(&$docs) +{ + echo "\n"; + echo " \n"; + echo " \n"; + echo " \n"; + $numDocs = sizeof($docs); + if ($numDocs==0) + { + echo " \n"; + echo " \n"; + echo " \n"; + } + else + { + echo " \n"; + echo " \n"; + echo " \n"; + $num=1; + foreach ($docs as $doc) + { + echo " \n"; + echo " "; + echo "\n"; + echo " \n"; + echo " \n"; + echo " \n"; + $num++; + } + } + echo "

".search_results()."

".matches_text(0)."
".matches_text($numDocs); + echo "\n"; + echo "
$num.".$doc["name"]."
".report_matches()." "; + foreach ($doc["words"] as $wordInfo) + { + $word = $wordInfo["word"]; + $matchRight = substr($wordInfo["match"],strlen($word)); + echo "$word$matchRight(".$wordInfo["freq"].") "; + } + echo "
\n"; +} + +function main() +{ + if(strcmp('4.1.0', phpversion()) > 0) + { + die("Error: PHP version 4.1.0 or above required!"); + } + if (!($file=fopen("search.idx","rb"))) + { + die("Error: Search index file could NOT be opened!"); + } + if (readHeader($file)!="DOXS") + { + die("Error: Header of index file is invalid!"); + } + $query=""; + if (array_key_exists("query", $_GET)) + { + $query=$_GET["query"]; + } + end_form($query); + echo " \n
\n"; + $results = array(); + $requiredWords = array(); + $forbiddenWords = array(); + $foundWords = array(); + $word=strtok($query," "); + while ($word) // for each word in the search query + { + if (($word{0}=='+')) { $word=substr($word,1); $requiredWords[]=$word; } + if (($word{0}=='-')) { $word=substr($word,1); $forbiddenWords[]=$word; } + if (!in_array($word,$foundWords)) + { + $foundWords[]=$word; + search($file,strtolower($word),$results); + } + $word=strtok(" "); + } + $docs = array(); + combine_results($results,$docs); + // filter out documents with forbidden word or that do not contain + // required words + $filteredDocs = filter_results($docs,$requiredWords,$forbiddenWords); + // sort the results based on rank + $sorted = array(); + sort_results($filteredDocs,$sorted); + // report results to the user + report_results($sorted); + echo "
\n"; + fclose($file); +} + +main(); + + +?> +
Generated on Tue Jan 16 15:49:54 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/tab_b.gif b/tags/paradiseo-moeo-0.2/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/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/tab_l.gif b/tags/paradiseo-moeo-0.2/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/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/tab_r.gif b/tags/paradiseo-moeo-0.2/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/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/tabs.css b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/tabs.css new file mode 100644 index 000000000..a61552a67 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/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/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/tree.html b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/tree.html new file mode 100644 index 000000000..1e7798c7e --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/html/tree.html @@ -0,0 +1,306 @@ + + + + + + + TreeView + + + + +
+

ParadisEO-MOEO

+
+

o*Welcome to ParadisEO-MOEO

+

o+Class List

+ +

o+Class Hierarchy

+
+

|o+eoFunctorBase [external]

+
+

||o+eoBF< A1, A2, R > [external]

+ +

||o+eoBF< const const EOFitness &, EOFitness &, R > [external]

+ +

||o+eoBF< const const std::vector< EOFitness > &, EOFitness &, R > [external]

+ +

||o+eoBF< const const std::vector< EOFitness > &, std::vector< EOFitness > &, R > [external]

+ +

||o+eoBF< const const std::vector< typename EOT::Fitness > &, std::vector< typename EOT::Fitness > &, double > [external]

+ +

||o+eoBF< const EOT &, moeoArchive< EOT > &, void > [external]

+ +

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

+ +

||o+eoF< void > [external]

+ +

||o+eoUF< A1, R > [external]

+ +

||o+eoUF< A, R > [external]

+ +

||o+eoUF< const EOFitness &, R > [external]

+ +

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

+ +

||o+eoUF< const std::vector< EOFitness > &, R > [external]

+ +

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

+
+

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

+ +
+

||\+moeoMetric

+ +
+

|o+eoObject [external]

+
+

||\+eoPop< EOT > [external]

+ +
+

|o+eoParam [external]

+ +

|o+eoPrintable [external]

+
+

||\+eoPersistent [external]

+
+

|| \*eoPop< EOT > [external]

+
+
+

|o*moeoBinaryQualityIndicator< EOFitness >::Range

+

|o*moeoNDSorting_II< EOT >::compare_nodes

+

|o+moeoParetoPhenDist< EOT, DistType >

+ +

|\*moeoParetoSharing< EOT, worthT >::dMatrix

+
+

o*Class Members

+

\+File List

+
+

 o*index.h

+

 o*make_algo_MOEO.h

+

 o*moeo.h

+

 o*moeoArchive.h

+

 o*moeoArchiveFitnessSavingUpdater.h

+

 o*moeoArchiveUpdater.h

+

 o*moeoBinaryMetricSavingUpdater.h

+

 o*moeoBinaryQualityIndicator.h

+

 o*moeoCombinedMOLS.h

+

 o*moeoContributionMetric.h

+

 o*moeoEntropyMetric.h

+

 o*moeoHybridMOLS.h

+

 o*moeoIBEA.h

+

 o*moeoMetric.h

+

 o*moeoMOLS.h

+

 o*moeoNDSorting.h

+

 o*moeoNSGA_II.h

+

 o*moeoParetoPhenDist.h

+

 o*moeoParetoSharing.h

+

 o*moeoReplacement.h

+

 o*moeoSelectOneFromPopAndArch.h

+

 \*README

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

Related webpages

+
Generated on Mon Jan 15 14:18:07 2007 for ParadisEO-MOEO by  + +doxygen 1.5.1
+ + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/index.h b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/index.h new file mode 100644 index 000000000..a8ab0ea63 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/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/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/FreeSans.ttf b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/FreeSans.ttf new file mode 100644 index 0000000000000000000000000000000000000000..b550b90ba5480f9a3db170a19a1f86daecb0dc92 GIT binary patch literal 22932 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 RlllN>Fk>(~eFPlj{{dxA`xyWL literal 0 HcmV?d00001 diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/Helvetica.ttf b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/Helvetica.ttf new file mode 100644 index 0000000000000000000000000000000000000000..8051f8a119f13c1cce42c147c8252d69c40d8dff GIT binary patch literal 32760 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 _~!~TPBcwBP@B)(YIaPm95^@Y>JFX0bY}ls z?*NJgMpHY#<`#nGNI|V??Ico{0)DH9VG`K2`6*3kRmx`cDE9*Mtl=orVtCVV7F|gB zSBlwaNinCSFxh;jIolTu3^0tejk1q)Pv>T)EVbNgd6ap?_^59eeunHae`vHK8}cYN z#lun<>|kaLQ=gxa8B>6}!FsKJJ>&JWq7pF;LXjX8-#r0mBq(6P?VkjLs9})Q9ni`i z4F)ROla?kLg>oyXK?8R3AlvCMI+pYT5Ns%rfytqw4`N-+ww&yhcQoi|AmnJAFjTN=lt;^9&zCOsct(Scq;M3{l^pEu0H{G^+}Mj zF(4x*7@t*YBpASbgyh7V6~74yaG?-IdIBj**S!0Gop-q6Unf034~mGzj8`Y{0w=Hn z%e!437vW_|FBv4zTZheIbuhe_afYzP2rHN13t@+34nc_taO-UNfzlEc5~u+>AfX^2 zBH>Vv;v|#;*+%F|{PPQA?yQ;LICRPVr&lMSlyv{I`TZ&%o;7rD;$7~TJ!Q!4i8HT1 zpGfSU*kf;Te!p*@`|97>K)k`|DbR&);67zER<-k-Ul4RU;IU8%mqfpe1jww~RG(rg z)ZNAm3Q9o(kvs-g?7C}x&#}pgqBI0;sxDuM{=Ij?_xf`c9HDwsHSHv+uJb}&N&-&;3()o7=5Dl^V+<2Qk#Lt3s!7l($i7M z;v``NLxFjx-^f4$Az~cK2&aP|hil2G1%#rZDFbJuM1m5Q+>uFLgHhRDsl=~P@(2(J zKH3T2FS%W%w zmCA)f*e8RG*vzo}xT;s+(pJJ%G3cQ~m>>vE z;dITVy)>M+xu7t)?Ut9^W@aU~X&Oi3ws^hE&8CO9P})%o^rnMz>JDq2E?Opva?4K(XxP|)i<-wdyXt}RQqDWO8xwl!NE^!OKQ zFE^Yi9PTBEZg(#p@+?UdB#vR(ASc-XLIk2zP{-RqhMeYt)xsf z0dT*A+t0Oe=Yc3PNTA2$JRJ_|nsobh41{WH00a&O;U?qyp1WXEbK<>Uc?0{WIjHfp$TVg`0Eyk+07`^dBVc4}NameJi)KK-t^$l@U4?;r) z1&2f&!aDQTljIYu>v)9R)rmT;Tmp&DA|H3WbZr~?>bnHc9<|wHvtjl)RG{iH0WIW^ zK(oPC^1N!)5fEPO{`udyudm`s3!W6pkR8tQM-a?^?S=2#h7fOp?^Eysbp;|O!A86S zyHLMI|CXK+^#k<-O-vRWHslybGh^9>hQ-FU20b45InCEr8g_w-SJdVJ`5&^K}JWhaJL4T|1R;*$|1j?$E4F;o8L4rtXEln0;IYxE? z$eDkT3qox=UzPNt6jb#qpmuwVj0Dn#4DXOuEUO{_JVDbu1w$cZ5rpC4ijIBVxg6RZMBmojMMi7BCE9wN62?Dkd z56ULIW49$+F-HL*Ow1lVK*hYn*zIb zy8F|C8#>daeVS9O0d>LDF<|rKZ!+ZAo7WOBJS*81Ff>h9n;_Dg1Tnzp+y{_Nc+m>A z)?>mp#b)z5ywJVLZa>3V{IY0|P(F&M2{=`P z0ImgG1_GHhnuOQk;#0W)3oVJmubfF7+w~Ss`S>&Jz2n>a|B(2Yyn|=sCr&1w{nM9; z9f#h+V}6(Tcj62##NK8sKbW{ku>y!`*$&WM18^KhsYO%FGi_wBGT1g&8Ea!@y&qH% zIbAgLLxLqDc!C}be;${i%SO0=wGl&=`Zy#vH=?bi8}7_K)ZLKB(8`q-p^~fz zDrY@V^L^s%n6#FOzM`KuE5aL0_6DTiktPjqy=$lwht#@%g)@)0nXHgey?oY+w& zwx|zGh-{A#x2wcXWFH%#0h29YOXIV-Zq8_=Cs*z)iwxn0I0r`J+=#T%k-6MbW(l`} z*}!cFSNJrV05;t6IqWs~es1k_4)XZ@!*0K!hiLCbQw zLPTc_nG2M+HAD`w9>CXPg<>iw@L5)fg!FSuYXG<)BbPEfcsmaDOJ zk}OeL5d))kBZ`YAYl@PfnqnrU%xozGr(J{VH6w2XH}7%B%wXm$uozWeOaYg#qy}KQ zVYk3mT?Yav-P4-J02MS6)$}M?H4p71>tBC&$vf{?W{w!rdHLjsIitFT2LBoFT)lPZ z!%rvjxMNjs-SPNGDdF^?3xJ-JziLCNtm|076qMXCV7kVO7zb5=zd^>6hZ5@JlbA_t zBQu|6!x=?P%-4q*s2h^fFVHu=f5vd8MmH{HROUTaW2PaJPSTl-aIvW{t#7zr?wH`n zv=QN1a-CtOajI>K>kfH|VTozEvLL-NyoOmX-(y&Bx=&f1es}l*!&cK)yFZ+6G{{^C z@@KE0<5`CAIGmme#~{t~cH0Ctrrm+MDL9C$aV?$)tTi5@-2G~}o8RwXIDa?M8}SSh zBPa`Jd3uB*794?6AhoFZH&QN&ll=!)Knv=yT&8p?zzrbd>VjOf5&|u(6D<^`_9q;1W+M8GVX|B!duJd?ipS^u4iJ_uo=_t{O3bY|Gb7fX4<=Z z|ISz`{&aNHk~LSKcr)>@NASnWocl)I+}O9@v^3|$Xvx!4=Ds?4#=9$x_ikJ{wyL0D zW@gVr3m2Seoc}G{19Vid$3UBOs0xT;#1F#*$u7^aP@`&W)1AQ6>|X za`k!oTKzr3J>q74oBons4(hA*fXK@N;22_1;B1g_LhcnLoQ)7p#Dx1cC_yYaMZi-C z#N9yH$c$ABxJlS7z-tVB7DUaAO(1v^*$y=Wdc+*$syUJe@#AJlDlTyx#E|Qnxh%(m2ruvEV^ul3F|eaZt1XF!qmw5K6ap zeh={?{Lqjw6Fyd~g^WNa(Xxs-1cC7oK%QCzSb$0Ij<^1Zmv;}OcEcOq=z#3;>c>s< z7B6PAv@8;6f4YU#PU8(~-z*d{XIUby7%Dc$EXA&YXn=X3Wq@lm8f6}B8Rb&83ENBr zI+!>DJxq|n$$GsAZA>P;&1$jGJ|-75b`hRoSn@mB)Y*U~sO4JK3J7+R0AXl7S&oM5=1j(!*09lW?EEcFv z2p*@?qx2T>Fcd_3SleMyp^!4{aF7CpZg(rb_du7;_P8rMAYSkAxI0`!`%UTl)eXyi zJz}S38`Phg0BwP&wDPynJDr+eV|lRKlow)dds~>7Ac&1`2u>Mr^=YcrR5J#` zd|SyVH4BWS8#`o@Wy!LZ;u5A*C>2W$WyT^)iB+;#X*zD9D`Qs<4on#>C;x43uD%5y zV71Jht`^}%GKsKRx=cCS7_k(yWkQ)uzws8~Ha0GdlgAiuvrNNN*g9dRJi|D}vVdJ8 zQ0K77vdFrIU9Vd&ZDCu5BbGPVw}p?{PlQj6A6dR;zY)GMer3s_opT}vyT>rHqF7DP z@q-n`09|xeNa#gkkQu#Ik}}cXevtue*$@N<9KSYU=WZ=hSqS8|?XhL*-lN2T`Y5+5s%{l~ ziUYV~m<9(fZw!K?FCf0OCN}_!d~?_fAb~eVyTK0nXnxqH27ECq1QHA^2BX7SZnZd^ zfR?}>!@?dUcwea9A&^Y9#AJO+s24^lp>kQGdxY-ktxh;*b;2>aM_}*zH6^z4fOEvTp-g;#e} zUi+EI-HNLH2~4Gx@3P~1TzD8DC5G(@H}`e3#Yy3xuT>-Lux?l}bOmpH((KX@qfgZS zu)}7;$^ybDWJ|e5b~>KUPnW;oSt>rfpc8pszYZcH&sr^565X>8V?6ASuB_Du9 zQXUAzhI9jVhayG5OQRtN7#tv_31Ij+YF_BhS|eBy1y+OiJHb@=z%aB3dQs0F>%0uK zu*({U2y6rhhsIA6HRK3H0tDcT18xcl)g)&I)*MPwvF7Rd`N3=9U6 zki-g-6ahdkQ^G$3vK_=Mn08jmlzoMmu3&~fX@)Ia*e9x$9)*A5{5qb>A@(JBYPFscW-xpEEED_JiCcAqAK z)PaIm1q%(vSTo4D0W2wiVW2yzNK!*F>84Rk>)yl+;)0Q(oQ?p?L@`k~K8kb}kPIFF63d0P zfa^u!iRsB`3&`+Y-Ga#rg?VCW{Ne9O$ zBQXQFXm?Sl`dBWi;}wQP5w`FghsjGU6V{;@#m8v-lt$CwJ*sC7|G5*CuTqp`!^US4F?8LYuBR`LU=?<{F6Ep6* zi;jK`y9d9=orM3Xg|@R&r@N4-CUYT0u$tio1)@}s!(CX7s~Ms)Ku!V6fUpAW{I#&t zN`@cAYk&(@+f3YS{ZX8&QNJ%I>ygmAptk<1 znWzM(s2fFtnC&)rva<}?*?@)GOT1;-1GD3Xcy^s(Ms{u9dc&HmM;(uOb{p)^x%Xrq zb|24t-F+tWkM_?qg}x3Pa0Xn_ob19F8_OBU-jXv?sEJM$W<(e2*8(f|XT#4?b4ekT z`jy=DLT8VV%{3uwZWhV%TqoVqPPzA%aD5b z7&&XAG7*JC>8)g}s${5?)*OuFMfOFwNPbN7H-4bX#oA(IM-0cDVOMHy`YZeyo&@*` zp78ml00IJZPKypv+I>~taq%L>Gk{H+q&UO7_23<;gM^Y+lFsYkE;v@A%%;`<(ToKog<0=CC10)at zdV%j|-@L%)0AFS;ca#IAZipu?#0{fOamRR1oiNKV-89EB$I}-0RDaHS&ixnb-<^MV z|25@&pflhOa=E5lTOLvNNE?P+c?aH)FJU$Ste`5)V7GrjNfOL}Dic&7Dc1{zJ_#*VXw-wG zi>Yrw_0XtLU>pIxx< zMW{3UxT$K>JB^7S5+6N*x4tss-qWYfzHu5fuDbIZrX8f-gHEdhL_H4p`dIrohg*j` zYpu1;$H-&MqlRacXFPhr;Fjvh45p4-pr2=GGCZe0Bp#Ly>Gck%CH$2z#?%R>xuz8+ z#suX2J?cQ(5?qaHfu2C^=6R^FiO6JvW-Hd>lXWg1EBj2?lx|G*!d0Zp(EwOj$P@

l4D1v*qT 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 literal 0 HcmV?d00001 diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/Makefile b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/Makefile new file mode 100644 index 000000000..776fcf968 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/Makefile @@ -0,0 +1,39 @@ +all: clean refman.dvi + +ps: refman.ps + +pdf: refman.pdf + +ps_2on1: refman_2on1.ps + +pdf_2on1: refman_2on1.pdf + +refman.ps: refman.dvi + dvips -o refman.ps refman.dvi + +refman.pdf: refman.ps + ps2pdf refman.ps refman.pdf + +refman.dvi: refman.tex doxygen.sty + echo "Running latex..." + latex refman.tex + echo "Running makeindex..." + makeindex refman.idx + echo "Rerunning latex...." + latex refman.tex + latex_count=5 ; \ + while egrep -s 'Rerun (LaTeX|to get cross-references right)' refman.log && [ $$latex_count -gt 0 ] ;\ + do \ + echo "Rerunning latex...." ;\ + latex refman.tex ;\ + latex_count=`expr $$latex_count - 1` ;\ + done + +refman_2on1.ps: refman.ps + psnup -2 refman.ps >refman_2on1.ps + +refman_2on1.pdf: refman_2on1.ps + ps2pdf refman_2on1.ps refman_2on1.pdf + +clean: + rm -f *.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out refman.pdf diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/annotated.tex b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/annotated.tex new file mode 100644 index 000000000..bffe79872 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/annotated.tex @@ -0,0 +1,39 @@ +\section{Paradis\-EO-MOEO Class List} +Here are the classes, structs, unions and interfaces with brief descriptions:\begin{CompactList} +\item\contentsline{section}{{\bf moeo\-Additive\-Binary\-Epsilon\-Indicator$<$ EOFitness $>$} (Functor Additive binary epsilon indicator for {\bf eo\-Pareto\-Fitness} )}{\pageref{classmoeoAdditiveBinaryEpsilonIndicator}}{} +\item\contentsline{section}{{\bf moeo\-Archive$<$ EOT $>$} (An archive is a secondary population that stores non-dominated solutions )}{\pageref{classmoeoArchive}}{} +\item\contentsline{section}{{\bf moeo\-Archive\-Fitness\-Saving\-Updater$<$ EOT $>$} (This class allows to save the fitnesses of solutions contained in an archive into a file at each generation )}{\pageref{classmoeoArchiveFitnessSavingUpdater}}{} +\item\contentsline{section}{{\bf moeo\-Archive\-Updater$<$ EOT $>$} (This class allows to update the archive at each generation with newly found non-dominated solutions )}{\pageref{classmoeoArchiveUpdater}}{} +\item\contentsline{section}{{\bf moeo\-Binary\-Hypervolume\-Indicator$<$ EOFitness $>$} (Functor Binary hypervolume indicator for {\bf eo\-Pareto\-Fitness} )}{\pageref{classmoeoBinaryHypervolumeIndicator}}{} +\item\contentsline{section}{{\bf moeo\-Binary\-Metric\-Saving\-Updater$<$ 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 )}{\pageref{classmoeoBinaryMetricSavingUpdater}}{} +\item\contentsline{section}{{\bf moeo\-Binary\-Quality\-Indicator$<$ EOFitness $>$} (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 {\bf eo\-Pareto\-Fitness} object )}{\pageref{classmoeoBinaryQualityIndicator}}{} +\item\contentsline{section}{{\bf moeo\-Binary\-Quality\-Indicator$<$ EOFitness $>$::Range} (Private class to represent the bounds )}{\pageref{classmoeoBinaryQualityIndicator_1_1Range}}{} +\item\contentsline{section}{{\bf moeo\-BM$<$ A1, A2, R $>$} (Base class for binary metrics )}{\pageref{classmoeoBM}}{} +\item\contentsline{section}{{\bf moeo\-Combined\-MOLS$<$ 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 )}{\pageref{classmoeoCombinedMOLS}}{} +\item\contentsline{section}{{\bf moeo\-Contribution\-Metric$<$ EOT $>$} (The contribution metric evaluates the proportion of non-dominated solutions given by a Pareto set relatively to another Pareto set )}{\pageref{classmoeoContributionMetric}}{} +\item\contentsline{section}{{\bf moeo\-Disctinct\-Elitist\-Replacement$<$ EOT, Worth\-T $>$} (Same than \doxyref{moeo\-Elitist\-Replacement}{p.}{classmoeoElitistReplacement} except that distinct individuals are privilegied )}{\pageref{classmoeoDisctinctElitistReplacement}}{} +\item\contentsline{section}{{\bf moeo\-Elitist\-Replacement$<$ EOT, Worth\-T $>$} (Keep all the best individuals (almost cut-and-pasted from {\bf eo\-NDPlus\-Replacement}, (c) Maarten Keijzer, Marc Schoenauer and Ge\-Neura Team, 2002) )}{\pageref{classmoeoElitistReplacement}}{} +\item\contentsline{section}{{\bf moeo\-Entropy\-Metric$<$ EOT $>$} (The entropy gives an idea of the diversity of a Pareto set relatively to another Pareto set )}{\pageref{classmoeoEntropyMetric}}{} +\item\contentsline{section}{{\bf moeo\-Hybrid\-MOLS$<$ 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 )}{\pageref{classmoeoHybridMOLS}}{} +\item\contentsline{section}{{\bf moeo\-IBEA$<$ EOT, Fitness $>$} (Functor The sorting phase of IBEA (Indicator-Based Evolutionary Algorithm) )}{\pageref{classmoeoIBEA}}{} +\item\contentsline{section}{{\bf moeo\-IBEAAvg\-Sorting$<$ EOT, Fitness\-Eval $>$} (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 \char`\"{}Searching for Robust Pareto-Optimal Solutions in Multi-Objective Optimization\char`\"{}, 2005 Of course, the fitness of an individual needs to be an eo\-Stochastic\-Pareto\-Fitness object )}{\pageref{classmoeoIBEAAvgSorting}}{} +\item\contentsline{section}{{\bf moeo\-IBEASorting$<$ EOT, Fitness $>$} (Functor The sorting phase of IBEA (Indicator-Based Evolutionary Algorithm) without uncertainty Adapted from the Zitzler and K\~{A}¼nzli paper \char`\"{}Indicator-Based Selection in Multiobjective Search\char`\"{} (2004) Of course, Fitness needs to be an {\bf eo\-Pareto\-Fitness} object )}{\pageref{classmoeoIBEASorting}}{} +\item\contentsline{section}{{\bf moeo\-IBEAStoch\-Sorting$<$ EOT, Fitness\-Eval $>$} (Functor The sorting phase of IBEA (Indicator-Based Evolutionary Algorithm) under uncertainty Adapted from the Basseur and Zitzler paper \char`\"{}Handling Uncertainty in Indicator-Based Multiobjective Optimization\char`\"{} (2006) Of course, the fitness of an individual needs to be an eo\-Stochastic\-Pareto\-Fitness object )}{\pageref{classmoeoIBEAStochSorting}}{} +\item\contentsline{section}{{\bf moeo\-Metric} (Base class for performance metrics (also called quality indicators) )}{\pageref{classmoeoMetric}}{} +\item\contentsline{section}{{\bf moeo\-MOLS$<$ EOT $>$} (Abstract class for local searches applied to multi-objective optimization )}{\pageref{classmoeoMOLS}}{} +\item\contentsline{section}{{\bf moeo\-NDSorting\_\-II$<$ EOT $>$} (Fast Elitist Non-Dominant Sorting Genetic Algorithm assignment strategie Note : This is a corrected version of the original {\bf eo\-NDSorting\_\-II} class )}{\pageref{classmoeoNDSorting__II}}{} +\item\contentsline{section}{{\bf moeo\-NDSorting\_\-II$<$ EOT $>$::compare\_\-nodes} (A class to compare the nodes )}{\pageref{classmoeoNDSorting__II_1_1compare__nodes}}{} +\item\contentsline{section}{{\bf moeo\-NSGA\_\-II$<$ EOT $>$} }{\pageref{classmoeoNSGA__II}}{} +\item\contentsline{section}{{\bf moeo\-Pareto\-Euclid\-Dist$<$ EOT, Dist\-Type $>$} }{\pageref{classmoeoParetoEuclidDist}}{} +\item\contentsline{section}{{\bf moeo\-Pareto\-Phen\-Dist$<$ EOT, Dist\-Type $>$} }{\pageref{classmoeoParetoPhenDist}}{} +\item\contentsline{section}{{\bf moeo\-Pareto\-Sharing$<$ EOT, worth\-T $>$} }{\pageref{classmoeoParetoSharing}}{} +\item\contentsline{section}{{\bf moeo\-Pareto\-Sharing$<$ EOT, worth\-T $>$::d\-Matrix} }{\pageref{classmoeoParetoSharing_1_1dMatrix}}{} +\item\contentsline{section}{{\bf moeo\-Replacement$<$ EOT, Worth\-T $>$} (Replacement strategy for multi-objective optimization )}{\pageref{classmoeoReplacement}}{} +\item\contentsline{section}{{\bf moeo\-Select\-One\-From\-Pop\-And\-Arch$<$ EOT $>$} (Elitist selection process that consists in choosing individuals in the archive as well as in the current population )}{\pageref{classmoeoSelectOneFromPopAndArch}}{} +\item\contentsline{section}{{\bf moeo\-Solution\-UM$<$ EOT, R, EOFitness $>$} (Base class for unary metrics dedicated to the performance evaluation of a single solution's Pareto fitness )}{\pageref{classmoeoSolutionUM}}{} +\item\contentsline{section}{{\bf moeo\-Solution\-Vs\-Solution\-BM$<$ EOT, R, EOFitness $>$} (Base class for binary metrics dedicated to the performance comparison between two solutions's Pareto fitnesses )}{\pageref{classmoeoSolutionVsSolutionBM}}{} +\item\contentsline{section}{{\bf moeo\-UM$<$ A, R $>$} (Base class for unary metrics )}{\pageref{classmoeoUM}}{} +\item\contentsline{section}{{\bf moeo\-Vector\-UM$<$ EOT, R, EOFitness $>$} (Base class for unary metrics dedicated to the performance evaluation of a Pareto set (a vector of Pareto fitnesses) )}{\pageref{classmoeoVectorUM}}{} +\item\contentsline{section}{{\bf moeo\-Vector\-Vs\-Solution\-BM$<$ 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 )}{\pageref{classmoeoVectorVsSolutionBM}}{} +\item\contentsline{section}{{\bf moeo\-Vector\-Vs\-Vector\-BM$<$ EOT, R, EOFitness $>$} (Base class for binary metrics dedicated to the performance comparison between two Pareto sets (two vectors of Pareto fitnesses) )}{\pageref{classmoeoVectorVsVectorBM}}{} +\end{CompactList} diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoAdditiveBinaryEpsilonIndicator.eps b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoAdditiveBinaryEpsilonIndicator.eps new file mode 100644 index 000000000..ee63c63a0 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoAdditiveBinaryEpsilonIndicator.eps @@ -0,0 +1,209 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 232.558 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 2.15 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 4 def +/cols 1 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(eoAdditiveBinaryEpsilonIndicator< EOFitness >) cw +(eoBinaryQualityIndicator< EOFitness >) cw +(eoBF< const EOFitness &, const EOFitness &, double >) cw +(eoFunctorBase) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (eoAdditiveBinaryEpsilonIndicator< EOFitness >) 0 0 box + (eoBinaryQualityIndicator< EOFitness >) 0 1 box + (eoBF< const EOFitness &, const EOFitness &, double >) 0 2 box + (eoFunctorBase) 0 3 box + +% ----- relations ----- + +solid +0 0 0 out +solid +1 0 1 in +solid +0 0 1 out +solid +1 0 2 in +solid +0 0 2 out +solid +1 0 3 in diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoAdditiveBinaryEpsilonIndicator.tex b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoAdditiveBinaryEpsilonIndicator.tex new file mode 100644 index 000000000..2cb1ea414 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoAdditiveBinaryEpsilonIndicator.tex @@ -0,0 +1,83 @@ +\section{eo\-Additive\-Binary\-Epsilon\-Indicator$<$ EOFitness $>$ Class Template Reference} +\label{classeoAdditiveBinaryEpsilonIndicator}\index{eoAdditiveBinaryEpsilonIndicator@{eoAdditiveBinaryEpsilonIndicator}} +Functor Additive binary epsilon indicator for {\bf eo\-Pareto\-Fitness}. + + +{\tt \#include $<$eo\-Binary\-Quality\-Indicator.h$>$} + +Inheritance diagram for eo\-Additive\-Binary\-Epsilon\-Indicator$<$ EOFitness $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=4cm]{classeoAdditiveBinaryEpsilonIndicator} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +{\bf eo\-Additive\-Binary\-Epsilon\-Indicator} ()\label{classeoAdditiveBinaryEpsilonIndicator_c76501f3d05bc3c1e9ccef6f9c465cb9} + +\begin{CompactList}\small\item\em constructor \item\end{CompactList}\item +double {\bf operator()} (const EOFitness \&\_\-fitness\_\-eo1, const EOFitness \&\_\-fitness\_\-eo2) +\begin{CompactList}\small\item\em 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) \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Types} +\begin{CompactItemize} +\item +typedef EOFitness::fitness\_\-traits {\bf traits}\label{classeoAdditiveBinaryEpsilonIndicator_c6d4c79183683a05183a31fcb7f533f1} + +\begin{CompactList}\small\item\em fitness traits \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Member Functions} +\begin{CompactItemize} +\item +double {\bf epsilon\-Value} (const EOFitness \&\_\-fitness\_\-eo1, const EOFitness \&\_\-fitness\_\-eo2, const unsigned \_\-i\-Obj) +\begin{CompactList}\small\item\em computation of the epsilon value by which individual \_\-eo1 must be decreased in the objective \_\-i\-Obj such that individual \_\-eo2 is weakly dominated \item\end{CompactList}\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class EOFitness$>$ class eo\-Additive\-Binary\-Epsilon\-Indicator$<$ EOFitness $>$} + +Functor Additive binary epsilon indicator for {\bf eo\-Pareto\-Fitness}. + + + +Definition at line 126 of file eo\-Binary\-Quality\-Indicator.h. + +\subsection{Member Function Documentation} +\index{eoAdditiveBinaryEpsilonIndicator@{eo\-Additive\-Binary\-Epsilon\-Indicator}!operator()@{operator()}} +\index{operator()@{operator()}!eoAdditiveBinaryEpsilonIndicator@{eo\-Additive\-Binary\-Epsilon\-Indicator}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOFitness$>$ double {\bf eo\-Additive\-Binary\-Epsilon\-Indicator}$<$ EOFitness $>$::operator() (const EOFitness \& {\em \_\-fitness\_\-eo1}, const EOFitness \& {\em \_\-fitness\_\-eo2})\hspace{0.3cm}{\tt [inline, virtual]}}\label{classeoAdditiveBinaryEpsilonIndicator_5fd885a2a555e26706174a44ef636f4d} + + +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) + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em EOFitness}]\& \_\-fitness\_\-eo1 the fitness of the first individual \item[{\em EOFitness}]\& \_\-fitness\_\-eo2 the fitness of the second individual \end{description} +\end{Desc} + + +Implements {\bf eo\-BF$<$ const EOFitness \&, const EOFitness \&, double $>$}. + +Definition at line 149 of file eo\-Binary\-Quality\-Indicator.h. + +References eo\-Additive\-Binary\-Epsilon\-Indicator$<$ EOFitness $>$::epsilon\-Value().\index{eoAdditiveBinaryEpsilonIndicator@{eo\-Additive\-Binary\-Epsilon\-Indicator}!epsilonValue@{epsilonValue}} +\index{epsilonValue@{epsilonValue}!eoAdditiveBinaryEpsilonIndicator@{eo\-Additive\-Binary\-Epsilon\-Indicator}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOFitness$>$ double {\bf eo\-Additive\-Binary\-Epsilon\-Indicator}$<$ EOFitness $>$::epsilon\-Value (const EOFitness \& {\em \_\-fitness\_\-eo1}, const EOFitness \& {\em \_\-fitness\_\-eo2}, const unsigned {\em \_\-i\-Obj})\hspace{0.3cm}{\tt [inline, private]}}\label{classeoAdditiveBinaryEpsilonIndicator_8f35162769a1b23ada83e5fb21cc74e7} + + +computation of the epsilon value by which individual \_\-eo1 must be decreased in the objective \_\-i\-Obj such that individual \_\-eo2 is weakly dominated + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em EOFitness}]\& \_\-fitness\_\-eo1 the fitness of the first individual \item[{\em EOFitness}]\& \_\-fitness\_\-eo2 the fitness of the second individual \item[{\em unsigned}]\_\-i\-Obj the index of the objective \end{description} +\end{Desc} + + +Definition at line 181 of file eo\-Binary\-Quality\-Indicator.h. + +Referenced by eo\-Additive\-Binary\-Epsilon\-Indicator$<$ EOFitness $>$::operator()(). + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +eo\-Binary\-Quality\-Indicator.h\end{CompactItemize} diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoBinaryHypervolumeIndicator.eps b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoBinaryHypervolumeIndicator.eps new file mode 100644 index 000000000..69b8a1f07 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoBinaryHypervolumeIndicator.eps @@ -0,0 +1,209 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 232.558 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 2.15 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 4 def +/cols 1 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(eoBinaryHypervolumeIndicator< EOFitness >) cw +(eoBinaryQualityIndicator< EOFitness >) cw +(eoBF< const EOFitness &, const EOFitness &, double >) cw +(eoFunctorBase) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (eoBinaryHypervolumeIndicator< EOFitness >) 0 0 box + (eoBinaryQualityIndicator< EOFitness >) 0 1 box + (eoBF< const EOFitness &, const EOFitness &, double >) 0 2 box + (eoFunctorBase) 0 3 box + +% ----- relations ----- + +solid +0 0 0 out +solid +1 0 1 in +solid +0 0 1 out +solid +1 0 2 in +solid +0 0 2 out +solid +1 0 3 in diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoBinaryHypervolumeIndicator.tex b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoBinaryHypervolumeIndicator.tex new file mode 100644 index 000000000..33cc87a7e --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoBinaryHypervolumeIndicator.tex @@ -0,0 +1,149 @@ +\section{eo\-Binary\-Hypervolume\-Indicator$<$ EOFitness $>$ Class Template Reference} +\label{classeoBinaryHypervolumeIndicator}\index{eoBinaryHypervolumeIndicator@{eoBinaryHypervolumeIndicator}} +Functor Binary hypervolume indicator for {\bf eo\-Pareto\-Fitness}. + + +{\tt \#include $<$eo\-Binary\-Quality\-Indicator.h$>$} + +Inheritance diagram for eo\-Binary\-Hypervolume\-Indicator$<$ EOFitness $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=4cm]{classeoBinaryHypervolumeIndicator} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +{\bf eo\-Binary\-Hypervolume\-Indicator} (double \_\-rho) +\begin{CompactList}\small\item\em constructor \item\end{CompactList}\item +double {\bf operator()} (const EOFitness \&\_\-fitness\_\-eo1, const EOFitness \&\_\-fitness\_\-eo2) +\begin{CompactList}\small\item\em 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) \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Types} +\begin{CompactItemize} +\item +typedef EOFitness::fitness\_\-traits {\bf traits}\label{classeoBinaryHypervolumeIndicator_abde225206c55671bd585cc41cbfab1c} + +\begin{CompactList}\small\item\em fitness traits \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Member Functions} +\begin{CompactItemize} +\item +double {\bf hypervolume\-Indicator\-Value} (const EOFitness \&\_\-fitness\_\-eo1, const EOFitness \&\_\-fitness\_\-eo2, const unsigned \_\-i\-Obj, const bool \_\-flag=false) +\begin{CompactList}\small\item\em computation of the hypervolume of the portion of the objective space that is dominated by individual \_\-eo1 but not by individual \_\-eo2 \item\end{CompactList}\item +double {\bf hypervolume\-Indicator\-Value\-Min} (const EOFitness \&\_\-fitness\_\-eo1, const EOFitness \&\_\-fitness\_\-eo2, const unsigned \_\-i\-Obj, const bool \_\-flag) +\begin{CompactList}\small\item\em 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 \_\-i\-Obj \item\end{CompactList}\item +double {\bf hypervolume\-Indicator\-Value\-Max} (const EOFitness \&\_\-fitness\_\-eo1, const EOFitness \&\_\-fitness\_\-eo2, const unsigned \_\-i\-Obj, const bool \_\-flag) +\begin{CompactList}\small\item\em 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 \_\-i\-Obj \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Attributes} +\begin{CompactItemize} +\item +double {\bf rho}\label{classeoBinaryHypervolumeIndicator_02fdfd1b2aa8071cdd3d395777d709a5} + +\begin{CompactList}\small\item\em reference point for the hypervolume calculation \item\end{CompactList}\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class EOFitness$>$ class eo\-Binary\-Hypervolume\-Indicator$<$ EOFitness $>$} + +Functor Binary hypervolume indicator for {\bf eo\-Pareto\-Fitness}. + + + +Definition at line 217 of file eo\-Binary\-Quality\-Indicator.h. + +\subsection{Constructor \& Destructor Documentation} +\index{eoBinaryHypervolumeIndicator@{eo\-Binary\-Hypervolume\-Indicator}!eoBinaryHypervolumeIndicator@{eoBinaryHypervolumeIndicator}} +\index{eoBinaryHypervolumeIndicator@{eoBinaryHypervolumeIndicator}!eoBinaryHypervolumeIndicator@{eo\-Binary\-Hypervolume\-Indicator}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOFitness$>$ {\bf eo\-Binary\-Hypervolume\-Indicator}$<$ EOFitness $>$::{\bf eo\-Binary\-Hypervolume\-Indicator} (double {\em \_\-rho})\hspace{0.3cm}{\tt [inline]}}\label{classeoBinaryHypervolumeIndicator_8b1dedf93c1936ea7efa9b19913d8773} + + +constructor + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em double}]\_\-rho reference point for the hypervolume calculation (rho must not be smaller than 1) \end{description} +\end{Desc} + + +Definition at line 227 of file eo\-Binary\-Quality\-Indicator.h. + +References eo\-Binary\-Hypervolume\-Indicator$<$ EOFitness $>$::rho. + +\subsection{Member Function Documentation} +\index{eoBinaryHypervolumeIndicator@{eo\-Binary\-Hypervolume\-Indicator}!operator()@{operator()}} +\index{operator()@{operator()}!eoBinaryHypervolumeIndicator@{eo\-Binary\-Hypervolume\-Indicator}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOFitness$>$ double {\bf eo\-Binary\-Hypervolume\-Indicator}$<$ EOFitness $>$::operator() (const EOFitness \& {\em \_\-fitness\_\-eo1}, const EOFitness \& {\em \_\-fitness\_\-eo2})\hspace{0.3cm}{\tt [inline, virtual]}}\label{classeoBinaryHypervolumeIndicator_d418f42f086a3221c60ad9149b5df9d0} + + +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) + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em EOFitness}]\& \_\-fitness\_\-eo1 the fitness of the first individual \item[{\em EOFitness}]\& \_\-fitness\_\-eo2 the fitness of the second individual \end{description} +\end{Desc} + + +Implements {\bf eo\-BF$<$ const EOFitness \&, const EOFitness \&, double $>$}. + +Definition at line 250 of file eo\-Binary\-Quality\-Indicator.h. + +References eo\-Binary\-Hypervolume\-Indicator$<$ EOFitness $>$::hypervolume\-Indicator\-Value().\index{eoBinaryHypervolumeIndicator@{eo\-Binary\-Hypervolume\-Indicator}!hypervolumeIndicatorValue@{hypervolumeIndicatorValue}} +\index{hypervolumeIndicatorValue@{hypervolumeIndicatorValue}!eoBinaryHypervolumeIndicator@{eo\-Binary\-Hypervolume\-Indicator}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOFitness$>$ double {\bf eo\-Binary\-Hypervolume\-Indicator}$<$ EOFitness $>$::hypervolume\-Indicator\-Value (const EOFitness \& {\em \_\-fitness\_\-eo1}, const EOFitness \& {\em \_\-fitness\_\-eo2}, const unsigned {\em \_\-i\-Obj}, const bool {\em \_\-flag} = {\tt false})\hspace{0.3cm}{\tt [inline, private]}}\label{classeoBinaryHypervolumeIndicator_9c12e672eaf7ed2b17cab9b96af911e6} + + +computation of the hypervolume of the portion of the objective space that is dominated by individual \_\-eo1 but not by individual \_\-eo2 + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em EOFitness}]\& \_\-fitness\_\-eo1 the fitness of the first individual \item[{\em EOFitness}]\& \_\-fitness\_\-eo2 the fitness of the second individual \item[{\em unsigned}]\_\-i\-Obj number of objectives (used for iteration) \item[{\em bool}]\_\-flag = false (only used for iteration) \end{description} +\end{Desc} + + +Definition at line 285 of file eo\-Binary\-Quality\-Indicator.h. + +References eo\-Binary\-Quality\-Indicator$<$ EOFitness $>$::bounds, eo\-Binary\-Hypervolume\-Indicator$<$ EOFitness $>$::hypervolume\-Indicator\-Value\-Max(), and eo\-Binary\-Hypervolume\-Indicator$<$ EOFitness $>$::hypervolume\-Indicator\-Value\-Min(). + +Referenced by eo\-Binary\-Hypervolume\-Indicator$<$ EOFitness $>$::hypervolume\-Indicator\-Value\-Max(), eo\-Binary\-Hypervolume\-Indicator$<$ EOFitness $>$::hypervolume\-Indicator\-Value\-Min(), and eo\-Binary\-Hypervolume\-Indicator$<$ EOFitness $>$::operator()().\index{eoBinaryHypervolumeIndicator@{eo\-Binary\-Hypervolume\-Indicator}!hypervolumeIndicatorValueMin@{hypervolumeIndicatorValueMin}} +\index{hypervolumeIndicatorValueMin@{hypervolumeIndicatorValueMin}!eoBinaryHypervolumeIndicator@{eo\-Binary\-Hypervolume\-Indicator}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOFitness$>$ double {\bf eo\-Binary\-Hypervolume\-Indicator}$<$ EOFitness $>$::hypervolume\-Indicator\-Value\-Min (const EOFitness \& {\em \_\-fitness\_\-eo1}, const EOFitness \& {\em \_\-fitness\_\-eo2}, const unsigned {\em \_\-i\-Obj}, const bool {\em \_\-flag})\hspace{0.3cm}{\tt [inline, private]}}\label{classeoBinaryHypervolumeIndicator_6c9b9a5279ad7894b4563e205f13e98b} + + +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 \_\-i\-Obj + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em EOFitness}]\& \_\-fitness\_\-eo1 the fitness of the first individual \item[{\em EOFitness}]\& \_\-fitness\_\-eo2 the fitness of the second individual \item[{\em unsigned}]\_\-i\-Obj index of the objective \item[{\em bool}]\_\-flag (only used for iteration) \end{description} +\end{Desc} + + +Definition at line 320 of file eo\-Binary\-Quality\-Indicator.h. + +References eo\-Binary\-Quality\-Indicator$<$ EOFitness $>$::bounds, eo\-Binary\-Hypervolume\-Indicator$<$ EOFitness $>$::hypervolume\-Indicator\-Value(), and eo\-Binary\-Hypervolume\-Indicator$<$ EOFitness $>$::rho. + +Referenced by eo\-Binary\-Hypervolume\-Indicator$<$ EOFitness $>$::hypervolume\-Indicator\-Value().\index{eoBinaryHypervolumeIndicator@{eo\-Binary\-Hypervolume\-Indicator}!hypervolumeIndicatorValueMax@{hypervolumeIndicatorValueMax}} +\index{hypervolumeIndicatorValueMax@{hypervolumeIndicatorValueMax}!eoBinaryHypervolumeIndicator@{eo\-Binary\-Hypervolume\-Indicator}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOFitness$>$ double {\bf eo\-Binary\-Hypervolume\-Indicator}$<$ EOFitness $>$::hypervolume\-Indicator\-Value\-Max (const EOFitness \& {\em \_\-fitness\_\-eo1}, const EOFitness \& {\em \_\-fitness\_\-eo2}, const unsigned {\em \_\-i\-Obj}, const bool {\em \_\-flag})\hspace{0.3cm}{\tt [inline, private]}}\label{classeoBinaryHypervolumeIndicator_df2903822dbcd0a906dabf4cb6e05bfb} + + +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 \_\-i\-Obj + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em EOFitness}]\& \_\-fitness\_\-eo1 the fitness of the first individual \item[{\em EOFitness}]\& \_\-fitness\_\-eo2 the fitness of the second individual \item[{\em unsigned}]\_\-i\-Obj index of the objective \item[{\em bool}]\_\-flag (only used for iteration) \end{description} +\end{Desc} + + +Definition at line 374 of file eo\-Binary\-Quality\-Indicator.h. + +References eo\-Binary\-Quality\-Indicator$<$ EOFitness $>$::bounds, eo\-Binary\-Hypervolume\-Indicator$<$ EOFitness $>$::hypervolume\-Indicator\-Value(), and eo\-Binary\-Hypervolume\-Indicator$<$ EOFitness $>$::rho. + +Referenced by eo\-Binary\-Hypervolume\-Indicator$<$ EOFitness $>$::hypervolume\-Indicator\-Value(). + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +eo\-Binary\-Quality\-Indicator.h\end{CompactItemize} diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoBinaryQualityIndicator.eps b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoBinaryQualityIndicator.eps new file mode 100644 index 000000000..819e6f0ed --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoBinaryQualityIndicator.eps @@ -0,0 +1,215 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 116.279 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 4.3 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 4 def +/cols 2 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(eoBinaryQualityIndicator< EOFitness >) cw +(eoBF< const EOFitness &, const EOFitness &, double >) cw +(eoFunctorBase) cw +(eoAdditiveBinaryEpsilonIndicator< EOFitness >) cw +(eoBinaryHypervolumeIndicator< EOFitness >) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (eoBinaryQualityIndicator< EOFitness >) 0.5 1 box + (eoBF< const EOFitness &, const EOFitness &, double >) 0.5 2 box + (eoFunctorBase) 0.5 3 box + (eoAdditiveBinaryEpsilonIndicator< EOFitness >) 0 0 box + (eoBinaryHypervolumeIndicator< EOFitness >) 1 0 box + +% ----- relations ----- + +solid +0 0.5 1 out +solid +1 0.5 2 in +solid +0 0.5 2 out +solid +1 0.5 3 in +solid +1 0.5 0.25 out +solid +0 1 1 conn +solid +0 0 0.75 in +solid +0 1 0.75 in diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoBinaryQualityIndicator.tex b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoBinaryQualityIndicator.tex new file mode 100644 index 000000000..567e8db4b --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoBinaryQualityIndicator.tex @@ -0,0 +1,69 @@ +\section{eo\-Binary\-Quality\-Indicator$<$ EOFitness $>$ Class Template Reference} +\label{classeoBinaryQualityIndicator}\index{eoBinaryQualityIndicator@{eoBinaryQualityIndicator}} +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 {\bf eo\-Pareto\-Fitness} object. + + +{\tt \#include $<$eo\-Binary\-Quality\-Indicator.h$>$} + +Inheritance diagram for eo\-Binary\-Quality\-Indicator$<$ EOFitness $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=3.25581cm]{classeoBinaryQualityIndicator} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +{\bf eo\-Binary\-Quality\-Indicator} ()\label{classeoBinaryQualityIndicator_e138f133fb4a5024b2e31f1544b4739a} + +\begin{CompactList}\small\item\em constructor \item\end{CompactList}\item +void {\bf set\-Bounds} (const unsigned \_\-i\-Obj, const double \_\-min, const double \_\-max) +\begin{CompactList}\small\item\em set the bounds for objective \_\-i\-Obj \item\end{CompactList}\end{CompactItemize} +\subsection*{Protected Attributes} +\begin{CompactItemize} +\item +std::vector$<$ {\bf Range} $>$ {\bf bounds}\label{classeoBinaryQualityIndicator_aa9bb224ab744a00271577a10518581a} + +\begin{CompactList}\small\item\em range (min and max double value) for each objective \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Types} +\begin{CompactItemize} +\item +typedef EOFitness::fitness\_\-traits {\bf traits}\label{classeoBinaryQualityIndicator_3d9415cfa63d3dd57fe44f9e11df3cac} + +\begin{CompactList}\small\item\em fitness traits \item\end{CompactList}\end{CompactItemize} +\subsection*{Classes} +\begin{CompactItemize} +\item +class {\bf Range} +\begin{CompactList}\small\item\em Private class to represent the bounds. \item\end{CompactList}\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class EOFitness$>$ class eo\-Binary\-Quality\-Indicator$<$ EOFitness $>$} + +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 {\bf eo\-Pareto\-Fitness} object. + + + +Definition at line 39 of file eo\-Binary\-Quality\-Indicator.h. + +\subsection{Member Function Documentation} +\index{eoBinaryQualityIndicator@{eo\-Binary\-Quality\-Indicator}!setBounds@{setBounds}} +\index{setBounds@{setBounds}!eoBinaryQualityIndicator@{eo\-Binary\-Quality\-Indicator}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOFitness$>$ void {\bf eo\-Binary\-Quality\-Indicator}$<$ EOFitness $>$::set\-Bounds (const unsigned {\em \_\-i\-Obj}, const double {\em \_\-min}, const double {\em \_\-max})\hspace{0.3cm}{\tt [inline]}}\label{classeoBinaryQualityIndicator_ed08c328526eb4c1c8cfde8b6938ece9} + + +set the bounds for objective \_\-i\-Obj + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em unsigned}]\_\-i\-Obj the index of the objective \item[{\em double}]\_\-min the minimum value \item[{\em double}]\_\-max the maximum value \end{description} +\end{Desc} + + +Definition at line 62 of file eo\-Binary\-Quality\-Indicator.h. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +eo\-Binary\-Quality\-Indicator.h\end{CompactItemize} diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoBinaryQualityIndicator_1_1Range.tex b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoBinaryQualityIndicator_1_1Range.tex new file mode 100644 index 000000000..01e43961d --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoBinaryQualityIndicator_1_1Range.tex @@ -0,0 +1,51 @@ +\section{eo\-Binary\-Quality\-Indicator$<$ EOFitness $>$::Range Class Reference} +\label{classeoBinaryQualityIndicator_1_1Range}\index{eoBinaryQualityIndicator::Range@{eoBinaryQualityIndicator::Range}} +Private class to represent the bounds. + + +{\tt \#include $<$eo\-Binary\-Quality\-Indicator.h$>$} + +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +{\bf Range} ()\label{classeoBinaryQualityIndicator_1_1Range_75dfd77019095fa4993ad3187ac44006} + +\item +{\bf Range} (const double \_\-min, const double \_\-max)\label{classeoBinaryQualityIndicator_1_1Range_111b9a6b682bd0270039cce7d1a847ca} + +\item +double {\bf minimum} ()\label{classeoBinaryQualityIndicator_1_1Range_f9554f81819461f9ad56c12a93259803} + +\item +double {\bf maximum} ()\label{classeoBinaryQualityIndicator_1_1Range_790f08b55cdd69213886de198b2bcc5f} + +\item +double {\bf range} ()\label{classeoBinaryQualityIndicator_1_1Range_a432e7dbdb691ce4e6ee6d6a224e469f} + +\end{CompactItemize} +\subsection*{Private Attributes} +\begin{CompactItemize} +\item +double {\bf min}\label{classeoBinaryQualityIndicator_1_1Range_e233e32a9b7cb73ef5dbe06a204482ec} + +\item +double {\bf max}\label{classeoBinaryQualityIndicator_1_1Range_63c9473e163e3c0c6d5a0327252786b1} + +\item +double {\bf r}\label{classeoBinaryQualityIndicator_1_1Range_101eaf7a60e7243df169c7fde6087342} + +\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class EOFitness$>$ class eo\-Binary\-Quality\-Indicator$<$ EOFitness $>$::Range} + +Private class to represent the bounds. + + + +Definition at line 73 of file eo\-Binary\-Quality\-Indicator.h. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +eo\-Binary\-Quality\-Indicator.h\end{CompactItemize} diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoIBEA.eps b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoIBEA.eps new file mode 100644 index 000000000..abe693ac4 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoIBEA.eps @@ -0,0 +1,233 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 240.964 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 2.075 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 6 def +/cols 2 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(eoIBEA< EOT, Fitness >) cw +(eoPerf2WorthCached< EOT, double >) cw +(eoPerf2Worth< EOT, WorthT >) cw +(eoUF< const eoPop< EOT > &, void >) cw +(eoValueParam< std::vector< WorthT > >) cw +(eoFunctorBase) cw +(eoParam) cw +(eoIBEASorting< EOT, Fitness >) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (eoIBEA< EOT, Fitness >) 0.5 1 box + (eoPerf2WorthCached< EOT, double >) 0.5 2 box + (eoPerf2Worth< EOT, WorthT >) 0.5 3 box + (eoUF< const eoPop< EOT > &, void >) 0 4 box + (eoValueParam< std::vector< WorthT > >) 1 4 box + (eoFunctorBase) 0 5 box + (eoParam) 1 5 box + (eoIBEASorting< EOT, Fitness >) 0.5 0 box + +% ----- relations ----- + +solid +0 0.5 1 out +solid +1 0.5 2 in +solid +0 0.5 2 out +solid +1 0.5 3 in +solid +0 0.5 3 out +solid +0 1 4 conn +solid +1 0 4 in +solid +0 0 4 out +solid +1 1 4 in +solid +0 1 4 out +solid +1 0 5 in +solid +1 1 5 in +solid +1 0.5 0.25 out +solid +0 0.5 0.75 in diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoIBEA.tex b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoIBEA.tex new file mode 100644 index 000000000..38074e73d --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoIBEA.tex @@ -0,0 +1,60 @@ +\section{eo\-IBEA$<$ EOT, Fitness $>$ Class Template Reference} +\label{classeoIBEA}\index{eoIBEA@{eoIBEA}} +Functor The sorting phase of IBEA (Indicator-Based Evolutionary Algorithm). + + +{\tt \#include $<$eo\-IBEA.h$>$} + +Inheritance diagram for eo\-IBEA$<$ EOT, Fitness $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=6cm]{classeoIBEA} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +{\bf eo\-IBEA} ({\bf eo\-Binary\-Quality\-Indicator}$<$ Fitness $>$ $\ast$\_\-I)\label{classeoIBEA_703833c1f773136b24d2ca5c7cff4b2d} + +\item +void {\bf calculate\_\-worths} (const {\bf eo\-Pop}$<$ EOT $>$ \&\_\-pop) +\begin{CompactList}\small\item\em mapping \item\end{CompactList}\end{CompactItemize} +\subsection*{Protected Attributes} +\begin{CompactItemize} +\item +{\bf eo\-Binary\-Quality\-Indicator}$<$ Fitness $>$ $\ast$ {\bf I}\label{classeoIBEA_f69a9efad202b67ee51d538d14d587e6} + +\begin{CompactList}\small\item\em binary quality indicator to use in the selection process \item\end{CompactList}\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class EOT, class Fitness$>$ class eo\-IBEA$<$ EOT, Fitness $>$} + +Functor The sorting phase of IBEA (Indicator-Based Evolutionary Algorithm). + + + +Definition at line 38 of file eo\-IBEA.h. + +\subsection{Member Function Documentation} +\index{eoIBEA@{eo\-IBEA}!calculate_worths@{calculate\_\-worths}} +\index{calculate_worths@{calculate\_\-worths}!eoIBEA@{eo\-IBEA}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT, class Fitness$>$ void {\bf eo\-IBEA}$<$ EOT, Fitness $>$::calculate\_\-worths (const {\bf eo\-Pop}$<$ EOT $>$ \& {\em \_\-pop})\hspace{0.3cm}{\tt [inline, virtual]}}\label{classeoIBEA_e6b7c15e38822bef261c545b498eabef} + + +mapping + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em const}]eo\-Pop$<$EOT$>$\& \_\-pop the population \end{description} +\end{Desc} + + +Implements {\bf eo\-Perf2Worth\-Cached$<$ EOT, double $>$}. + +Definition at line 56 of file eo\-IBEA.h. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +eo\-IBEA.h\end{CompactItemize} diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoIBEAAvgSorting.eps b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoIBEAAvgSorting.eps new file mode 100644 index 000000000..99056127d --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoIBEAAvgSorting.eps @@ -0,0 +1,233 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 240.964 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 2.075 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 6 def +/cols 2 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(eoIBEAAvgSorting< EOT, FitnessEval >) cw +(eoIBEA< EOT, FitnessEval >) cw +(eoPerf2WorthCached< EOT, double >) cw +(eoPerf2Worth< EOT, WorthT >) cw +(eoUF< const eoPop< EOT > &, void >) cw +(eoValueParam< std::vector< WorthT > >) cw +(eoFunctorBase) cw +(eoParam) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (eoIBEAAvgSorting< EOT, FitnessEval >) 0.5 0 box + (eoIBEA< EOT, FitnessEval >) 0.5 1 box + (eoPerf2WorthCached< EOT, double >) 0.5 2 box + (eoPerf2Worth< EOT, WorthT >) 0.5 3 box + (eoUF< const eoPop< EOT > &, void >) 0 4 box + (eoValueParam< std::vector< WorthT > >) 1 4 box + (eoFunctorBase) 0 5 box + (eoParam) 1 5 box + +% ----- relations ----- + +solid +0 0.5 0 out +solid +1 0.5 1 in +solid +0 0.5 1 out +solid +1 0.5 2 in +solid +0 0.5 2 out +solid +1 0.5 3 in +solid +0 0.5 3 out +solid +0 1 4 conn +solid +1 0 4 in +solid +0 0 4 out +solid +1 1 4 in +solid +0 1 4 out +solid +1 0 5 in +solid +1 1 5 in diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoIBEAAvgSorting.tex b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoIBEAAvgSorting.tex new file mode 100644 index 000000000..52eea3221 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoIBEAAvgSorting.tex @@ -0,0 +1,99 @@ +\section{eo\-IBEAAvg\-Sorting$<$ EOT, Fitness\-Eval $>$ Class Template Reference} +\label{classeoIBEAAvgSorting}\index{eoIBEAAvgSorting@{eoIBEAAvgSorting}} +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 \char`\"{}Searching for Robust Pareto-Optimal Solutions in Multi-Objective Optimization\char`\"{}, 2005 Of course, the fitness of an individual needs to be an eo\-Stochastic\-Pareto\-Fitness object. + + +{\tt \#include $<$eo\-IBEA.h$>$} + +Inheritance diagram for eo\-IBEAAvg\-Sorting$<$ EOT, Fitness\-Eval $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=6cm]{classeoIBEAAvgSorting} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +{\bf eo\-IBEAAvg\-Sorting} ({\bf eo\-Binary\-Quality\-Indicator}$<$ Fitness\-Eval $>$ $\ast$\_\-I, const double \_\-kappa) +\begin{CompactList}\small\item\em constructor \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Member Functions} +\begin{CompactItemize} +\item +void {\bf set\-Bounds} (const {\bf eo\-Pop}$<$ EOT $>$ \&\_\-pop) +\begin{CompactList}\small\item\em computation and setting of the bounds for each objective \item\end{CompactList}\item +void {\bf fitnesses} (const {\bf eo\-Pop}$<$ EOT $>$ \&\_\-pop) +\begin{CompactList}\small\item\em computation and setting of the fitness for each individual of the population \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Attributes} +\begin{CompactItemize} +\item +double {\bf kappa}\label{classeoIBEAAvgSorting_6f467d673861830d6a0708f61cecc3f7} + +\begin{CompactList}\small\item\em scaling factor kappa \item\end{CompactList}\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class EOT, class Fitness\-Eval = typename EOT::Fitness::Fitness\-Eval$>$ class eo\-IBEAAvg\-Sorting$<$ EOT, Fitness\-Eval $>$} + +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 \char`\"{}Searching for Robust Pareto-Optimal Solutions in Multi-Objective Optimization\char`\"{}, 2005 Of course, the fitness of an individual needs to be an eo\-Stochastic\-Pareto\-Fitness object. + + + +Definition at line 373 of file eo\-IBEA.h. + +\subsection{Constructor \& Destructor Documentation} +\index{eoIBEAAvgSorting@{eo\-IBEAAvg\-Sorting}!eoIBEAAvgSorting@{eoIBEAAvgSorting}} +\index{eoIBEAAvgSorting@{eoIBEAAvgSorting}!eoIBEAAvgSorting@{eo\-IBEAAvg\-Sorting}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT, class Fitness\-Eval = typename EOT::Fitness::Fitness\-Eval$>$ {\bf eo\-IBEAAvg\-Sorting}$<$ EOT, Fitness\-Eval $>$::{\bf eo\-IBEAAvg\-Sorting} ({\bf eo\-Binary\-Quality\-Indicator}$<$ Fitness\-Eval $>$ $\ast$ {\em \_\-I}, const double {\em \_\-kappa})\hspace{0.3cm}{\tt [inline]}}\label{classeoIBEAAvgSorting_eb0cfda626e1e5cac6750f0598610f82} + + +constructor + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em eo\-Binary\-Quality\-Indicator$<$EOT$>$$\ast$}]\_\-I the binary quality indicator to use in the selection process \item[{\em double}]\_\-kappa scaling factor kappa \end{description} +\end{Desc} + + +Definition at line 385 of file eo\-IBEA.h. + +References eo\-IBEAAvg\-Sorting$<$ EOT, Fitness\-Eval $>$::kappa. + +\subsection{Member Function Documentation} +\index{eoIBEAAvgSorting@{eo\-IBEAAvg\-Sorting}!setBounds@{setBounds}} +\index{setBounds@{setBounds}!eoIBEAAvgSorting@{eo\-IBEAAvg\-Sorting}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT, class Fitness\-Eval = typename EOT::Fitness::Fitness\-Eval$>$ void {\bf eo\-IBEAAvg\-Sorting}$<$ EOT, Fitness\-Eval $>$::set\-Bounds (const {\bf eo\-Pop}$<$ EOT $>$ \& {\em \_\-pop})\hspace{0.3cm}{\tt [inline, private, virtual]}}\label{classeoIBEAAvgSorting_b365a1eab0da5211c59369416642780d} + + +computation and setting of the bounds for each objective + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em const}]eo\-Pop$<$EOT$>$\& \_\-pop the population \end{description} +\end{Desc} + + +Implements {\bf eo\-IBEA$<$ EOT, Fitness\-Eval $>$} {\rm (p.\,\pageref{classeoIBEA})}. + +Definition at line 413 of file eo\-IBEA.h.\index{eoIBEAAvgSorting@{eo\-IBEAAvg\-Sorting}!fitnesses@{fitnesses}} +\index{fitnesses@{fitnesses}!eoIBEAAvgSorting@{eo\-IBEAAvg\-Sorting}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT, class Fitness\-Eval = typename EOT::Fitness::Fitness\-Eval$>$ void {\bf eo\-IBEAAvg\-Sorting}$<$ EOT, Fitness\-Eval $>$::fitnesses (const {\bf eo\-Pop}$<$ EOT $>$ \& {\em \_\-pop})\hspace{0.3cm}{\tt [inline, private, virtual]}}\label{classeoIBEAAvgSorting_4bc8c46d151d7935d7b2ac8bfbdd7ee6} + + +computation and setting of the fitness for each individual of the population + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em const}]eo\-Pop$<$EOT$>$\& \_\-pop the population \end{description} +\end{Desc} + + +Implements {\bf eo\-IBEA$<$ EOT, Fitness\-Eval $>$} {\rm (p.\,\pageref{classeoIBEA})}. + +Definition at line 445 of file eo\-IBEA.h. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +eo\-IBEA.h\end{CompactItemize} diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoIBEASorting.eps b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoIBEASorting.eps new file mode 100644 index 000000000..824b0fded --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoIBEASorting.eps @@ -0,0 +1,233 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 240.964 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 2.075 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 6 def +/cols 2 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(eoIBEASorting< EOT, Fitness >) cw +(eoIBEA< EOT, Fitness >) cw +(eoPerf2WorthCached< EOT, double >) cw +(eoPerf2Worth< EOT, WorthT >) cw +(eoUF< const eoPop< EOT > &, void >) cw +(eoValueParam< std::vector< WorthT > >) cw +(eoFunctorBase) cw +(eoParam) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (eoIBEASorting< EOT, Fitness >) 0.5 0 box + (eoIBEA< EOT, Fitness >) 0.5 1 box + (eoPerf2WorthCached< EOT, double >) 0.5 2 box + (eoPerf2Worth< EOT, WorthT >) 0.5 3 box + (eoUF< const eoPop< EOT > &, void >) 0 4 box + (eoValueParam< std::vector< WorthT > >) 1 4 box + (eoFunctorBase) 0 5 box + (eoParam) 1 5 box + +% ----- relations ----- + +solid +0 0.5 0 out +solid +1 0.5 1 in +solid +0 0.5 1 out +solid +1 0.5 2 in +solid +0 0.5 2 out +solid +1 0.5 3 in +solid +0 0.5 3 out +solid +0 1 4 conn +solid +1 0 4 in +solid +0 0 4 out +solid +1 1 4 in +solid +0 1 4 out +solid +1 0 5 in +solid +1 1 5 in diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoIBEASorting.tex b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoIBEASorting.tex new file mode 100644 index 000000000..7149cbafc --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoIBEASorting.tex @@ -0,0 +1,99 @@ +\section{eo\-IBEASorting$<$ EOT, Fitness $>$ Class Template Reference} +\label{classeoIBEASorting}\index{eoIBEASorting@{eoIBEASorting}} +Functor The sorting phase of IBEA (Indicator-Based Evolutionary Algorithm) without uncertainty Adapted from the Zitzler and K\~{A}¼nzli paper \char`\"{}Indicator-Based Selection in Multiobjective Search\char`\"{} (2004) Of course, Fitness needs to be an {\bf eo\-Pareto\-Fitness} object. + + +{\tt \#include $<$eo\-IBEA.h$>$} + +Inheritance diagram for eo\-IBEASorting$<$ EOT, Fitness $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=6cm]{classeoIBEASorting} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +{\bf eo\-IBEASorting} ({\bf eo\-Binary\-Quality\-Indicator}$<$ Fitness $>$ $\ast$\_\-I, const double \_\-kappa) +\begin{CompactList}\small\item\em constructor \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Member Functions} +\begin{CompactItemize} +\item +void {\bf set\-Bounds} (const {\bf eo\-Pop}$<$ EOT $>$ \&\_\-pop) +\begin{CompactList}\small\item\em computation and setting of the bounds for each objective \item\end{CompactList}\item +void {\bf fitnesses} (const {\bf eo\-Pop}$<$ EOT $>$ \&\_\-pop) +\begin{CompactList}\small\item\em computation and setting of the fitness for each individual of the population \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Attributes} +\begin{CompactItemize} +\item +double {\bf kappa}\label{classeoIBEASorting_de45fa88a6b6fc70896a0dbfffdb3dc7} + +\begin{CompactList}\small\item\em scaling factor kappa \item\end{CompactList}\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class EOT, class Fitness = typename EOT::Fitness$>$ class eo\-IBEASorting$<$ EOT, Fitness $>$} + +Functor The sorting phase of IBEA (Indicator-Based Evolutionary Algorithm) without uncertainty Adapted from the Zitzler and K\~{A}¼nzli paper \char`\"{}Indicator-Based Selection in Multiobjective Search\char`\"{} (2004) Of course, Fitness needs to be an {\bf eo\-Pareto\-Fitness} object. + + + +Definition at line 94 of file eo\-IBEA.h. + +\subsection{Constructor \& Destructor Documentation} +\index{eoIBEASorting@{eo\-IBEASorting}!eoIBEASorting@{eoIBEASorting}} +\index{eoIBEASorting@{eoIBEASorting}!eoIBEASorting@{eo\-IBEASorting}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT, class Fitness = typename EOT::Fitness$>$ {\bf eo\-IBEASorting}$<$ EOT, Fitness $>$::{\bf eo\-IBEASorting} ({\bf eo\-Binary\-Quality\-Indicator}$<$ Fitness $>$ $\ast$ {\em \_\-I}, const double {\em \_\-kappa})\hspace{0.3cm}{\tt [inline]}}\label{classeoIBEASorting_7a35d760e84a98fd7a47966c50e3af66} + + +constructor + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em eo\-Binary\-Quality\-Indicator$<$EOT$>$$\ast$}]\_\-I the binary quality indicator to use in the selection process \item[{\em double}]\_\-kappa scaling factor kappa \end{description} +\end{Desc} + + +Definition at line 106 of file eo\-IBEA.h. + +References eo\-IBEASorting$<$ EOT, Fitness $>$::kappa. + +\subsection{Member Function Documentation} +\index{eoIBEASorting@{eo\-IBEASorting}!setBounds@{setBounds}} +\index{setBounds@{setBounds}!eoIBEASorting@{eo\-IBEASorting}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT, class Fitness = typename EOT::Fitness$>$ void {\bf eo\-IBEASorting}$<$ EOT, Fitness $>$::set\-Bounds (const {\bf eo\-Pop}$<$ EOT $>$ \& {\em \_\-pop})\hspace{0.3cm}{\tt [inline, private, virtual]}}\label{classeoIBEASorting_02c7346d6aa62f3e3af20cc6ac3ee1d9} + + +computation and setting of the bounds for each objective + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em const}]eo\-Pop$<$EOT$>$\& \_\-pop the population \end{description} +\end{Desc} + + +Implements {\bf eo\-IBEA$<$ EOT, Fitness $>$} {\rm (p.\,\pageref{classeoIBEA})}. + +Definition at line 134 of file eo\-IBEA.h.\index{eoIBEASorting@{eo\-IBEASorting}!fitnesses@{fitnesses}} +\index{fitnesses@{fitnesses}!eoIBEASorting@{eo\-IBEASorting}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT, class Fitness = typename EOT::Fitness$>$ void {\bf eo\-IBEASorting}$<$ EOT, Fitness $>$::fitnesses (const {\bf eo\-Pop}$<$ EOT $>$ \& {\em \_\-pop})\hspace{0.3cm}{\tt [inline, private, virtual]}}\label{classeoIBEASorting_af613f862a58b402d88958b0e290e810} + + +computation and setting of the fitness for each individual of the population + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em const}]eo\-Pop$<$EOT$>$\& \_\-pop the population \end{description} +\end{Desc} + + +Implements {\bf eo\-IBEA$<$ EOT, Fitness $>$} {\rm (p.\,\pageref{classeoIBEA})}. + +Definition at line 162 of file eo\-IBEA.h. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +eo\-IBEA.h\end{CompactItemize} diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoIBEAStochSorting.eps b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoIBEAStochSorting.eps new file mode 100644 index 000000000..e7776d152 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoIBEAStochSorting.eps @@ -0,0 +1,233 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 233.463 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 2.14167 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 6 def +/cols 2 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(eoIBEAStochSorting< EOT, FitnessEval >) cw +(eoIBEA< EOT, FitnessEval >) cw +(eoPerf2WorthCached< EOT, double >) cw +(eoPerf2Worth< EOT, WorthT >) cw +(eoUF< const eoPop< EOT > &, void >) cw +(eoValueParam< std::vector< WorthT > >) cw +(eoFunctorBase) cw +(eoParam) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (eoIBEAStochSorting< EOT, FitnessEval >) 0.5 0 box + (eoIBEA< EOT, FitnessEval >) 0.5 1 box + (eoPerf2WorthCached< EOT, double >) 0.5 2 box + (eoPerf2Worth< EOT, WorthT >) 0.5 3 box + (eoUF< const eoPop< EOT > &, void >) 0 4 box + (eoValueParam< std::vector< WorthT > >) 1 4 box + (eoFunctorBase) 0 5 box + (eoParam) 1 5 box + +% ----- relations ----- + +solid +0 0.5 0 out +solid +1 0.5 1 in +solid +0 0.5 1 out +solid +1 0.5 2 in +solid +0 0.5 2 out +solid +1 0.5 3 in +solid +0 0.5 3 out +solid +0 1 4 conn +solid +1 0 4 in +solid +0 0 4 out +solid +1 1 4 in +solid +0 1 4 out +solid +1 0 5 in +solid +1 1 5 in diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoIBEAStochSorting.tex b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoIBEAStochSorting.tex new file mode 100644 index 000000000..b429a0053 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoIBEAStochSorting.tex @@ -0,0 +1,97 @@ +\section{eo\-IBEAStoch\-Sorting$<$ EOT, Fitness\-Eval $>$ Class Template Reference} +\label{classeoIBEAStochSorting}\index{eoIBEAStochSorting@{eoIBEAStochSorting}} +Functor The sorting phase of IBEA (Indicator-Based Evolutionary Algorithm) under uncertainty Adapted from the Basseur and Zitzler paper \char`\"{}Handling Uncertainty in Indicator-Based Multiobjective Optimization\char`\"{} (2006) Of course, the fitness of an individual needs to be an eo\-Stochastic\-Pareto\-Fitness object. + + +{\tt \#include $<$eo\-IBEA.h$>$} + +Inheritance diagram for eo\-IBEAStoch\-Sorting$<$ EOT, Fitness\-Eval $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=6cm]{classeoIBEAStochSorting} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +{\bf eo\-IBEAStoch\-Sorting} ({\bf eo\-Binary\-Quality\-Indicator}$<$ Fitness\-Eval $>$ $\ast$\_\-I) +\begin{CompactList}\small\item\em constructor \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Member Functions} +\begin{CompactItemize} +\item +void {\bf set\-Bounds} (const {\bf eo\-Pop}$<$ EOT $>$ \&\_\-pop) +\begin{CompactList}\small\item\em computation and setting of the bounds for each objective \item\end{CompactList}\item +void {\bf fitnesses} (const {\bf eo\-Pop}$<$ EOT $>$ \&\_\-pop) +\begin{CompactList}\small\item\em computation and setting of the fitness for each individual of the population \item\end{CompactList}\end{CompactItemize} +\subsection*{Static Private Member Functions} +\begin{CompactItemize} +\item +static double {\bf zero} ()\label{classeoIBEAStochSorting_0cd3d638866730b7a8fdbd5a1c08c810} + +\begin{CompactList}\small\item\em approximated zero value \item\end{CompactList}\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class EOT, class Fitness\-Eval = typename EOT::Fitness::Fitness\-Eval$>$ class eo\-IBEAStoch\-Sorting$<$ EOT, Fitness\-Eval $>$} + +Functor The sorting phase of IBEA (Indicator-Based Evolutionary Algorithm) under uncertainty Adapted from the Basseur and Zitzler paper \char`\"{}Handling Uncertainty in Indicator-Based Multiobjective Optimization\char`\"{} (2006) Of course, the fitness of an individual needs to be an eo\-Stochastic\-Pareto\-Fitness object. + + + +Definition at line 215 of file eo\-IBEA.h. + +\subsection{Constructor \& Destructor Documentation} +\index{eoIBEAStochSorting@{eo\-IBEAStoch\-Sorting}!eoIBEAStochSorting@{eoIBEAStochSorting}} +\index{eoIBEAStochSorting@{eoIBEAStochSorting}!eoIBEAStochSorting@{eo\-IBEAStoch\-Sorting}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT, class Fitness\-Eval = typename EOT::Fitness::Fitness\-Eval$>$ {\bf eo\-IBEAStoch\-Sorting}$<$ EOT, Fitness\-Eval $>$::{\bf eo\-IBEAStoch\-Sorting} ({\bf eo\-Binary\-Quality\-Indicator}$<$ Fitness\-Eval $>$ $\ast$ {\em \_\-I})\hspace{0.3cm}{\tt [inline]}}\label{classeoIBEAStochSorting_9d9775846e174bdbc9491856b23eb27d} + + +constructor + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em eo\-Binary\-Quality\-Indicator$<$EOT$>$$\ast$}]\_\-I the binary quality indicator to use in the selection process \end{description} +\end{Desc} + + +Definition at line 226 of file eo\-IBEA.h. + +\subsection{Member Function Documentation} +\index{eoIBEAStochSorting@{eo\-IBEAStoch\-Sorting}!setBounds@{setBounds}} +\index{setBounds@{setBounds}!eoIBEAStochSorting@{eo\-IBEAStoch\-Sorting}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT, class Fitness\-Eval = typename EOT::Fitness::Fitness\-Eval$>$ void {\bf eo\-IBEAStoch\-Sorting}$<$ EOT, Fitness\-Eval $>$::set\-Bounds (const {\bf eo\-Pop}$<$ EOT $>$ \& {\em \_\-pop})\hspace{0.3cm}{\tt [inline, private, virtual]}}\label{classeoIBEAStochSorting_2a5ddad942fee331fe6912a6fecc9247} + + +computation and setting of the bounds for each objective + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em const}]eo\-Pop$<$EOT$>$\& \_\-pop the population \end{description} +\end{Desc} + + +Implements {\bf eo\-IBEA$<$ EOT, Fitness\-Eval $>$} {\rm (p.\,\pageref{classeoIBEA})}. + +Definition at line 258 of file eo\-IBEA.h.\index{eoIBEAStochSorting@{eo\-IBEAStoch\-Sorting}!fitnesses@{fitnesses}} +\index{fitnesses@{fitnesses}!eoIBEAStochSorting@{eo\-IBEAStoch\-Sorting}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT, class Fitness\-Eval = typename EOT::Fitness::Fitness\-Eval$>$ void {\bf eo\-IBEAStoch\-Sorting}$<$ EOT, Fitness\-Eval $>$::fitnesses (const {\bf eo\-Pop}$<$ EOT $>$ \& {\em \_\-pop})\hspace{0.3cm}{\tt [inline, private, virtual]}}\label{classeoIBEAStochSorting_0d099b5a341791b35db98b350cdbc83f} + + +computation and setting of the fitness for each individual of the population + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em const}]eo\-Pop$<$EOT$>$\& \_\-pop the population \end{description} +\end{Desc} + + +Implements {\bf eo\-IBEA$<$ EOT, Fitness\-Eval $>$} {\rm (p.\,\pageref{classeoIBEA})}. + +Definition at line 286 of file eo\-IBEA.h. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +eo\-IBEA.h\end{CompactItemize} diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoParetoEuclidDist.eps b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoParetoEuclidDist.eps new file mode 100644 index 000000000..95067130d --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoParetoEuclidDist.eps @@ -0,0 +1,197 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 170.94 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 2.925 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 2 def +/cols 1 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(eoParetoEuclidDist< EOT, DistType >) cw +(eoParetoPhenDist< EOT, DistType >) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (eoParetoEuclidDist< EOT, DistType >) 0 0 box + (eoParetoPhenDist< EOT, DistType >) 0 1 box + +% ----- relations ----- + +solid +0 0 0 out +solid +1 0 1 in diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoParetoEuclidDist.tex b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoParetoEuclidDist.tex new file mode 100644 index 000000000..468b8acf8 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoParetoEuclidDist.tex @@ -0,0 +1,28 @@ +\section{eo\-Pareto\-Euclid\-Dist$<$ EOT, Dist\-Type $>$ Class Template Reference} +\label{classeoParetoEuclidDist}\index{eoParetoEuclidDist@{eoParetoEuclidDist}} +Inheritance diagram for eo\-Pareto\-Euclid\-Dist$<$ EOT, Dist\-Type $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=2cm]{classeoParetoEuclidDist} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +Dist\-Type {\bf operator()} (const EOT \&eopf1, const EOT \&eopf2)\label{classeoParetoEuclidDist_8693ded671292b210c3c455fa18c496e} + +\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class EOT, class Dist\-Type = double$>$ class eo\-Pareto\-Euclid\-Dist$<$ EOT, Dist\-Type $>$} + + + + + +Definition at line 15 of file eo\-Pareto\-Phen\-Dist.h. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +eo\-Pareto\-Phen\-Dist.h\end{CompactItemize} diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoParetoPhenDist.eps b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoParetoPhenDist.eps new file mode 100644 index 000000000..41b7a9d73 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoParetoPhenDist.eps @@ -0,0 +1,197 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 170.94 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 2.925 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 2 def +/cols 1 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(eoParetoPhenDist< EOT, DistType >) cw +(eoParetoEuclidDist< EOT, DistType >) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (eoParetoPhenDist< EOT, DistType >) 0 1 box + (eoParetoEuclidDist< EOT, DistType >) 0 0 box + +% ----- relations ----- + +solid +1 0 0.25 out +solid +0 0 0.75 in diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoParetoPhenDist.tex b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoParetoPhenDist.tex new file mode 100644 index 000000000..542553113 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoParetoPhenDist.tex @@ -0,0 +1,22 @@ +\section{eo\-Pareto\-Phen\-Dist$<$ EOT, Dist\-Type $>$ Class Template Reference} +\label{classeoParetoPhenDist}\index{eoParetoPhenDist@{eoParetoPhenDist}} +Inheritance diagram for eo\-Pareto\-Phen\-Dist$<$ EOT, Dist\-Type $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=2cm]{classeoParetoPhenDist} +\end{center} +\end{figure} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class EOT, class Dist\-Type$>$ class eo\-Pareto\-Phen\-Dist$<$ EOT, Dist\-Type $>$} + + + + + +Definition at line 3 of file eo\-Pareto\-Phen\-Dist.h. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +eo\-Pareto\-Phen\-Dist.h\end{CompactItemize} diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoParetoSharing.eps b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoParetoSharing.eps new file mode 100644 index 000000000..1159ccf2d --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoParetoSharing.eps @@ -0,0 +1,221 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 161.943 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 3.0875 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 4 def +/cols 2 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(eoParetoSharing< EOT, worthT >) cw +(eoPerf2Worth< EOT, worthT >) cw +(eoUF< const eoPop< EOT > &, void >) cw +(eoValueParam< std::vector< worthT > >) cw +(eoFunctorBase) cw +(eoParam) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (eoParetoSharing< EOT, worthT >) 0.5 0 box + (eoPerf2Worth< EOT, worthT >) 0.5 1 box + (eoUF< const eoPop< EOT > &, void >) 0 2 box + (eoValueParam< std::vector< worthT > >) 1 2 box + (eoFunctorBase) 0 3 box + (eoParam) 1 3 box + +% ----- relations ----- + +solid +0 0.5 0 out +solid +1 0.5 1 in +solid +0 0.5 1 out +solid +0 1 2 conn +solid +1 0 2 in +solid +0 0 2 out +solid +1 1 2 in +solid +0 1 2 out +solid +1 0 3 in +solid +1 1 3 in diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoParetoSharing.tex b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoParetoSharing.tex new file mode 100644 index 000000000..0ef03c5fe --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoParetoSharing.tex @@ -0,0 +1,60 @@ +\section{eo\-Pareto\-Sharing$<$ EOT, worth\-T $>$ Class Template Reference} +\label{classeoParetoSharing}\index{eoParetoSharing@{eoParetoSharing}} +Inheritance diagram for eo\-Pareto\-Sharing$<$ EOT, worth\-T $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=4cm]{classeoParetoSharing} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +{\bf eo\-Pareto\-Sharing} (double \_\-niche\-Size)\label{classeoParetoSharing_99666671930abc479a2f5e5dd2914d41} + +\item +{\bf eo\-Pareto\-Sharing} (double \_\-niche\-Size, {\bf eo\-Pareto\-Phen\-Dist}$<$ EOT, worth\-T $>$ \&\_\-dist)\label{classeoParetoSharing_5ad0d5b6a1c1f4fc17bb9a319f18d645} + +\item +void {\bf operator} ()(const {\bf eo\-Pop}$<$ EOT $>$ \&\_\-pop)\label{classeoParetoSharing_df55496bf711d4614bcf42d157a4b4de} + +\end{CompactItemize} +\subsection*{Private Member Functions} +\begin{CompactItemize} +\item +double {\bf sh} (double {\bf dist}, double {\bf Dmax})\label{classeoParetoSharing_ce18ecb042033d564be6379869f2be88} + +\end{CompactItemize} +\subsection*{Private Attributes} +\begin{CompactItemize} +\item +double {\bf niche\-Size}\label{classeoParetoSharing_0da31e076cf2098639cd1a9fa06f3942} + +\item +{\bf eo\-Pareto\-Phen\-Dist}$<$ EOT, worth\-T $>$ \& {\bf dist}\label{classeoParetoSharing_f5cff5bf666314e59d58043531253b1b} + +\item +{\bf eo\-Pareto\-Euclid\-Dist}$<$ EOT $>$ {\bf euc\_\-dist}\label{classeoParetoSharing_9b8e6e2c76d816afb23dfdbf91dabf57} + +\item +double {\bf Dmax}\label{classeoParetoSharing_35449ebac125955c49a6d34db0e710b3} + +\end{CompactItemize} +\subsection*{Classes} +\begin{CompactItemize} +\item +class {\bf d\-Matrix} +\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class EOT, class worth\-T = double$>$ class eo\-Pareto\-Sharing$<$ EOT, worth\-T $>$} + + + + + +Definition at line 9 of file eo\-Pareto\-Sharing.h. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +eo\-Pareto\-Sharing.h\end{CompactItemize} diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoParetoSharing_1_1dMatrix.tex b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoParetoSharing_1_1dMatrix.tex new file mode 100644 index 000000000..3860314c0 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classeoParetoSharing_1_1dMatrix.tex @@ -0,0 +1,31 @@ +\section{eo\-Pareto\-Sharing$<$ EOT, worth\-T $>$::d\-Matrix Class Reference} +\label{classeoParetoSharing_1_1dMatrix}\index{eoParetoSharing::dMatrix@{eoParetoSharing::dMatrix}} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +{\bf d\-Matrix} (unsigned \_\-s)\label{classeoParetoSharing_1_1dMatrix_0cff6678bc7af1fd6d620a472b6c9ee5} + +\item +void {\bf print\-On} (std::ostream \&\_\-os)\label{classeoParetoSharing_1_1dMatrix_0a331635c3125c5d936f30b34d3b4bcd} + +\end{CompactItemize} +\subsection*{Private Attributes} +\begin{CompactItemize} +\item +unsigned {\bf r\-Size}\label{classeoParetoSharing_1_1dMatrix_767481759c7990f6a90c581e0fd0a0dd} + +\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class EOT, class worth\-T = double$>$ class eo\-Pareto\-Sharing$<$ EOT, worth\-T $>$::d\-Matrix} + + + + + +Definition at line 99 of file eo\-Pareto\-Sharing.h. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +eo\-Pareto\-Sharing.h\end{CompactItemize} diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoAdditiveBinaryEpsilonIndicator.eps b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoAdditiveBinaryEpsilonIndicator.eps new file mode 100644 index 000000000..ade9478ea --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoAdditiveBinaryEpsilonIndicator.eps @@ -0,0 +1,209 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 262.295 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 1.90625 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 4 def +/cols 1 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(moeoAdditiveBinaryEpsilonIndicator< EOFitness >) cw +(moeoBinaryQualityIndicator< EOFitness >) cw +(eoBF< A1, A2, R >) cw +(eoFunctorBase) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (moeoAdditiveBinaryEpsilonIndicator< EOFitness >) 0 0 box + (moeoBinaryQualityIndicator< EOFitness >) 0 1 box + (eoBF< A1, A2, R >) 0 2 box + (eoFunctorBase) 0 3 box + +% ----- relations ----- + +solid +0 0 0 out +solid +1 0 1 in +solid +0 0 1 out +solid +1 0 2 in +solid +0 0 2 out +solid +1 0 3 in diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoAdditiveBinaryEpsilonIndicator.tex b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoAdditiveBinaryEpsilonIndicator.tex new file mode 100644 index 000000000..323f9b5d9 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoAdditiveBinaryEpsilonIndicator.tex @@ -0,0 +1,83 @@ +\section{moeo\-Additive\-Binary\-Epsilon\-Indicator$<$ EOFitness $>$ Class Template Reference} +\label{classmoeoAdditiveBinaryEpsilonIndicator}\index{moeoAdditiveBinaryEpsilonIndicator@{moeoAdditiveBinaryEpsilonIndicator}} +Functor Additive binary epsilon indicator for {\bf eo\-Pareto\-Fitness}. + + +{\tt \#include $<$moeo\-Binary\-Quality\-Indicator.h$>$} + +Inheritance diagram for moeo\-Additive\-Binary\-Epsilon\-Indicator$<$ EOFitness $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=4cm]{classmoeoAdditiveBinaryEpsilonIndicator} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +{\bf moeo\-Additive\-Binary\-Epsilon\-Indicator} ()\label{classmoeoAdditiveBinaryEpsilonIndicator_d26af04a8276654998b4425f97963c47} + +\begin{CompactList}\small\item\em constructor \item\end{CompactList}\item +double {\bf operator()} (const EOFitness \&\_\-fitness\_\-eo1, const EOFitness \&\_\-fitness\_\-eo2) +\begin{CompactList}\small\item\em 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) \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Types} +\begin{CompactItemize} +\item +typedef EOFitness::fitness\_\-traits {\bf traits}\label{classmoeoAdditiveBinaryEpsilonIndicator_43e2945121a3e77683d935bc72399992} + +\begin{CompactList}\small\item\em fitness traits \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Member Functions} +\begin{CompactItemize} +\item +double {\bf epsilon\-Value} (const EOFitness \&\_\-fitness\_\-eo1, const EOFitness \&\_\-fitness\_\-eo2, const unsigned \_\-i\-Obj) +\begin{CompactList}\small\item\em computation of the epsilon value by which individual \_\-eo1 must be decreased in the objective \_\-i\-Obj such that individual \_\-eo2 is weakly dominated \item\end{CompactList}\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class EOFitness$>$ class moeo\-Additive\-Binary\-Epsilon\-Indicator$<$ EOFitness $>$} + +Functor Additive binary epsilon indicator for {\bf eo\-Pareto\-Fitness}. + + + +Definition at line 115 of file moeo\-Binary\-Quality\-Indicator.h. + +\subsection{Member Function Documentation} +\index{moeoAdditiveBinaryEpsilonIndicator@{moeo\-Additive\-Binary\-Epsilon\-Indicator}!operator()@{operator()}} +\index{operator()@{operator()}!moeoAdditiveBinaryEpsilonIndicator@{moeo\-Additive\-Binary\-Epsilon\-Indicator}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOFitness$>$ double {\bf moeo\-Additive\-Binary\-Epsilon\-Indicator}$<$ EOFitness $>$::operator() (const EOFitness \& {\em \_\-fitness\_\-eo1}, const EOFitness \& {\em \_\-fitness\_\-eo2})\hspace{0.3cm}{\tt [inline]}}\label{classmoeoAdditiveBinaryEpsilonIndicator_177f9999db6c9fb95d5fbff5a157348c} + + +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) + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em EOFitness}]\& \_\-fitness\_\-eo1 the fitness of the first individual \item[{\em EOFitness}]\& \_\-fitness\_\-eo2 the fitness of the second individual \end{description} +\end{Desc} + + +Definition at line 138 of file moeo\-Binary\-Quality\-Indicator.h. + +References moeo\-Additive\-Binary\-Epsilon\-Indicator$<$ EOFitness $>$::epsilon\-Value().\index{moeoAdditiveBinaryEpsilonIndicator@{moeo\-Additive\-Binary\-Epsilon\-Indicator}!epsilonValue@{epsilonValue}} +\index{epsilonValue@{epsilonValue}!moeoAdditiveBinaryEpsilonIndicator@{moeo\-Additive\-Binary\-Epsilon\-Indicator}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOFitness$>$ double {\bf moeo\-Additive\-Binary\-Epsilon\-Indicator}$<$ EOFitness $>$::epsilon\-Value (const EOFitness \& {\em \_\-fitness\_\-eo1}, const EOFitness \& {\em \_\-fitness\_\-eo2}, const unsigned {\em \_\-i\-Obj})\hspace{0.3cm}{\tt [inline, private]}}\label{classmoeoAdditiveBinaryEpsilonIndicator_e953aa9fe74ebc210dde5ab193c6acab} + + +computation of the epsilon value by which individual \_\-eo1 must be decreased in the objective \_\-i\-Obj such that individual \_\-eo2 is weakly dominated + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em EOFitness}]\& \_\-fitness\_\-eo1 the fitness of the first individual \item[{\em EOFitness}]\& \_\-fitness\_\-eo2 the fitness of the second individual \item[{\em unsigned}]\_\-i\-Obj the index of the objective \end{description} +\end{Desc} + + +Definition at line 170 of file moeo\-Binary\-Quality\-Indicator.h. + +References moeo\-Binary\-Quality\-Indicator$<$ EOFitness $>$::bounds. + +Referenced by moeo\-Additive\-Binary\-Epsilon\-Indicator$<$ EOFitness $>$::operator()(). + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moeo\-Binary\-Quality\-Indicator.h\end{CompactItemize} diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoArchive.eps b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoArchive.eps new file mode 100644 index 000000000..3653c706b --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoArchive.eps @@ -0,0 +1,215 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 277.778 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 1.8 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 4 def +/cols 2 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(moeoArchive< EOT >) cw +(eoPop< EOT >) cw +(eoObject) cw +(eoPersistent) cw +(eoPrintable) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (moeoArchive< EOT >) 0.5 0 box + (eoPop< EOT >) 0.5 1 box + (eoObject) 0 2 box + (eoPersistent) 1 2 box + (eoPrintable) 1 3 box + +% ----- relations ----- + +solid +0 0.5 0 out +solid +1 0.5 1 in +solid +0 0.5 1 out +solid +0 1 2 conn +solid +1 0 2 in +solid +1 1 2 in +solid +0 1 2 out +solid +1 1 3 in diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoArchive.tex b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoArchive.tex new file mode 100644 index 000000000..852b31278 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoArchive.tex @@ -0,0 +1,111 @@ +\section{moeo\-Archive$<$ EOT $>$ Class Template Reference} +\label{classmoeoArchive}\index{moeoArchive@{moeoArchive}} +An archive is a secondary population that stores non-dominated solutions. + + +{\tt \#include $<$moeo\-Archive.h$>$} + +Inheritance diagram for moeo\-Archive$<$ EOT $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=4cm]{classmoeoArchive} +\end{center} +\end{figure} +\subsection*{Public Types} +\begin{CompactItemize} +\item +typedef EOT::Fitness {\bf EOFitness}\label{classmoeoArchive_798bc97d8321b1e2c469e5c341a96dac} + +\begin{CompactList}\small\item\em The fitness type of a solution. \item\end{CompactList}\end{CompactItemize} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +bool {\bf dominates} (const {\bf EOFitness} \&\_\-fit) const +\begin{CompactList}\small\item\em Returns true if the current archive dominates \_\-fit. \item\end{CompactList}\item +bool {\bf contains} (const {\bf EOFitness} \&\_\-fit) const +\begin{CompactList}\small\item\em Returns true if the current archive contains \_\-fit. \item\end{CompactList}\item +void {\bf update} (const EOT \&\_\-eo) +\begin{CompactList}\small\item\em Updates the archive with a given individual \_\-eo. \item\end{CompactList}\item +void {\bf update} (const {\bf eo\-Pop}$<$ EOT $>$ \&\_\-pop) +\begin{CompactList}\small\item\em Updates the archive with a given population \_\-pop. \item\end{CompactList}\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class EOT$>$ class moeo\-Archive$<$ EOT $>$} + +An archive is a secondary population that stores non-dominated solutions. + + + +Definition at line 21 of file moeo\-Archive.h. + +\subsection{Member Function Documentation} +\index{moeoArchive@{moeo\-Archive}!dominates@{dominates}} +\index{dominates@{dominates}!moeoArchive@{moeo\-Archive}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT$>$ bool {\bf moeo\-Archive}$<$ EOT $>$::dominates (const {\bf EOFitness} \& {\em \_\-fit}) const\hspace{0.3cm}{\tt [inline]}}\label{classmoeoArchive_7786c8bfe67fefa19ac31a4ac700df06} + + +Returns true if the current archive dominates \_\-fit. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-fit}]the (Pareto) fitness to compare with the current archive \end{description} +\end{Desc} + + +Definition at line 39 of file moeo\-Archive.h. + +Referenced by moeo\-Archive$<$ EOT $>$::update().\index{moeoArchive@{moeo\-Archive}!contains@{contains}} +\index{contains@{contains}!moeoArchive@{moeo\-Archive}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT$>$ bool {\bf moeo\-Archive}$<$ EOT $>$::contains (const {\bf EOFitness} \& {\em \_\-fit}) const\hspace{0.3cm}{\tt [inline]}}\label{classmoeoArchive_71feaf270daa7185e829caef40bbf956} + + +Returns true if the current archive contains \_\-fit. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-fit}]the (Pareto) fitness to search within the current archive \end{description} +\end{Desc} + + +Definition at line 51 of file moeo\-Archive.h.\index{moeoArchive@{moeo\-Archive}!update@{update}} +\index{update@{update}!moeoArchive@{moeo\-Archive}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT$>$ void {\bf moeo\-Archive}$<$ EOT $>$::update (const EOT \& {\em \_\-eo})\hspace{0.3cm}{\tt [inline]}}\label{classmoeoArchive_be9f67bfe41c25537292056d5b30f56a} + + +Updates the archive with a given individual \_\-eo. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-eo}]the given individual \end{description} +\end{Desc} + + +Definition at line 63 of file moeo\-Archive.h. + +References moeo\-Archive$<$ EOT $>$::dominates(). + +Referenced by moeo\-Archive$<$ EOT $>$::update().\index{moeoArchive@{moeo\-Archive}!update@{update}} +\index{update@{update}!moeoArchive@{moeo\-Archive}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT$>$ void {\bf moeo\-Archive}$<$ EOT $>$::update (const {\bf eo\-Pop}$<$ EOT $>$ \& {\em \_\-pop})\hspace{0.3cm}{\tt [inline]}}\label{classmoeoArchive_58e891ab400ba352e8b0a341d0bdc107} + + +Updates the archive with a given population \_\-pop. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-pop}]the given population \end{description} +\end{Desc} + + +Definition at line 98 of file moeo\-Archive.h. + +References moeo\-Archive$<$ EOT $>$::update(). + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moeo\-Archive.h\end{CompactItemize} diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoArchiveFitnessSavingUpdater.eps b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoArchiveFitnessSavingUpdater.eps new file mode 100644 index 000000000..2a12b3fbe --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoArchiveFitnessSavingUpdater.eps @@ -0,0 +1,209 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 299.625 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 1.66875 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 4 def +/cols 1 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(moeoArchiveFitnessSavingUpdater< EOT >) cw +(eoUpdater) cw +(eoF< void >) cw +(eoFunctorBase) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (moeoArchiveFitnessSavingUpdater< EOT >) 0 0 box + (eoUpdater) 0 1 box + (eoF< void >) 0 2 box + (eoFunctorBase) 0 3 box + +% ----- relations ----- + +solid +0 0 0 out +solid +1 0 1 in +solid +0 0 1 out +solid +1 0 2 in +solid +0 0 2 out +solid +1 0 3 in diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoArchiveFitnessSavingUpdater.tex b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoArchiveFitnessSavingUpdater.tex new file mode 100644 index 000000000..656d6637d --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoArchiveFitnessSavingUpdater.tex @@ -0,0 +1,67 @@ +\section{moeo\-Archive\-Fitness\-Saving\-Updater$<$ EOT $>$ Class Template Reference} +\label{classmoeoArchiveFitnessSavingUpdater}\index{moeoArchiveFitnessSavingUpdater@{moeoArchiveFitnessSavingUpdater}} +This class allows to save the fitnesses of solutions contained in an archive into a file at each generation. + + +{\tt \#include $<$moeo\-Archive\-Fitness\-Saving\-Updater.h$>$} + +Inheritance diagram for moeo\-Archive\-Fitness\-Saving\-Updater$<$ EOT $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=4cm]{classmoeoArchiveFitnessSavingUpdater} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +{\bf moeo\-Archive\-Fitness\-Saving\-Updater} ({\bf moeo\-Archive}$<$ EOT $>$ \&\_\-arch, const std::string \&\_\-filename=\char`\"{}Res/Arch\char`\"{}, int \_\-id=-1) +\begin{CompactList}\small\item\em Ctor. \item\end{CompactList}\item +void {\bf operator()} ()\label{classmoeoArchiveFitnessSavingUpdater_2ad5d3ab2c2066a1a3b85fff2ac14a19} + +\begin{CompactList}\small\item\em Saves the fitness of the archive's members into the file. \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Attributes} +\begin{CompactItemize} +\item +{\bf moeo\-Archive}$<$ EOT $>$ \& {\bf arch}\label{classmoeoArchiveFitnessSavingUpdater_b8eeccd7b43eb11e36cee2ec7d7c9c21} + +\begin{CompactList}\small\item\em local archive \item\end{CompactList}\item +std::string {\bf filename}\label{classmoeoArchiveFitnessSavingUpdater_17c82bea631bf9ff635a3698d08907f0} + +\begin{CompactList}\small\item\em target filename \item\end{CompactList}\item +int {\bf id}\label{classmoeoArchiveFitnessSavingUpdater_e064861d67aae0747c2d8ffab90cbfbf} + +\begin{CompactList}\small\item\em own ID \item\end{CompactList}\item +unsigned {\bf counter}\label{classmoeoArchiveFitnessSavingUpdater_e32fab4bb828d40fe19c283dbd2a6423} + +\begin{CompactList}\small\item\em counter \item\end{CompactList}\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class EOT$>$ class moeo\-Archive\-Fitness\-Saving\-Updater$<$ 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 moeo\-Archive\-Fitness\-Saving\-Updater.h. + +\subsection{Constructor \& Destructor Documentation} +\index{moeoArchiveFitnessSavingUpdater@{moeo\-Archive\-Fitness\-Saving\-Updater}!moeoArchiveFitnessSavingUpdater@{moeoArchiveFitnessSavingUpdater}} +\index{moeoArchiveFitnessSavingUpdater@{moeoArchiveFitnessSavingUpdater}!moeoArchiveFitnessSavingUpdater@{moeo\-Archive\-Fitness\-Saving\-Updater}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT$>$ {\bf moeo\-Archive\-Fitness\-Saving\-Updater}$<$ EOT $>$::{\bf moeo\-Archive\-Fitness\-Saving\-Updater} ({\bf moeo\-Archive}$<$ EOT $>$ \& {\em \_\-arch}, const std::string \& {\em \_\-filename} = {\tt \char`\"{}Res/Arch\char`\"{}}, int {\em \_\-id} = {\tt -1})\hspace{0.3cm}{\tt [inline]}}\label{classmoeoArchiveFitnessSavingUpdater_b61826bfa0f47064aed460817cf61b92} + + +Ctor. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-arch}]local archive \item[{\em \_\-filename}]target filename \item[{\em \_\-id}]own ID \end{description} +\end{Desc} + + +Definition at line 37 of file moeo\-Archive\-Fitness\-Saving\-Updater.h. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moeo\-Archive\-Fitness\-Saving\-Updater.h\end{CompactItemize} diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoArchiveUpdater.eps b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoArchiveUpdater.eps new file mode 100644 index 000000000..7d3bc3fca --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoArchiveUpdater.eps @@ -0,0 +1,209 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 425.532 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 1.175 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 4 def +/cols 1 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(moeoArchiveUpdater< EOT >) cw +(eoUpdater) cw +(eoF< void >) cw +(eoFunctorBase) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (moeoArchiveUpdater< EOT >) 0 0 box + (eoUpdater) 0 1 box + (eoF< void >) 0 2 box + (eoFunctorBase) 0 3 box + +% ----- relations ----- + +solid +0 0 0 out +solid +1 0 1 in +solid +0 0 1 out +solid +1 0 2 in +solid +0 0 2 out +solid +1 0 3 in diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoArchiveUpdater.tex b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoArchiveUpdater.tex new file mode 100644 index 000000000..82d44c816 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoArchiveUpdater.tex @@ -0,0 +1,61 @@ +\section{moeo\-Archive\-Updater$<$ EOT $>$ Class Template Reference} +\label{classmoeoArchiveUpdater}\index{moeoArchiveUpdater@{moeoArchiveUpdater}} +This class allows to update the archive at each generation with newly found non-dominated solutions. + + +{\tt \#include $<$moeo\-Archive\-Updater.h$>$} + +Inheritance diagram for moeo\-Archive\-Updater$<$ EOT $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=4cm]{classmoeoArchiveUpdater} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +{\bf moeo\-Archive\-Updater} ({\bf moeo\-Archive}$<$ EOT $>$ \&\_\-arch, const {\bf eo\-Pop}$<$ EOT $>$ \&\_\-pop) +\begin{CompactList}\small\item\em Ctor. \item\end{CompactList}\item +void {\bf operator()} ()\label{classmoeoArchiveUpdater_19e98244f0dd641983af81d8dcaf0f7d} + +\begin{CompactList}\small\item\em Updates the archive with newly found non-dominated solutions contained in the main population. \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Attributes} +\begin{CompactItemize} +\item +{\bf moeo\-Archive}$<$ EOT $>$ \& {\bf arch}\label{classmoeoArchiveUpdater_2fd7b92786ced836e3d0b5abfb801a86} + +\begin{CompactList}\small\item\em the archive of non-dominated solutions \item\end{CompactList}\item +const {\bf eo\-Pop}$<$ EOT $>$ \& {\bf pop}\label{classmoeoArchiveUpdater_0fc3f08f0385c55569eb056737303363} + +\begin{CompactList}\small\item\em the main population \item\end{CompactList}\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class EOT$>$ class moeo\-Archive\-Updater$<$ EOT $>$} + +This class allows to update the archive at each generation with newly found non-dominated solutions. + + + +Definition at line 23 of file moeo\-Archive\-Updater.h. + +\subsection{Constructor \& Destructor Documentation} +\index{moeoArchiveUpdater@{moeo\-Archive\-Updater}!moeoArchiveUpdater@{moeoArchiveUpdater}} +\index{moeoArchiveUpdater@{moeoArchiveUpdater}!moeoArchiveUpdater@{moeo\-Archive\-Updater}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT$>$ {\bf moeo\-Archive\-Updater}$<$ EOT $>$::{\bf moeo\-Archive\-Updater} ({\bf moeo\-Archive}$<$ EOT $>$ \& {\em \_\-arch}, const {\bf eo\-Pop}$<$ EOT $>$ \& {\em \_\-pop})\hspace{0.3cm}{\tt [inline]}}\label{classmoeoArchiveUpdater_71027fd5f8dac7d8069b682c998c03c5} + + +Ctor. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-arch}]an archive of non-dominated solutions \item[{\em \_\-pop}]the main population \end{description} +\end{Desc} + + +Definition at line 32 of file moeo\-Archive\-Updater.h. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moeo\-Archive\-Updater.h\end{CompactItemize} diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoBM.eps b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoBM.eps new file mode 100644 index 000000000..d20d0f74a --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoBM.eps @@ -0,0 +1,247 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 65.1466 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 7.675 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 5 def +/cols 5 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(moeoBM< A1, A2, R >) cw +(eoBF< A1, A2, R >) cw +(moeoMetric) cw +(eoFunctorBase) cw +(eoFunctorBase) cw +(moeoSolutionVsSolutionBM< EOT, R, EOFitness >) cw +(moeoVectorVsSolutionBM< EOT, R, EOFitness >) cw +(moeoVectorVsVectorBM< EOT, R, EOFitness >) cw +(moeoVectorVsVectorBM< EOT, double >) cw +(moeoContributionMetric< EOT >) cw +(moeoEntropyMetric< EOT >) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (moeoBM< A1, A2, R >) 1.5 2 box + (eoBF< A1, A2, R >) 1 3 box + (moeoMetric) 2 3 box + (eoFunctorBase) 1 4 box + (eoFunctorBase) 2 4 box + (moeoSolutionVsSolutionBM< EOT, R, EOFitness >) 0 1 box + (moeoVectorVsSolutionBM< EOT, R, EOFitness >) 1 1 box + (moeoVectorVsVectorBM< EOT, R, EOFitness >) 2 1 box + (moeoVectorVsVectorBM< EOT, double >) 3 1 box + (moeoContributionMetric< EOT >) 2.5 0 box + (moeoEntropyMetric< EOT >) 3.5 0 box + +% ----- relations ----- + +solid +0 1.5 2 out +solid +1 2 3 conn +solid +1 1 3 in +solid +0 1 3 out +solid +1 2 3 in +solid +0 2 3 out +solid +1 1 4 in +solid +1 2 4 in +solid +1 1.5 1.25 out +solid +0 3 2 conn +solid +0 0 1.75 in +solid +0 1 1.75 in +solid +0 2 1.75 in +solid +0 3 1.75 in +solid +1 3 0.25 out +solid +2.5 3.5 1 conn +solid +0 2.5 0.75 in +solid +0 3.5 0.75 in diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoBM.tex b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoBM.tex new file mode 100644 index 000000000..ab5408f52 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoBM.tex @@ -0,0 +1,27 @@ +\section{moeo\-BM$<$ A1, A2, R $>$ Class Template Reference} +\label{classmoeoBM}\index{moeoBM@{moeoBM}} +Base class for binary metrics. + + +{\tt \#include $<$moeo\-Metric.h$>$} + +Inheritance diagram for moeo\-BM$<$ A1, A2, R $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=1.8241cm]{classmoeoBM} +\end{center} +\end{figure} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class A1, class A2, class R$>$ class moeo\-BM$<$ A1, A2, R $>$} + +Base class for binary metrics. + + + +Definition at line 38 of file moeo\-Metric.h. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moeo\-Metric.h\end{CompactItemize} diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoBinaryHypervolumeIndicator.eps b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoBinaryHypervolumeIndicator.eps new file mode 100644 index 000000000..f5cd0c37d --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoBinaryHypervolumeIndicator.eps @@ -0,0 +1,209 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 273.038 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 1.83125 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 4 def +/cols 1 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(moeoBinaryHypervolumeIndicator< EOFitness >) cw +(moeoBinaryQualityIndicator< EOFitness >) cw +(eoBF< A1, A2, R >) cw +(eoFunctorBase) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (moeoBinaryHypervolumeIndicator< EOFitness >) 0 0 box + (moeoBinaryQualityIndicator< EOFitness >) 0 1 box + (eoBF< A1, A2, R >) 0 2 box + (eoFunctorBase) 0 3 box + +% ----- relations ----- + +solid +0 0 0 out +solid +1 0 1 in +solid +0 0 1 out +solid +1 0 2 in +solid +0 0 2 out +solid +1 0 3 in diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoBinaryHypervolumeIndicator.tex b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoBinaryHypervolumeIndicator.tex new file mode 100644 index 000000000..60580eb30 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoBinaryHypervolumeIndicator.tex @@ -0,0 +1,147 @@ +\section{moeo\-Binary\-Hypervolume\-Indicator$<$ EOFitness $>$ Class Template Reference} +\label{classmoeoBinaryHypervolumeIndicator}\index{moeoBinaryHypervolumeIndicator@{moeoBinaryHypervolumeIndicator}} +Functor Binary hypervolume indicator for {\bf eo\-Pareto\-Fitness}. + + +{\tt \#include $<$moeo\-Binary\-Quality\-Indicator.h$>$} + +Inheritance diagram for moeo\-Binary\-Hypervolume\-Indicator$<$ EOFitness $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=4cm]{classmoeoBinaryHypervolumeIndicator} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +{\bf moeo\-Binary\-Hypervolume\-Indicator} (double \_\-rho) +\begin{CompactList}\small\item\em constructor \item\end{CompactList}\item +double {\bf operator()} (const EOFitness \&\_\-fitness\_\-eo1, const EOFitness \&\_\-fitness\_\-eo2) +\begin{CompactList}\small\item\em 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) \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Types} +\begin{CompactItemize} +\item +typedef EOFitness::fitness\_\-traits {\bf traits}\label{classmoeoBinaryHypervolumeIndicator_511931936ec9e368b5f0cbcdc4dbe020} + +\begin{CompactList}\small\item\em fitness traits \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Member Functions} +\begin{CompactItemize} +\item +double {\bf hypervolume\-Indicator\-Value} (const EOFitness \&\_\-fitness\_\-eo1, const EOFitness \&\_\-fitness\_\-eo2, const unsigned \_\-i\-Obj, const bool \_\-flag=false) +\begin{CompactList}\small\item\em computation of the hypervolume of the portion of the objective space that is dominated by individual \_\-eo1 but not by individual \_\-eo2 \item\end{CompactList}\item +double {\bf hypervolume\-Indicator\-Value\-Min} (const EOFitness \&\_\-fitness\_\-eo1, const EOFitness \&\_\-fitness\_\-eo2, const unsigned \_\-i\-Obj, const bool \_\-flag) +\begin{CompactList}\small\item\em 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 \_\-i\-Obj \item\end{CompactList}\item +double {\bf hypervolume\-Indicator\-Value\-Max} (const EOFitness \&\_\-fitness\_\-eo1, const EOFitness \&\_\-fitness\_\-eo2, const unsigned \_\-i\-Obj, const bool \_\-flag) +\begin{CompactList}\small\item\em 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 \_\-i\-Obj \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Attributes} +\begin{CompactItemize} +\item +double {\bf rho}\label{classmoeoBinaryHypervolumeIndicator_06b7c3ba8fa0ceafd7e6b571e43e6f4c} + +\begin{CompactList}\small\item\em reference point for the hypervolume calculation \item\end{CompactList}\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class EOFitness$>$ class moeo\-Binary\-Hypervolume\-Indicator$<$ EOFitness $>$} + +Functor Binary hypervolume indicator for {\bf eo\-Pareto\-Fitness}. + + + +Definition at line 206 of file moeo\-Binary\-Quality\-Indicator.h. + +\subsection{Constructor \& Destructor Documentation} +\index{moeoBinaryHypervolumeIndicator@{moeo\-Binary\-Hypervolume\-Indicator}!moeoBinaryHypervolumeIndicator@{moeoBinaryHypervolumeIndicator}} +\index{moeoBinaryHypervolumeIndicator@{moeoBinaryHypervolumeIndicator}!moeoBinaryHypervolumeIndicator@{moeo\-Binary\-Hypervolume\-Indicator}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOFitness$>$ {\bf moeo\-Binary\-Hypervolume\-Indicator}$<$ EOFitness $>$::{\bf moeo\-Binary\-Hypervolume\-Indicator} (double {\em \_\-rho})\hspace{0.3cm}{\tt [inline]}}\label{classmoeoBinaryHypervolumeIndicator_15d486d524816d294bc007d7a555cbfe} + + +constructor + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em double}]\_\-rho reference point for the hypervolume calculation (rho must not be smaller than 1) \end{description} +\end{Desc} + + +Definition at line 216 of file moeo\-Binary\-Quality\-Indicator.h. + +References moeo\-Binary\-Hypervolume\-Indicator$<$ EOFitness $>$::rho. + +\subsection{Member Function Documentation} +\index{moeoBinaryHypervolumeIndicator@{moeo\-Binary\-Hypervolume\-Indicator}!operator()@{operator()}} +\index{operator()@{operator()}!moeoBinaryHypervolumeIndicator@{moeo\-Binary\-Hypervolume\-Indicator}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOFitness$>$ double {\bf moeo\-Binary\-Hypervolume\-Indicator}$<$ EOFitness $>$::operator() (const EOFitness \& {\em \_\-fitness\_\-eo1}, const EOFitness \& {\em \_\-fitness\_\-eo2})\hspace{0.3cm}{\tt [inline]}}\label{classmoeoBinaryHypervolumeIndicator_697e7fcab99f5192925e2f2157d1e1a3} + + +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) + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em EOFitness}]\& \_\-fitness\_\-eo1 the fitness of the first individual \item[{\em EOFitness}]\& \_\-fitness\_\-eo2 the fitness of the second individual \end{description} +\end{Desc} + + +Definition at line 239 of file moeo\-Binary\-Quality\-Indicator.h. + +References moeo\-Binary\-Hypervolume\-Indicator$<$ EOFitness $>$::hypervolume\-Indicator\-Value().\index{moeoBinaryHypervolumeIndicator@{moeo\-Binary\-Hypervolume\-Indicator}!hypervolumeIndicatorValue@{hypervolumeIndicatorValue}} +\index{hypervolumeIndicatorValue@{hypervolumeIndicatorValue}!moeoBinaryHypervolumeIndicator@{moeo\-Binary\-Hypervolume\-Indicator}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOFitness$>$ double {\bf moeo\-Binary\-Hypervolume\-Indicator}$<$ EOFitness $>$::hypervolume\-Indicator\-Value (const EOFitness \& {\em \_\-fitness\_\-eo1}, const EOFitness \& {\em \_\-fitness\_\-eo2}, const unsigned {\em \_\-i\-Obj}, const bool {\em \_\-flag} = {\tt false})\hspace{0.3cm}{\tt [inline, private]}}\label{classmoeoBinaryHypervolumeIndicator_dd0c63a922cb4bf921978413fdb1dca0} + + +computation of the hypervolume of the portion of the objective space that is dominated by individual \_\-eo1 but not by individual \_\-eo2 + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em EOFitness}]\& \_\-fitness\_\-eo1 the fitness of the first individual \item[{\em EOFitness}]\& \_\-fitness\_\-eo2 the fitness of the second individual \item[{\em unsigned}]\_\-i\-Obj number of objectives (used for iteration) \item[{\em bool}]\_\-flag = false (only used for iteration) \end{description} +\end{Desc} + + +Definition at line 274 of file moeo\-Binary\-Quality\-Indicator.h. + +References moeo\-Binary\-Quality\-Indicator$<$ EOFitness $>$::bounds, moeo\-Binary\-Hypervolume\-Indicator$<$ EOFitness $>$::hypervolume\-Indicator\-Value\-Max(), and moeo\-Binary\-Hypervolume\-Indicator$<$ EOFitness $>$::hypervolume\-Indicator\-Value\-Min(). + +Referenced by moeo\-Binary\-Hypervolume\-Indicator$<$ EOFitness $>$::hypervolume\-Indicator\-Value\-Max(), moeo\-Binary\-Hypervolume\-Indicator$<$ EOFitness $>$::hypervolume\-Indicator\-Value\-Min(), and moeo\-Binary\-Hypervolume\-Indicator$<$ EOFitness $>$::operator()().\index{moeoBinaryHypervolumeIndicator@{moeo\-Binary\-Hypervolume\-Indicator}!hypervolumeIndicatorValueMin@{hypervolumeIndicatorValueMin}} +\index{hypervolumeIndicatorValueMin@{hypervolumeIndicatorValueMin}!moeoBinaryHypervolumeIndicator@{moeo\-Binary\-Hypervolume\-Indicator}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOFitness$>$ double {\bf moeo\-Binary\-Hypervolume\-Indicator}$<$ EOFitness $>$::hypervolume\-Indicator\-Value\-Min (const EOFitness \& {\em \_\-fitness\_\-eo1}, const EOFitness \& {\em \_\-fitness\_\-eo2}, const unsigned {\em \_\-i\-Obj}, const bool {\em \_\-flag})\hspace{0.3cm}{\tt [inline, private]}}\label{classmoeoBinaryHypervolumeIndicator_637f559f83f473412c61d4a485af5993} + + +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 \_\-i\-Obj + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em EOFitness}]\& \_\-fitness\_\-eo1 the fitness of the first individual \item[{\em EOFitness}]\& \_\-fitness\_\-eo2 the fitness of the second individual \item[{\em unsigned}]\_\-i\-Obj index of the objective \item[{\em bool}]\_\-flag (only used for iteration) \end{description} +\end{Desc} + + +Definition at line 309 of file moeo\-Binary\-Quality\-Indicator.h. + +References moeo\-Binary\-Quality\-Indicator$<$ EOFitness $>$::bounds, moeo\-Binary\-Hypervolume\-Indicator$<$ EOFitness $>$::hypervolume\-Indicator\-Value(), and moeo\-Binary\-Hypervolume\-Indicator$<$ EOFitness $>$::rho. + +Referenced by moeo\-Binary\-Hypervolume\-Indicator$<$ EOFitness $>$::hypervolume\-Indicator\-Value().\index{moeoBinaryHypervolumeIndicator@{moeo\-Binary\-Hypervolume\-Indicator}!hypervolumeIndicatorValueMax@{hypervolumeIndicatorValueMax}} +\index{hypervolumeIndicatorValueMax@{hypervolumeIndicatorValueMax}!moeoBinaryHypervolumeIndicator@{moeo\-Binary\-Hypervolume\-Indicator}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOFitness$>$ double {\bf moeo\-Binary\-Hypervolume\-Indicator}$<$ EOFitness $>$::hypervolume\-Indicator\-Value\-Max (const EOFitness \& {\em \_\-fitness\_\-eo1}, const EOFitness \& {\em \_\-fitness\_\-eo2}, const unsigned {\em \_\-i\-Obj}, const bool {\em \_\-flag})\hspace{0.3cm}{\tt [inline, private]}}\label{classmoeoBinaryHypervolumeIndicator_c0a602a4f1a27418d95d883f53e45cb2} + + +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 \_\-i\-Obj + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em EOFitness}]\& \_\-fitness\_\-eo1 the fitness of the first individual \item[{\em EOFitness}]\& \_\-fitness\_\-eo2 the fitness of the second individual \item[{\em unsigned}]\_\-i\-Obj index of the objective \item[{\em bool}]\_\-flag (only used for iteration) \end{description} +\end{Desc} + + +Definition at line 363 of file moeo\-Binary\-Quality\-Indicator.h. + +References moeo\-Binary\-Quality\-Indicator$<$ EOFitness $>$::bounds, moeo\-Binary\-Hypervolume\-Indicator$<$ EOFitness $>$::hypervolume\-Indicator\-Value(), and moeo\-Binary\-Hypervolume\-Indicator$<$ EOFitness $>$::rho. + +Referenced by moeo\-Binary\-Hypervolume\-Indicator$<$ EOFitness $>$::hypervolume\-Indicator\-Value(). + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moeo\-Binary\-Quality\-Indicator.h\end{CompactItemize} diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoBinaryMetricSavingUpdater.eps b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoBinaryMetricSavingUpdater.eps new file mode 100644 index 000000000..c2cc5352d --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoBinaryMetricSavingUpdater.eps @@ -0,0 +1,209 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 313.725 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 1.59375 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 4 def +/cols 1 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(moeoBinaryMetricSavingUpdater< EOT >) cw +(eoUpdater) cw +(eoF< void >) cw +(eoFunctorBase) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (moeoBinaryMetricSavingUpdater< EOT >) 0 0 box + (eoUpdater) 0 1 box + (eoF< void >) 0 2 box + (eoFunctorBase) 0 3 box + +% ----- relations ----- + +solid +0 0 0 out +solid +1 0 1 in +solid +0 0 1 out +solid +1 0 2 in +solid +0 0 2 out +solid +1 0 3 in diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoBinaryMetricSavingUpdater.tex b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoBinaryMetricSavingUpdater.tex new file mode 100644 index 000000000..d5e783c4d --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoBinaryMetricSavingUpdater.tex @@ -0,0 +1,79 @@ +\section{moeo\-Binary\-Metric\-Saving\-Updater$<$ EOT $>$ Class Template Reference} +\label{classmoeoBinaryMetricSavingUpdater}\index{moeoBinaryMetricSavingUpdater@{moeoBinaryMetricSavingUpdater}} +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. + + +{\tt \#include $<$moeo\-Binary\-Metric\-Saving\-Updater.h$>$} + +Inheritance diagram for moeo\-Binary\-Metric\-Saving\-Updater$<$ EOT $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=4cm]{classmoeoBinaryMetricSavingUpdater} +\end{center} +\end{figure} +\subsection*{Public Types} +\begin{CompactItemize} +\item +typedef EOT::Fitness {\bf EOFitness}\label{classmoeoBinaryMetricSavingUpdater_c22e390633d94bbf69309e8d0cae1f0a} + +\begin{CompactList}\small\item\em The fitness type of a solution. \item\end{CompactList}\end{CompactItemize} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +{\bf moeo\-Binary\-Metric\-Saving\-Updater} ({\bf moeo\-Vector\-Vs\-Vector\-BM}$<$ EOT, double $>$ \&\_\-metric, const {\bf eo\-Pop}$<$ EOT $>$ \&\_\-pop, std::string \_\-filename) +\begin{CompactList}\small\item\em Ctor. \item\end{CompactList}\item +void {\bf operator()} ()\label{classmoeoBinaryMetricSavingUpdater_2d051d28def4cadf69957c8a21bf88dc} + +\begin{CompactList}\small\item\em Saves the metric's value for the current generation. \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Attributes} +\begin{CompactItemize} +\item +{\bf moeo\-Vector\-Vs\-Vector\-BM}$<$ EOT, double $>$ \& {\bf metric}\label{classmoeoBinaryMetricSavingUpdater_52e12414a266bce1dbce0b913025fd37} + +\begin{CompactList}\small\item\em binary metric comparing two Pareto sets \item\end{CompactList}\item +const {\bf eo\-Pop}$<$ EOT $>$ \& {\bf pop}\label{classmoeoBinaryMetricSavingUpdater_9c30673aca66a1531856cb92068edaf7} + +\begin{CompactList}\small\item\em main population \item\end{CompactList}\item +{\bf eo\-Pop}$<$ EOT $>$ {\bf old\-Pop}\label{classmoeoBinaryMetricSavingUpdater_c1751bf23ef440d895a39cdff25c384c} + +\begin{CompactList}\small\item\em (n-1) population \item\end{CompactList}\item +std::string {\bf filename}\label{classmoeoBinaryMetricSavingUpdater_32c78860e3aee52346df3aa30c5ac42f} + +\begin{CompactList}\small\item\em target filename \item\end{CompactList}\item +bool {\bf first\-Gen}\label{classmoeoBinaryMetricSavingUpdater_1e40103a5cfa592a9d2408102e507a19} + +\begin{CompactList}\small\item\em is it the first generation ? \item\end{CompactList}\item +unsigned {\bf counter}\label{classmoeoBinaryMetricSavingUpdater_280b52506c280b07356726ad5d497ef8} + +\begin{CompactList}\small\item\em counter \item\end{CompactList}\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class EOT$>$ class moeo\-Binary\-Metric\-Saving\-Updater$<$ 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 moeo\-Binary\-Metric\-Saving\-Updater.h. + +\subsection{Constructor \& Destructor Documentation} +\index{moeoBinaryMetricSavingUpdater@{moeo\-Binary\-Metric\-Saving\-Updater}!moeoBinaryMetricSavingUpdater@{moeoBinaryMetricSavingUpdater}} +\index{moeoBinaryMetricSavingUpdater@{moeoBinaryMetricSavingUpdater}!moeoBinaryMetricSavingUpdater@{moeo\-Binary\-Metric\-Saving\-Updater}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT$>$ {\bf moeo\-Binary\-Metric\-Saving\-Updater}$<$ EOT $>$::{\bf moeo\-Binary\-Metric\-Saving\-Updater} ({\bf moeo\-Vector\-Vs\-Vector\-BM}$<$ EOT, double $>$ \& {\em \_\-metric}, const {\bf eo\-Pop}$<$ EOT $>$ \& {\em \_\-pop}, std::string {\em \_\-filename})\hspace{0.3cm}{\tt [inline]}}\label{classmoeoBinaryMetricSavingUpdater_978c6e8a99459722220387f911c1f461} + + +Ctor. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-metric}]the binary metric comparing two Pareto sets \item[{\em \_\-pop}]the main population \item[{\em \_\-filename}]the target filename \end{description} +\end{Desc} + + +Definition at line 41 of file moeo\-Binary\-Metric\-Saving\-Updater.h. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moeo\-Binary\-Metric\-Saving\-Updater.h\end{CompactItemize} diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoBinaryQualityIndicator.eps b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoBinaryQualityIndicator.eps new file mode 100644 index 000000000..6fcedbeaa --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoBinaryQualityIndicator.eps @@ -0,0 +1,215 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 131.148 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 3.8125 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 4 def +/cols 2 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(moeoBinaryQualityIndicator< EOFitness >) cw +(eoBF< A1, A2, R >) cw +(eoFunctorBase) cw +(moeoAdditiveBinaryEpsilonIndicator< EOFitness >) cw +(moeoBinaryHypervolumeIndicator< EOFitness >) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (moeoBinaryQualityIndicator< EOFitness >) 0.5 1 box + (eoBF< A1, A2, R >) 0.5 2 box + (eoFunctorBase) 0.5 3 box + (moeoAdditiveBinaryEpsilonIndicator< EOFitness >) 0 0 box + (moeoBinaryHypervolumeIndicator< EOFitness >) 1 0 box + +% ----- relations ----- + +solid +0 0.5 1 out +solid +1 0.5 2 in +solid +0 0.5 2 out +solid +1 0.5 3 in +solid +1 0.5 0.25 out +solid +0 1 1 conn +solid +0 0 0.75 in +solid +0 1 0.75 in diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoBinaryQualityIndicator.tex b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoBinaryQualityIndicator.tex new file mode 100644 index 000000000..4495bed7f --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoBinaryQualityIndicator.tex @@ -0,0 +1,71 @@ +\section{moeo\-Binary\-Quality\-Indicator$<$ EOFitness $>$ Class Template Reference} +\label{classmoeoBinaryQualityIndicator}\index{moeoBinaryQualityIndicator@{moeoBinaryQualityIndicator}} +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 {\bf eo\-Pareto\-Fitness} object. + + +{\tt \#include $<$moeo\-Binary\-Quality\-Indicator.h$>$} + +Inheritance diagram for moeo\-Binary\-Quality\-Indicator$<$ EOFitness $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=3.67213cm]{classmoeoBinaryQualityIndicator} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +{\bf moeo\-Binary\-Quality\-Indicator} ()\label{classmoeoBinaryQualityIndicator_a212ae7c8258587a32b158043911cdb6} + +\begin{CompactList}\small\item\em constructor \item\end{CompactList}\item +void {\bf set\-Bounds} (const unsigned \_\-i\-Obj, const double \_\-min, const double \_\-max) +\begin{CompactList}\small\item\em set the bounds for objective \_\-i\-Obj \item\end{CompactList}\end{CompactItemize} +\subsection*{Protected Attributes} +\begin{CompactItemize} +\item +std::vector$<$ {\bf Range} $>$ {\bf bounds}\label{classmoeoBinaryQualityIndicator_a3bce334c4e74a22c0eb1026592d2f90} + +\begin{CompactList}\small\item\em range (min and max double value) for each objective \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Types} +\begin{CompactItemize} +\item +typedef EOFitness::fitness\_\-traits {\bf traits}\label{classmoeoBinaryQualityIndicator_a23261c88b3ce39b9fed704cad328a76} + +\begin{CompactList}\small\item\em fitness traits \item\end{CompactList}\end{CompactItemize} +\subsection*{Classes} +\begin{CompactItemize} +\item +class {\bf Range} +\begin{CompactList}\small\item\em Private class to represent the bounds. \item\end{CompactList}\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class EOFitness$>$ class moeo\-Binary\-Quality\-Indicator$<$ EOFitness $>$} + +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 {\bf eo\-Pareto\-Fitness} object. + + + +Definition at line 28 of file moeo\-Binary\-Quality\-Indicator.h. + +\subsection{Member Function Documentation} +\index{moeoBinaryQualityIndicator@{moeo\-Binary\-Quality\-Indicator}!setBounds@{setBounds}} +\index{setBounds@{setBounds}!moeoBinaryQualityIndicator@{moeo\-Binary\-Quality\-Indicator}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOFitness$>$ void {\bf moeo\-Binary\-Quality\-Indicator}$<$ EOFitness $>$::set\-Bounds (const unsigned {\em \_\-i\-Obj}, const double {\em \_\-min}, const double {\em \_\-max})\hspace{0.3cm}{\tt [inline]}}\label{classmoeoBinaryQualityIndicator_a08220a55c86a4e0dd1c8977eb625c9f} + + +set the bounds for objective \_\-i\-Obj + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em unsigned}]\_\-i\-Obj the index of the objective \item[{\em double}]\_\-min the minimum value \item[{\em double}]\_\-max the maximum value \end{description} +\end{Desc} + + +Definition at line 51 of file moeo\-Binary\-Quality\-Indicator.h. + +Referenced by moeo\-IBEAAvg\-Sorting$<$ EOT, Fitness\-Eval $>$::set\-Bounds(), moeo\-IBEAStoch\-Sorting$<$ EOT, Fitness\-Eval $>$::set\-Bounds(), and moeo\-IBEASorting$<$ EOT, Fitness $>$::set\-Bounds(). + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moeo\-Binary\-Quality\-Indicator.h\end{CompactItemize} diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoBinaryQualityIndicator_1_1Range.tex b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoBinaryQualityIndicator_1_1Range.tex new file mode 100644 index 000000000..6f45f4709 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoBinaryQualityIndicator_1_1Range.tex @@ -0,0 +1,51 @@ +\section{moeo\-Binary\-Quality\-Indicator$<$ EOFitness $>$::Range Class Reference} +\label{classmoeoBinaryQualityIndicator_1_1Range}\index{moeoBinaryQualityIndicator::Range@{moeoBinaryQualityIndicator::Range}} +Private class to represent the bounds. + + +{\tt \#include $<$moeo\-Binary\-Quality\-Indicator.h$>$} + +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +{\bf Range} ()\label{classmoeoBinaryQualityIndicator_1_1Range_6eafdd50d706e4add50a39400589697c} + +\item +{\bf Range} (const double \_\-min, const double \_\-max)\label{classmoeoBinaryQualityIndicator_1_1Range_1b739913f7b39b9332a85ba95bf0fd97} + +\item +double {\bf minimum} ()\label{classmoeoBinaryQualityIndicator_1_1Range_5e2d18b883faf80b5e8922508c1faeb7} + +\item +double {\bf maximum} ()\label{classmoeoBinaryQualityIndicator_1_1Range_82b2fdf7e8310b6b71230f75b298b455} + +\item +double {\bf range} ()\label{classmoeoBinaryQualityIndicator_1_1Range_352358206bff2de122504f2b1e0fc66f} + +\end{CompactItemize} +\subsection*{Private Attributes} +\begin{CompactItemize} +\item +double {\bf min}\label{classmoeoBinaryQualityIndicator_1_1Range_19ded3674f2ced2fe56a247e43cdc276} + +\item +double {\bf max}\label{classmoeoBinaryQualityIndicator_1_1Range_47728b83ab11c42c7dec8a0d31bf0f2b} + +\item +double {\bf r}\label{classmoeoBinaryQualityIndicator_1_1Range_fc0f543dc51a29059e25d3d0298bc08c} + +\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class EOFitness$>$ class moeo\-Binary\-Quality\-Indicator$<$ EOFitness $>$::Range} + +Private class to represent the bounds. + + + +Definition at line 62 of file moeo\-Binary\-Quality\-Indicator.h. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moeo\-Binary\-Quality\-Indicator.h\end{CompactItemize} diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoCombinedMOLS.eps b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoCombinedMOLS.eps new file mode 100644 index 000000000..0761f1d7b --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoCombinedMOLS.eps @@ -0,0 +1,209 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 243.902 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 2.05 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 4 def +/cols 1 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(moeoCombinedMOLS< EOT >) cw +(moeoMOLS< EOT >) cw +(eoBF< const EOT &, moeoArchive< EOT > &, void >) cw +(eoFunctorBase) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (moeoCombinedMOLS< EOT >) 0 0 box + (moeoMOLS< EOT >) 0 1 box + (eoBF< const EOT &, moeoArchive< EOT > &, void >) 0 2 box + (eoFunctorBase) 0 3 box + +% ----- relations ----- + +solid +0 0 0 out +solid +1 0 1 in +solid +0 0 1 out +solid +1 0 2 in +solid +0 0 2 out +solid +1 0 3 in diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoCombinedMOLS.tex b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoCombinedMOLS.tex new file mode 100644 index 000000000..2c79dbbb4 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoCombinedMOLS.tex @@ -0,0 +1,101 @@ +\section{moeo\-Combined\-MOLS$<$ EOT $>$ Class Template Reference} +\label{classmoeoCombinedMOLS}\index{moeoCombinedMOLS@{moeoCombinedMOLS}} +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. + + +{\tt \#include $<$moeo\-Combined\-MOLS.h$>$} + +Inheritance diagram for moeo\-Combined\-MOLS$<$ EOT $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=4cm]{classmoeoCombinedMOLS} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +{\bf moeo\-Combined\-MOLS} ({\bf eo\-Eval\-Func}$<$ EOT $>$ \&\_\-eval, {\bf moeo\-MOLS}$<$ EOT $>$ \&\_\-first\_\-ls) +\begin{CompactList}\small\item\em Ctor. \item\end{CompactList}\item +void {\bf add} ({\bf moeo\-MOLS}$<$ EOT $>$ \&\_\-ls) +\begin{CompactList}\small\item\em Adds a new local search to combine. \item\end{CompactList}\item +void {\bf operator()} (const EOT \&\_\-eo, {\bf moeo\-Archive}$<$ EOT $>$ \&\_\-arch) +\begin{CompactList}\small\item\em Gives a new solution in order to explore the neigborhood. \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Attributes} +\begin{CompactItemize} +\item +{\bf eo\-Eval\-Func}$<$ EOT $>$ \& {\bf eval}\label{classmoeoCombinedMOLS_b2c0866a1808022bd3a9dac89e528a01} + +\begin{CompactList}\small\item\em the full evaluator of a solution \item\end{CompactList}\item +std::vector$<$ {\bf moeo\-MOLS}$<$ EOT $>$ $\ast$ $>$ {\bf combined\-MOLS}\label{classmoeoCombinedMOLS_a5ccc182c0d61421fc524c2da3671099} + +\begin{CompactList}\small\item\em the vector that contains the combined MOLS \item\end{CompactList}\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class EOT$>$ class moeo\-Combined\-MOLS$<$ 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 moeo\-Combined\-MOLS.h. + +\subsection{Constructor \& Destructor Documentation} +\index{moeoCombinedMOLS@{moeo\-Combined\-MOLS}!moeoCombinedMOLS@{moeoCombinedMOLS}} +\index{moeoCombinedMOLS@{moeoCombinedMOLS}!moeoCombinedMOLS@{moeo\-Combined\-MOLS}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT$>$ {\bf moeo\-Combined\-MOLS}$<$ EOT $>$::{\bf moeo\-Combined\-MOLS} ({\bf eo\-Eval\-Func}$<$ EOT $>$ \& {\em \_\-eval}, {\bf moeo\-MOLS}$<$ EOT $>$ \& {\em \_\-first\_\-ls})\hspace{0.3cm}{\tt [inline]}}\label{classmoeoCombinedMOLS_9305380cd8f5a4d85ef603fa85c1860b} + + +Ctor. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-eval}]the full evaluator of a solution \item[{\em \_\-first\_\-ls}]the first multi-objective local search to add \end{description} +\end{Desc} + + +Definition at line 33 of file moeo\-Combined\-MOLS.h. + +References moeo\-Combined\-MOLS$<$ EOT $>$::combined\-MOLS. + +\subsection{Member Function Documentation} +\index{moeoCombinedMOLS@{moeo\-Combined\-MOLS}!add@{add}} +\index{add@{add}!moeoCombinedMOLS@{moeo\-Combined\-MOLS}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT$>$ void {\bf moeo\-Combined\-MOLS}$<$ EOT $>$::add ({\bf moeo\-MOLS}$<$ EOT $>$ \& {\em \_\-ls})\hspace{0.3cm}{\tt [inline]}}\label{classmoeoCombinedMOLS_bd6b8f46211d5d531753c69fcd76cba4} + + +Adds a new local search to combine. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-ls}]the multi-objective local search to add \end{description} +\end{Desc} + + +Definition at line 43 of file moeo\-Combined\-MOLS.h. + +References moeo\-Combined\-MOLS$<$ EOT $>$::combined\-MOLS.\index{moeoCombinedMOLS@{moeo\-Combined\-MOLS}!operator()@{operator()}} +\index{operator()@{operator()}!moeoCombinedMOLS@{moeo\-Combined\-MOLS}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT$>$ void {\bf moeo\-Combined\-MOLS}$<$ EOT $>$::operator() (const EOT \& {\em \_\-eo}, {\bf moeo\-Archive}$<$ EOT $>$ \& {\em \_\-arch})\hspace{0.3cm}{\tt [inline, virtual]}}\label{classmoeoCombinedMOLS_fa7de12db00b89feb139372603bba4aa} + + +Gives a new solution in order to explore the neigborhood. + +The new non-dominated solutions are added to the archive \begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-eo}]the solution \item[{\em \_\-arch}]the archive of non-dominated solutions \end{description} +\end{Desc} + + +Implements {\bf eo\-BF$<$ const EOT \&, moeo\-Archive$<$ EOT $>$ \&, void $>$}. + +Definition at line 54 of file moeo\-Combined\-MOLS.h. + +References moeo\-Combined\-MOLS$<$ EOT $>$::combined\-MOLS, and moeo\-Combined\-MOLS$<$ EOT $>$::eval. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moeo\-Combined\-MOLS.h\end{CompactItemize} diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoContributionMetric.eps b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoContributionMetric.eps new file mode 100644 index 000000000..3335421e4 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoContributionMetric.eps @@ -0,0 +1,227 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 195.312 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 2.56 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 5 def +/cols 2 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(moeoContributionMetric< EOT >) cw +(moeoVectorVsVectorBM< EOT, double >) cw +(moeoBM< A1, A2, R >) cw +(eoBF< A1, A2, R >) cw +(moeoMetric) cw +(eoFunctorBase) cw +(eoFunctorBase) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (moeoContributionMetric< EOT >) 0.5 0 box + (moeoVectorVsVectorBM< EOT, double >) 0.5 1 box + (moeoBM< A1, A2, R >) 0.5 2 box + (eoBF< A1, A2, R >) 0 3 box + (moeoMetric) 1 3 box + (eoFunctorBase) 0 4 box + (eoFunctorBase) 1 4 box + +% ----- relations ----- + +solid +0 0.5 0 out +solid +1 0.5 1 in +solid +0 0.5 1 out +solid +1 0.5 2 in +solid +0 0.5 2 out +solid +0 1 3 conn +solid +1 0 3 in +solid +0 0 3 out +solid +1 1 3 in +solid +0 1 3 out +solid +1 0 4 in +solid +1 1 4 in diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoContributionMetric.tex b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoContributionMetric.tex new file mode 100644 index 000000000..06b7da3d8 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoContributionMetric.tex @@ -0,0 +1,116 @@ +\section{moeo\-Contribution\-Metric$<$ EOT $>$ Class Template Reference} +\label{classmoeoContributionMetric}\index{moeoContributionMetric@{moeoContributionMetric}} +The contribution metric evaluates the proportion of non-dominated solutions given by a Pareto set relatively to another Pareto set. + + +{\tt \#include $<$moeo\-Contribution\-Metric.h$>$} + +Inheritance diagram for moeo\-Contribution\-Metric$<$ EOT $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=5cm]{classmoeoContributionMetric} +\end{center} +\end{figure} +\subsection*{Public Types} +\begin{CompactItemize} +\item +typedef EOT::Fitness {\bf EOFitness}\label{classmoeoContributionMetric_06c0247b9558eeb34e32c9a694924a66} + +\begin{CompactList}\small\item\em The fitness type of a solution. \item\end{CompactList}\end{CompactItemize} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +double {\bf operator()} (const std::vector$<$ {\bf EOFitness} $>$ \&\_\-set1, const std::vector$<$ {\bf EOFitness} $>$ \&\_\-set2) +\begin{CompactList}\small\item\em Returns the contribution of the Pareto set '\_\-set1' relatively to the Pareto set '\_\-set2'. \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Member Functions} +\begin{CompactItemize} +\item +unsigned {\bf card\_\-C} (const std::vector$<$ {\bf EOFitness} $>$ \&\_\-set1, const std::vector$<$ {\bf EOFitness} $>$ \&\_\-set2) +\begin{CompactList}\small\item\em Returns the number of solutions both in '\_\-set1' and '\_\-set2'. \item\end{CompactList}\item +unsigned {\bf card\_\-W} (const std::vector$<$ {\bf EOFitness} $>$ \&\_\-set1, const std::vector$<$ {\bf EOFitness} $>$ \&\_\-set2) +\begin{CompactList}\small\item\em Returns the number of solutions in '\_\-set1' dominating at least one solution of '\_\-set2'. \item\end{CompactList}\item +unsigned {\bf card\_\-N} (const std::vector$<$ {\bf EOFitness} $>$ \&\_\-set1, const std::vector$<$ {\bf EOFitness} $>$ \&\_\-set2) +\begin{CompactList}\small\item\em Returns the number of solutions in '\_\-set1' having no relation of dominance with those from '\_\-set2'. \item\end{CompactList}\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class EOT$>$ class moeo\-Contribution\-Metric$<$ 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 moeo\-Contribution\-Metric.h. + +\subsection{Member Function Documentation} +\index{moeoContributionMetric@{moeo\-Contribution\-Metric}!operator()@{operator()}} +\index{operator()@{operator()}!moeoContributionMetric@{moeo\-Contribution\-Metric}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT$>$ double {\bf moeo\-Contribution\-Metric}$<$ EOT $>$::operator() (const std::vector$<$ {\bf EOFitness} $>$ \& {\em \_\-set1}, const std::vector$<$ {\bf EOFitness} $>$ \& {\em \_\-set2})\hspace{0.3cm}{\tt [inline]}}\label{classmoeoContributionMetric_76b6b93124263ca1a8232b12a556d843} + + +Returns the contribution of the Pareto set '\_\-set1' relatively to the Pareto set '\_\-set2'. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-set1}]the first Pareto set \item[{\em \_\-set2}]the second Pareto set \end{description} +\end{Desc} + + +Definition at line 38 of file moeo\-Contribution\-Metric.h. + +References moeo\-Contribution\-Metric$<$ EOT $>$::card\_\-C(), moeo\-Contribution\-Metric$<$ EOT $>$::card\_\-N(), and moeo\-Contribution\-Metric$<$ EOT $>$::card\_\-W().\index{moeoContributionMetric@{moeo\-Contribution\-Metric}!card_C@{card\_\-C}} +\index{card_C@{card\_\-C}!moeoContributionMetric@{moeo\-Contribution\-Metric}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT$>$ unsigned {\bf moeo\-Contribution\-Metric}$<$ EOT $>$::card\_\-C (const std::vector$<$ {\bf EOFitness} $>$ \& {\em \_\-set1}, const std::vector$<$ {\bf EOFitness} $>$ \& {\em \_\-set2})\hspace{0.3cm}{\tt [inline, private]}}\label{classmoeoContributionMetric_a0041e60c941dd1909f28fadcf011b87} + + +Returns the number of solutions both in '\_\-set1' and '\_\-set2'. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-set1}]the first Pareto set \item[{\em \_\-set2}]the second Pareto set \end{description} +\end{Desc} + + +Definition at line 57 of file moeo\-Contribution\-Metric.h. + +Referenced by moeo\-Contribution\-Metric$<$ EOT $>$::operator()().\index{moeoContributionMetric@{moeo\-Contribution\-Metric}!card_W@{card\_\-W}} +\index{card_W@{card\_\-W}!moeoContributionMetric@{moeo\-Contribution\-Metric}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT$>$ unsigned {\bf moeo\-Contribution\-Metric}$<$ EOT $>$::card\_\-W (const std::vector$<$ {\bf EOFitness} $>$ \& {\em \_\-set1}, const std::vector$<$ {\bf EOFitness} $>$ \& {\em \_\-set2})\hspace{0.3cm}{\tt [inline, private]}}\label{classmoeoContributionMetric_64a72db699a10d6b4794773d4adbae3c} + + +Returns the number of solutions in '\_\-set1' dominating at least one solution of '\_\-set2'. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-set1}]the first Pareto set \item[{\em \_\-set2}]the second Pareto set \end{description} +\end{Desc} + + +Definition at line 76 of file moeo\-Contribution\-Metric.h. + +Referenced by moeo\-Contribution\-Metric$<$ EOT $>$::operator()().\index{moeoContributionMetric@{moeo\-Contribution\-Metric}!card_N@{card\_\-N}} +\index{card_N@{card\_\-N}!moeoContributionMetric@{moeo\-Contribution\-Metric}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT$>$ unsigned {\bf moeo\-Contribution\-Metric}$<$ EOT $>$::card\_\-N (const std::vector$<$ {\bf EOFitness} $>$ \& {\em \_\-set1}, const std::vector$<$ {\bf EOFitness} $>$ \& {\em \_\-set2})\hspace{0.3cm}{\tt [inline, private]}}\label{classmoeoContributionMetric_9960fc1396dbadb412719aaeeedcf961} + + +Returns the number of solutions in '\_\-set1' having no relation of dominance with those from '\_\-set2'. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-set1}]the first Pareto set \item[{\em \_\-set2}]the second Pareto set \end{description} +\end{Desc} + + +Definition at line 95 of file moeo\-Contribution\-Metric.h. + +Referenced by moeo\-Contribution\-Metric$<$ EOT $>$::operator()(). + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moeo\-Contribution\-Metric.h\end{CompactItemize} diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoDisctinctElitistReplacement.eps b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoDisctinctElitistReplacement.eps new file mode 100644 index 000000000..cb6876239 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoDisctinctElitistReplacement.eps @@ -0,0 +1,215 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 318.471 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 1.57 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 5 def +/cols 1 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(moeoDisctinctElitistReplacement< EOT, WorthT >) cw +(moeoReplacement< EOT, WorthT >) cw +(eoReplacement< EOT >) cw +(eoBF< eoPop< EOT > &, eoPop< EOT > &, void >) cw +(eoFunctorBase) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (moeoDisctinctElitistReplacement< EOT, WorthT >) 0 0 box + (moeoReplacement< EOT, WorthT >) 0 1 box + (eoReplacement< EOT >) 0 2 box + (eoBF< eoPop< EOT > &, eoPop< EOT > &, void >) 0 3 box + (eoFunctorBase) 0 4 box + +% ----- relations ----- + +solid +0 0 0 out +solid +1 0 1 in +solid +0 0 1 out +solid +1 0 2 in +solid +0 0 2 out +solid +1 0 3 in +solid +0 0 3 out +solid +1 0 4 in diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoDisctinctElitistReplacement.tex b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoDisctinctElitistReplacement.tex new file mode 100644 index 000000000..68117695d --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoDisctinctElitistReplacement.tex @@ -0,0 +1,101 @@ +\section{moeo\-Disctinct\-Elitist\-Replacement$<$ EOT, Worth\-T $>$ Class Template Reference} +\label{classmoeoDisctinctElitistReplacement}\index{moeoDisctinctElitistReplacement@{moeoDisctinctElitistReplacement}} +Same than \doxyref{moeo\-Elitist\-Replacement}{p.}{classmoeoElitistReplacement} except that distinct individuals are privilegied. + + +{\tt \#include $<$moeo\-Replacement.h$>$} + +Inheritance diagram for moeo\-Disctinct\-Elitist\-Replacement$<$ EOT, Worth\-T $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=5cm]{classmoeoDisctinctElitistReplacement} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +{\bf moeo\-Disctinct\-Elitist\-Replacement} ({\bf eo\-Perf2Worth}$<$ EOT, Worth\-T $>$ \&\_\-perf2worth) +\begin{CompactList}\small\item\em constructor \item\end{CompactList}\item +void {\bf operator()} ({\bf eo\-Pop}$<$ EOT $>$ \&\_\-parents, {\bf eo\-Pop}$<$ EOT $>$ \&\_\-offspring) +\begin{CompactList}\small\item\em replacement - result in \_\-parents \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Member Functions} +\begin{CompactItemize} +\item +void {\bf create\-New\-Pop} ({\bf eo\-Pop}$<$ EOT $>$ \&\_\-pop, unsigned \_\-size) +\begin{CompactList}\small\item\em creation of the new population of size \_\-size \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Attributes} +\begin{CompactItemize} +\item +{\bf eo\-Perf2Worth}$<$ EOT, Worth\-T $>$ \& {\bf perf2worth}\label{classmoeoDisctinctElitistReplacement_3d1616ba57c10f5a77e0ec021cc8beb2} + +\begin{CompactList}\small\item\em the functor object to transform raw fitnesses into fitness for selection \item\end{CompactList}\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class EOT, class Worth\-T = double$>$ class moeo\-Disctinct\-Elitist\-Replacement$<$ EOT, Worth\-T $>$} + +Same than \doxyref{moeo\-Elitist\-Replacement}{p.}{classmoeoElitistReplacement} except that distinct individuals are privilegied. + + + +Definition at line 78 of file moeo\-Replacement.h. + +\subsection{Constructor \& Destructor Documentation} +\index{moeoDisctinctElitistReplacement@{moeo\-Disctinct\-Elitist\-Replacement}!moeoDisctinctElitistReplacement@{moeoDisctinctElitistReplacement}} +\index{moeoDisctinctElitistReplacement@{moeoDisctinctElitistReplacement}!moeoDisctinctElitistReplacement@{moeo\-Disctinct\-Elitist\-Replacement}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT, class Worth\-T = double$>$ {\bf moeo\-Disctinct\-Elitist\-Replacement}$<$ EOT, Worth\-T $>$::{\bf moeo\-Disctinct\-Elitist\-Replacement} ({\bf eo\-Perf2Worth}$<$ EOT, Worth\-T $>$ \& {\em \_\-perf2worth})\hspace{0.3cm}{\tt [inline]}}\label{classmoeoDisctinctElitistReplacement_f39200df2b68f6d35fbed2a2688a9d75} + + +constructor + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-perf2worth}]the functor class to transform raw fitnesses into fitness for selection \end{description} +\end{Desc} + + +Definition at line 87 of file moeo\-Replacement.h. + +\subsection{Member Function Documentation} +\index{moeoDisctinctElitistReplacement@{moeo\-Disctinct\-Elitist\-Replacement}!operator()@{operator()}} +\index{operator()@{operator()}!moeoDisctinctElitistReplacement@{moeo\-Disctinct\-Elitist\-Replacement}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT, class Worth\-T = double$>$ void {\bf moeo\-Disctinct\-Elitist\-Replacement}$<$ EOT, Worth\-T $>$::operator() ({\bf eo\-Pop}$<$ EOT $>$ \& {\em \_\-parents}, {\bf eo\-Pop}$<$ EOT $>$ \& {\em \_\-offspring})\hspace{0.3cm}{\tt [inline, virtual]}}\label{classmoeoDisctinctElitistReplacement_ca73704e827074092e7d228253427a8a} + + +replacement - result in \_\-parents + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-parents}]parents population \item[{\em \_\-offspring}]offspring population \end{description} +\end{Desc} + + +Implements {\bf eo\-BF$<$ eo\-Pop$<$ EOT $>$ \&, eo\-Pop$<$ EOT $>$ \&, void $>$}. + +Definition at line 99 of file moeo\-Replacement.h. + +References moeo\-Disctinct\-Elitist\-Replacement$<$ EOT, Worth\-T $>$::create\-New\-Pop().\index{moeoDisctinctElitistReplacement@{moeo\-Disctinct\-Elitist\-Replacement}!createNewPop@{createNewPop}} +\index{createNewPop@{createNewPop}!moeoDisctinctElitistReplacement@{moeo\-Disctinct\-Elitist\-Replacement}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT, class Worth\-T = double$>$ void {\bf moeo\-Disctinct\-Elitist\-Replacement}$<$ EOT, Worth\-T $>$::create\-New\-Pop ({\bf eo\-Pop}$<$ EOT $>$ \& {\em \_\-pop}, unsigned {\em \_\-size})\hspace{0.3cm}{\tt [inline, private]}}\label{classmoeoDisctinctElitistReplacement_7aed100016940e4806a7c93c0e22bf85} + + +creation of the new population of size \_\-size + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-pop}]the initial population (will be modified) \item[{\em \_\-size}]the size of the population to create \end{description} +\end{Desc} + + +Definition at line 123 of file moeo\-Replacement.h. + +References moeo\-Disctinct\-Elitist\-Replacement$<$ EOT, Worth\-T $>$::perf2worth, and eo\-Pop$<$ EOT $>$::swap(). + +Referenced by moeo\-Disctinct\-Elitist\-Replacement$<$ EOT, Worth\-T $>$::operator()(). + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moeo\-Replacement.h\end{CompactItemize} diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoElitistReplacement.eps b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoElitistReplacement.eps new file mode 100644 index 000000000..dacd4c9bb --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoElitistReplacement.eps @@ -0,0 +1,215 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 318.471 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 1.57 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 5 def +/cols 1 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(moeoElitistReplacement< EOT, WorthT >) cw +(moeoReplacement< EOT, WorthT >) cw +(eoReplacement< EOT >) cw +(eoBF< eoPop< EOT > &, eoPop< EOT > &, void >) cw +(eoFunctorBase) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (moeoElitistReplacement< EOT, WorthT >) 0 0 box + (moeoReplacement< EOT, WorthT >) 0 1 box + (eoReplacement< EOT >) 0 2 box + (eoBF< eoPop< EOT > &, eoPop< EOT > &, void >) 0 3 box + (eoFunctorBase) 0 4 box + +% ----- relations ----- + +solid +0 0 0 out +solid +1 0 1 in +solid +0 0 1 out +solid +1 0 2 in +solid +0 0 2 out +solid +1 0 3 in +solid +0 0 3 out +solid +1 0 4 in diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoElitistReplacement.tex b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoElitistReplacement.tex new file mode 100644 index 000000000..260c40587 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoElitistReplacement.tex @@ -0,0 +1,76 @@ +\section{moeo\-Elitist\-Replacement$<$ EOT, Worth\-T $>$ Class Template Reference} +\label{classmoeoElitistReplacement}\index{moeoElitistReplacement@{moeoElitistReplacement}} +Keep all the best individuals (almost cut-and-pasted from {\bf eo\-NDPlus\-Replacement}, (c) Maarten Keijzer, Marc Schoenauer and Ge\-Neura Team, 2002). + + +{\tt \#include $<$moeo\-Replacement.h$>$} + +Inheritance diagram for moeo\-Elitist\-Replacement$<$ EOT, Worth\-T $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=5cm]{classmoeoElitistReplacement} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +{\bf moeo\-Elitist\-Replacement} ({\bf eo\-Perf2Worth}$<$ EOT, Worth\-T $>$ \&\_\-perf2worth) +\begin{CompactList}\small\item\em constructor \item\end{CompactList}\item +void {\bf operator()} ({\bf eo\-Pop}$<$ EOT $>$ \&\_\-parents, {\bf eo\-Pop}$<$ EOT $>$ \&\_\-offspring) +\begin{CompactList}\small\item\em replacement - result in \_\-parents \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Attributes} +\begin{CompactItemize} +\item +{\bf eo\-Perf2Worth}$<$ EOT, Worth\-T $>$ \& {\bf perf2worth}\label{classmoeoElitistReplacement_020f0e0b6b88a0081d922cca5b05990e} + +\begin{CompactList}\small\item\em the functor object to transform raw fitnesses into fitness for selection \item\end{CompactList}\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class EOT, class Worth\-T = double$>$ class moeo\-Elitist\-Replacement$<$ EOT, Worth\-T $>$} + +Keep all the best individuals (almost cut-and-pasted from {\bf eo\-NDPlus\-Replacement}, (c) Maarten Keijzer, Marc Schoenauer and Ge\-Neura Team, 2002). + + + +Definition at line 35 of file moeo\-Replacement.h. + +\subsection{Constructor \& Destructor Documentation} +\index{moeoElitistReplacement@{moeo\-Elitist\-Replacement}!moeoElitistReplacement@{moeoElitistReplacement}} +\index{moeoElitistReplacement@{moeoElitistReplacement}!moeoElitistReplacement@{moeo\-Elitist\-Replacement}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT, class Worth\-T = double$>$ {\bf moeo\-Elitist\-Replacement}$<$ EOT, Worth\-T $>$::{\bf moeo\-Elitist\-Replacement} ({\bf eo\-Perf2Worth}$<$ EOT, Worth\-T $>$ \& {\em \_\-perf2worth})\hspace{0.3cm}{\tt [inline]}}\label{classmoeoElitistReplacement_fa62ed508ac194ed7b720e37dd22458c} + + +constructor + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-perf2worth}]the functor class to transform raw fitnesses into fitness for selection \end{description} +\end{Desc} + + +Definition at line 43 of file moeo\-Replacement.h. + +\subsection{Member Function Documentation} +\index{moeoElitistReplacement@{moeo\-Elitist\-Replacement}!operator()@{operator()}} +\index{operator()@{operator()}!moeoElitistReplacement@{moeo\-Elitist\-Replacement}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT, class Worth\-T = double$>$ void {\bf moeo\-Elitist\-Replacement}$<$ EOT, Worth\-T $>$::operator() ({\bf eo\-Pop}$<$ EOT $>$ \& {\em \_\-parents}, {\bf eo\-Pop}$<$ EOT $>$ \& {\em \_\-offspring})\hspace{0.3cm}{\tt [inline, virtual]}}\label{classmoeoElitistReplacement_aad627deb45859e65ace0709c004049a} + + +replacement - result in \_\-parents + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-parents}]parents population \item[{\em \_\-offspring}]offspring population \end{description} +\end{Desc} + + +Implements {\bf eo\-BF$<$ eo\-Pop$<$ EOT $>$ \&, eo\-Pop$<$ EOT $>$ \&, void $>$}. + +Definition at line 54 of file moeo\-Replacement.h. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moeo\-Replacement.h\end{CompactItemize} diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoEntropyMetric.eps b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoEntropyMetric.eps new file mode 100644 index 000000000..62b905032 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoEntropyMetric.eps @@ -0,0 +1,227 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 195.312 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 2.56 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 5 def +/cols 2 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(moeoEntropyMetric< EOT >) cw +(moeoVectorVsVectorBM< EOT, double >) cw +(moeoBM< A1, A2, R >) cw +(eoBF< A1, A2, R >) cw +(moeoMetric) cw +(eoFunctorBase) cw +(eoFunctorBase) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (moeoEntropyMetric< EOT >) 0.5 0 box + (moeoVectorVsVectorBM< EOT, double >) 0.5 1 box + (moeoBM< A1, A2, R >) 0.5 2 box + (eoBF< A1, A2, R >) 0 3 box + (moeoMetric) 1 3 box + (eoFunctorBase) 0 4 box + (eoFunctorBase) 1 4 box + +% ----- relations ----- + +solid +0 0.5 0 out +solid +1 0.5 1 in +solid +0 0.5 1 out +solid +1 0.5 2 in +solid +0 0.5 2 out +solid +0 1 3 conn +solid +1 0 3 in +solid +0 0 3 out +solid +1 1 3 in +solid +0 1 3 out +solid +1 0 4 in +solid +1 1 4 in diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoEntropyMetric.tex b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoEntropyMetric.tex new file mode 100644 index 000000000..33d9fc7b7 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoEntropyMetric.tex @@ -0,0 +1,89 @@ +\section{moeo\-Entropy\-Metric$<$ EOT $>$ Class Template Reference} +\label{classmoeoEntropyMetric}\index{moeoEntropyMetric@{moeoEntropyMetric}} +The entropy gives an idea of the diversity of a Pareto set relatively to another Pareto set. + + +{\tt \#include $<$moeo\-Entropy\-Metric.h$>$} + +Inheritance diagram for moeo\-Entropy\-Metric$<$ EOT $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=5cm]{classmoeoEntropyMetric} +\end{center} +\end{figure} +\subsection*{Public Types} +\begin{CompactItemize} +\item +typedef EOT::Fitness {\bf EOFitness}\label{classmoeoEntropyMetric_306b72d2236de1ecbae986c65490a8fe} + +\begin{CompactList}\small\item\em The fitness type of a solution. \item\end{CompactList}\end{CompactItemize} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +double {\bf operator()} (const std::vector$<$ {\bf EOFitness} $>$ \&\_\-set1, const std::vector$<$ {\bf EOFitness} $>$ \&\_\-set2) +\begin{CompactList}\small\item\em Returns the entropy of the Pareto set '\_\-set1' relatively to the Pareto set '\_\-set2'. \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Member Functions} +\begin{CompactItemize} +\item +void {\bf remove\-Dominated} (std::vector$<$ {\bf EOFitness} $>$ \&\_\-f)\label{classmoeoEntropyMetric_3252e7534b1ceb1317936c5d2b3abcbe} + +\item +void {\bf prenormalize} (const std::vector$<$ {\bf EOFitness} $>$ \&\_\-f)\label{classmoeoEntropyMetric_c9f0c65b4de69accbfb42486f6445cb0} + +\item +void {\bf normalize} (std::vector$<$ {\bf EOFitness} $>$ \&\_\-f)\label{classmoeoEntropyMetric_bc32468b148a0da4eb21a9fc14dfafae} + +\item +void {\bf compute\-Union} (const std::vector$<$ {\bf EOFitness} $>$ \&\_\-f1, const std::vector$<$ {\bf EOFitness} $>$ \&\_\-f2, std::vector$<$ {\bf EOFitness} $>$ \&\_\-f)\label{classmoeoEntropyMetric_2de60a0e6be362f074b50e6b455152ab} + +\item +unsigned {\bf how\-Many\-In\-Niche\-Of} (const std::vector$<$ {\bf EOFitness} $>$ \&\_\-f, const {\bf EOFitness} \&\_\-s, unsigned \_\-size)\label{classmoeoEntropyMetric_a9369be315e139ebdf19fac09ad0563f} + +\item +double {\bf euclidian\-Distance} (const {\bf EOFitness} \&\_\-set1, const {\bf EOFitness} \&\_\-to, unsigned \_\-deg=2)\label{classmoeoEntropyMetric_34f825ce7c53132f7218483130da8652} + +\end{CompactItemize} +\subsection*{Private Attributes} +\begin{CompactItemize} +\item +std::vector$<$ double $>$ {\bf vect\_\-min\_\-val}\label{classmoeoEntropyMetric_d4046a304badfe78aa35b2d57938ffe9} + +\item +std::vector$<$ double $>$ {\bf vect\_\-max\_\-val}\label{classmoeoEntropyMetric_af0ae9645bdbb993de4bc990a0a08883} + +\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class EOT$>$ class moeo\-Entropy\-Metric$<$ 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 moeo\-Entropy\-Metric.h. + +\subsection{Member Function Documentation} +\index{moeoEntropyMetric@{moeo\-Entropy\-Metric}!operator()@{operator()}} +\index{operator()@{operator()}!moeoEntropyMetric@{moeo\-Entropy\-Metric}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT$>$ double {\bf moeo\-Entropy\-Metric}$<$ EOT $>$::operator() (const std::vector$<$ {\bf EOFitness} $>$ \& {\em \_\-set1}, const std::vector$<$ {\bf EOFitness} $>$ \& {\em \_\-set2})\hspace{0.3cm}{\tt [inline]}}\label{classmoeoEntropyMetric_58136405dfed951efa340ddf541c29fd} + + +Returns the entropy of the Pareto set '\_\-set1' relatively to the Pareto set '\_\-set2'. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-set1}]the first Pareto set \item[{\em \_\-set2}]the second Pareto set \end{description} +\end{Desc} + + +Definition at line 38 of file moeo\-Entropy\-Metric.h. + +References moeo\-Entropy\-Metric$<$ EOT $>$::compute\-Union(), moeo\-Entropy\-Metric$<$ EOT $>$::how\-Many\-In\-Niche\-Of(), moeo\-Entropy\-Metric$<$ EOT $>$::normalize(), moeo\-Entropy\-Metric$<$ EOT $>$::prenormalize(), and moeo\-Entropy\-Metric$<$ EOT $>$::remove\-Dominated(). + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moeo\-Entropy\-Metric.h\end{CompactItemize} diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoHybridMOLS.eps b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoHybridMOLS.eps new file mode 100644 index 000000000..77aee0c9e --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoHybridMOLS.eps @@ -0,0 +1,209 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 462.428 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 1.08125 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 4 def +/cols 1 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(moeoHybridMOLS< EOT >) cw +(eoUpdater) cw +(eoF< void >) cw +(eoFunctorBase) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (moeoHybridMOLS< EOT >) 0 0 box + (eoUpdater) 0 1 box + (eoF< void >) 0 2 box + (eoFunctorBase) 0 3 box + +% ----- relations ----- + +solid +0 0 0 out +solid +1 0 1 in +solid +0 0 1 out +solid +1 0 2 in +solid +0 0 2 out +solid +1 0 3 in diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoHybridMOLS.tex b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoHybridMOLS.tex new file mode 100644 index 000000000..899ca25fb --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoHybridMOLS.tex @@ -0,0 +1,67 @@ +\section{moeo\-Hybrid\-MOLS$<$ EOT $>$ Class Template Reference} +\label{classmoeoHybridMOLS}\index{moeoHybridMOLS@{moeoHybridMOLS}} +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. + + +{\tt \#include $<$moeo\-Hybrid\-MOLS.h$>$} + +Inheritance diagram for moeo\-Hybrid\-MOLS$<$ EOT $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=4cm]{classmoeoHybridMOLS} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +{\bf eo\-Hybrid\-MOLS} ({\bf eo\-Continue}$<$ EOT $>$ \&\_\-term, {\bf eo\-Select}$<$ EOT $>$ \&\_\-select, {\bf moeo\-MOLS}$<$ EOT $>$ \&\_\-mols, {\bf moeo\-Archive}$<$ EOT $>$ \&\_\-arch) +\begin{CompactList}\small\item\em Ctor. \item\end{CompactList}\item +void {\bf operator()} ()\label{classmoeoHybridMOLS_f62b4221d0ec094e39b73b386b508fc1} + +\begin{CompactList}\small\item\em Applies the multi-objective local search to selected individuals contained in the archive if the stopping criteria is not verified. \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Attributes} +\begin{CompactItemize} +\item +{\bf eo\-Continue}$<$ EOT $>$ \& {\bf term}\label{classmoeoHybridMOLS_cd05dc1c82febb819945663c3b5c6a75} + +\begin{CompactList}\small\item\em stopping criteria \item\end{CompactList}\item +{\bf eo\-Select}$<$ EOT $>$ \& {\bf select}\label{classmoeoHybridMOLS_b47c4d1bce77c5648b437a5884a7c41f} + +\begin{CompactList}\small\item\em selector \item\end{CompactList}\item +{\bf moeo\-MOLS}$<$ EOT $>$ \& {\bf mols}\label{classmoeoHybridMOLS_5ecf318c321a71857c11da1ff5000092} + +\begin{CompactList}\small\item\em multi-objective local search \item\end{CompactList}\item +{\bf moeo\-Archive}$<$ EOT $>$ \& {\bf arch}\label{classmoeoHybridMOLS_4aecb1f300f2f09b8d45998cc140576b} + +\begin{CompactList}\small\item\em archive \item\end{CompactList}\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class EOT$>$ class moeo\-Hybrid\-MOLS$<$ 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 moeo\-Hybrid\-MOLS.h. + +\subsection{Member Function Documentation} +\index{moeoHybridMOLS@{moeo\-Hybrid\-MOLS}!eoHybridMOLS@{eoHybridMOLS}} +\index{eoHybridMOLS@{eoHybridMOLS}!moeoHybridMOLS@{moeo\-Hybrid\-MOLS}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT$>$ {\bf moeo\-Hybrid\-MOLS}$<$ EOT $>$::eo\-Hybrid\-MOLS ({\bf eo\-Continue}$<$ EOT $>$ \& {\em \_\-term}, {\bf eo\-Select}$<$ EOT $>$ \& {\em \_\-select}, {\bf moeo\-MOLS}$<$ EOT $>$ \& {\em \_\-mols}, {\bf moeo\-Archive}$<$ EOT $>$ \& {\em \_\-arch})\hspace{0.3cm}{\tt [inline]}}\label{classmoeoHybridMOLS_ced4b6d35035bfe3339dd571646e570d} + + +Ctor. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-term}]stopping criteria \item[{\em \_\-select}]selector \item[{\em \_\-mols}]a multi-objective local search \item[{\em \_\-arch}]the archive \end{description} +\end{Desc} + + +Definition at line 38 of file moeo\-Hybrid\-MOLS.h. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moeo\-Hybrid\-MOLS.h\end{CompactItemize} diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoIBEA.eps b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoIBEA.eps new file mode 100644 index 000000000..de81ca4cd --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoIBEA.eps @@ -0,0 +1,233 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 240.964 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 2.075 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 6 def +/cols 2 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(moeoIBEA< EOT, Fitness >) cw +(eoPerf2WorthCached< EOT, double >) cw +(eoPerf2Worth< EOT, WorthT >) cw +(eoUF< const eoPop< EOT > &, void >) cw +(eoValueParam< std::vector< WorthT > >) cw +(eoFunctorBase) cw +(eoParam) cw +(moeoIBEASorting< EOT, Fitness >) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (moeoIBEA< EOT, Fitness >) 0.5 1 box + (eoPerf2WorthCached< EOT, double >) 0.5 2 box + (eoPerf2Worth< EOT, WorthT >) 0.5 3 box + (eoUF< const eoPop< EOT > &, void >) 0 4 box + (eoValueParam< std::vector< WorthT > >) 1 4 box + (eoFunctorBase) 0 5 box + (eoParam) 1 5 box + (moeoIBEASorting< EOT, Fitness >) 0.5 0 box + +% ----- relations ----- + +solid +0 0.5 1 out +solid +1 0.5 2 in +solid +0 0.5 2 out +solid +1 0.5 3 in +solid +0 0.5 3 out +solid +0 1 4 conn +solid +1 0 4 in +solid +0 0 4 out +solid +1 1 4 in +solid +0 1 4 out +solid +1 0 5 in +solid +1 1 5 in +solid +1 0.5 0.25 out +solid +0 0.5 0.75 in diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoIBEA.tex b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoIBEA.tex new file mode 100644 index 000000000..1398210e5 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoIBEA.tex @@ -0,0 +1,60 @@ +\section{moeo\-IBEA$<$ EOT, Fitness $>$ Class Template Reference} +\label{classmoeoIBEA}\index{moeoIBEA@{moeoIBEA}} +Functor The sorting phase of IBEA (Indicator-Based Evolutionary Algorithm). + + +{\tt \#include $<$moeo\-IBEA.h$>$} + +Inheritance diagram for moeo\-IBEA$<$ EOT, Fitness $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=6cm]{classmoeoIBEA} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +{\bf moeo\-IBEA} ({\bf moeo\-Binary\-Quality\-Indicator}$<$ Fitness $>$ $\ast$\_\-I)\label{classmoeoIBEA_3de9693e4e8a723b2e40864ac1f4ac65} + +\item +void {\bf calculate\_\-worths} (const {\bf eo\-Pop}$<$ EOT $>$ \&\_\-pop) +\begin{CompactList}\small\item\em mapping \item\end{CompactList}\end{CompactItemize} +\subsection*{Protected Attributes} +\begin{CompactItemize} +\item +{\bf moeo\-Binary\-Quality\-Indicator}$<$ Fitness $>$ $\ast$ {\bf I}\label{classmoeoIBEA_15ef4c06c2bf6101e5c3d36e162a3965} + +\begin{CompactList}\small\item\em binary quality indicator to use in the selection process \item\end{CompactList}\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class EOT, class Fitness$>$ class moeo\-IBEA$<$ EOT, Fitness $>$} + +Functor The sorting phase of IBEA (Indicator-Based Evolutionary Algorithm). + + + +Definition at line 28 of file moeo\-IBEA.h. + +\subsection{Member Function Documentation} +\index{moeoIBEA@{moeo\-IBEA}!calculate_worths@{calculate\_\-worths}} +\index{calculate_worths@{calculate\_\-worths}!moeoIBEA@{moeo\-IBEA}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT, class Fitness$>$ void {\bf moeo\-IBEA}$<$ EOT, Fitness $>$::calculate\_\-worths (const {\bf eo\-Pop}$<$ EOT $>$ \& {\em \_\-pop})\hspace{0.3cm}{\tt [inline, virtual]}}\label{classmoeoIBEA_9e8738189ef146eb2e6ecb19c9709a31} + + +mapping + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em const}]eo\-Pop$<$EOT$>$\& \_\-pop the population \end{description} +\end{Desc} + + +Implements {\bf eo\-Perf2Worth\-Cached$<$ EOT, double $>$}. + +Definition at line 46 of file moeo\-IBEA.h. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moeo\-IBEA.h\end{CompactItemize} diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoIBEAAvgSorting.eps b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoIBEAAvgSorting.eps new file mode 100644 index 000000000..3a0416e5b --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoIBEAAvgSorting.eps @@ -0,0 +1,233 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 227.273 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 2.2 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 6 def +/cols 2 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(moeoIBEAAvgSorting< EOT, FitnessEval >) cw +(moeoIBEA< EOT, FitnessEval >) cw +(eoPerf2WorthCached< EOT, double >) cw +(eoPerf2Worth< EOT, WorthT >) cw +(eoUF< const eoPop< EOT > &, void >) cw +(eoValueParam< std::vector< WorthT > >) cw +(eoFunctorBase) cw +(eoParam) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (moeoIBEAAvgSorting< EOT, FitnessEval >) 0.5 0 box + (moeoIBEA< EOT, FitnessEval >) 0.5 1 box + (eoPerf2WorthCached< EOT, double >) 0.5 2 box + (eoPerf2Worth< EOT, WorthT >) 0.5 3 box + (eoUF< const eoPop< EOT > &, void >) 0 4 box + (eoValueParam< std::vector< WorthT > >) 1 4 box + (eoFunctorBase) 0 5 box + (eoParam) 1 5 box + +% ----- relations ----- + +solid +0 0.5 0 out +solid +1 0.5 1 in +solid +0 0.5 1 out +solid +1 0.5 2 in +solid +0 0.5 2 out +solid +1 0.5 3 in +solid +0 0.5 3 out +solid +0 1 4 conn +solid +1 0 4 in +solid +0 0 4 out +solid +1 1 4 in +solid +0 1 4 out +solid +1 0 5 in +solid +1 1 5 in diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoIBEAAvgSorting.tex b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoIBEAAvgSorting.tex new file mode 100644 index 000000000..2afb37333 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoIBEAAvgSorting.tex @@ -0,0 +1,103 @@ +\section{moeo\-IBEAAvg\-Sorting$<$ EOT, Fitness\-Eval $>$ Class Template Reference} +\label{classmoeoIBEAAvgSorting}\index{moeoIBEAAvgSorting@{moeoIBEAAvgSorting}} +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 \char`\"{}Searching for Robust Pareto-Optimal Solutions in Multi-Objective Optimization\char`\"{}, 2005 Of course, the fitness of an individual needs to be an eo\-Stochastic\-Pareto\-Fitness object. + + +{\tt \#include $<$moeo\-IBEA.h$>$} + +Inheritance diagram for moeo\-IBEAAvg\-Sorting$<$ EOT, Fitness\-Eval $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=6cm]{classmoeoIBEAAvgSorting} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +{\bf moeo\-IBEAAvg\-Sorting} ({\bf moeo\-Binary\-Quality\-Indicator}$<$ Fitness\-Eval $>$ $\ast$\_\-I, const double \_\-kappa) +\begin{CompactList}\small\item\em constructor \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Member Functions} +\begin{CompactItemize} +\item +void {\bf set\-Bounds} (const {\bf eo\-Pop}$<$ EOT $>$ \&\_\-pop) +\begin{CompactList}\small\item\em computation and setting of the bounds for each objective \item\end{CompactList}\item +void {\bf fitnesses} (const {\bf eo\-Pop}$<$ EOT $>$ \&\_\-pop) +\begin{CompactList}\small\item\em computation and setting of the fitness for each individual of the population \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Attributes} +\begin{CompactItemize} +\item +double {\bf kappa}\label{classmoeoIBEAAvgSorting_89375a49f85c93492b59dc8450b8a983} + +\begin{CompactList}\small\item\em scaling factor kappa \item\end{CompactList}\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class EOT, class Fitness\-Eval = typename EOT::Fitness::Fitness\-Eval$>$ class moeo\-IBEAAvg\-Sorting$<$ EOT, Fitness\-Eval $>$} + +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 \char`\"{}Searching for Robust Pareto-Optimal Solutions in Multi-Objective Optimization\char`\"{}, 2005 Of course, the fitness of an individual needs to be an eo\-Stochastic\-Pareto\-Fitness object. + + + +Definition at line 361 of file moeo\-IBEA.h. + +\subsection{Constructor \& Destructor Documentation} +\index{moeoIBEAAvgSorting@{moeo\-IBEAAvg\-Sorting}!moeoIBEAAvgSorting@{moeoIBEAAvgSorting}} +\index{moeoIBEAAvgSorting@{moeoIBEAAvgSorting}!moeoIBEAAvgSorting@{moeo\-IBEAAvg\-Sorting}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT, class Fitness\-Eval = typename EOT::Fitness::Fitness\-Eval$>$ {\bf moeo\-IBEAAvg\-Sorting}$<$ EOT, Fitness\-Eval $>$::{\bf moeo\-IBEAAvg\-Sorting} ({\bf moeo\-Binary\-Quality\-Indicator}$<$ Fitness\-Eval $>$ $\ast$ {\em \_\-I}, const double {\em \_\-kappa})\hspace{0.3cm}{\tt [inline]}}\label{classmoeoIBEAAvgSorting_02056e5794eb5c1d0e3d9d1cbb347c41} + + +constructor + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em eo\-Binary\-Quality\-Indicator$<$EOT$>$$\ast$}]\_\-I the binary quality indicator to use in the selection process \item[{\em double}]\_\-kappa scaling factor kappa \end{description} +\end{Desc} + + +Definition at line 373 of file moeo\-IBEA.h. + +References moeo\-IBEAAvg\-Sorting$<$ EOT, Fitness\-Eval $>$::kappa. + +\subsection{Member Function Documentation} +\index{moeoIBEAAvgSorting@{moeo\-IBEAAvg\-Sorting}!setBounds@{setBounds}} +\index{setBounds@{setBounds}!moeoIBEAAvgSorting@{moeo\-IBEAAvg\-Sorting}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT, class Fitness\-Eval = typename EOT::Fitness::Fitness\-Eval$>$ void {\bf moeo\-IBEAAvg\-Sorting}$<$ EOT, Fitness\-Eval $>$::set\-Bounds (const {\bf eo\-Pop}$<$ EOT $>$ \& {\em \_\-pop})\hspace{0.3cm}{\tt [inline, private, virtual]}}\label{classmoeoIBEAAvgSorting_b62fcfda9ac75352479fa06952754f90} + + +computation and setting of the bounds for each objective + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em const}]eo\-Pop$<$EOT$>$\& \_\-pop the population \end{description} +\end{Desc} + + +Implements {\bf moeo\-IBEA$<$ EOT, Fitness\-Eval $>$} \doxyref{}{p.}{classmoeoIBEA}. + +Definition at line 398 of file moeo\-IBEA.h. + +References moeo\-IBEA$<$ EOT, Fitness\-Eval $>$::I, and moeo\-Binary\-Quality\-Indicator$<$ EOFitness $>$::set\-Bounds().\index{moeoIBEAAvgSorting@{moeo\-IBEAAvg\-Sorting}!fitnesses@{fitnesses}} +\index{fitnesses@{fitnesses}!moeoIBEAAvgSorting@{moeo\-IBEAAvg\-Sorting}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT, class Fitness\-Eval = typename EOT::Fitness::Fitness\-Eval$>$ void {\bf moeo\-IBEAAvg\-Sorting}$<$ EOT, Fitness\-Eval $>$::fitnesses (const {\bf eo\-Pop}$<$ EOT $>$ \& {\em \_\-pop})\hspace{0.3cm}{\tt [inline, private, virtual]}}\label{classmoeoIBEAAvgSorting_e88f9280e5c81cd0b54d738b7863dc1d} + + +computation and setting of the fitness for each individual of the population + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em const}]eo\-Pop$<$EOT$>$\& \_\-pop the population \end{description} +\end{Desc} + + +Implements {\bf moeo\-IBEA$<$ EOT, Fitness\-Eval $>$} \doxyref{}{p.}{classmoeoIBEA}. + +Definition at line 431 of file moeo\-IBEA.h. + +References moeo\-IBEAAvg\-Sorting$<$ EOT, Fitness\-Eval $>$::kappa, and eo\-Value\-Param$<$ std::vector$<$ Worth\-T $>$ $>$::value(). + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moeo\-IBEA.h\end{CompactItemize} diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoIBEASorting.eps b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoIBEASorting.eps new file mode 100644 index 000000000..ab49cfe74 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoIBEASorting.eps @@ -0,0 +1,233 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 240.964 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 2.075 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 6 def +/cols 2 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(moeoIBEASorting< EOT, Fitness >) cw +(moeoIBEA< EOT, Fitness >) cw +(eoPerf2WorthCached< EOT, double >) cw +(eoPerf2Worth< EOT, WorthT >) cw +(eoUF< const eoPop< EOT > &, void >) cw +(eoValueParam< std::vector< WorthT > >) cw +(eoFunctorBase) cw +(eoParam) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (moeoIBEASorting< EOT, Fitness >) 0.5 0 box + (moeoIBEA< EOT, Fitness >) 0.5 1 box + (eoPerf2WorthCached< EOT, double >) 0.5 2 box + (eoPerf2Worth< EOT, WorthT >) 0.5 3 box + (eoUF< const eoPop< EOT > &, void >) 0 4 box + (eoValueParam< std::vector< WorthT > >) 1 4 box + (eoFunctorBase) 0 5 box + (eoParam) 1 5 box + +% ----- relations ----- + +solid +0 0.5 0 out +solid +1 0.5 1 in +solid +0 0.5 1 out +solid +1 0.5 2 in +solid +0 0.5 2 out +solid +1 0.5 3 in +solid +0 0.5 3 out +solid +0 1 4 conn +solid +1 0 4 in +solid +0 0 4 out +solid +1 1 4 in +solid +0 1 4 out +solid +1 0 5 in +solid +1 1 5 in diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoIBEASorting.tex b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoIBEASorting.tex new file mode 100644 index 000000000..0eded5df5 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoIBEASorting.tex @@ -0,0 +1,103 @@ +\section{moeo\-IBEASorting$<$ EOT, Fitness $>$ Class Template Reference} +\label{classmoeoIBEASorting}\index{moeoIBEASorting@{moeoIBEASorting}} +Functor The sorting phase of IBEA (Indicator-Based Evolutionary Algorithm) without uncertainty Adapted from the Zitzler and K\~{A}¼nzli paper \char`\"{}Indicator-Based Selection in Multiobjective Search\char`\"{} (2004) Of course, Fitness needs to be an {\bf eo\-Pareto\-Fitness} object. + + +{\tt \#include $<$moeo\-IBEA.h$>$} + +Inheritance diagram for moeo\-IBEASorting$<$ EOT, Fitness $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=6cm]{classmoeoIBEASorting} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +{\bf moeo\-IBEASorting} ({\bf moeo\-Binary\-Quality\-Indicator}$<$ Fitness $>$ $\ast$\_\-I, const double \_\-kappa) +\begin{CompactList}\small\item\em constructor \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Member Functions} +\begin{CompactItemize} +\item +void {\bf set\-Bounds} (const {\bf eo\-Pop}$<$ EOT $>$ \&\_\-pop) +\begin{CompactList}\small\item\em computation and setting of the bounds for each objective \item\end{CompactList}\item +void {\bf fitnesses} (const {\bf eo\-Pop}$<$ EOT $>$ \&\_\-pop) +\begin{CompactList}\small\item\em computation and setting of the fitness for each individual of the population \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Attributes} +\begin{CompactItemize} +\item +double {\bf kappa}\label{classmoeoIBEASorting_4789daab5ea5e215075d7430f343a321} + +\begin{CompactList}\small\item\em scaling factor kappa \item\end{CompactList}\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class EOT, class Fitness = typename EOT::Fitness$>$ class moeo\-IBEASorting$<$ EOT, Fitness $>$} + +Functor The sorting phase of IBEA (Indicator-Based Evolutionary Algorithm) without uncertainty Adapted from the Zitzler and K\~{A}¼nzli paper \char`\"{}Indicator-Based Selection in Multiobjective Search\char`\"{} (2004) Of course, Fitness needs to be an {\bf eo\-Pareto\-Fitness} object. + + + +Definition at line 84 of file moeo\-IBEA.h. + +\subsection{Constructor \& Destructor Documentation} +\index{moeoIBEASorting@{moeo\-IBEASorting}!moeoIBEASorting@{moeoIBEASorting}} +\index{moeoIBEASorting@{moeoIBEASorting}!moeoIBEASorting@{moeo\-IBEASorting}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT, class Fitness = typename EOT::Fitness$>$ {\bf moeo\-IBEASorting}$<$ EOT, Fitness $>$::{\bf moeo\-IBEASorting} ({\bf moeo\-Binary\-Quality\-Indicator}$<$ Fitness $>$ $\ast$ {\em \_\-I}, const double {\em \_\-kappa})\hspace{0.3cm}{\tt [inline]}}\label{classmoeoIBEASorting_4d00a499f4d03b8cf66e9ce8f68cb174} + + +constructor + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em eo\-Binary\-Quality\-Indicator$<$EOT$>$$\ast$}]\_\-I the binary quality indicator to use in the selection process \item[{\em double}]\_\-kappa scaling factor kappa \end{description} +\end{Desc} + + +Definition at line 96 of file moeo\-IBEA.h. + +References moeo\-IBEASorting$<$ EOT, Fitness $>$::kappa. + +\subsection{Member Function Documentation} +\index{moeoIBEASorting@{moeo\-IBEASorting}!setBounds@{setBounds}} +\index{setBounds@{setBounds}!moeoIBEASorting@{moeo\-IBEASorting}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT, class Fitness = typename EOT::Fitness$>$ void {\bf moeo\-IBEASorting}$<$ EOT, Fitness $>$::set\-Bounds (const {\bf eo\-Pop}$<$ EOT $>$ \& {\em \_\-pop})\hspace{0.3cm}{\tt [inline, private, virtual]}}\label{classmoeoIBEASorting_f29f38584c69217f25e904118f6bfb2b} + + +computation and setting of the bounds for each objective + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em const}]eo\-Pop$<$EOT$>$\& \_\-pop the population \end{description} +\end{Desc} + + +Implements {\bf moeo\-IBEA$<$ EOT, Fitness $>$} \doxyref{}{p.}{classmoeoIBEA}. + +Definition at line 121 of file moeo\-IBEA.h. + +References moeo\-IBEA$<$ EOT, Fitness $>$::I, and moeo\-Binary\-Quality\-Indicator$<$ EOFitness $>$::set\-Bounds().\index{moeoIBEASorting@{moeo\-IBEASorting}!fitnesses@{fitnesses}} +\index{fitnesses@{fitnesses}!moeoIBEASorting@{moeo\-IBEASorting}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT, class Fitness = typename EOT::Fitness$>$ void {\bf moeo\-IBEASorting}$<$ EOT, Fitness $>$::fitnesses (const {\bf eo\-Pop}$<$ EOT $>$ \& {\em \_\-pop})\hspace{0.3cm}{\tt [inline, private, virtual]}}\label{classmoeoIBEASorting_63c3953d362b41e875e6e7759a308e07} + + +computation and setting of the fitness for each individual of the population + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em const}]eo\-Pop$<$EOT$>$\& \_\-pop the population \end{description} +\end{Desc} + + +Implements {\bf moeo\-IBEA$<$ EOT, Fitness $>$} \doxyref{}{p.}{classmoeoIBEA}. + +Definition at line 150 of file moeo\-IBEA.h. + +References moeo\-IBEASorting$<$ EOT, Fitness $>$::kappa, and eo\-Value\-Param$<$ std::vector$<$ Worth\-T $>$ $>$::value(). + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moeo\-IBEA.h\end{CompactItemize} diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoIBEAStochSorting.eps b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoIBEAStochSorting.eps new file mode 100644 index 000000000..8d72ffe1a --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoIBEAStochSorting.eps @@ -0,0 +1,233 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 219.78 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 2.275 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 6 def +/cols 2 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(moeoIBEAStochSorting< EOT, FitnessEval >) cw +(moeoIBEA< EOT, FitnessEval >) cw +(eoPerf2WorthCached< EOT, double >) cw +(eoPerf2Worth< EOT, WorthT >) cw +(eoUF< const eoPop< EOT > &, void >) cw +(eoValueParam< std::vector< WorthT > >) cw +(eoFunctorBase) cw +(eoParam) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (moeoIBEAStochSorting< EOT, FitnessEval >) 0.5 0 box + (moeoIBEA< EOT, FitnessEval >) 0.5 1 box + (eoPerf2WorthCached< EOT, double >) 0.5 2 box + (eoPerf2Worth< EOT, WorthT >) 0.5 3 box + (eoUF< const eoPop< EOT > &, void >) 0 4 box + (eoValueParam< std::vector< WorthT > >) 1 4 box + (eoFunctorBase) 0 5 box + (eoParam) 1 5 box + +% ----- relations ----- + +solid +0 0.5 0 out +solid +1 0.5 1 in +solid +0 0.5 1 out +solid +1 0.5 2 in +solid +0 0.5 2 out +solid +1 0.5 3 in +solid +0 0.5 3 out +solid +0 1 4 conn +solid +1 0 4 in +solid +0 0 4 out +solid +1 1 4 in +solid +0 1 4 out +solid +1 0 5 in +solid +1 1 5 in diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoIBEAStochSorting.tex b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoIBEAStochSorting.tex new file mode 100644 index 000000000..d6d6c676b --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoIBEAStochSorting.tex @@ -0,0 +1,101 @@ +\section{moeo\-IBEAStoch\-Sorting$<$ EOT, Fitness\-Eval $>$ Class Template Reference} +\label{classmoeoIBEAStochSorting}\index{moeoIBEAStochSorting@{moeoIBEAStochSorting}} +Functor The sorting phase of IBEA (Indicator-Based Evolutionary Algorithm) under uncertainty Adapted from the Basseur and Zitzler paper \char`\"{}Handling Uncertainty in Indicator-Based Multiobjective Optimization\char`\"{} (2006) Of course, the fitness of an individual needs to be an eo\-Stochastic\-Pareto\-Fitness object. + + +{\tt \#include $<$moeo\-IBEA.h$>$} + +Inheritance diagram for moeo\-IBEAStoch\-Sorting$<$ EOT, Fitness\-Eval $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=6cm]{classmoeoIBEAStochSorting} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +{\bf moeo\-IBEAStoch\-Sorting} ({\bf moeo\-Binary\-Quality\-Indicator}$<$ Fitness\-Eval $>$ $\ast$\_\-I) +\begin{CompactList}\small\item\em constructor \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Member Functions} +\begin{CompactItemize} +\item +void {\bf set\-Bounds} (const {\bf eo\-Pop}$<$ EOT $>$ \&\_\-pop) +\begin{CompactList}\small\item\em computation and setting of the bounds for each objective \item\end{CompactList}\item +void {\bf fitnesses} (const {\bf eo\-Pop}$<$ EOT $>$ \&\_\-pop) +\begin{CompactList}\small\item\em computation and setting of the fitness for each individual of the population \item\end{CompactList}\end{CompactItemize} +\subsection*{Static Private Member Functions} +\begin{CompactItemize} +\item +static double {\bf zero} ()\label{classmoeoIBEAStochSorting_3426ae274256fe8cedb9e0c009f81e15} + +\begin{CompactList}\small\item\em approximated zero value \item\end{CompactList}\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class EOT, class Fitness\-Eval = typename EOT::Fitness::Fitness\-Eval$>$ class moeo\-IBEAStoch\-Sorting$<$ EOT, Fitness\-Eval $>$} + +Functor The sorting phase of IBEA (Indicator-Based Evolutionary Algorithm) under uncertainty Adapted from the Basseur and Zitzler paper \char`\"{}Handling Uncertainty in Indicator-Based Multiobjective Optimization\char`\"{} (2006) Of course, the fitness of an individual needs to be an eo\-Stochastic\-Pareto\-Fitness object. + + + +Definition at line 203 of file moeo\-IBEA.h. + +\subsection{Constructor \& Destructor Documentation} +\index{moeoIBEAStochSorting@{moeo\-IBEAStoch\-Sorting}!moeoIBEAStochSorting@{moeoIBEAStochSorting}} +\index{moeoIBEAStochSorting@{moeoIBEAStochSorting}!moeoIBEAStochSorting@{moeo\-IBEAStoch\-Sorting}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT, class Fitness\-Eval = typename EOT::Fitness::Fitness\-Eval$>$ {\bf moeo\-IBEAStoch\-Sorting}$<$ EOT, Fitness\-Eval $>$::{\bf moeo\-IBEAStoch\-Sorting} ({\bf moeo\-Binary\-Quality\-Indicator}$<$ Fitness\-Eval $>$ $\ast$ {\em \_\-I})\hspace{0.3cm}{\tt [inline]}}\label{classmoeoIBEAStochSorting_675d3ff90643f398b8aacbea5ea7eb31} + + +constructor + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em eo\-Binary\-Quality\-Indicator$<$EOT$>$$\ast$}]\_\-I the binary quality indicator to use in the selection process \end{description} +\end{Desc} + + +Definition at line 214 of file moeo\-IBEA.h. + +\subsection{Member Function Documentation} +\index{moeoIBEAStochSorting@{moeo\-IBEAStoch\-Sorting}!setBounds@{setBounds}} +\index{setBounds@{setBounds}!moeoIBEAStochSorting@{moeo\-IBEAStoch\-Sorting}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT, class Fitness\-Eval = typename EOT::Fitness::Fitness\-Eval$>$ void {\bf moeo\-IBEAStoch\-Sorting}$<$ EOT, Fitness\-Eval $>$::set\-Bounds (const {\bf eo\-Pop}$<$ EOT $>$ \& {\em \_\-pop})\hspace{0.3cm}{\tt [inline, private, virtual]}}\label{classmoeoIBEAStochSorting_c23afa90c4eb5b21bb8f118c968ed0a2} + + +computation and setting of the bounds for each objective + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em const}]eo\-Pop$<$EOT$>$\& \_\-pop the population \end{description} +\end{Desc} + + +Implements {\bf moeo\-IBEA$<$ EOT, Fitness\-Eval $>$} \doxyref{}{p.}{classmoeoIBEA}. + +Definition at line 243 of file moeo\-IBEA.h. + +References moeo\-IBEA$<$ EOT, Fitness\-Eval $>$::I, and moeo\-Binary\-Quality\-Indicator$<$ EOFitness $>$::set\-Bounds().\index{moeoIBEAStochSorting@{moeo\-IBEAStoch\-Sorting}!fitnesses@{fitnesses}} +\index{fitnesses@{fitnesses}!moeoIBEAStochSorting@{moeo\-IBEAStoch\-Sorting}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT, class Fitness\-Eval = typename EOT::Fitness::Fitness\-Eval$>$ void {\bf moeo\-IBEAStoch\-Sorting}$<$ EOT, Fitness\-Eval $>$::fitnesses (const {\bf eo\-Pop}$<$ EOT $>$ \& {\em \_\-pop})\hspace{0.3cm}{\tt [inline, private, virtual]}}\label{classmoeoIBEAStochSorting_b75848ab2c0d03058b48147f11105dcb} + + +computation and setting of the fitness for each individual of the population + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em const}]eo\-Pop$<$EOT$>$\& \_\-pop the population \end{description} +\end{Desc} + + +Implements {\bf moeo\-IBEA$<$ EOT, Fitness\-Eval $>$} \doxyref{}{p.}{classmoeoIBEA}. + +Definition at line 272 of file moeo\-IBEA.h. + +References eo\-Value\-Param$<$ std::vector$<$ Worth\-T $>$ $>$::value(), and moeo\-IBEAStoch\-Sorting$<$ EOT, Fitness\-Eval $>$::zero(). + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moeo\-IBEA.h\end{CompactItemize} diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoMOLS.eps b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoMOLS.eps new file mode 100644 index 000000000..2d25dc070 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoMOLS.eps @@ -0,0 +1,209 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 243.902 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 2.05 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 4 def +/cols 1 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(moeoMOLS< EOT >) cw +(eoBF< const EOT &, moeoArchive< EOT > &, void >) cw +(eoFunctorBase) cw +(moeoCombinedMOLS< EOT >) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (moeoMOLS< EOT >) 0 1 box + (eoBF< const EOT &, moeoArchive< EOT > &, void >) 0 2 box + (eoFunctorBase) 0 3 box + (moeoCombinedMOLS< EOT >) 0 0 box + +% ----- relations ----- + +solid +0 0 1 out +solid +1 0 2 in +solid +0 0 2 out +solid +1 0 3 in +solid +1 0 0.25 out +solid +0 0 0.75 in diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoMOLS.tex b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoMOLS.tex new file mode 100644 index 000000000..5a0b3885c --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoMOLS.tex @@ -0,0 +1,29 @@ +\section{moeo\-MOLS$<$ EOT $>$ Class Template Reference} +\label{classmoeoMOLS}\index{moeoMOLS@{moeoMOLS}} +Abstract class for local searches applied to multi-objective optimization. + + +{\tt \#include $<$moeo\-MOLS.h$>$} + +Inheritance diagram for moeo\-MOLS$<$ EOT $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=4cm]{classmoeoMOLS} +\end{center} +\end{figure} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class EOT$>$ class moeo\-MOLS$<$ 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 moeo\-MOLS.h. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moeo\-MOLS.h\end{CompactItemize} diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoMetric.eps b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoMetric.eps new file mode 100644 index 000000000..23737595a --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoMetric.eps @@ -0,0 +1,236 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 149.031 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 3.355 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 10 def +/cols 2 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(moeoMetric) cw +(eoFunctorBase) cw +(moeoBM< A1, A2, R >) cw +(moeoBM< const const EOFitness &, EOFitness &, R >) cw +(moeoBM< const const std::vector< EOFitness > &, EOFitness &, R >) cw +(moeoBM< const const std::vector< EOFitness > &, std::vector< EOFitness > &, R >) cw +(moeoBM< const const std::vector< typename EOT::Fitness > &, std::vector< typename EOT::Fitness > &, double >) cw +(moeoUM< A, R >) cw +(moeoUM< const EOFitness &, R >) cw +(moeoUM< const std::vector< EOFitness > &, R >) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (moeoMetric) 0 8 box + (eoFunctorBase) 0 9 box + (moeoBM< A1, A2, R >) 1 7 box +1 7 mark + (moeoBM< const const EOFitness &, EOFitness &, R >) 1 6 box + (moeoBM< const const std::vector< EOFitness > &, EOFitness &, R >) 1 5 box + (moeoBM< const const std::vector< EOFitness > &, std::vector< EOFitness > &, R >) 1 4 box + (moeoBM< const const std::vector< typename EOT::Fitness > &, std::vector< typename EOT::Fitness > &, double >) 1 3 box + (moeoUM< A, R >) 1 2 box + (moeoUM< const EOFitness &, R >) 1 1 box +1 1 mark + (moeoUM< const std::vector< EOFitness > &, R >) 1 0 box +1 0 mark + +% ----- relations ----- + +solid +0 0 8 out +solid +1 0 9 in +solid +1 0 7.25 out +solid +0 0 7.5 hedge +solid +0 0 6.5 hedge +solid +0 0 5.5 hedge +solid +0 0 4.5 hedge +solid +0 0 3.5 hedge +solid +0 0 2.5 hedge +solid +0 0 1.5 hedge +solid +0 0 0.5 hedge +solid +0 8 0.5 vedge diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoMetric.tex b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoMetric.tex new file mode 100644 index 000000000..f6c2d9573 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoMetric.tex @@ -0,0 +1,25 @@ +\section{moeo\-Metric Class Reference} +\label{classmoeoMetric}\index{moeoMetric@{moeoMetric}} +Base class for performance metrics (also called quality indicators). + + +{\tt \#include $<$moeo\-Metric.h$>$} + +Inheritance diagram for moeo\-Metric::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=4.17288cm]{classmoeoMetric} +\end{center} +\end{figure} + + +\subsection{Detailed Description} +Base class for performance metrics (also called quality indicators). + + + +Definition at line 21 of file moeo\-Metric.h. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moeo\-Metric.h\end{CompactItemize} diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoNDSorting__II.eps b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoNDSorting__II.eps new file mode 100644 index 000000000..8ecf5da0b --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoNDSorting__II.eps @@ -0,0 +1,233 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 240.964 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 2.075 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 6 def +/cols 2 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(moeoNDSorting_II< EOT >) cw +(eoNDSorting< EOT >) cw +(eoPerf2WorthCached< EOT, double >) cw +(eoPerf2Worth< EOT, WorthT >) cw +(eoUF< const eoPop< EOT > &, void >) cw +(eoValueParam< std::vector< WorthT > >) cw +(eoFunctorBase) cw +(eoParam) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (moeoNDSorting_II< EOT >) 0.5 0 box + (eoNDSorting< EOT >) 0.5 1 box + (eoPerf2WorthCached< EOT, double >) 0.5 2 box + (eoPerf2Worth< EOT, WorthT >) 0.5 3 box + (eoUF< const eoPop< EOT > &, void >) 0 4 box + (eoValueParam< std::vector< WorthT > >) 1 4 box + (eoFunctorBase) 0 5 box + (eoParam) 1 5 box + +% ----- relations ----- + +solid +0 0.5 0 out +solid +1 0.5 1 in +solid +0 0.5 1 out +solid +1 0.5 2 in +solid +0 0.5 2 out +solid +1 0.5 3 in +solid +0 0.5 3 out +solid +0 1 4 conn +solid +1 0 4 in +solid +0 0 4 out +solid +1 1 4 in +solid +0 1 4 out +solid +1 0 5 in +solid +1 1 5 in diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoNDSorting__II.tex b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoNDSorting__II.tex new file mode 100644 index 000000000..f74f31db1 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoNDSorting__II.tex @@ -0,0 +1,51 @@ +\section{moeo\-NDSorting\_\-II$<$ EOT $>$ Class Template Reference} +\label{classmoeoNDSorting__II}\index{moeoNDSorting_II@{moeoNDSorting\_\-II}} +Fast Elitist Non-Dominant Sorting Genetic Algorithm assignment strategie Note : This is a corrected version of the original {\bf eo\-NDSorting\_\-II} class. + + +{\tt \#include $<$moeo\-NDSorting.h$>$} + +Inheritance diagram for moeo\-NDSorting\_\-II$<$ EOT $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=6cm]{classmoeoNDSorting__II} +\end{center} +\end{figure} +\subsection*{Public Types} +\begin{CompactItemize} +\item +typedef std::pair$<$ double, unsigned $>$ {\bf double\_\-index\_\-pair}\label{classmoeoNDSorting__II_0987beaa2f600f5bce61c77215679e43} + +\begin{CompactList}\small\item\em index pair \item\end{CompactList}\end{CompactItemize} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +{\bf moeo\-NDSorting\_\-II} (bool nasty\_\-flag\_\-=false)\label{classmoeoNDSorting__II_820e9987853858ddc59e36c7f267955e} + +\begin{CompactList}\small\item\em constructor \item\end{CompactList}\item +std::vector$<$ double $>$ {\bf niche\_\-penalty} (const std::vector$<$ unsigned $>$ \&\_\-cf, const {\bf eo\-Pop}$<$ EOT $>$ \&\_\-pop)\label{classmoeoNDSorting__II_265c74b9f64731db86e2c363593f67f9} + +\begin{CompactList}\small\item\em \_\-cf points into the elements that consist of the current front \item\end{CompactList}\end{CompactItemize} +\subsection*{Classes} +\begin{CompactItemize} +\item +class {\bf compare\_\-nodes} +\begin{CompactList}\small\item\em A class to compare the nodes. \item\end{CompactList}\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class EOT$>$ class moeo\-NDSorting\_\-II$<$ EOT $>$} + +Fast Elitist Non-Dominant Sorting Genetic Algorithm assignment strategie Note : This is a corrected version of the original {\bf eo\-NDSorting\_\-II} class. + +\begin{Desc} +\item[See also:]{\bf eo\-NDSorting\_\-II} \end{Desc} + + + + +Definition at line 26 of file moeo\-NDSorting.h. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moeo\-NDSorting.h\end{CompactItemize} diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoNDSorting__II_1_1compare__nodes.tex b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoNDSorting__II_1_1compare__nodes.tex new file mode 100644 index 000000000..cec86004e --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoNDSorting__II_1_1compare__nodes.tex @@ -0,0 +1,27 @@ +\section{moeo\-NDSorting\_\-II$<$ EOT $>$::compare\_\-nodes Class Reference} +\label{classmoeoNDSorting__II_1_1compare__nodes}\index{moeoNDSorting_II::compare_nodes@{moeoNDSorting\_\-II::compare\_\-nodes}} +A class to compare the nodes. + + +{\tt \#include $<$moeo\-NDSorting.h$>$} + +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +bool {\bf operator()} (const {\bf double\_\-index\_\-pair} \&a, const {\bf double\_\-index\_\-pair} \&b) const\label{classmoeoNDSorting__II_1_1compare__nodes_471ebe9e88bfc778c4c281399eb0c196} + +\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class EOT$>$ class moeo\-NDSorting\_\-II$<$ EOT $>$::compare\_\-nodes} + +A class to compare the nodes. + + + +Definition at line 46 of file moeo\-NDSorting.h. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moeo\-NDSorting.h\end{CompactItemize} diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoNSGA__II.eps b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoNSGA__II.eps new file mode 100644 index 000000000..16c1780e3 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoNSGA__II.eps @@ -0,0 +1,209 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 388.35 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 1.2875 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 4 def +/cols 1 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(moeoNSGA_II< EOT >) cw +(eoAlgo< EOT >) cw +(eoUF< eoPop< EOT > &, void >) cw +(eoFunctorBase) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (moeoNSGA_II< EOT >) 0 0 box + (eoAlgo< EOT >) 0 1 box + (eoUF< eoPop< EOT > &, void >) 0 2 box + (eoFunctorBase) 0 3 box + +% ----- relations ----- + +solid +0 0 0 out +solid +1 0 1 in +solid +0 0 1 out +solid +1 0 2 in +solid +0 0 2 out +solid +1 0 3 in diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoNSGA__II.tex b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoNSGA__II.tex new file mode 100644 index 000000000..70fcda63a --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoNSGA__II.tex @@ -0,0 +1,83 @@ +\section{moeo\-NSGA\_\-II$<$ EOT $>$ Class Template Reference} +\label{classmoeoNSGA__II}\index{moeoNSGA_II@{moeoNSGA\_\-II}} +Inheritance diagram for moeo\-NSGA\_\-II$<$ EOT $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=4cm]{classmoeoNSGA__II} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +{\bf moeo\-NSGA\_\-II} (unsigned \_\-max\_\-gen, {\bf eo\-Eval\-Func}$<$ EOT $>$ \&\_\-eval, {\bf eo\-Gen\-Op}$<$ EOT $>$ \&\_\-op) +\begin{CompactList}\small\item\em This constructor builds the algorithm as descibed in the paper. \item\end{CompactList}\item +{\bf moeo\-NSGA\_\-II} (unsigned \_\-max\_\-gen, {\bf eo\-Eval\-Func}$<$ EOT $>$ \&\_\-eval, {\bf eo\-Quad\-Op}$<$ EOT $>$ \&crossover, double p\-Cross, {\bf eo\-Mon\-Op}$<$ EOT $>$ \&mutation, double p\-Mut)\label{classmoeoNSGA__II_37109beabe74b0fecb2f3f899ef573d7} + +\begin{CompactList}\small\item\em Ctor taking \_\-max\_\-gen, crossover and mutation. \item\end{CompactList}\item +{\bf moeo\-NSGA\_\-II} ({\bf eo\-Continue}$<$ EOT $>$ \&\_\-continuator, {\bf eo\-Eval\-Func}$<$ EOT $>$ \&\_\-eval, {\bf eo\-Gen\-Op}$<$ EOT $>$ \&\_\-op)\label{classmoeoNSGA__II_29ae86b4254ba6e5263c159df812fb7e} + +\begin{CompactList}\small\item\em Ctor taking a continuator instead of \_\-gen\_\-max. \item\end{CompactList}\item +virtual void {\bf operator()} ({\bf eo\-Pop}$<$ EOT $>$ \&\_\-pop)\label{classmoeoNSGA__II_a9a94b2ee67038b81cdba0fd005350d0} + +\begin{CompactList}\small\item\em Apply a few generation of evolution to the population. \item\end{CompactList}\end{CompactItemize} +\subsection*{Protected Attributes} +\begin{CompactItemize} +\item +{\bf eo\-Continue}$<$ EOT $>$ \& {\bf continuator}\label{classmoeoNSGA__II_22ba11ba501fb7cf3423d9b777294998} + +\item +{\bf eo\-Eval\-Func}$<$ EOT $>$ \& {\bf eval}\label{classmoeoNSGA__II_6b90df8b9890035788a4d4a3f0c26742} + +\item +{\bf eo\-Pop\-Loop\-Eval}$<$ EOT $>$ {\bf loop\-Eval}\label{classmoeoNSGA__II_72fd9c6e70e9ee19db82a6894cafc60b} + +\item +{\bf eo\-Pop\-Eval\-Func}$<$ EOT $>$ \& {\bf pop\-Eval}\label{classmoeoNSGA__II_c1975957e19a164fde96ed7b5ce90ba4} + +\item +{\bf moeo\-NDSorting\_\-II}$<$ EOT $>$ {\bf sorting}\label{classmoeoNSGA__II_1aa7de4992f6c0f1c3a093aca735874c} + +\begin{CompactList}\small\item\em NSGAII sorting. \item\end{CompactList}\item +{\bf eo\-Det\-Tournament\-Worth\-Select}$<$ EOT $>$ {\bf select\-One}\label{classmoeoNSGA__II_add129e06168846b7e405ddd25d70c4d} + +\begin{CompactList}\small\item\em Binary tournament selection. \item\end{CompactList}\item +{\bf moeo\-Elitist\-Replacement}$<$ EOT $>$ {\bf replace}\label{classmoeoNSGA__II_c75535b7a47c26d8a66c1f227d33a3af} + +\begin{CompactList}\small\item\em Elitist replacement. \item\end{CompactList}\item +{\bf eo\-General\-Breeder}$<$ EOT $>$ {\bf gen\-Breed}\label{classmoeoNSGA__II_febee845341b96dba1cdfc18640d4960} + +\item +{\bf eo\-Breed}$<$ EOT $>$ \& {\bf breed}\label{classmoeoNSGA__II_f0dc0665ea743729e6284d812192acfc} + +\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class EOT$>$ class moeo\-NSGA\_\-II$<$ EOT $>$} + + + + + +Definition at line 31 of file moeo\-NSGA\_\-II.h. + +\subsection{Constructor \& Destructor Documentation} +\index{moeoNSGA_II@{moeo\-NSGA\_\-II}!moeoNSGA_II@{moeoNSGA\_\-II}} +\index{moeoNSGA_II@{moeoNSGA\_\-II}!moeoNSGA_II@{moeo\-NSGA\_\-II}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT$>$ {\bf moeo\-NSGA\_\-II}$<$ EOT $>$::{\bf moeo\-NSGA\_\-II} (unsigned {\em \_\-max\_\-gen}, {\bf eo\-Eval\-Func}$<$ EOT $>$ \& {\em \_\-eval}, {\bf eo\-Gen\-Op}$<$ EOT $>$ \& {\em \_\-op})\hspace{0.3cm}{\tt [inline]}}\label{classmoeoNSGA__II_bdbf13431487a83afdfd4f527f99ebcf} + + +This constructor builds the algorithm as descibed in the paper. + +Deb, K., S. Agrawal, A. Pratap, and T. Meyarivan, A fast elitist non-dominated sorting genetic algorithm for multi-objective optimization: NSGA-II. In IEEE Transactions on Evolutionary Computation, Vol. 6, No 2, pp 182-197, April 2002. \begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-max\_\-gen}]number of generations before stopping \item[{\em \_\-eval}]evaluation function \item[{\em \_\-op}]variation operator \end{description} +\end{Desc} + + +Definition at line 46 of file moeo\-NSGA\_\-II.h. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moeo\-NSGA\_\-II.h\end{CompactItemize} diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoParetoEuclidDist.eps b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoParetoEuclidDist.eps new file mode 100644 index 000000000..d4372982b --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoParetoEuclidDist.eps @@ -0,0 +1,197 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 160 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 3.125 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 2 def +/cols 1 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(moeoParetoEuclidDist< EOT, DistType >) cw +(moeoParetoPhenDist< EOT, DistType >) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (moeoParetoEuclidDist< EOT, DistType >) 0 0 box + (moeoParetoPhenDist< EOT, DistType >) 0 1 box + +% ----- relations ----- + +solid +0 0 0 out +solid +1 0 1 in diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoParetoEuclidDist.tex b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoParetoEuclidDist.tex new file mode 100644 index 000000000..3bc887b32 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoParetoEuclidDist.tex @@ -0,0 +1,28 @@ +\section{moeo\-Pareto\-Euclid\-Dist$<$ EOT, Dist\-Type $>$ Class Template Reference} +\label{classmoeoParetoEuclidDist}\index{moeoParetoEuclidDist@{moeoParetoEuclidDist}} +Inheritance diagram for moeo\-Pareto\-Euclid\-Dist$<$ EOT, Dist\-Type $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=2cm]{classmoeoParetoEuclidDist} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +Dist\-Type {\bf operator()} (const EOT \&eopf1, const EOT \&eopf2)\label{classmoeoParetoEuclidDist_5369b5167c0305ca99836ed2122d8c8b} + +\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class EOT, class Dist\-Type = double$>$ class moeo\-Pareto\-Euclid\-Dist$<$ EOT, Dist\-Type $>$} + + + + + +Definition at line 27 of file moeo\-Pareto\-Phen\-Dist.h. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moeo\-Pareto\-Phen\-Dist.h\end{CompactItemize} diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoParetoPhenDist.eps b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoParetoPhenDist.eps new file mode 100644 index 000000000..16044ebdf --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoParetoPhenDist.eps @@ -0,0 +1,197 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 160 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 3.125 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 2 def +/cols 1 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(moeoParetoPhenDist< EOT, DistType >) cw +(moeoParetoEuclidDist< EOT, DistType >) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (moeoParetoPhenDist< EOT, DistType >) 0 1 box + (moeoParetoEuclidDist< EOT, DistType >) 0 0 box + +% ----- relations ----- + +solid +1 0 0.25 out +solid +0 0 0.75 in diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoParetoPhenDist.tex b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoParetoPhenDist.tex new file mode 100644 index 000000000..f20b2e543 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoParetoPhenDist.tex @@ -0,0 +1,22 @@ +\section{moeo\-Pareto\-Phen\-Dist$<$ EOT, Dist\-Type $>$ Class Template Reference} +\label{classmoeoParetoPhenDist}\index{moeoParetoPhenDist@{moeoParetoPhenDist}} +Inheritance diagram for moeo\-Pareto\-Phen\-Dist$<$ EOT, Dist\-Type $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=2cm]{classmoeoParetoPhenDist} +\end{center} +\end{figure} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class EOT, class Dist\-Type$>$ class moeo\-Pareto\-Phen\-Dist$<$ EOT, Dist\-Type $>$} + + + + + +Definition at line 15 of file moeo\-Pareto\-Phen\-Dist.h. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moeo\-Pareto\-Phen\-Dist.h\end{CompactItemize} diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoParetoSharing.eps b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoParetoSharing.eps new file mode 100644 index 000000000..aa65f1c78 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoParetoSharing.eps @@ -0,0 +1,221 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 161.943 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 3.0875 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 4 def +/cols 2 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(moeoParetoSharing< EOT, worthT >) cw +(eoPerf2Worth< EOT, worthT >) cw +(eoUF< const eoPop< EOT > &, void >) cw +(eoValueParam< std::vector< worthT > >) cw +(eoFunctorBase) cw +(eoParam) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (moeoParetoSharing< EOT, worthT >) 0.5 0 box + (eoPerf2Worth< EOT, worthT >) 0.5 1 box + (eoUF< const eoPop< EOT > &, void >) 0 2 box + (eoValueParam< std::vector< worthT > >) 1 2 box + (eoFunctorBase) 0 3 box + (eoParam) 1 3 box + +% ----- relations ----- + +solid +0 0.5 0 out +solid +1 0.5 1 in +solid +0 0.5 1 out +solid +0 1 2 conn +solid +1 0 2 in +solid +0 0 2 out +solid +1 1 2 in +solid +0 1 2 out +solid +1 0 3 in +solid +1 1 3 in diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoParetoSharing.tex b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoParetoSharing.tex new file mode 100644 index 000000000..c0174bb79 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoParetoSharing.tex @@ -0,0 +1,60 @@ +\section{moeo\-Pareto\-Sharing$<$ EOT, worth\-T $>$ Class Template Reference} +\label{classmoeoParetoSharing}\index{moeoParetoSharing@{moeoParetoSharing}} +Inheritance diagram for moeo\-Pareto\-Sharing$<$ EOT, worth\-T $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=4cm]{classmoeoParetoSharing} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +{\bf moeo\-Pareto\-Sharing} (double \_\-niche\-Size)\label{classmoeoParetoSharing_e2bb92004d3ec5193c7c3efcd499c489} + +\item +{\bf moeo\-Pareto\-Sharing} (double \_\-niche\-Size, {\bf moeo\-Pareto\-Phen\-Dist}$<$ EOT, worth\-T $>$ \&\_\-dist)\label{classmoeoParetoSharing_757d64059315641796855d5adc48cce9} + +\item +void {\bf operator} ()(const {\bf eo\-Pop}$<$ EOT $>$ \&\_\-pop)\label{classmoeoParetoSharing_67f211b508194562903dae15989ab515} + +\end{CompactItemize} +\subsection*{Private Member Functions} +\begin{CompactItemize} +\item +double {\bf sh} (double {\bf dist}, double {\bf Dmax})\label{classmoeoParetoSharing_002e355f0df0ad242cdf171207b592ac} + +\end{CompactItemize} +\subsection*{Private Attributes} +\begin{CompactItemize} +\item +double {\bf niche\-Size}\label{classmoeoParetoSharing_b5519750a3f30747cbabf67df9b4afd8} + +\item +{\bf moeo\-Pareto\-Phen\-Dist}$<$ EOT, worth\-T $>$ \& {\bf dist}\label{classmoeoParetoSharing_329d7d08f06988fcb0f03059c88ed209} + +\item +{\bf moeo\-Pareto\-Euclid\-Dist}$<$ EOT $>$ {\bf euc\_\-dist}\label{classmoeoParetoSharing_42bc90da2e7f3f7d3837484c771f638e} + +\item +double {\bf Dmax}\label{classmoeoParetoSharing_0219625f2dd8bfd9ae7cb3039084059f} + +\end{CompactItemize} +\subsection*{Classes} +\begin{CompactItemize} +\item +class {\bf d\-Matrix} +\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class EOT, class worth\-T = double$>$ class moeo\-Pareto\-Sharing$<$ EOT, worth\-T $>$} + + + + + +Definition at line 19 of file moeo\-Pareto\-Sharing.h. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moeo\-Pareto\-Sharing.h\end{CompactItemize} diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoParetoSharing_1_1dMatrix.tex b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoParetoSharing_1_1dMatrix.tex new file mode 100644 index 000000000..6ab35847c --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoParetoSharing_1_1dMatrix.tex @@ -0,0 +1,31 @@ +\section{moeo\-Pareto\-Sharing$<$ EOT, worth\-T $>$::d\-Matrix Class Reference} +\label{classmoeoParetoSharing_1_1dMatrix}\index{moeoParetoSharing::dMatrix@{moeoParetoSharing::dMatrix}} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +{\bf d\-Matrix} (unsigned \_\-s)\label{classmoeoParetoSharing_1_1dMatrix_97aa4b1596be7ddba2b52a43ebc4cb6a} + +\item +void {\bf print\-On} (std::ostream \&\_\-os)\label{classmoeoParetoSharing_1_1dMatrix_e63c5e6d70866a31eff53fab563922d7} + +\end{CompactItemize} +\subsection*{Private Attributes} +\begin{CompactItemize} +\item +unsigned {\bf r\-Size}\label{classmoeoParetoSharing_1_1dMatrix_792b8a45e222a0daecad1ed344fc9a4f} + +\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class EOT, class worth\-T = double$>$ class moeo\-Pareto\-Sharing$<$ EOT, worth\-T $>$::d\-Matrix} + + + + + +Definition at line 109 of file moeo\-Pareto\-Sharing.h. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moeo\-Pareto\-Sharing.h\end{CompactItemize} diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoReplacement.eps b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoReplacement.eps new file mode 100644 index 000000000..07df814b6 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoReplacement.eps @@ -0,0 +1,221 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 159.236 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 3.14 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 5 def +/cols 2 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(moeoReplacement< EOT, WorthT >) cw +(eoReplacement< EOT >) cw +(eoBF< eoPop< EOT > &, eoPop< EOT > &, void >) cw +(eoFunctorBase) cw +(moeoDisctinctElitistReplacement< EOT, WorthT >) cw +(moeoElitistReplacement< EOT, WorthT >) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (moeoReplacement< EOT, WorthT >) 0.5 1 box + (eoReplacement< EOT >) 0.5 2 box + (eoBF< eoPop< EOT > &, eoPop< EOT > &, void >) 0.5 3 box + (eoFunctorBase) 0.5 4 box + (moeoDisctinctElitistReplacement< EOT, WorthT >) 0 0 box + (moeoElitistReplacement< EOT, WorthT >) 1 0 box + +% ----- relations ----- + +solid +0 0.5 1 out +solid +1 0.5 2 in +solid +0 0.5 2 out +solid +1 0.5 3 in +solid +0 0.5 3 out +solid +1 0.5 4 in +solid +1 0.5 0.25 out +solid +0 1 1 conn +solid +0 0 0.75 in +solid +0 1 0.75 in diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoReplacement.tex b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoReplacement.tex new file mode 100644 index 000000000..f146d8ad4 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoReplacement.tex @@ -0,0 +1,27 @@ +\section{moeo\-Replacement$<$ EOT, Worth\-T $>$ Class Template Reference} +\label{classmoeoReplacement}\index{moeoReplacement@{moeoReplacement}} +Replacement strategy for multi-objective optimization. + + +{\tt \#include $<$moeo\-Replacement.h$>$} + +Inheritance diagram for moeo\-Replacement$<$ EOT, Worth\-T $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=4.4586cm]{classmoeoReplacement} +\end{center} +\end{figure} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class EOT, class Worth\-T$>$ class moeo\-Replacement$<$ EOT, Worth\-T $>$} + +Replacement strategy for multi-objective optimization. + + + +Definition at line 24 of file moeo\-Replacement.h. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moeo\-Replacement.h\end{CompactItemize} diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoSelectOneFromPopAndArch.eps b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoSelectOneFromPopAndArch.eps new file mode 100644 index 000000000..f9c38857e --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoSelectOneFromPopAndArch.eps @@ -0,0 +1,209 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 307.692 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 1.625 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 4 def +/cols 1 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(moeoSelectOneFromPopAndArch< EOT >) cw +(eoSelectOne< EOT >) cw +(eoUF< A1, R >) cw +(eoFunctorBase) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (moeoSelectOneFromPopAndArch< EOT >) 0 0 box + (eoSelectOne< EOT >) 0 1 box + (eoUF< A1, R >) 0 2 box + (eoFunctorBase) 0 3 box + +% ----- relations ----- + +solid +0 0 0 out +solid +1 0 1 in +solid +0 0 1 out +solid +1 0 2 in +solid +0 0 2 out +solid +1 0 3 in diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoSelectOneFromPopAndArch.tex b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoSelectOneFromPopAndArch.tex new file mode 100644 index 000000000..0f8858baa --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoSelectOneFromPopAndArch.tex @@ -0,0 +1,89 @@ +\section{moeo\-Select\-One\-From\-Pop\-And\-Arch$<$ EOT $>$ Class Template Reference} +\label{classmoeoSelectOneFromPopAndArch}\index{moeoSelectOneFromPopAndArch@{moeoSelectOneFromPopAndArch}} +Elitist selection process that consists in choosing individuals in the archive as well as in the current population. + + +{\tt \#include $<$moeo\-Select\-One\-From\-Pop\-And\-Arch.h$>$} + +Inheritance diagram for moeo\-Select\-One\-From\-Pop\-And\-Arch$<$ EOT $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=4cm]{classmoeoSelectOneFromPopAndArch} +\end{center} +\end{figure} +\subsection*{Public Member Functions} +\begin{CompactItemize} +\item +{\bf moeo\-Select\-One\-From\-Pop\-And\-Arch} ({\bf eo\-Select\-One}$<$ EOT $>$ \&\_\-pop\-Select\-One, {\bf eo\-Select\-One}$<$ EOT $>$ \_\-arch\-Select\-One, {\bf moeo\-Archive}$<$ EOT $>$ \&\_\-arch, double \_\-ratio\-From\-Pop=0.5) +\begin{CompactList}\small\item\em Ctor. \item\end{CompactList}\item +{\bf moeo\-Select\-One\-From\-Pop\-And\-Arch} ({\bf eo\-Select\-One}$<$ EOT $>$ \&\_\-pop\-Select\-One, {\bf moeo\-Archive}$<$ EOT $>$ \&\_\-arch, double \_\-ratio\-From\-Pop=0.5) +\begin{CompactList}\small\item\em Ctor - the archive's selection operator is a random selector. \item\end{CompactList}\item +virtual const EOT \& {\bf operator()} (const {\bf eo\-Pop}$<$ EOT $>$ \&pop)\label{classmoeoSelectOneFromPopAndArch_3c97abfde2dd9959ae4db4c32038017d} + +\begin{CompactList}\small\item\em The selection process. \item\end{CompactList}\item +virtual void {\bf setup} (const {\bf eo\-Pop}$<$ EOT $>$ \&\_\-pop)\label{classmoeoSelectOneFromPopAndArch_a2acc5ddcf045c0c63c22f8d04274858} + +\begin{CompactList}\small\item\em Setups some population stats. \item\end{CompactList}\end{CompactItemize} +\subsection*{Private Attributes} +\begin{CompactItemize} +\item +{\bf eo\-Select\-One}$<$ EOT $>$ \& {\bf pop\-Select\-One}\label{classmoeoSelectOneFromPopAndArch_4f6d51d06d92b0a3383f9f47e3b2b682} + +\begin{CompactList}\small\item\em The population's selection operator. \item\end{CompactList}\item +{\bf eo\-Select\-One}$<$ EOT $>$ \& {\bf arch\-Select\-One}\label{classmoeoSelectOneFromPopAndArch_5e062a1deca0307a91121271d3b976ba} + +\begin{CompactList}\small\item\em The archive's selection operator. \item\end{CompactList}\item +{\bf moeo\-Archive}$<$ EOT $>$ \& {\bf arch}\label{classmoeoSelectOneFromPopAndArch_3ca71296847a931355a1e88d0cc524cb} + +\begin{CompactList}\small\item\em the archive \item\end{CompactList}\item +double {\bf ratio\-From\-Pop}\label{classmoeoSelectOneFromPopAndArch_97b57e598752bccafaaf6a8a724d9a43} + +\begin{CompactList}\small\item\em the ratio of selected individuals from the population \item\end{CompactList}\item +{\bf eo\-Random\-Select}$<$ EOT $>$ {\bf random\-Select}\label{classmoeoSelectOneFromPopAndArch_77cbe0150e70219e5a7fd48296acc4c7} + +\begin{CompactList}\small\item\em the random selection operator \item\end{CompactList}\end{CompactItemize} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class EOT$>$ class moeo\-Select\-One\-From\-Pop\-And\-Arch$<$ 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 moeo\-Select\-One\-From\-Pop\-And\-Arch.h. + +\subsection{Constructor \& Destructor Documentation} +\index{moeoSelectOneFromPopAndArch@{moeo\-Select\-One\-From\-Pop\-And\-Arch}!moeoSelectOneFromPopAndArch@{moeoSelectOneFromPopAndArch}} +\index{moeoSelectOneFromPopAndArch@{moeoSelectOneFromPopAndArch}!moeoSelectOneFromPopAndArch@{moeo\-Select\-One\-From\-Pop\-And\-Arch}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT$>$ {\bf moeo\-Select\-One\-From\-Pop\-And\-Arch}$<$ EOT $>$::{\bf moeo\-Select\-One\-From\-Pop\-And\-Arch} ({\bf eo\-Select\-One}$<$ EOT $>$ \& {\em \_\-pop\-Select\-One}, {\bf eo\-Select\-One}$<$ EOT $>$ {\em \_\-arch\-Select\-One}, {\bf moeo\-Archive}$<$ EOT $>$ \& {\em \_\-arch}, double {\em \_\-ratio\-From\-Pop} = {\tt 0.5})\hspace{0.3cm}{\tt [inline]}}\label{classmoeoSelectOneFromPopAndArch_8d75155e2bb6994b080c696d6382c6c9} + + +Ctor. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-pop\-Select\-One}]the population's selection operator \item[{\em \_\-arch\-Select\-One}]the archive's selection operator \item[{\em \_\-arch}]the archive \item[{\em \_\-ratio\-From\-Pop}]the ratio of selected individuals from the population \end{description} +\end{Desc} + + +Definition at line 37 of file moeo\-Select\-One\-From\-Pop\-And\-Arch.h.\index{moeoSelectOneFromPopAndArch@{moeo\-Select\-One\-From\-Pop\-And\-Arch}!moeoSelectOneFromPopAndArch@{moeoSelectOneFromPopAndArch}} +\index{moeoSelectOneFromPopAndArch@{moeoSelectOneFromPopAndArch}!moeoSelectOneFromPopAndArch@{moeo\-Select\-One\-From\-Pop\-And\-Arch}} +\subsubsection{\setlength{\rightskip}{0pt plus 5cm}template$<$class EOT$>$ {\bf moeo\-Select\-One\-From\-Pop\-And\-Arch}$<$ EOT $>$::{\bf moeo\-Select\-One\-From\-Pop\-And\-Arch} ({\bf eo\-Select\-One}$<$ EOT $>$ \& {\em \_\-pop\-Select\-One}, {\bf moeo\-Archive}$<$ EOT $>$ \& {\em \_\-arch}, double {\em \_\-ratio\-From\-Pop} = {\tt 0.5})\hspace{0.3cm}{\tt [inline]}}\label{classmoeoSelectOneFromPopAndArch_1aeab159a74bf4cd171e2045e25be2b7} + + +Ctor - the archive's selection operator is a random selector. + +\begin{Desc} +\item[Parameters:] +\begin{description} +\item[{\em \_\-pop\-Select\-One}]the population's selection operator \item[{\em \_\-arch}]the archive \item[{\em \_\-ratio\-From\-Pop}]the ratio of selected individuals from the population \end{description} +\end{Desc} + + +Definition at line 49 of file moeo\-Select\-One\-From\-Pop\-And\-Arch.h. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moeo\-Select\-One\-From\-Pop\-And\-Arch.h\end{CompactItemize} diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoSolutionUM.eps b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoSolutionUM.eps new file mode 100644 index 000000000..ba240a9a5 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoSolutionUM.eps @@ -0,0 +1,221 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 161.943 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 3.0875 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 4 def +/cols 2 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(moeoSolutionUM< EOT, R, EOFitness >) cw +(moeoUM< const EOFitness &, R >) cw +(eoUF< const EOFitness &, R >) cw +(moeoMetric) cw +(eoFunctorBase) cw +(eoFunctorBase) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (moeoSolutionUM< EOT, R, EOFitness >) 0.5 0 box + (moeoUM< const EOFitness &, R >) 0.5 1 box + (eoUF< const EOFitness &, R >) 0 2 box + (moeoMetric) 1 2 box + (eoFunctorBase) 0 3 box + (eoFunctorBase) 1 3 box + +% ----- relations ----- + +solid +0 0.5 0 out +solid +1 0.5 1 in +solid +0 0.5 1 out +solid +0 1 2 conn +solid +1 0 2 in +solid +0 0 2 out +solid +1 1 2 in +solid +0 1 2 out +solid +1 0 3 in +solid +1 1 3 in diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoSolutionUM.tex b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoSolutionUM.tex new file mode 100644 index 000000000..01c9d0450 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoSolutionUM.tex @@ -0,0 +1,27 @@ +\section{moeo\-Solution\-UM$<$ EOT, R, EOFitness $>$ Class Template Reference} +\label{classmoeoSolutionUM}\index{moeoSolutionUM@{moeoSolutionUM}} +Base class for unary metrics dedicated to the performance evaluation of a single solution's Pareto fitness. + + +{\tt \#include $<$moeo\-Metric.h$>$} + +Inheritance diagram for moeo\-Solution\-UM$<$ EOT, R, EOFitness $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=4cm]{classmoeoSolutionUM} +\end{center} +\end{figure} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class EOT, class R, class EOFitness = typename EOT::Fitness$>$ class moeo\-Solution\-UM$<$ 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 moeo\-Metric.h. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moeo\-Metric.h\end{CompactItemize} diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoSolutionVsSolutionBM.eps b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoSolutionVsSolutionBM.eps new file mode 100644 index 000000000..f3491d31f --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoSolutionVsSolutionBM.eps @@ -0,0 +1,221 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 130.293 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 3.8375 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 4 def +/cols 2 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(moeoSolutionVsSolutionBM< EOT, R, EOFitness >) cw +(moeoBM< A1, A2, R >) cw +(eoBF< A1, A2, R >) cw +(moeoMetric) cw +(eoFunctorBase) cw +(eoFunctorBase) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (moeoSolutionVsSolutionBM< EOT, R, EOFitness >) 0.5 0 box + (moeoBM< A1, A2, R >) 0.5 1 box + (eoBF< A1, A2, R >) 0 2 box + (moeoMetric) 1 2 box + (eoFunctorBase) 0 3 box + (eoFunctorBase) 1 3 box + +% ----- relations ----- + +solid +0 0.5 0 out +solid +1 0.5 1 in +solid +0 0.5 1 out +solid +0 1 2 conn +solid +1 0 2 in +solid +0 0 2 out +solid +1 1 2 in +solid +0 1 2 out +solid +1 0 3 in +solid +1 1 3 in diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoSolutionVsSolutionBM.tex b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoSolutionVsSolutionBM.tex new file mode 100644 index 000000000..2c3797c15 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoSolutionVsSolutionBM.tex @@ -0,0 +1,27 @@ +\section{moeo\-Solution\-Vs\-Solution\-BM$<$ EOT, R, EOFitness $>$ Class Template Reference} +\label{classmoeoSolutionVsSolutionBM}\index{moeoSolutionVsSolutionBM@{moeoSolutionVsSolutionBM}} +Base class for binary metrics dedicated to the performance comparison between two solutions's Pareto fitnesses. + + +{\tt \#include $<$moeo\-Metric.h$>$} + +Inheritance diagram for moeo\-Solution\-Vs\-Solution\-BM$<$ EOT, R, EOFitness $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=3.64821cm]{classmoeoSolutionVsSolutionBM} +\end{center} +\end{figure} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class EOT, class R, class EOFitness = typename EOT::Fitness$>$ class moeo\-Solution\-Vs\-Solution\-BM$<$ 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 moeo\-Metric.h. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moeo\-Metric.h\end{CompactItemize} diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoUM.eps b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoUM.eps new file mode 100644 index 000000000..384c9b3af --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoUM.eps @@ -0,0 +1,215 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 252.101 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 1.98333 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 3 def +/cols 2 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(moeoUM< A, R >) cw +(eoUF< A, R >) cw +(moeoMetric) cw +(eoFunctorBase) cw +(eoFunctorBase) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (moeoUM< A, R >) 0.5 0 box + (eoUF< A, R >) 0 1 box + (moeoMetric) 1 1 box + (eoFunctorBase) 0 2 box + (eoFunctorBase) 1 2 box + +% ----- relations ----- + +solid +0 0.5 0 out +solid +0 1 1 conn +solid +1 0 1 in +solid +0 0 1 out +solid +1 1 1 in +solid +0 1 1 out +solid +1 0 2 in +solid +1 1 2 in diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoUM.tex b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoUM.tex new file mode 100644 index 000000000..a1be4b19f --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoUM.tex @@ -0,0 +1,27 @@ +\section{moeo\-UM$<$ A, R $>$ Class Template Reference} +\label{classmoeoUM}\index{moeoUM@{moeoUM}} +Base class for unary metrics. + + +{\tt \#include $<$moeo\-Metric.h$>$} + +Inheritance diagram for moeo\-UM$<$ A, R $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=3cm]{classmoeoUM} +\end{center} +\end{figure} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class A, class R$>$ class moeo\-UM$<$ A, R $>$} + +Base class for unary metrics. + + + +Definition at line 29 of file moeo\-Metric.h. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moeo\-Metric.h\end{CompactItemize} diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoVectorUM.eps b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoVectorUM.eps new file mode 100644 index 000000000..7b5eb73fc --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoVectorUM.eps @@ -0,0 +1,221 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 133.779 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 3.7375 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 4 def +/cols 2 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(moeoVectorUM< EOT, R, EOFitness >) cw +(moeoUM< const std::vector< EOFitness > &, R >) cw +(eoUF< const std::vector< EOFitness > &, R >) cw +(moeoMetric) cw +(eoFunctorBase) cw +(eoFunctorBase) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (moeoVectorUM< EOT, R, EOFitness >) 0.5 0 box + (moeoUM< const std::vector< EOFitness > &, R >) 0.5 1 box + (eoUF< const std::vector< EOFitness > &, R >) 0 2 box + (moeoMetric) 1 2 box + (eoFunctorBase) 0 3 box + (eoFunctorBase) 1 3 box + +% ----- relations ----- + +solid +0 0.5 0 out +solid +1 0.5 1 in +solid +0 0.5 1 out +solid +0 1 2 conn +solid +1 0 2 in +solid +0 0 2 out +solid +1 1 2 in +solid +0 1 2 out +solid +1 0 3 in +solid +1 1 3 in diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoVectorUM.tex b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoVectorUM.tex new file mode 100644 index 000000000..86b8fa6d6 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoVectorUM.tex @@ -0,0 +1,27 @@ +\section{moeo\-Vector\-UM$<$ EOT, R, EOFitness $>$ Class Template Reference} +\label{classmoeoVectorUM}\index{moeoVectorUM@{moeoVectorUM}} +Base class for unary metrics dedicated to the performance evaluation of a Pareto set (a vector of Pareto fitnesses). + + +{\tt \#include $<$moeo\-Metric.h$>$} + +Inheritance diagram for moeo\-Vector\-UM$<$ EOT, R, EOFitness $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=3.74582cm]{classmoeoVectorUM} +\end{center} +\end{figure} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class EOT, class R, class EOFitness = typename EOT::Fitness$>$ class moeo\-Vector\-UM$<$ 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 moeo\-Metric.h. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moeo\-Metric.h\end{CompactItemize} diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoVectorVsSolutionBM.eps b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoVectorVsSolutionBM.eps new file mode 100644 index 000000000..cb9caa6f9 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoVectorVsSolutionBM.eps @@ -0,0 +1,221 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 133.333 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 3.75 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 4 def +/cols 2 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(moeoVectorVsSolutionBM< EOT, R, EOFitness >) cw +(moeoBM< A1, A2, R >) cw +(eoBF< A1, A2, R >) cw +(moeoMetric) cw +(eoFunctorBase) cw +(eoFunctorBase) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (moeoVectorVsSolutionBM< EOT, R, EOFitness >) 0.5 0 box + (moeoBM< A1, A2, R >) 0.5 1 box + (eoBF< A1, A2, R >) 0 2 box + (moeoMetric) 1 2 box + (eoFunctorBase) 0 3 box + (eoFunctorBase) 1 3 box + +% ----- relations ----- + +solid +0 0.5 0 out +solid +1 0.5 1 in +solid +0 0.5 1 out +solid +0 1 2 conn +solid +1 0 2 in +solid +0 0 2 out +solid +1 1 2 in +solid +0 1 2 out +solid +1 0 3 in +solid +1 1 3 in diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoVectorVsSolutionBM.tex b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoVectorVsSolutionBM.tex new file mode 100644 index 000000000..3d8168722 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoVectorVsSolutionBM.tex @@ -0,0 +1,27 @@ +\section{moeo\-Vector\-Vs\-Solution\-BM$<$ EOT, R, EOFitness $>$ Class Template Reference} +\label{classmoeoVectorVsSolutionBM}\index{moeoVectorVsSolutionBM@{moeoVectorVsSolutionBM}} +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. + + +{\tt \#include $<$moeo\-Metric.h$>$} + +Inheritance diagram for moeo\-Vector\-Vs\-Solution\-BM$<$ EOT, R, EOFitness $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=3.73333cm]{classmoeoVectorVsSolutionBM} +\end{center} +\end{figure} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class EOT, class R, class EOFitness = typename EOT::Fitness$>$ class moeo\-Vector\-Vs\-Solution\-BM$<$ 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 moeo\-Metric.h. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moeo\-Metric.h\end{CompactItemize} diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoVectorVsVectorBM.eps b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoVectorVsVectorBM.eps new file mode 100644 index 000000000..9602d3d8d --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoVectorVsVectorBM.eps @@ -0,0 +1,221 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 136.519 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 3.6625 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 4 def +/cols 2 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(moeoVectorVsVectorBM< EOT, R, EOFitness >) cw +(moeoBM< A1, A2, R >) cw +(eoBF< A1, A2, R >) cw +(moeoMetric) cw +(eoFunctorBase) cw +(eoFunctorBase) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (moeoVectorVsVectorBM< EOT, R, EOFitness >) 0.5 0 box + (moeoBM< A1, A2, R >) 0.5 1 box + (eoBF< A1, A2, R >) 0 2 box + (moeoMetric) 1 2 box + (eoFunctorBase) 0 3 box + (eoFunctorBase) 1 3 box + +% ----- relations ----- + +solid +0 0.5 0 out +solid +1 0.5 1 in +solid +0 0.5 1 out +solid +0 1 2 conn +solid +1 0 2 in +solid +0 0 2 out +solid +1 1 2 in +solid +0 1 2 out +solid +1 0 3 in +solid +1 1 3 in diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoVectorVsVectorBM.tex b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoVectorVsVectorBM.tex new file mode 100644 index 000000000..0ede3e6ee --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/classmoeoVectorVsVectorBM.tex @@ -0,0 +1,27 @@ +\section{moeo\-Vector\-Vs\-Vector\-BM$<$ EOT, R, EOFitness $>$ Class Template Reference} +\label{classmoeoVectorVsVectorBM}\index{moeoVectorVsVectorBM@{moeoVectorVsVectorBM}} +Base class for binary metrics dedicated to the performance comparison between two Pareto sets (two vectors of Pareto fitnesses). + + +{\tt \#include $<$moeo\-Metric.h$>$} + +Inheritance diagram for moeo\-Vector\-Vs\-Vector\-BM$<$ EOT, R, EOFitness $>$::\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=3.82253cm]{classmoeoVectorVsVectorBM} +\end{center} +\end{figure} + + +\subsection{Detailed Description} +\subsubsection*{template$<$class EOT, class R, class EOFitness = typename EOT::Fitness$>$ class moeo\-Vector\-Vs\-Vector\-BM$<$ 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 moeo\-Metric.h. + +The documentation for this class was generated from the following file:\begin{CompactItemize} +\item +moeo\-Metric.h\end{CompactItemize} diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/doxygen.sty b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/doxygen.sty new file mode 100644 index 000000000..f303e7147 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/doxygen.sty @@ -0,0 +1,78 @@ +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{doxygen} +\RequirePackage{calc} +\RequirePackage{array} +\pagestyle{fancyplain} +\newcommand{\clearemptydoublepage}{\newpage{\pagestyle{empty}\cleardoublepage}} +\renewcommand{\chaptermark}[1]{\markboth{#1}{}} +\renewcommand{\sectionmark}[1]{\markright{\thesection\ #1}} +\lhead[\fancyplain{}{\bfseries\thepage}] + {\fancyplain{}{\bfseries\rightmark}} +\rhead[\fancyplain{}{\bfseries\leftmark}] + {\fancyplain{}{\bfseries\thepage}} +\rfoot[\fancyplain{}{\bfseries\scriptsize Generated on Tue Jan 16 15:49:53 2007 for Paradis\-EO-MOEO by Doxygen }]{} +\lfoot[]{\fancyplain{}{\bfseries\scriptsize Generated on Tue Jan 16 15:49:53 2007 for Paradis\-EO-MOEO by Doxygen }} +\cfoot{} +\newenvironment{Code} +{\footnotesize} +{\normalsize} +\newcommand{\doxyref}[3]{\textbf{#1} (\textnormal{#2}\,\pageref{#3})} +\newenvironment{DocInclude} +{\footnotesize} +{\normalsize} +\newenvironment{VerbInclude} +{\footnotesize} +{\normalsize} +\newenvironment{Image} +{\begin{figure}[H]} +{\end{figure}} +\newenvironment{ImageNoCaption}{}{} +\newenvironment{CompactList} +{\begin{list}{}{ + \setlength{\leftmargin}{0.5cm} + \setlength{\itemsep}{0pt} + \setlength{\parsep}{0pt} + \setlength{\topsep}{0pt} + \renewcommand{\makelabel}{\hfill}}} +{\end{list}} +\newenvironment{CompactItemize} +{ + \begin{itemize} + \setlength{\itemsep}{-3pt} + \setlength{\parsep}{0pt} + \setlength{\topsep}{0pt} + \setlength{\partopsep}{0pt} +} +{\end{itemize}} +\newcommand{\PBS}[1]{\let\temp=\\#1\let\\=\temp} +\newlength{\tmplength} +\newenvironment{TabularC}[1] +{ +\setlength{\tmplength} + {\linewidth/(#1)-\tabcolsep*2-\arrayrulewidth*(#1+1)/(#1)} + \par\begin{tabular*}{\linewidth} + {*{#1}{|>{\PBS\raggedright\hspace{0pt}}p{\the\tmplength}}|} +} +{\end{tabular*}\par} +\newcommand{\entrylabel}[1]{ + {\parbox[b]{\labelwidth-4pt}{\makebox[0pt][l]{\textbf{#1}}\vspace{1.5\baselineskip}}}} +\newenvironment{Desc} +{\begin{list}{} + { + \settowidth{\labelwidth}{40pt} + \setlength{\leftmargin}{\labelwidth} + \setlength{\parsep}{0pt} + \setlength{\itemsep}{-4pt} + \renewcommand{\makelabel}{\entrylabel} + } +} +{\end{list}} +\newenvironment{Indent} + {\begin{list}{}{\setlength{\leftmargin}{0.5cm}} + \item[]\ignorespaces} + {\unskip\end{list}} +\setlength{\parindent}{0cm} +\setlength{\parskip}{0.2cm} +\addtocounter{secnumdepth}{1} +\sloppy +\usepackage[T1]{fontenc} diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/hierarchy.tex b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/hierarchy.tex new file mode 100644 index 000000000..86788b042 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/hierarchy.tex @@ -0,0 +1,138 @@ +\section{Paradis\-EO-MOEO Class Hierarchy} +This inheritance list is sorted roughly, but not completely, alphabetically:\begin{CompactList} +\item eo\-Functor\-Base{\tt [external]}\begin{CompactList} +\item eo\-BF$<$ A1, A2, R $>${\tt [external]}\begin{CompactList} +\item \contentsline{section}{moeo\-Binary\-Quality\-Indicator$<$ EOFitness $>$}{\pageref{classmoeoBinaryQualityIndicator}}{} +\begin{CompactList} +\item \contentsline{section}{moeo\-Additive\-Binary\-Epsilon\-Indicator$<$ EOFitness $>$}{\pageref{classmoeoAdditiveBinaryEpsilonIndicator}}{} +\item \contentsline{section}{moeo\-Binary\-Hypervolume\-Indicator$<$ EOFitness $>$}{\pageref{classmoeoBinaryHypervolumeIndicator}}{} +\end{CompactList} +\item \contentsline{section}{moeo\-Binary\-Quality\-Indicator$<$ Fitness\-Eval $>$}{\pageref{classmoeoBinaryQualityIndicator}}{} +\item \contentsline{section}{moeo\-BM$<$ A1, A2, R $>$}{\pageref{classmoeoBM}}{} +\begin{CompactList} +\item \contentsline{section}{moeo\-Solution\-Vs\-Solution\-BM$<$ EOT, R, EOFitness $>$}{\pageref{classmoeoSolutionVsSolutionBM}}{} +\item \contentsline{section}{moeo\-Vector\-Vs\-Solution\-BM$<$ EOT, R, EOFitness $>$}{\pageref{classmoeoVectorVsSolutionBM}}{} +\item \contentsline{section}{moeo\-Vector\-Vs\-Vector\-BM$<$ EOT, R, EOFitness $>$}{\pageref{classmoeoVectorVsVectorBM}}{} +\item \contentsline{section}{moeo\-Vector\-Vs\-Vector\-BM$<$ EOT, double $>$}{\pageref{classmoeoVectorVsVectorBM}}{} +\begin{CompactList} +\item \contentsline{section}{moeo\-Contribution\-Metric$<$ EOT $>$}{\pageref{classmoeoContributionMetric}}{} +\item \contentsline{section}{moeo\-Entropy\-Metric$<$ EOT $>$}{\pageref{classmoeoEntropyMetric}}{} +\end{CompactList} +\end{CompactList} +\end{CompactList} +\item eo\-BF$<$ const const EOFitness \&, EOFitness \&, R $>${\tt [external]}\begin{CompactList} +\item \contentsline{section}{moeo\-BM$<$ const const EOFitness \&, EOFitness \&, R $>$}{\pageref{classmoeoBM}}{} +\end{CompactList} +\item eo\-BF$<$ const const std::vector$<$ EOFitness $>$ \&, EOFitness \&, R $>${\tt [external]}\begin{CompactList} +\item \contentsline{section}{moeo\-BM$<$ const const std::vector$<$ EOFitness $>$ \&, EOFitness \&, R $>$}{\pageref{classmoeoBM}}{} +\end{CompactList} +\item eo\-BF$<$ const const std::vector$<$ EOFitness $>$ \&, std::vector$<$ EOFitness $>$ \&, R $>${\tt [external]}\begin{CompactList} +\item \contentsline{section}{moeo\-BM$<$ const const std::vector$<$ EOFitness $>$ \&, std::vector$<$ EOFitness $>$ \&, R $>$}{\pageref{classmoeoBM}}{} +\end{CompactList} +\item eo\-BF$<$ const const std::vector$<$ typename EOT::Fitness $>$ \&, std::vector$<$ typename EOT::Fitness $>$ \&, double $>${\tt [external]}\begin{CompactList} +\item \contentsline{section}{moeo\-BM$<$ const const std::vector$<$ typename EOT::Fitness $>$ \&, std::vector$<$ typename EOT::Fitness $>$ \&, double $>$}{\pageref{classmoeoBM}}{} +\end{CompactList} +\item eo\-BF$<$ const EOT \&, moeo\-Archive$<$ EOT $>$ \&, void $>${\tt [external]}\begin{CompactList} +\item \contentsline{section}{moeo\-MOLS$<$ EOT $>$}{\pageref{classmoeoMOLS}}{} +\begin{CompactList} +\item \contentsline{section}{moeo\-Combined\-MOLS$<$ EOT $>$}{\pageref{classmoeoCombinedMOLS}}{} +\end{CompactList} +\end{CompactList} +\item eo\-BF$<$ eo\-Pop$<$ EOT $>$ \&, eo\-Pop$<$ EOT $>$ \&, void $>${\tt [external]}\begin{CompactList} +\item eo\-Replacement$<$ EOT $>${\tt [external]}\begin{CompactList} +\item \contentsline{section}{moeo\-Replacement$<$ EOT, Worth\-T $>$}{\pageref{classmoeoReplacement}}{} +\begin{CompactList} +\item \contentsline{section}{moeo\-Disctinct\-Elitist\-Replacement$<$ EOT, Worth\-T $>$}{\pageref{classmoeoDisctinctElitistReplacement}}{} +\item \contentsline{section}{moeo\-Elitist\-Replacement$<$ EOT, Worth\-T $>$}{\pageref{classmoeoElitistReplacement}}{} +\end{CompactList} +\end{CompactList} +\end{CompactList} +\item eo\-F$<$ void $>${\tt [external]}\begin{CompactList} +\item eo\-Updater{\tt [external]}\begin{CompactList} +\item \contentsline{section}{moeo\-Archive\-Fitness\-Saving\-Updater$<$ EOT $>$}{\pageref{classmoeoArchiveFitnessSavingUpdater}}{} +\item \contentsline{section}{moeo\-Archive\-Updater$<$ EOT $>$}{\pageref{classmoeoArchiveUpdater}}{} +\item \contentsline{section}{moeo\-Binary\-Metric\-Saving\-Updater$<$ EOT $>$}{\pageref{classmoeoBinaryMetricSavingUpdater}}{} +\item \contentsline{section}{moeo\-Hybrid\-MOLS$<$ EOT $>$}{\pageref{classmoeoHybridMOLS}}{} +\end{CompactList} +\end{CompactList} +\item eo\-UF$<$ A1, R $>${\tt [external]}\begin{CompactList} +\item eo\-Select\-One$<$ EOT $>${\tt [external]}\begin{CompactList} +\item \contentsline{section}{moeo\-Select\-One\-From\-Pop\-And\-Arch$<$ EOT $>$}{\pageref{classmoeoSelectOneFromPopAndArch}}{} +\end{CompactList} +\end{CompactList} +\item eo\-UF$<$ A, R $>${\tt [external]}\begin{CompactList} +\item \contentsline{section}{moeo\-UM$<$ A, R $>$}{\pageref{classmoeoUM}}{} +\end{CompactList} +\item eo\-UF$<$ const EOFitness \&, R $>${\tt [external]}\begin{CompactList} +\item \contentsline{section}{moeo\-UM$<$ const EOFitness \&, R $>$}{\pageref{classmoeoUM}}{} +\begin{CompactList} +\item \contentsline{section}{moeo\-Solution\-UM$<$ EOT, R, EOFitness $>$}{\pageref{classmoeoSolutionUM}}{} +\end{CompactList} +\end{CompactList} +\item eo\-UF$<$ const eo\-Pop$<$ EOT $>$ \&, void $>${\tt [external]}\begin{CompactList} +\item eo\-Perf2Worth$<$ EOT, Worth\-T $>${\tt [external]}\begin{CompactList} +\item eo\-Perf2Worth\-Cached$<$ EOT, double $>${\tt [external]}\begin{CompactList} +\item eo\-NDSorting$<$ EOT $>${\tt [external]}\begin{CompactList} +\item \contentsline{section}{moeo\-NDSorting\_\-II$<$ EOT $>$}{\pageref{classmoeoNDSorting__II}}{} +\end{CompactList} +\item \contentsline{section}{moeo\-IBEA$<$ EOT, Fitness $>$}{\pageref{classmoeoIBEA}}{} +\begin{CompactList} +\item \contentsline{section}{moeo\-IBEASorting$<$ EOT, Fitness $>$}{\pageref{classmoeoIBEASorting}}{} +\end{CompactList} +\item \contentsline{section}{moeo\-IBEA$<$ EOT, Fitness\-Eval $>$}{\pageref{classmoeoIBEA}}{} +\begin{CompactList} +\item \contentsline{section}{moeo\-IBEAAvg\-Sorting$<$ EOT, Fitness\-Eval $>$}{\pageref{classmoeoIBEAAvgSorting}}{} +\item \contentsline{section}{moeo\-IBEAStoch\-Sorting$<$ EOT, Fitness\-Eval $>$}{\pageref{classmoeoIBEAStochSorting}}{} +\end{CompactList} +\end{CompactList} +\end{CompactList} +\item eo\-Perf2Worth$<$ EOT, worth\-T $>${\tt [external]}\begin{CompactList} +\item \contentsline{section}{moeo\-Pareto\-Sharing$<$ EOT, worth\-T $>$}{\pageref{classmoeoParetoSharing}}{} +\end{CompactList} +\end{CompactList} +\item eo\-UF$<$ const std::vector$<$ EOFitness $>$ \&, R $>${\tt [external]}\begin{CompactList} +\item \contentsline{section}{moeo\-UM$<$ const std::vector$<$ EOFitness $>$ \&, R $>$}{\pageref{classmoeoUM}}{} +\begin{CompactList} +\item \contentsline{section}{moeo\-Vector\-UM$<$ EOT, R, EOFitness $>$}{\pageref{classmoeoVectorUM}}{} +\end{CompactList} +\end{CompactList} +\item eo\-UF$<$ eo\-Pop$<$ EOT $>$ \&, void $>${\tt [external]}\begin{CompactList} +\item eo\-Algo$<$ EOT $>${\tt [external]}\begin{CompactList} +\item \contentsline{section}{moeo\-NSGA\_\-II$<$ EOT $>$}{\pageref{classmoeoNSGA__II}}{} +\end{CompactList} +\end{CompactList} +\item \contentsline{section}{moeo\-Metric}{\pageref{classmoeoMetric}}{} +\begin{CompactList} +\item \contentsline{section}{moeo\-BM$<$ A1, A2, R $>$}{\pageref{classmoeoBM}}{} +\item \contentsline{section}{moeo\-BM$<$ const const EOFitness \&, EOFitness \&, R $>$}{\pageref{classmoeoBM}}{} +\item \contentsline{section}{moeo\-BM$<$ const const std::vector$<$ EOFitness $>$ \&, EOFitness \&, R $>$}{\pageref{classmoeoBM}}{} +\item \contentsline{section}{moeo\-BM$<$ const const std::vector$<$ EOFitness $>$ \&, std::vector$<$ EOFitness $>$ \&, R $>$}{\pageref{classmoeoBM}}{} +\item \contentsline{section}{moeo\-BM$<$ const const std::vector$<$ typename EOT::Fitness $>$ \&, std::vector$<$ typename EOT::Fitness $>$ \&, double $>$}{\pageref{classmoeoBM}}{} +\item \contentsline{section}{moeo\-UM$<$ A, R $>$}{\pageref{classmoeoUM}}{} +\item \contentsline{section}{moeo\-UM$<$ const EOFitness \&, R $>$}{\pageref{classmoeoUM}}{} +\item \contentsline{section}{moeo\-UM$<$ const std::vector$<$ EOFitness $>$ \&, R $>$}{\pageref{classmoeoUM}}{} +\end{CompactList} +\end{CompactList} +\item eo\-Object{\tt [external]}\begin{CompactList} +\item eo\-Pop$<$ EOT $>${\tt [external]}\begin{CompactList} +\item \contentsline{section}{moeo\-Archive$<$ EOT $>$}{\pageref{classmoeoArchive}}{} +\end{CompactList} +\end{CompactList} +\item eo\-Param{\tt [external]}\begin{CompactList} +\item eo\-Value\-Param$<$ std::vector$<$ Worth\-T $>$ $>${\tt [external]}\begin{CompactList} +\item eo\-Perf2Worth$<$ EOT, Worth\-T $>${\tt [external]}\end{CompactList} +\item eo\-Value\-Param$<$ std::vector$<$ worth\-T $>$ $>${\tt [external]}\begin{CompactList} +\item eo\-Perf2Worth$<$ EOT, worth\-T $>${\tt [external]}\end{CompactList} +\end{CompactList} +\item eo\-Printable{\tt [external]}\begin{CompactList} +\item eo\-Persistent{\tt [external]}\begin{CompactList} +\item eo\-Pop$<$ EOT $>${\tt [external]}\end{CompactList} +\end{CompactList} +\item \contentsline{section}{moeo\-Binary\-Quality\-Indicator$<$ EOFitness $>$::Range}{\pageref{classmoeoBinaryQualityIndicator_1_1Range}}{} +\item \contentsline{section}{moeo\-NDSorting\_\-II$<$ EOT $>$::compare\_\-nodes}{\pageref{classmoeoNDSorting__II_1_1compare__nodes}}{} +\item \contentsline{section}{moeo\-Pareto\-Phen\-Dist$<$ EOT, Dist\-Type $>$}{\pageref{classmoeoParetoPhenDist}}{} +\begin{CompactList} +\item \contentsline{section}{moeo\-Pareto\-Euclid\-Dist$<$ EOT, Dist\-Type $>$}{\pageref{classmoeoParetoEuclidDist}}{} +\end{CompactList} +\item \contentsline{section}{moeo\-Pareto\-Sharing$<$ EOT, worth\-T $>$::d\-Matrix}{\pageref{classmoeoParetoSharing_1_1dMatrix}}{} +\end{CompactList} diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/main.tex b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/main.tex new file mode 100644 index 000000000..7297a0ecb --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/main.tex @@ -0,0 +1,5 @@ +\section{intro}\label{main_intro} +Paradis\-EO-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. Paradis\-EO-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 Paradis\-EO-MOEO using the whole version of Paradis\-EO.\section{tutorial}\label{main_tutorial} +A tutorial about a bi-objective flow-shop scheduling problem will be available soon.\section{install}\label{main_install} +The installation procedure of the package is detailed in the {\tt README} file in the top-directory of the source-tree.\section{design}\label{main_design} +For an introduction to the design of Paradis\-EO-MOEO, you can look at the {\tt Paradis\-EO website}. \ No newline at end of file diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/pages.tex b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/pages.tex new file mode 100644 index 000000000..8297a1563 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/pages.tex @@ -0,0 +1,5 @@ +\section{Paradis\-EO-MOEO Related Pages} +Here is a list of all related documentation pages:\begin{CompactList} +\item \contentsline{section}{Related webpages}{\pageref{webpages}}{} + +\end{CompactList} diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/refman.tex b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/refman.tex new file mode 100644 index 000000000..51d90026c --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/refman.tex @@ -0,0 +1,74 @@ +\documentclass[a4paper]{book} +\usepackage{a4wide} +\usepackage{makeidx} +\usepackage{fancyhdr} +\usepackage{graphicx} +\usepackage{multicol} +\usepackage{float} +\usepackage{textcomp} +\usepackage{alltt} +\usepackage{doxygen} +\makeindex +\setcounter{tocdepth}{1} +\renewcommand{\footrulewidth}{0.4pt} +\begin{document} +\begin{titlepage} +\vspace*{7cm} +\begin{center} +{\Large Paradis\-EO-MOEO Reference Manual\\[1ex]\large 0.1 }\\ +\vspace*{1cm} +{\large Generated by Doxygen 1.5.1}\\ +\vspace*{0.5cm} +{\small Tue Jan 16 15:49:53 2007}\\ +\end{center} +\end{titlepage} +\clearemptydoublepage +\pagenumbering{roman} +\tableofcontents +\clearemptydoublepage +\pagenumbering{arabic} +\chapter{Welcome to Paradis\-EO-MOEO } +\label{index}\input{main} +\chapter{Paradis\-EO-MOEO Hierarchical Index} +\input{hierarchy} +\chapter{Paradis\-EO-MOEO Class Index} +\input{annotated} +\chapter{Paradis\-EO-MOEO Class Documentation} +\input{classmoeoAdditiveBinaryEpsilonIndicator} +\include{classmoeoArchive} +\include{classmoeoArchiveFitnessSavingUpdater} +\include{classmoeoArchiveUpdater} +\include{classmoeoBinaryHypervolumeIndicator} +\include{classmoeoBinaryMetricSavingUpdater} +\include{classmoeoBinaryQualityIndicator} +\include{classmoeoBinaryQualityIndicator_1_1Range} +\include{classmoeoBM} +\include{classmoeoCombinedMOLS} +\include{classmoeoContributionMetric} +\include{classmoeoDisctinctElitistReplacement} +\include{classmoeoElitistReplacement} +\include{classmoeoEntropyMetric} +\include{classmoeoHybridMOLS} +\include{classmoeoIBEA} +\include{classmoeoIBEAAvgSorting} +\include{classmoeoIBEASorting} +\include{classmoeoIBEAStochSorting} +\include{classmoeoMetric} +\include{classmoeoMOLS} +\include{classmoeoNDSorting__II} +\include{classmoeoNDSorting__II_1_1compare__nodes} +\include{classmoeoNSGA__II} +\include{classmoeoParetoEuclidDist} +\include{classmoeoParetoPhenDist} +\include{classmoeoParetoSharing} +\include{classmoeoParetoSharing_1_1dMatrix} +\include{classmoeoReplacement} +\include{classmoeoSelectOneFromPopAndArch} +\include{classmoeoSolutionUM} +\include{classmoeoSolutionVsSolutionBM} +\include{classmoeoUM} +\include{classmoeoVectorUM} +\include{classmoeoVectorVsSolutionBM} +\include{classmoeoVectorVsVectorBM} +\printindex +\end{document} diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/webpages.tex b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/webpages.tex new file mode 100644 index 000000000..f17506321 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/latex/webpages.tex @@ -0,0 +1,3 @@ +\section{Related webpages}\label{webpages} +\begin{itemize} +\item Paradis\-EO {\tt homepage}\item INRIA GForge {\tt project page}\item {\tt README}\item {\tt NEWS} \end{itemize} diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/eoAdditiveBinaryEpsilonIndicator.3 b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/eoAdditiveBinaryEpsilonIndicator.3 new file mode 100644 index 000000000..312538709 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/eoAdditiveBinaryEpsilonIndicator.3 @@ -0,0 +1,91 @@ +.TH "eoAdditiveBinaryEpsilonIndicator" 3 "22 Dec 2006" "Version 0.1" "ParadisEO-MOEO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +eoAdditiveBinaryEpsilonIndicator \- Functor Additive binary epsilon indicator for \fBeoParetoFitness\fP. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBeoBinaryQualityIndicator< EOFitness >< EOFitness >\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBeoAdditiveBinaryEpsilonIndicator\fP ()" +.br +.RI "\fIconstructor \fP" +.ti -1c +.RI "double \fBoperator()\fP (const EOFitness &_fitness_eo1, const EOFitness &_fitness_eo2)" +.br +.RI "\fIcomputation 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) \fP" +.in -1c +.SS "Private Types" + +.in +1c +.ti -1c +.RI "typedef EOFitness::fitness_traits \fBtraits\fP" +.br +.RI "\fIfitness traits \fP" +.in -1c +.SS "Private Member Functions" + +.in +1c +.ti -1c +.RI "double \fBepsilonValue\fP (const EOFitness &_fitness_eo1, const EOFitness &_fitness_eo2, const unsigned _iObj)" +.br +.RI "\fIcomputation of the epsilon value by which individual _eo1 must be decreased in the objective _iObj such that individual _eo2 is weakly dominated \fP" +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class eoAdditiveBinaryEpsilonIndicator< EOFitness >" +Functor Additive binary epsilon indicator for \fBeoParetoFitness\fP. +.PP +Definition at line 126 of file eoBinaryQualityIndicator.h. +.SH "Member Function Documentation" +.PP +.SS "template double \fBeoAdditiveBinaryEpsilonIndicator\fP< EOFitness >::operator() (const EOFitness & _fitness_eo1, const EOFitness & _fitness_eo2)\fC [inline, virtual]\fP" +.PP +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) +.PP +\fBParameters:\fP +.RS 4 +\fIEOFitness\fP & _fitness_eo1 the fitness of the first individual +.br +\fIEOFitness\fP & _fitness_eo2 the fitness of the second individual +.RE +.PP + +.PP +Implements \fBeoBF< const EOFitness &, const EOFitness &, double >\fP. +.PP +Definition at line 149 of file eoBinaryQualityIndicator.h. +.PP +References eoAdditiveBinaryEpsilonIndicator< EOFitness >::epsilonValue(). +.SS "template double \fBeoAdditiveBinaryEpsilonIndicator\fP< EOFitness >::epsilonValue (const EOFitness & _fitness_eo1, const EOFitness & _fitness_eo2, const unsigned _iObj)\fC [inline, private]\fP" +.PP +computation of the epsilon value by which individual _eo1 must be decreased in the objective _iObj such that individual _eo2 is weakly dominated +.PP +\fBParameters:\fP +.RS 4 +\fIEOFitness\fP & _fitness_eo1 the fitness of the first individual +.br +\fIEOFitness\fP & _fitness_eo2 the fitness of the second individual +.br +\fIunsigned\fP _iObj the index of the objective +.RE +.PP + +.PP +Definition at line 181 of file eoBinaryQualityIndicator.h. +.PP +Referenced by eoAdditiveBinaryEpsilonIndicator< EOFitness >::operator()(). + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-MOEO from the source code. diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/eoBinaryHypervolumeIndicator.3 b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/eoBinaryHypervolumeIndicator.3 new file mode 100644 index 000000000..58ab7568e --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/eoBinaryHypervolumeIndicator.3 @@ -0,0 +1,171 @@ +.TH "eoBinaryHypervolumeIndicator" 3 "22 Dec 2006" "Version 0.1" "ParadisEO-MOEO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +eoBinaryHypervolumeIndicator \- Functor Binary hypervolume indicator for \fBeoParetoFitness\fP. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBeoBinaryQualityIndicator< EOFitness >< EOFitness >\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBeoBinaryHypervolumeIndicator\fP (double _rho)" +.br +.RI "\fIconstructor \fP" +.ti -1c +.RI "double \fBoperator()\fP (const EOFitness &_fitness_eo1, const EOFitness &_fitness_eo2)" +.br +.RI "\fIindicator 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) \fP" +.in -1c +.SS "Private Types" + +.in +1c +.ti -1c +.RI "typedef EOFitness::fitness_traits \fBtraits\fP" +.br +.RI "\fIfitness traits \fP" +.in -1c +.SS "Private Member Functions" + +.in +1c +.ti -1c +.RI "double \fBhypervolumeIndicatorValue\fP (const EOFitness &_fitness_eo1, const EOFitness &_fitness_eo2, const unsigned _iObj, const bool _flag=false)" +.br +.RI "\fIcomputation of the hypervolume of the portion of the objective space that is dominated by individual _eo1 but not by individual _eo2 \fP" +.ti -1c +.RI "double \fBhypervolumeIndicatorValueMin\fP (const EOFitness &_fitness_eo1, const EOFitness &_fitness_eo2, const unsigned _iObj, const bool _flag)" +.br +.RI "\fIcomputation 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 \fP" +.ti -1c +.RI "double \fBhypervolumeIndicatorValueMax\fP (const EOFitness &_fitness_eo1, const EOFitness &_fitness_eo2, const unsigned _iObj, const bool _flag)" +.br +.RI "\fIcomputation 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 \fP" +.in -1c +.SS "Private Attributes" + +.in +1c +.ti -1c +.RI "double \fBrho\fP" +.br +.RI "\fIreference point for the hypervolume calculation \fP" +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class eoBinaryHypervolumeIndicator< EOFitness >" +Functor Binary hypervolume indicator for \fBeoParetoFitness\fP. +.PP +Definition at line 217 of file eoBinaryQualityIndicator.h. +.SH "Constructor & Destructor Documentation" +.PP +.SS "template \fBeoBinaryHypervolumeIndicator\fP< EOFitness >::\fBeoBinaryHypervolumeIndicator\fP (double _rho)\fC [inline]\fP" +.PP +constructor +.PP +\fBParameters:\fP +.RS 4 +\fIdouble\fP _rho reference point for the hypervolume calculation (rho must not be smaller than 1) +.RE +.PP + +.PP +Definition at line 227 of file eoBinaryQualityIndicator.h. +.PP +References eoBinaryHypervolumeIndicator< EOFitness >::rho. +.SH "Member Function Documentation" +.PP +.SS "template double \fBeoBinaryHypervolumeIndicator\fP< EOFitness >::operator() (const EOFitness & _fitness_eo1, const EOFitness & _fitness_eo2)\fC [inline, virtual]\fP" +.PP +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) +.PP +\fBParameters:\fP +.RS 4 +\fIEOFitness\fP & _fitness_eo1 the fitness of the first individual +.br +\fIEOFitness\fP & _fitness_eo2 the fitness of the second individual +.RE +.PP + +.PP +Implements \fBeoBF< const EOFitness &, const EOFitness &, double >\fP. +.PP +Definition at line 250 of file eoBinaryQualityIndicator.h. +.PP +References eoBinaryHypervolumeIndicator< EOFitness >::hypervolumeIndicatorValue(). +.SS "template double \fBeoBinaryHypervolumeIndicator\fP< EOFitness >::hypervolumeIndicatorValue (const EOFitness & _fitness_eo1, const EOFitness & _fitness_eo2, const unsigned _iObj, const bool _flag = \fCfalse\fP)\fC [inline, private]\fP" +.PP +computation of the hypervolume of the portion of the objective space that is dominated by individual _eo1 but not by individual _eo2 +.PP +\fBParameters:\fP +.RS 4 +\fIEOFitness\fP & _fitness_eo1 the fitness of the first individual +.br +\fIEOFitness\fP & _fitness_eo2 the fitness of the second individual +.br +\fIunsigned\fP _iObj number of objectives (used for iteration) +.br +\fIbool\fP _flag = false (only used for iteration) +.RE +.PP + +.PP +Definition at line 285 of file eoBinaryQualityIndicator.h. +.PP +References eoBinaryQualityIndicator< EOFitness >::bounds, eoBinaryHypervolumeIndicator< EOFitness >::hypervolumeIndicatorValueMax(), and eoBinaryHypervolumeIndicator< EOFitness >::hypervolumeIndicatorValueMin(). +.PP +Referenced by eoBinaryHypervolumeIndicator< EOFitness >::hypervolumeIndicatorValueMax(), eoBinaryHypervolumeIndicator< EOFitness >::hypervolumeIndicatorValueMin(), and eoBinaryHypervolumeIndicator< EOFitness >::operator()(). +.SS "template double \fBeoBinaryHypervolumeIndicator\fP< EOFitness >::hypervolumeIndicatorValueMin (const EOFitness & _fitness_eo1, const EOFitness & _fitness_eo2, const unsigned _iObj, const bool _flag)\fC [inline, private]\fP" +.PP +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 +.PP +\fBParameters:\fP +.RS 4 +\fIEOFitness\fP & _fitness_eo1 the fitness of the first individual +.br +\fIEOFitness\fP & _fitness_eo2 the fitness of the second individual +.br +\fIunsigned\fP _iObj index of the objective +.br +\fIbool\fP _flag (only used for iteration) +.RE +.PP + +.PP +Definition at line 320 of file eoBinaryQualityIndicator.h. +.PP +References eoBinaryQualityIndicator< EOFitness >::bounds, eoBinaryHypervolumeIndicator< EOFitness >::hypervolumeIndicatorValue(), and eoBinaryHypervolumeIndicator< EOFitness >::rho. +.PP +Referenced by eoBinaryHypervolumeIndicator< EOFitness >::hypervolumeIndicatorValue(). +.SS "template double \fBeoBinaryHypervolumeIndicator\fP< EOFitness >::hypervolumeIndicatorValueMax (const EOFitness & _fitness_eo1, const EOFitness & _fitness_eo2, const unsigned _iObj, const bool _flag)\fC [inline, private]\fP" +.PP +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 +.PP +\fBParameters:\fP +.RS 4 +\fIEOFitness\fP & _fitness_eo1 the fitness of the first individual +.br +\fIEOFitness\fP & _fitness_eo2 the fitness of the second individual +.br +\fIunsigned\fP _iObj index of the objective +.br +\fIbool\fP _flag (only used for iteration) +.RE +.PP + +.PP +Definition at line 374 of file eoBinaryQualityIndicator.h. +.PP +References eoBinaryQualityIndicator< EOFitness >::bounds, eoBinaryHypervolumeIndicator< EOFitness >::hypervolumeIndicatorValue(), and eoBinaryHypervolumeIndicator< EOFitness >::rho. +.PP +Referenced by eoBinaryHypervolumeIndicator< EOFitness >::hypervolumeIndicatorValue(). + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-MOEO from the source code. diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/eoBinaryQualityIndicator.3 b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/eoBinaryQualityIndicator.3 new file mode 100644 index 000000000..26d376cff --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/eoBinaryQualityIndicator.3 @@ -0,0 +1,81 @@ +.TH "eoBinaryQualityIndicator" 3 "22 Dec 2006" "Version 0.1" "ParadisEO-MOEO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +eoBinaryQualityIndicator \- 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 \fBeoParetoFitness\fP object. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBeoBF< const EOFitness &, const EOFitness &, double >\fP. +.PP +Inherited by \fBeoAdditiveBinaryEpsilonIndicator< EOFitness >\fP, and \fBeoBinaryHypervolumeIndicator< EOFitness >\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBeoBinaryQualityIndicator\fP ()" +.br +.RI "\fIconstructor \fP" +.ti -1c +.RI "void \fBsetBounds\fP (const unsigned _iObj, const double _min, const double _max)" +.br +.RI "\fIset the bounds for objective _iObj \fP" +.in -1c +.SS "Protected Attributes" + +.in +1c +.ti -1c +.RI "std::vector< \fBRange\fP > \fBbounds\fP" +.br +.RI "\fIrange (min and max double value) for each objective \fP" +.in -1c +.SS "Private Types" + +.in +1c +.ti -1c +.RI "typedef EOFitness::fitness_traits \fBtraits\fP" +.br +.RI "\fIfitness traits \fP" +.in -1c +.SS "Classes" + +.in +1c +.ti -1c +.RI "class \fBRange\fP" +.br +.RI "\fIPrivate class to represent the bounds. \fP" +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class eoBinaryQualityIndicator< EOFitness >" +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 \fBeoParetoFitness\fP object. +.PP +Definition at line 39 of file eoBinaryQualityIndicator.h. +.SH "Member Function Documentation" +.PP +.SS "template void \fBeoBinaryQualityIndicator\fP< EOFitness >::setBounds (const unsigned _iObj, const double _min, const double _max)\fC [inline]\fP" +.PP +set the bounds for objective _iObj +.PP +\fBParameters:\fP +.RS 4 +\fIunsigned\fP _iObj the index of the objective +.br +\fIdouble\fP _min the minimum value +.br +\fIdouble\fP _max the maximum value +.RE +.PP + +.PP +Definition at line 62 of file eoBinaryQualityIndicator.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-MOEO from the source code. diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/eoBinaryQualityIndicator_Range.3 b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/eoBinaryQualityIndicator_Range.3 new file mode 100644 index 000000000..58a342dda --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/eoBinaryQualityIndicator_Range.3 @@ -0,0 +1,55 @@ +.TH "eoBinaryQualityIndicator::Range" 3 "22 Dec 2006" "Version 0.1" "ParadisEO-MOEO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +eoBinaryQualityIndicator::Range \- Private class to represent the bounds. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBRange\fP ()" +.br +.ti -1c +.RI "\fBRange\fP (const double _min, const double _max)" +.br +.ti -1c +.RI "double \fBminimum\fP ()" +.br +.ti -1c +.RI "double \fBmaximum\fP ()" +.br +.ti -1c +.RI "double \fBrange\fP ()" +.br +.in -1c +.SS "Private Attributes" + +.in +1c +.ti -1c +.RI "double \fBmin\fP" +.br +.ti -1c +.RI "double \fBmax\fP" +.br +.ti -1c +.RI "double \fBr\fP" +.br +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class eoBinaryQualityIndicator< EOFitness >::Range" +Private class to represent the bounds. +.PP +Definition at line 73 of file eoBinaryQualityIndicator.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-MOEO from the source code. diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/eoIBEA.3 b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/eoIBEA.3 new file mode 100644 index 000000000..c476420d4 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/eoIBEA.3 @@ -0,0 +1,62 @@ +.TH "eoIBEA" 3 "22 Dec 2006" "Version 0.1" "ParadisEO-MOEO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +eoIBEA \- Functor The sorting phase of IBEA (Indicator-Based Evolutionary Algorithm). + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBeoPerf2WorthCached< EOT, double >\fP. +.PP +Inherited by \fBeoIBEASorting< EOT, Fitness >\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBeoIBEA\fP (\fBeoBinaryQualityIndicator\fP< Fitness > *_I)" +.br +.ti -1c +.RI "void \fBcalculate_worths\fP (const \fBeoPop\fP< EOT > &_pop)" +.br +.RI "\fImapping \fP" +.in -1c +.SS "Protected Attributes" + +.in +1c +.ti -1c +.RI "\fBeoBinaryQualityIndicator\fP< Fitness > * \fBI\fP" +.br +.RI "\fIbinary quality indicator to use in the selection process \fP" +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class eoIBEA< EOT, Fitness >" +Functor The sorting phase of IBEA (Indicator-Based Evolutionary Algorithm). +.PP +Definition at line 38 of file eoIBEA.h. +.SH "Member Function Documentation" +.PP +.SS "template void \fBeoIBEA\fP< EOT, Fitness >::calculate_worths (const \fBeoPop\fP< EOT > & _pop)\fC [inline, virtual]\fP" +.PP +mapping +.PP +\fBParameters:\fP +.RS 4 +\fIconst\fP eoPop& _pop the population +.RE +.PP + +.PP +Implements \fBeoPerf2WorthCached< EOT, double >\fP. +.PP +Definition at line 56 of file eoIBEA.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-MOEO from the source code. diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/eoIBEAAvgSorting.3 b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/eoIBEAAvgSorting.3 new file mode 100644 index 000000000..9261a32dd --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/eoIBEAAvgSorting.3 @@ -0,0 +1,101 @@ +.TH "eoIBEAAvgSorting" 3 "22 Dec 2006" "Version 0.1" "ParadisEO-MOEO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +eoIBEAAvgSorting \- 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. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBeoIBEA< EOT, FitnessEval >\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBeoIBEAAvgSorting\fP (\fBeoBinaryQualityIndicator\fP< FitnessEval > *_I, const double _kappa)" +.br +.RI "\fIconstructor \fP" +.in -1c +.SS "Private Member Functions" + +.in +1c +.ti -1c +.RI "void \fBsetBounds\fP (const \fBeoPop\fP< EOT > &_pop)" +.br +.RI "\fIcomputation and setting of the bounds for each objective \fP" +.ti -1c +.RI "void \fBfitnesses\fP (const \fBeoPop\fP< EOT > &_pop)" +.br +.RI "\fIcomputation and setting of the fitness for each individual of the population \fP" +.in -1c +.SS "Private Attributes" + +.in +1c +.ti -1c +.RI "double \fBkappa\fP" +.br +.RI "\fIscaling factor kappa \fP" +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class eoIBEAAvgSorting< EOT, FitnessEval >" +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. +.PP +Definition at line 373 of file eoIBEA.h. +.SH "Constructor & Destructor Documentation" +.PP +.SS "template \fBeoIBEAAvgSorting\fP< EOT, FitnessEval >::\fBeoIBEAAvgSorting\fP (\fBeoBinaryQualityIndicator\fP< FitnessEval > * _I, const double _kappa)\fC [inline]\fP" +.PP +constructor +.PP +\fBParameters:\fP +.RS 4 +\fIeoBinaryQualityIndicator*\fP _I the binary quality indicator to use in the selection process +.br +\fIdouble\fP _kappa scaling factor kappa +.RE +.PP + +.PP +Definition at line 385 of file eoIBEA.h. +.PP +References eoIBEAAvgSorting< EOT, FitnessEval >::kappa. +.SH "Member Function Documentation" +.PP +.SS "template void \fBeoIBEAAvgSorting\fP< EOT, FitnessEval >::setBounds (const \fBeoPop\fP< EOT > & _pop)\fC [inline, private, virtual]\fP" +.PP +computation and setting of the bounds for each objective +.PP +\fBParameters:\fP +.RS 4 +\fIconst\fP eoPop& _pop the population +.RE +.PP + +.PP +Implements \fBeoIBEA< EOT, FitnessEval >\fP. +.PP +Definition at line 413 of file eoIBEA.h. +.SS "template void \fBeoIBEAAvgSorting\fP< EOT, FitnessEval >::fitnesses (const \fBeoPop\fP< EOT > & _pop)\fC [inline, private, virtual]\fP" +.PP +computation and setting of the fitness for each individual of the population +.PP +\fBParameters:\fP +.RS 4 +\fIconst\fP eoPop& _pop the population +.RE +.PP + +.PP +Implements \fBeoIBEA< EOT, FitnessEval >\fP. +.PP +Definition at line 445 of file eoIBEA.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-MOEO from the source code. diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/eoIBEASorting.3 b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/eoIBEASorting.3 new file mode 100644 index 000000000..19388dc1c --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/eoIBEASorting.3 @@ -0,0 +1,101 @@ +.TH "eoIBEASorting" 3 "22 Dec 2006" "Version 0.1" "ParadisEO-MOEO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +eoIBEASorting \- 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 \fBeoParetoFitness\fP object. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBeoIBEA< EOT, Fitness >< EOT, Fitness >\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBeoIBEASorting\fP (\fBeoBinaryQualityIndicator\fP< Fitness > *_I, const double _kappa)" +.br +.RI "\fIconstructor \fP" +.in -1c +.SS "Private Member Functions" + +.in +1c +.ti -1c +.RI "void \fBsetBounds\fP (const \fBeoPop\fP< EOT > &_pop)" +.br +.RI "\fIcomputation and setting of the bounds for each objective \fP" +.ti -1c +.RI "void \fBfitnesses\fP (const \fBeoPop\fP< EOT > &_pop)" +.br +.RI "\fIcomputation and setting of the fitness for each individual of the population \fP" +.in -1c +.SS "Private Attributes" + +.in +1c +.ti -1c +.RI "double \fBkappa\fP" +.br +.RI "\fIscaling factor kappa \fP" +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class eoIBEASorting< EOT, Fitness >" +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 \fBeoParetoFitness\fP object. +.PP +Definition at line 94 of file eoIBEA.h. +.SH "Constructor & Destructor Documentation" +.PP +.SS "template \fBeoIBEASorting\fP< EOT, Fitness >::\fBeoIBEASorting\fP (\fBeoBinaryQualityIndicator\fP< Fitness > * _I, const double _kappa)\fC [inline]\fP" +.PP +constructor +.PP +\fBParameters:\fP +.RS 4 +\fIeoBinaryQualityIndicator*\fP _I the binary quality indicator to use in the selection process +.br +\fIdouble\fP _kappa scaling factor kappa +.RE +.PP + +.PP +Definition at line 106 of file eoIBEA.h. +.PP +References eoIBEASorting< EOT, Fitness >::kappa. +.SH "Member Function Documentation" +.PP +.SS "template void \fBeoIBEASorting\fP< EOT, Fitness >::setBounds (const \fBeoPop\fP< EOT > & _pop)\fC [inline, private, virtual]\fP" +.PP +computation and setting of the bounds for each objective +.PP +\fBParameters:\fP +.RS 4 +\fIconst\fP eoPop& _pop the population +.RE +.PP + +.PP +Implements \fBeoIBEA< EOT, Fitness >\fP. +.PP +Definition at line 134 of file eoIBEA.h. +.SS "template void \fBeoIBEASorting\fP< EOT, Fitness >::fitnesses (const \fBeoPop\fP< EOT > & _pop)\fC [inline, private, virtual]\fP" +.PP +computation and setting of the fitness for each individual of the population +.PP +\fBParameters:\fP +.RS 4 +\fIconst\fP eoPop& _pop the population +.RE +.PP + +.PP +Implements \fBeoIBEA< EOT, Fitness >\fP. +.PP +Definition at line 162 of file eoIBEA.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-MOEO from the source code. diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/eoIBEAStochSorting.3 b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/eoIBEAStochSorting.3 new file mode 100644 index 000000000..9f919b4f0 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/eoIBEAStochSorting.3 @@ -0,0 +1,97 @@ +.TH "eoIBEAStochSorting" 3 "22 Dec 2006" "Version 0.1" "ParadisEO-MOEO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +eoIBEAStochSorting \- 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. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBeoIBEA< EOT, FitnessEval >\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBeoIBEAStochSorting\fP (\fBeoBinaryQualityIndicator\fP< FitnessEval > *_I)" +.br +.RI "\fIconstructor \fP" +.in -1c +.SS "Private Member Functions" + +.in +1c +.ti -1c +.RI "void \fBsetBounds\fP (const \fBeoPop\fP< EOT > &_pop)" +.br +.RI "\fIcomputation and setting of the bounds for each objective \fP" +.ti -1c +.RI "void \fBfitnesses\fP (const \fBeoPop\fP< EOT > &_pop)" +.br +.RI "\fIcomputation and setting of the fitness for each individual of the population \fP" +.in -1c +.SS "Static Private Member Functions" + +.in +1c +.ti -1c +.RI "static double \fBzero\fP ()" +.br +.RI "\fIapproximated zero value \fP" +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class eoIBEAStochSorting< EOT, FitnessEval >" +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. +.PP +Definition at line 215 of file eoIBEA.h. +.SH "Constructor & Destructor Documentation" +.PP +.SS "template \fBeoIBEAStochSorting\fP< EOT, FitnessEval >::\fBeoIBEAStochSorting\fP (\fBeoBinaryQualityIndicator\fP< FitnessEval > * _I)\fC [inline]\fP" +.PP +constructor +.PP +\fBParameters:\fP +.RS 4 +\fIeoBinaryQualityIndicator*\fP _I the binary quality indicator to use in the selection process +.RE +.PP + +.PP +Definition at line 226 of file eoIBEA.h. +.SH "Member Function Documentation" +.PP +.SS "template void \fBeoIBEAStochSorting\fP< EOT, FitnessEval >::setBounds (const \fBeoPop\fP< EOT > & _pop)\fC [inline, private, virtual]\fP" +.PP +computation and setting of the bounds for each objective +.PP +\fBParameters:\fP +.RS 4 +\fIconst\fP eoPop& _pop the population +.RE +.PP + +.PP +Implements \fBeoIBEA< EOT, FitnessEval >\fP. +.PP +Definition at line 258 of file eoIBEA.h. +.SS "template void \fBeoIBEAStochSorting\fP< EOT, FitnessEval >::fitnesses (const \fBeoPop\fP< EOT > & _pop)\fC [inline, private, virtual]\fP" +.PP +computation and setting of the fitness for each individual of the population +.PP +\fBParameters:\fP +.RS 4 +\fIconst\fP eoPop& _pop the population +.RE +.PP + +.PP +Implements \fBeoIBEA< EOT, FitnessEval >\fP. +.PP +Definition at line 286 of file eoIBEA.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-MOEO from the source code. diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/eoParetoEuclidDist.3 b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/eoParetoEuclidDist.3 new file mode 100644 index 000000000..021ac7075 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/eoParetoEuclidDist.3 @@ -0,0 +1,28 @@ +.TH "eoParetoEuclidDist" 3 "22 Dec 2006" "Version 0.1" "ParadisEO-MOEO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +eoParetoEuclidDist \- +.SH SYNOPSIS +.br +.PP +Inherits \fBeoParetoPhenDist< EOT, DistType >< EOT, DistType >\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "DistType \fBoperator()\fP (const EOT &eopf1, const EOT &eopf2)" +.br +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class eoParetoEuclidDist< EOT, DistType >" + +.PP +Definition at line 15 of file eoParetoPhenDist.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-MOEO from the source code. diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/eoParetoPhenDist.3 b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/eoParetoPhenDist.3 new file mode 100644 index 000000000..e901eec51 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/eoParetoPhenDist.3 @@ -0,0 +1,21 @@ +.TH "eoParetoPhenDist" 3 "22 Dec 2006" "Version 0.1" "ParadisEO-MOEO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +eoParetoPhenDist \- +.SH SYNOPSIS +.br +.PP +Inherited by \fBeoParetoEuclidDist< EOT, DistType >\fP. +.PP +.SH "Detailed Description" +.PP + +.SS "template class eoParetoPhenDist< EOT, DistType >" + +.PP +Definition at line 3 of file eoParetoPhenDist.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-MOEO from the source code. diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/eoParetoSharing.3 b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/eoParetoSharing.3 new file mode 100644 index 000000000..080787919 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/eoParetoSharing.3 @@ -0,0 +1,64 @@ +.TH "eoParetoSharing" 3 "22 Dec 2006" "Version 0.1" "ParadisEO-MOEO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +eoParetoSharing \- +.SH SYNOPSIS +.br +.PP +Inherits \fBeoPerf2Worth< EOT, worthT >\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBeoParetoSharing\fP (double _nicheSize)" +.br +.ti -1c +.RI "\fBeoParetoSharing\fP (double _nicheSize, \fBeoParetoPhenDist\fP< EOT, worthT > &_dist)" +.br +.ti -1c +.RI "void \fBoperator\fP ()(const \fBeoPop\fP< EOT > &_pop)" +.br +.in -1c +.SS "Private Member Functions" + +.in +1c +.ti -1c +.RI "double \fBsh\fP (double \fBdist\fP, double \fBDmax\fP)" +.br +.in -1c +.SS "Private Attributes" + +.in +1c +.ti -1c +.RI "double \fBnicheSize\fP" +.br +.ti -1c +.RI "\fBeoParetoPhenDist\fP< EOT, worthT > & \fBdist\fP" +.br +.ti -1c +.RI "\fBeoParetoEuclidDist\fP< EOT > \fBeuc_dist\fP" +.br +.ti -1c +.RI "double \fBDmax\fP" +.br +.in -1c +.SS "Classes" + +.in +1c +.ti -1c +.RI "class \fBdMatrix\fP" +.br +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class eoParetoSharing< EOT, worthT >" + +.PP +Definition at line 9 of file eoParetoSharing.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-MOEO from the source code. diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/eoParetoSharing_dMatrix.3 b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/eoParetoSharing_dMatrix.3 new file mode 100644 index 000000000..5ffca64b3 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/eoParetoSharing_dMatrix.3 @@ -0,0 +1,36 @@ +.TH "eoParetoSharing::dMatrix" 3 "22 Dec 2006" "Version 0.1" "ParadisEO-MOEO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +eoParetoSharing::dMatrix \- +.SH SYNOPSIS +.br +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBdMatrix\fP (unsigned _s)" +.br +.ti -1c +.RI "void \fBprintOn\fP (std::ostream &_os)" +.br +.in -1c +.SS "Private Attributes" + +.in +1c +.ti -1c +.RI "unsigned \fBrSize\fP" +.br +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class eoParetoSharing< EOT, worthT >::dMatrix" + +.PP +Definition at line 99 of file eoParetoSharing.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-MOEO from the source code. diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoAdditiveBinaryEpsilonIndicator.3 b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoAdditiveBinaryEpsilonIndicator.3 new file mode 100644 index 000000000..a776e805e --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoAdditiveBinaryEpsilonIndicator.3 @@ -0,0 +1,91 @@ +.TH "moeoAdditiveBinaryEpsilonIndicator" 3 "16 Jan 2007" "Version 0.1" "ParadisEO-MOEO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moeoAdditiveBinaryEpsilonIndicator \- Functor Additive binary epsilon indicator for \fBeoParetoFitness\fP. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBmoeoBinaryQualityIndicator< EOFitness >< EOFitness >\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBmoeoAdditiveBinaryEpsilonIndicator\fP ()" +.br +.RI "\fIconstructor \fP" +.ti -1c +.RI "double \fBoperator()\fP (const EOFitness &_fitness_eo1, const EOFitness &_fitness_eo2)" +.br +.RI "\fIcomputation 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) \fP" +.in -1c +.SS "Private Types" + +.in +1c +.ti -1c +.RI "typedef EOFitness::fitness_traits \fBtraits\fP" +.br +.RI "\fIfitness traits \fP" +.in -1c +.SS "Private Member Functions" + +.in +1c +.ti -1c +.RI "double \fBepsilonValue\fP (const EOFitness &_fitness_eo1, const EOFitness &_fitness_eo2, const unsigned _iObj)" +.br +.RI "\fIcomputation of the epsilon value by which individual _eo1 must be decreased in the objective _iObj such that individual _eo2 is weakly dominated \fP" +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class moeoAdditiveBinaryEpsilonIndicator< EOFitness >" +Functor Additive binary epsilon indicator for \fBeoParetoFitness\fP. +.PP +Definition at line 115 of file moeoBinaryQualityIndicator.h. +.SH "Member Function Documentation" +.PP +.SS "template double \fBmoeoAdditiveBinaryEpsilonIndicator\fP< EOFitness >::operator() (const EOFitness & _fitness_eo1, const EOFitness & _fitness_eo2)\fC [inline]\fP" +.PP +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) +.PP +\fBParameters:\fP +.RS 4 +\fIEOFitness\fP & _fitness_eo1 the fitness of the first individual +.br +\fIEOFitness\fP & _fitness_eo2 the fitness of the second individual +.RE +.PP + +.PP +Definition at line 138 of file moeoBinaryQualityIndicator.h. +.PP +References moeoAdditiveBinaryEpsilonIndicator< EOFitness >::epsilonValue(). +.SS "template double \fBmoeoAdditiveBinaryEpsilonIndicator\fP< EOFitness >::epsilonValue (const EOFitness & _fitness_eo1, const EOFitness & _fitness_eo2, const unsigned _iObj)\fC [inline, private]\fP" +.PP +computation of the epsilon value by which individual _eo1 must be decreased in the objective _iObj such that individual _eo2 is weakly dominated +.PP +\fBParameters:\fP +.RS 4 +\fIEOFitness\fP & _fitness_eo1 the fitness of the first individual +.br +\fIEOFitness\fP & _fitness_eo2 the fitness of the second individual +.br +\fIunsigned\fP _iObj the index of the objective +.RE +.PP + +.PP +Definition at line 170 of file moeoBinaryQualityIndicator.h. +.PP +References moeoBinaryQualityIndicator< EOFitness >::bounds. +.PP +Referenced by moeoAdditiveBinaryEpsilonIndicator< EOFitness >::operator()(). + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-MOEO from the source code. diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoArchive.3 b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoArchive.3 new file mode 100644 index 000000000..1b79a1730 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoArchive.3 @@ -0,0 +1,111 @@ +.TH "moeoArchive" 3 "16 Jan 2007" "Version 0.1" "ParadisEO-MOEO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moeoArchive \- An archive is a secondary population that stores non-dominated solutions. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBeoPop< EOT >< EOT >\fP. +.PP +.SS "Public Types" + +.in +1c +.ti -1c +.RI "typedef EOT::Fitness \fBEOFitness\fP" +.br +.RI "\fIThe fitness type of a solution. \fP" +.in -1c +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "bool \fBdominates\fP (const \fBEOFitness\fP &_fit) const" +.br +.RI "\fIReturns true if the current archive dominates _fit. \fP" +.ti -1c +.RI "bool \fBcontains\fP (const \fBEOFitness\fP &_fit) const" +.br +.RI "\fIReturns true if the current archive contains _fit. \fP" +.ti -1c +.RI "void \fBupdate\fP (const EOT &_eo)" +.br +.RI "\fIUpdates the archive with a given individual _eo. \fP" +.ti -1c +.RI "void \fBupdate\fP (const \fBeoPop\fP< EOT > &_pop)" +.br +.RI "\fIUpdates the archive with a given population _pop. \fP" +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class moeoArchive< EOT >" +An archive is a secondary population that stores non-dominated solutions. +.PP +Definition at line 21 of file moeoArchive.h. +.SH "Member Function Documentation" +.PP +.SS "template bool \fBmoeoArchive\fP< EOT >::dominates (const \fBEOFitness\fP & _fit) const\fC [inline]\fP" +.PP +Returns true if the current archive dominates _fit. +.PP +\fBParameters:\fP +.RS 4 +\fI_fit\fP the (Pareto) fitness to compare with the current archive +.RE +.PP + +.PP +Definition at line 39 of file moeoArchive.h. +.PP +Referenced by moeoArchive< EOT >::update(). +.SS "template bool \fBmoeoArchive\fP< EOT >::contains (const \fBEOFitness\fP & _fit) const\fC [inline]\fP" +.PP +Returns true if the current archive contains _fit. +.PP +\fBParameters:\fP +.RS 4 +\fI_fit\fP the (Pareto) fitness to search within the current archive +.RE +.PP + +.PP +Definition at line 51 of file moeoArchive.h. +.SS "template void \fBmoeoArchive\fP< EOT >::update (const EOT & _eo)\fC [inline]\fP" +.PP +Updates the archive with a given individual _eo. +.PP +\fBParameters:\fP +.RS 4 +\fI_eo\fP the given individual +.RE +.PP + +.PP +Definition at line 63 of file moeoArchive.h. +.PP +References moeoArchive< EOT >::dominates(). +.PP +Referenced by moeoArchive< EOT >::update(). +.SS "template void \fBmoeoArchive\fP< EOT >::update (const \fBeoPop\fP< EOT > & _pop)\fC [inline]\fP" +.PP +Updates the archive with a given population _pop. +.PP +\fBParameters:\fP +.RS 4 +\fI_pop\fP the given population +.RE +.PP + +.PP +Definition at line 98 of file moeoArchive.h. +.PP +References moeoArchive< EOT >::update(). + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-MOEO from the source code. diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoArchiveFitnessSavingUpdater.3 b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoArchiveFitnessSavingUpdater.3 new file mode 100644 index 000000000..1645a3071 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoArchiveFitnessSavingUpdater.3 @@ -0,0 +1,75 @@ +.TH "moeoArchiveFitnessSavingUpdater" 3 "16 Jan 2007" "Version 0.1" "ParadisEO-MOEO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moeoArchiveFitnessSavingUpdater \- This class allows to save the fitnesses of solutions contained in an archive into a file at each generation. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBeoUpdater\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBmoeoArchiveFitnessSavingUpdater\fP (\fBmoeoArchive\fP< EOT > &_arch, const std::string &_filename='Res/Arch', int _id=-1)" +.br +.RI "\fICtor. \fP" +.ti -1c +.RI "void \fBoperator()\fP ()" +.br +.RI "\fISaves the fitness of the archive's members into the file. \fP" +.in -1c +.SS "Private Attributes" + +.in +1c +.ti -1c +.RI "\fBmoeoArchive\fP< EOT > & \fBarch\fP" +.br +.RI "\fIlocal archive \fP" +.ti -1c +.RI "std::string \fBfilename\fP" +.br +.RI "\fItarget filename \fP" +.ti -1c +.RI "int \fBid\fP" +.br +.RI "\fIown ID \fP" +.ti -1c +.RI "unsigned \fBcounter\fP" +.br +.RI "\fIcounter \fP" +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class moeoArchiveFitnessSavingUpdater< EOT >" +This class allows to save the fitnesses of solutions contained in an archive into a file at each generation. +.PP +Definition at line 27 of file moeoArchiveFitnessSavingUpdater.h. +.SH "Constructor & Destructor Documentation" +.PP +.SS "template \fBmoeoArchiveFitnessSavingUpdater\fP< EOT >::\fBmoeoArchiveFitnessSavingUpdater\fP (\fBmoeoArchive\fP< EOT > & _arch, const std::string & _filename = \fC'Res/Arch'\fP, int _id = \fC-1\fP)\fC [inline]\fP" +.PP +Ctor. +.PP +\fBParameters:\fP +.RS 4 +\fI_arch\fP local archive +.br +\fI_filename\fP target filename +.br +\fI_id\fP own ID +.RE +.PP + +.PP +Definition at line 37 of file moeoArchiveFitnessSavingUpdater.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-MOEO from the source code. diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoArchiveUpdater.3 b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoArchiveUpdater.3 new file mode 100644 index 000000000..0b002ea0a --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoArchiveUpdater.3 @@ -0,0 +1,65 @@ +.TH "moeoArchiveUpdater" 3 "16 Jan 2007" "Version 0.1" "ParadisEO-MOEO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moeoArchiveUpdater \- This class allows to update the archive at each generation with newly found non-dominated solutions. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBeoUpdater\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBmoeoArchiveUpdater\fP (\fBmoeoArchive\fP< EOT > &_arch, const \fBeoPop\fP< EOT > &_pop)" +.br +.RI "\fICtor. \fP" +.ti -1c +.RI "void \fBoperator()\fP ()" +.br +.RI "\fIUpdates the archive with newly found non-dominated solutions contained in the main population. \fP" +.in -1c +.SS "Private Attributes" + +.in +1c +.ti -1c +.RI "\fBmoeoArchive\fP< EOT > & \fBarch\fP" +.br +.RI "\fIthe archive of non-dominated solutions \fP" +.ti -1c +.RI "const \fBeoPop\fP< EOT > & \fBpop\fP" +.br +.RI "\fIthe main population \fP" +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class moeoArchiveUpdater< EOT >" +This class allows to update the archive at each generation with newly found non-dominated solutions. +.PP +Definition at line 23 of file moeoArchiveUpdater.h. +.SH "Constructor & Destructor Documentation" +.PP +.SS "template \fBmoeoArchiveUpdater\fP< EOT >::\fBmoeoArchiveUpdater\fP (\fBmoeoArchive\fP< EOT > & _arch, const \fBeoPop\fP< EOT > & _pop)\fC [inline]\fP" +.PP +Ctor. +.PP +\fBParameters:\fP +.RS 4 +\fI_arch\fP an archive of non-dominated solutions +.br +\fI_pop\fP the main population +.RE +.PP + +.PP +Definition at line 32 of file moeoArchiveUpdater.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-MOEO from the source code. diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoBM.3 b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoBM.3 new file mode 100644 index 000000000..52fdf7aca --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoBM.3 @@ -0,0 +1,27 @@ +.TH "moeoBM" 3 "16 Jan 2007" "Version 0.1" "ParadisEO-MOEO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moeoBM \- Base class for binary metrics. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBeoBF< A1, A2, R >< A1, A2, R >\fP, and \fBmoeoMetric\fP. +.PP +Inherited by \fBmoeoSolutionVsSolutionBM< EOT, R, EOFitness >\fP, \fBmoeoVectorVsSolutionBM< EOT, R, EOFitness >\fP, \fBmoeoVectorVsVectorBM< EOT, R, EOFitness >\fP, and \fBmoeoVectorVsVectorBM< EOT, double >\fP. +.PP +.SH "Detailed Description" +.PP + +.SS "template class moeoBM< A1, A2, R >" +Base class for binary metrics. +.PP +Definition at line 38 of file moeoMetric.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-MOEO from the source code. diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoBinaryHypervolumeIndicator.3 b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoBinaryHypervolumeIndicator.3 new file mode 100644 index 000000000..4b3abca42 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoBinaryHypervolumeIndicator.3 @@ -0,0 +1,169 @@ +.TH "moeoBinaryHypervolumeIndicator" 3 "16 Jan 2007" "Version 0.1" "ParadisEO-MOEO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moeoBinaryHypervolumeIndicator \- Functor Binary hypervolume indicator for \fBeoParetoFitness\fP. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBmoeoBinaryQualityIndicator< EOFitness >< EOFitness >\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBmoeoBinaryHypervolumeIndicator\fP (double _rho)" +.br +.RI "\fIconstructor \fP" +.ti -1c +.RI "double \fBoperator()\fP (const EOFitness &_fitness_eo1, const EOFitness &_fitness_eo2)" +.br +.RI "\fIindicator 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) \fP" +.in -1c +.SS "Private Types" + +.in +1c +.ti -1c +.RI "typedef EOFitness::fitness_traits \fBtraits\fP" +.br +.RI "\fIfitness traits \fP" +.in -1c +.SS "Private Member Functions" + +.in +1c +.ti -1c +.RI "double \fBhypervolumeIndicatorValue\fP (const EOFitness &_fitness_eo1, const EOFitness &_fitness_eo2, const unsigned _iObj, const bool _flag=false)" +.br +.RI "\fIcomputation of the hypervolume of the portion of the objective space that is dominated by individual _eo1 but not by individual _eo2 \fP" +.ti -1c +.RI "double \fBhypervolumeIndicatorValueMin\fP (const EOFitness &_fitness_eo1, const EOFitness &_fitness_eo2, const unsigned _iObj, const bool _flag)" +.br +.RI "\fIcomputation 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 \fP" +.ti -1c +.RI "double \fBhypervolumeIndicatorValueMax\fP (const EOFitness &_fitness_eo1, const EOFitness &_fitness_eo2, const unsigned _iObj, const bool _flag)" +.br +.RI "\fIcomputation 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 \fP" +.in -1c +.SS "Private Attributes" + +.in +1c +.ti -1c +.RI "double \fBrho\fP" +.br +.RI "\fIreference point for the hypervolume calculation \fP" +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class moeoBinaryHypervolumeIndicator< EOFitness >" +Functor Binary hypervolume indicator for \fBeoParetoFitness\fP. +.PP +Definition at line 206 of file moeoBinaryQualityIndicator.h. +.SH "Constructor & Destructor Documentation" +.PP +.SS "template \fBmoeoBinaryHypervolumeIndicator\fP< EOFitness >::\fBmoeoBinaryHypervolumeIndicator\fP (double _rho)\fC [inline]\fP" +.PP +constructor +.PP +\fBParameters:\fP +.RS 4 +\fIdouble\fP _rho reference point for the hypervolume calculation (rho must not be smaller than 1) +.RE +.PP + +.PP +Definition at line 216 of file moeoBinaryQualityIndicator.h. +.PP +References moeoBinaryHypervolumeIndicator< EOFitness >::rho. +.SH "Member Function Documentation" +.PP +.SS "template double \fBmoeoBinaryHypervolumeIndicator\fP< EOFitness >::operator() (const EOFitness & _fitness_eo1, const EOFitness & _fitness_eo2)\fC [inline]\fP" +.PP +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) +.PP +\fBParameters:\fP +.RS 4 +\fIEOFitness\fP & _fitness_eo1 the fitness of the first individual +.br +\fIEOFitness\fP & _fitness_eo2 the fitness of the second individual +.RE +.PP + +.PP +Definition at line 239 of file moeoBinaryQualityIndicator.h. +.PP +References moeoBinaryHypervolumeIndicator< EOFitness >::hypervolumeIndicatorValue(). +.SS "template double \fBmoeoBinaryHypervolumeIndicator\fP< EOFitness >::hypervolumeIndicatorValue (const EOFitness & _fitness_eo1, const EOFitness & _fitness_eo2, const unsigned _iObj, const bool _flag = \fCfalse\fP)\fC [inline, private]\fP" +.PP +computation of the hypervolume of the portion of the objective space that is dominated by individual _eo1 but not by individual _eo2 +.PP +\fBParameters:\fP +.RS 4 +\fIEOFitness\fP & _fitness_eo1 the fitness of the first individual +.br +\fIEOFitness\fP & _fitness_eo2 the fitness of the second individual +.br +\fIunsigned\fP _iObj number of objectives (used for iteration) +.br +\fIbool\fP _flag = false (only used for iteration) +.RE +.PP + +.PP +Definition at line 274 of file moeoBinaryQualityIndicator.h. +.PP +References moeoBinaryQualityIndicator< EOFitness >::bounds, moeoBinaryHypervolumeIndicator< EOFitness >::hypervolumeIndicatorValueMax(), and moeoBinaryHypervolumeIndicator< EOFitness >::hypervolumeIndicatorValueMin(). +.PP +Referenced by moeoBinaryHypervolumeIndicator< EOFitness >::hypervolumeIndicatorValueMax(), moeoBinaryHypervolumeIndicator< EOFitness >::hypervolumeIndicatorValueMin(), and moeoBinaryHypervolumeIndicator< EOFitness >::operator()(). +.SS "template double \fBmoeoBinaryHypervolumeIndicator\fP< EOFitness >::hypervolumeIndicatorValueMin (const EOFitness & _fitness_eo1, const EOFitness & _fitness_eo2, const unsigned _iObj, const bool _flag)\fC [inline, private]\fP" +.PP +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 +.PP +\fBParameters:\fP +.RS 4 +\fIEOFitness\fP & _fitness_eo1 the fitness of the first individual +.br +\fIEOFitness\fP & _fitness_eo2 the fitness of the second individual +.br +\fIunsigned\fP _iObj index of the objective +.br +\fIbool\fP _flag (only used for iteration) +.RE +.PP + +.PP +Definition at line 309 of file moeoBinaryQualityIndicator.h. +.PP +References moeoBinaryQualityIndicator< EOFitness >::bounds, moeoBinaryHypervolumeIndicator< EOFitness >::hypervolumeIndicatorValue(), and moeoBinaryHypervolumeIndicator< EOFitness >::rho. +.PP +Referenced by moeoBinaryHypervolumeIndicator< EOFitness >::hypervolumeIndicatorValue(). +.SS "template double \fBmoeoBinaryHypervolumeIndicator\fP< EOFitness >::hypervolumeIndicatorValueMax (const EOFitness & _fitness_eo1, const EOFitness & _fitness_eo2, const unsigned _iObj, const bool _flag)\fC [inline, private]\fP" +.PP +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 +.PP +\fBParameters:\fP +.RS 4 +\fIEOFitness\fP & _fitness_eo1 the fitness of the first individual +.br +\fIEOFitness\fP & _fitness_eo2 the fitness of the second individual +.br +\fIunsigned\fP _iObj index of the objective +.br +\fIbool\fP _flag (only used for iteration) +.RE +.PP + +.PP +Definition at line 363 of file moeoBinaryQualityIndicator.h. +.PP +References moeoBinaryQualityIndicator< EOFitness >::bounds, moeoBinaryHypervolumeIndicator< EOFitness >::hypervolumeIndicatorValue(), and moeoBinaryHypervolumeIndicator< EOFitness >::rho. +.PP +Referenced by moeoBinaryHypervolumeIndicator< EOFitness >::hypervolumeIndicatorValue(). + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-MOEO from the source code. diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoBinaryMetricSavingUpdater.3 b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoBinaryMetricSavingUpdater.3 new file mode 100644 index 000000000..e994b6b76 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoBinaryMetricSavingUpdater.3 @@ -0,0 +1,91 @@ +.TH "moeoBinaryMetricSavingUpdater" 3 "16 Jan 2007" "Version 0.1" "ParadisEO-MOEO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moeoBinaryMetricSavingUpdater \- 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. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBeoUpdater\fP. +.PP +.SS "Public Types" + +.in +1c +.ti -1c +.RI "typedef EOT::Fitness \fBEOFitness\fP" +.br +.RI "\fIThe fitness type of a solution. \fP" +.in -1c +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBmoeoBinaryMetricSavingUpdater\fP (\fBmoeoVectorVsVectorBM\fP< EOT, double > &_metric, const \fBeoPop\fP< EOT > &_pop, std::string _filename)" +.br +.RI "\fICtor. \fP" +.ti -1c +.RI "void \fBoperator()\fP ()" +.br +.RI "\fISaves the metric's value for the current generation. \fP" +.in -1c +.SS "Private Attributes" + +.in +1c +.ti -1c +.RI "\fBmoeoVectorVsVectorBM\fP< EOT, double > & \fBmetric\fP" +.br +.RI "\fIbinary metric comparing two Pareto sets \fP" +.ti -1c +.RI "const \fBeoPop\fP< EOT > & \fBpop\fP" +.br +.RI "\fImain population \fP" +.ti -1c +.RI "\fBeoPop\fP< EOT > \fBoldPop\fP" +.br +.RI "\fI(n-1) population \fP" +.ti -1c +.RI "std::string \fBfilename\fP" +.br +.RI "\fItarget filename \fP" +.ti -1c +.RI "bool \fBfirstGen\fP" +.br +.RI "\fIis it the first generation ? \fP" +.ti -1c +.RI "unsigned \fBcounter\fP" +.br +.RI "\fIcounter \fP" +.in -1c +.SH "Detailed Description" +.PP + +.SS "template 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. +.PP +Definition at line 26 of file moeoBinaryMetricSavingUpdater.h. +.SH "Constructor & Destructor Documentation" +.PP +.SS "template \fBmoeoBinaryMetricSavingUpdater\fP< EOT >::\fBmoeoBinaryMetricSavingUpdater\fP (\fBmoeoVectorVsVectorBM\fP< EOT, double > & _metric, const \fBeoPop\fP< EOT > & _pop, std::string _filename)\fC [inline]\fP" +.PP +Ctor. +.PP +\fBParameters:\fP +.RS 4 +\fI_metric\fP the binary metric comparing two Pareto sets +.br +\fI_pop\fP the main population +.br +\fI_filename\fP the target filename +.RE +.PP + +.PP +Definition at line 41 of file moeoBinaryMetricSavingUpdater.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-MOEO from the source code. diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoBinaryQualityIndicator.3 b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoBinaryQualityIndicator.3 new file mode 100644 index 000000000..7b806b8b4 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoBinaryQualityIndicator.3 @@ -0,0 +1,83 @@ +.TH "moeoBinaryQualityIndicator" 3 "16 Jan 2007" "Version 0.1" "ParadisEO-MOEO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moeoBinaryQualityIndicator \- 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 \fBeoParetoFitness\fP object. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBeoBF< A1, A2, R >< const const EOFitness &, EOFitness &, double >\fP. +.PP +Inherited by \fBmoeoAdditiveBinaryEpsilonIndicator< EOFitness >\fP, and \fBmoeoBinaryHypervolumeIndicator< EOFitness >\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBmoeoBinaryQualityIndicator\fP ()" +.br +.RI "\fIconstructor \fP" +.ti -1c +.RI "void \fBsetBounds\fP (const unsigned _iObj, const double _min, const double _max)" +.br +.RI "\fIset the bounds for objective _iObj \fP" +.in -1c +.SS "Protected Attributes" + +.in +1c +.ti -1c +.RI "std::vector< \fBRange\fP > \fBbounds\fP" +.br +.RI "\fIrange (min and max double value) for each objective \fP" +.in -1c +.SS "Private Types" + +.in +1c +.ti -1c +.RI "typedef EOFitness::fitness_traits \fBtraits\fP" +.br +.RI "\fIfitness traits \fP" +.in -1c +.SS "Classes" + +.in +1c +.ti -1c +.RI "class \fBRange\fP" +.br +.RI "\fIPrivate class to represent the bounds. \fP" +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class moeoBinaryQualityIndicator< EOFitness >" +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 \fBeoParetoFitness\fP object. +.PP +Definition at line 28 of file moeoBinaryQualityIndicator.h. +.SH "Member Function Documentation" +.PP +.SS "template void \fBmoeoBinaryQualityIndicator\fP< EOFitness >::setBounds (const unsigned _iObj, const double _min, const double _max)\fC [inline]\fP" +.PP +set the bounds for objective _iObj +.PP +\fBParameters:\fP +.RS 4 +\fIunsigned\fP _iObj the index of the objective +.br +\fIdouble\fP _min the minimum value +.br +\fIdouble\fP _max the maximum value +.RE +.PP + +.PP +Definition at line 51 of file moeoBinaryQualityIndicator.h. +.PP +Referenced by moeoIBEAAvgSorting< EOT, FitnessEval >::setBounds(), moeoIBEAStochSorting< EOT, FitnessEval >::setBounds(), and moeoIBEASorting< EOT, Fitness >::setBounds(). + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-MOEO from the source code. diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoBinaryQualityIndicator_Range.3 b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoBinaryQualityIndicator_Range.3 new file mode 100644 index 000000000..8a45f2ac6 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoBinaryQualityIndicator_Range.3 @@ -0,0 +1,55 @@ +.TH "moeoBinaryQualityIndicator::Range" 3 "16 Jan 2007" "Version 0.1" "ParadisEO-MOEO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moeoBinaryQualityIndicator::Range \- Private class to represent the bounds. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBRange\fP ()" +.br +.ti -1c +.RI "\fBRange\fP (const double _min, const double _max)" +.br +.ti -1c +.RI "double \fBminimum\fP ()" +.br +.ti -1c +.RI "double \fBmaximum\fP ()" +.br +.ti -1c +.RI "double \fBrange\fP ()" +.br +.in -1c +.SS "Private Attributes" + +.in +1c +.ti -1c +.RI "double \fBmin\fP" +.br +.ti -1c +.RI "double \fBmax\fP" +.br +.ti -1c +.RI "double \fBr\fP" +.br +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class moeoBinaryQualityIndicator< EOFitness >::Range" +Private class to represent the bounds. +.PP +Definition at line 62 of file moeoBinaryQualityIndicator.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-MOEO from the source code. diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoCombinedMOLS.3 b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoCombinedMOLS.3 new file mode 100644 index 000000000..83ec057f2 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoCombinedMOLS.3 @@ -0,0 +1,107 @@ +.TH "moeoCombinedMOLS" 3 "16 Jan 2007" "Version 0.1" "ParadisEO-MOEO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moeoCombinedMOLS \- 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. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBmoeoMOLS< EOT >< EOT >\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBmoeoCombinedMOLS\fP (\fBeoEvalFunc\fP< EOT > &_eval, \fBmoeoMOLS\fP< EOT > &_first_ls)" +.br +.RI "\fICtor. \fP" +.ti -1c +.RI "void \fBadd\fP (\fBmoeoMOLS\fP< EOT > &_ls)" +.br +.RI "\fIAdds a new local search to combine. \fP" +.ti -1c +.RI "void \fBoperator()\fP (const EOT &_eo, \fBmoeoArchive\fP< EOT > &_arch)" +.br +.RI "\fIGives a new solution in order to explore the neigborhood. \fP" +.in -1c +.SS "Private Attributes" + +.in +1c +.ti -1c +.RI "\fBeoEvalFunc\fP< EOT > & \fBeval\fP" +.br +.RI "\fIthe full evaluator of a solution \fP" +.ti -1c +.RI "std::vector< \fBmoeoMOLS\fP< EOT > * > \fBcombinedMOLS\fP" +.br +.RI "\fIthe vector that contains the combined MOLS \fP" +.in -1c +.SH "Detailed Description" +.PP + +.SS "template 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. +.PP +Definition at line 24 of file moeoCombinedMOLS.h. +.SH "Constructor & Destructor Documentation" +.PP +.SS "template \fBmoeoCombinedMOLS\fP< EOT >::\fBmoeoCombinedMOLS\fP (\fBeoEvalFunc\fP< EOT > & _eval, \fBmoeoMOLS\fP< EOT > & _first_ls)\fC [inline]\fP" +.PP +Ctor. +.PP +\fBParameters:\fP +.RS 4 +\fI_eval\fP the full evaluator of a solution +.br +\fI_first_ls\fP the first multi-objective local search to add +.RE +.PP + +.PP +Definition at line 33 of file moeoCombinedMOLS.h. +.PP +References moeoCombinedMOLS< EOT >::combinedMOLS. +.SH "Member Function Documentation" +.PP +.SS "template void \fBmoeoCombinedMOLS\fP< EOT >::add (\fBmoeoMOLS\fP< EOT > & _ls)\fC [inline]\fP" +.PP +Adds a new local search to combine. +.PP +\fBParameters:\fP +.RS 4 +\fI_ls\fP the multi-objective local search to add +.RE +.PP + +.PP +Definition at line 43 of file moeoCombinedMOLS.h. +.PP +References moeoCombinedMOLS< EOT >::combinedMOLS. +.SS "template void \fBmoeoCombinedMOLS\fP< EOT >::operator() (const EOT & _eo, \fBmoeoArchive\fP< EOT > & _arch)\fC [inline, virtual]\fP" +.PP +Gives a new solution in order to explore the neigborhood. +.PP +The new non-dominated solutions are added to the archive +.PP +\fBParameters:\fP +.RS 4 +\fI_eo\fP the solution +.br +\fI_arch\fP the archive of non-dominated solutions +.RE +.PP + +.PP +Implements \fBeoBF< const EOT &, moeoArchive< EOT > &, void >\fP. +.PP +Definition at line 54 of file moeoCombinedMOLS.h. +.PP +References moeoCombinedMOLS< EOT >::combinedMOLS, and moeoCombinedMOLS< EOT >::eval. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-MOEO from the source code. diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoContributionMetric.3 b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoContributionMetric.3 new file mode 100644 index 000000000..5e4aa5f0d --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoContributionMetric.3 @@ -0,0 +1,125 @@ +.TH "moeoContributionMetric" 3 "16 Jan 2007" "Version 0.1" "ParadisEO-MOEO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moeoContributionMetric \- The contribution metric evaluates the proportion of non-dominated solutions given by a Pareto set relatively to another Pareto set. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBmoeoVectorVsVectorBM< EOT, double >\fP. +.PP +.SS "Public Types" + +.in +1c +.ti -1c +.RI "typedef EOT::Fitness \fBEOFitness\fP" +.br +.RI "\fIThe fitness type of a solution. \fP" +.in -1c +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "double \fBoperator()\fP (const std::vector< \fBEOFitness\fP > &_set1, const std::vector< \fBEOFitness\fP > &_set2)" +.br +.RI "\fIReturns the contribution of the Pareto set '_set1' relatively to the Pareto set '_set2'. \fP" +.in -1c +.SS "Private Member Functions" + +.in +1c +.ti -1c +.RI "unsigned \fBcard_C\fP (const std::vector< \fBEOFitness\fP > &_set1, const std::vector< \fBEOFitness\fP > &_set2)" +.br +.RI "\fIReturns the number of solutions both in '_set1' and '_set2'. \fP" +.ti -1c +.RI "unsigned \fBcard_W\fP (const std::vector< \fBEOFitness\fP > &_set1, const std::vector< \fBEOFitness\fP > &_set2)" +.br +.RI "\fIReturns the number of solutions in '_set1' dominating at least one solution of '_set2'. \fP" +.ti -1c +.RI "unsigned \fBcard_N\fP (const std::vector< \fBEOFitness\fP > &_set1, const std::vector< \fBEOFitness\fP > &_set2)" +.br +.RI "\fIReturns the number of solutions in '_set1' having no relation of dominance with those from '_set2'. \fP" +.in -1c +.SH "Detailed Description" +.PP + +.SS "template 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) +.PP +Definition at line 23 of file moeoContributionMetric.h. +.SH "Member Function Documentation" +.PP +.SS "template double \fBmoeoContributionMetric\fP< EOT >::operator() (const std::vector< \fBEOFitness\fP > & _set1, const std::vector< \fBEOFitness\fP > & _set2)\fC [inline]\fP" +.PP +Returns the contribution of the Pareto set '_set1' relatively to the Pareto set '_set2'. +.PP +\fBParameters:\fP +.RS 4 +\fI_set1\fP the first Pareto set +.br +\fI_set2\fP the second Pareto set +.RE +.PP + +.PP +Definition at line 38 of file moeoContributionMetric.h. +.PP +References moeoContributionMetric< EOT >::card_C(), moeoContributionMetric< EOT >::card_N(), and moeoContributionMetric< EOT >::card_W(). +.SS "template unsigned \fBmoeoContributionMetric\fP< EOT >::card_C (const std::vector< \fBEOFitness\fP > & _set1, const std::vector< \fBEOFitness\fP > & _set2)\fC [inline, private]\fP" +.PP +Returns the number of solutions both in '_set1' and '_set2'. +.PP +\fBParameters:\fP +.RS 4 +\fI_set1\fP the first Pareto set +.br +\fI_set2\fP the second Pareto set +.RE +.PP + +.PP +Definition at line 57 of file moeoContributionMetric.h. +.PP +Referenced by moeoContributionMetric< EOT >::operator()(). +.SS "template unsigned \fBmoeoContributionMetric\fP< EOT >::card_W (const std::vector< \fBEOFitness\fP > & _set1, const std::vector< \fBEOFitness\fP > & _set2)\fC [inline, private]\fP" +.PP +Returns the number of solutions in '_set1' dominating at least one solution of '_set2'. +.PP +\fBParameters:\fP +.RS 4 +\fI_set1\fP the first Pareto set +.br +\fI_set2\fP the second Pareto set +.RE +.PP + +.PP +Definition at line 76 of file moeoContributionMetric.h. +.PP +Referenced by moeoContributionMetric< EOT >::operator()(). +.SS "template unsigned \fBmoeoContributionMetric\fP< EOT >::card_N (const std::vector< \fBEOFitness\fP > & _set1, const std::vector< \fBEOFitness\fP > & _set2)\fC [inline, private]\fP" +.PP +Returns the number of solutions in '_set1' having no relation of dominance with those from '_set2'. +.PP +\fBParameters:\fP +.RS 4 +\fI_set1\fP the first Pareto set +.br +\fI_set2\fP the second Pareto set +.RE +.PP + +.PP +Definition at line 95 of file moeoContributionMetric.h. +.PP +Referenced by moeoContributionMetric< EOT >::operator()(). + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-MOEO from the source code. diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoDisctinctElitistReplacement.3 b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoDisctinctElitistReplacement.3 new file mode 100644 index 000000000..17eef2982 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoDisctinctElitistReplacement.3 @@ -0,0 +1,105 @@ +.TH "moeoDisctinctElitistReplacement" 3 "16 Jan 2007" "Version 0.1" "ParadisEO-MOEO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moeoDisctinctElitistReplacement \- Same than \fBmoeoElitistReplacement\fP except that distinct individuals are privilegied. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBmoeoReplacement< EOT, WorthT >< EOT, WorthT >\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBmoeoDisctinctElitistReplacement\fP (\fBeoPerf2Worth\fP< EOT, WorthT > &_perf2worth)" +.br +.RI "\fIconstructor \fP" +.ti -1c +.RI "void \fBoperator()\fP (\fBeoPop\fP< EOT > &_parents, \fBeoPop\fP< EOT > &_offspring)" +.br +.RI "\fIreplacement - result in _parents \fP" +.in -1c +.SS "Private Member Functions" + +.in +1c +.ti -1c +.RI "void \fBcreateNewPop\fP (\fBeoPop\fP< EOT > &_pop, unsigned _size)" +.br +.RI "\fIcreation of the new population of size _size \fP" +.in -1c +.SS "Private Attributes" + +.in +1c +.ti -1c +.RI "\fBeoPerf2Worth\fP< EOT, WorthT > & \fBperf2worth\fP" +.br +.RI "\fIthe functor object to transform raw fitnesses into fitness for selection \fP" +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class moeoDisctinctElitistReplacement< EOT, WorthT >" +Same than \fBmoeoElitistReplacement\fP except that distinct individuals are privilegied. +.PP +Definition at line 78 of file moeoReplacement.h. +.SH "Constructor & Destructor Documentation" +.PP +.SS "template \fBmoeoDisctinctElitistReplacement\fP< EOT, WorthT >::\fBmoeoDisctinctElitistReplacement\fP (\fBeoPerf2Worth\fP< EOT, WorthT > & _perf2worth)\fC [inline]\fP" +.PP +constructor +.PP +\fBParameters:\fP +.RS 4 +\fI_perf2worth\fP the functor class to transform raw fitnesses into fitness for selection +.RE +.PP + +.PP +Definition at line 87 of file moeoReplacement.h. +.SH "Member Function Documentation" +.PP +.SS "template void \fBmoeoDisctinctElitistReplacement\fP< EOT, WorthT >::operator() (\fBeoPop\fP< EOT > & _parents, \fBeoPop\fP< EOT > & _offspring)\fC [inline, virtual]\fP" +.PP +replacement - result in _parents +.PP +\fBParameters:\fP +.RS 4 +\fI_parents\fP parents population +.br +\fI_offspring\fP offspring population +.RE +.PP + +.PP +Implements \fBeoBF< eoPop< EOT > &, eoPop< EOT > &, void >\fP. +.PP +Definition at line 99 of file moeoReplacement.h. +.PP +References moeoDisctinctElitistReplacement< EOT, WorthT >::createNewPop(). +.SS "template void \fBmoeoDisctinctElitistReplacement\fP< EOT, WorthT >::createNewPop (\fBeoPop\fP< EOT > & _pop, unsigned _size)\fC [inline, private]\fP" +.PP +creation of the new population of size _size +.PP +\fBParameters:\fP +.RS 4 +\fI_pop\fP the initial population (will be modified) +.br +\fI_size\fP the size of the population to create +.RE +.PP + +.PP +Definition at line 123 of file moeoReplacement.h. +.PP +References moeoDisctinctElitistReplacement< EOT, WorthT >::perf2worth, and eoPop< EOT >::swap(). +.PP +Referenced by moeoDisctinctElitistReplacement< EOT, WorthT >::operator()(). + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-MOEO from the source code. diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoElitistReplacement.3 b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoElitistReplacement.3 new file mode 100644 index 000000000..5cf7c8d5f --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoElitistReplacement.3 @@ -0,0 +1,77 @@ +.TH "moeoElitistReplacement" 3 "16 Jan 2007" "Version 0.1" "ParadisEO-MOEO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moeoElitistReplacement \- Keep all the best individuals (almost cut-and-pasted from \fBeoNDPlusReplacement\fP, (c) Maarten Keijzer, Marc Schoenauer and GeNeura Team, 2002). + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBmoeoReplacement< EOT, WorthT >< EOT, WorthT >\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBmoeoElitistReplacement\fP (\fBeoPerf2Worth\fP< EOT, WorthT > &_perf2worth)" +.br +.RI "\fIconstructor \fP" +.ti -1c +.RI "void \fBoperator()\fP (\fBeoPop\fP< EOT > &_parents, \fBeoPop\fP< EOT > &_offspring)" +.br +.RI "\fIreplacement - result in _parents \fP" +.in -1c +.SS "Private Attributes" + +.in +1c +.ti -1c +.RI "\fBeoPerf2Worth\fP< EOT, WorthT > & \fBperf2worth\fP" +.br +.RI "\fIthe functor object to transform raw fitnesses into fitness for selection \fP" +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class moeoElitistReplacement< EOT, WorthT >" +Keep all the best individuals (almost cut-and-pasted from \fBeoNDPlusReplacement\fP, (c) Maarten Keijzer, Marc Schoenauer and GeNeura Team, 2002). +.PP +Definition at line 35 of file moeoReplacement.h. +.SH "Constructor & Destructor Documentation" +.PP +.SS "template \fBmoeoElitistReplacement\fP< EOT, WorthT >::\fBmoeoElitistReplacement\fP (\fBeoPerf2Worth\fP< EOT, WorthT > & _perf2worth)\fC [inline]\fP" +.PP +constructor +.PP +\fBParameters:\fP +.RS 4 +\fI_perf2worth\fP the functor class to transform raw fitnesses into fitness for selection +.RE +.PP + +.PP +Definition at line 43 of file moeoReplacement.h. +.SH "Member Function Documentation" +.PP +.SS "template void \fBmoeoElitistReplacement\fP< EOT, WorthT >::operator() (\fBeoPop\fP< EOT > & _parents, \fBeoPop\fP< EOT > & _offspring)\fC [inline, virtual]\fP" +.PP +replacement - result in _parents +.PP +\fBParameters:\fP +.RS 4 +\fI_parents\fP parents population +.br +\fI_offspring\fP offspring population +.RE +.PP + +.PP +Implements \fBeoBF< eoPop< EOT > &, eoPop< EOT > &, void >\fP. +.PP +Definition at line 54 of file moeoReplacement.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-MOEO from the source code. diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoEntropyMetric.3 b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoEntropyMetric.3 new file mode 100644 index 000000000..48f6c1077 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoEntropyMetric.3 @@ -0,0 +1,93 @@ +.TH "moeoEntropyMetric" 3 "16 Jan 2007" "Version 0.1" "ParadisEO-MOEO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moeoEntropyMetric \- The entropy gives an idea of the diversity of a Pareto set relatively to another Pareto set. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBmoeoVectorVsVectorBM< EOT, double >\fP. +.PP +.SS "Public Types" + +.in +1c +.ti -1c +.RI "typedef EOT::Fitness \fBEOFitness\fP" +.br +.RI "\fIThe fitness type of a solution. \fP" +.in -1c +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "double \fBoperator()\fP (const std::vector< \fBEOFitness\fP > &_set1, const std::vector< \fBEOFitness\fP > &_set2)" +.br +.RI "\fIReturns the entropy of the Pareto set '_set1' relatively to the Pareto set '_set2'. \fP" +.in -1c +.SS "Private Member Functions" + +.in +1c +.ti -1c +.RI "void \fBremoveDominated\fP (std::vector< \fBEOFitness\fP > &_f)" +.br +.ti -1c +.RI "void \fBprenormalize\fP (const std::vector< \fBEOFitness\fP > &_f)" +.br +.ti -1c +.RI "void \fBnormalize\fP (std::vector< \fBEOFitness\fP > &_f)" +.br +.ti -1c +.RI "void \fBcomputeUnion\fP (const std::vector< \fBEOFitness\fP > &_f1, const std::vector< \fBEOFitness\fP > &_f2, std::vector< \fBEOFitness\fP > &_f)" +.br +.ti -1c +.RI "unsigned \fBhowManyInNicheOf\fP (const std::vector< \fBEOFitness\fP > &_f, const \fBEOFitness\fP &_s, unsigned _size)" +.br +.ti -1c +.RI "double \fBeuclidianDistance\fP (const \fBEOFitness\fP &_set1, const \fBEOFitness\fP &_to, unsigned _deg=2)" +.br +.in -1c +.SS "Private Attributes" + +.in +1c +.ti -1c +.RI "std::vector< double > \fBvect_min_val\fP" +.br +.ti -1c +.RI "std::vector< double > \fBvect_max_val\fP" +.br +.in -1c +.SH "Detailed Description" +.PP + +.SS "template 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) +.PP +Definition at line 23 of file moeoEntropyMetric.h. +.SH "Member Function Documentation" +.PP +.SS "template double \fBmoeoEntropyMetric\fP< EOT >::operator() (const std::vector< \fBEOFitness\fP > & _set1, const std::vector< \fBEOFitness\fP > & _set2)\fC [inline]\fP" +.PP +Returns the entropy of the Pareto set '_set1' relatively to the Pareto set '_set2'. +.PP +\fBParameters:\fP +.RS 4 +\fI_set1\fP the first Pareto set +.br +\fI_set2\fP the second Pareto set +.RE +.PP + +.PP +Definition at line 38 of file moeoEntropyMetric.h. +.PP +References moeoEntropyMetric< EOT >::computeUnion(), moeoEntropyMetric< EOT >::howManyInNicheOf(), moeoEntropyMetric< EOT >::normalize(), moeoEntropyMetric< EOT >::prenormalize(), and moeoEntropyMetric< EOT >::removeDominated(). + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-MOEO from the source code. diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoHybridMOLS.3 b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoHybridMOLS.3 new file mode 100644 index 000000000..8ddb44677 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoHybridMOLS.3 @@ -0,0 +1,77 @@ +.TH "moeoHybridMOLS" 3 "16 Jan 2007" "Version 0.1" "ParadisEO-MOEO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moeoHybridMOLS \- 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. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBeoUpdater\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBeoHybridMOLS\fP (\fBeoContinue\fP< EOT > &_term, \fBeoSelect\fP< EOT > &_select, \fBmoeoMOLS\fP< EOT > &_mols, \fBmoeoArchive\fP< EOT > &_arch)" +.br +.RI "\fICtor. \fP" +.ti -1c +.RI "void \fBoperator()\fP ()" +.br +.RI "\fIApplies the multi-objective local search to selected individuals contained in the archive if the stopping criteria is not verified. \fP" +.in -1c +.SS "Private Attributes" + +.in +1c +.ti -1c +.RI "\fBeoContinue\fP< EOT > & \fBterm\fP" +.br +.RI "\fIstopping criteria \fP" +.ti -1c +.RI "\fBeoSelect\fP< EOT > & \fBselect\fP" +.br +.RI "\fIselector \fP" +.ti -1c +.RI "\fBmoeoMOLS\fP< EOT > & \fBmols\fP" +.br +.RI "\fImulti-objective local search \fP" +.ti -1c +.RI "\fBmoeoArchive\fP< EOT > & \fBarch\fP" +.br +.RI "\fIarchive \fP" +.in -1c +.SH "Detailed Description" +.PP + +.SS "template 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. +.PP +Definition at line 27 of file moeoHybridMOLS.h. +.SH "Member Function Documentation" +.PP +.SS "template \fBmoeoHybridMOLS\fP< EOT >::eoHybridMOLS (\fBeoContinue\fP< EOT > & _term, \fBeoSelect\fP< EOT > & _select, \fBmoeoMOLS\fP< EOT > & _mols, \fBmoeoArchive\fP< EOT > & _arch)\fC [inline]\fP" +.PP +Ctor. +.PP +\fBParameters:\fP +.RS 4 +\fI_term\fP stopping criteria +.br +\fI_select\fP selector +.br +\fI_mols\fP a multi-objective local search +.br +\fI_arch\fP the archive +.RE +.PP + +.PP +Definition at line 38 of file moeoHybridMOLS.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-MOEO from the source code. diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoIBEA.3 b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoIBEA.3 new file mode 100644 index 000000000..8785dba00 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoIBEA.3 @@ -0,0 +1,62 @@ +.TH "moeoIBEA" 3 "16 Jan 2007" "Version 0.1" "ParadisEO-MOEO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moeoIBEA \- Functor The sorting phase of IBEA (Indicator-Based Evolutionary Algorithm). + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBeoPerf2WorthCached< EOT, double >\fP. +.PP +Inherited by \fBmoeoIBEASorting< EOT, Fitness >\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBmoeoIBEA\fP (\fBmoeoBinaryQualityIndicator\fP< Fitness > *_I)" +.br +.ti -1c +.RI "void \fBcalculate_worths\fP (const \fBeoPop\fP< EOT > &_pop)" +.br +.RI "\fImapping \fP" +.in -1c +.SS "Protected Attributes" + +.in +1c +.ti -1c +.RI "\fBmoeoBinaryQualityIndicator\fP< Fitness > * \fBI\fP" +.br +.RI "\fIbinary quality indicator to use in the selection process \fP" +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class moeoIBEA< EOT, Fitness >" +Functor The sorting phase of IBEA (Indicator-Based Evolutionary Algorithm). +.PP +Definition at line 28 of file moeoIBEA.h. +.SH "Member Function Documentation" +.PP +.SS "template void \fBmoeoIBEA\fP< EOT, Fitness >::calculate_worths (const \fBeoPop\fP< EOT > & _pop)\fC [inline, virtual]\fP" +.PP +mapping +.PP +\fBParameters:\fP +.RS 4 +\fIconst\fP eoPop& _pop the population +.RE +.PP + +.PP +Implements \fBeoPerf2WorthCached< EOT, double >\fP. +.PP +Definition at line 46 of file moeoIBEA.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-MOEO from the source code. diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoIBEAAvgSorting.3 b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoIBEAAvgSorting.3 new file mode 100644 index 000000000..41b2e7d15 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoIBEAAvgSorting.3 @@ -0,0 +1,105 @@ +.TH "moeoIBEAAvgSorting" 3 "16 Jan 2007" "Version 0.1" "ParadisEO-MOEO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moeoIBEAAvgSorting \- 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. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBmoeoIBEA< EOT, FitnessEval >\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBmoeoIBEAAvgSorting\fP (\fBmoeoBinaryQualityIndicator\fP< FitnessEval > *_I, const double _kappa)" +.br +.RI "\fIconstructor \fP" +.in -1c +.SS "Private Member Functions" + +.in +1c +.ti -1c +.RI "void \fBsetBounds\fP (const \fBeoPop\fP< EOT > &_pop)" +.br +.RI "\fIcomputation and setting of the bounds for each objective \fP" +.ti -1c +.RI "void \fBfitnesses\fP (const \fBeoPop\fP< EOT > &_pop)" +.br +.RI "\fIcomputation and setting of the fitness for each individual of the population \fP" +.in -1c +.SS "Private Attributes" + +.in +1c +.ti -1c +.RI "double \fBkappa\fP" +.br +.RI "\fIscaling factor kappa \fP" +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class moeoIBEAAvgSorting< EOT, FitnessEval >" +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. +.PP +Definition at line 361 of file moeoIBEA.h. +.SH "Constructor & Destructor Documentation" +.PP +.SS "template \fBmoeoIBEAAvgSorting\fP< EOT, FitnessEval >::\fBmoeoIBEAAvgSorting\fP (\fBmoeoBinaryQualityIndicator\fP< FitnessEval > * _I, const double _kappa)\fC [inline]\fP" +.PP +constructor +.PP +\fBParameters:\fP +.RS 4 +\fIeoBinaryQualityIndicator*\fP _I the binary quality indicator to use in the selection process +.br +\fIdouble\fP _kappa scaling factor kappa +.RE +.PP + +.PP +Definition at line 373 of file moeoIBEA.h. +.PP +References moeoIBEAAvgSorting< EOT, FitnessEval >::kappa. +.SH "Member Function Documentation" +.PP +.SS "template void \fBmoeoIBEAAvgSorting\fP< EOT, FitnessEval >::setBounds (const \fBeoPop\fP< EOT > & _pop)\fC [inline, private, virtual]\fP" +.PP +computation and setting of the bounds for each objective +.PP +\fBParameters:\fP +.RS 4 +\fIconst\fP eoPop& _pop the population +.RE +.PP + +.PP +Implements \fBmoeoIBEA< EOT, FitnessEval >\fP. +.PP +Definition at line 398 of file moeoIBEA.h. +.PP +References moeoIBEA< EOT, FitnessEval >::I, and moeoBinaryQualityIndicator< EOFitness >::setBounds(). +.SS "template void \fBmoeoIBEAAvgSorting\fP< EOT, FitnessEval >::fitnesses (const \fBeoPop\fP< EOT > & _pop)\fC [inline, private, virtual]\fP" +.PP +computation and setting of the fitness for each individual of the population +.PP +\fBParameters:\fP +.RS 4 +\fIconst\fP eoPop& _pop the population +.RE +.PP + +.PP +Implements \fBmoeoIBEA< EOT, FitnessEval >\fP. +.PP +Definition at line 431 of file moeoIBEA.h. +.PP +References moeoIBEAAvgSorting< EOT, FitnessEval >::kappa, and eoValueParam< std::vector< WorthT > >::value(). + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-MOEO from the source code. diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoIBEASorting.3 b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoIBEASorting.3 new file mode 100644 index 000000000..22bfcf277 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoIBEASorting.3 @@ -0,0 +1,105 @@ +.TH "moeoIBEASorting" 3 "16 Jan 2007" "Version 0.1" "ParadisEO-MOEO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moeoIBEASorting \- 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 \fBeoParetoFitness\fP object. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBmoeoIBEA< EOT, Fitness >< EOT, Fitness >\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBmoeoIBEASorting\fP (\fBmoeoBinaryQualityIndicator\fP< Fitness > *_I, const double _kappa)" +.br +.RI "\fIconstructor \fP" +.in -1c +.SS "Private Member Functions" + +.in +1c +.ti -1c +.RI "void \fBsetBounds\fP (const \fBeoPop\fP< EOT > &_pop)" +.br +.RI "\fIcomputation and setting of the bounds for each objective \fP" +.ti -1c +.RI "void \fBfitnesses\fP (const \fBeoPop\fP< EOT > &_pop)" +.br +.RI "\fIcomputation and setting of the fitness for each individual of the population \fP" +.in -1c +.SS "Private Attributes" + +.in +1c +.ti -1c +.RI "double \fBkappa\fP" +.br +.RI "\fIscaling factor kappa \fP" +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class moeoIBEASorting< EOT, Fitness >" +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 \fBeoParetoFitness\fP object. +.PP +Definition at line 84 of file moeoIBEA.h. +.SH "Constructor & Destructor Documentation" +.PP +.SS "template \fBmoeoIBEASorting\fP< EOT, Fitness >::\fBmoeoIBEASorting\fP (\fBmoeoBinaryQualityIndicator\fP< Fitness > * _I, const double _kappa)\fC [inline]\fP" +.PP +constructor +.PP +\fBParameters:\fP +.RS 4 +\fIeoBinaryQualityIndicator*\fP _I the binary quality indicator to use in the selection process +.br +\fIdouble\fP _kappa scaling factor kappa +.RE +.PP + +.PP +Definition at line 96 of file moeoIBEA.h. +.PP +References moeoIBEASorting< EOT, Fitness >::kappa. +.SH "Member Function Documentation" +.PP +.SS "template void \fBmoeoIBEASorting\fP< EOT, Fitness >::setBounds (const \fBeoPop\fP< EOT > & _pop)\fC [inline, private, virtual]\fP" +.PP +computation and setting of the bounds for each objective +.PP +\fBParameters:\fP +.RS 4 +\fIconst\fP eoPop& _pop the population +.RE +.PP + +.PP +Implements \fBmoeoIBEA< EOT, Fitness >\fP. +.PP +Definition at line 121 of file moeoIBEA.h. +.PP +References moeoIBEA< EOT, Fitness >::I, and moeoBinaryQualityIndicator< EOFitness >::setBounds(). +.SS "template void \fBmoeoIBEASorting\fP< EOT, Fitness >::fitnesses (const \fBeoPop\fP< EOT > & _pop)\fC [inline, private, virtual]\fP" +.PP +computation and setting of the fitness for each individual of the population +.PP +\fBParameters:\fP +.RS 4 +\fIconst\fP eoPop& _pop the population +.RE +.PP + +.PP +Implements \fBmoeoIBEA< EOT, Fitness >\fP. +.PP +Definition at line 150 of file moeoIBEA.h. +.PP +References moeoIBEASorting< EOT, Fitness >::kappa, and eoValueParam< std::vector< WorthT > >::value(). + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-MOEO from the source code. diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoIBEAStochSorting.3 b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoIBEAStochSorting.3 new file mode 100644 index 000000000..cc0005a04 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoIBEAStochSorting.3 @@ -0,0 +1,101 @@ +.TH "moeoIBEAStochSorting" 3 "16 Jan 2007" "Version 0.1" "ParadisEO-MOEO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moeoIBEAStochSorting \- 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. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBmoeoIBEA< EOT, FitnessEval >\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBmoeoIBEAStochSorting\fP (\fBmoeoBinaryQualityIndicator\fP< FitnessEval > *_I)" +.br +.RI "\fIconstructor \fP" +.in -1c +.SS "Private Member Functions" + +.in +1c +.ti -1c +.RI "void \fBsetBounds\fP (const \fBeoPop\fP< EOT > &_pop)" +.br +.RI "\fIcomputation and setting of the bounds for each objective \fP" +.ti -1c +.RI "void \fBfitnesses\fP (const \fBeoPop\fP< EOT > &_pop)" +.br +.RI "\fIcomputation and setting of the fitness for each individual of the population \fP" +.in -1c +.SS "Static Private Member Functions" + +.in +1c +.ti -1c +.RI "static double \fBzero\fP ()" +.br +.RI "\fIapproximated zero value \fP" +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class moeoIBEAStochSorting< EOT, FitnessEval >" +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. +.PP +Definition at line 203 of file moeoIBEA.h. +.SH "Constructor & Destructor Documentation" +.PP +.SS "template \fBmoeoIBEAStochSorting\fP< EOT, FitnessEval >::\fBmoeoIBEAStochSorting\fP (\fBmoeoBinaryQualityIndicator\fP< FitnessEval > * _I)\fC [inline]\fP" +.PP +constructor +.PP +\fBParameters:\fP +.RS 4 +\fIeoBinaryQualityIndicator*\fP _I the binary quality indicator to use in the selection process +.RE +.PP + +.PP +Definition at line 214 of file moeoIBEA.h. +.SH "Member Function Documentation" +.PP +.SS "template void \fBmoeoIBEAStochSorting\fP< EOT, FitnessEval >::setBounds (const \fBeoPop\fP< EOT > & _pop)\fC [inline, private, virtual]\fP" +.PP +computation and setting of the bounds for each objective +.PP +\fBParameters:\fP +.RS 4 +\fIconst\fP eoPop& _pop the population +.RE +.PP + +.PP +Implements \fBmoeoIBEA< EOT, FitnessEval >\fP. +.PP +Definition at line 243 of file moeoIBEA.h. +.PP +References moeoIBEA< EOT, FitnessEval >::I, and moeoBinaryQualityIndicator< EOFitness >::setBounds(). +.SS "template void \fBmoeoIBEAStochSorting\fP< EOT, FitnessEval >::fitnesses (const \fBeoPop\fP< EOT > & _pop)\fC [inline, private, virtual]\fP" +.PP +computation and setting of the fitness for each individual of the population +.PP +\fBParameters:\fP +.RS 4 +\fIconst\fP eoPop& _pop the population +.RE +.PP + +.PP +Implements \fBmoeoIBEA< EOT, FitnessEval >\fP. +.PP +Definition at line 272 of file moeoIBEA.h. +.PP +References eoValueParam< std::vector< WorthT > >::value(), and moeoIBEAStochSorting< EOT, FitnessEval >::zero(). + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-MOEO from the source code. diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoMOLS.3 b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoMOLS.3 new file mode 100644 index 000000000..afd28d822 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoMOLS.3 @@ -0,0 +1,29 @@ +.TH "moeoMOLS" 3 "16 Jan 2007" "Version 0.1" "ParadisEO-MOEO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moeoMOLS \- Abstract class for local searches applied to multi-objective optimization. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBeoBF< const EOT &, moeoArchive< EOT > &, void >\fP. +.PP +Inherited by \fBmoeoCombinedMOLS< EOT >\fP. +.PP +.SH "Detailed Description" +.PP + +.SS "template 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. +.PP +Definition at line 23 of file moeoMOLS.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-MOEO from the source code. diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoMetric.3 b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoMetric.3 new file mode 100644 index 000000000..1e98e5650 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoMetric.3 @@ -0,0 +1,25 @@ +.TH "moeoMetric" 3 "16 Jan 2007" "Version 0.1" "ParadisEO-MOEO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moeoMetric \- Base class for performance metrics (also called quality indicators). + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBeoFunctorBase\fP. +.PP +Inherited by \fBmoeoBM< A1, A2, R >\fP, \fBmoeoBM< const const EOFitness &, EOFitness &, R >\fP, \fBmoeoBM< const const std::vector< EOFitness > &, EOFitness &, R >\fP, \fBmoeoBM< const const std::vector< EOFitness > &, std::vector< EOFitness > &, R >\fP, \fBmoeoBM< const const std::vector< typename EOT::Fitness > &, std::vector< typename EOT::Fitness > &, double >\fP, \fBmoeoUM< A, R >\fP, \fBmoeoUM< const EOFitness &, R >\fP, and \fBmoeoUM< const std::vector< EOFitness > &, R >\fP. +.PP +.SH "Detailed Description" +.PP +Base class for performance metrics (also called quality indicators). +.PP +Definition at line 21 of file moeoMetric.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-MOEO from the source code. diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoNDSorting_II.3 b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoNDSorting_II.3 new file mode 100644 index 000000000..1848e2a52 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoNDSorting_II.3 @@ -0,0 +1,60 @@ +.TH "moeoNDSorting_II" 3 "16 Jan 2007" "Version 0.1" "ParadisEO-MOEO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moeoNDSorting_II \- Fast Elitist Non-Dominant Sorting Genetic Algorithm assignment strategie Note : This is a corrected version of the original \fBeoNDSorting_II\fP class. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBeoNDSorting< EOT >< EOT >\fP. +.PP +.SS "Public Types" + +.in +1c +.ti -1c +.RI "typedef std::pair< double, unsigned > \fBdouble_index_pair\fP" +.br +.RI "\fIindex pair \fP" +.in -1c +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBmoeoNDSorting_II\fP (bool nasty_flag_=false)" +.br +.RI "\fIconstructor \fP" +.ti -1c +.RI "std::vector< double > \fBniche_penalty\fP (const std::vector< unsigned > &_cf, const \fBeoPop\fP< EOT > &_pop)" +.br +.RI "\fI_cf points into the elements that consist of the current front \fP" +.in -1c +.SS "Classes" + +.in +1c +.ti -1c +.RI "class \fBcompare_nodes\fP" +.br +.RI "\fIA class to compare the nodes. \fP" +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class moeoNDSorting_II< EOT >" +Fast Elitist Non-Dominant Sorting Genetic Algorithm assignment strategie Note : This is a corrected version of the original \fBeoNDSorting_II\fP class. + +\fBSee also:\fP +.RS 4 +\fBeoNDSorting_II\fP +.RE +.PP + +.PP +Definition at line 26 of file moeoNDSorting.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-MOEO from the source code. diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoNDSorting_II_compare_nodes.3 b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoNDSorting_II_compare_nodes.3 new file mode 100644 index 000000000..17922a9a6 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoNDSorting_II_compare_nodes.3 @@ -0,0 +1,30 @@ +.TH "moeoNDSorting_II::compare_nodes" 3 "16 Jan 2007" "Version 0.1" "ParadisEO-MOEO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moeoNDSorting_II::compare_nodes \- A class to compare the nodes. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "bool \fBoperator()\fP (const \fBdouble_index_pair\fP &a, const \fBdouble_index_pair\fP &b) const" +.br +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class moeoNDSorting_II< EOT >::compare_nodes" +A class to compare the nodes. +.PP +Definition at line 46 of file moeoNDSorting.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-MOEO from the source code. diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoNSGA_II.3 b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoNSGA_II.3 new file mode 100644 index 000000000..8600861be --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoNSGA_II.3 @@ -0,0 +1,95 @@ +.TH "moeoNSGA_II" 3 "16 Jan 2007" "Version 0.1" "ParadisEO-MOEO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moeoNSGA_II \- +.SH SYNOPSIS +.br +.PP +Inherits \fBeoAlgo< EOT >< EOT >\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBmoeoNSGA_II\fP (unsigned _max_gen, \fBeoEvalFunc\fP< EOT > &_eval, \fBeoGenOp\fP< EOT > &_op)" +.br +.RI "\fIThis constructor builds the algorithm as descibed in the paper. \fP" +.ti -1c +.RI "\fBmoeoNSGA_II\fP (unsigned _max_gen, \fBeoEvalFunc\fP< EOT > &_eval, \fBeoQuadOp\fP< EOT > &crossover, double pCross, \fBeoMonOp\fP< EOT > &mutation, double pMut)" +.br +.RI "\fICtor taking _max_gen, crossover and mutation. \fP" +.ti -1c +.RI "\fBmoeoNSGA_II\fP (\fBeoContinue\fP< EOT > &_continuator, \fBeoEvalFunc\fP< EOT > &_eval, \fBeoGenOp\fP< EOT > &_op)" +.br +.RI "\fICtor taking a continuator instead of _gen_max. \fP" +.ti -1c +.RI "virtual void \fBoperator()\fP (\fBeoPop\fP< EOT > &_pop)" +.br +.RI "\fIApply a few generation of evolution to the population. \fP" +.in -1c +.SS "Protected Attributes" + +.in +1c +.ti -1c +.RI "\fBeoContinue\fP< EOT > & \fBcontinuator\fP" +.br +.ti -1c +.RI "\fBeoEvalFunc\fP< EOT > & \fBeval\fP" +.br +.ti -1c +.RI "\fBeoPopLoopEval\fP< EOT > \fBloopEval\fP" +.br +.ti -1c +.RI "\fBeoPopEvalFunc\fP< EOT > & \fBpopEval\fP" +.br +.ti -1c +.RI "\fBmoeoNDSorting_II\fP< EOT > \fBsorting\fP" +.br +.RI "\fINSGAII sorting. \fP" +.ti -1c +.RI "\fBeoDetTournamentWorthSelect\fP< EOT > \fBselectOne\fP" +.br +.RI "\fIBinary tournament selection. \fP" +.ti -1c +.RI "\fBmoeoElitistReplacement\fP< EOT > \fBreplace\fP" +.br +.RI "\fIElitist replacement. \fP" +.ti -1c +.RI "\fBeoGeneralBreeder\fP< EOT > \fBgenBreed\fP" +.br +.ti -1c +.RI "\fBeoBreed\fP< EOT > & \fBbreed\fP" +.br +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class moeoNSGA_II< EOT >" + +.PP +Definition at line 31 of file moeoNSGA_II.h. +.SH "Constructor & Destructor Documentation" +.PP +.SS "template \fBmoeoNSGA_II\fP< EOT >::\fBmoeoNSGA_II\fP (unsigned _max_gen, \fBeoEvalFunc\fP< EOT > & _eval, \fBeoGenOp\fP< EOT > & _op)\fC [inline]\fP" +.PP +This constructor builds the algorithm as descibed in the paper. +.PP +Deb, K., S. Agrawal, A. Pratap, and T. Meyarivan, A fast elitist non-dominated sorting genetic algorithm for multi-objective optimization: NSGA-II. In IEEE Transactions on Evolutionary Computation, Vol. 6, No 2, pp 182-197, April 2002. +.PP +\fBParameters:\fP +.RS 4 +\fI_max_gen\fP number of generations before stopping +.br +\fI_eval\fP evaluation function +.br +\fI_op\fP variation operator +.RE +.PP + +.PP +Definition at line 46 of file moeoNSGA_II.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-MOEO from the source code. diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoParetoEuclidDist.3 b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoParetoEuclidDist.3 new file mode 100644 index 000000000..af2350144 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoParetoEuclidDist.3 @@ -0,0 +1,28 @@ +.TH "moeoParetoEuclidDist" 3 "16 Jan 2007" "Version 0.1" "ParadisEO-MOEO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moeoParetoEuclidDist \- +.SH SYNOPSIS +.br +.PP +Inherits \fBmoeoParetoPhenDist< EOT, DistType >< EOT, DistType >\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "DistType \fBoperator()\fP (const EOT &eopf1, const EOT &eopf2)" +.br +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class moeoParetoEuclidDist< EOT, DistType >" + +.PP +Definition at line 27 of file moeoParetoPhenDist.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-MOEO from the source code. diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoParetoPhenDist.3 b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoParetoPhenDist.3 new file mode 100644 index 000000000..fac4f02cd --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoParetoPhenDist.3 @@ -0,0 +1,21 @@ +.TH "moeoParetoPhenDist" 3 "16 Jan 2007" "Version 0.1" "ParadisEO-MOEO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moeoParetoPhenDist \- +.SH SYNOPSIS +.br +.PP +Inherited by \fBmoeoParetoEuclidDist< EOT, DistType >\fP. +.PP +.SH "Detailed Description" +.PP + +.SS "template class moeoParetoPhenDist< EOT, DistType >" + +.PP +Definition at line 15 of file moeoParetoPhenDist.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-MOEO from the source code. diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoParetoSharing.3 b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoParetoSharing.3 new file mode 100644 index 000000000..fdf319d10 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoParetoSharing.3 @@ -0,0 +1,64 @@ +.TH "moeoParetoSharing" 3 "16 Jan 2007" "Version 0.1" "ParadisEO-MOEO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moeoParetoSharing \- +.SH SYNOPSIS +.br +.PP +Inherits \fBeoPerf2Worth< EOT, worthT >\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBmoeoParetoSharing\fP (double _nicheSize)" +.br +.ti -1c +.RI "\fBmoeoParetoSharing\fP (double _nicheSize, \fBmoeoParetoPhenDist\fP< EOT, worthT > &_dist)" +.br +.ti -1c +.RI "void \fBoperator\fP ()(const \fBeoPop\fP< EOT > &_pop)" +.br +.in -1c +.SS "Private Member Functions" + +.in +1c +.ti -1c +.RI "double \fBsh\fP (double \fBdist\fP, double \fBDmax\fP)" +.br +.in -1c +.SS "Private Attributes" + +.in +1c +.ti -1c +.RI "double \fBnicheSize\fP" +.br +.ti -1c +.RI "\fBmoeoParetoPhenDist\fP< EOT, worthT > & \fBdist\fP" +.br +.ti -1c +.RI "\fBmoeoParetoEuclidDist\fP< EOT > \fBeuc_dist\fP" +.br +.ti -1c +.RI "double \fBDmax\fP" +.br +.in -1c +.SS "Classes" + +.in +1c +.ti -1c +.RI "class \fBdMatrix\fP" +.br +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class moeoParetoSharing< EOT, worthT >" + +.PP +Definition at line 19 of file moeoParetoSharing.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-MOEO from the source code. diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoParetoSharing_dMatrix.3 b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoParetoSharing_dMatrix.3 new file mode 100644 index 000000000..ae32dbbf1 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoParetoSharing_dMatrix.3 @@ -0,0 +1,36 @@ +.TH "moeoParetoSharing::dMatrix" 3 "16 Jan 2007" "Version 0.1" "ParadisEO-MOEO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moeoParetoSharing::dMatrix \- +.SH SYNOPSIS +.br +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBdMatrix\fP (unsigned _s)" +.br +.ti -1c +.RI "void \fBprintOn\fP (std::ostream &_os)" +.br +.in -1c +.SS "Private Attributes" + +.in +1c +.ti -1c +.RI "unsigned \fBrSize\fP" +.br +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class moeoParetoSharing< EOT, worthT >::dMatrix" + +.PP +Definition at line 109 of file moeoParetoSharing.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-MOEO from the source code. diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoReplacement.3 b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoReplacement.3 new file mode 100644 index 000000000..010e3bc8f --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoReplacement.3 @@ -0,0 +1,27 @@ +.TH "moeoReplacement" 3 "16 Jan 2007" "Version 0.1" "ParadisEO-MOEO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moeoReplacement \- Replacement strategy for multi-objective optimization. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBeoReplacement< EOT >< EOT >\fP. +.PP +Inherited by \fBmoeoDisctinctElitistReplacement< EOT, WorthT >\fP, and \fBmoeoElitistReplacement< EOT, WorthT >\fP. +.PP +.SH "Detailed Description" +.PP + +.SS "template class moeoReplacement< EOT, WorthT >" +Replacement strategy for multi-objective optimization. +.PP +Definition at line 24 of file moeoReplacement.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-MOEO from the source code. diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoSelectOneFromPopAndArch.3 b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoSelectOneFromPopAndArch.3 new file mode 100644 index 000000000..10ce00e1d --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoSelectOneFromPopAndArch.3 @@ -0,0 +1,105 @@ +.TH "moeoSelectOneFromPopAndArch" 3 "16 Jan 2007" "Version 0.1" "ParadisEO-MOEO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moeoSelectOneFromPopAndArch \- Elitist selection process that consists in choosing individuals in the archive as well as in the current population. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBeoSelectOne< EOT >\fP. +.PP +.SS "Public Member Functions" + +.in +1c +.ti -1c +.RI "\fBmoeoSelectOneFromPopAndArch\fP (\fBeoSelectOne\fP< EOT > &_popSelectOne, \fBeoSelectOne\fP< EOT > _archSelectOne, \fBmoeoArchive\fP< EOT > &_arch, double _ratioFromPop=0.5)" +.br +.RI "\fICtor. \fP" +.ti -1c +.RI "\fBmoeoSelectOneFromPopAndArch\fP (\fBeoSelectOne\fP< EOT > &_popSelectOne, \fBmoeoArchive\fP< EOT > &_arch, double _ratioFromPop=0.5)" +.br +.RI "\fICtor - the archive's selection operator is a random selector. \fP" +.ti -1c +.RI "virtual const EOT & \fBoperator()\fP (const \fBeoPop\fP< EOT > &pop)" +.br +.RI "\fIThe selection process. \fP" +.ti -1c +.RI "virtual void \fBsetup\fP (const \fBeoPop\fP< EOT > &_pop)" +.br +.RI "\fISetups some population stats. \fP" +.in -1c +.SS "Private Attributes" + +.in +1c +.ti -1c +.RI "\fBeoSelectOne\fP< EOT > & \fBpopSelectOne\fP" +.br +.RI "\fIThe population's selection operator. \fP" +.ti -1c +.RI "\fBeoSelectOne\fP< EOT > & \fBarchSelectOne\fP" +.br +.RI "\fIThe archive's selection operator. \fP" +.ti -1c +.RI "\fBmoeoArchive\fP< EOT > & \fBarch\fP" +.br +.RI "\fIthe archive \fP" +.ti -1c +.RI "double \fBratioFromPop\fP" +.br +.RI "\fIthe ratio of selected individuals from the population \fP" +.ti -1c +.RI "\fBeoRandomSelect\fP< EOT > \fBrandomSelect\fP" +.br +.RI "\fIthe random selection operator \fP" +.in -1c +.SH "Detailed Description" +.PP + +.SS "template class moeoSelectOneFromPopAndArch< EOT >" +Elitist selection process that consists in choosing individuals in the archive as well as in the current population. +.PP +Definition at line 25 of file moeoSelectOneFromPopAndArch.h. +.SH "Constructor & Destructor Documentation" +.PP +.SS "template \fBmoeoSelectOneFromPopAndArch\fP< EOT >::\fBmoeoSelectOneFromPopAndArch\fP (\fBeoSelectOne\fP< EOT > & _popSelectOne, \fBeoSelectOne\fP< EOT > _archSelectOne, \fBmoeoArchive\fP< EOT > & _arch, double _ratioFromPop = \fC0.5\fP)\fC [inline]\fP" +.PP +Ctor. +.PP +\fBParameters:\fP +.RS 4 +\fI_popSelectOne\fP the population's selection operator +.br +\fI_archSelectOne\fP the archive's selection operator +.br +\fI_arch\fP the archive +.br +\fI_ratioFromPop\fP the ratio of selected individuals from the population +.RE +.PP + +.PP +Definition at line 37 of file moeoSelectOneFromPopAndArch.h. +.SS "template \fBmoeoSelectOneFromPopAndArch\fP< EOT >::\fBmoeoSelectOneFromPopAndArch\fP (\fBeoSelectOne\fP< EOT > & _popSelectOne, \fBmoeoArchive\fP< EOT > & _arch, double _ratioFromPop = \fC0.5\fP)\fC [inline]\fP" +.PP +Ctor - the archive's selection operator is a random selector. +.PP +\fBParameters:\fP +.RS 4 +\fI_popSelectOne\fP the population's selection operator +.br +\fI_arch\fP the archive +.br +\fI_ratioFromPop\fP the ratio of selected individuals from the population +.RE +.PP + +.PP +Definition at line 49 of file moeoSelectOneFromPopAndArch.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-MOEO from the source code. diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoSolutionUM.3 b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoSolutionUM.3 new file mode 100644 index 000000000..dcc0142d0 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoSolutionUM.3 @@ -0,0 +1,25 @@ +.TH "moeoSolutionUM" 3 "16 Jan 2007" "Version 0.1" "ParadisEO-MOEO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moeoSolutionUM \- Base class for unary metrics dedicated to the performance evaluation of a single solution's Pareto fitness. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBmoeoUM< const EOFitness &, R >\fP. +.PP +.SH "Detailed Description" +.PP + +.SS "template class moeoSolutionUM< EOT, R, EOFitness >" +Base class for unary metrics dedicated to the performance evaluation of a single solution's Pareto fitness. +.PP +Definition at line 47 of file moeoMetric.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-MOEO from the source code. diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoSolutionVsSolutionBM.3 b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoSolutionVsSolutionBM.3 new file mode 100644 index 000000000..1cbab9c2a --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoSolutionVsSolutionBM.3 @@ -0,0 +1,25 @@ +.TH "moeoSolutionVsSolutionBM" 3 "16 Jan 2007" "Version 0.1" "ParadisEO-MOEO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moeoSolutionVsSolutionBM \- Base class for binary metrics dedicated to the performance comparison between two solutions's Pareto fitnesses. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBmoeoBM< A1, A2, R >< const const EOFitness &, EOFitness &, R >\fP. +.PP +.SH "Detailed Description" +.PP + +.SS "template class moeoSolutionVsSolutionBM< EOT, R, EOFitness >" +Base class for binary metrics dedicated to the performance comparison between two solutions's Pareto fitnesses. +.PP +Definition at line 70 of file moeoMetric.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-MOEO from the source code. diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoUM.3 b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoUM.3 new file mode 100644 index 000000000..67272abff --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoUM.3 @@ -0,0 +1,25 @@ +.TH "moeoUM" 3 "16 Jan 2007" "Version 0.1" "ParadisEO-MOEO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moeoUM \- Base class for unary metrics. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBeoUF< A, R >\fP, and \fBmoeoMetric\fP. +.PP +.SH "Detailed Description" +.PP + +.SS "template class moeoUM< A, R >" +Base class for unary metrics. +.PP +Definition at line 29 of file moeoMetric.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-MOEO from the source code. diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoVectorUM.3 b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoVectorUM.3 new file mode 100644 index 000000000..992d774ed --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoVectorUM.3 @@ -0,0 +1,25 @@ +.TH "moeoVectorUM" 3 "16 Jan 2007" "Version 0.1" "ParadisEO-MOEO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moeoVectorUM \- Base class for unary metrics dedicated to the performance evaluation of a Pareto set (a vector of Pareto fitnesses). + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBmoeoUM< const std::vector< EOFitness > &, R >\fP. +.PP +.SH "Detailed Description" +.PP + +.SS "template class moeoVectorUM< EOT, R, EOFitness >" +Base class for unary metrics dedicated to the performance evaluation of a Pareto set (a vector of Pareto fitnesses). +.PP +Definition at line 58 of file moeoMetric.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-MOEO from the source code. diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoVectorVsSolutionBM.3 b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoVectorVsSolutionBM.3 new file mode 100644 index 000000000..3db8d76d4 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoVectorVsSolutionBM.3 @@ -0,0 +1,25 @@ +.TH "moeoVectorVsSolutionBM" 3 "16 Jan 2007" "Version 0.1" "ParadisEO-MOEO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moeoVectorVsSolutionBM \- 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. + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBmoeoBM< A1, A2, R >< const const std::vector< EOFitness > &, EOFitness &, R >\fP. +.PP +.SH "Detailed Description" +.PP + +.SS "template 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. +.PP +Definition at line 82 of file moeoMetric.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-MOEO from the source code. diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoVectorVsVectorBM.3 b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoVectorVsVectorBM.3 new file mode 100644 index 000000000..064bac3c7 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/moeoVectorVsVectorBM.3 @@ -0,0 +1,25 @@ +.TH "moeoVectorVsVectorBM" 3 "16 Jan 2007" "Version 0.1" "ParadisEO-MOEO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +moeoVectorVsVectorBM \- Base class for binary metrics dedicated to the performance comparison between two Pareto sets (two vectors of Pareto fitnesses). + +.PP +.SH SYNOPSIS +.br +.PP +\fC#include \fP +.PP +Inherits \fBmoeoBM< A1, A2, R >< const const std::vector< EOFitness > &, std::vector< EOFitness > &, R >\fP. +.PP +.SH "Detailed Description" +.PP + +.SS "template class moeoVectorVsVectorBM< EOT, R, EOFitness >" +Base class for binary metrics dedicated to the performance comparison between two Pareto sets (two vectors of Pareto fitnesses). +.PP +Definition at line 95 of file moeoMetric.h. + +.SH "Author" +.PP +Generated automatically by Doxygen for ParadisEO-MOEO from the source code. diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/webpages.3 b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/webpages.3 new file mode 100644 index 000000000..a3ae4ccca --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/man/man3/webpages.3 @@ -0,0 +1,15 @@ +.TH "webpages" 3 "15 Jan 2007" "Version 0.1" "ParadisEO-MOEO" \" -*- nroff -*- +.ad l +.nh +.SH NAME +webpages \- Related webpages +.IP "\(bu" 2 +ParadisEO \fChomepage\fP +.IP "\(bu" 2 +INRIA GForge \fCproject page\fP +.IP "\(bu" 2 +\fCREADME\fP +.IP "\(bu" 2 +\fCNEWS\fP +.PP + diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/moeo.doxyfile b/tags/paradiseo-moeo-0.2/paradiseo-moeo/docs/moeo.doxyfile new file mode 100644 index 000000000..842dc2468 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/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 = ../../paradiseo-eo/doc/eo.doxytag=../../../paradiseo-eo/doc/html +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/tags/paradiseo-moeo-0.2/paradiseo-moeo/src/Makefile.am b/tags/paradiseo-moeo-0.2/paradiseo-moeo/src/Makefile.am new file mode 100755 index 000000000..ae1e51b3c --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/src/Makefile.am @@ -0,0 +1 @@ +# Nothing to compile ! diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/src/metric/moeoBinaryMetricSavingUpdater.h b/tags/paradiseo-moeo-0.2/paradiseo-moeo/src/metric/moeoBinaryMetricSavingUpdater.h new file mode 100644 index 000000000..01aadfaa5 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/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/tags/paradiseo-moeo-0.2/paradiseo-moeo/src/metric/moeoContributionMetric.h b/tags/paradiseo-moeo-0.2/paradiseo-moeo/src/metric/moeoContributionMetric.h new file mode 100644 index 000000000..7da5702df --- /dev/null +++ b/tags/paradiseo-moeo-0.2/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/tags/paradiseo-moeo-0.2/paradiseo-moeo/src/metric/moeoEntropyMetric.h b/tags/paradiseo-moeo-0.2/paradiseo-moeo/src/metric/moeoEntropyMetric.h new file mode 100644 index 000000000..e760e35f6 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/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/tags/paradiseo-moeo-0.2/paradiseo-moeo/src/metric/moeoMetric.h b/tags/paradiseo-moeo-0.2/paradiseo-moeo/src/metric/moeoMetric.h new file mode 100644 index 000000000..8e29440dd --- /dev/null +++ b/tags/paradiseo-moeo-0.2/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/tags/paradiseo-moeo-0.2/paradiseo-moeo/src/moeo b/tags/paradiseo-moeo-0.2/paradiseo-moeo/src/moeo new file mode 100644 index 000000000..3bf19e773 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/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/tags/paradiseo-moeo-0.2/paradiseo-moeo/src/moeo.h b/tags/paradiseo-moeo-0.2/paradiseo-moeo/src/moeo.h new file mode 100644 index 000000000..8478ee48e --- /dev/null +++ b/tags/paradiseo-moeo-0.2/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/tags/paradiseo-moeo-0.2/paradiseo-moeo/src/moeoArchive.h b/tags/paradiseo-moeo-0.2/paradiseo-moeo/src/moeoArchive.h new file mode 100644 index 000000000..9547dd06e --- /dev/null +++ b/tags/paradiseo-moeo-0.2/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/tags/paradiseo-moeo-0.2/paradiseo-moeo/src/moeoArchiveFitnessSavingUpdater.h b/tags/paradiseo-moeo-0.2/paradiseo-moeo/src/moeoArchiveFitnessSavingUpdater.h new file mode 100644 index 000000000..b1e839331 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/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/tags/paradiseo-moeo-0.2/paradiseo-moeo/src/moeoArchiveUpdater.h b/tags/paradiseo-moeo-0.2/paradiseo-moeo/src/moeoArchiveUpdater.h new file mode 100644 index 000000000..581742849 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/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/tags/paradiseo-moeo-0.2/paradiseo-moeo/src/moeoCombinedMOLS.h b/tags/paradiseo-moeo-0.2/paradiseo-moeo/src/moeoCombinedMOLS.h new file mode 100644 index 000000000..30c9dc206 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/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/tags/paradiseo-moeo-0.2/paradiseo-moeo/src/moeoHybridMOLS.h b/tags/paradiseo-moeo-0.2/paradiseo-moeo/src/moeoHybridMOLS.h new file mode 100644 index 000000000..fb1160cac --- /dev/null +++ b/tags/paradiseo-moeo-0.2/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 + */ +moeoHybridMOLS (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 (!term (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/tags/paradiseo-moeo-0.2/paradiseo-moeo/src/moeoMOLS.h b/tags/paradiseo-moeo-0.2/paradiseo-moeo/src/moeoMOLS.h new file mode 100644 index 000000000..b2ecd3353 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/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/tags/paradiseo-moeo-0.2/paradiseo-moeo/src/moeoNDSorting.h b/tags/paradiseo-moeo-0.2/paradiseo-moeo/src/moeoNDSorting.h new file mode 100644 index 000000000..8cd7c4aa6 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/src/moeoNDSorting.h @@ -0,0 +1,108 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +//----------------------------------------------------------------------------- +// moeoNDSorting.h +// (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2006 +/* + This library... + + Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr + */ +//----------------------------------------------------------------------------- + +#ifndef moeoNDSorting_h +#define moeoNDSorting_h + +#include +#include + +# define INF 1.0e14 // DBL_MAX + +/** + * Fast Elitist Non-Dominant Sorting Genetic Algorithm assignment strategie + * Note : This is a corrected version of the original eoNDSorting_II class + * @see eoNDSorting_II + */ +template < class EOT > class moeoNDSorting_II:public eoNDSorting < EOT > +{ +public: + + /** + * constructor + */ +moeoNDSorting_II (bool nasty_flag_ = false):eoNDSorting < EOT > + (nasty_flag_) + { + } + + /** + * index pair + */ + typedef std::pair < double, unsigned >double_index_pair; + + /** + * A class to compare the nodes + */ + class compare_nodes + { + public:bool operator () (const double_index_pair & a, + const double_index_pair & b) const + { + return a.first < b.first; + } + }; + + /// _cf points into the elements that consist of the current front + std::vector < double >niche_penalty (const std::vector < unsigned >&_cf, + const eoPop < EOT > &_pop) + { + typedef typename EOT::Fitness::fitness_traits traits; + unsigned i; + std::vector < double >niche_count (_cf.size (), 0.); + + + unsigned nObjectives = traits::nObjectives (); //_pop[_cf[0]].fitness().size(); + + for (unsigned o = 0; o < nObjectives; ++o) + { + std::vector < std::pair < double, + unsigned > >performance (_cf.size ()); + for (i = 0; i < _cf.size (); ++i) + { + performance[i].first = _pop[_cf[i]].fitness ()[o]; + performance[i].second = i; + } + + std::sort (performance.begin (), performance.end (), compare_nodes ()); // a lambda operator would've been nice here + + // set boundary at INF (so it will get chosen over all the others + niche_count[performance[0].second] = INF; + niche_count[performance.back ().second] = INF; + + if (performance[0].first != performance.back ().first) + { + for (i = 1; i < _cf.size () - 1; ++i) + { + if (niche_count[performance[i].second] != INF) + { + niche_count[performance[i].second] += + (performance[i + 1].first - + performance[i - + 1].first) / (performance.back ().first - + performance[0].first); + } + } + } + } + + // transform niche_count into penality + for (i = 0; i < niche_count.size (); ++i) + { + niche_count[i] = INF - niche_count[i]; + } + + return niche_count; + } +}; + +#endif diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/src/moeoNSGA_II.h b/tags/paradiseo-moeo-0.2/paradiseo-moeo/src/moeoNSGA_II.h new file mode 100644 index 000000000..07f19f0a8 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/src/moeoNSGA_II.h @@ -0,0 +1,106 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +//----------------------------------------------------------------------------- +// moeoNSGA_II.h +// (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2006 +// (c) Deneche Abdelhakim, 2006 +/* + This library... + + Contact: paradiseo-help@lists.gforge.inria.fr + */ +//----------------------------------------------------------------------------- +#ifndef MOEONSGA_II_H_ +#define MOEONSGA_II_H_ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +/** +*/ +template < class EOT > class moeoNSGA_II:public eoAlgo < EOT > +{ +public: + + /** + This constructor builds the algorithm as descibed in the paper + + Deb, K., S. Agrawal, A. Pratap, and T. Meyarivan, + A fast elitist non-dominated sorting genetic algorithm for multi-objective optimization: NSGA-II. + In IEEE Transactions on Evolutionary Computation, Vol. 6, No 2, pp 182-197, April 2002. + @param _max_gen number of generations before stopping + @param _eval evaluation function + @param _op variation operator + */ + + moeoNSGA_II (unsigned _max_gen, eoEvalFunc < EOT > &_eval, eoGenOp < EOT > &_op):continuator (*(new eoGenContinue < EOT > (_max_gen))), eval (_eval), loopEval (_eval), popEval (loopEval), selectOne (sorting, 2), // binary tournament selection + replace (sorting), genBreed (selectOne, _op), breed (genBreed) + { + } + + /// Ctor taking _max_gen, crossover and mutation + moeoNSGA_II (unsigned _max_gen, eoEvalFunc < EOT > &_eval, eoQuadOp < EOT > &crossover, double pCross, eoMonOp < EOT > &mutation, double pMut):continuator (*(new eoGenContinue < EOT > (_max_gen))), eval (_eval), loopEval (_eval), popEval (loopEval), selectOne (sorting, 2), // binary tournament selection + + replace (sorting), + genBreed (selectOne, + *new eoSGAGenOp < EOT > (crossover, pCross, mutation, pMut)), + breed (genBreed) + { + } + + /// Ctor taking a continuator instead of _gen_max +moeoNSGA_II (eoContinue < EOT > &_continuator, eoEvalFunc < EOT > &_eval, eoGenOp < EOT > &_op): + continuator (_continuator), eval (_eval), loopEval (_eval), popEval (loopEval), selectOne (sorting, 2), // binary tournament selection + replace (sorting), genBreed (selectOne, _op), breed (genBreed) + { + } + + ///Apply a few generation of evolution to the population. + virtual void operator () (eoPop < EOT > &_pop) + { + eoPop < EOT > offspring, empty_pop; + popEval (empty_pop, _pop); // a first eval of _pop + do + { + // generate offspring, worths are recalculated if necessary + breed (_pop, offspring); + + // eval of offspring + popEval (_pop, offspring); + + // after replace, the new pop is in _pop. Worths are recalculated if necessary + replace (_pop, offspring); + + } + while (continuator (_pop)); + } + +protected: + eoContinue < EOT > &continuator; + + eoEvalFunc < EOT > &eval; + eoPopLoopEval < EOT > loopEval; + + eoPopEvalFunc < EOT > &popEval; + + /// NSGAII sorting + moeoNDSorting_II < EOT > sorting; + /// Binary tournament selection + eoDetTournamentWorthSelect < EOT > selectOne; + /// Elitist replacement + moeoElitistReplacement < EOT > replace; + eoGeneralBreeder < EOT > genBreed; + eoBreed < EOT > &breed; +}; + +#endif diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/src/moeoReplacement.h b/tags/paradiseo-moeo-0.2/paradiseo-moeo/src/moeoReplacement.h new file mode 100644 index 000000000..a1148e119 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/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/tags/paradiseo-moeo-0.2/paradiseo-moeo/src/moeoSelectOneFromPopAndArch.h b/tags/paradiseo-moeo-0.2/paradiseo-moeo/src/moeoSelectOneFromPopAndArch.h new file mode 100644 index 000000000..aea605b51 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/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/tags/paradiseo-moeo-0.2/paradiseo-moeo/src/old/README b/tags/paradiseo-moeo-0.2/paradiseo-moeo/src/old/README new file mode 100644 index 000000000..c7fc0b6a2 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/src/old/README @@ -0,0 +1,2 @@ +All the files contained in src/old/ will be fully rebuilt in the next version of ParadisEO-MOEO. +For more informations, please contact paradiseo-help@lists.gforge.inria.fr. \ No newline at end of file diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/src/old/make_algo_MOEO.h b/tags/paradiseo-moeo-0.2/paradiseo-moeo/src/old/make_algo_MOEO.h new file mode 100644 index 000000000..fc7ab9322 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/src/old/make_algo_MOEO.h @@ -0,0 +1,250 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +//----------------------------------------------------------------------------- +// make_algo_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 _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 "old/moeoIBEA.h" +#include "old/moeoBinaryQualityIndicator.h" +#include "eoParetoRanking.h" +#include "moeoParetoSharing.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 + moeoBinaryQualityIndicator < EOFitness > *I; + if (indStr == string ("Epsilon")) + I = new moeoAdditiveBinaryEpsilonIndicator < EOFitness >; + else if (indStr == string ("Hypervolume")) + I = new moeoBinaryHypervolumeIndicator < EOFitness > (rho); + else + { + string stmp = + string ("Invalid binary quality indicator (for IBEA): ") + indStr; + throw std::runtime_error (stmp.c_str ()); + } + p2w = new moeoIBEASorting < EOT > (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 moeoParetoSharing < 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/tags/paradiseo-moeo-0.2/paradiseo-moeo/src/old/moeoBinaryQualityIndicator.h b/tags/paradiseo-moeo-0.2/paradiseo-moeo/src/old/moeoBinaryQualityIndicator.h new file mode 100644 index 000000000..50767188a --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/src/old/moeoBinaryQualityIndicator.h @@ -0,0 +1,409 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +//----------------------------------------------------------------------------- +// moeoBinaryQualityIndicator.h +// (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2006 +/* + This library... + + Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr + */ +//----------------------------------------------------------------------------- + +#ifndef _moeoBinaryQualityIndicator_h +#define _moeoBinaryQualityIndicator_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 moeoBinaryQualityIndicator:public eoBF < const EOFitness &, const EOFitness &, + double > +{ + +public: + + /** + * constructor + */ + moeoBinaryQualityIndicator ():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 moeoAdditiveBinaryEpsilonIndicator:public moeoBinaryQualityIndicator < + EOFitness + > +{ + +public: + + /** + * constructor + */ +moeoAdditiveBinaryEpsilonIndicator ():moeoBinaryQualityIndicator < 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 moeoBinaryQualityIndicator < 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 moeoBinaryHypervolumeIndicator:public moeoBinaryQualityIndicator < + EOFitness > +{ + +public: + + /** + * constructor + * @param double _rho reference point for the hypervolume calculation (rho must not be smaller than 1) + */ +moeoBinaryHypervolumeIndicator (double _rho):moeoBinaryQualityIndicator < 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 moeoBinaryQualityIndicator < 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/tags/paradiseo-moeo-0.2/paradiseo-moeo/src/old/moeoIBEA.h b/tags/paradiseo-moeo-0.2/paradiseo-moeo/src/old/moeoIBEA.h new file mode 100644 index 000000000..8a21be09a --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/src/old/moeoIBEA.h @@ -0,0 +1,476 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +//----------------------------------------------------------------------------- +// moeoIBEASorting.h +// (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2006 +/* + This library... + + Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr + */ +//----------------------------------------------------------------------------- + + +#ifndef _moeoIBEASorting_h +#define _moeoIBEASorting_h + +#include +#include +#include +#include +#include "moeoBinaryQualityIndicator.h" + + +/** + * Functor + * The sorting phase of IBEA (Indicator-Based Evolutionary Algorithm) + */ +template < class EOT, class Fitness > class moeoIBEA:public eoPerf2WorthCached < EOT, + double > +{ + +public: + /** values */ + using eoPerf2WorthCached < EOT, double >::value; + + moeoIBEA (moeoBinaryQualityIndicator < 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 */ + moeoBinaryQualityIndicator < 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 moeoIBEASorting:public moeoIBEA < EOT, + Fitness + > +{ + +public: + + /** + * constructor + * @param eoBinaryQualityIndicator* _I the binary quality indicator to use in the selection process + * @param double _kappa scaling factor kappa + */ + moeoIBEASorting (moeoBinaryQualityIndicator < Fitness > *_I, + const double _kappa): + moeoIBEA < + EOT, + Fitness > (_I) + { + kappa = _kappa; + } + + +private: + /** quality indicator */ + using moeoIBEA < EOT, Fitness >::I; + /** values */ + using moeoIBEA < 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 moeoIBEAStochSorting:public moeoIBEA < EOT, + FitnessEval + > +{ + +public: + + /** + * constructor + * @param eoBinaryQualityIndicator* _I the binary quality indicator to use in the selection process + */ +moeoIBEAStochSorting (moeoBinaryQualityIndicator < FitnessEval > *_I):moeoIBEA < EOT, + FitnessEval > + (_I) + { + } + + +private: + /** quality indicator */ + using moeoIBEAStochSorting < EOT, FitnessEval >::I; + /** values */ + using moeoIBEAStochSorting < 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 moeoIBEAAvgSorting:public moeoIBEA < EOT, + FitnessEval + > +{ + +public: + + /** + * constructor + * @param eoBinaryQualityIndicator* _I the binary quality indicator to use in the selection process + * @param double _kappa scaling factor kappa + */ + moeoIBEAAvgSorting (moeoBinaryQualityIndicator < FitnessEval > *_I, + const double _kappa): + moeoIBEA < + EOT, + FitnessEval > (_I) + { + kappa = _kappa; + } + + +private: + /** quality indicator */ + using moeoIBEAAvgSorting < EOT, FitnessEval >::I; + /** values */ + using moeoIBEAAvgSorting < 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/tags/paradiseo-moeo-0.2/paradiseo-moeo/src/old/moeoParetoPhenDist.h b/tags/paradiseo-moeo-0.2/paradiseo-moeo/src/old/moeoParetoPhenDist.h new file mode 100644 index 000000000..8f223bc66 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/src/old/moeoParetoPhenDist.h @@ -0,0 +1,50 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +//----------------------------------------------------------------------------- +// moeoParetoPhenDist.h +// (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2006 +/* + This library... + + Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr + */ +//----------------------------------------------------------------------------- + +#include + +template < class EOT, class DistType > class moeoParetoPhenDist +{ +public: + virtual DistType operator ()(const EOT & eopf1, const EOT & eopf2) = 0; + +}; + + + +//Euclidien distance + +template < class EOT, class DistType = + double >class moeoParetoEuclidDist:public moeoParetoPhenDist < 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/tags/paradiseo-moeo-0.2/paradiseo-moeo/src/old/moeoParetoSharing.h b/tags/paradiseo-moeo-0.2/paradiseo-moeo/src/old/moeoParetoSharing.h new file mode 100644 index 000000000..8fb949bcb --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/src/old/moeoParetoSharing.h @@ -0,0 +1,157 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +//----------------------------------------------------------------------------- +// moeoParetoSharing.h +// (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2006 +/* + This library... + + Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr + */ +//----------------------------------------------------------------------------- + +#include +#include +#include +#include + +template < class EOT, class worthT = + double >class moeoParetoSharing:public eoPerf2Worth < EOT, worthT > +{ +public: + + moeoParetoSharing (double _nicheSize):eoPerf2Worth < EOT, + worthT > ("ParetoSharing"), nicheSize (_nicheSize), dist (euc_dist), + Dmax (_nicheSize) + { + } + + + moeoParetoSharing (double _nicheSize, moeoParetoPhenDist < 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; + moeoParetoPhenDist < EOT, worthT > &dist; + moeoParetoEuclidDist < EOT > euc_dist; + double Dmax; + +}; diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/tutorials/Makefile.am b/tags/paradiseo-moeo-0.2/paradiseo-moeo/tutorials/Makefile.am new file mode 100755 index 000000000..845f8f563 --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/tutorials/Makefile.am @@ -0,0 +1 @@ +SUBDIRS=lesson1 lesson2 diff --git a/tags/paradiseo-moeo-0.2/paradiseo-moeo/tutorials/lesson1/FlowShop.h b/tags/paradiseo-moeo-0.2/paradiseo-moeo/tutorials/lesson1/FlowShop.h new file mode 100644 index 000000000..df533b4df --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/tutorials/lesson1/FlowShop.h @@ -0,0 +1,137 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +//----------------------------------------------------------------------------- +// FlowShop.h +// (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2006 +/* + This library... + + Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.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/tags/paradiseo-moeo-0.2/paradiseo-moeo/tutorials/lesson1/FlowShopBenchmarkParser.h b/tags/paradiseo-moeo-0.2/paradiseo-moeo/tutorials/lesson1/FlowShopBenchmarkParser.h new file mode 100644 index 000000000..f0e36d8fd --- /dev/null +++ b/tags/paradiseo-moeo-0.2/paradiseo-moeo/tutorials/lesson1/FlowShopBenchmarkParser.h @@ -0,0 +1,182 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +//----------------------------------------------------------------------------- +// FlowShopBenchmarkParser.h +// (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2006 +/* + This library... + + Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.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/tags/paradiseo-moeo-0.2/paradiseo-moeo/tutorials/lesson1/FlowShopEA b/tags/paradiseo-moeo-0.2/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 zM-osFO611id4+!)%Xc6m5zP!1aEUp9rsV4jsDGGaYgNY!vT3fxtvsG)!191Cj zFk0B>Dp-#y;RIC5XrVD0EihX4Fj?Ek1vJ8y*j5`Y5NhMTo}v3zv#?FHX^sP^_5bbQ z&I8{4MLN7$^n+fFmiF>?GA3ioH2vWNxjylin@ouaaJ~lRP5Y5?Ib?Gx^2Ot%#N%WF zbQ1)&6?gQV8fWH9 z>>dLfaAxb_^*F!lFUR@Ndp`(A=GfMM(T)7FT3Y>?iNR>Y+Hre%^O2`Me5{Y{UBr*( zdUpr2jnIMwUpF<tYaOPY(RtcBD8p8f$u`!=n81g!|KFX+i|i!!3L*IgReBF zuK15k;o{lURwX(3+qz`$hMvZmW~-PQ_QCXXk8oOlh^}GJaN1{xW#d%^7Z$IW#yQSO zja(h!szj|WO~`a(x`d%lEY~fXOM_xxKkOHcY9#*WLJ2tId0mbi$}x8vn7{8Fft6|e zA_E&M$0THNg&_B)3>rAU$m^LDxhx@IVpEW#uLbhemXLQMu(CYS{54_guA5dj5{nja zOOl$imKGt%{`i@|UW*aGa**Izp9F$zm%ODsv7uRo$)zj;2(<;od zLEgDUyzN=(in6al2EUWfqa!@X6eKAMHuyOM#_O{QHWpxJrhHQ4T38W#Gj9DQIK7a! zbLOp=7&gGh3&QE2eT#0&gBtfDYQ>I^z9M}7_49@!FELAUyxTLKe{9<^sfrcDm}Lcl z;RHM&NLvR|8I$ECIHPY~<2EmJoBZLRD4NeVMB`=oS*1gi-(e4MJXlb29G4`3bn&C6 zv33+LV!tr$aljzT4-T>$N}-jdCGDzX4Xqlo@t0RWHdMrZ)hDtQd+WKWCuq=4Lkf`3c{1rRP5Qv7wL(OS!35R-^) z)vucYiz~&dW7}FajN|=*u_pcnmc|)|w|v9fXG~j8%wgX0fUY98t-NeoRtY34Mc=!d zNEbKkq2Di??=}T{Pz2KVeq!ByvbaWa*I}yI`uNQKVsqw%(}&D z_2p{Uj22$OC<}5ORUO-mCr6r+Be%N6Ra`T|CR9vLGw&TY))-$ z(8dT({zN)%`y6hp3m!!@T#r=pCq--UVOqz>4`*mOJUbj#IC2%uBSjFgA~C% zM3C=}gi>h2q7?cBP+@%nW)4$mF{&7>!6jO!ujJ04qJ?VrR)gqqc)5az3!7VEOSO1Y z0+Ujv(9tq~nNKAh1Zv5IaW1j{Fl`r-5;on@h+KJ;jdxU2MX@!$)EZr~j`0QMRx(2Q z`IM>fpCX-A`~Y(cEOXe5Yo4!Bi`!r zhcc*r7O@nmjf?CA{@lB~`P-7d*f!*joNsA?^|v7Co|c~ZhMqskc~O3HWWHNGFHkhn zaDMn**_daF)u5PLG}{#LS{U^6cZ+{^vS<#b)^VdVrmIb%zl)SrCEtFt!$%$`spDf z`koXoPi7FACq$N%(SQI^RpzVYScujgIpcq(rP4gkjb~7WmWJz-MXQq|SG&d21LY$6 zxYU-xP1R^G4JWuo6`9ItYq_jQ7EOiYO~6CK?@I|NEnj|xeFr1a;v6&+cVx3ch|Y)Z z)a!g6wHj_tv`N&4cP^Ajo2Bssy;&B3O`P|j`tOCjJGuz1#mnkgBHY*q)WJk4%kK6?aZ4}KExm|lTv`)rrt2}A z1^iOdnAWVtByQ0><6gmbRfG>NGKlY)M?Or0o%bP}bC*PHPO^B8COv|rMDd(tYz|5J z=^2jhWg4pXI*_}xdm!pB(RH|N_&>X-e*}atOS(;{UZU*3?FEGRt-ud}j2beLrNN<& z6YeVTC%;PcRL)UE1 zAmt=!Wcc75wGEGVeCPw@8h}Cw&d1tSgFTUMeJVW8n2YjMssioK-uopsz>J=qe17m<_j;9G0Hg@aQBu~e-6sx%{xj@78}loyDLOnz~&=F zau_KIrpw`frDoKDjxGCEu8%s6@bs*w=n;&UhPG5ZIUXL(BH7;{$p`u3tcmE(5TaZl zVro~k1iRnsD{NLHYg!$0akD4<0W04A1mJaB(p^%2wp*ATSQvaJA3S@nDx~)KN=LCN ziqFTh_6^K!BPI8r*~0E<;MMuWGpitc>{EjMI9tGPau)w;=F!MZNJ7J@rh2uBtFa*I zF9}{IBS=g1XETA^W8rFiajY4@?d6R`o@Hl-^&#=s2Sp8U%>#nO`_c{AJV!a2XaKgbqGv!(3m8EkNU(BL@tgB^F;8`Q+ML-kn=6O(2; z9N7Z$5_ZGOp`ly^vhbH)XaJ!zzawcXPB8;tkK?kHaP1l7Z2Ao>n2DBOs$wSC#zu_h zR`J+&b_7Io?$y-ccI^eYA05M8k*68I6Q(~5WnD4kz8%tE7u#;e_h?#kgidMv+ChI8 zrw1hE=ozGEu0x9H_F=NZN6A4nEk*z~(@1(Y{^^*>{w})z#~l0c`h+C-_r9DCQ)^X<|S-Av`aK*Y4B3PyqSV|K{DqV z%tR0wKmIwDnCB7n`zz^S>lae-h~4#H*s58*IgmlWq5NNjgy(G}L0bA{%u`y=#3Y~8 zr_og+{M53E7RpWtl?@8{N-4`tuvvMNXMwPF+^@4WY*n=BP0Q95Z&?SUo^`7jNK+UD zW%6E*)rS*de4M7t0Br%RVq@D1cu2OpHSnHwWflDSFa8`^UMH(>>(~q%VYH3?WA%A= zf5=b?BOnNN6qs0758^ic03Z@sJk7^fE=Z=?9Q3H7jUUpq4q43oN`8u|ZjhgAh;vozg6rAB@#W(Xf;FY6vFe7G0~q3iB70+n)uhEB+eFP(^}ok2a2-SjUL zwQI3Z-Z{wg3tfeAi9Qf;Vzf{o?|@LDLi4^dYwEkF33$Ak0(qU0=hxJivkzuaF`+}G zP$2JIk`1JSg-fGD3v{d8h1C{7R~ z$M%Fn+E3HiUyj!PlJmohDvq^QJXe1e(yF;v9R=?Blv2PKq$Ert?W=utFFHa6%kuoi z5tfH{hM3RizW3tBD1v8zAc17f381+eXuKR>e%rMGJT~gT=;2Jp_7TP~VZ4H^wb`^% z^skF@`dIdQ>MvoBcz%bATZmpED8q|8I9Li=|Xt4sO(ByHou6K{ulgZwZPvc zAWu{nXg-HV9nT5??To)JJLT^S@j@B=-K+%+f3VuxkD;{#|WvLX=$ZlF*o~Wud{E zT@N7EG6Mj?vDixB#&-@LgGU@F>$IjS0>5=H+m{e}3GguKJhWo7pjMc@({gdYTu&|6 z)hn03(_*Jfv5#5JnQJ66NOHJ|IU%!mSmxm|X=)?@jvLi2AR@;FobQgb4XWx0nBoXp_&8jkCGS;b4pfDr=hmq zX?-PHA4Luz^DMJ5tJ`3HGGEus%=9|^F#`~p2a)%i4d86rk<4>L-MTPJb#F}}9R}}B ztS;g0rOphhtO!nL>mfLk#rX&f$2qWpsd$?a8rd$n>MrriooqT_>1L!RD~TY{TC*O6 zVRD8dsA(y4J2F%uS1{HA{s@CJgziQ&1Byj!PJB-3gs|ES?m5-Tas8AtXdQ)9{( zGV3FmJxKoPj4QdlLy|g>@ZuEbA(?8-lf?>NV_@W^396|ZOq$W^Fc@lF`j%<(A3dmIr;;uL8zXWnnZ?tmy8!2h87`RziFjMk6-@WcP=@;eGX?Vd3jH=G{?Wf+iUuCa3xJ%S{o)ohrlsztfjKPZR`$W)8u^_g$a>+M zgOnOMqH`_KTAR&OerQMjMy$L3#%yzC&YD2lWh9WTUJZE<|x}v%z{xAlXkRxb#${F%Wwl-$v z*^bdL{|*CAlKBz*=cFo{^Mw~(T#SWy(*vk@>$vc0#rqg`$_K=o19c{g>kMI&pQKkt zy8?H>E)Mf}xO{Bky#F3%NtYsLv8PSmwj+(ZY?1brTU-nANU3F%8|IWAKtqC{p~|e( zI1ne=tR|^b;;gV%CGidwg0gkq0L{;Bf@D2pWtJny9NNyS%C+*L7{GZR_XTwiMng-B!iz58e@vdxS56BOU zABQ@hWEYSS|Ce42G;lycrA;1zvv>AT z6tQkbbV9-_MHWNIm@+d?qHsHPO|B*h`uz=|<>g(l&O{rJWJ{EaWe$tG4vm zWN}jxHI;2oG{VV+E$e<*ue0>7_XBON5%?PxN8qkBa0}d+*Yc|f_cUrwRQq)gLf!sX zF6nE8FcZ}cO%aTH8H^jN$PRX@q+SIR8G)UC@L2Yxq%r z`0>(zFW>fehUB}wEG*xwU;iKEd!(U0DBr25ENm zpnUfv#;AN<0~eITXRde30W4>2bd_PD=4hdNcfoQ?BlZ%%^~Xr?!4DqSDc#L zunzs?7RD?t+MHRx>{ub=w*uCri+pT0aPA|~&`~te8cTzL_#XRlFwomZc=p{7YA;NC zNYuu42QAAV0-7!BwmepS2wW)y9r?Vk80;Bu16{9+7Zelg%OzxsN=2I#L;7Ay^KwBggRQX{`j1U?w4CITOZ zUt(c&vtagKl%hJBmx{Rn=u+_9RMVBSQNcOA+RrW8&H5y&FzXxHaCuP`X7B%3&aZzB1;$#*l+ zr92qMx51YiV>pB`o}!6_@qDg~`w}f7BR;e56%-~1^&v5}Jf{n(lT%<2v(be_*yod1xx+-ecv?#!z&6Gsw#dkwKNw@DZiK9$ zj!9Lt+Y2SeHvZa;=}5+iAQWo%#)g@I2xbvSab1A5$+${58b{Qi%`zsy$ru#&LY}U- zp+o*R(;P|yVn{ftx%>+MF!K($_>&fO4{GXZN z^lu~+Q<5Ol3v+KHxXkT@d*>gZeuC!;xECFrM(}1>3hXaY?RWKgPMXFcN*8(k@0AX# zz06a(uW`1rv8X(#Zqa{>O7}HR$xdWrLBHR`hEg52%E=c)3y}^!SD9pc4~#>`-2x_M zC{vw21X&Hg0#%6H$s8C&kiCOSDKWe;4rE?n){)4*KwA25C}Sj~xO|sm!lfgO7YxV( zJe@}))X@QrJ^dYV$(Ew9#!i;{?|O?T24HM7otZbIH+>;O=U^=dVUQ9I}u<09! zdpR?_`JeQw_)JtMe$n_Q-9ji`g?@spZxK&&l7Dj4-x66dN|+0vqREMQB$N z8?M^}(`iiAqcP#P-vwihF=s7y71;RC%#TI-^Y0KxQvv-UfpC9*K1|d{hF@H>jNn86 zo+#ap_&ibE><;Nw)2;%YLCug}3$;&pz7fR1%*&QxS**A@fk3{L5q5g@O{i`Kvo1px z3HSzHC{*45O?~}XA1W!vm_h2vCU&Xk_ob$uyS;jByujT%$>Lmh$!KUeF#soXZ;ZqV zD{Uwsaf0}DJ0VvcTZPPEB!IaTcJ}H_;p$^NZv~)Q`A6nvOq{^_Oq|dQzf7F)-^Bzq zazlo}N0-1~soE082}D&Re@%pNI=)SWP>5e%ga9_Lg88_wkydu&XHsR*$8u;U*@h`Z z3eD^&?1<&D&XKgfJPSwoA8#;Wz;&4F<@ep01S-d6C#+*lq4-nuIU2lA8FZ$$O zX=&R*xB}@aC^+pZC@oRmF23SyY=CZ}1G@>+i?WZmYE7L8*J@oOQJAUBKtCZ`*oE-` z4e%mpa#9uT^1_zl0mE{AaO$mVQ;2032oMqlSecCLA){{P4YYYW!ym;-dGSC#%s;(} zY3A@TghXjVLdOAZx{5hr|8%_~;+C#Jk6kk!;7c;WPgd}c1l;rMGYI~6CV0Mri#zwH zKdvVD@c>WG@)VSS&Ss4 zAwp7X{3hOlmDH9VX)Gi_4n(^zjZ`~N(v#*k&W7n2vpy3Mb}K+)%!(5XUL^H7(weAxWHpI|s0$1J~l z97fbCYj)&KBJlyfx7RSR`12G=%e9eD59ww^dbRBS^e>3}kF{tjy$!|2|)KBVexk-Ud zIu1Y#_{pZ}595uUlcn6aPtQn*WhmjElbyUE`>>0$6GdB>ZENjpD8&(ZEW&jT`X}}o zyKuqJl)DX>VEbo7C+aI%@CfFR z+9zAXo$bKxjx)34D_ViyLsl+pZryLiO`DVLu%0SHDZUy^lv#zP&*0|@Kl>zpLk?HK zrT+h}KTj5a#Zc0pUPVTY(FE&%8|ke7E1H@Y&;S47KUn`cJE{L9t^bM^>W??}N|s^M z`S)%yT}8-l+ELxG_G*}LwJIB(#AcuiPVweBufY^>ULo)8LHUS<4ynLq?{l#cZ>u}9 zo;YRI9H(K|_a|7rJ9Gf{QuJF>dNF3`+;a=vk>-}~-0nQI0r=Ddg9%vY4jpX(xfR$Q z*TmL{^XzuoY!GMpBuFb`qu>qCIn}LO1ps}B3r(}B&ffXn~7;})&}~IE9nCJ*v$vEp)p$M0xdKbUQVkW%0d7=8M+|8t9*RDG^;z+bO-Lcs7sVBb%*AQfeaF-McmSZ?0i>q+8FR-p0qK>Q}ep~_h~zD;>|e6D*Q_qJts zHlI1a6HUDT#Lq-r}K-$kq0zy^`;aC6_nrlm#osZZ}r0$OUMejnYhkpeK-=B zo7|H=Ip}tO9%o3opnzot5fe_wtq`BM4tbV^jW8WT*k18EmMgCH?KaQBHf2hM=J5e4 z?8mDbumQo`)xMPH-3rh=MIot8V^JLY!3&%CCN4G{;0C**wR{rbf+mPKQM~5nHaNeM z%t?HfEM2g@->RRU&6_NN4K8r-kJHtFDkzns8_-4v=>T!SP7mc-Yz>e&F@xysRK_gf zM!N=<$41+eS$-gR2zX2vWP(4b;Ca%|>J(nb-`?$JON|E^W(r^%xE$=lIF=O{^J;(EPzzx4P%!riy5LQI>^NgjP^+m}; zS@JjI7!oTyb~OGEi|jr{Vd8%?{{$3YUj`J6{~IPT9!cLyiwWD_Xf2r~w&xA?USdgH zUa2d~?mK8)Ui^72q8;2_7@h>Xm@h=is!ODy z;yF#3qmw@n=LYOe9bSzT!9aGVYu^BOdUbj;5x$GloQW;N>CVmnT&FDd~Ij9_L# zJLcA@Qc;x+ocwYS8Jm*~?$+R^iY=MLHAMvH zO&ST<--1&k_C12#oEI5D@Rnrkk8AMz1e`NZLQDsO-<%Boa}9oz5M#CyJHdxoMKUpC zHF%zY^OzpN{u_e#L0Y(Qn~Uhxdg{PTg2J1Q}Gr50uMjNgY@6y zvBa5);H|<2+tg@aQo>wQiqX7PaL#1OVfnQ+9j%O&N=mBL5)a*k8w`HJeiCmta02WILy^$`>zF#TBOAm@Sh+5Ec&h>18w6+ zS1_;b_ZcF&g#K<_>kytW16N(pild*PknTv`O8Q#ZO!O-(+v4hb%xw?vS+}(Zu2EwT za2IwT@`RmToS^XSi=Qmx18UIrbW~F|C+^GzP!Z$Oyln2k#4#ZZP%*BukH-*o$I{N+ z-J!z$bb)cK;xQSLC3FZ*0Q(aR z?|BqJd%%g4pvv^!-LHl&zsI!ovR*79S4iiQg$34Z?0YCS7Go|UMMfDZKrfcZ#;TGF z&(~-;OmFLr+)p&!k(L;HXA{{gaD3DTs>^0PCphs>kOaMY-Efs~;Fkekyb%ki)DH6= z_!$mF&8X1-SOSXQDin7b!`ndNCWKya1BL80T|jEeF{i}Z+q&OATF)l z#IjxfrQtwhc;pc%TBzs(NcyQ^F z>`NjAt0+(G0I1vAe(7~MUJpcz1!A!66$HT~ZPBV`UjvyHzTyZBG`PbP>J7A^106;l zj9hUr_pqn_OVAk3$L^H*$Llgy!tWz3~(g^*H6s{LUSi4%crM)m3nJxz|j>}D1U)L}p&bYr<2OhH$vqYhh&FoP{tqB*!(&-tJ}L z;aTCU4kF+ktP?lZ!1r$q=Z4-0yOrm^v%z!smR?&t&uzf~xm%s5+uF6C_qJd13KPz^RkOD{y%3Z}878P5k~ylV z7|wsz-WuyM*R!PctP+@UBPsSZqV2C6*luohI1ifY3Ej#L5J+6y{wJRL75t$L?lV3v zJ`$dKFnAOSs0!Ie8!u>#q@5a>@;N)KI3BTXGiPPo+$BmDyn;1`NQo^sN%2N1i(aI1ga93S}40s>#clK=P5c+J; z$gD+IVqYm03ki`$>o5ei6#Y6Bjbj+8A`34^={R7D$M>Tl4^J_%UeQ~t)N;c01a-Oz z_#qxcyP-4@jC!*Y;9LnL!%BP&bg@0Majuc+o1k9c9k&!fof{0lN2bf15$Zn%S!3sm zOeD*#I!mKu5v!i3lMtE!izF4RBoRuGYj)u7+KapUGk%EV7R-jAC>^>7C7r&^rKR&3 zx5S8aI@qPt56rYlXBkw273;~06|!|!db^)q9~JwTrOL0VqNX=EzOS^mCin${x+@SwD&{2SWw&97}ZLUIm_CM85r^IC>DC82&H zQ#mt1*Feq;JjS=FSMfO3gu{wVI3Hg=sefO9@dy6?Rs3$9GNfnp$Has!7C_pakLoz< zE__sjx$W^7D@DU&Vfn{+(1N^w$9H^7{158Q^7zy0A^w5}1v5U=8IHZf*H#2v(naVP2m~Ee}J+EsWi+I4$yd}-j6#(E3pc@h3&oEg_ zdtE3-ig_rSL-eoMB4h-cV9R3KXyKmcjAgi=dxGs{cm$`K?$cQ*+35YqhdC!BD=cBS zWR*Q~?|6bdV2E84H6jh;rLo+FwI^IkuD4#iTLA8frS4=Mci<=8ouq6dkZ)IXlO$rS zo6RG&PP!p-2nb9px`WMK;WkCD8vg>xdsw*ImG@4-k1&_xVjyY-(oHROc12%@V`Zev zNJj~Z~Df?|HTv9}#ETY+NjiZCd z;PxMxx!?Gskx`Ce^7{aSnEEwi$QUa3#aQTO0|vis<@(np1j92_zI$!M>(4XaQmRV2 zlp9;XDmi25b0wSS_OVi1HR1uytw+`v*L@{`AAw(^V2=}UHJ$|UDFo-TRt$%?PtMh( zbA2iDH3Rk2nCkTdKu?^+pWXM*eN^X^> zIbV>3R&0k4$E32f0uherVfb1G4AP?Is1ZsI`?BjcUl5Am5L0!K3&P&~F|yl(RZCy}8b$30n(6?|wOrf3+Z=x!LIsAE-zDS9FtUP0Iy8kQLv2C_LoDH_$F z`w_b?qyPOxjhf1vow^ly4sVEQL{C)+4#J*8O~vtxbq#Yu!DmT790k1~IYCt_YsFdc zP-WJK!Q&u&GY}7$8%E#KIdQ{_D$w~75GTqR6}|Oj6(TcmSg2$L>>0u zmCsGsCmz1=9y~Ss)&r%hE|$rVH^NDmaF@II!rVC??z&R4{0ZI0X9*lymYyZnb1)R- zs_5{@g9vc>2K`F))xs|m#$fXAn3Wp*GSY25gr`~e} zfKR}}($pq$^@_i@olhFMy7izuv7~+S)B{gywJd$OpnxL01wlmAw&VzNHOsSF1WWhY z9e`@xtl43KIn0FGKtO*c-y=`4jJf@_S@VF&wENhxWt;Rk_)Ps{cu)NsgWrg3u`uaP zh(8h`$r38#UG)KactmRZ4UIEa8tuFk(po`%hQdhO$KE37@Ek^V)S?Dx(Ky(~kc_PN zGHZ}32}P5vpoSW-6MOHNbs)1UI)LzGxPT>%^hGj45UFYx2`;7Idw`oFScAhOfUxU+ ztPBfx;r}Mt@d_UC8c%YSQ|iMG;-XP{#TENma@VK;atsK7F4UQT%|VXx@d>gddbL$u zz2cHS^>hSp)DvNz<#7f=(su5M1<6m-go83wxPqjT@2ueSsJWs70#Jwg_!ZZF*L!vqTw(aYy%RjLmqDwRLoV(YJwJBB`w`^J}n{v^w^lgN7A!79u^V*qBcs z52-Mip2QOH7sOsg<^bhS>BWKr$rk*&jw}gs^DllWK-q+}6Qn&PB31J0LV1M*dANOZ z(2xKOoaHHvP(qNk$H4p^co2I4J(jTK3hnMN;UJb@Kn`^+X<`WtC_DBziq@JDyy%3ngE9gh5Cl^zp#nXm=mKOeD?mK=D1@A>NR|mWk z_%ytNemLA7p+oR#h%LtRE<;iQtzgHN1FH6(xEZ5rJE0n>?kjwq86akPs>M5R}d z@5+p9;y|-)7!IK*i|Exr9Xk!iqpGB+47W3u^xZlPC5Ss{c13Y%d|iVK>zzN`NY-QS zXV?;?&wBzB#07=6H@CNCJ)F<1^i4YJ-)#w!^$jLSJ0BiKixqWv;d$)skQf0&WDtWS zdb#04#U0?;gMx@53dO#hzf|;MWtg@F843_gWM7quIA~Z_6~5>c=DtZ)q>3?bBLuEE z5qq3T@*>`(za#n;$7uBQ%R4o%UNS956@y0F#j4oDl-~%vOmZYn9)TSLwdetnO ze&Tr~#oxC;{sDz!`lAG0ZGy(*y0DkcBqCe_D0-O%gq~^AVM0$ZlL$RYLtjSdD)W^I z&Az@a=2q(wr{n5W;_x7EM7Fz1>Fq z7)lym!InMTh3!AKG^}96pd*NI7e*F{OQmHEuVD0nR}wTZOi_`D-g*oF#J(^r(hNYP z`By=J;h*xMzA@ZOZPfB>xGG)Yb$EUe$KP`*hOum2KnzHhufLYI58F84&m z&;PY}{ieaF!~Y+zV|A<`QDPI2ye748y_u+S2@%oni2xd~o>pg!0X{CzS zr?tZEzyWRr+SKuSYzVTZir0JUtV@~IjMsk(n>u#9erYZc{$GmMJJL{7#Ood~Ep@#9 zPgDW1*D>SuA{r_<`z84IE%Exzy#P5= z#p@qX{8qev-+SLZUVlcIW5kJTQJGY6VoyN*XYu*~U_N%do`p($OT6C2LF`eoHATEW z50d%Mhz$a>6|dhi5WkY+^(rL)_u};d;${pv^far6c*g3DL|0PK|5?2L7_{pc@%ruy zQ9^ROUU#vPtV7OfTY?1LMNCK)uU{&Vws`$wTY_XgiwTMGde`+S;`J(={%FPPpIk(u zjCg$?eR|8aQbTMkk5XOZm0qW;$`b+0D-b#)T7rK{h zwJ#1k4v82h$dvXC-L~<-r&fk-*HdO4C7ZQ8))VCJA6^-mjdOs(mt4$~`mi&IC*hHm zRUvH~%H_+>TjQhB#A)D(CgDCJbA+8eM<>%{O)ccJEkZ(^N1D;hi-8qDcEStXqb zUU{C|YK-1-=$7ocr$5X@<}-!Ar)mB^iktB^H71;`xhS|E1Z8_g)V&hIYsDX*(RzafG zp#DpA#}g1eEQma}zr$D7X8R+kVCdcf#c1^T+^ZVQru}1=s^9<9{H> zw^Bns?uWxj;%gJ~-JYsRHK+74e&mY1!N_JoR(I{RAAt1&8PMYxzpA z?7jf|>3~NTJ%`~2)QoIk7*JVrw@QzklctB@q%1vBE46`aJdw#lPUnSY1DlZq-$MS)Z)%JDyGANzs|u66`Ulyo0{ z#{U?TBO=taY5W)QJ7ObsPz&9 zN@C7GaF)HC^@t%~Pr~7N3F^KcJ_xE{EGDKpoj^igyr168Ug^C*Y`3 zINq|&>A!LwaI`p&v*G@Kj5mQ$>_-hRg12;Ib7bf(?BVVa+V0u#gLtRVW?2E`&m1@* zYtd)w3i5-wFZ;0ys^g$xS&NPfoytw(vdK4ey!oihQTVy#AJfjhtlo!1YMY(swg@~V z#+E$KxjoNy%x&@1uR#J9E@D%@=ebesayRRgQSEUqJW|>-1?OYC@Z2FXtwZEWd7kTlJ1zN(>oc%}FZ9>Q4POTu zgtEHB?fv8G4tMa>-^!QKcAolQ-~sR0+iK6|rO~Y`%9KIQ6dnYS42Jr3miqZS<5U58 z3Os>~p@CSmpzn2c;*o|dbh5oHAn6D^xh?(|fF%B8cnZgsS*L^cq`n*>+8yBq9;_7OrGOaidL1|dpoTLgT}Ib!XJiE)#F zbHQ^;0-h6aE;WkZ~M=}a`(ujEJ3l47ohm|o8Aap3b{p)dsKfAB?rX_N15)A{|8 z%HE8vfX!Kc+|AY9@XIgvq;u;Y&QA-Cf;%*QAeR*=ANV#n7wrilpDX_0*xNCaQ(|!!EItKr+!($TDVAO-pNj$Dk$2ZbMnDX0>-DnWu^&-MBS7l)5 z8O}n8UjTm&4A?u>`5!IuN!VQSaIfn2NzD{P%N8B`2Htes4Szb`gAbfsUI zvOScA@4CibMpUAmQ$pe%*&Fd*{AFs?qp9^9;|W-c#Wni%axM($^zAyL$=pfxK2iB2 z3^GWAG70a)1$%IQM5y3ExL_A6<*WloAIMBpBZV=fL(@su{3nn(Jd91y6FiKf0F4Om z$H-KThv_fI!dIeW8$C`Of^x#47TCDejv%y)Kkuxbif?)W7ihtGkT@8UzJS|Q;B<)Z zw;SOx3J-WT1b7fT@aes|p3rB;iH)8OTau1n&w@>;7+qb71MMq6gE2Y{hW4iE5c|AT z+9be;l_DN%3%J2;`9*_hurOWAAXX|UJ(@GpECUV_#744qvG9hav8 z55{h`bzHJh@wqSdz%<{dvt?KcY-v|yPC z8c^tO3r5eVq6ICi|K;3>l#9JNg$Jm)aN|4(r7=a#p}O08?+R_%{LyLkJD{~hsr1*^ zQjaTOVE#J;rD1pk;4Emw636h>a53AtBlZA|yGEgZBfO{$^xJ6}o~7)vh@tOn!dhK1 zc1zpC1=tLe7J~7>atn419+T!(pLHeoI=H zNmY4C{9yE6>dQIuht>qE9Xp9#2VUFl6f2Qc^wkprKvj-ZS4l6b!sW)N{)w3DW4b0`=iVOH&K~9+6JyUKU!w zUTy9$ko-DHMo>WehbJKQoiGfk+&!H==*Q6QN+c5uJ z(QNFLQ}S3%x#9!YW`^C1B*1yr3~)YHYzAKkPe3%x6{ecz${x^}Eg|2ka9$QU&Y0#d zumyc0IEt%a8Tf_Wa*9tc5RbHzDJb^T{}Qjk>(Bt=pR!7a){EsA2;Qy;&PqY>HtctT zg&WG_P(Br3wZ=}A9>H?OlN|hzW2W_fQeQN73E%S~c3e`7f0p(lUJv{3>b)yAoqkG< zX9AuPhJ<(7hzc%e{Ts5d3l$X~a}WVu!7@}|*S(-M_bn(2B^HH)fCZjYAlqwCS^V0iX*-j@W^em%#$QTiz!K-umBxnTyOL!&_voqe-pM$F>Ewq zTOOz?8Fn&*&35gX3MA7`GZW)yA*WG`%$Cn?^IauhqnR&gbF#IyBadGNQNs5|gM*9B51Y z;BF)W^;H+xPr3O$D3a9vR%)P1GNV&rV(fmeWX7frSw@+smQjMLe!rtorMeS-03I~< zVIZ4$z{+pXn!%ae&P#`lQDSiI8!#yLYo<9jK+Vj3y8 zXzZfed)E;`Hc#$#h^ zlQA{^NJ8Fa#;!J0>~vz8&pb|Ty;ndzw~ym1YbNZot^gl|G;+&H`OxI@CTk@0p~kck z%6x)IvXBN=0FT8D|Jnp9PErJ~U^D=iK}l30bG%-i$KM*uc+T*r(*NOoJF4@AaVz5( ze04sAzJDjiEeiv&zlo)DHRIvx7aoW2h$etQkY((Ls8 zcp4#3Q9Kc(Ila|BL0rp$_3LL{ax;JAaRy9d$8%o<(WHD_z>*Se##^aZ}Vw zfq$f^Of4(3_XMb=$qQ8hagS0dS!fQkFNKG8o*(lJ7b6?@4aFXSxSa3h{voomFjfX$ z3jf^?u?nf!WwbWKgq>uflLq73C9}z7dw9e-UM=k*&S#b>o{>F*4U4@wZ%5L&Ef?)o zyAHTAQqKeY9JR@v+T+IeILWBfXfK!u;R(tB9EoGuIJG4$(OA42}aN0dQ1we158V@%CS*3X?TyXv<y+dujK)sOerr_sw+as!DED}rfNKGW!DR90E~V#Y zam(@UE#HB+Foeeu9XUZI_A-phs+v4Op1e67{@8Z^RT>nZMtB^MI_C#^L#_@CDdY!y zIP8K~;x=~>V;Y`DOEOgBED+H=JWceXgXkr1x=q8yxhqk>?~m^dGTM$$km>8a^n6sx z^T;#lAC@YfCi;ivD`8U0j{mObkrP#6Y%Bz+`k!^J=*CfhBNKXst9lKt=9%LD>Fh6@ zN>R(HGefYS6FGS3qZZ;|EyQQZf9TAQ@H(7<{q8u-D$FnzgU)G3C(6nX*`fy&kD>z5 z_uQ(qz{6V3@PzjBwjd82os6?d+~|ZPoNv>EmXR5qK{^f}4Q=-K4tL;~&1>_{32pD) zlDi$$X43HH@w6!On2d?=oa#d0(DwL;aBt6p;%FvFLH&6gu@~mctnhkV-J=|+QE`m6 zeo9fJz^#5i!Qd?&V1Fe80QQmw+l5zAIjGG<4wjvU?*wEy3K^!)&EdVL7^Pais? zF9-=|$Y#H8#J?I`!BHzB5GVwT9(Ek6+YQn^G$Mls9Sy+#K>e$|Cs>7FJYSoKoIqu+ zf|IXr@YLVJ6MxX3mHV9d9#?&->&o;RGWIc}olh4ib?aAMLpH2CcZ;X~bB-2F%+@y* ztE*CDGQXXHzCOu7!B?ULw4MH!~ad#EUdQ@8+%Ce7%{EjUeIvYjRKP5e!U)e z?YvA!UCsrbV2>%^E@a~>$)qo_lQtX8Q4@BrJ`+~6n2e=mlnr@EQ$c~aR$#3K?2MTjZf zg>vAoQ1-n@D|Tk_g(A;+U)eS)8Z-!{yar*bDb8pU<=!p!yCcXnmsM4VAKC0N8ycCQ zO26-jOr|OY*4wOaH%2UQ$m|ATEfOeQy zBM*EUr4c<3)e-L~yLHDyx#=msz&GWUxNCPWD~}CH*3km5YnivDe1sc9>g77yXncoPaN{+l@>_Zb z$xO>W5AWiCQorLn;*aSkoMc1zNQBmCyW$L3???V{MA@fk3O1~cCGHiXD`K-YO_2?& zd}FCebPbph8-}!44KqqnvZhV$dS=0%AdkF^{)06zY2A!$YWy9WQ1$n01I8iIQdYWEN&77_;; zn?Pt8Z#CM_AsiONp*<^#`D)W167|$h{11008K0&ZyE{}+PX5W7PYW79tE4T}3>WOdFR(}>RTm7N)+vr4sOp&$=wcZU` z&|qkv(og}aDP6`e>d#;eg2co_t;Nw0c_b}^{OS)}hvZ18bpLpaM@9mz;xpK8qQ`+i zDEjcb-*64EVg7xofSkz_^PhlHQkiO$1}3Yk#7~#wn1yB`!dac>AUP`A^g;4gXl6wA zv68f>s9~(h-f-h36lP{hWE4QZf8lK+D!8%)1B! z;;$NjPPD%OVEj>ByY;Z~-dXLM#A3DNVn>C$_B+Ns^&B8eh<1k~KZoT4e1&yyIxJY( z0Rk!#6!hOuWS}pJ^~h>rtaV>E`v2B_Ko>;jUC`Wd0@S>X`+zP$pF8z^Kn3l})^Q$jjI9QeA|pnh~@8*vA}3Ga@Fs zTH<;Zx{)m-sQo3Hsz{J2Mys*9z4G1tk=bZ9mZP>XvHJ1HY&E`u#T^Rzfh*lpzZBWo zauiC-ahmFJNy}0CwzM3PKvdAfWwir(HWyt;FU-hkO(i2_B>?p}(fIq{(@Po#^ANuU2V#3krEZaqRl^FA zyPU8D&p(|6Ne!*)u|?QL=KVW0{0F@NBs&`jNDg^sF!yt$S(GL{ z;k?4iqfY3PjR|T&j;FpIxShbSGk}Wx`cU{~9xC|rufZ=~n5j}Qh1)=$=-NhrxyFj<+(fmm!_HKwsUlFPnE zm#t3d7!89YD&JjnTg3v~@`iXt6AF-|C}IZoI; zXZGD;=?TLflGx}gi-8iSVY8bKbw$a7sh!&mzXso@$LfQxSQk(Lde<0nxKfB zv1O3;((!m5lup+JM-*99+Qj)U7MweWBp+_sL%`WU!ooC}9Pm^(|=V>Hb|f?R7W!y{D) zF`LDq&~sR)vNQ*~Ba>j0zJ_}8nrS`Fr(XJr{ncTRxUwLHlbtU$G?N7c%|Q;$m?yHK zhOYr$mL@hv7PkwZAR}{W7zV+_Xd~pN_(cvvFwyL5%*Q=wkpE7O=OxI0p;P`a8k{~V*fDgP`7TRQR;Uau{dOtWv^F2Xe=cbp6U9nK87R8sFzeD_jsSatbT>68ZIRQYIItH-JGQ1wGF~3b)&weef0FvI@L}01oN-_A2DtlJ)wZ3mnL22=Z+f z@}#R4mqSG{+K=_x?~58DT>Kb9ma7((K8tE8T2BJH*bFMIQ$a5iB%a&l8YHXVvzmzN zMEzy38yQ9YduVVvoQUsTquc<&X(Q^Q$qlghP!nn{SO0{&(=K-hE|17K7CCn&Btf%@ z01zA$Fqxak-R*Blpztxkpqjsr_}(*$%Rq7QRk(}IS(h6XBsOwDK@qA@1O-cuX*kBgB zlP`XLP%4=FRjA2RFH1U{PJ5Qd(n+xVU6cbY+Vh_S3%3cyKEXe0e=W}~3_rm3Pb;R4 zbE3&pBXXO$jc0JMpHhn=%6rnmhA~nr(Se>_VJu+qPrR}O^5BLW+Dv1prPEF$iB4Is zK|0tNj`-d&)H9tkSjEYs|JicFWep-3uOTh= z5?^qA&}RLh$5&#%$8Y=ma885l*p(Y(GlPfxUMO8A_$FPqyN<(J7~o!sZ;21VDwM^= zPYfq@5ZUXW5^U0$>uUhF8~~jB+)lFoX#Q*o1?0f=hmaEX?Tp~gQ0|7qQbF9+goO(F zZqYX~(25kcs1pjXngG{zOnH`$?_W!C#efe}h|O$gjN=D_+%AVhBM7lqbwO$uHM;!g zqiw0%+$(%}+ThFG{u>b*VI^%tsC@(*l!jrA!Y-YmBeEO4KlnS_p{Ywb2Z9>317nR| z?(1X%DhKxr(LM@=Q`aZ4Xl|VY!`v$$PZP$?=RhXZaS3cJf}-(ChxXBGL?fw|WYHf} zw5LJ_+Sp0KG;l1|nQ2ZN_(7$lg)_StE5zGQ){5{U8 z_|^w@M}H0S5{lXjAQ&<>T$rcE4?!{UKPSLFt>EkzwPh17$dazXOXwL2v8WiS)XM0+ zj!kBHv7q$ao+A=cVJjrG=@ZoQ6r_>%XA;QhugJi$3d&;wJ_7joov{;D4rmGOHG21_ zHhrp>c?_q(KZN>G;G0E)=7PDQEd2?j#cSmPJEOh(Ba&<@cGUPCZ(CREs|vHiSELQT z!tEa_){%citfTIuw9sq4zuf#~`{0YAk!j)cZ|oG$R{OPghx3ncb=oz6415~8*jO?Z z+J0^ZRy6$twHb;NYhVY#207^4e_SNng%txgtwtJ`=i&V=zr*w9_u6Bh3|q*V5J+e< zH!@^|Udn9_`S$yN6xt%?Ve4TUy2I_T7Yn;na^DPm5_$=griD9T2mRDES~3>D?8WH< zUxv0|epcSK!}ib3STL8C`!e9C90(We2cF}wlaxZgFizhS4P{{23@hi0c7P)viA6~2 z()MRaVr(k@!{XZy#_Ev2#=bfl9S6Z!`-6Igt^J$ZvAPlE{?G3J+m0=e{xRr7;x2V- zPs{)M20-W+&$GaucC3j}TS&2g^pJD^XwAovcZ&U^;g2AhZ{I(qi6zm^8iD|I#f8pC^dwewPZ!AV)F%zX+hz8sxy$U)ux*#w_1tBKTfB#vdv>7Q2Y8hiuh7C~((ST8 zil^;|WxGy_lKf+X4f8KYYYs%;ZJ$|{-e)!#JhbmKV^0H{cewRs0S>A7_N`)z89rfG z2luFefTXQrh}dEyi1gd`t?`^5Zq09N-L@a)fk|Wj3*HAqS0BhSv%>f);BWT1iK;Nx3S5T%3^|nEAE%yU zsn?w{lIX6T-`y3NpXQ%lJ3q_i37*BV4%sGxTcN{OrR7db^ACtj$PP`}9`1m17eHTk zo(XWlm2VMbt)CD-YEe?K;60sT* zB?fLIq6W-L7|8ztXd?Z)cz0uvXDijPN@%=7*WRQw3UE-0{iSL+)ueMhteCq^Wn*tz z^f&xj7&RjVPw+mAj&(-)mCkYzmPD{+9q}Fsy-QD@JVR|rQ_FL1qpwh-dT<%*K2Um+ zxGd*VFeM?B_y8p_0N@5JTQ}|!Fd!yznloP5puyRvv`xl(2+poK>8rId@)1x%Mm~s= zA?wHuX|eVwNexEyW-W2!LzBr3+^OR%Z={sRJ9W$vx`%-h$I}!>?fKRvf6xot!VzC#i$Zv6c5{Y%7*4J?quetwTiu)y z?P{%vUi}_qpK(=IXN>-$-8>R%P1>{cDU=1#E-p_r*N=|d59a(46T6A%rkLnR^E~9V z5vb`yIfZUgS(Dw|LFoG=bICVy-|czf;c3ks?DVA(VF%JjgooZG+f6#1$7GFGbUtg) ziH7l!_d(}xF@lwd_6Z=;XaV*rqzO8OzSRCSoBnhcGr_77{Au1x@TYtBeOG@FJr87Rh_}htf|1)s0ASwXMP3*ZTEY1M^)_KCCnko8iED|} ze1)0^4)#X|zEM*Fe8TVrXAsPFmTGmUnxG&NYJ!4e32K6Z!ygL65c4U|d}6D{x6!A; zZZ!lESwS?-G901iBiNTw^AQ{cGv^}^fe(W+MMh-H#{%!vA{46SVH-i?1LBz_t+s$W{D55elmX8Hdo0K zV%_Blc10e&gbhoeg<&$Cd_7wrk@Z6ygbE2;aQeR*#xvxnxXk}D2nDk0z@{aQR4KLp zP))!XRo=(pYNN_yXF960uI z+E^po3#WIyPa}HS*_3>~7vN7PgVP_gT(0A?H6@J%e>NF>hz7q*z|EnF6$HN+X-Z6b zpx4qFj{NrW{b>M%NB^^}xm)-SJmupFa9==lSbu%Debiyl}yN6!zSrO^|9dC|A=Ruy$_iAx2MrrM$EkqHqn*g4$z6&8H zW9~p&;nrEp3uBLC>pBWD;`y8%I8hI`UJS!o6zyw zL!-ARZibB5)MsK-Tkh6H$JxD$YOGn!_ za>Ip(3L)@Cs?{2T_=p&tt=1~GS_{!?jg(ev>03#ymiOOiwSHu_T24KE3jX!qX|-P2 z<7~C`c@}!{fV5i9iZ8#;QSq;lKcVgFNT=m=AZLR*+BN5PY>NkK--2<;syo$ofuC%< zz|Tj3R*pMQK=ckwf{0!aMCKZzi;3v>Ommj|qz0E!Yin-SO>j90zzJTf!F__=Y`flq zD#db;cI>u`v*4Cc%n&bnGO+$zZCB3QP+7EHk5R1?+phP&ciZI&);cLv4iD|ud=y}B zzu2Wh>$NH#O5o=-0FwP(rCl-y!8g7M2GQpu)30nS&>oddWLM;j$*IszmUqz@O9Z3Y z37kcYJR?1UfOnu5B%r;3n?1XW3H}Krgobee1(nz^K2M1{Oa6sMwVJQ2hOzYxpjs|C z5*kLH>z9CIyv9)@ILwA|4RK6ET8x^6^8}vcdt3X{H{ti~3BQlWZ|QN{+e^9G+F6HJ zp&?`k=UZ*Gyj)x zwTbzS@nJb1mR(Mc6Ho2loN18`-}cc|8megFE#O8k5^EZ z>LZ)Z;GEalM^2E`Zxq}kwg|R8;Z~qfjO43wyJ7TC7mem=09ygnHS=ZGGoOVf&U|fBaKE$F^JKz3&~`n? zAWN!xRx4EYdcF#2pq|I7-~40C^NH7vEzhsvYZK&o4GT?_=j#g2F3$mkJBB=GAWN!x z-l|a9>-qN`Qcpvm->tsiOP*a-p_s`uz*XwWJ2_SXuP zy`D!Q4MU!($6va0{N<|cDaT(L-p2ULb+3Nc@fV^hjP*c~#`w!Z20&a@@N8t!M);z- zhW;`nFdyYf9EV7tOqbn}Z5N`019Uq`zW{D0T*&nS#z67=X&h+S&sC{<1okjt(fAAm z$JCN0cf{97ENS_80~Ca+CrX-@s1} zNwB*O;AXz{HF9|b0~o+Rg%pkwgX-u4qC(zgl$?zO)`KH5T-TooENXQCsM%M76MdX3 zao1syFiW@)Y)~f(N6*0{Cp#AH#C)e(=72-k&~Zi=qkU*l-LN#ShKv+$NB6i26(&1` zrqe+aCpWnGg4N3IdGrm^`WDj*Z42daH3Zit7q-}jB!VrRTqta`wMfDJlGI>_s$mEI z%IwgJm1x4qX}RPV99s>l(NxtJQs(orBbzulMnPWo3QCv7?U4u8AXAfXHAdc6kv~no z->8wdRcsFhMlZN*#^PZ7>9v(I^2WvfdMz+2g@HCU?9D;`S1a&YAop8Dd&5x}>h%+- zBgl032R0eh0zZ2HMUgs`qzZz_3ZhBaqSu}Z6oG7^!q_5DE=L5K>5rYnV9+eQBMWX0 zvVOAu9;MX4Ek}a;kV5zp&=CnXs$U9FMx*`)TGbwu6=Xt4P;%Tu?`>cS&E{gVqf`xb z7S@`3Wyf(b1Wqw<-iM028G#mmPlf>)vlx$20wOR_!r7qcqrgL`ENv#Y0D@HBh}t3- z_~MGr1Z8>}D_pqIQj5T4OB!j|G76T!zQo;o<56pUyz)*Ot+7nzfj{6(DjsN^(Dd#_ z`S6BV4`(j<9|F?ikp#G>1U*Y zKk=Qwwljp%8}04SjUXw$B?0a$WQCAd+M32I2^UU)+aYkC+l!oifpY;HD?nPzPY)y2 zk8wCbKgt0Q&MDlvwlMnLmw<_zEx6&F6^y-)e+g8K)p=!;iglRQZTYc?C-Y!RU_ z*Woc%0!vav#CLJL?iuU%c3qErE9r$q$ErY_JkADH7LPM%4tJY%h%GZ8Q*mVu8USOz z6nBH|rPeuUIw;#sU zF20SNl!oY=o4(>nIi7k>B-I_hQQbiRuMp&|VD)c%>U-lm;@gW>o_>?Q`g~#ok1r!{ zaTGb@3PvkH_u#M8RzKgi2-dv;mT)IQCdlVTgDrv85S{;Ru*zs1PZO8XB3IL}i}blC z$Up;LgumYL1oy}q-EHWK6fRnI=XHBHIXdPFt>DT zHZ~c2fd>DDfSX$sc98lTlflPm@Y4j`Y?vP=_;JbLKhofD3Aow&@e^Ez^_;%B6)Y$1 zG+x_Oh>zfP$=Ek(@Bl5+nnCDB@FJ!;vEQb_&k=C5_56Dyz`G@bPt)KM6!^@xc_YF9 zncOz_*WerqidcJ0LImgh7zg#NQ_MZVP14ZXjb}6!DY(ZY8yiY&jvU~>rPW&8Tg8S0b94#&{NO0Hv#3}T9i7xE-d9*8*yeA5hWML zVpa#XJc^qA2mFjbOg9~WAbvk=#)dm^IrrR|eaCw48BHjuMwfKGl(gR{Y1pU7?Pq3fD^4NZgSE~mID z!-i6EnJ|9#1t|0FN4|%8aM%)w_nI)R{MlKlLhwxiJ- zke;w!QSR5`$jy|)%|5c(B|SIaVbWOvX<>z07DC7s1oR5E7=NIN5}j!7;BLM$~0>S=f)Nb_@=$hyWfT%Ch?TxIyi zd@uQd^q!D>B%Dsro zz+x=ltjd|rs$6QYpcvXEpMhQL+AV2hUJ2Wl&(iC)xYAA5ljR&DkA47zs7;@62SZ|Hc^H=&pcL8# z`1vIH*`#>;Fs!RqJcT`_9*^$9@#q$m zLfuVR4>;j7j7M+V_+7`NiK;NR3>;JbAelb*_ovTG`g*0N?*QrR^PTA|Q*cJVqPFo3E zLRte>a73>G1{(WBIHjiap1|5J;RNW1`XCXNf;r=M6BK$k&_D|eHNY#Zf6o(oT2Z%S z)Sp1njf#pyeK;WX-vFx9Ss>`e@!b8*rwh!df#%Z?<0)CYwi8v2)$(d`HY;7Fe4tHEaYFA(T;#Q^^e-w2)7nLCOU*zMb zR(;X5?vi=)=JhQromJL%R&~F{Wu+yvDl2Cf^_x*rF>_9NQT6pT{ahuL6Dq4*Bg-o1 zO`3xT-*}{qDybM=S>Z3O2$bNL{n1}tHr)QZvV2BqMM<$eX->(^>nBu}R``*1bj8f- zlJb%Ye`Pg(O{pp_@|W;wQf0Njqn*nimFR1X1hjLcwOFkrT#hIYVaPJ$Bq}p3K%Ue0)r=Y2HZb^-|qSEgzs;McR4GDWoE4)_#WzmeX5>>+F>Y`GAjX?qs zjVqbwttq{s#9LEdR8|ITelW~iSyrr4fuO3gs&7$MRY^s$tF&TnQCVrRcUGytqNJvV zbc`s4rqqBd-jeF-%4(Jf<)|pCs+m*iH*^AUS5{Y6%*NZ|lKE{?MSS?n8&*~2FDb9` zd;Q>hrME_LMKJ`_1j`hnY}lNf~%BvbwTdcsj_S571b>84Rc*NY~r}l z<3>?X`q4YcyPz^4g^Ly<54a0TQix6DYvn5_x*ie12;qE^pB+xE+9>R|X)1cT~oqu4*I0NUeyPbA7y(6=e%x zFVM5nxuwN{qOuxbC=x>u0$iOZqX@XSqS6ZDq?v)kGms{AM(*P3qIngD4EuOVq9T4K zyeqQ7to)UgU}VJtdpUi*<5@OqFauSz@Rq1d(2Gfv$4^i?WAoL6yc0``X3hatNUF3v zV6q+RJzG4f_#p4Ku70k<&g3RcyQs_yGcBgQ&VtbmhllqL_m)C4%2-`gqGT2+J-xGQ zlE1R5idBXC0z>J)3XWM&uioCDz*;Iwdb>aoD0NLPsfH%e6U_`%SHn}<2=fN2pbm-v z7r%zPTvtQu3#Lq(?5(PH{|i?ZD5j3Ue_Y$YPfj6VOuB8>JZn}>75%p&OydAyiF8r2fdw_RhVl~7;DGnq zs1{l#R|hI)qQ--~!;32D-TgX&`HPHN&=W%1pnW6^&2YejyraD{>CdT}<*J2-EQ$vW zQf*ibooI1o0PRCfA8$=%b@hV2URp@ytXXjQtV>lV00ZmyIei zmcu`l%!FG2u)HG5Qr!~RiE))*&vaKmL?8XC%e}61q<(e~)Uh&vwujZMM3du%-|>49 zfKY=Lz=2dTMyYX)5BT9Pkli(<1`c%wt5JfssV|y7?@WlC^!A#I)=*x-j{5d?1!_us zfMLttS7Y#==N(a6b3O2kD1}o&s}2iBi-U&}?}*WpF7sAONi}deH2{IDs&OH>L7{Xf zHIy9cG>)7po#kcoA#Vxlau#}8ob`j>qVl|SQ&pMsp;!=38KEPzEChon`%im(Dg&eB@hwi>7uFmCsbCs##g|% zfh80Y?F1kJ9tZ*bQhH!LWHXeKma9 zq*25A$p7<3kM83go$tfX3BoQk(+p0GpGNcuG{fQRUCfC*pq23*ETp0o9G3<|y&|y+ zlaW;*qy?V@^`J%1Dxy_*uSWz}Bw0y-OMbfY!9hslXJ}?i{i-p9qXIPBB*GyA@>SK8 zBFygNy>vkpYLEBS+Gx0?5FotA zn+a1cLbD2qz!n*@B9^I`G2Q@TzKJDOWpKXi<__{sC<~zZLrZ{0Y^I;Tm>2DYHhS1> zwFU1Y02&Mn+SXYFsG(lAEQ+`H-OInnhN|yR^>=J2>A_!Kzd4oVCH)Y@6a|X=&8tLD zpY21xlFEKH)id!0g2q?%o#UE?u$KPg+u+BIU@sjiggk!f_zfCVVLJR826{h%c9r_Q zr~kxT+!qaguihl2q|(eeNIMPoCX^#*FoYI*4*jcW2irbIAE>~xr{Xn(cGfaGC^PD_quvpc^F0j2k9s%#h3z|kstsQk_qVS@_N0K z;jX=BpO^m=yq{(kGmX*1G-f@UhIRIN=b2=&h&F-Ik^`p+Tcd-nBKC_NGz;8+y>OKM zT?%JViKwLt;ad55tSQ7$({C8Op*(Pyt-5rE^qc$o=ldnmhqTJ71@fEYO&ELfB9_su zTW5rh3{H|$h!xf$A&x_P_+xG*#%65BJH$7B@+E@?`R7$mGlPtpUI@vz0G!p^ zd##K$0U802F^I-aPQst|Kq{Aa9-_!;l~uh;D#uqb36j6$tUf?I68#m}GFqYPl5a)6 z2Dj;U-jVL!^;)`n-Ovno)`SfAMoe3-M|ulBIRi>6uP7=DaQv#MeDqI!plKhLC~wER zi%|)t+R0>|+U@D?ov)_5dpwyYAN%_}oW?h9PrCcm*VEn4ZAo`Gv~+aex22;yE!xrD zqa@vZ0E5tk83~wffVmUzj{Lo&jCvmiU32h`_&Aok5YO!~3ColIII7E&{@PeB(#wP&jZPe)N-N5OeeZ(Xiw}QZPHk zAL(ch`c~~uci#;9@BE;nyQij~@4iC%J^1uM+O2qJpjZyNdZ2EPL$6lnXShFlN7Zd5 z(o^X9q#9j%3*I*%-);D88RvG7)%kX&&Nm|^(FPIt9&&tV_f@?!+}q!2TmK0&0Wd9q zG4!8uxD@HMjhvkF%92X$iYz7iwxWfKeZaB*-E{XDd~TTPc7FsOJ~G4Y9)ssY#p&)W z*dTR*aC-og&kx=`2$;hfu*fsPgr@u9?l9UUvneA-PrNM2KR{}<*|mVa z1!?Q?A*$&}?}7A>bUp(;>*z=NIDD9P4^Fx{{2ub*vmJT=(CEa^_XqH9Ej|W*>egzc zvuxU@3?s7HF#WNp7X65>FaUzIUJ4*`19~t~IOYV!9V;lp|Gc^ju}e z#M6i}?!5uezvn~1z|8gnPNM{0nQ<0T~)1F}XCoAKG z%gi>H5y<(7K%gJ=QPVXY_WUXR)3+hBBfvA|wEnYncVB#{cXs*m-CCrdg^wX$BRgf( za3I}Xi;w*sWmpWI7=Vv~uXD4d$COVC-u+U)H}JLfU52yAGQWhreUa|I>NdCgm#~XL zLASdCIG@4u+DkLs_4rWc^8vdIpBylj{TyRdp1Aq`9=uzP5A4yLDP{UPq?z_O(R%xB z`a!%bZy{(Kf)DFU`ufi3DD?3?%UgaZ-8~f_zGs^KZ*n*I^RMB%j-x>%WwFX>ogw2KP1I3+9%ZNyeWx8VoLvz3RznS zkbV$loO%@P9rQ3U{^q-Gc(;x^s^f3U!}UYee;C)6KrS8;C@){&8~+^)jPiGN$Z$WK zLVu`_v=hP{#{2a){V}RUz4#^akHE*Se@0%uzYXt(;A7~Xk(b}pmx{CucNFiLXHcx8 zdp-KDESK+Q;oZIzd8rGhLZ@5tp84!J?a$Yp+}ZtHMuz(aeC+hmKJt#JatN~l@2l}K zXe6KKAYJSOiel=c~4z`qzMT(nGy9^mh-^#6JM|ba9Na3-XpGnh3&p;zK!{=jDmc!08{@9jzP1uC~v6b1DbAZmt z+{u6U0N21y8SaCqmz{sV+>{|Q;`{!1--`Ek-mONu_zc>E^iTD4g}su=#U-U=_dq)c z{0s5fJ;?3Q55C)obU!}!vb{*B?pS?eJs)J1Z91Q^fGuvYU-eYZ&^EF1OI)I;FF_ z4?YGhslEpw_R@1J9E+^*i=Uk&vu=rWQlImHZ@LX<4hEbQG-fE(DkDcW=BWkzK3g6; z9dth`|M&`9*k`f*-y4!Ji=Yj-PPOdE@ZVmf(Vp7$-xDvRJ%}yj>HH>A+rxMB-x`_D zN12>>9Bcvdq8uqNz9L^6GBez_;luP>5yvx~yz2@1ex}oz#=q^L>lvgk#pl6%OYZxS zZpeKA+D~)t>suwP@b)?le(`wNBk(>x-0eQOz0#*Vq#Jk@B*u>*KVus07^)-Swa9-H z@J_&|dwIIlkNU9;>8v|rLN#5OsDH{wHUREJ)^f?w$d@vRtp%smn&4?B4?}=D3cjp;U4Na>FW$In-lmy5+=?c@FUI z^Jcj3L3txObaHR0QT+2Go#Q5mUX6uyQq(<2pLlwP`$T-!HFk7Ajy$AqHPTbm%gU}x z-3hqoPRMXi&q5p6PVr4Zhxml9Ibb{Md=fMZ2zZ-)J?LYlU}e2o7jMLg(NNv~VResq3eR>D8n--TE^;~W5L z6PwCRzBGbYcj9CBqpW)`@bOSWI_tR%>DS<6haYrx+wMYAZq!GVC=J_%% z2w#q|DU45jyC9HpHE_HEoU8E}bF z#7P6F0V02$-@p6D}YBc8+Ot}WUZAZ-Lb7H0J{0OOm=`Z2|%=bkF7 zowX*7W06-T3e<#EB8VU({=O*FjgMWA$a{a+40k?0_H^=j7t$U{NN)t5OWeFcdr)TI!P4S9mIPqn|4FY!^&n?CO{Yl}@{otW?DD$~X0ahA1dI&!HFfsftj{QLi-_>PySr= z1H?(lZ|5_4l7{ph3F&>#0zbjy`|xfx+70S|9@6IEW7KC{Du&Z3O7}@=j$u1~0{8x?j4rCSJcd^ ztS*=GS-iUdj5KjWnD7nnQYq-gQ9=LxE{w&42`Ig{`JUz(?aEcCLpa0 z9~n+C)(ShQSMA4qz%0iHL5yk(%bh^1<4U~OZH$<-69Qww)dDT?M| z*-aaTImwe>X?@T?KP$t1d{5ZoKsBDpwCj+Tfi%|Bi{B&gNzAU|XZw1Uf)XrUarhqQ zpN_l@sq*(Hf7AklD{9nteu2fI;{ULxOa0r2ayh<3eakyf>D_dGV}9l$7LNka12tDr ze2*fH8IDO8Pcyqy4i>TeT9m~^yZ&#}bdWbY@yxj2kx~CZmyh=GU!jiihN~}anw3^^ zN>!#kEv0?^SE#W{pB3HTVf zDD#tlj6NXjjA_(`bD-mgbv^?w@w;a~^jXe^UjS_X>`p=-(_Bbfg*3{rKYo+u9O)1H z)KaZvQxMc;fX#rtPe=ak7&|cLNr|Tx@9h3$K&~jL^xzaatRnwj*6nh&0%xE87+>s* zSPgxe`Y|14T?Es6BE1#q3z5e14!; zfd2IP8Sa}0WVoA9{>0;yelYznNMDTfF-T*%-I11uk6k~E)v9W@tqn0ADc|XUXR2L4 zYLQ0$KsY5EaoeJp`B&NU8~U-H`GFJa!2XpfQBxOmo@2(RdgT-Ab1Lfj66$%*ON!@A z>xQ%~NHb(fnpYz2r}!9Ytk>l8F+TPG*n9u@D5|?*`^@g1>}-e_F=E6NSBMxfV8lox zqDDoG6g47ZRMd!3BSji9YHF!QjEIPuV$_I{MjH`nN~1*^X=)=)6)n<~Mvae+r+wdix>$nkdz(s@sW$Jm`MSLT%^4{6M z+F54zFY7Dt{ny$P9qpg$)V}zh{*}ryNB{D=bYUG=%G{G}=h2sQ^i{0>H)v)9GvK|{ zR%}JFMcR~JYMR5U>4Q*=d$9=i};h6f$`#3;HL8DjBjUo_%yEF z*>MB&?Rh_aV!XMMbXW4Xp1yGxeMHJ7%b#G`4E`3dOxik+WioF`TRZNj_i7$%73+w3 zKP6<|!JqWMk(;9ZZ)!<&J>oax=JVIn{~B2)^&;2Io%ia;T2ayu>N7vty1n zck?IpJ0=hvN8(4~Kf?FqA7+`7lWM}L86_v5nlUcpM0JzB zXxvRVa6?e>f}g5!#Wxr8eQf&%U~UV#bAH%P70>Nv+>pKCW*!8HXqW^lSChOTQ;~oMcs@RmI`s z89dy~as27l{jgzfs*x&_+V6S(1YeH7EnIY4^w#9-ZZH1HZQPf5L%g)YPr1a%eP>ri zt2XBU+fQdKWwHO|Pn{g<{r*^(_s;K+WttXqK# z)Wz0wPe?vKe2(>Of$O+)m3!Lab;r85PNG9dgq-H!jZR?ppb-^UtEU19RJaArCsZh5Ha$ zvnsq{9uIKg=>l^9_3iV2{1Zlo6&=1o#5`qJdKJ*;WaxyPm=!`&kU!Y8AZ&>rSa1>;9?Ut&HA= zML{Vqqu8!Vxn);wvyyAp;Zfsmyy}cuawE*uqvRf{QRBv4L=|0i27_6aNt+KC3(>o` z?OWBUWz|z9>EU9zO>11CWHfG^RH1d(JNHoc-B#6CILW&AU*nna<~v7*%;x3%T^%w@ zm(q`Ch0MljAv5E?kahozq}f24M$&{?wv&D=%ht23j%C&Sbv{WP|GHV;d=7b?9qK)v z;XIRelCIkSpY-q5q?e^~|Bb{-|F-V);JzE{d-_Ry50-hJ45B?qp5H-EGDmlio{Oy9 zA2_x;_NSuP3Bs%2!Gn zdEZ+uUiaKTz@^L?Jl%(T09i5Z7JX#SB>M*c-e-5%xA67eek*sVtDnaYnA#b>+ywe_ zb)NOuojVKpeyR2N47o{<&UgdeoW~Z~V@L9m$Ea96P>mkgQ{<+#aIA$gHtBxc>%}c< z@)(@ne+Aim=kwRJ=bDgwJ}Te#yg{VwL-TMI=gNNL(qbMi(fb&nsXXAII2@gNdhSmg zkjD7{2wACh$0HAPuS@$eZQig2SNqi|HjzALV`$kvO@vpLq=$amS^rtSU` zoqy%~vH2{MYlZzw9NnHUG4j1yuAZ}(DzLUy?*H%qc&z9Vh11Fkn}{v_h(7Znb=3^{ zEB&Ca-)zU%wK7&%){c|wN7=lVc|KN-QopstSl{!f;s=&Ue6#Jx-$tu&t8(w%Vb|Zl zR4I$1{Xia;(L2nei+Z2!G4NR(CykXyWY8U$d*!Zsc|Oxm**AXs5^U%JOzd)`&f^cxM9I~=^KvB(r)|7{1Yb0qeA9IpEkl_(tP$aJ!vNO z-s@iQlN)Y}=FWU^n=>CCTXX{-lyf{}KTp7VPKmw3p1vsKAp0BoTPJPG`HS=BNa-Ik zFO`zUeuR&`(+ZCtKR$f@yq{RN+!nCkQpVB#(@RDwwV8>pzGz=0b+l5OU^7onUUuug zNGGg;xnuFL=pm(AN_oFbsrmQw9#$>mX_7Gc*?o~p@)}>WFH#S4cus#S+|Dm-bipo| ze2h}5{D4^&%z}AvIxK;6U?o(a5D$m(^V6+x4D5nAFgdK$T$ly-eos7{)I~hZhm~*x zY=9I0voF#Hi(xl>0;Vw6)WONHX5YTZY`7CHgv0jli&Vi`umLWFZE!18>T*A1q4XcYmZAz79L#s71u5QI9YK?tr=Q zqWg%4FT-*;yo`8w7i@-GVJAH2e&Tu3z$%yl;};VT=ffhn1(w5!4-gMmz-D+5cEUMJ zh^L>w2{Yi>2Z@7)upBnPI@rFHI5_hm;$RI-JW;8@GU8w|%!N&`2o^m|JWP3ncz6+P zhK=RK!#Teop5y4{mBhncFc;=OMLgUB%VA&z@vsgy!=$H)hq*9u9R2JW;$hlK;^B{rJe&!e;hV4%memr^&xbd`3>f$g@o+UPg5%c`4;R2X*ae&6)H>o}_B!HE zq8zUf5A$Co9v1zcc(@Ig!@_#vVJ&Qi6J8@8*26@8;i+*w@v!cX#KZBg6Aw#ZIc$J+ zQ2mK`I0bgXB`}ev^?d|0V0t6*@MTy8tKJ|UzP^EY==(GAFzYYG!-X($0_%qvFz_bv zuBWnary&17?0fJS>Gpa1ShpQ#y!;HLw|W!cJK5CGn>!wGL*$q#eY=>Hi@fE{5eW zu#b2+5jMjj*a>&R#EGnDKk;x`H}Nq00P(QnAn`CULOg6!-H~Qk=If4hLKWzaB>s?c zzznz%=E6=`1e0}lq#SOK>yFgHOs>8(!x16k;Zm5GMSqAV9xjEsaM}>!;p?y*&P*U4 zegvE0m4^@y%V6SZjC+^?Q-%@`r@|sw2+LvIp~S-s*bHaDPS^?)C($nwiHE5$7jA(? zaQI=w!x^v+cEV;jVi@so&1m9Jr@tIWJj|I$JiO~7;^E7%9KH|h;IJ9Q!=K>W(Cx$vA_V@HsdWHo;;zXEyP08C(a~!WNi$HSzEom~9^MUS!fIFy&%BO!SP0j_rLYAi&LJL7 zf=Op9H5+Ea`0I&>7r|n<6js2r0^;Ee*aC~;9@q+#&SCxhzF#Jsb0hI^#!cOk68I{t zgz1Idk$N}_w!#wF1-oGKx$M9A{jV%I1?ItRummQ|B_584^>7_*gRLji(wt@9;+03a9YfZQbw@m@zQrH5k;rfS(hudH~YD)8;DDg18 zoO**RU;#V`%V52WD~X58;1cNjCGjvFZiE-X4!9GVm(X6- z#KSC@1M^`aY=cYSBhL~K1J4l;$HNYo3(XnS7fgdYpYM)Lhoe??N9MtKa2Z?gyA=+H&_nM%jxeMs5dwP=D_K&5GMYac(@9# zhS`519=`b|;~f^gMZM)w4wwNm-lpDQ(L0QHSiXtz4nKl*P`yjN!#QvdTm_S^pntL9Efa( zdtu;u+B4xmBo*EbbKnM82&)e{5LpIyz*?9%^gv`2TmU=at1z*Ec^ziJ)I$$Ma$!>9 zfk-hdffcX|u7jfvI}mAsQ{W!B9wyzuaURTsal;NoX2KdMS4TI)3fKwP!8;Bo9#+FW za05)bk#+A-<69huJVcOufUqj-}pVJ*Ja0PJ9i3cKOa2u?Fap?ylP4JwPXg9bX2IexXU@9D*K|GuU3*a56 z5D$038aOPIc$f#b!-X*LWA;y{ABd#EoiGP(o=m&Lgfk9AmcR_S8m@&KVd0qvA|3FN zvkpWO=F$Ez9nQ@@5Sb1)!Fh1ilmn4+m^$@9qz;Zf|3IV}?uMQ4njg__w{RQ)Ghri~ z2`A4u5GjELuo6zaly-wnuod1t^FX8v)?7xt&u6^OqTOKY71TRSRXA2;RVFQwA+Y>%V78HfQ>97nI!5Ub*ka(E-bK+qk4BW=~8cc<$chl~$49gGk;@owaNfg=H#qwd#v9!JDB}$-DyQA=pr8MOc881MY}f!7!uiXIhZj9Y zJp3HC!4;1a4^y5b{!X^Pl6Y9Yf_ONdUz}SA*TE|BumN_#Hn_BkcvuHhO4#qi$uRyI z;^9oV5H`VTn7)#J2PgiLeg_+%`YCbM^gEdOEd36?5A$KmbM!k{@GIisPS^-@YKVtj zP~AoUf1Y^gdy#gBV_|{3UqidYjcXaNu;aIkSGeFM#w#p(`9Q?{8TGx6@eXrdq21x| zS7~=xR?j>S$N!Oe9$xc0^E^!Y(}BoNS-yeszL0i#lkpDMy~TKkTQ?F9!*3H0H^5rh z4mZK{zY-6pyi5Gg8Q+_Uho8ggu;p*W!wJpA!|cBk597BG4>!Y|aDEH@?r!?sd-OZF z66V5*AJFgMZdeWrTIqLi*+=v{*xg3IgA=wAe-HEcC&a_G?Zm^xPl<<3umX!`z^A()Xc_5N} zFYjR%O#ha6csDG8D`6#^xQBS*cf`ZAy~M+j-xI%x{@P8ygRKYXcW~Q5`VHI_q2IuL z>R_Z1-sL+OX@?d5gAsKf`vHdX)aseK3*-%V0t|aR(?LOgeZlQVlC$le~{mfAStC{DL@xXEDJ* zke`(l4vj<-mb3g&mcziXNMs?L0;^%th)ARfHvNF~u=oVhKSsGujYKkF(&@y(?Po+H zol?#-BavjvRRc?4@mb^p*TF_vo*jv77oJNT<=TE8>w`^G$&d0(IiEOKlS3RVn8x~H z(#3cw*G%5a`ezXbn_xAp;5VH+U~yg~VpfnZOoPQ&L?T7<9=5@xt0EEgINLiX5=n)r zH%1~ka1WdZn{MKV#9&1s&lH7$TOyHGd4Fdl(hbXg#`jqzzn_y12JVSO>S0T1Bocmt z^4-h#aA8du&w_>9VHqsDKN49DQx``fn_z|TN!~w9y}`1_B9WaeZ-NQD4^%`V>2MF6 z30od#dtuWPkw^`!c`_17s$_dA`Q9}QJR6DR!GhJ1NF{7}k#foMHIYaQtbm$4FU4o`x8sX| z^)sZgd_F!fjOW1$`5PEt%A)Gw+B_V_^3^O~H;8YR>)(#gKU16Md#pd;XTOJ!RR>Z&`5nj2 zc-Qvf#81HwJ1cg47+-+T!Vgx5OGvYVG_G~n+proxGDn+7l3%QTx)DDSf2@b^z~|vd zd3cjd@4|c4aT@-dT<3+@(E08a!-MmPshuB=9di2-(LT8yxa#L z_VDxY^4y+!55EjA&-6Lo!`I@=xUXWN_`kaQ`6j&F%jBAiNH6uX6EEMpzt|)HggB0u zd9Lnl9zGo}_i}9W@YC^fFWfaAejZ+)cVU&EG`;%*yM317=REG+$7}I-;nQQ}A7(sYt$`C9KZQcp=i_8GtRE=MLlq0W1(&BTw#dyR!+d@erLSdjHs;OFAK z=F4^X)q~{Uf`7*&f2o5#_=&G+^L~$dk}@Qll%Y|Z3wRxCtYzWlnKNTOd>(!YW3^HI z2kyRFg3oy+;5naF;^i6s*Gv4D?)ZAVJY(MS-?@D&UY;RodE*n;KA{UQ&nLJ1A#R@> z;@V7;?T>Q%EWAAb+KNBU?ep;Rd}_;|?Di#id49Cz&v5%nygd8a@)x*$Jzk#KZ28OF zz7;RePPY7YZr_EMXXRS{7Pn81=UPUO|Eb$&;pN$^R{Z^LpNE&{GFko?ZeN0zdz>x* zjN4b@Byi70+MqzJQl9|5W1h z@z?S?aE3d+9^Z)fT7N5EekY_>;xBN=cj4u?L@a-e+b18wwJ(0R#PYYfeHLDR*W_f$ zpTB|S&%?`apLqEa{K6J(a_Xi6OWgTa;^lWtW_#pckC)#%@$#*B`8|qTCH`@D{#|(a z%?isu@Ak<<>Hm1I@@L`Yw=2AS9)8|d@A8%4<##G3du(4NKH(GZ{Oj@ZI};B|{44JA zx8miuC@lYm+jrrI?zHRwUAIp@lzlAT>i-|PeHOkO@74eE@bY|ntA2O5<4f@J41CM) zbNfnscBeMa@~EGBygU!x%eUg?ndx4>3tzyq^zWAZ<3DxHFUg7QAMsx8lZBV(xLfhV z-SK&NdDgq-N4b3oUY_;um478(p2MCf$0+07@%4ClR=ee=xqT}>WuNVDbo(xR`hL6q z7rA}%VO;CRTjgKw_E~s&j=ER*^YHQ^+%d^_O@~_7)JZSgd zSKaZg_<07;gpl_Av)gy!ci^Xa^snS$Tub5^*Iw(-!pn2ky?h>Co}=yMOYn+kS$p|P zygWzSt9Cp0(}e zOYrg>X)j-imuF3T`FgxO2inWG;^kS{>Qp~9$tQn$*cZL@SE_(vi@=I_)2{CSnv9+$Cu-+`aR7Z z--_?V)66lCPrC4vPqf#6o;yC73!-&+ulCK73#RGz`Y&LW z@bV>ic@~0||Gn<~EAjH&mNIF-a);-A3V-!@`Hd_-GEjjUhd)1h-MJN?lO1RNPW)>Q zZ(nQa!gu3ekp1i5+&-BP2IO}@(j=b0-s4+4J`2AIze(bg{^c4UdHBjHcK+A8eF;8$ zYMl8qiLY_{N_@llanbXex81%TAI`D;dv4!~m)~mfDt{MVe$U0rCm+T61K!%cPu=-v z;j5>`nHNj>)3>{~AK&>Sp6w|0H{0z?@b6ELGk+p}q1#vDr(Vdj%)~Eo`+EE?{N>_T zxP7a{U&OO4#IJGtE_~d@_W1jw+b45z>Mr~f692Z_XW`}d92bj!-{I~4mxq4>Un+j5 z!`uC*1V8+eIP(PY{Pp%PUP}M2#AoA=<#jAykDr6TU3}m(SN*r*TL;O%3-6oZoqzJt z9N*!ek^EEK`Dfub;JwP9hu=9!{w4UKm)iB0>CV3rUxD|^zaIZO-m89E@$LAvQvT`g z{JZdv%#8E=ydjxJ*n&TOVEy-ufBewP?D{Em=bwkK#e0>%1phwXtNfMt8*j4ruase6 z|ER~WyV={f;sbZ_Jfnf-=RHbw@xO`7c~+c9C@$oMV(*C0d;1gfudC&&&dHv(V_%{5=HTE1@;P8$)R55`M{k2_& z1&%a!8-?);@Kzrzb^C052i~g=^6|rJz3ZS9pNTJ}yn#x0{?+((c(42$@mmMUza6iB zW4B?QJAZW?*ZJ^X`G@fv@m^yn8@~f@_3@4F{PXceYrXR?#jn770%#g&K;P> z9tUaoGhc}_4TE)byW1fLpZ%(L84K}C@m^(Ig0I65R>oS=4Ew!z88_i);m;qq4ZN3n z-icp{k5vZo37iZ!;jMGhLpxmabviz?KE^c-yN;&gZ^UzIS~ z{9yfcHfeT|#%miE;wSu(=YEo3zq+>jQx$$5o}%{myq9fgz{_th-XUZ17W5Fk|x$RhACq{epKV&{i%#J>J9I5*5Ie%y~^2yFTxL2 z&JNOSAx*4uN?ppAs)ldy?oVm>Yw)qkAn`f)GJFRO*{?0_>p_M1d2hwI-bSp%FTq#f zck#MkyxkX8;}>m=Gf(r!_8ajHfAv1!?!aem@;;w6$5B3f>cI8e-do) zjlGVY_*pIXvEEf~pD>=e4{sgs7P@^pKJPv6@i-m72!HIrZRCBJzj^o?{1}7sl{)fw zY=b=G=$-fN>-xkvk4L1R$g_{ee!%Zd@H$Z8$iv=7c_z|se5v?#ZZFSDTF~mf4T&dl z-i42~4YK|W{OfpY{hQqR=i(QC$g{L%8+W>W5x(^!errm~$KSy1E630KIL`d3_=r2c z4*xm++kx>t+mDxLVxKe6^Ipo|iBJ8feLSD|rE4Fbn8EQV-fPayz&GK&>L(ZfIo|3+ zY3}@s@MT-Q^DoD*#e3ynhi}F&mhH=S=iiK<^@(@>o%m9`SN@57VDlV)t>mBQ&OZa6 z+wMJ&=He^xUdP)-_-6d|l7F!~|8jihr{42y9sWu@hqN*KPcyz0Z{=U=&c74Cy~i(e z`@{*%<=gE3QR(&>_}B4X{UaCOf%mH4B7FS6dd|n(`IqBY3ogXb`> zfBo3wqZ6O9-TRz6@f42j@GnXHMtAu#@Y6oC>!;Q2bMcLMuksh+ci_FsUye`s-1~g2 z4!;0D*!frsX;yz3XP!E+4tOtfz#jZo`~@C9DUxh z8n5Gx68s+g0m-A&U5}Oc-T(G3V?BQIPVX|d;^*K8D`Pilnn>eS#uO^h{L1^7Xfi$* zAM2P%>S;Fq4t#o$Z4B(_n`?9W?rA6`&2xKV^jG4gt*Y_w;JuC;8u7K?dDl}relOmu zjA|n5**kbWrIO}u(s9d(5YB z5O){;hJownz2rX`-;O_0>X`QfkL73MyM_lnKVx2q&p0yZdCpmdpNaP>e*?aJgm?Md z@aEA$^Hqu#xWnDX-T2q>42hWKPnpcV1E1>QC*wz?c$aTBe%3MGapJ2*MOfkh;PFe z4dT1;PYmKy&SVS^;wR&`4dQ3x%~9UvUx*(+h_AxW9K<)^@4|za{kIKKKZx(f?;XUa zu(Qq_?VbN*{DMLJY<%4yej$F>AifHpp6b2+2K?MXd>ei>-fMhy<2MiDQ?eOOY@!|s_=mmg63!yyL}t*Y53LR7rW=THheRFf%wPVz8ine z*kJTKkiT;Kl(RWkJ8_Wh$B#-MWc%?`@m|*q7vj@T4!X}(DQ^mYRrs0sZBl;zdiO8v z|H8a&z)zeIbYC-d97nX1CiRq{d6yhpzubQtB@cBD*Ci(g%}is!IvjbVl4i>fz3X8L zK0eF49t!Z|@pr|sjwVML>|^gT{OU8k>!AkUjNe9a2iAksQxpE>vx4Sr$Uxf8zGE)? zIAJ?}%oOi_7T|z-WsfiJA0H%_znGim^^dvBQ6S>7Y)*n=8>lGV((+hW%!rzUdNQR_*VRN1Gmv} zOxaADNx89)DW#m9_`C622j<~u%cS!-cfZ8DoSFDlc&~EK#Bah6R?ZUAjGqy^oYEgE z@eA-?pYPS<*W-^HxE;I?^Vf=R$9IZ9=x8rTU3HVD`O;wYT4BOhu5ptxmHpq$VDwsg zvfEF_ufuyCf6vBm#UCqW;BR1`Ux-(i1*6|B$#Caig}(#um45@i8t;{V8-4@+8Cidh zJO6Hc{w(kOQ>grGqw8NV9u)dxE9OG~}`c_J5>H{!kOFay66Z}szLM;Yxtl#8Exuiekv z`g_^NB7Ev1`&e?9!#l=u1!<<;7h@akb*#fLz^@~}fbZ+Rv10oc{FpNP_#>&mmon_Z zFTsB($8uqZcg)$z7jf-v3EL_2#RNwh`*<)5-~M3Gj1!;Z@OByU@SiUYMn5Od@9(7y zCHS=u1#*w~A76^M=Dn`|UdmXCpHyl0hxpFEwsh1(4QcY9vgJpo7Mx@&wGjADDikMY4k6j?K|+z z_*m-?lSV$!*n=;X{ZF-H{f@qpPMYFhd-s*;_$s{D+%pet319ge@BPD0d^0{)9Y`G}@Zr-Qyx0CA9iQ=%cORLKUyb)F|2+IAyx0C~ z89wl`clm1ZX?U;lZNeA4;$6O-_%^&Lb5_zfePhk8zl2LUR(v&R&XxM*ulM+Ymr_6J z_=|q;UH<9##dxp!orhn8_bUG~{O9Yv%U_GX<_~uHN4v|v34ddQclmeXoAF-tpD>eg z@JH|Rr{mM{Uge*TFKqNK|2%v<{#@!ZR{bu+r@j$1=g072met~yUypCx7&P}w`F6N{E570F81+DU>C0XC)OTWh zj%)kmSoldzU{Iu(qu?ob~){~VmqxX6z?sm-!srZln7BnxE_^aH03O?=c z_W9ZUZeM^;-V!vINPM;1m*K1bVPB_s$L(wIXSM{R&yD=V?VIp>@f_awuLIsoTW`mo z^Iq(8c=3Te+5`WRyx!~1KNUar{h-+{{*Z57^)m$@|AF1tQyt!}-vaz|_}|I)pXTs( zUoXSY`Y>qTEBA?_#FIdJiFNb^<&2u;sYH)^S9z(bH^{iufyLj{_Xxg%(B(^ zNnZxd`{aD-Lx*=9pKc<}>pQ)VPj})!$G6Hl4*jmLpHs)Oj)d97e-$*}q=5q`I=o{Y z8Kf!O9W=wz&hs5#zS;tJd?vm-$u!^bh@Xjn^9VEMcg(`X z6yui;H_cy4{oLuu-_b`aNi#Ot^!y%LJ-!id&36wu^04cu6@TSXrun3-<7v0=!tWko znhhS?ketu;nWIh5=VxT$!zrejCT+ORoqrxaXQXKsiT|g=+ihHeuMeB%M2|jFiQjds z89hE${2TC0_j>%Rqs{0wFsJ9Wv|%fLZmJo*9`5wiPnh>z_)YlV@w(qUy#=z z&h&hq^1x%ll*$x ziIO>G`>Nqr_*LX1kC0v%6e#RXe_8qUrv= zs$D*HJ^R%knr4{y{rZ9J!}u%lPY(2U8)xHp zjlCUd_%-Kx`yBkMQ%v(7iSO!P2I&Wd_=!{5=ZQb|KmFP%j9-G!J>N7}1@My{-m#sv zq}lr;=0wS3qa%%7#!dKT7ne%dvrd6KN3Kj&Bp^L82jE_@@e`*}w@ z)sbe>wPy6X!lV0L+t7^Pg14UQR^#yYHgw85t~1S4*@iFOKJiAr+c3v_-=2YQ!dvG` zhjhEvpNpS%y=l&u{8Js?UVjn3zQ8ooHGZbU+jUfq-+nXwK;pk~cssrhzx2nZSt5Si zfxh+Iz8UYkh4CW(YPavi7tc4%r)9o)*zFTJ!AZQ8V;5*g>kqb7}cbVokslUl?pMhVr&@`vY_7}N*E`H^ z%HPxe`1EqdpZGsHd{6(!Py2;w#-D)iaCkeu89#G9`*cuVv)o%f6!jg;;-Lyet1AeCGG2`JDJdw=c)PuR`(@Z2jlJp6$mM z7$LJ=>gPjud^3KEKV&k@`^Ve;s}sKlzgYbD?)bzX^BG4VWFF%YpMlRE#OLCR@NW-{ zx65CIpQJfg@4 z6Tc}TWRCKa|1tf2nE1qbwC|yz=yNN1-&;O=A0%lqNz;-TGT)SKIM0!XV_%&|nvA57 z`Jk+4t|N`T9VPg8jtrT9vF2fix64_HFCP(#UaNT5?d$PHM^jIfr(ZqsUh1J0zitrU zg)ip!5sp5T_%=uWcKMQT;rew-DEfU)^6RY!JO3>F`-AvA{KOyF--RFhcEB7T#1{|k zD<3|cJd@`$Pc;Y3fQ-|;Lx-4CI5G?cjH&!GT+bo?xnH~}mNhiPIoH5=`*BLvV)bDE2l~b;BcrEMbtzTY>--r)q+2u|@tY5jq z_zrv#-uj#*Jgm=8UF@HFUqDHkgd#pWBh55k2Qp%($smn7Im9h=qo<*b8TZ-sn|MUuHqkG_WRrt0!tdgBzwNOy1qKDCr$Y5Q1toar0dPgo~LDfZL+=x zLgryIPp3G_Oj}*>fZyt?VbTQ_P=^nO%)iTP{(AFre9o3enr7B_hoqU}$m`s`GEFB< z?m2dv+}LS~B%hu%vty^JkbKS!nXgN^%N=PP<*6r4>C#a2IT?R&q`7#ppYCk+=Qh$L zo)zW)OXFzU zHYv~DA@dE{#(R!+q_GBeZ`%fLC$FdMV?xr#?Ej=GU18_tk!Ct+RHfZ+Pde5&J=!N_ zo-QIy?$h=>vc{3d-anP&Gpb_GXJO*&@YVSHdEKv%Iohg)G}(U&nP*D>A>F|3k#cm& zdY%cn@58qDbIANo7Uqux=@0drM0=^8hL+}CLxg0nzI+_>)E?5*tqGZ%B+YfP z(MtR4maO9$hj+A7LJ93e z9*;}CeCJHlcZ`rhn(Vhj(d!$&F@4*^K?H{q*0IP;(zKK29La~j-u}l+DQmIh@qt~| zLmhe8W1s?G+T)M!?^B6ihi}Ax!Rx>&4ljN40e_C{vn5>{>FQcT<|mTwLhp2epHjCU z+WFn+oi3epr61Y(mBvmNW?eH$m-|l0%#=C)DMva-o0pKLy*XrFBWaF2zONqbG*VAh zq{;s{c0I~^8t~2d&rI@Io94ZYE*?5{)C^FVsjIO?tyUyi>F_IgJj?P75!ergP#EX(*8>o>8(ESJCR zPWw3Lj1&9n)G^0QAx&dXnhRp5;Zl^!{>IMdGIttBIb3ZcE-dRH{#e+%jntvI$^3QV zWDNE?UW&`(FMoIJIChz;92YCD9H+jG?P^g)xJxBX&j}(gWqliE*`AQ~-3q6Z#gT|{ z=xL1CWrqH%p*}Ns$s%)-zFf&i9=slUBD_UEZKzjz?D6_Eb*Y{5|9>5=vHwOrBqZuI zbu9IkW7l1}&Q){m*C{$v&5XW2Y=k~ljn{M4^}K)BuJr%@!q6mrwR*%3OBkUiC~3hN z(Yyz~Hz(+6y=8E`?w`qkf)C7O;Cu6UeU`d5xyj+Qc|cI}!yB)UO2sR!(>a4m4A<^!0RZU4W$JXTf9xK@W5=7ql5#$09q z_8obr#hVP~!;Yp^P8pG}u7D5P1syhyH|OYw40X9)pjO*U&mPaxOZ7^hxCup0MV5vn4K+)1o=sCQ!B!aZ`uBz`{>YFNO?Ht|k|@q;nr|b|&;{yh zc|rN9bGxz3$qeIyXpx6rr0+ABJLalqY?~m_WAr$6el*3QH_F<6rWZNp^i%c4>gK2p zO=kkJvZpc>RHCE z@jp|KN|~a<%4du|$GAHFCQ8$@nEa124$aWl8>L44QmfDPDr?;_^NJYb!(@@A`DAgL z{J?w2lI~?S?xbkM`#zPcKR47I{bxfxZs^|_YLy`i zJ~1?Ik&oytKHm~QJ%s4z><(#;(O0VCXimJIq2@(j$Dgj>G1PXu?n77TTY4L!w`cvo ztwU!Q?`g{`bnLdgM8|H+J9O-}oTFp6<^6{CY|DXpIm^fEv-DN!_E>e>SDiied9o3s zyjEY0v3*uQ8n|w$59yQtJKNEB4Ap9=-TemLk$uB5^+={+{h6U6b_(xKV-47|bq-y! z|130E|4%$!^9}7fLw{|k7UM@UPJdt=E<^tkeY5{rL-U#bdVBQ!+%aBbjN|_zj_n8P+Q5F* z*XAvT+GVAVsH=?`7ZOJo_`;|D>AQJJoLUmlT>3`?)UUm(%$$7?Ur;p*}%}Cv8sKq|cO*{O0 zb-@2@K))PkJfn40oPT+oZa3AgIK3*Uo(<}TplS~O)>#b6Ji15e>)c1�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 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×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

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