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