IpAdaptiveMuUpdate.hpp

Go to the documentation of this file.
00001 // Copyright (C) 2004, 2006 International Business Machines and others.
00002 // All Rights Reserved.
00003 // This code is published under the Common Public License.
00004 //
00005 // $Id: IpAdaptiveMuUpdate.hpp 759 2006-07-07 03:07:08Z andreasw $
00006 //
00007 // Authors:  Carl Laird, Andreas Waechter     IBM    2004-08-13
00008 
00009 #ifndef __IPADAPTIVEMUUPDATE_HPP__
00010 #define __IPADAPTIVEMUUPDATE_HPP__
00011 
00012 #include "IpMuUpdate.hpp"
00013 #include "IpLineSearch.hpp"
00014 #include "IpMuOracle.hpp"
00015 #include "IpFilter.hpp"
00016 #include "IpQualityFunctionMuOracle.hpp"
00017 
00018 namespace Ipopt
00019 {
00020 
00023   class AdaptiveMuUpdate : public MuUpdate
00024   {
00025   public:
00029     AdaptiveMuUpdate(const SmartPtr<LineSearch>& linesearch,
00030                      const SmartPtr<MuOracle>& free_mu_oracle,
00031                      const SmartPtr<MuOracle>& fix_mu_oracle=NULL);
00033     virtual ~AdaptiveMuUpdate();
00035 
00037     virtual bool InitializeImpl(const OptionsList& options,
00038                                 const std::string& prefix);
00039 
00045     virtual bool UpdateBarrierParameter();
00046 
00049     static void RegisterOptions(SmartPtr<RegisteredOptions> roptions);
00051 
00052   private:
00061 
00063     AdaptiveMuUpdate();
00064 
00066     AdaptiveMuUpdate(const AdaptiveMuUpdate&);
00067 
00069     void operator=(const AdaptiveMuUpdate&);
00071 
00074     Number mu_max_fact_;
00075     Number mu_max_;
00076     Number mu_min_;
00077     bool mu_min_default_;
00078     Number tau_min_;
00079     Number adaptive_mu_safeguard_factor_; //ToDo don't need that?
00080     Number adaptive_mu_monotone_init_factor_;
00081     Number barrier_tol_factor_;
00082     Number mu_linear_decrease_factor_;
00083     Number mu_superlinear_decrease_power_;
00084     QualityFunctionMuOracle::NormEnum adaptive_mu_kkt_norm_;
00085     QualityFunctionMuOracle::CentralityEnum adaptive_mu_kkt_centrality_;
00086     QualityFunctionMuOracle::BalancingTermEnum adaptive_mu_kkt_balancing_term_;
00088     enum AdaptiveMuGlobalizationEnum
00089     {
00090       KKT_ERROR=0,
00091       FILTER_OBJ_CONSTR,
00092       FILTER_KKT_ERROR,
00093       NEVER_MONOTONE_MODE
00094     };
00096     AdaptiveMuGlobalizationEnum adaptive_mu_globalization_;
00098     Number filter_max_margin_;
00100     Number filter_margin_fact_;
00102     Number compl_inf_tol_;
00104 
00108     SmartPtr<LineSearch> linesearch_;
00112     SmartPtr<MuOracle> free_mu_oracle_;
00117     SmartPtr<MuOracle> fix_mu_oracle_;
00119 
00122     Number init_dual_inf_;
00125     Number init_primal_inf_;
00126 
00130     void InitializeFixedMuGlobalization();
00134     bool CheckSufficientProgress();
00137     void RememberCurrentPointAsAccepted();
00141     Number NewFixedMu();
00144     Number Compute_tau_monotone(Number mu);
00145 
00151     Number quality_function_pd_system();
00152 
00156     Number lower_mu_safeguard();
00157 
00159     Number max_ref_val();
00160 
00162     Number min_ref_val();
00163 
00165     Index num_refs_max_;
00168     std::list<Number> refs_vals_;
00170     Number refs_red_fact_;
00171 
00173     Filter filter_;
00176     bool restore_accepted_iterate_;
00178 
00180     bool no_bounds_;
00182     bool check_if_no_bounds_;
00183 
00188     SmartPtr<const IteratesVector> accepted_point_;
00190 
00191   };
00192 
00193 } // namespace Ipopt
00194 
00195 #endif

Generated on Fri Sep 26 07:44:10 2008 for SimTKcore by  doxygen 1.5.6