53 #if !defined(LIBEVOCOSM_EVOCOSM_H)
54 #define LIBEVOCOSM_EVOCOSM_H
57 #pragma warning (disable : 4786)
70 #include "validator.h"
73 #include "landscape.h"
75 #include "reproducer.h"
101 template <
class OrganismType>
152 evocosm(vector<OrganismType> & a_population,
240 #if defined(_MSC_VER)
251 template <
class OrganismType>
260 : m_population(a_population),
261 m_landscape(a_landscape),
262 m_mutator(a_mutator),
263 m_reproducer(a_reproducer),
265 m_selector(a_selector),
266 m_analyzer(a_analyzer),
267 m_listener(a_listener),
275 template <
class OrganismType>
277 : m_population(a_source.a_population),
278 m_landscape(a_source.m_landscape),
279 m_mutator(a_source.m_mutator),
280 m_reproducer(a_source.m_reproducer),
281 m_scaler(a_source.m_scaler),
282 m_selector(a_source.m_selector),
283 m_analyzer(a_source.m_analyzer),
284 m_listener(a_source.m_listener),
285 m_iteration(a_source.m_iteration),
286 m_sleep_time(a_source.m_sleep_time)
292 template <
class OrganismType>
299 template <
class OrganismType>
314 template <
class OrganismType>
317 bool keep_going =
true;
319 OrganismType * best = NULL;
324 m_listener.ping_generation_begin(m_population, m_iteration);
327 m_landscape.test(m_population);
331 m_listener.ping_generation_end(m_population, m_iteration);
335 keep_going = m_analyzer.analyze(m_population, m_iteration);
340 m_scaler.scale_fitness(m_population);
344 vector<OrganismType> survivors = m_selector.select_survivors(m_population);
348 vector<OrganismType> children = m_reproducer.breed(m_population, m_population.size() - survivors.size());
356 m_mutator.mutate(children);
360 survivors.insert(survivors.end(),children.begin(),children.end());
361 m_population = survivors;
366 m_listener.run_complete(m_population);