From f50062bc5e44a7697d0bac7bb23a8e76daec1197 Mon Sep 17 00:00:00 2001 From: Aurash Karimi Date: Thu, 12 Feb 2026 16:19:33 +0000 Subject: [PATCH 01/14] update appraisal documentation --- docs/model/investment.md | 261 ++++++++++++++++++++++++++++++++++----- 1 file changed, 230 insertions(+), 31 deletions(-) diff --git a/docs/model/investment.md b/docs/model/investment.md index 2ee29bbaf..0dd425553 100644 --- a/docs/model/investment.md +++ b/docs/model/investment.md @@ -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 @@ -69,33 +69,50 @@ 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}^{NPV} = & \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( output\_{\text{coeff}}[c] - input\_{\text{coeff}}[c] \Big) + \cdot \lambda\_{c,r,t} \\\\ + &+ \sum\_{s,c} in\\_scope[s] \cdot \Big\\{ \\\\ + &\quad \quad (\mu\_{s,c}^{\text{prod}} - cost\_{\text{prod}}[s,c]) + \cdot output\_{\text{coeff}}[c] \\\\ + &\quad \quad + (\mu\_{s,c}^{\text{cons}} - cost\_{\text{cons}}[s,c]) + \cdot input\_{\text{coeff}}[c] \\\\ + &\quad \quad + (\mu\_{s,c}^{\text{net}} - cost\_{\text{net}}[s,c]) + \cdot (output\_{\text{coeff}}[c] - input\_{\text{coeff}}[c]) \\\\ + &\Big\\} + \end{aligned} + \\] +- 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: \\[ - \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) - \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} + \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( input\_{\text{coeff}}[c] - output\_{\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). + > Note: "scopes" are not implemented in the current model. ### Initialise demand profiles for commodity of interest @@ -131,7 +148,7 @@ 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 +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 @@ -140,10 +157,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 - \\(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\\} \\] @@ -158,9 +175,12 @@ 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 \\)). +- **Calculate a profitability index:** This is the total annualised surplus divided by the + annualised fixed cost. + \\[ + \text{Profitability Index} = + \frac{\sum_t \text{act}_t \times \text{AC}_t^{\text{NPV}}}{\text{AFC} \times \text{cap}} + \\] #### Tool B: LCOX @@ -180,7 +200,7 @@ For each asset option: \\[ minimise \Big\\{ - AF \* cap + \sum_t act_t \* AC_t + VoLL \* UnmetD_t + AF \* cap + \sum_t act_t \* AC_{t}^{LCOX} + VoLL \* UnmetD_t \Big\\} \\] @@ -199,9 +219,188 @@ 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} + \\] + +## 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 +t1 (peak period) and t2 (off-peak period) with variable operating costs \\( cost\_{var}[t] \\) +fixed. + +### Model Parameters + +#### Asset Parameters + +| Parameter | Notation | Value | Description | +|-----------|----------|-------|-------------| +| 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 | + + +#### 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 | t1 (Peak) | t2 (Off-peak) | +|-----------|----------|-----------|---------------| +| Electricity | \\( \lambda\_{c_{elec},r,t} \\) | £90/MWh | £50/MWh | +| Heat | \\( \lambda\_{c_{heat},r,t} \\) | £25/MWh | £15/MWh | +| Natural gas | \\( \lambda\_{c_{gas},r,t} \\) | £35/MWh | £25/MWh | + +### NPV Approach (Tool A) + +#### Calculate Net Revenue per Unit of Activity + +The net revenue calculation follows the general form: + +\\[ +AC_t^{NPV} = \sum_{c} \Big( output\_{coeff}[c] - input\_{coeff}[c] \Big) \cdot \lambda_{c,r,t} - cost\_{var}[t] +\\] + +**For t1 (peak period):** + +\\[ +\begin{aligned} +AC_{t1}^{NPV} &= (1.0 \times 90) + (0.5 \times 25) + (-2.5 \times 35) - 5 \\\\ +&= 90 + 12.5 - 87.5 - 5 \\\\ +&= 10 \text{ £/MWh} +\end{aligned} +\\] + +The asset earns £10 profit for every MWh it operates during peak periods. + +**For t2 (off-peak period):** + +\\[ +\begin{aligned} +AC_{t2}^{NPV} &= (1.0 \times 50) + (0.5 \times 15) + (-2.5 \times 25) - 5 \\\\ +&= 50 + 7.5 - 62.5 - 5 \\\\ +&= -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_{t1} \cdot 10 + act_{t2} \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 t1 (profitable) and + minimise operation during t2 (unprofitable), subject to technical constraints such as minimum +load requirements. + +#### Profitability Index + +The profitability index is calculated as: + +\\[ +\text{Profitability Index} = \frac{\sum_t act_t \cdot AC_t^{NPV}}{AFC \times cap} +\\] + +Suppose the dispatch optimiser determines \\( act_{t1} = 80 \\) MWh and \\( act_{t2} = 20 \\) MWh are +the optimal activity levels: + +\\[ +\begin{aligned} +\text{Profitability Index} &= \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 + +The net cost excludes the primary output (electricity) and is calculated as: + +\\[ +AC_t^{LCOX} = cost\_{var}[t] + \sum_{c \neq c_{primary}} \Big( input\_{coeff}[c] - + output\_{coeff}[c] \Big) \cdot \lambda_{c,r,t} +\\] + +**For t1 (peak period):** + +\\[ +\begin{aligned} +AC_{t1}^{LCOX} &= 5 + (2.5 \times 35) - (0.5 \times 25) \\\\ +&= 5 + 87.5 - 12.5 \\\\ +&= 80 \text{ £/MWh} +\end{aligned} +\\] + +It costs £80 per MWh to operate during peak periods (net of heat by-product sales). + +**For t2 (off-peak period):** + +\\[ +\begin{aligned} +AC_{t2}^{LCOX} &= 5 + (2.5 \times 25) - (0.5 \times 15) \\\\ +&= 5 + 62.5 - 7.5 \\\\ +&= 60 \text{ £/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_{t1} + \cdot 80 + act_{t2} \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_{t1} = 150 \\) MWh, + and \\( act_{t2} = 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} \\\\ +&= 508 \text{ £/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 From 25b2ae2a21ea7c3d0f956ecf74d9989d585b69cb Mon Sep 17 00:00:00 2001 From: Aurashk Date: Fri, 13 Feb 2026 12:10:39 +0000 Subject: [PATCH 02/14] Apply suggestions from code review Co-authored-by: Alex Dewar --- docs/model/investment.md | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/docs/model/investment.md b/docs/model/investment.md index 0dd425553..336ec0351 100644 --- a/docs/model/investment.md +++ b/docs/model/investment.md @@ -75,7 +75,7 @@ providing investment and dynamic decommissioning decisions. - Calculate net revenue per unit of activity \\(AC_{t}^{NPV} \\) (Tool A): \\[ \begin{aligned} - AC_{t}^{NPV} = & \quad -cost\_{\text{var}}[t] \\\\ + 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) @@ -92,13 +92,13 @@ providing investment and dynamic decommissioning decisions. \\] - 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: + of interest (primary output \\( c_{primary} \\)) is excluded from the price term: \\[ \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( input\_{\text{coeff}}[c] - output\_{\text{coeff}} + &- \sum\_{c \neq c_{primary}} \Big( output\_{\text{coeff}}[c] - input\_{\text{coeff}} [c] \Big) \cdot \lambda\_{c,r,t} \\\\ &+ \sum\_{s,c} in\\_scope[s] \cdot \Big\\{ \\\\ @@ -147,8 +147,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 \\). It 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 @@ -179,7 +179,7 @@ operational constraints (e.g., minimum load levels) and the balance level of the annualised fixed cost. \\[ \text{Profitability Index} = - \frac{\sum_t \text{act}_t \times \text{AC}_t^{\text{NPV}}}{\text{AFC} \times \text{cap}} + \frac{\sum_t \text{act}_t \cdot \text{AC}_t^{\text{NPV}}}{\text{AFC} \cdot \text{cap}} \\] #### Tool B: LCOX @@ -200,7 +200,7 @@ For each asset option: \\[ minimise \Big\\{ - AF \* cap + \sum_t act_t \* AC_{t}^{LCOX} + VoLL \* UnmetD_t + AF \times cap + \sum_t act_t \times AC_{t}^{LCOX} + VoLL \times UnmetD_t \Big\\} \\] @@ -276,7 +276,7 @@ AC_t^{NPV} = \sum_{c} \Big( output\_{coeff}[c] - input\_{coeff}[c] \Big) \cdot \ \begin{aligned} AC_{t1}^{NPV} &= (1.0 \times 90) + (0.5 \times 25) + (-2.5 \times 35) - 5 \\\\ &= 90 + 12.5 - 87.5 - 5 \\\\ -&= 10 \text{ £/MWh} +&= \text{£10/MWh} \end{aligned} \\] @@ -288,7 +288,7 @@ The asset earns £10 profit for every MWh it operates during peak periods. \begin{aligned} AC_{t2}^{NPV} &= (1.0 \times 50) + (0.5 \times 15) + (-2.5 \times 25) - 5 \\\\ &= 50 + 7.5 - 62.5 - 5 \\\\ -&= -10 \text{ £/MWh} +&= \text{£} -10 \text{/MWh} \end{aligned} \\] @@ -349,7 +349,7 @@ AC_t^{LCOX} = cost\_{var}[t] + \sum_{c \neq c_{primary}} \Big( input\_{coeff}[c] \begin{aligned} AC_{t1}^{LCOX} &= 5 + (2.5 \times 35) - (0.5 \times 25) \\\\ &= 5 + 87.5 - 12.5 \\\\ -&= 80 \text{ £/MWh} +&= \text{£80/MWh} \end{aligned} \\] @@ -361,9 +361,10 @@ It costs £80 per MWh to operate during peak periods (net of heat by-product sal \begin{aligned} AC_{t2}^{LCOX} &= 5 + (2.5 \times 25) - (0.5 \times 15) \\\\ &= 5 + 62.5 - 7.5 \\\\ -&= 60 \text{ £/MWh} +&= \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. @@ -394,7 +395,7 @@ Suppose the optimiser determines \\( cap = 100 \\) MW, \\( act_{t1} = 150 \\) MW \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} \\\\ -&= 508 \text{ £/MWh} +&= \text{£508/MWh} \end{aligned} \\] From 0703e1fadef918028b2044131497dc82a3962b61 Mon Sep 17 00:00:00 2001 From: Aurash Karimi Date: Fri, 13 Feb 2026 12:47:29 +0000 Subject: [PATCH 03/14] fix indent --- docs/model/investment.md | 62 ++++++++++++++++++++-------------------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/docs/model/investment.md b/docs/model/investment.md index 336ec0351..794a5e212 100644 --- a/docs/model/investment.md +++ b/docs/model/investment.md @@ -74,42 +74,42 @@ providing investment and dynamic decommissioning decisions. - Calculate net revenue per unit of activity \\(AC_{t}^{NPV} \\) (Tool A): \\[ - \begin{aligned} - 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 (\mu\_{s,c}^{\text{prod}} - cost\_{\text{prod}}[s,c]) - \cdot output\_{\text{coeff}}[c] \\\\ - &\quad \quad + (\mu\_{s,c}^{\text{cons}} - cost\_{\text{cons}}[s,c]) - \cdot input\_{\text{coeff}}[c] \\\\ - &\quad \quad + (\mu\_{s,c}^{\text{net}} - cost\_{\text{net}}[s,c]) - \cdot (output\_{\text{coeff}}[c] - input\_{\text{coeff}}[c]) \\\\ - &\Big\\} - \end{aligned} + \begin{aligned} + 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 (\mu\_{s,c}^{\text{prod}} - cost\_{\text{prod}}[s,c]) + \cdot output\_{\text{coeff}}[c] \\\\ + &\quad \quad + (\mu\_{s,c}^{\text{cons}} - cost\_{\text{cons}}[s,c]) + \cdot input\_{\text{coeff}}[c] \\\\ + &\quad \quad + (\mu\_{s,c}^{\text{net}} - cost\_{\text{net}}[s,c]) + \cdot (output\_{\text{coeff}}[c] - input\_{\text{coeff}}[c]) \\\\ + &\Big\\} + \end{aligned} \\] - 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: \\[ - \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} \\\\ - &+ \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} + \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} \\\\ + &+ \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} \\] > Note: "scopes" are not implemented in the current model. From bcd1255f9f768785422f6696b522607602b42e51 Mon Sep 17 00:00:00 2001 From: Aurash Karimi Date: Fri, 13 Feb 2026 12:48:26 +0000 Subject: [PATCH 04/14] fix indent --- docs/model/investment.md | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/docs/model/investment.md b/docs/model/investment.md index 794a5e212..87f8d0d3e 100644 --- a/docs/model/investment.md +++ b/docs/model/investment.md @@ -75,19 +75,19 @@ providing investment and dynamic decommissioning decisions. - Calculate net revenue per unit of activity \\(AC_{t}^{NPV} \\) (Tool A): \\[ \begin{aligned} - 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 (\mu\_{s,c}^{\text{prod}} - cost\_{\text{prod}}[s,c]) - \cdot output\_{\text{coeff}}[c] \\\\ - &\quad \quad + (\mu\_{s,c}^{\text{cons}} - cost\_{\text{cons}}[s,c]) - \cdot input\_{\text{coeff}}[c] \\\\ - &\quad \quad + (\mu\_{s,c}^{\text{net}} - cost\_{\text{net}}[s,c]) - \cdot (output\_{\text{coeff}}[c] - input\_{\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 (\mu\_{s,c}^{\text{prod}} - cost\_{\text{prod}}[s,c]) + \cdot output\_{\text{coeff}}[c] \\\\ + &\quad \quad + (\mu\_{s,c}^{\text{cons}} - cost\_{\text{cons}}[s,c]) + \cdot input\_{\text{coeff}}[c] \\\\ + &\quad \quad + (\mu\_{s,c}^{\text{net}} - cost\_{\text{net}}[s,c]) + \cdot (output\_{\text{coeff}}[c] - input\_{\text{coeff}}[c]) \\\\ + &\Big\\} \end{aligned} \\] From 97204d249b22d18cd4569205b1dda7cd20cb3b74 Mon Sep 17 00:00:00 2001 From: Aurash Karimi Date: Fri, 13 Feb 2026 13:00:47 +0000 Subject: [PATCH 05/14] fix indent --- docs/model/investment.md | 52 ++++++++++++++++++++-------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/docs/model/investment.md b/docs/model/investment.md index 87f8d0d3e..7cd9077d7 100644 --- a/docs/model/investment.md +++ b/docs/model/investment.md @@ -76,18 +76,18 @@ providing investment and dynamic decommissioning decisions. \\[ \begin{aligned} 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 (\mu\_{s,c}^{\text{prod}} - cost\_{\text{prod}}[s,c]) - \cdot output\_{\text{coeff}}[c] \\\\ - &\quad \quad + (\mu\_{s,c}^{\text{cons}} - cost\_{\text{cons}}[s,c]) - \cdot input\_{\text{coeff}}[c] \\\\ - &\quad \quad + (\mu\_{s,c}^{\text{net}} - cost\_{\text{net}}[s,c]) - \cdot (output\_{\text{coeff}}[c] - input\_{\text{coeff}}[c]) \\\\ - &\Big\\} + &- \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 (\mu\_{s,c}^{\text{prod}} - cost\_{\text{prod}}[s,c]) + \cdot output\_{\text{coeff}}[c] \\\\ + &\quad \quad + (\mu\_{s,c}^{\text{cons}} - cost\_{\text{cons}}[s,c]) + \cdot input\_{\text{coeff}}[c] \\\\ + &\quad \quad + (\mu\_{s,c}^{\text{net}} - cost\_{\text{net}}[s,c]) + \cdot (output\_{\text{coeff}}[c] - input\_{\text{coeff}}[c]) \\\\ + &\Big\\} \end{aligned} \\] @@ -96,19 +96,19 @@ providing investment and dynamic decommissioning decisions. \\[ \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} \\\\ - &+ \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\\} + &+ \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} \\\\ + &+ \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} \\] @@ -231,7 +231,7 @@ The following is an illustrative example of how the NPV and LCOX approaches work gas combined-cycle power plant as the supply option under consideration. This example demonstrates the evaluation across two time periods t1 (peak period) and t2 (off-peak period) with variable operating costs \\( cost\_{var}[t] \\) -fixed. +constant in all time periods. ### Model Parameters From 1c2cc68ee0deee5c22018354049a4e929cb962ca Mon Sep 17 00:00:00 2001 From: Aurash Karimi Date: Fri, 13 Feb 2026 13:01:48 +0000 Subject: [PATCH 06/14] fix indent --- docs/model/investment.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/docs/model/investment.md b/docs/model/investment.md index 7cd9077d7..d85c708a9 100644 --- a/docs/model/investment.md +++ b/docs/model/investment.md @@ -95,20 +95,20 @@ providing investment and dynamic decommissioning decisions. of interest (primary output \\( c_{primary} \\)) is excluded from the price term: \\[ \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} \\\\ - &+ \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\\} + 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} \\\\ + &+ \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} \\] From 9cb3f6946e540c6f7bddf195a142261d27f1be57 Mon Sep 17 00:00:00 2001 From: Aurash Karimi Date: Fri, 13 Feb 2026 13:49:11 +0000 Subject: [PATCH 07/14] fix indent --- docs/model/investment.md | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/docs/model/investment.md b/docs/model/investment.md index d85c708a9..9e2e661a4 100644 --- a/docs/model/investment.md +++ b/docs/model/investment.md @@ -75,19 +75,19 @@ providing investment and dynamic decommissioning decisions. - Calculate net revenue per unit of activity \\(AC_{t}^{NPV} \\) (Tool A): \\[ \begin{aligned} - 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 (\mu\_{s,c}^{\text{prod}} - cost\_{\text{prod}}[s,c]) - \cdot output\_{\text{coeff}}[c] \\\\ - &\quad \quad + (\mu\_{s,c}^{\text{cons}} - cost\_{\text{cons}}[s,c]) - \cdot input\_{\text{coeff}}[c] \\\\ - &\quad \quad + (\mu\_{s,c}^{\text{net}} - cost\_{\text{net}}[s,c]) - \cdot (output\_{\text{coeff}}[c] - input\_{\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 (\mu\_{s,c}^{\text{prod}} - cost\_{\text{prod}}[s,c]) + \cdot output\_{\text{coeff}}[c] \\\\ + &\quad \quad + (\mu\_{s,c}^{\text{cons}} - cost\_{\text{cons}}[s,c]) + \cdot input\_{\text{coeff}}[c] \\\\ + &\quad \quad + (\mu\_{s,c}^{\text{net}} - cost\_{\text{net}}[s,c]) + \cdot (output\_{\text{coeff}}[c] - input\_{\text{coeff}}[c]) \\\\ + &\Big\\} \end{aligned} \\] From 63f682f534c5b29f0c055ca7499187a1bd4112ab Mon Sep 17 00:00:00 2001 From: Aurash Karimi Date: Fri, 13 Feb 2026 13:52:58 +0000 Subject: [PATCH 08/14] fix equation indent --- docs/model/investment.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/docs/model/investment.md b/docs/model/investment.md index 9e2e661a4..6e2f6c4ce 100644 --- a/docs/model/investment.md +++ b/docs/model/investment.md @@ -95,20 +95,20 @@ providing investment and dynamic decommissioning decisions. of interest (primary output \\( c_{primary} \\)) is excluded from the price term: \\[ \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} \\\\ - &+ \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\\} + 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} \\\\ + &+ \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} \\] From 9345a93532e41a5785d2e10c0d24bfacfdcff844 Mon Sep 17 00:00:00 2001 From: Aurash Karimi Date: Fri, 13 Feb 2026 16:23:33 +0000 Subject: [PATCH 09/14] add npv metrics and deadlock details to docs --- docs/model/investment.md | 48 +++++++++++++++++++++------------------- 1 file changed, 25 insertions(+), 23 deletions(-) diff --git a/docs/model/investment.md b/docs/model/investment.md index 6e2f6c4ce..9fb3db0c9 100644 --- a/docs/model/investment.md +++ b/docs/model/investment.md @@ -80,14 +80,6 @@ providing investment and dynamic decommissioning decisions. 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 (\mu\_{s,c}^{\text{prod}} - cost\_{\text{prod}}[s,c]) - \cdot output\_{\text{coeff}}[c] \\\\ - &\quad \quad + (\mu\_{s,c}^{\text{cons}} - cost\_{\text{cons}}[s,c]) - \cdot input\_{\text{coeff}}[c] \\\\ - &\quad \quad + (\mu\_{s,c}^{\text{net}} - cost\_{\text{net}}[s,c]) - \cdot (output\_{\text{coeff}}[c] - input\_{\text{coeff}}[c]) \\\\ - &\Big\\} \end{aligned} \\] @@ -101,19 +93,9 @@ providing investment and dynamic decommissioning decisions. &- \sum\_{c \neq c_{primary}} \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} \\] - > Note: "scopes" are not implemented in the current model. - ### Initialise demand profiles for commodity of interest - Initialise \\( D[c,t] \\) from the MSY dispatch run output \\( U_c \\). @@ -175,13 +157,33 @@ 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 divided by the - annualised fixed cost. +- **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. + +- **If \\(\text{AFC} > 0\\), Use the profitability index \\(\text{PI}\\) metric:** This is the total + annualised surplus divided by the annualised fixed cost. \\[ - \text{Profitability Index} = + \text{PI} = \frac{\sum_t \text{act}_t \cdot \text{AC}_t^{\text{NPV}}}{\text{AFC} \cdot \text{cap}} \\] +- **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. + #### Tool B: LCOX This method is used when decision rule is single objective and objective is LCOX for agents' serving @@ -314,7 +316,7 @@ load requirements. The profitability index is calculated as: \\[ -\text{Profitability Index} = \frac{\sum_t act_t \cdot AC_t^{NPV}}{AFC \times cap} +\text{PI} = \frac{\sum_t act_t \cdot AC_t^{NPV}}{AFC \times cap} \\] Suppose the dispatch optimiser determines \\( act_{t1} = 80 \\) MWh and \\( act_{t2} = 20 \\) MWh are @@ -322,7 +324,7 @@ the optimal activity levels: \\[ \begin{aligned} -\text{Profitability Index} &= \frac{(80 \times 10) + (20 \times (-10))}{1{,}000 \times 100} \\\\ +\text{PI} &= \frac{(80 \times 10) + (20 \times (-10))}{1{,}000 \times 100} \\\\ &= \frac{800 - 200}{100{,}000} \\\\ &= \frac{600}{100{,}000} \\\\ &= 0.006 From e7b4d2e26955de21f8878e62587e7b9aca67def9 Mon Sep 17 00:00:00 2001 From: Aurash Karimi Date: Fri, 13 Feb 2026 16:37:16 +0000 Subject: [PATCH 10/14] improve typesetting --- docs/model/investment.md | 47 ++++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 23 deletions(-) diff --git a/docs/model/investment.md b/docs/model/investment.md index 9fb3db0c9..3ba4ae6e3 100644 --- a/docs/model/investment.md +++ b/docs/model/investment.md @@ -197,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 \times cap + \sum_t act_t \times AC_{t}^{LCOX} + VoLL \times UnmetD_t + \text{AFC} \times cap + \sum_t act_t \times AC_{t}^{LCOX} + VoLL \times UnmetD_t \Big\\} \\] @@ -232,8 +232,8 @@ For each asset option: 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 -t1 (peak period) and t2 (off-peak period) with variable operating costs \\( cost\_{var}[t] \\) -constant in all 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 @@ -256,7 +256,7 @@ constant in all time periods. #### Market Prices by Time Period -| Commodity | Notation | t1 (Peak) | t2 (Off-peak) | +| Commodity | Notation | \\(t_0\\) (Peak) | \\(t_1\\) (Off-peak) | |-----------|----------|-----------|---------------| | Electricity | \\( \lambda\_{c_{elec},r,t} \\) | £90/MWh | £50/MWh | | Heat | \\( \lambda\_{c_{heat},r,t} \\) | £25/MWh | £15/MWh | @@ -269,14 +269,15 @@ constant in all time periods. The net revenue calculation follows the general form: \\[ -AC_t^{NPV} = \sum_{c} \Big( output\_{coeff}[c] - input\_{coeff}[c] \Big) \cdot \lambda_{c,r,t} - cost\_{var}[t] +AC_t^{NPV} = \sum_{c} \Big( output\_{coeff}[c] - input\_{coeff}[c] \Big) +\cdot \lambda_{c,r,t} - cost\_{var}[t] \\] -**For t1 (peak period):** +**For \\(t_0\\) (peak period):** \\[ \begin{aligned} -AC_{t1}^{NPV} &= (1.0 \times 90) + (0.5 \times 25) + (-2.5 \times 35) - 5 \\\\ +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} @@ -284,11 +285,11 @@ AC_{t1}^{NPV} &= (1.0 \times 90) + (0.5 \times 25) + (-2.5 \times 35) - 5 \\\\ The asset earns £10 profit for every MWh it operates during peak periods. -**For t2 (off-peak period):** +**For \\(t_1\\) (off-peak period):** \\[ \begin{aligned} -AC_{t2}^{NPV} &= (1.0 \times 50) + (0.5 \times 15) + (-2.5 \times 25) - 5 \\\\ +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} @@ -301,14 +302,14 @@ The asset loses £10 for every MWh it operates during off-peak periods. The optimisation maximises total net revenue across all time periods: \\[ -\max \sum_t act_t \cdot AC_t^{NPV} = act_{t1} \cdot 10 + act_{t2} \cdot (-10) +\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 t1 (profitable) and - minimise operation during t2 (unprofitable), subject to technical constraints such as minimum +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 @@ -319,8 +320,8 @@ 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_{t1} = 80 \\) MWh and \\( act_{t2} = 20 \\) MWh are -the optimal activity levels: +Suppose the dispatch optimiser determines \\( act_{t_{0}} = 80 \\) MWh and \\( act_{t_1} = 20 \\) +MWh are the optimal activity levels: \\[ \begin{aligned} @@ -345,11 +346,11 @@ AC_t^{LCOX} = cost\_{var}[t] + \sum_{c \neq c_{primary}} \Big( input\_{coeff}[c] output\_{coeff}[c] \Big) \cdot \lambda_{c,r,t} \\] -**For t1 (peak period):** +**For \\(t_0\\) (peak period):** \\[ \begin{aligned} -AC_{t1}^{LCOX} &= 5 + (2.5 \times 35) - (0.5 \times 25) \\\\ +AC_{t_{0}}^{LCOX} &= 5 + (2.5 \times 35) - (0.5 \times 25) \\\\ &= 5 + 87.5 - 12.5 \\\\ &= \text{£80/MWh} \end{aligned} @@ -357,11 +358,11 @@ AC_{t1}^{LCOX} &= 5 + (2.5 \times 35) - (0.5 \times 25) \\\\ It costs £80 per MWh to operate during peak periods (net of heat by-product sales). -**For t2 (off-peak period):** +**For \\(t_1\\) (off-peak period):** \\[ \begin{aligned} -AC_{t2}^{LCOX} &= 5 + (2.5 \times 25) - (0.5 \times 15) \\\\ +AC_{t_1}^{LCOX} &= 5 + (2.5 \times 25) - (0.5 \times 15) \\\\ &= 5 + 62.5 - 7.5 \\\\ &= \text{£60/MWh} \end{aligned} @@ -377,8 +378,8 @@ The optimiser determines the most cost-effective capacity and dispatch pattern t \\( cap \\) and \\( act_t \\): \\[ -AFC \cdot cap + \sum_t act_t \cdot AC_t^{LCOX} = 1{,}000 \cdot cap + act_{t1} - \cdot 80 + act_{t2} \cdot 60 +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) @@ -389,8 +390,8 @@ 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_{t1} = 150 \\) MWh, - and \\( act_{t2} = 80 \\) MWh are the optimal capacity and activity levels: +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} From 046b16f4e95460eea4418d2dfdb1fa2660e31481 Mon Sep 17 00:00:00 2001 From: Aurash Karimi Date: Fri, 13 Feb 2026 16:41:14 +0000 Subject: [PATCH 11/14] pretty table --- docs/model/investment.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/docs/model/investment.md b/docs/model/investment.md index 3ba4ae6e3..9e08105b0 100644 --- a/docs/model/investment.md +++ b/docs/model/investment.md @@ -239,28 +239,28 @@ This example demonstrates the evaluation across two time periods #### Asset Parameters -| Parameter | Notation | Value | Description | -|-----------|----------|-------|-------------| -| 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 | +| Parameter | Notation | Value | Description | +|--------------------------------|--------------------------------------|---------------------------|-----------------------------------| +| 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 | #### Investment Parameters -| Parameter | Notation | Value | -|-----------|----------|-------| +| Parameter | Notation | Value | +|-----------------------|----------------------|-----------| | Annualised fixed cost | \\( AFC\_{opt,r} \\) | £1,000/MW | -| Capacity | \\( cap \\) | 100 MW | +| Capacity | \\( cap \\) | 100 MW | #### Market Prices by Time Period -| Commodity | Notation | \\(t_0\\) (Peak) | \\(t_1\\) (Off-peak) | -|-----------|----------|-----------|---------------| -| Electricity | \\( \lambda\_{c_{elec},r,t} \\) | £90/MWh | £50/MWh | -| Heat | \\( \lambda\_{c_{heat},r,t} \\) | £25/MWh | £15/MWh | -| Natural gas | \\( \lambda\_{c_{gas},r,t} \\) | £35/MWh | £25/MWh | +| Commodity | Notation | \\(t_0\\) (Peak) | \\(t_1\\) (Off-peak) | +|-------------|---------------------------------|------------------|----------------------| +| Electricity | \\( \lambda\_{c_{elec},r,t} \\) | £90/MWh | £50/MWh | +| Heat | \\( \lambda\_{c_{heat},r,t} \\) | £25/MWh | £15/MWh | +| Natural gas | \\( \lambda\_{c_{gas},r,t} \\) | £35/MWh | £25/MWh | ### NPV Approach (Tool A) From 1656187135381b4e70732e0d3c9528036a48cb58 Mon Sep 17 00:00:00 2001 From: Aurash Karimi Date: Fri, 13 Feb 2026 16:41:34 +0000 Subject: [PATCH 12/14] pretty table --- docs/model/investment.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/docs/model/investment.md b/docs/model/investment.md index 9e08105b0..3ba4ae6e3 100644 --- a/docs/model/investment.md +++ b/docs/model/investment.md @@ -239,28 +239,28 @@ This example demonstrates the evaluation across two time periods #### Asset Parameters -| Parameter | Notation | Value | Description | -|--------------------------------|--------------------------------------|---------------------------|-----------------------------------| -| 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 | +| Parameter | Notation | Value | Description | +|-----------|----------|-------|-------------| +| 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 | #### Investment Parameters -| Parameter | Notation | Value | -|-----------------------|----------------------|-----------| +| Parameter | Notation | Value | +|-----------|----------|-------| | Annualised fixed cost | \\( AFC\_{opt,r} \\) | £1,000/MW | -| Capacity | \\( cap \\) | 100 MW | +| Capacity | \\( cap \\) | 100 MW | #### Market Prices by Time Period -| Commodity | Notation | \\(t_0\\) (Peak) | \\(t_1\\) (Off-peak) | -|-------------|---------------------------------|------------------|----------------------| -| Electricity | \\( \lambda\_{c_{elec},r,t} \\) | £90/MWh | £50/MWh | -| Heat | \\( \lambda\_{c_{heat},r,t} \\) | £25/MWh | £15/MWh | -| Natural gas | \\( \lambda\_{c_{gas},r,t} \\) | £35/MWh | £25/MWh | +| Commodity | Notation | \\(t_0\\) (Peak) | \\(t_1\\) (Off-peak) | +|-----------|----------|-----------|---------------| +| Electricity | \\( \lambda\_{c_{elec},r,t} \\) | £90/MWh | £50/MWh | +| Heat | \\( \lambda\_{c_{heat},r,t} \\) | £25/MWh | £15/MWh | +| Natural gas | \\( \lambda\_{c_{gas},r,t} \\) | £35/MWh | £25/MWh | ### NPV Approach (Tool A) From d4f7cd373dbaf6c3db6c199b0b8c665469a613b2 Mon Sep 17 00:00:00 2001 From: Aurash Karimi Date: Mon, 16 Feb 2026 10:55:56 +0000 Subject: [PATCH 13/14] simplify doc --- docs/model/investment.md | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/docs/model/investment.md b/docs/model/investment.md index 3ba4ae6e3..378b7cb7d 100644 --- a/docs/model/investment.md +++ b/docs/model/investment.md @@ -258,7 +258,7 @@ This example demonstrates the evaluation across two time periods | Commodity | Notation | \\(t_0\\) (Peak) | \\(t_1\\) (Off-peak) | |-----------|----------|-----------|---------------| -| Electricity | \\( \lambda\_{c_{elec},r,t} \\) | £90/MWh | £50/MWh | +| Electricity | \\( \lambda\_{c_{primary},r,t} \\) | £90/MWh | £50/MWh | | Heat | \\( \lambda\_{c_{heat},r,t} \\) | £25/MWh | £15/MWh | | Natural gas | \\( \lambda\_{c_{gas},r,t} \\) | £35/MWh | £25/MWh | @@ -266,13 +266,6 @@ This example demonstrates the evaluation across two time periods #### Calculate Net Revenue per Unit of Activity -The net revenue calculation follows the general form: - -\\[ -AC_t^{NPV} = \sum_{c} \Big( output\_{coeff}[c] - input\_{coeff}[c] \Big) -\cdot \lambda_{c,r,t} - cost\_{var}[t] -\\] - **For \\(t_0\\) (peak period):** \\[ @@ -339,13 +332,6 @@ The profitability index is then compared against all other options to determine #### Net Cost per Unit of Activity -The net cost excludes the primary output (electricity) and is calculated as: - -\\[ -AC_t^{LCOX} = cost\_{var}[t] + \sum_{c \neq c_{primary}} \Big( input\_{coeff}[c] - - output\_{coeff}[c] \Big) \cdot \lambda_{c,r,t} -\\] - **For \\(t_0\\) (peak period):** \\[ From d2116c1e03a0ccf0042a78968a353d134cefe038 Mon Sep 17 00:00:00 2001 From: Aurash Karimi Date: Mon, 16 Feb 2026 12:12:46 +0000 Subject: [PATCH 14/14] make capitalisation consistent --- docs/model/investment.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/model/investment.md b/docs/model/investment.md index 378b7cb7d..2275c833c 100644 --- a/docs/model/investment.md +++ b/docs/model/investment.md @@ -221,7 +221,7 @@ 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 divided by the annual output. +- **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} @@ -370,10 +370,10 @@ AFC \cdot cap + \sum_t act_t \cdot AC_t^{LCOX} = 1{,}000 \cdot cap + act_{t_{0}} #### Cost Index (Levelised Cost of X) -The cost index is calculated as: +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} +\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, @@ -381,14 +381,14 @@ Suppose the optimiser determines \\( cap = 100 \\) MW, \\( act_{t_{0}} = 150 \\) \\[ \begin{aligned} -\text{cost index} &= \frac{(1{,}000 \times 100) + (150 \times 80) + (80 \times 60)}{150 + 80} \\\\ +\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. +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.