EvaluatorEH
This notebook covers how to use the PyEHub Evaluator (EvaluatorEH
).
import numpy as np
import pandas as pd
from besos import pyehub_funcs as pf
from besos.evaluator import EvaluatorEH
from besos.parameters import Parameter, PathSelector
from besos.problem import EHProblem
This evaluator needs an energy hub model, and a problem with parameters that can modify it, and objectives that correspond to outputs from the solution of the model. Parameters are provided as a list of key list mapping lists for the different variables inside the model. Outputs are provided as a list of the keys from the solution of the model.
hub = pf.get_hub()
parameters = [
Parameter(PathSelector(["LOADS", "Elec"])),
Parameter(PathSelector(["LOADS", "Heat"])),
]
objectives = ["total_cost", "total_carbon"]
problem = EHProblem(parameters, objectives)
evaluatorEH = EvaluatorEH(problem, hub)
Input values for overwritting the specified parameters can be given in the form of single values, a dictionary time series, a dataframe of single values, or a dataframe of time series.
default_timeseries = [
{
0: 1.0,
1: 4.0,
2: 4.0,
3: 4.0,
4: 4.0,
5: 4.0,
6: 4.0,
7: 4.0,
8: 4.0,
9: 4.0,
10: 4.0,
},
{
0: 20.0,
1: 20.0,
2: 20.0,
3: 20.0,
4: 20.0,
5: 20.0,
6: 20.0,
7: 12.0,
8: 12.0,
9: 12.0,
10: 12.0,
},
]
modified_heat = [
{
0: 1.0,
1: 4.0,
2: 4.0,
3: 4.0,
4: 4.0,
5: 4.0,
6: 4.0,
7: 4.0,
8: 4.0,
9: 4.0,
10: 4.0,
},
{
0: 18.0,
1: 18.0,
2: 18.0,
3: 18.0,
4: 18.0,
5: 18.0,
6: 18.0,
7: 16.0,
8: 16.0,
9: 16.0,
10: 16.0,
},
]
modified_elec = [
{
0: 4.0,
1: 8.0,
2: 6.0,
3: 5.0,
4: 7.0,
5: 7.0,
6: 7.0,
7: 7.0,
8: 7.0,
9: 7.0,
10: 7.0,
},
{
0: 20.0,
1: 20.0,
2: 20.0,
3: 20.0,
4: 20.0,
5: 20.0,
6: 20.0,
7: 12.0,
8: 12.0,
9: 12.0,
10: 12.0,
},
]
modified_both = [
{
0: 4.0,
1: 8.0,
2: 6.0,
3: 5.0,
4: 7.0,
5: 7.0,
6: 7.0,
7: 7.0,
8: 7.0,
9: 7.0,
10: 7.0,
},
{
0: 18.0,
1: 18.0,
2: 18.0,
3: 18.0,
4: 18.0,
5: 18.0,
6: 18.0,
7: 16.0,
8: 16.0,
9: 16.0,
10: 16.0,
},
]
timeseries_df = pd.DataFrame(
np.array([default_timeseries, modified_heat, modified_elec, modified_both]),
columns=["p1", "p2"],
)
Normally the evaluator can be called directly with the input values but if using a dataframe as input df_apply must be used.
result = evaluatorEH.df_apply(timeseries_df)
result
HBox(children=(FloatProgress(value=0.0, description='Executing', max=4.0, style=ProgressStyle(description_widt…
total_cost | total_carbon | |
---|---|---|
0 | 1846.19 | 33.7551 |
1 | 1850.01 | 33.7190 |
2 | 1844.18 | 44.6054 |
3 | 1847.10 | 44.5693 |