You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					452 lines
				
				17 KiB
			
		
		
			
		
	
	
					452 lines
				
				17 KiB
			| 
								 
											6 years ago
										 
									 | 
							
								// Copyright (C) 2004, 2007 International Business Machines and others.
							 | 
						||
| 
								 | 
							
								// All Rights Reserved.
							 | 
						||
| 
								 | 
							
								// This code is published under the Eclipse Public License.
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// $Id: IpNLPScaling.hpp 2269 2013-05-05 11:32:40Z stefan $
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// Authors:  Carl Laird, Andreas Waechter     IBM    2004-08-13
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef __IPNLPSCALING_HPP__
							 | 
						||
| 
								 | 
							
								#define __IPNLPSCALING_HPP__
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "IpOptionsList.hpp"
							 | 
						||
| 
								 | 
							
								#include "IpRegOptions.hpp"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace Ipopt
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  // forward declarations
							 | 
						||
| 
								 | 
							
								  class Vector;
							 | 
						||
| 
								 | 
							
								  class VectorSpace;
							 | 
						||
| 
								 | 
							
								  class Matrix;
							 | 
						||
| 
								 | 
							
								  class MatrixSpace;
							 | 
						||
| 
								 | 
							
								  class SymMatrix;
							 | 
						||
| 
								 | 
							
								  class SymMatrixSpace;
							 | 
						||
| 
								 | 
							
								  class ScaledMatrixSpace;
							 | 
						||
| 
								 | 
							
								  class SymScaledMatrixSpace;
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								  /** This is the abstract base class for problem scaling.
							 | 
						||
| 
								 | 
							
								   *  It is repsonsible for determining the scaling factors
							 | 
						||
| 
								 | 
							
								   *  and mapping quantities in and out of scaled and unscaled
							 | 
						||
| 
								 | 
							
								   *  versions 
							 | 
						||
| 
								 | 
							
								   */
							 | 
						||
| 
								 | 
							
								  class NLPScalingObject : public ReferencedObject
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								  public:
							 | 
						||
| 
								 | 
							
								    /**@name Constructors/Destructors */
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    NLPScalingObject();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Default destructor */
							 | 
						||
| 
								 | 
							
								    virtual ~NLPScalingObject();
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Method to initialize the options */
							 | 
						||
| 
								 | 
							
								    bool Initialize(const Journalist& jnlst,
							 | 
						||
| 
								 | 
							
								                    const OptionsList& options,
							 | 
						||
| 
								 | 
							
								                    const std::string& prefix)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      jnlst_ = &jnlst;
							 | 
						||
| 
								 | 
							
								      return InitializeImpl(options, prefix);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Methods to map scaled and unscaled matrices */
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    /** Returns an obj-scaled version of the given scalar */
							 | 
						||
| 
								 | 
							
								    virtual Number apply_obj_scaling(const Number& f)=0;
							 | 
						||
| 
								 | 
							
								    /** Returns an obj-unscaled version of the given scalar */
							 | 
						||
| 
								 | 
							
								    virtual Number unapply_obj_scaling(const Number& f)=0;
							 | 
						||
| 
								 | 
							
								    /** Returns an x-scaled version of the given vector */
							 | 
						||
| 
								 | 
							
								    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<const Vector>
							 | 
						||
| 
								 | 
							
								    apply_vector_scaling_x(const SmartPtr<const Vector>& v)=0;
							 | 
						||
| 
								 | 
							
								    /** Returns an x-unscaled version 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 SmartPtr<const Vector>
							 | 
						||
| 
								 | 
							
								    unapply_vector_scaling_x(const SmartPtr<const Vector>& v)=0;
							 | 
						||
| 
								 | 
							
								    /** Returns an c-scaled version of the given vector */
							 | 
						||
| 
								 | 
							
								    virtual SmartPtr<const Vector>
							 | 
						||
| 
								 | 
							
								    apply_vector_scaling_c(const SmartPtr<const Vector>& v)=0;
							 | 
						||
| 
								 | 
							
								    /** Returns an c-unscaled version of the given vector */
							 | 
						||
| 
								 | 
							
								    virtual SmartPtr<const Vector>
							 | 
						||
| 
								 | 
							
								    unapply_vector_scaling_c(const SmartPtr<const Vector>& v)=0;
							 | 
						||
| 
								 | 
							
								    /** Returns an c-scaled version of the given vector */
							 | 
						||
| 
								 | 
							
								    virtual SmartPtr<Vector>
							 | 
						||
| 
								 | 
							
								    apply_vector_scaling_c_NonConst(const SmartPtr<const Vector>& v)=0;
							 | 
						||
| 
								 | 
							
								    /** Returns an c-unscaled version of the given vector */
							 | 
						||
| 
								 | 
							
								    virtual SmartPtr<Vector>
							 | 
						||
| 
								 | 
							
								    unapply_vector_scaling_c_NonConst(const SmartPtr<const Vector>& v)=0;
							 | 
						||
| 
								 | 
							
								    /** Returns an d-scaled version of the given vector */
							 | 
						||
| 
								 | 
							
								    virtual SmartPtr<const Vector>
							 | 
						||
| 
								 | 
							
								    apply_vector_scaling_d(const SmartPtr<const Vector>& v)=0;
							 | 
						||
| 
								 | 
							
								    /** Returns an d-unscaled version of the given vector */
							 | 
						||
| 
								 | 
							
								    virtual SmartPtr<const Vector>
							 | 
						||
| 
								 | 
							
								    unapply_vector_scaling_d(const SmartPtr<const Vector>& v)=0;
							 | 
						||
| 
								 | 
							
								    /** Returns an d-scaled version of the given vector */
							 | 
						||
| 
								 | 
							
								    virtual SmartPtr<Vector>
							 | 
						||
| 
								 | 
							
								    apply_vector_scaling_d_NonConst(const SmartPtr<const Vector>& v)=0;
							 | 
						||
| 
								 | 
							
								    /** Returns an d-unscaled version of the given vector */
							 | 
						||
| 
								 | 
							
								    virtual SmartPtr<Vector>
							 | 
						||
| 
								 | 
							
								    unapply_vector_scaling_d_NonConst(const SmartPtr<const Vector>& v)=0;
							 | 
						||
| 
								 | 
							
								    /** Returns a scaled version of the jacobian for c.  If the
							 | 
						||
| 
								 | 
							
								     *  overloaded method does not make a new matrix, make sure to set
							 | 
						||
| 
								 | 
							
								     *  the matrix ptr passed in to NULL.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    virtual SmartPtr<const Matrix>
							 | 
						||
| 
								 | 
							
								    apply_jac_c_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, make sure to
							 | 
						||
| 
								 | 
							
								     *  set the matrix ptr passed in to NULL.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    virtual SmartPtr<const Matrix>
							 | 
						||
| 
								 | 
							
								    apply_jac_d_scaling(SmartPtr<const Matrix> matrix)=0;
							 | 
						||
| 
								 | 
							
								    /** Returns a scaled version of the hessian of the lagrangian If
							 | 
						||
| 
								 | 
							
								     *  the overloaded method does not create a new matrix, make sure
							 | 
						||
| 
								 | 
							
								     *  to set the matrix ptr passed in to NULL.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    virtual SmartPtr<const SymMatrix>
							 | 
						||
| 
								 | 
							
								    apply_hessian_scaling(SmartPtr<const SymMatrix> matrix)=0;
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Methods for scaling bounds - these wrap those above */
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    /** Returns an x-scaled vector in the x_L or x_U space */
							 | 
						||
| 
								 | 
							
								    SmartPtr<Vector> apply_vector_scaling_x_LU_NonConst(
							 | 
						||
| 
								 | 
							
								      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 */
							 | 
						||
| 
								 | 
							
								    SmartPtr<const Vector> apply_vector_scaling_x_LU(
							 | 
						||
| 
								 | 
							
								      const Matrix& Px_LU,
							 | 
						||
| 
								 | 
							
								      const SmartPtr<const Vector>& lu,
							 | 
						||
| 
								 | 
							
								      const VectorSpace& x_space);
							 | 
						||
| 
								 | 
							
								    /** Returns an d-scaled 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 */
							 | 
						||
| 
								 | 
							
								    SmartPtr<const Vector> apply_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 */
							 | 
						||
| 
								 | 
							
								    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<const Vector> unapply_vector_scaling_d_LU(
							 | 
						||
| 
								 | 
							
								      const Matrix& Pd_LU,
							 | 
						||
| 
								 | 
							
								      const SmartPtr<const Vector>& lu,
							 | 
						||
| 
								 | 
							
								      const VectorSpace& d_space);
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Methods for scaling the gradient of the objective - wraps the
							 | 
						||
| 
								 | 
							
								     *  virtual methods above
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    /** Returns a grad_f scaled version (d_f * D_x^{-1}) of the given vector */
							 | 
						||
| 
								 | 
							
								    virtual SmartPtr<Vector>
							 | 
						||
| 
								 | 
							
								    apply_grad_obj_scaling_NonConst(const SmartPtr<const Vector>& v);
							 | 
						||
| 
								 | 
							
								    /** Returns a grad_f scaled version (d_f * D_x^{-1}) of the given vector */
							 | 
						||
| 
								 | 
							
								    virtual SmartPtr<const Vector>
							 | 
						||
| 
								 | 
							
								    apply_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_grad_obj_scaling_NonConst(const SmartPtr<const Vector>& v);
							 | 
						||
| 
								 | 
							
								    /** Returns a grad_f unscaled version (d_f * D_x^{-1}) of the
							 | 
						||
| 
								 | 
							
								     *  given vector */
							 | 
						||
| 
								 | 
							
								    virtual SmartPtr<const Vector>
							 | 
						||
| 
								 | 
							
								    unapply_grad_obj_scaling(const SmartPtr<const Vector>& v);
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** @name Methods for determining whether scaling for entities is
							 | 
						||
| 
								 | 
							
								     *  done */
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    /** Returns true if the primal x variables are scaled. */
							 | 
						||
| 
								 | 
							
								    virtual bool have_x_scaling()=0;
							 | 
						||
| 
								 | 
							
								    /** Returns true if the equality constraints are scaled. */
							 | 
						||
| 
								 | 
							
								    virtual bool have_c_scaling()=0;
							 | 
						||
| 
								 | 
							
								    /** Returns true if the inequality constraints are scaled. */
							 | 
						||
| 
								 | 
							
								    virtual bool have_d_scaling()=0;
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** This method is called by the IpoptNLP's at a convenient time to
							 | 
						||
| 
								 | 
							
								     *  compute and/or read scaling factors 
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    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;
							 | 
						||
| 
								 | 
							
								  protected:
							 | 
						||
| 
								 | 
							
								    /** Implementation of the initialization method that has to be
							 | 
						||
| 
								 | 
							
								     *  overloaded by for each derived class. */
							 | 
						||
| 
								 | 
							
								    virtual bool InitializeImpl(const OptionsList& options,
							 | 
						||
| 
								 | 
							
								                                const std::string& prefix)=0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Accessor method for the journalist */
							 | 
						||
| 
								 | 
							
								    const Journalist& Jnlst() const
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      return *jnlst_;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  private:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**@name Default Compiler Generated Methods
							 | 
						||
| 
								 | 
							
								     * (Hidden to avoid implicit creation/calling).
							 | 
						||
| 
								 | 
							
								     * These methods are not implemented and 
							 | 
						||
| 
								 | 
							
								     * we do not want the compiler to implement
							 | 
						||
| 
								 | 
							
								     * them for us, so we declare them private
							 | 
						||
| 
								 | 
							
								     * and do not define them. This ensures that
							 | 
						||
| 
								 | 
							
								     * they will not be implicitly created/called. */
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Copy Constructor */
							 | 
						||
| 
								 | 
							
								    NLPScalingObject(const NLPScalingObject&);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Overloaded Equals Operator */
							 | 
						||
| 
								 | 
							
								    void operator=(const NLPScalingObject&);
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    SmartPtr<const Journalist> jnlst_;
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  /** This is a base class for many standard scaling
							 | 
						||
| 
								 | 
							
								   *  techniques. The overloaded classes only need to
							 | 
						||
| 
								 | 
							
								   *  provide the scaling parameters
							 | 
						||
| 
								 | 
							
								   */
							 | 
						||
| 
								 | 
							
								  class StandardScalingBase : public NLPScalingObject
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								  public:
							 | 
						||
| 
								 | 
							
								    /**@name Constructors/Destructors */
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    StandardScalingBase();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Default destructor */
							 | 
						||
| 
								 | 
							
								    virtual ~StandardScalingBase();
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Methods to map scaled and unscaled matrices */
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    /** Returns an obj-scaled version of the given scalar */
							 | 
						||
| 
								 | 
							
								    virtual Number apply_obj_scaling(const Number& f);
							 | 
						||
| 
								 | 
							
								    /** Returns an obj-unscaled version of the given scalar */
							 | 
						||
| 
								 | 
							
								    virtual Number unapply_obj_scaling(const Number& f);
							 | 
						||
| 
								 | 
							
								    /** Returns an x-scaled version of the given vector */
							 | 
						||
| 
								 | 
							
								    virtual SmartPtr<Vector>
							 | 
						||
| 
								 | 
							
								    apply_vector_scaling_x_NonConst(const SmartPtr<const Vector>& v);
							 | 
						||
| 
								 | 
							
								    /** Returns an x-scaled version of the given vector */
							 | 
						||
| 
								 | 
							
								    virtual SmartPtr<const Vector>
							 | 
						||
| 
								 | 
							
								    apply_vector_scaling_x(const SmartPtr<const Vector>& v);
							 | 
						||
| 
								 | 
							
								    /** Returns an x-unscaled version of the given vector */
							 | 
						||
| 
								 | 
							
								    virtual SmartPtr<Vector>
							 | 
						||
| 
								 | 
							
								    unapply_vector_scaling_x_NonConst(const SmartPtr<const Vector>& v);
							 | 
						||
| 
								 | 
							
								    /** Returns an x-unscaled version of the given vector */
							 | 
						||
| 
								 | 
							
								    virtual SmartPtr<const Vector>
							 | 
						||
| 
								 | 
							
								    unapply_vector_scaling_x(const SmartPtr<const Vector>& v);
							 | 
						||
| 
								 | 
							
								    /** Returns an c-scaled version of the given vector */
							 | 
						||
| 
								 | 
							
								    virtual SmartPtr<const Vector>
							 | 
						||
| 
								 | 
							
								    apply_vector_scaling_c(const SmartPtr<const Vector>& v);
							 | 
						||
| 
								 | 
							
								    /** Returns an c-unscaled version of the given vector */
							 | 
						||
| 
								 | 
							
								    virtual SmartPtr<const Vector>
							 | 
						||
| 
								 | 
							
								    unapply_vector_scaling_c(const SmartPtr<const Vector>& v);
							 | 
						||
| 
								 | 
							
								    /** Returns an c-scaled version of the given vector */
							 | 
						||
| 
								 | 
							
								    virtual SmartPtr<Vector>
							 | 
						||
| 
								 | 
							
								    apply_vector_scaling_c_NonConst(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 d-scaled version of the given vector */
							 | 
						||
| 
								 | 
							
								    virtual SmartPtr<const Vector>
							 | 
						||
| 
								 | 
							
								    apply_vector_scaling_d(const SmartPtr<const Vector>& v);
							 | 
						||
| 
								 | 
							
								    /** Returns an d-unscaled version of the given vector */
							 | 
						||
| 
								 | 
							
								    virtual SmartPtr<const Vector>
							 | 
						||
| 
								 | 
							
								    unapply_vector_scaling_d(const SmartPtr<const Vector>& v);
							 | 
						||
| 
								 | 
							
								    /** Returns an d-scaled version of the given vector */
							 | 
						||
| 
								 | 
							
								    virtual SmartPtr<Vector>
							 | 
						||
| 
								 | 
							
								    apply_vector_scaling_d_NonConst(const SmartPtr<const Vector>& v);
							 | 
						||
| 
								 | 
							
								    /** Returns an d-unscaled version of the given vector */
							 | 
						||
| 
								 | 
							
								    virtual SmartPtr<Vector>
							 | 
						||
| 
								 | 
							
								    unapply_vector_scaling_d_NonConst(const SmartPtr<const Vector>& v);
							 | 
						||
| 
								 | 
							
								    /** Returns a scaled version of the jacobian for c.  If the
							 | 
						||
| 
								 | 
							
								     *  overloaded method does not make a new matrix, make sure to set
							 | 
						||
| 
								 | 
							
								     *  the matrix ptr passed in to NULL.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    virtual SmartPtr<const Matrix>
							 | 
						||
| 
								 | 
							
								    apply_jac_c_scaling(SmartPtr<const Matrix> matrix);
							 | 
						||
| 
								 | 
							
								    /** Returns a scaled version of the jacobian for d If the
							 | 
						||
| 
								 | 
							
								     *  overloaded method does not create a new matrix, make sure to
							 | 
						||
| 
								 | 
							
								     *  set the matrix ptr passed in to NULL.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    virtual SmartPtr<const Matrix>
							 | 
						||
| 
								 | 
							
								    apply_jac_d_scaling(SmartPtr<const Matrix> matrix);
							 | 
						||
| 
								 | 
							
								    /** Returns a scaled version of the hessian of the lagrangian If
							 | 
						||
| 
								 | 
							
								     *  the overloaded method does not create a new matrix, make sure
							 | 
						||
| 
								 | 
							
								     *  to set the matrix ptr passed in to NULL.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    virtual SmartPtr<const SymMatrix>
							 | 
						||
| 
								 | 
							
								    apply_hessian_scaling(SmartPtr<const SymMatrix> matrix);
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** @name Methods for determining whether scaling for entities is
							 | 
						||
| 
								 | 
							
								     *  done */
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    virtual bool have_x_scaling();
							 | 
						||
| 
								 | 
							
								    virtual bool have_c_scaling();
							 | 
						||
| 
								 | 
							
								    virtual bool have_d_scaling();
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** This method is called by the IpoptNLP's at a convenient time to
							 | 
						||
| 
								 | 
							
								     *  compute and/or read scaling factors 
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    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);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Methods for IpoptType */
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    static void RegisterOptions(SmartPtr<RegisteredOptions> roptions);
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  protected:
							 | 
						||
| 
								 | 
							
								    /** Overloaded initialization method */
							 | 
						||
| 
								 | 
							
								    virtual bool InitializeImpl(const OptionsList& options,
							 | 
						||
| 
								 | 
							
								                                const std::string& prefix);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** This is the method that has to be overloaded by a particular
							 | 
						||
| 
								 | 
							
								     *  scaling method that somehow computes the scaling vectors dx,
							 | 
						||
| 
								 | 
							
								     *  dc, and dd.  The pointers to those vectors can be NULL, in
							 | 
						||
| 
								 | 
							
								     *  which case no scaling for that item will be done later. */
							 | 
						||
| 
								 | 
							
								    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;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  private:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**@name Default Compiler Generated Methods
							 | 
						||
| 
								 | 
							
								     * (Hidden to avoid implicit creation/calling).
							 | 
						||
| 
								 | 
							
								     * These methods are not implemented and 
							 | 
						||
| 
								 | 
							
								     * we do not want the compiler to implement
							 | 
						||
| 
								 | 
							
								     * them for us, so we declare them private
							 | 
						||
| 
								 | 
							
								     * and do not define them. This ensures that
							 | 
						||
| 
								 | 
							
								     * they will not be implicitly created/called. */
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Copy Constructor */
							 | 
						||
| 
								 | 
							
								    StandardScalingBase(const StandardScalingBase&);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Overloaded Equals Operator */
							 | 
						||
| 
								 | 
							
								    void operator=(const StandardScalingBase&);
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Scaling parameters - we only need to keep copies of
							 | 
						||
| 
								 | 
							
								     *  the objective scaling and the x scaling - the others we can
							 | 
						||
| 
								 | 
							
								     *  get from the scaled matrix spaces.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    /** objective scaling parameter */
							 | 
						||
| 
								 | 
							
								    Number df_;
							 | 
						||
| 
								 | 
							
								    /** x scaling */
							 | 
						||
| 
								 | 
							
								    SmartPtr<Vector> dx_;
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Scaled Matrix Spaces */
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    /** Scaled jacobian of c space */
							 | 
						||
| 
								 | 
							
								    SmartPtr<ScaledMatrixSpace> scaled_jac_c_space_;
							 | 
						||
| 
								 | 
							
								    /** Scaled jacobian of d space */
							 | 
						||
| 
								 | 
							
								    SmartPtr<ScaledMatrixSpace> scaled_jac_d_space_;
							 | 
						||
| 
								 | 
							
								    /** Scaled hessian of lagrangian spacea */
							 | 
						||
| 
								 | 
							
								    SmartPtr<SymScaledMatrixSpace> scaled_h_space_;
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** @name Algorithmic parameters */
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    /** Additional scaling value for the objective function */
							 | 
						||
| 
								 | 
							
								    Number obj_scaling_factor_;
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  /** Class implementing the scaling object that doesn't to any scaling */
							 | 
						||
| 
								 | 
							
								  class NoNLPScalingObject : public StandardScalingBase
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								  public:
							 | 
						||
| 
								 | 
							
								    /**@name Constructors/Destructors */
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    NoNLPScalingObject()
							 | 
						||
| 
								 | 
							
								    {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Default destructor */
							 | 
						||
| 
								 | 
							
								    virtual ~NoNLPScalingObject()
							 | 
						||
| 
								 | 
							
								    {}
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  protected:
							 | 
						||
| 
								 | 
							
								    /** Overloaded from StandardScalingBase */
							 | 
						||
| 
								 | 
							
								    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);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  private:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**@name Default Compiler Generated Methods
							 | 
						||
| 
								 | 
							
								     * (Hidden to avoid implicit creation/calling).
							 | 
						||
| 
								 | 
							
								     * These methods are not implemented and 
							 | 
						||
| 
								 | 
							
								     * we do not want the compiler to implement
							 | 
						||
| 
								 | 
							
								     * them for us, so we declare them private
							 | 
						||
| 
								 | 
							
								     * and do not define them. This ensures that
							 | 
						||
| 
								 | 
							
								     * they will not be implicitly created/called. */
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Copy Constructor */
							 | 
						||
| 
								 | 
							
								    NoNLPScalingObject(const NoNLPScalingObject&);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Overloaded Equals Operator */
							 | 
						||
| 
								 | 
							
								    void operator=(const NoNLPScalingObject&);
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								} // namespace Ipopt
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif
							 |