reserve_group#

Represents a group of generators, pumps, and batteries that collectively serve to fulfill a reserve capacity obligation. SHOP distinguishes between eight different types of reserve capacity products: FCR-N, FCR-D, FRR, and RR in both upward and downward directions.

Input connections

generator, pump, market, battery

Output connections

generator, pump, battery, market

License

SHOP_RESERVE_GROUP

Release version

13.0.0.a

Introduction#

The reserve_group object is used to optimally distribute reserve capacity among all generators, pumps, and batteries that are connected to the reserve_group. The reserve capacity tutorial describes how different types of reserve capacity is modelled in SHOP. The reserve_group is used for mainly two purposes: to specify a fixed reserve capacity obligation to be optimally distributed, and to connect units to a reserve market where reserve capacity can be traded.

Distributing a reserve obligation#

The simplest use for a reserve_group is for optimal distribution of a reserve obligation among a set of eligible generators, pumps, and batteries. The reserve obligation is specified on the reserve_group, and is specific to a type of reserve capacity such as the fcr_n_up_obligation. Several different types of reserve capacity obligations can be specified on the same reserve_group, but it is recommended to create separate reserve_groups for different reserve types. The units that are connected to the reserve_group will be able to deliver reserve capacity of the types that are specified in the obligation(s), and the sum of the reserve capacity allocated on the different units must meet the obligation to avoid taking a penalty. The reserve allocation example shows how several generators cooperate to cover the reserve obligations specified in the reserve_groups.

Reserve capacity markets#

It is possible to create a reserve capacity market by connecting a reserve_group to a market object and setting the market_type of the market to be a reserve type, such as FRR_UP. The units connected to the reserve_group can now participate in the reserve market by selling reserve capacity to earn the sale_price, as long as the market depth max_sale is set larger than zero. Note that reserve capacity also can be bought in the market if max_buy is larger than zero. Any reserve obligation on the reserve_group will be handled as a load in the market, which means that the obligation must be covered before additional capacity can be sold.

Examples#

References#

  • Opportunity-cost-pricing of reserves for a simple hydropower system [14]

  • Operational hydropower scheduling with post-spot distribution of reserve obligations [15]

  • Accounting for reserve capacity activation when scheduling a hydropower dominated system [16]

  • Operational use of marginal cost curves for hydropower plants as decision support in real-time balancing markets [17]

  • Coordinated hydropower bidding in the day-ahead and balancing market [18]

  • Hydropower bidding in a multi-market setting [19]

  • The value of coordinated hydropower bidding in the Nordic day-ahead and balancing market [20]

Attributes#

fcr_n_up_obligation#

The obligation of FCR_N_UP that should be fulfilled by the reserve group (xUnit: NO_UNIT, yUnit: MW)

fcr_n_down_obligation#

The obligation of FCR_N_DOWN that should be fulfilled by the reserve group (xUnit: NO_UNIT, yUnit: MW)

fcr_d_up_obligation#

The obligation of FCR_D_UP that should be fulfilled by the reserve group (xUnit: NO_UNIT, yUnit: MW)

fcr_d_down_obligation#

The obligation of FCR_D_DOWN that should be fulfilled by the reserve group (xUnit: NO_UNIT, yUnit: MW)

frr_up_obligation#

The obligation of FRR_UP that should be fulfilled by the reserve group (xUnit: NO_UNIT, yUnit: MW)

frr_down_obligation#

The obligation of FRR_DOWN that should be fulfilled by the reserve group (xUnit: NO_UNIT, yUnit: MW)

rr_up_obligation#

The obligation of RR_UP that should be fulfilled by the reserve group (xUnit: NO_UNIT, yUnit: MW)

rr_down_obligation#

The obligation of RR_DOWN that should be fulfilled by the reserve group (xUnit: NO_UNIT, yUnit: MW)

fcr_n_penalty_cost#

Given penalty cost for deviating below the FCR_N_UP or FCR_N_DOWN obligation for the reserve group (xUnit: NO_UNIT, yUnit: NOK/MW)

fcr_d_penalty_cost#

Given penalty cost for deviating below the FCR_D_UP obligation for the reserve group (xUnit: NO_UNIT, yUnit: NOK/MW)

frr_penalty_cost#

Given penalty cost for deviating below the FRR_UP or FRR_DOWN obligation for the reserve group (xUnit: NO_UNIT, yUnit: NOK/MW)

rr_penalty_cost#

Given penalty cost for deviating below the RR_UP or RR_DOWN obligation for the reserve group (xUnit: NO_UNIT, yUnit: NOK/MW)

fcr_n_up_slack#

Resulting slack when deviating above the FCR_N_UP obligation (xUnit: NO_UNIT, yUnit: MW)

fcr_n_down_slack#

Resulting slack when deviating above the FCR_N_DOWN obligation (xUnit: NO_UNIT, yUnit: MW)

fcr_d_up_slack#

Resulting slack when deviating above the FCR_D_UP obligation (xUnit: NO_UNIT, yUnit: MW)

fcr_d_down_slack#

Resulting slack when deviating above the FCR_D_DOWN obligation (xUnit: NO_UNIT, yUnit: MW)

frr_up_slack#

Resulting slack when deviating above the FRR_UP obligation (xUnit: NO_UNIT, yUnit: MW)

frr_down_slack#

Resulting slack when deviating above the FRR_DOWN obligation (xUnit: NO_UNIT, yUnit: MW)

rr_up_slack#

Resulting slack when deviating above the RR_UP obligation (xUnit: NO_UNIT, yUnit: MW)

rr_down_slack#

Resulting slack when deviating above the RR_DOWN obligation (xUnit: NO_UNIT, yUnit: MW)

fcr_n_up_violation#

Resulting penalty when deviating below the FCR_N_UP obligation (xUnit: NO_UNIT, yUnit: MW)

fcr_n_down_violation#

Resulting penalty when deviating below the FCR_N_DOWN obligation (xUnit: NO_UNIT, yUnit: MW)

fcr_d_up_violation#

Resulting penalty when deviating below the FCR_D_UP obligation (xUnit: NO_UNIT, yUnit: MW)

fcr_d_down_violation#

Resulting penalty when deviating below the FCR_D_DOWN obligation (xUnit: NO_UNIT, yUnit: MW)

frr_up_violation#

Resulting penalty when deviating below the FRR_UP obligation (xUnit: NO_UNIT, yUnit: MW)

frr_down_violation#

Resulting penalty when deviating below the FRR_DOWN obligation (xUnit: NO_UNIT, yUnit: MW)

rr_up_violation#

Resulting penalty when deviating below the RR_UP obligation (xUnit: NO_UNIT, yUnit: MW)

rr_down_violation#

Resulting penalty when deviating belown the RR_DOWN obligation (xUnit: NO_UNIT, yUnit: MW)