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
00015 class Fitness
00016 {
00017 protected:
00018 bool valid_;
00019 double value_;
00020
00021
00022
00023 Individual* individual_;
00024
00025 public:
00026 unsigned int cid;
00027
00028 Fitness()
00029 {
00030 valid_ = true;
00031 cid = 0;
00032 }
00033
00038 virtual bool isBetterThan(FitnessP) = 0;
00039
00040 virtual Fitness* copy() = 0;
00041
00043 bool isValid()
00044 { return valid_; }
00045
00047 void setInvalid()
00048 { valid_ = false; }
00049
00051 virtual void setValue(double value)
00052 { value_ = value; }
00053
00055 virtual double getValue()
00056 { return value_; }
00057
00059 virtual void write(XMLNode&) { }
00060
00062 std::string toString()
00063 {
00064 XMLNode xFit;
00065 write(xFit);
00066 char *s = xFit.createXMLString();
00067 std::string out(s);
00068 freeXMLString(s);
00069 return out;
00070 }
00071
00076 virtual void read(XMLNode& xFitness)
00077 {
00078 XMLCSTR val = xFitness.getAttributeValue();
00079 if(val) {
00080 value_ = xmltof(val);
00081 valid_ = true;
00082 }
00083 else
00084 valid_ = false;
00085 }
00086
00087 virtual ~Fitness()
00088 { }
00089 };
00090 typedef boost::shared_ptr<Fitness> FitnessP;
00091
00092 #endif // Fitness_h
00093