You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
In this work, we analyse how we can use the famous Ward reduction to reduce the computational burden of
unit-commitment models. The UC model we currently study has two main components:
Typical model for thermal generating units: linear generation costs, generation limits, ramps, and minimum up and down times.
Lossless DC network model.
The resulting mathematical model is mixed-integer linear.
For the lack of a better name, in the following, we refer to this package as the package.
Test system 1354pegase with full network
Test system 1354pegase with reduced network
Test system 6515rte with full network
Test system 6515rte with reduced network
Functionality
The package first determines sets of branch elements whose limits cannot be reached during the planning horizon
Then, it applies succesive Ward reductions to the power system by explointing the redundant branch limits
previously found. In the Ward reduction, nodes connected to branches with redundant limits are deemed external;
nodes directly connected to any external nodes are defined frontier nodes; and the remaining, those connected to at
least one branch element whose limit can be reached and those who are not directly connected to external nodes, are called
internal nodes.
Name that uniquely identifies the current experiment. If an output directory, OUT_DIR, is not provided, then an output directory EXP_NAME will be created, defaults to "exp1"
T
Number of periods in the scheduling horizon, defaults to 36
TIME_LIMIT
Time limit in seconds, defaults to 3600.0
CASE
ID of the case under study, defaults to "1"
PS
Name of the power system under study, defaults to "ieee118"
IN_DIR
dir where the input files are located, defaults to ''. If not given, the input directory is assumed to be in the parent directory
OUT_DIR
dir to which the output is to be written to, defaults to ''. If not given, an directory will be created in the parent directory
THREADS
Maximum number of threads available to each process, defaults to 0
DISCRETIZATION
Length in hours of each time period in the scheduling horizon, defaults to 1.0
VERBOSE
Flag that indicates whether the optimization solvers console output is enabled, defaults to True
DISCRETIZATION
Length in hours of each time period in the scheduling horizon, defaults to 1.0
MILP_GAP
Relative gap tolerance for the UC MILP, defaults to 1e-4
REDUCE_SYSTEM
Flag to indicate whether the transmission system should be reduced, defaults to False
DEFICIT_COST
Unitary cost for load curtailment and generation surplus, defaults to 1e8
REDUCE_SYSTEM
Flag to indicate whether the transmission system should be reduced, defaults to False
POWER_BASE
Power base in MVA, defaults to 100
SCAL_OBJ_F
Scaling factor applied to the objective function. The objective function is multiplied by this factor, defaults to 1e-3.
MIN_GEN_CUT_MW
Threshold for the minimum generation of generating units. Units whose minimum generation is strictly less than this value are assumed to have no minimum generation, i.e., the minimum generation is replaced by 0, default to 1.00.
PTDF_COEFF_TOL
Threshold for the coefficient of the PTDF matrix. Coefficients whose magnitudes are less than this value are substituted by 0, defaults to 1e-5.
MAX_NUMBER_OF_CONNECTIONS
In the strategy used to reduce the network, it is possible to determine the maximum number of connections that the network nodes may have after the reduction is applied, defaults to 20
MAX_PROCESS_REDUCE_NETWORK
Maximum number of processes launched to identify inactive transmission line bounds, defaults to 1
NETWORK_MODEL
Network model used
NETWORK_SLACKS
Network slacks to be included (default = NetworkSlacks.BUS_SLACKS)
Dependencies
The complete package dependency is described in 'requirements.txt'. We summarize the roles of the main packages below.
If you have an MPI implementation, you can launch multiple processes to accelerate the branch-limit's redundancy identification step.
We test our codes with the Microsoft implementation, MS-MPI, Version 10.1.12498.18,
on an Intel machine running Win11. And on Ubuntu 20, with Open-MPI, version 4, also on a Intel machine.
Citing
TODO
Licence
TODO
14-node system example
Original network
Consider the following 14-node system.
The system has 18 branches, 5 generators (represented in green), and 11 nodes with load (represented by the red arrows).
Assume for simplicity that all branches have reactances of 0.1 p.u.. Moreover, throughout this example, node 2 is used as the reference node for the voltage angles.
The first order of businness is to compute the Power Transfer Distribution Factors (PTDF) matrix for this system.
Now, assume that the individual loads are 1 p.u., then adding up to a total system load of 11 p.u..
Moreover, assume that only 4 of all 18 branches can possibly reach their limits under any feasible operation of this system for this load profile --- these are the branches 4, 13, 14 and 16, represented in red in the image.
For the possibly binding branches, assume lower and upper limits for the flows of 10 p.u.. For all other branches, the limits -inf and +inf.
We intend to show some of the most important features of our algorithm with this example. Hence, in this example, we follow the same steps taken in the algorithm.
If you wish, you can follow the same steps by debugging our code with your favorite IDE.
With the PTDF, we can add the flow constraints for the branches whose limits might be reached in the UC, as we explain in the paper. For this example, there are 4 possibly binding branches, 4, 13, 14 and 16. Their flows, as described by the PTDF, are force to be within their respective limits by the constraints below.
The above formulations are used when the network is not reduced. That is, for the full network, or original system.
As the network is reduced, nodes, branches and slack variables are eliminated from the model. Thus reflecting in changes both in the B-theta and the PTDF formulations
Reduced network
Below we show the step-by-step transformation that these formulations undergo as the network is reduced.
Removal of node 8
For this system, our algorithm firstly removes node 8. This node is connected to the rest of the system through a single, and it is one branch that is possibly binding. Furthermore, generator G5 is connected to node 8. Hence, after removing this, we need to ensure that the limits of the branch removed with it, branch 13, is still enforced in the reduced network, and we need to properly reassign the generation of G5.
In the B-theta formulation, in addition to removing the constraints associated with node 8 and branch 13, the power balance constraint of node 7 now becomes
In our strategy, because the limits of branch 13 are possibly binding but it has been removed, its limits are now enforced on the injections connected to the node being deleted.
For branch 13, this simply means enforcing its limits on the generation of G5.
For this particular node deletion, nothing changes for the PTDF formulation.
Removal of nodes 14, 13 and 12
The next step is to remove node 14. This is a load node also connected to the rest of the network through a single branch. Different from node 8, however, the branch connecting node 14 is not possibly binding. Thus, all we need to do is carefully reassign the load then connected to node 14. Because it was connected by a single branch, all injections of node 14 are then reassigned to the node that it was connected to: node 13. Thus, node 13 now receives an additional 1 p.u. load.
For the B-theta formulation, removing node 14, in addition to removing the variables and constraints associated with it and with the branch deleted, boils down to modifying the power balance constraint of node 13 as follows.
For the PTDF formulation, in addition to relocating the load, we need to remember to remove the slack variables previously associated with node 14 from the flow expressions, as follows.
The next node removed is node 10. Different from the previous nodes deleted, node 10 is connected to two branches and one of them is possibly them. Removing node 10 then divides its injection between the nodes it was connected to (11 and 9), and creates a new branch between these nodes (branch 19). The amount of injection of node 10 that goes to 9 and the amount that goes to 11, as well as the reactance and limits of the new branch, depend on the reactances of the branches then connecting node 10. The new branch's limits, in fact, are also dependent on the injection of node 10.
By following the same procedure applied to node 10, we can safely remove node 11 and reduce the network to the one shown below.
Removal of node 1
Then, we further reduce the network by deleting node 1. This node is connected to two branches but it has one generator connected to it. Naturally, the generation from G1 is then split between nodes 2 and 5, according to the reactances of the branches between deleted.
Note that the only thing that changes is that the generator now simultaneously injects power into two nodes. However, its total power injection is still the same: the injection has only been fractioned among more nodes. Furthermore, from the point-of-view of the generator, its model remains unchanged.
The same steps applied to node 1 are replicated to node 3, with the exception that the new branch between nodes 2 and 4 is parallel to a existing branch, which happens to be possibly binding.
In this scenario, the limits of the new branch 22 are defined by the maximum angular difference that could be applied to branch 4. The result is a lower bound of -15 p.u. and an upper bound of 15 p.u..