PIPS-NLP
amplGenStochInput.hpp
Go to the documentation of this file.
1 /* PIPS-NLP *
2  * Authors: Nai-Yuan Chiang *
3  * (C) 2015 Argonne National Laboratory */
4 
5 #ifndef NLCROSSHESSIANINPUT__HPP
6 #define NLCROSSHESSIANINPUT__HPP
7 
8 #include <map>
9 #include <vector>
10 #include <string>
11 
12 #include "stochasticInput.hpp"
13 #include "AmplData_NL.hpp"
14 #include "global_var.h"
15 
16 struct ASL_pfgh;
17 struct SufDecl;
18 struct SufDesc;
19 
20 #include "mpi.h"
21 #include "../PIPS-NLP/global_var.h"
22 // solve problem as general stochastic programming problem
23 // min f(x_0) + \sum f(x_i)
24 // st g(x_i) = 0
25 //
26 // we do split/reorder the Hessian and Jacobian in this case.
27 
28 // Jacobian looks like
29 // W_1 T_1
30 // W_2 T_1
31 // ...
32 // W_n T_n
33 // A
34 
35 // Hessian looks like
36 // QW_1 QT_1
37 // QW_2 QT_1
38 // ...
39 // QW_n QT_n
40 // QA
41 
43 public:
45  }
46  amplGenStochInput(const std::string &datarootname,
47  int overrideScenarioNumber = 0, MPI_Comm comm = MPI_COMM_WORLD);
49 
50  virtual int nScenarios() {
51  return nScenarios_;
52  }
53  virtual int nFirstStageVars() {
54  return nFirstStageVars_;
55  }
56  virtual int nFirstStageCons() {
57  return nFirstStageCons_;
58  }
59  virtual int nSecondStageVars(int scen) {
60  return nSecondStageVars_[scen];
61  }
62  virtual int nSecondStageCons(int scen) {
63  return nSecondStageCons_[scen];
64  }
65 
66  virtual std::vector<double> getFirstStageColLB() {
67  return firstStageData.collb;
68  }
69  virtual std::vector<double> getFirstStageColUB() {
70  return firstStageData.colub;
71  }
72  virtual std::vector<double> getFirstStageObj() {
73  return firstStageData.objGrad;
74  }
75  virtual std::vector<std::string> getFirstStageColNames() {
76  return firstStageData.colnames;
77  }
78  virtual std::vector<double> getFirstStageRowLB() {
79  return firstStageData.rowlb;
80  }
81  virtual std::vector<double> getFirstStageRowUB() {
82  return firstStageData.rowub;
83  }
84  virtual std::vector<std::string> getFirstStageRowNames() {
85  return firstStageData.rownames;
86  }
87 
88  virtual bool isFirstStageColInteger(int col) {
89  return false;
90  }
91 
92  virtual std::vector<double> getSecondStageColLB(int scen) {
93  loadLocalNLdata(scen);
94  return localData[scen].collb;
95  }
96  virtual std::vector<double> getSecondStageColUB(int scen) {
97  loadLocalNLdata(scen);
98  return localData[scen].colub;
99  }
100  virtual std::vector<double> getSecondStageObj(int scen) {
101  loadLocalNLdata(scen);
102  return localData[scen].objGrad;
103  }
104  virtual std::vector<std::string> getSecondStageColNames(int scen) {
105  loadLocalNLdata(scen);
106  return localData[scen].colnames;
107  }
108  virtual std::vector<double> getSecondStageRowLB(int scen) {
109  loadLocalNLdata(scen);
110  return localData[scen].rowlb;
111  }
112  virtual std::vector<double> getSecondStageRowUB(int scen) {
113  loadLocalNLdata(scen);
114  return localData[scen].rowub;
115  }
116  virtual std::vector<std::string> getSecondStageRowNames(int scen) {
117  loadLocalNLdata(scen);
118  return localData[scen].rownames;
119  }
120  virtual double scenarioProbability(int scen) {
121  return 1.0 / nScenarios_;
122  }
123  virtual bool isSecondStageColInteger(int scen, int col) {
124  return false;
125  }
126 
127  virtual CoinPackedMatrix getFirstStageConstraints() {
128  MESSAGE("getFirstStageConstraints");
129  IF_VERBOSE_DO( Amat.dumpMatrix(); );
130  return Amat;
131  }
132  virtual CoinPackedMatrix getSecondStageConstraints(int scen) {
133  loadLocalNLdata(scen);
134  MESSAGE("getSecondStageConstraints scen" << scen);
135  IF_VERBOSE_DO( Wmat[scen].dumpMatrix(); );
136  return Wmat[scen];
137  }
138  virtual CoinPackedMatrix getLinkingConstraints(int scen) {
139  loadLocalNLdata(scen);
140  MESSAGE("getLinkingConstraints scen" << scen);
141  IF_VERBOSE_DO( Tmat[scen].dumpMatrix(); );
142  return Tmat[scen];
143  }
144 
145  virtual CoinPackedMatrix getFirstStageHessian() {
146  MESSAGE("getFirstStageHessian");
147  IF_VERBOSE_DO( QAmat.dumpMatrix(); );
148  return QAmat;
149  }
150  // Q_i
151  virtual CoinPackedMatrix getSecondStageHessian(int scen) {
152  loadLocalNLdata(scen);
153  MESSAGE("getSecondStageHessian scen" << scen);
154  IF_VERBOSE_DO( QWmat[scen].dumpMatrix(); );
155  return QWmat[scen];
156  }
157  // column-oriented, \hat Q_i
158  // Note: this has the second-stage variables on the rows and first-stage on the columns
159  virtual CoinPackedMatrix getSecondStageCrossHessian(int scen) {
160  loadLocalNLdata(scen);
161  MESSAGE("getSecondStageCrossHessian scen" << scen);
162  IF_VERBOSE_DO( QTmat[scen].dumpMatrix(); );
163  return QTmat[scen];
164  }
165 
166  virtual bool scenarioDimensionsEqual() {
167  return dimsEqual;
168  }
169  virtual bool onlyBoundsVary() {
170  return false;
171  } // no easy way to check
172  virtual bool allProbabilitiesEqual() {
173  return true;
174  }
175  virtual bool continuousRecourse() {
176  return true;
177  }
178 
179  virtual void doNetworkPart(const int scen, AmplSuffix* amplSuffix);
180 
181 protected:
182  bool dimsEqual;
184 
185  double ObjScale;
186 
189  std::vector<int*> LocGloVarIdx;
190 
191  std::vector<std::map<int, int> > LocLocVarMap;
192  std::vector<std::map<int, int> > LocGloVarMap;
193 
194  std::vector<std::map<int, int> > LocWmatJacGoffMap;
195  std::vector<std::map<int, int> > LocTmatJacGoffMap;
196 
197  std::vector<std::map<int, int> > LocQAmatHesGoffMap;
198  std::vector<std::map<int, int> > LocQWmatHesGoffMap;
199  std::vector<std::map<int, int> > LocQTmatHesGoffMap;
200 
201  std::vector<int> decisionVarDim;
202  std::vector<int*> schurVarConIDinNL;
203 
204  std::vector<int*> NR_partIDX_var;
205  std::vector<int*> NR_partIDX_con;
206 
207  int mype_;
208 
209  std::vector<AmplData_NL> localData;
211 
212  std::vector<ASL_pfgh*> asl_i;
213  ASL_pfgh* asl_0;
214 
215  CoinPackedMatrix Amat, QAmat;
216  std::vector<CoinPackedMatrix> Tmat, QTmat, Wmat, QWmat;
217 
218  virtual void loadLocalNLdata(int scen);
219  virtual void splitMatrices(const int scen);
220 
221  // no copying
224 
226 
227  virtual void getRowMap(const int scen);
228 
231 
232  std::vector<int> nnzEqJac2nd, nnzIneqJac2nd;
233  std::vector<int*> amplRowMap2nd;
234 
236 
237  virtual void getJacGoffMap(const int scen);
238 
240  std::vector<int> nnzA2nd, nnzC2nd;
241 
242 
243 virtual int nLinkCons(){return 0;};
244 virtual int nLinkECons(){return 0;};
245 virtual int nLinkICons(){return 0;};
246 
247 
249 
252 
253  std::map<int, int> JacALinkGoff1st, JacCLinkGoff1st;
254  std::map<int, int> JacALocGoff1st, JacCLocGoff1st;
255 
256  std::vector<std::map<int, int> > JacALinkGoff2nd, JacCLinkGoff2nd;
257  std::vector<std::map<int, int> > JacALocGoff2nd, JacCLocGoff2nd;
258 
259  int nnzQ1st;
260  std::vector<int> nnzQ2nd, nnzQCross2nd;
261 
263 
264  std::vector<int> starts1stSt;
265  friend class sNlpInfoFromNL;
266 };
267 
268 #endif
269 
virtual std::vector< double > getSecondStageColUB(int scen)
Definition: amplGenStochInput.hpp:96
int nnzALink1st
Definition: amplGenStochInput.hpp:245
std::vector< double > collb
Definition: AmplData_NL.hpp:36
std::vector< CoinPackedMatrix > QTmat
Definition: amplGenStochInput.hpp:216
AmplData_NL firstStageData
Definition: amplGenStochInput.hpp:210
virtual std::vector< std::string > getSecondStageColNames(int scen)
Definition: amplGenStochInput.hpp:104
CoinPackedMatrix QAmat
Definition: amplGenStochInput.hpp:215
int nnzCLoc1st
Definition: amplGenStochInput.hpp:245
std::vector< double > colub
Definition: AmplData_NL.hpp:36
virtual std::vector< double > getFirstStageObj()
Definition: amplGenStochInput.hpp:72
std::vector< double > rowlb
Definition: AmplData_NL.hpp:36
std::vector< CoinPackedMatrix > Tmat
Definition: amplGenStochInput.hpp:216
std::vector< std::map< int, int > > LocLocVarMap
Definition: amplGenStochInput.hpp:191
#define MESSAGE(x)
Definition: global_var.h:34
virtual std::vector< std::string > getFirstStageColNames()
Definition: amplGenStochInput.hpp:75
std::vector< int > nnzQ2nd
Definition: amplGenStochInput.hpp:260
virtual CoinPackedMatrix getSecondStageHessian(int scen)
Definition: amplGenStochInput.hpp:151
std::vector< CoinPackedMatrix > Wmat
Definition: amplGenStochInput.hpp:216
Definition: AmplData_NL.hpp:33
std::vector< ASL_pfgh * > asl_i
Definition: amplGenStochInput.hpp:212
virtual int nFirstStageVars()
Definition: amplGenStochInput.hpp:53
virtual bool scenarioDimensionsEqual()
Definition: amplGenStochInput.hpp:166
std::vector< std::map< int, int > > LocTmatJacGoffMap
Definition: amplGenStochInput.hpp:195
virtual int nSecondStageVars(int scen)
Definition: amplGenStochInput.hpp:59
virtual void getRowMap(const int scen)
Definition: amplGenStochInput.cpp:795
virtual double scenarioProbability(int scen)
Definition: amplGenStochInput.hpp:120
Definition: stochasticInput.hpp:32
bool dimsEqual
Definition: amplGenStochInput.hpp:182
int nnzIneqJac1st
Definition: amplGenStochInput.hpp:229
virtual CoinPackedMatrix getFirstStageConstraints()
Definition: amplGenStochInput.hpp:127
std::vector< std::map< int, int > > LocGloVarMap
Definition: amplGenStochInput.hpp:192
virtual CoinPackedMatrix getLinkingConstraints(int scen)
Definition: amplGenStochInput.hpp:138
std::vector< int > nnzALink2nd
Definition: amplGenStochInput.hpp:251
std::map< int, int > JacCLocGoff1st
Definition: amplGenStochInput.hpp:254
virtual void doNetworkPart(const int scen, AmplSuffix *amplSuffix)
Definition: amplGenStochInput.cpp:1082
int nnzA1st
Definition: amplGenStochInput.hpp:239
virtual std::vector< double > getSecondStageRowLB(int scen)
Definition: amplGenStochInput.hpp:108
int nFirstStageCons_
Definition: amplGenStochInput.hpp:187
virtual int nLinkECons()
Definition: amplGenStochInput.hpp:244
virtual std::vector< double > getFirstStageRowLB()
Definition: amplGenStochInput.hpp:78
std::vector< int > nnzCLoc2nd
Definition: amplGenStochInput.hpp:251
std::vector< int * > NR_partIDX_var
Definition: amplGenStochInput.hpp:204
std::vector< std::map< int, int > > LocQTmatHesGoffMap
Definition: amplGenStochInput.hpp:199
std::vector< std::map< int, int > > LocQAmatHesGoffMap
Definition: amplGenStochInput.hpp:197
int mype_
Definition: amplGenStochInput.hpp:207
double ObjScale
Definition: amplGenStochInput.hpp:185
int nFirstStageVars_
Definition: amplGenStochInput.hpp:187
std::vector< int > decisionVarDim
Definition: amplGenStochInput.hpp:201
std::vector< int > nnzIneqJac2nd
Definition: amplGenStochInput.hpp:232
std::vector< int > nnzA2nd
Definition: amplGenStochInput.hpp:240
std::vector< CoinPackedMatrix > QWmat
Definition: amplGenStochInput.hpp:216
virtual CoinPackedMatrix getSecondStageCrossHessian(int scen)
Definition: amplGenStochInput.hpp:159
int nnzALoc1st
Definition: amplGenStochInput.hpp:245
std::string datarootname
Definition: stochasticInput.hpp:109
std::vector< int * > LocGloVarIdx
Definition: amplGenStochInput.hpp:189
~amplGenStochInput()
Definition: amplGenStochInput.cpp:1143
std::vector< int > nSecondStageVars_
Definition: amplGenStochInput.hpp:188
virtual int nLinkCons()
Definition: amplGenStochInput.hpp:243
virtual void splitMatrices(const int scen)
Definition: amplGenStochInput.cpp:342
virtual void loadLocalNLdata(int scen)
Definition: amplGenStochInput.cpp:949
std::vector< AmplData_NL > localData
Definition: amplGenStochInput.hpp:209
std::vector< int > nnzQCross2nd
Definition: amplGenStochInput.hpp:260
amplGenStochInput()
Definition: amplGenStochInput.hpp:44
virtual std::vector< double > getFirstStageColUB()
Definition: amplGenStochInput.hpp:69
int * amplRowMap1st
Definition: amplGenStochInput.hpp:230
std::vector< double > objGrad
Definition: AmplData_NL.hpp:36
std::vector< std::map< int, int > > JacCLinkGoff2nd
Definition: amplGenStochInput.hpp:256
std::vector< std::map< int, int > > LocQWmatHesGoffMap
Definition: amplGenStochInput.hpp:198
std::vector< int > nnzEqJac2nd
Definition: amplGenStochInput.hpp:232
virtual int nSecondStageCons(int scen)
Definition: amplGenStochInput.hpp:62
Definition: sNlpInfoFromNL.h:25
virtual std::vector< std::string > getSecondStageRowNames(int scen)
Definition: amplGenStochInput.hpp:116
virtual std::vector< double > getFirstStageRowUB()
Definition: amplGenStochInput.hpp:81
CoinPackedMatrix Amat
Definition: amplGenStochInput.hpp:215
std::vector< std::map< int, int > > JacCLocGoff2nd
Definition: amplGenStochInput.hpp:257
std::vector< int > nnzC2nd
Definition: amplGenStochInput.hpp:240
virtual int nFirstStageCons()
Definition: amplGenStochInput.hpp:56
std::vector< std::map< int, int > > JacALocGoff2nd
Definition: amplGenStochInput.hpp:257
ASL_pfgh * asl_0
Definition: amplGenStochInput.hpp:213
virtual std::vector< double > getSecondStageRowUB(int scen)
Definition: amplGenStochInput.hpp:112
std::vector< int > nnzCLink2nd
Definition: amplGenStochInput.hpp:251
std::vector< int * > NR_partIDX_con
Definition: amplGenStochInput.hpp:205
virtual CoinPackedMatrix getSecondStageConstraints(int scen)
Definition: amplGenStochInput.hpp:132
int nnzC1st
Definition: amplGenStochInput.hpp:239
Definition: AmplData_NL.hpp:53
int nnzEqJac1st
Definition: amplGenStochInput.hpp:229
std::vector< std::string > colnames
Definition: AmplData_NL.hpp:38
virtual bool allProbabilitiesEqual()
Definition: amplGenStochInput.hpp:172
Definition: amplGenStochInput.hpp:42
std::vector< int > starts1stSt
Definition: amplGenStochInput.hpp:264
amplGenStochInput & operator=(const amplGenStochInput &)
virtual int nLinkICons()
Definition: amplGenStochInput.hpp:245
int nnzQ1st
Definition: amplGenStochInput.hpp:259
std::map< int, int > JacALocGoff1st
Definition: amplGenStochInput.hpp:254
std::vector< std::map< int, int > > LocWmatJacGoffMap
Definition: amplGenStochInput.hpp:194
virtual CoinPackedMatrix getFirstStageHessian()
Definition: amplGenStochInput.hpp:145
int nScenarios_
Definition: amplGenStochInput.hpp:187
virtual bool onlyBoundsVary()
Definition: amplGenStochInput.hpp:169
virtual void getJacGoffMap(const int scen)
Definition: amplGenStochInput.cpp:813
virtual std::vector< double > getFirstStageColLB()
Definition: amplGenStochInput.hpp:66
virtual std::vector< double > getSecondStageObj(int scen)
Definition: amplGenStochInput.hpp:100
virtual bool isSecondStageColInteger(int scen, int col)
Definition: amplGenStochInput.hpp:123
std::vector< std::map< int, int > > JacALinkGoff2nd
Definition: amplGenStochInput.hpp:256
virtual std::vector< std::string > getFirstStageRowNames()
Definition: amplGenStochInput.hpp:84
virtual int nScenarios()
Definition: amplGenStochInput.hpp:50
virtual bool continuousRecourse()
Definition: amplGenStochInput.hpp:175
virtual std::vector< double > getSecondStageColLB(int scen)
Definition: amplGenStochInput.hpp:92
bool haveRootNL
Definition: amplGenStochInput.hpp:183
std::map< int, int > JacCLinkGoff1st
Definition: amplGenStochInput.hpp:253
virtual bool isFirstStageColInteger(int col)
Definition: amplGenStochInput.hpp:88
std::vector< int * > amplRowMap2nd
Definition: amplGenStochInput.hpp:233
std::vector< std::string > rownames
Definition: AmplData_NL.hpp:38
std::vector< int > nnzALoc2nd
Definition: amplGenStochInput.hpp:251
int nnzCLink1st
Definition: amplGenStochInput.hpp:245
#define IF_VERBOSE_DO(X)
Definition: global_var.h:30
std::vector< double > rowub
Definition: AmplData_NL.hpp:36
std::vector< int > nSecondStageCons_
Definition: amplGenStochInput.hpp:188
std::vector< int * > schurVarConIDinNL
Definition: amplGenStochInput.hpp:202
std::map< int, int > JacALinkGoff1st
Definition: amplGenStochInput.hpp:253