00001 // Copyright (C) 2004, 2008 International Business Machines and others. 00002 // All Rights Reserved. 00003 // This code is published under the Common Public License. 00004 // 00005 // $Id: IpRestoMinC_1Nrm.hpp 1219 2008-04-25 18:14:35Z andreasw $ 00006 // 00007 // Authors: Carl Laird, Andreas Waechter IBM 2004-08-13 00008 00009 #ifndef __IPRESTOC_1NRM_HPP__ 00010 #define __IPRESTOC_1NRM_HPP__ 00011 00012 #include "IpRestoPhase.hpp" 00013 #include "IpIpoptAlg.hpp" 00014 #include "IpEqMultCalculator.hpp" 00015 00016 namespace Ipopt 00017 { 00018 00022 class MinC_1NrmRestorationPhase : public RestorationPhase 00023 { 00024 public: 00033 MinC_1NrmRestorationPhase(IpoptAlgorithm& resto_alg, 00034 const SmartPtr<EqMultiplierCalculator>& eq_mult_calculator); 00035 00037 virtual ~MinC_1NrmRestorationPhase(); 00039 00041 virtual bool InitializeImpl(const OptionsList& options, 00042 const std::string& prefix); 00043 00046 static void RegisterOptions(SmartPtr<RegisteredOptions> roptions); 00048 00049 protected: 00051 virtual bool PerformRestoration(); 00052 00053 private: 00061 MinC_1NrmRestorationPhase(); 00062 00064 MinC_1NrmRestorationPhase(const MinC_1NrmRestorationPhase&); 00065 00067 void operator=(const MinC_1NrmRestorationPhase&); 00069 00072 SmartPtr<IpoptAlgorithm> resto_alg_; 00073 SmartPtr<EqMultiplierCalculator> eq_mult_calculator_; 00075 00079 SmartPtr<OptionsList> resto_options_; 00080 00083 Number constr_mult_reset_threshold_; 00087 Number bound_mult_reset_threshold_; 00091 bool expect_infeasible_problem_; 00093 Number constr_viol_tol_; 00095 00098 Index count_restorations_; 00099 00105 void ComputeBoundMultiplierStep(Vector& delta_z, 00106 const Vector& curr_z, 00107 const Vector& curr_slack, 00108 const Vector& trial_slack); 00110 }; 00111 00112 } // namespace Ipopt 00113 00114 #endif