00001 00020 #ifndef _CONFIGPROGRAM_ 00021 00022 #define _CONFIGPROGRAM_ 1 00023 00024 #include "signal.h" 00025 #include "domain.h" 00026 #include "define.h" 00027 #include "running.h" 00028 00029 #include <string> 00030 #include <stdexcept> 00031 #include <memory> 00032 #include <memory> 00033 00034 using namespace std; 00035 00036 namespace realea { 00037 00038 class ConfigException: public runtime_error { 00039 private: 00040 string m_name; 00041 00042 public: 00043 ConfigException(string name) : runtime_error(name) { 00044 m_name = name; 00045 } 00046 00047 public: 00048 virtual ~ConfigException(void) throw () { } 00049 virtual const char *what(void) { 00050 string msg; 00051 msg = "Parameter Config " +m_name +" is not yet defined"; 00052 return msg.c_str(); 00053 } 00054 }; 00055 00056 typedef tFitness (*tEval)(const tGen *x, int dim); 00057 00068 class Problem : public Resetable, public IEval { 00069 public: 00073 virtual ~Problem(void); 00077 Problem(void); 00078 00085 void setEval(tEval eval); 00086 00090 void setMinimize(void); 00094 void setMaximize(void); 00098 bool minimize(void); 00102 bool maximize(void); 00106 bool isBetter(tFitness x, tFitness y); 00107 00113 void setDimension(unsigned int dim); 00117 virtual unsigned int getDimension(void); 00118 00127 void setDomainValues(unsigned int gen, tGen min, tGen max, bool check=true); 00128 00137 void setOptimize(tFitness optime, double threshold); 00138 00146 void setThreshold(double dif); 00147 00153 void setMaxEval(unsigned int maxeval); 00154 00158 unsigned getMaxEval(void); 00159 00160 00164 virtual DomainRealPtr getDomain(void); 00168 tFitness getOptime(void); 00169 00170 OptimeCriterion *getFinishCriterion(void) { 00171 return m_checkOptime; 00172 } 00173 00174 unsigned getMaxEval(unsigned max); 00175 00176 tFitness eval(const tChromosomeReal &sol); 00177 void copy(Problem *problem); 00178 00179 protected: 00180 OptimeCriterion *m_checkOptime; 00181 DomainRealPtr m_domain; 00182 unsigned m_maxeval; 00183 tEval m_eval; 00184 }; 00185 00186 typedef auto_ptr<Problem> ProblemPtr; 00187 typedef ProblemPtr& ProblemParamPtr; 00188 00189 00190 00191 void setProblem(Problem* &prob); 00192 Problem* getProblem(void); 00193 } 00194 00195 #endif