/home/coin/SVN-release/Ipopt-3.3.2/Ipopt/src/contrib/CGPenalty/IpCGPenaltyData.hpp

Go to the documentation of this file.
00001 // Copyright (C) 2007 International Business Machines and others.
00002 // All Rights Reserved.
00003 // This code is published under the Common Public License.
00004 //
00005 // $Id: IpIpoptData.hpp 988 2007-06-01 21:57:27Z andreasw $
00006 //
00007 // Authors:  Andreas Waechter           IBM     2007-06-04
00008 //                   based on IpIpoptData.hpp
00009 
00010 #ifndef __IPCGPENALTYDATA_HPP__
00011 #define __IPCGPENALTYDATA_HPP__
00012 
00013 #include "IpIteratesVector.hpp"
00014 #include "IpOptionsList.hpp"
00015 
00016 namespace Ipopt
00017 {
00018 
00021   class CGPenaltyData : public ReferencedObject
00022   {
00023   public:
00027     CGPenaltyData();
00028 
00030     ~CGPenaltyData();
00032 
00036     bool Initialize(const Journalist& jnlst,
00037                     const OptionsList& options,
00038                     const std::string& prefix);
00039 
00041     bool InitializeDataStructures();
00042 
00044     SmartPtr<const IteratesVector> delta_cgpen() const;
00045 
00050     void set_delta_cgpen(SmartPtr<IteratesVector>& delta_pen);
00051 
00058     void set_delta_cgpen(SmartPtr<const IteratesVector>& delta_pen);
00059 
00061     SmartPtr<const IteratesVector> delta_cgfast() const;
00062 
00067     void set_delta_cgfast(SmartPtr<IteratesVector>& delta_fast);
00068 
00072     bool HaveCgPenDeltas() const
00073     {
00074       return have_cgpen_deltas_;
00075     }
00076     void SetHaveCgPenDeltas(bool have_cgpen_deltas)
00077     {
00078       have_cgpen_deltas_ = have_cgpen_deltas;
00079     }
00080 
00081     bool HaveCgFastDeltas() const
00082     {
00083       return have_cgfast_deltas_;
00084     }
00085     void SetHaveCgFastDeltas(bool have_cgfast_deltas)
00086     {
00087       have_cgfast_deltas_ = have_cgfast_deltas;
00088     }
00090 
00095     void AcceptTrialPoint();
00097 
00098     Number curr_penalty() const
00099     {
00100       DBG_ASSERT(penalty_initialized_);
00101       return curr_penalty_;
00102     }
00103     void Set_penalty(Number penalty)
00104     {
00105       curr_penalty_ = penalty;
00106       penalty_initialized_ = true;
00107     }
00108     void SetPenaltyUninitialized()
00109     {
00110       penalty_initialized_ = false;
00111     }
00112     bool PenaltyInitialized() const
00113     {
00114       return penalty_initialized_;
00115     }
00116 
00117   private:
00118 
00124     SmartPtr<const IteratesVector> delta_cgpen_;
00130     bool have_cgpen_deltas_;
00132 
00138     SmartPtr<const IteratesVector> delta_cgfast_;
00144     bool have_cgfast_deltas_;
00146 
00149     Number curr_penalty_;
00150     bool penalty_initialized_;
00152 
00155     bool initialize_called_;
00156 
00166     CGPenaltyData(const CGPenaltyData&);
00167 
00169     void operator=(const CGPenaltyData&);
00171 
00172 #if COIN_IPOPT_CHECKLEVEL > 0
00173 
00177     TaggedObject::Tag debug_delta_cgpen_tag_;
00178     TaggedObject::Tag debug_delta_cgfast_tag_;
00179     TaggedObject::Tag debug_delta_cgpen_tag_sum_;
00180     TaggedObject::Tag debug_delta_cgfast_tag_sum_;
00182 #endif
00183 
00184   };
00185 
00186   inline
00187   SmartPtr<const IteratesVector> CGPenaltyData::delta_cgpen() const
00188   {
00189     DBG_ASSERT(IsNull(delta_cgpen_) || (delta_cgpen_->GetTag() == debug_delta_cgpen_tag_ && delta_cgpen_->GetTagSum() == debug_delta_cgpen_tag_sum_) );
00190 
00191     return delta_cgpen_;
00192   }
00193 
00194   inline
00195   SmartPtr<const IteratesVector> CGPenaltyData::delta_cgfast() const
00196   {
00197     DBG_ASSERT(IsNull(delta_cgfast_) || (delta_cgfast_->GetTag() == debug_delta_cgfast_tag_ && delta_cgfast_->GetTagSum() == debug_delta_cgfast_tag_sum_) );
00198 
00199     return delta_cgfast_;
00200   }
00201 
00202   inline
00203   void CGPenaltyData::set_delta_cgpen(SmartPtr<IteratesVector>& delta_cgpen)
00204   {
00205     delta_cgpen_ = ConstPtr(delta_cgpen);
00206 #if COIN_IPOPT_CHECKLEVEL > 0
00207 
00208     if (IsValid(delta_cgpen)) {
00209       debug_delta_cgpen_tag_ = delta_cgpen->GetTag();
00210       debug_delta_cgpen_tag_sum_ = delta_cgpen->GetTagSum();
00211     }
00212     else {
00213       debug_delta_cgpen_tag_ = 0;
00214       debug_delta_cgpen_tag_sum_ = delta_cgpen->GetTagSum();
00215     }
00216 #endif
00217 
00218     delta_cgpen = NULL;
00219   }
00220 
00221   inline
00222   void CGPenaltyData::set_delta_cgpen(SmartPtr<const IteratesVector>& delta_cgpen)
00223   {
00224     delta_cgpen_ = delta_cgpen;
00225 #if COIN_IPOPT_CHECKLEVEL > 0
00226 
00227     if (IsValid(delta_cgpen)) {
00228       debug_delta_cgpen_tag_ = delta_cgpen->GetTag();
00229       debug_delta_cgpen_tag_sum_ = delta_cgpen->GetTagSum();
00230     }
00231     else {
00232       debug_delta_cgpen_tag_ = 0;
00233       debug_delta_cgpen_tag_sum_ = delta_cgpen->GetTagSum();
00234     }
00235 #endif
00236 
00237     delta_cgpen = NULL;
00238   }
00239 
00240   inline
00241   void CGPenaltyData::set_delta_cgfast(SmartPtr<IteratesVector>& delta_cgfast)
00242   {
00243     delta_cgfast_ = ConstPtr(delta_cgfast);
00244 #if COIN_IPOPT_CHECKLEVEL > 0
00245 
00246     if (IsValid(delta_cgfast)) {
00247       debug_delta_cgfast_tag_ = delta_cgfast->GetTag();
00248       debug_delta_cgfast_tag_sum_ = delta_cgfast->GetTagSum();
00249     }
00250     else {
00251       debug_delta_cgfast_tag_ = 0;
00252       debug_delta_cgfast_tag_sum_ = delta_cgfast->GetTagSum();
00253     }
00254 #endif
00255 
00256     delta_cgfast = NULL;
00257   }
00258 
00259 } // namespace Ipopt
00260 
00261 #endif

Generated on Thu May 15 22:27:52 2008 by  doxygen 1.4.7