KrisLibrary  1.0.0
LinearProgram.h
1 #ifndef OPTIMIZATION_LINEAR_PROGRAM_H
2 #define OPTIMIZATION_LINEAR_PROGRAM_H
3 
4 #include <KrisLibrary/math/matrix.h>
5 #include <KrisLibrary/math/sparsematrix.h>
6 #include <KrisLibrary/math/sparsevector.h>
7 #include <iosfwd>
8 #include <vector>
9 
10 namespace Optimization {
11 using namespace Math;
12 
47 {
48  enum BoundType { Free, LowerBound, UpperBound, Bounded, Fixed };
49  void Resize(int m,int n);
50  void AddConstraint(Real qi,const Vector& Ai,Real pi);
51  void AddConstraints(int num);
52  void AddVariable(Real li=-Inf,Real ui=Inf);
53  void AddVariables(int num);
54  bool IsValid() const;
55  BoundType ConstraintType(int i) const;
56  BoundType VariableType(int j) const;
57  inline static bool HasLowerBound(BoundType b) { return b==LowerBound || b==Bounded; }
58  inline static bool HasUpperBound(BoundType b) { return b==UpperBound || b==Bounded; }
59  bool HasEqualities() const;
60  bool HasInequalities() const;
61  bool HasBounds() const;
62  Real EqualityError(const Vector& x) const;
63  Real InequalityMargin(const Vector& x) const;
64  Real BoundMargin(const Vector& x) const;
65  Real InfeasibilityMeasure(const Vector& x) const;
66  bool SatisfiesEqualities(const Vector& x,Real tol=Epsilon) const;
67  bool SatisfiesInequalities(const Vector& x) const;
68  bool SatisfiesBounds(const Vector& x) const;
69  bool IsFeasible(const Vector& x,Real equalityTol=Epsilon) const;
70  void ProjectDirection(Vector& v) const;
71  void Print(std::ostream& out) const;
72  void GetSimpleForm(Matrix& Aeq,Vector& beq,Matrix& Aineq,Vector& bineq) const;
73  void SetSimpleForm(const Matrix& Aeq,const Vector& beq,const Matrix& Aineq,const Vector& bineq);
74  void SetRef(const LinearConstraints&);
75  void Copy(const LinearConstraints&);
76  void Swap(LinearConstraints&);
77  const LinearConstraints& operator = (const LinearConstraints& lp) { Copy(lp); return *this; }
78 
79  Matrix A;
80  Vector q,p;
81  Vector l,u;
82 };
83 
93 {
94  typedef LinearConstraints::BoundType BoundType;
95  void Resize(int m,int n);
96  void AddConstraint(Real qi,const SparseVector& Ai,Real pi);
97  void AddConstraints(int num);
98  void AddVariable(Real li=-Inf,Real ui=Inf);
99  void AddVariables(int num);
100  bool IsValid() const;
101  BoundType ConstraintType(int i) const;
102  BoundType VariableType(int j) const;
103  bool HasEqualities() const;
104  bool HasInequalities() const;
105  bool HasBounds() const;
106  inline static bool HasLowerBound(BoundType b) { return LinearConstraints::HasLowerBound(b); }
107  inline static bool HasUpperBound(BoundType b) { return LinearConstraints::
108 HasUpperBound(b); }
109  Real EqualityError(const Vector& x) const;
110  Real InequalityMargin(const Vector& x) const;
111  Real BoundMargin(const Vector& x) const;
112  Real InfeasibilityMeasure(const Vector& x) const;
113  bool SatisfiesEqualities(const Vector& x,Real tol=Epsilon) const;
114  bool SatisfiesInequalities(const Vector& x) const;
115  bool SatisfiesBounds(const Vector& x) const;
116  bool IsFeasible(const Vector& x,Real equalityTol=Epsilon) const;
117  void ProjectDirection(Vector& v) const;
118  void Print(std::ostream& out) const;
119  void GetSimpleForm(SparseMatrix& Aeq,Vector& beq,SparseMatrix& Aineq,Vector& bineq) const;
120  void SetSimpleForm(const SparseMatrix& Aeq,const Vector& beq,const SparseMatrix& Aineq,const Vector& bineq);
121  void Copy(const LinearConstraints_Sparse&);
122  void Swap(LinearConstraints_Sparse&);
123  const LinearConstraints_Sparse& operator = (const LinearConstraints_Sparse& lp) { Copy(lp); return *this; }
124 
125  SparseMatrix A;
126  Vector q,p;
127  Vector l,u;
128 };
129 
130 
140 {
141  enum Result { Feasible, Infeasible, Unbounded, Error };
142  LinearProgram();
143  void Resize(int m,int n);
144  void AddVariable(Real l=-Inf,Real u=Inf);
145  void AddVariables(int num);
146  bool IsValid() const;
147  Real Objective(const Vector& x) const;
148  void Print(std::ostream& out) const;
149  const LinearProgram& operator = (const LinearProgram&);
150 
151  bool minimize;
152  Vector c;
153 };
154 
159 {
160  typedef LinearProgram::Result Result;
161  typedef LinearProgram::BoundType BoundType;
162 
164  void Resize(int m,int n);
165  void AddVariable(Real l=-Inf,Real u=Inf);
166  void AddVariables(int num);
167  bool IsValid() const;
168  Real Objective(const Vector& x) const;
169  void Print(std::ostream& out) const;
170  const LinearProgram_Sparse& operator = (const LinearProgram_Sparse&);
171 
172  bool minimize;
173  Vector c;
174 };
175 
176 } //namespace Optimization
177 
178 #endif
Namespace for classes and functions in the Optimization package.
Definition: CSet.h:7
Linear program definition with sparse matrix A.
Definition: LinearProgram.h:158
Definition: SparseVectorTemplate.h:14
Linear constraints for LP&#39;s and QP&#39;sRepresents the constraints.
Definition: LinearProgram.h:46
Real InequalityMargin(VectorFieldFunction *c, const Vector &x, int *index)
Returns C(x).minElement() (and the index if non=NULL)
Definition: Newton.cpp:46
Linear program definition.Represents the LP min/max c.x subject to qi <= ai.x <= pi lj <= xj <= u...
Definition: LinearProgram.h:139
Contains all definitions in the Math package.
Definition: WorkspaceBound.h:12
Sparse linear constraints for LP&#39;s and QP&#39;sUnlike dense constraints, AddVariable/AddConstraint are re...
Definition: LinearProgram.h:92