00001 // Copyright (C) 2008 International Business Machines and others. 00002 // All Rights Reserved. 00003 // This code is published under the Common Public License. 00004 // 00005 // $Id: IpInexactDoglegNormal.hpp 1390 2009-01-06 16:55:52Z andreasw $ 00006 // 00007 // Authors: Andreas Waechter IBM 2008-08-31 00008 00009 #ifndef __IPINEXACTDOGLEGNORMAL_HPP__ 00010 #define __IPINEXACTDOGLEGNORMAL_HPP__ 00011 00012 #include "IpInexactNormalStepCalc.hpp" 00013 #include "IpInexactNewtonNormal.hpp" 00014 #include "IpInexactNormalTerminationTester.hpp" 00015 00016 namespace Ipopt 00017 { 00020 class InexactDoglegNormalStep : public InexactNormalStepCalculator 00021 { 00022 public: 00026 InexactDoglegNormalStep(SmartPtr<InexactNewtonNormalStep> newton_step, 00027 SmartPtr<InexactNormalTerminationTester> normal_tester = NULL); 00028 00030 virtual ~InexactDoglegNormalStep(); 00032 00034 virtual bool InitializeImpl(const OptionsList& options, 00035 const std::string& prefix); 00036 00041 virtual bool ComputeNormalStep(SmartPtr<Vector>& normal_x, 00042 SmartPtr<Vector>& normal_s); 00043 00046 static void RegisterOptions(SmartPtr<RegisteredOptions> roptions); 00048 00049 private: 00059 InexactDoglegNormalStep(); 00060 00062 InexactDoglegNormalStep(const InexactDoglegNormalStep&); 00063 00065 void operator=(const InexactDoglegNormalStep&); 00067 00070 SmartPtr<InexactNewtonNormalStep> newton_step_; 00071 00077 SmartPtr<InexactNormalTerminationTester> normal_tester_; 00078 00081 Number omega_max_; 00083 00085 Number curr_omega_; 00086 00088 bool last_tr_inactive_; 00089 }; 00090 00091 } // namespace Ipopt 00092 00093 #endif