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 #ifndef PO_H
00026 #define PO_H
00027
00028
00029 #include <stdexcept>
00030 #include <EO.h>
00031
00032
00039 template < class F > class PO:public EO < F >
00040 {
00041
00042 public:
00043
00044 typedef typename PO < F >::Fitness Fitness;
00045
00049 PO ():repFitness (Fitness ()), invalidFitness (true),
00050 bestFitness (Fitness()){}
00051
00052
00054 Fitness fitness () const
00055 {
00056 if (invalid ())
00057 throw std::runtime_error ("invalid fitness in PO.h");
00058 return repFitness;
00059 }
00060
00061
00065 void fitness (const Fitness & _fitness)
00066 {
00067 repFitness = _fitness;
00068 invalidFitness = false;
00069 }
00070
00074 Fitness best () const
00075 {
00076 if (invalid ())
00077 throw std::runtime_error ("invalid best fitness in PO.h");
00078 return bestFitness;
00079 }
00080
00081
00085 void best (const Fitness & _bestFitness)
00086 {
00087 bestFitness = _bestFitness;
00088 invalidBestFitness = false;
00089 }
00090
00091
00095 bool invalid () const
00096 {
00097 return invalidFitness;
00098 }
00099
00103 void invalidate ()
00104 {
00105 invalidFitness = true;
00106 }
00107
00111 bool invalidBest () const
00112 {
00113 return invalidBestFitness;
00114 }
00115
00119 void invalidateBest ()
00120 {
00121 invalidBestFitness = true;
00122 }
00123
00127 virtual std::string className () const
00128 {
00129 return "PO";
00130 }
00131
00135 bool operator< (const PO & _po2) const { return fitness () < _po2.fitness ();}
00136 bool operator> (const PO & _po2) const { return !(fitness () <= _po2.fitness ());}
00137
00138
00143 virtual void printOn(std::ostream& _os) const { _os << bestFitness << ' ' ;}
00144
00145
00154 virtual void readFrom(std::istream& _is) {
00155
00156
00157
00158 std::string fitness_str;
00159 int pos = _is.tellg();
00160 _is >> fitness_str;
00161
00162 if (fitness_str == "INVALID")
00163 {
00164 invalidFitness = true;
00165 }
00166 else
00167 {
00168 invalidFitness = false;
00169 _is.seekg(pos);
00170 _is >> repFitness;
00171 }
00172 }
00173
00174 private:
00175 Fitness repFitness;
00176 bool invalidFitness;
00177
00178 Fitness bestFitness;
00179 bool invalidBestFitness;
00180
00181 };
00182
00183
00184
00185 #endif