00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef ALGO_CONFIG_IP_H
00030 #define ALGO_CONFIG_IP_H
00031
00032 #include "MoochoPack_NLPAlgoConfig.hpp"
00033 #include "MoochoPack_NLPAlgo.hpp"
00034 #include "MoochoPack_DecompositionSystemStateStepBuilderStd.hpp"
00035 #include "OptionsFromStreamPack_OptionsFromStream.hpp"
00036
00037 namespace MoochoPack {
00038
00050 class NLPAlgoConfigIP : public NLPAlgoConfig {
00051 public:
00052
00054 NLPAlgoConfigIP();
00055
00057 ~NLPAlgoConfigIP();
00058
00061
00072 void set_options( const options_ptr_t& options );
00074 const options_ptr_t& get_options() const;
00076 void config_algo_cntr(NLPAlgoContainer* algo_cntr, std::ostream* trase_out);
00078 void init_algo(NLPAlgoInterface* algo);
00079
00081
00082 public:
00083
00086
00088 enum EQuasiNewton {
00089 QN_AUTO, QN_BFGS, QN_PBFGS, QN_LBFGS, QN_LPBFGS };
00091 enum EHessianInitialization {
00092 INIT_HESS_AUTO, INIT_HESS_IDENTITY, INIT_HESS_FIN_DIFF_SCALE_IDENTITY
00093 , INIT_HESS_FIN_DIFF_SCALE_DIAGONAL, INIT_HESS_FIN_DIFF_SCALE_DIAGONAL_ABS };
00095 enum EQPSolverType {
00096 QP_AUTO, QP_QPSOL, QP_QPOPT, QP_QPKWIK, QP_QPSCHUR };
00098 enum ELineSearchMethod {
00099 LINE_SEARCH_AUTO, LINE_SEARCH_NONE, LINE_SEARCH_DIRECT
00100 , LINE_SEARCH_2ND_ORDER_CORRECT, LINE_SEARCH_WATCHDOG
00101 , LINE_SEARCH_FILTER };
00103 enum EMeritFunctionType {
00104 MERIT_FUNC_AUTO, MERIT_FUNC_L1, MERIT_FUNC_MOD_L1
00105 , MERIT_FUNC_MOD_L1_INCR };
00107 enum EL1PenaltyParamUpdate {
00108 L1_PENALTY_PARAM_AUTO, L1_PENALTY_PARAM_WITH_MULT
00109 , L1_PENALTY_PARAM_MULT_FREE };
00110
00112
00115
00117 struct SOptionValues {
00118
00119 SOptionValues();
00120
00121 value_type max_basis_cond_change_frac_;
00122
00123 bool exact_reduced_hessian_;
00124 EQuasiNewton quasi_newton_;
00125 int num_lbfgs_updates_stored_;
00126 bool lbfgs_auto_scaling_;
00127 EHessianInitialization hessian_initialization_;
00128
00129 EQPSolverType qp_solver_type_;
00130 bool reinit_hessian_on_qp_fail_;
00131
00132 ELineSearchMethod line_search_method_;
00133 EMeritFunctionType merit_function_type_;
00134 EL1PenaltyParamUpdate l1_penalty_param_update_;
00135 int full_steps_after_k_;
00136 };
00137
00139
00140 private:
00141
00143 DecompositionSystemStateStepBuilderStd decomp_sys_step_builder_;
00144
00146 options_ptr_t options_;
00147
00149 SOptionValues uov_;
00150 SOptionValues cov_;
00151
00152
00153
00154
00156 static void readin_options(
00157 const OptionsFromStreamPack::OptionsFromStream& options
00158 , SOptionValues *option_values, std::ostream* trase_out );
00159
00161 static void set_default_options(
00162 const SOptionValues& user_option_values
00163 , SOptionValues *current_option_values
00164 , std::ostream* trase_out );
00165
00166 };
00167
00177 }
00178
00179 #endif // ALGO_CONFIG_IP_H