00001 #ifndef Fitness_h
00002 #define Fitness_h
00003
00004 class Individual;
00005 typedef boost::shared_ptr<Individual> IndividualP;
00006 class Fitness;
00007 typedef boost::shared_ptr<Fitness> FitnessP;
00008
00014 class Fitness
00015 {
00016 protected:
00017 bool valid_;
00018 double value_;
00019
00020
00021
00022 Individual* individual_;
00023
00024 public:
00025 unsigned int cid;
00026
00027 Fitness()
00028 {
00029 valid_ = true;
00030 cid = 0;
00031 }
00032
00037 virtual bool isBetterThan(FitnessP) = 0;
00038
00039 virtual Fitness* copy() = 0;
00040
00044 bool isValid()
00045 { return valid_; }
00046
00050 void setInvalid()
00051 { valid_ = false; }
00052
00056 virtual void setValue(double value)
00057 { value_ = value; }
00058
00062 virtual double getValue()
00063 { return value_; }
00064
00068 virtual void write(XMLNode&) { }
00069
00074 virtual void read(XMLNode& xFitness)
00075 {
00076 XMLCSTR val = xFitness.getAttributeValue();
00077 if(val) {
00078 value_ = xmltof(val);
00079 valid_ = true;
00080 }
00081 else
00082 valid_ = false;
00083 }
00084
00085 virtual ~Fitness()
00086 { }
00087 };
00088 typedef boost::shared_ptr<Fitness> FitnessP;
00089
00090 #endif // Fitness_h
00091