/home/coin/SVN-release/CoinAll-1.1.0/Ipopt/src/Algorithm/IpIpoptNLP.hpp

Go to the documentation of this file.
00001 // Copyright (C) 2004, 2006 International Business Machines and others.
00002 // All Rights Reserved.
00003 // This code is published under the Common Public License.
00004 //
00005 // $Id: IpIpoptNLP.hpp 984 2007-05-30 23:03:22Z andreasw $
00006 //
00007 // Authors:  Carl Laird, Andreas Waechter     IBM    2004-08-13
00008 
00009 #ifndef __IPIPOPTNLP_HPP__
00010 #define __IPIPOPTNLP_HPP__
00011 
00012 #include "IpNLP.hpp"
00013 #include "IpJournalist.hpp"
00014 #include "IpNLPScaling.hpp"
00015 
00016 namespace Ipopt
00017 {
00018   // forward declarations
00019   class IteratesVector;
00020 
00028   class IpoptNLP : public ReferencedObject
00029   {
00030   public:
00033     IpoptNLP(const SmartPtr<NLPScalingObject> nlp_scaling)
00034         :
00035         nlp_scaling_(nlp_scaling)
00036     {}
00037 
00039     virtual ~IpoptNLP()
00040     {}
00042 
00045     virtual bool Initialize(const Journalist& jnlst,
00046                             const OptionsList& options,
00047                             const std::string& prefix)
00048     {
00049       bool ret = true;
00050       if (IsValid(nlp_scaling_)) {
00051         ret = nlp_scaling_->Initialize(jnlst, options, prefix);
00052       }
00053       return ret;
00054     }
00055 
00059     DECLARE_STD_EXCEPTION(Eval_Error);
00061 
00063     virtual bool InitializeStructures(SmartPtr<Vector>& x,
00064                                       bool init_x,
00065                                       SmartPtr<Vector>& y_c,
00066                                       bool init_y_c,
00067                                       SmartPtr<Vector>& y_d,
00068                                       bool init_y_d,
00069                                       SmartPtr<Vector>& z_L,
00070                                       bool init_z_L,
00071                                       SmartPtr<Vector>& z_U,
00072                                       bool init_z_U,
00073                                       SmartPtr<Vector>& v_L,
00074                                       SmartPtr<Vector>& v_U
00075                                      ) = 0;
00076 
00078     virtual bool GetWarmStartIterate(IteratesVector& warm_start_iterate)=0;
00079 
00083     virtual Number f(const Vector& x) = 0;
00084 
00086     virtual SmartPtr<const Vector> grad_f(const Vector& x) = 0;
00087 
00089     virtual SmartPtr<const Vector> c(const Vector& x) = 0;
00090 
00092     virtual SmartPtr<const Matrix> jac_c(const Vector& x) = 0;
00093 
00096     virtual SmartPtr<const Vector> d(const Vector& x) = 0;
00097 
00099     virtual SmartPtr<const Matrix> jac_d(const Vector& x) = 0;
00100 
00102     virtual SmartPtr<const SymMatrix> h(const Vector& x,
00103                                         Number obj_factor,
00104                                         const Vector& yc,
00105                                         const Vector& yd
00106                                        ) = 0;
00107 
00109     virtual SmartPtr<const Vector> x_L() const = 0;
00110 
00112     virtual SmartPtr<const Matrix> Px_L() const = 0;
00113 
00115     virtual SmartPtr<const Vector> x_U() const = 0;
00116 
00118     virtual SmartPtr<const Matrix> Px_U() const = 0;
00119 
00121     virtual SmartPtr<const Vector> d_L() const = 0;
00122 
00124     virtual SmartPtr<const Matrix> Pd_L() const = 0;
00125 
00127     virtual SmartPtr<const Vector> d_U() const = 0;
00128 
00130     virtual SmartPtr<const Matrix> Pd_U() const = 0;
00131 
00134     virtual SmartPtr<const SymMatrixSpace> HessianMatrixSpace() const = 0;
00136 
00138     virtual void GetSpaces(SmartPtr<const VectorSpace>& x_space,
00139                            SmartPtr<const VectorSpace>& c_space,
00140                            SmartPtr<const VectorSpace>& d_space,
00141                            SmartPtr<const VectorSpace>& x_l_space,
00142                            SmartPtr<const MatrixSpace>& px_l_space,
00143                            SmartPtr<const VectorSpace>& x_u_space,
00144                            SmartPtr<const MatrixSpace>& px_u_space,
00145                            SmartPtr<const VectorSpace>& d_l_space,
00146                            SmartPtr<const MatrixSpace>& pd_l_space,
00147                            SmartPtr<const VectorSpace>& d_u_space,
00148                            SmartPtr<const MatrixSpace>& pd_u_space,
00149                            SmartPtr<const MatrixSpace>& Jac_c_space,
00150                            SmartPtr<const MatrixSpace>& Jac_d_space,
00151                            SmartPtr<const SymMatrixSpace>& Hess_lagrangian_space) = 0;
00152 
00155     virtual void AdjustVariableBounds(const Vector& new_x_L,
00156                                       const Vector& new_x_U,
00157                                       const Vector& new_d_L,
00158                                       const Vector& new_d_U)=0;
00159 
00162     virtual Index f_evals() const = 0;
00163     virtual Index grad_f_evals() const = 0;
00164     virtual Index c_evals() const = 0;
00165     virtual Index jac_c_evals() const = 0;
00166     virtual Index d_evals() const = 0;
00167     virtual Index jac_d_evals() const = 0;
00168     virtual Index h_evals() const = 0;
00170 
00180     virtual bool objective_depends_on_mu() const
00181     {
00182       return false;
00183     }
00184 
00187     virtual Number f(const Vector& x, Number mu) = 0;
00188 
00191     virtual SmartPtr<const Vector> grad_f(const Vector& x, Number mu) = 0;
00192 
00195     virtual SmartPtr<const SymMatrix> h(const Vector& x,
00196                                         Number obj_factor,
00197                                         const Vector& yc,
00198                                         const Vector& yd,
00199                                         Number mu) = 0;
00200 
00204     virtual SmartPtr<const SymMatrix> uninitialized_h() = 0;
00206 
00209     virtual void FinalizeSolution(SolverReturn status,
00210                                   const Vector& x, const Vector& z_L, const Vector& z_U,
00211                                   const Vector& c, const Vector& d,
00212                                   const Vector& y_c, const Vector& y_d,
00213                                   Number obj_value,
00214                                   const IpoptData* ip_data,
00215                                   IpoptCalculatedQuantities* ip_cq)=0;
00216 
00217     virtual bool IntermediateCallBack(AlgorithmMode mode,
00218                                       Index iter, Number obj_value,
00219                                       Number inf_pr, Number inf_du,
00220                                       Number mu, Number d_norm,
00221                                       Number regularization_size,
00222                                       Number alpha_du, Number alpha_pr,
00223                                       Index ls_trials,
00224                                       SmartPtr<const IpoptData> ip_data,
00225                                       SmartPtr<IpoptCalculatedQuantities> ip_cq)=0;
00227 
00229     SmartPtr<NLPScalingObject> NLP_scaling() const
00230     {
00231       DBG_ASSERT(IsValid(nlp_scaling_));
00232       return nlp_scaling_;
00233     }
00234 
00235   private:
00236 
00245 
00247     IpoptNLP(const IpoptNLP&);
00248 
00250     void operator=(const IpoptNLP&);
00252 
00253     SmartPtr<NLPScalingObject> nlp_scaling_;
00254   };
00255 
00256 } // namespace Ipopt
00257 
00258 #endif

Generated on Sun Nov 14 14:06:34 2010 for Coin-All by  doxygen 1.4.7