📄 gastatistics.h
字号:
// $Header$/* ---------------------------------------------------------------------------- statistics.h mbwall 14jul95 Copyright (c) 1995 Massachusetts Institute of Technology - all rights reserved DESCRIPTION: Header for the statistics object used by the GA objects.---------------------------------------------------------------------------- */#ifndef _ga_statistics_h_#define _ga_statistics_h_#include "gatypes.h"#include "gaconfig.h"#include "GAGenome.h"#include "GAPopulation.h"// Default settings and their names.extern int gaDefNumBestGenomes;extern int gaDefScoreFrequency1;extern int gaDefScoreFrequency2;extern int gaDefFlushFrequency;extern char gaDefScoreFilename[];/* ----------------------------------------------------------------------------Statistics class We define this class as a storage object for the current state of the GA.Whereas the parameters object keeps track of the user-definable settings for the GA, the statistics object keeps track of the data that the GA generates along the way.---------------------------------------------------------------------------- */class GAStatistics {public: enum { NoScores=0x00, Mean=0x01, Maximum=0x02, Minimum=0x04, Deviation=0x08, Diversity=0x10, AllScores=0xff }; GAStatistics(); GAStatistics(const GAStatistics&); GAStatistics& operator=(const GAStatistics& orig){copy(orig); return *this;} virtual ~GAStatistics(); void copy(const GAStatistics &); float online() const {return on;} float offlineMax() const {return offmax;} float offlineMin() const {return offmin;} float initial(int w=Maximum) const; float current(int w=Maximum) const; float maxEver() const {return maxever;} float minEver() const {return minever;} int generation() const {return curgen;} unsigned long int selections() const {return numsel;} unsigned long int crossovers() const {return numcro;} unsigned long int mutations() const {return nummut;} unsigned long int replacements() const {return numrep;} unsigned long int indEvals() const {return numeval;} unsigned long int popEvals() const {return numpeval;} float convergence() const; int nConvergence() const { return Nconv; } int nConvergence(unsigned int); int nBestGenomes(const GAGenome&, unsigned int); int nBestGenomes() const { return(boa ? boa->size() : 0); } int scoreFrequency(unsigned int x) { return(scoreFreq = x); } int scoreFrequency() const { return scoreFreq; } int flushFrequency(unsigned int x); int flushFrequency() const { return Nscrs; } const char* scoreFilename(const char *filename); const char* scoreFilename() const { return scorefile; } int selectScores(int w){ return which = w; } int selectScores() const { return which; } GABoolean recordDiversity(GABoolean flag){ return dodiv=flag; } GABoolean recordDiversity() const { return dodiv; } void flushScores(); void update(const GAPopulation & pop); void reset(const GAPopulation & pop); const GAPopulation & bestPopulation() const { return *boa; } const GAGenome & bestIndividual(unsigned int n=0) const;#ifdef GALIB_USE_STREAMS int scores(const char* filename, int which=NoScores); int scores(STD_OSTREAM & os, int which=NoScores); int write(const char* filename) const; int write(STD_OSTREAM & os) const;#endif// These should be protected (accessible only to the GA class) but for now they// are publicly accessible. Do not try to set these unless you know what you// are doing!! unsigned long int numsel; // number of selections since reset unsigned long int numcro; // number of crossovers since reset unsigned long int nummut; // number of mutations since reset unsigned long int numrep; // number of replacements since reset unsigned long int numeval; // number of individual evaluations since reset unsigned long int numpeval; // number of population evals since resetprotected: unsigned int curgen; // current generation number unsigned int scoreFreq; // how often (in generations) to record scores GABoolean dodiv; // should we record diversity? float maxever; // maximum score since initialization float minever; // minimum score since initialization float on; // "on-line" performance (ave of all scores) float offmax; // "off-line" performance (ave of maximum) float offmin; // "off-line" performance (ave of minimum) float aveInit; // stats from the initial population float maxInit; float minInit; float devInit; float divInit; float aveCur; // stats from the current population float maxCur; float minCur; float devCur; float divCur; unsigned int nconv, Nconv; // how many scores we're recording (flushFreq) float * cscore; // best score of last n generations unsigned int nscrs, Nscrs; // how many scores do we have? int * gen; // generation number corresponding to scores float * aveScore; // average scores of each generation float * maxScore; // best scores of each generation float * minScore; // worst scores of each generation float * devScore; // stddev of each generation float * divScore; // diversity of each generation char * scorefile; // name of file to which scores get written int which; // which data to write to file GAPopulation * boa; // keep a copy of the best genomes void setConvergence(float); void setScore(const GAPopulation&); void updateBestIndividual(const GAPopulation&, GABoolean flag=gaFalse); void writeScores(); void resizeScores(unsigned int); friend class GA;};inline const char* GAStatistics::scoreFilename(const char* filename){ delete [] scorefile; scorefile = 0; if(filename){ scorefile = new char[strlen(filename)+1]; strcpy(scorefile, filename); } return scorefile;}inline float GAStatistics::convergence() const { double cnv = 0.0; if(nconv >= Nconv-1 && cscore[nconv%Nconv] != 0) cnv = (double)(cscore[(nconv+1)%Nconv]) / (double)(cscore[nconv%Nconv]); return (float)cnv;}inline float GAStatistics::initial(int w) const { float val = 0.0; switch(w){ case Mean: val = aveInit; break; case Maximum: val = maxInit; break; case Minimum: val = minInit; break; case Deviation: val = devInit; break; case Diversity: val = divInit; break; default: break; } return val;}inline float GAStatistics::current(int w) const { float val = 0.0; switch(w){ case Mean: val = aveCur; break; case Maximum: val = maxCur; break; case Minimum: val = minCur; break; case Deviation: val = devCur; break; case Diversity: val = divCur; break; default: break; } return val;}#ifdef GALIB_USE_STREAMSinline STD_OSTREAM & operator<< (STD_OSTREAM & os, const GAStatistics& s){ s.write(os); return os; }#endif#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -