Module ml4opf.functional.ac
ACOPF Functional interface
Functions
def balance_residual_bus(pd_bus: torch.Tensor,
qd_bus: torch.Tensor,
pg_bus: torch.Tensor,
qg_bus: torch.Tensor,
vm: torch.Tensor,
pf_bus: torch.Tensor,
pt_bus: torch.Tensor,
qf_bus: torch.Tensor,
qt_bus: torch.Tensor,
gs_bus: torch.Tensor,
bs_bus: torch.Tensor) ‑> tuple[torch.Tensor, torch.Tensor]-
Compute power balance residual.
\text{p_viol} = \text{pg_bus} - \text{pd_bus} - \text{pt_bus} - \text{pf_bus} - \text{gs_bus} \times \text{vm}^2 \text{q_viol} = \text{qg_bus} - \text{qd_bus} - \text{qt_bus} - \text{qf_bus} + \text{bs_bus} \times \text{vm}^2
Args
pd_bus:Tensor- Active power demand at each bus. (batch, n_bus)
qd_bus:Tensor- Reactive power demand at each bus. (batch, n_bus)
pg_bus:Tensor- Active power generation at each bus. (batch, n_bus)
qg_bus:Tensor- Reactive power generation at each bus. (batch, n_bus)
vm:Tensor- Voltage magnitude at each bus. (batch, n_bus)
pf_bus:Tensor- Active power flow from each bus. (batch, n_bus)
pt_bus:Tensor- Active power flow to each bus. (batch, n_bus)
qf_bus:Tensor- Reactive power flow from each bus. (batch, n_bus)
qt_bus:Tensor- Reactive power flow to each bus. (batch, n_bus)
gs_bus:Tensor- Shunt conductance at each bus. (batch, n_bus)
bs_bus:Tensor- Shunt susceptance at each bus. (batch, n_bus)
Returns
tuple[Tensor]- Active and reactive power balance violation \text{p_viol}, \text{q_viol} each of shape (batch, n_bus).
def flows_from_voltage(vm: torch.Tensor,
dva: torch.Tensor,
fbus: torch.Tensor,
tbus: torch.Tensor,
gff: torch.Tensor,
gft: torch.Tensor,
gtf: torch.Tensor,
gtt: torch.Tensor,
bff: torch.Tensor,
bft: torch.Tensor,
btf: torch.Tensor,
btt: torch.Tensor) ‑> tuple[torch.Tensor, torch.Tensor, torch.Tensor, torch.Tensor]def flows_from_voltage_bus(vm: torch.Tensor,
va: torch.Tensor,
fbus: torch.Tensor,
tbus: torch.Tensor,
gff: torch.Tensor,
gft: torch.Tensor,
gtf: torch.Tensor,
gtt: torch.Tensor,
bff: torch.Tensor,
bft: torch.Tensor,
btf: torch.Tensor,
btt: torch.Tensor,
dva: torch.Tensor | None = None)-
Compute power flows from voltage magnitude, angle, and branch info.
def objective(pg: torch.Tensor, c0: torch.Tensor, c1: torch.Tensor, c2: torch.Tensor) ‑> torch.Tensor-
Compute ACOPF objective function.
Args
pg:Tensor- Active power generation. (batch, n_gen)
cost:Tensor- Cost coefficients. (n_gen, 3)
Returns
Tensor- Objective function value for each sample. (batch,)
def thermal_residual(pf: torch.Tensor,
pt: torch.Tensor,
qf: torch.Tensor,
qt: torch.Tensor,
smax: torch.Tensor) ‑> tuple[torch.Tensor, torch.Tensor]-
Calculate the thermal residual for a set of flows.
\text{thrm}_1 = \text{pf}^2 + \text{qf}^2 - \text{smax}^2 \text{thrm}_2 = \text{pt}^2 + \text{qt}^2 - \text{smax}^2
Args
pf:Tensor- From power flow. (batch, n_branch)
pt:Tensor- To power flow. (batch, n_branch)
qf:Tensor- From reactive power flow. (batch, n_branch)
qt:Tensor- To reactive power flow. (batch, n_branch)
s1max:Tensor- From power flow limit. (n_branch,)
s2max:Tensor- To power flow limit. (n_branch,)
Returns
tuple[Tensor]- Thermal residuals (\text{thrm}_1, \text{thrm}_2) each of shape (batch, n_branch).