00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef __IPGRADIENTSCALING_HPP__
00010 #define __IPGRADIENTSCALING_HPP__
00011
00012 #include "IpNLPScaling.hpp"
00013 #include "IpNLP.hpp"
00014
00015 namespace Ipopt
00016 {
00021 class GradientScaling : public StandardScalingBase
00022 {
00023 public:
00026 GradientScaling(const SmartPtr<NLP>& nlp)
00027 :
00028 StandardScalingBase(),
00029 nlp_(nlp)
00030 {}
00031
00033 virtual ~GradientScaling()
00034 {}
00036
00040 static void RegisterOptions(const SmartPtr<RegisteredOptions>& roptions);
00042
00043 protected:
00045 bool InitializeImpl(const OptionsList& options,
00046 const std::string& prefix);
00047
00048 virtual void DetermineScalingParametersImpl(
00049 const SmartPtr<const VectorSpace> x_space,
00050 const SmartPtr<const VectorSpace> c_space,
00051 const SmartPtr<const VectorSpace> d_space,
00052 const SmartPtr<const MatrixSpace> jac_c_space,
00053 const SmartPtr<const MatrixSpace> jac_d_space,
00054 const SmartPtr<const SymMatrixSpace> h_space,
00055 const Matrix& Px_L, const Vector& x_L,
00056 const Matrix& Px_U, const Vector& x_U,
00057 Number& df,
00058 SmartPtr<Vector>& dx,
00059 SmartPtr<Vector>& dc,
00060 SmartPtr<Vector>& dd);
00061
00062 private:
00063
00072
00074 GradientScaling(const GradientScaling&);
00075
00077 void operator=(const GradientScaling&);
00079
00081 SmartPtr<NLP> nlp_;
00082
00084 Number scaling_max_gradient_;
00085
00087 Number scaling_obj_target_gradient_;
00088
00090 Number scaling_constr_target_gradient_;
00091 };
00092 }
00093 #endif