MOOCHO (Single Doxygen Collection) Version of the Day
MoochoPack_NLPAlgoConfigMamaJama.hpp
Go to the documentation of this file.
00001 // @HEADER
00002 // ***********************************************************************
00003 // 
00004 // Moocho: Multi-functional Object-Oriented arCHitecture for Optimization
00005 //                  Copyright (2003) Sandia Corporation
00006 // 
00007 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
00008 // license for use of this work by or on behalf of the U.S. Government.
00009 // 
00010 // Redistribution and use in source and binary forms, with or without
00011 // modification, are permitted provided that the following conditions are
00012 // met:
00013 //
00014 // 1. Redistributions of source code must retain the above copyright
00015 // notice, this list of conditions and the following disclaimer.
00016 //
00017 // 2. Redistributions in binary form must reproduce the above copyright
00018 // notice, this list of conditions and the following disclaimer in the
00019 // documentation and/or other materials provided with the distribution.
00020 //
00021 // 3. Neither the name of the Corporation nor the names of the
00022 // contributors may be used to endorse or promote products derived from
00023 // this software without specific prior written permission.
00024 //
00025 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
00026 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00027 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
00028 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
00029 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
00030 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
00031 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
00032 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
00033 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
00034 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00035 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00036 //
00037 // Questions? Contact Roscoe A. Bartlett (rabartl@sandia.gov) 
00038 // 
00039 // ***********************************************************************
00040 // @HEADER
00041 
00042 #ifndef RSQP_ALGO_CONFIG_MAMA_JAMA_H
00043 #define RSQP_ALGO_CONFIG_MAMA_JAMA_H
00044 
00045 #include "MoochoPack_NLPAlgoConfig.hpp"
00046 #include "MoochoPack_NLPAlgo.hpp"
00047 #include "MoochoPack_DecompositionSystemStateStepBuilderStd.hpp"
00048 #include "OptionsFromStreamPack_OptionsFromStream.hpp"
00049 
00050 namespace MoochoPack {
00051 
00069 class NLPAlgoConfigMamaJama : public NLPAlgoConfig {
00070 public:
00071 
00073   NLPAlgoConfigMamaJama();
00074 
00076   ~NLPAlgoConfigMamaJama();
00077 
00080 
00091   void set_options( const options_ptr_t& options );
00093   const options_ptr_t& get_options() const;
00095   void config_algo_cntr(NLPAlgoContainer* algo_cntr, std::ostream* trase_out);
00097   void init_algo(NLPAlgoInterface* algo);
00098 
00100 
00101 public:
00102 
00105 
00107   enum EQuasiNewton {
00108     QN_AUTO, QN_BFGS, QN_PBFGS, QN_LBFGS, QN_LPBFGS };
00110   enum EHessianInitialization {
00111     INIT_HESS_AUTO, INIT_HESS_SERIALIZE, INIT_HESS_IDENTITY, INIT_HESS_FIN_DIFF_SCALE_IDENTITY
00112     , INIT_HESS_FIN_DIFF_SCALE_DIAGONAL, INIT_HESS_FIN_DIFF_SCALE_DIAGONAL_ABS };
00114   enum EQPSolverType {
00115     QP_AUTO, QP_QPSOL, QP_QPOPT, QP_QPKWIK, QP_QPSCHUR };
00117   enum ELineSearchMethod {
00118     LINE_SEARCH_AUTO, LINE_SEARCH_NONE, LINE_SEARCH_DIRECT
00119     , LINE_SEARCH_2ND_ORDER_CORRECT, LINE_SEARCH_WATCHDOG
00120     , LINE_SEARCH_FILTER };
00122   enum EMeritFunctionType {
00123     MERIT_FUNC_AUTO, MERIT_FUNC_L1, MERIT_FUNC_MOD_L1
00124     , MERIT_FUNC_MOD_L1_INCR };
00126   enum EL1PenaltyParamUpdate {
00127     L1_PENALTY_PARAM_AUTO, L1_PENALTY_PARAM_WITH_MULT
00128     , L1_PENALTY_PARAM_MULT_FREE };
00129 
00131 
00134 
00136   struct SOptionValues {
00137     // Constructor (sets default values)
00138     SOptionValues();
00139     // Variable Reduction, Range/Null space decompositions
00140     value_type max_basis_cond_change_frac_; // If < , don't change default
00141     // Reduced Hessian Approximations
00142     bool exact_reduced_hessian_;
00143     EQuasiNewton quasi_newton_;
00144     int num_lbfgs_updates_stored_; // If < 0, don't change default
00145     bool lbfgs_auto_scaling_;
00146     EHessianInitialization hessian_initialization_;
00147     // QP subproblem solvers
00148     EQPSolverType qp_solver_type_;
00149     bool reinit_hessian_on_qp_fail_;
00150     // Line search methods
00151     ELineSearchMethod line_search_method_;
00152     EMeritFunctionType merit_function_type_;
00153     EL1PenaltyParamUpdate l1_penalty_param_update_;
00154     int full_steps_after_k_; // If < 0, do not use this option at all.
00155     value_type max_pz_norm_;
00156     int num_pz_damp_iters_;
00157   };
00158   
00160 
00161 private:
00162 
00164   DecompositionSystemStateStepBuilderStd decomp_sys_step_builder_;
00165   
00167   options_ptr_t options_;
00168   
00170   SOptionValues uov_; // options set by user
00171   SOptionValues cov_; // current option values actually used
00172 
00173   // ///////////////////////////////////////////////////////
00174   // Private member functions
00175 
00177   static void readin_options(
00178     const OptionsFromStreamPack::OptionsFromStream& options
00179     , SOptionValues *option_values, std::ostream* trase_out );
00180 
00182   static void set_default_options(
00183     const SOptionValues& user_option_values
00184     , SOptionValues *current_option_values
00185     , std::ostream* trase_out );
00186 
00187 };  // end class NLPAlgoConfigMamaJama
00188 
00198 } // end namespace MoochoPack 
00199 
00200 #endif  // RSQP_ALGO_CONFIG_MAMA_JAMA_H
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines