coin-Bcp
CSP_userexits.hpp
Go to the documentation of this file.
1 // Copyright (C) 2005, International Business Machines
2 // Corporation and others. All Rights Reserved.
3 #ifndef CSP_USEREXITS_H
4 #define CSP_USEREXITS_H
5 
6 #include <algorithm>
7 #include <vector>
8 
10 
11 class CSP_subProblem;
12 
13 class UserData {
14 public:
17  int cutMode;
18  int nBaseRows;
19  std::vector<const double*> denseSols;
20  std::vector<double> objval;
21 public:
22  void clear() {
23  for (int i = denseSols.size() - 1; i >= 0; --i)
24  delete[] denseSols[i];
25  denseSols.clear();
26  objval.clear();
27  }
28  bool addSol(const double* sol, double val) {
29  const int size = solver->getNumCols();
30  for (int i = denseSols.size() - 1; i >= 0; --i) {
31  if (fabs(objval[i] - val) > 1e-3)
32  continue;
33  if (std::equal(sol, sol + size, denseSols[i])) {
34  delete[] sol;
35  return false;
36  }
37  }
38  denseSols.push_back(sol);
39  objval.push_back(val);
40  return true;
41  }
42  int numSolutions() {
43  return denseSols.size();
44  }
45  const double* solution(int i) {
46  return denseSols[i];
47  }
48 
49  UserData() : subProblem(0), solver(0), cutMode(0) {}
50  ~UserData() { clear(); }
51 };
52 
54  int baseRows);
55 
56 #endif
virtual int getNumCols() const
Get number of columns.
void clear()
std::vector< const double * > denseSols
int numSolutions()
Clp Solver Interface.
CSP_subProblem * subProblem
std::vector< double > objval
bool addSol(const double *sol, double val)
const double * solution(int i)
UserData * initializeUserData(CSP_subProblem *sp, OsiClpSolverInterface *solver, int baseRows)
OsiClpSolverInterface * solver