00001 // Copyright (C) 2008 International Business Machines and others. 00002 // All Rights Reserved. 00003 // This code is published under the Eclipse Public License. 00004 // 00005 // $Id: IpInexactSearchDirCalc.hpp 1861 2010-12-21 21:34:47Z andreasw $ 00006 // 00007 // Authors: Andreas Waechter IBM 2008-08-31 00008 00009 #ifndef __IPINEXACTSEARCHDIRCALC_HPP__ 00010 #define __IPINEXACTSEARCHDIRCALC_HPP__ 00011 00012 #include "IpSearchDirCalculator.hpp" 00013 #include "IpInexactCq.hpp" 00014 #include "IpInexactNormalStepCalc.hpp" 00015 #include "IpInexactPDSolver.hpp" 00016 00017 namespace Ipopt 00018 { 00024 class InexactSearchDirCalculator : public SearchDirectionCalculator 00025 { 00026 public: 00030 InexactSearchDirCalculator(SmartPtr<InexactNormalStepCalculator> normal_step_calculator, 00031 SmartPtr<InexactPDSolver> inexact_pd_solver); 00032 00034 virtual ~InexactSearchDirCalculator(); 00036 00038 virtual bool InitializeImpl(const OptionsList& options, 00039 const std::string& prefix); 00040 00045 virtual bool ComputeSearchDirection(); 00046 00049 static void RegisterOptions(SmartPtr<RegisteredOptions> roptions); 00051 00052 private: 00062 InexactSearchDirCalculator(); 00063 00065 InexactSearchDirCalculator(const InexactSearchDirCalculator&); 00066 00068 void operator=(const InexactSearchDirCalculator&); 00070 00072 InexactData& InexData() 00073 { 00074 InexactData& inexact_data = 00075 static_cast<InexactData&>(IpData().AdditionalData()); 00076 DBG_ASSERT(dynamic_cast<InexactData*>(&IpData().AdditionalData())); 00077 return inexact_data; 00078 } 00079 00081 InexactCq& InexCq() 00082 { 00083 InexactCq& inexact_cq = 00084 static_cast<InexactCq&>(IpCq().AdditionalCq()); 00085 DBG_ASSERT(dynamic_cast<InexactCq*>(&IpCq().AdditionalCq())); 00086 return inexact_cq; 00087 } 00088 00092 Number local_inf_Ac_tol_; 00094 00097 SmartPtr<InexactNormalStepCalculator> normal_step_calculator_; 00098 SmartPtr<InexactPDSolver> inexact_pd_solver_; 00100 00102 enum DecompositionTypeEnum 00103 { 00104 ALWAYS=0, 00105 ADAPTIVE, 00106 SWITCH_ONCE 00107 }; 00109 DecompositionTypeEnum decomposition_type_; 00110 }; 00111 00112 } // namespace Ipopt 00113 00114 #endif