00001 00019 #ifndef _MALSChains_H 00020 00021 #define _MALSChains_H 1 00022 00023 #include <realea/common/restart.h> 00024 #include <realea/common/selectls.h> 00025 00026 #include "hybrid.h" 00027 #include "lsparammem.h" 00028 00029 namespace realea { 00030 00036 class MALSChains : public Hybrid { 00037 public: 00043 MALSChains(IEAlgorithm *alg, ILocalSearch *ls); 00044 00045 ~MALSChains(void); 00052 void setEffortRatio(double ratio); 00053 void setDebug(void); 00054 00055 void recoverIndividual(unsigned oldind, tGen *aind, unsigned size, tGen *aoptional, unsigned size_optional); 00056 void storeIndividual(tIndividualRealPtr ind, tGen **paind, unsigned *pmax, tGen **padditional, unsigned *pmaxad); 00057 00058 void setMaxEval(unsigned int maxeval); 00059 00060 void setSelectImprovementStrategy(SelectImprovementLS *select_improvement) { 00061 m_select_improvement = select_improvement; 00062 } 00063 00064 void setRunning(Running *running); 00065 00066 RunningPtr getRunning(); 00067 00071 void setRestart(RestartStrategy *restart, int maxfailed=-1); 00072 00076 unsigned realApply(tChromosomeReal &sol, tFitness &fitness); 00077 unsigned init(void); 00078 00079 void setInitEval(IEval* eval); 00080 00086 void setDisruptionSize(double size); 00087 protected: 00091 bool hasDiversity(PopulationReal *pop); 00092 00096 void setDif(bool debug, string ident, unsigned id, tFitness oldfit, tFitness newfit); 00097 00098 protected: 00104 void disturb(tChromosomeReal &sol); 00105 00106 protected: 00107 double m_disruption_size; 00108 internal::LSParametersMemory *m_memory; 00109 unsigned m_nevalalg; 00110 unsigned m_nevalls; 00111 unsigned m_maxfailed; 00112 IEvalInd *m_initeval; 00113 unsigned m_initMaxEval; 00114 double m_effort; 00115 RestartStrategy *m_restart; 00116 SelectImprovementLS *m_select_improvement; 00117 bool m_debug; 00118 }; 00119 00120 00121 }; 00122 00123 #endif