00001 00019 #ifndef _MA2LSIA_H 00020 00021 #define _MA2LSIA_H 1 00022 00023 #include "hybrid.h" 00024 #include "restart.h" 00025 #include "selectls.h" 00026 #include "lsparammem.h" 00027 00028 namespace realea { 00029 00035 class MA2LSIA : public Hybrid { 00036 public: 00042 MA2LSIA(IEAlgorithm *alg, ILocalSearch *ls); 00043 00044 ~MA2LSIA(void); 00051 void setEffortRatio(double ratio); 00052 void setDebug(void); 00053 00054 void recoverIndividual(unsigned oldind, tGen *aind, unsigned size, tGen *aoptional, unsigned size_optional); 00055 void storeIndividual(tIndividualRealPtr ind, tGen **paind, unsigned *pmax, tGen **padditional, unsigned *pmaxad); 00056 00057 void setMaxEval(unsigned int maxeval); 00058 00059 void setSelectImprovementStrategy(SelectImprovementLS *select_improvement) { 00060 m_select_improvement = select_improvement; 00061 } 00062 00063 void setRunning(Running *running); 00064 00068 void setRestart(RestartStrategy *restart, int maxfailed=-1); 00069 00073 unsigned realApply(tChromosomeReal &sol, tFitness &fitness); 00074 unsigned init(void); 00075 00076 void setInitEval(IEval* eval); 00077 00078 private: 00090 unsigned calculateFrec(double nevalalg, double nevalls, unsigned intensity, unsigned neval, double ratio); 00091 bool hasDiversity(PopulationReal *pop); 00092 void setDif(bool debug, string ident, unsigned id, tFitness oldfit, tFitness newfit); 00093 void updateFrec(double effort, double effort_obtained); 00094 00095 private: 00096 internal::LSParametersMemory *m_memory; 00097 unsigned m_frec_update; 00098 unsigned m_nevalalg; 00099 unsigned m_nevalls; 00100 unsigned m_maxfailed; 00101 IEvalInd *m_initeval; 00102 unsigned m_initMaxEval; 00103 double m_effort; 00104 RestartStrategy *m_restart; 00105 SelectImprovementLS *m_select_improvement; 00106 bool m_debug; 00107 }; 00108 00109 00110 }; 00111 00112 #endif