CompositeNLP.hpp
Go to the documentation of this file.
1 // Copyright (C) 2004, International Business Machines and others.
2 // All Rights Reserved.
3 // This code is published under the Eclipse Public License.
4 //
5 // $Id: CompositeNLP.hpp 1861 2010-12-21 21:34:47Z andreasw $
6 //
7 // Authors: Carl Laird, Andreas Waechter IBM 2004-08-13
8 
9 #ifndef __IPCOMPOSITENLP_HPP__
10 #define __IPCOMPOSITENLP_HPP__
11 
12 #include "IpNLP.hpp"
13 
14 namespace Ipopt
15 {
16 
17  /* forward declaration */
18  class SymLinearSolver;
19 
25  class CompositeNLP : public NLP
26  {
27  public:
31  CompositeNLP(std::vector<SmartPtr<NLP> > nlps, SmartPtr<VectorSpace> q_space,
32  std::vector<SmartPtr<VectorSpace> > linking_eqn_c_spaces,
33  std::vector<SmartPtr<Matrix> > Jx_linking_eqns,
34  std::vector<SmartPtr<Matrix> > Jq_linking_eqns);
35 
37  virtual ~CompositeNLP();
39 
42  DECLARE_STD_EXCEPTION(INVALID_JACOBIAN_DIMENSION_FOR_LINKING_EQUATIONS);
44 
47  virtual bool ProcessOptions(const OptionsList& options,
48  const std::string& prefix);
49 
52  virtual bool GetSpaces(SmartPtr<const VectorSpace>& x_space,
55  SmartPtr<const VectorSpace>& x_l_space,
56  SmartPtr<const MatrixSpace>& px_l_space,
57  SmartPtr<const VectorSpace>& x_u_space,
58  SmartPtr<const MatrixSpace>& px_u_space,
59  SmartPtr<const VectorSpace>& d_l_space,
60  SmartPtr<const MatrixSpace>& pd_l_space,
61  SmartPtr<const VectorSpace>& d_u_space,
62  SmartPtr<const MatrixSpace>& pd_u_space,
63  SmartPtr<const MatrixSpace>& Jac_c_space,
64  SmartPtr<const MatrixSpace>& Jac_d_space,
65  SmartPtr<const SymMatrixSpace>& Hess_lagrangian_space);
66 
68  virtual bool GetBoundsInformation(const Matrix& Px_L,
69  Vector& x_L,
70  const Matrix& Px_U,
71  Vector& x_U,
72  const Matrix& Pd_L,
73  Vector& d_L,
74  const Matrix& Pd_U,
75  Vector& d_U);
76 
79  virtual bool GetStartingPoint(
81  bool need_x,
82  SmartPtr<Vector> y_c,
83  bool need_y_c,
84  SmartPtr<Vector> y_d,
85  bool need_y_d,
86  SmartPtr<Vector> z_L,
87  bool need_z_L,
88  SmartPtr<Vector> z_U,
89  bool need_z_U
90  );
92 
95  virtual bool Eval_f(const Vector& x, Number& f);
96 
97  virtual bool Eval_grad_f(const Vector& x, Vector& g_f);
98 
99  virtual bool Eval_c(const Vector& x, Vector& c);
100 
101  virtual bool Eval_jac_c(const Vector& x, Matrix& jac_c);
102 
103  virtual bool Eval_d(const Vector& x, Vector& d);
104 
105  virtual bool Eval_jac_d(const Vector& x, Matrix& jac_d);
106 
107  virtual bool Eval_h(const Vector& x,
108  Number obj_factor,
109  const Vector& yc,
110  const Vector& yd,
111  SymMatrix& h);
113 
119  private:
129  CompositeNLP();
130 
132  CompositeNLP(const CompositeNLP&);
133 
135  void operator=(const CompositeNLP&);
137 
140 
142  std::vector<SmartPtr<NLP> > nlps_;
143 
146 
148  std::vector<SmartPtr<VectorSpace> > linking_eqn_c_spaces_;
149 
157  std::vector<SmartPtr<Matrix> > Jx_linking_eqns_;
158 
161  std::vector<SmartPtr<Matrix> > Jq_linking_eqns_;
163  };
164 
165 } // namespace Ipopt
166 
167 #endif