00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef __IPEQUILIBRATIONSCALING_HPP__
00010 #define __IPEQUILIBRATIONSCALING_HPP__
00011
00012 #include "IpNLPScaling.hpp"
00013 #include "IpNLP.hpp"
00014
00015 namespace Ipopt
00016 {
00021 class EquilibrationScaling : public StandardScalingBase
00022 {
00023 public:
00026 EquilibrationScaling(const SmartPtr<NLP>& nlp)
00027 :
00028 StandardScalingBase(),
00029 nlp_(nlp)
00030 {}
00031
00033 virtual ~EquilibrationScaling()
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 EquilibrationScaling(const EquilibrationScaling&);
00075
00077 void operator=(const EquilibrationScaling&);
00079
00081 SmartPtr<NLP> nlp_;
00082
00085 Number point_perturbation_radius_;
00086 };
00087
00092 class PointPerturber : public ReferencedObject
00093 {
00094 public:
00097 PointPerturber(const Vector& reference_point,
00098 Number random_pert_radius,
00099 const Matrix& Px_L, const Vector& x_L,
00100 const Matrix& Px_U, const Vector& x_U);
00101
00103 virtual ~PointPerturber()
00104 {}
00106
00108 SmartPtr<Vector> MakeNewPerturbedPoint() const;
00109
00110 private:
00111
00120
00122 PointPerturber(const PointPerturber&);
00123
00125 void operator=(const PointPerturber&);
00127
00129 SmartPtr<Vector> ref_point_;
00130
00132 SmartPtr<Vector> pert_dir_;
00133 };
00134
00135 }
00136 #endif