PIPS-NLP
dcopflowInput.hpp
Go to the documentation of this file.
1 /* PIPS-NLP *
2  * Authors: Nai-Yuan Chiang *
3  * (C) 2015 Argonne National Laboratory */
4 
5 
6 #ifndef DCOPFINPUT_HPP
7 #define DCOPFINPUT_HPP
8 
9 #include "stochasticInput.hpp"
10 #include "mpi.h"
11 
12 #include "ps.h"
13 #include "dcopflow.hpp"
14 
15 
16 // solve problem as general stochastic programming problem
17 // min f(x_0) + \sum f(x_i)
18 // st g(x_i) = 0
19 //
20 
21 // Jacobian looks like
22 // W_1 T_1
23 // W_2 T_1
24 // ...
25 // W_n T_n
26 // A
27 
28 // Hessian looks like
29 // QW_1 QT_1
30 // QW_2 QT_1
31 // ...
32 // QW_n QT_n
33 // QA
34 
35 
36 
37 // reads format written by dumpSmlModel.cpp
39 public:
42  dcopflowInput(const DCPS* powersys, MPI_Comm comm = MPI_COMM_WORLD);
43 
44  virtual int nScenarios() { return nScenarios_; }
45  virtual int nFirstStageVars() { return nFirstStageVars_; }
46  virtual int nFirstStageCons() { return nFirstStageCons_; }
47  virtual int nSecondStageVars(int scen) { return nSecondStageVars_[scen]; }
48  virtual int nSecondStageCons(int scen) { return nSecondStageCons_[scen]; }
49 
50  virtual bool isFirstStageColInteger(int col) { return false; }
51  virtual bool isSecondStageColInteger(int scen, int col) { return false; }
52 
53  virtual bool scenarioDimensionsEqual() { return false; }
54  virtual bool onlyBoundsVary() { return false; }
55  virtual bool allProbabilitiesEqual() { return false; }
56  virtual bool continuousRecourse() { return false; }
57 
58  virtual double scenarioProbability(int scen) { return 1.0; }
59 
60  // First stage obj and bounds
61  virtual std::vector<double> getFirstStageObj(){ return firstStageData.objLin; }
62  virtual std::vector<double> getFirstStageColLB(){ return firstStageData.collb; }
63  virtual std::vector<double> getFirstStageColUB(){ return firstStageData.colub; }
64  virtual std::vector<std::string> getFirstStageColNames() { return firstStageData.colnames; }
65  virtual std::vector<double> getFirstStageRowLB(){ return firstStageData.rowlb; }
66  virtual std::vector<double> getFirstStageRowUB(){ return firstStageData.rowub; }
67  virtual std::vector<std::string> getFirstStageRowNames() { return firstStageData.rownames; }
68 
69  // Second stage obj and bounds
70  virtual std::vector<double> getSecondStageObj(int scen){loadLocalScenData(scen);return localData[scen].objLin;}
71  virtual std::vector<double> getSecondStageColLB(int scen){loadLocalScenData(scen);return localData[scen].collb;}
72  virtual std::vector<double> getSecondStageColUB(int scen){loadLocalScenData(scen);return localData[scen].colub;}
73  virtual std::vector<std::string> getSecondStageColNames(int scen){loadLocalScenData(scen);return localData[scen].colnames;}
74  virtual std::vector<double> getSecondStageRowLB(int scen){loadLocalScenData(scen);return localData[scen].rowlb;}
75  virtual std::vector<double> getSecondStageRowUB(int scen){loadLocalScenData(scen);return localData[scen].rowub;}
76  virtual std::vector<std::string> getSecondStageRowNames(int scen){loadLocalScenData(scen);return localData[scen].rownames;}
77 
78  // A
79  virtual CoinPackedMatrix getFirstStageConstraints() { return Amat; }
80  // W
81  virtual CoinPackedMatrix getSecondStageConstraints(int scen) {loadLocalScenData(scen); return Wmat[scen]; }
82  // T
83  virtual CoinPackedMatrix getLinkingConstraints(int scen) {loadLocalScenData(scen); return Tmat[scen]; }
84 
85  // QA
86 // virtual CoinPackedMatrix getFirstStageHessian(){return QAmat;}
87  // QW
88  virtual CoinPackedMatrix getSecondStageHessian(int scen){loadLocalScenData(scen);return QWmat[scen];}
89  // QT
90 // virtual CoinPackedMatrix getSecondStageCrossHessian(int scen){loadLocalScenData(scen);return QTmat[scen];}
91 
92 protected:
93  struct scenData {
94  std::vector<double> collb, colub, rowlb, rowub, objLin;
95  std::vector<std::string> rownames, colnames;
96  bool didLoad;
97  scenData() : didLoad(false) {}
98  void initialize(int nvar, int ncons);
99  void copyFrom(scenData s2);
100  };
101 
102  virtual void loadLocalScenData(int scen);
103 
104  int mype_;
105 
106  double ObjScale;
109 
111  std::vector<scenData> localData;
112 
113  CoinPackedMatrix Amat, QAmat;
114  std::vector<CoinPackedMatrix> Tmat, QTmat, Wmat, QWmat;
115 
116  // compressed Jacobian ( full system), which can be used as a preconditioner later.
117  CoinPackedMatrix Pmat;
118 
119 
122 
123 private:
124  void parseZeroData();
125 
127 
128 };
129 
130 
131 #endif
132 
std::vector< int > nSecondStageVars_
Definition: dcopflowInput.hpp:108
virtual int nFirstStageVars()
Definition: dcopflowInput.hpp:45
virtual std::vector< std::string > getSecondStageRowNames(int scen)
Definition: dcopflowInput.hpp:76
virtual int nFirstStageCons()
Definition: dcopflowInput.hpp:46
virtual void loadLocalScenData(int scen)
Definition: dcopflowInput.cpp:212
scenData()
Definition: dcopflowInput.hpp:97
void copyFrom(scenData s2)
Definition: dcopflowInput.cpp:71
virtual CoinPackedMatrix getSecondStageHessian(int scen)
Definition: dcopflowInput.hpp:88
void initialize(int nvar, int ncons)
Definition: dcopflowInput.cpp:60
virtual bool continuousRecourse()
Definition: dcopflowInput.hpp:56
std::vector< double > rowub
Definition: dcopflowInput.hpp:94
virtual std::vector< std::string > getFirstStageRowNames()
Definition: dcopflowInput.hpp:67
int nCon_Aggregaion
Definition: dcopflowInput.hpp:121
int nScenarios_
Definition: dcopflowInput.hpp:107
Definition: stochasticInput.hpp:32
std::vector< CoinPackedMatrix > QTmat
Definition: dcopflowInput.hpp:114
Definition: dcopflow.hpp:14
virtual std::vector< std::string > getFirstStageColNames()
Definition: dcopflowInput.hpp:64
bool didLoad
Definition: dcopflowInput.hpp:96
std::vector< CoinPackedMatrix > Tmat
Definition: dcopflowInput.hpp:114
scenData firstStageData
Definition: dcopflowInput.hpp:110
virtual double scenarioProbability(int scen)
Definition: dcopflowInput.hpp:58
virtual int nSecondStageVars(int scen)
Definition: dcopflowInput.hpp:47
std::vector< int > nSecondStageCons_
Definition: dcopflowInput.hpp:108
virtual std::vector< double > getSecondStageColUB(int scen)
Definition: dcopflowInput.hpp:72
virtual std::vector< double > getFirstStageColUB()
Definition: dcopflowInput.hpp:63
virtual std::vector< double > getFirstStageRowUB()
Definition: dcopflowInput.hpp:66
std::vector< double > objLin
Definition: dcopflowInput.hpp:94
Definition: dcopflowInput.hpp:93
int nVar_Aggregaion
Definition: dcopflowInput.hpp:120
std::vector< CoinPackedMatrix > Wmat
Definition: dcopflowInput.hpp:114
virtual bool isSecondStageColInteger(int scen, int col)
Definition: dcopflowInput.hpp:51
virtual std::vector< double > getFirstStageColLB()
Definition: dcopflowInput.hpp:62
virtual std::vector< double > getSecondStageRowUB(int scen)
Definition: dcopflowInput.hpp:75
virtual CoinPackedMatrix getLinkingConstraints(int scen)
Definition: dcopflowInput.hpp:83
virtual bool allProbabilitiesEqual()
Definition: dcopflowInput.hpp:55
virtual std::vector< double > getSecondStageObj(int scen)
Definition: dcopflowInput.hpp:70
virtual int nSecondStageCons(int scen)
Definition: dcopflowInput.hpp:48
virtual std::vector< double > getSecondStageRowLB(int scen)
Definition: dcopflowInput.hpp:74
int nFirstStageCons_
Definition: dcopflowInput.hpp:107
int mype_
Definition: dcopflowInput.hpp:104
CoinPackedMatrix QAmat
Definition: dcopflowInput.hpp:113
virtual CoinPackedMatrix getSecondStageConstraints(int scen)
Definition: dcopflowInput.hpp:81
virtual std::vector< double > getFirstStageObj()
Definition: dcopflowInput.hpp:61
virtual CoinPackedMatrix getFirstStageConstraints()
Definition: dcopflowInput.hpp:79
DCOPFLOW * dcopf
Definition: dcopflowInput.hpp:126
std::vector< std::string > rownames
Definition: dcopflowInput.hpp:95
std::vector< std::string > colnames
Definition: dcopflowInput.hpp:95
std::vector< double > colub
Definition: dcopflowInput.hpp:94
virtual bool scenarioDimensionsEqual()
Definition: dcopflowInput.hpp:53
virtual std::vector< std::string > getSecondStageColNames(int scen)
Definition: dcopflowInput.hpp:73
Definition: dcopflowInput.hpp:38
void parseZeroData()
Definition: dcopflowInput.cpp:107
virtual bool isFirstStageColInteger(int col)
Definition: dcopflowInput.hpp:50
std::vector< double > rowlb
Definition: dcopflowInput.hpp:94
int nFirstStageVars_
Definition: dcopflowInput.hpp:107
CoinPackedMatrix Amat
Definition: dcopflowInput.hpp:113
std::vector< scenData > localData
Definition: dcopflowInput.hpp:111
virtual std::vector< double > getSecondStageColLB(int scen)
Definition: dcopflowInput.hpp:71
double ObjScale
Definition: dcopflowInput.hpp:106
virtual int nScenarios()
Definition: dcopflowInput.hpp:44
dcopflowInput()
Definition: dcopflowInput.hpp:40
Definition: ps.h:115
std::vector< double > collb
Definition: dcopflowInput.hpp:94
std::vector< CoinPackedMatrix > QWmat
Definition: dcopflowInput.hpp:114
virtual bool onlyBoundsVary()
Definition: dcopflowInput.hpp:54
~dcopflowInput()
Definition: dcopflowInput.cpp:101
CoinPackedMatrix Pmat
Definition: dcopflowInput.hpp:117
virtual std::vector< double > getFirstStageRowLB()
Definition: dcopflowInput.hpp:65