add achievement fitness assignment scheme
git-svn-id: svn://scm.gforge.inria.fr/svnroot/paradiseo@309 331e1502-861f-0410-8da2-ba01fb791d7f
This commit is contained in:
parent
f675a004bb
commit
fca8cf40ea
1 changed files with 86 additions and 86 deletions
|
|
@ -24,67 +24,67 @@ class moeoAchievementFitnessAssignment : public moeoScalarFitnessAssignment < MO
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
/** the objective vector type of the solutions */
|
/** the objective vector type of the solutions */
|
||||||
typedef typename MOEOT::ObjectiveVector ObjectiveVector;
|
typedef typename MOEOT::ObjectiveVector ObjectiveVector;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Default ctor
|
* Default ctor
|
||||||
* @param _reference reference point vector
|
* @param _reference reference point vector
|
||||||
* @param _lambdas weighted coefficients vector
|
* @param _lambdas weighted coefficients vector
|
||||||
* @param _spn arbitrary small positive number (0 < _spn << 1)
|
* @param _spn arbitrary small positive number (0 < _spn << 1)
|
||||||
*/
|
*/
|
||||||
moeoAchievementFitnessAssignment(ObjectiveVector & _reference, vector < double > & _lambdas, double _spn=0.0001) : reference(_reference), lambdas(_lambdas), spn(_spn)
|
moeoAchievementFitnessAssignment(ObjectiveVector & _reference, vector < double > & _lambdas, double _spn=0.0001) : reference(_reference), lambdas(_lambdas), spn(_spn)
|
||||||
{
|
{
|
||||||
// consistency check
|
// consistency check
|
||||||
if ((spn < 0.0) || (spn > 1.0))
|
if ((spn < 0.0) || (spn > 1.0))
|
||||||
{
|
{
|
||||||
std::cout << "Warning, the arbitrary small positive number should be > 0 and <<1, adjusted to 0.0001\n";
|
std::cout << "Warning, the arbitrary small positive number should be > 0 and <<1, adjusted to 0.0001\n";
|
||||||
spn = 0.0001;
|
spn = 0.0001;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Ctor with default values for lambdas (1/nObjectives)
|
* Ctor with default values for lambdas (1/nObjectives)
|
||||||
* @param _reference reference point vector
|
* @param _reference reference point vector
|
||||||
* @param _spn arbitrary small positive number (0 < _spn << 1)
|
* @param _spn arbitrary small positive number (0 < _spn << 1)
|
||||||
*/
|
*/
|
||||||
moeoAchievementFitnessAssignment(ObjectiveVector & _reference, double _spn=0.0001) : reference(_reference), spn(_spn)
|
moeoAchievementFitnessAssignment(ObjectiveVector & _reference, double _spn=0.0001) : reference(_reference), spn(_spn)
|
||||||
{
|
{
|
||||||
// compute the default values for lambdas
|
// compute the default values for lambdas
|
||||||
lambdas = vector < double > (ObjectiveVector::nObjectives());
|
lambdas = vector < double > (ObjectiveVector::nObjectives());
|
||||||
for (unsigned i=0 ; i<lambdas.size(); i++)
|
for (unsigned i=0 ; i<lambdas.size(); i++)
|
||||||
{
|
{
|
||||||
lambdas[i] = 1.0 / ObjectiveVector::nObjectives();
|
lambdas[i] = 1.0 / ObjectiveVector::nObjectives();
|
||||||
}
|
}
|
||||||
// consistency check
|
// consistency check
|
||||||
if ((spn < 0.0) || (spn > 1.0))
|
if ((spn < 0.0) || (spn > 1.0))
|
||||||
{
|
{
|
||||||
std::cout << "Warning, the arbitrary small positive number should be > 0 and <<1, adjusted to 0.0001\n";
|
std::cout << "Warning, the arbitrary small positive number should be > 0 and <<1, adjusted to 0.0001\n";
|
||||||
spn = 0.0001;
|
spn = 0.0001;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the fitness values for every solution contained in the population _pop
|
* Sets the fitness values for every solution contained in the population _pop
|
||||||
* @param _pop the population
|
* @param _pop the population
|
||||||
*/
|
|
||||||
virtual void operator()(eoPop < MOEOT > & _pop)
|
|
||||||
{
|
|
||||||
for (unsigned i=0; i<_pop.size() ; i++)
|
|
||||||
{
|
|
||||||
compute(_pop[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Updates the fitness values of the whole population _pop by taking the deletion of the objective vector _objVec into account (nothing to do).
|
|
||||||
* @param _pop the population
|
|
||||||
* @param _objVec the objective vector
|
|
||||||
*/
|
*/
|
||||||
|
virtual void operator()(eoPop < MOEOT > & _pop)
|
||||||
|
{
|
||||||
|
for (unsigned i=0; i<_pop.size() ; i++)
|
||||||
|
{
|
||||||
|
compute(_pop[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates the fitness values of the whole population _pop by taking the deletion of the objective vector _objVec into account (nothing to do).
|
||||||
|
* @param _pop the population
|
||||||
|
* @param _objVec the objective vector
|
||||||
|
*/
|
||||||
void updateByDeleting(eoPop < MOEOT > & _pop, ObjectiveVector & _objVec)
|
void updateByDeleting(eoPop < MOEOT > & _pop, ObjectiveVector & _objVec)
|
||||||
{
|
{
|
||||||
// nothing to do ;-)
|
// nothing to do ;-)
|
||||||
|
|
@ -96,19 +96,19 @@ public:
|
||||||
* @param _reference the new reference point
|
* @param _reference the new reference point
|
||||||
*/
|
*/
|
||||||
void setReference(const ObjectiveVector & _reference)
|
void setReference(const ObjectiveVector & _reference)
|
||||||
{
|
{
|
||||||
reference = _reference;
|
reference = _reference;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
/** the reference point */
|
/** the reference point */
|
||||||
ObjectiveVector reference;
|
ObjectiveVector reference;
|
||||||
/** the weighted coefficients vector */
|
/** the weighted coefficients vector */
|
||||||
vector < double > lambdas;
|
vector < double > lambdas;
|
||||||
/** an arbitrary small positive number (0 < _spn << 1) */
|
/** an arbitrary small positive number (0 < _spn << 1) */
|
||||||
double spn;
|
double spn;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -120,24 +120,24 @@ private:
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Computes the fitness value for a solution
|
* Computes the fitness value for a solution
|
||||||
* @param _moeo the solution
|
* @param _moeo the solution
|
||||||
*/
|
*/
|
||||||
void compute(MOEOT & _moeo)
|
void compute(MOEOT & _moeo)
|
||||||
{
|
{
|
||||||
unsigned nobj = MOEOT::ObjectiveVector::nObjectives();
|
unsigned nobj = MOEOT::ObjectiveVector::nObjectives();
|
||||||
double temp;
|
double temp;
|
||||||
double min = inf();
|
double min = inf();
|
||||||
double sum = 0;
|
double sum = 0;
|
||||||
for (unsigned obj=0; obj<nobj; obj++)
|
for (unsigned obj=0; obj<nobj; obj++)
|
||||||
{
|
{
|
||||||
temp = lambdas[obj] * (reference[obj] - _moeo.objectiveVector()[obj]);
|
temp = lambdas[obj] * (reference[obj] - _moeo.objectiveVector()[obj]);
|
||||||
min = std::min(min, temp);
|
min = std::min(min, temp);
|
||||||
sum += temp;
|
sum += temp;
|
||||||
}
|
}
|
||||||
_moeo.fitness(min + spn*sum);
|
_moeo.fitness(min + spn*sum);
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue