Dip-All  0.91.0
ATM_DecompApp.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 // Author: Matthew Galati, Lehigh University //
8 // //
9 // Copyright (C) 2002-2015, Lehigh University, Matthew Galati, and Ted Ralphs//
10 // All Rights Reserved. //
11 //===========================================================================//
12 
13 #ifndef ATM_DECOMPAPP_INCLUDED
14 #define ATM_DECOMPAPP_INCLUDED
15 
16 //===========================================================================//
17 #include "DecompApp.h"
18 //===========================================================================//
19 #include "ATM_Param.h"
20 #include "ATM_Instance.h"
21 
22 
23 //===========================================================================//
34 //===========================================================================//
35 class ATM_DecompApp : public DecompApp {
36 private:
38  const string m_classTag;
39 
42 
45 
47  double * m_objective;
48 
50  vector<DecompConstraintSet*> m_models;
51 
52 public:
53  /* @name Inherited (from virtual) methods. */
54  virtual bool APPisUserFeasible(const double * x,
55  const int nCols,
56  const double tolZero);
57 
58 public:
62  void initializeApp(UtilParameters & utilParam);
63 
64  /* Create models. */
65  void createModels();
66 
67 
68  //create model
70  const int atmIndex);
72  const int atmIndex);
74  const int atmIndex);
75 
76  DecompConstraintSet * createModelCore1(bool includeCount = true);
78  bool includeCount = true);
79 
82 
85 
86  //counts
87  inline const int numCoreCols() const {
88  //--- for a in A, d in D:
89  //--- f+[a,d], f-[a,d] >= 0
90  //--- f-[a,d] <= w[a,d]
91  //--- v[a,d] in {0,1}
92  //--- for a in A:
93  //--- x2[a] in [0,1], x3[a] >= 0
94  //--- for a in A, t in T
95  //--- x1[a,t] in {0,1}, z[a,t] >= 0
96  int nAtms = m_instance.getNAtms();
97  int nPairs = m_instance.getNPairs();
98  int nCols = (2 * (getNAtmsSteps() + nPairs + nAtms)) + nPairs;
99  return nCols;
100  }
101 
102  inline const int getNAtmsSteps() const {
104  return m_instance.getNAtms() * (m_appParam.NumSteps+1);
105  else
107  }
108 
109  //---
110  //--- Columns
111  //--- x1[a,t] (binary)
112  //--- z [a,t]
113  //--- f+[a,d]
114  //--- f-[a,d]
115  //--- x2[a]
116  //--- x3[a]
117  //--- v[a,d] (binary)
118  //---
120  const int atmIndex = -1,
121  const int dateIndex = -1);
122 
123  inline const int getColOffset_x1() const {
124  return 0;
125  }
126  inline const int getColOffset_z() const {
127  return getColOffset_x1() + getNAtmsSteps();
128  }
129  inline const int getColOffset_fp() const {
130  return getColOffset_z() + getNAtmsSteps();
131  }
132  inline const int getColOffset_fm() const {
133  return getColOffset_fp() + m_instance.getNPairs();
134  }
135  inline const int getColOffset_x2() const {
136  return getColOffset_fm() + m_instance.getNPairs();
137  }
138  inline const int getColOffset_x3() const {
139  return getColOffset_x2() + m_instance.getNAtms();
140  }
141  inline const int getColOffset_v() const {
142  return getColOffset_x3() + m_instance.getNAtms();
143  }
144 
145  inline const int colIndex_x1(const int a, const int t) const {
146  int tLen = m_appParam.NumSteps;
148  tLen++;
149  return getColOffset_x1() + ((a * tLen) + t);
150  }
151  inline const int colIndex_z(const int a, const int t) const {
152  int tLen = m_appParam.NumSteps;
154  tLen++;
155  return getColOffset_z() + ((a * tLen) + t);
156  }
157  inline const int colIndex_fp(const int pairIndex) const {
158  return getColOffset_fp() + pairIndex;
159  }
160  inline const int colIndex_fm(const int pairIndex) const {
161  return getColOffset_fm() + pairIndex;
162  }
163  inline const int colIndex_x2(const int a) const {
164  return getColOffset_x2() + a;
165  }
166  inline const int colIndex_x3(const int a) const {
167  return getColOffset_x3() + a;
168  }
169  inline const int colIndex_v(const int pairIndex) const {
170  return getColOffset_v() + pairIndex;
171  }
172 
173  //column names
175  const string prefix,
176  const int offset);
178  const string prefix,
179  const int offset);
181  const string prefix,
182  const int offset);
183 
184 
185 public:
190  DecompApp (),
191  m_classTag ("ATM-APP"),
192  m_objective (NULL)
193  {
194  initializeApp(utilParam);
195  };
196 
197  virtual ~ATM_DecompApp() {
198  //UTIL_DELARR(m_objective);
200  };
201 };
202 
203 #endif
const int getColOffset_x2() const
Initialize application.
const int getNAtmsSteps() const
Initialize application.
void UtilDeleteVectorPtr(vector< T * > &vectorPtr, typename vector< T * >::iterator first, typename vector< T * >::iterator last)
Definition: UtilMacros.h:288
void initializeApp(UtilParameters &utilParam)
Initialize application.
virtual ~ATM_DecompApp()
Default constructor.
const int colIndex_x2(const int a) const
Initialize application.
const string m_classTag
Class id tag (for log / debugging).
Definition: ATM_DecompApp.h:38
void createModels()
Initialize application.
const int colIndex_x3(const int a) const
Initialize application.
int createConPickOne(DecompConstraintSet *model, const int atmIndex)
Initialize application.
void addColumnNamesAD(DecompConstraintSet *model, const string prefix, const int offset)
Initialize application.
void createModelColumns(DecompConstraintSet *model, const int atmIndex=-1, const int dateIndex=-1)
Initialize application.
const int getColOffset_z() const
Initialize application.
vector< DecompConstraintSet * > m_models
The various model constraint systems used for different algos.
Definition: ATM_DecompApp.h:50
bool UseTightModel
Definition: ATM_Param.h:37
DecompConstraintSet * createModelRelax1(const int a, bool includeCount=true)
Initialize application.
DecompConstraintSet * createModelRelaxCount()
Initialize application.
const int colIndex_fm(const int pairIndex) const
Initialize application.
const int getNPairs() const
Definition: ATM_Instance.h:75
int NumSteps
Definition: ATM_Param.h:36
const int getColOffset_fp() const
Initialize application.
const int getColOffset_x1() const
Initialize application.
ATM_DecompApp(UtilParameters &utilParam)
Default constructor.
DecompConstraintSet * createModelCoreCount()
Initialize application.
const int getColOffset_fm() const
Initialize application.
DecompConstraintSet * createModelCore2()
Initialize application.
const int getNAtms() const
Definition: ATM_Instance.h:73
DecompConstraintSet * createModelRelax2(const int d)
Initialize application.
DecompConstraintSet * createModelCore1(bool includeCount=true)
Initialize application.
int createConCount(DecompConstraintSet *model, const int atmIndex)
Initialize application.
int createConZtoX(DecompConstraintSet *model, const int atmIndex)
Initialize application.
virtual bool APPisUserFeasible(const double *x, const int nCols, const double tolZero)
Method to determine if the solution (x) is feasible to the original model.
const int colIndex_x1(const int a, const int t) const
Initialize application.
ATM_Instance m_instance
ATM problem instance data.
Definition: ATM_DecompApp.h:41
ATM_Param m_appParam
Application specific parameters.
Definition: ATM_DecompApp.h:44
const int numCoreCols() const
Initialize application.
Definition: ATM_DecompApp.h:87
const int getColOffset_x3() const
Initialize application.
void addColumnNamesA(DecompConstraintSet *model, const string prefix, const int offset)
Initialize application.
double * m_objective
The model objective coefficients (original space).
Definition: ATM_DecompApp.h:47
const int colIndex_fp(const int pairIndex) const
Initialize application.
const int getColOffset_v() const
Initialize application.
const int colIndex_z(const int a, const int t) const
Initialize application.
void addColumnNamesAT(DecompConstraintSet *model, const string prefix, const int offset)
Initialize application.
const int colIndex_v(const int pairIndex) const
Initialize application.
The main application class.
Definition: DecompApp.h:50