From ce3f0a611d6c745dca9d0428442b39210de296af Mon Sep 17 00:00:00 2001 From: liefooga Date: Thu, 21 Jun 2007 14:31:28 +0000 Subject: [PATCH] update with new features git-svn-id: svn://scm.gforge.inria.fr/svnroot/paradiseo@349 331e1502-861f-0410-8da2-ba01fb791d7f --- .../paradiseo-moeo-1.0/src/do/make_ea_moeo.h | 32 ++++++++++++++----- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/branches/paradiseo-moeo-1.0/src/do/make_ea_moeo.h b/branches/paradiseo-moeo-1.0/src/do/make_ea_moeo.h index 4a72fabfc..ce30c5766 100755 --- a/branches/paradiseo-moeo-1.0/src/do/make_ea_moeo.h +++ b/branches/paradiseo-moeo-1.0/src/do/make_ea_moeo.h @@ -105,20 +105,36 @@ moeoEA < MOEOT > & do_make_ea_moeo(eoParser & _parser, eoState & _state, eoEvalF /* the diversity assignment strategy */ - string & diversityParam = _parser.createParam(string("Dummy"), "diversity", - "Diversity assignment scheme: Dummy or CrowdingDistance", 'D', "Evolution Engine").value(); + eoValueParam & diversityParam = _parser.createParam(eoParamParamType("Dummy"), "diversity", + "Diversity assignment scheme: Dummy, Sharing(nicheSize) or Crowding", 'D', "Evolution Engine"); + eoParamParamType & diversityParamValue = diversityParam.value(); moeoDiversityAssignment < MOEOT > * diversityAssignment; - if (diversityParam == string("CrowdingDistance")) - { - diversityAssignment = new moeoCrowdingDistanceDiversityAssignment < MOEOT> (); - } - else if (diversityParam == string("Dummy")) + if (diversityParamValue.first == string("Dummy")) { diversityAssignment = new moeoDummyDiversityAssignment < MOEOT> (); } + else if (diversityParamValue.first == string("Sharing")) + { + double nicheSize; + if (!diversityParamValue.second.size()) // no parameter added + { + cerr << "WARNING, no niche size given for Sharing, using 0.5" << std::endl; + nicheSize = 0.5; + diversityParamValue.second.push_back(std::string("0.5")); + } + else + { + nicheSize = atoi(diversityParamValue.second[0].c_str()); + } + diversityAssignment = new moeoFrontByFrontSharingDiversityAssignment < MOEOT> (nicheSize); + } + else if (diversityParamValue.first == string("Crowding")) + { + diversityAssignment = new moeoFrontByFrontCrowdingDistanceDiversityAssignment < MOEOT> (); + } else { - string stmp = string("Invalid diversity assignment strategy: ") + diversityParam; + string stmp = string("Invalid diversity assignment strategy: ") + diversityParamValue.first; throw std::runtime_error(stmp.c_str()); } _state.storeFunctor(diversityAssignment);