Cbc  2.10.5
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
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  {
40  return start_;
41  }
43  inline const int *which() const
44  {
45  return indices_;
46  }
48  inline const double *bounds() const
49  {
50  return bound_;
51  }
53 
55 
58 
60  OsiSolverBranch(const OsiSolverBranch &rhs);
61 
64 
67 
69 
70 private:
72 
73  int start_[5];
76  int *indices_;
78  double *bound_;
80 };
81 //#############################################################################
82 
89 
90 public:
92 
93  void createResult(const OsiSolverInterface &solver, const double *lowerBefore,
95  const double *upperBefore);
96 
98  void restoreResult(OsiSolverInterface &solver) const;
99 
101  inline const CoinWarmStartBasis &basis() const
102  {
103  return basis_;
104  }
105 
107  inline double objectiveValue() const
108  {
109  return objectiveValue_;
110  }
111 
113  inline const double *primalSolution() const
114  {
115  return primalSolution_;
116  }
117 
119  inline const double *dualSolution() const
120  {
121  return dualSolution_;
122  }
123 
125  inline const OsiSolverBranch &fixed() const
126  {
127  return fixed_;
128  }
130 
132 
133  OsiSolverResult();
135 
137  OsiSolverResult(const OsiSolverInterface &solver, const double *lowerBefore,
138  const double *upperBefore);
139 
141  OsiSolverResult(const OsiSolverResult &rhs);
142 
145 
148 
150 
151 private:
153 
154  double objectiveValue_;
161  double *dualSolution_;
165 };
166 #endif
167 
168 /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2
169 */
int * indices_
Column numbers (if >= numberColumns treat as rows)
void addBranch(int iColumn, double value)
Add a simple branch (i.e. first sets ub of floor(value), second lb of ceil(value)) ...
~OsiSolverBranch()
Destructor.
int start_[5]
Start of lower first, upper first, lower second, upper second.
const double * bounds() const
Bounds.
Solver Result Class.
const double * dualSolution() const
Dual solution.
The default COIN simplex (basis-oriented) warm start class.
Abstract Base Class for describing an interface to a solver.
const int * starts() const
Starts.
double objectiveValue() const
Objective value (as minimization)
CoinWarmStartBasis basis_
Warm start information.
double * bound_
New bounds.
const int * which() const
Which variables.
OsiSolverResult()
Default Constructor.
void createResult(const OsiSolverInterface &solver, const double *lowerBefore, const double *upperBefore)
Create result.
const OsiSolverBranch & fixed() const
Extra fixed.
void restoreResult(OsiSolverInterface &solver) const
Restore result.
double objectiveValue_
Value of objective (if >= OsiSolverInterface::getInfinity() then infeasible)
double * primalSolution_
Primal solution (numberColumns)
OsiSolverResult & operator=(const OsiSolverResult &rhs)
Assignment operator.
~OsiSolverResult()
Destructor.
OsiSolverBranch fixed_
Which extra variables have been fixed (only way==-1 counts)
OsiSolverBranch()
Default Constructor.
const CoinWarmStartBasis & basis() const
Get basis.
OsiSolverBranch & operator=(const OsiSolverBranch &rhs)
Assignment operator.
const double * primalSolution() const
Primal solution.
Solver Branch Class.
bool feasibleOneWay(const OsiSolverInterface &solver) const
Returns true if current solution satsifies one side of branch.
double * dualSolution_
Dual solution (numberRows)
void applyBounds(OsiSolverInterface &solver, int way) const
Apply bounds.