Dip  0.92.4
DecompSolution.h
Go to the documentation of this file.
1 //===========================================================================//
2 // This file is part of the DIP Solver Framework. //
3 // //
4 // DIP is distributed under the Eclipse Public License as part of the //
5 // COIN-OR repository (http://www.coin-or.org). //
6 // //
7 // Authors: Matthew Galati, SAS Institute Inc. (matthew.galati@sas.com) //
8 // Ted Ralphs, Lehigh University (ted@lehigh.edu) //
9 // Jiadong Wang, Lehigh University (jiw408@lehigh.edu) //
10 // //
11 // Copyright (C) 2002-2019, Lehigh University, Matthew Galati, Ted Ralphs //
12 // All Rights Reserved. //
13 //===========================================================================//
14 
15 #ifndef DECOMP_SOLUTION_INCLUDED
16 #define DECOMP_SOLUTION_INCLUDED
17 
18 //TODO: make this public AlpsDecompSolution?
20 protected:
22  int m_size;
23 
25  double* m_values;
26 
28  double m_quality;
29 
30 public:
34  inline const int getSize() const {
35  return m_size;
36  }
37 
39  inline const double* getValues() const {
40  return m_values;
41  }
42 
44  inline const double getQuality() const {
45  return m_quality;
46  }
47 
48 public:
50  virtual void print(int precision = 4,
51  std::ostream& os = std::cout) const {
52  int i;
53  os << std::setprecision(precision);
54  os << std::setiosflags(std::ios::fixed | std::ios::showpoint)
55  << std::setw(14);
56  os << "-------------------------" << std::endl;
57  os << "Quality = " << getQuality() << std::endl;
58  os << "Solution = " << std::endl;
59 
60  for (i = 0; i < m_size; i++) {
61  if (!UtilIsZero(m_values[i])) {
62  os << std::setw(15) << i << " " << m_values[i] << std::endl;
63  }
64  }
65 
66  os << "-------------------------" << std::endl;
67  os << std::resetiosflags(std::ios::fixed | std::ios::showpoint |
68  std::ios::scientific);
69  }
70 
72  virtual void print(const std::vector<std::string>& colNames,
73  int precision = 2,
74  std::ostream& os = std::cout) const {
75  int i;
76  os << std::setprecision(precision);
77  os << std::setiosflags(std::ios::fixed | std::ios::showpoint);
78 
79  //os << "-------------------------" << std::endl;
80  //os << "obj= " << getQuality() << std::endl;
81  for (i = 0; i < m_size; i++) {
82  if (!UtilIsZero(m_values[i])) {
83  os << std::setw(25) << colNames[i] << " " << m_values[i] << std::endl;
84  }
85  }
86 
87  //os << "-------------------------" << std::endl;
88  os << std::resetiosflags(std::ios::fixed | std::ios::showpoint |
89  std::ios::scientific);
90  }
91 
92 public:
94  DecompSolution(const DecompSolution& source) :
95  m_size(source.m_size),
96  m_values(0),
97  m_quality(source.m_quality) {
98  m_values = new double[m_size];
99  CoinAssertHint(m_values, "Error: Out of Memory");
100  memcpy(m_values, source.m_values, m_size * sizeof(double));
101  }
103  if (this != &rhs) {
104  m_size = rhs.m_size;
105  m_quality = rhs.m_quality;
106  m_values = new double[m_size];
107  CoinAssertHint(m_values, "Error: Out of Memory");
108  memcpy(m_values, rhs.m_values, m_size * sizeof(double));
109  }
110 
111  return *this;
112  }
113 
114 public:
119  m_size(0),
120  m_values(0),
121  m_quality(1e75) {
122  }
123 
125  DecompSolution(const int size,
126  const double* values,
127  const double quality) :
128  m_size(size),
129  m_values(0),
130  m_quality(quality) {
131  CoinAssert(m_size > 0);
132  m_values = new double[m_size];
133  CoinAssertHint(m_values, "Error: Out of Memory");
134  memcpy(m_values, values, m_size * sizeof(double));
135  }
136 
137  DecompSolution(const int size,
138  const double* values,
139  const double* cost) :
140  m_size(size),
141  m_values(0),
142  m_quality(0.0) {
143  CoinAssert(m_size > 0);
144  m_values = new double[m_size];
145  CoinAssertHint(m_values, "Error: Out of Memory");
146  memcpy(m_values, values, m_size * sizeof(double));
147 
148  //---
149  //--- calculate quality
150  //---
151  for (int i = 0; i < size; i++) {
152  m_quality += cost[i] * values[i];
153  }
154  }
155 
156  virtual ~DecompSolution() {
158  };
159 };
160 
161 #endif
DecompSolution(const int size, const double *values, const double *cost)
Default constructor.
const double * getValues() const
Get solution values.
double * m_values
Solution values.
virtual void print(int precision=4, std::ostream &os=std::cout) const
Print solution.
bool UtilIsZero(const double x, const double etol=1.0e-8)
Definition: UtilMacros.h:272
virtual ~DecompSolution()
Default constructor.
int m_size
Length of solution (number of columns).
const int getSize() const
Get length of solution.
double m_quality
Quality of solution (bound wrt to objective).
#define UTIL_DELARR(x)
Definition: UtilMacros.h:29
DecompSolution(const int size, const double *values, const double quality)
Constructor.
#define CoinAssertHint(expression, hint)
Definition: CoinError.hpp:184
DecompSolution & operator=(const DecompSolution &rhs)
const double getQuality() const
Get quality of solution.
virtual void print(const std::vector< std::string > &colNames, int precision=2, std::ostream &os=std::cout) const
Print solution in MIPLIB2010 solution checker format.
DecompSolution(const DecompSolution &source)
#define CoinAssert(expression)
Definition: CoinError.hpp:183
DecompSolution()
Default constructor.