00001 00019 #ifndef _MA2LSI_H 00020 00021 #define _MA2LSI_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 MA2LSI : public Hybrid { 00036 public: 00042 MA2LSI(IEAlgorithm *alg, ILocalSearch *ls); 00043 00044 ~MA2LSI(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 00065 RunningPtr getRunning(); 00066 00070 void setRestart(RestartStrategy *restart, int maxfailed=-1); 00071 00075 unsigned realApply(tChromosomeReal &sol, tFitness &fitness); 00076 unsigned init(void); 00077 00078 void setInitEval(IEval* eval); 00079 00085 void setDisruptionSize(double size); 00086 protected: 00090 bool hasDiversity(PopulationReal *pop); 00091 00095 void setDif(bool debug, string ident, unsigned id, tFitness oldfit, tFitness newfit); 00096 00097 protected: 00103 void disturb(tChromosomeReal &sol); 00104 00105 protected: 00106 double m_disruption_size; 00107 internal::LSParametersMemory *m_memory; 00108 unsigned m_nevalalg; 00109 unsigned m_nevalls; 00110 unsigned m_maxfailed; 00111 IEvalInd *m_initeval; 00112 unsigned m_initMaxEval; 00113 double m_effort; 00114 RestartStrategy *m_restart; 00115 SelectImprovementLS *m_select_improvement; 00116 bool m_debug; 00117 }; 00118 00119 00120 }; 00121 00122 #endif