8 #include <GAEvalData.h>
19 template <
typename T1,
typename T2> constexpr
void SWAP(T1 &a, T2 &b)
202 GADefineIdentity(
"GAGenome", GAID::Genome);
205 using Evaluator = float (*)(
GAGenome &);
206 using Initializer = void (*)(
GAGenome &);
207 using Mutator = int (*)(
GAGenome &, float);
213 static void NoInitializer(
GAGenome &);
214 static int NoMutator(
GAGenome &,
float);
225 enum class CloneMethod
240 GAGenome(Initializer i =
nullptr, Mutator m =
nullptr,
241 Comparator c =
nullptr);
249 virtual GAGenome *clone(CloneMethod flag = CloneMethod::CONTENTS)
const;
250 virtual void copy(
const GAGenome &);
252 virtual int read(std::istream &)
254 GAErr(GA_LOC, className(),
"read", GAError::OpUndef);
257 virtual int write(std::ostream &)
const
259 GAErr(GA_LOC, className(),
"write", GAError::OpUndef);
263 virtual bool equal(
const GAGenome &)
const
265 GAErr(GA_LOC, className(),
"equal", GAError::OpUndef);
268 virtual bool notequal(
const GAGenome &g)
const
270 return (equal(g) ?
false :
true);
274 int nevals()
const {
return _neval; }
285 float fitness() {
return _fitness; }
286 float fitness(
float f) {
return _fitness = f; }
294 void *userData()
const {
return ud; }
295 void *userData(
void *u) {
return (ud = u); }
305 float evaluate(
bool flag =
false)
const;
306 Evaluator evaluator()
const {
return eval; }
307 Evaluator evaluator(Evaluator f)
319 Initializer initializer()
const {
return init; }
320 Initializer initializer(Initializer op) {
return (init = op); }
322 int mutate(
float p) {
return ((*mutr)(*
this, p)); }
323 Mutator mutator()
const {
return mutr; }
324 Mutator mutator(Mutator op) {
return (mutr = op); }
326 float compare(
const GAGenome &g)
const {
return (*cmp)(*
this, g); }
327 Comparator comparator()
const {
return cmp; }
328 Comparator comparator(Comparator c) {
return (cmp = c); }
330 SexualCrossover crossover(SexualCrossover f) {
return sexcross = f; }
331 SexualCrossover sexual()
const {
return sexcross; }
332 AsexualCrossover crossover(AsexualCrossover f) {
return asexcross = f; }
333 AsexualCrossover asexual()
const {
return asexcross; }
348 SexualCrossover sexcross;
349 AsexualCrossover asexcross;
352 inline std::ostream &operator<<(std::ostream &os,
const GAGenome &genome)
357 inline std::istream &operator>>(std::istream &is,
GAGenome &genome)
369 return a.notequal(b);
This is the basic interface for the object that contains evaluation data.
Definition: GAEvalData.h:15
The base GA class is virtual - it defines the core data elements and parts of the interface that are ...
Definition: GABaseGA.h:89
The base genome class just defines the genome interface - how to mutate, crossover,...
Definition: GAGenome.h:200
This defines the identifiers for polymorphic classes.
Definition: gaid.h:20