From a746a80a3a46beddbdc636d37244e43d861f6386 Mon Sep 17 00:00:00 2001 From: "Brian M. Adams" Date: Sat, 14 Oct 2017 21:23:38 -0600 Subject: [PATCH] Granular construction of a few more Options classes Refactor in support of libqueso/queso#569 to enable various layered phases of constructing OptimizerOptions, MLSamplingLeveloptions, and InfiniteDimensionalMCMCSamplerOptions. This mirrors work done in other *OptionsValues. --- .../InfiniteDimensionalMCMCSamplerOptions.h | 13 +- src/core/inc/OptimizerOptions.h | 13 +- .../InfiniteDimensionalMCMCSamplerOptions.C | 105 ++-- src/core/src/OptimizerOptions.C | 185 +++--- src/stats/inc/MLSamplingLevelOptions.h | 26 +- src/stats/src/MLSamplingLevelOptions.C | 591 ++++++++---------- 6 files changed, 464 insertions(+), 469 deletions(-) diff --git a/src/core/inc/InfiniteDimensionalMCMCSamplerOptions.h b/src/core/inc/InfiniteDimensionalMCMCSamplerOptions.h index a8f51aad1..74806de31 100644 --- a/src/core/inc/InfiniteDimensionalMCMCSamplerOptions.h +++ b/src/core/inc/InfiniteDimensionalMCMCSamplerOptions.h @@ -50,6 +50,15 @@ class InfiniteDimensionalMCMCSamplerOptions //! Given prefix, read the input file for parameters named prefix_* InfiniteDimensionalMCMCSamplerOptions(const BaseEnvironment& env, const char* prefix); + //! Set default values for parameter options + void set_defaults(); + + //! Set parameter option names to begin with prefix + void set_prefix(const std::string& prefix); + + //! Given prefix, read the input file for parameters named "prefix"+* + void parse(const BaseEnvironment& env, const std::string& prefix); + //! Destructor virtual ~InfiniteDimensionalMCMCSamplerOptions(); @@ -86,10 +95,10 @@ class InfiniteDimensionalMCMCSamplerOptions private: #ifndef QUESO_DISABLE_BOOST_PROGRAM_OPTIONS - BoostInputOptionsParser * m_parser; + ScopedPtr::Type m_parser; #endif // QUESO_DISABLE_BOOST_PROGRAM_OPTIONS - const BaseEnvironment& m_env; + const BaseEnvironment* m_env; std::string m_option_help; std::string m_option_dataOutputDirName; diff --git a/src/core/inc/OptimizerOptions.h b/src/core/inc/OptimizerOptions.h index 63592fc39..5537ce087 100644 --- a/src/core/inc/OptimizerOptions.h +++ b/src/core/inc/OptimizerOptions.h @@ -71,6 +71,15 @@ class OptimizerOptions //! Copy constructor OptimizerOptions(const OptimizerOptions & rhs); + //! Set default values for parameter options + void set_defaults(); + + //! Set parameter option names to begin with prefix + void set_prefix(const std::string& prefix); + + //! Given prefix, read the input file for parameters named "prefix"+* + void parse(const BaseEnvironment& env, const std::string& prefix); + //! Destructor virtual ~OptimizerOptions(); //@} @@ -135,7 +144,9 @@ class OptimizerOptions private: const BaseEnvironment * m_env; - BoostInputOptionsParser * m_parser; +#ifndef QUESO_DISABLE_BOOST_PROGRAM_OPTIONS + ScopedPtr::Type m_parser; +#endif // The input options as strings so we can parse the input file later std::string m_option_help; diff --git a/src/core/src/InfiniteDimensionalMCMCSamplerOptions.C b/src/core/src/InfiniteDimensionalMCMCSamplerOptions.C index d802fcda1..6b5adaeb0 100644 --- a/src/core/src/InfiniteDimensionalMCMCSamplerOptions.C +++ b/src/core/src/InfiniteDimensionalMCMCSamplerOptions.C @@ -36,49 +36,11 @@ namespace QUESO { InfiniteDimensionalMCMCSamplerOptions::InfiniteDimensionalMCMCSamplerOptions( const BaseEnvironment& env, const char * prefix) - : m_prefix((std::string)(prefix) + "infmcmc_"), - m_dataOutputDirName(UQ_INF_DATA_OUTPUT_DIR_NAME_ODV), - m_dataOutputFileName(UQ_INF_DATA_OUTPUT_FILE_NAME_ODV), - m_num_iters(UQ_INF_NUM_ITERS_ODV), - m_save_freq(UQ_INF_SAVE_FREQ_ODV), - m_rwmh_step(UQ_INF_RWMH_STEP_ODV), -#ifndef QUESO_DISABLE_BOOST_PROGRAM_OPTIONS - m_parser(new BoostInputOptionsParser(env.optionsInputFileName())), -#endif // QUESO_DISABLE_BOOST_PROGRAM_OPTIONS - m_env(env), - m_option_help(m_prefix + "help"), - m_option_dataOutputDirName(m_prefix + "dataOutputDirName"), - m_option_dataOutputFileName(m_prefix + "dataOutputFileName"), - m_option_num_iters(m_prefix + "num_iters"), - m_option_save_freq(m_prefix + "save_freq"), - m_option_rwmh_step(m_prefix + "rwmh_step") { - queso_require_not_equal_to_msg(m_env.optionsInputFileName(), std::string(""), std::string("this constructor is incompatible with the abscense of an options input file")); - -#ifndef QUESO_DISABLE_BOOST_PROGRAM_OPTIONS - m_parser->registerOption(m_option_help, "produce help message for infinite dimensional sampler"); - m_parser->registerOption(m_option_dataOutputDirName, UQ_INF_DATA_OUTPUT_DIR_NAME_ODV, "name of data output dir"); - m_parser->registerOption(m_option_dataOutputFileName, UQ_INF_DATA_OUTPUT_FILE_NAME_ODV, "name of data output file (HDF5)"); - m_parser->registerOption(m_option_num_iters, UQ_INF_NUM_ITERS_ODV, "number of mcmc iterations to do"); - m_parser->registerOption(m_option_save_freq, UQ_INF_SAVE_FREQ_ODV, "the frequency at which to save the chain state"); - m_parser->registerOption(m_option_rwmh_step, UQ_INF_RWMH_STEP_ODV, "the step-size in the random-walk Metropolis proposal");; - - m_parser->scanInputFile(); - - m_parser->getOption(m_option_dataOutputDirName, m_dataOutputDirName); - m_parser->getOption(m_option_dataOutputFileName, m_dataOutputFileName); - m_parser->getOption(m_option_num_iters, m_num_iters); - m_parser->getOption(m_option_save_freq, m_save_freq); - m_parser->getOption(m_option_rwmh_step, m_rwmh_step); -#else - m_dataOutputDirName = m_env.input()(m_option_dataOutputDirName, UQ_INF_DATA_OUTPUT_DIR_NAME_ODV); - m_dataOutputFileName = m_env.input()(m_option_dataOutputFileName, UQ_INF_DATA_OUTPUT_FILE_NAME_ODV); - m_num_iters = m_env.input()(m_option_num_iters, UQ_INF_NUM_ITERS_ODV); - m_save_freq = m_env.input()(m_option_save_freq, UQ_INF_SAVE_FREQ_ODV); - m_rwmh_step = m_env.input()(m_option_rwmh_step, UQ_INF_RWMH_STEP_ODV);; -#endif // QUESO_DISABLE_BOOST_PROGRAM_OPTIONS + queso_require_not_equal_to_msg(m_env->optionsInputFileName(), std::string(""), std::string("this constructor is incompatible with the abscense of an options input file")); - checkOptions(); + this->set_defaults(); + this->parse(env, prefix); } void @@ -116,7 +78,66 @@ std::ostream & operator<<(std::ostream & os, const BaseEnvironment& InfiniteDimensionalMCMCSamplerOptions::env() const { - return this->m_env; + return *(this->m_env); +} + + +void InfiniteDimensionalMCMCSamplerOptions::set_defaults() +{ + m_dataOutputDirName = UQ_INF_DATA_OUTPUT_DIR_NAME_ODV; + m_dataOutputFileName = UQ_INF_DATA_OUTPUT_FILE_NAME_ODV; + m_num_iters = UQ_INF_NUM_ITERS_ODV; + m_save_freq = UQ_INF_SAVE_FREQ_ODV; + m_rwmh_step = UQ_INF_RWMH_STEP_ODV; +} + + +void InfiniteDimensionalMCMCSamplerOptions::set_prefix(const std::string& prefix) +{ + m_prefix = prefix+ "infmcmc_"; + + m_option_help = m_prefix + "help"; + m_option_dataOutputDirName = m_prefix + "dataOutputDirName"; + m_option_dataOutputFileName = m_prefix + "dataOutputFileName"; + m_option_num_iters = m_prefix + "num_iters"; + m_option_save_freq = m_prefix + "save_freq"; + m_option_rwmh_step = m_prefix + "rwmh_step"; +} + + +void InfiniteDimensionalMCMCSamplerOptions::parse(const BaseEnvironment& env, const std::string& prefix) +{ + m_env = &env; + + this->set_prefix(prefix); + +#ifndef QUESO_DISABLE_BOOST_PROGRAM_OPTIONS + + m_parser.reset(new BoostInputOptionsParser(env.optionsInputFileName())); + + m_parser->registerOption(m_option_help, "produce help message for infinite dimensional sampler"); + m_parser->registerOption(m_option_dataOutputDirName, m_dataOutputDirName, "name of data output dir"); + m_parser->registerOption(m_option_dataOutputFileName, m_dataOutputFileName, "name of data output file (HDF5)"); + m_parser->registerOption(m_option_num_iters, m_num_iters, "number of mcmc iterations to do"); + m_parser->registerOption(m_option_save_freq, m_save_freq, "the frequency at which to save the chain state"); + m_parser->registerOption(m_option_rwmh_step, m_rwmh_step, "the step-size in the random-walk Metropolis proposal");; + + m_parser->scanInputFile(); + + m_parser->getOption(m_option_dataOutputDirName, m_dataOutputDirName); + m_parser->getOption(m_option_dataOutputFileName, m_dataOutputFileName); + m_parser->getOption(m_option_num_iters, m_num_iters); + m_parser->getOption(m_option_save_freq, m_save_freq); + m_parser->getOption(m_option_rwmh_step, m_rwmh_step); +#else + m_dataOutputDirName = m_env->input()(m_option_dataOutputDirName, m_dataOutputDirName); + m_dataOutputFileName = m_env->input()(m_option_dataOutputFileName, m_dataOutputFileName); + m_num_iters = m_env->input()(m_option_num_iters, m_num_iters); + m_save_freq = m_env->input()(m_option_save_freq, m_save_freq); + m_rwmh_step = m_env->input()(m_option_rwmh_step, m_rwmh_step); +#endif // QUESO_DISABLE_BOOST_PROGRAM_OPTIONS + + checkOptions(); } } // End namespace QUESO diff --git a/src/core/src/OptimizerOptions.C b/src/core/src/OptimizerOptions.C index b0336bb12..1e71918fa 100644 --- a/src/core/src/OptimizerOptions.C +++ b/src/core/src/OptimizerOptions.C @@ -38,98 +38,18 @@ namespace QUESO { OptimizerOptions::OptimizerOptions() - : m_prefix("ip_"), - m_help(UQ_OPT_HELP), - m_maxIterations(UQ_OPT_MAX_ITERATIONS), - m_tolerance(UQ_OPT_TOLERANCE), - m_finiteDifferenceStepSize(UQ_OPT_FINITE_DIFFERENCE_STEP_SIZE), - m_solverType(UQ_OPT_SOLVER_TYPE), - m_fstepSize(UQ_OPT_FSTEP_SIZE), - m_fdfstepSize(UQ_OPT_FDFSTEP_SIZE), - m_lineTolerance(UQ_OPT_LINE_TOLERANCE), - m_env(NULL), -#ifndef QUESO_DISABLE_BOOST_PROGRAM_OPTIONS - m_parser(NULL), -#endif // QUESO_DISABLE_BOOST_PROGRAM_OPTIONS - m_option_help(m_prefix + "help"), - m_option_maxIterations(m_prefix + "maxIterations"), - m_option_tolerance(m_prefix + "tolerance"), - m_option_finiteDifferenceStepSize(m_prefix + "finiteDifferenceStepSize"), - m_option_solverType(m_prefix + "solverType"), - m_option_fstepSize(m_prefix + "fstepSize"), - m_option_fdfstepSize(m_prefix + "fdfStepSize"), - m_option_lineTolerance(m_prefix + "lineTolerance") + : + m_env(NULL) { + this->set_defaults(); + this->set_prefix(""); } -OptimizerOptions::OptimizerOptions(const BaseEnvironment * env, const char * - prefix) - : m_prefix((std::string)(prefix) + "optimizer_"), - m_help(UQ_OPT_HELP), - m_maxIterations(UQ_OPT_MAX_ITERATIONS), - m_tolerance(UQ_OPT_TOLERANCE), - m_finiteDifferenceStepSize(UQ_OPT_FINITE_DIFFERENCE_STEP_SIZE), - m_solverType(UQ_OPT_SOLVER_TYPE), - m_fstepSize(UQ_OPT_FSTEP_SIZE), - m_fdfstepSize(UQ_OPT_FDFSTEP_SIZE), - m_lineTolerance(UQ_OPT_LINE_TOLERANCE), - m_env(env), -#ifndef QUESO_DISABLE_BOOST_PROGRAM_OPTIONS - m_parser(new BoostInputOptionsParser(env->optionsInputFileName())), -#endif // QUESO_DISABLE_BOOST_PROGRAM_OPTIONS - m_option_help(m_prefix + "help"), - m_option_maxIterations(m_prefix + "maxIterations"), - m_option_tolerance(m_prefix + "tolerance"), - m_option_finiteDifferenceStepSize(m_prefix + "finiteDifferenceStepSize"), - m_option_solverType(m_prefix + "solverType"), - m_option_fstepSize(m_prefix + "fstepSize"), - m_option_fdfstepSize(m_prefix + "fdfStepSize"), - m_option_lineTolerance(m_prefix + "lineTolerance") +OptimizerOptions:: +OptimizerOptions(const BaseEnvironment* env, const char* prefix) { -#ifndef QUESO_DISABLE_BOOST_PROGRAM_OPTIONS - m_parser->registerOption(m_option_help, UQ_OPT_HELP, - "produce help message for statistical inverse problem"); - - m_parser->registerOption(m_option_maxIterations, - UQ_OPT_MAX_ITERATIONS, - "max number of optimizer iterations to do"); - m_parser->registerOption(m_option_tolerance, UQ_OPT_TOLERANCE, - "optimize until gradient is less than tolerance"); - m_parser->registerOption(m_option_finiteDifferenceStepSize, - UQ_OPT_FINITE_DIFFERENCE_STEP_SIZE, - "if no deriv is given, do finite difference with this step size"); - m_parser->registerOption(m_option_solverType, UQ_OPT_SOLVER_TYPE, - "which optimisation algorithm to use"); - m_parser->registerOption(m_option_fstepSize, UQ_OPT_FSTEP_SIZE, - "sets the step size used in gradient-free solvers"); - m_parser->registerOption(m_option_fdfstepSize, UQ_OPT_FDFSTEP_SIZE, - "sets the step size used in gradient-based solvers"); - m_parser->registerOption(m_option_lineTolerance, UQ_OPT_LINE_TOLERANCE, - "sets the line minimisation tolerance"); - - m_parser->scanInputFile(); - - m_parser->getOption(m_option_help, m_help); - m_parser->getOption(m_option_maxIterations, m_maxIterations); - m_parser->getOption(m_option_tolerance, m_tolerance); - m_parser->getOption(m_option_finiteDifferenceStepSize, - m_finiteDifferenceStepSize); - m_parser->getOption(m_option_solverType, m_solverType); - m_parser->getOption(m_option_fstepSize, m_fstepSize); - m_parser->getOption(m_option_fdfstepSize, m_fdfstepSize); - m_parser->getOption(m_option_lineTolerance, m_lineTolerance); -#else - m_help = m_env->input()(m_option_help, UQ_OPT_HELP); - m_maxIterations = m_env->input()(m_option_maxIterations, UQ_OPT_MAX_ITERATIONS); - m_tolerance = m_env->input()(m_option_tolerance, UQ_OPT_TOLERANCE); - m_finiteDifferenceStepSize = m_env->input()(m_option_finiteDifferenceStepSize, UQ_OPT_FINITE_DIFFERENCE_STEP_SIZE); - m_solverType = m_env->input()(m_option_solverType, UQ_OPT_SOLVER_TYPE); - m_fstepSize = m_env->input()(m_option_fstepSize, UQ_OPT_FSTEP_SIZE); - m_fdfstepSize = m_env->input()(m_option_fdfstepSize, UQ_OPT_FDFSTEP_SIZE); - m_lineTolerance = m_env->input()(m_option_lineTolerance, UQ_OPT_LINE_TOLERANCE); -#endif // QUESO_DISABLE_BOOST_PROGRAM_OPTIONS - - checkOptions(); + this->set_defaults(); + this->parse(*env, prefix); } OptimizerOptions::OptimizerOptions(const OptimizerOptions & rhs) @@ -143,7 +63,9 @@ OptimizerOptions::OptimizerOptions(const OptimizerOptions & rhs) m_fstepSize(rhs.m_fstepSize), m_fdfstepSize(rhs.m_fdfstepSize), m_lineTolerance(rhs.m_lineTolerance), - m_parser(rhs.m_parser), // We'll never touch the input file in a copied object +// #ifndef QUESO_DISABLE_BOOST_PROGRAM_OPTIONS +// m_parser(rhs.m_parser), // We'll never touch the input file in a copied object +// #endif m_option_help(rhs.m_option_help), m_option_maxIterations(rhs.m_option_maxIterations), m_option_tolerance(rhs.m_option_tolerance), @@ -185,4 +107,89 @@ operator<<(std::ostream& os, const OptimizerOptions & obj) return os; } + +void OptimizerOptions::set_defaults() +{ + m_help = UQ_OPT_HELP; + m_maxIterations = UQ_OPT_MAX_ITERATIONS; + m_tolerance = UQ_OPT_TOLERANCE; + m_finiteDifferenceStepSize = UQ_OPT_FINITE_DIFFERENCE_STEP_SIZE; + m_solverType = UQ_OPT_SOLVER_TYPE; + m_fstepSize = UQ_OPT_FSTEP_SIZE; + m_fdfstepSize = UQ_OPT_FDFSTEP_SIZE; + m_lineTolerance = UQ_OPT_LINE_TOLERANCE; +} + + +void OptimizerOptions::set_prefix(const std::string& prefix) +{ + // NOTE: previously default ctor was setting to "ip_" + m_prefix = prefix + "optimizer_"; + + m_option_help = m_prefix + "help"; + m_option_maxIterations = m_prefix + "maxIterations"; + m_option_tolerance = m_prefix + "tolerance"; + m_option_finiteDifferenceStepSize = m_prefix + "finiteDifferenceStepSize"; + m_option_solverType = m_prefix + "solverType"; + m_option_fstepSize = m_prefix + "fstepSize"; + m_option_fdfstepSize = m_prefix + "fdfStepSize"; + m_option_lineTolerance = m_prefix + "lineTolerance"; +} + + +void OptimizerOptions:: +parse(const BaseEnvironment& env, const std::string& prefix) +{ + m_env = &env; + + this->set_prefix(prefix); + +#ifndef QUESO_DISABLE_BOOST_PROGRAM_OPTIONS + + m_parser.reset(new BoostInputOptionsParser(env.optionsInputFileName())); + + m_parser->registerOption(m_option_help, m_help, + "produce help message for statistical inverse problem"); + m_parser->registerOption(m_option_maxIterations, + m_maxIterations, + "max number of optimizer iterations to do"); + m_parser->registerOption(m_option_tolerance, m_tolerance, + "optimize until gradient is less than tolerance"); + m_parser->registerOption(m_option_finiteDifferenceStepSize, + m_finiteDifferenceStepSize, + "if no deriv is given, do finite difference with this step size"); + m_parser->registerOption(m_option_solverType, m_solverType, + "which optimisation algorithm to use"); + m_parser->registerOption(m_option_fstepSize, m_fstepSize, + "sets the step size used in gradient-free solvers"); + m_parser->registerOption(m_option_fdfstepSize, m_fdfstepSize, + "sets the step size used in gradient-based solvers"); + m_parser->registerOption(m_option_lineTolerance, m_lineTolerance, + "sets the line minimisation tolerance"); + + m_parser->scanInputFile(); + + m_parser->getOption(m_option_help, m_help); + m_parser->getOption(m_option_maxIterations, m_maxIterations); + m_parser->getOption(m_option_tolerance, m_tolerance); + m_parser->getOption(m_option_finiteDifferenceStepSize, + m_finiteDifferenceStepSize); + m_parser->getOption(m_option_solverType, m_solverType); + m_parser->getOption(m_option_fstepSize, m_fstepSize); + m_parser->getOption(m_option_fdfstepSize, m_fdfstepSize); + m_parser->getOption(m_option_lineTolerance, m_lineTolerance); +#else + m_help = m_env->input()(m_option_help, m_help); + m_maxIterations = m_env->input()(m_option_maxIterations, m_maxIterations); + m_tolerance = m_env->input()(m_option_tolerance, m_tolerance); + m_finiteDifferenceStepSize = m_env->input()(m_option_finiteDifferenceStepSize, m_finiteDifferenceStepSize); + m_solverType = m_env->input()(m_option_solverType, m_solverType); + m_fstepSize = m_env->input()(m_option_fstepSize, m_fstepSize); + m_fdfstepSize = m_env->input()(m_option_fdfstepSize, m_fdfstepSize); + m_lineTolerance = m_env->input()(m_option_lineTolerance, m_lineTolerance); +#endif // QUESO_DISABLE_BOOST_PROGRAM_OPTIONS + + checkOptions(); +} + } // End namespace QUESO diff --git a/src/stats/inc/MLSamplingLevelOptions.h b/src/stats/inc/MLSamplingLevelOptions.h index 039d48c40..a49b12284 100644 --- a/src/stats/inc/MLSamplingLevelOptions.h +++ b/src/stats/inc/MLSamplingLevelOptions.h @@ -134,6 +134,15 @@ class MLSamplingLevelOptions //MLSamplingLevelOptions(const MLSamplingLevelOptions& inputOptions); + //! Set default values for parameter options + void set_defaults(); + + //! Set parameter option names to begin with prefix + void set_prefix(const std::string& prefix); + + //! Given prefix, read the input file for parameters named "prefix"+* + void parse(const BaseEnvironment& env, const std::string& prefix); + //! Destructor virtual ~MLSamplingLevelOptions(); //@} @@ -176,9 +185,6 @@ class MLSamplingLevelOptions //! subEnvs that will write to generic output file. std::set m_dataOutputAllowedSet; - //! subEnvs that will write to generic output file. - std::string m_str1; - //! Perform load balancing with chosen algorithm (0 = no balancing). unsigned int m_loadBalanceAlgorithmId; @@ -227,9 +233,7 @@ class MLSamplingLevelOptions std::set m_parameterDisabledSet; // gpmsa2 - std::string m_str2; // gpmsa2 std::vector m_initialValuesOfDisabledParameters; // gpmsa2 - std::string m_str3; // gpmsa2 //! Name of input file for raw chain. std::string m_rawChainDataInputFileName; @@ -268,7 +272,6 @@ class MLSamplingLevelOptions //! subEnvs that will write to output file for raw chain. std::set m_rawChainDataOutputAllowedSet; - std::string m_str4; #ifdef QUESO_USES_SEQUENCE_STATISTICAL_OPTIONS //! Compute statistics on raw chain. bool m_rawChainComputeStats; @@ -294,7 +297,6 @@ class MLSamplingLevelOptions //! subEnvs that will write to output file for filtered chain. std::set m_filteredChainDataOutputAllowedSet; - std::string m_str5; #ifdef QUESO_USES_SEQUENCE_STATISTICAL_OPTIONS //! Compute statistics on filtered chain. @@ -318,7 +320,6 @@ class MLSamplingLevelOptions //! 'dr' list of scales for proposal covariance matrices from 2nd stage on. std::vector m_drScalesForExtraStages; - std::string m_str6; //! Whether or not 'dr' is used during 'am' non adaptive interval. bool m_drDuringAmNonAdaptiveInt; @@ -347,9 +348,6 @@ class MLSamplingLevelOptions //! subEnvs that will write to output file for 'am' adapted matrices. std::set m_amAdaptedMatricesDataOutputAllowedSet; - - std::string m_str7; - //! 'am' eta. double m_amEta; @@ -374,10 +372,10 @@ class MLSamplingLevelOptions void getAllOptions(); void defineAllOptions(); - const BaseEnvironment& m_env; + const BaseEnvironment* m_env; #ifndef QUESO_DISABLE_BOOST_PROGRAM_OPTIONS - BoostInputOptionsParser * m_parser; + ScopedPtr::Type m_parser; #endif // QUESO_DISABLE_BOOST_PROGRAM_OPTIONS std::string m_option_help; @@ -458,7 +456,7 @@ class MLSamplingLevelOptions std::string m_option_tk; std::string m_option_updateInterval; - void checkOptions(const BaseEnvironment * env); + void checkOptions(); friend std::ostream & operator<<(std::ostream & os, const MLSamplingLevelOptions & obj); diff --git a/src/stats/src/MLSamplingLevelOptions.C b/src/stats/src/MLSamplingLevelOptions.C index c353ebb63..6cf7f96d3 100644 --- a/src/stats/src/MLSamplingLevelOptions.C +++ b/src/stats/src/MLSamplingLevelOptions.C @@ -31,176 +31,16 @@ namespace QUESO { MLSamplingLevelOptions::MLSamplingLevelOptions( const BaseEnvironment& env, const char* prefix) - : - m_prefix ((std::string)(prefix) + ""), - m_help (UQ_ML_SAMPLING_L_HELP), -#ifdef ML_CODE_HAS_NEW_RESTART_CAPABILITY -#else - m_checkpointOutputFileName (UQ_ML_SAMPLING_L_CHECKPOINT_OUTPUT_FILE_NAME_ODV), -#endif - m_stopAtEnd (UQ_ML_SAMPLING_L_STOP_AT_END_ODV), - m_dataOutputFileName (UQ_ML_SAMPLING_L_DATA_OUTPUT_FILE_NAME_ODV), - m_dataOutputAllowAll (UQ_ML_SAMPLING_L_DATA_OUTPUT_ALLOW_ALL_ODV), - //m_dataOutputAllowedSet (), - m_str1 (""), - m_loadBalanceAlgorithmId (UQ_ML_SAMPLING_L_LOAD_BALANCE_ALGORITHM_ID_ODV), - m_loadBalanceTreshold (UQ_ML_SAMPLING_L_LOAD_BALANCE_TRESHOLD_ODV), - m_minEffectiveSizeRatio (UQ_ML_SAMPLING_L_MIN_EFFECTIVE_SIZE_RATIO_ODV), - m_maxEffectiveSizeRatio (UQ_ML_SAMPLING_L_MAX_EFFECTIVE_SIZE_RATIO_ODV), - m_scaleCovMatrix (UQ_ML_SAMPLING_L_SCALE_COV_MATRIX_ODV), - m_minRejectionRate (UQ_ML_SAMPLING_L_MIN_REJECTION_RATE_ODV), - m_maxRejectionRate (UQ_ML_SAMPLING_L_MAX_REJECTION_RATE_ODV), - m_covRejectionRate (UQ_ML_SAMPLING_L_COV_REJECTION_RATE_ODV), - m_minAcceptableEta (UQ_ML_SAMPLING_L_MIN_ACCEPTABLE_ETA_ODV), // gpmsa1 - m_totallyMute (UQ_ML_SAMPLING_L_TOTALLY_MUTE_ODV), - m_initialPositionDataInputFileName (UQ_ML_SAMPLING_L_INITIAL_POSITION_DATA_INPUT_FILE_NAME_ODV), - m_initialPositionDataInputFileType (UQ_ML_SAMPLING_L_INITIAL_POSITION_DATA_INPUT_FILE_TYPE_ODV), - m_initialProposalCovMatrixDataInputFileName(UQ_ML_SAMPLING_L_INITIAL_PROPOSAL_COV_MATRIX_DATA_INPUT_FILE_NAME_ODV), - m_initialProposalCovMatrixDataInputFileType(UQ_ML_SAMPLING_L_INITIAL_PROPOSAL_COV_MATRIX_DATA_INPUT_FILE_TYPE_ODV), - m_initialPositionUsePreviousLevelLikelihood(UQ_ML_SAMPLING_L_INITIAL_POSITION_USE_PREVIOUS_LEVEL_LIKELIHOOD_ODV), // ml_likelihood_caching - //m_parameterDisabledSet (), // gpmsa2 - m_str2 (""), - m_initialValuesOfDisabledParameters (0), - m_str3 (""), - m_rawChainDataInputFileName (UQ_ML_SAMPLING_L_RAW_CHAIN_DATA_INPUT_FILE_NAME_ODV), - m_rawChainDataInputFileType (UQ_ML_SAMPLING_L_RAW_CHAIN_DATA_INPUT_FILE_TYPE_ODV), - m_rawChainSize (UQ_ML_SAMPLING_L_RAW_CHAIN_SIZE_ODV), - m_rawChainGenerateExtra (UQ_ML_SAMPLING_L_RAW_CHAIN_GENERATE_EXTRA_ODV), - m_rawChainDisplayPeriod (UQ_ML_SAMPLING_L_RAW_CHAIN_DISPLAY_PERIOD_ODV), - m_rawChainMeasureRunTimes (UQ_ML_SAMPLING_L_RAW_CHAIN_MEASURE_RUN_TIMES_ODV), - m_rawChainDataOutputPeriod (UQ_ML_SAMPLING_L_RAW_CHAIN_DATA_OUTPUT_PERIOD_ODV), - m_rawChainDataOutputFileName (UQ_ML_SAMPLING_L_RAW_CHAIN_DATA_OUTPUT_FILE_NAME_ODV), - m_rawChainDataOutputFileType (UQ_ML_SAMPLING_L_RAW_CHAIN_DATA_OUTPUT_FILE_TYPE_ODV), - m_rawChainDataOutputAllowAll (UQ_ML_SAMPLING_L_RAW_CHAIN_DATA_OUTPUT_ALLOW_ALL_ODV), - //m_rawChainDataOutputAllowedSet (), - m_str4 (""), -#ifdef QUESO_USES_SEQUENCE_STATISTICAL_OPTIONS - m_rawChainComputeStats (UQ_ML_SAMPLING_L_RAW_CHAIN_COMPUTE_STATS_ODV), - m_rawChainStatisticalOptionsObj (NULL), - m_rawChainStatOptsInstantiated (false), -#endif - m_filteredChainGenerate (UQ_ML_SAMPLING_L_FILTERED_CHAIN_GENERATE_ODV), - m_filteredChainDiscardedPortion (UQ_ML_SAMPLING_L_FILTERED_CHAIN_DISCARDED_PORTION_ODV), - m_filteredChainLag (UQ_ML_SAMPLING_L_FILTERED_CHAIN_LAG_ODV), - m_filteredChainDataOutputFileName (UQ_ML_SAMPLING_L_FILTERED_CHAIN_DATA_OUTPUT_FILE_NAME_ODV), - m_filteredChainDataOutputFileType (UQ_ML_SAMPLING_L_FILTERED_CHAIN_DATA_OUTPUT_FILE_TYPE_ODV), - m_filteredChainDataOutputAllowAll (UQ_ML_SAMPLING_L_FILTERED_CHAIN_DATA_OUTPUT_ALLOW_ALL_ODV), - //m_filteredChainDataOutputAllowedSet (), - m_str5 (""), -#ifdef QUESO_USES_SEQUENCE_STATISTICAL_OPTIONS - m_filteredChainComputeStats (UQ_ML_SAMPLING_L_FILTERED_CHAIN_COMPUTE_STATS_ODV), - m_filteredChainStatisticalOptionsObj (NULL), - m_filteredChainStatOptsInstantiated (false), -#endif - m_displayCandidates (UQ_ML_SAMPLING_L_DISPLAY_CANDIDATES_ODV), - m_putOutOfBoundsInChain (UQ_ML_SAMPLING_L_PUT_OUT_OF_BOUNDS_IN_CHAIN_ODV), - m_tkUseLocalHessian (UQ_ML_SAMPLING_L_TK_USE_LOCAL_HESSIAN_ODV), - m_tkUseNewtonComponent (UQ_ML_SAMPLING_L_TK_USE_NEWTON_COMPONENT_ODV), - m_drMaxNumExtraStages (UQ_ML_SAMPLING_L_DR_MAX_NUM_EXTRA_STAGES_ODV), - m_drScalesForExtraStages (0), - m_str6 ("1. "), - m_drDuringAmNonAdaptiveInt (UQ_ML_SAMPLING_L_DR_DURING_AM_NON_ADAPTIVE_INT_ODV), - m_amKeepInitialMatrix (UQ_ML_SAMPLING_L_AM_KEEP_INITIAL_MATRIX_ODV), - m_amInitialNonAdaptInterval (UQ_ML_SAMPLING_L_AM_INIT_NON_ADAPT_INT_ODV), - m_amAdaptInterval (UQ_ML_SAMPLING_L_AM_ADAPT_INTERVAL_ODV), - m_amAdaptedMatricesDataOutputPeriod (UQ_ML_SAMPLING_L_AM_ADAPTED_MATRICES_DATA_OUTPUT_PERIOD_ODV), - m_amAdaptedMatricesDataOutputFileName (UQ_ML_SAMPLING_L_AM_ADAPTED_MATRICES_DATA_OUTPUT_FILE_NAME_ODV), - m_amAdaptedMatricesDataOutputFileType (UQ_ML_SAMPLING_L_AM_ADAPTED_MATRICES_DATA_OUTPUT_FILE_TYPE_ODV), - m_amAdaptedMatricesDataOutputAllowAll (UQ_ML_SAMPLING_L_AM_ADAPTED_MATRICES_DATA_OUTPUT_ALLOW_ALL_ODV), - //m_amAdaptedMatricesDataOutputAllowedSet (), - m_str7 (""), - m_amEta (UQ_ML_SAMPLING_L_AM_ETA_ODV), - m_amEpsilon (UQ_ML_SAMPLING_L_AM_EPSILON_ODV), - m_env (env), -#ifndef QUESO_DISABLE_BOOST_PROGRAM_OPTIONS - m_parser(new BoostInputOptionsParser(env.optionsInputFileName())), -#endif // QUESO_DISABLE_BOOST_PROGRAM_OPTIONS - m_option_help (m_prefix + "help" ), -#ifdef ML_CODE_HAS_NEW_RESTART_CAPABILITY -#else - m_option_checkpointOutputFileName (m_prefix + "checkpointOutputFileName" ), -#endif - m_option_stopAtEnd (m_prefix + "stopAtEnd" ), - m_option_dataOutputFileName (m_prefix + "dataOutputFileName" ), - m_option_dataOutputAllowAll (m_prefix + "dataOutputAllowAll" ), - m_option_dataOutputAllowedSet (m_prefix + "dataOutputAllowedSet" ), - m_option_loadBalanceAlgorithmId (m_prefix + "loadBalanceAlgorithmId" ), - m_option_loadBalanceTreshold (m_prefix + "loadBalanceTreshold" ), - m_option_minEffectiveSizeRatio (m_prefix + "minEffectiveSizeRatio" ), - m_option_maxEffectiveSizeRatio (m_prefix + "maxEffectiveSizeRatio" ), - m_option_scaleCovMatrix (m_prefix + "scaleCovMatrix" ), - m_option_minRejectionRate (m_prefix + "minRejectionRate" ), - m_option_maxRejectionRate (m_prefix + "maxRejectionRate" ), - m_option_covRejectionRate (m_prefix + "covRejectionRate" ), - m_option_minAcceptableEta (m_prefix + "minAcceptableEta" ), // gpmsa1 - m_option_totallyMute (m_prefix + "totallyMute" ), - m_option_initialPosition_dataInputFileName (m_prefix + "initialPosition_dataInputFileName" ), - m_option_initialPosition_dataInputFileType (m_prefix + "initialPosition_dataInputFileType" ), - m_option_initialProposalCovMatrix_dataInputFileName(m_prefix + "initialProposalCovMatrix_dataInputFileName"), - m_option_initialProposalCovMatrix_dataInputFileType(m_prefix + "initialProposalCovMatrix_dataInputFileType"), - m_option_initialPositionUsePreviousLevelLikelihood (m_prefix + "initialPositionUsePreviousLevelLikelihood" ), // ml_likelihood_caching - m_option_listOfDisabledParameters (m_prefix + "listOfDisabledParameters" ), // gpmsa2 - m_option_initialValuesOfDisabledParameters (m_prefix + "initialValuesOfDisabledParameters" ), // gpmsa2 - m_option_rawChain_dataInputFileName (m_prefix + "rawChain_dataInputFileName" ), - m_option_rawChain_dataInputFileType (m_prefix + "rawChain_dataInputFileType" ), - m_option_rawChain_size (m_prefix + "rawChain_size" ), - m_option_rawChain_generateExtra (m_prefix + "rawChain_generateExtra" ), - m_option_rawChain_displayPeriod (m_prefix + "rawChain_displayPeriod" ), - m_option_rawChain_measureRunTimes (m_prefix + "rawChain_measureRunTimes" ), - m_option_rawChain_dataOutputPeriod (m_prefix + "rawChain_dataOutputPeriod" ), - m_option_rawChain_dataOutputFileName (m_prefix + "rawChain_dataOutputFileName" ), - m_option_rawChain_dataOutputFileType (m_prefix + "rawChain_dataOutputFileType" ), - m_option_rawChain_dataOutputAllowAll (m_prefix + "rawChain_dataOutputAllowAll" ), - m_option_rawChain_dataOutputAllowedSet (m_prefix + "rawChain_dataOutputAllowedSet" ), -#ifdef QUESO_USES_SEQUENCE_STATISTICAL_OPTIONS - m_option_rawChain_computeStats (m_prefix + "rawChain_computeStats" ), -#endif - m_option_filteredChain_generate (m_prefix + "filteredChain_generate" ), - m_option_filteredChain_discardedPortion (m_prefix + "filteredChain_discardedPortion" ), - m_option_filteredChain_lag (m_prefix + "filteredChain_lag" ), - m_option_filteredChain_dataOutputFileName (m_prefix + "filteredChain_dataOutputFileName" ), - m_option_filteredChain_dataOutputFileType (m_prefix + "filteredChain_dataOutputFileType" ), - m_option_filteredChain_dataOutputAllowAll (m_prefix + "filteredChain_dataOutputAllowAll" ), - m_option_filteredChain_dataOutputAllowedSet (m_prefix + "filteredChain_dataOutputAllowedSet" ), -#ifdef QUESO_USES_SEQUENCE_STATISTICAL_OPTIONS - m_option_filteredChain_computeStats (m_prefix + "filteredChain_computeStats" ), -#endif - m_option_displayCandidates (m_prefix + "displayCandidates" ), - m_option_putOutOfBoundsInChain (m_prefix + "putOutOfBoundsInChain" ), - m_option_tk_useLocalHessian (m_prefix + "tk_useLocalHessian" ), - m_option_tk_useNewtonComponent (m_prefix + "tk_useNewtonComponent" ), - m_option_dr_maxNumExtraStages (m_prefix + "dr_maxNumExtraStages" ), - m_option_dr_listOfScalesForExtraStages (m_prefix + "dr_listOfScalesForExtraStages" ), - m_option_dr_duringAmNonAdaptiveInt (m_prefix + "dr_duringAmNonAdaptiveInt" ), - m_option_am_keepInitialMatrix (m_prefix + "am_keepInitialMatrix" ), - m_option_am_initialNonAdaptInterval (m_prefix + "am_initialNonAdaptInterval" ), - m_option_am_adaptInterval (m_prefix + "am_adaptInterval" ), - m_option_am_adaptedMatrices_dataOutputPeriod (m_prefix + "amAdaptedMatrices_dataOutputPeriod" ), - m_option_am_adaptedMatrices_dataOutputFileName (m_prefix + "amAdaptedMatrices_dataOutputFileName" ), - m_option_am_adaptedMatrices_dataOutputFileType (m_prefix + "amAdaptedMatrices_dataOutputFileType" ), - m_option_am_adaptedMatrices_dataOutputAllowAll (m_prefix + "amAdaptedMatrices_dataOutputAllowAll" ), - m_option_am_adaptedMatrices_dataOutputAllowedSet (m_prefix + "amAdaptedMatrices_dataOutputAllowedSet" ), - m_option_am_eta (m_prefix + "am_eta" ), - m_option_am_epsilon (m_prefix + "am_epsilon" ), - m_option_doLogitTransform (m_prefix + "doLogitTransform" ), - m_option_algorithm (m_prefix + "algorithm" ), - m_option_tk (m_prefix + "tk" ), - m_option_updateInterval (m_prefix + "updateInterval" ) { -#ifndef QUESO_DISABLE_BOOST_PROGRAM_OPTIONS - this->defineAllOptions(); - m_parser->scanInputFile(); -#endif // QUESO_DISABLE_BOOST_PROGRAM_OPTIONS - this->getAllOptions(); - - checkOptions(&env); + this->set_defaults(); + this->parse(env, prefix); } void MLSamplingLevelOptions::defineAllOptions() { #ifndef QUESO_DISABLE_BOOST_PROGRAM_OPTIONS - m_parser->registerOption(m_option_help, UQ_ML_SAMPLING_L_HELP , "produce help message for Bayesian Markov chain distr. calculator"); + m_parser->registerOption(m_option_help, m_help , "produce help message for Bayesian Markov chain distr. calculator"); #ifdef ML_CODE_HAS_NEW_RESTART_CAPABILITY #else m_parser->registerOption(m_option_checkpointOutputFileName, m_checkpointOutputFileName , "name of checpoint output file" ); @@ -208,7 +48,7 @@ MLSamplingLevelOptions::defineAllOptions() m_parser->registerOption(m_option_stopAtEnd, m_stopAtEnd , "stop at end of such level" ); m_parser->registerOption(m_option_dataOutputFileName, m_dataOutputFileName , "name of generic output file" ); m_parser->registerOption(m_option_dataOutputAllowAll, m_dataOutputAllowAll , "subEnvs that will write to generic output file" ); - m_parser->registerOption(m_option_dataOutputAllowedSet, m_str1 , "subEnvs that will write to generic output file" ); + m_parser->registerOption(m_option_dataOutputAllowedSet, container_to_string(m_dataOutputAllowedSet) , "subEnvs that will write to generic output file" ); m_parser->registerOption(m_option_loadBalanceAlgorithmId, m_loadBalanceAlgorithmId , "Perform load balancing with chosen algorithm (0 = no balancing)" ); m_parser->registerOption(m_option_loadBalanceTreshold, m_loadBalanceTreshold , "Perform load balancing if load unbalancing ratio > treshold" ); m_parser->registerOption(m_option_minEffectiveSizeRatio, m_minEffectiveSizeRatio , "minimum allowed effective size ratio wrt previous level" ); @@ -224,8 +64,8 @@ MLSamplingLevelOptions::defineAllOptions() m_parser->registerOption(m_option_initialProposalCovMatrix_dataInputFileName, m_initialProposalCovMatrixDataInputFileName, "name of input file for initial proposal covariance matrix" ); m_parser->registerOption(m_option_initialProposalCovMatrix_dataInputFileType, m_initialProposalCovMatrixDataInputFileType, "type of input file for initial proposal covariance matrix" ); m_parser->registerOption(m_option_initialPositionUsePreviousLevelLikelihood, m_initialPositionUsePreviousLevelLikelihood, "use previous level likelihood for initial chain position instead of re-computing from target pdf"); - m_parser->registerOption(m_option_listOfDisabledParameters, m_str2 , "list of disabled parameters" ); // gpmsa2 - m_parser->registerOption(m_option_initialValuesOfDisabledParameters, m_str3 , "initial values of disabled parameters" ); // gpmsa2 + m_parser->registerOption(m_option_listOfDisabledParameters, container_to_string(m_parameterDisabledSet) , "list of disabled parameters" ); // gpmsa2 + m_parser->registerOption(m_option_initialValuesOfDisabledParameters, container_to_string(m_initialValuesOfDisabledParameters) , "initial values of disabled parameters" ); // gpmsa2 m_parser->registerOption(m_option_rawChain_dataInputFileName, m_rawChainDataInputFileName , "name of input file for raw chain " ); m_parser->registerOption(m_option_rawChain_dataInputFileType, m_rawChainDataInputFileType , "type of input file for raw chain " ); m_parser->registerOption(m_option_rawChain_size, m_rawChainSize , "size of raw chain" ); @@ -236,7 +76,7 @@ MLSamplingLevelOptions::defineAllOptions() m_parser->registerOption(m_option_rawChain_dataOutputFileName, m_rawChainDataOutputFileName , "name of output file for raw chain " ); m_parser->registerOption(m_option_rawChain_dataOutputFileType, m_rawChainDataOutputFileType , "type of output file for raw chain " ); m_parser->registerOption(m_option_rawChain_dataOutputAllowAll, m_rawChainDataOutputAllowAll , "subEnvs that will write to output file for raw chain" ); - m_parser->registerOption(m_option_rawChain_dataOutputAllowedSet, m_str4 , "subEnvs that will write to output file for raw chain" ); + m_parser->registerOption(m_option_rawChain_dataOutputAllowedSet, container_to_string(m_rawChainDataOutputAllowedSet) , "subEnvs that will write to output file for raw chain" ); #ifdef QUESO_USES_SEQUENCE_STATISTICAL_OPTIONS m_parser->registerOption(m_option_rawChain_computeStats, m_rawChainComputeStats , "compute statistics on raw chain" ); #endif @@ -246,7 +86,7 @@ MLSamplingLevelOptions::defineAllOptions() m_parser->registerOption(m_option_filteredChain_dataOutputFileName, m_filteredChainDataOutputFileName , "name of output file for filtered chain" ); m_parser->registerOption(m_option_filteredChain_dataOutputFileType, m_filteredChainDataOutputFileType , "type of output file for filtered chain" ); m_parser->registerOption(m_option_filteredChain_dataOutputAllowAll, m_filteredChainDataOutputAllowAll , "subEnvs that will write to output file for filtered chain" ); - m_parser->registerOption(m_option_filteredChain_dataOutputAllowedSet, m_str5 , "subEnvs that will write to output file for filtered chain" ); + m_parser->registerOption(m_option_filteredChain_dataOutputAllowedSet, container_to_string(m_filteredChainDataOutputAllowedSet) , "subEnvs that will write to output file for filtered chain" ); #ifdef QUESO_USES_SEQUENCE_STATISTICAL_OPTIONS m_parser->registerOption(m_option_filteredChain_computeStats, m_filteredChainComputeStats , "compute statistics on filtered chain" ); #endif @@ -255,7 +95,7 @@ MLSamplingLevelOptions::defineAllOptions() m_parser->registerOption(m_option_tk_useLocalHessian, m_tkUseLocalHessian , "'proposal' use local Hessian" ); m_parser->registerOption(m_option_tk_useNewtonComponent, m_tkUseNewtonComponent , "'proposal' use Newton component" ); m_parser->registerOption(m_option_dr_maxNumExtraStages, m_drMaxNumExtraStages , "'dr' maximum number of extra stages" ); - m_parser->registerOption(m_option_dr_listOfScalesForExtraStages, m_str6 , "'dr' list of scales for proposal cov matrices from 2nd stage on" ); + m_parser->registerOption(m_option_dr_listOfScalesForExtraStages, container_to_string(m_drScalesForExtraStages) , "'dr' list of scales for proposal cov matrices from 2nd stage on" ); m_parser->registerOption(m_option_dr_duringAmNonAdaptiveInt, m_drDuringAmNonAdaptiveInt , "'dr' used during 'am' non adaptive interval" ); m_parser->registerOption(m_option_am_keepInitialMatrix, m_amKeepInitialMatrix , "'am' keep initial (given) matrix" ); m_parser->registerOption(m_option_am_initialNonAdaptInterval, m_amInitialNonAdaptInterval , "'am' initial non adaptation interval" ); @@ -264,13 +104,13 @@ MLSamplingLevelOptions::defineAllOptions() m_parser->registerOption(m_option_am_adaptedMatrices_dataOutputFileName, m_amAdaptedMatricesDataOutputFileName , "name of output file for 'am' adapted matrices" ); m_parser->registerOption(m_option_am_adaptedMatrices_dataOutputFileType, m_amAdaptedMatricesDataOutputFileType , "type of output file for 'am' adapted matrices" ); m_parser->registerOption(m_option_am_adaptedMatrices_dataOutputAllowAll, m_amAdaptedMatricesDataOutputAllowAll , "type of output file for 'am' adapted matrices" ); - m_parser->registerOption(m_option_am_adaptedMatrices_dataOutputAllowedSet, m_str7 , "type of output file for 'am' adapted matrices" ); + m_parser->registerOption(m_option_am_adaptedMatrices_dataOutputAllowedSet, container_to_string(m_amAdaptedMatricesDataOutputAllowedSet) , "type of output file for 'am' adapted matrices" ); m_parser->registerOption(m_option_am_eta, m_amEta , "'am' eta" ); m_parser->registerOption(m_option_am_epsilon, m_amEpsilon , "'am' epsilon" ); - m_parser->registerOption(m_option_doLogitTransform, UQ_ML_SAMPLING_L_DO_LOGIT_TRANSFORM , "flag for doing logit transform for bounded domains" ); - m_parser->registerOption(m_option_algorithm, UQ_ML_SAMPLING_L_ALGORITHM , "which algorithm to use for sampling" ); - m_parser->registerOption(m_option_tk, UQ_ML_SAMPLING_L_TK , "which transition kernel to use for sampling" ); - m_parser->registerOption(m_option_updateInterval, UQ_ML_SAMPLING_L_UPDATE_INTERVAL , "how often to call TK's updateTK method" ); + m_parser->registerOption(m_option_doLogitTransform, m_doLogitTransform , "flag for doing logit transform for bounded domains" ); + m_parser->registerOption(m_option_algorithm, m_algorithm , "which algorithm to use for sampling" ); + m_parser->registerOption(m_option_tk, m_tk , "which transition kernel to use for sampling" ); + m_parser->registerOption(m_option_updateInterval, m_updateInterval , "how often to call TK's updateTK method" ); #endif // QUESO_DISABLE_BOOST_PROGRAM_OPTIONS } @@ -350,138 +190,138 @@ MLSamplingLevelOptions::getAllOptions() m_parser->getOption(m_option_tk, m_tk); m_parser->getOption(m_option_updateInterval, m_updateInterval); #else - m_help = m_env.input()(m_option_help, UQ_ML_SAMPLING_L_HELP ); + m_help = m_env->input()(m_option_help, m_help); #ifdef ML_CODE_HAS_NEW_RESTART_CAPABILITY #else - m_checkpointOutputFileName = m_env.input()(m_option_checkpointOutputFileName, m_checkpointOutputFileName ); + m_checkpointOutputFileName = m_env->input()(m_option_checkpointOutputFileName, m_checkpointOutputFileName ); #endif - m_stopAtEnd = m_env.input()(m_option_stopAtEnd, m_stopAtEnd ); - m_dataOutputFileName = m_env.input()(m_option_dataOutputFileName, m_dataOutputFileName ); - m_dataOutputAllowAll = m_env.input()(m_option_dataOutputAllowAll, m_dataOutputAllowAll ); + m_stopAtEnd = m_env->input()(m_option_stopAtEnd, m_stopAtEnd ); + m_dataOutputFileName = m_env->input()(m_option_dataOutputFileName, m_dataOutputFileName ); + m_dataOutputAllowAll = m_env->input()(m_option_dataOutputAllowAll, m_dataOutputAllowAll ); // Is the empty set (string) by default - unsigned int size = m_env.input().vector_variable_size(m_option_dataOutputAllowedSet); + unsigned int size = m_env->input().vector_variable_size(m_option_dataOutputAllowedSet); for (unsigned int i = 0; i < size; i++) { // We default to empty set, so the default values are actually never // used here - unsigned int allowed = m_env.input()(m_option_dataOutputAllowedSet, i, i); + unsigned int allowed = m_env->input()(m_option_dataOutputAllowedSet, i, i); m_dataOutputAllowedSet.insert(allowed); } - m_loadBalanceAlgorithmId = m_env.input()(m_option_loadBalanceAlgorithmId, m_loadBalanceAlgorithmId ); - m_loadBalanceTreshold = m_env.input()(m_option_loadBalanceTreshold, m_loadBalanceTreshold ); - m_minEffectiveSizeRatio = m_env.input()(m_option_minEffectiveSizeRatio, m_minEffectiveSizeRatio ); - m_maxEffectiveSizeRatio = m_env.input()(m_option_maxEffectiveSizeRatio, m_maxEffectiveSizeRatio ); - m_scaleCovMatrix = m_env.input()(m_option_scaleCovMatrix, m_scaleCovMatrix ); - m_minRejectionRate = m_env.input()(m_option_minRejectionRate, m_minRejectionRate ); - m_maxRejectionRate = m_env.input()(m_option_maxRejectionRate, m_maxRejectionRate ); - m_covRejectionRate = m_env.input()(m_option_covRejectionRate, m_covRejectionRate ); - m_minAcceptableEta = m_env.input()(m_option_minAcceptableEta, m_minAcceptableEta ); - m_totallyMute = m_env.input()(m_option_totallyMute, m_totallyMute ); - m_initialPositionDataInputFileName = m_env.input()(m_option_initialPosition_dataInputFileName, m_initialPositionDataInputFileName ); - m_initialPositionDataInputFileType = m_env.input()(m_option_initialPosition_dataInputFileType, m_initialPositionDataInputFileType ); - m_initialProposalCovMatrixDataInputFileName = m_env.input()(m_option_initialProposalCovMatrix_dataInputFileName, m_initialProposalCovMatrixDataInputFileName); - m_initialProposalCovMatrixDataInputFileType = m_env.input()(m_option_initialProposalCovMatrix_dataInputFileType, m_initialProposalCovMatrixDataInputFileType); - m_initialPositionUsePreviousLevelLikelihood = m_env.input()(m_option_initialPositionUsePreviousLevelLikelihood, m_initialPositionUsePreviousLevelLikelihood); + m_loadBalanceAlgorithmId = m_env->input()(m_option_loadBalanceAlgorithmId, m_loadBalanceAlgorithmId ); + m_loadBalanceTreshold = m_env->input()(m_option_loadBalanceTreshold, m_loadBalanceTreshold ); + m_minEffectiveSizeRatio = m_env->input()(m_option_minEffectiveSizeRatio, m_minEffectiveSizeRatio ); + m_maxEffectiveSizeRatio = m_env->input()(m_option_maxEffectiveSizeRatio, m_maxEffectiveSizeRatio ); + m_scaleCovMatrix = m_env->input()(m_option_scaleCovMatrix, m_scaleCovMatrix ); + m_minRejectionRate = m_env->input()(m_option_minRejectionRate, m_minRejectionRate ); + m_maxRejectionRate = m_env->input()(m_option_maxRejectionRate, m_maxRejectionRate ); + m_covRejectionRate = m_env->input()(m_option_covRejectionRate, m_covRejectionRate ); + m_minAcceptableEta = m_env->input()(m_option_minAcceptableEta, m_minAcceptableEta ); + m_totallyMute = m_env->input()(m_option_totallyMute, m_totallyMute ); + m_initialPositionDataInputFileName = m_env->input()(m_option_initialPosition_dataInputFileName, m_initialPositionDataInputFileName ); + m_initialPositionDataInputFileType = m_env->input()(m_option_initialPosition_dataInputFileType, m_initialPositionDataInputFileType ); + m_initialProposalCovMatrixDataInputFileName = m_env->input()(m_option_initialProposalCovMatrix_dataInputFileName, m_initialProposalCovMatrixDataInputFileName); + m_initialProposalCovMatrixDataInputFileType = m_env->input()(m_option_initialProposalCovMatrix_dataInputFileType, m_initialProposalCovMatrixDataInputFileType); + m_initialPositionUsePreviousLevelLikelihood = m_env->input()(m_option_initialPositionUsePreviousLevelLikelihood, m_initialPositionUsePreviousLevelLikelihood); // Is the empty set (string) by default - size = m_env.input().vector_variable_size(m_option_listOfDisabledParameters); + size = m_env->input().vector_variable_size(m_option_listOfDisabledParameters); for (unsigned int i = 0; i < size; i++) { // We default to empty set, so the default values are actually never // used here - unsigned int allowed = m_env.input()(m_option_listOfDisabledParameters, i, i); + unsigned int allowed = m_env->input()(m_option_listOfDisabledParameters, i, i); m_parameterDisabledSet.insert(allowed); } // Is the empty set (string) by default - size = m_env.input().vector_variable_size(m_option_initialValuesOfDisabledParameters); + size = m_env->input().vector_variable_size(m_option_initialValuesOfDisabledParameters); for (unsigned int i = 0; i < size; i++) { // We default to empty set, so the default values are actually never // used here - unsigned int value = m_env.input()(m_option_initialValuesOfDisabledParameters, i, i); + unsigned int value = m_env->input()(m_option_initialValuesOfDisabledParameters, i, i); m_initialValuesOfDisabledParameters.push_back(value); } - m_rawChainDataInputFileName = m_env.input()(m_option_rawChain_dataInputFileName, m_rawChainDataInputFileName ); - m_rawChainDataInputFileType = m_env.input()(m_option_rawChain_dataInputFileType, m_rawChainDataInputFileType ); - m_rawChainSize = m_env.input()(m_option_rawChain_size, m_rawChainSize ); - m_rawChainGenerateExtra = m_env.input()(m_option_rawChain_generateExtra, m_rawChainGenerateExtra ); - m_rawChainDisplayPeriod = m_env.input()(m_option_rawChain_displayPeriod, m_rawChainDisplayPeriod ); - m_rawChainMeasureRunTimes = m_env.input()(m_option_rawChain_measureRunTimes, m_rawChainMeasureRunTimes ); - m_rawChainDataOutputPeriod = m_env.input()(m_option_rawChain_dataOutputPeriod, m_rawChainDataOutputPeriod ); - m_rawChainDataOutputFileName = m_env.input()(m_option_rawChain_dataOutputFileName, m_rawChainDataOutputFileName ); - m_rawChainDataOutputFileType = m_env.input()(m_option_rawChain_dataOutputFileType, m_rawChainDataOutputFileType ); - m_rawChainDataOutputAllowAll = m_env.input()(m_option_rawChain_dataOutputAllowAll, m_rawChainDataOutputAllowAll ); + m_rawChainDataInputFileName = m_env->input()(m_option_rawChain_dataInputFileName, m_rawChainDataInputFileName ); + m_rawChainDataInputFileType = m_env->input()(m_option_rawChain_dataInputFileType, m_rawChainDataInputFileType ); + m_rawChainSize = m_env->input()(m_option_rawChain_size, m_rawChainSize ); + m_rawChainGenerateExtra = m_env->input()(m_option_rawChain_generateExtra, m_rawChainGenerateExtra ); + m_rawChainDisplayPeriod = m_env->input()(m_option_rawChain_displayPeriod, m_rawChainDisplayPeriod ); + m_rawChainMeasureRunTimes = m_env->input()(m_option_rawChain_measureRunTimes, m_rawChainMeasureRunTimes ); + m_rawChainDataOutputPeriod = m_env->input()(m_option_rawChain_dataOutputPeriod, m_rawChainDataOutputPeriod ); + m_rawChainDataOutputFileName = m_env->input()(m_option_rawChain_dataOutputFileName, m_rawChainDataOutputFileName ); + m_rawChainDataOutputFileType = m_env->input()(m_option_rawChain_dataOutputFileType, m_rawChainDataOutputFileType ); + m_rawChainDataOutputAllowAll = m_env->input()(m_option_rawChain_dataOutputAllowAll, m_rawChainDataOutputAllowAll ); // Is the empty set (string) by default - size = m_env.input().vector_variable_size(m_option_rawChain_dataOutputAllowedSet); + size = m_env->input().vector_variable_size(m_option_rawChain_dataOutputAllowedSet); for (unsigned int i = 0; i < size; i++) { // We default to empty set, so the default values are actually never // used here - unsigned int allowed = m_env.input()(m_option_rawChain_dataOutputAllowedSet, i, i); + unsigned int allowed = m_env->input()(m_option_rawChain_dataOutputAllowedSet, i, i); m_rawChainDataOutputAllowedSet.insert(allowed); } #ifdef QUESO_USES_SEQUENCE_STATISTICAL_OPTIONS - m_rawChainComputeStats = m_env.input()(m_option_rawChain_computeStats, m_rawChainComputeStats ); + m_rawChainComputeStats = m_env->input()(m_option_rawChain_computeStats, m_rawChainComputeStats ); #endif - m_filteredChainGenerate = m_env.input()(m_option_filteredChain_generate, m_filteredChainGenerate ); - m_filteredChainDiscardedPortion = m_env.input()(m_option_filteredChain_discardedPortion, m_filteredChainDiscardedPortion ); - m_filteredChainLag = m_env.input()(m_option_filteredChain_lag, m_filteredChainLag ); - m_filteredChainDataOutputFileName = m_env.input()(m_option_filteredChain_dataOutputFileName, m_filteredChainDataOutputFileName ); - m_filteredChainDataOutputFileType = m_env.input()(m_option_filteredChain_dataOutputFileType, m_filteredChainDataOutputFileType ); - m_filteredChainDataOutputAllowAll = m_env.input()(m_option_filteredChain_dataOutputAllowAll, m_filteredChainDataOutputAllowAll ); + m_filteredChainGenerate = m_env->input()(m_option_filteredChain_generate, m_filteredChainGenerate ); + m_filteredChainDiscardedPortion = m_env->input()(m_option_filteredChain_discardedPortion, m_filteredChainDiscardedPortion ); + m_filteredChainLag = m_env->input()(m_option_filteredChain_lag, m_filteredChainLag ); + m_filteredChainDataOutputFileName = m_env->input()(m_option_filteredChain_dataOutputFileName, m_filteredChainDataOutputFileName ); + m_filteredChainDataOutputFileType = m_env->input()(m_option_filteredChain_dataOutputFileType, m_filteredChainDataOutputFileType ); + m_filteredChainDataOutputAllowAll = m_env->input()(m_option_filteredChain_dataOutputAllowAll, m_filteredChainDataOutputAllowAll ); // Is the empty set (string) by default - size = m_env.input().vector_variable_size(m_option_filteredChain_dataOutputAllowedSet); + size = m_env->input().vector_variable_size(m_option_filteredChain_dataOutputAllowedSet); for (unsigned int i = 0; i < size; i++) { // We default to empty set, so the default values are actually never // used here - unsigned int allowed = m_env.input()(m_option_filteredChain_dataOutputAllowedSet, i, i); + unsigned int allowed = m_env->input()(m_option_filteredChain_dataOutputAllowedSet, i, i); m_filteredChainDataOutputAllowedSet.insert(allowed); } #ifdef QUESO_USES_SEQUENCE_STATISTICAL_OPTIONS - m_filteredChainComputeStats = m_env.input()(m_option_filteredChain_computeStats, m_filteredChainComputeStats ); + m_filteredChainComputeStats = m_env->input()(m_option_filteredChain_computeStats, m_filteredChainComputeStats ); #endif - m_displayCandidates = m_env.input()(m_option_displayCandidates, m_displayCandidates ); - m_putOutOfBoundsInChain = m_env.input()(m_option_putOutOfBoundsInChain, m_putOutOfBoundsInChain ); - m_tkUseLocalHessian = m_env.input()(m_option_tk_useLocalHessian, m_tkUseLocalHessian ); - m_tkUseNewtonComponent = m_env.input()(m_option_tk_useNewtonComponent, m_tkUseNewtonComponent ); - m_drMaxNumExtraStages = m_env.input()(m_option_dr_maxNumExtraStages, m_drMaxNumExtraStages ); + m_displayCandidates = m_env->input()(m_option_displayCandidates, m_displayCandidates ); + m_putOutOfBoundsInChain = m_env->input()(m_option_putOutOfBoundsInChain, m_putOutOfBoundsInChain ); + m_tkUseLocalHessian = m_env->input()(m_option_tk_useLocalHessian, m_tkUseLocalHessian ); + m_tkUseNewtonComponent = m_env->input()(m_option_tk_useNewtonComponent, m_tkUseNewtonComponent ); + m_drMaxNumExtraStages = m_env->input()(m_option_dr_maxNumExtraStages, m_drMaxNumExtraStages ); // Is the empty set (string) by default - size = m_env.input().vector_variable_size(m_option_dr_listOfScalesForExtraStages); + size = m_env->input().vector_variable_size(m_option_dr_listOfScalesForExtraStages); m_drScalesForExtraStages.clear(); for (unsigned int i = 0; i < size; i++) { - unsigned int value = m_env.input()(m_option_dr_listOfScalesForExtraStages, i, i); + unsigned int value = m_env->input()(m_option_dr_listOfScalesForExtraStages, i, i); m_drScalesForExtraStages.push_back(value); } - m_drDuringAmNonAdaptiveInt = m_env.input()(m_option_dr_duringAmNonAdaptiveInt, m_drDuringAmNonAdaptiveInt ); - m_amKeepInitialMatrix = m_env.input()(m_option_am_keepInitialMatrix, m_amKeepInitialMatrix ); - m_amInitialNonAdaptInterval = m_env.input()(m_option_am_initialNonAdaptInterval, m_amInitialNonAdaptInterval ); - m_amAdaptInterval = m_env.input()(m_option_am_adaptInterval, m_amAdaptInterval ); - m_amAdaptedMatricesDataOutputPeriod = m_env.input()(m_option_am_adaptedMatrices_dataOutputPeriod, m_amAdaptedMatricesDataOutputPeriod ); - m_amAdaptedMatricesDataOutputFileName = m_env.input()(m_option_am_adaptedMatrices_dataOutputFileName, m_amAdaptedMatricesDataOutputFileName ); - m_amAdaptedMatricesDataOutputFileType = m_env.input()(m_option_am_adaptedMatrices_dataOutputFileType, m_amAdaptedMatricesDataOutputFileType ); - m_amAdaptedMatricesDataOutputAllowAll = m_env.input()(m_option_am_adaptedMatrices_dataOutputAllowAll, m_amAdaptedMatricesDataOutputAllowAll ); + m_drDuringAmNonAdaptiveInt = m_env->input()(m_option_dr_duringAmNonAdaptiveInt, m_drDuringAmNonAdaptiveInt ); + m_amKeepInitialMatrix = m_env->input()(m_option_am_keepInitialMatrix, m_amKeepInitialMatrix ); + m_amInitialNonAdaptInterval = m_env->input()(m_option_am_initialNonAdaptInterval, m_amInitialNonAdaptInterval ); + m_amAdaptInterval = m_env->input()(m_option_am_adaptInterval, m_amAdaptInterval ); + m_amAdaptedMatricesDataOutputPeriod = m_env->input()(m_option_am_adaptedMatrices_dataOutputPeriod, m_amAdaptedMatricesDataOutputPeriod ); + m_amAdaptedMatricesDataOutputFileName = m_env->input()(m_option_am_adaptedMatrices_dataOutputFileName, m_amAdaptedMatricesDataOutputFileName ); + m_amAdaptedMatricesDataOutputFileType = m_env->input()(m_option_am_adaptedMatrices_dataOutputFileType, m_amAdaptedMatricesDataOutputFileType ); + m_amAdaptedMatricesDataOutputAllowAll = m_env->input()(m_option_am_adaptedMatrices_dataOutputAllowAll, m_amAdaptedMatricesDataOutputAllowAll ); - size = m_env.input().vector_variable_size(m_option_am_adaptedMatrices_dataOutputAllowedSet); + size = m_env->input().vector_variable_size(m_option_am_adaptedMatrices_dataOutputAllowedSet); for (unsigned int i = 0; i < size; i++) { // We default to empty set, so the default values are actually never // used here - unsigned int allowed = m_env.input()(m_option_am_adaptedMatrices_dataOutputAllowedSet, i, i); + unsigned int allowed = m_env->input()(m_option_am_adaptedMatrices_dataOutputAllowedSet, i, i); m_amAdaptedMatricesDataOutputAllowedSet.insert(allowed); } - m_amEta = m_env.input()(m_option_am_eta, m_amEta ); - m_amEpsilon = m_env.input()(m_option_am_epsilon, m_amEpsilon ); - m_doLogitTransform = m_env.input()(m_option_doLogitTransform, UQ_ML_SAMPLING_L_DO_LOGIT_TRANSFORM ); - m_algorithm = m_env.input()(m_option_algorithm, UQ_ML_SAMPLING_L_ALGORITHM ); - m_tk = m_env.input()(m_option_tk, UQ_ML_SAMPLING_L_TK ); - m_updateInterval = m_env.input()(m_option_updateInterval, UQ_ML_SAMPLING_L_UPDATE_INTERVAL ); + m_amEta = m_env->input()(m_option_am_eta, m_amEta ); + m_amEpsilon = m_env->input()(m_option_am_epsilon, m_amEpsilon ); + m_doLogitTransform = m_env->input()(m_option_doLogitTransform, m_doLogitTransform ); + m_algorithm = m_env->input()(m_option_algorithm, m_algorithm ); + m_tk = m_env->input()(m_option_tk, m_tk ); + m_updateInterval = m_env->input()(m_option_updateInterval, m_updateInterval ); #endif // QUESO_DISABLE_BOOST_PROGRAM_OPTIONS } @@ -496,7 +336,6 @@ MLSamplingLevelOptions::copyOptionsValues(const MLSamplingLevelOptions& srcOptio m_dataOutputFileName = srcOptions.m_dataOutputFileName; m_dataOutputAllowAll = srcOptions.m_dataOutputAllowAll; m_dataOutputAllowedSet = srcOptions.m_dataOutputAllowedSet; - m_str1 = srcOptions.m_str1; m_loadBalanceAlgorithmId = srcOptions.m_loadBalanceAlgorithmId; m_loadBalanceTreshold = srcOptions.m_loadBalanceTreshold; m_minEffectiveSizeRatio = srcOptions.m_minEffectiveSizeRatio; @@ -513,9 +352,7 @@ MLSamplingLevelOptions::copyOptionsValues(const MLSamplingLevelOptions& srcOptio m_initialProposalCovMatrixDataInputFileType = srcOptions.m_initialProposalCovMatrixDataInputFileType; m_initialPositionUsePreviousLevelLikelihood = srcOptions.m_initialPositionUsePreviousLevelLikelihood; m_parameterDisabledSet = srcOptions.m_parameterDisabledSet; // gpmsa2 - m_str2 = srcOptions.m_str2; // gpmsa2 m_initialValuesOfDisabledParameters = srcOptions.m_initialValuesOfDisabledParameters; - m_str3 = srcOptions.m_str3; m_rawChainDataInputFileName = srcOptions.m_rawChainDataInputFileName; m_rawChainDataInputFileType = srcOptions.m_rawChainDataInputFileType; m_rawChainSize = srcOptions.m_rawChainSize; @@ -528,7 +365,6 @@ MLSamplingLevelOptions::copyOptionsValues(const MLSamplingLevelOptions& srcOptio m_rawChainDataOutputFileType = srcOptions.m_rawChainDataOutputFileType; m_rawChainDataOutputAllowAll = srcOptions.m_rawChainDataOutputAllowAll; m_rawChainDataOutputAllowedSet = srcOptions.m_rawChainDataOutputAllowedSet; - m_str4 = srcOptions.m_str4; #ifdef QUESO_USES_SEQUENCE_STATISTICAL_OPTIONS m_rawChainComputeStats = srcOptions.m_rawChainComputeStats; m_rawChainStatisticalOptionsObj = NULL; // Yes, 'NULL' @@ -541,7 +377,6 @@ MLSamplingLevelOptions::copyOptionsValues(const MLSamplingLevelOptions& srcOptio m_filteredChainDataOutputFileType = srcOptions.m_filteredChainDataOutputFileType; m_filteredChainDataOutputAllowAll = srcOptions.m_filteredChainDataOutputAllowAll; m_filteredChainDataOutputAllowedSet = srcOptions.m_filteredChainDataOutputAllowedSet; - m_str5 = srcOptions.m_str5; #ifdef QUESO_USES_SEQUENCE_STATISTICAL_OPTIONS m_filteredChainComputeStats = srcOptions.m_filteredChainComputeStats; m_filteredChainStatisticalOptionsObj = NULL; // Yes, 'NULL' @@ -553,7 +388,6 @@ MLSamplingLevelOptions::copyOptionsValues(const MLSamplingLevelOptions& srcOptio m_tkUseNewtonComponent = srcOptions.m_tkUseNewtonComponent; m_drMaxNumExtraStages = srcOptions.m_drMaxNumExtraStages; m_drScalesForExtraStages = srcOptions.m_drScalesForExtraStages; - m_str6 = srcOptions.m_str6; m_drDuringAmNonAdaptiveInt = srcOptions.m_drDuringAmNonAdaptiveInt; m_amKeepInitialMatrix = srcOptions.m_amKeepInitialMatrix; m_amInitialNonAdaptInterval = srcOptions.m_amInitialNonAdaptInterval; @@ -563,7 +397,6 @@ MLSamplingLevelOptions::copyOptionsValues(const MLSamplingLevelOptions& srcOptio m_amAdaptedMatricesDataOutputFileType = srcOptions.m_amAdaptedMatricesDataOutputFileType; m_amAdaptedMatricesDataOutputAllowAll = srcOptions.m_amAdaptedMatricesDataOutputAllowAll; m_amAdaptedMatricesDataOutputAllowedSet = srcOptions.m_amAdaptedMatricesDataOutputAllowedSet; - m_str7 = srcOptions.m_str7; m_amEta = srcOptions.m_amEta; m_amEpsilon = srcOptions.m_amEpsilon; m_doLogitTransform = srcOptions.m_doLogitTransform; @@ -597,10 +430,7 @@ MLSamplingLevelOptions::scanOptionsValues(const MLSamplingLevelOptions* defaultO #ifndef QUESO_DISABLE_BOOST_PROGRAM_OPTIONS // Replace the parser since default values changed - if (m_parser) { - delete m_parser; - m_parser = new BoostInputOptionsParser(m_env.optionsInputFileName()); - } + m_parser.reset(new BoostInputOptionsParser(m_env->optionsInputFileName())); // FIXME: Does this work with GetPot? this->defineAllOptions(); @@ -619,28 +449,18 @@ MLSamplingLevelOptions::scanOptionsValues(const MLSamplingLevelOptions* defaultO } void -MLSamplingLevelOptions::checkOptions(const BaseEnvironment * /* env */) +MLSamplingLevelOptions::checkOptions() { - char tmpStr[64]; - // DM: Print here because I don't know where the class is instantiated if (m_help != "") { - if (m_env.subDisplayFile()) { - *m_env.subDisplayFile() << (*this) << std::endl; + if (m_env->subDisplayFile()) { + *m_env->subDisplayFile() << (*this) << std::endl; } } if (m_dataOutputAllowAll) { m_dataOutputAllowedSet.clear(); - m_dataOutputAllowedSet.insert(m_env.subId()); - } - - // DM: Not sure what this is for - m_str1.clear(); - for (std::set::iterator setIt = m_dataOutputAllowedSet.begin(); setIt != m_dataOutputAllowedSet.end(); ++setIt) { - sprintf(tmpStr,"%d",(int)(*setIt)); - m_str1 += tmpStr; - m_str1 += " "; + m_dataOutputAllowedSet.insert(m_env->subId()); } queso_require_less_msg(m_minEffectiveSizeRatio, 1.0, "option `" << m_option_minEffectiveSizeRatio << "` must be less than 1.0"); @@ -649,33 +469,9 @@ MLSamplingLevelOptions::checkOptions(const BaseEnvironment * /* env */) queso_require_less_msg(m_maxRejectionRate, 1.0, "option `" << m_option_maxRejectionRate << "` must be less than 1.0"); queso_require_less_msg(m_covRejectionRate, 1.0, "option `" << m_option_covRejectionRate << "` must be less than 1.0"); - // DM: Not sure what this is for - m_str2.clear(); - for (std::set::iterator setIt = m_parameterDisabledSet.begin(); setIt != m_parameterDisabledSet.end(); ++setIt) { // gpmsa2 - sprintf(tmpStr,"%d",(int)(*setIt)); - m_str2 += tmpStr; - m_str2 += " "; - } - - // DM: Not sure what this is for - m_str3.clear(); - for (unsigned int i = 0; i < m_initialValuesOfDisabledParameters.size(); ++i) { - sprintf(tmpStr,"%e",m_initialValuesOfDisabledParameters[i]); - m_str3 += tmpStr; - m_str3 += " "; - } - if (m_rawChainDataOutputAllowAll) { m_rawChainDataOutputAllowedSet.clear(); - m_rawChainDataOutputAllowedSet.insert(m_env.subId()); - } - - // DM: Not sure what this is for - m_str4.clear(); - for (std::set::iterator setIt = m_rawChainDataOutputAllowedSet.begin(); setIt != m_rawChainDataOutputAllowedSet.end(); ++setIt) { - sprintf(tmpStr,"%d",(int)(*setIt)); - m_str4 += tmpStr; - m_str4 += " "; + m_rawChainDataOutputAllowedSet.insert(m_env->subId()); } if (m_filteredChainGenerate == true) { @@ -684,15 +480,7 @@ MLSamplingLevelOptions::checkOptions(const BaseEnvironment * /* env */) if (m_filteredChainDataOutputAllowAll) { m_filteredChainDataOutputAllowedSet.clear(); - m_filteredChainDataOutputAllowedSet.insert(m_env.subId()); - } - - // DM: Not sure what this is for - m_str5.clear(); - for (std::set::iterator setIt = m_filteredChainDataOutputAllowedSet.begin(); setIt != m_filteredChainDataOutputAllowedSet.end(); ++setIt) { - sprintf(tmpStr,"%d",(int)(*setIt)); - m_str5 += tmpStr; - m_str5 += " "; + m_filteredChainDataOutputAllowedSet.insert(m_env->subId()); } if (m_drMaxNumExtraStages > 0) { @@ -707,26 +495,11 @@ MLSamplingLevelOptions::checkOptions(const BaseEnvironment * /* env */) } } - // DM: Not sure what this is for - m_str6.clear(); - for (unsigned int i = 0; i < m_drScalesForExtraStages.size(); ++i) { - sprintf(tmpStr,"%e",m_drScalesForExtraStages[i]); - m_str6 += tmpStr; - m_str6 += " "; - } - if (m_amAdaptedMatricesDataOutputAllowAll) { m_amAdaptedMatricesDataOutputAllowedSet.clear(); - m_amAdaptedMatricesDataOutputAllowedSet.insert(m_env.subId()); + m_amAdaptedMatricesDataOutputAllowedSet.insert(m_env->subId()); } - // DM: Not sure what this is for - m_str7.clear(); - for (std::set::iterator setIt = m_amAdaptedMatricesDataOutputAllowedSet.begin(); setIt != m_amAdaptedMatricesDataOutputAllowedSet.end(); ++setIt) { - sprintf(tmpStr,"%d",(int)(*setIt)); - m_str7 += tmpStr; - m_str7 += " "; - } } void @@ -834,7 +607,7 @@ MLSamplingLevelOptions::print(std::ostream& os) const const BaseEnvironment& MLSamplingLevelOptions::env() const { - return m_env; + return *m_env; } std::ostream& operator<<(std::ostream& os, const MLSamplingLevelOptions& obj) @@ -846,4 +619,180 @@ std::ostream& operator<<(std::ostream& os, const MLSamplingLevelOptions& obj) return os; } +void MLSamplingLevelOptions::set_defaults() +{ + m_help = UQ_ML_SAMPLING_L_HELP; +#ifdef ML_CODE_HAS_NEW_RESTART_CAPABILITY +#else + m_checkpointOutputFileName = UQ_ML_SAMPLING_L_CHECKPOINT_OUTPUT_FILE_NAME_ODV; +#endif + m_stopAtEnd = UQ_ML_SAMPLING_L_STOP_AT_END_ODV; + m_dataOutputFileName = UQ_ML_SAMPLING_L_DATA_OUTPUT_FILE_NAME_ODV; + m_dataOutputAllowAll = UQ_ML_SAMPLING_L_DATA_OUTPUT_ALLOW_ALL_ODV; + //m_dataOutputAllowedSet = ; + m_loadBalanceAlgorithmId = UQ_ML_SAMPLING_L_LOAD_BALANCE_ALGORITHM_ID_ODV; + m_loadBalanceTreshold = UQ_ML_SAMPLING_L_LOAD_BALANCE_TRESHOLD_ODV; + m_minEffectiveSizeRatio = UQ_ML_SAMPLING_L_MIN_EFFECTIVE_SIZE_RATIO_ODV; + m_maxEffectiveSizeRatio = UQ_ML_SAMPLING_L_MAX_EFFECTIVE_SIZE_RATIO_ODV; + m_scaleCovMatrix = UQ_ML_SAMPLING_L_SCALE_COV_MATRIX_ODV; + m_minRejectionRate = UQ_ML_SAMPLING_L_MIN_REJECTION_RATE_ODV; + m_maxRejectionRate = UQ_ML_SAMPLING_L_MAX_REJECTION_RATE_ODV; + m_covRejectionRate = UQ_ML_SAMPLING_L_COV_REJECTION_RATE_ODV; + m_minAcceptableEta = UQ_ML_SAMPLING_L_MIN_ACCEPTABLE_ETA_ODV; // gpmsa1 + m_totallyMute = UQ_ML_SAMPLING_L_TOTALLY_MUTE_ODV; + m_initialPositionDataInputFileName = UQ_ML_SAMPLING_L_INITIAL_POSITION_DATA_INPUT_FILE_NAME_ODV; + m_initialPositionDataInputFileType = UQ_ML_SAMPLING_L_INITIAL_POSITION_DATA_INPUT_FILE_TYPE_ODV; + m_initialProposalCovMatrixDataInputFileName=UQ_ML_SAMPLING_L_INITIAL_PROPOSAL_COV_MATRIX_DATA_INPUT_FILE_NAME_ODV; + m_initialProposalCovMatrixDataInputFileType=UQ_ML_SAMPLING_L_INITIAL_PROPOSAL_COV_MATRIX_DATA_INPUT_FILE_TYPE_ODV; + m_initialPositionUsePreviousLevelLikelihood=UQ_ML_SAMPLING_L_INITIAL_POSITION_USE_PREVIOUS_LEVEL_LIKELIHOOD_ODV; // ml_likelihood_caching + //m_parameterDisabledSet = ; // gpmsa2 + // m_initialValuesOfDisabledParameters = 0; + m_rawChainDataInputFileName = UQ_ML_SAMPLING_L_RAW_CHAIN_DATA_INPUT_FILE_NAME_ODV; + m_rawChainDataInputFileType = UQ_ML_SAMPLING_L_RAW_CHAIN_DATA_INPUT_FILE_TYPE_ODV; + m_rawChainSize = UQ_ML_SAMPLING_L_RAW_CHAIN_SIZE_ODV; + m_rawChainGenerateExtra = UQ_ML_SAMPLING_L_RAW_CHAIN_GENERATE_EXTRA_ODV; + m_rawChainDisplayPeriod = UQ_ML_SAMPLING_L_RAW_CHAIN_DISPLAY_PERIOD_ODV; + m_rawChainMeasureRunTimes = UQ_ML_SAMPLING_L_RAW_CHAIN_MEASURE_RUN_TIMES_ODV; + m_rawChainDataOutputPeriod = UQ_ML_SAMPLING_L_RAW_CHAIN_DATA_OUTPUT_PERIOD_ODV; + m_rawChainDataOutputFileName = UQ_ML_SAMPLING_L_RAW_CHAIN_DATA_OUTPUT_FILE_NAME_ODV; + m_rawChainDataOutputFileType = UQ_ML_SAMPLING_L_RAW_CHAIN_DATA_OUTPUT_FILE_TYPE_ODV; + m_rawChainDataOutputAllowAll = UQ_ML_SAMPLING_L_RAW_CHAIN_DATA_OUTPUT_ALLOW_ALL_ODV; + //m_rawChainDataOutputAllowedSet = ; +#ifdef QUESO_USES_SEQUENCE_STATISTICAL_OPTIONS + m_rawChainComputeStats = UQ_ML_SAMPLING_L_RAW_CHAIN_COMPUTE_STATS_ODV; + m_rawChainStatisticalOptionsObj = NULL; + m_rawChainStatOptsInstantiated = false; +#endif + m_filteredChainGenerate = UQ_ML_SAMPLING_L_FILTERED_CHAIN_GENERATE_ODV; + m_filteredChainDiscardedPortion = UQ_ML_SAMPLING_L_FILTERED_CHAIN_DISCARDED_PORTION_ODV; + m_filteredChainLag = UQ_ML_SAMPLING_L_FILTERED_CHAIN_LAG_ODV; + m_filteredChainDataOutputFileName = UQ_ML_SAMPLING_L_FILTERED_CHAIN_DATA_OUTPUT_FILE_NAME_ODV; + m_filteredChainDataOutputFileType = UQ_ML_SAMPLING_L_FILTERED_CHAIN_DATA_OUTPUT_FILE_TYPE_ODV; + m_filteredChainDataOutputAllowAll = UQ_ML_SAMPLING_L_FILTERED_CHAIN_DATA_OUTPUT_ALLOW_ALL_ODV; + //m_filteredChainDataOutputAllowedSet = ; +#ifdef QUESO_USES_SEQUENCE_STATISTICAL_OPTIONS + m_filteredChainComputeStats = UQ_ML_SAMPLING_L_FILTERED_CHAIN_COMPUTE_STATS_ODV; + m_filteredChainStatisticalOptionsObj = NULL; + m_filteredChainStatOptsInstantiated = false; +#endif + m_displayCandidates = UQ_ML_SAMPLING_L_DISPLAY_CANDIDATES_ODV; + m_putOutOfBoundsInChain = UQ_ML_SAMPLING_L_PUT_OUT_OF_BOUNDS_IN_CHAIN_ODV; + m_tkUseLocalHessian = UQ_ML_SAMPLING_L_TK_USE_LOCAL_HESSIAN_ODV; + m_tkUseNewtonComponent = UQ_ML_SAMPLING_L_TK_USE_NEWTON_COMPONENT_ODV; + m_drMaxNumExtraStages = UQ_ML_SAMPLING_L_DR_MAX_NUM_EXTRA_STAGES_ODV; + // m_drScalesForExtraStages = 0; + m_drDuringAmNonAdaptiveInt = UQ_ML_SAMPLING_L_DR_DURING_AM_NON_ADAPTIVE_INT_ODV; + m_amKeepInitialMatrix = UQ_ML_SAMPLING_L_AM_KEEP_INITIAL_MATRIX_ODV; + m_amInitialNonAdaptInterval = UQ_ML_SAMPLING_L_AM_INIT_NON_ADAPT_INT_ODV; + m_amAdaptInterval = UQ_ML_SAMPLING_L_AM_ADAPT_INTERVAL_ODV; + m_amAdaptedMatricesDataOutputPeriod = UQ_ML_SAMPLING_L_AM_ADAPTED_MATRICES_DATA_OUTPUT_PERIOD_ODV; + m_amAdaptedMatricesDataOutputFileName = UQ_ML_SAMPLING_L_AM_ADAPTED_MATRICES_DATA_OUTPUT_FILE_NAME_ODV; + m_amAdaptedMatricesDataOutputFileType = UQ_ML_SAMPLING_L_AM_ADAPTED_MATRICES_DATA_OUTPUT_FILE_TYPE_ODV; + m_amAdaptedMatricesDataOutputAllowAll = UQ_ML_SAMPLING_L_AM_ADAPTED_MATRICES_DATA_OUTPUT_ALLOW_ALL_ODV; + //m_amAdaptedMatricesDataOutputAllowedSet = ; + m_amEta = UQ_ML_SAMPLING_L_AM_ETA_ODV; + m_amEpsilon = UQ_ML_SAMPLING_L_AM_EPSILON_ODV; + m_doLogitTransform = UQ_ML_SAMPLING_L_DO_LOGIT_TRANSFORM; + m_algorithm = UQ_ML_SAMPLING_L_ALGORITHM; + m_tk = UQ_ML_SAMPLING_L_TK; + m_updateInterval = UQ_ML_SAMPLING_L_UPDATE_INTERVAL; +} + + +void MLSamplingLevelOptions::set_prefix(const std::string& prefix) +{ + m_prefix = prefix + ""; + + m_option_help = m_prefix + "help" ; +#ifdef ML_CODE_HAS_NEW_RESTART_CAPABILITY +#else + m_option_checkpointOutputFileName = m_prefix + "checkpointOutputFileName" ; +#endif + m_option_stopAtEnd = m_prefix + "stopAtEnd" ; + m_option_dataOutputFileName = m_prefix + "dataOutputFileName" ; + m_option_dataOutputAllowAll = m_prefix + "dataOutputAllowAll" ; + m_option_dataOutputAllowedSet = m_prefix + "dataOutputAllowedSet" ; + m_option_loadBalanceAlgorithmId = m_prefix + "loadBalanceAlgorithmId" ; + m_option_loadBalanceTreshold = m_prefix + "loadBalanceTreshold" ; + m_option_minEffectiveSizeRatio = m_prefix + "minEffectiveSizeRatio" ; + m_option_maxEffectiveSizeRatio = m_prefix + "maxEffectiveSizeRatio" ; + m_option_scaleCovMatrix = m_prefix + "scaleCovMatrix" ; + m_option_minRejectionRate = m_prefix + "minRejectionRate" ; + m_option_maxRejectionRate = m_prefix + "maxRejectionRate" ; + m_option_covRejectionRate = m_prefix + "covRejectionRate" ; + m_option_minAcceptableEta = m_prefix + "minAcceptableEta" ; // gpmsa1 + m_option_totallyMute = m_prefix + "totallyMute" ; + m_option_initialPosition_dataInputFileName = m_prefix + "initialPosition_dataInputFileName" ; + m_option_initialPosition_dataInputFileType = m_prefix + "initialPosition_dataInputFileType" ; + m_option_initialProposalCovMatrix_dataInputFileName = m_prefix + "initialProposalCovMatrix_dataInputFileName"; + m_option_initialProposalCovMatrix_dataInputFileType = m_prefix + "initialProposalCovMatrix_dataInputFileType"; + m_option_initialPositionUsePreviousLevelLikelihood = m_prefix + "initialPositionUsePreviousLevelLikelihood" ; // ml_likelihood_caching + m_option_listOfDisabledParameters = m_prefix + "listOfDisabledParameters" ; // gpmsa2 + m_option_initialValuesOfDisabledParameters = m_prefix + "initialValuesOfDisabledParameters" ; // gpmsa2 + m_option_rawChain_dataInputFileName = m_prefix + "rawChain_dataInputFileName" ; + m_option_rawChain_dataInputFileType = m_prefix + "rawChain_dataInputFileType" ; + m_option_rawChain_size = m_prefix + "rawChain_size" ; + m_option_rawChain_generateExtra = m_prefix + "rawChain_generateExtra" ; + m_option_rawChain_displayPeriod = m_prefix + "rawChain_displayPeriod" ; + m_option_rawChain_measureRunTimes = m_prefix + "rawChain_measureRunTimes" ; + m_option_rawChain_dataOutputPeriod = m_prefix + "rawChain_dataOutputPeriod" ; + m_option_rawChain_dataOutputFileName = m_prefix + "rawChain_dataOutputFileName" ; + m_option_rawChain_dataOutputFileType = m_prefix + "rawChain_dataOutputFileType" ; + m_option_rawChain_dataOutputAllowAll = m_prefix + "rawChain_dataOutputAllowAll" ; + m_option_rawChain_dataOutputAllowedSet = m_prefix + "rawChain_dataOutputAllowedSet" ; +#ifdef QUESO_USES_SEQUENCE_STATISTICAL_OPTIONS + m_option_rawChain_computeStats = m_prefix + "rawChain_computeStats" ; +#endif + m_option_filteredChain_generate = m_prefix + "filteredChain_generate" ; + m_option_filteredChain_discardedPortion = m_prefix + "filteredChain_discardedPortion" ; + m_option_filteredChain_lag = m_prefix + "filteredChain_lag" ; + m_option_filteredChain_dataOutputFileName = m_prefix + "filteredChain_dataOutputFileName" ; + m_option_filteredChain_dataOutputFileType = m_prefix + "filteredChain_dataOutputFileType" ; + m_option_filteredChain_dataOutputAllowAll = m_prefix + "filteredChain_dataOutputAllowAll" ; + m_option_filteredChain_dataOutputAllowedSet = m_prefix + "filteredChain_dataOutputAllowedSet" ; +#ifdef QUESO_USES_SEQUENCE_STATISTICAL_OPTIONS + m_option_filteredChain_computeStats = m_prefix + "filteredChain_computeStats" ; +#endif + m_option_displayCandidates = m_prefix + "displayCandidates" ; + m_option_putOutOfBoundsInChain = m_prefix + "putOutOfBoundsInChain" ; + m_option_tk_useLocalHessian = m_prefix + "tk_useLocalHessian" ; + m_option_tk_useNewtonComponent = m_prefix + "tk_useNewtonComponent" ; + m_option_dr_maxNumExtraStages = m_prefix + "dr_maxNumExtraStages" ; + m_option_dr_listOfScalesForExtraStages = m_prefix + "dr_listOfScalesForExtraStages" ; + m_option_dr_duringAmNonAdaptiveInt = m_prefix + "dr_duringAmNonAdaptiveInt" ; + m_option_am_keepInitialMatrix = m_prefix + "am_keepInitialMatrix" ; + m_option_am_initialNonAdaptInterval = m_prefix + "am_initialNonAdaptInterval" ; + m_option_am_adaptInterval = m_prefix + "am_adaptInterval" ; + m_option_am_adaptedMatrices_dataOutputPeriod = m_prefix + "amAdaptedMatrices_dataOutputPeriod" ; + m_option_am_adaptedMatrices_dataOutputFileName = m_prefix + "amAdaptedMatrices_dataOutputFileName" ; + m_option_am_adaptedMatrices_dataOutputFileType = m_prefix + "amAdaptedMatrices_dataOutputFileType" ; + m_option_am_adaptedMatrices_dataOutputAllowAll = m_prefix + "amAdaptedMatrices_dataOutputAllowAll" ; + m_option_am_adaptedMatrices_dataOutputAllowedSet = m_prefix + "amAdaptedMatrices_dataOutputAllowedSet" ; + m_option_am_eta = m_prefix + "am_eta" ; + m_option_am_epsilon = m_prefix + "am_epsilon" ; + m_option_doLogitTransform = m_prefix + "doLogitTransform" ; + m_option_algorithm = m_prefix + "algorithm" ; + m_option_tk = m_prefix + "tk" ; + m_option_updateInterval = m_prefix + "updateInterval" ; +} + + +void MLSamplingLevelOptions:: +parse(const BaseEnvironment& env, const std::string& prefix) +{ + m_env = &env; + + this->set_prefix(prefix); + +#ifndef QUESO_DISABLE_BOOST_PROGRAM_OPTIONS + m_parser.reset(new BoostInputOptionsParser(env.optionsInputFileName())), + this->defineAllOptions(); + m_parser->scanInputFile(); +#endif // QUESO_DISABLE_BOOST_PROGRAM_OPTIONS + + this->getAllOptions(); + + checkOptions(); +} + } // End namespace QUESO