Network Formulations

Network formulations are used to describe how the network and buses are handled when constructing constraints. The most common constraint decided by the network formulation is the supply-demand balance constraint.

PowerSimulations.NetworkModelType

Establishes the NetworkModel for a given PowerModels formulation type.

Arguments

  • ::Type{T} where T <: PM.AbstractPowerModel: the power-system formulation type.

Accepted keyword arguments

  • use_slacks::Bool = false Adds slack buses to the network modeling.
  • PTDF_matrix::Union{PNM.PowerNetworkMatrix, Nothing} = nothing PTDF/VirtualPTDF matrix produced by PowerNetworkMatrices (optional).
  • LODF_matrix::Union{PNM.PowerNetworkMatrix, Nothing} = nothing LODF/VirtualLODF matrix produced by PowerNetworkMatrices (optional).
  • reduce_radial_branches::Bool = false Enable radial branch reduction when building network matrices.
  • reduce_degree_two_branches::Bool = false Enable degree-two branch reduction when building network matrices.
  • subnetworks::Dict{Int, Set{Int}} = Dict() Optional mapping of reference bus → set of mapped buses. If not provided, subnetworks are inferred from PTDF/VirtualPTDF or discovered from the system.
  • duals::Vector{DataType} = Vector{DataType}() Constraint types for which duals should be recorded.
  • power_flow_evaluation::Union{PFS.PowerFlowEvaluationModel, Vector{PFS.PowerFlowEvaluationModel}} Power-flow evaluation model(s). A single model is flattened to a vector internally.

Notes

  • modeled_branch_types and reduced_branch_tracker are internal fields managed by the model.
  • subsystem can be set after construction via set_subsystem!(model, id).
  • PTDF/LODF inputs are validated against the requested reduction flags and may raise a ConflictingInputsError if they are inconsistent with reduce_radial_branches or reduce_degree_two_branches.

Examples

ptdf = PNM.VirtualPTDF(system) nw = NetworkModel(PTDFPowerModel; PTDFmatrix = ptdf, reduceradialbranches = true, powerflow_evaluation = PFS.PowerFlowEvaluationModel())

nw2 = NetworkModel(CopperPlatePowerModel; subnetworks = Dict(1 => Set([1,2,3])))

source

Available Network Models are:

FormulationDescription
CopperPlatePowerModelCopper plate connection between all components, i.e. infinite transmission capacity
AreaBalancePowerModelNetwork model approximation to represent inter-area flow with each area represented as a single node
PTDFPowerModelUses the PTDF factor matrix to compute the fraction of power transferred in the network across the branches
AreaPTDFPowerModelUses the PTDF factor matrix to compute the fraction of power transferred in the network across the branches and balances power by Area instead of system-wide

PowerModels.jl available formulations:

  • Exact non-convex models: ACPPowerModel, ACRPowerModel, ACTPowerModel.
  • Linear approximations: DCPPowerModel, NFAPowerModel.
  • Quadratic approximations: DCPLLPowerModel, LPACCPowerModel
  • Quadratic relaxations: SOCWRPowerModel, SOCWRConicPowerModel, SOCBFPowerModel, SOCBFConicPowerModel, QCRMPowerModel, QCLSPowerModel.
  • SDP relaxations: SDPWRMPowerModel.

All of these formulations are described in the PowerModels.jl documentation and will not be described here.

CopperPlatePowerModel

Variables:

If Slack variables are enabled:

  • SystemBalanceSlackUp:

    • Bounds: [0.0, ]
    • Default initial value: 0.0
    • Default proportional cost: 1e6
    • Symbol: $p^\text{sl,up}$
  • SystemBalanceSlackDown:

    • Bounds: [0.0, ]
    • Default initial value: 0.0
    • Default proportional cost: 1e6
    • Symbol: $p^\text{sl,dn}$

Objective:

Add a large proportional cost to the objective function if slack variables are used $+ (p^\text{sl,up} + p^\text{sl,dn}) \cdot 10^6$

Expressions:

Adds $p^\text{sl,up}$ and $p^\text{sl,dn}$ terms to the respective active power balance expressions ActivePowerBalance created by this CopperPlatePowerModel network formulation.

Constraints:

Adds the CopperPlateBalanceConstraint to balance the active power of all components available in the system

\[\begin{align} & \sum_{c \in \text{components}} p_t^c = 0, \quad \forall t \in \{1, \dots, T\} \end{align}\]

AreaBalancePowerModel

Variables: If Slack variables are enabled:

  • SystemBalanceSlackUp by area:

    • Bounds: [0.0, ]
    • Default initial value: 0.0
    • Default proportional cost: 1e6
    • Symbol: $p^\text{sl,up}$
  • SystemBalanceSlackDown by area:

    • Bounds: [0.0, ]
    • Default initial value: 0.0
    • Default proportional cost: 1e6
    • Symbol: $p^\text{sl,dn}$

Objective:

Adds $p^\text{sl,up}$ and $p^\text{sl,dn}$ terms to the respective active power balance expressions ActivePowerBalance per area.

Expressions:

Creates ActivePowerBalance expressions for each area that then are used to balance active power for all buses within a single area.

Constraints:

Adds the CopperPlateBalanceConstraint to balance the active power of all components available in an area.

\[\begin{align} & \sum_{c \in \text{components}_a} p_t^c = 0, \quad \forall a\in \{1,\dots, A\}, t \in \{1, \dots, T\} \end{align}\]

PTDFPowerModel

Variables:

If Slack variables are enabled:

  • SystemBalanceSlackUp:

    • Bounds: [0.0, ]
    • Default initial value: 0.0
    • Default proportional cost: 1e6
    • Symbol: $p^\text{sl,up}$
  • SystemBalanceSlackDown:

    • Bounds: [0.0, ]
    • Default initial value: 0.0
    • Default proportional cost: 1e6
    • Symbol: $p^\text{sl,dn}$

Objective:

Add a large proportional cost to the objective function if slack variables are used $+ (p^\text{sl,up} + p^\text{sl,dn}) \cdot 10^6$

Expressions:

Adds $p^\text{sl,up}$ and $p^\text{sl,dn}$ terms to the respective system-wide active power balance expressions ActivePowerBalance created by this CopperPlatePowerModel network formulation. In addition, it creates ActivePowerBalance expressions for each bus to be used in the calculation of branch flows.

Constraints:

Adds the CopperPlateBalanceConstraint to balance the active power of all components available in the system

\[\begin{align} & \sum_{c \in \text{components}} p_t^c = 0, \quad \forall t \in \{1, \dots, T\} \end{align}\]

In addition creates NodalBalanceActiveConstraint for HVDC buses balance, if DC components are connected to an HVDC network.

AreaPTDFPowerModel

Variables

Slack variables are not supported.

Objective Function

No changes to the objective function.

Expressions

Creates the area-wide and nodal-wide active power balance expressions ActivePowerBalance to balance power based on each area independently. The flows across areas are computed based on the PTDF factors of lines connecting areas.

Constraints:

Adds the ActivePowerBalance constraint to balance the active power of all components available for each area.

\[\begin{align} & \sum_{c \in \text{components}_a} p_t^c = 0, \quad \forall a\in \{1,\dots, A\}, t \in \{1, \dots, T\} \end{align}\]

This includes the flows of lines based on the PTDF factors.

SecurityConstrainedPTDFPowerModel

PowerSimulations.SecurityConstrainedPTDFPowerModelType

Linear active power approximation using the power transfer distribution factor PTDF matrix and line outage distribution factors LODF for branches outages. If exists, the rating b is considered as the branch power limit for post-contingency flows, otherwise the standard rating is considered.

source

TODO

SecurityConstrainedAreaPTDFPowerModel

TODO