Ipopt
trunk
|
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$ 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