battery_optimizer.de.request#
Classes
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- class battery_optimizer.de.request.AFRRCapacityParameters(*, delivery_duration_buffer_perc=1.0, max_marketable_power_factor=1.0, prequalified_power_kW=None, delivery_duration_sec=3600.0)#
Bases:
AFRRParameters- Parameters:
- 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.de.request.AFRREnergyParameters(*, delivery_duration_buffer_perc=1.0, max_marketable_power_factor=1.0, prequalified_power_kW=None, delivery_duration_sec=900)#
Bases:
AFRRParameters- Parameters:
- 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.de.request.AFRRParameters(*, delivery_duration_buffer_perc=1.0, max_marketable_power_factor=1.0, prequalified_power_kW=None)#
Bases:
BaseModel- Parameters:
- 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].
- prevent_direct_instantiation()#
- class battery_optimizer.de.request.DEAsset(*, asset_id='Unique ID of the asset', battery_parameters, battery_initial_conditions, battery_marketed, battery_availabilities, price_forecast, price_buckets=None, strategy_optimization, asset_states=[], skipped_validations={'ensure_battery_marketed_respects_battery_parameters'}, battery_commercials=Empty DataFrame Columns: [] Index: [], flex_markets_energy_throughput=Empty DataFrame Columns: [] Index: [])#
Bases:
Asset- Parameters:
battery_parameters (BatteryParameters)
battery_initial_conditions (DEBatteryInitialConditions)
battery_marketed (list[DEBatteryMarketed] | DataFrame)
battery_availabilities (list[BatteryAvailability] | DataFrame)
price_forecast (list[DEPriceForecast] | DataFrame)
price_buckets (Dict[datetime, PriceBuckets] | None)
strategy_optimization (DEStrategyOptimization)
asset_states (list[AssetState] | DataFrame | None)
battery_commercials (list[DEBatteryCommercials] | DataFrame | None)
flex_markets_energy_throughput (list[FlexMarketsEnergyThroughput] | DataFrame | None)
- property all_markets#
- battery_commercials: list[DEBatteryCommercials] | DataFrame | None#
- battery_initial_conditions: DEBatteryInitialConditions#
- battery_marketed: list[DEBatteryMarketed] | DataFrame#
- property capacity_products#
- property day_ahead_products#
- property energy_products#
- flex_markets_energy_throughput: list[FlexMarketsEnergyThroughput] | DataFrame | None#
- property frequency_markets#
- 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].
- price_forecast: list[DEPriceForecast] | DataFrame#
- strategy_optimization: DEStrategyOptimization#
- class battery_optimizer.de.request.DEBatteryCommercials(*, start, min_revenue_per_intraday_sell=0.01, min_revenue_per_epexIDA1_sell=0.01, min_revenue_per_epexDA_sell=0.01)#
Bases:
BatteryCommercials- Parameters:
- 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.de.request.DEBatteryInitialConditions(*, initial_soe, initial_soe_kwh=None, perform_initial_soe_checks=False, initial_soe_low_kwh=None, initial_soe_high_kwh=None, last_timestamp_initial_soe_scenarios_considered=None)#
Bases:
BatteryInitialConditions- Parameters:
- 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.de.request.DEBatteryMarketed(*, start, bought_intraday_kw, sold_intraday_kw, sold_epexIDA1_kw=0.0, bought_epexIDA1_kw=0.0, sold_epexDA_kw=0.0, bought_epexDA_kw=0.0, fcr_kw=0.0, afrr_capacity_pos_kw=0.0, afrr_capacity_neg_kw=0.0, afrr_energy_pos_kw=0.0, afrr_energy_neg_kw=0.0)#
Bases:
BatteryMarketed- Parameters:
- 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.de.request.DEPriceForecast(*, start, intraday=None, intraday_sell=None, intraday_buy=None, epexIDA1=None, epexIDA1_sell=None, epexIDA1_buy=None, epexDA=None, epexDA_sell=None, epexDA_buy=None, fcr=None, afrr_capacity_pos=None, afrr_capacity_neg=None, afrr_energy_pos=None, afrr_energy_neg=None)#
Bases:
PriceForecast- Parameters:
start (datetime)
intraday (float | None)
intraday_sell (float | None)
intraday_buy (float | None)
epexIDA1 (float | None)
epexIDA1_sell (float | None)
epexIDA1_buy (float | None)
epexDA (float | None)
epexDA_sell (float | None)
epexDA_buy (float | None)
fcr (float | None)
afrr_capacity_pos (float | None)
afrr_capacity_neg (float | None)
afrr_energy_pos (float | None)
afrr_energy_neg (float | None)
- 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.de.request.DERequest(*, request_id, country=Country.DE, user_id, request_creation_time, elastic_filter=False, already_auctioned_as_constants=True, asset, verbose=False, epsilon=1e-06, commercial_objective=CommercialObjective(commercial_columns=['commodity_revenue', 'commodity_cost']), multiplier_buy_sell_exceed_limit=10.0, upper_bound_risk_increment=None, imbalance=Imbalance(imbalance_cost_per_MWh=1000000.0, min_imbalance_cost_per_MWh=100000.0, imbalance_cost_shaping=True), solve_optimization_problem_max_seconds=90.0, intraday_strategy=IntradayStrategy(name=<IntradayStrategyName.vwap: 'vwap'>, delivery_length=<IntradayDeliveryLength.quarter_hour: 'QuarterHour'>, tradeable_time_window_minutes=NaT), intraday_result_aggregation=IntradayResultAggregation(name=<IntradayResultAggregationName.minmax: 'minmax'>, no_buckets=1), objective=Objective(name=<ObjectiveName.pnl: 'pnl'>), solver_settings=SolverSettings(gapRel=0.01), do_input_for_intraday_bucketing_correct_bucket=True, elastic_soe_constraints=False, global_max_charging_power_kw=None, global_max_discharging_power_kw=None, feature_flags=FeatureFlags(return_pickled_optimizer=False), use_case=UseCase.BESS)#
Bases:
Request- Parameters:
request_id (str)
country (Country)
request_creation_time (datetime)
elastic_filter (bool)
already_auctioned_as_constants (bool)
asset (DEAsset)
verbose (bool)
epsilon (float)
commercial_objective (CommercialObjective)
multiplier_buy_sell_exceed_limit (Annotated[float, Ge(ge=0.0)])
upper_bound_risk_increment (float | dict | UpperBoundRiskIncrement | None)
imbalance (Imbalance)
solve_optimization_problem_max_seconds (float)
intraday_strategy (IntradayStrategy)
intraday_result_aggregation (IntradayResultAggregation)
objective (Objective)
solver_settings (SolverSettings)
do_input_for_intraday_bucketing_correct_bucket (bool)
elastic_soe_constraints (bool)
global_max_charging_power_kw (float | None)
global_max_discharging_power_kw (float | None)
feature_flags (FeatureFlags)
use_case (UseCase)
- adapt_min_max_soe_kwh_to_initial_soe_scenarios()#
- property capacity_product_variables#
- property capacity_products#
- check_if_prequalified_power_kW_is_set()#
- property energy_markets#
- ensure_flex_markets_energy_throughput_default()#
- initialize_optional_time_series_input()#
- intraday_strategy: IntradayStrategy#
- property max_soe_kwh_initial_soe_adjusted#
- property min_soe_kwh_initial_soe_adjusted#
- 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.de.request.DEStrategyOptimization(*, frequency_min, horizon, markets={}, optimization_id=None, fcr_parameters=FCRParameters(delivery_duration_sec=Timedelta('0 days 00:15:00'), delivery_duration_buffer_perc=1.3333333333333333, max_marketable_power_factor=1.25, prequalified_power_kW=None), afrr_capacity_pos_parameters=AFRRCapacityParameters(delivery_duration_buffer_perc=1.0, max_marketable_power_factor=1.0, prequalified_power_kW=None, delivery_duration_sec=Timedelta('0 days 01:00:00')), afrr_capacity_neg_parameters=AFRRCapacityParameters(delivery_duration_buffer_perc=1.0, max_marketable_power_factor=1.0, prequalified_power_kW=None, delivery_duration_sec=Timedelta('0 days 01:00:00')), afrr_energy_pos_parameters=AFRREnergyParameters(delivery_duration_buffer_perc=1.0, max_marketable_power_factor=1.0, prequalified_power_kW=None, delivery_duration_sec=Timedelta('0 days 00:15:00')), afrr_energy_neg_parameters=AFRREnergyParameters(delivery_duration_buffer_perc=1.0, max_marketable_power_factor=1.0, prequalified_power_kW=None, delivery_duration_sec=Timedelta('0 days 00:15:00')))#
Bases:
StrategyOptimization- Parameters:
horizon (OptimizationHorizon)
optimization_id (str | None)
fcr_parameters (FCRParameters | None)
afrr_capacity_pos_parameters (AFRRCapacityParameters | None)
afrr_capacity_neg_parameters (AFRRCapacityParameters | None)
afrr_energy_pos_parameters (AFRREnergyParameters | None)
afrr_energy_neg_parameters (AFRREnergyParameters | None)
- afrr_capacity_neg_parameters: AFRRCapacityParameters | None#
- afrr_capacity_pos_parameters: AFRRCapacityParameters | None#
- afrr_energy_neg_parameters: AFRREnergyParameters | None#
- afrr_energy_pos_parameters: AFRREnergyParameters | None#
- fcr_parameters: FCRParameters | None#
- 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.de.request.FCRParameters(*, delivery_duration_sec=900, delivery_duration_buffer_perc=1.3333333333333333, max_marketable_power_factor=1.25, prequalified_power_kW=None)#
Bases:
BaseModel- Parameters:
- 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.de.request.FlexMarketsEnergyThroughput(*, start, fcr_discharge_MWh_per_MW=None, fcr_charge_MWh_per_MW=None, afrr_neg_charge_MWh_per_MW=None, afrr_pos_discharge_MWh_per_MW=None)#
Bases:
BaseModel- Parameters:
- 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].