battery_optimizer.de.ev.battery_optimization#
Classes
|
- class battery_optimizer.de.ev.battery_optimization.EVDEBatteryOptimizer(*args, request_id, country=Country.DE, user_id, request_creation_time, elastic_filter=False, already_auctioned_as_constants=False, 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, provide_imbalance_cost_in_result=False), 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, perform_check_battery_marketed_is_in_correct_unit=True), use_case=UseCase.BESS, elastic_min_power_constraints_kw=None)#
Bases:
EVDERequest,DEBatteryOptimizer- Parameters:
request_id (str)
country (Country)
request_creation_time (datetime)
elastic_filter (bool)
already_auctioned_as_constants (bool)
asset (EVDEAsset)
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)
elastic_min_power_constraints_kw (Annotated[float | None, Ge(ge=0.0)])
- add_use_case_specific_constraints()#
Add use case specific constraints to the dataframe.
- Args:
df (pd.DataFrame): DataFrame containing the optimization data.
- Returns:
pd.DataFrame: DataFrame with added use case specific constraints.
- Parameters:
problem (LpProblem)
variables (DataFrame)
- Parameters:
problem (LpProblem)
variables (DataFrame)
- create_minimum_charging_power_constraints(problem, variables, conflict_timestamps=None)#
- Parameters:
problem (LpProblem)
variables (DataFrame)
conflict_timestamps (set | None)
- create_minimum_discharging_power_constraints(problem, variables, conflict_timestamps=None)#
- Parameters:
problem (LpProblem)
variables (DataFrame)
conflict_timestamps (set | None)
- get_objective_pnl(variables, problem_solved=False, markets=None)#
Computes the objective function for the optimization problem. The objective function is the sum of the commodity revenue from energy products delivery to the grid, minus the commodity cost for charging from the grid, and the penalty for imbalance.
- Parameters:
variables (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].