Skip to content

Commit f685605

Browse files
gnawinabelsiqueiradatejada
authored
Add simple method multi-year (#1122)
* Change variables and constraints * Change objective and test * Modify test data * Make names verbose and update mps files * Fix tests * Apply review suggestions * Add data validation * Apply review suggestions --------- Co-authored-by: Abel Soares Siqueira <[email protected]> Co-authored-by: datejada <[email protected]>
1 parent cad3d94 commit f685605

29 files changed

+37304
-34744
lines changed

benchmark/model-mps-folder/Multi-year Investments.mps

Lines changed: 6434 additions & 6524 deletions
Large diffs are not rendered by default.

benchmark/model-mps-folder/Norse.mps

Lines changed: 25363 additions & 23991 deletions
Large diffs are not rendered by default.

benchmark/model-mps-folder/Storage.mps

Lines changed: 2573 additions & 1944 deletions
Large diffs are not rendered by default.

benchmark/model-mps-folder/Tiny.mps

Lines changed: 1332 additions & 1332 deletions
Large diffs are not rendered by default.

benchmark/model-mps-folder/UC-ramping.mps

Lines changed: 791 additions & 704 deletions
Large diffs are not rendered by default.
Lines changed: 91 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,26 @@
11
NAME
22
ROWS
33
N OBJ
4-
L max_output_flows_limit[H2,2030,1,1:6]
5-
L max_output_flows_limit[ccgt,2030,1,1:1]
6-
L max_output_flows_limit[ccgt,2030,1,2:2]
7-
L max_output_flows_limit[ccgt,2030,1,3:3]
8-
L max_output_flows_limit[ccgt,2030,1,4:4]
9-
L max_output_flows_limit[ccgt,2030,1,5:5]
10-
L max_output_flows_limit[ccgt,2030,1,6:6]
11-
L max_output_flows_limit[phs,2030,1,1:4]
12-
L max_output_flows_limit[phs,2030,1,5:6]
13-
L max_output_flows_limit[wind,2030,1,1:2]
14-
L max_output_flows_limit[wind,2030,1,3:3]
15-
L max_output_flows_limit[wind,2030,1,4:6]
16-
L max_input_flows_limit[phs,2030,1,1:3]
17-
L max_input_flows_limit[phs,2030,1,4:6]
4+
L max_output_flows_limit_simple_method[H2,2030,1,1:6]
5+
L max_output_flows_limit_simple_method[ccgt,2030,1,1:1]
6+
L max_output_flows_limit_simple_method[ccgt,2030,1,2:2]
7+
L max_output_flows_limit_simple_method[ccgt,2030,1,3:3]
8+
L max_output_flows_limit_simple_method[ccgt,2030,1,4:4]
9+
L max_output_flows_limit_simple_method[ccgt,2030,1,5:5]
10+
L max_output_flows_limit_simple_method[ccgt,2030,1,6:6]
11+
L max_output_flows_limit_simple_method[phs,2030,1,1:4]
12+
L max_output_flows_limit_simple_method[phs,2030,1,5:6]
13+
L max_output_flows_limit_simple_method[wind,2030,1,1:2]
14+
L max_output_flows_limit_simple_method[wind,2030,1,3:3]
15+
L max_output_flows_limit_simple_method[wind,2030,1,4:6]
16+
L max_input_flows_limit_simple_method[phs,2030,1,1:3]
17+
L max_input_flows_limit_simple_method[phs,2030,1,4:6]
1818
L max_storage_level_rep_period_limit[phs,2030,1,1:6]
19-
L max_transport_flow_limit[(balance,demand),2030,1,1:3]
20-
L max_transport_flow_limit[(balance,demand),2030,1,4:6]
19+
L max_transport_flow_limit_simple_method[(balance,demand),2030,1,1:3]
20+
L max_transport_flow_limit_simple_method[(balance,demand),2030,1,4:6]
2121
G min_storage_level_rep_period_limit[phs,2030,1,1:6]
22-
G min_transport_flow_limit[(balance,demand),2030,1,1:3]
23-
G min_transport_flow_limit[(balance,demand),2030,1,4:6]
22+
G min_transport_flow_limit_simple_method[(balance,demand),2030,1,1:3]
23+
G min_transport_flow_limit_simple_method[(balance,demand),2030,1,4:6]
2424
E consumer_balance[demand,2030,1,1:3]
2525
E consumer_balance[demand,2030,1,4:6]
2626
E balance_storage_rep_period[phs,2030,1,1:6]
@@ -32,103 +32,123 @@ ROWS
3232
E balance_hub[balance,2030,1,6:6]
3333
E conversion_balance[ccgt,2030,1,1:6]
3434
COLUMNS
35-
flow[(H2,ccgt),2030,1,1:6] max_output_flows_limit[H2,2030,1,1:6] 1
35+
flow[(H2,ccgt),2030,1,1:6] max_output_flows_limit_simple_method[H2,2030,1,1:6] 1
3636
flow[(H2,ccgt),2030,1,1:6] conversion_balance[ccgt,2030,1,1:6] 6
3737
flow[(H2,ccgt),2030,1,1:6] OBJ 0.06
38-
flow[(wind,balance),2030,1,1:2] max_output_flows_limit[wind,2030,1,1:2] 1
38+
flow[(wind,balance),2030,1,1:2] max_output_flows_limit_simple_method[wind,2030,1,1:2] 1
3939
flow[(wind,balance),2030,1,1:2] balance_hub[balance,2030,1,1:1] 1
4040
flow[(wind,balance),2030,1,1:2] balance_hub[balance,2030,1,2:2] 1
4141
flow[(wind,balance),2030,1,1:2] OBJ 0.01
42-
flow[(wind,balance),2030,1,3:6] max_output_flows_limit[wind,2030,1,3:3] 1
43-
flow[(wind,balance),2030,1,3:6] max_output_flows_limit[wind,2030,1,4:6] 1
42+
flow[(wind,balance),2030,1,3:6] max_output_flows_limit_simple_method[wind,2030,1,3:3] 1
43+
flow[(wind,balance),2030,1,3:6] max_output_flows_limit_simple_method[wind,2030,1,4:6] 1
4444
flow[(wind,balance),2030,1,3:6] balance_hub[balance,2030,1,3:3] 1
4545
flow[(wind,balance),2030,1,3:6] balance_hub[balance,2030,1,4:4] 1
4646
flow[(wind,balance),2030,1,3:6] balance_hub[balance,2030,1,5:5] 1
4747
flow[(wind,balance),2030,1,3:6] balance_hub[balance,2030,1,6:6] 1
4848
flow[(wind,balance),2030,1,3:6] OBJ 0.02
49-
flow[(wind,phs),2030,1,1:3] max_output_flows_limit[wind,2030,1,1:2] 1
50-
flow[(wind,phs),2030,1,1:3] max_output_flows_limit[wind,2030,1,3:3] 1
51-
flow[(wind,phs),2030,1,1:3] max_input_flows_limit[phs,2030,1,1:3] 1
49+
flow[(wind,phs),2030,1,1:3] max_output_flows_limit_simple_method[wind,2030,1,1:2] 1
50+
flow[(wind,phs),2030,1,1:3] max_output_flows_limit_simple_method[wind,2030,1,3:3] 1
51+
flow[(wind,phs),2030,1,1:3] max_input_flows_limit_simple_method[phs,2030,1,1:3] 1
5252
flow[(wind,phs),2030,1,1:3] balance_storage_rep_period[phs,2030,1,1:6] -2.7
5353
flow[(wind,phs),2030,1,1:3] OBJ 0.006
54-
flow[(wind,phs),2030,1,4:6] max_output_flows_limit[wind,2030,1,4:6] 1
55-
flow[(wind,phs),2030,1,4:6] max_input_flows_limit[phs,2030,1,4:6] 1
54+
flow[(wind,phs),2030,1,4:6] max_output_flows_limit_simple_method[wind,2030,1,4:6] 1
55+
flow[(wind,phs),2030,1,4:6] max_input_flows_limit_simple_method[phs,2030,1,4:6] 1
5656
flow[(wind,phs),2030,1,4:6] balance_storage_rep_period[phs,2030,1,1:6] -2.7
5757
flow[(wind,phs),2030,1,4:6] OBJ 0.006
58-
flow[(phs,balance),2030,1,1:4] max_output_flows_limit[phs,2030,1,1:4] 1
58+
flow[(phs,balance),2030,1,1:4] max_output_flows_limit_simple_method[phs,2030,1,1:4] 1
5959
flow[(phs,balance),2030,1,1:4] balance_storage_rep_period[phs,2030,1,1:6] 4.444444444444445
6060
flow[(phs,balance),2030,1,1:4] balance_hub[balance,2030,1,1:1] 1
6161
flow[(phs,balance),2030,1,1:4] balance_hub[balance,2030,1,2:2] 1
6262
flow[(phs,balance),2030,1,1:4] balance_hub[balance,2030,1,3:3] 1
6363
flow[(phs,balance),2030,1,1:4] balance_hub[balance,2030,1,4:4] 1
6464
flow[(phs,balance),2030,1,1:4] OBJ 0.004
65-
flow[(phs,balance),2030,1,5:6] max_output_flows_limit[phs,2030,1,5:6] 1
65+
flow[(phs,balance),2030,1,5:6] max_output_flows_limit_simple_method[phs,2030,1,5:6] 1
6666
flow[(phs,balance),2030,1,5:6] balance_storage_rep_period[phs,2030,1,1:6] 2.2222222222222223
6767
flow[(phs,balance),2030,1,5:6] balance_hub[balance,2030,1,5:5] 1
6868
flow[(phs,balance),2030,1,5:6] balance_hub[balance,2030,1,6:6] 1
6969
flow[(phs,balance),2030,1,5:6] OBJ 0.002
70-
flow[(ccgt,balance),2030,1,1:1] max_output_flows_limit[ccgt,2030,1,1:1] 1
70+
flow[(ccgt,balance),2030,1,1:1] max_output_flows_limit_simple_method[ccgt,2030,1,1:1] 1
7171
flow[(ccgt,balance),2030,1,1:1] balance_hub[balance,2030,1,1:1] 1
7272
flow[(ccgt,balance),2030,1,1:1] conversion_balance[ccgt,2030,1,1:6] -2
7373
flow[(ccgt,balance),2030,1,1:1] OBJ 0.05
74-
flow[(ccgt,balance),2030,1,2:2] max_output_flows_limit[ccgt,2030,1,2:2] 1
74+
flow[(ccgt,balance),2030,1,2:2] max_output_flows_limit_simple_method[ccgt,2030,1,2:2] 1
7575
flow[(ccgt,balance),2030,1,2:2] balance_hub[balance,2030,1,2:2] 1
7676
flow[(ccgt,balance),2030,1,2:2] conversion_balance[ccgt,2030,1,1:6] -2
7777
flow[(ccgt,balance),2030,1,2:2] OBJ 0.05
78-
flow[(ccgt,balance),2030,1,3:3] max_output_flows_limit[ccgt,2030,1,3:3] 1
78+
flow[(ccgt,balance),2030,1,3:3] max_output_flows_limit_simple_method[ccgt,2030,1,3:3] 1
7979
flow[(ccgt,balance),2030,1,3:3] balance_hub[balance,2030,1,3:3] 1
8080
flow[(ccgt,balance),2030,1,3:3] conversion_balance[ccgt,2030,1,1:6] -2
8181
flow[(ccgt,balance),2030,1,3:3] OBJ 0.05
82-
flow[(ccgt,balance),2030,1,4:4] max_output_flows_limit[ccgt,2030,1,4:4] 1
82+
flow[(ccgt,balance),2030,1,4:4] max_output_flows_limit_simple_method[ccgt,2030,1,4:4] 1
8383
flow[(ccgt,balance),2030,1,4:4] balance_hub[balance,2030,1,4:4] 1
8484
flow[(ccgt,balance),2030,1,4:4] conversion_balance[ccgt,2030,1,1:6] -2
8585
flow[(ccgt,balance),2030,1,4:4] OBJ 0.05
86-
flow[(ccgt,balance),2030,1,5:5] max_output_flows_limit[ccgt,2030,1,5:5] 1
86+
flow[(ccgt,balance),2030,1,5:5] max_output_flows_limit_simple_method[ccgt,2030,1,5:5] 1
8787
flow[(ccgt,balance),2030,1,5:5] balance_hub[balance,2030,1,5:5] 1
8888
flow[(ccgt,balance),2030,1,5:5] conversion_balance[ccgt,2030,1,1:6] -2
8989
flow[(ccgt,balance),2030,1,5:5] OBJ 0.05
90-
flow[(ccgt,balance),2030,1,6:6] max_output_flows_limit[ccgt,2030,1,6:6] 1
90+
flow[(ccgt,balance),2030,1,6:6] max_output_flows_limit_simple_method[ccgt,2030,1,6:6] 1
9191
flow[(ccgt,balance),2030,1,6:6] balance_hub[balance,2030,1,6:6] 1
9292
flow[(ccgt,balance),2030,1,6:6] conversion_balance[ccgt,2030,1,1:6] -2
9393
flow[(ccgt,balance),2030,1,6:6] OBJ 0.05
94-
flow[(balance,demand),2030,1,1:3] max_transport_flow_limit[(balance,demand),2030,1,1:3] 1
95-
flow[(balance,demand),2030,1,1:3] min_transport_flow_limit[(balance,demand),2030,1,1:3] 1
94+
flow[(balance,demand),2030,1,1:3] max_transport_flow_limit_simple_method[(balance,demand),2030,1,1:3] 1
95+
flow[(balance,demand),2030,1,1:3] min_transport_flow_limit_simple_method[(balance,demand),2030,1,1:3] 1
9696
flow[(balance,demand),2030,1,1:3] consumer_balance[demand,2030,1,1:3] 1
9797
flow[(balance,demand),2030,1,1:3] balance_hub[balance,2030,1,1:1] -1
9898
flow[(balance,demand),2030,1,1:3] balance_hub[balance,2030,1,2:2] -1
9999
flow[(balance,demand),2030,1,1:3] balance_hub[balance,2030,1,3:3] -1
100100
flow[(balance,demand),2030,1,1:3] OBJ 0.00030000000000000003
101-
flow[(balance,demand),2030,1,4:6] max_transport_flow_limit[(balance,demand),2030,1,4:6] 1
102-
flow[(balance,demand),2030,1,4:6] min_transport_flow_limit[(balance,demand),2030,1,4:6] 1
101+
flow[(balance,demand),2030,1,4:6] max_transport_flow_limit_simple_method[(balance,demand),2030,1,4:6] 1
102+
flow[(balance,demand),2030,1,4:6] min_transport_flow_limit_simple_method[(balance,demand),2030,1,4:6] 1
103103
flow[(balance,demand),2030,1,4:6] consumer_balance[demand,2030,1,4:6] 1
104104
flow[(balance,demand),2030,1,4:6] balance_hub[balance,2030,1,4:4] -1
105105
flow[(balance,demand),2030,1,4:6] balance_hub[balance,2030,1,5:5] -1
106106
flow[(balance,demand),2030,1,4:6] balance_hub[balance,2030,1,6:6] -1
107107
flow[(balance,demand),2030,1,4:6] OBJ 0.00030000000000000003
108+
assets_decommission[H2,2030,2030] max_output_flows_limit_simple_method[H2,2030,1,1:6] 400
109+
assets_decommission[balance,2030,2030] OBJ 0
110+
assets_decommission[ccgt,2030,2030] max_output_flows_limit_simple_method[ccgt,2030,1,1:1] 100
111+
assets_decommission[ccgt,2030,2030] max_output_flows_limit_simple_method[ccgt,2030,1,2:2] 100
112+
assets_decommission[ccgt,2030,2030] max_output_flows_limit_simple_method[ccgt,2030,1,3:3] 100
113+
assets_decommission[ccgt,2030,2030] max_output_flows_limit_simple_method[ccgt,2030,1,4:4] 100
114+
assets_decommission[ccgt,2030,2030] max_output_flows_limit_simple_method[ccgt,2030,1,5:5] 100
115+
assets_decommission[ccgt,2030,2030] max_output_flows_limit_simple_method[ccgt,2030,1,6:6] 100
116+
assets_decommission[demand,2030,2030] OBJ 0
117+
assets_decommission[phs,2030,2030] max_output_flows_limit_simple_method[phs,2030,1,1:4] 25
118+
assets_decommission[phs,2030,2030] max_output_flows_limit_simple_method[phs,2030,1,5:6] 25
119+
assets_decommission[phs,2030,2030] max_input_flows_limit_simple_method[phs,2030,1,1:3] 25
120+
assets_decommission[phs,2030,2030] max_input_flows_limit_simple_method[phs,2030,1,4:6] 25
121+
assets_decommission[wind,2030,2030] max_output_flows_limit_simple_method[wind,2030,1,1:2] 5.5
122+
assets_decommission[wind,2030,2030] max_output_flows_limit_simple_method[wind,2030,1,3:3] 5.5
123+
assets_decommission[wind,2030,2030] max_output_flows_limit_simple_method[wind,2030,1,4:6] 5.166666666666667
124+
flows_decommission[("balance",_"demand"),2030,2030] max_transport_flow_limit_simple_method[(balance,demand),2030,1,1:3] 200
125+
flows_decommission[("balance",_"demand"),2030,2030] max_transport_flow_limit_simple_method[(balance,demand),2030,1,4:6] 200
126+
flows_decommission[("balance",_"demand"),2030,2030] min_transport_flow_limit_simple_method[(balance,demand),2030,1,1:3] -200
127+
flows_decommission[("balance",_"demand"),2030,2030] min_transport_flow_limit_simple_method[(balance,demand),2030,1,4:6] -200
108128
storage_level_rep_period[phs,2030,1,1:6] max_storage_level_rep_period_limit[phs,2030,1,1:6] 1
109129
storage_level_rep_period[phs,2030,1,1:6] min_storage_level_rep_period_limit[phs,2030,1,1:6] 1
110130
storage_level_rep_period[phs,2030,1,1:6] balance_storage_rep_period[phs,2030,1,1:6] 1
111131
RHS
112-
rhs max_output_flows_limit[H2,2030,1,1:6] 400
113-
rhs max_output_flows_limit[ccgt,2030,1,1:1] 100
114-
rhs max_output_flows_limit[ccgt,2030,1,2:2] 100
115-
rhs max_output_flows_limit[ccgt,2030,1,3:3] 100
116-
rhs max_output_flows_limit[ccgt,2030,1,4:4] 100
117-
rhs max_output_flows_limit[ccgt,2030,1,5:5] 100
118-
rhs max_output_flows_limit[ccgt,2030,1,6:6] 100
119-
rhs max_output_flows_limit[phs,2030,1,1:4] 25
120-
rhs max_output_flows_limit[phs,2030,1,5:6] 25
121-
rhs max_output_flows_limit[wind,2030,1,1:2] 11
122-
rhs max_output_flows_limit[wind,2030,1,3:3] 11
123-
rhs max_output_flows_limit[wind,2030,1,4:6] 10.333333333333334
124-
rhs max_input_flows_limit[phs,2030,1,1:3] 25
125-
rhs max_input_flows_limit[phs,2030,1,4:6] 25
132+
rhs max_output_flows_limit_simple_method[H2,2030,1,1:6] 400
133+
rhs max_output_flows_limit_simple_method[ccgt,2030,1,1:1] 100
134+
rhs max_output_flows_limit_simple_method[ccgt,2030,1,2:2] 100
135+
rhs max_output_flows_limit_simple_method[ccgt,2030,1,3:3] 100
136+
rhs max_output_flows_limit_simple_method[ccgt,2030,1,4:4] 100
137+
rhs max_output_flows_limit_simple_method[ccgt,2030,1,5:5] 100
138+
rhs max_output_flows_limit_simple_method[ccgt,2030,1,6:6] 100
139+
rhs max_output_flows_limit_simple_method[phs,2030,1,1:4] 25
140+
rhs max_output_flows_limit_simple_method[phs,2030,1,5:6] 25
141+
rhs max_output_flows_limit_simple_method[wind,2030,1,1:2] 11
142+
rhs max_output_flows_limit_simple_method[wind,2030,1,3:3] 11
143+
rhs max_output_flows_limit_simple_method[wind,2030,1,4:6] 10.333333333333334
144+
rhs max_input_flows_limit_simple_method[phs,2030,1,1:3] 25
145+
rhs max_input_flows_limit_simple_method[phs,2030,1,4:6] 25
126146
rhs max_storage_level_rep_period_limit[phs,2030,1,1:6] 150
127-
rhs max_transport_flow_limit[(balance,demand),2030,1,1:3] 200
128-
rhs max_transport_flow_limit[(balance,demand),2030,1,4:6] 200
147+
rhs max_transport_flow_limit_simple_method[(balance,demand),2030,1,1:3] 200
148+
rhs max_transport_flow_limit_simple_method[(balance,demand),2030,1,4:6] 200
129149
rhs min_storage_level_rep_period_limit[phs,2030,1,1:6] 0
130-
rhs min_transport_flow_limit[(balance,demand),2030,1,1:3] -200
131-
rhs min_transport_flow_limit[(balance,demand),2030,1,4:6] -200
150+
rhs min_transport_flow_limit_simple_method[(balance,demand),2030,1,1:3] -200
151+
rhs min_transport_flow_limit_simple_method[(balance,demand),2030,1,4:6] -200
132152
rhs consumer_balance[demand,2030,1,1:3] 85
133153
rhs consumer_balance[demand,2030,1,4:6] 69.99999999999999
134154
rhs balance_storage_rep_period[phs,2030,1,1:6] 0
@@ -169,6 +189,20 @@ BOUNDS
169189
PL bounds flow[(ccgt,balance),2030,1,6:6]
170190
FR bounds flow[(balance,demand),2030,1,1:3]
171191
FR bounds flow[(balance,demand),2030,1,4:6]
192+
LO bounds assets_decommission[H2,2030,2030] 0
193+
PL bounds assets_decommission[H2,2030,2030]
194+
LO bounds assets_decommission[balance,2030,2030] 0
195+
PL bounds assets_decommission[balance,2030,2030]
196+
LO bounds assets_decommission[ccgt,2030,2030] 0
197+
PL bounds assets_decommission[ccgt,2030,2030]
198+
LO bounds assets_decommission[demand,2030,2030] 0
199+
PL bounds assets_decommission[demand,2030,2030]
200+
LO bounds assets_decommission[phs,2030,2030] 0
201+
PL bounds assets_decommission[phs,2030,2030]
202+
LO bounds assets_decommission[wind,2030,2030] 0
203+
PL bounds assets_decommission[wind,2030,2030]
204+
LO bounds flows_decommission[("balance",_"demand"),2030,2030] 0
205+
PL bounds flows_decommission[("balance",_"demand"),2030,2030]
172206
LO bounds storage_level_rep_period[phs,2030,1,1:6] 0
173207
PL bounds storage_level_rep_period[phs,2030,1,1:6]
174208
ENDATA

0 commit comments

Comments
 (0)