Internal API

HybridSystemsSimulations._hybrid_profile_parameter_sliceMethod
_hybrid_profile_parameter_slice(
    container::PowerSimulations.OptimizationContainer,
    device::PowerSystems.HybridSystem,
    ts_name::String,
    start_time::Dates.DateTime;
    feat_kw
) -> Any

Read injection profile points (RenewableDispatch__max_active_power, PowerLoad__max_active_power) from the wrapped SingleTimeSeries stored on the hybrid, slicing length(time_steps) contiguous values from start_time. This avoids DeterministicSingleTimeSeries forecast windows that may only span a short sub-interval of the underlying data.

source
HybridSystemsSimulations._merchant_hybrid_price_parameter_keyMethod
_merchant_hybrid_price_parameter_key(
    container::PowerSimulations.OptimizationContainer,
    parameter_array,
    _::Type{P<:Union{DayAheadEnergyPrice, RealTimeEnergyPrice}}
) -> Union{Nothing, InfrastructureSystems.Optimization.ParameterKey}

During Simulation execution, PSI calls _update_parameter_values!(..., ::ObjectiveFunctionParameter, ...) from update_cost_parameters.jl, which uses handle_variable_cost_parameter with PSY.get_operation_cost(component). Merchant hybrids use MarketBidCost(nothing); energy prices are read from hybrid-attached scalar "HybridSystem__energy_price" time series (keyed DA/RT) instead. This hooks the generic simulation update path into the same hybrid scalar forecast logic as update_parameter_values!(..., ::InMemoryDataset).

source
HybridSystemsSimulations.hybrid_ancillary_service_price_time_series_nameFunction
hybrid_ancillary_service_price_time_series_name(
    service_name::AbstractString
) -> Any
hybrid_ancillary_service_price_time_series_name(
    service_name::AbstractString,
    key::AbstractString
) -> Any

Scalar ancillary price time series name; include the key in the name so DA/RT copies stay distinct after transform_single_time_series! (metadata features are not preserved on the Deterministic record in InfrastructureSystems).

source
HybridSystemsSimulations.merchant_da_time_step_rangeMethod
merchant_da_time_step_range(
    container::PowerSimulations.OptimizationContainer,
    hybrid::PowerSystems.HybridSystem
) -> UnitRange{Int64}

Day-ahead energy price indices 1:n_DA aligned with hourly DA slots and attached DA metadata.

source
PowerSimulations.update_decision_state!Method
update_decision_state!(
    state::PowerSimulations.SimulationState,
    key::InfrastructureSystems.Optimization.ParameterKey{T<:Union{DayAheadEnergyPrice, RealTimeEnergyPrice}, PowerSystems.HybridSystem},
    store_data::JuMP.Containers.DenseAxisArray{Float64, 2, Ax, L} where {Ax, L<:Tuple{JuMP.Containers._AxisLookup, JuMP.Containers._AxisLookup}},
    simulation_time::Dates.DateTime,
    model_params::PowerSimulations.ModelStoreParams
)

Clamp decision-state writes for merchant hybrid price parameters when store horizon extends beyond the state buffer length during rolling simulation updates.

source