00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 #ifndef MOEONSGA_H_
00039 #define MOEONSGA_H_
00040
00041 #include <eoBreed.h>
00042 #include <eoContinue.h>
00043 #include <eoEvalFunc.h>
00044 #include <eoGenContinue.h>
00045 #include <eoGeneralBreeder.h>
00046 #include <eoGenOp.h>
00047 #include <eoPopEvalFunc.h>
00048 #include <eoSGAGenOp.h>
00049 #include <algo/moeoEA.h>
00050 #include <diversity/moeoFrontByFrontSharingDiversityAssignment.h>
00051 #include <fitness/moeoFastNonDominatedSortingFitnessAssignment.h>
00052 #include <replacement/moeoElitistReplacement.h>
00053 #include <selection/moeoDetTournamentSelect.h>
00054
00061 template < class MOEOT >
00062 class moeoNSGA: public moeoEA < MOEOT >
00063 {
00064 public:
00065
00073 moeoNSGA (unsigned int _maxGen, eoEvalFunc < MOEOT > & _eval, eoGenOp < MOEOT > & _op, double _nicheSize = 0.5) :
00074 defaultGenContinuator(_maxGen), continuator(defaultGenContinuator), popEval(_eval), select(2),
00075 diversityAssignment(_nicheSize), replace(fitnessAssignment, diversityAssignment), genBreed(select, _op), breed(genBreed)
00076 {}
00077
00078
00086 moeoNSGA (unsigned int _maxGen, eoEvalFunc < MOEOT > & _eval, eoTransform < MOEOT > & _op, double _nicheSize = 0.5) :
00087 defaultGenContinuator(_maxGen), continuator(defaultGenContinuator), popEval(_eval), select(2),
00088 diversityAssignment(_nicheSize), replace(fitnessAssignment, diversityAssignment), genBreed(select, _op), breed(genBreed)
00089 {}
00090
00091
00102 moeoNSGA (unsigned int _maxGen, eoEvalFunc < MOEOT > & _eval, eoQuadOp < MOEOT > & _crossover, double _pCross, eoMonOp < MOEOT > & _mutation, double _pMut, double _nicheSize = 0.5) :
00103 defaultGenContinuator(_maxGen), continuator(defaultGenContinuator), popEval(_eval), select (2),
00104 diversityAssignment(_nicheSize), replace (fitnessAssignment, diversityAssignment),
00105 defaultSGAGenOp(_crossover, _pCross, _mutation, _pMut), genBreed (select, defaultSGAGenOp), breed (genBreed)
00106 {}
00107
00108
00116 moeoNSGA (eoContinue < MOEOT > & _continuator, eoEvalFunc < MOEOT > & _eval, eoGenOp < MOEOT > & _op, double _nicheSize = 0.5) :
00117 continuator(_continuator), popEval(_eval), select(2),
00118 diversityAssignment(_nicheSize), replace(fitnessAssignment, diversityAssignment), genBreed(select, _op), breed(genBreed)
00119 {}
00120
00121
00129 moeoNSGA (eoContinue < MOEOT > & _continuator, eoEvalFunc < MOEOT > & _eval, eoTransform < MOEOT > & _op, double _nicheSize = 0.5) :
00130 continuator(_continuator), popEval(_eval), select(2),
00131 diversityAssignment(_nicheSize), replace(fitnessAssignment, diversityAssignment), genBreed(select, _op), breed(genBreed)
00132 {}
00133
00134
00139 virtual void operator () (eoPop < MOEOT > &_pop)
00140 {
00141 eoPop < MOEOT > offspring, empty_pop;
00142 popEval (empty_pop, _pop);
00143
00144 fitnessAssignment(_pop);
00145 diversityAssignment(_pop);
00146 do
00147 {
00148
00149 breed (_pop, offspring);
00150
00151 popEval (_pop, offspring);
00152
00153 replace (_pop, offspring);
00154 } while (continuator (_pop));
00155 }
00156
00157
00158 protected:
00159
00161 eoGenContinue < MOEOT > defaultGenContinuator;
00163 eoContinue < MOEOT > & continuator;
00165 eoPopLoopEval < MOEOT > popEval;
00167 moeoDetTournamentSelect < MOEOT > select;
00169 moeoFastNonDominatedSortingFitnessAssignment < MOEOT > fitnessAssignment;
00171 moeoFrontByFrontSharingDiversityAssignment < MOEOT > diversityAssignment;
00173 moeoElitistReplacement < MOEOT > replace;
00175 eoSGAGenOp < MOEOT > defaultSGAGenOp;
00177 eoGeneralBreeder < MOEOT > genBreed;
00179 eoBreed < MOEOT > & breed;
00180
00181 };
00182
00183 #endif