One Cycle Battery Dispatch Heuristic

Contents

One Cycle Battery Dispatch Heuristic#

class hopp.simulation.technologies.dispatch.power_storage.one_cycle_battery_dispatch_heuristic.OneCycleBatteryDispatchHeuristic(pyomo_model, index_set, system_model, financial_model, block_set_name='one_cycle_heuristic_battery', dispatch_options=None)#

Bases: SimpleBatteryDispatchHeuristic

One cycle per day heuristic battery dispatch.

Parameters:
  • pyomo_model (ConcreteModel)

  • index_set (Set)

  • system_model (BatteryStateful)

  • financial_model (Singleowner)

  • block_set_name (str)

  • dispatch_options (dict)

__init__(pyomo_model, index_set, system_model, financial_model, block_set_name='one_cycle_heuristic_battery', dispatch_options=None)#

Initialize OneCycleBatteryDispatchHeuristic.

Parameters:
  • pyomo_model (pyomo.ConcreteModel) – Pyomo concrete model.

  • index_set (pyomo.Set) – Indexed set.

  • system_model (PySAMBatteryModel.BatteryStateful) – Battery system model.

  • financial_model (Singleowner.Singleowner) – Financial model.

  • block_set_name (str, optional) – Name of the block set. Defaults to ‘one_cycle_heuristic_battery’.

  • dispatch_options (dict, optional) – Dispatch options. Defaults to None.

_heuristic_method(gen)#

Sets battery dispatch using a one cycle per day assumption.

Method:
  • Sort input prices

  • Determine the duration required to fully discharge and charge the battery

  • Set discharge and charge operations based on sorted prices

  • Check SOC feasibility

  • If infeasible, find infeasibility, shift operation to the next sorted price periods

  • Repeat step 4 until SOC feasible

NOTE: If operation is tried on half of time periods, then operation defaults to ‘do nothing’

_discharge_battery(discharge_remaining, next_discharge_idx, sorted_prices, fixed_dispatch)#

Discharges battery using the remaining discharge and the next best discharge period.

Returns:

Tuple[list, int] – Adjusted fixed dispatch and next discharge index to be tried.

_charge_battery(charge_remaining, next_charge_idx, sorted_prices, fixed_dispatch)#

Charges battery using the remaining charge and the next best charge period.

Returns:

Tuple[list, int] – Adjusted fixed dispatch and next charge index to be tried.

_get_duration_battery_full_cycle()#

Calculates discharge and charge hours required to fully cycle the battery.

Returns:

Tuple[float, float] – Discharge and charge hours.

Return type:

Tuple[float, float]

test_soc_feasibility(fixed_dispatch)#

Steps through fixed_dispatch and tests SOC feasibility.

Returns:

Tuple[bool, int] – Tuple indicating SOC feasibility and index of first infeasible operation.

Return type:

Tuple[bool, int]

static _check_efficiency_value(efficiency)#

Checks efficiency is between 0 and 1 or 0 and 100. Returns fractional value

_check_initial_soc(initial_soc)#

Checks initial state-of-charge.

Parameters:

initial_soc – Initial state-of-charge value.

Returns:

float – Checked initial state-of-charge.

_create_capacity_parameter(storage)#

Creates storage capacity parameter.

Parameters:

storage – Storage instance.

_create_efficiency_parameters(storage)#

Creates storage efficiency parameters.

Parameters:

storage – Storage instance.

_create_lifecycle_count_constraint()#

Creates lifecycle count constraint.

_create_lifecycle_model()#

Creates lifecycle model.

_create_port(hybrid)#

Creates storage port.

Parameters:

hybrid – Hybrid instance.

Returns:

Port – Storage port.

_create_soc_inventory_constraint(storage)#

Creates state-of-charge inventory constraint for storage.

Parameters:

storage – Storage instance.

_create_soc_linking_constraint()#

Creates state-of-charge linking constraint.

_create_storage_constraints(storage)#
_create_storage_parameters(storage)#

Creates storage parameters.

Parameters:

storage – Storage instance.

static _create_storage_port(storage)#

Creates storage port.

Parameters:

storage – Storage instance.

_create_storage_variables(storage)#

Creates storage variables.

Parameters:

storage – Storage instance.

_create_variables(hybrid)#

Creates storage variables.

Parameters:

hybrid – Hybrid instance.

Returns:

Tuple – Tuple containing battery discharge and charge variables.

_enforce_power_fraction_limits()#

Enforces battery power fraction limits and sets _fixed_dispatch attribute.

_fix_dispatch_model_variables()#

Fixes dispatch model variables based on the fixed dispatch values.

_lifecycle_count_rule(m, i)#

Calculates lifecycle count rule.

Parameters:
  • m – Model instance.

  • i – Index.

Returns:

float – Lifecycle count.

_set_control_mode()#

Sets control mode.

_set_model_specific_parameters(round_trip_efficiency=88.0)#

Sets model-specific parameters.

Parameters:

round_trip_efficiency (float, optional) – The round-trip efficiency including converter efficiency. Defaults to 88.0, which includes converter efficiency.

_set_power_fraction_limits(gen, grid_limit)#

Set battery charge and discharge power fraction limits based on available generation and grid capacity, respectively.

Parameters:
  • gen (list) – Generation blocks.

  • grid_limit (list) – Grid capacity.

NOTE: This method assumes that battery cannot be charged by the grid.

property blocks: Block#
property capacity: float#

Capacity.

property charge_efficiency: float#

Charge efficiency.

property charge_power: list#

Charge power.

check_gen_grid_limit(gen, grid_limit)#

Checks if generation and grid limit lengths match fixed_dispatch length.

Parameters:
  • gen (list) – Generation blocks.

  • grid_limit (list) – Grid capacity.

Raises:

ValueError – If gen or grid_limit length does not match fixed_dispatch length.

property cost_per_charge: float#

Cost per charge.

property cost_per_discharge: float#

Cost per discharge.

property current: list#

Current.

property discharge_efficiency: float#

Discharge efficiency.

property discharge_power: list#

Discharge power.

dispatch_block_rule(storage)#
Initializes storage parameters, variables, and constraints.

Called during Dispatch’s __init__.

Parameters:

storage – Storage instance.

static enforce_power_fraction_simple_bounds(power_fraction)#

Enforces simple bounds (0, .9) for battery power fractions.

Parameters:

power_fraction (float) – Power fraction from heuristic method.

Returns:

power_fraction (float) – Bounded power fraction.

Return type:

float

property fixed_dispatch: list#

List of fixed dispatch.

Type:

list

property generation: list#

Generation.

property initial_soc: float#

Initial state-of-charge.

initialize_parameters()#

Initializes parameters.

property is_charging: list#

Storage is charging.

property is_discharging: list#

Storage is discharging.

property lifecycle_cost: float#

Lifecycle cost.

property lifecycle_cost_per_kWh_cycle: float#

Lifecycle cost per kWh cycle.

property lifecycles: float#

Lifecycles.

max_gross_profit_objective(hybrid_blocks)#

Sets the max gross profit objective for the dispatch.

Parameters:

hybrid_blocks (Pyomo.block) – A generalized container for defining hierarchical models by adding modeling components as attributes.

property maximum_power: float#

Maximum power.

property maximum_soc: float#

Maximum state-of-charge.

min_operating_cost_objective(hybrid_blocks)#

Sets the min operating cost objective for the dispatch.

Parameters:

hybrid_blocks (Pyomo.block) – A generalized container for defining hierarchical models by adding modeling components as attributes.

property minimum_power: float#

Minimum power.

property minimum_soc: float#

Minimum state-of-charge.

property model: ConcreteModel#
property power: list#

Power.

property round_trip_efficiency: float#

Round trip efficiency.

set_fixed_dispatch(gen, grid_limit)#

Sets charge and discharge power of battery dispatch using fixed_dispatch attribute and enforces available generation and grid limits.

Parameters:
  • gen (list) – Generation blocks.

  • grid_limit (list) – Grid capacity.

Raises:

ValueError – If gen or grid_limit length does not match fixed_dispatch length.

property soc: list#

State-of-charge.

property time_duration: list#

Time duration.

update_dispatch_initial_soc(initial_soc=None)#

Updates dispatch initial state of charge (SOC).

Parameters:

initial_soc (float, optional) – Initial state of charge. Defaults to None.

update_soc(power_fraction, soc0)#

Updates SOC based on power fraction threshold (0.1).

Parameters:
  • power_fraction (float) – Power fraction from heuristic method. Below threshold is charging, above is discharging.

  • soc0 (float) – Initial SOC.

Returns:

soc (float) – Updated SOC.

Return type:

float

update_time_series_parameters(start_time)#

Updates time series parameters.

Parameters:

start_time (int) – The start time.

property user_fixed_dispatch: list#

List of user fixed dispatch.

Type:

list

property prices: list#

List of normalized prices [-1, 1] (Charging (-), Discharging (+)).

Returns:

list – Prices.