00001 #include <iostream>
00002
00003 #include "GLBaseOrganism.h"
00004 #include "GLBaseOrganismStorage.h"
00005 #include "GLBasePopulation.h"
00006 #include "GLBaseRanker.h"
00007 #include "GLRuntimeError.h"
00008 #include "GLUtils.h"
00009
00015 GLBasePopulation::GLBasePopulation(GLBaseOrganismStorage *storage)
00016 {
00017 if (storage == NULL)
00018 {
00019 char errormsg[1000];
00020 sprintf(errormsg, "\nGLBasePopulation::GLBasePopulation\n"
00021 "NULL pointer provided to constructor\n");
00022 throw GLRuntimeError(errormsg);
00023 }
00024 m_main_storage = storage;
00025 }
00026
00030 GLBasePopulation::~GLBasePopulation()
00031 {
00032 if (m_main_storage != NULL)
00033 {
00034 #if DEBUG > 2
00035 cout << m_main_storage->getSize() << " deleted from main storage\n";
00036 #endif
00037 m_main_storage->deleteAllOrganisms();
00038 delete m_main_storage;
00039 }
00040 }
00041
00068 int GLBasePopulation::createNewGeneration(
00069 GLBaseBreeder* breeder,
00070 GLBaseVariator* variator,
00071 GLBaseEvaluator* evaluator,
00072 GLBaseSelectionist* selectionist,
00073 vector<const GLBaseOrganism*>&
00074 best_organisms,
00075 int max_offsprings,
00076 int max_mutants,
00077 int mutation_policy,
00078 int new_size)
00079 {
00080
00081 #if DEBUG > 2
00082 int children =
00083 #endif
00084 breed(breeder, max_offsprings);
00085
00086 #if DEBUG > 2
00087 int mutated =
00088 #endif
00089 mutate(variator, max_mutants, mutation_policy);
00090
00091 evaluateAll(evaluator);
00092
00093 int new_organisms = keepFittest(selectionist, best_organisms, new_size);
00094
00095 #if DEBUG > 2
00096 std::cout << children << " children were born\n";
00097 std::cout << mutated << " mutants was produced\n";
00098 std::cout << new_organisms << " new organisms appeared in population\n";
00099 #endif
00100
00101 prepareForNextGeneration();
00102 return new_organisms;
00103 }
00104
00113 void GLBasePopulation::printRankedPopulation(
00114 ostream& out,
00115 GLBaseEvaluator* evaluator,
00116 GLBaseRanker *ranker)
00117 {
00118
00119 evaluateAll(evaluator);
00120 TGLVectorOfOrganisms organisms;
00121 m_main_storage->getOrganismsVector(organisms);
00122 ranker->rankOrganisms(organisms);
00123 GLUtils::printVectorOfOrganisms(out, organisms);
00124 }