00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef EOSYMCROSSOVER_H
00019 #define EOSYMCROSSOVER_H
00020
00021 class NodeSelector;
00022 class Sym;
00023
00024 #include <eoOp.h>
00025
00026 extern bool subtree_quad(Sym& a, Sym& b, NodeSelector& select);
00027 template <class EoType>
00028 class eoQuadSubtreeCrossover : public eoQuadOp<EoType> {
00029 NodeSelector& node_selector;
00030
00031 public:
00032 eoQuadSubtreeCrossover(NodeSelector& _node_selector) : node_selector(_node_selector) {}
00033
00034 bool operator()(EoType& a, EoType& b) { return subtree_quad(a,b, node_selector); }
00035 };
00036
00037
00038 extern bool subtree_bin(Sym& a, const Sym& b, NodeSelector& select);
00039 template <class EoType>
00040 class eoBinSubtreeCrossover : public eoBinOp<EoType> {
00041 NodeSelector& node_selector;
00042
00043 public :
00044
00045 eoBinSubtreeCrossover(NodeSelector& _node_selector) : node_selector(_node_selector) {}
00046
00047 bool operator()(EoType& a, const EoType& b) { return subtree_bin(a, b, node_selector); }
00048 };
00049
00053 extern bool homologous_bin(Sym& a, const Sym& b);
00054 template <class EoType>
00055 class eoBinHomologousCrossover : public eoBinOp<EoType> {
00056 public:
00057 bool operator()(EoType& a, const EoType& b) {
00058 return homologous_bin(a,b);
00059 }
00060 };
00061
00062
00063 extern bool size_level_xover(Sym& a, const Sym& b);
00064 template <class EoType>
00065 class eoSizeLevelCrossover : public eoBinOp<EoType> {
00066 public:
00067 bool operator()(EoType& a, const EoType& b) {
00068 return size_level_xover(a,b);
00069 }
00070 };
00071
00072 #endif
00073