Formulation
Currently, ProxAL
is designed to solve contingency-constrained AC Optimal Power Flow (ACOPF) formulations over multiple time periods.
Time coupling
Each time period $t \in T$ involves the solution of an ACOPF with active $p_{dt}$ and reactive $q_{dt}$ load forecasts, which may differ from one time period to the next. In each time period $t \in T$, we must determine the 'base-case' active power generation level of generator $g \in G$, denoted by $p^0_{gt}$. The active power generations in consecutive time periods are constrained by the generator's ramping capacity, which can be modeled as follows:
\[-r_g \leq p^0_{g,t-1} - p^0_{g,t} \leq r_g \qquad \forall g \in G, \; \forall t \in T \setminus \{1\}.\]
Here, $r_g$ denotes the ramping capacity of generator $g$ (per unit of time in which $T$ is defined).
For convenience, ProxAL
also provides the functionality to solve the full/"non-decomposed" model using JuMP
/Ipopt
. In this case, one can switch between the above inequality
form, or an equivalent equality
form, as well as a quadratic penalty
form of the ramping constraint by setting the time_link_constr_type
field of ProxAL.ModelParams
in Model parameters. When solving the full/"non-decomposed" model with the quadratic penalty
form of the ramping constraints, the user must provide a value for the corresponding quadratic penalty parameter by setting θ_t
in Algorithm parameters.
Contingency constraints
Each single-period ACOPF problem may itself be constrained further by a set of transmission line contingencies, denoted by $K$. The active and reactive power generations, and bus voltages must satisfy the following constraints in each time period and each contingency:
- the power flow equations,
- bounds on active and reactive generation and voltage magnitudes, and
- line power flow limits.
It is possible that the problem parameters are such that (some of) the above constraints can become infeasible. To model this, ProxAL
also allows constraint infeasibility (except on variable bounds) by penalizing them in the objective function with a quadratic penalty. This can be controlled by setting allow_constr_infeas = true
and a corresponding value for weight_constr_infeas
in Model parameters.
Line power flow limits can be disabled by setting allow_line_limits = false
.
The contingencies in each time period are linked together via their active power generations in one of several forms. The choice of the form can be set using the ctgs_link_constr_type
field of ProxAL.ModelParams
in Model parameters.
Preventive mode: active power generation in contingency $k$ must be equal to the base case value. This constraint has one of two forms:
- Preventive equality: This is the original form of the constraint. For numerical convergence reasons,
ProxAL
does not allow using this form whenever thedecompCtgs
field ofProxAL.AlgParams
is set totrue
, see Algorithm parameters.
\[p_{gt}^k = p_{gt}^0 \qquad \forall g \in G, \; \forall k \in K, \; \forall t \in T.\]
- Preventive penalty: In this form,
ProxAL
introduces additional continuous variables $z_{g,k,t}$ along with the following constraints. Note that a quadratic penalty term $θ_c \|z_k \|^2$ is also added to the objective function, where the parameter $θ_c$ is controlled withinProxAL
whenever thedecompCtgs
field ofProxAL.AlgParams
is set totrue
. Otherwise, its value can be set using theθ_c
field ofProxAL.AlgParams
in Algorithm parameters.
\[p_{gt}^k = p_{gt}^0 + z_{gkt} \qquad \forall g \in G, \; \forall k \in K, \; \forall t \in T.\]
- Preventive equality: This is the original form of the constraint. For numerical convergence reasons,
Corrective mode: active power generation is allowed to deviate from base case by up to $\Delta$ fraction of its ramping capacity. The parameter $\Delta$ can be set using the
corr_scale
field ofProxAL.ModelParams
in Model parameters. This constraint has one of two forms:- Corrective inequality: This is the original form of the constraint. For numerical convergence reasons,
ProxAL
does not allow using this form whenever thedecompCtgs
field ofProxAL.AlgParams
is set totrue
, see Algorithm parameters.
\[0.1\, r_g \leq p_{gt}^k - p_{gt}^0 \leq \Delta \, r_g \qquad \forall g \in G, \; \forall k \in K, \; \forall t \in T\]
- Corrective equality: In this form,
ProxAL
introduces additional continuous variables $s_{g,k,t}$ along with the following constraints. As before,ProxAL
does not allow using this form whenever thedecompCtgs
field ofProxAL.AlgParams
is set totrue
.
\[\left.\begin{aligned} 0 \leq s_{gkt} \leq 2 \Delta \, r_g \\ p_{gt}^0 - p_{gt}^k + s_{gkt} = \Delta \, r_g \end{aligned}\right\} \qquad \forall g \in G, \; \forall k \in K, \; \forall t \in T\]
- Corrective penalty: In this form,
ProxAL
introduces additional continuous variables $s_{g,k,t}$ and $z_{g,k,t}$ along with the following constraints. A quadratic penalty term $θ_c \|z_k \|^2$ is also added to the objective function, where the parameter $θ_c$ is controlled withinProxAL
whenever thedecompCtgs
field ofProxAL.AlgParams
is set totrue
. Otherwise, its value can be set using theθ_c
field ofProxAL.AlgParams
in Algorithm parameters.
\[\left.\begin{aligned} 0 \leq s_{gkt} \leq 2 \Delta \, r_g \\ p_{gt}^0 - p_{gt}^k + s_{gkt} + z_{gkt} = \Delta \, r_g \end{aligned}\right\} \qquad \forall g \in G, \; \forall k \in K, \; \forall t \in T\]
- Corrective inequality: This is the original form of the constraint. For numerical convergence reasons,
Frequency control mode: In this case,
ProxAL
defines new continuous variables $\omega_{kt}$ which is the (deviation from nominal) system frequency in contingency $k$ of time period $t$, and $\alpha_g$ is the droop control parameter of generator $g$. The objective functions includes an additional term $w_\omega \| \omega \|^2$, where the parameter $w_\omega$ must be set using theweight_freq_ctrl
field ofProxAL.ModelParams
in Model parameters. This constraint has one of two forms:- Frequency equality: This is the original form of the constraint. For numerical convergence reasons,
ProxAL
does not allow using this form whenever thedecompCtgs
field ofProxAL.AlgParams
is set totrue
, see Algorithm parameters.
\[p_{gt}^k = p_{gt}^0 + \alpha_g \omega_{kt} \qquad \forall g \in G, \; \forall k \in K, \; \forall t \in T.\]
- Frequency penalty: In this form,
ProxAL
introduces additional continuous variables $z_{g,k,t}$ along with the following constraints. Note that a quadratic penalty term $θ_c \|z_k \|^2$ is also added to the objective function, where the parameter $θ_c$ is controlled withinProxAL
whenever thedecompCtgs
field ofProxAL.AlgParams
is set totrue
. Otherwise, its value can be set using theθ_c
field ofProxAL.AlgParams
in Algorithm parameters.
\[p_{gt}^k = p_{gt}^0 + \alpha_g \omega_{kt} + z_{gkt} \qquad \forall g \in G, \; \forall k \in K, \; \forall t \in T.\]
- Frequency equality: This is the original form of the constraint. For numerical convergence reasons,