Cut descriptions#
The model setup for the two cut description examples are available in the following formats.
pyshop
YAML
ASCII
Standard cut description#
Adding a standard cut description to a simple two-reservoir system is show in this example. The cuts used in the example were generated by the prototype cut creation functionality in SHOP, and is therefore not saved to the standard text file format used by ProdRisk and EOPS.
#Necessary imports used in all examples
import pandas as pd
from pyshop import ShopSession
import plotly.graph_objs as go
pd.options.plotting.backend = "plotly"
#Functions used in this example for building and solving a simple model with cuts
from cuts import build_model, run_model, read_cuts, get_minimal_cut_surface
#Create a standard ShopSession
shop=ShopSession()
#Build a simple model with two reservoirs and two plants.
build_model(shop)
#Display topology to the screen
display(shop.model.build_connection_tree())
After the topology has been created, we read in the cuts from the text files. A new cut_group object must be created to hold the right-hand side constants of the cut constraints in the rhs attribute. The water_value_input attribute on the reservoir objects are used to store the cut coefficients with corresponding reference volumes. All reservoirs that are part of the cut constraints must be connected to the cut_group.
#Read the cut info
rhs_in,cut_coeffs = read_cuts()
n_cuts = len(rhs_in)
#Create a cut group object and add the RHS
my_cuts = shop.model.cut_group.add_object("my_cuts")
my_cuts.rhs.set([pd.Series(rhs_in, index=[0]*n_cuts, name=0)])
#Add the cut coefficients to the reservoirs and connect them to the cut_group
for rsv in shop.model.reservoir:
name = rsv.get_name()
v_ref = cut_coeffs[name][0]
wv = cut_coeffs[name][1]
rsv.water_value_input.set([pd.Series(wv, index=v_ref, name=0)])
rsv.connect_to(my_cuts)
The inequality constraints defined by each cut \(k\) is
\(c \leq \sum_i WV_{ik}\cdot(v_i - V_i^{ref}) + rhs_k \qquad \forall k,\)
when formulated as profit maximization. The single cut variable \(c\) is bounded from above by all the cuts, and the optimization problem tries to maximize its value. The cut coefficients \(WV_{ik}\) for reservoir \(i\) is multiplied with the end volume variable \(v_i\) subtracted the cut reference volume. When all \(v_i = V_i^{ref}\), the cut is bounded by the right hand side value \(rhs_k\).
The cut constraints can be visualized as a 3D plot since there are only two reservoirs in this example. The x and y axis correspond to the end volume of each reservoir, while the z axis shows the cut value in terms of future expected income. Each cut is a plane in 3D which is spanned around a reference point with the reference volumes as x and y coordinates and the rhs as the z value. These points are plotted in 3D scatter plot below. The minimal surface spanned by all these cuts are also plotted, which is the effective bound that the optimization problem will see. The surface is found by taking the lowest (most restrictive) cut value over the set of cuts for different values of the reservoir volumes.
Note that the reference points in red are marked as “never binding” and hover above the calculated minimal surface. This should not happen, as a cut should at least be binding exactly at the reference point. Non-convexities in the optimization program used to create these sample cuts are to blame in this case, as the SHOP cut creation functionality is still experimental. Some of the bidning cuts are also not binding at the reference point but somewhere else in the domain, which is also inaccurate.
import numpy as np
rsv1 = shop.model.reservoir.Reservoir1
rsv2 = shop.model.reservoir.Reservoir2
vmax1 = rsv1.max_vol.get()
vmax2 = rsv2.max_vol.get()
v_ref1 = np.array(cut_coeffs["Reservoir1"][0])
v_ref2 = np.array(cut_coeffs["Reservoir2"][0])
v1 = np.arange(0,vmax1,0.25)
v2 = np.arange(0,vmax2,0.25)
#Add the reference volumes to the volume ranges to have a good representation for the surface around the reference points
v1 = np.concatenate((v1,v_ref1))
v1.sort()
v2 = np.concatenate((v2,v_ref2))
v2.sort()
#Calculate the minimal cut surface and the binding cuts
binding_cuts, minimal_surface = get_minimal_cut_surface(rhs_in,cut_coeffs,v1,v2)
#Plot the cut surface
fig = go.Figure()
fig.add_trace(go.Surface(z=minimal_surface, x=v1*100/vmax1, y=v2*100/vmax2,hoverinfo="skip"))
colors = ["red"]*n_cuts
text = [f"Cut {i+1}, never binding" for i in range(n_cuts)]
for k in binding_cuts:
colors[k] = "black"
text[k] = f"Cut {k+1}, binding"
#Plot the reference points
fig.add_trace(go.Scatter3d(z=rhs_in, x=v_ref1*100/vmax1, y=v_ref2*100/vmax2,mode='markers',marker_color=colors,hovertext=text))
fig.update_scenes(
aspectratio=dict(x=1, y=1, z=1),
xaxis_title='Rsv1 vol [%]',
yaxis_title='Rsv2 vol [%]',
zaxis_title='Cut value'
)
fig.update_layout(
width=1000,
height=900,
autosize=True)
fig.show()
Now we can run the optimization and look at the results. The final value in the TXY attribute end_value on the cut_group object holds the optimized cut value (future expected (negative) income). The binding_cut_up attribute holds the cut constraint that was the most constraining cut in this optimization.
#Optimize model by calling "run_model"
run_model(shop)
#Get the final end value of the cut group, which is the future expected (negative) profit
cut_val = -my_cuts.end_value.get().iloc[-1]
#Get the binding cut constraint and print the cut information
cut_index = my_cuts.binding_cut_up.get().iloc[-1]
cut_index = int(cut_index)
rhs_out = my_cuts.rhs.get()[0]
active_rhs = rhs_out.values[cut_index]
print(f"The future expeced income is {cut_val:.2f} € and the binding cut is number {cut_index+1} out of {n_cuts} with the following values:")
print(f"RHS is {active_rhs:.2f} €")
for rsv in shop.model.reservoir:
name = rsv.get_name()
cut_coeffs = rsv.water_value_input.get()[0]
v_ref = cut_coeffs.index[cut_index]
wv = cut_coeffs.values[cut_index]
end_vol = rsv.storage.get().iloc[-1]
print(f"Cut coefficient {wv:.2f} €/Mm3 and reference volume {v_ref:.2f} Mm3 for {name} with end volume {end_vol:.2f} Mm3")
The future expeced income is 1740649.07 € and the binding cut is number 8 out of 9 with the following values:
RHS is 1591330.63 €
Cut coefficient 20069.49 €/Mm3 and reference volume 33.33 Mm3 for Reservoir1 with end volume 36.02 Mm3
Cut coefficient 5270.82 €/Mm3 and reference volume 6.81 Mm3 for Reservoir2 with end volume 24.92 Mm3
Note that the attribute binding_cut_down is not used when the cuts are not price dependent, and have the default value of:
i = my_cuts.binding_cut_down.get().iloc[-1]
print(f"'binding_cut_down' attribute for standard cuts: {i}")
'binding_cut_down' attribute for standard cuts: -1.0
The evolution of the reservoir storage and the global water value result time series are shown in the figures below. The final value of the global water value time series is equal to the binding cut coefficient for each reservoir.
pd.DataFrame([rsv.storage.get().rename(rsv.get_name()) for rsv in shop.model.reservoir]).transpose().plot(title="Reservoir storage")
pd.DataFrame([-rsv.water_value_global_result.get().rename(rsv.get_name()) for rsv in shop.model.reservoir]).transpose().plot(title="Reservoir global water value")
Price dependent cut description#
To illustrate how price dependent cuts can be added to SHOP, we will use the same cuts as in the example above and synthesize some price variations.
import numpy as np
#Create a standard ShopSession
shop=ShopSession()
#Build a simple model with two reservoirs and two plants.
build_model(shop)
#Read the cut info
rhs_in,cut_coeffs = read_cuts()
n_cuts = len(rhs_in)
#Create a cut group object
my_cuts = shop.model.cut_group.add_object("my_cuts")
for rsv in shop.model.reservoir:
rsv.connect_to(my_cuts)
We use the average price in the SHOP run and create four arbitrary price levels around it. Only the two closest price levels to the average price will actually be used in SHOP, so the highest and lowest price levels are not necessary for this particular model run. The rhs and cut coefficients are then scaled linearly for each price level.
Since SHOP also uses the average price to interpolate the cuts in the two closest price levels, the solution we get form using the scaled price dependent cuts will be identical to the solution in the previous example with standard cuts. This is assuming that the models are set up in the exact same way and that a MIP gap of zero is reached in each iteration in both models. To get some different results in this example, we add some “random” noise to the scaling in the code below. Try to comment out the code adding the noise and see for yourself if the results are the same as in the original case!
#Find the average price and make some new price levels around it
market = shop.model.market.Day_ahead
average_price = np.mean(market.sale_price.get())
prices = [average_price*0.5,average_price*0.8,average_price*1.12,average_price*1.3]
scaling = [p/average_price for p in prices]
#Comment out the two lines below to remove the noise applied to the cut scaling
noise = [0.95,0.96,1.04,1.05]
scaling = [s*n for s,n in zip(scaling,noise)]
#Set the scaled RHS, the price is set as a reference value
my_cuts.rhs.set([pd.Series(np.array(rhs_in)*scale, index=[0]*n_cuts, name=price) for scale,price in zip(scaling,prices)])
#Add the scaled cut coefficients, the price is set as a reference value
for rsv in shop.model.reservoir:
name = rsv.get_name()
v_ref = cut_coeffs[name][0]
wv = cut_coeffs[name][1]
rsv.water_value_input.set([pd.Series(np.array(wv)*scale, index=v_ref, name=price) for scale,price in zip(scaling,prices)])
The scatter plots below shows the scaled and original cuts in terms of the rhs and cut coefficients. The values are plotted in 2D for simplicity:
#Plot the scaled and original RHS values
rhs = my_cuts.rhs.get()
fig = go.Figure(layout={'title':f"RHS",'xaxis_title':"Cut number",'yaxis_title':"RHS [€]"})
for r in rhs:
fig.add_trace(go.Scatter(name=f"Price {r.name:.2f}",x=list(range(1,n_cuts+1)),y=r.values,mode='markers'))
fig.add_trace(go.Scatter(name=f"Original",x=list(range(1,n_cuts+1)),y=rhs_in,mode='markers'))
fig.show()
#Plot the scaled and original (ref volume, cut coefficient) pairs
for rsv in shop.model.reservoir:
wv_in = rsv.water_value_input.get()
name = rsv.get_name()
fig = go.Figure(layout={'title':f"{name}",'xaxis_title':"Ref volume [Mm3]",'yaxis_title':r"Cut coefficient [€/Mm3]"})
for wv in wv_in:
fig.add_trace(go.Scatter(name=f"Price {wv.name:.2f}",x=wv.index,y=wv.values,text=[f"Cut number {i+1}" for i in range(n_cuts)],mode='markers'))
fig.add_trace(go.Scatter(name=f"Original",x=cut_coeffs[name][0],y=cut_coeffs[name][1],text=[f"Cut number {i+1}" for i in range(n_cuts)],mode='markers'))
fig.show()
Now we run the model and take a look at the final cut value and the binding cuts:
#Optimize model by calling "run_model"
run_model(shop)
#Get the final end value of the cut group, which is the future expected (negative) profit
cut_val = -my_cuts.end_value.get().iloc[-1]
print(f"The future expeced income is {cut_val:.2f} €\n")
#Get the binding cut constraints in the two price levels and print the cut information
cut_index_up = my_cuts.binding_cut_up.get().iloc[-1]
cut_index_up = int(cut_index_up)
cut_index_down = my_cuts.binding_cut_down.get().iloc[-1]
cut_index_down = int(cut_index_down)
rhs_out = my_cuts.rhs.get()
active_rhs_up = rhs_out[2].values[cut_index_up]
active_rhs_down = rhs_out[1].values[cut_index_down]
print(f"The binding cut in the set of cuts over the SHOP price is number {cut_index_up+1} out of {n_cuts} with the following values:")
print(f"\tRHS is {active_rhs_up:.2f} €")
for rsv in shop.model.reservoir:
name = rsv.get_name()
cut_coeffs = rsv.water_value_input.get()[2]
v_ref = cut_coeffs.index[cut_index_up]
wv = cut_coeffs.values[cut_index_up]
end_vol = rsv.storage.get().iloc[-1]
print(f"\tCut coefficient {wv:.2f} €/Mm3 and reference volume {v_ref:.2f} Mm3 for {name} with end volume {end_vol:.2f} Mm3")
print("")
print(f"The binding cut in the set of cuts below the SHOP price is number {cut_index_down+1} out of {n_cuts} with the following values:")
print(f"\tRHS is {active_rhs_down:.2f} €")
for rsv in shop.model.reservoir:
name = rsv.get_name()
cut_coeffs = rsv.water_value_input.get()[1]
v_ref = cut_coeffs.index[cut_index_down]
wv = cut_coeffs.values[cut_index_down]
end_vol = rsv.storage.get().iloc[-1]
print(f"\tCut coefficient {wv:.2f} €/Mm3 and reference volume {v_ref:.2f} Mm3 for {name} with end volume {end_vol:.2f} Mm3")
The future expeced income is 1777475.31 €
The binding cut in the set of cuts over the SHOP price is number 8 out of 9 with the following values:
RHS is 1853581.92 €
Cut coefficient 23376.95 €/Mm3 and reference volume 33.33 Mm3 for Reservoir1 with end volume 36.38 Mm3
Cut coefficient 6139.45 €/Mm3 and reference volume 6.81 Mm3 for Reservoir2 with end volume 25.21 Mm3
The binding cut in the set of cuts below the SHOP price is number 8 out of 9 with the following values:
RHS is 1222141.93 €
Cut coefficient 15413.37 €/Mm3 and reference volume 33.33 Mm3 for Reservoir1 with end volume 36.38 Mm3
Cut coefficient 4047.99 €/Mm3 and reference volume 6.81 Mm3 for Reservoir2 with end volume 25.21 Mm3
The final value of the global water value result time series is equal to the weighted sum of the binding cut coefficients in the price levels above and below the average SHOP price. The interpolation weights used in SHOP are:
w_up = (average_price - prices[1])/(prices[2]-prices[1])
w_down = 1 - w_up
print(f"Weight for cuts with price {(prices[1]):.2f}: {w_down:.3f}")
print(f"Weight for cuts with price {(prices[2]):.2f}: {w_up:.3f}")
Weight for cuts with price 26.53: 0.375
Weight for cuts with price 37.14: 0.625
pd.DataFrame([rsv.storage.get().rename(rsv.get_name()) for rsv in shop.model.reservoir]).transpose().plot(title="Reservoir storage")
pd.DataFrame([-rsv.water_value_global_result.get().rename(rsv.get_name()) for rsv in shop.model.reservoir]).transpose().plot(title="Reservoir global water value")
cuts.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.inflow.set(pd.Series([80], [starttime]))
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([], ['5'])
shop.set_code(['incremental'], [])
shop.start_sim([], ['3'])
def read_cuts():
with open("rhs_file.txt","r") as f:
lines = [l for l in f]
rhs = []
for l in lines:
l = l.split(",")
rhs.append(float(l[0]))
with open("wv_file.txt","r") as f:
lines = [l for l in f]
cut_coeffs = {}
v_ref = []
wv = []
name = ""
for l in lines:
l = l.split(",")
if len(l) < 3:
if len(v_ref) > 0 and len(wv) > 0:
cut_coeffs[name] = v_ref,wv
v_ref = []
wv = []
name = l[0]
continue
v_ref.append(float(l[0]))
wv.append(float(l[1]))
cut_coeffs[name] = v_ref,wv
return rhs, cut_coeffs
def get_minimal_cut_surface(rhs,cut_coeffs,v1,v2):
v_ref1,wv1 = cut_coeffs["Reservoir1"]
v_ref2,wv2 = cut_coeffs["Reservoir2"]
v_mesh1,v_mesh2 = np.meshgrid(v1,v2)
cuts = []
for k in range(len(rhs)):
c = rhs[k] + wv1[k]*(v_mesh1-v_ref1[k]) + wv2[k]*(v_mesh2-v_ref2[k])
cuts.append(c)
minimal_surface = np.zeros(cuts[0].shape)
binding_cuts = set()
for i in range(len(v1)):
for j in range(len(v2)):
minimal_surface[j][i] = np.amin([c[j][i] for c in cuts])
binding_cuts.add(np.argmin([c[j][i] for c in cuts]))
return binding_cuts,minimal_surface
rhs_file.txt#
1302893.6182906777,
2010020.6584548976,
1729395.5394430447,
1668317.685566983,
1617873.4676792584,
1631679.5873724935,
1589941.6988939482,
1591330.6347999508,
1634520.697565704,
wv_file.txt#
Reservoir1,
22.189997229001772,21968.07763058306,
32.03581986796384,20688.954513778233,
31.76238232934574,20603.711537308358,
34.27612278140506,19894.176616677698,
31.308703005587205,20630.492878183457,
35.342460717556115,19445.091174171313,
31.55324433296073,20578.981049356116,
33.33476051403972,20069.49405857465,
30.424671002337547,20846.24763536947,
Reservoir2,
0.0,6809.24813956154,
80.5757764809413,5562.450020645937,
35.92729985954057,5355.954542531482,
16.659022633000312,5235.792909168047,
18.847154805742804,5257.2399850450465,
6.5591822497789565,5306.294672951913,
13.076925078859233,5207.172964047769,
6.809364705774897,5270.822824122645,
24.938676360224974,5295.6223609056615,
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
inflow:
2018-01-23 00:00:00: 80
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
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
standard_cuts.yaml#
model:
reservoir:
Reservoir1:
water_value_input:
- ref: 0
x:
- 22.189997229002
- 32.035819867964
- 31.762382329346
- 34.276122781405
- 31.308703005587
- 35.342460717556
- 31.553244332961
- 33.33476051404
- 30.424671002338
y:
- 21968.077630583
- 20688.954513778
- 20603.711537308
- 19894.176616678
- 20630.492878183
- 19445.091174171
- 20578.981049356
- 20069.494058575
- 20846.247635369
Reservoir2:
water_value_input:
- ref: 0
x:
- 0
- 80.575776480941
- 35.927299859541
- 16.659022633
- 18.847154805743
- 6.559182249779
- 13.076925078859
- 6.8093647057749
- 24.938676360225
y:
- 6809.2481395615
- 5562.4500206459
- 5355.9545425315
- 5235.792909168
- 5257.239985045
- 5306.2946729519
- 5207.1729640478
- 5270.8228241226
- 5295.6223609057
cut_group:
my_cuts:
rhs:
- ref: 0
x:
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
y:
- 1302893.6182907
- 2010020.6584549
- 1729395.539443
- 1668317.685567
- 1617873.4676793
- 1631679.5873725
- 1589941.6988939
- 1591330.6348
- 1634520.6975657
connections:
- from: my_cuts
to: Reservoir1
from_type: cut_group
to_type: reservoir
connection_type: connection_standard
order: 0
- from: my_cuts
to: Reservoir2
from_type: cut_group
to_type: reservoir
connection_type: connection_standard
order: 1
price_dep_cuts.yaml#
model:
reservoir:
Reservoir1:
water_value_input:
- ref: 16.581902777777778
x:
- 22.189997229002
- 32.035819867964
- 31.762382329346
- 34.276122781405
- 31.308703005587
- 35.342460717556
- 31.553244332961
- 33.33476051404
- 30.424671002338
y:
- 10434.836874527
- 9827.2533940447
- 9786.7629802215
- 9449.7338929219
- 9799.4841171371
- 9236.4183077314
- 9775.0159984442
- 9533.009677823
- 9901.9676268005
- ref: 26.531044444444447
x:
- 22.189997229002
- 32.035819867964
- 31.762382329346
- 34.276122781405
- 31.308703005587
- 35.342460717556
- 31.553244332961
- 33.33476051404
- 30.424671002338
y:
- 16871.483620288
- 15889.117066582
- 15823.650460653
- 15278.727641608
- 15844.218530445
- 14933.830021764
- 15804.657445905
- 15413.371436985
- 16009.918183964
- ref: 37.143462222222226
x:
- 22.189997229002
- 32.035819867964
- 31.762382329346
- 34.276122781405
- 31.308703005587
- 35.342460717556
- 31.553244332961
- 33.33476051404
- 30.424671002338
y:
- 25588.416824103
- 24098.494217649
- 23999.203198657
- 23172.736923106
- 24030.398104508
- 22649.642199675
- 23970.39712629
- 23376.946679428
- 24281.709245678
- ref: 43.112947222222225
x:
- 22.189997229002
- 32.035819867964
- 31.762382329346
- 34.276122781405
- 31.308703005587
- 35.342460717556
- 31.553244332961
- 33.33476051404
- 30.424671002338
y:
- 29986.425965746
- 28240.422911307
- 28124.066248426
- 27155.551081765
- 28160.62277872
- 26542.549452744
- 28090.309132371
- 27394.859389954
- 28455.128022279
Reservoir2:
water_value_input:
- ref: 16.581902777777778
x:
- 0
- 80.575776480941
- 35.927299859541
- 16.659022633
- 18.847154805743
- 6.559182249779
- 13.076925078859
- 6.8093647057749
- 24.938676360225
y:
- 3234.3928662917
- 2642.1637598068
- 2544.0784077025
- 2487.0016318548
- 2497.1889928964
- 2520.4899696522
- 2473.4071579227
- 2503.6408414583
- 2515.4206214302
- ref: 26.531044444444447
x:
- 0
- 80.575776480941
- 35.927299859541
- 16.659022633
- 18.847154805743
- 6.559182249779
- 13.076925078859
- 6.8093647057749
- 24.938676360225
y:
- 5229.5025711833
- 4271.9616158561
- 4113.3730886642
- 4021.0889542411
- 4037.5603085146
- 4075.2343088271
- 3999.1088363887
- 4047.9919289262
- 4067.0379731755
- ref: 37.143462222222226
x:
- 0
- 80.575776480941
- 35.927299859541
- 16.659022633
- 18.847154805743
- 6.559182249779
- 13.076925078859
- 6.8093647057749
- 24.938676360225
y:
- 7931.4122329613
- 6479.1417840484
- 6238.6158511407
- 6098.6515805989
- 6123.6331345805
- 6180.7720350544
- 6065.3150685228
- 6139.4544255381
- 6168.3409259829
- ref: 43.112947222222225
x:
- 0
- 80.575776480941
- 35.927299859541
- 16.659022633
- 18.847154805743
- 6.559182249779
- 13.076925078859
- 6.8093647057749
- 24.938676360225
y:
- 9294.6237105015
- 7592.7442781817
- 7310.8779505555
- 7146.8573210144
- 7176.1325795865
- 7243.0922285794
- 7107.7910959252
- 7194.6731549274
- 7228.5245226362
cut_group:
my_cuts:
rhs:
- ref: 16.581902777777778
x:
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
y:
- 618874.46868807
- 954759.81276608
- 821462.88123545
- 792450.90064432
- 768489.89714765
- 775047.80400193
- 755222.30697463
- 755882.05152998
- 776397.33134371
- ref: 26.531044444444447
x:
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
y:
- 1000622.2988472
- 1543695.8656934
- 1328175.7742923
- 1281267.9825154
- 1242526.8231777
- 1253129.9231021
- 1221075.2247506
- 1222141.9275264
- 1255311.8957305
- ref: 37.143462222222226
x:
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
y:
- 1517610.486585
- 2341272.0629683
- 2014399.9243433
- 1943256.4401484
- 1884499.0151528
- 1900580.3833715
- 1851964.0908717
- 1853581.923415
- 1903889.7085245
- ref: 43.112947222222225
x:
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
y:
- 1778449.7889668
- 2743678.1987909
- 2360624.9113398
- 2277253.6407989
- 2208397.2833822
- 2227242.6367635
- 2170270.4189902
- 2172166.3165019
- 2231120.7521772
connections:
- from: my_cuts
to: Reservoir1
from_type: cut_group
to_type: reservoir
connection_type: connection_standard
order: 0
- from: my_cuts
to: Reservoir2
from_type: cut_group
to_type: reservoir
connection_type: connection_standard
order: 1
model.ascii#
#;
# Name of the datafile is: standard_cuts.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
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 inflow Reservoir1
#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 80.00000000000000000
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
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 startcost Plant1 1
#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
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 startcost Plant2 1
#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
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 startcost Plant2 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
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 startcost Plant2 3
#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
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
GENERATOR startcost Plant2 4
#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
#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; Volume (Meter);
Reservoir1 900
Reservoir2 670
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
#Num_areas;Type
NETWORK 1 load
#Load for area: 1
#Id;Number;Start_Time;Time_unit;Period;Data_type;Y_unit;Pts
0 0 20180123000000000 MINUTE 525600 -1 MW 1
# Time; f(t)
20180123000000000 0.000000
name_coupling.txt#
NAMELIST_ICC
2, 1001
3, Reservoir1
2, 1002
3, Reservoir2
-1
cut_order.txt#
CUTORDER
1 1001 0 0
2 1002 0 0
standard_cuts.txt#
SHOP_WATER_VALUES
9 2
1 1302.8936182906778
2.196807763058306 0.680924813956154
56.89742879231224 0.0
2 2010.0206584548976
2.0688954513778235 0.5562450020645937
82.14312786657395 82.64182203173468
3 1729.3955394430448
2.060371153730836 0.5355954542531483
81.44200597268139 36.84851267645186
4 1668.317685566983
1.98941766166777 0.5235792909168048
87.88749431129501 17.086177059487497
5 1617.8734676792585
2.063049287818346 0.5257239985045047
80.2787256553518 19.330415185377234
6 1631.6795873724934
1.9445091174171314 0.5306294672951913
90.62169414757977 6.727366410029699
7 1589.9416988939483
2.0578981049356115 0.5207172964047769
80.9057546998993 13.412230850112033
8 1591.3306347999508
2.006949405857465 0.5270822824122645
85.47374490779416 6.983963800794766
9 1634.5206975657038
2.084624763536947 0.5295622360905662
78.01197692907063 25.578129600230742
1.0 1.0
1001 1002
-1
price_dep_cuts.txt#
SHOP_EXT_WATER_VALUES
1.658190277777778 618.8744686880718 02 1.0434836874526954 56.89742879231224 0.3234392866291731 0.0 00
1.658190277777778 954.7598127660763 02 0.9827253394044662 82.14312786657395 0.26421637598068204 82.64182203173468 00
1.658190277777778 821.4628812354462 02 0.978676298022147 81.44200597268139 0.25440784077024536 36.84851267645186 00
1.658190277777778 792.4509006443169 02 0.9449733892921907 87.88749431129501 0.24870016318548224 17.086177059487497 00
1.658190277777778 768.4898971476478 02 0.9799484117137142 80.2787256553518 0.2497188992896397 19.330415185377234 00
1.658190277777778 775.0478040019344 02 0.9236418307731374 90.62169414757977 0.2520489969652159 6.727366410029699 00
1.658190277777778 755.2223069746253 02 0.9775015998444154 80.9057546998993 0.24734071579226904 13.412230850112033 00
1.658190277777778 755.8820515299766 02 0.953300967782296 85.47374490779416 0.25036408414582567 6.983963800794766 00
1.658190277777778 776.3973313437093 02 0.9901967626800497 78.01197692907063 0.2515420621430189 25.578129600230742 00
2.6531044444444447 1000.6222988472406 02 1.687148362028779 56.89742879231224 0.5229502571183262 0.0 00
2.6531044444444447 1543.6958656933614 02 1.5889117066581686 82.14312786657395 0.42719616158560797 82.64182203173468 00
2.6531044444444447 1328.1757742922584 02 1.582365046065282 81.44200597268139 0.4113373088664178 36.84851267645186 00
2.6531044444444447 1281.267982515443 02 1.5278727641608472 87.88749431129501 0.40210889542410605 17.086177059487497 00
2.6531044444444447 1242.5268231776706 02 1.5844218530444896 80.2787256553518 0.4037560308514596 19.330415185377234 00
2.6531044444444447 1253.129923102075 02 1.493383002176357 90.62169414757977 0.4075234308827069 6.727366410029699 00
2.6531044444444447 1221.0752247505523 02 1.58046574459055 80.9057546998993 0.3999108836388687 13.412230850112033 00
2.6531044444444447 1222.1419275263622 02 1.5413371436985335 85.47374490779416 0.4047991928926192 6.983963800794766 00
2.6531044444444447 1255.3118957304605 02 1.6009918183963754 78.01197692907063 0.4067037973175548 25.578129600230742 00
3.7143462222222228 1517.6104865849816 02 2.558841682410315 56.89742879231224 0.7931412232961282 0.0 00
3.7143462222222228 2341.272062968265 02 2.4098494217648887 82.14312786657395 0.6479141784048388 82.64182203173468 00
3.7143462222222228 2014.3999243432586 02 2.3999203198656778 81.44200597268139 0.6238615851140671 36.84851267645186 00
3.7143462222222228 1943.256440148422 02 2.3172736923106183 87.88749431129501 0.6098651580598943 17.086177059487497 00
3.7143462222222228 1884.4990151528004 02 2.4030398104508093 80.2787256553518 0.6123633134580471 19.330415185377234 00
3.7143462222222228 1900.5803833714806 02 2.264964219967475 90.62169414757977 0.6180772035054388 6.727366410029699 00
3.7143462222222228 1851.964090871671 02 2.3970397126290006 80.9057546998993 0.6065315068522842 13.412230850112033 00
3.7143462222222228 1853.5819234149826 02 2.3376946679427757 85.47374490779416 0.6139454425538058 6.983963800794766 00
3.7143462222222228 1903.889708524532 02 2.428170924567836 78.01197692907063 0.6168340925982916 25.578129600230742 00
4.311294722222223 1778.4497889667755 02 2.998642596574588 56.89742879231224 0.9294623710501503 0.0 00
4.311294722222223 2743.6781987909358 02 2.8240422911307297 82.14312786657395 0.7592744278181706 82.64182203173468 00
4.311294722222223 2360.6249113397566 02 2.812406624842591 81.44200597268139 0.7310877950555474 36.84851267645186 00
4.311294722222223 2277.253640798932 02 2.715555108176506 87.88749431129501 0.7146857321014385 17.086177059487497 00
4.311294722222223 2208.397283382188 02 2.8160622778720423 80.2787256553518 0.7176132579586489 19.330415185377234 00
4.311294722222223 2227.242636763454 02 2.654254945274385 90.62169414757977 0.7243092228579363 6.727366410029699 00
4.311294722222223 2170.2704189902397 02 2.8090309132371103 80.9057546998993 0.7107791095925207 13.412230850112033 00
4.311294722222223 2172.166316501933 02 2.7394859389954402 85.47374490779416 0.7194673154927412 6.983963800794766 00
4.311294722222223 2231.120752177186 02 2.845512802227933 78.01197692907063 0.7228524522636229 25.578129600230742 00