Skip to content

Commit

Permalink
Add examples
Browse files Browse the repository at this point in the history
  • Loading branch information
uvchik committed May 23, 2022
1 parent af631dd commit edc72ed
Show file tree
Hide file tree
Showing 7 changed files with 18,402 additions and 1 deletion.
94 changes: 94 additions & 0 deletions examples/activity_costs/activity_costs.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
# -*- coding: utf-8 -*-

"""
General description
-------------------
This example illustrates the effect of activity_costs.
There are the following components:
- demand_heat: heat demand (constant, for the sake of simplicity)
- fireplace: wood firing, burns "for free" if somebody is around
- boiler: gas firing, consumes (paid) gas
Notice that activity_costs is an attribute to NonConvex.
This is because it relies on the activity status of a component
which is only available for nonconvex flows.
Installation requirements
-------------------------
This example requires oemof.solph (v0.5.x), install by:
pip install oemof.solph[examples]
"""

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

from oemof import solph


##########################################################################
# Calculate parameters and initialize the energy system and
##########################################################################

periods = 24
time = pd.date_range('1/1/2018', periods=periods, freq='H')

demand_heat = np.full(periods, 5)
demand_heat[:4] = 0
demand_heat[4:18] = 4

activity_costs = np.full(periods, 5)
activity_costs[18:] = 0

es = solph.EnergySystem(timeindex=time)

b_heat = solph.Bus(label='b_heat')

es.add(b_heat)

sink_heat = solph.components.Sink(
label='demand',
inputs={b_heat: solph.Flow(fix=demand_heat, nominal_value=1)})

fireplace = solph.components.Source(
label='fireplace',
outputs={b_heat: solph.Flow(nominal_value=3,
variable_costs=0,
nonconvex=solph.NonConvex(
activity_costs=activity_costs))})

boiler = solph.components.Source(
label='boiler',
outputs={b_heat: solph.Flow(nominal_value=10,
variable_costs=1)})

es.add(sink_heat, fireplace, boiler)

##########################################################################
# Optimise the energy system
##########################################################################

# create an optimization problem and solve it
om = solph.Model(es)

# solve model
om.solve(solver='cbc', solve_kwargs={'tee': True})

##########################################################################
# Check and plot the results
##########################################################################

results = solph.processing.results(om)

# plot data
data = solph.views.node(results, 'b_heat')['sequences']
ax = data.plot(kind='line', drawstyle='steps-post', grid=True, rot=0)
ax.set_xlabel('Time')
ax.set_ylabel('Heat (arb. units)')
plt.show()
Loading

0 comments on commit edc72ed

Please sign in to comment.