53 #if !defined(EVOCOSM_FUNCTION_OPTIMIZER_H)
54 #define EVOCOSM_FUNCTION_OPTIMIZER_H
89 typedef vector<double>
t_function(vector<double> a_args);
148 :
organism< vector<double> >(), value(0.0)
153 if (a_maxarg < a_minarg)
155 double temp = a_maxarg;
162 m_extent = a_maxarg - a_minarg;
165 for (
size_t n = 0; n < a_nargs; ++n)
174 :
organism< vector<double> >(a_source), value(0.0)
185 :
organism< vector<double> >(a_source), value(0.0)
196 :
organism< vector<double> >(a_source),
197 value(a_source.value),
198 m_minarg(a_source.m_minarg),
199 m_maxarg(a_source.m_maxarg),
200 m_extent(a_source.m_extent)
223 value = a_source.
value;
224 m_minarg = a_source.m_minarg;
225 m_maxarg = a_source.m_maxarg;
226 m_extent = a_source.m_extent;
238 virtual bool operator < (const organism< vector<double> > & a_right)
const
240 return (
fitness > a_right.fitness);
256 : m_mutation_rate(a_mutation_rate)
259 if (m_mutation_rate > 1.0)
260 m_mutation_rate = 1.0;
261 else if (m_mutation_rate < 0.0)
262 m_mutation_rate = 0.0;
271 : m_mutation_rate(a_source.m_mutation_rate)
293 m_mutation_rate = a_source.m_mutation_rate;
304 return m_mutation_rate;
312 void mutate(vector<function_solution> & a_population);
316 double m_mutation_rate;
331 : m_crossover_rate(p_crossover_rate)
334 if (m_crossover_rate > 1.0)
335 m_crossover_rate = 1.0;
336 else if (m_crossover_rate < 0.0)
337 m_crossover_rate = 0.0;
346 : m_crossover_rate(a_source.m_crossover_rate)
368 m_crossover_rate = a_source.m_crossover_rate;
379 return m_crossover_rate;
392 virtual vector<function_solution>
breed(
const vector<function_solution> & a_population,
size_t p_limit);
396 double m_crossover_rate;
416 m_function(a_function)
424 m_function(a_source.m_function)
433 m_function = a_source.m_function;
456 vector<double> z = m_function(a_organism.
genes);
457 a_organism.
value = z[0];
503 virtual bool analyze(
const vector<function_solution> & a_population,
529 virtual void ping_generation_end(
const vector<function_solution> & a_population,
size_t a_iteration);
542 vector<function_solution> m_population;
554 const size_t m_iterations;
573 double a_mutation_rate,
574 size_t a_iterations);
An listener implementation that ignores all events.
Definition: listener.h:147
function_reproducer(double p_crossover_rate=1.0)
Creation constructor.
Definition: function_optimizer.h:330
vector< double > genes
Definition: organism.h:97
Defines the test for a population of solutions.
Definition: function_optimizer.h:405
double mutation_rate() const
Gets the mutation rate.
Definition: function_optimizer.h:302
An evolving organism.
Definition: organism.h:78
function_mutator(double a_mutation_rate)
Creation constructor.
Definition: function_optimizer.h:255
A potential solution to the problem at hand.
Definition: function_optimizer.h:105
function_solution(const vector< double > &a_source)
Construct from raw genes.
Definition: function_optimizer.h:173
Implements a elitism selector.
Definition: selector.h:159
void mutate(vector< function_solution > &a_population)
Performs mutations.
virtual void child_copy(const organism &a_source)
Definition: function_optimizer.h:118
function_optimizer(t_function *a_function, size_t a_nargs, double a_minarg, double a_maxarg, size_t a_norgs, double a_mutation_rate, size_t a_iterations)
Constructor.
function_solution(const function_solution &a_source)
Copy constructor.
Definition: function_optimizer.h:195
double fitness
Definition: organism.h:88
Mutates organisms.
Definition: mutator.h:72
~function_landscape()
Virtual destructor.
Definition: function_optimizer.h:441
virtual ~function_reproducer()
Virtual destructor.
Definition: function_optimizer.h:355
virtual ~function_solution()
Virtual destructor.
Definition: function_optimizer.h:209
An abstract interface defining a fitness landscape.
Definition: landscape.h:80
function_reproducer & operator=(const function_reproducer &a_source)
Assignment operator.
Definition: function_optimizer.h:366
function_reproducer(const function_reproducer &a_source)
Copy constructor.
Definition: function_optimizer.h:345
double crossover_rate() const
Gets the crossover rate.
Definition: function_optimizer.h:377
function_landscape(t_function *a_function, listener< function_solution > &a_listener)
Creation constructor.
Definition: function_optimizer.h:414
function_solution()
Default contructor.
Definition: function_optimizer.h:133
function_mutator & operator=(const function_mutator &a_source)
Assignment operator.
Definition: function_optimizer.h:291
Reports the state of a population of solutions.
Definition: function_optimizer.h:472
A toolkit and framework for implementing evolutionary algorithms.
Definition: analyzer.h:60
function_mutator(const function_mutator &a_source)
Copy constructor.
Definition: function_optimizer.h:270
virtual void ping_generation_begin(size_t a_iteration)
Ping that a generation begins.
function_analyzer(listener< function_solution > &a_listener, size_t max_iterations)
Constructor.
Definition: function_optimizer.h:484
Implements reproduction.
Definition: function_optimizer.h:323
landscape & operator=(const landscape &a_source)
Assignment operator.
Definition: landscape.h:102
Mutates solutions.
Definition: function_optimizer.h:248
virtual ~function_optimizer()
Destructor.
Tools for evolving real numbers.
Definition: evoreal.h:85
static prng g_random
A shared random number generator.
Definition: evocommon.h:127
vector< double > t_function(vector< double > a_args)
Definition of a function type.
Definition: function_optimizer.h:89
function_solution(int a_nargs, double a_minarg, double a_maxarg)
Creation constructor.
Definition: function_optimizer.h:147
virtual bool analyze(const vector< function_solution > &a_population, size_t a_iteration, double &a_fitness)
Reports on a population.
A generic function optimizer.
Definition: function_optimizer.h:538
double value
Definition: function_optimizer.h:114
An listener implementation that ignores all events.
Definition: function_optimizer.h:513
Global things used by all optimizer classes.
Definition: function_optimizer.h:77
void run()
Performs optimization.
Creates new organisms from an existing population.
Definition: reproducer.h:72
virtual void ping_generation_end(const vector< function_solution > &a_population, size_t a_iteration)
Ping that a generation ends.
function_solution & operator=(const function_solution &a_source)
Assignment operator.
Definition: function_optimizer.h:220
virtual ~function_mutator()
Virtual destructor.
Definition: function_optimizer.h:280
virtual double test(function_solution &a_organism, bool a_verbose=false) const
Performs fitness testing.
Definition: function_optimizer.h:454
function_landscape(const function_landscape &a_source)
Copy constructor.
Definition: function_optimizer.h:422
double get_real()
get the next value in the range [0,1)
Definition: evocommon.h:106
function_solution(const organism< vector< double > > &a_source)
Construct from base class.
Definition: function_optimizer.h:184
static evoreal g_evoreal
Provides mutation and crossover services for doubles.
Definition: function_optimizer.h:92
Associates organisms with the components of an evolutionary system.
Definition: evocosm.h:102
function_landscape & operator=(const function_landscape &a_source)
Assignment.
Definition: function_optimizer.h:430
virtual vector< function_solution > breed(const vector< function_solution > &a_population, size_t p_limit)
Reproduction for solutions.
Reports on a given population.
Definition: analyzer.h:70
A linear normalization scaler.
Definition: scaler.h:126