battery_optimizer.uk.ev.request#
Classes
|
|
|
|
|
|
|
|
|
- class battery_optimizer.uk.ev.request.EVBatteryAvailability(*, start, availability, discharge_availability=0)#
Bases:
BatteryAvailability- discharge_availability: Annotated[bool, FieldInfo(annotation=NoneType, required=True, description='Set to 1 if discharging is available, 0 if not available during this period.')]#
- 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.ev.request.EVBatteryParameters(*, min_soe, max_soe, min_soe_kwh=None, max_soe_kwh=None, charging_efficiency, discharging_efficiency, max_charging_power_kw, max_discharging_power_kw, capacity_kwh, capacity_nominal_kwh=None, max_daily_cycle, daily_cycle_limit_applies=True, daily_cycle_limit_penalty=False, grid_connection_export_kw, grid_connection_import_kw, ramp_rates=UKRampRates(type=<RampingLogicName.dc_only: 'dc_only'>, charging_perf_related_kw_per_second=None, discharging_perf_related_kw_per_second=None, charging_tech_limited_kw_per_second=None, discharging_tech_limited_kw_per_second=None), power_swing_limit, min_charging_power_kw=0.0)#
Bases:
UKBatteryParameters- Parameters:
min_soe (Annotated[float, FieldInfo(annotation=NoneType, required=True, metadata=[Ge(ge=0.0), Le(le=1.0)])] | list[MinSoE] | Series)
max_soe (Annotated[float, FieldInfo(annotation=NoneType, required=True, metadata=[Ge(ge=0.0), Le(le=1.0)])] | list[MaxSoE] | Series)
min_soe_kwh (Annotated[float, FieldInfo(annotation=NoneType, required=True, metadata=[Ge(ge=0.0)])] | list[MinAbsoluteSoE] | Series | None)
max_soe_kwh (Annotated[float, FieldInfo(annotation=NoneType, required=True, metadata=[Ge(ge=0.0)])] | list[MaxAbsoluteSoE] | Series | None)
charging_efficiency (float)
discharging_efficiency (float)
max_charging_power_kw (Annotated[float, FieldInfo(annotation=NoneType, required=True, metadata=[Ge(ge=0.0)])] | list[MaxChargingPowerKW] | Series)
max_discharging_power_kw (Annotated[float, FieldInfo(annotation=NoneType, required=True, metadata=[Ge(ge=0.0)])] | list[MaxDischargingPowerKW] | Series)
capacity_kwh (Annotated[float, FieldInfo(annotation=NoneType, required=True, metadata=[Ge(ge=0.0)])] | list[CapacityKWh] | Series)
max_daily_cycle (Annotated[float, FieldInfo(annotation=NoneType, required=True, metadata=[Ge(ge=0.0)])] | list[MaxDailyCycle] | Series)
daily_cycle_limit_applies (bool | None)
daily_cycle_limit_penalty (bool)
ramp_rates (UKRampRates)
power_swing_limit (PowerSwingLimit)
min_charging_power_kw (Annotated[float, FieldInfo(annotation=NoneType, required=True, metadata=[Ge(ge=0.0)])] | list[MinChargingPowerKW] | Series)
- ensure_capacity_nominal_is_passed_when_capacity_passed_as_schedule()#
- min_charging_power_kw: Annotated[float, FieldInfo(annotation=NoneType, required=True, metadata=[Ge(ge=0.0)])] | list[MinChargingPowerKW] | Series#
- 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].
- classmethod validate_min_charging_power_kw(value)#
Ensure min_charging_power_kw is either a float, a list of MinChargingPowerKW, or a pd.Series. Convert lists to pd.Series for internal consistency.
- class battery_optimizer.uk.ev.request.EVUKAsset(*, 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, PV_forecast, dynamic_services_energy_throughput=Empty DataFrame Columns: [] Index: [], allow_pv_to_battery=False)#
Bases:
UKAsset- Parameters:
battery_parameters (EVBatteryParameters)
battery_initial_conditions (UKBatteryInitialConditions)
battery_marketed (list[UKBatteryMarketed] | DataFrame)
battery_availabilities (list[EVBatteryAvailability] | DataFrame)
price_forecast (list[UKPriceForecast] | DataFrame)
price_buckets (Dict[datetime, PriceBuckets] | None)
strategy_optimization (UKStrategyOptimization)
asset_states (list[AssetState] | DataFrame | None)
battery_commercials (list[UKBatteryCommercials] | DataFrame)
PV_forecast (list[PVForecast] | DataFrame)
dynamic_services_energy_throughput (list[DSEnergyThroughput] | DataFrame)
allow_pv_to_battery (bool)
- battery_availabilities: list[EVBatteryAvailability] | DataFrame#
- battery_parameters: EVBatteryParameters#
- 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.ev.request.EVUKRequest(*, request_id, country=Country.UK, user_id, request_creation_time, elastic_filter=False, already_auctioned_as_constants=True, asset, verbose=False, epsilon=1e-06, commercial_objective=UKCommercialObjective(commercial_columns=['revenue_PV', 'dc_high_revenue', 'dc_low_revenue', 'commodity_revenue', 'third_party_revenue', 'third_party_cost', '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.half_hour: 'HalfHour'>, tradeable_time_window_minutes=NaT), intraday_result_aggregation=IntradayResultAggregation(name=<IntradayResultAggregationName.minmax: 'minmax'>, no_buckets=1), objective=UKObjective(name=<ObjectiveName.pnl: 'pnl'>, frozen_window_plus_buffer=Timedelta('0 days 01:30:00'), melmil_optimization_horizon=Timedelta('0 days 01:00:00')), 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=UKFeatureFlags(return_pickled_optimizer=False, da_ds_rounding_method='da_rerun'), use_case=UseCase.BESS, iterative_commodity_and_ds=True, keep_n2ex_constant_hourly=True, default_penalty_for_discharge_during_dc=1000000.0, apply_penalty_for_discharge_during_dc=False, balancing_mechanism=BalancingMechanism(activation_time_minutes=Timedelta('0 days 00:32:00'), activation_ratio=1.0))#
Bases:
UKRequest- Parameters:
request_id (str)
country (Country)
request_creation_time (datetime)
elastic_filter (bool)
already_auctioned_as_constants (bool)
asset (EVUKAsset)
verbose (bool)
epsilon (float)
commercial_objective (UKCommercialObjective)
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 (UKObjective)
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 (UKFeatureFlags)
use_case (UseCase)
iterative_commodity_and_ds (bool)
keep_n2ex_constant_hourly (bool)
default_penalty_for_discharge_during_dc (float)
apply_penalty_for_discharge_during_dc (bool)
balancing_mechanism (BalancingMechanism | 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.uk.ev.request.MinChargingPowerKW(*, start, min_charging_power_kw)#
Bases:
BaseModel- min_charging_power_kw: Annotated[float, FieldInfo(annotation=NoneType, required=True, metadata=[Ge(ge=0.0)])]#
- model_config: ClassVar[ConfigDict] = {}#
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].