new_modeling_toolkit.system package
Subpackages
- new_modeling_toolkit.system.agriculture package
- new_modeling_toolkit.system.buildings package
- new_modeling_toolkit.system.electric package
- Subpackages
- new_modeling_toolkit.system.electric.resources package
- Submodules
- new_modeling_toolkit.system.electric.resources.flex_load module
- new_modeling_toolkit.system.electric.resources.generic module
- new_modeling_toolkit.system.electric.resources.hybrid module
- new_modeling_toolkit.system.electric.resources.hydro module
- new_modeling_toolkit.system.electric.resources.shed_dr module
- new_modeling_toolkit.system.electric.resources.storage module
- new_modeling_toolkit.system.electric.resources.thermal module
- new_modeling_toolkit.system.electric.resources.unit_commitment module
- new_modeling_toolkit.system.electric.resources.variable module
- Module contents
- new_modeling_toolkit.system.electric.resources package
- Submodules
- new_modeling_toolkit.system.electric.elcc module
- new_modeling_toolkit.system.electric.load_component module
Load
annual_energy_forecast
annual_energy_policies
annual_peak_forecast
attr_path
class_name
devices
emissions_policies
energy_demand_subsectors
erm_policies
hourly_energy_policies
include
model_year_profiles
name
prm_policies
profile
profile_model_years
reserves
scale_by_capacity
scale_by_energy
td_losses_adjustment
zones
forecast_load()
get_load()
normalize_profile()
resample_ts_attributes()
revalidate()
scale_load()
update_load_components()
SAVE_PATH
annual_results_column_order
policies
timeseries_attrs
zone_names_string
- new_modeling_toolkit.system.electric.reserve module
- new_modeling_toolkit.system.electric.resource_group module
ResourceGroup
attr_path
category
class_name
fixed_annual_shape
flexible_resources
hybrid_variable_resources
hydro_resources
include
name
random_seed
resources
shed_dr_resources
storage_resources
thermal_resources
variable_resources
draw_days_by_group()
get_aggregated_generation_profile()
get_start_and_end_date()
SAVE_PATH
resource_dict
ResourceGroupCategory
- new_modeling_toolkit.system.electric.tx_path module
TxPath
annual_energy_policies
annualized_capital_cost
annualized_fixed_om_cost
asset_groups
attr_path
build_year
caiso_tx_constraints
can_build_new
can_retire
class_name
cumulative_retired_capacity
custom_constraints
elcc_surfaces
emissions_policies
erm_policies
forward_rating_profile
hourly_energy_policies
hurdle_rate_forward_direction
hurdle_rate_reverse_direction
include
integer_build_increment
mean_time_to_repair
min_operational_capacity
name
operational_capacity
physical_lifetime
planned_capacity
pollutants
potential
prm_policies
random_seed
retired_capacity
reverse_rating_profile
selected_capacity
stochastic_outage_rate
vintage_parent_group
zones
revalidate()
SAVE_PATH
annual_results_column_order
from_zone
to_zone
TxPathGroup
- new_modeling_toolkit.system.electric.zone module
Zone
annual_energy_policies
assets
attr_path
biomass_resources
class_name
consuming_fuel_production_plants
consuming_fuel_storage_plants
consuming_generic_demands
consuming_generic_plants
electrofuel_resources
emissions_policies
energy_demand_subsectors
erm_policies
final_fuel_demands
flexible_resources
hourly_energy_policies
hydro_resources
include
loads
name
non_energy_subsectors
penalty_overgen
penalty_unserved_energy
prm_policies
producing_fuel_production_plants
producing_fuel_storage_plants
producing_generic_demands
producing_generic_plants
products
reserves
resources
shed_dr_resources
stock_rollover_subsectors
storage_resources
thermal_resources
transportations
tx_paths
variable_resources
get_aggregated_load()
get_aggregated_load_profile()
SAVE_PATH
annual_results_column_order
consuming_demands
consuming_plants
electricity_products
load_instances
non_electricity_products
policies
producing_demands
producing_plants
resource_instances
sequestering_plants
transportation_instances_from_zone
transportation_instances_to_zone
tx_path_instances_from_zone
tx_path_instances_to_zone
- Module contents
- Subpackages
- new_modeling_toolkit.system.fuel package
- Submodules
- new_modeling_toolkit.system.fuel.candidate_fuel module
CandidateFuel
from_csv()
annual_energy_policies
annual_price
attr_path
availability
charging_processes
class_name
commodity
demands
electrolyzers
emission_types
emissions_policies
final_fuels
fuel_production_plants
fuel_storages
fuel_transportations
fuel_zones
include
monthly_price_multiplier
name
pollutants
price_per_unit
processes
product_blends
resources
sector_candidate_fuel_blending
transportations
unit
zones
calc_energy_demand()
calc_fuel_cost()
candidate_fuel_blend()
revalidate()
SAVE_PATH
final_fuel_name
fuel_is_commodity_bool
fuel_price_per_mmbtu
pollutant_list
thermal_resource_instances
- new_modeling_toolkit.system.fuel.final_fuel module
FinalFuel
annual_demand
attr_path
candidate_fuels
ccs_plants
class_name
demand
devices
energy_demand_subsector_to_final_fuel_to_ccs_plant
energy_demand_subsectors
fuel_is_electricity
fuel_is_using_emissions_trajectory_override
fuel_price_per_mmbtu_override
fuel_switchings
fuel_zones
include
name
negative_emissions_technologies
policies
sector_candidate_fuel_blending
calc_energy_demand_cost_and_emissions()
SAVE_PATH
candidate_fuels_list
- Module contents
- new_modeling_toolkit.system.industry package
- new_modeling_toolkit.system.transportation package
Submodules
new_modeling_toolkit.system.asset module
- class Asset
Bases:
Component
An Asset is anything with a cost & quantity.
- Fields:
annualized_fixed_om_cost (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries)
asset_groups (dict[str, new_modeling_toolkit.core.linkage.AssetToAssetGroup])
caiso_tx_constraints (dict[str, new_modeling_toolkit.core.linkage.AssetToCaisoTxConstraint])
cumulative_retired_capacity (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries | None)
custom_constraints (dict[str, new_modeling_toolkit.core.three_way_linkage.CustomConstraintLinkage])
elcc_surfaces (dict[str, new_modeling_toolkit.core.linkage.AssetToELCC])
emissions_policies (dict[str, new_modeling_toolkit.core.linkage.EmissionsContribution])
erm_policies (dict[str, new_modeling_toolkit.core.linkage.ERMContribution])
min_operational_capacity (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries | None)
operational_capacity (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries | None)
planned_capacity (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries)
prm_policies (dict[str, new_modeling_toolkit.core.linkage.ReliabilityContribution])
retired_capacity (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries | None)
zones (dict[str, new_modeling_toolkit.core.linkage.AssetToZone])
- field annual_energy_policies: dict[str, AnnualEnergyStandardContribution] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field annualized_capital_cost: float = 0
- Constraints:
category = FieldCategory.BUILD
units = dollar / kiloW_year
excel_short_title = Capital Cost
warning_bounds = (0, 1000)
show_year_headers = True
default_exclude = False
- field annualized_fixed_om_cost: NumericTimeseries [Optional]
- Constraints:
category = FieldCategory.BUILD
units = dollar / kiloW_year
excel_short_title = Fixed O&M
warning_bounds = (0, 100)
show_year_headers = True
default_exclude = False
- field asset_groups: dict[str, AssetToAssetGroup] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field build_year: Timestamp = Timestamp('2000-01-01 00:00:00') (alias 'commission_date')
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field caiso_tx_constraints: dict[str, AssetToCaisoTxConstraint] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field can_build_new: bool = False
Whether resource can be expanded (for now only linear capacity expansion).
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field can_retire: bool = False
Whether resource can be retired. By default, resources cannot be retired.
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field cumulative_retired_capacity: NumericTimeseries | 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 elcc_surfaces: dict[str, AssetToELCC] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field emissions_policies: dict[str, EmissionsContribution] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field erm_policies: dict[str, ERMContribution] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field hourly_energy_policies: dict[str, HourlyEnergyStandardContribution] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field integer_build_increment: float | None = None
If not None, consider integer (rather than linear) build decisions. If set equal to potential, this will force an all or nothing choice. Otherwise, this can be used to build certain increments of assets
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field mean_time_to_repair: float | None = None
Mean time to repair
- Constraints:
category = FieldCategory.RELIABILITY
units = hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_operational_capacity: NumericTimeseries | None = None
These three attributes are outputs, not inputs. They are initialized to None and are updated to their chosen optimal values after the RESOLVE model is solved. The attributes are used to give build and retirement decisions to a model run in production simulation mode.
Minimum required operational capacity (planned+selected) by model year for this asset
- Constraints:
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field operational_capacity: NumericTimeseries | None = None
- field physical_lifetime: int = 100
Number of years after commission date that asset is operational.
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = year
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field planned_capacity: NumericTimeseries [Optional]
- Constraints:
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field potential: float | None = inf
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field prm_policies: dict[str, ReliabilityContribution] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field random_seed: int | None = None
Random seed
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field retired_capacity: NumericTimeseries | None = None
- field stochastic_outage_rate: float | None = None
Stochastic forced outage rate
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field zones: dict[str, AssetToZone] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- check_if_operationally_equal(other: Asset, check_linkages: bool = True, fields_to_check: list[str] | None = None) bool
Check is this Asset is βoperationally equivalentβ to another Asset.
This check is used when automatically grouping resources together in RESOLVE for the construction of operational constraints. See AssetGroup for more information.
Operational equivalence is defined by two categories. First, all the βoperational attributesβ of the Assets (which are defined in a class variable) must be equal. Any attribute whose value may impact the optimal operational decisions for the assets have to be equal. For example, they must have equal power_output_max profiles, among other things. Second, they must have equivalent βoperational linkagesβ - see check_operational_linkages_are_equal for more information.
- Parameters:
other β the Resource to compare to
check_linkages β whether linkages should be considered in determining operational equality
fields_to_check β an optional list of a subset of fields to check
- Returns:
whether the two Resources are operationally equal
- Return type:
bool
- check_operational_linkages_are_equal(other: Asset) bool
Checks whether two Assets have equivalent βoperational linkages.β
- In order for two Assets to be βoperationally equivalent,β one condition is that any linkages which may impact
the operational decisions of the resource must also be equal. For example, if a Resource is linked to an
AnnualEmissionsStandard, then its dispatch will be partially influenced by this emissions target, so the other Resource must also be linked to that policy.
- Parameters:
other β the other Asset to compare against
- Returns:
whether or not the two components have equivalent operational linkages
- Return type:
equal
- revalidate()
Abstract method to run additional validations after Linkage.announce_linkage_to_instances.
- save_cumulative_retired_capacity()
Save the resulting retired capacity after the RESOLVE model has been solved.
- save_operational_capacity()
Save the resulting operational capacity after the RESOLVE model has been solved.
- save_retired_capacity()
Save the resulting retired capacity after the RESOLVE model has been solved.
- save_selected_capacity()
Save the resulting selected capacity after the RESOLVE model has been solved.
- property annual_results_column_order
This property defines the ordering of columns in the Asset annual results summary out of Resolve. The name of the model field or formulation_block pyomo component can be used.
- property has_operational_rules: bool
Property for whether this asset has operational rules (i.e., it is not a part of an operational group)
- property operational_group: AssetGroup | None
- class AssetCategory(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)
Bases:
Enum
- class AssetGroup
Bases:
Asset
AssetGroup combines multiple vintages of Assets, since Resolve and Recap treat these differently.
For Resolve, separate vintages For Recap, combine vintages
- Fields:
annual_energy_policies ()
annualized_capital_cost (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries)
annualized_fixed_om_cost (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries)
asset_groups ()
assets (dict[str, new_modeling_toolkit.core.linkage.AssetToAssetGroup])
attr_path ()
caiso_tx_constraints ()
can_build_new ()
can_retire ()
class_name ()
cumulative_potential (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries | None)
cumulative_retired_capacity ()
custom_constraints ()
elcc_surfaces ()
emissions_policies ()
erm_policies ()
hourly_energy_policies ()
include ()
integer_build_increment ()
mean_time_to_repair ()
min_cumulative_new_build (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries | None)
min_operational_capacity ()
name ()
operational_capacity ()
physical_lifetime ()
planned_capacity ()
potential (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries | None)
prm_policies ()
random_seed ()
retired_capacity ()
selected_capacity ()
stochastic_outage_rate ()
vintage_parent_group ()
vintages_to_construct (new_modeling_toolkit.core.temporal.timeseries.BooleanTimeseries)
zones ()
- field aggregate_operations: bool = False
Whether to enforce operational constraints across all assets in the group as if they were a single asset. This is only possible if all assets in the group are operationally equivalent to one another.
- field annualized_capital_cost: NumericTimeseries [Optional]
- field annualized_fixed_om_cost: NumericTimeseries [Optional]
- field assets: dict[str, AssetToAssetGroup] [Optional]
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = from
default_exclude = False
- field cumulative_potential: NumericTimeseries | None = None
Cumulative build potential for planned and selected capacity by model year across all assets in the group
- Constraints:
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = False
default_exclude = False
- field min_cumulative_new_build: NumericTimeseries | None = None
Cumulative minimum required selected capacity by model year across all assets in the group
- Constraints:
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field potential: NumericTimeseries | None = None
Build potential for planned and selected capacity by model year across all assets in the group
- Constraints:
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = False
default_exclude = False
- field vintages_to_construct: BooleanTimeseries [Optional]
- classmethod construct_operational_groups(assets: list[Asset], skip_single_member_groups: bool = False) tuple[dict[str, AnyOperationalGroup], dict[str, AnyResource]]
Takes a list of resources of the same type and returns a list of OperationalGroup objects containing the assets which are operationally equivalent to one another.
If skip_single_member_groups is True, any group that would have only one Asset in it is not created, and a dictionary of these resources will be returned along with a dictionary of OperationalGroup objects. If skip_single_member_groups is False, an empty dictionary will be returned along with the OperationalGroups.
- Parameters:
assets β the list of Resources to create the groups from
skip_single_member_groups β whether to skip the creation of groups that would only have a single member
- Returns:
a dictionary of constructed AssetGroup instances single_member_assets: if skip_single_member_groups is True, a dictionary of all Assets that were not
assigned to a group
- Return type:
asset_groups
- revalidate()
Abstract method to run additional validations after Linkage.announce_linkage_to_instances.
- update_assets_with_results()
Allocates optimization model results to the linked Assets based on the fraction of total operational capacity in each modeled year that is represented by each asset.
- property annual_results_column_order
This property defines the ordering of columns in the Asset annual results summary out of Resolve. The name of the model field or formulation_block pyomo component can be used.
- property asset_instances: dict[str, Asset]
Returns a dictionary of all Asset instances linked to the group. These can be Assets or other AssetGroups.
- property build_assets
For build decisions, always use the individual asset instances. This is a recursive property that gets the Assets directly linked to this AssetGroup plus any Assets linked to AssetGroups linked to this AssetGroup.
- property directly_linked_build_assets
For build decisions, always use the individual asset instances.
new_modeling_toolkit.system.outage_distribution module
- class OutageDistribution
Bases:
Component
- Fields:
attr_path ()
class_name ()
include ()
name ()
probability_mass_function (pandas.core.frame.DataFrame | None)
resources (dict[str, new_modeling_toolkit.core.linkage.Linkage])
- field probability_mass_function: DataFrame | None = None
- field resources: dict[str, Linkage] = {}
- classmethod get_data_from_xlwings(wb: Book, sheet_name: str, fully_specified: bool = False, new_style: bool = False) DataFrame
Override
Component.get_data_from_xlwings
, because outage distribution points are special.Currently, this class does not have any particular input attributes. All attributes are in the form of βderate_#β and βderate_prob_#β, so we cannot read directly from the Scenario Tool the way we would for standard component classes. This way of defining attributes works because in
CustomModel
we are allow extra attributes to be passed.To accommodate the extra βindexβ, we assume that the
index
named range (OutageDistribution
) is two columns, where the second column is the distribution point.
new_modeling_toolkit.system.policy module
- class AnnualEmissionsPolicy
Bases:
Policy
Policy class for annual system emissions targets.
Depending on scope of governed items, this could be an electric sector-only or multi-sector emissions target.
- Fields:
attr_path ()
candidate_fuels (dict[str, new_modeling_toolkit.core.linkage.EmissionsContribution])
class_name ()
constraint_operator (new_modeling_toolkit.core.model.ConstraintOperator)
custom_constraints ()
demands (dict[str, new_modeling_toolkit.core.linkage.AllToPolicy])
final_fuels (dict[str, new_modeling_toolkit.core.linkage.EmissionsContribution])
include ()
loads ()
name ()
negative_emissions_technologies (dict[str, new_modeling_toolkit.core.linkage.AllToPolicy])
plants (dict[str, new_modeling_toolkit.core.linkage.AllToPolicy])
pollutants (dict[str, new_modeling_toolkit.core.linkage.AllToPolicy])
price ()
resources (dict[str, new_modeling_toolkit.core.linkage.EmissionsContribution])
slack_penalty ()
target ()
target_adjustment ()
target_basis (new_modeling_toolkit.system.policy.TargetBasis)
target_units (new_modeling_toolkit.system.policy.TargetUnits)
transportations (dict[str, new_modeling_toolkit.core.linkage.AllToPolicy])
tx_paths (dict[str, new_modeling_toolkit.core.linkage.TxEmissionsContribution])
- field candidate_fuels: dict[str, EmissionsContribution] = {}
- field constraint_operator: ConstraintOperator = ConstraintOperator.LESS_THAN_OR_EQUAL_TO
- field demands: dict[str, AllToPolicy] = {}
- field final_fuels: dict[str, EmissionsContribution] = {}
- field negative_emissions_technologies: dict[str, AllToPolicy] = {}
- field plants: dict[str, AllToPolicy] = {}
- field pollutants: dict[str, AllToPolicy] = {}
- field resources: dict[str, EmissionsContribution] = {}
- field target_basis: TargetBasis = TargetBasis.SYSTEM_LOAD
- field target_units: TargetUnits = TargetUnits.ABSOLUTE
- field transportations: dict[str, AllToPolicy] = {}
- field tx_paths: dict[str, TxEmissionsContribution] = {}
- class AnnualEnergyStandard
Bases:
Policy
Policy class for Renewable Portfolio Standard (RPS) or Clean Energy Standard (CES) type policies.
- Fields:
attr_path ()
candidate_fuels (dict[str, new_modeling_toolkit.core.linkage.AnnualEnergyStandardContribution])
class_name ()
constraint_operator (new_modeling_toolkit.core.model.ConstraintOperator)
custom_constraints ()
include ()
loads (dict[str, new_modeling_toolkit.core.linkage.AnnualEnergyStandardContribution])
name ()
price ()
resources (dict[str, new_modeling_toolkit.core.linkage.AnnualEnergyStandardContribution])
slack_penalty ()
target ()
target_adjustment ()
target_basis (None | new_modeling_toolkit.system.policy.TargetBasis)
target_units (new_modeling_toolkit.system.policy.TargetUnits)
- field candidate_fuels: dict[str, AnnualEnergyStandardContribution] = {}
- field constraint_operator: ConstraintOperator = ConstraintOperator.GREATER_THAN_OR_EQUAL_TO
- field loads: dict[str, AnnualEnergyStandardContribution] = {}
- field resources: dict[str, AnnualEnergyStandardContribution] = {}
- field target_basis: None | TargetBasis = None
- field target_units: TargetUnits = TargetUnits.ABSOLUTE
- class EnergyReserveMargin
Bases:
Policy
Policy class for Energy Reserve Margin (ERM) type policies.
- Fields:
assets_ (dict[str, new_modeling_toolkit.core.linkage.ERMContribution])
attr_path ()
class_name ()
constraint_operator (new_modeling_toolkit.core.model.ConstraintOperator)
custom_constraints ()
include ()
loads ()
name ()
price ()
resources (dict[str, new_modeling_toolkit.core.linkage.ERMContribution])
slack_penalty ()
target (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries)
target_adjustment (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries | None)
target_basis (None | new_modeling_toolkit.system.policy.TargetBasis)
target_units (new_modeling_toolkit.system.policy.TargetUnits)
tx_paths (dict[str, new_modeling_toolkit.core.linkage.ERMContribution])
- field assets_: dict[str, ERMContribution] = {}
- field constraint_operator: ConstraintOperator = ConstraintOperator.GREATER_THAN_OR_EQUAL_TO
- field resources: dict[str, ERMContribution] = {}
- field target: NumericTimeseries = None
- field target_adjustment: NumericTimeseries | None [Optional]
- field target_basis: None | TargetBasis = None
- field target_units: TargetUnits = TargetUnits.ABSOLUTE
- field tx_paths: dict[str, ERMContribution] = {}
- 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.
- class HourlyEnergyStandard
Bases:
Policy
Ideally this would be merged with AnnualEnergyStandard, but to preserve backward compatibility for now, keeping separate.
- Fields:
attr_path ()
candidate_fuels (dict[str, new_modeling_toolkit.core.linkage.HourlyEnergyStandardContribution])
class_name ()
constraint_operator (new_modeling_toolkit.core.model.ConstraintOperator)
custom_constraints ()
include ()
loads ()
name ()
price ()
resources (dict[str, new_modeling_toolkit.core.linkage.HourlyEnergyStandardContribution])
slack_penalty (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries)
target ()
target_adjustment ()
target_basis ()
target_units ()
- field candidate_fuels: dict[str, HourlyEnergyStandardContribution] = {}
- field constraint_operator: ConstraintOperator = ConstraintOperator.GREATER_THAN_OR_EQUAL_TO
- field resources: dict[str, HourlyEnergyStandardContribution] = {}
- field slack_penalty: NumericTimeseries [Optional]
- class PlanningReserveMargin
Bases:
Policy
Policy class for Planning Reserve Margin (PRM) type policies.
Assets can be assigned Effective Load Carrying Capability (ELCC) linkages or Net Qualifying Capacity (NQC) attributes to contribute toward PRM polices.
- Fields:
assets_ (dict[str, new_modeling_toolkit.core.linkage.ReliabilityContribution])
attr_path ()
caiso_tx_constraints (dict[str, new_modeling_toolkit.core.linkage.ReliabilityContribution])
class_name ()
constraint_operator (new_modeling_toolkit.core.model.ConstraintOperator)
custom_constraints ()
elcc_surfaces (dict[str, new_modeling_toolkit.core.linkage.ELCCReliabilityContribution])
include ()
loads ()
name ()
plants (dict[str, new_modeling_toolkit.core.linkage.ReliabilityContribution])
price ()
reliability_event_length (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries)
resources (dict[str, new_modeling_toolkit.core.linkage.ReliabilityContribution])
slack_penalty ()
target ()
target_adjustment ()
target_basis (new_modeling_toolkit.system.policy.TargetBasis)
target_units ()
tx_paths (dict[str, new_modeling_toolkit.core.linkage.ReliabilityContribution])
- field assets_: dict[str, ReliabilityContribution] = {}
- field caiso_tx_constraints: dict[str, ReliabilityContribution] = {}
- field constraint_operator: ConstraintOperator = ConstraintOperator.GREATER_THAN_OR_EQUAL_TO
- field elcc_surfaces: dict[str, ELCCReliabilityContribution] = {}
- field plants: dict[str, ReliabilityContribution] = {}
- field reliability_event_length: NumericTimeseries [Optional]
- field resources: dict[str, ReliabilityContribution] = {}
- field target_basis: TargetBasis = TargetBasis.SYSTEM_LOAD
- field tx_paths: dict[str, ReliabilityContribution] = {}
- class Policy
Bases:
Component
Parent class for specific types of policy sub-classes.
This is a pseudo-abstract base class.
- Fields:
attr_path ()
class_name ()
constraint_operator (new_modeling_toolkit.core.model.ConstraintOperator)
custom_constraints (dict[str, new_modeling_toolkit.core.three_way_linkage.CustomConstraintLinkage])
include ()
loads (dict[str, new_modeling_toolkit.core.linkage.AllToPolicy])
name ()
price (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries | None)
target (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries | None)
target_adjustment (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries | None)
target_basis (new_modeling_toolkit.system.policy.TargetBasis)
target_units (new_modeling_toolkit.system.policy.TargetUnits)
- field constraint_operator: ConstraintOperator [Required]
- 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 loads: dict[str, AllToPolicy] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = from
default_exclude = False
- field price: NumericTimeseries | None = None
- field target: NumericTimeseries | None = None
- field target_adjustment: NumericTimeseries | None [Optional]
Adjustment to the target. A positive adjustment would add the target, while a negative adjustment would be subtracted from the target.
- field target_basis: TargetBasis [Required]
Basis of the target. Can be βsalesβ or βsystem demandβ. Sales-based policies, like Californiaβs RPS, are based on the sales (before T&D losses). System-based policies consider total system load (i.e., sales * T&D losses).
- field target_units: TargetUnits [Required]
Units of the target. Can be percentage or absolute. For example, policy targets for an GHG policy arelikely absolute while an RPS policy is a percentage of sales.
- field type: Literal['emissions', 'energy', 'prm', 'erm'] [Required]
Type of policy. Can be related to energy, emissions, prm, erm
new_modeling_toolkit.system.pollutant module
new_modeling_toolkit.system.product module
new_modeling_toolkit.system.sector module
- class Sector
Bases:
Component
This class defines a Sector object and its methods.
- Fields:
attr_path ()
building_shell_subsectors (Dict[str, new_modeling_toolkit.core.linkage.Linkage] | None)
class_name ()
energy_demand_subsectors (dict[str, new_modeling_toolkit.core.linkage.Linkage])
include ()
name ()
negative_emissions_technologies (dict[str, new_modeling_toolkit.core.linkage.Linkage])
non_energy_subsectors (dict[str, new_modeling_toolkit.core.linkage.Linkage])
stock_rollover_subsectors (dict[str, new_modeling_toolkit.core.linkage.Linkage])
- field building_shell_subsectors: Dict[str, Linkage] | None = None
- field energy_demand_subsectors: dict[str, Linkage] = {}
- field negative_emissions_technologies: dict[str, Linkage] = {}
- field non_energy_subsectors: dict[str, Linkage] = {}
- field sector_candidate_fuel_blending: dict[tuple[str, str] | str, ThreeWayLinkage] | None = None
- field stock_rollover_subsectors: dict[str, Linkage] = {}
Module contents
- class AnnualEmissionsPolicy
Bases:
Policy
Policy class for annual system emissions targets.
Depending on scope of governed items, this could be an electric sector-only or multi-sector emissions target.
- Fields:
attr_path (Optional[Union[str, pathlib.Path]])
candidate_fuels (dict[str, new_modeling_toolkit.core.linkage.EmissionsContribution])
class_name (str | None)
constraint_operator (new_modeling_toolkit.core.model.ConstraintOperator)
custom_constraints (Annotated[dict[str, CustomConstraintLinkage], Metadata(linkage_order=3, default_exclude=True)])
demands (dict[str, new_modeling_toolkit.core.linkage.AllToPolicy])
final_fuels (dict[str, new_modeling_toolkit.core.linkage.EmissionsContribution])
include (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
loads (Annotated[dict[str, linkage.AllToPolicy], Metadata(linkage_order='from')])
name (Union[str, tuple])
negative_emissions_technologies (dict[str, new_modeling_toolkit.core.linkage.AllToPolicy])
plants (dict[str, new_modeling_toolkit.core.linkage.AllToPolicy])
pollutants (dict[str, new_modeling_toolkit.core.linkage.AllToPolicy])
price (Optional[ts.NumericTimeseries])
resources (dict[str, new_modeling_toolkit.core.linkage.EmissionsContribution])
slack_penalty (float)
target (Optional[ts.NumericTimeseries])
target_adjustment (Optional[ts.NumericTimeseries])
target_basis (new_modeling_toolkit.system.policy.TargetBasis)
target_units (new_modeling_toolkit.system.policy.TargetUnits)
transportations (dict[str, new_modeling_toolkit.core.linkage.AllToPolicy])
tx_paths (dict[str, new_modeling_toolkit.core.linkage.TxEmissionsContribution])
- 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 candidate_fuels: dict[str, EmissionsContribution] = {}
- field constraint_operator: ConstraintOperator = ConstraintOperator.LESS_THAN_OR_EQUAL_TO
- field custom_constraints: Annotated[dict[str, CustomConstraintLinkage], Metadata(linkage_order=3, default_exclude=True)] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = 3
default_exclude = True
- field demands: dict[str, AllToPolicy] = {}
- field final_fuels: dict[str, EmissionsContribution] = {}
- 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 loads: Annotated[dict[str, linkage.AllToPolicy], Metadata(linkage_order='from')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = from
default_exclude = False
- field negative_emissions_technologies: dict[str, AllToPolicy] = {}
- field plants: dict[str, AllToPolicy] = {}
- field pollutants: dict[str, AllToPolicy] = {}
- field resources: dict[str, EmissionsContribution] = {}
- field target_adjustment: ts.NumericTimeseries | None [Optional]
Adjustment to the target. A positive adjustment would add the target, while a negative adjustment would be subtracted from the target.
- field target_basis: TargetBasis = TargetBasis.SYSTEM_LOAD
- field target_units: TargetUnits = TargetUnits.ABSOLUTE
- field transportations: dict[str, AllToPolicy] = {}
- field tx_paths: dict[str, TxEmissionsContribution] = {}
- class AnnualEnergyStandard
Bases:
Policy
Policy class for Renewable Portfolio Standard (RPS) or Clean Energy Standard (CES) type policies.
- Fields:
attr_path (Optional[Union[str, pathlib.Path]])
candidate_fuels (dict[str, new_modeling_toolkit.core.linkage.AnnualEnergyStandardContribution])
class_name (str | None)
constraint_operator (new_modeling_toolkit.core.model.ConstraintOperator)
custom_constraints (Annotated[dict[str, CustomConstraintLinkage], Metadata(linkage_order=3, default_exclude=True)])
include (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
loads (dict[str, new_modeling_toolkit.core.linkage.AnnualEnergyStandardContribution])
name (Union[str, tuple])
price (Optional[ts.NumericTimeseries])
resources (dict[str, new_modeling_toolkit.core.linkage.AnnualEnergyStandardContribution])
slack_penalty (float)
target (Optional[ts.NumericTimeseries])
target_adjustment (Optional[ts.NumericTimeseries])
target_basis (None | new_modeling_toolkit.system.policy.TargetBasis)
target_units (new_modeling_toolkit.system.policy.TargetUnits)
- 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 candidate_fuels: dict[str, AnnualEnergyStandardContribution] = {}
- field constraint_operator: ConstraintOperator = ConstraintOperator.GREATER_THAN_OR_EQUAL_TO
- field custom_constraints: Annotated[dict[str, CustomConstraintLinkage], Metadata(linkage_order=3, default_exclude=True)] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = 3
default_exclude = 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 loads: dict[str, AnnualEnergyStandardContribution] = {}
- field resources: dict[str, AnnualEnergyStandardContribution] = {}
- field target_adjustment: ts.NumericTimeseries | None [Optional]
Adjustment to the target. A positive adjustment would add the target, while a negative adjustment would be subtracted from the target.
- field target_basis: None | TargetBasis = None
- field target_units: TargetUnits = TargetUnits.ABSOLUTE
- class Asset
Bases:
Component
An Asset is anything with a cost & quantity.
- Fields:
annualized_fixed_om_cost (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries)
asset_groups (dict[str, new_modeling_toolkit.core.linkage.AssetToAssetGroup])
caiso_tx_constraints (dict[str, new_modeling_toolkit.core.linkage.AssetToCaisoTxConstraint])
cumulative_retired_capacity (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries | None)
custom_constraints (dict[str, new_modeling_toolkit.core.three_way_linkage.CustomConstraintLinkage])
elcc_surfaces (dict[str, new_modeling_toolkit.core.linkage.AssetToELCC])
emissions_policies (dict[str, new_modeling_toolkit.core.linkage.EmissionsContribution])
erm_policies (dict[str, new_modeling_toolkit.core.linkage.ERMContribution])
include (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
min_operational_capacity (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries | None)
operational_capacity (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries | None)
planned_capacity (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries)
prm_policies (dict[str, new_modeling_toolkit.core.linkage.ReliabilityContribution])
retired_capacity (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries | None)
zones (dict[str, new_modeling_toolkit.core.linkage.AssetToZone])
- field annual_energy_policies: dict[str, AnnualEnergyStandardContribution] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field annualized_capital_cost: float = 0
- Constraints:
category = FieldCategory.BUILD
units = dollar / kiloW_year
excel_short_title = Capital Cost
warning_bounds = (0, 1000)
show_year_headers = True
default_exclude = False
- field annualized_fixed_om_cost: NumericTimeseries [Optional]
- Constraints:
category = FieldCategory.BUILD
units = dollar / kiloW_year
excel_short_title = Fixed O&M
warning_bounds = (0, 100)
show_year_headers = True
default_exclude = False
- field asset_groups: dict[str, AssetToAssetGroup] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- 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 build_year: Timestamp = Timestamp('2000-01-01 00:00:00') (alias 'commission_date')
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field caiso_tx_constraints: dict[str, AssetToCaisoTxConstraint] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field can_build_new: bool = False
Whether resource can be expanded (for now only linear capacity expansion).
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field can_retire: bool = False
Whether resource can be retired. By default, resources cannot be retired.
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field cumulative_retired_capacity: NumericTimeseries | 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 elcc_surfaces: dict[str, AssetToELCC] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field emissions_policies: dict[str, EmissionsContribution] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field erm_policies: dict[str, ERMContribution] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field hourly_energy_policies: dict[str, HourlyEnergyStandardContribution] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- 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 integer_build_increment: float | None = None
If not None, consider integer (rather than linear) build decisions. If set equal to potential, this will force an all or nothing choice. Otherwise, this can be used to build certain increments of assets
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field mean_time_to_repair: float | None = None
Mean time to repair
- Constraints:
category = FieldCategory.RELIABILITY
units = hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_operational_capacity: NumericTimeseries | None = None
These three attributes are outputs, not inputs. They are initialized to None and are updated to their chosen optimal values after the RESOLVE model is solved. The attributes are used to give build and retirement decisions to a model run in production simulation mode.
Minimum required operational capacity (planned+selected) by model year for this asset
- Constraints:
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field operational_capacity: NumericTimeseries | None = None
- field physical_lifetime: int = 100
Number of years after commission date that asset is operational.
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = year
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field planned_capacity: NumericTimeseries [Optional]
- Constraints:
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field potential: float | None = inf
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field prm_policies: dict[str, ReliabilityContribution] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field random_seed: int | None = None
Random seed
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field retired_capacity: NumericTimeseries | None = None
- field stochastic_outage_rate: float | None = None
Stochastic forced outage rate
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field zones: dict[str, AssetToZone] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- check_if_operationally_equal(other: Asset, check_linkages: bool = True, fields_to_check: list[str] | None = None) bool
Check is this Asset is βoperationally equivalentβ to another Asset.
This check is used when automatically grouping resources together in RESOLVE for the construction of operational constraints. See AssetGroup for more information.
Operational equivalence is defined by two categories. First, all the βoperational attributesβ of the Assets (which are defined in a class variable) must be equal. Any attribute whose value may impact the optimal operational decisions for the assets have to be equal. For example, they must have equal power_output_max profiles, among other things. Second, they must have equivalent βoperational linkagesβ - see check_operational_linkages_are_equal for more information.
- Parameters:
other β the Resource to compare to
check_linkages β whether linkages should be considered in determining operational equality
fields_to_check β an optional list of a subset of fields to check
- Returns:
whether the two Resources are operationally equal
- Return type:
bool
- check_operational_linkages_are_equal(other: Asset) bool
Checks whether two Assets have equivalent βoperational linkages.β
- In order for two Assets to be βoperationally equivalent,β one condition is that any linkages which may impact
the operational decisions of the resource must also be equal. For example, if a Resource is linked to an
AnnualEmissionsStandard, then its dispatch will be partially influenced by this emissions target, so the other Resource must also be linked to that policy.
- Parameters:
other β the other Asset to compare against
- Returns:
whether or not the two components have equivalent operational linkages
- Return type:
equal
- revalidate()
Abstract method to run additional validations after Linkage.announce_linkage_to_instances.
- save_cumulative_retired_capacity()
Save the resulting retired capacity after the RESOLVE model has been solved.
- save_operational_capacity()
Save the resulting operational capacity after the RESOLVE model has been solved.
- save_retired_capacity()
Save the resulting retired capacity after the RESOLVE model has been solved.
- save_selected_capacity()
Save the resulting selected capacity after the RESOLVE model has been solved.
- property annual_results_column_order
This property defines the ordering of columns in the Asset annual results summary out of Resolve. The name of the model field or formulation_block pyomo component can be used.
- property has_operational_rules: bool
Property for whether this asset has operational rules (i.e., it is not a part of an operational group)
- property operational_group: AssetGroup | None
- class AssetGroup
Bases:
Asset
AssetGroup combines multiple vintages of Assets, since Resolve and Recap treat these differently.
For Resolve, separate vintages For Recap, combine vintages
- Fields:
annual_energy_policies (Annotated[dict[str, linkage.AnnualEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)])
annualized_capital_cost (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries)
annualized_fixed_om_cost (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries)
asset_groups (Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='to')])
assets (dict[str, new_modeling_toolkit.core.linkage.AssetToAssetGroup])
attr_path (Optional[Union[str, pathlib.Path]])
caiso_tx_constraints (Annotated[dict[str, linkage.AssetToCaisoTxConstraint], Metadata(linkage_order='to')])
can_build_new (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
can_retire (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
class_name (str | None)
cumulative_potential (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries | None)
cumulative_retired_capacity (ts.NumericTimeseries | None)
custom_constraints (Annotated[dict[str, CustomConstraintLinkage], Metadata(linkage_order=3, default_exclude=True)])
elcc_surfaces (Annotated[dict[str, linkage.AssetToELCC], Metadata(linkage_order='to')])
emissions_policies (Annotated[dict[str, linkage.EmissionsContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)])
erm_policies (Annotated[dict[str, linkage.ERMContribution], Metadata(linkage_order='to')])
hourly_energy_policies (Annotated[dict[str, linkage.HourlyEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)])
include (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
integer_build_increment (Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)])
mean_time_to_repair (Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY, units=units.hour)])
min_cumulative_new_build (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries | None)
min_operational_capacity (Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)])
name (Union[str, tuple])
operational_capacity (ts.NumericTimeseries | None)
physical_lifetime (Annotated[int, Metadata(category=FieldCategory.BUILD, units=units.year)])
planned_capacity (Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.BUILD, units=units.megawatt)])
potential (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries | None)
prm_policies (Annotated[dict[str, linkage.ReliabilityContribution], Metadata(linkage_order='to')])
random_seed (Annotated[int | None, Metadata(category=FieldCategory.RELIABILITY)])
retired_capacity (ts.NumericTimeseries | None)
selected_capacity (float | None)
stochastic_outage_rate (Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY)])
vintage_parent_group (Optional[str])
vintages_to_construct (new_modeling_toolkit.core.temporal.timeseries.BooleanTimeseries)
zones (Annotated[dict[str, linkage.AssetToZone], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)])
- field aggregate_operations: bool = False
Whether to enforce operational constraints across all assets in the group as if they were a single asset. This is only possible if all assets in the group are operationally equivalent to one another.
- field annual_energy_policies: Annotated[dict[str, linkage.AnnualEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field annualized_capital_cost: NumericTimeseries [Optional]
- field annualized_fixed_om_cost: NumericTimeseries [Optional]
- field asset_groups: Annotated[dict[str, linkage.AssetToAssetGroup], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field assets: dict[str, AssetToAssetGroup] [Optional]
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = from
default_exclude = False
- 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 caiso_tx_constraints: Annotated[dict[str, linkage.AssetToCaisoTxConstraint], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field can_build_new: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = False
Whether resource can be expanded (for now only linear capacity expansion).
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field can_retire: Annotated[bool, Metadata(category=FieldCategory.BUILD)] = False
Whether resource can be retired. By default, resources cannot be retired.
- Constraints:
category = FieldCategory.BUILD
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field cumulative_potential: NumericTimeseries | None = None
Cumulative build potential for planned and selected capacity by model year across all assets in the group
- Constraints:
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = False
default_exclude = False
- field custom_constraints: Annotated[dict[str, CustomConstraintLinkage], Metadata(linkage_order=3, default_exclude=True)] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = 3
default_exclude = True
- field elcc_surfaces: Annotated[dict[str, linkage.AssetToELCC], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field emissions_policies: Annotated[dict[str, linkage.EmissionsContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field erm_policies: Annotated[dict[str, linkage.ERMContribution], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field hourly_energy_policies: Annotated[dict[str, linkage.HourlyEnergyStandardContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- 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 integer_build_increment: Annotated[float | None, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] = None
If not None, consider integer (rather than linear) build decisions. If set equal to potential, this will force an all or nothing choice. Otherwise, this can be used to build certain increments of assets
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field mean_time_to_repair: Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY, units=units.hour)] = None
Mean time to repair
- Constraints:
category = FieldCategory.RELIABILITY
units = hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_cumulative_new_build: NumericTimeseries | None = None
Cumulative minimum required selected capacity by model year across all assets in the group
- Constraints:
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_operational_capacity: Annotated[ts.NumericTimeseries | None, Metadata(units=units.MW)] = None
These three attributes are outputs, not inputs. They are initialized to None and are updated to their chosen optimal values after the RESOLVE model is solved. The attributes are used to give build and retirement decisions to a model run in production simulation mode.
Minimum required operational capacity (planned+selected) by model year for this asset
- Constraints:
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field physical_lifetime: Annotated[int, Metadata(category=FieldCategory.BUILD, units=units.year)] = 100
Number of years after commission date that asset is operational.
- Constraints:
ge = 0
category = FieldCategory.BUILD
units = year
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field planned_capacity: Annotated[ts.NumericTimeseries, Metadata(category=FieldCategory.BUILD, units=units.megawatt)] [Optional]
- Constraints:
category = FieldCategory.BUILD
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field potential: NumericTimeseries | None = None
Build potential for planned and selected capacity by model year across all assets in the group
- Constraints:
units = megawatt
excel_short_title =
warning_bounds = (None, None)
show_year_headers = False
default_exclude = False
- field prm_policies: Annotated[dict[str, linkage.ReliabilityContribution], Metadata(linkage_order='to')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field random_seed: Annotated[int | None, Metadata(category=FieldCategory.RELIABILITY)] = None
Random seed
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field stochastic_outage_rate: Annotated[float | None, Metadata(category=FieldCategory.RELIABILITY)] = None
Stochastic forced outage rate
- Constraints:
category = FieldCategory.RELIABILITY
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field vintages_to_construct: BooleanTimeseries [Optional]
- field zones: Annotated[dict[str, linkage.AssetToZone], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- classmethod construct_operational_groups(assets: list[Asset], skip_single_member_groups: bool = False) tuple[dict[str, AnyOperationalGroup], dict[str, AnyResource]]
Takes a list of resources of the same type and returns a list of OperationalGroup objects containing the assets which are operationally equivalent to one another.
If skip_single_member_groups is True, any group that would have only one Asset in it is not created, and a dictionary of these resources will be returned along with a dictionary of OperationalGroup objects. If skip_single_member_groups is False, an empty dictionary will be returned along with the OperationalGroups.
- Parameters:
assets β the list of Resources to create the groups from
skip_single_member_groups β whether to skip the creation of groups that would only have a single member
- Returns:
a dictionary of constructed AssetGroup instances single_member_assets: if skip_single_member_groups is True, a dictionary of all Assets that were not
assigned to a group
- Return type:
asset_groups
- revalidate()
Abstract method to run additional validations after Linkage.announce_linkage_to_instances.
- update_assets_with_results()
Allocates optimization model results to the linked Assets based on the fraction of total operational capacity in each modeled year that is represented by each asset.
- property annual_results_column_order
This property defines the ordering of columns in the Asset annual results summary out of Resolve. The name of the model field or formulation_block pyomo component can be used.
- property asset_instances: dict[str, Asset]
Returns a dictionary of all Asset instances linked to the group. These can be Assets or other AssetGroups.
- property build_assets
For build decisions, always use the individual asset instances. This is a recursive property that gets the Assets directly linked to this AssetGroup plus any Assets linked to AssetGroups linked to this AssetGroup.
- property directly_linked_build_assets
For build decisions, always use the individual asset instances.
- class CandidateFuel
Bases:
_EnergyCarrier
A candidate fuel is one type of fuel that can be used to meet a final fuel demand, be produced by a fuel production plant, or consumed by a plant or thermal resource.
Gasoline is a final fuel; E85 ethanol and fossil gasoline are candidate fuels.
Every candidate fuel is either a commodity, which can be parametrized to have an upper limit of availability and prices, or can be produced via a fuel conversion plant. Currently, the only form of fuel conversion possible is fuel-to-fuel or electricity-to-fuel.
- Fields:
annual_price (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries | None)
availability (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries | None)
electrolyzers (dict[str, new_modeling_toolkit.core.linkage.Linkage])
emission_types (dict[str, new_modeling_toolkit.core.linkage.Linkage])
emissions_policies (dict[str, new_modeling_toolkit.core.linkage.EmissionsContribution])
final_fuels (dict[str, new_modeling_toolkit.core.linkage.Linkage])
fuel_production_plants (dict[str, new_modeling_toolkit.core.linkage.Linkage])
fuel_storages (dict[str, new_modeling_toolkit.core.linkage.Linkage])
fuel_transportations (dict[str, new_modeling_toolkit.core.linkage.Linkage])
fuel_zones (dict[str, new_modeling_toolkit.core.linkage.Linkage])
monthly_price_multiplier (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries | None)
pollutants (dict[str, new_modeling_toolkit.core.linkage.Linkage])
price_per_unit (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries | None)
resources (dict[str, new_modeling_toolkit.core.linkage.CandidateFuelToResource])
- field annual_energy_policies: dict[str, AnnualEnergyStandardContribution] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field annual_price: NumericTimeseries | None = None
- Constraints:
category = FieldCategory.OPERATIONS
units = dollar / MMBtu
excel_short_title = Annual Price
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field availability: NumericTimeseries | None = None
This input sets the maximum potential for this commodity product. If the commodity product is used in RESOLVE, consumption of this product will never exceed the availability in a given year.
- Constraints:
category = FieldCategory.OPERATIONS
units = MMBtu_per_year
excel_short_title = Availability
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field commodity: bool = True (alias 'fuel_is_commodity_bool')
Set to False if this fuel is endogenously produced; otherwise, it will be considered a βcommodityβ with a fixed price stream and potentially a fixed consumption limit.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field electrolyzers: dict[str, Linkage] = {}
- field emission_types: dict[str, Linkage] = {}
- field emissions_policies: dict[str, EmissionsContribution] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field final_fuels: dict[str, Linkage] = {}
- field fuel_production_plants: dict[str, Linkage] = {}
- field fuel_storages: dict[str, Linkage] = {}
- field fuel_transportations: dict[str, Linkage] = {}
- field fuel_zones: dict[str, Linkage] = {}
- field monthly_price_multiplier: NumericTimeseries | None = None
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Multiplier
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field pollutants: dict[str, Linkage] = {}
- field price_per_unit: NumericTimeseries | None = None (alias 'fuel_price_per_mmbtu')
- Constraints:
category = FieldCategory.OPERATIONS
units = dollar / MMBtu
excel_short_title = Price
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field resources: dict[str, CandidateFuelToResource] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field sector_candidate_fuel_blending: dict[tuple[str, str] | str, ThreeWayLinkage] = {}
- calc_energy_demand(sector: str, final_fuel_energy_demand: Series) Series
CandidateFuel energy demand = FinalFuel energy demand * candidate fuel blending %
- Parameters:
sector β str of Sector name, used for filtering input data
final_fuel_energy_demand β pd.Series of energy demand for the FinalFuel
Returns: pd.Series of energy demand for the CandidateFuel
- calc_fuel_cost(candidate_fuel_energy_demand: Series)
CandidateFuel fuel cost = CandidateFuel energy demand * candidate fuel fuel_price per mmbtu
- Parameters:
candidate_fuel_energy_demand β pd.Series of calculated CandidateFuel energy demand in mmbtu
Returns: pd.Series of CandidateFuel fuel cost in $
- candidate_fuel_blend(sector: str) Series
- Parameters:
sector β str of Sector name
Returns: pd.Series of blend_override data for the input sector name saved on the SectorCandidateFuelBlending ThreeWayLinkage
- class Demand
Bases:
Component
Currently only works for a single input product via one DemandToProduct or Process linkage. Will need to be updated to accommodate multiple input products via multiple DemandToProduct or Process linkages and/or via ProductBlend.
- Fields:
annual_energy_forecast (Annotated[ts.NumericTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Forecast')])
annual_peak_forecast (Annotated[ts.NumericTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Peak')])
attr_path ()
class_name ()
demand_products (dict[str, DemandToProduct])
emissions_policies (Annotated[dict[str, linkage.EmissionsContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)])
include ()
input_zones (dict[str, FromZoneToDemand])
model_year_profiles (dict[int, ts.NumericTimeseries])
name ()
output_zones (dict[str, ToZoneToDemand])
processes (dict[Union[tuple[str, str], str], Process])
profile (Annotated[ts.NumericTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Profile')])
profile_model_years (Annotated[ts.NumericTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Modeled Year Profile')])
scale_by_capacity (bool)
scale_by_energy (bool)
td_losses_adjustment (Annotated[ts.NumericTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='T&D Factor')])
- field annual_energy_forecast: Annotated[ts.NumericTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Forecast')] = None
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Forecast
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field annual_peak_forecast: Annotated[ts.NumericTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Peak')] = None
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Peak
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field emissions_policies: Annotated[dict[str, linkage.EmissionsContribution], Metadata(linkage_order='to', category=FieldCategory.OPERATIONS)] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field model_year_profiles: dict[int, ts.NumericTimeseries] = {}
Model year profiles scaled to annual peak and/or annual energy forecasts
- field profile: Annotated[ts.NumericTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Profile')] = None
Weather year(s) demand profile to be scaled. Must have either weather year OR model year profile, but not both.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field profile_model_years: Annotated[ts.NumericTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='Modeled Year Profile')] = None
Model year(s) demand profile to be scaled. Datetime index should include modeled years. Must have either weather year OR model year profile, but not both.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Modeled Year Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field scale_by_capacity: bool = False
If true, calculate model year profiles by scaling profile to median annual peak
- field scale_by_energy: bool = False
If true, calculate model year profiles by scaling profile to mean annual energy
- field td_losses_adjustment: Annotated[ts.NumericTimeseries | None, Metadata(category=FieldCategory.OPERATIONS, excel_short_title='T&D Factor')] [Optional]
T&D loss adjustment to gross up to system-level demands. For example, a DER may be able to serve 8% more demand (i.e., 1.08) than an equivalent bulk system resource due to T&D losses. Adjustment factor is directly multiplied against demand (as opposed to 1 / (1 +
td_losses_adjustment
).- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = T&D Factor
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- forecast_demand(modeled_years: tuple[int, int], weather_years: tuple[int, int], custom_scalars: Series | None = None)
Calculate the scaling coefficient and scaling offset for the demand series in order to scale them to any future between the first model year and last model year. The coefficient and offset is determine by the future peak demand series and energy series, and the demand scaling method defined by the user.
- Parameters:
modeled_years β tuple first model year to last model year
weather_years β tuple first weather year to last weather year (only used for profile_modeled_years)
custom_scalars β Optional series of scalars to be applied to annual energy forecast. Only used if scale_by_energy is true. Intended to ensure annual energy forecast is still true when weighted dispatch windows are applied.
Returns: Updated modeled_year_profile dict
- get_demand(modeled_year: int, weather_year_timestamp: Timestamp)
Based on the model year, first find the future demand series belonging to that model year. And based on the period and hour, query the specific hourly demand for that hour in the model year. :param system: System.system. current power system :param modeled_year: int. model year being queried :param weather_year_timestamp: model hour being queried
Returns: int. demand for the tp under query.
- resample_ts_attributes(modeled_years: tuple[int, int], weather_years: tuple[int, int], resample_weather_year_attributes=True, resample_non_weather_year_attributes=True)
Resample timeseries attributes to the default frequencies to make querying via slice_by_timepoint and slice_by_year more consistent later.
Downsample data by comparing against a βcorrect indexβ with the correct default_freq
If data start year > modeled start year, fill timeseries backward
Create a temporary timestamp for the first hour of the year after the modeled end year to make sure we have all the hours, minutes (e.g., 23:59:59) filled in in step (4)
Resample to fill in any data (particularly at end of timeseries) and drop temporary timestamp from (3)
- revalidate()
Abstract method to run additional validations after Linkage.announce_linkage_to_instances.
- static scale_demand(profile: NumericTimeseries, to_peak: bool | float, to_energy: bool | float, td_losses_adjustment: float, leap_year: bool) NumericTimeseries
Scale timeseries by energy and/or median peak.
Scaling to energy assumes
to_energy
forecast value will match whether it is/is not a leap year. In other words, the energy forecast for a leap day includes an extra dayβs worth of energy.- Parameters:
profile β Hourly timeseries to be scaled
to_peak β Median annual peak to be scaled to
to_energy β Mean annual energy to be scaled to
td_losses_adjustment β T&D losses adjustment (simple scalar on demand profile)
leap_year β If year being scaled to is a leap year (affecting energy scaling)
- Returns:
Scaled hourly timeseries
- Return type:
new_profile
- class ELCCSurface
Bases:
Component
- Fields:
- field assets: dict[str, AssetToELCC] = {}
- field facets: dict[str, ELCCFacetToSurface] = {}
- field prm_policies: dict[str, ELCCReliabilityContribution] = {}
- class Electricity
Bases:
_EnergyCarrier
- Fields:
annual_price ()
attr_path ()
availability ()
charging_processes ()
class_name ()
commodity ()
demands ()
include ()
monthly_price_multiplier ()
name ()
price_per_unit ()
processes ()
product_blends ()
transportations ()
unit (pint.Unit | str)
zones ()
- class EnergyDemand
Bases:
Demand
An energy demand is an element of the non-electric sector economy that demands a CandidateFuel or electricity. It operates nearly identically to a Demand but requires a subclass of _EnergyCarrier as its consumed input.
- Fields:
annual_energy_forecast ()
annual_peak_forecast ()
attr_path ()
class_name ()
demand_products ()
emissions_policies ()
include ()
input_zones ()
model_year_profiles ()
name ()
output_zones ()
processes ()
profile ()
profile_model_years ()
scale_by_capacity ()
scale_by_energy ()
td_losses_adjustment ()
- class FinalFuel
Bases:
Component
A final fuel represents a type of energy that can be consumed by a device, or by an energy demand subsector. A final fuel may represent several unique fuelsβ for example, the βdieselβ final fuel might actually represent the sum of fossil diesel and renewable diesel. The purpose of a final fuel is to aggregate all fuels which have common combustion characteristics from the perspective of a device or energy demand subsector. The term βfinalβ refers to the fact that this is the fuel that is seen at the βfinalβ point in the energy supply chain, i.e. the point of combustion.
This component exists mainly so that the fuel share of service demand for devices can be specified via a linkage to fuels. The fuel_switchings attribute defined on a three-way linkage between final fuels and energy demand subsectors that dictates the extent, efficiency, and cost of fuel switching within a given energy demand subsector. Fuel efficiency occurs after fuel switching.
- Fields:
annual_demand (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries | None)
candidate_fuels (dict[str, new_modeling_toolkit.core.linkage.Linkage])
ccs_plants (dict[str, new_modeling_toolkit.core.linkage.Linkage])
demand (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries | None)
devices (dict[str, new_modeling_toolkit.core.linkage.Linkage])
energy_demand_subsectors (dict[str, new_modeling_toolkit.core.linkage.Linkage])
fuel_zones (dict[str, new_modeling_toolkit.core.linkage.Linkage])
negative_emissions_technologies (dict[str, new_modeling_toolkit.core.linkage.Linkage])
policies (dict[str, new_modeling_toolkit.core.linkage.Linkage])
- field annual_demand: NumericTimeseries | None = None
Annual fuel demand.
- field candidate_fuels: dict[str, Linkage] = {}
- field ccs_plants: dict[str, Linkage] = {}
- field demand: NumericTimeseries | None = None
Annual fuel demand.
- field devices: dict[str, Linkage] = {}
- field energy_demand_subsector_to_final_fuel_to_ccs_plant: dict[tuple[str, str] | str, ThreeWayLinkage] | None = None
- field energy_demand_subsectors: dict[str, Linkage] = {}
- field fuel_price_per_mmbtu_override: NumericTimeseries | None = None
- field fuel_switchings: dict[tuple[str, str] | str, ThreeWayLinkage] | None = None
- field fuel_zones: dict[str, Linkage] = {}
- field negative_emissions_technologies: dict[str, Linkage] = {}
- field policies: dict[str, Linkage] = {}
- field sector_candidate_fuel_blending: dict[tuple[str, str] | str, ThreeWayLinkage] | None = None
- calc_energy_demand_cost_and_emissions(sector: str, energy_demand: Series)
Loop through CandidateFuels linked to the FinalFuel. For each candidate fuel, calculate the energy demand. Then loop through each pollutant on each candidate fuel and calculate emissions by pollutant type. Results are temporarily saved on the linkages (ex: FinalFuelToCandidateFuel and CandidateFuelToPollutant). After looping, results are then aggregated (by calling the `self._return_{result type}_by_candidate_fuelβ functions) and saved permanently on the linked component. Another option is to save aggregated results on the 1:1 XToFinalFuel linkage because it will not be overwritten.
- Parameters:
sector β name of sector for filtering. Ex: βResidentialβ or βIndustrialβ
energy_demand β pd.Series of energy demand of FinalFuel in mmbtu
Returns:
- property candidate_fuels_list: list[CandidateFuel]
list of CandidateFuel components linked to the FinalFuel object
- Type:
Returns
- class FlexLoadResource
Bases:
ShedDrResource
,StorageResource
- Fields:
- field adjacency: int [Required]
Number of adjacent hours to constrain energy shifting. Adjacency constraints ensure that if load is shifted down in one hour, an equivalent amount of load is shifted up at most X hours away, and vice versa. [hours]
- Constraints:
gt = 0
- field duration: NumericTimeseries = None (alias 'flex_storage_duration')
Operational time of the battery at a specified power level before it runs out of energy [hours]. Note: not all flex load resources will require a duration. Only EV resources. For all others, the duration will default to the length of the adjacency window.
- Constraints:
category = FieldCategory.OPERATIONS
units = hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = False
default_exclude = False
- field energy_budget_daily: FractionalTimeseries = None
Daily fraction of energy capacity allowed for daily dispatch [dimensionless].
- field shift_direction: FlexLoadShiftDirection [Required]
If pre_consumption, flexible load resources always need to increase load first before providing power.An example of this is pre-cooling.If deferred_consumption, flexible load resources always will provide power first before increasing load.An example of this is deferring to use appliances. If either, the resource can do provide power or increase load first depending on what is optimal.
- class FuelProductionPlant
Bases:
Plant
A subclass of Plant that is specifically designed to produce some kind of βfuelβ rather than electricity.
- Fields:
annual_energy_policies ()
annualized_capital_cost ()
annualized_fixed_om_cost ()
asset_groups ()
attr_path ()
build_year ()
caiso_tx_constraints ()
can_build_new ()
can_retire ()
class_name ()
cumulative_retired_capacity ()
custom_constraints ()
elcc_surfaces ()
emissions_policies ()
erm_policies ()
hourly_energy_policies ()
include ()
input_zones ()
integer_build_increment ()
max_output_profile ()
mean_time_to_repair ()
min_operational_capacity ()
min_output_profile ()
name ()
operational_capacity ()
output_zones ()
physical_lifetime ()
planned_capacity ()
potential ()
primary_product ()
prm_policies ()
processes ()
production_tax_credit ()
ptc_term ()
ramp_down_limit ()
ramp_up_limit ()
random_seed ()
retired_capacity ()
selected_capacity ()
stochastic_outage_rate ()
variable_cost ()
vintage_parent_group ()
zones ()
- class FuelStorage
Bases:
FuelProductionPlant
- Fields:
allow_inter_period_sharing (bool)
annual_energy_policies ()
annualized_capital_cost ()
annualized_fixed_om_cost ()
annualized_storage_capital_cost (float)
annualized_storage_fixed_om_cost (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries)
asset_groups ()
attr_path ()
build_year ()
caiso_tx_constraints ()
can_build_new ()
can_retire ()
charging_processes (dict[tuple[str, str] | str, new_modeling_toolkit.system.generics.process.ChargeProcess])
class_name ()
cumulative_retired_capacity ()
cumulative_retired_storage_capacity (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries | None)
custom_constraints ()
duration (float)
duration_constraint (new_modeling_toolkit.system.fuel.fuel_storage.StorageDurationConstraint)
elcc_surfaces ()
emissions_policies ()
erm_policies ()
hourly_energy_policies ()
include ()
input_zones ()
integer_build_increment ()
max_input_profile (new_modeling_toolkit.core.temporal.timeseries.FractionalTimeseries)
max_output_profile ()
mean_time_to_repair ()
min_input_profile (new_modeling_toolkit.core.temporal.timeseries.FractionalTimeseries)
min_operational_capacity ()
min_output_profile ()
min_state_of_charge (float)
name ()
operational_capacity ()
operational_storage_capacity (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries | None)
output_zones ()
parasitic_loss (float)
physical_lifetime ()
planned_capacity ()
potential ()
primary_product ()
prm_policies ()
processes ()
production_tax_credit ()
ptc_term ()
ramp_down_limit ()
ramp_up_limit ()
random_seed ()
retired_capacity ()
retired_storage_capacity (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries | None)
selected_capacity ()
selected_storage_capacity (float | None)
stochastic_outage_rate ()
variable_cost ()
variable_cost_input (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries)
vintage_parent_group ()
zones ()
- field allow_inter_period_sharing: bool = False
For fuel storage plants that have chronological energy storage capability, enable inter-period energy/state-of-charge tracking
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field annualized_storage_capital_cost: float = 0.0
$/MMBtu-yr. For new storage capacity, the annualized fixed cost of investment. This is an annualized version of an overnight cost that could include financing costs ($/kWh-year).
- Constraints:
category = FieldCategory.BUILD
units = dollar / MMBtu_year
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field annualized_storage_fixed_om_cost: NumericTimeseries [Optional] (alias 'new_storage_capacity_fixed_om_by_vintage')
$/MMBtu-yr. For the planned portion of the resourceβs storage capacity, the ongoing fixed O&M cost
- Constraints:
category = FieldCategory.BUILD
units = dollar / MMBtu_year
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field charging_processes: dict[tuple[str, str] | str, ChargeProcess] [Optional]
These three-way linkages define the input-output charging relationship on the fuel storage plant.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field cumulative_retired_storage_capacity: NumericTimeseries | None = None
- field duration: float [Required] (alias 'storage_duration')
Operational time of the fuel storage at a specified operation level before it runs out of energy [hours]
- Constraints:
ge = 0
category = FieldCategory.OPERATIONS
units = hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = False
default_exclude = False
- field duration_constraint: StorageDurationConstraint = StorageDurationConstraint.FIXED
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field max_input_profile: FractionalTimeseries [Optional]
Fixed shape of storageβs (e.g. flat shape for storage resources) max input.
- Constraints:
category = FieldCategory.OPERATIONS
units = unitless
excel_short_title = Max Input Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_input_profile: FractionalTimeseries [Optional]
Fixed shape of storageβs (e.g. flat shape for storage resources) min input.
- Constraints:
category = FieldCategory.OPERATIONS
units = unitless
excel_short_title = Max Input Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field min_state_of_charge: float = 0
These three attributes are outputs, not inputs. They are initialized to None and are updated to their chosen optimal values after the RESOLVE model is solved. The attributes are used to give build and retirement decisions to a model run in production simulation mode.
Minimum state of charge at any given time.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field operational_storage_capacity: NumericTimeseries | None = None
- field parasitic_loss: float = 0
Hourly state of charge losses.
- Constraints:
ge = 0
le = 1
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field retired_storage_capacity: NumericTimeseries | None = None
- field variable_cost_input: NumericTimeseries [Optional]
Variable O&M cost per MMBtu generated.
- Constraints:
category = FieldCategory.OPERATIONS
units = dollar / MMBtu
excel_short_title = VO&M In
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- save_cumulative_retired_storage_capacity()
Save the resulting retired storage capacity after the RESOLVE model has been solved.
- save_operational_storage_capacity()
Save the resulting operational storage capacity after the RESOLVE model has been solved.
- save_selected_storage_capacity()
Save the resulting selected storage capacity after the RESOLVE model has been solved.
- property planned_storage_capacity: Series
This property is for fuel storage only now.
- class GenericResource
Bases:
Asset
- Fields:
energy_budget_annual (new_modeling_toolkit.core.temporal.timeseries.FractionalTimeseries | None)
energy_budget_daily (new_modeling_toolkit.core.temporal.timeseries.FractionalTimeseries | None)
energy_budget_monthly (new_modeling_toolkit.core.temporal.timeseries.FractionalTimeseries | None)
outage_distributions (dict[str, new_modeling_toolkit.core.linkage.ResourceToOutageDistribution])
outage_profile (new_modeling_toolkit.core.temporal.timeseries.FractionalTimeseries)
outage_profile__type (new_modeling_toolkit.core.temporal.timeseries.TimeseriesType | None)
power_output_max (new_modeling_toolkit.core.temporal.timeseries.FractionalTimeseries)
power_output_max__type (new_modeling_toolkit.core.temporal.timeseries.TimeseriesType | None)
power_output_min (new_modeling_toolkit.core.temporal.timeseries.FractionalTimeseries)
power_output_min__type (new_modeling_toolkit.core.temporal.timeseries.TimeseriesType | None)
reserves (dict[str, new_modeling_toolkit.core.linkage.ResourceToReserve])
resource_groups (dict[str, new_modeling_toolkit.core.linkage.ResourceToResourceGroup])
variable_cost_power_output (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries)
zones (dict[str, new_modeling_toolkit.core.linkage.ResourceToZone])
- field allow_inter_period_sharing: bool = False
For resources & fuel storage resources that have chronological energy storage capability, enable inter-period energy/state-of-charge tracking. For resources with ramp rates, enable inter-period tracking of ramp constraints.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field energy_budget_annual: FractionalTimeseries | None = None
Annual fraction of energy capacity allowed for annual dispatch.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / year
excel_short_title = Annual
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field energy_budget_daily: FractionalTimeseries | None = None
Daily fraction of energy capacity allowed for daily dispatch.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / day
excel_short_title = Daily
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field energy_budget_monthly: FractionalTimeseries | None = None
Monthly fraction of energy capacity allowed for monthly dispatch]
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / month
excel_short_title = Monthly
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field outage_distributions: dict[str, ResourceToOutageDistribution] [Optional]
This input links resources to a specific OutageDistribution component. When a random or planned outage occurs, the outage distribution dictates what the possible outage state are for each resource. For example, if a unit is either on or offline, then itβs outage distribution is 0,1.
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field outage_profile: FractionalTimeseries [Optional]
Fixed profile of simulated outages, where a value of 1.0 represents availability of full nameplate capacity and a value less than 1.0 represents a partial outage.
- Constraints:
category = FieldCategory.OPERATIONS
units = unitless
excel_short_title = Outage
warning_bounds = (None, None)
show_year_headers = True
default_exclude = True
- field outage_profile__type: TimeseriesType | None = None
Whether the outage_profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_max: FractionalTimeseries [Optional] (alias 'provide_power_potential_profile')
Fixed shape of resourceβs potential power output (e.g., solar or wind shape or flat shapefor firm resources or storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Max Output Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_max__type: TimeseriesType | None = None
Whether the power_output_max profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_min: FractionalTimeseries [Optional] (alias 'provide_power_min_profile')
Fixed shape of resourceβs potential power output (e.g., solar or wind shape or flat shapefor firm resources or storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Min Output Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_output_min__type: TimeseriesType | None = None
Whether the power_output_min profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field production_tax_credit: float | None = None
- Constraints:
units = dollar / megawatt_hour
excel_short_title = PTC
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ptc_term: int | None = None
- Constraints:
units = year
excel_short_title = PTC Term
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_1_hour: float | None = None
Single-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 1 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_2_hour: float | None = None
Two-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.5 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_3_hour: float | None = None
Three-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.3333333333333333 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field ramp_rate_4_hour: float | None = None
Four-hour ramp rate. When used in conjunction with the other ramp rate limits (1-4 hour), a resourceβs dispatch will be constrained by all applicable ramp rate limits on a rolling basis.
- Constraints:
category = FieldCategory.OPERATIONS
units = 0.25 / hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field reserves: dict[str, ResourceToReserve] [Optional]
This input links the resource to a specific reserve type that it can contribute to. For example, Storage can provide both regulation up and down, but might not provide non-spin reserves.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field resource_groups: dict[str, ResourceToResourceGroup] [Optional]
This gives each resource a group for RECAP. Depending on the Resource class, the upsampling method could change. For example, with Solar and Wind, these will be upsampled using a day draw methodology.
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field variable_cost_power_output: NumericTimeseries [Optional] (alias 'variable_cost_provide_power')
Variable O&M cost per MWh charged.
- Constraints:
category = FieldCategory.OPERATIONS
units = dollar / megawatt_hour
excel_short_title = VO&M Out
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field zones: dict[str, ResourceToZone] = {}
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- clear_calculated_properties()
Clear the property cache so scaled profiles are recalculated after rescaling
- get_ramp_MW(modeled_year: Timestamp, timepoint_1: Tuple[Timestamp, Timestamp], timepoint_2: Tuple[Timestamp, Timestamp])
Change in output MW between two timepoints
- revalidate()
Abstract method to run additional validations after Linkage.announce_linkage_to_instances.
- property annual_results_column_order
This property defines the ordering of columns in the Asset annual results summary out of Resolve.
- property outage_distribution: OutageDistribution | None
- property pmax_profile: Series
- property pmin_profile: Series
- property production_tax_credit_ts: NumericTimeseries
- property resource_group: ResourceGroup | None
- property scaled_pmax_profile: Dict[int, Series]
- class GenericResourceGroup
Bases:
AssetGroup
,GenericResource
- field zones: dict[str, ResourceToZone] = {}
- Constraints:
category = FieldCategory.OPERATIONS
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.
- property annual_results_column_order
This property defines the ordering of columns in the Asset annual results summary out of Resolve.
- property production_tax_credit_ts: NumericTimeseries
- class HybridStorageResource
Bases:
StorageResource
- Fields:
- field hybrid_variable_resources: dict[str, HybridStorageResourceToHybridVariableResource] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- revalidate()
Abstract method to run additional validations after Linkage.announce_linkage_to_instances.
- property hybrid_erm_policy_linkage
Gets the ERM policy linkage for the hybrid storage resource for accessibility.
- property paired_variable_resource: HybridVariableResource
- class HybridStorageResourceGroup
Bases:
StorageResourceGroup
,HybridStorageResource
- Fields:
- class HybridVariableResource
Bases:
VariableResource
- Fields:
- field hybrid_storage_resources: dict[str, HybridStorageResourceToHybridVariableResource] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = from
default_exclude = False
- class HybridVariableResourceGroup
Bases:
VariableResourceGroup
,HybridVariableResource
- Fields:
- class HydroResource
Bases:
VariableResource
Resource with storage capacity.
Adds state-of-charge tracking.
It feels like BatteryResource could be composed of a GenericResource + Asset (that represents the storage costs), but need to think about this more before implementing.
- Fields:
- class HydroResourceGroup
Bases:
VariableResourceGroup
,HydroResource
- Fields:
- model_post_init(_ModelMetaclass__context: Any) None
We need to both initialize private attributes and call the user-defined model_post_init method.
- class Load
Bases:
Component
- Fields:
annual_energy_forecast (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries | None)
annual_energy_policies (dict[str, new_modeling_toolkit.core.linkage.AllToPolicy])
annual_peak_forecast (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries | None)
devices (dict[str, new_modeling_toolkit.core.linkage.Linkage])
emissions_policies (dict[str, new_modeling_toolkit.core.linkage.AllToPolicy])
energy_demand_subsectors (dict[str, new_modeling_toolkit.core.linkage.Linkage])
erm_policies (dict[str, new_modeling_toolkit.core.linkage.AllToPolicy])
hourly_energy_policies (dict[str, new_modeling_toolkit.core.linkage.AllToPolicy])
model_year_profiles (dict[int, new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries])
prm_policies (dict[str, new_modeling_toolkit.core.linkage.AllToPolicy])
profile (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries | None)
profile_model_years (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries | None)
reserves (dict[str, new_modeling_toolkit.core.linkage.LoadToReserve])
td_losses_adjustment (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries | None)
zones (dict[str, new_modeling_toolkit.core.linkage.LoadToZone])
- field annual_energy_forecast: NumericTimeseries | None = None
- Constraints:
category = FieldCategory.OPERATIONS
units = hour * megawatt
excel_short_title = Forecast
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field annual_energy_policies: dict[str, AllToPolicy] [Optional]
- field annual_peak_forecast: NumericTimeseries | None = None
- Constraints:
category = FieldCategory.OPERATIONS
units = megawatt
excel_short_title = Peak
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field devices: dict[str, Linkage] [Optional]
- field emissions_policies: dict[str, AllToPolicy] [Optional]
- field energy_demand_subsectors: dict[str, Linkage] [Optional]
- field erm_policies: dict[str, AllToPolicy] [Optional]
- field hourly_energy_policies: dict[str, AllToPolicy] [Optional]
- field model_year_profiles: dict[int, NumericTimeseries] = {}
Model year profiles scaled to annual peak and/or annual energy forecasts
- field prm_policies: dict[str, AllToPolicy] [Optional]
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field profile: NumericTimeseries | None = None
Weather year(s) load profile to be scaled. Must have either weather year OR model year profile, but not both.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field profile_model_years: NumericTimeseries | None = None
Model year(s) load profile to be scaled. Datetime index should include modeled years. Must have either weather year OR model year profile, but not both.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Modeled Year Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field reserves: dict[str, LoadToReserve] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- field scale_by_capacity: bool = False (alias 'scale_by_peak')
If true, calculate model year profiles by scaling profile to median annual peak
- field scale_by_energy: bool = False
If true, calculate model year profiles by scaling profile to mean annual energy
- field td_losses_adjustment: NumericTimeseries | None [Optional]
T&D loss adjustment to gross up to system-level loads. For example, a DER may be able to serve 8% more load (i.e., 1.08) than an equivalent bulk system resource due to T&D losses. Adjustment factor is directly multiplied against load (as opposed to 1 / (1 +
td_losses_adjustment
).- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = T&D Factor
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field zones: dict[str, LoadToZone] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = to
default_exclude = False
- forecast_load(modeled_years: tuple[int, int], weather_years: tuple[int, int], custom_scalars: Series | None = None)
Calculate the scaling coefficient and scaling offset for the load series in order to scale them to any future between the first model year and last model year. The coefficient and offset is determine by the future peak load series and energy series, and the load scaling method defined by the user.
- Parameters:
modeled_years β tuple first model year to last model year
weather_years β tuple first weather year to last weather year (only used for profile_modeled_years)
custom_scalars β Optional series of scalars to be applied to annual energy forecast. Only used if scale_by_energy is true. Intended to ensure annual energy forecast is still true when weighted dispatch windows are applied.
Returns: Updated modeled_year_profile dict
- get_load(modeled_year: int, weather_year_timestamp: Timestamp)
Based on the model year, first find the future load series belonging to that model year. And based on the period and hour, query the specific hourly load for that hour in the model year. :param system: System.system. current power system :param modeled_year: int. model year being queried :param weather_year_timestamp: model hour being queried
Returns: int. load for the tp under query.
- resample_ts_attributes(modeled_years: tuple[int, int], weather_years: tuple[int, int], resample_weather_year_attributes=True, resample_non_weather_year_attributes=True)
Resample timeseries attributes to the default frequencies to make querying via slice_by_timepoint and slice_by_year more consistent later.
Downsample data by comparing against a βcorrect indexβ with the correct default_freq
If data start year > modeled start year, fill timeseries backward
Create a temporary timestamp for the first hour of the year after the modeled end year to make sure we have all the hours, minutes (e.g., 23:59:59) filled in in step (4)
Resample to fill in any data (particularly at end of timeseries) and drop temporary timestamp from (3)
- revalidate()
Abstract method to run additional validations after Linkage.announce_linkage_to_instances.
- static scale_load(profile: NumericTimeseries, to_peak: bool | float, to_energy: bool | float, td_losses_adjustment: float, leap_year: bool) NumericTimeseries
Scale timeseries by energy and/or median peak.
Scaling to energy assumes
to_energy
forecast value will match whether it is/is not a leap year. In other words, the energy forecast for a leap day includes an extra dayβs worth of energy.- Parameters:
profile β Hourly timeseries to be scaled
to_peak β Median annual peak to be scaled to
to_energy β Mean annual energy to be scaled to
td_losses_adjustment β T&D losses adjustment (simple scalar on load profile)
leap_year β If year being scaled to is a leap year (affecting energy scaling)
- Returns:
Scaled hourly timeseries
- Return type:
new_profile
- class NegativeEmissionsTechnology
Bases:
Plant
- Fields:
annual_energy_policies ()
annualized_capital_cost ()
annualized_fixed_om_cost ()
asset_groups ()
attr_path ()
build_year ()
caiso_tx_constraints ()
can_build_new ()
can_retire ()
class_name ()
cumulative_retired_capacity ()
custom_constraints ()
elcc_surfaces ()
emissions_policies ()
erm_policies ()
hourly_energy_policies ()
include ()
input_zones ()
integer_build_increment ()
max_output_profile ()
mean_time_to_repair ()
min_operational_capacity ()
min_output_profile ()
name ()
operational_capacity ()
output_zones ()
physical_lifetime ()
planned_capacity ()
potential ()
primary_product ()
prm_policies ()
processes ()
production_tax_credit ()
ptc_term ()
ramp_down_limit ()
ramp_up_limit ()
random_seed ()
retired_capacity ()
selected_capacity ()
stochastic_outage_rate ()
variable_cost ()
vintage_parent_group ()
zones ()
- class OutageDistribution
Bases:
Component
- Fields:
attr_path (Optional[Union[str, pathlib.Path]])
class_name (str | None)
include (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
name (Union[str, tuple])
probability_mass_function (pandas.core.frame.DataFrame | None)
resources (dict[str, new_modeling_toolkit.core.linkage.Linkage])
- 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 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 probability_mass_function: DataFrame | None = None
- field resources: dict[str, Linkage] = {}
- classmethod get_data_from_xlwings(wb: Book, sheet_name: str, fully_specified: bool = False, new_style: bool = False) DataFrame
Override
Component.get_data_from_xlwings
, because outage distribution points are special.Currently, this class does not have any particular input attributes. All attributes are in the form of βderate_#β and βderate_prob_#β, so we cannot read directly from the Scenario Tool the way we would for standard component classes. This way of defining attributes works because in
CustomModel
we are allow extra attributes to be passed.To accommodate the extra βindexβ, we assume that the
index
named range (OutageDistribution
) is two columns, where the second column is the distribution point.
- class PlanningReserveMargin
Bases:
Policy
Policy class for Planning Reserve Margin (PRM) type policies.
Assets can be assigned Effective Load Carrying Capability (ELCC) linkages or Net Qualifying Capacity (NQC) attributes to contribute toward PRM polices.
- Fields:
assets_ (dict[str, new_modeling_toolkit.core.linkage.ReliabilityContribution])
attr_path (Optional[Union[str, pathlib.Path]])
caiso_tx_constraints (dict[str, new_modeling_toolkit.core.linkage.ReliabilityContribution])
class_name (str | None)
constraint_operator (new_modeling_toolkit.core.model.ConstraintOperator)
custom_constraints (Annotated[dict[str, CustomConstraintLinkage], Metadata(linkage_order=3, default_exclude=True)])
elcc_surfaces (dict[str, new_modeling_toolkit.core.linkage.ELCCReliabilityContribution])
include (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
loads (Annotated[dict[str, linkage.AllToPolicy], Metadata(linkage_order='from')])
name (Union[str, tuple])
plants (dict[str, new_modeling_toolkit.core.linkage.ReliabilityContribution])
price (Optional[ts.NumericTimeseries])
reliability_event_length (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries)
resources (dict[str, new_modeling_toolkit.core.linkage.ReliabilityContribution])
slack_penalty (float)
target (Optional[ts.NumericTimeseries])
target_adjustment (Optional[ts.NumericTimeseries])
target_basis (new_modeling_toolkit.system.policy.TargetBasis)
target_units (TargetUnits)
tx_paths (dict[str, new_modeling_toolkit.core.linkage.ReliabilityContribution])
- field assets_: dict[str, ReliabilityContribution] = {}
- 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 caiso_tx_constraints: dict[str, ReliabilityContribution] = {}
- field constraint_operator: ConstraintOperator = ConstraintOperator.GREATER_THAN_OR_EQUAL_TO
- field custom_constraints: Annotated[dict[str, CustomConstraintLinkage], Metadata(linkage_order=3, default_exclude=True)] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = 3
default_exclude = True
- field elcc_surfaces: dict[str, ELCCReliabilityContribution] = {}
- 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 loads: Annotated[dict[str, linkage.AllToPolicy], Metadata(linkage_order='from')] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = from
default_exclude = False
- field plants: dict[str, ReliabilityContribution] = {}
- field reliability_event_length: NumericTimeseries [Optional]
- field resources: dict[str, ReliabilityContribution] = {}
- field target_adjustment: ts.NumericTimeseries | None [Optional]
Adjustment to the target. A positive adjustment would add the target, while a negative adjustment would be subtracted from the target.
- field target_basis: TargetBasis = TargetBasis.SYSTEM_LOAD
- field target_units: TargetUnits [Required]
Units of the target. Can be percentage or absolute. For example, policy targets for an GHG policy arelikely absolute while an RPS policy is a percentage of sales.
- field tx_paths: dict[str, ReliabilityContribution] = {}
- class Pollutant
Bases:
Product
ADD DESCRIPTION
- Fields:
GWP (float)
annual_price (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries | None)
attr_path ()
availability (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries | None)
candidate_fuels (dict[str, new_modeling_toolkit.core.linkage.CandidateFuelToPollutant])
ccs_plants (dict[str, new_modeling_toolkit.core.linkage.Linkage])
charging_processes ()
class_name ()
commodity ()
demands ()
emissions_policies (dict[str, new_modeling_toolkit.core.linkage.EmissionsContribution])
include ()
monthly_price_multiplier ()
name ()
negative_emissions_technologies (dict[str, new_modeling_toolkit.core.linkage.Linkage])
non_energy_subsectors (dict[str, new_modeling_toolkit.core.linkage.Linkage])
policies (dict[str, new_modeling_toolkit.core.linkage.Linkage])
price_per_unit (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries | None)
processes ()
product_blends ()
resources (dict[str, new_modeling_toolkit.core.linkage.ResourceToPollutant])
transportations ()
tx_paths (dict[str, new_modeling_toolkit.core.linkage.TransmissionPathToPollutant])
unit (pint.registry.Unit)
zones ()
- field GWP: float = 1
This input defines the CO2-equivalent global warming potential of this pollutant.
- Constraints:
units = unitless
excel_short_title = Global Warming Potential
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field annual_price: NumericTimeseries | None = None
- Constraints:
category = FieldCategory.OPERATIONS
units = dollar / metric_ton
excel_short_title = Annual Price
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field availability: NumericTimeseries | None = None
This input sets the maximum potential for this commodity product. If the commodity product is used in RESOLVE, consumption of this product will never exceed the availability in a given year.
- Constraints:
category = FieldCategory.OPERATIONS
units = metric_ton
excel_short_title = Availability
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field candidate_fuels: dict[str, CandidateFuelToPollutant] = {}
- field ccs_plants: dict[str, Linkage] = {}
- field emissions_policies: dict[str, EmissionsContribution] = {}
- field negative_emissions_technologies: dict[str, Linkage] = {}
- field non_energy_subsectors: dict[str, Linkage] = {}
- field policies: dict[str, Linkage] = {}
- field price_per_unit: NumericTimeseries | None = None
- Constraints:
category = FieldCategory.OPERATIONS
units = dollar / metric_ton
excel_short_title = Price
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field resources: dict[str, ResourceToPollutant] = {}
- field tx_paths: dict[str, TransmissionPathToPollutant] = {}
- calc_emissions(linkage: CandidateFuelToPollutant, energy_demand: Series) None
Call functions to calculate net, gross, and upstream emissions for pollutant type.
- Parameters:
linkage β Linkage object for CandidateFuelToPollutant
energy_demand β pd.Series of energy demand for the linked CandidateFuel
Returns: Emissions results are saved on the linkage directly for later access/aggregation
- calc_gross_emissions(linkage: CandidateFuelToPollutant, energy_demand: Series) [<class 'pandas.core.series.Series'>, <class 'pandas.core.series.Series'>]
Calculate gross emissions
- Parameters:
linkage β Linkage object for CandidateFuelToPollutant
energy_demand β pd.Series of energy demand for the linked CandidateFuel
Returns: tuple(pd.Series of emissions, pd.Series of emissions in CO2e)
- calc_net_emissions(linkage: CandidateFuelToPollutant, energy_demand: Series) [<class 'pandas.core.series.Series'>, <class 'pandas.core.series.Series'>]
Calculate net emissions
- Parameters:
linkage β Linkage object for CandidateFuelToPollutant
energy_demand β pd.Series of energy demand for the linked CandidateFuel
Returns: tuple(pd.Series of emissions, pd.Series of emissions in CO2e)
- calc_upstream_emissions(linkage: CandidateFuelToPollutant, energy_demand: Series) [<class 'pandas.core.series.Series'>, <class 'pandas.core.series.Series'>]
Calculate upstream emissions
- Parameters:
linkage β Linkage object for CandidateFuelToPollutant
energy_demand β pd.Series of energy demand for the linked CandidateFuel
Returns: tuple(pd.Series of emissions, pd.Series of emissions in CO2e)
- class Reserve
Bases:
Component
- Fields:
custom_constraints (dict[str, new_modeling_toolkit.core.three_way_linkage.CustomConstraintLinkage])
direction (new_modeling_toolkit.system.electric.reserve.ReserveDirection)
loads (dict[str, new_modeling_toolkit.core.linkage.LoadToReserve])
requirement (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries)
resources (dict[str, new_modeling_toolkit.core.linkage.ResourceToReserve])
zones (dict[str, new_modeling_toolkit.core.linkage.ReserveToZone])
- 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 loads: dict[str, LoadToReserve] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = from
default_exclude = False
- 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.
- class ResourceGroup
Bases:
Component
- Fields:
category (new_modeling_toolkit.system.electric.resource_group.ResourceGroupCategory | None)
flexible_resources (dict[str, new_modeling_toolkit.core.linkage.Linkage])
hybrid_variable_resources (dict[str, new_modeling_toolkit.core.linkage.Linkage])
hydro_resources (dict[str, new_modeling_toolkit.core.linkage.Linkage])
resources (dict[str, new_modeling_toolkit.core.linkage.Linkage])
shed_dr_resources (dict[str, new_modeling_toolkit.core.linkage.Linkage])
storage_resources (dict[str, new_modeling_toolkit.core.linkage.Linkage])
thermal_resources (dict[str, new_modeling_toolkit.core.linkage.Linkage])
variable_resources (dict[str, new_modeling_toolkit.core.linkage.Linkage])
- field category: ResourceGroupCategory | None = None
[RECAP only]. string. Category of all resources in the group. Must be linked to a ResourceGroup. Used to upsample resources and simulate outages in RECAP.
- field fixed_annual_shape: bool | None = False
[RECAP only]. TRUE/FALSE. boolean. Whether or not resources in this group have a fixed annual shape. Typically used when you do not want a resource to got through RECAPβs day draw algorithm.
- field flexible_resources: dict[str, Linkage] = {}
- field hybrid_variable_resources: dict[str, Linkage] = {}
- field hydro_resources: dict[str, Linkage] = {}
- field resources: dict[str, Linkage] = {}
- field shed_dr_resources: dict[str, Linkage] = {}
- field storage_resources: dict[str, Linkage] = {}
- field thermal_resources: dict[str, Linkage] = {}
- field variable_resources: dict[str, Linkage] = {}
- draw_days_by_group(load_calendar, model_year, day_window_variable_draws, draw_random_seed)
Randomly draw the days for resource groups with a category of βvariableβ. Default probability function is normal multivariate :returns:
- day}: i is the datetimeindex of the full load profile,
group is the variable profile group, and day is a datetime.datetime representing the random day draw for that variable profile group
- Return type:
dict {(i,group)
- get_aggregated_generation_profile(model_year) Series
- class Sector
Bases:
Component
This class defines a Sector object and its methods.
- Fields:
attr_path (Optional[Union[str, pathlib.Path]])
building_shell_subsectors (Dict[str, new_modeling_toolkit.core.linkage.Linkage] | None)
class_name (str | None)
energy_demand_subsectors (dict[str, new_modeling_toolkit.core.linkage.Linkage])
include (Annotated[bool, Metadata(category=FieldCategory.BUILD)])
name (Union[str, tuple])
negative_emissions_technologies (dict[str, new_modeling_toolkit.core.linkage.Linkage])
non_energy_subsectors (dict[str, new_modeling_toolkit.core.linkage.Linkage])
stock_rollover_subsectors (dict[str, new_modeling_toolkit.core.linkage.Linkage])
- 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 building_shell_subsectors: Dict[str, Linkage] | None = None
- field energy_demand_subsectors: dict[str, Linkage] = {}
- 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 negative_emissions_technologies: dict[str, Linkage] = {}
- field non_energy_subsectors: dict[str, Linkage] = {}
- field sector_candidate_fuel_blending: dict[tuple[str, str] | str, ThreeWayLinkage] | None = None
- field stock_rollover_subsectors: dict[str, Linkage] = {}
- class Sequestration
Bases:
Plant
- Fields:
annual_energy_policies ()
annualized_capital_cost ()
annualized_fixed_om_cost ()
asset_groups ()
attr_path ()
build_year ()
caiso_tx_constraints ()
can_build_new ()
can_retire ()
class_name ()
cumulative_retired_capacity ()
custom_constraints ()
elcc_surfaces ()
emissions_policies ()
erm_policies ()
hourly_energy_policies ()
include ()
input_zones ()
integer_build_increment ()
max_output_profile ()
mean_time_to_repair ()
min_operational_capacity ()
min_output_profile ()
name ()
operational_capacity ()
output_zones ()
physical_lifetime ()
planned_capacity ()
potential ()
primary_product ()
prm_policies ()
processes ()
production_tax_credit ()
ptc_term ()
ramp_down_limit ()
ramp_up_limit ()
random_seed ()
retired_capacity ()
selected_capacity ()
stochastic_outage_rate ()
variable_cost ()
vintage_parent_group ()
zones ()
- revalidate()
Abstract method to run additional validations after Linkage.announce_linkage_to_instances.
- class ShedDrResource
Bases:
UnitCommitmentResource
- Fields:
- field max_annual_calls: NumericTimeseries | None = None
Annual number of allowable calls per individual unit for a shed DR resource.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field max_call_duration: int | None = None
Maximum duration of a single shed demand response event call [hrs].
- Constraints:
gt = 0
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field max_daily_calls: NumericTimeseries | None = None
Daily number of allowable calls per individual unit for a shed DR resource.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field max_monthly_calls: NumericTimeseries | None = None
Monthly number of allowable calls per individual unit for a shed DR resource.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- class SolarResource
Bases:
VariableResource
- Fields:
allow_inter_period_sharing ()
annual_energy_policies ()
annualized_capital_cost ()
annualized_fixed_om_cost ()
asset_groups ()
attr_path ()
build_year ()
caiso_tx_constraints ()
can_build_new ()
can_retire ()
class_name ()
cumulative_retired_capacity ()
curtailable ()
curtailment_cost ()
custom_constraints ()
elcc_surfaces ()
emissions_policies ()
energy_budget_annual ()
energy_budget_daily ()
energy_budget_monthly ()
erm_policies ()
hourly_energy_policies ()
include ()
integer_build_increment ()
mean_time_to_repair ()
min_operational_capacity ()
name ()
operational_capacity ()
outage_distributions ()
outage_profile ()
outage_profile__type ()
physical_lifetime ()
planned_capacity ()
potential ()
power_output_max ()
power_output_max__type ()
power_output_min ()
power_output_min__type ()
prm_policies ()
production_tax_credit ()
ptc_term ()
ramp_rate_1_hour ()
ramp_rate_2_hour ()
ramp_rate_3_hour ()
ramp_rate_4_hour ()
random_seed ()
reserves ()
resource_groups ()
retired_capacity ()
selected_capacity ()
stochastic_outage_rate ()
variable_cost_power_output ()
vintage_parent_group ()
zones ()
- class SolarResourceGroup
Bases:
VariableResourceGroup
,SolarResource
- Fields:
aggregate_operations ()
allow_inter_period_sharing ()
annual_energy_policies ()
annualized_capital_cost ()
annualized_fixed_om_cost ()
asset_groups ()
assets ()
attr_path ()
build_year ()
caiso_tx_constraints ()
can_build_new ()
can_retire ()
class_name ()
cumulative_potential ()
cumulative_retired_capacity ()
curtailable ()
curtailment_cost ()
custom_constraints ()
elcc_surfaces ()
emissions_policies ()
energy_budget_annual ()
energy_budget_daily ()
energy_budget_monthly ()
erm_policies ()
hourly_energy_policies ()
include ()
integer_build_increment ()
mean_time_to_repair ()
min_cumulative_new_build ()
min_operational_capacity ()
name ()
operational_capacity ()
outage_distributions ()
outage_profile ()
outage_profile__type ()
physical_lifetime ()
planned_capacity ()
potential ()
power_output_max ()
power_output_max__type ()
power_output_min ()
power_output_min__type ()
prm_policies ()
production_tax_credit ()
ptc_term ()
ramp_rate_1_hour ()
ramp_rate_2_hour ()
ramp_rate_3_hour ()
ramp_rate_4_hour ()
random_seed ()
reserves ()
resource_groups ()
retired_capacity ()
selected_capacity ()
stochastic_outage_rate ()
variable_cost_power_output ()
vintage_parent_group ()
vintages_to_construct ()
zones ()
- class StorageResource
Bases:
GenericResource
Resource with storage capacity.
Adds state-of-charge tracking.
It feels like BatteryResource could be composed of a GenericResource + Asset (that represents the storage costs), but need to think about this more before implementing.
- Fields:
annualized_storage_fixed_om_cost (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries)
charging_efficiency (new_modeling_toolkit.core.temporal.timeseries.FractionalTimeseries)
charging_efficiency__type (new_modeling_toolkit.core.temporal.timeseries.TimeseriesType | None)
discharging_efficiency (new_modeling_toolkit.core.temporal.timeseries.FractionalTimeseries)
discharging_efficiency__type (new_modeling_toolkit.core.temporal.timeseries.TimeseriesType | None)
power_input_max (new_modeling_toolkit.core.temporal.timeseries.FractionalTimeseries)
power_input_max__type (new_modeling_toolkit.core.temporal.timeseries.TimeseriesType | None)
power_input_min (new_modeling_toolkit.core.temporal.timeseries.FractionalTimeseries)
power_input_min__type (new_modeling_toolkit.core.temporal.timeseries.TimeseriesType | None)
retired_storage_capacity (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries | None)
variable_cost_power_input (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries)
- field annualized_storage_capital_cost: float = 0.0 (alias 'new_storage_annual_fixed_cost_dollars_per_kwh_yr_by_vintage')
$/kWh-yr. For new storage capacity, the annualized fixed cost of investment. This is an annualized version of an overnight cost that could include financing costs ($/kWh-year).
- Constraints:
units = dollar / kiloWh_year
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field annualized_storage_fixed_om_cost: NumericTimeseries [Optional] (alias 'new_storage_capacity_fixed_om_by_vintage')
$/kWh-yr. For the planned portion of the resourceβs storage capacity, the ongoing fixed O&M cost
- Constraints:
units = dollar / kiloWh_year
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field charging_efficiency: FractionalTimeseries [Optional]
[RESOLVE, RECAP]. % of Charging MW. Efficiency losses associated with charging (increasing load), typically expressed as a % of nameplate unless charging power specified to increase storage βstate of chargeβ.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field charging_efficiency__type: TimeseriesType | None = None
Whether the charging_efficiency profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field cumulative_retired_storage_capacity: NumericTimeseries | None = None
- field discharging_efficiency: FractionalTimeseries [Optional]
[RESOLVE, RECAP]. % of Discharging MW, Efficiency losses associated with discharging (providing power), typically expressed as a % of nameplate unless charging power specified, taking energy out of storage βstate of chargeβ.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field discharging_efficiency__type: TimeseriesType | None = None
Whether the discharging_efficiency profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field duration: float [Required] (alias 'storage_duration')
[RESOLVE, RECAP]. Hours of operational time the battery can operate at a specified power level before it runs out of energy. Required when resource is an operational group or does not belong to one.
- Constraints:
ge = 0
category = FieldCategory.OPERATIONS
units = hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = False
default_exclude = False
- field duration_constraint: StorageDurationConstraint = StorageDurationConstraint.FIXED
These three attributes are outputs, not inputs. They are initialized to None and are updated to their chosen optimal values after the RESOLVE model is solved. The attributes are used to give build and retirement decisions to a model run in production simulation mode.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field operational_storage_capacity: NumericTimeseries | None = None
- field parasitic_loss: float = 0
[Storage] Hourly state of charge losses.
- Constraints:
ge = 0
le = 1
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_input_max: FractionalTimeseries [Optional] (alias 'increase_load_potential_profile')
Fixed shape of resourceβs potential power draw (e.g. flat shape for storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units = unitless
excel_short_title = Max Input Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_input_max__type: TimeseriesType | None = None
Whether the power_input_max profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_input_min: FractionalTimeseries [Optional]
Fixed shape of resourceβs potential power draw (e.g. flat shape for storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units = unitless
excel_short_title = Min Input Profile
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field power_input_min__type: TimeseriesType | None = None
Whether the power_input_min profile data is of type βweather yearβ, βmodeled yearβ, βmonth-hourβ, βseason-hourβ, or βmonthlyβ
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field retired_storage_capacity: NumericTimeseries | None = None
- field state_of_charge_min: float = 0
[Storage] Minimum state-of-charge at any given time.
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field variable_cost_power_input: NumericTimeseries [Optional] (alias 'variable_cost_increase_load')
Variable O&M cost per MWh generated.
- Constraints:
category = FieldCategory.OPERATIONS
units = dollar / megawatt_hour
excel_short_title = VO&M In
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- check_if_operationally_equal(other)
Check is this Asset is βoperationally equivalentβ to another Asset.
This check is used when automatically grouping resources together in RESOLVE for the construction of operational constraints. See AssetGroup for more information.
Operational equivalence is defined by two categories. First, all the βoperational attributesβ of the Assets (which are defined in a class variable) must be equal. Any attribute whose value may impact the optimal operational decisions for the assets have to be equal. For example, they must have equal power_output_max profiles, among other things. Second, they must have equivalent βoperational linkagesβ - see check_operational_linkages_are_equal for more information.
- Parameters:
other β the Resource to compare to
check_linkages β whether linkages should be considered in determining operational equality
fields_to_check β an optional list of a subset of fields to check
- Returns:
whether the two Resources are operationally equal
- Return type:
bool
- clear_calculated_properties()
Clear the property cache so scaled profiles are recalculated after rescaling
- revalidate()
Abstract method to run additional validations after Linkage.announce_linkage_to_instances.
- save_cumulative_retired_storage_capacity()
Save the resulting retired storage capacity after the RESOLVE model has been solved.
- save_operational_storage_capacity()
Save the resulting operational storage capacity after the RESOLVE model has been solved.
- save_retired_storage_capacity()
Save the resulting retired storage capacity after the RESOLVE model has been solved.
- save_selected_storage_capacity()
Save the resulting selected storage capacity after the RESOLVE model has been solved.
- property imax_profile: Series
- property imin_profile: Series
- property planned_storage_capacity: Series
This property is for storage only now.
- property scaled_SOC_max_profile: Dict[int, Series]
This property is for storage only now.
- property scaled_imax_profile: Dict[int, Series]
- property scaled_imin_profile: Dict[int, Series]
- class StorageResourceGroup
Bases:
GenericResourceGroup
,StorageResource
- Fields:
- field annualized_storage_capital_cost: NumericTimeseries [Optional]
- field annualized_storage_fixed_om_cost: NumericTimeseries [Optional]
- field duration: float | None = None (alias 'storage_duration')
[RESOLVE, RECAP]. Hours of operational time of the battery can operate at a specified power level before it runs out of energy. Required when resource is an operational group or does not belong to one.
- Constraints:
ge = 0
category = FieldCategory.OPERATIONS
units = hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = False
default_exclude = False
- field power_input_max: FractionalTimeseries [Optional] (alias 'increase_load_potential_profile')
Fixed shape of resourceβs potential power draw (e.g. flat shape for storage resources). Used in conjunction with
new_modeling_toolkit.common.resource.Resource.curtailable
.- Constraints:
category = FieldCategory.OPERATIONS
units = unitless
excel_short_title = Max Input Profile
warning_bounds = (None, None)
show_year_headers = True
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.
- class ThermalResource
Bases:
GenericResource
Fuel-burning resource.
- field candidate_fuels: dict[str, CandidateFuelToResource] = {}
String Input. This input links a specified candidate_fuels to this ThermalResource . (e.g. Natural_Gas to gas_CCGT).
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = from
default_exclude = False
- field fuel_burn_slope: float | None = None (alias 'average_heat_rate')
Fuel burn slope (MMBTU/MWh). Aka average heat rate. The average heat rate = average fuel consumption per unit of output over a certain range of output levels. It is calculated by dividing the total fuel consumption by the total output over that range (a(x) = f(x) / x). It provides a measure of the overall efficiency of the power generation system over a given period of time or output range. Required when resource is an operational group or does not belong to one.
- Constraints:
ge = 0
category = FieldCategory.OPERATIONS
units = MMBtu / megawatt_hour
excel_short_title =
warning_bounds = (0, 17)
show_year_headers = True
default_exclude = False
- class ThermalResourceGroup
Bases:
GenericResourceGroup
,ThermalResource
- Fields:
- class ThermalUnitCommitmentResource
Bases:
ThermalResource
,UnitCommitmentResource
- Fields:
- field addition_to_load: float = 0
Synchronous condenser addition to load. Multiplier to commited capacity. Default 0.
- Constraints:
ge = 0
- field fuel_burn_intercept: float | None = None
Fuel burn intercept per generating unit. Represents the minimum amount of fuel used when a unit is on. Required when resource is an operational group or does not belong to one.
- Constraints:
category = FieldCategory.OPERATIONS
units = MMBtu / hour
excel_short_title =
warning_bounds = (0, 1000)
show_year_headers = True
default_exclude = False
- field fuel_burn_slope: float | None = None (alias 'marginal_heat_rate')
The marginal heat rate represents the rate of change of fuel consumption with respect to the level of output. Mathematically, it is the derivative of the heat input function with respect to output level (m(x) = Ξ΄y / Ξ΄x). It tells us how much additional fuel is required to produce one more unit of output (megawatt hour). Required when resource is an operational group or does not belong to one.
- Constraints:
ge = 0
category = FieldCategory.OPERATIONS
units = MMBtu / megawatt_hour
excel_short_title =
warning_bounds = (0, 17)
show_year_headers = True
default_exclude = False
- class TxPath
Bases:
Asset
- Fields:
forward_rating_profile (new_modeling_toolkit.core.temporal.timeseries.FractionalTimeseries | None)
hurdle_rate_forward_direction (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries)
hurdle_rate_reverse_direction (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries)
pollutants (dict[str, new_modeling_toolkit.core.linkage.Linkage])
reverse_rating_profile (new_modeling_toolkit.core.temporal.timeseries.FractionalTimeseries | None)
zones (dict[str, new_modeling_toolkit.core.linkage.ZoneToTransmissionPath])
- field forward_rating_profile: FractionalTimeseries | None [Optional]
Normalized fixed shape of TXPathβs potential forward rating
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Forward Rating
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field hurdle_rate_forward_direction: NumericTimeseries [Optional]
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Forward Hurdle
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field hurdle_rate_reverse_direction: NumericTimeseries [Optional]
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Reverse Hurdle
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field pollutants: dict[str, Linkage] = {}
- field reverse_rating_profile: FractionalTimeseries | None [Optional]
Normalized fixed shape of TXPathβs potential reverse rating
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title = Reverse Rating
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field zones: dict[str, ZoneToTransmissionPath] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = from
default_exclude = False
- revalidate()
Abstract method to run additional validations after Linkage.announce_linkage_to_instances.
- class VariableResource
Bases:
GenericResource
- Fields:
allow_inter_period_sharing ()
annual_energy_policies ()
annualized_capital_cost ()
annualized_fixed_om_cost ()
asset_groups ()
attr_path ()
build_year ()
caiso_tx_constraints ()
can_build_new ()
can_retire ()
class_name ()
cumulative_retired_capacity ()
curtailable (bool)
curtailment_cost (new_modeling_toolkit.core.temporal.timeseries.NumericTimeseries)
custom_constraints ()
elcc_surfaces ()
emissions_policies ()
energy_budget_annual ()
energy_budget_daily ()
energy_budget_monthly ()
erm_policies ()
hourly_energy_policies ()
include ()
integer_build_increment ()
mean_time_to_repair ()
min_operational_capacity ()
name ()
operational_capacity ()
outage_distributions ()
outage_profile ()
outage_profile__type ()
physical_lifetime ()
planned_capacity ()
potential ()
power_output_max ()
power_output_max__type ()
power_output_min ()
power_output_min__type ()
prm_policies ()
production_tax_credit ()
ptc_term ()
ramp_rate_1_hour ()
ramp_rate_2_hour ()
ramp_rate_3_hour ()
ramp_rate_4_hour ()
random_seed ()
reserves ()
resource_groups ()
retired_capacity ()
selected_capacity ()
stochastic_outage_rate ()
variable_cost_power_output ()
vintage_parent_group ()
zones ()
- field curtailable: bool = True
TRUE/FALSE. boolean. Whether resourceβs power output can be curtailed relative to
new_modeling_toolkit.common.resource.Resource.potential_provide_power_profile
.- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field curtailment_cost: NumericTimeseries [Optional]
$/MWh. float. Cost of curtailment - the exogeneously assumed costat which different contract zones would be willing to curtail theirvariable renewable generation
- Constraints:
category = FieldCategory.OPERATIONS
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- get_sampled_profile_cf(profile: Timeseries, temporal_settings: TemporalSettings) float
Return capacity factor of given profile based on dispatch windows weights
- classmethod scale_resource_profile(profile: Timeseries, scalar: float) Timeseries
Update input timeseries given scalar
- class VariableResourceGroup
Bases:
GenericResourceGroup
,VariableResource
- Fields:
aggregate_operations ()
allow_inter_period_sharing ()
annual_energy_policies ()
annualized_capital_cost ()
annualized_fixed_om_cost ()
asset_groups ()
assets ()
attr_path ()
build_year ()
caiso_tx_constraints ()
can_build_new ()
can_retire ()
class_name ()
cumulative_potential ()
cumulative_retired_capacity ()
curtailable ()
curtailment_cost ()
custom_constraints ()
elcc_surfaces ()
emissions_policies ()
energy_budget_annual ()
energy_budget_daily ()
energy_budget_monthly ()
erm_policies ()
hourly_energy_policies ()
include ()
integer_build_increment ()
mean_time_to_repair ()
min_cumulative_new_build ()
min_operational_capacity ()
name ()
operational_capacity ()
outage_distributions ()
outage_profile ()
outage_profile__type ()
physical_lifetime ()
planned_capacity ()
potential ()
power_output_max ()
power_output_max__type ()
power_output_min ()
power_output_min__type ()
prm_policies ()
production_tax_credit ()
ptc_term ()
ramp_rate_1_hour ()
ramp_rate_2_hour ()
ramp_rate_3_hour ()
ramp_rate_4_hour ()
random_seed ()
reserves ()
resource_groups ()
retired_capacity ()
selected_capacity ()
stochastic_outage_rate ()
variable_cost_power_output ()
vintage_parent_group ()
vintages_to_construct ()
zones ()
- class WindResource
Bases:
VariableResource
- Fields:
allow_inter_period_sharing ()
annual_energy_policies ()
annualized_capital_cost ()
annualized_fixed_om_cost ()
asset_groups ()
attr_path ()
build_year ()
caiso_tx_constraints ()
can_build_new ()
can_retire ()
class_name ()
cumulative_retired_capacity ()
curtailable ()
curtailment_cost ()
custom_constraints ()
elcc_surfaces ()
emissions_policies ()
energy_budget_annual ()
energy_budget_daily ()
energy_budget_monthly ()
erm_policies ()
hourly_energy_policies ()
include ()
integer_build_increment ()
mean_time_to_repair ()
min_operational_capacity ()
name ()
operational_capacity ()
outage_distributions ()
outage_profile ()
outage_profile__type ()
physical_lifetime ()
planned_capacity ()
potential ()
power_output_max ()
power_output_max__type ()
power_output_min ()
power_output_min__type ()
prm_policies ()
production_tax_credit ()
ptc_term ()
ramp_rate_1_hour ()
ramp_rate_2_hour ()
ramp_rate_3_hour ()
ramp_rate_4_hour ()
random_seed ()
reserves ()
resource_groups ()
retired_capacity ()
selected_capacity ()
stochastic_outage_rate ()
variable_cost_power_output ()
vintage_parent_group ()
zones ()
- classmethod scale_resource_profile(profile: Timeseries, scalar: float) Timeseries
Wind power scales cubicly with wind speed
- class WindResourceGroup
Bases:
VariableResourceGroup
,WindResource
- Fields:
aggregate_operations ()
allow_inter_period_sharing ()
annual_energy_policies ()
annualized_capital_cost ()
annualized_fixed_om_cost ()
asset_groups ()
assets ()
attr_path ()
build_year ()
caiso_tx_constraints ()
can_build_new ()
can_retire ()
class_name ()
cumulative_potential ()
cumulative_retired_capacity ()
curtailable ()
curtailment_cost ()
custom_constraints ()
elcc_surfaces ()
emissions_policies ()
energy_budget_annual ()
energy_budget_daily ()
energy_budget_monthly ()
erm_policies ()
hourly_energy_policies ()
include ()
integer_build_increment ()
mean_time_to_repair ()
min_cumulative_new_build ()
min_operational_capacity ()
name ()
operational_capacity ()
outage_distributions ()
outage_profile ()
outage_profile__type ()
physical_lifetime ()
planned_capacity ()
potential ()
power_output_max ()
power_output_max__type ()
power_output_min ()
power_output_min__type ()
prm_policies ()
production_tax_credit ()
ptc_term ()
ramp_rate_1_hour ()
ramp_rate_2_hour ()
ramp_rate_3_hour ()
ramp_rate_4_hour ()
random_seed ()
reserves ()
resource_groups ()
retired_capacity ()
selected_capacity ()
stochastic_outage_rate ()
variable_cost_power_output ()
vintage_parent_group ()
vintages_to_construct ()
zones ()
- class Zone
Bases:
Component
- Fields:
annual_energy_policies (dict[str, new_modeling_toolkit.core.linkage.AllToPolicy])
assets (dict[str, new_modeling_toolkit.core.linkage.AssetToZone])
biomass_resources (dict[str, new_modeling_toolkit.core.linkage.AssetToZone])
electrofuel_resources (dict[str, new_modeling_toolkit.core.linkage.AssetToZone])
emissions_policies (dict[str, new_modeling_toolkit.core.linkage.AllToPolicy])
energy_demand_subsectors (dict[str, new_modeling_toolkit.core.linkage.Linkage])
erm_policies (dict[str, new_modeling_toolkit.core.linkage.AllToPolicy])
final_fuel_demands (dict[str, new_modeling_toolkit.core.linkage.Linkage])
flexible_resources (dict[str, new_modeling_toolkit.core.linkage.AssetToZone])
hourly_energy_policies (dict[str, new_modeling_toolkit.core.linkage.AllToPolicy])
hydro_resources (dict[str, new_modeling_toolkit.core.linkage.AssetToZone])
loads (dict[str, new_modeling_toolkit.core.linkage.LoadToZone])
non_energy_subsectors (dict[str, new_modeling_toolkit.core.linkage.Linkage])
prm_policies (dict[str, new_modeling_toolkit.core.linkage.AllToPolicy])
products (dict[str, new_modeling_toolkit.system.generics.generic_linkages.ZoneToProduct])
reserves (dict[str, new_modeling_toolkit.core.linkage.ReserveToZone])
resources (dict[str, new_modeling_toolkit.core.linkage.AssetToZone])
shed_dr_resources (dict[str, new_modeling_toolkit.core.linkage.AssetToZone])
stock_rollover_subsectors (dict[str, new_modeling_toolkit.core.linkage.Linkage])
storage_resources (dict[str, new_modeling_toolkit.core.linkage.AssetToZone])
thermal_resources (dict[str, new_modeling_toolkit.core.linkage.AssetToZone])
tx_paths (dict[str, new_modeling_toolkit.core.linkage.ZoneToTransmissionPath])
variable_resources (dict[str, new_modeling_toolkit.core.linkage.AssetToZone])
- field annual_energy_policies: dict[str, AllToPolicy] = {}
- field assets: dict[str, AssetToZone] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = from
default_exclude = False
- field biomass_resources: dict[str, AssetToZone] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = from
default_exclude = False
- field electrofuel_resources: dict[str, AssetToZone] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = from
default_exclude = False
- field emissions_policies: dict[str, AllToPolicy] = {}
- field energy_demand_subsectors: dict[str, Linkage] = {}
- field erm_policies: dict[str, AllToPolicy] = {}
- field final_fuel_demands: dict[str, Linkage] = {}
- field flexible_resources: dict[str, AssetToZone] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = from
default_exclude = False
- field hourly_energy_policies: dict[str, AllToPolicy] = {}
- field hydro_resources: dict[str, AssetToZone] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = from
default_exclude = False
- field loads: dict[str, LoadToZone] = {}
- field non_energy_subsectors: dict[str, Linkage] = {}
- field penalty_overgen: float = 10000
Modeled penalty for overgeneration.
- Constraints:
category = FieldCategory.OPERATIONS
units = dollar / megawatt_hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field penalty_unserved_energy: float = 10000
Modeled penalty for unserved load.
- Constraints:
category = FieldCategory.OPERATIONS
units = dollar / megawatt_hour
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
default_exclude = False
- field prm_policies: dict[str, AllToPolicy] = {}
- field reserves: dict[str, ReserveToZone] = {}
- field resources: dict[str, AssetToZone] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = from
default_exclude = False
- field shed_dr_resources: dict[str, AssetToZone] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = from
default_exclude = False
- field stock_rollover_subsectors: dict[str, Linkage] = {}
- field storage_resources: dict[str, AssetToZone] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = from
default_exclude = False
- field thermal_resources: dict[str, AssetToZone] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = from
default_exclude = False
- field tx_paths: dict[str, ZoneToTransmissionPath] = {}
- field variable_resources: dict[str, AssetToZone] = {}
- Constraints:
units =
excel_short_title =
warning_bounds = (None, None)
show_year_headers = True
linkage_order = from
default_exclude = False
- get_aggregated_load(modeled_year: int, weather_year_timestamp: Timestamp) float
Queries aggregated load in zone at given timepoint
- get_aggregated_load_profile(modeled_year) Series
Queries aggregated load profile in zone
- property annual_results_column_order
This property defines the ordering of columns in the componentβs annual results summary out of Resolve. The name of the model field or formulation_block pyomo component can be used.
- property load_instances: Dict[str, Load]
- property resource_instances: Dict[str, GenericResource]