Ipopt 3.11.9
Loading...
Searching...
No Matches
IpNLPScaling.hpp
Go to the documentation of this file.
1// Copyright (C) 2004, 2007 International Business Machines and others.
2// All Rights Reserved.
3// This code is published under the Eclipse Public License.
4//
5// $Id: IpNLPScaling.hpp 2036 2011-07-02 17:21:08Z stefan $
6//
7// Authors: Carl Laird, Andreas Waechter IBM 2004-08-13
8
9#ifndef __IPNLPSCALING_HPP__
10#define __IPNLPSCALING_HPP__
11
12#include "IpOptionsList.hpp"
13#include "IpRegOptions.hpp"
14
15namespace Ipopt
16{
17 // forward declarations
18 class Vector;
19 class VectorSpace;
20 class Matrix;
21 class MatrixSpace;
22 class SymMatrix;
23 class SymMatrixSpace;
24 class ScaledMatrixSpace;
25 class SymScaledMatrixSpace;
26
33 {
34 public:
38
42
44 bool Initialize(const Journalist& jnlst,
45 const OptionsList& options,
46 const std::string& prefix)
47 {
48 jnlst_ = &jnlst;
49 return InitializeImpl(options, prefix);
50 }
51
55 virtual Number apply_obj_scaling(const Number& f)=0;
57 virtual Number unapply_obj_scaling(const Number& f)=0;
59 virtual SmartPtr<Vector>
65 virtual SmartPtr<Vector>
77 virtual SmartPtr<Vector>
80 virtual SmartPtr<Vector>
89 virtual SmartPtr<Vector>
92 virtual SmartPtr<Vector>
113
118 const Matrix& Px_LU,
119 const SmartPtr<const Vector>& lu,
120 const VectorSpace& x_space);
123 const Matrix& Px_LU,
124 const SmartPtr<const Vector>& lu,
125 const VectorSpace& x_space);
128 const Matrix& Pd_LU,
129 const SmartPtr<const Vector>& lu,
130 const VectorSpace& d_space);
133 const Matrix& Pd_LU,
134 const SmartPtr<const Vector>& lu,
135 const VectorSpace& d_space);
138 const Matrix& Pd_LU,
139 const SmartPtr<const Vector>& lu,
140 const VectorSpace& d_space);
143 const Matrix& Pd_LU,
144 const SmartPtr<const Vector>& lu,
145 const VectorSpace& d_space);
147
153 virtual SmartPtr<Vector>
160 virtual SmartPtr<Vector>
167
172 virtual bool have_x_scaling()=0;
174 virtual bool have_c_scaling()=0;
176 virtual bool have_d_scaling()=0;
178
183 const SmartPtr<const VectorSpace> c_space,
184 const SmartPtr<const VectorSpace> d_space,
185 const SmartPtr<const MatrixSpace> jac_c_space,
186 const SmartPtr<const MatrixSpace> jac_d_space,
187 const SmartPtr<const SymMatrixSpace> h_space,
188 SmartPtr<const MatrixSpace>& new_jac_c_space,
189 SmartPtr<const MatrixSpace>& new_jac_d_space,
191 const Matrix& Px_L, const Vector& x_L,
192 const Matrix& Px_U, const Vector& x_U)=0;
193 protected:
196 virtual bool InitializeImpl(const OptionsList& options,
197 const std::string& prefix)=0;
198
200 const Journalist& Jnlst() const
201 {
202 return *jnlst_;
203 }
204 private:
205
214
217
221
223 };
224
230 {
231 public:
235
239
243 virtual Number apply_obj_scaling(const Number& f);
247 virtual SmartPtr<Vector>
253 virtual SmartPtr<Vector>
265 virtual SmartPtr<Vector>
268 virtual SmartPtr<Vector>
277 virtual SmartPtr<Vector>
280 virtual SmartPtr<Vector>
301
305 virtual bool have_x_scaling();
306 virtual bool have_c_scaling();
307 virtual bool have_d_scaling();
309
314 const SmartPtr<const VectorSpace> c_space,
315 const SmartPtr<const VectorSpace> d_space,
316 const SmartPtr<const MatrixSpace> jac_c_space,
317 const SmartPtr<const MatrixSpace> jac_d_space,
318 const SmartPtr<const SymMatrixSpace> h_space,
319 SmartPtr<const MatrixSpace>& new_jac_c_space,
320 SmartPtr<const MatrixSpace>& new_jac_d_space,
322 const Matrix& Px_L, const Vector& x_L,
323 const Matrix& Px_U, const Vector& x_U);
324
329
330 protected:
332 virtual bool InitializeImpl(const OptionsList& options,
333 const std::string& prefix);
334
340 const SmartPtr<const VectorSpace> x_space,
341 const SmartPtr<const VectorSpace> c_space,
342 const SmartPtr<const VectorSpace> d_space,
343 const SmartPtr<const MatrixSpace> jac_c_space,
344 const SmartPtr<const MatrixSpace> jac_d_space,
345 const SmartPtr<const SymMatrixSpace> h_space,
346 const Matrix& Px_L, const Vector& x_L,
347 const Matrix& Px_U, const Vector& x_U,
348 Number& df,
351 SmartPtr<Vector>& dd)=0;
352
353 private:
354
363
366
370
381
391
397 };
398
401 {
402 public:
407
410 {}
412
413
414 protected:
417 const SmartPtr<const VectorSpace> x_space,
418 const SmartPtr<const VectorSpace> c_space,
419 const SmartPtr<const VectorSpace> d_space,
420 const SmartPtr<const MatrixSpace> jac_c_space,
421 const SmartPtr<const MatrixSpace> jac_d_space,
422 const SmartPtr<const SymMatrixSpace> h_space,
423 const Matrix& Px_L, const Vector& x_L,
424 const Matrix& Px_U, const Vector& x_U,
425 Number& df,
428 SmartPtr<Vector>& dd);
429
430 private:
431
440
443
447 };
448
449} // namespace Ipopt
450
451#endif
Number * x_L
Lower bounds on variables.
Number Number * x_U
Upper bounds on variables.
Class responsible for all message output.
Matrix Base Class.
Definition IpMatrix.hpp:28
This is the abstract base class for problem scaling.
SmartPtr< const Vector > apply_vector_scaling_d_LU(const Matrix &Pd_LU, const SmartPtr< const Vector > &lu, const VectorSpace &d_space)
Returns an d-scaled vector in the d_L or d_U space.
virtual SmartPtr< const Matrix > apply_jac_c_scaling(SmartPtr< const Matrix > matrix)=0
Returns a scaled version of the jacobian for c.
virtual SmartPtr< Vector > apply_vector_scaling_x_NonConst(const SmartPtr< const Vector > &v)=0
Returns an x-scaled version of the given vector.
virtual SmartPtr< Vector > apply_grad_obj_scaling_NonConst(const SmartPtr< const Vector > &v)
Methods for scaling the gradient of the objective - wraps the virtual methods above.
virtual SmartPtr< Vector > unapply_grad_obj_scaling_NonConst(const SmartPtr< const Vector > &v)
Returns a grad_f unscaled version (d_f * D_x^{-1}) of the given vector.
const Journalist & Jnlst() const
Accessor method for the journalist.
virtual SmartPtr< const Vector > unapply_vector_scaling_x(const SmartPtr< const Vector > &v)=0
Returns an x-unscaled version of the given vector.
virtual SmartPtr< const Vector > unapply_grad_obj_scaling(const SmartPtr< const Vector > &v)
Returns a grad_f unscaled version (d_f * D_x^{-1}) of the given vector.
virtual SmartPtr< Vector > unapply_vector_scaling_x_NonConst(const SmartPtr< const Vector > &v)=0
Returns an x-unscaled version of the given vector.
virtual bool InitializeImpl(const OptionsList &options, const std::string &prefix)=0
Implementation of the initialization method that has to be overloaded by for each derived class.
virtual SmartPtr< const Vector > unapply_vector_scaling_c(const SmartPtr< const Vector > &v)=0
Returns an c-unscaled version of the given vector.
virtual bool have_d_scaling()=0
Returns true if the inequality constraints are scaled.
NLPScalingObject(const NLPScalingObject &)
Copy Constructor.
virtual Number unapply_obj_scaling(const Number &f)=0
Returns an obj-unscaled version of the given scalar.
virtual ~NLPScalingObject()
Default destructor.
SmartPtr< Vector > apply_vector_scaling_x_LU_NonConst(const Matrix &Px_LU, const SmartPtr< const Vector > &lu, const VectorSpace &x_space)
Methods for scaling bounds - these wrap those above.
SmartPtr< const Journalist > jnlst_
virtual SmartPtr< Vector > apply_vector_scaling_c_NonConst(const SmartPtr< const Vector > &v)=0
Returns an c-scaled version of the given vector.
virtual void DetermineScaling(const SmartPtr< const VectorSpace > x_space, const SmartPtr< const VectorSpace > c_space, const SmartPtr< const VectorSpace > d_space, const SmartPtr< const MatrixSpace > jac_c_space, const SmartPtr< const MatrixSpace > jac_d_space, const SmartPtr< const SymMatrixSpace > h_space, SmartPtr< const MatrixSpace > &new_jac_c_space, SmartPtr< const MatrixSpace > &new_jac_d_space, SmartPtr< const SymMatrixSpace > &new_h_space, const Matrix &Px_L, const Vector &x_L, const Matrix &Px_U, const Vector &x_U)=0
This method is called by the IpoptNLP's at a convenient time to compute and/or read scaling factors.
SmartPtr< const Vector > unapply_vector_scaling_d_LU(const Matrix &Pd_LU, const SmartPtr< const Vector > &lu, const VectorSpace &d_space)
Returns an d-unscaled vector in the d_L or d_U space.
virtual SmartPtr< const Vector > apply_vector_scaling_c(const SmartPtr< const Vector > &v)=0
Returns an c-scaled version of the given vector.
virtual SmartPtr< const Matrix > apply_jac_d_scaling(SmartPtr< const Matrix > matrix)=0
Returns a scaled version of the jacobian for d If the overloaded method does not create a new matrix,...
virtual bool have_x_scaling()=0
Returns true if the primal x variables are scaled.
virtual SmartPtr< Vector > apply_vector_scaling_d_NonConst(const SmartPtr< const Vector > &v)=0
Returns an d-scaled version of the given vector.
virtual SmartPtr< const Vector > apply_vector_scaling_x(const SmartPtr< const Vector > &v)=0
Returns an x-scaled version of the given vector.
virtual SmartPtr< Vector > unapply_vector_scaling_d_NonConst(const SmartPtr< const Vector > &v)=0
Returns an d-unscaled version of the given vector.
virtual SmartPtr< const SymMatrix > apply_hessian_scaling(SmartPtr< const SymMatrix > matrix)=0
Returns a scaled version of the hessian of the lagrangian If the overloaded method does not create a ...
SmartPtr< Vector > unapply_vector_scaling_d_LU_NonConst(const Matrix &Pd_LU, const SmartPtr< const Vector > &lu, const VectorSpace &d_space)
Returns an d-unscaled vector in the d_L or d_U space.
SmartPtr< Vector > apply_vector_scaling_d_LU_NonConst(const Matrix &Pd_LU, const SmartPtr< const Vector > &lu, const VectorSpace &d_space)
Returns an d-scaled vector in the d_L or d_U space.
virtual SmartPtr< const Vector > apply_grad_obj_scaling(const SmartPtr< const Vector > &v)
Returns a grad_f scaled version (d_f * D_x^{-1}) of the given vector.
virtual bool have_c_scaling()=0
Returns true if the equality constraints are scaled.
virtual SmartPtr< Vector > unapply_vector_scaling_c_NonConst(const SmartPtr< const Vector > &v)=0
Returns an c-unscaled version of the given vector.
virtual SmartPtr< const Vector > apply_vector_scaling_d(const SmartPtr< const Vector > &v)=0
Returns an d-scaled version of the given vector.
virtual Number apply_obj_scaling(const Number &f)=0
Methods to map scaled and unscaled matrices.
void operator=(const NLPScalingObject &)
Overloaded Equals Operator.
virtual SmartPtr< const Vector > unapply_vector_scaling_d(const SmartPtr< const Vector > &v)=0
Returns an d-unscaled version of the given vector.
SmartPtr< const Vector > apply_vector_scaling_x_LU(const Matrix &Px_LU, const SmartPtr< const Vector > &lu, const VectorSpace &x_space)
Returns an x-scaled vector in the x_L or x_U space.
bool Initialize(const Journalist &jnlst, const OptionsList &options, const std::string &prefix)
Method to initialize the options.
Class implementing the scaling object that doesn't to any scaling.
void operator=(const NoNLPScalingObject &)
Overloaded Equals Operator.
virtual void DetermineScalingParametersImpl(const SmartPtr< const VectorSpace > x_space, const SmartPtr< const VectorSpace > c_space, const SmartPtr< const VectorSpace > d_space, const SmartPtr< const MatrixSpace > jac_c_space, const SmartPtr< const MatrixSpace > jac_d_space, const SmartPtr< const SymMatrixSpace > h_space, const Matrix &Px_L, const Vector &x_L, const Matrix &Px_U, const Vector &x_U, Number &df, SmartPtr< Vector > &dx, SmartPtr< Vector > &dc, SmartPtr< Vector > &dd)
Overloaded from StandardScalingBase.
virtual ~NoNLPScalingObject()
Default destructor.
NoNLPScalingObject(const NoNLPScalingObject &)
Copy Constructor.
This class stores a list of user set options.
ReferencedObject class.
Template class for Smart Pointers.
This is a base class for many standard scaling techniques.
virtual SmartPtr< Vector > apply_vector_scaling_d_NonConst(const SmartPtr< const Vector > &v)
Returns an d-scaled version of the given vector.
virtual SmartPtr< const Vector > unapply_vector_scaling_d(const SmartPtr< const Vector > &v)
Returns an d-unscaled version of the given vector.
virtual Number unapply_obj_scaling(const Number &f)
Returns an obj-unscaled version of the given scalar.
virtual SmartPtr< const Vector > unapply_vector_scaling_x(const SmartPtr< const Vector > &v)
Returns an x-unscaled version of the given vector.
StandardScalingBase(const StandardScalingBase &)
Copy Constructor.
virtual bool InitializeImpl(const OptionsList &options, const std::string &prefix)
Overloaded initialization method.
SmartPtr< ScaledMatrixSpace > scaled_jac_d_space_
Scaled jacobian of d space.
virtual SmartPtr< Vector > unapply_vector_scaling_x_NonConst(const SmartPtr< const Vector > &v)
Returns an x-unscaled version of the given vector.
virtual SmartPtr< Vector > unapply_vector_scaling_d_NonConst(const SmartPtr< const Vector > &v)
Returns an d-unscaled version of the given vector.
SmartPtr< ScaledMatrixSpace > scaled_jac_c_space_
Scaled Matrix Spaces.
virtual SmartPtr< const Matrix > apply_jac_c_scaling(SmartPtr< const Matrix > matrix)
Returns a scaled version of the jacobian for c.
virtual ~StandardScalingBase()
Default destructor.
virtual void DetermineScalingParametersImpl(const SmartPtr< const VectorSpace > x_space, const SmartPtr< const VectorSpace > c_space, const SmartPtr< const VectorSpace > d_space, const SmartPtr< const MatrixSpace > jac_c_space, const SmartPtr< const MatrixSpace > jac_d_space, const SmartPtr< const SymMatrixSpace > h_space, const Matrix &Px_L, const Vector &x_L, const Matrix &Px_U, const Vector &x_U, Number &df, SmartPtr< Vector > &dx, SmartPtr< Vector > &dc, SmartPtr< Vector > &dd)=0
This is the method that has to be overloaded by a particular scaling method that somehow computes the...
void operator=(const StandardScalingBase &)
Overloaded Equals Operator.
virtual bool have_c_scaling()
Returns true if the equality constraints are scaled.
virtual void DetermineScaling(const SmartPtr< const VectorSpace > x_space, const SmartPtr< const VectorSpace > c_space, const SmartPtr< const VectorSpace > d_space, const SmartPtr< const MatrixSpace > jac_c_space, const SmartPtr< const MatrixSpace > jac_d_space, const SmartPtr< const SymMatrixSpace > h_space, SmartPtr< const MatrixSpace > &new_jac_c_space, SmartPtr< const MatrixSpace > &new_jac_d_space, SmartPtr< const SymMatrixSpace > &new_h_space, const Matrix &Px_L, const Vector &x_L, const Matrix &Px_U, const Vector &x_U)
This method is called by the IpoptNLP's at a convenient time to compute and/or read scaling factors.
virtual SmartPtr< const Vector > unapply_vector_scaling_c(const SmartPtr< const Vector > &v)
Returns an c-unscaled version of the given vector.
virtual SmartPtr< Vector > unapply_vector_scaling_c_NonConst(const SmartPtr< const Vector > &v)
Returns an c-unscaled version of the given vector.
virtual SmartPtr< const SymMatrix > apply_hessian_scaling(SmartPtr< const SymMatrix > matrix)
Returns a scaled version of the hessian of the lagrangian If the overloaded method does not create a ...
virtual SmartPtr< Vector > apply_vector_scaling_x_NonConst(const SmartPtr< const Vector > &v)
Returns an x-scaled version of the given vector.
static void RegisterOptions(SmartPtr< RegisteredOptions > roptions)
Methods for IpoptType.
virtual SmartPtr< Vector > apply_vector_scaling_c_NonConst(const SmartPtr< const Vector > &v)
Returns an c-scaled version of the given vector.
virtual bool have_x_scaling()
Returns true if the primal x variables are scaled.
SmartPtr< Vector > dx_
x scaling
virtual SmartPtr< const Vector > apply_vector_scaling_c(const SmartPtr< const Vector > &v)
Returns an c-scaled version of the given vector.
SmartPtr< SymScaledMatrixSpace > scaled_h_space_
Scaled hessian of lagrangian spacea.
virtual Number apply_obj_scaling(const Number &f)
Methods to map scaled and unscaled matrices.
virtual bool have_d_scaling()
Returns true if the inequality constraints are scaled.
Number obj_scaling_factor_
Additional scaling value for the objective function.
virtual SmartPtr< const Matrix > apply_jac_d_scaling(SmartPtr< const Matrix > matrix)
Returns a scaled version of the jacobian for d If the overloaded method does not create a new matrix,...
virtual SmartPtr< const Vector > apply_vector_scaling_x(const SmartPtr< const Vector > &v)
Returns an x-scaled version of the given vector.
virtual SmartPtr< const Vector > apply_vector_scaling_d(const SmartPtr< const Vector > &v)
Returns an d-scaled version of the given vector.
Number df_
Scaling parameters - we only need to keep copies of the objective scaling and the x scaling - the oth...
VectorSpace base class, corresponding to the Vector base class.
Definition IpVector.hpp:391
Vector Base Class.
Definition IpVector.hpp:48
double Number
Type of all numbers.
Definition IpTypes.hpp:17