53 #if !defined(EVOCOSM_FUNCTION_OPTIMIZER_H)
54 #define EVOCOSM_FUNCTION_OPTIMIZER_H
89 typedef vector<double>
t_function(vector<double> a_args);
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)
196 :
organism< vector<double> >(a_source),
198 m_minarg(a_source.m_minarg),
199 m_maxarg(a_source.m_maxarg),
200 m_extent(a_source.m_extent)
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);