Dip 0.95.0
Loading...
Searching...
No Matches
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?
20protected:
22 int m_size;
23
25 double* m_values;
26
28 double m_quality;
29
30public:
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
48public:
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
92public:
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
114public:
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
#define CoinAssert(expression)
#define CoinAssertHint(expression, hint)
bool UtilIsZero(const double x, const double etol=1.0e-8)
Definition UtilMacros.h:548
#define UTIL_DELARR(x)
Definition UtilMacros.h:65
DecompSolution(const int size, const double *values, const double quality)
Constructor.
virtual ~DecompSolution()
int m_size
Length of solution (number of columns).
DecompSolution & operator=(const DecompSolution &rhs)
double m_quality
Quality of solution (bound wrt to objective).
const int getSize() const
Get length of solution.
DecompSolution()
Default constructor.
virtual void print(int precision=4, std::ostream &os=std::cout) const
Print solution.
const double * getValues() const
Get solution values.
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 int size, const double *values, const double *cost)
double * m_values
Solution values.
DecompSolution(const DecompSolution &source)