00001 #ifndef BINARY_H_
00002 #define BINARY_H_
00003
00004 #include "BinaryCrsOnePoint.h"
00005 #include "BinaryCrsTwoPoint.h"
00006 #include "BinaryMutSimple.h"
00007 #include "BinaryMutMix.h"
00008 #include "BinaryCrsUniform.h"
00009 #include "BinaryCrsHalfUniform.h"
00010 #include "BinaryCrsReducedSurrogate.h"
00011 #include "BinaryCrsSegmented.h"
00012 #include "BinaryCrsShuffle.h"
00013 #include "BinaryCrsNonGeometric.h"
00014 #include "BinaryCrsRandomRespectful.h"
00015 #include "BinaryCrsMasked.h"
00016
00017 #include "../RealValueGenotype.h"
00018
00019 namespace Binary
00020 {
00021
00038 class Binary: public RealValueGenotype {
00039 friend class BinaryMutSimple;
00040 protected:
00041 uint nDecimal_;
00042 uint nBits_;
00043 long potention_;
00044 bool bRounding_;
00045 typedef std::vector<bool> v_bool;
00046 v_bool vBool_;
00047
00048 double logbase(double a, double base);
00049 double round(double, int);
00050
00051 public:
00052 std::vector<long int> decValue;
00053 std::vector<v_bool> variables;
00054
00055 Binary ()
00056 { name_ = "Binary"; }
00057
00059 uint getNumBits()
00060 { return nBits_; }
00061
00062 bool initialize (StateP state);
00063
00064 void registerParameters(StateP state);
00065
00067 bool update (void);
00068
00069 Binary* copy()
00070 {
00071 Binary *newObject = new Binary(*this);
00072 return newObject;
00073 }
00074
00075 std::vector<CrossoverOpP> getCrossoverOp()
00076 {
00077 std::vector<CrossoverOpP> crx;
00078 crx.push_back(static_cast<CrossoverOpP> (new BinaryCrsOnePoint));
00079 crx.push_back(static_cast<CrossoverOpP> (new BinaryCrsTwoPoint));
00080 crx.push_back(static_cast<CrossoverOpP> (new BinaryCrsUniform));
00081 crx.push_back(static_cast<CrossoverOpP> (new BinaryCrsHalfUniform));
00082 crx.push_back(static_cast<CrossoverOpP> (new BinaryCrsReducedSurrogate));
00083 crx.push_back(static_cast<CrossoverOpP> (new BinaryCrsSegmented));
00084 crx.push_back(static_cast<CrossoverOpP> (new BinaryCrsShuffle));
00085 crx.push_back(static_cast<CrossoverOpP> (new BinaryCrsNonGeometric));
00086 crx.push_back(static_cast<CrossoverOpP> (new BinaryCrsRandomRespectful));
00087
00088
00089 return crx;
00090 }
00091
00092 std::vector<MutationOpP> getMutationOp()
00093 {
00094 std::vector<MutationOpP> mut;
00095 mut.push_back(static_cast<MutationOpP> (new BinaryMutSimple));
00096 mut.push_back(static_cast<MutationOpP> (new BinaryMutMix));
00097 return mut;
00098 }
00099
00100 void write(XMLNode& xBinary);
00101
00102 void read(XMLNode& xBinary);
00103 };
00104
00105 }
00106 typedef boost::shared_ptr<Binary::Binary> BinaryP;
00107 #endif