00001
00019 #include "hybrid2ph.h"
00020 #include <cassert>
00021 #include <cmath>
00022
00023 using namespace realea;
00024 using namespace realea::internal;
00025
00026 void Hybrid2Ph::setEffortRatio(double ratio) {
00027
00028 if (ratio == 1)
00029 throw new string("Hybrid2Phd::effortRatio is not valide");
00030
00031 m_effort = ratio;
00032 }
00033
00034 unsigned Hybrid2Ph::init(void) {
00035 if (m_effort >= 0) {
00036 setIntensity((unsigned) ceil(m_running->maxEval()*m_effort));
00037 }
00038
00039 initLs();
00040
00041 return m_alg->init();
00042 }
00043
00044 void Hybrid2Ph::setMaxEval(unsigned maxeval) {
00045 if (m_effort >= 0) {
00046 setIntensity((unsigned) ceil(maxeval*m_effort));
00047 }
00048
00049
00050 assert(maxeval >= m_intensity);
00051 m_alg->setMaxEval(maxeval-m_intensity);
00052 }
00053
00054 void Hybrid2Ph::setRunning(Running *running) {
00055 ProxyEA::setRunning(running);
00056
00057 m_alg->setRunning(m_running->getSubRunning(m_running->maxEval()-m_intensity));
00058 }
00059
00060 unsigned Hybrid2Ph::realApply(tChromosomeReal &sol, tFitness &fitness) {
00061 unsigned num;
00062
00063 num = m_alg->realApply(sol, fitness);
00064
00065
00066 ILSParameters *params = m_ls->getInitOptions(sol);
00067
00068 num +=
00069 m_ls->apply(params, sol, fitness, m_intensity);
00070
00071 delete params;
00072
00073 return num;
00074 }