Skip to content

Config

The config is a yaml file used to specify all the modelling settings or inputs that are not otherwise provided in the ISPyPSA input tables. Each of the settings is documented on this page and an example config file can be found here.

Paths

The paths settings specify the locations of model input and output data. Either relative or absolute paths can be used. Relative paths assume the run directory (CLI or API) is the root directory of the relative path.

paths.parsed_traces_directory

The path to the folder containing parsed demand, wind and solar traces. If set to ENV the path will be retrieved from the environment variable "PATH_TO_PARSED_TRACES".

Examples:

parsed_traces_directory: ENV

parsed_traces_directory: "path/to/traces"

paths.workbook_path

The path to the ISP workbook Excel file.

Examples:

workbook_path: "path/to/workbook"

paths.parsed_workbook_cache

The path to the workbook table cache directory.

Examples:

parsed_workbook_cache: path/to/workbook/cache

paths.run_directory

The run directory where all inputs and outputs will be stored. Subdirectories will be created automatically:

  • {run_directory}/{ispypsa_run_name}/ispypsa_inputs
  • {run_directory}/{ispypsa_run_name}/pypsa_friendly
  • {run_directory}/{ispypsa_run_name}/pypsa_friendly/capacity_expansion_timeseries
  • {run_directory}/{ispypsa_run_name}/pypsa_friendly/operational_timeseries
  • {run_directory}/{ispypsa_run_name}/outputs

Examples:

run_directory: "path/to/directory"

paths.ispypsa_run_name

The name of the ISPyPSA model run. This name is used to select the output folder within run_directory.

Examples:

ispypsa_run_name: modelling_test_run

Trace Data

trace_data.dataset_type

The type of trace dataset to download when using CLI download tasks. This setting is only used by the download_trace_data CLI task.

Options:

  • "example": Smaller dataset suitable for testing and development
  • "full": Complete dataset for production runs

Default: "example"

Examples:

dataset_type: example

trace_data.dataset_year

The year of trace dataset to download when using CLI download tasks. This setting is used by the download_trace_data CLI task and by other modelling tasks to select the correct data set from the trace data directory. Currently only 2024 is supported.

Default: 2024

Examples:

dataset_year: 2024

ISPyPSA Templating

iasr_workbook_version

The version of IASR workbook that the template inputs are generated from. The workbook version is used to retrieve IASR data which has been manually extracted (rather than via isp-workbook-parser) and packaged with ISPyPSA. Some data needs to be manually extracted because of the formatting of the IASR workbook.

Examples:

iasr_workbook_version: "6.0"

scenario

The ISP scenario for which to generate ISPyPSA inputs.

Options (descriptions lifted from the 2024 ISP):

  • "Progressive Change": Reflects slower economic growth and energy investment with economic and international factors placing industrial demands at greater risk and slower decarbonisation action beyond current commitments
  • "Step Change": Fulfils Australia's emission reduction commitments in a growing economy
  • "Green Energy Exports": Sees very strong industrial decarbonisation and low-emission energy exports

Examples:

scenario: Step Change

Financial/Economic

wacc

Weighted average cost of capital for annuitisation of generation and transmission costs, as a fraction, i.e. 0.07 is 7%.

Examples:

wacc: 0.07

discount_rate

Discount rate applied to model objective function, as a fraction, i.e. 0.05 is 5%.

Examples:

discount_rate: 0.05

Unserved Energy

Unserved energy can be allowed at each node in the network with energy demand to prevent model infeasibility.

unserved_energy.cost

Cost of unserved energy in $/MWh.

Set to 'None' to disable unserved energy generators.

Examples:

cost: 10000.0

unserved_energy.max_per_node

Maximum allowed unserved demand MW per demand network node. Defaults to 1e5 (100,000 MW). Larger values may cause problems for optimisation solvers.

Examples:

max_per_node: 100000.0

Network

network.transmission_expansion

Does the model consider the expansion of sub-region to sub-region transmission capacity.

Examples:

transmission_expansion: True

network.rez_transmission_expansion

Does the model consider the expansion of renewable energy zone transmission capacity.

Examples:

rez_transmission_expansion: True

network.annuitisation_lifetime

Years to annuitise transmission project capital costs over.

Examples:

annuitisation_lifetime: 30

network.nodes.regional_granularity

The regional granularity of the nodes in the modelled network. Only "sub_regions" is implemented and allowed currently.

Options:

  • "sub_regions": ISP sub-regions are added as network nodes (12 nodes)
  • "nem_regions": NEM regions are added as network nodes (5 nodes)
  • "single_region": A single node, the Victorian sub-region, is added as a network node (1 node)

Examples:

regional_granularity: sub_regions

network.nodes.rezs

Whether Renewable Energy Zones (REZs) are modelled as distinct nodes.

Options:

  • "discrete_nodes": REZs are added as network nodes to model REZ transmission limits
  • "attached_to_parent_node": REZ resources are attached to their parent node (sub-region or NEM region)

Examples:

rezs: discrete_nodes

network.rez_to_sub_region_transmission_default_limit

Link capacity limit for rez to node connections that have their limit's modelled through custom constraint (MW).

The export limits for some REZs are modelled via custom constraints which incorporate multiple transmission line flows and/or generator dispatch levels. For these REZs a PyPSA link object between the REZ and sub region node is still created but with a very high capacity limit such the that the custom constraint always sets the actual REZ export limit.

Examples:

rez_to_sub_region_transmission_default_limit: 1e5

Temporal

temporal.year_type

Whether the model uses financial ("fy") or calendar ("calendar") years.

Examples:

year_type: fy

temporal.range.start_year

Model begins at the start of the start year. E.g. the first time interval for a financial year model starting in 2025 would be 2024-07-01 00:30:00.

Examples:

start_year: 2025

temporal.range.end_year

Model ends at the end of the end year. E.g. the last time interval for a financial year model ending in 2028 would be 2028-07-01 00:00:00.

Examples:

end_year: 2035

temporal.capacity_expansion

The temporal settings for the capacity expansion phase of the modelling.

temporal.capacity_expansion.resolution_min

The temporal resolution in minutes. Currently, only the 30 min resolution is implemented/allowed. Value should be provided as an integer.

Examples:

resolution_min: 30

temporal.capacity_expansion.reference_year_cycle

The order in which different weather reference years are used in the model. If the number of reference years is less than the number of model years the reference years will be reused in the order provided. For example, if there are 5 model years and 2 references years, [A, B], are given in reference_year_cycle, the reference years are used in the order [A, B, A, B, A].

Examples:

reference_year_cycle: [2018, 2021, 2023]

temporal.capacity_expansion.investment_periods

List of investment period start years. An investment period runs from the beginning of the year (financial or calendar) until the next the period begins or the model end year is reached.

Examples:

investment_periods: [2025, 2030]

temporal.capacity_expansion.aggregation.representative_weeks

Representative weeks to use instead of full yearly temporal representation.

Options:

  • "None": Full yearly temporal representation is used or another aggregation.
  • list[int]: a list of integers specifying weeks of year to use as representative. Weeks of year are defined as full weeks (Monday-Sunday) falling within the year. For example, if the list is "[1]" the model will only use the first full week of each modelled year.

Examples:

representative_weeks: [12, 25, 40]

temporal.capacity_expansion.aggregation.named_representative_weeks

Named representative weeks to use instead of full yearly temporal representation.

Options:

  • "None": Full yearly temporal representation is used or another aggregation.
  • list[str]: A list of strings from the following options: peak-demand, residual-peak-demand, minimum-demand, residual-minimum-demand, peak-consumption, residual-peak-consumption. Only weeks which fall fully within a model calendar or financial year are considered for selection.

Examples:

named_representative_weeks: [residual-peak-demand, minimum-demand]

temporal.operational

The temporal settings for the operational phase of the modelling.

temporal.operational.resolution_min

The temporal resolution in minutes. Currently, only the 30 min resolution is implemented/allowed. Value should be provided as an integer.

Examples:

resolution_min: 30

temporal.operational.reference_year_cycle

The order in which different weather reference years are used in the model. If the number of reference years is less than the number of model years the reference years will be reused in the order provided. For example, if there are 5 model years and 2 references years, [A, B], are given in reference_year_cycle, the reference years are used in the order [A, B, A, B, A].

Examples:

reference_year_cycle: [2018, 2021, 2023]

temporal.operational.horizon

The number of time intervals to optimise over per iteration of the operational rolling horizon optimisation.

Examples:

horizon: 96

temporal.operational.overlap

The number of time intervals to overlap between the current and previous iterations of the rolling horizon optimisation.

If a horizon of 96 (48*2) and overlap of 48 was used, with a 30 min resolution, this would be equivalent to daily rolling horizon with a one day look ahead.

Examples:

overlap: 48

temporal.operational.aggregation.representative_weeks

Representative weeks to use instead of full yearly temporal representation.

Options:

  • "None": Full yearly temporal representation is used or another aggregation.
  • list[int]: a list of integers specifying weeks of year to use as representative. Weeks of year are defined as full weeks (Monday-Sunday) falling within the year. For example, if the list is "[1]" the model will only use the first full week of each modelled year.

Examples:

representative_weeks: [12, 25, 40]

temporal.operational.aggregation.named_representative_weeks

Named representative weeks to use instead of full yearly temporal representation.

Options:

  • "None": Full yearly temporal representation is used or another aggregation.
  • list[str]: A list of strings from the following options: peak-demand, residual-peak-demand, minimum-demand, residual-minimum-demand, peak-consumption, residual-peak-consumption. Only weeks which fall fully within a model calendar or financial year are considered for selection.

Examples:

named_representative_weeks: [residual-peak-demand, minimum-demand]

Solver

solver

External solver to use.

Options (refer to https://pypsa.readthedocs.io/en/latest/getting-started/installation.html):

Free, and by default, installed with ISPyPSA:

  • "highs"

Free, but must be installed by the user:

  • "cbc"
  • "glpk"
  • "scip"

Not free and must be installed by the user:

  • "cplex"
  • "gurobi"
  • "xpress"
  • "mosek"
  • "copt"
  • "mindopt"
  • "pips"

Examples:

solver: highs

Plotting

create_plots

Whether to automatically generate plots and a results website after the capacity expansion and operational models complete.

Options:

  • true: Enable automatic plot generation after model runs
  • false: Disable automatic plot generation (plots can still be generated separately using the create_capacity_expansion_plots or create_operational_plots CLI tasks)

Default: false

Examples:

create_plots: true

Can also be overridden on the command line:

ispypsa config=config.yaml create_plots=True create_and_run_capacity_expansion_model

Filtering

filter_by_nem_regions

Filter the model to only include specified NEM regions. If set, all NEM regions not in this list will be excluded from the model. This is useful for running smaller, faster models focused on specific regions.

Cannot be used together with filter_by_isp_sub_regions.

Default: None (all regions included)

Examples:

# Single region
filter_by_nem_regions: ["NSW"]

# Multiple regions
filter_by_nem_regions: ["NSW", "VIC", "QLD"]

filter_by_isp_sub_regions

Filter the model to only include specified ISP sub-regions. If set, all sub-regions not in this list will be excluded from the model. This provides finer-grained control than filter_by_nem_regions.

Cannot be used together with filter_by_nem_regions.

Default: None (all sub-regions included)

Examples:

# Single sub-region
filter_by_isp_sub_regions: ["CNSW"]

# Multiple sub-regions
filter_by_isp_sub_regions: ["CNSW", "NNSW", "SNW"]