diff --git a/src/lib-base/src/CLI.cpp b/src/lib-base/src/CLI.cpp index 938b295..de536e8 100644 --- a/src/lib-base/src/CLI.cpp +++ b/src/lib-base/src/CLI.cpp @@ -24,7 +24,7 @@ EnjoLib::Result CLI::GetConfigs(int argc, char ** argv) const const char * OPT_SYMBOL = "sym"; const char * OPT_PERIOD = "per"; const char * OPT_LAGS = "lags"; - const char * OPT_PER_SEASONAL = "per-easonal"; + const char * OPT_PER_SEASONAL = "per-seasonal"; EnjoLib::ProgramOptionsState popState; diff --git a/src/lib-base/src/ConfigOpti.cpp b/src/lib-base/src/ConfigOpti.cpp index 5b523c8..12a20e8 100644 --- a/src/lib-base/src/ConfigOpti.cpp +++ b/src/lib-base/src/ConfigOpti.cpp @@ -31,15 +31,15 @@ float ConfigOpti::GetOPTI_CROSS_VALID_BARS_XVAL(const IPeriod & per) const return OPTI_CROSS_VALID_BARS_XVAL / 100.0; } -OptiType ConfigOpti::GetOptimizer() const +OptiType ConfigOpti::GetOperationType() const { return static_cast(OPTIMIZER); } -OptiMethod ConfigOpti::GetOptimizerMethod() const +OptiMethod ConfigOpti::GetMethod() const { return static_cast(OPTIMIZER_METHOD); } -OptiGoalType ConfigOpti::GetOptimizerGoalType() const +OptiGoalType ConfigOpti::GetGoalType() const { return static_cast(OPTIMIZER_GOAL); } @@ -57,22 +57,32 @@ void ConfigOpti::SetOptimizerGoal(const OptiGoalType & optiGoal) OPTIMIZER_GOAL = static_cast(optiGoal); } - + bool ConfigOpti::IsSearchFloatingPoint() const { return not IsSearchGrid(); } bool ConfigOpti::IsSearchGrid() const { - return GetOptimizerMethod() == OptiMethod::OPTI_METHOD_GRID || IsSearchRandom(); + return GetMethod() == OptiMethod::OPTI_METHOD_GRID || IsSearchRandom(); } bool ConfigOpti::IsSearchRandom() const { - return GetOptimizerMethod() == OptiMethod::OPTI_METHOD_MONTECARLO; + return GetMethod() == OptiMethod::OPTI_METHOD_MONTECARLO; } bool ConfigOpti::IsXValid() const { - return GetOptimizer() == OptiType::OPTI_TYPE_XVALID; + return GetOperationType() == OptiType::OPTI_TYPE_XVALID; +} +bool ConfigOpti::IsOperationType(const OptiType & operType) const +{ + const OptiType oper = GetOperationType(); + return oper == operType; +} +bool ConfigOpti::IsOptimizing() const +{ + const OptiType oper = GetOperationType(); + return oper == OptiType::OPTI_TYPE_FIND || oper == OptiType::OPTI_TYPE_XVALID; } ConfigOpti::~ConfigOpti(){} @@ -82,7 +92,6 @@ void ConfigOpti::RegisterAndReadBools(EnjoLib::Istream & f) RegisterAndReadBool(f, OPTI_VERBOSE, true, "VERBOSE", "Show plots and stats"); RegisterAndReadBool(f, OPTI_USE_RELEASE, false, "USE_RELEASE", "Use parameters stored as 'release'"); RegisterAndReadBool(f, OPTI_GLOBAL, false, "GLOBAL", "Find parameters, which optimize all series at the same time"); - //RegisterAndReadBool(f, OPTI_CROSS_VALID, false, "W.F. Validation", "Walk forward optimization / validation"); RegisterAndReadBool(f, OPTI_LAST, false, "LAST", "Use only the last window (iteration) of the W.F. Validation"); RegisterAndReadBool(f, OPTI_RANDOM_EARLY_STOP, false, "Early stop", "Stop Monte Carlo if the change of variance of the optimized var is below threshold"); RegisterAndReadBool(f, OPTI_SERVER_DENSE, false, "SERVER_DENSE", "Use dense sampling of the variables in production (on server)."); @@ -93,11 +102,11 @@ void ConfigOpti::RegisterAndReadInts(EnjoLib::Istream & f) RegisterAndReadInt (f, OPTIMIZER, (long int)OptiType::OPTI_TYPE_NONE); RegisterAndReadInt (f, OPTIMIZER_METHOD, (long int)OptiMethod::OPTI_METHOD_GRID); RegisterAndReadInt (f, OPTIMIZER_GOAL, (long int)OptiGoalType::SUM); - + RegisterAndReadInt (f, OPTI_CROSS_VALID_BARS_OPTI_H1, 2000); RegisterAndReadInt (f, OPTI_CROSS_VALID_BARS_XVAL, 20); RegisterAndReadInt (f, OPTI_RANDOM_SAMPLES_NUM, 100); - RegisterAndReadInt (f, OPTI_RANDOM_MIN_DIFF_PROMILE, 500); + RegisterAndReadInt (f, OPTI_RANDOM_MIN_DIFF_PROMILE, 500); } void ConfigOpti::RegisterAndReadFloats(EnjoLib::Istream & f) { diff --git a/src/lib-base/src/ConfigOpti.h b/src/lib-base/src/ConfigOpti.h index f98b280..923572b 100644 --- a/src/lib-base/src/ConfigOpti.h +++ b/src/lib-base/src/ConfigOpti.h @@ -30,10 +30,12 @@ class ConfigOpti : public ConfigBase bool IsSearchGrid() const; bool IsSearchRandom() const; bool IsXValid() const; - OptiType GetOptimizer() const; - OptiMethod GetOptimizerMethod() const; - OptiGoalType GetOptimizerGoalType() const; - + bool IsOptimizing() const; + bool IsOperationType(const OptiType & operType) const; + OptiType GetOperationType() const; + OptiMethod GetMethod() const; + OptiGoalType GetGoalType() const; + void SetOptimizer(const OptiType & optiType); void SetOptimizerMethod(const OptiMethod & optiMethod); void SetOptimizerGoal(const OptiGoalType & optiGoal); @@ -46,7 +48,6 @@ class ConfigOpti : public ConfigBase bool OPTI_RANDOM_EARLY_STOP = false; bool OPTI_USE_RELEASE = true; bool OPTI_GLOBAL = false; - //bool OPTI_CROSS_VALID = false; /// TODO: Remove - already done via OptiType bool OPTI_LAST = false; bool OPTI_SERVER_DENSE = false; bool OPTI_XVAL_EXTENDABLE = false; diff --git a/src/lib-base/src/OptiType.h b/src/lib-base/src/OptiType.h index 88009ef..7f9bf28 100644 --- a/src/lib-base/src/OptiType.h +++ b/src/lib-base/src/OptiType.h @@ -4,8 +4,8 @@ enum class OptiType { OPTI_TYPE_NONE, - OPTI_TYPE_FIND, OPTI_TYPE_USE, + OPTI_TYPE_FIND, OPTI_TYPE_XVALID }; diff --git a/src/lib-base/src/OptiVar.cpp b/src/lib-base/src/OptiVar.cpp index be8ae0e..3013c95 100644 --- a/src/lib-base/src/OptiVar.cpp +++ b/src/lib-base/src/OptiVar.cpp @@ -48,7 +48,7 @@ OptiVarF::OptiVarF(const IDataProvider & period, const EnjoLib::Str & varId, boo float OptiVarF::GetVal() const { - if (gcfgMan.cfgOpti->GetOptimizer() == OptiType::OPTI_TYPE_NONE) + if (gcfgMan.cfgOpti->IsOperationType(OptiType::OPTI_TYPE_NONE)) { return valDefault; } @@ -64,7 +64,7 @@ void OptiVarF::SetVal(float val) const float & OptiVarF::GetValRef() const { - if (gcfgMan.cfgOpti->GetOptimizer() == OptiType::OPTI_TYPE_NONE) + if (gcfgMan.cfgOpti->IsOperationType(OptiType::OPTI_TYPE_NONE)) { return valDefault; } diff --git a/src/lib-base/src/PredictorBase.cpp b/src/lib-base/src/PredictorBase.cpp index 39ee086..641f10b 100644 --- a/src/lib-base/src/PredictorBase.cpp +++ b/src/lib-base/src/PredictorBase.cpp @@ -7,7 +7,7 @@ PredictorBase::PredictorBase(const IDataProvider & dat, const EnjoLib::Str & lagName) : m_dat(dat) , m_optiFloats(new OptiVarVec()) -, m_lagMain(dat, "LAG_" + lagName, true, 10, 1, 70, 1) +, m_lagMain(dat, "LAG_" + lagName, true, 10, 1, 150, 1) { AddOptiVar(m_lagMain); } diff --git a/src/qt-lib/src/Monster.cpp b/src/qt-lib/src/Monster.cpp index a39186b..6753032 100644 --- a/src/qt-lib/src/Monster.cpp +++ b/src/qt-lib/src/Monster.cpp @@ -16,6 +16,7 @@ #include #include #include "ISymbol.h" +#include "OptiType.h" #include #include @@ -85,13 +86,7 @@ void Monster::Reload(const EnjoLib::Str & symName, const EnjoLib::Str & periodNa ConfigTF2 & confTF2 = *gcfgMan.cfgTF2; const ConfigOpti & confOpti = *gcfgMan.cfgOpti; - - if (confOpti.OPTIMIZER == 1) - gcfg.OPTI_USE = false; - else if (confOpti.OPTIMIZER == 2) - gcfg.OPTI_USE = true; - else if (confOpti.OPTIMIZER == 0) - gcfg.OPTI_USE = false; + gcfg.OPTI_USE = confOpti.IsOperationType(OptiType::OPTI_TYPE_USE); if (mode == 0) { diff --git a/src/qt-lib/src/MyMainWindow3.cpp b/src/qt-lib/src/MyMainWindow3.cpp index 7b42e13..808a5c8 100644 --- a/src/qt-lib/src/MyMainWindow3.cpp +++ b/src/qt-lib/src/MyMainWindow3.cpp @@ -226,12 +226,7 @@ void MyMainWindow::Reload(const Monster & monst, int mode, int relPeriod, int re ConfigTF2 & confTF2 = *gcfgMan.cfgTF2; const ConfigOpti & confOpti = *gcfgMan.cfgOpti; - if (confOpti.OPTIMIZER == 1) - gcfg.OPTI_USE = false; - else if (confOpti.OPTIMIZER == 2) - gcfg.OPTI_USE = true; - else if (confOpti.OPTIMIZER == 0) - gcfg.OPTI_USE = false; + gcfg.OPTI_USE = confOpti.GetOperationType() == OptiType::OPTI_TYPE_USE; if (mode == 3 || m_training) { diff --git a/src/tsqsim-lib/src/OptimizerPred.cpp b/src/tsqsim-lib/src/OptimizerPred.cpp index 182e304..85fdb9b 100644 --- a/src/tsqsim-lib/src/OptimizerPred.cpp +++ b/src/tsqsim-lib/src/OptimizerPred.cpp @@ -42,7 +42,7 @@ OptimizerPred::OptimizerPred(const PredictorType & type, const ISymbol & sym, co const TSInput tsin(m_period, *gcfgMan.cfgTS.get()); CorPtr fun = m_fact.Create(period, m_type); InitFromOptimizable(*fun, period); - + m_len = fun->Len(); } OptimizerPred::~OptimizerPred(){} @@ -63,7 +63,7 @@ void OptimizerPred::Consume(const EnjoLib::VecD & data) const EnjoLib::Str & idd = m_period.GetSymbolPeriodId(); //const OptiGoalType type = OptiGoalType::SHARPE; - //const OptiGoalType type = gcfgMan.cfgOpti->GetOptimizerGoalType(); + //const OptiGoalType type = gcfgMan.cfgOpti->GetGoalType(); //const CorPtr pgoal = OptiGoalFactory::Create(type); //const IOptiGoal & igoal = *pgoal; @@ -71,12 +71,12 @@ void OptimizerPred::Consume(const EnjoLib::VecD & data) float goal = 0; //CorPtr pos = IPosition::Create(m_period.GetSymbolName()); - switch (gcfgMan.cfgOpti->GetOptimizerMethod()) + switch (gcfgMan.cfgOpti->GetMethod()) { case OptiMethod::OPTI_METHOD_BISECTION: { OptiSubjectPred osub(m_sym, m_period, m_fact, m_type, GetOptiFloat(), m_startEndFrame, data); - + //Result res = OptiMultiNelderMead().Run(*osub, 0.1, 10, 10); Result res = OptiMultiBinSearch().Run(osub, 3, 100); /// TODO: Make multithreaded if (not res.isSuccess) @@ -97,17 +97,17 @@ void OptimizerPred::Consume(const EnjoLib::VecD & data) case OptiMethod::OPTI_METHOD_MONTECARLO: case OptiMethod::OPTI_METHOD_GRID: { - + CorPtr psim = TSUtil().GetSimPred(m_period, data, m_startEndFrame); goal = psim->GetScorePred(); - + if (IsGoalReached(goal)) { CorPtr fun = m_fact.Create(m_period, m_type); fun->UpdateOptiVars(data); // Just needs a carrier TODO: Remove in future as is not abstract enough - + //LOG << "Goal reached = " << goal << Nl; OnGoalReached(fun.get()); if (gcfgMan.cfgOpti->OPTI_VERBOSE) @@ -161,7 +161,7 @@ void OptimizerPred::PrintStats() const void OptimizerPred::PrintStatsSummary() const { - if (gcfgMan.cfgOpti->GetOptimizerMethod() == OptiMethod::OPTI_METHOD_MONTECARLO) + if (gcfgMan.cfgOpti->GetMethod() == OptiMethod::OPTI_METHOD_MONTECARLO) { PlotVariance(); } diff --git a/src/tsqsim-lib/src/OptimizerTS.cpp b/src/tsqsim-lib/src/OptimizerTS.cpp index 70db334..1003dea 100644 --- a/src/tsqsim-lib/src/OptimizerTS.cpp +++ b/src/tsqsim-lib/src/OptimizerTS.cpp @@ -53,7 +53,7 @@ void OptimizerTS::Consume(const EnjoLib::VecD & data) const EnjoLib::Str & idd = m_period.GetSymbolPeriodId(); //const OptiGoalType type = OptiGoalType::SHARPE; - //const OptiGoalType type = gcfgMan.cfgOpti->GetOptimizerGoalType(); + //const OptiGoalType type = gcfgMan.cfgOpti->GetGoalType(); //const CorPtr pgoal = OptiGoalFactory::Create(type); //const IOptiGoal & igoal = *pgoal; @@ -61,7 +61,7 @@ void OptimizerTS::Consume(const EnjoLib::VecD & data) float goal = 0; //CorPtr pos = IPosition::Create(m_period.GetSymbolName()); - switch (gcfgMan.cfgOpti->GetOptimizerMethod()) + switch (gcfgMan.cfgOpti->GetMethod()) { case OptiMethod::OPTI_METHOD_BISECTION: { diff --git a/src/tsqsim/src/App.cpp b/src/tsqsim/src/App.cpp index 6816487..842e63d 100644 --- a/src/tsqsim/src/App.cpp +++ b/src/tsqsim/src/App.cpp @@ -61,7 +61,7 @@ void App::Run(const CLIResult & cliResultCmdLine) const CorPtr symbol = IMainTester::Create(symFact, &confTF2, &confSym)->GetSymbol(confSym.symbol, periods); const IPeriod & per = symbol->GetPeriod(periods.at(0)); - switch (confOpti.GetOptimizer()) + switch (confOpti.GetOperationType()) { case OptiType::OPTI_TYPE_FIND: {