/build/buildd/coinor-ipopt-3.10.1/Ipopt/src/Algorithm/Inexact/IpInexactCq.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: IpInexactCq.hpp 1861 2010-12-21 21:34:47Z andreasw $
00006 //
00007 // Authors:  Andreas Waechter           IBM    2008-08-31
00008 //               derived from IpIpoptCalculatedQuantities.hpp
00009 
00010 #ifndef __IPINEXACTCQ_HPP__
00011 #define __IPINEXACTCQ_HPP__
00012 
00013 #include "IpIpoptCalculatedQuantities.hpp"
00014 #include "IpInexactData.hpp"
00015 
00016 namespace Ipopt
00017 {
00018 
00022   class InexactCq : public IpoptAdditionalCq
00023   {
00024   public:
00025 
00029     InexactCq(IpoptNLP* ip_nlp,
00030               IpoptData* ip_data,
00031               IpoptCalculatedQuantities* ip_cq);
00032 
00034     virtual ~InexactCq();
00036 
00040     bool Initialize(const Journalist& jnlst,
00041                     const OptionsList& options,
00042                     const std::string& prefix);
00043 
00046     static void RegisterOptions(const SmartPtr<RegisteredOptions>& roptions);
00048 
00053     SmartPtr<const Vector> curr_jac_cdT_times_curr_cdminuss();
00054 
00056     SmartPtr<const Vector> curr_scaling_slacks();
00057 
00059     SmartPtr<const Vector> curr_slack_scaled_d_minus_s();
00060 
00062     Number curr_scaled_Ac_norm();
00063 
00065     Number curr_scaled_A_norm2();
00066 
00069     Number slack_scaled_norm(const Vector& x, const Vector &s);
00070 
00073     SmartPtr<const Vector> curr_W_times_vec_x(const Vector& vec_x);
00074 
00077     SmartPtr<const Vector> curr_W_times_vec_s(const Vector& vec_s);
00078 
00081     SmartPtr<const Vector> curr_Wu_x();
00082 
00085     SmartPtr<const Vector> curr_Wu_s();
00086 
00089     Number curr_uWu();
00090 
00093     SmartPtr<const Vector> curr_jac_times_normal_c();
00094 
00097     SmartPtr<const Vector> curr_jac_times_normal_d();
00098 
00099   private:
00109     InexactCq();
00110 
00112     InexactCq(const InexactCq&);
00113 
00115     void operator=(const InexactCq&);
00117 
00122     IpoptNLP* ip_nlp_;
00123     IpoptData* ip_data_;
00124     IpoptCalculatedQuantities* ip_cq_;
00126 
00128     InexactData& InexData()
00129     {
00130       InexactData& inexact_data =
00131         static_cast<InexactData&>(ip_data_->AdditionalData());
00132       DBG_ASSERT(dynamic_cast<InexactData*>(&ip_data_->AdditionalData()));
00133       return inexact_data;
00134     }
00135 
00138     CachedResults<SmartPtr<const Vector> > curr_jac_cdT_times_curr_cdminuss_cache_;
00139     CachedResults<SmartPtr<const Vector> > curr_scaling_slacks_cache_;
00140     CachedResults<SmartPtr<const Vector> > curr_slack_scaled_d_minus_s_cache_;
00141     CachedResults<Number> curr_scaled_Ac_norm_cache_;
00142     CachedResults<Number> slack_scaled_norm_cache_;
00143     CachedResults<SmartPtr<const Vector> > curr_W_times_vec_x_cache_;
00144     CachedResults<SmartPtr<const Vector> > curr_W_times_vec_s_cache_;
00145     CachedResults<SmartPtr<const Vector> > curr_Wu_x_cache_;
00146     CachedResults<SmartPtr<const Vector> > curr_Wu_s_cache_;
00147     CachedResults<Number> curr_uWu_cache_;
00148     CachedResults<SmartPtr<const Vector> > curr_jac_times_normal_c_cache_;
00149     CachedResults<SmartPtr<const Vector> > curr_jac_times_normal_d_cache_;
00151 
00153     Number slack_scale_max_;
00154   };
00155 
00156 } // namespace Ipopt
00157 
00158 #endif