Dip  0.92.4
AP3_Instance.h
Go to the documentation of this file.
1 //===========================================================================//
2 // This file is part of the Decomp Solver Framework. //
3 // //
4 // Decomp is distributed under the Common 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, and Ted Ralphs//
12 // All Rights Reserved. //
13 //===========================================================================//
14 
15 #ifndef AP3_INSTANCE_INCLUDED
16 #define AP3_INSTANCE_INCLUDED
17 
18 // --------------------------------------------------------------------- //
19 #include "UtilMacros.h"
20 #include "CoinError.hpp"
21 using namespace std;
22 // --------------------------------------------------------------------- //
23 
31 // --------------------------------------------------------------------- //
32 class AP3_Instance {
33  public:
36 
39 
42 
44  double * m_assigncost;
45 
47  string m_instance;
48 
50  double m_optBound;
51 
52  public:
54  void readOptimalBound(const char * fileName) {
55  string buffer;
56  ifstream is;
57 
58  UtilOpenFile(is, fileName);
59 
60  is >> buffer
61  >> m_optBound;
62 
63  cout << "\nOPTIMAL BOUND = " << m_optBound << "\n";
64 
65  is.close();
66  }
67 
68 
69 
70  //should this be in instance or decompapp?
71  inline void index3Inv(const int index,
72  int & ind1,
73  int & ind2,
74  int & ind3) const {
75  int n = m_dimension;
76  int nsq = n * n;
77  int indexMod;
78  ind1 = index / nsq;
79  indexMod = index % nsq;
80  ind2 = indexMod / n;
81  ind3 = indexMod % n;
82  }
83 
84 
86  void readInstance(const char * fileName) {
87  int c, n_cols, dimension;
88  string buffer;
89  ifstream is;
90 
91  UtilOpenFile(is, fileName);
92 
93  //---
94  //--- Data Format (Example) - Grundel
95  //--- overall dimension 3
96  //--- dimension of each vector 5 5 5
97  //--- cost of assignment (i,j,k) 18 15 14 16 16
98  //--- 19 ...
99  //---
100  //--- NOTE: assume balanced (each vector has same dimension)
101  //---
102  is >> dimension;
103  CoinAssert(dimension == 3);
104 
105  is >> m_dimension;
106  getline(is, buffer);
107 
108  n_cols = m_dimension * m_dimension * m_dimension;
109  m_assigncost = new double[n_cols];
110  CoinAssertHint(m_assigncost, "Error: Out of Memory");
111  for(c = 0; c < n_cols; c++){
112  is >> m_assigncost[c];
113 
114  //int ind1,ind2,ind3;
115  //index3Inv(c, ind1, ind2, ind3);
116  //printf("(%d,%d,%d): %g\n", ind1+1, ind2+1, ind3+1, m_assigncost[c]);
117  }
118  is.close();
119 
120  //---
121  //--- initialize other data members
122  //---
123  m_ncolsFull = m_dimension * m_dimension * m_dimension;
124  m_nrowsFull = m_dimension * m_dimension * 3;
125  }
126 
127  public:
132  m_dimension(0),
133  m_ncolsFull(0),
134  m_nrowsFull(0),
135  m_assigncost(0),
136  m_optBound(COIN_DBL_MAX)
137  {}
138 
140  AP3_Instance(const char * fileName) :
141  m_dimension(0),
142  m_ncolsFull(0),
143  m_nrowsFull(0),
144  m_assigncost(0),
145  m_optBound(COIN_DBL_MAX)
146  {
147  readInstance(fileName);
148  }
149 
150  virtual ~AP3_Instance() {
151  UTIL_DELARR(m_assigncost);
152  };
153 };
154 
155 #endif
void index3Inv(const int index, int &ind1, int &ind2, int &ind3) const
Definition: AP3_Instance.h:71
int m_ncolsFull
The number of cols in full formulation.
Definition: AP3_Instance.h:38
double m_optBound
Known optimal bound (for debugging)
Definition: AP3_Instance.h:50
int m_nrowsFull
The number of rows in full formulation.
Definition: AP3_Instance.h:41
AP3_Instance(const char *fileName)
Constructor.
Definition: AP3_Instance.h:140
#define UTIL_DELARR(x)
Definition: UtilMacros.h:29
#define CoinAssertHint(expression, hint)
Definition: CoinError.hpp:184
double * m_assigncost
Cost of assignment (size = dimension^3).
Definition: AP3_Instance.h:44
void readOptimalBound(const char *fileName)
Read the optimal bound from file.
Definition: AP3_Instance.h:54
void UtilOpenFile(ifstream &fs, const char *fileName)
Definition: UtilMacros.h:526
int m_dimension
The dimension of the instance.
Definition: AP3_Instance.h:35
virtual ~AP3_Instance()
Default constructor.
Definition: AP3_Instance.h:150
string m_instance
Name of AP3 instance.
Definition: AP3_Instance.h:47
AP3_Instance()
Default constructor.
Definition: AP3_Instance.h:131
void readInstance(const char *fileName)
Read in an instance from data file.
Definition: AP3_Instance.h:86
const double COIN_DBL_MAX
Definition: CoinFinite.hpp:18
#define CoinAssert(expression)
Definition: CoinError.hpp:183