Skip to content
251 changes: 220 additions & 31 deletions docs/model/investment.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ shadow prices for each commodity adjusted to remove the impact of binding capaci

Note: there is an option to iterate over each year so that investment decisions are based on
equilibrium prices in the _current year_, in what's referred to as the "[ironing-out loop]".
In this case, \\( \lambda\_{c,r,t} \\) will reflect prices from previous iteration of the
In this case, \\( \lambda\_{c,r,t} \\) will reflect prices from the previous iteration of the
ironing-out loop.

## Candidate and existing asset data
Expand Down Expand Up @@ -69,33 +69,32 @@ providing investment and dynamic decommissioning decisions.

### Pre-calculation of metrics for each supply option

> Note: This section contains a reference to "scopes", a feature that is not yet implemented

- Annualised fixed costs per unit of capacity (\\( AFC_{opt,r} \\)): For new candidates, this is
their annualised CAPEX plus FOM. For existing assets, the relevant fixed cost is its FOM.

- Costs per unit of activity in each time slice, calculated as follows:

- Calculate net revenue per unit of activity \\(AC_{t}^{NPV} \\) (Tool A):
\\[
\begin{aligned}
AC_t = & \quad cost\_{\text{var}}[t] \\\\
&+ \sum\_{c} \Big( cost\_{\text{input}}[c] \cdot input\_{\text{coeff}}[c]
+ cost\_{\text{output}}[c] \cdot output\_{\text{coeff}}[c] \Big) \\\\
&+ \sum\_{c} \Big( input\_{\text{coeff}}[c] - output\_{\text{coeff}}[c] \Big)
AC_{t}^{NPV} = &-cost\_{\text{var}}[t] \\\\
&- \sum\_{c} \Big( cost\_{\text{input}}[c] \cdot input\_{\text{coeff}}[c] +
cost\_{\text{output}}[c] \cdot output\_{\text{coeff}}[c] \Big) \\\\
&+ \sum\_{c} \Big( output\_{\text{coeff}}[c] - input\_{\text{coeff}}[c] \Big)
\cdot \lambda\_{c,r,t} \\\\
&+ \sum\_{s,c} in\\_scope[s] \cdot \Big\\{ \\\\
&\quad \quad (cost\_{\text{prod}}[s,c] - \mu\_{s,c}^{\text{prod}})
\cdot output\_{\text{coeff}}[c] \\\\
&\quad \quad + (cost\_{\text{cons}}[s,c] - \mu\_{s,c}^{\text{cons}})
\cdot input\_{\text{coeff}}[c] \\\\
&\quad \quad + (cost\_{\text{net}}[s,c] - \mu\_{s,c}^{\text{net}})
\cdot (output\_{\text{coeff}}[c] - input\_{\text{coeff}}[c]) \\\\
&\Big\\}
\end{aligned}
\\]

When using the LCOX objective, the calculation is adjusted to exclude the commodity of interest
(\\( \lambda\_{c,r,t} \\) are set to zero).
- Calculate cost per unit of activity \\( AC_{t}^{LCOX} \\) (Tool B). Note that the commodity
of interest (primary output \\( c_{primary} \\)) is excluded from the price term:
\\[
Copy link
Collaborator

Choose a reason for hiding this comment

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

Has this block been changed, other than the indentation?

\begin{aligned}
AC_{t}^{LCOX} = & \quad cost\_{\text{var}}[t] \\\\
&+ \sum\_{c} \Big( cost\_{\text{input}}[c] \cdot input\_{\text{coeff}}[c]+
cost\_{\text{output}}[c] \cdot output\_{\text{coeff}}[c] \Big) \\\\
&- \sum\_{c \neq c_{primary}} \Big( output\_{\text{coeff}}[c] - input\_{\text{coeff}}
[c] \Big)
\cdot \lambda\_{c,r,t} \\\\
\end{aligned}
\\]

### Initialise demand profiles for commodity of interest

Expand Down Expand Up @@ -130,8 +129,8 @@ providing investment and dynamic decommissioning decisions.

#### Tool A: NPV

This method is used when decision rule is single objective and objective is annualised profit for
agents' serving commodity \\( c \\). This method iteratively builds a supply portfolio by selecting
This method is used when the decision rule is `single` and the objective is annualised profit for
agents serving commodity \\( c \\). It iteratively builds a supply portfolio by selecting
options that offer the highest annualised profit for serving the current commodity demand. The
economic evaluation uses \\( \pi_{prevMSY} \\) prices and takes account of asset-specific
operational constraints (e.g., minimum load levels) and the balance level of the target commodity
Expand All @@ -140,10 +139,10 @@ operational constraints (e.g., minimum load levels) and the balance level of the
- **Optimise capacity and dispatch to maximise annualised profit:** Solve a small optimisation
sub-problem to maximise the asset's surplus, subject to its operational rules and the specific
demand tranche it is being asked to serve. \\(\varepsilon \approx 1×10^{-14}\\) is added to each
Copy link
Collaborator

Choose a reason for hiding this comment

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

The value of $\varepsilon$ in the code is actually f64::EPSILON * 100. Incidentally, do you know why we're not just using f64::EPSILON?

Copy link
Collaborator Author

@Aurashk Aurashk Feb 13, 2026

Choose a reason for hiding this comment

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

I think f64::EPSILON is too small to meaningfully nullify any floating point precision errors which made the activity coefficient tiny and negative (don't think the constant is really intended for that purpose). So it's multiplied by 100 to get it to around 1e-14. I suppose you could argue it's cleaner just to use 1e-14 directly but that would be a bit more arbitrary too.

Copy link

Copilot AI Feb 16, 2026

Choose a reason for hiding this comment

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

The epsilon magnitude in the docs (ε ≈ 1×10^-14) doesn’t match the implementation. The code adds EPSILON_ACTIVITY_COEFFICIENT = f64::EPSILON * 100.0 to each NPV activity coefficient (≈ 2.22×10^-12). Please update the documented ε value (or describe it qualitatively as a small positive constant) so it reflects the implementation.

Suggested change
demand tranche it is being asked to serve. \\(\varepsilon \approx 1×10^{-14}\\) is added to each
demand tranche it is being asked to serve. \\(\varepsilon\\) is a small positive constant added to each

Copilot uses AI. Check for mistakes.
\\(AC_t \\) to allow assets which are breakeven (or very close to breakeven) to be dispatched.
\\(AC_{t}^{NPV} \\) to allow assets which are breakeven (or very close to breakeven) to be dispatched.

\\[
maximise \Big\\{ - \sum_t act_t \* (AC_t + \varepsilon)
maximise \Big\\{\sum_t act_t (AC_{t}^{NPV} + \varepsilon)
\Big\\}
\\]

Expand All @@ -158,9 +157,32 @@ operational constraints (e.g., minimum load levels) and the balance level of the
- Capacity is constrained to \\( CapMaxBuild \\) for candidates, and to known capacity for
existing assets.

- **Calculate a profitability index:** This is the total annualised surplus (\\( - \sum_t
act_t \* AC \\)) divided by the annualised fixed cost (\\(
AFC \* cap \\)).
- **Decide on metric:** The type of metric used to compare profitability is dependent on the value of
\\(\text{AFC}\\). If \\(\text{AFC} = 0\\), this is always preferred over options with
\\(\text{AFC} > 0\\) so the latter are discarded as investment options.
Comment on lines +161 to +162
Copy link

Copilot AI Feb 16, 2026

Choose a reason for hiding this comment

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

The docs say that if AFC = 0 then options with AFC > 0 are “discarded as investment options”. In the code, zero-AFC NPV metrics are simply always ranked better than non-zero AFC during comparison, but the other options are still appraised/sorted (and can matter once zero-AFC options are exhausted/capacity-limited). Consider rewording this to describe the comparison rule (zero AFC always preferred; if both zero, compare total annualised surplus) rather than implying the others are removed from consideration.

Suggested change
\\(\text{AFC}\\). If \\(\text{AFC} = 0\\), this is always preferred over options with
\\(\text{AFC} > 0\\) so the latter are discarded as investment options.
\\(\text{AFC}\\). Options with \\(\text{AFC} = 0\\) are always ranked ahead of options with
\\(\text{AFC} > 0\\). When both options being compared have \\(\text{AFC} = 0\\), they are ranked
using the total annualised surplus metric; otherwise they are ranked using the profitability index.

Copilot uses AI. Check for mistakes.

- **If \\(\text{AFC} > 0\\), Use the profitability index \\(\text{PI}\\) metric:** This is the total
annualised surplus divided by the annualised fixed cost.
\\[
\text{PI} =
\frac{\sum_t \text{act}_t \cdot \text{AC}_t^{\text{NPV}}}{\text{AFC} \cdot \text{cap}}
\\]
Copy link
Collaborator

Choose a reason for hiding this comment

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

We should also mention that we fall back on comparing the numerator of the PI when AFC is zero.

Comment on lines 166 to 169
Copy link

Copilot AI Feb 13, 2026

Choose a reason for hiding this comment

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

LaTeX variable formatting is inconsistent within this file: the profitability index uses \text{act}_t, \text{AC}_t, \text{AFC}, etc., while surrounding formulas and the worked example use act_t, AC_t, AFC without \text{}. Pick one style for variables in formulas (either remove \text{} here, or update the other formulas) to keep the notation consistent and easier to read.

Copilot uses AI. Check for mistakes.

- **If \\(\text{AFC} = 0\\), Use the total annualised surplus metric \\(\text{TAS}\\):**
\\[
\text{TAS} =
\sum_t \text{act}_t \cdot \text{AC}_t^{\text{NPV}}
\\]

- **Metric deadlock fallback** If two or more investment options have equal metrics, the following
tie-breaking rules are applied in order:

1. Assets which are already commissioned are preferred over new candidate assets.

2. Newer (commissioned later) assets are preferred over older assets.

3. If there is still a tie, the first option in the data structure is selected,
which is non-deterministic. A warning is emitted when this occurs.
Comment on lines +184 to +185
Copy link

Copilot AI Feb 13, 2026

Choose a reason for hiding this comment

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

The documentation states that "A warning is emitted when this occurs" referring to cases where two or more investment options have identical metrics and cannot be distinguished even after applying tie-breaking rules. However, the implementation in sort_appraisal_outputs_by_investment_priority (src/simulation/investment/appraisal.rs:349-356) does not emit any warning when ties remain unresolved. The function comment acknowledges "The function does not guarantee that all ties will be resolved" but no warning is logged. Either the documentation should be updated to remove the claim about warning emission, or the code should be updated to emit a warning when unresolved ties exist.

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.

it is done by warn_on_equal_appraisal_output


#### Tool B: LCOX

Expand All @@ -175,12 +197,12 @@ commodities are set to zero, and the commodity of interest is assumed to have ze
For each asset option:

- **Optimise capacity and dispatch to minimise annualised cost:** Solve a small optimisation
sub-problem to maximise the asset's surplus, subject to its operational rules and the specific
sub-problem to minimise the asset's annualised cost, subject to its operational rules and the specific
demand tranche it is being asked to serve.

\\[
minimise \Big\\{
AF \* cap + \sum_t act_t \* AC_t + VoLL \* UnmetD_t
\text{AFC} \times cap + \sum_t act_t \times AC_{t}^{LCOX} + VoLL \times UnmetD_t
\Big\\}
Comment on lines 203 to 206
Copy link

Copilot AI Feb 13, 2026

Choose a reason for hiding this comment

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

In the LCOX optimisation objective, AF is used for fixed cost (AF \times cap), but the rest of the document defines annualised fixed cost as AFC_{opt,r} and the cost index formula below uses AFC. Please rename AF to AFC here (and keep notation consistent across Tool B).

Copilot uses AI. Check for mistakes.
Comment on lines 202 to 206
Copy link

Copilot AI Feb 13, 2026

Choose a reason for hiding this comment

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

Tool B’s optimisation bullet says it ‘minimise[s] annualised cost’ but then describes solving the sub-problem ‘to maximise the asset's surplus’, which is contradictory. Also, the objective uses AF × cap while the rest of the document defines the annualised fixed cost as AFC; please align the wording and notation so the objective is unambiguous and consistent with the earlier AFC_{opt,r} definition and the cost-index formula.

Copilot uses AI. Check for mistakes.
Comment on lines 203 to 206
Copy link

Copilot AI Feb 16, 2026

Choose a reason for hiding this comment

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

The LCOX optimisation objective shows a single “VoLL × UnmetD_t” term, but in the implementation unmet-demand variables exist per time slice and each contributes to the objective. To match the code (and the dispatch optimisation docs), this should be expressed as a sum over time slices (e.g., Σ_t VoLL · UnmetD_t).

Copilot uses AI. Check for mistakes.
\\]

Expand All @@ -199,9 +221,176 @@ For each asset option:
- VoLL variables are active to ensure a feasible solution alongside maximum operation of the
asset.

- **Calculate a cost index:** This is the total annualised cost (\\(
AFC \* cap_r + \sum_{t} act_t \* AC_t \\)), divided by the annual output
\\( \sum_t act_t \\).
- **Calculate a Cost Index:** This is the total annualised cost divided by the annual output.
\\[
\text{Cost Index} = \frac{\text{AFC} \times \text{cap}_r + \sum_t \text{act}_t
\times \text{AC}_t^{\text{LCOX}}}{\sum_t \text{act}_t}
Comment on lines +226 to +227
Copy link

Copilot AI Feb 12, 2026

Choose a reason for hiding this comment

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

Inconsistent LaTeX formatting for variable names. The cost index formula at lines 224-225 uses '\text{act}_t', '\text{AC}_t', etc. with the \text{} wrapper, but the equivalent cost index formula in the example section at line 386 uses 'act_t', 'AC_t', etc. without the \text{} wrapper. Similarly, line 182 uses '\text{act}_t' for the profitability index, but line 317 uses 'act_t' in the example. For consistency, either use \text{} for all variable names in standalone formulas, or don't use it for any. The most readable option would be to consistently use \text{} for all variable names in metric formulas (lines 224-225, 182) and update the example formulas (lines 317, 325, 386) to match.

Copilot uses AI. Check for mistakes.
Copy link
Collaborator

Choose a reason for hiding this comment

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

Hmm... It seems like we weren't consistently using \text before this PR, but we probably don't also want to be changing act to \text{act} haphazardly, without updating it everywhere (although the latter is arguably more correct).

Up to you whether you want to revert or whatever. Not esp important.

Copy link
Collaborator Author

@Aurashk Aurashk Feb 13, 2026

Choose a reason for hiding this comment

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

should I update the rest of the file to consistently use \text as copilot says? then we can make an issue about making sure it's consistent throughout the docs? (Maybe we can assign copilot to do that too :) )

Comment on lines +225 to +227
Copy link

Copilot AI Feb 13, 2026

Choose a reason for hiding this comment

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

The cost index formula introduces cap_r, but that symbol isn’t defined elsewhere in the doc (the optimisation and parameter tables use cap). Consider using the same capacity symbol/indices consistently (e.g., cap or cap_{opt,r}) to avoid confusion.

Copilot uses AI. Check for mistakes.
Comment on lines +225 to +227
Copy link

Copilot AI Feb 13, 2026

Choose a reason for hiding this comment

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

In the Cost Index formula, capacity is written as \text{cap}_r, but elsewhere in Tool B (including the objective just above) the decision variable is cap without a regional subscript. Please make the notation consistent (either always subscript capacity by region or omit it throughout) so it’s clear these refer to the same variable.

Copilot uses AI. Check for mistakes.
Comment on lines +226 to +227
Copy link

Copilot AI Feb 13, 2026

Choose a reason for hiding this comment

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

Inconsistent notation for capacity variable. Line 205 uses cap while line 226 uses \text{cap}_r. For consistency, both should use the same notation. Either remove the subscript from line 226 to match line 205, or add a subscript to line 205 to match line 226. The subscript _r for region is not essential here since the context makes it clear we're dealing with a specific asset and region.

Copilot uses AI. Check for mistakes.
Comment on lines +224 to +227
Copy link

Copilot AI Feb 16, 2026

Choose a reason for hiding this comment

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

In the Cost Index formula, the capacity term is written as “cap_r”, but elsewhere in this section the decision variable is “cap” and the region is already implied by the asset being appraised. Consider using consistent notation (either define cap_r explicitly, or just use cap) to avoid confusion.

Copilot uses AI. Check for mistakes.
\\]

## Example: Gas Power Plant

The following is an illustrative example of how the NPV and LCOX approaches work, using a simple
gas combined-cycle power plant as the supply option under consideration.
This example demonstrates the evaluation across two time periods
\\(t_0\\) (peak period) and \\(t_1\\) (off-peak period) with variable operating costs
\\( cost\_{var}[t] \\) constant in all time periods.

### Model Parameters

#### Asset Parameters
<!-- markdownlint-disable MD013 -->
| Parameter | Notation | Value | Description |
Copy link
Collaborator

Choose a reason for hiding this comment

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

I tend to use markdown-table-formatter to prettify markdown tables.

You should just be able to run it with npx markdown-table-formatter docs/model/investment.md.

|-----------|----------|-------|-------------|
| Primary output (Electricity) | \\( output\_{coeff}[c_{primary}] \\) | 1.0 MWh per unit activity | Main commodity produced |
| By-product output (Waste heat) | \\( output\_{coeff}[c_{heat}] \\) | 0.5 MWh per unit activity | Co-product from generation |
| Input (Natural gas) | \\( input\_{coeff}[c_{gas}] \\) | 2.5 MWh per unit activity | Fuel consumption |
| Variable operating cost | \\( cost\_{var}[t] \\) | £5/MWh of activity | Operating costs per unit activity |
<!-- markdownlint-enable MD013 -->

Copy link

Copilot AI Feb 13, 2026

Choose a reason for hiding this comment

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

The example assumes all flow costs (the cost field on each ProcessFlow) are zero, but this should be stated explicitly. The general formulas at lines 78-82 and 90-97 include cost_input and cost_output terms representing these per-flow costs, but they are omitted from the example calculations without explanation. Consider adding a note in the "Asset Parameters" section stating that flow costs are assumed to be zero for simplicity in this example.

Suggested change
Note: In this illustrative example, all per-flow costs associated with individual ProcessFlows (the `cost` field, represented in the general formulas as \\( cost\_{input} \\) and \\( cost\_{output} \\)) are assumed to be zero; only the variable operating cost \\( cost\_{var}[t] \\) is included in the calculations.

Copilot uses AI. Check for mistakes.
#### Investment Parameters

| Parameter | Notation | Value |
|-----------|----------|-------|
| Annualised fixed cost | \\( AFC\_{opt,r} \\) | £1,000/MW |
| Capacity | \\( cap \\) | 100 MW |

#### Market Prices by Time Period

| Commodity | Notation | \\(t_0\\) (Peak) | \\(t_1\\) (Off-peak) |
|-----------|----------|-----------|---------------|
| Electricity | \\( \lambda\_{c_{primary},r,t} \\) | £90/MWh | £50/MWh |
| Heat | \\( \lambda\_{c_{heat},r,t} \\) | £25/MWh | £15/MWh |
Comment on lines 260 to 262
Copy link

Copilot AI Feb 13, 2026

Choose a reason for hiding this comment

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

In the example, electricity is introduced as the primary output c_{primary}, but the price table uses \lambda_{c_{elec},r,t}. Either use c_{primary} consistently, or explicitly define c_{elec} = c_{primary} in the example to avoid ambiguity.

Copilot uses AI. Check for mistakes.
| Natural gas | \\( \lambda\_{c_{gas},r,t} \\) | £35/MWh | £25/MWh |

### NPV Approach (Tool A)

#### Calculate Net Revenue per Unit of Activity

**For \\(t_0\\) (peak period):**

\\[
\begin{aligned}
AC_{t_{0}}^{NPV} &= (1.0 \times 90) + (0.5 \times 25) + (-2.5 \times 35) - 5 \\\\
&= 90 + 12.5 - 87.5 - 5 \\\\
&= \text{£10/MWh}
\end{aligned}
\\]

The asset earns £10 profit for every MWh it operates during peak periods.

**For \\(t_1\\) (off-peak period):**

\\[
\begin{aligned}
AC_{t_1}^{NPV} &= (1.0 \times 50) + (0.5 \times 15) + (-2.5 \times 25) - 5 \\\\
&= 50 + 7.5 - 62.5 - 5 \\\\
&= \text{£} -10 \text{/MWh}
\end{aligned}
\\]

The asset loses £10 for every MWh it operates during off-peak periods.

#### Dispatch Optimisation

The optimisation maximises total net revenue across all time periods:

\\[
\max \sum_t act_t \cdot AC_t^{NPV} = act_{t_{0}} \cdot 10 + act_{t_1} \cdot (-10)
\\]

where \\( act_t \\) is the activity (operational level) in each time slice, subject to operational
constraints and demand requirements.

In this case, the optimiser will prefer to dispatch the asset during \\(t_0\\) (profitable) and
minimise operation during \\(t_1\\) (unprofitable), subject to technical constraints such as minimum
load requirements.

#### Profitability Index

The profitability index is calculated as:

\\[
\text{PI} = \frac{\sum_t act_t \cdot AC_t^{NPV}}{AFC \times cap}
\\]

Suppose the dispatch optimiser determines \\( act_{t_{0}} = 80 \\) MWh and \\( act_{t_1} = 20 \\)
MWh are the optimal activity levels:

\\[
\begin{aligned}
\text{PI} &= \frac{(80 \times 10) + (20 \times (-10))}{1{,}000 \times 100} \\\\
&= \frac{800 - 200}{100{,}000} \\\\
&= \frac{600}{100{,}000} \\\\
&= 0.006
\end{aligned}
\\]

The profitability index is then compared against all other options to determine which asset provides
the best return on investment for serving the demand.

### LCOX Approach (Tool B)

#### Net Cost per Unit of Activity

**For \\(t_0\\) (peak period):**

\\[
\begin{aligned}
AC_{t_{0}}^{LCOX} &= 5 + (2.5 \times 35) - (0.5 \times 25) \\\\
&= 5 + 87.5 - 12.5 \\\\
&= \text{£80/MWh}
\end{aligned}
\\]

It costs £80 per MWh to operate during peak periods (net of heat by-product sales).

**For \\(t_1\\) (off-peak period):**

\\[
\begin{aligned}
AC_{t_1}^{LCOX} &= 5 + (2.5 \times 25) - (0.5 \times 15) \\\\
&= 5 + 62.5 - 7.5 \\\\
&= \text{£60/MWh}
\end{aligned}
\\]

It costs £60 per MWh to operate during off-peak periods, reflecting lower gas prices
and lower heat by-product value.

#### Capacity and Dispatch Optimisation

The optimiser determines the most cost-effective capacity and dispatch pattern to meet demand across
both time periods by minimising the total annualised cost with respect to decision variables
\\( cap \\) and \\( act_t \\):

\\[
AFC \cdot cap + \sum_t act_t \cdot AC_t^{LCOX} = 1{,}000 \cdot cap + act_{t_{0}}
\cdot 80 + act_{t_1} \cdot 60
\\]

#### Cost Index (Levelised Cost of X)

The Cost Index is calculated as:

\\[
\text{Cost Index} = \frac{AFC \cdot cap + \sum_t act_t \cdot AC_t^{LCOX}}{\sum_t act_t}
\\]

Suppose the optimiser determines \\( cap = 100 \\) MW, \\( act_{t_{0}} = 150 \\) MWh,
and \\( act_{t_1} = 80 \\) MWh are the optimal capacity and activity levels:

\\[
\begin{aligned}
\text{Cost Index} &= \frac{(1{,}000 \times 100) + (150 \times 80) + (80 \times 60)}{150 + 80} \\\\
&= \frac{100{,}000 + 12{,}000 + 4{,}800}{230} \\\\
&= \frac{116{,}800}{230} \\\\
&= \text{£508/MWh}
\end{aligned}
\\]

The Cost Index is £508 per MWh of electricity produced.
This metric is compared across all supply options to identify
the lowest-cost solution for meeting demand.

[overall MUSE2 workflow]: ./README.md#framework-overview
[Dispatch Optimisation Formulation]: ./dispatch_optimisation.md
Expand Down
Loading