Reserve capacity allocation#
The model setup for the reserve capacity examples presented below are available in the following formats.
pyshop
YAML
ASCII
Optimal distribution of reserve capacity#
A simple system with 6 generators located on two separate plants will be used to illustrate the basic features of the reserve_group object and the basic reserve functionality in SHOP. First, we create and run the basic model without any reserve requirements.
#Necessary imports used in all examples
import pandas as pd
from pyshop import ShopSession
import plotly.graph_objects as go
pd.options.plotting.backend = "plotly"
#Functions used in this example for building and solving a simple model with cuts
from reserve import build_model, run_model
#Create a standard ShopSession
shop=ShopSession()
#Build a simple model with two reservoirs, two plants, and 6 generators.
build_model(shop)
#Display topology to the screen
display(shop.model.build_connection_tree())
#Run an optimization without any reserve obligations
run_model(shop)
#Display the optimal production level
pd.DataFrame([gen.production.get().rename(gen.get_name()) for gen in shop.model.generator]).transpose().plot.bar(title="Production without reserve requirement")
Now we create an identical SHOP model but add two reserve_group objects with some specified FCR-N and FRR reserve obligations. All generators are part of the FCR-N group and can help cover the given fcr_n_up_obligation and fcr_n_down_obligation. Only the generators in Plant2 are part of the FRR group and have to cover the frr_up_obligation without help from the other generators in Plant1.
#Create a new shop session
shop=ShopSession()
build_model(shop)
#Add two reserve_group objects to the original model
fcr_n = shop.model.reserve_group.add_object("fcr_n_group")
fcr_n.fcr_n_up_obligation.set(10)
fcr_n.fcr_n_down_obligation.set(10)
frr = shop.model.reserve_group.add_object("frr_group")
frr.frr_up_obligation.set(15)
#Connect all generators to the fcr_n group
for gen in shop.model.generator:
gen.connect_to(fcr_n)
#Connect only the generators in Plant2 to the frr group
plant2 = shop.model.plant.Plant2
for gen in plant2.generators:
gen.connect_to(frr)
#Optimize model
run_model(shop)
#Plot the resulting optimized production schedules
pd.DataFrame([gen.production.get().rename(gen.get_name()) for gen in shop.model.generator]).transpose().plot.bar(title="Production with reserve requirement")
The optimal production set points have shifted for some of the generators due to the new reserve capacity obligations. The plots below show how the reserve capacity has been distributed among the generators.
pd.DataFrame([gen.frr_up_delivery.get().rename(gen.get_name()) for gen in shop.model.generator]).transpose().plot.bar(title="FRR up delivery")
pd.DataFrame([gen.fcr_n_up_delivery.get().rename(gen.get_name()) for gen in shop.model.generator]).transpose().plot.bar(title="FCR-N up delivery")
pd.DataFrame([gen.fcr_n_down_delivery.get().rename(gen.get_name()) for gen in shop.model.generator]).transpose().plot.bar(title="FCR-N down delivery")
Note that the FCR-N reserve capacity is not always symmetric since no fcr_n_equality_flag on the global_settings object (or equivalent command) has been specified.
The following plots give a more detailed look at the individual generator production and reserve capacity results:
for gen in shop.model.generator:
name = gen.get_name()
p_min = gen.min_prod_individual.get()
p_max = gen.max_prod_individual.get()
prod = gen.production.get()
frr_up = gen.frr_up_delivery.get()
fcr_n_up = gen.fcr_n_up_delivery.get()
fcr_n_down = gen.fcr_n_down_delivery.get()
t = prod.index
fig = go.Figure(layout={'title':"Production and reserves: "+name,'xaxis_title':"Time",'yaxis_title':"Production and reserves [MW]"})
fig.add_trace(go.Scatter(name="P_min",x=t,y=p_min.values,line={'color': "black", 'width': 1,'dash':"dash"},line_shape='hv'))
fig.add_trace(go.Scatter(name="P_max",x=t,y=p_max.values,line={'color': "black", 'width': 1,'dash':"dash"},line_shape='hv'))
fig.add_trace(go.Scatter(name="Production",x=t,y=prod.values,line={'color': "black", 'width': 1},line_shape='hv'))
fig.add_trace(go.Scatter(showlegend=False,x=t,y=prod.values-fcr_n_down,line={'color': "black", 'width': 0},line_shape='hv'))
fig.add_trace(go.Scatter(name="FCR-N down",x=t, y=prod,fill='tonexty',line={'color': "orange", 'width': 0},line_shape='hv'))
fig.add_trace(go.Scatter(name="FCR-N up",x=t,y=prod+fcr_n_up, fill='tonexty',line={'color': "red", 'width': 0},line_shape='hv'))
fig.add_trace(go.Scatter(name="FRR up",x=t,y=prod+frr_up+fcr_n_up, fill='tonexty',line={'color': "blue", 'width': 0},line_shape='hv'))
fig.show()
It is possible that the sum of the production and the upward reserve capacity is slightly higher than the maximum production limit. This is usually due to the deviation between optimized and post-calculated production in SHOP, reported as prod_unbalance on the plant object. Non-linearities due to head loss effects and the turbine and generator efficiency curves are linearized and iteratively refined in SHOP. The optimized production variables are therefore approximations of the non-linear production function. A small gap is likely to appear when the optimized value is compared to a true non-linear post-calculation of the production based on the optimized discharge. The production unbalance means that the reserve capacity constraints are not broken in the optimization problem even though they appear to be broken when using the post-calculated production reported from SHOP. These are some of the limitations of a linear optimization model.
The amount of reserve capacity allocated on each unit is not very stable over the optimization horizon in the previous optimization run. A way to rectify this is to add a gen_reserve_ramping_cost on the global_settings object, penalizing any change in allocation of reserve capacity between two time steps. The example below adds a reserve ramping cost of 5 €/MW. In addition, a minimum limit of 1 MW is set for delivering the three different reserve capacity products. The potential downside of adding a reserve capacity ramping cost and minimum limits is the increased calculation time.
#Create a new shop session
shop=ShopSession()
build_model(shop)
#Add two reserve_group objects to the original model
fcr_n = shop.model.reserve_group.add_object("fcr_n_group")
fcr_n.fcr_n_up_obligation.set(10)
fcr_n.fcr_n_down_obligation.set(10)
frr = shop.model.reserve_group.add_object("frr_group")
frr.frr_up_obligation.set(15)
#Connect all generators to the fcr_n group
for gen in shop.model.generator:
gen.connect_to(fcr_n)
gen.fcr_n_up_min.set(1)
gen.fcr_n_down_min.set(1)
#Connect only the generators in Plant2 to the frr group
plant2 = shop.model.plant.Plant2
for gen in plant2.generators:
gen.connect_to(frr)
gen.frr_up_min.set(1)
#Add a reserve ramping cost
settings = shop.model.global_settings.global_settings
settings.gen_reserve_ramping_cost.set(5)
#Optimize model
run_model(shop)
#Plot the reserve capacity distribution
pd.DataFrame([gen.frr_up_delivery.get().rename(gen.get_name()) for gen in shop.model.generator]).transpose().plot.bar(title="FRR up delivery")
pd.DataFrame([gen.fcr_n_up_delivery.get().rename(gen.get_name()) for gen in shop.model.generator]).transpose().plot.bar(title="FCR-N up delivery")
pd.DataFrame([gen.fcr_n_down_delivery.get().rename(gen.get_name()) for gen in shop.model.generator]).transpose().plot.bar(title="FCR-N down delivery")
Generator 1 on Plant2 delivers most of the reserve capacity when minimum limits and reserve ramping costs are added to the optimization problem. The unit commitment and production schedules of the generators have been altered to accommodate the smoother reserve capacity commitment:
for gen in shop.model.generator:
name = gen.get_name()
p_min = gen.min_prod_individual.get()
p_max = gen.max_prod_individual.get()
prod = gen.production.get()
frr_up = gen.frr_up_delivery.get()
fcr_n_up = gen.fcr_n_up_delivery.get()
fcr_n_down = gen.fcr_n_down_delivery.get()
t = prod.index
fig = go.Figure(layout={'title':"Production and reserves: "+name,'xaxis_title':"Time",'yaxis_title':"Production and reserves [MW]"})
fig.add_trace(go.Scatter(name="P_min",x=t,y=p_min.values,line={'color': "black", 'width': 1,'dash':"dash"},line_shape='hv'))
fig.add_trace(go.Scatter(name="P_max",x=t,y=p_max.values,line={'color': "black", 'width': 1,'dash':"dash"},line_shape='hv'))
fig.add_trace(go.Scatter(name="Production",x=t,y=prod.values,line={'color': "black", 'width': 1},line_shape='hv'))
fig.add_trace(go.Scatter(showlegend=False,x=t,y=prod.values-fcr_n_down,line={'color': "black", 'width': 0},line_shape='hv'))
fig.add_trace(go.Scatter(name="FCR-N down",x=t, y=prod,fill='tonexty',line={'color': "orange", 'width': 0},line_shape='hv'))
fig.add_trace(go.Scatter(name="FCR-N up",x=t,y=prod+fcr_n_up, fill='tonexty',line={'color': "red", 'width': 0},line_shape='hv'))
fig.add_trace(go.Scatter(name="FRR up",x=t,y=prod+frr_up+fcr_n_up, fill='tonexty',line={'color': "blue", 'width': 0},line_shape='hv'))
fig.show()
reserve_cap.py#
import pandas as pd
import numpy as np
def build_model(shop):
starttime = pd.Timestamp('2018-01-23 00:00:00')
endtime = pd.Timestamp('2018-01-26')
shop.set_time_resolution(starttime=starttime, endtime=endtime, timeunit="hour", timeresolution=pd.Series(index=[starttime],data=[1]))
rsv1 = shop.model.reservoir.add_object('Reservoir1')
rsv1.max_vol.set(39)
rsv1.lrl.set(860)
rsv1.hrl.set(905)
rsv1.vol_head.set(pd.Series([860, 906, 907], index=[0, 39, 41.66], name=0))
rsv2 = shop.model.reservoir.add_object('Reservoir2')
rsv2.max_vol.set(97.5)
rsv2.lrl.set(650)
rsv2.hrl.set(679)
rsv2.vol_head.set(pd.Series([650, 679, 680], index=[0, 97.5, 104.15], name=0))
plant1 = shop.model.plant.add_object('Plant1')
plant1.outlet_line.set(672)
plant1.main_loss.set([0])
plant1.penstock_loss.set([0.001])
plant1.mip_flag.set(1)
for gen_no in range(2):
gen=shop.model.generator.add_object(f"{plant1.get_name()}_G{str(gen_no+1)}")
gen.connect_to(plant1)
gen.penstock.set(1)
gen.p_min.set(60)
gen.p_max.set(120)
gen.p_nom.set(120)
gen.startcost.set(300)
gen.gen_eff_curve.set(pd.Series([100, 100], index=[60, 120]))
gen.turb_eff_curves.set([pd.Series([85.8733, 87.0319, 88.0879, 89.0544, 89.9446, 90.7717, 91.5488, 92.2643, 92.8213, 93.1090, 93.2170, 93.0390, 92.6570, 92.1746],
index=[28.12, 30.45, 32.78, 35.11, 37.45, 39.78, 42.11, 44.44, 46.77, 49.10, 51.43, 53.76, 56.10, 58.83],
name=170),
pd.Series([86.7321, 87.9022, 88.9688, 89.9450, 90.8441, 91.6794, 92.4643, 93.1870, 93.7495, 94.0401, 94.1492, 93.9694, 93.5836, 93.0964],
index=[28.12, 30.45, 32.78, 35.11, 37.45, 39.78, 42.11, 44.44, 46.77, 49.10, 51.43, 53.76, 56.10, 58.83],
name=200),
pd.Series([87.5908, 88.7725, 89.8497, 90.8355, 91.7435, 92.5871, 93.3798, 94.1096, 94.6777, 94.9712, 95.0813, 94.8998, 94.5101, 94.0181],
index=[28.12, 30.45, 32.78, 35.11, 37.45, 39.78, 42.11, 44.44, 46.77, 49.10, 51.43, 53.76, 56.10, 58.83],
name=230)])
plant2 = shop.model.plant.add_object('Plant2')
plant2.outlet_line.set(586)
plant2.main_loss.set([0])
plant2.penstock_loss.set([0.0001,0.0002])
plant2.mip_flag.set(1)
for gen_no in range(4):
gen=shop.model.generator.add_object(f"{plant2.get_name()}_G{str(gen_no+1)}")
gen.connect_to(plant2)
if gen_no == 0:
gen.penstock.set(1)
gen.p_min.set(100)
gen.p_max.set(180)
gen.p_nom.set(180)
gen.startcost.set(300)
gen.gen_eff_curve.set(pd.Series([100, 100], index=[100, 180]))
gen.turb_eff_curves.set([pd.Series([92.7201, 93.2583, 93.7305, 94.1368, 94.4785, 94.7525, 94.9606, 95.1028, 95.1790, 95.1892, 95.1335, 95.0118, 94.8232, 94.5191],
index=[126.54, 137.03, 147.51, 158.00, 168.53, 179.01, 189.50, 199.98, 210.47, 220.95, 231.44, 241.92, 252.45, 264.74],
name=60)])
else:
gen.penstock.set(2)
gen.p_min.set(30)
gen.p_max.set(55)
gen.p_nom.set(55)
gen.startcost.set(300)
gen.gen_eff_curve.set(pd.Series([100, 100], index=[30, 55]))
gen.turb_eff_curves.set([pd.Series([83.8700, 85.1937, 86.3825, 87.4362, 88.3587, 89.1419, 89.7901, 90.3033, 90.6815, 90.9248, 91.0331, 91.0063, 90.8436, 90.4817],
index=[40.82, 44.20, 47.58, 50.97, 54.36, 57.75, 61.13, 64.51, 67.89, 71.27, 74.66, 78.04, 81.44, 85.40],
name=60)])
rsv1.connect_to(plant1)
plant1.connect_to(rsv2)
rsv2.connect_to(plant2)
rsv1.start_head.set(900)
rsv2.start_head.set(670)
rsv1.energy_value_input.set(30)
rsv2.energy_value_input.set(10)
rsv2.inflow.set(pd.Series([60], [starttime]))
da = shop.model.market.add_object('Day_ahead')
da.sale_price.set(pd.DataFrame([32.992,31.122,29.312,28.072,30.012,33.362,42.682,74.822,77.732,62.332,55.892,46.962,42.582,40.942,39.212,39.142,41.672,46.922,37.102,32.992,31.272,29.752,28.782,28.082,27.242,26.622,25.732,25.392,25.992,27.402,28.942,32.182,33.082,32.342,30.912,30.162,30.062,29.562,29.462,29.512,29.672,30.072,29.552,28.862,28.412,28.072,27.162,25.502,26.192,25.222,24.052,23.892,23.682,26.092,28.202,30.902,31.572,31.462,31.172,30.912,30.572,30.602,30.632,31.062,32.082,36.262,34.472,32.182,31.492,30.732,29.712,28.982],
index=[starttime + pd.Timedelta(hours=i) for i in range(0,72)]))
da.max_sale.set(pd.Series([9999], [starttime]))
da.buy_price.set(da.sale_price.get()+0.002)
da.max_buy.set(pd.Series([9999], [starttime]))
settings = shop.model.global_settings.global_settings
settings.mipgap_rel.set(0)
settings.mipgap_abs.set(0)
def run_model(shop):
shop.start_sim([], ['3'])
shop.set_code(['incremental'], [])
shop.start_sim([], ['5'])
model.yaml#
time:
starttime: 2018-01-23 00:00:00
endtime: 2018-01-26 00:00:00
timeunit: hour
timeresolution:
2018-01-23 00:00:00: 1
model:
reservoir:
Reservoir1:
start_head: 900
max_vol: 39
lrl: 860
hrl: 905
vol_head:
ref: 0
x:
- 0
- 39
- 41.66
y:
- 860
- 906
- 907
energy_value_input: 30
Reservoir2:
start_head: 670
max_vol: 97.5
lrl: 650
hrl: 679
vol_head:
ref: 0
x:
- 0
- 97.5
- 104.15
y:
- 650
- 679
- 680
inflow:
2018-01-23 00:00:00: 60
energy_value_input: 10
plant:
Plant1:
equal_distribution: -1
outlet_line: 672
main_loss:
- 0
penstock_loss:
- 0.001
mip_flag:
2018-01-23 00:00:00: 1
Plant2:
equal_distribution: -1
outlet_line: 586
main_loss:
- 0
penstock_loss:
- 0.0001
- 0.0002
mip_flag:
2018-01-23 00:00:00: 1
generator:
Plant1_G1:
initial_state: -1
penstock: 1
p_min: 60
p_max: 120
p_nom: 120
gen_eff_curve:
ref: 0
x:
- 60
- 120
y:
- 100
- 100
turb_eff_curves:
- ref: 170
x:
- 28.12
- 30.45
- 32.78
- 35.11
- 37.45
- 39.78
- 42.11
- 44.44
- 46.77
- 49.1
- 51.43
- 53.76
- 56.1
- 58.83
y:
- 85.8733
- 87.0319
- 88.0879
- 89.0544
- 89.9446
- 90.7717
- 91.5488
- 92.2643
- 92.8213
- 93.109
- 93.217
- 93.039
- 92.657
- 92.1746
- ref: 200
x:
- 28.12
- 30.45
- 32.78
- 35.11
- 37.45
- 39.78
- 42.11
- 44.44
- 46.77
- 49.1
- 51.43
- 53.76
- 56.1
- 58.83
y:
- 86.7321
- 87.9022
- 88.9688
- 89.945
- 90.8441
- 91.6794
- 92.4643
- 93.187
- 93.7495
- 94.0401
- 94.1492
- 93.9694
- 93.5836
- 93.0964
- ref: 230
x:
- 28.12
- 30.45
- 32.78
- 35.11
- 37.45
- 39.78
- 42.11
- 44.44
- 46.77
- 49.1
- 51.43
- 53.76
- 56.1
- 58.83
y:
- 87.5908
- 88.7725
- 89.8497
- 90.8355
- 91.7435
- 92.5871
- 93.3798
- 94.1096
- 94.6777
- 94.9712
- 95.0813
- 94.8998
- 94.5101
- 94.0181
startcost:
2018-01-23 00:00:00: 300
Plant1_G2:
initial_state: -1
penstock: 1
p_min: 60
p_max: 120
p_nom: 120
gen_eff_curve:
ref: 0
x:
- 60
- 120
y:
- 100
- 100
turb_eff_curves:
- ref: 170
x:
- 28.12
- 30.45
- 32.78
- 35.11
- 37.45
- 39.78
- 42.11
- 44.44
- 46.77
- 49.1
- 51.43
- 53.76
- 56.1
- 58.83
y:
- 85.8733
- 87.0319
- 88.0879
- 89.0544
- 89.9446
- 90.7717
- 91.5488
- 92.2643
- 92.8213
- 93.109
- 93.217
- 93.039
- 92.657
- 92.1746
- ref: 200
x:
- 28.12
- 30.45
- 32.78
- 35.11
- 37.45
- 39.78
- 42.11
- 44.44
- 46.77
- 49.1
- 51.43
- 53.76
- 56.1
- 58.83
y:
- 86.7321
- 87.9022
- 88.9688
- 89.945
- 90.8441
- 91.6794
- 92.4643
- 93.187
- 93.7495
- 94.0401
- 94.1492
- 93.9694
- 93.5836
- 93.0964
- ref: 230
x:
- 28.12
- 30.45
- 32.78
- 35.11
- 37.45
- 39.78
- 42.11
- 44.44
- 46.77
- 49.1
- 51.43
- 53.76
- 56.1
- 58.83
y:
- 87.5908
- 88.7725
- 89.8497
- 90.8355
- 91.7435
- 92.5871
- 93.3798
- 94.1096
- 94.6777
- 94.9712
- 95.0813
- 94.8998
- 94.5101
- 94.0181
startcost:
2018-01-23 00:00:00: 300
Plant2_G1:
initial_state: -1
penstock: 1
p_min: 100
p_max: 180
p_nom: 180
gen_eff_curve:
ref: 0
x:
- 100
- 180
y:
- 100
- 100
turb_eff_curves:
- ref: 60
x:
- 126.54
- 137.03
- 147.51
- 158
- 168.53
- 179.01
- 189.5
- 199.98
- 210.47
- 220.95
- 231.44
- 241.92
- 252.45
- 264.74
y:
- 92.7201
- 93.2583
- 93.7305
- 94.1368
- 94.4785
- 94.7525
- 94.9606
- 95.1028
- 95.179
- 95.1892
- 95.1335
- 95.0118
- 94.8232
- 94.5191
startcost:
2018-01-23 00:00:00: 300
Plant2_G2:
initial_state: -1
penstock: 2
p_min: 30
p_max: 55
p_nom: 55
gen_eff_curve:
ref: 0
x:
- 30
- 55
y:
- 100
- 100
turb_eff_curves:
- ref: 60
x:
- 40.82
- 44.2
- 47.58
- 50.97
- 54.36
- 57.75
- 61.13
- 64.51
- 67.89
- 71.27
- 74.66
- 78.04
- 81.44
- 85.4
y:
- 83.87
- 85.1937
- 86.3825
- 87.4362
- 88.3587
- 89.1419
- 89.7901
- 90.3033
- 90.6815
- 90.9248
- 91.0331
- 91.0063
- 90.8436
- 90.4817
startcost:
2018-01-23 00:00:00: 300
Plant2_G3:
initial_state: -1
penstock: 2
p_min: 30
p_max: 55
p_nom: 55
gen_eff_curve:
ref: 0
x:
- 30
- 55
y:
- 100
- 100
turb_eff_curves:
- ref: 60
x:
- 40.82
- 44.2
- 47.58
- 50.97
- 54.36
- 57.75
- 61.13
- 64.51
- 67.89
- 71.27
- 74.66
- 78.04
- 81.44
- 85.4
y:
- 83.87
- 85.1937
- 86.3825
- 87.4362
- 88.3587
- 89.1419
- 89.7901
- 90.3033
- 90.6815
- 90.9248
- 91.0331
- 91.0063
- 90.8436
- 90.4817
startcost:
2018-01-23 00:00:00: 300
Plant2_G4:
initial_state: -1
penstock: 2
p_min: 30
p_max: 55
p_nom: 55
gen_eff_curve:
ref: 0
x:
- 30
- 55
y:
- 100
- 100
turb_eff_curves:
- ref: 60
x:
- 40.82
- 44.2
- 47.58
- 50.97
- 54.36
- 57.75
- 61.13
- 64.51
- 67.89
- 71.27
- 74.66
- 78.04
- 81.44
- 85.4
y:
- 83.87
- 85.1937
- 86.3825
- 87.4362
- 88.3587
- 89.1419
- 89.7901
- 90.3033
- 90.6815
- 90.9248
- 91.0331
- 91.0063
- 90.8436
- 90.4817
startcost:
2018-01-23 00:00:00: 300
market:
Day_ahead:
market_type: ENERGY
max_buy:
2018-01-23 00:00:00: 9999
max_sale:
2018-01-23 00:00:00: 9999
buy_price:
2018-01-23 00:00:00: 32.994
2018-01-23 01:00:00: 31.124
2018-01-23 02:00:00: 29.314
2018-01-23 03:00:00: 28.074
2018-01-23 04:00:00: 30.014
2018-01-23 05:00:00: 33.364
2018-01-23 06:00:00: 42.684
2018-01-23 07:00:00: 74.824
2018-01-23 08:00:00: 77.734
2018-01-23 09:00:00: 62.334
2018-01-23 10:00:00: 55.894
2018-01-23 11:00:00: 46.964
2018-01-23 12:00:00: 42.584
2018-01-23 13:00:00: 40.944
2018-01-23 14:00:00: 39.214
2018-01-23 15:00:00: 39.144
2018-01-23 16:00:00: 41.674
2018-01-23 17:00:00: 46.924
2018-01-23 18:00:00: 37.104
2018-01-23 19:00:00: 32.994
2018-01-23 20:00:00: 31.274
2018-01-23 21:00:00: 29.754
2018-01-23 22:00:00: 28.784
2018-01-23 23:00:00: 28.084
2018-01-24 00:00:00: 27.244
2018-01-24 01:00:00: 26.624
2018-01-24 02:00:00: 25.734
2018-01-24 03:00:00: 25.394
2018-01-24 04:00:00: 25.994
2018-01-24 05:00:00: 27.404
2018-01-24 06:00:00: 28.944
2018-01-24 07:00:00: 32.184
2018-01-24 08:00:00: 33.084
2018-01-24 09:00:00: 32.344
2018-01-24 10:00:00: 30.914
2018-01-24 11:00:00: 30.164
2018-01-24 12:00:00: 30.064
2018-01-24 13:00:00: 29.564
2018-01-24 14:00:00: 29.464
2018-01-24 15:00:00: 29.514
2018-01-24 16:00:00: 29.674
2018-01-24 17:00:00: 30.074
2018-01-24 18:00:00: 29.554
2018-01-24 19:00:00: 28.864
2018-01-24 20:00:00: 28.414
2018-01-24 21:00:00: 28.074
2018-01-24 22:00:00: 27.164
2018-01-24 23:00:00: 25.504
2018-01-25 00:00:00: 26.194
2018-01-25 01:00:00: 25.224
2018-01-25 02:00:00: 24.054
2018-01-25 03:00:00: 23.894
2018-01-25 04:00:00: 23.684
2018-01-25 05:00:00: 26.094
2018-01-25 06:00:00: 28.204
2018-01-25 07:00:00: 30.904
2018-01-25 08:00:00: 31.574
2018-01-25 09:00:00: 31.464
2018-01-25 10:00:00: 31.174
2018-01-25 11:00:00: 30.914
2018-01-25 12:00:00: 30.574
2018-01-25 13:00:00: 30.604
2018-01-25 14:00:00: 30.634
2018-01-25 15:00:00: 31.064
2018-01-25 16:00:00: 32.084
2018-01-25 17:00:00: 36.264
2018-01-25 18:00:00: 34.474
2018-01-25 19:00:00: 32.184
2018-01-25 20:00:00: 31.494
2018-01-25 21:00:00: 30.734
2018-01-25 22:00:00: 29.714
2018-01-25 23:00:00: 28.984
sale_price:
2018-01-23 00:00:00: 32.992
2018-01-23 01:00:00: 31.122
2018-01-23 02:00:00: 29.312
2018-01-23 03:00:00: 28.072
2018-01-23 04:00:00: 30.012
2018-01-23 05:00:00: 33.362
2018-01-23 06:00:00: 42.682
2018-01-23 07:00:00: 74.822
2018-01-23 08:00:00: 77.732
2018-01-23 09:00:00: 62.332
2018-01-23 10:00:00: 55.892
2018-01-23 11:00:00: 46.962
2018-01-23 12:00:00: 42.582
2018-01-23 13:00:00: 40.942
2018-01-23 14:00:00: 39.212
2018-01-23 15:00:00: 39.142
2018-01-23 16:00:00: 41.672
2018-01-23 17:00:00: 46.922
2018-01-23 18:00:00: 37.102
2018-01-23 19:00:00: 32.992
2018-01-23 20:00:00: 31.272
2018-01-23 21:00:00: 29.752
2018-01-23 22:00:00: 28.782
2018-01-23 23:00:00: 28.082
2018-01-24 00:00:00: 27.242
2018-01-24 01:00:00: 26.622
2018-01-24 02:00:00: 25.732
2018-01-24 03:00:00: 25.392
2018-01-24 04:00:00: 25.992
2018-01-24 05:00:00: 27.402
2018-01-24 06:00:00: 28.942
2018-01-24 07:00:00: 32.182
2018-01-24 08:00:00: 33.082
2018-01-24 09:00:00: 32.342
2018-01-24 10:00:00: 30.912
2018-01-24 11:00:00: 30.162
2018-01-24 12:00:00: 30.062
2018-01-24 13:00:00: 29.562
2018-01-24 14:00:00: 29.462
2018-01-24 15:00:00: 29.512
2018-01-24 16:00:00: 29.672
2018-01-24 17:00:00: 30.072
2018-01-24 18:00:00: 29.552
2018-01-24 19:00:00: 28.862
2018-01-24 20:00:00: 28.412
2018-01-24 21:00:00: 28.072
2018-01-24 22:00:00: 27.162
2018-01-24 23:00:00: 25.502
2018-01-25 00:00:00: 26.192
2018-01-25 01:00:00: 25.222
2018-01-25 02:00:00: 24.052
2018-01-25 03:00:00: 23.892
2018-01-25 04:00:00: 23.682
2018-01-25 05:00:00: 26.092
2018-01-25 06:00:00: 28.202
2018-01-25 07:00:00: 30.902
2018-01-25 08:00:00: 31.572
2018-01-25 09:00:00: 31.462
2018-01-25 10:00:00: 31.172
2018-01-25 11:00:00: 30.912
2018-01-25 12:00:00: 30.572
2018-01-25 13:00:00: 30.602
2018-01-25 14:00:00: 30.632
2018-01-25 15:00:00: 31.062
2018-01-25 16:00:00: 32.082
2018-01-25 17:00:00: 36.262
2018-01-25 18:00:00: 34.472
2018-01-25 19:00:00: 32.182
2018-01-25 20:00:00: 31.492
2018-01-25 21:00:00: 30.732
2018-01-25 22:00:00: 29.712
2018-01-25 23:00:00: 28.982
connections:
- from: Plant1
to: Reservoir2
from_type: plant
to_type: reservoir
connection_type: connection_standard
order: 0
- from: Reservoir1
to: Plant1
from_type: reservoir
to_type: plant
connection_type: connection_standard
order: 0
- from: Plant1_G1
to: Plant1
from_type: generator
to_type: plant
connection_type: connection_standard
order: 1
- from: Plant1_G2
to: Plant1
from_type: generator
to_type: plant
connection_type: connection_standard
order: 2
- from: Reservoir2
to: Plant2
from_type: reservoir
to_type: plant
connection_type: connection_standard
order: 0
- from: Plant2_G1
to: Plant2
from_type: generator
to_type: plant
connection_type: connection_standard
order: 1
- from: Plant2_G2
to: Plant2
from_type: generator
to_type: plant
connection_type: connection_standard
order: 2
- from: Plant2_G3
to: Plant2
from_type: generator
to_type: plant
connection_type: connection_standard
order: 3
- from: Plant2_G4
to: Plant2
from_type: generator
to_type: plant
connection_type: connection_standard
order: 4
commands:
- set mipgap 0.0
- set mipgap /ABSOLUTE 0.0
reserve_obligation.yaml#
model:
reserve_group:
fcr_n_group:
fcr_n_up_obligation:
2018-01-23 00:00:00: 10
fcr_n_down_obligation:
2018-01-23 00:00:00: 10
frr_group:
frr_up_obligation:
2018-01-23 00:00:00: 15
connections:
- from: fcr_n_group
to: Plant1_G1
from_type: reserve_group
to_type: generator
connection_type: connection_standard
order: 0
- from: fcr_n_group
to: Plant1_G2
from_type: reserve_group
to_type: generator
connection_type: connection_standard
order: 0
- from: fcr_n_group
to: Plant2_G1
from_type: reserve_group
to_type: generator
connection_type: connection_standard
order: 0
- from: frr_group
to: Plant2_G1
from_type: reserve_group
to_type: generator
connection_type: connection_standard
order: 1
- from: fcr_n_group
to: Plant2_G2
from_type: reserve_group
to_type: generator
connection_type: connection_standard
order: 0
- from: frr_group
to: Plant2_G2
from_type: reserve_group
to_type: generator
connection_type: connection_standard
order: 1
- from: fcr_n_group
to: Plant2_G3
from_type: reserve_group
to_type: generator
connection_type: connection_standard
order: 0
- from: frr_group
to: Plant2_G3
from_type: reserve_group
to_type: generator
connection_type: connection_standard
order: 1
- from: fcr_n_group
to: Plant2_G4
from_type: reserve_group
to_type: generator
connection_type: connection_standard
order: 0
- from: frr_group
to: Plant2_G4
from_type: reserve_group
to_type: generator
connection_type: connection_standard
order: 1
smooth_reserve.yaml#
model:
generator:
Plant1_G1:
fcr_n_up_min:
2018-01-23 00:00:00: 1
fcr_n_down_min:
2018-01-23 00:00:00: 1
Plant1_G2:
fcr_n_up_min:
2018-01-23 00:00:00: 1
fcr_n_down_min:
2018-01-23 00:00:00: 1
Plant2_G1:
frr_up_min:
2018-01-23 00:00:00: 1
fcr_n_up_min:
2018-01-23 00:00:00: 1
fcr_n_down_min:
2018-01-23 00:00:00: 1
Plant2_G2:
frr_up_min:
2018-01-23 00:00:00: 1
fcr_n_up_min:
2018-01-23 00:00:00: 1
fcr_n_down_min:
2018-01-23 00:00:00: 1
Plant2_G3:
frr_up_min:
2018-01-23 00:00:00: 1
fcr_n_up_min:
2018-01-23 00:00:00: 1
fcr_n_down_min:
2018-01-23 00:00:00: 1
Plant2_G4:
frr_up_min:
2018-01-23 00:00:00: 1
fcr_n_up_min:
2018-01-23 00:00:00: 1
fcr_n_down_min:
2018-01-23 00:00:00: 1
commands:
- set reserve_ramping_cost 5
model.ascii#
#;
# Name of the datafile is: model.ascii;
#;
SIZE
#Num_reservoirs;Num_plants;Num_gates;Num_junctions
2 2 0 0
OPTIMIZATION time
#Start_time; End_time;
20180123000000 20180126000000
#;N_full_iterations;Accuracy;
OPTIMIZATION 1000 1.00
#Time resolution in the optimization;
#Id;Number;Start_Time;Time_unit;Period;Data_type;Y_unit;Pts;
0 0 20180123000000000 HOUR 0 -1 NO_UNIT 73
# Time; f(t);
20180123000000000 1.00000000000000000
GLOBAL_SETTINGS mipgap_rel
# relative mipgap for the optimization;
0.000000
GLOBAL_SETTINGS mipgap_abs
# absolute mipgap_unit for the optimization;
0.000000
RESERVOIR attributes Reservoir1
#ID;Water_course;Type;Maxvol;Lrl;Hrl;
0 0 0 39.000 860.000 905.000
RESERVOIR vol_head Reservoir1
#Id;Number;Reference;Pts;X_unit;Y_unit
0 0 0.00 3 MM3 METER
# x_value; y_value;
0.0000000000 860.0000000000
39.0000000000 906.0000000000
41.6600000000 907.0000000000
RESERVOIR energy_value_input Reservoir1
#Id;Number;Reference;Pts;X_unit;Y_unit
0 0 0.00 1 MM3 NOK/MWH
# x_value; y_value;
0.0000000000 30.0000000000
RESERVOIR attributes Reservoir2
#ID;Water_course;Type;Maxvol;Lrl;Hrl;
0 0 0 97.500 650.000 679.000
RESERVOIR vol_head Reservoir2
#Id;Number;Reference;Pts;X_unit;Y_unit
0 0 0.00 3 MM3 METER
# x_value; y_value;
0.0000000000 650.0000000000
97.5000000000 679.0000000000
104.1500000000 680.0000000000
RESERVOIR inflow Reservoir2
#Id;Number;Start_Time;Time_unit;Period;Data_type;Y_unit;Pts;
0 0 20180123000000000 HOUR 0 -1 M3/S 73
# Time; f(t);
20180123000000000 60.00000000000000000
RESERVOIR energy_value_input Reservoir2
#Id;Number;Reference;Pts;X_unit;Y_unit
0 0 0.00 1 MM3 NOK/MWH
# x_value; y_value;
0.0000000000 10.0000000000
PLANT attributes Plant1
#Id;Water_course;Type;Future_use;Prod_area;Num_gen;Num_pump;
0 0 6 0 1 2 0
#Num_main_seg;Num_penstock;Time_delay;Read_prod_factor;Outlet_line;
1 1 0 0.000000 672.000000
0.000000
0.001000
PLANT mip_flag Plant1
#Id;Number;Start_Time;Time_unit;Period;Data_type;Y_unit;Pts;
0 0 20180123000000000 HOUR 0 -1 NO_UNIT 73
# Time; f(t);
20180123000000000 1.00000000000000000
GENERATOR attributes Plant1 1
#Id Type Penstock Nom_prod Min_prod Max_prod Start_cost
0 7 1 120.00 60.00 120.00 300.00
GENERATOR gen_eff_curve Plant1 1
#Id;Number;Reference;Pts;X_unit;Y_unit
0 0 0.00 2 MW %
# x_value; y_value;
60.0000000000 100.0000000000
120.0000000000 100.0000000000
GENERATOR turb_eff_curves Plant1 1
#Id;Number;Reference;Pts;X_unit;Y_unit
0 0 170.00 14 M3/S %
# x_value; y_value;
28.1200000000 85.8733000000
30.4500000000 87.0319000000
32.7800000000 88.0879000000
35.1100000000 89.0544000000
37.4500000000 89.9446000000
39.7800000000 90.7717000000
42.1100000000 91.5488000000
44.4400000000 92.2643000000
46.7700000000 92.8213000000
49.1000000000 93.1090000000
51.4300000000 93.2170000000
53.7600000000 93.0390000000
56.1000000000 92.6570000000
58.8300000000 92.1746000000
GENERATOR turb_eff_curves Plant1 1
#Id;Number;Reference;Pts;X_unit;Y_unit
0 0 200.00 14 M3/S %
# x_value; y_value;
28.1200000000 86.7321000000
30.4500000000 87.9022000000
32.7800000000 88.9688000000
35.1100000000 89.9450000000
37.4500000000 90.8441000000
39.7800000000 91.6794000000
42.1100000000 92.4643000000
44.4400000000 93.1870000000
46.7700000000 93.7495000000
49.1000000000 94.0401000000
51.4300000000 94.1492000000
53.7600000000 93.9694000000
56.1000000000 93.5836000000
58.8300000000 93.0964000000
GENERATOR turb_eff_curves Plant1 1
#Id;Number;Reference;Pts;X_unit;Y_unit
0 0 230.00 14 M3/S %
# x_value; y_value;
28.1200000000 87.5908000000
30.4500000000 88.7725000000
32.7800000000 89.8497000000
35.1100000000 90.8355000000
37.4500000000 91.7435000000
39.7800000000 92.5871000000
42.1100000000 93.3798000000
44.4400000000 94.1096000000
46.7700000000 94.6777000000
49.1000000000 94.9712000000
51.4300000000 95.0813000000
53.7600000000 94.8998000000
56.1000000000 94.5101000000
58.8300000000 94.0181000000
GENERATOR attributes Plant1 2
#Id Type Penstock Nom_prod Min_prod Max_prod Start_cost
0 7 1 120.00 60.00 120.00 300.00
GENERATOR gen_eff_curve Plant1 2
#Id;Number;Reference;Pts;X_unit;Y_unit
0 0 0.00 2 MW %
# x_value; y_value;
60.0000000000 100.0000000000
120.0000000000 100.0000000000
GENERATOR turb_eff_curves Plant1 2
#Id;Number;Reference;Pts;X_unit;Y_unit
0 0 170.00 14 M3/S %
# x_value; y_value;
28.1200000000 85.8733000000
30.4500000000 87.0319000000
32.7800000000 88.0879000000
35.1100000000 89.0544000000
37.4500000000 89.9446000000
39.7800000000 90.7717000000
42.1100000000 91.5488000000
44.4400000000 92.2643000000
46.7700000000 92.8213000000
49.1000000000 93.1090000000
51.4300000000 93.2170000000
53.7600000000 93.0390000000
56.1000000000 92.6570000000
58.8300000000 92.1746000000
GENERATOR turb_eff_curves Plant1 2
#Id;Number;Reference;Pts;X_unit;Y_unit
0 0 200.00 14 M3/S %
# x_value; y_value;
28.1200000000 86.7321000000
30.4500000000 87.9022000000
32.7800000000 88.9688000000
35.1100000000 89.9450000000
37.4500000000 90.8441000000
39.7800000000 91.6794000000
42.1100000000 92.4643000000
44.4400000000 93.1870000000
46.7700000000 93.7495000000
49.1000000000 94.0401000000
51.4300000000 94.1492000000
53.7600000000 93.9694000000
56.1000000000 93.5836000000
58.8300000000 93.0964000000
GENERATOR turb_eff_curves Plant1 2
#Id;Number;Reference;Pts;X_unit;Y_unit
0 0 230.00 14 M3/S %
# x_value; y_value;
28.1200000000 87.5908000000
30.4500000000 88.7725000000
32.7800000000 89.8497000000
35.1100000000 90.8355000000
37.4500000000 91.7435000000
39.7800000000 92.5871000000
42.1100000000 93.3798000000
44.4400000000 94.1096000000
46.7700000000 94.6777000000
49.1000000000 94.9712000000
51.4300000000 95.0813000000
53.7600000000 94.8998000000
56.1000000000 94.5101000000
58.8300000000 94.0181000000
GENERATOR startcost Plant1 2
#Id;Number;Start_Time;Time_unit;Period;Data_type;Y_unit;Pts;
0 0 20180123000000000 HOUR 0 -1 NOK 73
# Time; f(t);
20180123000000000 300.00000000000000000
PLANT attributes Plant2
#Id;Water_course;Type;Future_use;Prod_area;Num_gen;Num_pump;
0 0 6 0 1 4 0
#Num_main_seg;Num_penstock;Time_delay;Read_prod_factor;Outlet_line;
1 2 0 0.000000 586.000000
0.000000
0.000100 0.000200
PLANT mip_flag Plant2
#Id;Number;Start_Time;Time_unit;Period;Data_type;Y_unit;Pts;
0 0 20180123000000000 HOUR 0 -1 NO_UNIT 73
# Time; f(t);
20180123000000000 1.00000000000000000
GENERATOR attributes Plant2 1
#Id Type Penstock Nom_prod Min_prod Max_prod Start_cost
0 7 1 180.00 100.00 180.00 300.00
GENERATOR gen_eff_curve Plant2 1
#Id;Number;Reference;Pts;X_unit;Y_unit
0 0 0.00 2 MW %
# x_value; y_value;
100.0000000000 100.0000000000
180.0000000000 100.0000000000
GENERATOR turb_eff_curves Plant2 1
#Id;Number;Reference;Pts;X_unit;Y_unit
0 0 60.00 14 M3/S %
# x_value; y_value;
126.5400000000 92.7201000000
137.0300000000 93.2583000000
147.5100000000 93.7305000000
158.0000000000 94.1368000000
168.5300000000 94.4785000000
179.0100000000 94.7525000000
189.5000000000 94.9606000000
199.9800000000 95.1028000000
210.4700000000 95.1790000000
220.9500000000 95.1892000000
231.4400000000 95.1335000000
241.9200000000 95.0118000000
252.4500000000 94.8232000000
264.7400000000 94.5191000000
GENERATOR attributes Plant2 2
#Id Type Penstock Nom_prod Min_prod Max_prod Start_cost
0 7 2 55.00 30.00 55.00 300.00
GENERATOR gen_eff_curve Plant2 2
#Id;Number;Reference;Pts;X_unit;Y_unit
0 0 0.00 2 MW %
# x_value; y_value;
30.0000000000 100.0000000000
55.0000000000 100.0000000000
GENERATOR turb_eff_curves Plant2 2
#Id;Number;Reference;Pts;X_unit;Y_unit
0 0 60.00 14 M3/S %
# x_value; y_value;
40.8200000000 83.8700000000
44.2000000000 85.1937000000
47.5800000000 86.3825000000
50.9700000000 87.4362000000
54.3600000000 88.3587000000
57.7500000000 89.1419000000
61.1300000000 89.7901000000
64.5100000000 90.3033000000
67.8900000000 90.6815000000
71.2700000000 90.9248000000
74.6600000000 91.0331000000
78.0400000000 91.0063000000
81.4400000000 90.8436000000
85.4000000000 90.4817000000
GENERATOR attributes Plant2 3
#Id Type Penstock Nom_prod Min_prod Max_prod Start_cost
0 7 2 55.00 30.00 55.00 300.00
GENERATOR gen_eff_curve Plant2 3
#Id;Number;Reference;Pts;X_unit;Y_unit
0 0 0.00 2 MW %
# x_value; y_value;
30.0000000000 100.0000000000
55.0000000000 100.0000000000
GENERATOR turb_eff_curves Plant2 3
#Id;Number;Reference;Pts;X_unit;Y_unit
0 0 60.00 14 M3/S %
# x_value; y_value;
40.8200000000 83.8700000000
44.2000000000 85.1937000000
47.5800000000 86.3825000000
50.9700000000 87.4362000000
54.3600000000 88.3587000000
57.7500000000 89.1419000000
61.1300000000 89.7901000000
64.5100000000 90.3033000000
67.8900000000 90.6815000000
71.2700000000 90.9248000000
74.6600000000 91.0331000000
78.0400000000 91.0063000000
81.4400000000 90.8436000000
85.4000000000 90.4817000000
GENERATOR attributes Plant2 4
#Id Type Penstock Nom_prod Min_prod Max_prod Start_cost
0 7 2 55.00 30.00 55.00 300.00
GENERATOR gen_eff_curve Plant2 4
#Id;Number;Reference;Pts;X_unit;Y_unit
0 0 0.00 2 MW %
# x_value; y_value;
30.0000000000 100.0000000000
55.0000000000 100.0000000000
GENERATOR turb_eff_curves Plant2 4
#Id;Number;Reference;Pts;X_unit;Y_unit
0 0 60.00 14 M3/S %
# x_value; y_value;
40.8200000000 83.8700000000
44.2000000000 85.1937000000
47.5800000000 86.3825000000
50.9700000000 87.4362000000
54.3600000000 88.3587000000
57.7500000000 89.1419000000
61.1300000000 89.7901000000
64.5100000000 90.3033000000
67.8900000000 90.6815000000
71.2700000000 90.9248000000
74.6600000000 91.0331000000
78.0400000000 91.0063000000
81.4400000000 90.8436000000
85.4000000000 90.4817000000
#Write connection data for the hydro power system
#; From_type/To_type; From_name; To_name;
CONNECT RESERVOIR/PLANT Reservoir1 Plant1
CONNECT RESERVOIR/PLANT Reservoir2 Plant2
CONNECT PLANT/RESERVOIR Plant1 Reservoir2
#Initial reservoir volumes;
STARTRES 2 METER
#Name; Head (masl);
Reservoir1 900.0
Reservoir2 670.0
MULTI_MARKET price_buy 1 0
#Id;Number;Start_Time;Time_unit;Period;Data_type;Y_unit;Pts;
0 0 20180123000000000 HOUR 0 -1 NOK/MWH 73
# Time; f(t);
20180123000000000 32.99399999999999977
20180123010000000 31.12399999999999878
20180123020000000 29.31400000000000006
20180123030000000 28.07399999999999807
20180123040000000 30.01399999999999935
20180123050000000 33.36400000000000432
20180123060000000 42.68400000000000460
20180123070000000 74.82399999999999807
20180123080000000 77.73399999999999466
20180123090000000 62.33400000000000318
20180123100000000 55.89400000000000546
20180123110000000 46.96400000000000574
20180123120000000 42.58400000000000318
20180123130000000 40.94400000000000261
20180123140000000 39.21400000000000574
20180123150000000 39.14400000000000546
20180123160000000 41.67399999999999949
20180123170000000 46.92399999999999949
20180123180000000 37.10399999999999920
20180123190000000 32.99399999999999977
20180123200000000 31.27399999999999736
20180123210000000 29.75399999999999778
20180123220000000 28.78399999999999892
20180123230000000 28.08399999999999963
20180124000000000 27.24399999999999977
20180124010000000 26.62399999999999878
20180124020000000 25.73399999999999821
20180124030000000 25.39399999999999835
20180124040000000 25.99399999999999977
20180124050000000 27.40399999999999991
20180124060000000 28.94399999999999906
20180124070000000 32.18400000000000460
20180124080000000 33.08400000000000318
20180124090000000 32.34400000000000119
20180124100000000 30.91399999999999793
20180124110000000 30.16399999999999793
20180124120000000 30.06400000000000006
20180124130000000 29.56400000000000006
20180124140000000 29.46399999999999864
20180124150000000 29.51399999999999935
20180124160000000 29.67399999999999949
20180124170000000 30.07399999999999807
20180124180000000 29.55399999999999849
20180124190000000 28.86399999999999721
20180124200000000 28.41399999999999793
20180124210000000 28.07399999999999807
20180124220000000 27.16399999999999793
20180124230000000 25.50399999999999778
20180125000000000 26.19399999999999906
20180125010000000 25.22400000000000020
20180125020000000 24.05399999999999849
20180125030000000 23.89399999999999835
20180125040000000 23.68399999999999750
20180125050000000 26.09399999999999764
20180125060000000 28.20400000000000063
20180125070000000 30.90399999999999991
20180125080000000 31.57399999999999807
20180125090000000 31.46399999999999864
20180125100000000 31.17399999999999949
20180125110000000 30.91399999999999793
20180125120000000 30.57399999999999807
20180125130000000 30.60399999999999920
20180125140000000 30.63400000000000034
20180125150000000 31.06400000000000006
20180125160000000 32.08400000000000318
20180125170000000 36.26400000000000290
20180125180000000 34.47400000000000375
20180125190000000 32.18400000000000460
20180125200000000 31.49399999999999977
20180125210000000 30.73399999999999821
20180125220000000 29.71399999999999864
20180125230000000 28.98399999999999821
20180126000000000 28.98399999999999821
MULTI_MARKET price_sale 1 0
#Id;Number;Start_Time;Time_unit;Period;Data_type;Y_unit;Pts;
0 0 20180123000000000 HOUR 0 -1 NOK/MWH 73
# Time; f(t);
20180123000000000 32.99199999999999733
20180123010000000 31.12199999999999989
20180123020000000 29.31200000000000117
20180123030000000 28.07199999999999918
20180123040000000 30.01200000000000045
20180123050000000 33.36200000000000188
20180123060000000 42.68200000000000216
20180123070000000 74.82200000000000273
20180123080000000 77.73199999999999932
20180123090000000 62.33200000000000074
20180123100000000 55.89200000000000301
20180123110000000 46.96200000000000330
20180123120000000 42.58200000000000074
20180123130000000 40.94200000000000017
20180123140000000 39.21200000000000330
20180123150000000 39.14200000000000301
20180123160000000 41.67199999999999704
20180123170000000 46.92199999999999704
20180123180000000 37.10199999999999676
20180123190000000 32.99199999999999733
20180123200000000 31.27199999999999847
20180123210000000 29.75199999999999889
20180123220000000 28.78200000000000003
20180123230000000 28.08200000000000074
20180124000000000 27.24200000000000088
20180124010000000 26.62199999999999989
20180124020000000 25.73199999999999932
20180124030000000 25.39199999999999946
20180124040000000 25.99200000000000088
20180124050000000 27.40200000000000102
20180124060000000 28.94200000000000017
20180124070000000 32.18200000000000216
20180124080000000 33.08200000000000074
20180124090000000 32.34199999999999875
20180124100000000 30.91199999999999903
20180124110000000 30.16199999999999903
20180124120000000 30.06200000000000117
20180124130000000 29.56200000000000117
20180124140000000 29.46199999999999974
20180124150000000 29.51200000000000045
20180124160000000 29.67200000000000060
20180124170000000 30.07199999999999918
20180124180000000 29.55199999999999960
20180124190000000 28.86199999999999832
20180124200000000 28.41199999999999903
20180124210000000 28.07199999999999918
20180124220000000 27.16199999999999903
20180124230000000 25.50199999999999889
20180125000000000 26.19200000000000017
20180125010000000 25.22200000000000131
20180125020000000 24.05199999999999960
20180125030000000 23.89199999999999946
20180125040000000 23.68199999999999861
20180125050000000 26.09199999999999875
20180125060000000 28.20200000000000173
20180125070000000 30.90200000000000102
20180125080000000 31.57199999999999918
20180125090000000 31.46199999999999974
20180125100000000 31.17200000000000060
20180125110000000 30.91199999999999903
20180125120000000 30.57199999999999918
20180125130000000 30.60200000000000031
20180125140000000 30.63200000000000145
20180125150000000 31.06200000000000117
20180125160000000 32.08200000000000074
20180125170000000 36.26200000000000045
20180125180000000 34.47200000000000131
20180125190000000 32.18200000000000216
20180125200000000 31.49200000000000088
20180125210000000 30.73199999999999932
20180125220000000 29.71199999999999974
20180125230000000 28.98199999999999932
20180126000000000 28.98199999999999932
MULTI_MARKET max_buy 1 0
#Id;Number;Start_Time;Time_unit;Period;Data_type;Y_unit;Pts;
0 0 20180123000000000 HOUR 0 -1 MW 73
# Time; f(t);
20180123000000000 9999.00000000000000000
MULTI_MARKET max_sale 1 0
#Id;Number;Start_Time;Time_unit;Period;Data_type;Y_unit;Pts;
0 0 20180123000000000 HOUR 0 -1 MW 73
# Time; f(t);
20180123000000000 9999.00000000000000000
reserve_obligation.ascii#
RESERVE_GROUP fcr_n_up 1
#Id;Number;Start_Time;Time_unit;Period;Data_type;Y_unit;Pts;
0 0 20180123000000000 HOUR 0 -1 MW 1
# Time; f(t);
20180123000000000 10.0
RESERVE_GROUP fcr_n_down 1
#Id;Number;Start_Time;Time_unit;Period;Data_type;Y_unit;Pts;
0 0 20180123000000000 HOUR 0 -1 MW 1
# Time; f(t);
20180123000000000 10.0
RESERVE_GROUP frr_up 2
#Id;Number;Start_Time;Time_unit;Period;Data_type;Y_unit;Pts;
0 0 20180123000000000 HOUR 0 -1 MW 1
# Time; f(t);
20180123000000000 15.0
#FCR-N UP
GENERATOR gen_fcr_n_up_group Plant1 1
# Id number starttime time_unit period data_type y_unit npts
0 0 20190913060000000 HOUR 8760 -1 NO_UNIT 1
# time y
20190913060000000 1.000000000000
GENERATOR gen_fcr_n_up_group Plant1 2
# Id number starttime time_unit period data_type y_unit npts
0 0 20190913060000000 HOUR 8760 -1 NO_UNIT 1
# time y
20190913060000000 1.000000000000
GENERATOR gen_fcr_n_up_group Plant2 1
# Id number starttime time_unit period data_type y_unit npts
0 0 20190913060000000 HOUR 8760 -1 NO_UNIT 1
# time y
20190913060000000 1.000000000000
GENERATOR gen_fcr_n_up_group Plant2 2
# Id number starttime time_unit period data_type y_unit npts
0 0 20190913060000000 HOUR 8760 -1 NO_UNIT 1
# time y
20190913060000000 1.000000000000
GENERATOR gen_fcr_n_up_group Plant2 3
# Id number starttime time_unit period data_type y_unit npts
0 0 20190913060000000 HOUR 8760 -1 NO_UNIT 1
# time y
20190913060000000 1.000000000000
GENERATOR gen_fcr_n_up_group Plant2 4
# Id number starttime time_unit period data_type y_unit npts
0 0 20190913060000000 HOUR 8760 -1 NO_UNIT 1
# time y
20190913060000000 1.000000000000
#FCR-N DOWN
GENERATOR gen_fcr_n_down_group Plant1 1
# Id number starttime time_unit period data_type y_unit npts
0 0 20190913060000000 HOUR 8760 -1 NO_UNIT 1
# time y
20190913060000000 1.000000000000
GENERATOR gen_fcr_n_down_group Plant1 2
# Id number starttime time_unit period data_type y_unit npts
0 0 20190913060000000 HOUR 8760 -1 NO_UNIT 1
# time y
20190913060000000 1.000000000000
GENERATOR gen_fcr_n_down_group Plant2 1
# Id number starttime time_unit period data_type y_unit npts
0 0 20190913060000000 HOUR 8760 -1 NO_UNIT 1
# time y
20190913060000000 1.000000000000
GENERATOR gen_fcr_n_down_group Plant2 2
# Id number starttime time_unit period data_type y_unit npts
0 0 20190913060000000 HOUR 8760 -1 NO_UNIT 1
# time y
20190913060000000 1.000000000000
GENERATOR gen_fcr_n_down_group Plant2 3
# Id number starttime time_unit period data_type y_unit npts
0 0 20190913060000000 HOUR 8760 -1 NO_UNIT 1
# time y
20190913060000000 1.000000000000
GENERATOR gen_fcr_n_down_group Plant2 4
# Id number starttime time_unit period data_type y_unit npts
0 0 20190913060000000 HOUR 8760 -1 NO_UNIT 1
# time y
20190913060000000 1.000000000000
#FRR UP
GENERATOR gen_frr_up_group Plant2 1
# Id number starttime time_unit period data_type y_unit npts
0 0 20190913060000000 HOUR 8760 -1 NO_UNIT 1
# time y
20190913060000000 2.000000000000
GENERATOR gen_frr_up_group Plant2 2
# Id number starttime time_unit period data_type y_unit npts
0 0 20190913060000000 HOUR 8760 -1 NO_UNIT 1
# time y
20190913060000000 2.000000000000
GENERATOR gen_frr_up_group Plant2 3
# Id number starttime time_unit period data_type y_unit npts
0 0 20190913060000000 HOUR 8760 -1 NO_UNIT 1
# time y
20190913060000000 2.000000000000
GENERATOR gen_frr_up_group Plant2 4
# Id number starttime time_unit period data_type y_unit npts
0 0 20190913060000000 HOUR 8760 -1 NO_UNIT 1
# time y
20190913060000000 2.000000000000
smooth_reserve.ascii#
GENERATOR gen_fcr_n_up_min Plant1 1
# Id number starttime time_unit period data_type y_unit npts
0 0 20190913060000000 HOUR 8760 -1 MW 1
# time y
20190913060000000 1.000000000000
GENERATOR gen_fcr_n_up_min Plant1 2
# Id number starttime time_unit period data_type y_unit npts
0 0 20190913060000000 HOUR 8760 -1 MW 1
# time y
20190913060000000 1.000000000000
GENERATOR gen_fcr_n_up_min Plant2 1
# Id number starttime time_unit period data_type y_unit npts
0 0 20190913060000000 HOUR 8760 -1 NO_UNIT 1
# time y
20190913060000000 1.000000000000
GENERATOR gen_fcr_n_up_min Plant2 2
# Id number starttime time_unit period data_type y_unit npts
0 0 20190913060000000 HOUR 8760 -1 NO_UNIT 1
# time y
20190913060000000 1.000000000000
GENERATOR gen_fcr_n_up_min Plant2 3
# Id number starttime time_unit period data_type y_unit npts
0 0 20190913060000000 HOUR 8760 -1 NO_UNIT 1
# time y
20190913060000000 1.000000000000
GENERATOR gen_fcr_n_up_min Plant2 4
# Id number starttime time_unit period data_type y_unit npts
0 0 20190913060000000 HOUR 8760 -1 NO_UNIT 1
# time y
20190913060000000 1.000000000000
GENERATOR gen_fcr_n_down_min Plant1 1
# Id number starttime time_unit period data_type y_unit npts
0 0 20190913060000000 HOUR 8760 -1 MW 1
# time y
20190913060000000 1.000000000000
GENERATOR gen_fcr_n_down_min Plant1 2
# Id number starttime time_unit period data_type y_unit npts
0 0 20190913060000000 HOUR 8760 -1 MW 1
# time y
20190913060000000 1.000000000000
GENERATOR gen_fcr_n_down_min Plant2 1
# Id number starttime time_unit period data_type y_unit npts
0 0 20190913060000000 HOUR 8760 -1 NO_UNIT 1
# time y
20190913060000000 1.000000000000
GENERATOR gen_fcr_n_down_min Plant2 2
# Id number starttime time_unit period data_type y_unit npts
0 0 20190913060000000 HOUR 8760 -1 NO_UNIT 1
# time y
20190913060000000 1.000000000000
GENERATOR gen_fcr_n_down_min Plant2 3
# Id number starttime time_unit period data_type y_unit npts
0 0 20190913060000000 HOUR 8760 -1 NO_UNIT 1
# time y
20190913060000000 1.000000000000
GENERATOR gen_fcr_n_down_min Plant2 4
# Id number starttime time_unit period data_type y_unit npts
0 0 20190913060000000 HOUR 8760 -1 NO_UNIT 1
# time y
20190913060000000 1.000000000000
GENERATOR gen_frr_up_min Plant2 1
# Id number starttime time_unit period data_type y_unit npts
0 0 20190913060000000 HOUR 8760 -1 NO_UNIT 1
# time y
20190913060000000 1.000000000000
GENERATOR gen_frr_up_min Plant2 2
# Id number starttime time_unit period data_type y_unit npts
0 0 20190913060000000 HOUR 8760 -1 NO_UNIT 1
# time y
20190913060000000 1.000000000000
GENERATOR gen_frr_up_min Plant2 3
# Id number starttime time_unit period data_type y_unit npts
0 0 20190913060000000 HOUR 8760 -1 NO_UNIT 1
# time y
20190913060000000 1.000000000000
GENERATOR gen_frr_up_min Plant2 4
# Id number starttime time_unit period data_type y_unit npts
0 0 20190913060000000 HOUR 8760 -1 NO_UNIT 1
# time y
20190913060000000 1.000000000000