📄 individual.cpp
字号:
/******************************************************************************* Individual.cpp last change: 01/06/1999 version: 0.0.0 design: Eckart Zitzler Paul E. Sevinc implementation: Paul E. Sevinc (c) 1998-1999: Computer Engineering and Networks Laboratory Swiss Federal Institute of Technology Zurich description: See Individual.h*******************************************************************************/#include "Individual.h"#include <cstddef>#include <vector>#include "RandomNr.h"#include "TIKEAFExceptions.h"using namespace std;Individual::Individual( RandomNr& rn, size_t noo ) : randomNr( rn ), nrOfObjectives( noo ), validObj( noo ), objective( noo ){ for ( size_t s = 0; s < nrOfObjectives; ++s ) { validObj[ s ] = false; }}Individual::~Individual(){}voidIndividual::initRandom(){ subInitRandom(); for ( size_t s = 0; s < nrOfObjectives; ++s ) { validObj[ s ] = false; }}voidIndividual::mutate(){ if ( subMutate() ) { for ( size_t s = 0; s < nrOfObjectives; ++s ) { validObj[ s ] = false; } }}doubleIndividual::getObjective( size_t index ) throw ( LimitsException ){#ifndef NOTIKEAFEXCEPTIONS if ( index >= nrOfObjectives ) { throw LimitsException( "Individual::getObjective" ); }#endif if ( !validObj[ index ] ) { objective[ index ] = subGetObjective( index ); validObj[ index ] = true; } return objective[ index ];}boolIndividual::covers( bool bigger, Individual* ind ){ if ( bigger ) { for ( size_t s = 0; s < nrOfObjectives; ++s ) { if ( ind->getObjective( s ) > getObjective( s ) ) { return false; } } } else { for ( size_t s = 0; s < nrOfObjectives; ++s ) { if ( ind->getObjective( s ) < getObjective( s ) ) { return false; } } } return true;}boolIndividual::dominates( bool bigger, Individual* ind ){ bool dominated = false; if ( bigger ) { for ( size_t s = 0; s < nrOfObjectives; ++s ) { double igO = ind->getObjective( s ), gO = getObjective( s ); if ( igO > gO ) { return false; } else if ( gO > igO ) { dominated = true; } } } else { for ( size_t s = 0; s < nrOfObjectives; ++s ) { double igO = ind->getObjective( s ), gO = getObjective( s ); if ( igO < gO ) { return false; } else if ( gO < igO ) { dominated = true; } } } return dominated;}boolIndividual::equals( Individual* ind ) throw ( NilException ){#ifndef NOTIKEAFEXCEPTIONS if ( ind == 0 ) { throw NilException( "from Individual::equals" ); }#endif for ( size_t s = 0; s < nrOfObjectives; ++s ) { if ( ind->getObjective( s ) != getObjective( s ) ) { return false; } } return true;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -