KrisLibrary  1.0.0
Newton.h
1 #ifndef OPTIMIZATION_NEWTON_H
2 #define OPTIMIZATION_NEWTON_H
3 
6 #include <KrisLibrary/math/SVDecomposition.h>
7 #include <vector>
8 
9 namespace Math {
10  template <class T> class SparseMatrixTemplate_RM;
11  typedef SparseMatrixTemplate_RM<Real> SparseMatrix;
12 }
13 
14 namespace Optimization {
15 using namespace Math;
16 
25 {
26 public:
28  virtual ~NewtonRoot();
29  bool GlobalSolve(int& iters,ConvergenceResult* res=NULL);
30  ConvergenceResult Solve(int& iters);
31  ConvergenceResult Solve_Sparse(int& iters);
32  bool LineMinimization(const Vector& g, const Vector& p, Real *f);
33  Real MaxDistance(const Vector& x);
34  virtual bool SolveUnderconstrainedLS(const Matrix& A,const Vector& b,Vector& x);
35  virtual bool SolveUnderconstrainedLS(const SparseMatrix& A,const Vector& b,Vector& x);
36  virtual Real Merit(); //evaluates the merit function at x
37 
38  Vector x;
39  VectorFieldFunction* func;
40  Real tolf,tolmin,tolx;
41  Real stepMax;
42  Real lambda;
43  Vector bmin,bmax;
44  bool sparse;
46  int verbose;
47  int debug;
48 
49  //temporary
50  RobustSVD<Real> svd;
51  Vector fx, g, p, xold;
52  Matrix fJx;
53 };
54 
60 {
61 public:
63  bool GlobalSolve(int& iters,ConvergenceResult* res=NULL);
64  ConvergenceResult SolveConstrained(int& iters);
65  ConvergenceResult SolveConstrained2(int& iters);
66  ConvergenceResult SolveConstrained2_Sparse(int& iters);
67  ConvergenceResult SolveConstrained_SLP(int& iters);
68  virtual Real Merit();
69 
71  Real tolc;
72 
73  //temporary
74  Vector cx;
75  std::vector<int> activeSetC,activeSetBound;
76  Matrix A; //solve for A*dx = rhs
77  Vector rhs;
78 };
79 
83 bool SatisfiesEquality(VectorFieldFunction*C,const Vector& x,Real tol=Epsilon);
85 bool SatisfiesInequality(VectorFieldFunction*C,const Vector& x,Real margin=Zero);
87 Real InequalityMargin(VectorFieldFunction* c,const Vector& x,int* index=NULL);
88 
89 } //namespace Optimization
90 
91 #endif
Namespace for classes and functions in the Optimization package.
Definition: CSet.h:7
Abstract base classes for function interfaces.
Real lambda
damped-least-squares constant
Definition: Newton.h:42
bool sparse
set to true if should use a sparse least-squares solver.
Definition: Newton.h:44
Vector bias
set this to a bias vector to solve for min ||x-bias|| s.t. func(x)=0
Definition: Newton.h:45
Numerical root-solving routines.
A function from R^n to R^m.
Definition: function.h:134
A globally convergent Newton&#39;s method for multidimensional root solving. Solves for func(x)=0...
Definition: Newton.h:24
Vector bmax
optional bound constraints
Definition: Newton.h:43
bool SatisfiesEquality(VectorFieldFunction *C, const Vector &x, Real tol)
Returns true if C(x)<=tol, pointwise.
Definition: Newton.cpp:31
Real InequalityMargin(VectorFieldFunction *c, const Vector &x, int *index)
Returns C(x).minElement() (and the index if non=NULL)
Definition: Newton.cpp:46
A globally convergent Newton&#39;s method with inequality constraints c(x) >= 0.
Definition: Newton.h:59
Real SurfaceDistance(VectorFieldFunction *C, const Vector &x)
Returns C(x).maxElement()
Definition: Newton.cpp:24
Contains all definitions in the Math package.
Definition: WorkspaceBound.h:12
bool SatisfiesInequality(VectorFieldFunction *C, const Vector &x, Real margin)
Returns true if C(x) >= margin.
Definition: Newton.cpp:39
Real stepMax
maximum distance to step
Definition: Newton.h:41