Source code for oemof.eesyplan.model
import logging
from oemof.solph import EnergySystem as SolphES
from oemof.solph import Model
from oemof.solph import Results as SolphResults
from oemof.solph import create_time_index
[docs]
class EnergySystem(SolphES):
[docs]
def __init__(
self,
year=None,
interval=1,
number=None,
start=None,
**kwargs,
):
"""
Create an energy system with a datetime index for one year.
It is also possible to specifiy different periods. See the paramter
description below.
Notes
-----
To create 8760 hourly intervals for a non leap year a datetime index
with 8761 time points need to be created. So the number of time steps
is always the number of intervals plus one.
Parameters
----------
year : int, datetime
The year of the index.
Used to automatically set start and number for the specific year.
interval : float
The time interval in hours e.g. 0.5 for 30min or 2 for a two hour
interval (default: 1).
number : int
The number of time intervals. By default number is calculated to
create an index of one year. For a shorter or longer period the
number of intervals can be set by the user.
start : datetime.datetime or datetime.date
Optional start time. If start is not set, 00:00 of the first day of
the given year is the start time.
Examples
--------
>>> len(EnergySystem(2014).timeindex)
8761
>>> len(EnergySystem(2012).timeindex) # leap year
8785
>>> len(EnergySystem(2014, interval=0.5).timeindex)
17521
>>> len(EnergySystem(2014, interval=0.5, number=10).timeindex)
11
>>> len(EnergySystem(2014, number=10).timeindex)
11
>>> str(EnergySystem(2014, interval=0.5, number=10).timeindex[-1])
'2014-01-01 05:00:00'
>>> es = EnergySystem(2014, interval=2, number=10)
>>> str(es.timeindex[-1])
'2014-01-01 20:00:00'
>>> str(EnergySystem(timeindex=es.timeindex).timeindex[-1])
'2014-01-01 20:00:00'
"""
if kwargs.get("timeindex", None) is None:
timeindex = create_time_index(
year=year, interval=interval, number=number, start=start
)
else:
timeindex = kwargs.get("timeindex")
super().__init__(
timeindex=timeindex,
infer_last_interval=False,
periods=kwargs.get("periods"),
)
[docs]
class Results(SolphResults):
[docs]
def __init__(self, model):
super().__init__(model)
[docs]
def optimise(energy_system, solver="cbc", debug=False):
"""Optimise the energy system."""
logging.info("Create model")
optimization_model = Model(energysystem=energy_system)
# solve problem
logging.info("Solve model")
if debug:
skwargs = {"tee": True, "keepfiles": False}
else:
skwargs = {}
optimization_model.solve(solver=solver, solve_kwargs=skwargs)
return Results(optimization_model)