PLEXOS vs IASR workbook reconciliation (custom constraints LHS)
Notes on how we reconciled the 7.5 IASR workbook ("Build limits - REZs" tab) with
the PLEXOS constraint formulation in data/plexos/ while building
manually_extracted_template_tables/7.5/custom_constraints_lhs.csv.
The workbook expresses constraints conceptually (e.g. 0.14 * WD area); PLEXOS
expresses them computationally (one row per generator, with the area coefficient).
Where the two diverge, PLEXOS is treated as the authoritative source of
constraint membership. The workbook narrative is descriptive, while PLEXOS
is the canonical formulation used to build the model. This note records the
patterns we used to map between them.
Conventions adopted across all constraints
-
PLEXOS source-of-truth tables: membership from
data/plexos/membership.csv; coefficients from
data/plexos/properties/Constraints_properties.csv. We use the
ExportGroup_<X> PLEXOS constraint as the workbook's <X> constraint
equivalent (positive-flow direction). Generators only have positive
coefficients; batteries appear with paired Generation Coefficient (positive)
and Load Coefficient (negative) — we represent each battery with one
storage_output row using the magnitude.
-
PLEXOS authoritative for membership: if PLEXOS includes a generator that
the workbook narrative omits (e.g. a generator tagged in a different REZ from
what the constraint description lists), we add it. The workbook description
appears to be illustrative rather than exhaustive.
-
REZ shorthand: rez_output, <REZ>, k represents "k times all output in
REZ ". Downstream code is expected to expand this against the workbook's
Summary Mapping (REZ ID column).
-
Generator name expansion: workbook power-station names (e.g. Loy Yang)
are expanded to per-unit IASR IDs (LYA1, LYA2, ...) per the Summary
Mapping table.
-
Generic build-option batteries: PLEXOS uses constraint-scoped names like
SEVIC1 Battery - 2h, SWQLD1 Battery - 2h, etc. The IASR workbook
represents the same generic capacity at the sub-region level, e.g.
SEV Battery - 2h. We map PLEXOS constraint-name batteries to the
workbook sub-region equivalent (SEVIC1 → SEV, SWQLD1 → SQ, MN1 → CSA,
SWV1 → WNV, NSA1 → NSA, ...). All three durations (2h/4h/8h) are
included even when PLEXOS only lists 2h and 8h coefficients — the 4h
variant is defined as a PLEXOS object, just not coefficient-tagged.
-
Lines: PLEXOS includes both sub-regional (SQ-CQ) and regional
(NSW1-QLD1) names for the same flow path. We use only the sub-regional
name to avoid duplication.
-
Skipped: PLEXOS-only synthetic objects: <Constraint>_Linear Augmentation
and <Constraint>_<Option> Generator-class entries are PLEXOS network-expansion
modelling objects, not real generators. Excluded.
Per-constraint notes (only where the call wasn't obvious)
NQ1
PLEXOS includes EMERASF1 (Emerald Solar Farm) with coefficient 1, even
though Summary Mapping tags it REZ Q4 (Isaac) — outside the workbook's
NQ1 narrative which lists Q1/Q2/Q3 only. Added per the PLEXOS-authoritative
rule.
CQ1
PLEXOS includes CSPVPS1 (Collinsville SF) and DAYDSF1 (Daydream SF),
both REZ Q10. Workbook narrative for CQ1 lists -CQ-NQ and Q4 only.
Added per PLEXOS-authoritative rule.
SQ1
PLEXOS ExportGroup_SQ1 is the union of the workbook's two SQ1 variants:
- Base SQ1 terms (
-0.5 * SQ-CQ, Q7)
- "SQ1 (after CQ-SQ Upgrades)" terms (
-0.57 * SQ-CQ, 0.15 * WD area,
0.15 * DD area, 0.15 * NSW-QLD, 0.12 * SD area, 0.27 * BPH)
PLEXOS effectively uses the union with the base RHS (1400 MW) — more
conservative than the workbook's separate-variants treatment. We kept only
the minimal base SQ1 terms in the LHS because the "after upgrades" variant
is option-conditional (RHS rises to 2500 when SQ-CQ Option 5/6 is built).
The workbook's option-conditional structure can't be represented in a flat
RHS table — would need a separate constraint (SQ1_after_CQ-SQ_Upgrades)
with its own LHS row set if we want to model both states.
NSA1
PLEXOS includes:
Cultana Solar Farm (Anticipated Solar SA category) and SA Hydrogen Turbine
(Policy Projects) — both mentioned in the workbook's S5 West description
but not findable by short IASR ID in Summary Mapping. The PLEXOS object
names are themselves the IASR IDs.
WPWF (Wattle Point Wind Farm) — REZ S4 (Yorke Peninsula), not in NSA1's
workbook-listed REZs (S5/S7/S8). Added per PLEXOS-authoritative rule
(similar pattern to NQ1/EMERASF1).
NSA1 Battery - 2h/8h → mapped to NSA Battery - 2h/4h/8h.
SEVIC1
PLEXOS extras: Marinus, T-V-MNSP1 (regional duplicates of TAS-SEV link),
SEVIC1 Battery - 2h/8h. Lines ignored as duplicates. Batteries mapped to
SEV Battery - 2h/4h/8h.
SWV1
PLEXOS extras: V-SA (regional duplicate of WNV-SESA), SWV1 Battery - 2h/8h.
Line ignored. Batteries mapped to WNV Battery - 2h/4h/8h (SWV1 covers V5/V9
in WNV sub-region).
MN1
PLEXOS extras: EnergyConnect (regional duplicate of SNSW-CSA — Project
EnergyConnect is the SNSW-CSA interconnector), MN1 Battery - 2h/8h.
Line ignored. Batteries mapped to CSA Battery - 2h/4h/8h.
SWNSW2
PLEXOS extras: EnergyConnect (regional duplicate of SNSW-CSA),
VIC1-NSW1 (regional duplicate of WNV-SNSW). Both ignored as line duplicates.
CNSW1
PLEXOS uses a different naming prefix for Dubbo sub-REZ (DN1) entities:
| Workbook IASR ID |
PLEXOS name |
DREZ_SAT_Dubbo |
DN1_SAT_Dubbo |
DREZ_WH_Dubbo |
DN1_WH_Dubbo |
DREZ Dubbo Battery - 2h/4h/8h |
DN1 Dubbo Battery - 2h/4h/8h |
These are the same entities; the workbook uses DREZ_ prefix while PLEXOS uses
the REZ ID DN1_ prefix. All are tagged REZ ID = DN1 in Summary Mapping,
so our existing rez_output, DN1, 1 row covers them via downstream expansion.
No explicit rows added for these. Downstream code interfacing with PLEXOS
needs to know the DREZ ↔ DN1 alias.
SNW1
PLEXOS name: CNSW-SNW South GPG. The workbook description for SNW1 lists
11 terms, three of which are opaque named groups (CNSW Generators, SNSWGPGSO,
CNSWGPG) without explicit membership documented in the workbook. PLEXOS has
the full membership and coefficients.
PLEXOS for this constraint also encodes time-varying coefficients (multiple
rows per entity with different date_from values). We took only the default
(no date_from) coefficient for each entity — that's the value before any
scheduled change kicks in, and it matches the workbook coefficients where the
two are directly comparable.
Workbook → PLEXOS reconciliation (default coefficients):
| Workbook term |
PLEXOS contents (default) |
-0.2 * CNSW-NNSW |
line CNSW-NNSW at -0.2 |
0.7 * SNSW-CNSW |
line SNSW-CNSW at 0.7 |
-0.33 * CNSW Demand |
CNSW Node, Load Coefficient -0.33 |
-0.03213 * SNW Load |
SNW Node, Load Coefficient -0.03213 |
0.2 * Bayswater |
BW01-BW04 at 0.2 |
0.33 * Mt Piper |
MP1, MP2 at 0.33 (within the broader 0.33 group) |
0.33 * CNSW Generators |
77 entries at 0.33 — all CNSW existing/committed gen and storage, plus REZ-tagged new entrants (N0_, N3_, N9_, DN1_, DN3_*) and CNSW-area generic build options (CNSW Battery 1h/2h/4h/8h, CNSW Pumped Hydro 10h/24h/48h, CNSW V2G, CNSW Biomass, CNSW SAT/Battery DR, PV CNSW, etc.) |
0.33 * Goulburn River Solar Farm |
Goulburn River Solar Farm + Goulburn River BESS at 0.33 (within the 0.33 group) |
0.51 * SNSWGPGSO |
Inferred — 4 WOO entries at 0.51 (WOO OCGT Small/Large, WOO CCGT, WOO CCGT with CCS). The workbook label "SNSWGPGSO" suggests SNSW gas, but PLEXOS uses Wollongong-area gas (WOO_*) which is in CNSW sub-region. Either the workbook label is a misnomer or PLEXOS includes different entities than the label implies. Lowest-confidence mapping in this constraint. |
0.51 * Tallawarra |
TALWA1, Tallawarra B at 0.51 |
0.66 * CNSWGPG |
CNSW OCGT Small/Large, CNSW CCGT, CNSW CCGT with CCS at 0.66 |
Notes:
- The workbook treats
Mt Piper, Goulburn River Solar Farm, and CNSW Generators as separate terms but they all share coefficient 0.33 in PLEXOS — they're conceptually "everything in CNSW area at 0.33". The split is workbook narrative only; PLEXOS treats them as one group.
- Total PLEXOS entries (default-coefficient): 95 LHS rows.
- Time-varying coefficients in PLEXOS (e.g. Bayswater drops from 0.2 → 0.13 over time): not represented. Worth flagging for any downstream year-aware constraint logic.
WNV1
Workbook terms: -0.81 * WNV-SNSW, 0.73 * Murray, 0.95 * Eildon,
0.81 * West Kiewa, 0.81 * McKay, 0.81 * Bogong, 0.81 * Dartmouth,
0.78 * V7.
PLEXOS reconciliation (default coefficients):
| Workbook term |
PLEXOS contents |
-0.81 * WNV-SNSW |
line VIC1-NSW1 at -0.81 (regional duplicate; renamed to WNV-SNSW) |
0.73 * Murray |
MURRAY01-MURRAY14 (14 units) at 0.73 |
0.95 * Eildon |
EILDON1, EILDON2 at 0.95 |
0.81 * West Kiewa + 0.81 * McKay + 0.81 * Bogong + 0.81 * Dartmouth |
13 units at 0.81 (WKIEWA1_1, WKIEWA1_2, WKIEWA2_1, WKIEWA2_2, MCKAY11-MCKAY16, BOGONG1, BOGONG2, DARTM1) — workbook splits into 4 named hydro stations, PLEXOS treats them as one 0.81 group |
0.78 * V7 |
20 entries at 0.78 — V7 sub-rez new entrants (V7_*_Central North VIC, V7 Battery 2h/8h) plus named V7-area gens (MOKOSF1, NUMURSF1, GLRWNSF1, WINTSF1, GLENSF1, GIRGSF, WUNUSF1, Goorambat East SF, Lancaster SF, Barnawartha SF + BESS, Pine Lodge BESS, West Mokoan SF + BESS) |
Excluded: 3 PLEXOS Purchaser entries at -0.78 (V7-to-WNV electrolyser
load — V7 to WNV Flexible Electrolyser Purchaser Domestic, V7 to WNV Flexible Electrolyser Purchaser Green Commodities, V7 in WNV Baseload for Electrolyser). Same reason as the hydrogen constraints — ISPyPSA does not
currently model hydrogen electrolyser load.
Total: 50 LHS rows.
SWNSW1
Workbook terms: 9 SW NSW area generators + 4 Broken Hill area generators
(secondary transmission limit), all at coefficient 1.
PLEXOS matches the workbook exactly — 14 entries at coefficient 1, all
existing/committed gens and BESS in the SW NSW + Broken Hill areas
(LIMOSF11, LIMOSF21, SUNRSF1, COLEASF1, FINLYSF1, DARLSF1, HILLSTN1,
DPNTB1, RESS1G, RIVNB2, BROKENH1, BHBG1, STWF1, Silver City Energy Storage).
No discrepancies. 14 LHS rows.
Hydrogen constraints (N9_Hydrogen, Q7_Hydrogen, Q1_Hydrogen, Q4_Hydrogen)
Excluded entirely from the templated tables (constraints, rhs, and lhs).
Reason: ISPyPSA does not currently model hydrogen electrolyser load. PLEXOS
formulates these constraints with negative-coefficient Purchaser-class
electrolyser-load terms that would need a new term type and matching
downstream support to represent faithfully. Worth revisiting if/when
hydrogen demand is added to the model.
SWQLD1
PLEXOS adds:
KINGASF1 (Kingaroy SF, WD area, coef 0.14) — not in workbook narrative
Hopeland Solar Farm (DD area, coef 0.43) — not in workbook narrative
Punch's Creek Renewable Energy Solar Farm (SD area, coef 1) — not in narrative
Q8 Battery - 2h/4h/8h (coef 0.43) — workbook-defined REZ Q8 batteries,
added at the DD area coefficient
SWQLD1 Battery - 2h/8h → mapped to SQ Battery - 2h/4h/8h (coef 1)
NSW1-QLD1 line — regional duplicate of NSW-QLD, ignored
PLEXOS vs IASR workbook reconciliation (custom constraints LHS)
Notes on how we reconciled the 7.5 IASR workbook ("Build limits - REZs" tab) with
the PLEXOS constraint formulation in
data/plexos/while buildingmanually_extracted_template_tables/7.5/custom_constraints_lhs.csv.The workbook expresses constraints conceptually (e.g.
0.14 * WD area); PLEXOSexpresses them computationally (one row per generator, with the area coefficient).
Where the two diverge, PLEXOS is treated as the authoritative source of
constraint membership. The workbook narrative is descriptive, while PLEXOS
is the canonical formulation used to build the model. This note records the
patterns we used to map between them.
Conventions adopted across all constraints
PLEXOS source-of-truth tables: membership from
data/plexos/membership.csv; coefficients fromdata/plexos/properties/Constraints_properties.csv. We use theExportGroup_<X>PLEXOS constraint as the workbook's<X>constraintequivalent (positive-flow direction). Generators only have positive
coefficients; batteries appear with paired
Generation Coefficient(positive)and
Load Coefficient(negative) — we represent each battery with onestorage_outputrow using the magnitude.PLEXOS authoritative for membership: if PLEXOS includes a generator that
the workbook narrative omits (e.g. a generator tagged in a different REZ from
what the constraint description lists), we add it. The workbook description
appears to be illustrative rather than exhaustive.
REZ shorthand:
rez_output, <REZ>, krepresents "k times all output inREZ ". Downstream code is expected to expand this against the workbook's
Summary Mapping (REZ ID column).
Generator name expansion: workbook power-station names (e.g.
Loy Yang)are expanded to per-unit IASR IDs (
LYA1,LYA2, ...) per the SummaryMapping table.
Generic build-option batteries: PLEXOS uses constraint-scoped names like
SEVIC1 Battery - 2h,SWQLD1 Battery - 2h, etc. The IASR workbookrepresents the same generic capacity at the sub-region level, e.g.
SEV Battery - 2h. We map PLEXOS constraint-name batteries to theworkbook sub-region equivalent (SEVIC1 → SEV, SWQLD1 → SQ, MN1 → CSA,
SWV1 → WNV, NSA1 → NSA, ...). All three durations (2h/4h/8h) are
included even when PLEXOS only lists 2h and 8h coefficients — the 4h
variant is defined as a PLEXOS object, just not coefficient-tagged.
Lines: PLEXOS includes both sub-regional (
SQ-CQ) and regional(
NSW1-QLD1) names for the same flow path. We use only the sub-regionalname to avoid duplication.
Skipped: PLEXOS-only synthetic objects:
<Constraint>_Linear Augmentationand
<Constraint>_<Option>Generator-class entries are PLEXOS network-expansionmodelling objects, not real generators. Excluded.
Per-constraint notes (only where the call wasn't obvious)
NQ1
PLEXOS includes
EMERASF1(Emerald Solar Farm) with coefficient 1, eventhough Summary Mapping tags it REZ Q4 (Isaac) — outside the workbook's
NQ1 narrative which lists Q1/Q2/Q3 only. Added per the PLEXOS-authoritative
rule.
CQ1
PLEXOS includes
CSPVPS1(Collinsville SF) andDAYDSF1(Daydream SF),both REZ Q10. Workbook narrative for CQ1 lists
-CQ-NQandQ4only.Added per PLEXOS-authoritative rule.
SQ1
PLEXOS
ExportGroup_SQ1is the union of the workbook's two SQ1 variants:-0.5 * SQ-CQ,Q7)-0.57 * SQ-CQ,0.15 * WD area,0.15 * DD area,0.15 * NSW-QLD,0.12 * SD area,0.27 * BPH)PLEXOS effectively uses the union with the base RHS (1400 MW) — more
conservative than the workbook's separate-variants treatment. We kept only
the minimal base SQ1 terms in the LHS because the "after upgrades" variant
is option-conditional (RHS rises to 2500 when SQ-CQ Option 5/6 is built).
The workbook's option-conditional structure can't be represented in a flat
RHS table — would need a separate constraint (
SQ1_after_CQ-SQ_Upgrades)with its own LHS row set if we want to model both states.
NSA1
PLEXOS includes:
Cultana Solar Farm(Anticipated Solar SA category) andSA Hydrogen Turbine(Policy Projects) — both mentioned in the workbook's
S5 Westdescriptionbut not findable by short IASR ID in Summary Mapping. The PLEXOS object
names are themselves the IASR IDs.
WPWF(Wattle Point Wind Farm) — REZ S4 (Yorke Peninsula), not in NSA1'sworkbook-listed REZs (S5/S7/S8). Added per PLEXOS-authoritative rule
(similar pattern to NQ1/EMERASF1).
NSA1 Battery - 2h/8h→ mapped toNSA Battery - 2h/4h/8h.SEVIC1
PLEXOS extras:
Marinus,T-V-MNSP1(regional duplicates ofTAS-SEVlink),SEVIC1 Battery - 2h/8h. Lines ignored as duplicates. Batteries mapped toSEV Battery - 2h/4h/8h.SWV1
PLEXOS extras:
V-SA(regional duplicate ofWNV-SESA),SWV1 Battery - 2h/8h.Line ignored. Batteries mapped to
WNV Battery - 2h/4h/8h(SWV1 covers V5/V9in WNV sub-region).
MN1
PLEXOS extras:
EnergyConnect(regional duplicate ofSNSW-CSA— ProjectEnergyConnect is the SNSW-CSA interconnector),
MN1 Battery - 2h/8h.Line ignored. Batteries mapped to
CSA Battery - 2h/4h/8h.SWNSW2
PLEXOS extras:
EnergyConnect(regional duplicate ofSNSW-CSA),VIC1-NSW1(regional duplicate ofWNV-SNSW). Both ignored as line duplicates.CNSW1
PLEXOS uses a different naming prefix for Dubbo sub-REZ (DN1) entities:
DREZ_SAT_DubboDN1_SAT_DubboDREZ_WH_DubboDN1_WH_DubboDREZ Dubbo Battery - 2h/4h/8hDN1 Dubbo Battery - 2h/4h/8hThese are the same entities; the workbook uses
DREZ_prefix while PLEXOS usesthe REZ ID
DN1_prefix. All are taggedREZ ID = DN1in Summary Mapping,so our existing
rez_output, DN1, 1row covers them via downstream expansion.No explicit rows added for these. Downstream code interfacing with PLEXOS
needs to know the
DREZ↔DN1alias.SNW1
PLEXOS name:
CNSW-SNW South GPG. The workbook description for SNW1 lists11 terms, three of which are opaque named groups (
CNSW Generators,SNSWGPGSO,CNSWGPG) without explicit membership documented in the workbook. PLEXOS hasthe full membership and coefficients.
PLEXOS for this constraint also encodes time-varying coefficients (multiple
rows per entity with different
date_fromvalues). We took only the default(no
date_from) coefficient for each entity — that's the value before anyscheduled change kicks in, and it matches the workbook coefficients where the
two are directly comparable.
Workbook → PLEXOS reconciliation (default coefficients):
-0.2 * CNSW-NNSW0.7 * SNSW-CNSW-0.33 * CNSW Demand-0.03213 * SNW Load0.2 * Bayswater0.33 * Mt Piper0.33 * CNSW Generators0.33 * Goulburn River Solar Farm0.51 * SNSWGPGSOWOO_*) which is in CNSW sub-region. Either the workbook label is a misnomer or PLEXOS includes different entities than the label implies. Lowest-confidence mapping in this constraint.0.51 * Tallawarra0.66 * CNSWGPGNotes:
Mt Piper,Goulburn River Solar Farm, andCNSW Generatorsas separate terms but they all share coefficient 0.33 in PLEXOS — they're conceptually "everything in CNSW area at 0.33". The split is workbook narrative only; PLEXOS treats them as one group.WNV1
Workbook terms:
-0.81 * WNV-SNSW,0.73 * Murray,0.95 * Eildon,0.81 * West Kiewa,0.81 * McKay,0.81 * Bogong,0.81 * Dartmouth,0.78 * V7.PLEXOS reconciliation (default coefficients):
-0.81 * WNV-SNSWVIC1-NSW1at -0.81 (regional duplicate; renamed toWNV-SNSW)0.73 * Murray0.95 * Eildon0.81 * West Kiewa+0.81 * McKay+0.81 * Bogong+0.81 * Dartmouth0.78 * V7Excluded: 3 PLEXOS Purchaser entries at -0.78 (V7-to-WNV electrolyser
load —
V7 to WNV Flexible Electrolyser Purchaser Domestic,V7 to WNV Flexible Electrolyser Purchaser Green Commodities,V7 in WNV Baseload for Electrolyser). Same reason as the hydrogen constraints — ISPyPSA does notcurrently model hydrogen electrolyser load.
Total: 50 LHS rows.
SWNSW1
Workbook terms: 9 SW NSW area generators + 4 Broken Hill area generators
(secondary transmission limit), all at coefficient 1.
PLEXOS matches the workbook exactly — 14 entries at coefficient 1, all
existing/committed gens and BESS in the SW NSW + Broken Hill areas
(LIMOSF11, LIMOSF21, SUNRSF1, COLEASF1, FINLYSF1, DARLSF1, HILLSTN1,
DPNTB1, RESS1G, RIVNB2, BROKENH1, BHBG1, STWF1, Silver City Energy Storage).
No discrepancies. 14 LHS rows.
Hydrogen constraints (N9_Hydrogen, Q7_Hydrogen, Q1_Hydrogen, Q4_Hydrogen)
Excluded entirely from the templated tables (constraints, rhs, and lhs).
Reason: ISPyPSA does not currently model hydrogen electrolyser load. PLEXOS
formulates these constraints with negative-coefficient
Purchaser-classelectrolyser-load terms that would need a new term type and matching
downstream support to represent faithfully. Worth revisiting if/when
hydrogen demand is added to the model.
SWQLD1
PLEXOS adds:
KINGASF1(Kingaroy SF, WD area, coef 0.14) — not in workbook narrativeHopeland Solar Farm(DD area, coef 0.43) — not in workbook narrativePunch's Creek Renewable Energy Solar Farm(SD area, coef 1) — not in narrativeQ8 Battery - 2h/4h/8h(coef 0.43) — workbook-defined REZ Q8 batteries,added at the DD area coefficient
SWQLD1 Battery - 2h/8h→ mapped toSQ Battery - 2h/4h/8h(coef 1)NSW1-QLD1line — regional duplicate ofNSW-QLD, ignored