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: IpMonotoneMuUpdate.hpp 735 2006-06-04 06:10:05Z andreasw $ 00006 // 00007 // Authors: Carl Laird, Andreas Waechter IBM 2004-08-13 00008 00009 #ifndef __IPMONOTONEMUUPDATE_HPP__ 00010 #define __IPMONOTONEMUUPDATE_HPP__ 00011 00012 #include "IpMuUpdate.hpp" 00013 #include "IpLineSearch.hpp" 00014 #include "IpRegOptions.hpp" 00015 00016 namespace Ipopt 00017 { 00018 00022 class MonotoneMuUpdate : public MuUpdate 00023 { 00024 public: 00028 MonotoneMuUpdate(const SmartPtr<LineSearch>& linesearch); 00029 00031 virtual ~MonotoneMuUpdate(); 00033 00035 virtual bool InitializeImpl(const OptionsList& options, 00036 const std::string& prefix); 00037 00043 virtual bool UpdateBarrierParameter(); 00044 00047 static void RegisterOptions(const SmartPtr<RegisteredOptions>& roptions); 00049 00050 private: 00059 MonotoneMuUpdate(); 00060 00062 MonotoneMuUpdate(const MonotoneMuUpdate&); 00063 00065 void operator=(const MonotoneMuUpdate&); 00067 00069 void CalcNewMuAndTau(Number &new_mu, 00070 Number &new_tau); 00071 00075 Number mu_init_; 00076 Number barrier_tol_factor_; 00077 Number mu_linear_decrease_factor_; 00078 Number mu_superlinear_decrease_power_; 00079 bool mu_allow_fast_monotone_decrease_; 00081 Number tau_min_; 00082 Number compl_inf_tol_; 00084 00085 SmartPtr<LineSearch> linesearch_; 00086 00089 bool initialized_; 00090 00094 bool first_iter_resto_; 00095 }; 00096 00097 } // namespace Ipopt 00098 00099 #endif