{
"cells": [
{
"cell_type": "markdown",
"id": "5d5dafbe",
"metadata": {},
"source": [
"(reversible-turbine-example)=\n",
"# Reversible turbines\n",
"\n",
"This example is available in the following formats:\n",
"\n",
"- pyshop\n",
" - [](basic_pump.py)\n",
"\n",
"## Introduction\n",
"\n",
"This example imports a basic model and adds a reversible turbine modelled as two separate [generator](generator) and [pump](pump) objects. To ensure that the pump and generator does not operate at the same time, two [commit_groups](commit_group) are created to force the optimization to choose between production and pumping. This assumes that the reversible turbine is a single turbine-generator machine, and not a ternary set of one pump and one turbine that can run in hydraulic short circuit.\n",
"\n",
"## Imports"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "76a03147",
"metadata": {
"Collapsed": "false"
},
"outputs": [],
"source": [
"#Necessary imports used in all examples\n",
"import pandas as pd\n",
"import plotly.graph_objs as go\n",
"import plotly.express as px\n",
"\n",
"from pyshop import ShopSession\n",
"\n",
"#Functions used in this example for building a basic SHOP model and running it\n",
"from basic_pump import build_model, run_model"
]
},
{
"cell_type": "markdown",
"id": "3eeade08",
"metadata": {},
"source": [
"## Create a SHOP session and import basic model from file function"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "9f2ac96b",
"metadata": {
"Collapsed": "false"
},
"outputs": [
{
"data": {
"image/svg+xml": [
"\n",
"\n",
"\n",
"\n",
"\n"
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#Create a standard ShopSession\n",
"shop=ShopSession()\n",
"#Build a basic SHOP model\n",
"build_model(shop)\n",
"#Display topology to the screen\n",
"display(shop.model.build_connection_tree())"
]
},
{
"cell_type": "markdown",
"id": "f37f3169",
"metadata": {},
"source": [
"## Add a variable speed pump\n",
"\n",
"Pumps can be added as pump objects, and need to be connected to a [plant](plant). We then apply attributes to the pump object. The pump added to model \"half\" of the reversible turbine is a variable speed pump, see [the binary pump example](binary-pump-example) for modelling of binary pumps. The difference between a binary and variable speed pump in SHOP is that multiple points are added in the [turbine efficiency curves](pump:turb_eff_curves) for variable speed pumps. The [p_min](pump:p_min) and [p_max](pump:p_max) attributes of the pump are set to limit the consumption to be between 30 and 50 MW.\n",
"\n",
"The upper reservoir is also set to be full at the start of the optimization, and the generator is committed to be on in all hours."
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "24539098",
"metadata": {},
"outputs": [],
"source": [
"#Add variable speed pump\n",
"pump = shop.model.pump.add_object(\"P1P1\")\n",
"pump.connect_to(shop.model.plant.Plant1)\n",
"pump.penstock.set(1)\n",
"pump.p_nom.set(50)\n",
"pump.p_min.set(30)\n",
"pump.p_max.set(50)\n",
"pump.startcost.set(500)\n",
"pump.gen_eff_curve.set(pd.Series([100,100], index=[0,50]))\n",
"\n",
"c1 = pd.Series([84,86,85],index=[64,90,110],name=40)\n",
"c2 = pd.Series([82.5,84,83],index=[60,80,90],name=50)\n",
"c3 = pd.Series([79,82.5,82],index=[40,65,70],name=60)\n",
"\n",
"pump.turb_eff_curves.set([c1,c2,c3])\n",
"\n",
"#Set upper reservoir to almost full at the start\n",
"rsv1 = shop.model.reservoir[\"Reservoir1\"]\n",
"rsv1.start_head.set(rsv1.hrl.get()-1)\n",
"\n",
"#Force generator to run in all time steps\n",
"gen = shop.model.generator[\"P1G1\"]\n",
"gen.committed_in.set(1)"
]
},
{
"cell_type": "markdown",
"id": "e88cad37",
"metadata": {},
"source": [
"When we plot the market price, we see that the first hours have a low price compared to the water value in the upper reservoir. This makes it economical to pump for the first hours, but this is not possible since the generator is committed to be on for the whole period."
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "b0ca05e7",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
" \n",
" "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.plotly.v1+json": {
"config": {
"plotlyServerURL": "https://plot.ly"
},
"data": [
{
"marker": {
"color": "rgb(33,102,172)"
},
"name": "Market price",
"type": "scatter",
"x": [
"2018-02-27T00:00:00",
"2018-02-27T01:00:00",
"2018-02-27T02:00:00",
"2018-02-27T03:00:00",
"2018-02-27T04:00:00",
"2018-02-27T05:00:00",
"2018-02-27T06:00:00",
"2018-02-27T07:00:00",
"2018-02-27T08:00:00",
"2018-02-27T09:00:00",
"2018-02-27T10:00:00",
"2018-02-27T11:00:00",
"2018-02-27T12:00:00",
"2018-02-27T13:00:00",
"2018-02-27T14:00:00",
"2018-02-27T15:00:00",
"2018-02-27T16:00:00",
"2018-02-27T17:00:00",
"2018-02-27T18:00:00",
"2018-02-27T19:00:00",
"2018-02-27T20:00:00",
"2018-02-27T21:00:00",
"2018-02-27T22:00:00",
"2018-02-27T23:00:00"
],
"y": [
19.99,
19.99,
19.99,
19.99,
19.99,
19.99,
39.99,
39.99,
39.99,
39.99,
39.99,
39.99,
39.99,
39.99,
39.99,
39.99,
39.99,
39.99,
39.99,
39.99,
39.99,
39.99,
39.99,
39.99
]
},
{
"line": {
"dash": "dot"
},
"marker": {
"color": "rgb(67,147,195)"
},
"name": "Water value of Reservoir1",
"type": "scatter",
"x": [
"2018-02-27T00:00:00",
"2018-02-27T01:00:00",
"2018-02-27T02:00:00",
"2018-02-27T03:00:00",
"2018-02-27T04:00:00",
"2018-02-27T05:00:00",
"2018-02-27T06:00:00",
"2018-02-27T07:00:00",
"2018-02-27T08:00:00",
"2018-02-27T09:00:00",
"2018-02-27T10:00:00",
"2018-02-27T11:00:00",
"2018-02-27T12:00:00",
"2018-02-27T13:00:00",
"2018-02-27T14:00:00",
"2018-02-27T15:00:00",
"2018-02-27T16:00:00",
"2018-02-27T17:00:00",
"2018-02-27T18:00:00",
"2018-02-27T19:00:00",
"2018-02-27T20:00:00",
"2018-02-27T21:00:00",
"2018-02-27T22:00:00",
"2018-02-27T23:00:00"
],
"y": [
39.7,
39.7,
39.7,
39.7,
39.7,
39.7,
39.7,
39.7,
39.7,
39.7,
39.7,
39.7,
39.7,
39.7,
39.7,
39.7,
39.7,
39.7,
39.7,
39.7,
39.7,
39.7,
39.7,
39.7
]
},
{
"line": {
"dash": "dot"
},
"marker": {
"color": "rgb(146,197,222)"
},
"name": "Water value of Reservoir2",
"type": "scatter",
"x": [
"2018-02-27T00:00:00",
"2018-02-27T01:00:00",
"2018-02-27T02:00:00",
"2018-02-27T03:00:00",
"2018-02-27T04:00:00",
"2018-02-27T05:00:00",
"2018-02-27T06:00:00",
"2018-02-27T07:00:00",
"2018-02-27T08:00:00",
"2018-02-27T09:00:00",
"2018-02-27T10:00:00",
"2018-02-27T11:00:00",
"2018-02-27T12:00:00",
"2018-02-27T13:00:00",
"2018-02-27T14:00:00",
"2018-02-27T15:00:00",
"2018-02-27T16:00:00",
"2018-02-27T17:00:00",
"2018-02-27T18:00:00",
"2018-02-27T19:00:00",
"2018-02-27T20:00:00",
"2018-02-27T21:00:00",
"2018-02-27T22:00:00",
"2018-02-27T23:00:00"
],
"y": [
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0
]
}
],
"layout": {
"template": {
"data": {
"bar": [
{
"error_x": {
"color": "#2a3f5f"
},
"error_y": {
"color": "#2a3f5f"
},
"marker": {
"line": {
"color": "#E5ECF6",
"width": 0.5
},
"pattern": {
"fillmode": "overlay",
"size": 10,
"solidity": 0.2
}
},
"type": "bar"
}
],
"barpolar": [
{
"marker": {
"line": {
"color": "#E5ECF6",
"width": 0.5
},
"pattern": {
"fillmode": "overlay",
"size": 10,
"solidity": 0.2
}
},
"type": "barpolar"
}
],
"carpet": [
{
"aaxis": {
"endlinecolor": "#2a3f5f",
"gridcolor": "white",
"linecolor": "white",
"minorgridcolor": "white",
"startlinecolor": "#2a3f5f"
},
"baxis": {
"endlinecolor": "#2a3f5f",
"gridcolor": "white",
"linecolor": "white",
"minorgridcolor": "white",
"startlinecolor": "#2a3f5f"
},
"type": "carpet"
}
],
"choropleth": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"type": "choropleth"
}
],
"contour": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0.0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1.0,
"#f0f921"
]
],
"type": "contour"
}
],
"contourcarpet": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"type": "contourcarpet"
}
],
"heatmap": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0.0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1.0,
"#f0f921"
]
],
"type": "heatmap"
}
],
"heatmapgl": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0.0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1.0,
"#f0f921"
]
],
"type": "heatmapgl"
}
],
"histogram": [
{
"marker": {
"pattern": {
"fillmode": "overlay",
"size": 10,
"solidity": 0.2
}
},
"type": "histogram"
}
],
"histogram2d": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0.0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1.0,
"#f0f921"
]
],
"type": "histogram2d"
}
],
"histogram2dcontour": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0.0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1.0,
"#f0f921"
]
],
"type": "histogram2dcontour"
}
],
"mesh3d": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"type": "mesh3d"
}
],
"parcoords": [
{
"line": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "parcoords"
}
],
"pie": [
{
"automargin": true,
"type": "pie"
}
],
"scatter": [
{
"fillpattern": {
"fillmode": "overlay",
"size": 10,
"solidity": 0.2
},
"type": "scatter"
}
],
"scatter3d": [
{
"line": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scatter3d"
}
],
"scattercarpet": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scattercarpet"
}
],
"scattergeo": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scattergeo"
}
],
"scattergl": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scattergl"
}
],
"scattermapbox": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scattermapbox"
}
],
"scatterpolar": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scatterpolar"
}
],
"scatterpolargl": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scatterpolargl"
}
],
"scatterternary": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scatterternary"
}
],
"surface": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0.0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1.0,
"#f0f921"
]
],
"type": "surface"
}
],
"table": [
{
"cells": {
"fill": {
"color": "#EBF0F8"
},
"line": {
"color": "white"
}
},
"header": {
"fill": {
"color": "#C8D4E3"
},
"line": {
"color": "white"
}
},
"type": "table"
}
]
},
"layout": {
"annotationdefaults": {
"arrowcolor": "#2a3f5f",
"arrowhead": 0,
"arrowwidth": 1
},
"autotypenumbers": "strict",
"coloraxis": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"colorscale": {
"diverging": [
[
0,
"#8e0152"
],
[
0.1,
"#c51b7d"
],
[
0.2,
"#de77ae"
],
[
0.3,
"#f1b6da"
],
[
0.4,
"#fde0ef"
],
[
0.5,
"#f7f7f7"
],
[
0.6,
"#e6f5d0"
],
[
0.7,
"#b8e186"
],
[
0.8,
"#7fbc41"
],
[
0.9,
"#4d9221"
],
[
1,
"#276419"
]
],
"sequential": [
[
0.0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1.0,
"#f0f921"
]
],
"sequentialminus": [
[
0.0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1.0,
"#f0f921"
]
]
},
"colorway": [
"#636efa",
"#EF553B",
"#00cc96",
"#ab63fa",
"#FFA15A",
"#19d3f3",
"#FF6692",
"#B6E880",
"#FF97FF",
"#FECB52"
],
"font": {
"color": "#2a3f5f"
},
"geo": {
"bgcolor": "white",
"lakecolor": "white",
"landcolor": "#E5ECF6",
"showlakes": true,
"showland": true,
"subunitcolor": "white"
},
"hoverlabel": {
"align": "left"
},
"hovermode": "closest",
"mapbox": {
"style": "light"
},
"paper_bgcolor": "white",
"plot_bgcolor": "#E5ECF6",
"polar": {
"angularaxis": {
"gridcolor": "white",
"linecolor": "white",
"ticks": ""
},
"bgcolor": "#E5ECF6",
"radialaxis": {
"gridcolor": "white",
"linecolor": "white",
"ticks": ""
}
},
"scene": {
"xaxis": {
"backgroundcolor": "#E5ECF6",
"gridcolor": "white",
"gridwidth": 2,
"linecolor": "white",
"showbackground": true,
"ticks": "",
"zerolinecolor": "white"
},
"yaxis": {
"backgroundcolor": "#E5ECF6",
"gridcolor": "white",
"gridwidth": 2,
"linecolor": "white",
"showbackground": true,
"ticks": "",
"zerolinecolor": "white"
},
"zaxis": {
"backgroundcolor": "#E5ECF6",
"gridcolor": "white",
"gridwidth": 2,
"linecolor": "white",
"showbackground": true,
"ticks": "",
"zerolinecolor": "white"
}
},
"shapedefaults": {
"line": {
"color": "#2a3f5f"
}
},
"ternary": {
"aaxis": {
"gridcolor": "white",
"linecolor": "white",
"ticks": ""
},
"baxis": {
"gridcolor": "white",
"linecolor": "white",
"ticks": ""
},
"bgcolor": "#E5ECF6",
"caxis": {
"gridcolor": "white",
"linecolor": "white",
"ticks": ""
}
},
"title": {
"x": 0.05
},
"xaxis": {
"automargin": true,
"gridcolor": "white",
"linecolor": "white",
"ticks": "",
"title": {
"standoff": 15
},
"zerolinecolor": "white",
"zerolinewidth": 2
},
"yaxis": {
"automargin": true,
"gridcolor": "white",
"linecolor": "white",
"ticks": "",
"title": {
"standoff": 15
},
"zerolinecolor": "white",
"zerolinewidth": 2
}
}
},
"title": {
"text": "Market price and water value of reservoirs"
},
"xaxis": {
"title": {
"text": "Time (Hour)"
}
},
"yaxis": {
"title": {
"text": "Price (€/MWh)"
}
}
}
},
"text/html": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Plot market price and water value of reservoirs\n",
"spot_price=shop.model.market.Day_Ahead.sale_price.get()\n",
"\n",
"fig = go.Figure()\n",
"colorscale = px.colors.sequential.RdBu_r\n",
"color = 1\n",
"fig.add_trace(go.Scatter(x=spot_price.index, marker_color = colorscale[color], y=spot_price.values, name=\"Market price\"))\n",
"\n",
"for rsv in shop.model.reservoir:\n",
" color+=1\n",
" end_water_value=rsv.energy_value_input.get()\n",
" water_value=pd.Series([end_water_value]*len(spot_price),index=spot_price.index)\n",
" curve_name=\"Water value of \"+rsv.get_name()\n",
" fig.add_trace(go.Scatter(x=water_value.index, y=water_value.values, marker_color = colorscale[color], name=curve_name, line=dict(dash=\"dot\")))\n",
" \n",
"fig.update_layout(title=\"Market price and water value of reservoirs\", xaxis_title=\"Time (Hour)\", yaxis_title=\"Price (€/MWh)\")\n",
"\n",
"fig.show()"
]
},
{
"cell_type": "markdown",
"id": "0daed0d5",
"metadata": {},
"source": [
"## Run SHOP\n",
"We first run a naive optimization where the pump and generator are unaware that they are coupled and unable to operate at the same time."
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "06968770",
"metadata": {},
"outputs": [],
"source": [
"run_model(shop)"
]
},
{
"cell_type": "markdown",
"id": "4f77e90b",
"metadata": {},
"source": [
"We observe that the pump is used in the first six hours of the period, even though the generator is also producing power. This is not possible when dealing with a reversible turbine, but additional input is required for SHOP to recognize this."
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "3d8f3340",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.plotly.v1+json": {
"config": {
"plotlyServerURL": "https://plot.ly"
},
"data": [
{
"marker": {
"color": "rgb(234, 169, 189)"
},
"name": "Pump consumption",
"type": "bar",
"x": [
"2018-02-27T00:00:00",
"2018-02-27T01:00:00",
"2018-02-27T02:00:00",
"2018-02-27T03:00:00",
"2018-02-27T04:00:00",
"2018-02-27T05:00:00",
"2018-02-27T06:00:00",
"2018-02-27T07:00:00",
"2018-02-27T08:00:00",
"2018-02-27T09:00:00",
"2018-02-27T10:00:00",
"2018-02-27T11:00:00",
"2018-02-27T12:00:00",
"2018-02-27T13:00:00",
"2018-02-27T14:00:00",
"2018-02-27T15:00:00",
"2018-02-27T16:00:00",
"2018-02-27T17:00:00",
"2018-02-27T18:00:00",
"2018-02-27T19:00:00",
"2018-02-27T20:00:00",
"2018-02-27T21:00:00",
"2018-02-27T22:00:00",
"2018-02-27T23:00:00"
],
"y": [
50.000058571738066,
50.0000815675178,
50.000107159110165,
50.000134155169285,
50.0001613998992,
50.00018777242571,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0
]
},
{
"marker": {
"color": "rgb(108, 33, 103)"
},
"name": "Generator production",
"type": "bar",
"x": [
"2018-02-27T00:00:00",
"2018-02-27T01:00:00",
"2018-02-27T02:00:00",
"2018-02-27T03:00:00",
"2018-02-27T04:00:00",
"2018-02-27T05:00:00",
"2018-02-27T06:00:00",
"2018-02-27T07:00:00",
"2018-02-27T08:00:00",
"2018-02-27T09:00:00",
"2018-02-27T10:00:00",
"2018-02-27T11:00:00",
"2018-02-27T12:00:00",
"2018-02-27T13:00:00",
"2018-02-27T14:00:00",
"2018-02-27T15:00:00",
"2018-02-27T16:00:00",
"2018-02-27T17:00:00",
"2018-02-27T18:00:00",
"2018-02-27T19:00:00",
"2018-02-27T20:00:00",
"2018-02-27T21:00:00",
"2018-02-27T22:00:00",
"2018-02-27T23:00:00"
],
"y": [
25.000004100763267,
24.999999842691654,
24.99999529595391,
24.999990034705235,
24.999983646671808,
24.999975732892093,
24.999738082248054,
24.999753549634733,
24.99976183808946,
24.99976083571063,
24.99974817824341,
24.999721218631528,
24.999676992359685,
25.000087036184816,
25.000040377378987,
24.999969965957554,
24.99987180379611,
24.999741363239426,
24.999573566254444,
24.99936270867803,
24.99910237196828,
24.998785319981728,
24.99840337771393,
24.997947288193426
]
}
],
"layout": {
"template": {
"data": {
"bar": [
{
"error_x": {
"color": "#2a3f5f"
},
"error_y": {
"color": "#2a3f5f"
},
"marker": {
"line": {
"color": "#E5ECF6",
"width": 0.5
},
"pattern": {
"fillmode": "overlay",
"size": 10,
"solidity": 0.2
}
},
"type": "bar"
}
],
"barpolar": [
{
"marker": {
"line": {
"color": "#E5ECF6",
"width": 0.5
},
"pattern": {
"fillmode": "overlay",
"size": 10,
"solidity": 0.2
}
},
"type": "barpolar"
}
],
"carpet": [
{
"aaxis": {
"endlinecolor": "#2a3f5f",
"gridcolor": "white",
"linecolor": "white",
"minorgridcolor": "white",
"startlinecolor": "#2a3f5f"
},
"baxis": {
"endlinecolor": "#2a3f5f",
"gridcolor": "white",
"linecolor": "white",
"minorgridcolor": "white",
"startlinecolor": "#2a3f5f"
},
"type": "carpet"
}
],
"choropleth": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"type": "choropleth"
}
],
"contour": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0.0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1.0,
"#f0f921"
]
],
"type": "contour"
}
],
"contourcarpet": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"type": "contourcarpet"
}
],
"heatmap": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0.0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1.0,
"#f0f921"
]
],
"type": "heatmap"
}
],
"heatmapgl": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0.0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1.0,
"#f0f921"
]
],
"type": "heatmapgl"
}
],
"histogram": [
{
"marker": {
"pattern": {
"fillmode": "overlay",
"size": 10,
"solidity": 0.2
}
},
"type": "histogram"
}
],
"histogram2d": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0.0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1.0,
"#f0f921"
]
],
"type": "histogram2d"
}
],
"histogram2dcontour": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0.0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1.0,
"#f0f921"
]
],
"type": "histogram2dcontour"
}
],
"mesh3d": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"type": "mesh3d"
}
],
"parcoords": [
{
"line": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "parcoords"
}
],
"pie": [
{
"automargin": true,
"type": "pie"
}
],
"scatter": [
{
"fillpattern": {
"fillmode": "overlay",
"size": 10,
"solidity": 0.2
},
"type": "scatter"
}
],
"scatter3d": [
{
"line": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scatter3d"
}
],
"scattercarpet": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scattercarpet"
}
],
"scattergeo": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scattergeo"
}
],
"scattergl": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scattergl"
}
],
"scattermapbox": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scattermapbox"
}
],
"scatterpolar": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scatterpolar"
}
],
"scatterpolargl": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scatterpolargl"
}
],
"scatterternary": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scatterternary"
}
],
"surface": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0.0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1.0,
"#f0f921"
]
],
"type": "surface"
}
],
"table": [
{
"cells": {
"fill": {
"color": "#EBF0F8"
},
"line": {
"color": "white"
}
},
"header": {
"fill": {
"color": "#C8D4E3"
},
"line": {
"color": "white"
}
},
"type": "table"
}
]
},
"layout": {
"annotationdefaults": {
"arrowcolor": "#2a3f5f",
"arrowhead": 0,
"arrowwidth": 1
},
"autotypenumbers": "strict",
"coloraxis": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"colorscale": {
"diverging": [
[
0,
"#8e0152"
],
[
0.1,
"#c51b7d"
],
[
0.2,
"#de77ae"
],
[
0.3,
"#f1b6da"
],
[
0.4,
"#fde0ef"
],
[
0.5,
"#f7f7f7"
],
[
0.6,
"#e6f5d0"
],
[
0.7,
"#b8e186"
],
[
0.8,
"#7fbc41"
],
[
0.9,
"#4d9221"
],
[
1,
"#276419"
]
],
"sequential": [
[
0.0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1.0,
"#f0f921"
]
],
"sequentialminus": [
[
0.0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1.0,
"#f0f921"
]
]
},
"colorway": [
"#636efa",
"#EF553B",
"#00cc96",
"#ab63fa",
"#FFA15A",
"#19d3f3",
"#FF6692",
"#B6E880",
"#FF97FF",
"#FECB52"
],
"font": {
"color": "#2a3f5f"
},
"geo": {
"bgcolor": "white",
"lakecolor": "white",
"landcolor": "#E5ECF6",
"showlakes": true,
"showland": true,
"subunitcolor": "white"
},
"hoverlabel": {
"align": "left"
},
"hovermode": "closest",
"mapbox": {
"style": "light"
},
"paper_bgcolor": "white",
"plot_bgcolor": "#E5ECF6",
"polar": {
"angularaxis": {
"gridcolor": "white",
"linecolor": "white",
"ticks": ""
},
"bgcolor": "#E5ECF6",
"radialaxis": {
"gridcolor": "white",
"linecolor": "white",
"ticks": ""
}
},
"scene": {
"xaxis": {
"backgroundcolor": "#E5ECF6",
"gridcolor": "white",
"gridwidth": 2,
"linecolor": "white",
"showbackground": true,
"ticks": "",
"zerolinecolor": "white"
},
"yaxis": {
"backgroundcolor": "#E5ECF6",
"gridcolor": "white",
"gridwidth": 2,
"linecolor": "white",
"showbackground": true,
"ticks": "",
"zerolinecolor": "white"
},
"zaxis": {
"backgroundcolor": "#E5ECF6",
"gridcolor": "white",
"gridwidth": 2,
"linecolor": "white",
"showbackground": true,
"ticks": "",
"zerolinecolor": "white"
}
},
"shapedefaults": {
"line": {
"color": "#2a3f5f"
}
},
"ternary": {
"aaxis": {
"gridcolor": "white",
"linecolor": "white",
"ticks": ""
},
"baxis": {
"gridcolor": "white",
"linecolor": "white",
"ticks": ""
},
"bgcolor": "#E5ECF6",
"caxis": {
"gridcolor": "white",
"linecolor": "white",
"ticks": ""
}
},
"title": {
"x": 0.05
},
"xaxis": {
"automargin": true,
"gridcolor": "white",
"linecolor": "white",
"ticks": "",
"title": {
"standoff": 15
},
"zerolinecolor": "white",
"zerolinewidth": 2
},
"yaxis": {
"automargin": true,
"gridcolor": "white",
"linecolor": "white",
"ticks": "",
"title": {
"standoff": 15
},
"zerolinecolor": "white",
"zerolinewidth": 2
}
}
},
"title": {
"text": "Pump consumption and generator production"
},
"xaxis": {
"title": {
"text": "Time (Hour)"
}
},
"yaxis": {
"title": {
"text": "Production/Consumption (MW)"
}
}
}
},
"text/html": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Plotting pump consumption and generator production\n",
"consumption=pump.consumption.get()\n",
"production=gen.production.get()\n",
"fig = go.Figure()\n",
"colorscale = px.colors.sequential.Magenta\n",
"fig.add_trace(go.Bar(x=consumption.index, y=consumption.values, name=\"Pump consumption\", marker_color=colorscale[1]))\n",
"fig.add_trace(go.Bar(x=production.index, y=production.values, name=\"Generator production\", marker_color=colorscale[6]))\n",
"fig.update_layout(title=\"Pump consumption and generator production\", xaxis_title=\"Time (Hour)\", yaxis_title=\"Production/Consumption (MW)\")"
]
},
{
"cell_type": "markdown",
"id": "841b08a3",
"metadata": {},
"source": [
"## Using commit_group to stop simultaneous pumping and production\n",
"\n",
"To stop the pump and generator running at the same time, we can use the [commit_group object](commit_group). A commit_group is simply a collection of generators and pumps. When two commit_groups are connected, the units connected to the first group can not run when any of the units in the other group is running, and vice versa. No other input is required for the commit_groups, only the connections.\n",
"\n",
"First we recreate the previous model:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "0baff295",
"metadata": {
"Collapsed": "false"
},
"outputs": [],
"source": [
"#Create a standard ShopSession\n",
"shop=ShopSession()\n",
"#Build a basic SHOP model\n",
"build_model(shop)\n",
"\n",
"#Add variable speed pump\n",
"pump = shop.model.pump.add_object(\"P1P1\")\n",
"pump.connect_to(shop.model.plant.Plant1)\n",
"pump.penstock.set(1)\n",
"pump.p_nom.set(50)\n",
"pump.p_min.set(30)\n",
"pump.p_max.set(50)\n",
"pump.startcost.set(500)\n",
"pump.gen_eff_curve.set(pd.Series([100,100], index=[0,50]))\n",
"\n",
"c1 = pd.Series([84,86,85],index=[64,90,110],name=40)\n",
"c2 = pd.Series([82.5,84,83],index=[60,80,90],name=50)\n",
"c3 = pd.Series([79,82.5,82],index=[40,65,70],name=60)\n",
"\n",
"pump.turb_eff_curves.set([c1,c2,c3])\n",
"\n",
"#Set upper reservoir to almost full at the start\n",
"rsv1 = shop.model.reservoir[\"Reservoir1\"]\n",
"rsv1.start_head.set(rsv1.hrl.get()-1)\n",
"\n",
"#Force generator to run in all time steps\n",
"gen = shop.model.generator[\"P1G1\"]\n",
"gen.committed_in.set(1)"
]
},
{
"cell_type": "markdown",
"id": "8c208231",
"metadata": {},
"source": [
"Now we add two commit_groups and connect the pump to one group and the generator to the other group. The the two commit_groups are then connected, which means that the pump and generator cannot operate at the same time."
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "397042c4",
"metadata": {},
"outputs": [],
"source": [
"cg1 = shop.model.commit_group.add_object(\"cg1\")\n",
"cg2 = shop.model.commit_group.add_object(\"cg2\")\n",
"\n",
"cg1.connect_to(pump)\n",
"cg2.connect_to(gen)\n",
"\n",
"#Exclude pump in cg1 from running when generator in cg2 is on\n",
"cg1.connect_to(cg2)"
]
},
{
"cell_type": "markdown",
"id": "ea5e3e84",
"metadata": {},
"source": [
"Since the commit_group constraints are applied directly to the binary variables that decide whether a unit is on or off, it is important to use MIP to ensure the constraints are enforced."
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "9fd43886",
"metadata": {},
"outputs": [],
"source": [
"shop.set_universal_mip(\"on\",[])\n",
"run_model(shop)"
]
},
{
"cell_type": "markdown",
"id": "b44b4706",
"metadata": {},
"source": [
"The results below show that the pump no longer operates in the beginning of the optimization since the generator is forced to run."
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "4c9149a5",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.plotly.v1+json": {
"config": {
"plotlyServerURL": "https://plot.ly"
},
"data": [
{
"marker": {
"color": "rgb(234, 169, 189)"
},
"name": "Pump consumption",
"type": "bar",
"x": [
"2018-02-27T00:00:00",
"2018-02-27T01:00:00",
"2018-02-27T02:00:00",
"2018-02-27T03:00:00",
"2018-02-27T04:00:00",
"2018-02-27T05:00:00",
"2018-02-27T06:00:00",
"2018-02-27T07:00:00",
"2018-02-27T08:00:00",
"2018-02-27T09:00:00",
"2018-02-27T10:00:00",
"2018-02-27T11:00:00",
"2018-02-27T12:00:00",
"2018-02-27T13:00:00",
"2018-02-27T14:00:00",
"2018-02-27T15:00:00",
"2018-02-27T16:00:00",
"2018-02-27T17:00:00",
"2018-02-27T18:00:00",
"2018-02-27T19:00:00",
"2018-02-27T20:00:00",
"2018-02-27T21:00:00",
"2018-02-27T22:00:00",
"2018-02-27T23:00:00"
],
"y": [
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0
]
},
{
"marker": {
"color": "rgb(108, 33, 103)"
},
"name": "Generator production",
"type": "bar",
"x": [
"2018-02-27T00:00:00",
"2018-02-27T01:00:00",
"2018-02-27T02:00:00",
"2018-02-27T03:00:00",
"2018-02-27T04:00:00",
"2018-02-27T05:00:00",
"2018-02-27T06:00:00",
"2018-02-27T07:00:00",
"2018-02-27T08:00:00",
"2018-02-27T09:00:00",
"2018-02-27T10:00:00",
"2018-02-27T11:00:00",
"2018-02-27T12:00:00",
"2018-02-27T13:00:00",
"2018-02-27T14:00:00",
"2018-02-27T15:00:00",
"2018-02-27T16:00:00",
"2018-02-27T17:00:00",
"2018-02-27T18:00:00",
"2018-02-27T19:00:00",
"2018-02-27T20:00:00",
"2018-02-27T21:00:00",
"2018-02-27T22:00:00",
"2018-02-27T23:00:00"
],
"y": [
24.999656095101223,
24.999715338368738,
24.999704475514598,
24.999692241309045,
24.999678397011056,
24.99966263095912,
24.9996445963436,
24.999623906560384,
24.999600129782618,
24.99957278259372,
24.999541322476034,
25.000005321800312,
25.000009060629736,
25.000011797340864,
25.000013369696248,
25.000013610806317,
25.00001235001353,
25.000009413968872,
25.000004627904232,
24.999997817086463,
24.999988808409967,
24.99997739981701,
24.999963351167956,
24.99994637168907
]
}
],
"layout": {
"template": {
"data": {
"bar": [
{
"error_x": {
"color": "#2a3f5f"
},
"error_y": {
"color": "#2a3f5f"
},
"marker": {
"line": {
"color": "#E5ECF6",
"width": 0.5
},
"pattern": {
"fillmode": "overlay",
"size": 10,
"solidity": 0.2
}
},
"type": "bar"
}
],
"barpolar": [
{
"marker": {
"line": {
"color": "#E5ECF6",
"width": 0.5
},
"pattern": {
"fillmode": "overlay",
"size": 10,
"solidity": 0.2
}
},
"type": "barpolar"
}
],
"carpet": [
{
"aaxis": {
"endlinecolor": "#2a3f5f",
"gridcolor": "white",
"linecolor": "white",
"minorgridcolor": "white",
"startlinecolor": "#2a3f5f"
},
"baxis": {
"endlinecolor": "#2a3f5f",
"gridcolor": "white",
"linecolor": "white",
"minorgridcolor": "white",
"startlinecolor": "#2a3f5f"
},
"type": "carpet"
}
],
"choropleth": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"type": "choropleth"
}
],
"contour": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0.0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1.0,
"#f0f921"
]
],
"type": "contour"
}
],
"contourcarpet": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"type": "contourcarpet"
}
],
"heatmap": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0.0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1.0,
"#f0f921"
]
],
"type": "heatmap"
}
],
"heatmapgl": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0.0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1.0,
"#f0f921"
]
],
"type": "heatmapgl"
}
],
"histogram": [
{
"marker": {
"pattern": {
"fillmode": "overlay",
"size": 10,
"solidity": 0.2
}
},
"type": "histogram"
}
],
"histogram2d": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0.0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1.0,
"#f0f921"
]
],
"type": "histogram2d"
}
],
"histogram2dcontour": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0.0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1.0,
"#f0f921"
]
],
"type": "histogram2dcontour"
}
],
"mesh3d": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"type": "mesh3d"
}
],
"parcoords": [
{
"line": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "parcoords"
}
],
"pie": [
{
"automargin": true,
"type": "pie"
}
],
"scatter": [
{
"fillpattern": {
"fillmode": "overlay",
"size": 10,
"solidity": 0.2
},
"type": "scatter"
}
],
"scatter3d": [
{
"line": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scatter3d"
}
],
"scattercarpet": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scattercarpet"
}
],
"scattergeo": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scattergeo"
}
],
"scattergl": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scattergl"
}
],
"scattermapbox": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scattermapbox"
}
],
"scatterpolar": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scatterpolar"
}
],
"scatterpolargl": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scatterpolargl"
}
],
"scatterternary": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scatterternary"
}
],
"surface": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0.0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1.0,
"#f0f921"
]
],
"type": "surface"
}
],
"table": [
{
"cells": {
"fill": {
"color": "#EBF0F8"
},
"line": {
"color": "white"
}
},
"header": {
"fill": {
"color": "#C8D4E3"
},
"line": {
"color": "white"
}
},
"type": "table"
}
]
},
"layout": {
"annotationdefaults": {
"arrowcolor": "#2a3f5f",
"arrowhead": 0,
"arrowwidth": 1
},
"autotypenumbers": "strict",
"coloraxis": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"colorscale": {
"diverging": [
[
0,
"#8e0152"
],
[
0.1,
"#c51b7d"
],
[
0.2,
"#de77ae"
],
[
0.3,
"#f1b6da"
],
[
0.4,
"#fde0ef"
],
[
0.5,
"#f7f7f7"
],
[
0.6,
"#e6f5d0"
],
[
0.7,
"#b8e186"
],
[
0.8,
"#7fbc41"
],
[
0.9,
"#4d9221"
],
[
1,
"#276419"
]
],
"sequential": [
[
0.0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1.0,
"#f0f921"
]
],
"sequentialminus": [
[
0.0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1.0,
"#f0f921"
]
]
},
"colorway": [
"#636efa",
"#EF553B",
"#00cc96",
"#ab63fa",
"#FFA15A",
"#19d3f3",
"#FF6692",
"#B6E880",
"#FF97FF",
"#FECB52"
],
"font": {
"color": "#2a3f5f"
},
"geo": {
"bgcolor": "white",
"lakecolor": "white",
"landcolor": "#E5ECF6",
"showlakes": true,
"showland": true,
"subunitcolor": "white"
},
"hoverlabel": {
"align": "left"
},
"hovermode": "closest",
"mapbox": {
"style": "light"
},
"paper_bgcolor": "white",
"plot_bgcolor": "#E5ECF6",
"polar": {
"angularaxis": {
"gridcolor": "white",
"linecolor": "white",
"ticks": ""
},
"bgcolor": "#E5ECF6",
"radialaxis": {
"gridcolor": "white",
"linecolor": "white",
"ticks": ""
}
},
"scene": {
"xaxis": {
"backgroundcolor": "#E5ECF6",
"gridcolor": "white",
"gridwidth": 2,
"linecolor": "white",
"showbackground": true,
"ticks": "",
"zerolinecolor": "white"
},
"yaxis": {
"backgroundcolor": "#E5ECF6",
"gridcolor": "white",
"gridwidth": 2,
"linecolor": "white",
"showbackground": true,
"ticks": "",
"zerolinecolor": "white"
},
"zaxis": {
"backgroundcolor": "#E5ECF6",
"gridcolor": "white",
"gridwidth": 2,
"linecolor": "white",
"showbackground": true,
"ticks": "",
"zerolinecolor": "white"
}
},
"shapedefaults": {
"line": {
"color": "#2a3f5f"
}
},
"ternary": {
"aaxis": {
"gridcolor": "white",
"linecolor": "white",
"ticks": ""
},
"baxis": {
"gridcolor": "white",
"linecolor": "white",
"ticks": ""
},
"bgcolor": "#E5ECF6",
"caxis": {
"gridcolor": "white",
"linecolor": "white",
"ticks": ""
}
},
"title": {
"x": 0.05
},
"xaxis": {
"automargin": true,
"gridcolor": "white",
"linecolor": "white",
"ticks": "",
"title": {
"standoff": 15
},
"zerolinecolor": "white",
"zerolinewidth": 2
},
"yaxis": {
"automargin": true,
"gridcolor": "white",
"linecolor": "white",
"ticks": "",
"title": {
"standoff": 15
},
"zerolinecolor": "white",
"zerolinewidth": 2
}
}
},
"title": {
"text": "Pump consumption and generator production"
},
"xaxis": {
"title": {
"text": "Time (Hour)"
}
},
"yaxis": {
"title": {
"text": "Production/Consumption (MW)"
}
}
}
},
"text/html": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Plotting pump consumption and generator production\n",
"consumption=pump.consumption.get()\n",
"production=gen.production.get()\n",
"fig = go.Figure()\n",
"colorscale = px.colors.sequential.Magenta\n",
"fig.add_trace(go.Bar(x=consumption.index, y=consumption.values, name=\"Pump consumption\", marker_color=colorscale[1]))\n",
"fig.add_trace(go.Bar(x=production.index, y=production.values, name=\"Generator production\", marker_color=colorscale[6]))\n",
"fig.update_layout(title=\"Pump consumption and generator production\", xaxis_title=\"Time (Hour)\", yaxis_title=\"Production/Consumption (MW)\")"
]
}
],
"metadata": {
"jupytext": {
"text_representation": {
"extension": ".md",
"format_name": "myst",
"format_version": 0.13,
"jupytext_version": "1.14.6"
}
},
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.12.10"
},
"source_map": [
12,
28,
40,
44,
53,
61,
85,
89,
108,
113,
115,
119,
128,
136,
167,
171,
180,
184,
187,
191
]
},
"nbformat": 4,
"nbformat_minor": 5
}