MOOCHO (Single Doxygen Collection) Version of the Day
MoochoPack_NLPAlgoConfigIP.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 ALGO_CONFIG_IP_H
00043 #define ALGO_CONFIG_IP_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 
00063 class NLPAlgoConfigIP : public NLPAlgoConfig {
00064 public:
00065 
00067   NLPAlgoConfigIP();
00068 
00070   ~NLPAlgoConfigIP();
00071 
00074 
00085   void set_options( const options_ptr_t& options );
00087   const options_ptr_t& get_options() const;
00089   void config_algo_cntr(NLPAlgoContainer* algo_cntr, std::ostream* trase_out);
00091   void init_algo(NLPAlgoInterface* algo);
00092 
00094 
00095 public:
00096 
00099 
00101   enum EQuasiNewton {
00102     QN_AUTO, QN_BFGS, QN_PBFGS, QN_LBFGS, QN_LPBFGS };
00104   enum EHessianInitialization {
00105     INIT_HESS_AUTO, INIT_HESS_IDENTITY, INIT_HESS_FIN_DIFF_SCALE_IDENTITY
00106     , INIT_HESS_FIN_DIFF_SCALE_DIAGONAL, INIT_HESS_FIN_DIFF_SCALE_DIAGONAL_ABS };
00108   enum EQPSolverType {
00109     QP_AUTO, QP_QPSOL, QP_QPOPT, QP_QPKWIK, QP_QPSCHUR };
00111   enum ELineSearchMethod {
00112     LINE_SEARCH_AUTO, LINE_SEARCH_NONE, LINE_SEARCH_DIRECT
00113     , LINE_SEARCH_2ND_ORDER_CORRECT, LINE_SEARCH_WATCHDOG
00114     , LINE_SEARCH_FILTER };
00116   enum EMeritFunctionType {
00117     MERIT_FUNC_AUTO, MERIT_FUNC_L1, MERIT_FUNC_MOD_L1
00118     , MERIT_FUNC_MOD_L1_INCR };
00120   enum EL1PenaltyParamUpdate {
00121     L1_PENALTY_PARAM_AUTO, L1_PENALTY_PARAM_WITH_MULT
00122     , L1_PENALTY_PARAM_MULT_FREE };
00123 
00125 
00128 
00130   struct SOptionValues {
00131     // Constructor (sets default values)
00132     SOptionValues();
00133     // Variable Reduction,  Range/Null space decompositions
00134     value_type        max_basis_cond_change_frac_;  // If < , don't change default
00135     // Reduced Hessian Approximations
00136     bool          exact_reduced_hessian_;
00137     EQuasiNewton      quasi_newton_;
00138     int           num_lbfgs_updates_stored_;      // If < 0, don't change default
00139     bool          lbfgs_auto_scaling_;
00140     EHessianInitialization  hessian_initialization_;
00141     // QP subproblem solvers
00142     EQPSolverType     qp_solver_type_;
00143     bool                    reinit_hessian_on_qp_fail_;
00144     // Line search methods
00145     ELineSearchMethod   line_search_method_;
00146     EMeritFunctionType    merit_function_type_;
00147     EL1PenaltyParamUpdate l1_penalty_param_update_;
00148     int           full_steps_after_k_;      // If < 0, do not use this option at all.
00149   };
00150 
00152 
00153 private:
00154 
00156   DecompositionSystemStateStepBuilderStd   decomp_sys_step_builder_;
00157 
00159   options_ptr_t      options_;
00160 
00162   SOptionValues       uov_; // options set by user
00163   SOptionValues       cov_; // current option values actually used
00164 
00165   // ///////////////////////////////////////////////////////
00166   // Private member functions
00167 
00169   static void readin_options(
00170     const OptionsFromStreamPack::OptionsFromStream& options
00171     , SOptionValues *option_values, std::ostream* trase_out );
00172 
00174   static void set_default_options(
00175     const SOptionValues& user_option_values
00176     , SOptionValues *current_option_values
00177     , std::ostream* trase_out );
00178 
00179 };  // end class NLPAlgoConfigIP
00180 
00190 } // end namespace MoochoPack 
00191 
00192 #endif  // ALGO_CONFIG_IP_H
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines