Operating Reserves

In Recap, Reserves are represented in two ways (1) as a total MW amount held across every hour (e.g. +300MW per hour) or (2) a percentage of hourly load or (3% above hourly load).

Operating Reserves Tab Layout in UI

class Reserve
Fields:
field attr_path: str | pathlib.Path | None = PosixPath('/home/docs/checkouts/readthedocs.org/user_builds/e3-resolve/checkouts/latest/docs/source')

the path to the attributes file

field category: str | None = None
field class_name: str | None = None
field custom_constraints: dict[str, CustomConstraintLinkage] = {}
Constraints:
  • units =

  • excel_short_title =

  • warning_bounds = (None, None)

  • show_year_headers = True

  • linkage_order = 3

  • default_exclude = True

field direction: ReserveDirection [Required]
field exclusive: bool = True
field include: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = True

Include component in system.

Constraints:
  • category = FieldCategory.BUILD

  • units =

  • excel_short_title =

  • warning_bounds = (None, None)

  • show_year_headers = True

  • default_exclude = False

field load_following_percentage: float | None = None
field loads: dict[str, LoadToReserve] = {}
Constraints:
  • units =

  • excel_short_title =

  • warning_bounds = (None, None)

  • show_year_headers = True

  • linkage_order = from

  • default_exclude = False

field name: str | tuple [Required]
field penalty_unserved_reserve: float = 10000

Modeled penalty for unserved operating reserves.

field requirement: NumericTimeseries [Optional]
field resources: dict[str, ResourceToReserve] = {}
Constraints:
  • units =

  • excel_short_title =

  • warning_bounds = (None, None)

  • show_year_headers = True

  • linkage_order = from

  • default_exclude = False

field zones: dict[str, ReserveToZone] = {}
Constraints:
  • units =

  • excel_short_title =

  • warning_bounds = (None, None)

  • show_year_headers = True

  • linkage_order = to

  • default_exclude = False

model_post_init(_ModelMetaclass__context: Any) β†’ None

We need to both initialize private attributes and call the user-defined model_post_init method.

revalidate()

Abstract method to run additional validations after Linkage.announce_linkage_to_instances.

SAVE_PATH: ClassVar[str] = 'reserves'