00001 00020 #include "statistics.h" 00021 #include <cassert> 00022 #include <cstdio> 00023 00024 using namespace realea; 00025 00026 Statistics::Statistics(int num_gen) { 00027 reset(); 00028 m_rate = num_gen; 00029 } 00030 00031 void Statistics::reset(void) { 00032 m_experiment = m_generation = 0; 00033 } 00034 00035 void Statistics::newExperiment(void) { 00036 printf("Experiment: %d\n", m_experiment); 00037 ++m_experiment; 00038 m_generation = 0; 00039 } 00040 00041 void Statistics::newGeneration(void) { 00042 ++m_generation; 00043 } 00044 00045 void Statistics::endGeneration(tFitness best) { 00046 if (m_generation > 1) { 00047 if (m_problem->isBetter(m_lastbest, best)) { 00048 printf("m_lastBest: %Le\tbest : %Le\n", m_lastbest, best); 00049 } 00050 00051 assert(!m_problem->isBetter(m_lastbest, best)); 00052 } 00053 00054 if (m_rate > 0) { 00055 unsigned rate = (unsigned) m_rate; 00056 00057 if ((m_generation % rate)==0) { 00058 printf("Best[%d]: %Le\n", m_generation, best); 00059 } 00060 00061 } 00062 00063 m_lastbest = best; 00064 } 00065 00066 void Statistics::newEvent(string event) { 00067 map<string,bool>::iterator pos; 00068 bool active; 00069 00070 pos = m_events.find(event); 00071 00072 if (pos == m_events.end()) 00073 active = false; 00074 else { 00075 active = (*pos).second; 00076 } 00077 00078 if (active) 00079 printf("%s:[%d]\n", event.c_str(), m_generation); 00080 } 00081 00082 void Statistics::endExperiment(void) { 00083 printf("BestExperiment[%d]: %Le\n", m_experiment, m_lastbest); 00084 } 00085 00086 void Statistics::activeEvent(string event) { 00087 m_events[event] = true; 00088 }