Ipopt
trunk
|
00001 // Copyright (C) 2007 International Business Machines and others. 00002 // All Rights Reserved. 00003 // This code is published under the Eclipse Public License. 00004 // 00005 // $Id$ 00006 // 00007 // Authors: Andreas Waechter IBM 2007-05-21 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 } // namespace Ipopt 00136 #endif