This discussion explains the reason behind changing one of the configuration settings for the vSPD model from a one to a zero, in order to allow vSPD to generate the same prices as SPD.

If you want to make the configuration change, locate the file called in the Programs directory of your vSPD folder. Open the file with a text editor and locate the scalar called resolveHVDCNonPhysicalLosses – it’s roughly in the middle of the file. Change its value from one to zero. Save and exit the file. When you’re done, the line in question should appear as:

 Scalar resolveHVDCNonPhysicalLosses      / 0 / ;

The GDX files for 12, 13 and 17 January 2020 will each give rise to vSPD generating prices and an objective function value that differs from those generated by SPD (and, for that matter, the prices published by the pricing manager). The GDX files do not have an ‘x’ in their file name to indicate that vSPD and SPD will generate different prices because the cause of the differences does not lie with the input data. Rather, it is because SPD does not detect and correct for the presence of non-physical losses. If the resolveHVDCNonPhysicalLosses switch is set to zero as described above, vSPD and SPD will generate the same results. If set to one, vSPD and SPD will generate different results.

The presence of SPD solutions containing non-physical losses has increased since the national market for instantaneous reserves was introduced.

There are certain situations called circulating branch flows where SPD will determine transmission losses to be higher than they actually should be given the actual branch flow. When this occurs, SPD is able to improve the objective function value so it continues to calculate losses incorrectly until such point as the objective function value ceases to improve. The difference between these rogue transmission losses and the correctly calculated transmission losses is referred to as non-physical losses.

The presence of non-physical losses in the solution is undesirable. They should be detected and the model should be re-solved using specific integer variables that force losses to be calculated correctly.

SPD models a branch flow, i.e. the amount of energy flowing between two points on the grid, as the sum of the forward flow less the backward flow, i.e. the flow can go in either direction. The transmission losses associated with a branch flow are calculated as the sum of the loss on the forward flow plus the loss on the backward flow. In most situations, higher transmission losses will worsen the objective function value, and it is via this mechanism that the model will ensure the flow can only be non-zero in one direction at a time. In other words, energy only flows in one direction at any point in time.

However, as noted above, there are particular conditions where (seemingly) greater losses will improve the objective function value. In these situations, SPD will force both the forward and backward branch flows to be simultaneously non-zero in order to increase the associated branch losses. Such a situation is referred to as ‘circulating flows’.

Transmission losses are a quadratic function of the branch flow and both SPD and vSPD use a piecewise linear function to approximate the quadratic losses. Another way for the model to erroneously increase transmission losses is to ‘jump’ up the piecewise linear function to a higher, or more lossy, segment than the segment that should be used. This is referred to as ‘loss segment skipping’.

By default, vSPD will detect for the presence of circulating flows and loss segment skipping. If either is detected, the model is re-solved using so-called SOS1 and SOS2 integer variables to ensure that neither circulating flows nor loss segment skipping occurs. The configuration change suggested above will remove the fix for loss segment skipping on the HVDC so that the solution mimics that produced by SPD.  

As currently configured, SPD detects if circulating flows occur on an transmission branch, either an AC or the DC branch. But SPD does not check for the presence of loss segment skipping. If a circulating flow situation occurs, SPD will re-solve using SOS1 integer variables to restrict the circulating flows and, if the transmission branch in question is the HVDC, it will also apply SOS2 integer variables to prevent loss segment skipping. But it doesn’t explicitly check for loss segment skipping.

The current default settings allows vSPD to detect and resolve both circulating flow and loss segment skipping (HVDC only) situations. This is the reason why the vSPD results for some trading periods on 12, 13 and 17 January 2020 are different from that of SPD.

The system operator has indicated that a new SPD version planned to go live in October 2020 will check for and resolve loss segment skipping on the HVDC. Until then, vSPD users may choose to suppress the detection of non-physical losses in vSPD, as described above, in order to have vSPD produce the same results as SPD.