battery_optimizer.uk.result#

Classes

CommercialResults(*, timestamp, ...)

DynamicServicesEnergyThroughputBuffer(*, start)

UKMarketPositions(*, intraday, imbalance, ...)

UKResult(*, asset_id, request_id, ...[, ...])

class battery_optimizer.uk.result.CommercialResults(*, timestamp, delivery_date, third_party_buy_GBP, third_party_sell_GBP, third_party_sum_GBP, dc_high_revenue_GBP, dc_low_revenue_GBP, dc_sum_revenue_GBP, dm_high_revenue_GBP, dm_low_revenue_GBP, dr_high_revenue_GBP, dr_low_revenue_GBP, commodity_buy_GBP, commodity_sell_GBP, commodity_sum_GBP, commodity_buy_MWh, commodity_sell_MWh, pv_revenue_GBP, pv_volume_MWh, sum_mas_GBP, sum_dc_mas_GBP, sum_pv_dc_mas_GBP, imbalance_import_MWh, imbalance_export_MWh)#

Bases: BaseModel

Parameters:
  • timestamp (datetime)

  • delivery_date (date)

  • third_party_buy_GBP (float)

  • third_party_sell_GBP (float)

  • third_party_sum_GBP (float)

  • dc_high_revenue_GBP (float)

  • dc_low_revenue_GBP (float)

  • dc_sum_revenue_GBP (float)

  • dm_high_revenue_GBP (float)

  • dm_low_revenue_GBP (float)

  • dr_high_revenue_GBP (float)

  • dr_low_revenue_GBP (float)

  • commodity_buy_GBP (float)

  • commodity_sell_GBP (float)

  • commodity_sum_GBP (float)

  • commodity_buy_MWh (float)

  • commodity_sell_MWh (float)

  • pv_revenue_GBP (float)

  • pv_volume_MWh (float)

  • sum_mas_GBP (float)

  • sum_dc_mas_GBP (float)

  • sum_pv_dc_mas_GBP (float)

  • imbalance_import_MWh (float)

  • imbalance_export_MWh (float)

commodity_buy_GBP: float#
commodity_buy_MWh: float#
commodity_sell_GBP: float#
commodity_sell_MWh: float#
commodity_sum_GBP: float#
dc_high_revenue_GBP: float#
dc_low_revenue_GBP: float#
dc_sum_revenue_GBP: float#
delivery_date: date#
dm_high_revenue_GBP: float#
dm_low_revenue_GBP: float#
dr_high_revenue_GBP: float#
dr_low_revenue_GBP: float#
imbalance_export_MWh: float#
imbalance_import_MWh: float#
model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True, 'extra': 'ignore', 'frozen': False, 'json_encoders': {<class 'datetime.datetime'>: <function BaseModel.<lambda>>, <class 'pandas._libs.tslibs.timedeltas.Timedelta'>: <function BaseModel.<lambda>>, <class 'pandas._libs.tslibs.timestamps.Timestamp'>: <function BaseModel.<lambda>>, <class 'pandas.core.frame.DataFrame'>: <function BaseModel.<lambda>>, <class 'pandas.core.series.Series'>: <function BaseModel.<lambda>>}, 'validate_default': True}#

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

pv_revenue_GBP: float#
pv_volume_MWh: float#
sum_dc_mas_GBP: float#
sum_mas_GBP: float#
sum_pv_dc_mas_GBP: float#
third_party_buy_GBP: float#
third_party_sell_GBP: float#
third_party_sum_GBP: float#
timestamp: datetime#
class battery_optimizer.uk.result.DynamicServicesEnergyThroughputBuffer(*, start, dcl_MWh_per_MW=0.0, dch_MWh_per_MW=0.0, dml_MWh_per_MW=0.0, dmh_MWh_per_MW=0.0, drl_MWh_per_MW=0.0, drh_MWh_per_MW=0.0, ds_energy_throughput_buffer_low, ds_energy_throughput_buffer_high)#

Bases: DSEnergyThroughput

Parameters:
ds_energy_throughput_buffer_high: float#
ds_energy_throughput_buffer_low: float#
model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True, 'extra': 'ignore', 'frozen': False, 'json_encoders': {<class 'datetime.datetime'>: <function BaseModel.<lambda>>, <class 'pandas._libs.tslibs.timedeltas.Timedelta'>: <function BaseModel.<lambda>>, <class 'pandas._libs.tslibs.timestamps.Timestamp'>: <function BaseModel.<lambda>>, <class 'pandas.core.frame.DataFrame'>: <function BaseModel.<lambda>>, <class 'pandas.core.series.Series'>: <function BaseModel.<lambda>>}, 'validate_default': True}#

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class battery_optimizer.uk.result.UKMarketPositions(*, intraday, imbalance, n2ex1h, epex30min, dcl, dch, dml, dmh, drl, drh)#

Bases: MarketPositions

Parameters:
dch: list[CapacityMarketPositions] | DataFrame#
dcl: list[CapacityMarketPositions] | DataFrame#
dmh: list[CapacityMarketPositions] | DataFrame#
dml: list[CapacityMarketPositions] | DataFrame#
drh: list[CapacityMarketPositions] | DataFrame#
drl: list[CapacityMarketPositions] | DataFrame#
epex30min: list[EnergyMarketAuctionedPositions] | DataFrame#
model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True, 'extra': 'ignore', 'frozen': False, 'json_encoders': {<class 'datetime.datetime'>: <function BaseModel.<lambda>>, <class 'pandas._libs.tslibs.timedeltas.Timedelta'>: <function BaseModel.<lambda>>, <class 'pandas._libs.tslibs.timestamps.Timestamp'>: <function BaseModel.<lambda>>, <class 'pandas.core.frame.DataFrame'>: <function BaseModel.<lambda>>, <class 'pandas.core.series.Series'>: <function BaseModel.<lambda>>}, 'validate_default': True}#

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

n2ex1h: list[EnergyMarketAuctionedPositions] | DataFrame#
class battery_optimizer.uk.result.UKResult(*, asset_id, request_id, battery_optimizer_commit_sha, user_id, request_creation_time, result_creation_time, request, market_positions, markets_optimized, markets_already_auctioned, soe, discharge_over_daily_cycle_limit_kWh=None, discharge_over_daily_cycle_limit_count=None, intraday_buckets=None, aggregated_intraday_buckets=None, trace=None, pulp_solver_variables_values_delta_false=None, pulp_solver_variables_values_delta_true=None, optimizer_object=None, commercial_results_per_settlement_period=None, commercial_results=None, dynamic_services_energy_throughput_buffer=None)#

Bases: Result

Parameters:
classmethod amend_result_dict(result_dict, solved_problem, delta=False)#

Amend the result dictionary with additional information.

Parameters:
  • result_dict: The result dictionary to amend.

  • solved_problem: The solved optimization problem.

  • delta: Whether to use delta values.

Returns:
  • The amended result dictionary.

Parameters:
Return type:

dict

commercial_results: list[CommercialResults] | DataFrame | None#
commercial_results_per_settlement_period: list[CommercialResults] | DataFrame | None#
classmethod create_dataframe_from_solved_problem(solved_problem, delta=False)#
Parameters:

solved_problem (UKBatteryOptimizer)

Return type:

dict

classmethod create_melmil_result_from_solved_problem(solved_problem, delta=False, mel_mil=ObjectiveName.mel)#

Create Result object from solved BatteryOptimizer problem.

Parameters:
  • solved_problem: The solved optimization problem.

  • markets: Markets that we want to compute the objective for, especially for the commercial results.

Parameters:
dynamic_services_energy_throughput_buffer: list[DynamicServicesEnergyThroughputBuffer] | DataFrame | None#
static get_commercial_results(solved_problem, market_positions, frequency, markets_commercial_results)#
Parameters:
static get_dynamic_services_energy_throughput_buffer(solved_problem, delta=False)#
Parameters:

solved_problem (UKBatteryOptimizer)

Return type:

list[DynamicServicesEnergyThroughputBuffer]

classmethod get_soe(solved_problem, result)#
Return type:

list[SoE]

classmethod get_solved_problem_dataframe_additional_columns()#
market_positions: UKMarketPositions#
model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True, 'extra': 'ignore', 'frozen': False, 'json_encoders': {<class 'datetime.datetime'>: <function BaseModel.<lambda>>, <class 'pandas._libs.tslibs.timedeltas.Timedelta'>: <function BaseModel.<lambda>>, <class 'pandas._libs.tslibs.timestamps.Timestamp'>: <function BaseModel.<lambda>>, <class 'pandas.core.frame.DataFrame'>: <function BaseModel.<lambda>>, <class 'pandas.core.series.Series'>: <function BaseModel.<lambda>>}, 'validate_default': True}#

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

request: UKRequest#