Diversity and Fitness Assignment Method added

git-svn-id: svn://scm.gforge.inria.fr/svnroot/paradiseo@1292 331e1502-861f-0410-8da2-ba01fb791d7f
This commit is contained in:
jhumeau 2008-12-15 13:59:37 +00:00
commit dd9b352c50

View file

@ -57,6 +57,7 @@
#include <diversity/moeoDummyDiversityAssignment.h>
#include <diversity/moeoFrontByFrontCrowdingDiversityAssignment.h>
#include <diversity/moeoFrontByFrontSharingDiversityAssignment.h>
#include <diversity/moeoNearestNeighborDiversityAssignment.h>
#include <fitness/moeoDummyFitnessAssignment.h>
#include <fitness/moeoExpBinaryIndicatorBasedFitnessAssignment.h>
#include <fitness/moeoDominanceDepthFitnessAssignment.h>
@ -94,7 +95,7 @@ moeoEA < MOEOT > & do_make_ea_moeo(eoParser & _parser, eoState & _state, eoEvalF
/* the fitness assignment strategy */
std::string & fitnessParam = _parser.createParam(std::string("DomDepth"), "fitness",
"Fitness assignment scheme: Dummy, DomDepth or IndicatorBased", 'F',
"Fitness assignment scheme: Dummy, DomDepth, DomCount, DomRank, DomCountRanking or IndicatorBased", 'F',
"Evolution Engine").value();
std::string & indicatorParam = _parser.createParam(std::string("Epsilon"), "indicator",
"Binary indicator for IndicatorBased: Epsilon, Hypervolume", 'i',
@ -112,6 +113,18 @@ moeoEA < MOEOT > & do_make_ea_moeo(eoParser & _parser, eoState & _state, eoEvalF
{
fitnessAssignment = new moeoDominanceDepthFitnessAssignment < MOEOT> ();
}
else if (fitnessParam == std::string("DomCount"))
{
fitnessAssignment = new moeoDominanceCountFitnessAssignment < MOEOT> ();
}
else if (fitnessParam == std::string("DomRank"))
{
fitnessAssignment = new moeoDominanceRankFitnessAssignment < MOEOT> ();
}
else if (fitnessParam == std::string("DomCountRanking"))
{
fitnessAssignment = new moeoDominanceCountRankingFitnessAssignment < MOEOT> ();
}
else if (fitnessParam == std::string("IndicatorBased"))
{
// metric
@ -141,7 +154,7 @@ moeoEA < MOEOT > & do_make_ea_moeo(eoParser & _parser, eoState & _state, eoEvalF
/* the diversity assignment strategy */
eoValueParam<eoParamParamType> & diversityParam = _parser.createParam(eoParamParamType("Dummy"), "diversity",
"Diversity assignment scheme: Dummy, Sharing(nicheSize) or Crowding", 'D', "Evolution Engine");
"Diversity assignment scheme: Dummy, Sharing(nicheSize), NearestNeighbor(k) or Crowding", 'D', "Evolution Engine");
eoParamParamType & diversityParamValue = diversityParam.value();
moeoDiversityAssignment < MOEOT > * diversityAssignment;
if (diversityParamValue.first == std::string("Dummy"))
@ -163,6 +176,21 @@ moeoEA < MOEOT > & do_make_ea_moeo(eoParser & _parser, eoState & _state, eoEvalF
}
diversityAssignment = new moeoFrontByFrontSharingDiversityAssignment < MOEOT> (nicheSize);
}
else if (diversityParamValue.first == std::string("NearestNeighbor"))
{
unsigned int k;
if (!diversityParamValue.second.size()) // no parameter added
{
std::cerr << "WARNING, no k-th distance for Sharing, using 1" << std::endl;
k = 1;
diversityParamValue.second.push_back(std::string("1"));
}
else
{
k = atoi(diversityParamValue.second[0].c_str());
}
diversityAssignment = new moeoNearestNeighborDiversityAssignment < MOEOT> (k);
}
else if (diversityParamValue.first == std::string("Crowding"))
{
diversityAssignment = new moeoFrontByFrontCrowdingDiversityAssignment < MOEOT> ();