OsiSolverBranch.hpp
Go to the documentation of this file.
1 // Copyright (C) 2005, International Business Machines
2 // Corporation and others. All Rights Reserved.
3 // This code is licensed under the terms of the Eclipse Public License (EPL).
4 
5 #ifndef OsiSolverBranch_H
6 #define OsiSolverBranch_H
7 
9 #include "CoinWarmStartBasis.hpp"
10 
11 //#############################################################################
12 
19 
20 public:
22 
23  void addBranch(int iColumn, double value);
25 
27  void addBranch(int way,int numberTighterLower, const int * whichLower, const double * newLower,
28  int numberTighterUpper, const int * whichUpper, const double * newUpper);
30  void addBranch(int way,int numberColumns,const double * oldLower, const double * newLower,
31  const double * oldUpper, const double * newUpper);
32 
34  void applyBounds(OsiSolverInterface & solver,int way) const;
36  bool feasibleOneWay(const OsiSolverInterface & solver) const;
38  inline const int * starts() const
39  { return start_;}
41  inline const int * which() const
42  { return indices_;}
44  inline const double * bounds() const
45  { return bound_;}
47 
48 
50 
51  OsiSolverBranch();
53 
55  OsiSolverBranch(const OsiSolverBranch & rhs);
56 
59 
62 
64 
65 private:
67 
68  int start_[5];
71  int * indices_;
73  double * bound_;
75 };
76 //#############################################################################
77 
84 
85 public:
87 
88  void createResult(const OsiSolverInterface & solver,const double * lowerBefore,
90  const double * upperBefore);
91 
93  void restoreResult(OsiSolverInterface & solver) const;
94 
96  inline const CoinWarmStartBasis & basis() const
97  { return basis_;}
98 
100  inline double objectiveValue() const
101  { return objectiveValue_;}
102 
104  inline const double * primalSolution() const
105  { return primalSolution_;}
106 
108  inline const double * dualSolution() const
109  { return dualSolution_;}
110 
112  inline const OsiSolverBranch & fixed() const
113  { return fixed_;}
115 
116 
118 
119  OsiSolverResult();
121 
123  OsiSolverResult(const OsiSolverInterface & solver,const double * lowerBefore,
124  const double * upperBefore);
125 
127  OsiSolverResult(const OsiSolverResult & rhs);
128 
131 
133  ~OsiSolverResult ();
134 
136 
137 private:
139 
140  double objectiveValue_;
145  double * primalSolution_;
147  double * dualSolution_;
151 };
152 #endif
double objectiveValue() const
Objective value (as minimization)
OsiSolverBranch()
Default Constructor.
OsiSolverBranch & operator=(const OsiSolverBranch &rhs)
Assignment operator.
void addBranch(int iColumn, double value)
Add a simple branch (i.e. first sets ub of floor(value), second lb of ceil(value)) ...
double * primalSolution_
Primal solution (numberColumns)
const double * primalSolution() const
Primal solution.
int * indices_
Column numbers (if >= numberColumns treat as rows)
OsiSolverResult()
Default Constructor.
double objectiveValue_
Value of objective (if >= OsiSolverInterface::getInfinity() then infeasible)
Solver Result Class.
OsiSolverBranch fixed_
Which extra variables have been fixed (only way==-1 counts)
bool feasibleOneWay(const OsiSolverInterface &solver) const
Returns true if current solution satsifies one side of branch.
const int * starts() const
Starts.
CoinWarmStartBasis basis_
Warm start information.
const OsiSolverBranch & fixed() const
Extra fixed.
void createResult(const OsiSolverInterface &solver, const double *lowerBefore, const double *upperBefore)
Create result.
double * bound_
New bounds.
double * dualSolution_
Dual solution (numberRows)
Abstract Base Class for describing an interface to a solver.
const double * bounds() const
Bounds.
const int * which() const
Which variables.
void restoreResult(OsiSolverInterface &solver) const
Restore result.
const CoinWarmStartBasis & basis() const
Get basis.
const double * dualSolution() const
Dual solution.
Solver Branch Class.
~OsiSolverBranch()
Destructor.
The default COIN simplex (basis-oriented) warm start class.
OsiSolverResult & operator=(const OsiSolverResult &rhs)
Assignment operator.
void applyBounds(OsiSolverInterface &solver, int way) const
Apply bounds.
~OsiSolverResult()
Destructor.
int start_[5]
Start of lower first, upper first, lower second, upper second.