/build/buildd/coinor-ipopt-3.10.1/Ipopt/src/Algorithm/Inexact/IpInexactSearchDirCalc.hpp
Go to the documentation of this file.
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