h2integrate.control.control_strategies.converters.flexible_demand_openloop_controller#
Classes
Open-loop controller for flexible demand with ramping and utilization constraints. |
|
Configuration for defining a flexible demand open-loop controller. |
- class h2integrate.control.control_strategies.converters.flexible_demand_openloop_controller.FlexibleDemandOpenLoopConverterControllerConfig(*, commodity_units, commodity_name, demand_profile, rated_demand, turndown_ratio, ramp_down_rate_fraction, ramp_up_rate_fraction, min_utilization)#
Configuration for defining a flexible demand open-loop controller.
Extends
DemandOpenLoopControlBaseConfigwith additional parameters required for dynamically adjusting demand based on turndown, ramping, and minimum utilization constraints. These parameters are expressed as fractions ofmaximum_demandand must lie within(0, 1).- Parameters:
commodity_units (str)
commodity_name (str)
demand_profile (int | float | list)
rated_demand (float)
turndown_ratio (float)
ramp_down_rate_fraction (float)
ramp_up_rate_fraction (float)
min_utilization (float)
- rated_demand#
maximum demand in the same units as commodity_units, used to convert the constraint parameters from fractions to units of commodity_units.
- Type:
float
- turndown_ratio#
Minimum allowable operating demand expressed as a fraction of the maximum demand. Must be in the range
(0, 1).- Type:
float
- ramp_down_rate_fraction#
Maximum allowable ramp-down rate per timestep, expressed as a fraction of maximum demand. Must be in
(0, 1).- Type:
float
- ramp_up_rate_fraction#
Maximum allowable ramp-up rate per timestep, expressed as a fraction of maximum demand. Must be in
(0, 1).- Type:
float
- min_utilization#
Minimum total fraction of demand that must be met over the entire simulation. Must be in
(0, 1). Utilization is defined as:sum({commodity}_flexible_demand_profile)/sum({commodity}_demand)- Type:
float
- rated_demand: float#
- turndown_ratio: float#
- ramp_down_rate_fraction: float#
- ramp_up_rate_fraction: float#
- min_utilization: float#
- class h2integrate.control.control_strategies.converters.flexible_demand_openloop_controller.FlexibleDemandOpenLoopConverterController(**kwargs)#
Open-loop controller for flexible demand with ramping and utilization constraints.
This controller extends the base demand controller by allowing the effective demand to vary dynamically based on turndown constraints, ramp-rate limits, and minimum-utilization requirements. A flexible demand profile is generated and used to compute unmet demand, unused commodity, and delivered output.
- setup()#
Set up component inputs and outputs for flexible demand control.
Adds inputs for turndown ratio, ramp up/down rates, and minimum utilization, all expressed as fractions of maximum demand. Adds the flexible demand output profile, which will be populated in
compute.
- adjust_demand_for_ramping(pre_demand_met_clipped, demand_bounds, ramp_rate_bounds)#
Apply ramp-rate limits to a demand profile.
Enforces maximum up-ramp and down-ramp rates across timesteps to ensure that the demand does not change faster than allowed.
- Parameters:
pre_demand_met_clipped (np.ndarray) -- Demand profile after applying minimum and maximum demand limits.
demand_bounds (tuple[float, float]) --
(min_demand, rated_demand)bounds.ramp_rate_bounds (tuple[float, float]) --
(ramp_down_rate, ramp_up_rate)in commodity units per timestep.
- Returns:
np.ndarray -- Ramped and bounded demand profile.
- adjust_remaining_demand_for_min_utilization_by_threshold(flexible_demand_profile, min_total_demand, demand_bounds, demand_threshold)#
Increase demand in periods of low <commodity>_in to meet minimum utilization.
Adds additional demand to timesteps whose flexible demand is at or below a selected threshold, distributing the required adjustment evenly.
- Parameters:
flexible_demand_profile (np.ndarray) -- Current flexible demand profile.
min_total_demand (float) -- Required minimum total integrated demand.
demand_bounds (tuple[float, float]) --
(min_demand, rated_demand)limits.demand_threshold (float) -- Threshold below which demand should be increased.
- Returns:
np.ndarray -- Demand profile after applying minimum utilization adjustments.
- make_flexible_demand(maximum_demand_profile, pre_demand_met, inputs)#
Generate a flexible demand profile satisfying all constraints.
Applies constraints in the following order: 1. Turndown ratio 2. Ramp-rate limits 3. Minimum-utilization requirement (iteratively increased)
- Parameters:
maximum_demand_profile (np.ndarray) -- Maximum allowable demand at each timestep.
pre_demand_met (np.ndarray) -- Initial demand that can be met with the available input.
inputs (dict) -- Input values containing ramp rates, turndown ratio, and minimum utilization as fractions of maximum demand.
- Returns:
np.ndarray -- Final flexible demand profile that satisfies all operational constraints.
- compute(inputs, outputs)#
Compute unmet demand, unused commodity, and output under flexible demand.
If
min_utilization == 1.0, the behavior matches the regular open-loop controller with no flexible demand adjustments.- Otherwise:
Construct a flexible demand profile.
Use it to compute unmet demand and unused commodity.
Output is supply minus unused commodity.
- Parameters:
inputs (dict-like) -- Mapping of model inputs, including
{commodity}_demand,{commodity}_in, and flexible-demand parameters.outputs (dict-like) -- Mapping where computed outputs are written.