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