Skip to content
199 changes: 177 additions & 22 deletions docs/model/dispatch_optimisation.md
Original file line number Diff line number Diff line change
Expand Up @@ -149,25 +149,183 @@ time-varying availability limits. For all \\( a \in \mathbf{A}^{std}, r, t \\):

\\[ act[a,r,t] = capacity[a,r]\\,cap2act[a]\\,avail_{EQ}[a,t]\\,duration[t] \\]

## B. Full Model Construction
## B. Flexible Assets (\\( a \in \mathbf{A}^{flex} \\))

**Purpose:** This section defines the operational characteristics of flexible assets, which can
adjust their input consumption mix and/or output product shares, governed by an overall process
efficiency. The generic activity variable \\( act[a,r,t] \\) (linked to the asset's physical \\(
capacity[a,r] \\)) is connected to the scale of this flexible conversion process via a reference
output parameter. It is assumed that SVD commodities cannot be efficiency-constrained or auxiliary
inputs to these assets.

### B.1. Asset-Specific Sets (Defined for each flexible asset \\( a \in \mathbf{A}^{flex} \\))

These sets categorize the commodities involved in the flexible asset's operation.

- \\( \mathbf{C}^{eff\\_ in}_a \subseteq (\mathbf{C}^{\mathrm{SED}} \cup \mathbf{C}^{\mathrm{OTH}})
\\): Set of input commodities for asset \\( a \\) whose combined energy or mass content is subject
to the main process efficiency \\( \eta[a] \\).

- \\( \mathbf{C}^{eff\\_ out}_a \subseteq \mathbf{C} \\): Set of main output commodities from asset
\\( a \\) whose combined energy or mass content is determined by \\( \eta[a] \\) and the processed
inputs.

- \\( \mathbf{C}^{aux\\_ in}_a \subseteq (\mathbf{C}^{\mathrm{SED}} \cup \mathbf{C}^{\mathrm{OTH}})
\\): Set of auxiliary input commodities for asset \\( a \\) (e.g., water, catalysts) whose
consumption is typically proportional to the main activity \\( act[a,r,t] \\) but which are not
part of the primary energy/mass balance for the efficiency calculation.

- \\( \mathbf{C}^{aux\\_ out}_a \subseteq \mathbf{C} \\): Set of auxiliary output commodities for
asset \\( a \\) (e.g., specific emissions, waste streams) whose production is typically
proportional to \\( act[a,r,t] \\) but which are not counted in the efficiency calculation for the
primary products.

### B.2. Parameters (for \\( a \in \mathbf{A}^{flex} \\))

These parameters define the technical and economic behavior of flexible assets.

- \\( \eta[a] \\): The overall process efficiency (\\( \in (0,1] \\)) of flexible asset \\( a \\),
relating total common units of outputs in \\( \mathbf{C}^{eff\\_out}_a \\) to inputs in \\(
\mathbf{C}^{eff\\_in}_a \\).
Comment on lines +187 to +189
Copy link

Copilot AI Feb 11, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Math formatting is still inconsistent for names like eff\_in/eff\_out: earlier you use the spaced form noted at the top of the file (e.g., \mathbf{C}^{eff\_ in}_a, \mathbf{C}^{eff\_ out}_a), but here it switches to \mathbf{C}^{eff\_out}_a / \mathbf{C}^{eff\_in}_a. Given the mdbook rendering note, it’s safer to standardize on one form throughout (preferably the spaced version used elsewhere in this document).

Copilot uses AI. Check for mistakes.

- \\( factor_{CU}[c] \\): A commodity-specific factor to convert its native physical units (e.g.,
tonnes, m³) to a common unit (e.g., MWh of energy content, or tonnes of mass if it's a mass
balance) used for consistent efficiency and input/output share calculations.

- \\( RefEffOutPerAct[a] \\): Reference Total Efficiency-constrained Output per unit of Activity.
This crucial parameter defines the total quantity of efficiency-constrained outputs (summed in
common units using \\( factor_{CU}[c] \\)) that are produced when asset \\( a \\) operates at one
unit of its generic activity level \\( act[a,r,t] \\).

- \\( minInputShare[a,c] \\) (for \\( c \in \mathbf{C}^{eff\\_ in}_a \\)): Minimum fractional share
of input commodity \\( c \\) (in common units) relative to the total efficiency-constrained input
(in common units).

- \\( maxInputShare[a,c] \\) (for \\( c \in \mathbf{C}^{eff\\_ in}_a \\)): Maximum fractional share
for input \\( c \\).

- \\( minOutputShare[a,c] \\) (for \\( c \in \mathbf{C}^{eff\\_ out}_a \\)): Minimum fractional
share of output commodity \\( c \\) (in common units) relative to the total efficiency-constrained
output.

- \\( maxOutputShare[a,c] \\) (for \\( c \in \mathbf{C}^{eff\\_ out}_a \\)): Maximum fractional
share for output \\( c \\).

- \\( coeff_{aux\\_ in}[a,c] \\) (for \\( c \in \mathbf{C}^{aux\\_ in}_a \\)): Quantity of auxiliary
input \\( c \\) consumed per unit of \\( act[a,r,t] \\).

- \\( coeff_{aux\\_ out}[a,c] \\) (for \\( c \in \mathbf{C}^{aux\\_ out}_a \\)): Quantity of
auxiliary output \\( c \\) produced per unit of \\( act[a,r,t] \\).

### B.3. Decision Variables (for \\( a \in \mathbf{A}^{flex} \\))

These variables represent the operational choices for flexible assets.

- \\( act[a,r,t]\ge0 \\): Generic activity level of flexible asset \\( a \\) (linked to its \\(
capacity[a,r] \\)).

- \\( InputSpec[a,c,r,t]\ge0 \quad \forall c \in \mathbf{C}^{eff\\_ in}\_a \\): Actual amount of
efficiency-constrained input commodity \\( c \\) consumed by asset \\( a \\) in region \\( r \\),
time \\( t \\) (in its native physical units).

- \\( OutputSpec[a,c,r,t]\ge0 \quad \forall c \in \mathbf{C}^{eff\\_ out}\_a \\): Actual amount of
efficiency-constrained output commodity \\( c \\) produced by asset \\( a \\) in region \\( r \\),
time \\( t \\) (in its native physical units).
Comment on lines +227 to +233
Copy link

Copilot AI Feb 11, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In the decision-variable definitions, the set qualifiers use \_a (e.g., \mathbf{C}^{eff\_ in}\_a / \mathbf{C}^{eff\_ out}\_a). In LaTeX \_ renders a literal underscore, so this will not typeset the intended subscript ..._a. Use _a (unescaped) consistently, matching the set definitions earlier in the section.

Copilot uses AI. Check for mistakes.

### B.4. Objective Contribution (for \\( a \in \mathbf{A}^{flex} \\))

The cost contribution from flexible assets includes costs related to their generic activity,
specific costs for efficiency-constrained inputs and outputs (if defined separately from system
commodity values), and costs/revenues for auxiliary inputs and outputs.

\\[
\begin{aligned}
&act[a,r,t] \cdot cost\_{var}[a,r,t] \\\\
&+ \sum\_{c \in \mathbf{C}^{eff\\_ in}\_a} InputSpec[a,c,r,t] \cdot cost\_{input}[a,c] \\\\
&+ \sum\_{c \in \mathbf{C}^{eff\\_ out}\_a} OutputSpec[a,c,r,t] \cdot cost\_{output}[a,c] \\\\
&+ \sum\_{c \in \mathbf{C}^{aux\\_ in}\_a} (act[a,r,t] \cdot coeff\_{aux\\_ in}[a,c])
\cdot cost\_{input}[a,c] \\\\
&+ \sum\_{c \in \mathbf{C}^{aux\\_ out}\_a} (act[a,r,t] \cdot coeff\_{aux\\_ out}[a,c])
\cdot cost\_{output}[a,c] \\\\
Comment on lines +244 to +249
Copy link

Copilot AI Feb 11, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In the B.4 objective expression, the summation index sets are written with \mathbf{C}^{...}\_a (e.g., \mathbf{C}^{eff\_ in}\_a, \mathbf{C}^{aux\_ out}\_a). In LaTeX, \_ renders a literal underscore, so these won’t typeset as the intended subscript _a. Use _a (unescaped) for subscripts, consistent with the set definitions earlier (\mathbf{C}^{eff\_ in}_a, etc.).

Copilot uses AI. Check for mistakes.
\end{aligned}
Comment on lines +241 to +250
Copy link

Copilot AI Feb 11, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The flexible-asset objective contribution is presented without the outer summations over assets/regions/time. As written, it reads like a single (a,r,t) term rather than the contribution to the total objective (contrast with A.3 which includes \sum_{a}\sum_{r,t}). Either add the missing summations or explicitly state that this is the per-(a,r,t) term that is summed in the full objective.

Copilot uses AI. Check for mistakes.
\\]

### B.5. Constraints (for \\( a \in \mathbf{A}^{flex}, r \in \mathbf{R}, t \in \mathbf{T} \\))

These rules govern the internal operation and conversion process of flexible assets. Let \\(
ActualTotalEffOutputCU[a,r,t] = RefEffOutPerAct[a] \cdot act[a,r,t] \\) (This is the total
efficiency-constrained output in common units). Let \\( ActualTotalEffInputCU[a,r,t] =
(RefEffOutPerAct[a] / \eta[a]) \cdot act[a,r,t] \\) (This is the total efficiency-constrained input
in common units, derived from the output and efficiency).

- **Capacity & Availability:** Standard capacity and availability constraints (as in A.4) apply to
the generic activity variable \\( act[a,r,t] \\) of the flexible asset.

- **Total Efficiency-Constrained Input Definition:** The sum of all specific efficiency-constrained
inputs, when converted to common units by \\( factor_{CU}[c] \\), must equal the total
efficiency-constrained input derived from \\( act[a,r,t] \\) and the asset's efficiency:

\\[
\sum\_{c \in \mathbf{C}^{eff\\_ in}\_a} InputSpec[a,c,r,t] \cdot factor\_{CU}[c]
= ActualTotalEffInputCU[a,r,t]
\\]
Comment on lines +268 to +271
Copy link

Copilot AI Feb 11, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The efficiency-constrained input definition equation uses \mathbf{C}^{eff\_ in}\_a in the summation index. \_ produces a literal underscore in LaTeX, so the subscript will be rendered incorrectly. Use _a (unescaped) for subscripts.

Copilot uses AI. Check for mistakes.

- **Total Efficiency-Constrained Output Definition:** Similarly, the sum of all specific main
outputs (in common units) must equal the total defined by \\( act[a,r,t] \\) and the reference
output parameter:

\\[
\sum\_{c \in \mathbf{C}^{eff\\_out}\_a} OutputSpec[a,c,r,t] \cdot factor\_{CU}[c]
= ActualTotalEffOutputCU[a,r,t]
\\]
Comment on lines +277 to +280
Copy link

Copilot AI Feb 11, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The efficiency-constrained output definition equation uses \mathbf{C}^{eff\_out}\_a in the summation index. \_ renders a literal underscore, so the intended subscript ..._a will not render correctly. Use _a (unescaped) for subscripts.

Copilot uses AI. Check for mistakes.

- **Input Share Constraints** (for each \\( c \in \mathbf{C}^{eff\\_in}_a \\)): Ensure that each
individual efficiency-constrained input (in common units) stays within its defined minimum (\\(
minInputShare[a,c] \\)) and maximum (\\( maxInputShare[a,c] \\)) fractional share of the \\(
ActualTotalEffInputCU[a,r,t] \\).

\\[
\begin{aligned}
InputSpec[a,c,r,t] \cdot factor\_{CU}[c]
&\ge minInputShare[a,c] \cdot ActualTotalEffInputCU[a,r,t] \\\\
InputSpec[a,c,r,t] \cdot factor\_{CU}[c]
&\le maxInputShare[a,c] \cdot ActualTotalEffInputCU[a,r,t]
\end{aligned}
\\]

- **Output Share Constraints** (for each \\( c \in \mathbf{C}^{eff\\_out}_a \\)): Ensure that each
individual efficiency-constrained output (in common units) stays within its defined minimum (\\(
minOutputShare[a,c] \\)) and maximum (\\( maxOutputShare[a,c] \\)) fractional share of the \\(
ActualTotalEffOutputCU[a,r,t] \\).

\\[
\begin{aligned}
OutputSpec[a,c,r,t] \cdot factor\_{CU}[c]
&\ge minOutputShare[a,c] \cdot ActualTotalEffOutputCU[a,r,t] \\\\
OutputSpec[a,c,r,t] \cdot factor\_{CU}[c]
&\le maxOutputShare[a,c] \cdot ActualTotalEffOutputCU[a,r,t]
\end{aligned}
\\]

## C. Full Model Construction

> Note: This section includes references to many features that are not described elsewhere in this
> document or implemented yet (e.g. region-to-region trade), but these are included for
> completeness. This represents the roadmap for future MUSE2 development.

This section describes how all preceding components are integrated to form the complete dispatch
optimisation problem. 1. **Sets, Parameters, Decision Variables:** The union of all previously
defined elements. 2. **Objective Function:** The overall objective is to minimise the total system
cost, which is the sum of all operational costs from assets (standard and flexible), financial
impacts from policy scopes (taxes minus credits), costs of inter-regional trade, costs of pool-based
trade, and importantly, the high economic penalties associated with any unserved demand for critical
commodities:
optimisation problem.

### C.1. Objective Function

The overall objective is to minimise the total system cost, which is the sum of all operational
costs from assets (standard and flexible), financial impacts from policy scopes (taxes minus
credits), costs of inter-regional trade, costs of pool-based trade, and importantly, the high
economic penalties associated with any unserved demand for critical commodities:

\\[
\begin{aligned}
\text{Minimise: } &(\text{Core Asset Operational Costs from A.3 and E.4}) \\\\
&+ (\text{Scope Policy Costs/Credits from B.4}) \\\\
&+ (\text{Region-to-Region Trade Costs from C.4}) + (\text{Pool-Based Trade Costs from D.4}) \\\\
\text{Minimise: } &(\text{Core Asset Operational Costs from A.3 and B.4}) \\\\
&+ \sum_{c \in \mathbf{C}^{VoLL},r,t} UnmetD[c,r,t] \cdot VoLL[c,r]
\quad \text{(Penalty for Unserved Demand)}
\end{aligned}
Comment on lines 325 to 331
Copy link

Copilot AI Feb 2, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There's a discrepancy between the descriptive text and the actual objective function equation. The text (lines 320-323) states that the objective includes "financial impacts from policy scopes (taxes minus credits), costs of inter-regional trade, costs of pool-based trade", but the equation (lines 327-328) only includes "Core Asset Operational Costs from A.3 and B.4" and the penalty for unserved demand. Either the descriptive text should be updated to match the equation (removing mentions of scope policies, R2R trade, and pool trade), or the equation should include these terms.

Copilot uses AI. Check for mistakes.
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, the equation is currently incomplete. We haven't added these features yet.

Expand All @@ -176,22 +334,19 @@ commodities:
Note that the unmet demand variables (\\( UnmetD[c,r,t] \\)) are normally not included in the
optimisation and are currently only used to diagnose the source of errors when running the model.

### Constraints
### C.2. Constraints

The complete set of constraints that the optimisation must satisfy includes:

- Capacity & Availability constraints for all assets \\( a \in \mathbf{A} \\)
(as per A.4 and E.5).

- Scope policy constraints (B.5).
(as per [A.4] and [B.5])

- Region-to-Region Trade Limits (C.5.A).
- [Flexible Asset operational constraints][B.5]
Comment on lines 341 to +344
Copy link

Copilot AI Feb 11, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The constraints list is currently redundant: the first bullet already references B.5, and the next bullet links to B.5 again. Consider making the first bullet reference only A.4 for capacity/availability, and keep a separate bullet for the remaining flexible-asset operational constraints (B.5), or otherwise remove the duplication.

Copilot uses AI. Check for mistakes.

- Pool-Based Trade Limits (D.5.A).
[A.4]: #a4-constraints-capacity--availability-for-standard-assets--a-in-mathbfastd-
[B.5]: #b5-constraints-for--a-in-mathbfaflex-r-in-mathbfr-t-in-mathbft-

- Flexible Asset operational constraints (E.5).

### Demand Satisfaction for \\( c\in \mathbf{C}^{\mathrm{SVD}} \\)
#### Demand Satisfaction for \\( c\in \mathbf{C}^{\mathrm{SVD}} \\)

These constraints ensure that exogenously defined final demands for SVDs are met in each region \\(
r \\) and time slice \\( t \\), or any shortfall is explicitly accounted for.
Expand All @@ -218,7 +373,7 @@ Else (if SVD \\( c \\) must be strictly met and is not included in \\( \mathbf{C
\ge demand[r,c] \times timeslice\\_ share[c,t]
\\]

### Commodity Balance for \\( c\in \mathbf{C}^{\mathrm{SED}} \\)
#### Commodity Balance for \\( c\in \mathbf{C}^{\mathrm{SED}} \\)

These constraints ensure that for all intermediate SED commodities, total supply equals total demand
within each region \\( r \\) and for each balancing period defined by \\( balance\\_ level[c,r] \\)
Expand All @@ -238,8 +393,8 @@ other regions).
\left(
\begin{cases}
OutputSpec[a,c,r,t] & \text{if } c \in \mathbf{C}^{eff\\_out}\_a \\\\
act[a,r,t] \cdot coeff\_{aux\\_out}[a,c] & \text{if } c \in \mathbf{C}^{aux\_out}\_a \\ 0
& \text{otherwise}
act[a,r,t] \cdot coeff\_{aux\\_out}[a,c] & \text{if } c \in \mathbf{C}^{aux\\_out}\_a \\\\
0 & \text{otherwise}
Comment on lines 395 to +397
Copy link

Copilot AI Feb 11, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In the flex-asset production case distinction, the set names use \mathbf{C}^{eff\_out}\_a / \mathbf{C}^{aux\_out}\_a. In LaTeX, \_ renders a literal underscore, so the intended subscript _a won’t render correctly. Use _a (unescaped) for subscripts (consistent with earlier set definitions like \mathbf{C}^{eff\_ out}_a).

Copilot uses AI. Check for mistakes.
\end{cases}
\right)
&& \text{(Flex Asset Production)} \\\\
Expand Down