35 #if !defined(LIBEVOCOSM_EVOCOSM_H)
36 #define LIBEVOCOSM_EVOCOSM_H
39 #pragma warning (disable : 4786)
50 #include "validator.h"
52 #include "landscape.h"
54 #include "reproducer.h"
79 template <
class OrganismType>
87 virtual OrganismType
create() = 0;
93 virtual void append(vector<OrganismType> & a_population,
size_t a_size) = 0;
101 template <
class LandscapeType>
110 virtual LandscapeType
generate() = 0;
121 template <
class OrganismType,
class LandscapeType>
200 size_t a_population_size,
201 size_t a_number_of_populations,
202 size_t a_number_of_unique_landscapes,
203 size_t a_number_of_common_landscapes,
212 bool a_minimizing =
false);
259 vector<OrganismType, LandscapeType> &
population(
size_t a_index = 0)
261 return m_populations[a_index];
275 template <
class OrganismType,
class LandscapeType>
277 size_t a_population_size,
278 size_t a_number_of_populations,
279 size_t a_number_of_unique_landscapes,
280 size_t a_number_of_common_landscapes,
290 : m_listener(a_listener),
291 m_population_size(a_population_size),
293 m_number_of_populations(a_number_of_populations),
294 m_number_of_unique_landscapes(a_number_of_unique_landscapes),
295 m_number_of_common_landscapes(a_number_of_common_landscapes),
296 m_unique_landscapes(),
297 m_common_landscapes(),
298 m_mutator(a_mutator),
299 m_reproducer(a_reproducer),
301 m_migrator(a_migrator),
302 m_selector(a_selector),
303 m_reporter(a_reporter),
305 m_minimizing(a_minimizing),
338 template <
class OrganismType,
class LandscapeType>
340 : m_population_size(a_source.m_population_size),
341 m_populations(a_source.m_populations),
342 m_number_of_populations(a_source.m_number_of_populations),
343 m_number_of_common_landscapes(a_source.m_number_of_common_landscapes),
344 m_number_of_unique_landscapes(a_source.m_number_of_unique_landscapes),
345 m_common_landscapes(a_source.m_common_landscapes),
346 m_unique_landscapes(a_source.m_unique_landscapes),
347 m_mutator(a_source.m_mutator),
348 m_reproducer(a_source.m_reproducer),
349 m_scaler(a_source.m_scaler),
350 m_migrator(a_source.m_migrator),
351 m_selector(a_source.m_selector),
352 m_iteration(a_source.m_iteration)
358 template <
class OrganismType,
class LandscapeType>
365 template <
class OrganismType,
class LandscapeType>
389 template <
class OrganismType,
class LandscapeType>
397 m_listener.ping_generation_begin(m_iteration);
400 for (p = 0; p < (int)m_number_of_populations; p++)
403 m_listener.ping_population_begin(p + 1);
407 for (n = 0; n < (int)m_population_size; ++n)
408 m_populations[p][n].reset_all();
414 if (m_number_of_common_landscapes > 0)
416 for (n = 0; n < (int)m_number_of_common_landscapes; ++n)
417 m_common_landscapes[n].test_pop(m_populations[p]);
424 if (m_number_of_unique_landscapes > 0)
426 for (n = 0; n < (int)m_number_of_unique_landscapes; ++n)
427 m_unique_landscapes[p][n].test_pop(m_populations[p]);
431 m_listener.ping_population_end(p + 1);
435 bool keep_going = m_reporter.report(m_populations,m_iteration,a_fitness,a_finished);
440 if (keep_going && m_running)
443 for (p = 0; p < (int)m_number_of_populations; ++p)
447 m_scaler.invert(m_populations[p]);
453 m_scaler.scale_fitness(m_populations[p]);
459 vector<OrganismType> survivors = m_selector.select_survivors(m_populations[p]);
465 vector<OrganismType> children = m_reproducer.breed(m_populations[p], m_population_size - survivors.size());
471 m_mutator.mutate(children);
477 m_populations[p] = survivors;
478 m_populations[p].insert(m_populations[p].end(),children.begin(),children.end());
481 if (m_number_of_populations > 1)
482 m_migrator.migrate(m_populations);
486 m_listener.ping_generation_end(m_iteration);
491 return keep_going & m_running;
virtual void append(vector< OrganismType > &a_population, size_t a_size)=0
Organism population factory.
Interface for an organism factory.
Definition: evocosm.h:80
Interface for a landscape factory.
Definition: evocosm.h:102
vector< OrganismType, LandscapeType > & population(size_t a_index=0)
Directly view population.
Definition: evocosm.h:259
Creates new organisms from an existing population.
Definition: reproducer.h:54
void terminate()
Terminate this run.
Definition: evocosm.h:268
bool m_running
termination flag
Definition: evocosm.h:174
Selects organisms that survive.
Definition: selector.h:61
selector< OrganismType > & m_selector
Selects organisms that survive from one generation to the next.
Definition: evocosm.h:162
vector< LandscapeType > m_common_landscapes
Fitness landscapes common to all populations.
Definition: evocosm.h:147
size_t m_number_of_common_landscapes
The number of fitness landscapes common to all populations.
Definition: evocosm.h:141
scaler< OrganismType > & m_scaler
Scales the fitness of the evocosm.
Definition: evocosm.h:156
reproducer< OrganismType > & m_reproducer
Creates new organisms.
Definition: evocosm.h:153
mutator< OrganismType > & m_mutator
A mutator to randomly influence genes.
Definition: evocosm.h:150
Reports on a given population.
Definition: reporter.h:52
Defines migration between populations.
Definition: migrator.h:53
evocosm & operator=(const evocosm< OrganismType, LandscapeType > &a_source)
Assignment operator.
Definition: evocosm.h:366
bool m_minimizing
Set true when minimizing; i.e., best fitness < worst fitness.
Definition: evocosm.h:171
An abstract interface defining a listener.
Definition: evocommon.h:156
migrator< OrganismType > & m_migrator
Handles emigration and immigration.
Definition: evocosm.h:159
Fitness scaling for a population.
Definition: scaler.h:60
size_t m_population_size
The initial evocosm size.
Definition: evocosm.h:129
virtual bool run_generation(bool a_finished, double &a_fitness)
Compute next generation.
Definition: evocosm.h:390
size_t m_iteration
Count of iterations made.
Definition: evocosm.h:168
A toolkit and framework for implementing evolutionary algorithms.
Definition: evocommon.h:60
virtual LandscapeType generate()=0
Landscape factory.
virtual OrganismType create()=0
Organism factory.
virtual ~evocosm()
Virtual destructor.
Definition: evocosm.h:359
evocosm(listener &a_listener, size_t a_population_size, size_t a_number_of_populations, size_t a_number_of_unique_landscapes, size_t a_number_of_common_landscapes, mutator< OrganismType > &a_mutator, reproducer< OrganismType > &a_reproducer, scaler< OrganismType > &a_scaler, migrator< OrganismType > &a_migrator, selector< OrganismType > &a_selector, reporter< OrganismType, LandscapeType > &a_reporter, organism_factory< OrganismType > &a_organism_factory, landscape_factory< LandscapeType > &a_landscape_factory, bool a_minimizing=false)
Creation constructor.
Definition: evocosm.h:276
Elements shared by all classes in Evocosm.
Definition: evocommon.h:115
reporter< OrganismType, LandscapeType > & m_reporter
Reports the a evocosm for analysis or display.
Definition: evocosm.h:165
listener & m_listener
A listener for evocosm progress.
Definition: evocosm.h:126
Mutates organisms.
Definition: mutator.h:54
size_t m_number_of_populations
The number of populations.
Definition: evocosm.h:135
Associates organisms with the components of an evolutionary system.
Definition: evocosm.h:122
vector< vector< OrganismType > > m_populations
The populations of organisms.
Definition: evocosm.h:132
void enforce_lower_limit(Type &object, const Type &low_value)
Enforce a lower limit on the value of an object.
Definition: validator.h:287
vector< vector< LandscapeType > > m_unique_landscapes
Fitness landscapes unique to individual populations.
Definition: evocosm.h:144
size_t m_number_of_unique_landscapes
The number of fitness landscapes unique to individual populations.
Definition: evocosm.h:138