DCED#

Type for DC-based economic dispatch.

Common Parameters: c2, c1, c0, pmax, pmin, pd, ptdf, rate_a

Common Vars: pg

Common Constraints: pb, lub, llb

Available routines: DCOPF, DCOPF2, RTED, RTEDDG, RTEDESP, RTEDES, RTEDVIS, RTED2, RTED2DG, RTED2ESP, RTED2ES, ED, EDDG, EDES, ED2, ED2DG, ED2ES, DCOPF1

DCOPF#

DC optimal power flow (DCOPF) using B-theta formulation.

Notes#

  • The nodal price is calculated as pi in pic.

  • Devices online status of StaticGen, StaticLoad, and Shunt are considered in the connectivity matrices Cft, Cg, Cl, and Csh.

References#

  1. R. D. Zimmerman, C. E. Murillo-Sanchez, and R. J. Thomas, “MATPOWER: Steady-State Operations, Planning, and Analysis Tools for Power Systems Research and Education,” IEEE Trans. Power Syst., vol. 26, no. 1, pp. 12-19, Feb. 2011

  2. Y. Chen et al., "Security-Constrained Unit Commitment for Electricity Market: Modeling, Solution Methods, and Future Challenges," in IEEE Transactions on Power Systems, vol. 38, no. 5, pp. 4668-4681, Sept. 2023

Objective#

Unit

Expression

$

\(min. \sum(c_{2} p_g^{2})+ \sum(c_{1} p_g)+ \sum(u_{g} c_{0})\)

Expressions#

Name

Description

Expression

Unit

Source

plf

Line flow

\(B_{f} \theta_{bus} + P_{f}^{inj}\)

p.u.

Line

pmaxe

Effective pmax

\(c_{trl,n,e} p_{g, 0} + c_{trl, e} p_{g, max}\)

p.u.

StaticGen

pmine

Effective pmin

\(c_{trl,n,e} p_{g, 0} + c_{trl, e} p_{g, min}\)

p.u.

StaticGen

Constraints#

Name

Description

Expression

pb

power balance

\(B_{bus} \theta_{bus} + P_{bus}^{inj} + C_{l} p_{d} + C_{sh} g_{sh} - C_{g} p_g = 0\)

sbus

align slack bus angle

\(I_{sb} \theta_{bus} = 0\)

pglb

pg min

\(-p_g + p_{g, min, e} \leq 0\)

pgub

pg max

\(p_g - p_{g, max, e} \leq 0\)

plflb

line flow lower bound

\(-p_{lf} - u_{l} R_{ATEA} \leq 0\)

plfub

line flow upper bound

\(p_{lf} - u_{l} R_{ATEA} \leq 0\)

alflb

line angle difference lower bound

\(-C_{ft}^T \theta_{bus} + \theta_{bus, min} \leq 0\)

alfub

line angle difference upper bound

\(C_{ft}^T \theta_{bus} - \theta_{bus, max} \leq 0\)

Vars#

Name

Symbol

Description

Unit

Source

Properties

pg

\(p_g\)

Gen active power

p.u.

StaticGen.p

vBus

\(v_{Bus}\)

Bus voltage magnitude, placeholder

p.u.

Bus.v

aBus

\(\theta_{bus}\)

Bus voltage angle

rad

Bus.a

ExpressionCalcs#

Name

Description

Expression

Unit

Source

pi

LMP, dual of <pb>

\(\phi[pb]\)

$/p.u.

Bus

mu1

Lagrange multipliers, dual of <plflb>

\(\phi[plflb]\)

$/p.u.

Line

mu2

Lagrange multipliers, dual of <plfub>

\(\phi[plfub]\)

$/p.u.

Line

Services#

Name

Symbol

Description

Type

pd

\(p_{d}\)

effective active demand

NumOpDual

isb

\(I_{sb}\)

Index slack bus from all buses

VarSelect

ctrle

\(c_{trl, e}\)

Effective Gen controllability

NumOpDual

nctrl

\(c_{trl,n}\)

Effective Gen uncontrollability

NumOp

nctrle

\(c_{trl,n,e}\)

Effective Gen uncontrollability

NumOpDual

Parameters#

Name

Symbol

Description

Unit

Source

ug

\(u_{g}\)

Gen connection status

StaticGen.u

pg0

\(p_{g, 0}\)

Gen initial active power

p.u.

StaticGen.p0

gsh

\(g_{sh}\)

shunt conductance

Shunt.g

buss

\(B_{us,s}\)

Bus slack

Slack.bus

ud

\(u_{d}\)

Load connection status

StaticLoad.u

pd0

\(p_{d,0}\)

active demand

p.u.

StaticLoad.p0

Cg

\(C_{g}\)

Gen connection matrix

MatProcessor.Cg

Cl

\(C_{l}\)

Load connection matrix

MatProcessor.Cl

CftT

\(C_{ft}^T\)

Transpose of line connection matrix

MatProcessor.CftT

Csh

\(C_{sh}\)

Shunt connection matrix

MatProcessor.Csh

Bbus

\(B_{bus}\)

Bus admittance matrix

MatProcessor.Bbus

Bf

\(B_{f}\)

Bf matrix

MatProcessor.Bf

Pbusinj

\(P_{bus}^{inj}\)

Bus power injection vector

MatProcessor.Pbusinj

Pfinj

\(P_{f}^{inj}\)

Line power injection vector

MatProcessor.Pfinj

c2

\(c_{2}\)

Gen cost coefficient 2

$/(p.u.^2)

GCost.c2

c1

\(c_{1}\)

Gen cost coefficient 1

$/(p.u.)

GCost.c1

c0

\(c_{0}\)

Gen cost coefficient 0

$

GCost.c0

ctrl

\(c_{trl}\)

Gen controllability

StaticGen.ctrl

pmax

\(p_{g, max}\)

Gen maximum active power

p.u.

StaticGen.pmax

pmin

\(p_{g, min}\)

Gen minimum active power

p.u.

StaticGen.pmin

ul

\(u_{l}\)

Line connection status

Line.u

rate_a

\(R_{ATEA}\)

long-term flow limit

p.u.

Line.rate_a

amax

\(\theta_{bus, max}\)

max line angle difference

Line.amax

amin

\(\theta_{bus, min}\)

min line angle difference

Line.amin

DCOPF2#

DC optimal power flow (DCOPF) using PTDF formulation.

For large cases, it is recommended to build the PTDF first, especially when incremental build is necessary.

Notes#

  • This routine requires PTDF matrix.

  • LMP pi is calculated with two parts, energy price and congestion price.

  • Bus angle aBus is calculated after solving the problem.

  • In export results, pi and pic are kept for each bus, while pie can be restored manually by pie = pi - pic if needed.

Warning#

In this implementation, the dual variables for constraints have opposite signs compared to the mathematical formulation: 1. The dual of pb returns a negative value, so energy price is computed as -pb.dual_variables[0]. 2. Similarly, a minus sign is applied to the duals of plfub and plflb when calculating congestion price. The reason for this sign difference is not yet fully understood.

References#

  1. R. D. Zimmerman, C. E. Murillo-Sanchez, and R. J. Thomas, “MATPOWER: Steady-State Operations, Planning, and Analysis Tools for Power Systems Research and Education,” IEEE Trans. Power Syst., vol. 26, no. 1, pp. 12-19, Feb. 2011

  2. Y. Chen et al., "Security-Constrained Unit Commitment for Electricity Market: Modeling, Solution Methods, and Future Challenges," in IEEE Transactions on Power Systems, vol. 38, no. 5, pp. 4668-4681, Sept. 2023

Objective#

Unit

Expression

$

\(min. \sum(c_{2} p_g^{2})+ \sum(c_{1} p_g)+ \sum(u_{g} c_{0})\)

Expressions#

Name

Description

Expression

Unit

Source

plf

Line flow

\(P_{TDF} (C_{g} p_g - C_{l} p_{d} - C_{sh} g_{sh} - P_{bus}^{inj})\)

p.u.

Line

pmaxe

Effective pmax

\(c_{trl,n,e} p_{g, 0} + c_{trl, e} p_{g, max}\)

p.u.

StaticGen

pmine

Effective pmin

\(c_{trl,n,e} p_{g, 0} + c_{trl, e} p_{g, min}\)

p.u.

StaticGen

Constraints#

Name

Description

Expression

pb

power balance

\(\sum(p_g) - \sum(p_{d}) = 0\)

sbus

align slack bus angle

\(I_{sb} \theta_{bus} = 0\)

pglb

pg min

\(-p_g + p_{g, min, e} \leq 0\)

pgub

pg max

\(p_g - p_{g, max, e} \leq 0\)

plflb

line flow lower bound

\(-p_{lf} - u_{l} R_{ATEA} \leq 0\)

plfub

line flow upper bound

\(p_{lf} - u_{l} R_{ATEA} \leq 0\)

alflb

line angle difference lower bound

\(-C_{ft}^T \theta_{bus} + \theta_{bus, min} \leq 0\)

alfub

line angle difference upper bound

\(C_{ft}^T \theta_{bus} - \theta_{bus, max} \leq 0\)

Vars#

Name

Symbol

Description

Unit

Source

Properties

pg

\(p_g\)

Gen active power

p.u.

StaticGen.p

vBus

\(v_{Bus}\)

Bus voltage magnitude, placeholder

p.u.

Bus.v

aBus

\(\theta_{bus}\)

Bus voltage angle

rad

Bus.a

ExpressionCalcs#

Name

Description

Expression

Unit

Source

pi

locational marginal price (LMP)

\(-\phi[pb] - P_{TDF}^T (\phi[plfub] - \phi[plflb])\)

$/p.u.

Bus

mu1

Lagrange multipliers, dual of <plflb>

\(\phi[plflb]\)

$/p.u.

Line

mu2

Lagrange multipliers, dual of <plfub>

\(\phi[plfub]\)

$/p.u.

Line

pie

Energy price

\(-\phi[pb]\)

$/p.u.

pic

Congestion price

\(-P_{TDF}^T (\phi[plfub] - \phi[plflb])\)

$/p.u.

Bus

Services#

Name

Symbol

Description

Type

pd

\(p_{d}\)

effective active demand

NumOpDual

isb

\(I_{sb}\)

Index slack bus from all buses

VarSelect

ctrle

\(c_{trl, e}\)

Effective Gen controllability

NumOpDual

nctrl

\(c_{trl,n}\)

Effective Gen uncontrollability

NumOp

nctrle

\(c_{trl,n,e}\)

Effective Gen uncontrollability

NumOpDual

PTDFt

\(P_{TDF}^T\)

PTDF transpose

NumOp

Parameters#

Name

Symbol

Description

Unit

Source

ug

\(u_{g}\)

Gen connection status

StaticGen.u

pg0

\(p_{g, 0}\)

Gen initial active power

p.u.

StaticGen.p0

gsh

\(g_{sh}\)

shunt conductance

Shunt.g

buss

\(B_{us,s}\)

Bus slack

Slack.bus

ud

\(u_{d}\)

Load connection status

StaticLoad.u

pd0

\(p_{d,0}\)

active demand

p.u.

StaticLoad.p0

Cg

\(C_{g}\)

Gen connection matrix

MatProcessor.Cg

Cl

\(C_{l}\)

Load connection matrix

MatProcessor.Cl

CftT

\(C_{ft}^T\)

Transpose of line connection matrix

MatProcessor.CftT

Csh

\(C_{sh}\)

Shunt connection matrix

MatProcessor.Csh

Bbus

\(B_{bus}\)

Bus admittance matrix

MatProcessor.Bbus

Bf

\(B_{f}\)

Bf matrix

MatProcessor.Bf

Pbusinj

\(P_{bus}^{inj}\)

Bus power injection vector

MatProcessor.Pbusinj

Pfinj

\(P_{f}^{inj}\)

Line power injection vector

MatProcessor.Pfinj

c2

\(c_{2}\)

Gen cost coefficient 2

$/(p.u.^2)

GCost.c2

c1

\(c_{1}\)

Gen cost coefficient 1

$/(p.u.)

GCost.c1

c0

\(c_{0}\)

Gen cost coefficient 0

$

GCost.c0

ctrl

\(c_{trl}\)

Gen controllability

StaticGen.ctrl

pmax

\(p_{g, max}\)

Gen maximum active power

p.u.

StaticGen.pmax

pmin

\(p_{g, min}\)

Gen minimum active power

p.u.

StaticGen.pmin

ul

\(u_{l}\)

Line connection status

Line.u

rate_a

\(R_{ATEA}\)

long-term flow limit

p.u.

Line.rate_a

amax

\(\theta_{bus, max}\)

max line angle difference

Line.amax

amin

\(\theta_{bus, min}\)

min line angle difference

Line.amin

PTDF

\(P_{TDF}\)

PTDF

MatProcessor.PTDF

RTED#

DC-based real-time economic dispatch (RTED).

RTED extends DCOPF with:

  • Vars for SFR reserve: pru and prd

  • Param for linear SFR cost: cru and crd

  • Param for SFR requirement: du and dd

  • Param for ramping: start point pg0 and ramping limit R10

  • Param pg0, which can be retrieved from dynamic simulation results.

The function dc2ac sets the vBus value from solved ACOPF. Without this conversion, dynamic simulation might fail due to the gap between DC-based dispatch results and AC-based dynamic initialization.

Notes#

  • Formulations have been adjusted with interval config.t, 5/60 [Hour] by default.

  • The tie-line flow related constraints are omitted in this formulation.

  • Power generation is balanced for the entire system.

  • SFR is balanced for each area.

Objective#

Unit

Expression

$

\(min. T_{cfg}^{2} \sum(c_{2} p_g^{2}) + \sum(u_{g} c_{0})+ T_{cfg} \sum(c_{1} p_g + c_{r,u} p_{r,u} + c_{r,d} p_{r,d})\)

Expressions#

Name

Description

Expression

Unit

Source

plf

Line flow

\(B_{f} \theta_{bus} + P_{f}^{inj}\)

p.u.

Line

pmaxe

Effective pmax

\(c_{trl,n,e} p_{g, 0} + c_{trl, e} p_{g, max}\)

p.u.

StaticGen

pmine

Effective pmin

\(c_{trl,n,e} p_{g, 0} + c_{trl, e} p_{g, min}\)

p.u.

StaticGen

Constraints#

Name

Description

Expression

pb

power balance

\(B_{bus} \theta_{bus} + P_{bus}^{inj} + C_{l} p_{d} + C_{sh} g_{sh} - C_{g} p_g = 0\)

sbus

align slack bus angle

\(I_{sb} \theta_{bus} = 0\)

pglb

pg min

\(-p_g + p_{g, min, e} \leq 0\)

pgub

pg max

\(p_g - p_{g, max, e} \leq 0\)

plflb

line flow lower bound

\(-p_{lf} - u_{l} R_{ATEA} \leq 0\)

plfub

line flow upper bound

\(p_{lf} - u_{l} R_{ATEA} \leq 0\)

alflb

line angle difference lower bound

\(-C_{ft}^T \theta_{bus} + \theta_{bus, min} \leq 0\)

alfub

line angle difference upper bound

\(C_{ft}^T \theta_{bus} - \theta_{bus, max} \leq 0\)

rbu

RegUp reserve balance

\(S_{g} u_{g} p_{r,u} - d_{u, d} = 0\)

rbd

RegDn reserve balance

\(S_{g} u_{g} p_{r,d} - d_{d, d} = 0\)

rru

RegUp reserve source

\(u_{g} (p_g + p_{r,u}) - u_{g} p_{g, max, e} \leq 0\)

rrd

RegDn reserve source

\(u_{g} (-p_g + p_{r,d}) + u_{g} p_{g, min, e} \leq 0\)

rgu

Gen ramping up

\(u_{g} (p_g-p_{g, 0}-R_{10}) \leq 0\)

rgd

Gen ramping down

\(u_{g} (-p_g+p_{g, 0}-R_{10}) \leq 0\)

Vars#

Name

Symbol

Description

Unit

Source

Properties

pg

\(p_g\)

Gen active power

p.u.

StaticGen.p

vBus

\(v_{Bus}\)

Bus voltage magnitude, placeholder

p.u.

Bus.v

aBus

\(\theta_{bus}\)

Bus voltage angle

rad

Bus.a

pru

\(p_{r,u}\)

RegUp reserve

p.u.

StaticGen

nonneg

prd

\(p_{r,d}\)

RegDn reserve

p.u.

StaticGen

nonneg

ExpressionCalcs#

Name

Description

Expression

Unit

Source

pi

LMP, dual of <pb>

\(\phi[pb]\)

$/p.u.

Bus

mu1

Lagrange multipliers, dual of <plflb>

\(\phi[plflb]\)

$/p.u.

Line

mu2

Lagrange multipliers, dual of <plfub>

\(\phi[plfub]\)

$/p.u.

Line

Services#

Name

Symbol

Description

Type

pd

\(p_{d}\)

effective active demand

NumOpDual

isb

\(I_{sb}\)

Index slack bus from all buses

VarSelect

ctrle

\(c_{trl, e}\)

Effective Gen controllability

NumOpDual

nctrl

\(c_{trl,n}\)

Effective Gen uncontrollability

NumOp

nctrle

\(c_{trl,n,e}\)

Effective Gen uncontrollability

NumOpDual

gs

\(S_{g}\)

Sum Gen vars vector in shape of area

ZonalSum

ds

\(S_{d}\)

Sum pd vector in shape of area

ZonalSum

pdz

\(p_{d,z}\)

zonal total load

NumOpDual

dud

\(d_{u, d}\)

zonal RegUp reserve requirement

NumOpDual

ddd

\(d_{d, d}\)

zonal RegDn reserve requirement

NumOpDual

Parameters#

Name

Symbol

Description

Unit

Source

ug

\(u_{g}\)

Gen connection status

StaticGen.u

pg0

\(p_{g, 0}\)

Gen initial active power

p.u.

StaticGen.p0

gsh

\(g_{sh}\)

shunt conductance

Shunt.g

buss

\(B_{us,s}\)

Bus slack

Slack.bus

ud

\(u_{d}\)

Load connection status

StaticLoad.u

pd0

\(p_{d,0}\)

active demand

p.u.

StaticLoad.p0

Cg

\(C_{g}\)

Gen connection matrix

MatProcessor.Cg

Cl

\(C_{l}\)

Load connection matrix

MatProcessor.Cl

CftT

\(C_{ft}^T\)

Transpose of line connection matrix

MatProcessor.CftT

Csh

\(C_{sh}\)

Shunt connection matrix

MatProcessor.Csh

Bbus

\(B_{bus}\)

Bus admittance matrix

MatProcessor.Bbus

Bf

\(B_{f}\)

Bf matrix

MatProcessor.Bf

Pbusinj

\(P_{bus}^{inj}\)

Bus power injection vector

MatProcessor.Pbusinj

Pfinj

\(P_{f}^{inj}\)

Line power injection vector

MatProcessor.Pfinj

c2

\(c_{2}\)

Gen cost coefficient 2

$/(p.u.^2)

GCost.c2

c1

\(c_{1}\)

Gen cost coefficient 1

$/(p.u.)

GCost.c1

c0

\(c_{0}\)

Gen cost coefficient 0

$

GCost.c0

ctrl

\(c_{trl}\)

Gen controllability

StaticGen.ctrl

pmax

\(p_{g, max}\)

Gen maximum active power

p.u.

StaticGen.pmax

pmin

\(p_{g, min}\)

Gen minimum active power

p.u.

StaticGen.pmin

ul

\(u_{l}\)

Line connection status

Line.u

rate_a

\(R_{ATEA}\)

long-term flow limit

p.u.

Line.rate_a

amax

\(\theta_{bus, max}\)

max line angle difference

Line.amax

amin

\(\theta_{bus, min}\)

min line angle difference

Line.amin

zg

\(z_{one,g}\)

Gen area

StaticGen.area

zd

\(z_{one,d}\)

Load area

StaticLoad.area

R10

\(R_{10}\)

10-min ramp rate

p.u./h

StaticGen.R10

cru

\(c_{r,u}\)

RegUp reserve coefficient

$/(p.u.)

SFRCost.cru

crd

\(c_{r,d}\)

RegDown reserve coefficient

$/(p.u.)

SFRCost.crd

du

\(d_{u}\)

RegUp reserve requirement in percentage

%

SFR.du

dd

\(d_{d}\)

RegDown reserve requirement in percentage

%

SFR.dd

Config Fields in [RTED]

Option

Symbol

Value

Info

Accepted values

t

\(T_{cfg}\)

0.083

time interval in hours

RTEDDG#

RTED with distributed generator DG.

Note that RTEDDG only includes DG output power. If ESD1 is included, RTEDES should be used instead, otherwise there is no SOC.

Objective#

Unit

Expression

$

\(min. T_{cfg}^{2} \sum(c_{2} p_g^{2}) + \sum(u_{g} c_{0})+ T_{cfg} \sum(c_{1} p_g + c_{r,u} p_{r,u} + c_{r,d} p_{r,d})\)

Expressions#

Name

Description

Expression

Unit

Source

plf

Line flow

\(B_{f} \theta_{bus} + P_{f}^{inj}\)

p.u.

Line

pmaxe

Effective pmax

\(c_{trl,n,e} p_{g, 0} + c_{trl, e} p_{g, max}\)

p.u.

StaticGen

pmine

Effective pmin

\(c_{trl,n,e} p_{g, 0} + c_{trl, e} p_{g, min}\)

p.u.

StaticGen

Constraints#

Name

Description

Expression

pb

power balance

\(B_{bus} \theta_{bus} + P_{bus}^{inj} + C_{l} p_{d} + C_{sh} g_{sh} - C_{g} p_g = 0\)

sbus

align slack bus angle

\(I_{sb} \theta_{bus} = 0\)

pglb

pg min

\(-p_g + p_{g, min, e} \leq 0\)

pgub

pg max

\(p_g - p_{g, max, e} \leq 0\)

plflb

line flow lower bound

\(-p_{lf} - u_{l} R_{ATEA} \leq 0\)

plfub

line flow upper bound

\(p_{lf} - u_{l} R_{ATEA} \leq 0\)

alflb

line angle difference lower bound

\(-C_{ft}^T \theta_{bus} + \theta_{bus, min} \leq 0\)

alfub

line angle difference upper bound

\(C_{ft}^T \theta_{bus} - \theta_{bus, max} \leq 0\)

rbu

RegUp reserve balance

\(S_{g} u_{g} p_{r,u} - d_{u, d} = 0\)

rbd

RegDn reserve balance

\(S_{g} u_{g} p_{r,d} - d_{d, d} = 0\)

rru

RegUp reserve source

\(u_{g} (p_g + p_{r,u}) - u_{g} p_{g, max, e} \leq 0\)

rrd

RegDn reserve source

\(u_{g} (-p_g + p_{r,d}) + u_{g} p_{g, min, e} \leq 0\)

rgu

Gen ramping up

\(u_{g} (p_g-p_{g, 0}-R_{10}) \leq 0\)

rgd

Gen ramping down

\(u_{g} (-p_g+p_{g, 0}-R_{10}) \leq 0\)

cdgb

Select DG power from pg

\(I_{DG} p_g - p_{g,DG} = 0\)

Vars#

Name

Symbol

Description

Unit

Source

Properties

pg

\(p_g\)

Gen active power

p.u.

StaticGen.p

vBus

\(v_{Bus}\)

Bus voltage magnitude, placeholder

p.u.

Bus.v

aBus

\(\theta_{bus}\)

Bus voltage angle

rad

Bus.a

pru

\(p_{r,u}\)

RegUp reserve

p.u.

StaticGen

nonneg

prd

\(p_{r,d}\)

RegDn reserve

p.u.

StaticGen

nonneg

pgdg

\(p_{g,DG}\)

DG output power

p.u.

DG

ExpressionCalcs#

Name

Description

Expression

Unit

Source

pi

LMP, dual of <pb>

\(\phi[pb]\)

$/p.u.

Bus

mu1

Lagrange multipliers, dual of <plflb>

\(\phi[plflb]\)

$/p.u.

Line

mu2

Lagrange multipliers, dual of <plfub>

\(\phi[plfub]\)

$/p.u.

Line

Services#

Name

Symbol

Description

Type

pd

\(p_{d}\)

effective active demand

NumOpDual

isb

\(I_{sb}\)

Index slack bus from all buses

VarSelect

ctrle

\(c_{trl, e}\)

Effective Gen controllability

NumOpDual

nctrl

\(c_{trl,n}\)

Effective Gen uncontrollability

NumOp

nctrle

\(c_{trl,n,e}\)

Effective Gen uncontrollability

NumOpDual

gs

\(S_{g}\)

Sum Gen vars vector in shape of area

ZonalSum

ds

\(S_{d}\)

Sum pd vector in shape of area

ZonalSum

pdz

\(p_{d,z}\)

zonal total load

NumOpDual

dud

\(d_{u, d}\)

zonal RegUp reserve requirement

NumOpDual

ddd

\(d_{d, d}\)

zonal RegDn reserve requirement

NumOpDual

idg

\(I_{DG}\)

Index DG power from pg

VarSelect

Parameters#

Name

Symbol

Description

Unit

Source

ug

\(u_{g}\)

Gen connection status

StaticGen.u

pg0

\(p_{g, 0}\)

Gen initial active power

p.u.

StaticGen.p0

gsh

\(g_{sh}\)

shunt conductance

Shunt.g

buss

\(B_{us,s}\)

Bus slack

Slack.bus

ud

\(u_{d}\)

Load connection status

StaticLoad.u

pd0

\(p_{d,0}\)

active demand

p.u.

StaticLoad.p0

Cg

\(C_{g}\)

Gen connection matrix

MatProcessor.Cg

Cl

\(C_{l}\)

Load connection matrix

MatProcessor.Cl

CftT

\(C_{ft}^T\)

Transpose of line connection matrix

MatProcessor.CftT

Csh

\(C_{sh}\)

Shunt connection matrix

MatProcessor.Csh

Bbus

\(B_{bus}\)

Bus admittance matrix

MatProcessor.Bbus

Bf

\(B_{f}\)

Bf matrix

MatProcessor.Bf

Pbusinj

\(P_{bus}^{inj}\)

Bus power injection vector

MatProcessor.Pbusinj

Pfinj

\(P_{f}^{inj}\)

Line power injection vector

MatProcessor.Pfinj

c2

\(c_{2}\)

Gen cost coefficient 2

$/(p.u.^2)

GCost.c2

c1

\(c_{1}\)

Gen cost coefficient 1

$/(p.u.)

GCost.c1

c0

\(c_{0}\)

Gen cost coefficient 0

$

GCost.c0

ctrl

\(c_{trl}\)

Gen controllability

StaticGen.ctrl

pmax

\(p_{g, max}\)

Gen maximum active power

p.u.

StaticGen.pmax

pmin

\(p_{g, min}\)

Gen minimum active power

p.u.

StaticGen.pmin

ul

\(u_{l}\)

Line connection status

Line.u

rate_a

\(R_{ATEA}\)

long-term flow limit

p.u.

Line.rate_a

amax

\(\theta_{bus, max}\)

max line angle difference

Line.amax

amin

\(\theta_{bus, min}\)

min line angle difference

Line.amin

zg

\(z_{one,g}\)

Gen area

StaticGen.area

zd

\(z_{one,d}\)

Load area

StaticLoad.area

R10

\(R_{10}\)

10-min ramp rate

p.u./h

StaticGen.R10

cru

\(c_{r,u}\)

RegUp reserve coefficient

$/(p.u.)

SFRCost.cru

crd

\(c_{r,d}\)

RegDown reserve coefficient

$/(p.u.)

SFRCost.crd

du

\(d_{u}\)

RegUp reserve requirement in percentage

%

SFR.du

dd

\(d_{d}\)

RegDown reserve requirement in percentage

%

SFR.dd

gendg

\(g_{DG}\)

gen of DG

DG.gen

gammapd

\(\gamma_{p,DG}\)

Ratio of DG.pge w.r.t to that of static generator

DG.gammap

Config Fields in [RTEDDG]

Option

Symbol

Value

Info

Accepted values

t

\(T_{cfg}\)

0.083

time interval in hours

RTEDESP#

Price run of RTED with energy storage ESD1.

This routine is not intended to work standalone. It should be used after solved RTEDES.

The binary variables ucd and udd are now parameters retrieved from solved RTEDES.

The constraints zce1 - zce3 and zde1 - zde3 are now simplified to zce and zde as below:

\[(1 - u_{cd}) * p_{ce} <= 0 (1 - u_{dd}) * p_{de} <= 0\]

Objective#

Unit

Expression

$

\(min. T_{cfg}^{2} \sum(c_{2} p_g^{2}) + \sum(u_{g} c_{0})+ T_{cfg} \sum(c_{1} p_g + c_{r,u} p_{r,u} + c_{r,d} p_{r,d})+ T_{cfg} \sum(- c_{c,ESD} p_{c,ESD} + c_{d,ESD} p_{d,ESD})\)

Expressions#

Name

Description

Expression

Unit

Source

plf

Line flow

\(B_{f} \theta_{bus} + P_{f}^{inj}\)

p.u.

Line

pmaxe

Effective pmax

\(c_{trl,n,e} p_{g, 0} + c_{trl, e} p_{g, max}\)

p.u.

StaticGen

pmine

Effective pmin

\(c_{trl,n,e} p_{g, 0} + c_{trl, e} p_{g, min}\)

p.u.

StaticGen

Constraints#

Name

Description

Expression

pb

power balance

\(B_{bus} \theta_{bus} + P_{bus}^{inj} + C_{l} p_{d} + C_{sh} g_{sh} - C_{g} p_g = 0\)

sbus

align slack bus angle

\(I_{sb} \theta_{bus} = 0\)

pglb

pg min

\(-p_g + p_{g, min, e} \leq 0\)

pgub

pg max

\(p_g - p_{g, max, e} \leq 0\)

plflb

line flow lower bound

\(-p_{lf} - u_{l} R_{ATEA} \leq 0\)

plfub

line flow upper bound

\(p_{lf} - u_{l} R_{ATEA} \leq 0\)

alflb

line angle difference lower bound

\(-C_{ft}^T \theta_{bus} + \theta_{bus, min} \leq 0\)

alfub

line angle difference upper bound

\(C_{ft}^T \theta_{bus} - \theta_{bus, max} \leq 0\)

rbu

RegUp reserve balance

\(S_{g} u_{g} p_{r,u} - d_{u, d} = 0\)

rbd

RegDn reserve balance

\(S_{g} u_{g} p_{r,d} - d_{d, d} = 0\)

rru

RegUp reserve source

\(u_{g} (p_g + p_{r,u}) - u_{g} p_{g, max, e} \leq 0\)

rrd

RegDn reserve source

\(u_{g} (-p_g + p_{r,d}) + u_{g} p_{g, min, e} \leq 0\)

rgu

Gen ramping up

\(u_{g} (p_g-p_{g, 0}-R_{10}) \leq 0\)

rgd

Gen ramping down

\(u_{g} (-p_g+p_{g, 0}-R_{10}) \leq 0\)

cdgb

Select DG power from pg

\(I_{DG} p_g - p_{g,DG} = 0\)

cesd

Select pce and pde from pg

\(I_{ESD} p_g + p_{c,ESD} - p_{d,ESD} = 0\)

SOClb

SOC lower bound

\(-SOC + SOC_{min} \leq 0\)

SOCub

SOC upper bound

\(SOC - SOC_{max} \leq 0\)

SOCb

ESD1 SOC balance

\(E_n (SOC - SOC_{init}) - T_{cfg} \eta_c p_{c,ESD}+ T_{cfg} \frac{1}{\eta_d} p_{d,ESD} = 0\)

SOCr

ESD1 final SOC requirement

\(SOC_{end} - SOC \leq 0\)

zce

zce bound

\(1-u_{c,ESD} p_{c,ESD} \leq 0\)

zde

zde bound

\(1-u_{d,ESD} p_{d,ESD} \leq 0\)

Vars#

Name

Symbol

Description

Unit

Source

Properties

pg

\(p_g\)

Gen active power

p.u.

StaticGen.p

vBus

\(v_{Bus}\)

Bus voltage magnitude, placeholder

p.u.

Bus.v

aBus

\(\theta_{bus}\)

Bus voltage angle

rad

Bus.a

pru

\(p_{r,u}\)

RegUp reserve

p.u.

StaticGen

nonneg

prd

\(p_{r,d}\)

RegDn reserve

p.u.

StaticGen

nonneg

pgdg

\(p_{g,DG}\)

DG output power

p.u.

DG

SOC

\(SOC\)

ESD1 State of Charge

p.u. (%)

ESD1

nonneg

pce

\(p_{c,ESD}\)

ESD1 charging power

p.u.

ESD1

nonneg

pde

\(p_{d,ESD}\)

ESD1 discharging power

p.u.

ESD1

nonneg

ExpressionCalcs#

Name

Description

Expression

Unit

Source

pi

LMP, dual of <pb>

\(\phi[pb]\)

$/p.u.

Bus

mu1

Lagrange multipliers, dual of <plflb>

\(\phi[plflb]\)

$/p.u.

Line

mu2

Lagrange multipliers, dual of <plfub>

\(\phi[plfub]\)

$/p.u.

Line

Services#

Name

Symbol

Description

Type

pd

\(p_{d}\)

effective active demand

NumOpDual

isb

\(I_{sb}\)

Index slack bus from all buses

VarSelect

ctrle

\(c_{trl, e}\)

Effective Gen controllability

NumOpDual

nctrl

\(c_{trl,n}\)

Effective Gen uncontrollability

NumOp

nctrle

\(c_{trl,n,e}\)

Effective Gen uncontrollability

NumOpDual

gs

\(S_{g}\)

Sum Gen vars vector in shape of area

ZonalSum

ds

\(S_{d}\)

Sum pd vector in shape of area

ZonalSum

pdz

\(p_{d,z}\)

zonal total load

NumOpDual

dud

\(d_{u, d}\)

zonal RegUp reserve requirement

NumOpDual

ddd

\(d_{d, d}\)

zonal RegDn reserve requirement

NumOpDual

idg

\(I_{DG}\)

Index DG power from pg

VarSelect

REtaD

\(\frac{1}{\eta_d}\)

NumOp

Mb

\(M_{big}\)

10 times of max of pmax as big M

NumOp

ies

\(I_{ESD}\)

Index ESD from StaticGen

VarSelect

Parameters#

Name

Symbol

Description

Unit

Source

ug

\(u_{g}\)

Gen connection status

StaticGen.u

pg0

\(p_{g, 0}\)

Gen initial active power

p.u.

StaticGen.p0

gsh

\(g_{sh}\)

shunt conductance

Shunt.g

buss

\(B_{us,s}\)

Bus slack

Slack.bus

ud

\(u_{d}\)

Load connection status

StaticLoad.u

pd0

\(p_{d,0}\)

active demand

p.u.

StaticLoad.p0

Cg

\(C_{g}\)

Gen connection matrix

MatProcessor.Cg

Cl

\(C_{l}\)

Load connection matrix

MatProcessor.Cl

CftT

\(C_{ft}^T\)

Transpose of line connection matrix

MatProcessor.CftT

Csh

\(C_{sh}\)

Shunt connection matrix

MatProcessor.Csh

Bbus

\(B_{bus}\)

Bus admittance matrix

MatProcessor.Bbus

Bf

\(B_{f}\)

Bf matrix

MatProcessor.Bf

Pbusinj

\(P_{bus}^{inj}\)

Bus power injection vector

MatProcessor.Pbusinj

Pfinj

\(P_{f}^{inj}\)

Line power injection vector

MatProcessor.Pfinj

c2

\(c_{2}\)

Gen cost coefficient 2

$/(p.u.^2)

GCost.c2

c1

\(c_{1}\)

Gen cost coefficient 1

$/(p.u.)

GCost.c1

c0

\(c_{0}\)

Gen cost coefficient 0

$

GCost.c0

ctrl

\(c_{trl}\)

Gen controllability

StaticGen.ctrl

pmax

\(p_{g, max}\)

Gen maximum active power

p.u.

StaticGen.pmax

pmin

\(p_{g, min}\)

Gen minimum active power

p.u.

StaticGen.pmin

ul

\(u_{l}\)

Line connection status

Line.u

rate_a

\(R_{ATEA}\)

long-term flow limit

p.u.

Line.rate_a

amax

\(\theta_{bus, max}\)

max line angle difference

Line.amax

amin

\(\theta_{bus, min}\)

min line angle difference

Line.amin

zg

\(z_{one,g}\)

Gen area

StaticGen.area

zd

\(z_{one,d}\)

Load area

StaticLoad.area

R10

\(R_{10}\)

10-min ramp rate

p.u./h

StaticGen.R10

cru

\(c_{r,u}\)

RegUp reserve coefficient

$/(p.u.)

SFRCost.cru

crd

\(c_{r,d}\)

RegDown reserve coefficient

$/(p.u.)

SFRCost.crd

du

\(d_{u}\)

RegUp reserve requirement in percentage

%

SFR.du

dd

\(d_{d}\)

RegDown reserve requirement in percentage

%

SFR.dd

gendg

\(g_{DG}\)

gen of DG

DG.gen

gammapd

\(\gamma_{p,DG}\)

Ratio of DG.pge w.r.t to that of static generator

DG.gammap

En

\(E_n\)

Rated energy capacity

MWh

ESD1.En

SOCmax

\(SOC_{max}\)

Maximum allowed value for SOC in limiter

ESD1.SOCmax

SOCmin

\(SOC_{min}\)

Minimum required value for SOC in limiter

ESD1.SOCmin

SOCinit

\(SOC_{init}\)

Initial SOC

ESD1.SOCinit

SOCend

\(SOC_{end}\)

Target SOC at the end of the period

ESD1.SOCend

EtaC

\(\eta_c\)

Efficiency during charging

ESD1.EtaC

EtaD

\(\eta_d\)

Efficiency during discharging

ESD1.EtaD

cesdc

\(c_{c,ESD}\)

Charging cost

$/p.u.*h

ESD1.cesdc

cesdd

\(c_{d,ESD}\)

Discharging cost

$/p.u.*h

ESD1.cesdd

genesd

\(g_{ESD}\)

gen of ESD

ESD1.gen

ucd

\(u_{c,ESD}\)

Retrieved ESD1 charging decision

ESD1.ucd0

udd

\(u_{d,ESD}\)

Retrieved ESD1 discharging decision

ESD1.udd0

Config Fields in [RTEDESP]

Option

Symbol

Value

Info

Accepted values

t

\(T_{cfg}\)

0.083

time interval in hours

RTEDES#

RTED with energy storage ESD1. The bilinear term in the formulation is linearized with big-M method.

While the formulation enforces SOCend, the ESD1 owner is not required to provide an SOC constraint for every RTED interval. The optimization treats SOCend as a terminal boundary condition, allowing the dispatcher maximum flexibility to optimize power output within the hour, provided the target is met at the interval's conclusion.

The minimum charging/discharging duration logic is implemented in tcdr and tddr. For example, the logic of tcdr is: u_{cd} >= fcd, where fcd = 1 if tdc0 > 0 and tdc > tdc0, else fcd = 0.

Objective#

Unit

Expression

$

\(min. T_{cfg}^{2} \sum(c_{2} p_g^{2}) + \sum(u_{g} c_{0})+ T_{cfg} \sum(c_{1} p_g + c_{r,u} p_{r,u} + c_{r,d} p_{r,d})+ T_{cfg} \sum(- c_{c,ESD} p_{c,ESD} + c_{d,ESD} p_{d,ESD})\)

Expressions#

Name

Description

Expression

Unit

Source

plf

Line flow

\(B_{f} \theta_{bus} + P_{f}^{inj}\)

p.u.

Line

pmaxe

Effective pmax

\(c_{trl,n,e} p_{g, 0} + c_{trl, e} p_{g, max}\)

p.u.

StaticGen

pmine

Effective pmin

\(c_{trl,n,e} p_{g, 0} + c_{trl, e} p_{g, min}\)

p.u.

StaticGen

Constraints#

Name

Description

Expression

pb

power balance

\(B_{bus} \theta_{bus} + P_{bus}^{inj} + C_{l} p_{d} + C_{sh} g_{sh} - C_{g} p_g = 0\)

sbus

align slack bus angle

\(I_{sb} \theta_{bus} = 0\)

pglb

pg min

\(-p_g + p_{g, min, e} \leq 0\)

pgub

pg max

\(p_g - p_{g, max, e} \leq 0\)

plflb

line flow lower bound

\(-p_{lf} - u_{l} R_{ATEA} \leq 0\)

plfub

line flow upper bound

\(p_{lf} - u_{l} R_{ATEA} \leq 0\)

alflb

line angle difference lower bound

\(-C_{ft}^T \theta_{bus} + \theta_{bus, min} \leq 0\)

alfub

line angle difference upper bound

\(C_{ft}^T \theta_{bus} - \theta_{bus, max} \leq 0\)

rbu

RegUp reserve balance

\(S_{g} u_{g} p_{r,u} - d_{u, d} = 0\)

rbd

RegDn reserve balance

\(S_{g} u_{g} p_{r,d} - d_{d, d} = 0\)

rru

RegUp reserve source

\(u_{g} (p_g + p_{r,u}) - u_{g} p_{g, max, e} \leq 0\)

rrd

RegDn reserve source

\(u_{g} (-p_g + p_{r,d}) + u_{g} p_{g, min, e} \leq 0\)

rgu

Gen ramping up

\(u_{g} (p_g-p_{g, 0}-R_{10}) \leq 0\)

rgd

Gen ramping down

\(u_{g} (-p_g+p_{g, 0}-R_{10}) \leq 0\)

cesd

Select pce and pde from pg

\(I_{ESD} p_g + p_{c,ESD} - p_{d,ESD} = 0\)

SOClb

SOC lower bound

\(-SOC + SOC_{min} \leq 0\)

SOCub

SOC upper bound

\(SOC - SOC_{max} \leq 0\)

SOCb

ESD1 SOC balance

\(E_n (SOC - SOC_{init}) - T_{cfg} \eta_c p_{c,ESD}+ T_{cfg} \frac{1}{\eta_d} p_{d,ESD} = 0\)

SOCr

ESD1 final SOC requirement

\(SOC_{end} - SOC \leq 0\)

cdgb

Select DG power from pg

\(I_{DG} p_g - p_{g,DG} = 0\)

cdb

Charging decision bound

\(u_{c,ESD} + u_{d,ESD} - 1 = 0\)

zce1

zce bound 1

\(-z_{c,ESD} + p_{c,ESD} \leq 0\)

zce2

zce bound 2

\(z_{c,ESD} - p_{c,ESD} - M_{big} (1-u_{c,ESD}) \leq 0\)

zce3

zce bound 3

\(z_{c,ESD} - M_{big} u_{c,ESD} \leq 0\)

zde1

zde bound 1

\(-z_{d,ESD} + p_{d,ESD} \leq 0\)

zde2

zde bound 2

\(z_{d,ESD} - p_{d,ESD} - M_{big} (1-u_{d,ESD}) \leq 0\)

zde3

zde bound 3

\(z_{d,ESD} - M_{big} u_{d,ESD} \leq 0\)

tcdr

Minimum charging duration

\((t_{dc0} > 0) (t_{dc} > t_{dc0}) - u_{c,ESD} \leq 0\)

tddr

Minimum discharging duration

\((t_{dd0} > 0) (t_{dd} > t_{dd0}) - u_{d,ESD} \leq 0\)

Vars#

Name

Symbol

Description

Unit

Source

Properties

pg

\(p_g\)

Gen active power

p.u.

StaticGen.p

vBus

\(v_{Bus}\)

Bus voltage magnitude, placeholder

p.u.

Bus.v

aBus

\(\theta_{bus}\)

Bus voltage angle

rad

Bus.a

pru

\(p_{r,u}\)

RegUp reserve

p.u.

StaticGen

nonneg

prd

\(p_{r,d}\)

RegDn reserve

p.u.

StaticGen

nonneg

SOC

\(SOC\)

ESD1 State of Charge

p.u. (%)

ESD1

nonneg

pce

\(p_{c,ESD}\)

ESD1 charging power

p.u.

ESD1

nonneg

pde

\(p_{d,ESD}\)

ESD1 discharging power

p.u.

ESD1

nonneg

pgdg

\(p_{g,DG}\)

DG output power

p.u.

DG

ucd

\(u_{c,ESD}\)

ESD1 charging decision

ESD1

boolean

udd

\(u_{d,ESD}\)

ESD1 discharging decision

ESD1

boolean

zce

\(z_{c,ESD}\)

Aux var for charging, \(z_{c,ESD}=u_{c,ESD}*p_{c,ESD}\)

ESD1

nonneg

zde

\(z_{d,ESD}\)

Aux var for discharging, \(z_{d,ESD}=u_{d,ESD}*p_{d,ESD}\)

ESD1

nonneg

ExpressionCalcs#

Name

Description

Expression

Unit

Source

pi

LMP, dual of <pb>

\(\phi[pb]\)

$/p.u.

Bus

mu1

Lagrange multipliers, dual of <plflb>

\(\phi[plflb]\)

$/p.u.

Line

mu2

Lagrange multipliers, dual of <plfub>

\(\phi[plfub]\)

$/p.u.

Line

Services#

Name

Symbol

Description

Type

pd

\(p_{d}\)

effective active demand

NumOpDual

isb

\(I_{sb}\)

Index slack bus from all buses

VarSelect

ctrle

\(c_{trl, e}\)

Effective Gen controllability

NumOpDual

nctrl

\(c_{trl,n}\)

Effective Gen uncontrollability

NumOp

nctrle

\(c_{trl,n,e}\)

Effective Gen uncontrollability

NumOpDual

gs

\(S_{g}\)

Sum Gen vars vector in shape of area

ZonalSum

ds

\(S_{d}\)

Sum pd vector in shape of area

ZonalSum

pdz

\(p_{d,z}\)

zonal total load

NumOpDual

dud

\(d_{u, d}\)

zonal RegUp reserve requirement

NumOpDual

ddd

\(d_{d, d}\)

zonal RegDn reserve requirement

NumOpDual

REtaD

\(\frac{1}{\eta_d}\)

NumOp

Mb

\(M_{big}\)

10 times of max of pmax as big M

NumOp

ies

\(I_{ESD}\)

Index ESD from StaticGen

VarSelect

idg

\(I_{DG}\)

Index DG power from pg

VarSelect

Parameters#

Name

Symbol

Description

Unit

Source

ug

\(u_{g}\)

Gen connection status

StaticGen.u

pg0

\(p_{g, 0}\)

Gen initial active power

p.u.

StaticGen.p0

gsh

\(g_{sh}\)

shunt conductance

Shunt.g

buss

\(B_{us,s}\)

Bus slack

Slack.bus

ud

\(u_{d}\)

Load connection status

StaticLoad.u

pd0

\(p_{d,0}\)

active demand

p.u.

StaticLoad.p0

Cg

\(C_{g}\)

Gen connection matrix

MatProcessor.Cg

Cl

\(C_{l}\)

Load connection matrix

MatProcessor.Cl

CftT

\(C_{ft}^T\)

Transpose of line connection matrix

MatProcessor.CftT

Csh

\(C_{sh}\)

Shunt connection matrix

MatProcessor.Csh

Bbus

\(B_{bus}\)

Bus admittance matrix

MatProcessor.Bbus

Bf

\(B_{f}\)

Bf matrix

MatProcessor.Bf

Pbusinj

\(P_{bus}^{inj}\)

Bus power injection vector

MatProcessor.Pbusinj

Pfinj

\(P_{f}^{inj}\)

Line power injection vector

MatProcessor.Pfinj

c2

\(c_{2}\)

Gen cost coefficient 2

$/(p.u.^2)

GCost.c2

c1

\(c_{1}\)

Gen cost coefficient 1

$/(p.u.)

GCost.c1

c0

\(c_{0}\)

Gen cost coefficient 0

$

GCost.c0

ctrl

\(c_{trl}\)

Gen controllability

StaticGen.ctrl

pmax

\(p_{g, max}\)

Gen maximum active power

p.u.

StaticGen.pmax

pmin

\(p_{g, min}\)

Gen minimum active power

p.u.

StaticGen.pmin

ul

\(u_{l}\)

Line connection status

Line.u

rate_a

\(R_{ATEA}\)

long-term flow limit

p.u.

Line.rate_a

amax

\(\theta_{bus, max}\)

max line angle difference

Line.amax

amin

\(\theta_{bus, min}\)

min line angle difference

Line.amin

zg

\(z_{one,g}\)

Gen area

StaticGen.area

zd

\(z_{one,d}\)

Load area

StaticLoad.area

R10

\(R_{10}\)

10-min ramp rate

p.u./h

StaticGen.R10

cru

\(c_{r,u}\)

RegUp reserve coefficient

$/(p.u.)

SFRCost.cru

crd

\(c_{r,d}\)

RegDown reserve coefficient

$/(p.u.)

SFRCost.crd

du

\(d_{u}\)

RegUp reserve requirement in percentage

%

SFR.du

dd

\(d_{d}\)

RegDown reserve requirement in percentage

%

SFR.dd

En

\(E_n\)

Rated energy capacity

MWh

ESD1.En

SOCmax

\(SOC_{max}\)

Maximum allowed value for SOC in limiter

ESD1.SOCmax

SOCmin

\(SOC_{min}\)

Minimum required value for SOC in limiter

ESD1.SOCmin

SOCinit

\(SOC_{init}\)

Initial SOC

ESD1.SOCinit

SOCend

\(SOC_{end}\)

Target SOC at the end of the period

ESD1.SOCend

EtaC

\(\eta_c\)

Efficiency during charging

ESD1.EtaC

EtaD

\(\eta_d\)

Efficiency during discharging

ESD1.EtaD

cesdc

\(c_{c,ESD}\)

Charging cost

$/p.u.*h

ESD1.cesdc

cesdd

\(c_{d,ESD}\)

Discharging cost

$/p.u.*h

ESD1.cesdd

genesd

\(g_{ESD}\)

gen of ESD

ESD1.gen

gendg

\(g_{DG}\)

gen of DG

DG.gen

gammapd

\(\gamma_{p,DG}\)

Ratio of DG.pge w.r.t to that of static generator

DG.gammap

tdc

\(t_{dc}\)

Minimum charging duration

h

ESD1.tdc

tdd

\(t_{dd}\)

Minimum discharging duration

h

ESD1.tdd

tdc0

\(t_{dc0}\)

Initial charging time

h

ESD1.tdc0

tdd0

\(t_{dd0}\)

Initial discharging time

h

ESD1.tdd0

Config Fields in [RTEDES]

Option

Symbol

Value

Info

Accepted values

t

\(T_{cfg}\)

0.083

time interval in hours

RTEDVIS#

RTED with virtual inertia scheduling.

This class implements real-time economic dispatch with virtual inertia scheduling. Please ensure that the parameters dvm and dvd are set according to the system base.

References#

  1. B. She, F. Li, H. Cui, J. Wang, Q. Zhang and R. Bo, "Virtual Inertia Scheduling (VIS) for Real-Time Economic Dispatch of IBR-Penetrated Power Systems," in IEEE Transactions on Sustainable Energy, vol. 15, no. 2, pp. 938-951, April 2024, doi: 10.1109/TSTE.2023.3319307.

Objective#

Unit

Expression

$

\(min. T_{cfg}^{2} \sum(c_{2} p_g^{2}) + \sum(u_{g} c_{0})+ T_{cfg} \sum(c_{1} p_g + c_{r,u} p_{r,u} + c_{r,d} p_{r,d})+ T_{cfg} \sum(c_{m} M + c_{d} D)\)

Expressions#

Name

Description

Expression

Unit

Source

plf

Line flow

\(B_{f} \theta_{bus} + P_{f}^{inj}\)

p.u.

Line

pmaxe

Effective pmax

\(c_{trl,n,e} p_{g, 0} + c_{trl, e} p_{g, max}\)

p.u.

StaticGen

pmine

Effective pmin

\(c_{trl,n,e} p_{g, 0} + c_{trl, e} p_{g, min}\)

p.u.

StaticGen

Constraints#

Name

Description

Expression

pb

power balance

\(B_{bus} \theta_{bus} + P_{bus}^{inj} + C_{l} p_{d} + C_{sh} g_{sh} - C_{g} p_g = 0\)

sbus

align slack bus angle

\(I_{sb} \theta_{bus} = 0\)

pglb

pg min

\(-p_g + p_{g, min, e} \leq 0\)

pgub

pg max

\(p_g - p_{g, max, e} \leq 0\)

plflb

line flow lower bound

\(-p_{lf} - u_{l} R_{ATEA} \leq 0\)

plfub

line flow upper bound

\(p_{lf} - u_{l} R_{ATEA} \leq 0\)

alflb

line angle difference lower bound

\(-C_{ft}^T \theta_{bus} + \theta_{bus, min} \leq 0\)

alfub

line angle difference upper bound

\(C_{ft}^T \theta_{bus} - \theta_{bus, max} \leq 0\)

rbu

RegUp reserve balance

\(S_{g} u_{g} p_{r,u} - d_{u, d} = 0\)

rbd

RegDn reserve balance

\(S_{g} u_{g} p_{r,d} - d_{d, d} = 0\)

rru

RegUp reserve source

\(u_{g} (p_g + p_{r,u}) - u_{g} p_{g, max, e} \leq 0\)

rrd

RegDn reserve source

\(u_{g} (-p_g + p_{r,d}) + u_{g} p_{g, min, e} \leq 0\)

rgu

Gen ramping up

\(u_{g} (p_g-p_{g, 0}-R_{10}) \leq 0\)

rgd

Gen ramping down

\(u_{g} (-p_g+p_{g, 0}-R_{10}) \leq 0\)

Mub

M upper bound

\(M - M_{max} \leq 0\)

Dub

D upper bound

\(D - D_{max} \leq 0\)

Mreq

Emulated inertia requirement

\(-S_{g} M + d_{v,m} = 0\)

Dreq

Emulated damping requirement

\(-S_{g} D + d_{v,d} = 0\)

Vars#

Name

Symbol

Description

Unit

Source

Properties

pg

\(p_g\)

Gen active power

p.u.

StaticGen.p

vBus

\(v_{Bus}\)

Bus voltage magnitude, placeholder

p.u.

Bus.v

aBus

\(\theta_{bus}\)

Bus voltage angle

rad

Bus.a

pru

\(p_{r,u}\)

RegUp reserve

p.u.

StaticGen

nonneg

prd

\(p_{r,d}\)

RegDn reserve

p.u.

StaticGen

nonneg

M

\(M\)

Emulated startup time constant (M=2H)

s

VSG.M

nonneg

D

\(D\)

Emulated damping coefficient

p.u.

VSG.D

nonneg

ExpressionCalcs#

Name

Description

Expression

Unit

Source

pi

LMP, dual of <pb>

\(\phi[pb]\)

$/p.u.

Bus

mu1

Lagrange multipliers, dual of <plflb>

\(\phi[plflb]\)

$/p.u.

Line

mu2

Lagrange multipliers, dual of <plfub>

\(\phi[plfub]\)

$/p.u.

Line

Services#

Name

Symbol

Description

Type

pd

\(p_{d}\)

effective active demand

NumOpDual

isb

\(I_{sb}\)

Index slack bus from all buses

VarSelect

ctrle

\(c_{trl, e}\)

Effective Gen controllability

NumOpDual

nctrl

\(c_{trl,n}\)

Effective Gen uncontrollability

NumOp

nctrle

\(c_{trl,n,e}\)

Effective Gen uncontrollability

NumOpDual

gs

\(S_{g}\)

Sum Gen vars vector in shape of area

ZonalSum

ds

\(S_{d}\)

Sum pd vector in shape of area

ZonalSum

pdz

\(p_{d,z}\)

zonal total load

NumOpDual

dud

\(d_{u, d}\)

zonal RegUp reserve requirement

NumOpDual

ddd

\(d_{d, d}\)

zonal RegDn reserve requirement

NumOpDual

gvsg

\(S_{g}\)

Sum VSG vars vector in shape of area

ZonalSum

Parameters#

Name

Symbol

Description

Unit

Source

ug

\(u_{g}\)

Gen connection status

StaticGen.u

pg0

\(p_{g, 0}\)

Gen initial active power

p.u.

StaticGen.p0

gsh

\(g_{sh}\)

shunt conductance

Shunt.g

buss

\(B_{us,s}\)

Bus slack

Slack.bus

ud

\(u_{d}\)

Load connection status

StaticLoad.u

pd0

\(p_{d,0}\)

active demand

p.u.

StaticLoad.p0

Cg

\(C_{g}\)

Gen connection matrix

MatProcessor.Cg

Cl

\(C_{l}\)

Load connection matrix

MatProcessor.Cl

CftT

\(C_{ft}^T\)

Transpose of line connection matrix

MatProcessor.CftT

Csh

\(C_{sh}\)

Shunt connection matrix

MatProcessor.Csh

Bbus

\(B_{bus}\)

Bus admittance matrix

MatProcessor.Bbus

Bf

\(B_{f}\)

Bf matrix

MatProcessor.Bf

Pbusinj

\(P_{bus}^{inj}\)

Bus power injection vector

MatProcessor.Pbusinj

Pfinj

\(P_{f}^{inj}\)

Line power injection vector

MatProcessor.Pfinj

c2

\(c_{2}\)

Gen cost coefficient 2

$/(p.u.^2)

GCost.c2

c1

\(c_{1}\)

Gen cost coefficient 1

$/(p.u.)

GCost.c1

c0

\(c_{0}\)

Gen cost coefficient 0

$

GCost.c0

ctrl

\(c_{trl}\)

Gen controllability

StaticGen.ctrl

pmax

\(p_{g, max}\)

Gen maximum active power

p.u.

StaticGen.pmax

pmin

\(p_{g, min}\)

Gen minimum active power

p.u.

StaticGen.pmin

ul

\(u_{l}\)

Line connection status

Line.u

rate_a

\(R_{ATEA}\)

long-term flow limit

p.u.

Line.rate_a

amax

\(\theta_{bus, max}\)

max line angle difference

Line.amax

amin

\(\theta_{bus, min}\)

min line angle difference

Line.amin

zg

\(z_{one,g}\)

Gen area

StaticGen.area

zd

\(z_{one,d}\)

Load area

StaticLoad.area

R10

\(R_{10}\)

10-min ramp rate

p.u./h

StaticGen.R10

cru

\(c_{r,u}\)

RegUp reserve coefficient

$/(p.u.)

SFRCost.cru

crd

\(c_{r,d}\)

RegDown reserve coefficient

$/(p.u.)

SFRCost.crd

du

\(d_{u}\)

RegUp reserve requirement in percentage

%

SFR.du

dd

\(d_{d}\)

RegDown reserve requirement in percentage

%

SFR.dd

cm

\(c_{m}\)

Virtual inertia cost

$/s

VSGCost.cm

cd

\(c_{d}\)

Virtual damping cost

$/(p.u.)

VSGCost.cd

zvsg

\(z_{one,vsg}\)

VSG zone

VSG.zone

Mmax

\(M_{max}\)

Maximum inertia emulation

s

VSG.Mmax

Dmax

\(D_{max}\)

Maximum damping emulation

p.u.

VSG.Dmax

dvm

\(d_{v,m}\)

Emulated inertia requirement

s

VSGR.dvm

dvd

\(d_{v,d}\)

Emulated damping requirement

p.u.

VSGR.dvd

Config Fields in [RTEDVIS]

Option

Symbol

Value

Info

Accepted values

t

\(T_{cfg}\)

0.083

time interval in hours

RTED2#

DC-based real-time economic dispatch (RTED) using PTDF.

For large cases, it is recommended to build the PTDF first, especially when incremental build is necessary.

RTED2 extends RTED with PTDF formulation:

  • Uses PTDF matrix instead of B-theta for line flow calculation

  • Calculates LMP with energy price and congestion price components

  • Inherits all RTED features: reserves, ramping, etc.

The function dc2ac sets the vBus value from solved ACOPF. Without this conversion, dynamic simulation might fail due to the gap between DC-based dispatch results and AC-based dynamic initialization.

Notes#

  • Formulations have been adjusted with interval config.t, 5/60 [Hour] by default.

  • The tie-line flow related constraints are omitted in this formulation.

  • Power generation is balanced for the entire system.

  • SFR is balanced for each area.

Objective#

Unit

Expression

$

\(min. T_{cfg}^{2} \sum(c_{2} p_g^{2}) + \sum(u_{g} c_{0})+ T_{cfg} \sum(c_{1} p_g + c_{r,u} p_{r,u} + c_{r,d} p_{r,d})\)

Expressions#

Name

Description

Expression

Unit

Source

plf

Line flow

\(P_{TDF} (C_{g} p_g - C_{l} p_{d} - C_{sh} g_{sh} - P_{bus}^{inj})\)

p.u.

Line

pmaxe

Effective pmax

\(c_{trl,n,e} p_{g, 0} + c_{trl, e} p_{g, max}\)

p.u.

StaticGen

pmine

Effective pmin

\(c_{trl,n,e} p_{g, 0} + c_{trl, e} p_{g, min}\)

p.u.

StaticGen

Constraints#

Name

Description

Expression

pb

power balance

\(\sum(p_g) - \sum(p_{d}) = 0\)

sbus

align slack bus angle

\(I_{sb} \theta_{bus} = 0\)

pglb

pg min

\(-p_g + p_{g, min, e} \leq 0\)

pgub

pg max

\(p_g - p_{g, max, e} \leq 0\)

plflb

line flow lower bound

\(-p_{lf} - u_{l} R_{ATEA} \leq 0\)

plfub

line flow upper bound

\(p_{lf} - u_{l} R_{ATEA} \leq 0\)

alflb

line angle difference lower bound

\(-C_{ft}^T \theta_{bus} + \theta_{bus, min} \leq 0\)

alfub

line angle difference upper bound

\(C_{ft}^T \theta_{bus} - \theta_{bus, max} \leq 0\)

rbu

RegUp reserve balance

\(S_{g} u_{g} p_{r,u} - d_{u, d} = 0\)

rbd

RegDn reserve balance

\(S_{g} u_{g} p_{r,d} - d_{d, d} = 0\)

rru

RegUp reserve source

\(u_{g} (p_g + p_{r,u}) - u_{g} p_{g, max, e} \leq 0\)

rrd

RegDn reserve source

\(u_{g} (-p_g + p_{r,d}) + u_{g} p_{g, min, e} \leq 0\)

rgu

Gen ramping up

\(u_{g} (p_g-p_{g, 0}-R_{10}) \leq 0\)

rgd

Gen ramping down

\(u_{g} (-p_g+p_{g, 0}-R_{10}) \leq 0\)

Vars#

Name

Symbol

Description

Unit

Source

Properties

pg

\(p_g\)

Gen active power

p.u.

StaticGen.p

vBus

\(v_{Bus}\)

Bus voltage magnitude, placeholder

p.u.

Bus.v

aBus

\(\theta_{bus}\)

Bus voltage angle

rad

Bus.a

pru

\(p_{r,u}\)

RegUp reserve

p.u.

StaticGen

nonneg

prd

\(p_{r,d}\)

RegDn reserve

p.u.

StaticGen

nonneg

ExpressionCalcs#

Name

Description

Expression

Unit

Source

pi

locational marginal price (LMP)

\(-\phi[pb] - P_{TDF}^T (\phi[plfub] - \phi[plflb])\)

$/p.u.

Bus

mu1

Lagrange multipliers, dual of <plflb>

\(\phi[plflb]\)

$/p.u.

Line

mu2

Lagrange multipliers, dual of <plfub>

\(\phi[plfub]\)

$/p.u.

Line

pie

Energy price

\(-\phi[pb]\)

$/p.u.

pic

Congestion price

\(-P_{TDF}^T (\phi[plfub] - \phi[plflb])\)

$/p.u.

Bus

Services#

Name

Symbol

Description

Type

pd

\(p_{d}\)

effective active demand

NumOpDual

isb

\(I_{sb}\)

Index slack bus from all buses

VarSelect

ctrle

\(c_{trl, e}\)

Effective Gen controllability

NumOpDual

nctrl

\(c_{trl,n}\)

Effective Gen uncontrollability

NumOp

nctrle

\(c_{trl,n,e}\)

Effective Gen uncontrollability

NumOpDual

gs

\(S_{g}\)

Sum Gen vars vector in shape of area

ZonalSum

ds

\(S_{d}\)

Sum pd vector in shape of area

ZonalSum

pdz

\(p_{d,z}\)

zonal total load

NumOpDual

dud

\(d_{u, d}\)

zonal RegUp reserve requirement

NumOpDual

ddd

\(d_{d, d}\)

zonal RegDn reserve requirement

NumOpDual

PTDFt

\(P_{TDF}^T\)

PTDF transpose

NumOp

Parameters#

Name

Symbol

Description

Unit

Source

ug

\(u_{g}\)

Gen connection status

StaticGen.u

pg0

\(p_{g, 0}\)

Gen initial active power

p.u.

StaticGen.p0

gsh

\(g_{sh}\)

shunt conductance

Shunt.g

buss

\(B_{us,s}\)

Bus slack

Slack.bus

ud

\(u_{d}\)

Load connection status

StaticLoad.u

pd0

\(p_{d,0}\)

active demand

p.u.

StaticLoad.p0

Cg

\(C_{g}\)

Gen connection matrix

MatProcessor.Cg

Cl

\(C_{l}\)

Load connection matrix

MatProcessor.Cl

CftT

\(C_{ft}^T\)

Transpose of line connection matrix

MatProcessor.CftT

Csh

\(C_{sh}\)

Shunt connection matrix

MatProcessor.Csh

Bbus

\(B_{bus}\)

Bus admittance matrix

MatProcessor.Bbus

Bf

\(B_{f}\)

Bf matrix

MatProcessor.Bf

Pbusinj

\(P_{bus}^{inj}\)

Bus power injection vector

MatProcessor.Pbusinj

Pfinj

\(P_{f}^{inj}\)

Line power injection vector

MatProcessor.Pfinj

c2

\(c_{2}\)

Gen cost coefficient 2

$/(p.u.^2)

GCost.c2

c1

\(c_{1}\)

Gen cost coefficient 1

$/(p.u.)

GCost.c1

c0

\(c_{0}\)

Gen cost coefficient 0

$

GCost.c0

ctrl

\(c_{trl}\)

Gen controllability

StaticGen.ctrl

pmax

\(p_{g, max}\)

Gen maximum active power

p.u.

StaticGen.pmax

pmin

\(p_{g, min}\)

Gen minimum active power

p.u.

StaticGen.pmin

ul

\(u_{l}\)

Line connection status

Line.u

rate_a

\(R_{ATEA}\)

long-term flow limit

p.u.

Line.rate_a

amax

\(\theta_{bus, max}\)

max line angle difference

Line.amax

amin

\(\theta_{bus, min}\)

min line angle difference

Line.amin

zg

\(z_{one,g}\)

Gen area

StaticGen.area

zd

\(z_{one,d}\)

Load area

StaticLoad.area

R10

\(R_{10}\)

10-min ramp rate

p.u./h

StaticGen.R10

cru

\(c_{r,u}\)

RegUp reserve coefficient

$/(p.u.)

SFRCost.cru

crd

\(c_{r,d}\)

RegDown reserve coefficient

$/(p.u.)

SFRCost.crd

du

\(d_{u}\)

RegUp reserve requirement in percentage

%

SFR.du

dd

\(d_{d}\)

RegDown reserve requirement in percentage

%

SFR.dd

PTDF

\(P_{TDF}\)

PTDF

MatProcessor.PTDF

Config Fields in [RTED2]

Option

Symbol

Value

Info

Accepted values

t

\(T_{cfg}\)

0.083

time interval in hours

RTED2DG#

RTED with distributed generator DG using PTDF formulation.

Note that RTED2DG only includes DG output power. If ESD1 is included, RTED2ES should be used instead, otherwise there is no SOC.

Objective#

Unit

Expression

$

\(min. T_{cfg}^{2} \sum(c_{2} p_g^{2}) + \sum(u_{g} c_{0})+ T_{cfg} \sum(c_{1} p_g + c_{r,u} p_{r,u} + c_{r,d} p_{r,d})\)

Expressions#

Name

Description

Expression

Unit

Source

plf

Line flow

\(P_{TDF} (C_{g} p_g - C_{l} p_{d} - C_{sh} g_{sh} - P_{bus}^{inj})\)

p.u.

Line

pmaxe

Effective pmax

\(c_{trl,n,e} p_{g, 0} + c_{trl, e} p_{g, max}\)

p.u.

StaticGen

pmine

Effective pmin

\(c_{trl,n,e} p_{g, 0} + c_{trl, e} p_{g, min}\)

p.u.

StaticGen

Constraints#

Name

Description

Expression

pb

power balance

\(\sum(p_g) - \sum(p_{d}) = 0\)

sbus

align slack bus angle

\(I_{sb} \theta_{bus} = 0\)

pglb

pg min

\(-p_g + p_{g, min, e} \leq 0\)

pgub

pg max

\(p_g - p_{g, max, e} \leq 0\)

plflb

line flow lower bound

\(-p_{lf} - u_{l} R_{ATEA} \leq 0\)

plfub

line flow upper bound

\(p_{lf} - u_{l} R_{ATEA} \leq 0\)

alflb

line angle difference lower bound

\(-C_{ft}^T \theta_{bus} + \theta_{bus, min} \leq 0\)

alfub

line angle difference upper bound

\(C_{ft}^T \theta_{bus} - \theta_{bus, max} \leq 0\)

rbu

RegUp reserve balance

\(S_{g} u_{g} p_{r,u} - d_{u, d} = 0\)

rbd

RegDn reserve balance

\(S_{g} u_{g} p_{r,d} - d_{d, d} = 0\)

rru

RegUp reserve source

\(u_{g} (p_g + p_{r,u}) - u_{g} p_{g, max, e} \leq 0\)

rrd

RegDn reserve source

\(u_{g} (-p_g + p_{r,d}) + u_{g} p_{g, min, e} \leq 0\)

rgu

Gen ramping up

\(u_{g} (p_g-p_{g, 0}-R_{10}) \leq 0\)

rgd

Gen ramping down

\(u_{g} (-p_g+p_{g, 0}-R_{10}) \leq 0\)

cdgb

Select DG power from pg

\(I_{DG} p_g - p_{g,DG} = 0\)

Vars#

Name

Symbol

Description

Unit

Source

Properties

pg

\(p_g\)

Gen active power

p.u.

StaticGen.p

vBus

\(v_{Bus}\)

Bus voltage magnitude, placeholder

p.u.

Bus.v

aBus

\(\theta_{bus}\)

Bus voltage angle

rad

Bus.a

pru

\(p_{r,u}\)

RegUp reserve

p.u.

StaticGen

nonneg

prd

\(p_{r,d}\)

RegDn reserve

p.u.

StaticGen

nonneg

pgdg

\(p_{g,DG}\)

DG output power

p.u.

DG

ExpressionCalcs#

Name

Description

Expression

Unit

Source

pi

locational marginal price (LMP)

\(-\phi[pb] - P_{TDF}^T (\phi[plfub] - \phi[plflb])\)

$/p.u.

Bus

mu1

Lagrange multipliers, dual of <plflb>

\(\phi[plflb]\)

$/p.u.

Line

mu2

Lagrange multipliers, dual of <plfub>

\(\phi[plfub]\)

$/p.u.

Line

pie

Energy price

\(-\phi[pb]\)

$/p.u.

pic

Congestion price

\(-P_{TDF}^T (\phi[plfub] - \phi[plflb])\)

$/p.u.

Bus

Services#

Name

Symbol

Description

Type

pd

\(p_{d}\)

effective active demand

NumOpDual

isb

\(I_{sb}\)

Index slack bus from all buses

VarSelect

ctrle

\(c_{trl, e}\)

Effective Gen controllability

NumOpDual

nctrl

\(c_{trl,n}\)

Effective Gen uncontrollability

NumOp

nctrle

\(c_{trl,n,e}\)

Effective Gen uncontrollability

NumOpDual

gs

\(S_{g}\)

Sum Gen vars vector in shape of area

ZonalSum

ds

\(S_{d}\)

Sum pd vector in shape of area

ZonalSum

pdz

\(p_{d,z}\)

zonal total load

NumOpDual

dud

\(d_{u, d}\)

zonal RegUp reserve requirement

NumOpDual

ddd

\(d_{d, d}\)

zonal RegDn reserve requirement

NumOpDual

idg

\(I_{DG}\)

Index DG power from pg

VarSelect

PTDFt

\(P_{TDF}^T\)

PTDF transpose

NumOp

Parameters#

Name

Symbol

Description

Unit

Source

ug

\(u_{g}\)

Gen connection status

StaticGen.u

pg0

\(p_{g, 0}\)

Gen initial active power

p.u.

StaticGen.p0

gsh

\(g_{sh}\)

shunt conductance

Shunt.g

buss

\(B_{us,s}\)

Bus slack

Slack.bus

ud

\(u_{d}\)

Load connection status

StaticLoad.u

pd0

\(p_{d,0}\)

active demand

p.u.

StaticLoad.p0

Cg

\(C_{g}\)

Gen connection matrix

MatProcessor.Cg

Cl

\(C_{l}\)

Load connection matrix

MatProcessor.Cl

CftT

\(C_{ft}^T\)

Transpose of line connection matrix

MatProcessor.CftT

Csh

\(C_{sh}\)

Shunt connection matrix

MatProcessor.Csh

Bbus

\(B_{bus}\)

Bus admittance matrix

MatProcessor.Bbus

Bf

\(B_{f}\)

Bf matrix

MatProcessor.Bf

Pbusinj

\(P_{bus}^{inj}\)

Bus power injection vector

MatProcessor.Pbusinj

Pfinj

\(P_{f}^{inj}\)

Line power injection vector

MatProcessor.Pfinj

c2

\(c_{2}\)

Gen cost coefficient 2

$/(p.u.^2)

GCost.c2

c1

\(c_{1}\)

Gen cost coefficient 1

$/(p.u.)

GCost.c1

c0

\(c_{0}\)

Gen cost coefficient 0

$

GCost.c0

ctrl

\(c_{trl}\)

Gen controllability

StaticGen.ctrl

pmax

\(p_{g, max}\)

Gen maximum active power

p.u.

StaticGen.pmax

pmin

\(p_{g, min}\)

Gen minimum active power

p.u.

StaticGen.pmin

ul

\(u_{l}\)

Line connection status

Line.u

rate_a

\(R_{ATEA}\)

long-term flow limit

p.u.

Line.rate_a

amax

\(\theta_{bus, max}\)

max line angle difference

Line.amax

amin

\(\theta_{bus, min}\)

min line angle difference

Line.amin

zg

\(z_{one,g}\)

Gen area

StaticGen.area

zd

\(z_{one,d}\)

Load area

StaticLoad.area

R10

\(R_{10}\)

10-min ramp rate

p.u./h

StaticGen.R10

cru

\(c_{r,u}\)

RegUp reserve coefficient

$/(p.u.)

SFRCost.cru

crd

\(c_{r,d}\)

RegDown reserve coefficient

$/(p.u.)

SFRCost.crd

du

\(d_{u}\)

RegUp reserve requirement in percentage

%

SFR.du

dd

\(d_{d}\)

RegDown reserve requirement in percentage

%

SFR.dd

gendg

\(g_{DG}\)

gen of DG

DG.gen

gammapd

\(\gamma_{p,DG}\)

Ratio of DG.pge w.r.t to that of static generator

DG.gammap

PTDF

\(P_{TDF}\)

PTDF

MatProcessor.PTDF

Config Fields in [RTED2DG]

Option

Symbol

Value

Info

Accepted values

t

\(T_{cfg}\)

0.083

time interval in hours

RTED2ESP#

Price run of RTED with energy storage ESD1 using PTDF formulation.

This routine is not intended to work standalone. It should be used after solved RTED2ES. When both are solved, RTED2ES will be used.

The binary variables ucd and udd are now parameters retrieved from solved RTED2ES.

The constraints zce1 - zce3 and zde1 - zde3 are now simplified to zce and zde as below:

\[(1 - u_{cd}) * p_{ce} <= 0 (1 - u_{dd}) * p_{de} <= 0\]

Objective#

Unit

Expression

$

\(min. T_{cfg}^{2} \sum(c_{2} p_g^{2}) + \sum(u_{g} c_{0})+ T_{cfg} \sum(c_{1} p_g + c_{r,u} p_{r,u} + c_{r,d} p_{r,d})+ T_{cfg} \sum(- c_{c,ESD} p_{c,ESD} + c_{d,ESD} p_{d,ESD})\)

Expressions#

Name

Description

Expression

Unit

Source

plf

Line flow

\(P_{TDF} (C_{g} p_g - C_{l} p_{d} - C_{sh} g_{sh} - P_{bus}^{inj})\)

p.u.

Line

pmaxe

Effective pmax

\(c_{trl,n,e} p_{g, 0} + c_{trl, e} p_{g, max}\)

p.u.

StaticGen

pmine

Effective pmin

\(c_{trl,n,e} p_{g, 0} + c_{trl, e} p_{g, min}\)

p.u.

StaticGen

Constraints#

Name

Description

Expression

pb

power balance

\(\sum(p_g) - \sum(p_{d}) = 0\)

sbus

align slack bus angle

\(I_{sb} \theta_{bus} = 0\)

pglb

pg min

\(-p_g + p_{g, min, e} \leq 0\)

pgub

pg max

\(p_g - p_{g, max, e} \leq 0\)

plflb

line flow lower bound

\(-p_{lf} - u_{l} R_{ATEA} \leq 0\)

plfub

line flow upper bound

\(p_{lf} - u_{l} R_{ATEA} \leq 0\)

alflb

line angle difference lower bound

\(-C_{ft}^T \theta_{bus} + \theta_{bus, min} \leq 0\)

alfub

line angle difference upper bound

\(C_{ft}^T \theta_{bus} - \theta_{bus, max} \leq 0\)

rbu

RegUp reserve balance

\(S_{g} u_{g} p_{r,u} - d_{u, d} = 0\)

rbd

RegDn reserve balance

\(S_{g} u_{g} p_{r,d} - d_{d, d} = 0\)

rru

RegUp reserve source

\(u_{g} (p_g + p_{r,u}) - u_{g} p_{g, max, e} \leq 0\)

rrd

RegDn reserve source

\(u_{g} (-p_g + p_{r,d}) + u_{g} p_{g, min, e} \leq 0\)

rgu

Gen ramping up

\(u_{g} (p_g-p_{g, 0}-R_{10}) \leq 0\)

rgd

Gen ramping down

\(u_{g} (-p_g+p_{g, 0}-R_{10}) \leq 0\)

cdgb

Select DG power from pg

\(I_{DG} p_g - p_{g,DG} = 0\)

cesd

Select pce and pde from pg

\(I_{ESD} p_g + p_{c,ESD} - p_{d,ESD} = 0\)

SOClb

SOC lower bound

\(-SOC + SOC_{min} \leq 0\)

SOCub

SOC upper bound

\(SOC - SOC_{max} \leq 0\)

SOCb

ESD1 SOC balance

\(E_n (SOC - SOC_{init}) - T_{cfg} \eta_c p_{c,ESD}+ T_{cfg} \frac{1}{\eta_d} p_{d,ESD} = 0\)

SOCr

ESD1 final SOC requirement

\(SOC_{end} - SOC \leq 0\)

zce

zce bound

\(1-u_{c,ESD} p_{c,ESD} \leq 0\)

zde

zde bound

\(1-u_{d,ESD} p_{d,ESD} \leq 0\)

Vars#

Name

Symbol

Description

Unit

Source

Properties

pg

\(p_g\)

Gen active power

p.u.

StaticGen.p

vBus

\(v_{Bus}\)

Bus voltage magnitude, placeholder

p.u.

Bus.v

aBus

\(\theta_{bus}\)

Bus voltage angle

rad

Bus.a

pru

\(p_{r,u}\)

RegUp reserve

p.u.

StaticGen

nonneg

prd

\(p_{r,d}\)

RegDn reserve

p.u.

StaticGen

nonneg

pgdg

\(p_{g,DG}\)

DG output power

p.u.

DG

SOC

\(SOC\)

ESD1 State of Charge

p.u. (%)

ESD1

nonneg

pce

\(p_{c,ESD}\)

ESD1 charging power

p.u.

ESD1

nonneg

pde

\(p_{d,ESD}\)

ESD1 discharging power

p.u.

ESD1

nonneg

ExpressionCalcs#

Name

Description

Expression

Unit

Source

pi

locational marginal price (LMP)

\(-\phi[pb] - P_{TDF}^T (\phi[plfub] - \phi[plflb])\)

$/p.u.

Bus

mu1

Lagrange multipliers, dual of <plflb>

\(\phi[plflb]\)

$/p.u.

Line

mu2

Lagrange multipliers, dual of <plfub>

\(\phi[plfub]\)

$/p.u.

Line

pie

Energy price

\(-\phi[pb]\)

$/p.u.

pic

Congestion price

\(-P_{TDF}^T (\phi[plfub] - \phi[plflb])\)

$/p.u.

Bus

Services#

Name

Symbol

Description

Type

pd

\(p_{d}\)

effective active demand

NumOpDual

isb

\(I_{sb}\)

Index slack bus from all buses

VarSelect

ctrle

\(c_{trl, e}\)

Effective Gen controllability

NumOpDual

nctrl

\(c_{trl,n}\)

Effective Gen uncontrollability

NumOp

nctrle

\(c_{trl,n,e}\)

Effective Gen uncontrollability

NumOpDual

gs

\(S_{g}\)

Sum Gen vars vector in shape of area

ZonalSum

ds

\(S_{d}\)

Sum pd vector in shape of area

ZonalSum

pdz

\(p_{d,z}\)

zonal total load

NumOpDual

dud

\(d_{u, d}\)

zonal RegUp reserve requirement

NumOpDual

ddd

\(d_{d, d}\)

zonal RegDn reserve requirement

NumOpDual

idg

\(I_{DG}\)

Index DG power from pg

VarSelect

REtaD

\(\frac{1}{\eta_d}\)

NumOp

Mb

\(M_{big}\)

10 times of max of pmax as big M

NumOp

ies

\(I_{ESD}\)

Index ESD from StaticGen

VarSelect

PTDFt

\(P_{TDF}^T\)

PTDF transpose

NumOp

Parameters#

Name

Symbol

Description

Unit

Source

ug

\(u_{g}\)

Gen connection status

StaticGen.u

pg0

\(p_{g, 0}\)

Gen initial active power

p.u.

StaticGen.p0

gsh

\(g_{sh}\)

shunt conductance

Shunt.g

buss

\(B_{us,s}\)

Bus slack

Slack.bus

ud

\(u_{d}\)

Load connection status

StaticLoad.u

pd0

\(p_{d,0}\)

active demand

p.u.

StaticLoad.p0

Cg

\(C_{g}\)

Gen connection matrix

MatProcessor.Cg

Cl

\(C_{l}\)

Load connection matrix

MatProcessor.Cl

CftT

\(C_{ft}^T\)

Transpose of line connection matrix

MatProcessor.CftT

Csh

\(C_{sh}\)

Shunt connection matrix

MatProcessor.Csh

Bbus

\(B_{bus}\)

Bus admittance matrix

MatProcessor.Bbus

Bf

\(B_{f}\)

Bf matrix

MatProcessor.Bf

Pbusinj

\(P_{bus}^{inj}\)

Bus power injection vector

MatProcessor.Pbusinj

Pfinj

\(P_{f}^{inj}\)

Line power injection vector

MatProcessor.Pfinj

c2

\(c_{2}\)

Gen cost coefficient 2

$/(p.u.^2)

GCost.c2

c1

\(c_{1}\)

Gen cost coefficient 1

$/(p.u.)

GCost.c1

c0

\(c_{0}\)

Gen cost coefficient 0

$

GCost.c0

ctrl

\(c_{trl}\)

Gen controllability

StaticGen.ctrl

pmax

\(p_{g, max}\)

Gen maximum active power

p.u.

StaticGen.pmax

pmin

\(p_{g, min}\)

Gen minimum active power

p.u.

StaticGen.pmin

ul

\(u_{l}\)

Line connection status

Line.u

rate_a

\(R_{ATEA}\)

long-term flow limit

p.u.

Line.rate_a

amax

\(\theta_{bus, max}\)

max line angle difference

Line.amax

amin

\(\theta_{bus, min}\)

min line angle difference

Line.amin

zg

\(z_{one,g}\)

Gen area

StaticGen.area

zd

\(z_{one,d}\)

Load area

StaticLoad.area

R10

\(R_{10}\)

10-min ramp rate

p.u./h

StaticGen.R10

cru

\(c_{r,u}\)

RegUp reserve coefficient

$/(p.u.)

SFRCost.cru

crd

\(c_{r,d}\)

RegDown reserve coefficient

$/(p.u.)

SFRCost.crd

du

\(d_{u}\)

RegUp reserve requirement in percentage

%

SFR.du

dd

\(d_{d}\)

RegDown reserve requirement in percentage

%

SFR.dd

gendg

\(g_{DG}\)

gen of DG

DG.gen

gammapd

\(\gamma_{p,DG}\)

Ratio of DG.pge w.r.t to that of static generator

DG.gammap

En

\(E_n\)

Rated energy capacity

MWh

ESD1.En

SOCmax

\(SOC_{max}\)

Maximum allowed value for SOC in limiter

ESD1.SOCmax

SOCmin

\(SOC_{min}\)

Minimum required value for SOC in limiter

ESD1.SOCmin

SOCinit

\(SOC_{init}\)

Initial SOC

ESD1.SOCinit

SOCend

\(SOC_{end}\)

Target SOC at the end of the period

ESD1.SOCend

EtaC

\(\eta_c\)

Efficiency during charging

ESD1.EtaC

EtaD

\(\eta_d\)

Efficiency during discharging

ESD1.EtaD

cesdc

\(c_{c,ESD}\)

Charging cost

$/p.u.*h

ESD1.cesdc

cesdd

\(c_{d,ESD}\)

Discharging cost

$/p.u.*h

ESD1.cesdd

genesd

\(g_{ESD}\)

gen of ESD

ESD1.gen

ucd

\(u_{c,ESD}\)

Retrieved ESD1 charging decision

ESD1.ucd0

udd

\(u_{d,ESD}\)

Retrieved ESD1 discharging decision

ESD1.udd0

PTDF

\(P_{TDF}\)

PTDF

MatProcessor.PTDF

Config Fields in [RTED2ESP]

Option

Symbol

Value

Info

Accepted values

t

\(T_{cfg}\)

0.083

time interval in hours

RTED2ES#

RTED with energy storage ESD1. The bilinear term in the formulation is linearized with big-M method.

While the formulation enforces SOCend, the ESD1 owner is not required to provide an SOC constraint for every RTED interval. The optimization treats SOCend as a terminal boundary condition, allowing the dispatcher maximum flexibility to optimize power output within the hour, provided the target is met at the interval's conclusion.

Objective#

Unit

Expression

$

\(min. T_{cfg}^{2} \sum(c_{2} p_g^{2}) + \sum(u_{g} c_{0})+ T_{cfg} \sum(c_{1} p_g + c_{r,u} p_{r,u} + c_{r,d} p_{r,d})+ T_{cfg} \sum(- c_{c,ESD} p_{c,ESD} + c_{d,ESD} p_{d,ESD})\)

Expressions#

Name

Description

Expression

Unit

Source

plf

Line flow

\(P_{TDF} (C_{g} p_g - C_{l} p_{d} - C_{sh} g_{sh} - P_{bus}^{inj})\)

p.u.

Line

pmaxe

Effective pmax

\(c_{trl,n,e} p_{g, 0} + c_{trl, e} p_{g, max}\)

p.u.

StaticGen

pmine

Effective pmin

\(c_{trl,n,e} p_{g, 0} + c_{trl, e} p_{g, min}\)

p.u.

StaticGen

Constraints#

Name

Description

Expression

pb

power balance

\(\sum(p_g) - \sum(p_{d}) = 0\)

sbus

align slack bus angle

\(I_{sb} \theta_{bus} = 0\)

pglb

pg min

\(-p_g + p_{g, min, e} \leq 0\)

pgub

pg max

\(p_g - p_{g, max, e} \leq 0\)

plflb

line flow lower bound

\(-p_{lf} - u_{l} R_{ATEA} \leq 0\)

plfub

line flow upper bound

\(p_{lf} - u_{l} R_{ATEA} \leq 0\)

alflb

line angle difference lower bound

\(-C_{ft}^T \theta_{bus} + \theta_{bus, min} \leq 0\)

alfub

line angle difference upper bound

\(C_{ft}^T \theta_{bus} - \theta_{bus, max} \leq 0\)

rbu

RegUp reserve balance

\(S_{g} u_{g} p_{r,u} - d_{u, d} = 0\)

rbd

RegDn reserve balance

\(S_{g} u_{g} p_{r,d} - d_{d, d} = 0\)

rru

RegUp reserve source

\(u_{g} (p_g + p_{r,u}) - u_{g} p_{g, max, e} \leq 0\)

rrd

RegDn reserve source

\(u_{g} (-p_g + p_{r,d}) + u_{g} p_{g, min, e} \leq 0\)

rgu

Gen ramping up

\(u_{g} (p_g-p_{g, 0}-R_{10}) \leq 0\)

rgd

Gen ramping down

\(u_{g} (-p_g+p_{g, 0}-R_{10}) \leq 0\)

cesd

Select pce and pde from pg

\(I_{ESD} p_g + p_{c,ESD} - p_{d,ESD} = 0\)

SOClb

SOC lower bound

\(-SOC + SOC_{min} \leq 0\)

SOCub

SOC upper bound

\(SOC - SOC_{max} \leq 0\)

SOCb

ESD1 SOC balance

\(E_n (SOC - SOC_{init}) - T_{cfg} \eta_c p_{c,ESD}+ T_{cfg} \frac{1}{\eta_d} p_{d,ESD} = 0\)

SOCr

ESD1 final SOC requirement

\(SOC_{end} - SOC \leq 0\)

cdgb

Select DG power from pg

\(I_{DG} p_g - p_{g,DG} = 0\)

cdb

Charging decision bound

\(u_{c,ESD} + u_{d,ESD} - 1 = 0\)

zce1

zce bound 1

\(-z_{c,ESD} + p_{c,ESD} \leq 0\)

zce2

zce bound 2

\(z_{c,ESD} - p_{c,ESD} - M_{big} (1-u_{c,ESD}) \leq 0\)

zce3

zce bound 3

\(z_{c,ESD} - M_{big} u_{c,ESD} \leq 0\)

zde1

zde bound 1

\(-z_{d,ESD} + p_{d,ESD} \leq 0\)

zde2

zde bound 2

\(z_{d,ESD} - p_{d,ESD} - M_{big} (1-u_{d,ESD}) \leq 0\)

zde3

zde bound 3

\(z_{d,ESD} - M_{big} u_{d,ESD} \leq 0\)

tcdr

Minimum charging duration

\((t_{dc0} > 0) (t_{dc} > t_{dc0}) - u_{c,ESD} \leq 0\)

tddr

Minimum discharging duration

\((t_{dd0} > 0) (t_{dd} > t_{dd0}) - u_{d,ESD} \leq 0\)

Vars#

Name

Symbol

Description

Unit

Source

Properties

pg

\(p_g\)

Gen active power

p.u.

StaticGen.p

vBus

\(v_{Bus}\)

Bus voltage magnitude, placeholder

p.u.

Bus.v

aBus

\(\theta_{bus}\)

Bus voltage angle

rad

Bus.a

pru

\(p_{r,u}\)

RegUp reserve

p.u.

StaticGen

nonneg

prd

\(p_{r,d}\)

RegDn reserve

p.u.

StaticGen

nonneg

SOC

\(SOC\)

ESD1 State of Charge

p.u. (%)

ESD1

nonneg

pce

\(p_{c,ESD}\)

ESD1 charging power

p.u.

ESD1

nonneg

pde

\(p_{d,ESD}\)

ESD1 discharging power

p.u.

ESD1

nonneg

pgdg

\(p_{g,DG}\)

DG output power

p.u.

DG

ucd

\(u_{c,ESD}\)

ESD1 charging decision

ESD1

boolean

udd

\(u_{d,ESD}\)

ESD1 discharging decision

ESD1

boolean

zce

\(z_{c,ESD}\)

Aux var for charging, \(z_{c,ESD}=u_{c,ESD}*p_{c,ESD}\)

ESD1

nonneg

zde

\(z_{d,ESD}\)

Aux var for discharging, \(z_{d,ESD}=u_{d,ESD}*p_{d,ESD}\)

ESD1

nonneg

ExpressionCalcs#

Name

Description

Expression

Unit

Source

pi

locational marginal price (LMP)

\(-\phi[pb] - P_{TDF}^T (\phi[plfub] - \phi[plflb])\)

$/p.u.

Bus

mu1

Lagrange multipliers, dual of <plflb>

\(\phi[plflb]\)

$/p.u.

Line

mu2

Lagrange multipliers, dual of <plfub>

\(\phi[plfub]\)

$/p.u.

Line

pie

Energy price

\(-\phi[pb]\)

$/p.u.

pic

Congestion price

\(-P_{TDF}^T (\phi[plfub] - \phi[plflb])\)

$/p.u.

Bus

Services#

Name

Symbol

Description

Type

pd

\(p_{d}\)

effective active demand

NumOpDual

isb

\(I_{sb}\)

Index slack bus from all buses

VarSelect

ctrle

\(c_{trl, e}\)

Effective Gen controllability

NumOpDual

nctrl

\(c_{trl,n}\)

Effective Gen uncontrollability

NumOp

nctrle

\(c_{trl,n,e}\)

Effective Gen uncontrollability

NumOpDual

gs

\(S_{g}\)

Sum Gen vars vector in shape of area

ZonalSum

ds

\(S_{d}\)

Sum pd vector in shape of area

ZonalSum

pdz

\(p_{d,z}\)

zonal total load

NumOpDual

dud

\(d_{u, d}\)

zonal RegUp reserve requirement

NumOpDual

ddd

\(d_{d, d}\)

zonal RegDn reserve requirement

NumOpDual

REtaD

\(\frac{1}{\eta_d}\)

NumOp

Mb

\(M_{big}\)

10 times of max of pmax as big M

NumOp

ies

\(I_{ESD}\)

Index ESD from StaticGen

VarSelect

idg

\(I_{DG}\)

Index DG power from pg

VarSelect

PTDFt

\(P_{TDF}^T\)

PTDF transpose

NumOp

Parameters#

Name

Symbol

Description

Unit

Source

ug

\(u_{g}\)

Gen connection status

StaticGen.u

pg0

\(p_{g, 0}\)

Gen initial active power

p.u.

StaticGen.p0

gsh

\(g_{sh}\)

shunt conductance

Shunt.g

buss

\(B_{us,s}\)

Bus slack

Slack.bus

ud

\(u_{d}\)

Load connection status

StaticLoad.u

pd0

\(p_{d,0}\)

active demand

p.u.

StaticLoad.p0

Cg

\(C_{g}\)

Gen connection matrix

MatProcessor.Cg

Cl

\(C_{l}\)

Load connection matrix

MatProcessor.Cl

CftT

\(C_{ft}^T\)

Transpose of line connection matrix

MatProcessor.CftT

Csh

\(C_{sh}\)

Shunt connection matrix

MatProcessor.Csh

Bbus

\(B_{bus}\)

Bus admittance matrix

MatProcessor.Bbus

Bf

\(B_{f}\)

Bf matrix

MatProcessor.Bf

Pbusinj

\(P_{bus}^{inj}\)

Bus power injection vector

MatProcessor.Pbusinj

Pfinj

\(P_{f}^{inj}\)

Line power injection vector

MatProcessor.Pfinj

c2

\(c_{2}\)

Gen cost coefficient 2

$/(p.u.^2)

GCost.c2

c1

\(c_{1}\)

Gen cost coefficient 1

$/(p.u.)

GCost.c1

c0

\(c_{0}\)

Gen cost coefficient 0

$

GCost.c0

ctrl

\(c_{trl}\)

Gen controllability

StaticGen.ctrl

pmax

\(p_{g, max}\)

Gen maximum active power

p.u.

StaticGen.pmax

pmin

\(p_{g, min}\)

Gen minimum active power

p.u.

StaticGen.pmin

ul

\(u_{l}\)

Line connection status

Line.u

rate_a

\(R_{ATEA}\)

long-term flow limit

p.u.

Line.rate_a

amax

\(\theta_{bus, max}\)

max line angle difference

Line.amax

amin

\(\theta_{bus, min}\)

min line angle difference

Line.amin

zg

\(z_{one,g}\)

Gen area

StaticGen.area

zd

\(z_{one,d}\)

Load area

StaticLoad.area

R10

\(R_{10}\)

10-min ramp rate

p.u./h

StaticGen.R10

cru

\(c_{r,u}\)

RegUp reserve coefficient

$/(p.u.)

SFRCost.cru

crd

\(c_{r,d}\)

RegDown reserve coefficient

$/(p.u.)

SFRCost.crd

du

\(d_{u}\)

RegUp reserve requirement in percentage

%

SFR.du

dd

\(d_{d}\)

RegDown reserve requirement in percentage

%

SFR.dd

En

\(E_n\)

Rated energy capacity

MWh

ESD1.En

SOCmax

\(SOC_{max}\)

Maximum allowed value for SOC in limiter

ESD1.SOCmax

SOCmin

\(SOC_{min}\)

Minimum required value for SOC in limiter

ESD1.SOCmin

SOCinit

\(SOC_{init}\)

Initial SOC

ESD1.SOCinit

SOCend

\(SOC_{end}\)

Target SOC at the end of the period

ESD1.SOCend

EtaC

\(\eta_c\)

Efficiency during charging

ESD1.EtaC

EtaD

\(\eta_d\)

Efficiency during discharging

ESD1.EtaD

cesdc

\(c_{c,ESD}\)

Charging cost

$/p.u.*h

ESD1.cesdc

cesdd

\(c_{d,ESD}\)

Discharging cost

$/p.u.*h

ESD1.cesdd

genesd

\(g_{ESD}\)

gen of ESD

ESD1.gen

gendg

\(g_{DG}\)

gen of DG

DG.gen

gammapd

\(\gamma_{p,DG}\)

Ratio of DG.pge w.r.t to that of static generator

DG.gammap

tdc

\(t_{dc}\)

Minimum charging duration

h

ESD1.tdc

tdd

\(t_{dd}\)

Minimum discharging duration

h

ESD1.tdd

tdc0

\(t_{dc0}\)

Initial charging time

h

ESD1.tdc0

tdd0

\(t_{dd0}\)

Initial discharging time

h

ESD1.tdd0

PTDF

\(P_{TDF}\)

PTDF

MatProcessor.PTDF

Config Fields in [RTED2ES]

Option

Symbol

Value

Info

Accepted values

t

\(T_{cfg}\)

0.083

time interval in hours

ED#

DC-based multi-period economic dispatch (ED). Dispatch interval config.t ($T_{cfg}$) is introduced, 1 [Hour] by default. ED extends DCOPF as follows:

  • Vars pg, pru, prd are extended to 2D

  • 2D Vars rgu and rgd are introduced

  • Param ug is sourced from EDSlotGen.ug as generator commitment

Notes#

  • Formulations have been adjusted with interval config.t

  • The tie-line flow is not implemented in this model.

  • EDSlotGen.ug is used instead of StaticGen.u for generator commitment.

  • Following reserves are balanced for each "Area": RegUp reserve rbu, RegDn reserve rbd, and Spinning reserve rsr.

Objective#

Unit

Expression

$

\(min. \sum(T_{cfg}^{2} c_{2} p_g^{2})+ T_{cfg} \sum(c_{1} p_g + c_{sr} p_{r,s})+ \sum(u_{g} c_{0} 1_{tl})\)

Expressions#

Name

Description

Expression

Unit

Source

plf

2D Line flow

\(B_{f} \theta_{bus} + P_{f}^{inj} 1_{tl}\)

p.u.

Line

pmaxe

Effective pmax

\(c_{trl,n,e} p_{g, 0} 1_{tl} + c_{trl, e} 1_{tl} p_{g, max}\)

p.u.

StaticGen

pmine

Effective pmin

\(c_{trl,n,e} p_{g, 0} 1_{tl} + c_{trl, e} 1_{tl} p_{g, min}\)

p.u.

StaticGen

Constraints#

Name

Description

Expression

pb

power balance

\(B_{bus} \theta_{bus} + P_{bus}^{inj} 1_{tl} + C_{l} p_{d,s} + C_{sh} g_{sh} 1_{tl} - C_{g} p_g = 0\)

sbus

align slack bus angle

\(I_{sb} \theta_{bus} = 0\)

pglb

pg min

\(-p_g + p_{g, min, e} \leq 0\)

pgub

pg max

\(p_g - p_{g, max, e} \leq 0\)

plflb

line flow lower bound

\(-B_{f} \theta_{bus} - P_{f}^{inj} 1_{tl} - u_{l} R_{ATEA} 1_{tl} \leq 0\)

plfub

line flow upper bound

\(B_{f} \theta_{bus} + P_{f}^{inj} 1_{tl} - u_{l} R_{ATEA} 1_{tl} \leq 0\)

alflb

line angle difference lower bound

\(-C_{ft}^T \theta_{bus} + \theta_{bus, min} 1_{tl} \leq 0\)

alfub

line angle difference upper bound

\(C_{ft}^T \theta_{bus} - \theta_{bus, max} 1_{tl} \leq 0\)

rbu

RegUp reserve balance

\(S_{g} u_{g} p_{r,u} - d_{u, d} 1_{tl} = 0\)

rbd

RegDn reserve balance

\(S_{g} u_{g} p_{r,d} - d_{d, d} 1_{tl} = 0\)

rru

RegUp reserve source

\(p_g + p_{r,u} - u_{g} p_{g, max} 1_{tl} \leq 0\)

rrd

RegDn reserve source

\(-p_g + p_{r,d} + u_{g} p_{g, min} 1_{tl} \leq 0\)

rgu

Gen ramping up

\(p_g M_{r} - T_{cfg} R_{30,R} \leq 0\)

rgd

Gen ramping down

\(-p_g M_{r} - T_{cfg} R_{30,R} \leq 0\)

prsb

spinning reserve balance

\(u_{g} p_{g, max} 1_{tl} - p_g - p_{r,s} = 0\)

rsr

spinning reserve requirement

\(-S_{g} p_{r,s} + d_{s,r,z} \leq 0\)

rgu0

Initial gen ramping up

\(u_{g}[: 0], p_g[:, 0] - p_{g, 0}[:, 0] - R_{30} \leq 0\)

rgd0

Initial gen ramping down

\(u_{g}[: 0], -p_g[:, 0] + p_{g, 0}[:, 0] - R_{30} \leq 0\)

Vars#

Name

Symbol

Description

Unit

Source

Properties

pg

\(p_g\)

2D Gen power

p.u.

StaticGen.p

vBus

\(v_{Bus}\)

2D Bus voltage

p.u.

Bus.v

aBus

\(\theta_{bus}\)

2D Bus angle

rad

Bus.a

pru

\(p_{r,u}\)

2D RegUp power

p.u.

StaticGen

nonneg

prd

\(p_{r,d}\)

2D RegDn power

p.u.

StaticGen

nonneg

prs

\(p_{r,s}\)

spinning reserve

p.u.

StaticGen

nonneg

ExpressionCalcs#

Name

Description

Expression

Unit

Source

pi

LMP, dual of <pb>

\(\phi[pb]\)

$/p.u.

Bus

mu1

Lagrange multipliers, dual of <plflb>

\(\phi[plflb]\)

$/p.u.

Line

mu2

Lagrange multipliers, dual of <plfub>

\(\phi[plfub]\)

$/p.u.

Line

Services#

Name

Symbol

Description

Type

pd

\(p_{d}\)

effective active demand

NumOpDual

isb

\(I_{sb}\)

Index slack bus from all buses

VarSelect

ctrle

\(c_{trl, e}\)

Effective Gen controllability

NumOpDual

nctrl

\(c_{trl,n}\)

Effective Gen uncontrollability

NumOp

nctrle

\(c_{trl,n,e}\)

Effective Gen uncontrollability

NumOpDual

gs

\(S_{g}\)

Sum Gen vars vector in shape of area

ZonalSum

ds

\(S_{d}\)

Sum pd vector in shape of area

ZonalSum

pdz

\(p_{d,z}\)

zonal total load

NumOpDual

dud

\(d_{u, d}\)

zonal RegUp reserve requirement

NumOpDual

ddd

\(d_{d, d}\)

zonal RegDn reserve requirement

NumOpDual

tlv

\(1_{tl}\)

time length vector

NumOp

pds

\(p_{d,s}\)

Scaled load

LoadScale

Mr

\(M_{r}\)

Subtraction matrix for ramping

RampSub

RR30

\(R_{30,R}\)

Repeated ramp rate

NumHstack

dsrpz

\(d_{s,r, p, z}\)

zonal spinning reserve requirement in percentage

NumOpDual

dsr

\(d_{s,r,z}\)

zonal spinning reserve requirement

NumOpDual

Parameters#

Name

Symbol

Description

Unit

Source

ug

\(u_{g}\)

unit commitment decisions

EDSlotGen.ug

pg0

\(p_{g, 0}\)

Gen initial active power

p.u.

StaticGen.p0

gsh

\(g_{sh}\)

shunt conductance

Shunt.g

buss

\(B_{us,s}\)

Bus slack

Slack.bus

ud

\(u_{d}\)

Load connection status

StaticLoad.u

pd0

\(p_{d,0}\)

active demand

p.u.

StaticLoad.p0

Cg

\(C_{g}\)

Gen connection matrix

MatProcessor.Cg

Cl

\(C_{l}\)

Load connection matrix

MatProcessor.Cl

CftT

\(C_{ft}^T\)

Transpose of line connection matrix

MatProcessor.CftT

Csh

\(C_{sh}\)

Shunt connection matrix

MatProcessor.Csh

Bbus

\(B_{bus}\)

Bus admittance matrix

MatProcessor.Bbus

Bf

\(B_{f}\)

Bf matrix

MatProcessor.Bf

Pbusinj

\(P_{bus}^{inj}\)

Bus power injection vector

MatProcessor.Pbusinj

Pfinj

\(P_{f}^{inj}\)

Line power injection vector

MatProcessor.Pfinj

c2

\(c_{2}\)

Gen cost coefficient 2

$/(p.u.^2)

GCost.c2

c1

\(c_{1}\)

Gen cost coefficient 1

$/(p.u.)

GCost.c1

c0

\(c_{0}\)

Gen cost coefficient 0

$

GCost.c0

ctrl

\(c_{trl}\)

Gen controllability

StaticGen.ctrl

pmax

\(p_{g, max}\)

Gen maximum active power

p.u.

StaticGen.pmax

pmin

\(p_{g, min}\)

Gen minimum active power

p.u.

StaticGen.pmin

ul

\(u_{l}\)

Line connection status

Line.u

rate_a

\(R_{ATEA}\)

long-term flow limit

p.u.

Line.rate_a

amax

\(\theta_{bus, max}\)

max line angle difference

Line.amax

amin

\(\theta_{bus, min}\)

min line angle difference

Line.amin

zg

\(z_{one,g}\)

Gen area

StaticGen.area

zd

\(z_{one,d}\)

Load area

StaticLoad.area

R10

\(R_{10}\)

10-min ramp rate

p.u./h

StaticGen.R10

cru

\(c_{r,u}\)

RegUp reserve coefficient

$/(p.u.)

SFRCost.cru

crd

\(c_{r,d}\)

RegDown reserve coefficient

$/(p.u.)

SFRCost.crd

du

\(d_{u}\)

RegUp reserve requirement in percentage

%

SFR.du

dd

\(d_{d}\)

RegDown reserve requirement in percentage

%

SFR.dd

timeslot

\(t_{s,idx}\)

Time slot for multi-period ED

EDSlot.idx

sd

\(s_{d}\)

area load scaling factor

EDSlotLoad.sd

R30

\(R_{30}\)

30-min ramp rate

p.u./h

StaticGen.R30

dsr

\(d_{sr}\)

spinning reserve requirement in percentage

%

SR.demand

csr

\(c_{sr}\)

cost for spinning reserve

$/(p.u.*h)

SRCost.csr

Config Fields in [ED]

Option

Symbol

Value

Info

Accepted values

t

\(T_{cfg}\)

1

time interval in hours

EDDG#

ED with distributed generation DG.

Note that EDDG only includes DG output power. If ESD1 is included, EDES should be used instead, otherwise there is no SOC.

Objective#

Unit

Expression

$

\(min. \sum(T_{cfg}^{2} c_{2} p_g^{2})+ T_{cfg} \sum(c_{1} p_g + c_{sr} p_{r,s})+ \sum(u_{g} c_{0} 1_{tl})\)

Expressions#

Name

Description

Expression

Unit

Source

plf

2D Line flow

\(B_{f} \theta_{bus} + P_{f}^{inj} 1_{tl}\)

p.u.

Line

pmaxe

Effective pmax

\(c_{trl,n,e} p_{g, 0} 1_{tl} + c_{trl, e} 1_{tl} p_{g, max}\)

p.u.

StaticGen

pmine

Effective pmin

\(c_{trl,n,e} p_{g, 0} 1_{tl} + c_{trl, e} 1_{tl} p_{g, min}\)

p.u.

StaticGen

Constraints#

Name

Description

Expression

pb

power balance

\(B_{bus} \theta_{bus} + P_{bus}^{inj} 1_{tl} + C_{l} p_{d,s} + C_{sh} g_{sh} 1_{tl} - C_{g} p_g = 0\)

sbus

align slack bus angle

\(I_{sb} \theta_{bus} = 0\)

pglb

pg min

\(-p_g + p_{g, min, e} \leq 0\)

pgub

pg max

\(p_g - p_{g, max, e} \leq 0\)

plflb

line flow lower bound

\(-B_{f} \theta_{bus} - P_{f}^{inj} 1_{tl} - u_{l} R_{ATEA} 1_{tl} \leq 0\)

plfub

line flow upper bound

\(B_{f} \theta_{bus} + P_{f}^{inj} 1_{tl} - u_{l} R_{ATEA} 1_{tl} \leq 0\)

alflb

line angle difference lower bound

\(-C_{ft}^T \theta_{bus} + \theta_{bus, min} 1_{tl} \leq 0\)

alfub

line angle difference upper bound

\(C_{ft}^T \theta_{bus} - \theta_{bus, max} 1_{tl} \leq 0\)

rbu

RegUp reserve balance

\(S_{g} u_{g} p_{r,u} - d_{u, d} 1_{tl} = 0\)

rbd

RegDn reserve balance

\(S_{g} u_{g} p_{r,d} - d_{d, d} 1_{tl} = 0\)

rru

RegUp reserve source

\(p_g + p_{r,u} - u_{g} p_{g, max} 1_{tl} \leq 0\)

rrd

RegDn reserve source

\(-p_g + p_{r,d} + u_{g} p_{g, min} 1_{tl} \leq 0\)

rgu

Gen ramping up

\(p_g M_{r} - T_{cfg} R_{30,R} \leq 0\)

rgd

Gen ramping down

\(-p_g M_{r} - T_{cfg} R_{30,R} \leq 0\)

prsb

spinning reserve balance

\(u_{g} p_{g, max} 1_{tl} - p_g - p_{r,s} = 0\)

rsr

spinning reserve requirement

\(-S_{g} p_{r,s} + d_{s,r,z} \leq 0\)

rgu0

Initial gen ramping up

\(u_{g}[: 0], p_g[:, 0] - p_{g, 0}[:, 0] - R_{30} \leq 0\)

rgd0

Initial gen ramping down

\(u_{g}[: 0], -p_g[:, 0] + p_{g, 0}[:, 0] - R_{30} \leq 0\)

cdgb

Select DG power from pg

\(I_{DG} p_g - p_{g,DG} = 0\)

Vars#

Name

Symbol

Description

Unit

Source

Properties

pg

\(p_g\)

2D Gen power

p.u.

StaticGen.p

vBus

\(v_{Bus}\)

2D Bus voltage

p.u.

Bus.v

aBus

\(\theta_{bus}\)

2D Bus angle

rad

Bus.a

pru

\(p_{r,u}\)

2D RegUp power

p.u.

StaticGen

nonneg

prd

\(p_{r,d}\)

2D RegDn power

p.u.

StaticGen

nonneg

prs

\(p_{r,s}\)

spinning reserve

p.u.

StaticGen

nonneg

pgdg

\(p_{g,DG}\)

DG output power

p.u.

DG

ExpressionCalcs#

Name

Description

Expression

Unit

Source

pi

LMP, dual of <pb>

\(\phi[pb]\)

$/p.u.

Bus

mu1

Lagrange multipliers, dual of <plflb>

\(\phi[plflb]\)

$/p.u.

Line

mu2

Lagrange multipliers, dual of <plfub>

\(\phi[plfub]\)

$/p.u.

Line

Services#

Name

Symbol

Description

Type

pd

\(p_{d}\)

effective active demand

NumOpDual

isb

\(I_{sb}\)

Index slack bus from all buses

VarSelect

ctrle

\(c_{trl, e}\)

Effective Gen controllability

NumOpDual

nctrl

\(c_{trl,n}\)

Effective Gen uncontrollability

NumOp

nctrle

\(c_{trl,n,e}\)

Effective Gen uncontrollability

NumOpDual

gs

\(S_{g}\)

Sum Gen vars vector in shape of area

ZonalSum

ds

\(S_{d}\)

Sum pd vector in shape of area

ZonalSum

pdz

\(p_{d,z}\)

zonal total load

NumOpDual

dud

\(d_{u, d}\)

zonal RegUp reserve requirement

NumOpDual

ddd

\(d_{d, d}\)

zonal RegDn reserve requirement

NumOpDual

tlv

\(1_{tl}\)

time length vector

NumOp

pds

\(p_{d,s}\)

Scaled load

LoadScale

Mr

\(M_{r}\)

Subtraction matrix for ramping

RampSub

RR30

\(R_{30,R}\)

Repeated ramp rate

NumHstack

dsrpz

\(d_{s,r, p, z}\)

zonal spinning reserve requirement in percentage

NumOpDual

dsr

\(d_{s,r,z}\)

zonal spinning reserve requirement

NumOpDual

idg

\(I_{DG}\)

Index DG power from pg

VarSelect

Parameters#

Name

Symbol

Description

Unit

Source

ug

\(u_{g}\)

unit commitment decisions

EDSlotGen.ug

pg0

\(p_{g, 0}\)

Gen initial active power

p.u.

StaticGen.p0

gsh

\(g_{sh}\)

shunt conductance

Shunt.g

buss

\(B_{us,s}\)

Bus slack

Slack.bus

ud

\(u_{d}\)

Load connection status

StaticLoad.u

pd0

\(p_{d,0}\)

active demand

p.u.

StaticLoad.p0

Cg

\(C_{g}\)

Gen connection matrix

MatProcessor.Cg

Cl

\(C_{l}\)

Load connection matrix

MatProcessor.Cl

CftT

\(C_{ft}^T\)

Transpose of line connection matrix

MatProcessor.CftT

Csh

\(C_{sh}\)

Shunt connection matrix

MatProcessor.Csh

Bbus

\(B_{bus}\)

Bus admittance matrix

MatProcessor.Bbus

Bf

\(B_{f}\)

Bf matrix

MatProcessor.Bf

Pbusinj

\(P_{bus}^{inj}\)

Bus power injection vector

MatProcessor.Pbusinj

Pfinj

\(P_{f}^{inj}\)

Line power injection vector

MatProcessor.Pfinj

c2

\(c_{2}\)

Gen cost coefficient 2

$/(p.u.^2)

GCost.c2

c1

\(c_{1}\)

Gen cost coefficient 1

$/(p.u.)

GCost.c1

c0

\(c_{0}\)

Gen cost coefficient 0

$

GCost.c0

ctrl

\(c_{trl}\)

Gen controllability

StaticGen.ctrl

pmax

\(p_{g, max}\)

Gen maximum active power

p.u.

StaticGen.pmax

pmin

\(p_{g, min}\)

Gen minimum active power

p.u.

StaticGen.pmin

ul

\(u_{l}\)

Line connection status

Line.u

rate_a

\(R_{ATEA}\)

long-term flow limit

p.u.

Line.rate_a

amax

\(\theta_{bus, max}\)

max line angle difference

Line.amax

amin

\(\theta_{bus, min}\)

min line angle difference

Line.amin

zg

\(z_{one,g}\)

Gen area

StaticGen.area

zd

\(z_{one,d}\)

Load area

StaticLoad.area

R10

\(R_{10}\)

10-min ramp rate

p.u./h

StaticGen.R10

cru

\(c_{r,u}\)

RegUp reserve coefficient

$/(p.u.)

SFRCost.cru

crd

\(c_{r,d}\)

RegDown reserve coefficient

$/(p.u.)

SFRCost.crd

du

\(d_{u}\)

RegUp reserve requirement in percentage

%

SFR.du

dd

\(d_{d}\)

RegDown reserve requirement in percentage

%

SFR.dd

timeslot

\(t_{s,idx}\)

Time slot for multi-period ED

EDSlot.idx

sd

\(s_{d}\)

area load scaling factor

EDSlotLoad.sd

R30

\(R_{30}\)

30-min ramp rate

p.u./h

StaticGen.R30

dsr

\(d_{sr}\)

spinning reserve requirement in percentage

%

SR.demand

csr

\(c_{sr}\)

cost for spinning reserve

$/(p.u.*h)

SRCost.csr

gendg

\(g_{DG}\)

gen of DG

DG.gen

gammapd

\(\gamma_{p,DG}\)

Ratio of DG.pge w.r.t to that of static generator

DG.gammap

Config Fields in [EDDG]

Option

Symbol

Value

Info

Accepted values

t

\(T_{cfg}\)

1

time interval in hours

EDES#

ED with energy storage ESD1. The bilinear term in the formulation is linearized with big-M method.

Objective#

Unit

Expression

$

\(min. \sum(T_{cfg}^{2} c_{2} p_g^{2})+ T_{cfg} \sum(c_{1} p_g + c_{sr} p_{r,s})+ \sum(u_{g} c_{0} 1_{tl})+ T_{cfg} \sum(- c_{c,ESD} p_{c,ESD} + c_{d,ESD} p_{d,ESD})\)

Expressions#

Name

Description

Expression

Unit

Source

plf

2D Line flow

\(B_{f} \theta_{bus} + P_{f}^{inj} 1_{tl}\)

p.u.

Line

pmaxe

Effective pmax

\(c_{trl,n,e} p_{g, 0} 1_{tl} + c_{trl, e} 1_{tl} p_{g, max}\)

p.u.

StaticGen

pmine

Effective pmin

\(c_{trl,n,e} p_{g, 0} 1_{tl} + c_{trl, e} 1_{tl} p_{g, min}\)

p.u.

StaticGen

Constraints#

Name

Description

Expression

pb

power balance

\(B_{bus} \theta_{bus} + P_{bus}^{inj} 1_{tl} + C_{l} p_{d,s} + C_{sh} g_{sh} 1_{tl} - C_{g} p_g = 0\)

sbus

align slack bus angle

\(I_{sb} \theta_{bus} = 0\)

pglb

pg min

\(-p_g + p_{g, min, e} \leq 0\)

pgub

pg max

\(p_g - p_{g, max, e} \leq 0\)

plflb

line flow lower bound

\(-B_{f} \theta_{bus} - P_{f}^{inj} 1_{tl} - u_{l} R_{ATEA} 1_{tl} \leq 0\)

plfub

line flow upper bound

\(B_{f} \theta_{bus} + P_{f}^{inj} 1_{tl} - u_{l} R_{ATEA} 1_{tl} \leq 0\)

alflb

line angle difference lower bound

\(-C_{ft}^T \theta_{bus} + \theta_{bus, min} 1_{tl} \leq 0\)

alfub

line angle difference upper bound

\(C_{ft}^T \theta_{bus} - \theta_{bus, max} 1_{tl} \leq 0\)

rbu

RegUp reserve balance

\(S_{g} u_{g} p_{r,u} - d_{u, d} 1_{tl} = 0\)

rbd

RegDn reserve balance

\(S_{g} u_{g} p_{r,d} - d_{d, d} 1_{tl} = 0\)

rru

RegUp reserve source

\(p_g + p_{r,u} - u_{g} p_{g, max} 1_{tl} \leq 0\)

rrd

RegDn reserve source

\(-p_g + p_{r,d} + u_{g} p_{g, min} 1_{tl} \leq 0\)

rgu

Gen ramping up

\(p_g M_{r} - T_{cfg} R_{30,R} \leq 0\)

rgd

Gen ramping down

\(-p_g M_{r} - T_{cfg} R_{30,R} \leq 0\)

prsb

spinning reserve balance

\(u_{g} p_{g, max} 1_{tl} - p_g - p_{r,s} = 0\)

rsr

spinning reserve requirement

\(-S_{g} p_{r,s} + d_{s,r,z} \leq 0\)

rgu0

Initial gen ramping up

\(u_{g}[: 0], p_g[:, 0] - p_{g, 0}[:, 0] - R_{30} \leq 0\)

rgd0

Initial gen ramping down

\(u_{g}[: 0], -p_g[:, 0] + p_{g, 0}[:, 0] - R_{30} \leq 0\)

cesd

Select pce and pde from pg

\(I_{ESD} p_g + p_{c,ESD} - p_{d,ESD} = 0\)

SOClb

SOC lower bound

\(-SOC + SOC_{min} \leq 0\)

SOCub

SOC upper bound

\(SOC - SOC_{max} \leq 0\)

SOCb

ESD1 SOC balance

\(E_{n,R} SOC M_{r,ES} - T_{cfg} \eta_{c,R} p_{c,ESD}[:, 1:] + T_{cfg} R_{\eta_d,R} p_{d,ESD}[:, 1:] = 0\)

SOCr

ESD1 final SOC requirement

\(SOC_{end} - SOC[:, -1] \leq 0\)

cdgb

Select DG power from pg

\(I_{DG} p_g - p_{g,DG} = 0\)

cdb

Charging decision bound

\(u_{c,ESD} + u_{d,ESD} - 1 = 0\)

zce1

zce bound 1

\(-z_{c,ESD} + p_{c,ESD} \leq 0\)

zce2

zce bound 2

\(z_{c,ESD} - p_{c,ESD} - M_{big} (1-u_{c,ESD}) \leq 0\)

zce3

zce bound 3

\(z_{c,ESD} - M_{big} u_{c,ESD} \leq 0\)

zde1

zde bound 1

\(-z_{d,ESD} + p_{d,ESD} \leq 0\)

zde2

zde bound 2

\(z_{d,ESD} - p_{d,ESD} - M_{big} (1-u_{d,ESD}) \leq 0\)

zde3

zde bound 3

\(z_{d,ESD} - M_{big} u_{d,ESD} \leq 0\)

tcdr

Minimum charging duration

\((t_{dc0} > 0) (t_{dc} > t_{dc0}) - u_{c,ESD} \leq 0\)

tddr

Minimum discharging duration

\((t_{dd0} > 0) (t_{dd} > t_{dd0}) - u_{d,ESD} \leq 0\)

SOCb0

ESD1 SOC initial balance

\(E_n SOC[:, 0] - SOC_{init} - T_{cfg} \eta_c p_{c,ESD}[:, 0] + T_{cfg} \frac{1}{\eta_d} p_{d,ESD}[:, 0] = 0\)

Vars#

Name

Symbol

Description

Unit

Source

Properties

pg

\(p_g\)

2D Gen power

p.u.

StaticGen.p

vBus

\(v_{Bus}\)

2D Bus voltage

p.u.

Bus.v

aBus

\(\theta_{bus}\)

2D Bus angle

rad

Bus.a

pru

\(p_{r,u}\)

2D RegUp power

p.u.

StaticGen

nonneg

prd

\(p_{r,d}\)

2D RegDn power

p.u.

StaticGen

nonneg

prs

\(p_{r,s}\)

spinning reserve

p.u.

StaticGen

nonneg

SOC

\(SOC\)

ESD1 State of Charge

p.u. (%)

ESD1

nonneg

pce

\(p_{c,ESD}\)

ESD1 charging power

p.u.

ESD1

nonneg

pde

\(p_{d,ESD}\)

ESD1 discharging power

p.u.

ESD1

nonneg

pgdg

\(p_{g,DG}\)

DG output power

p.u.

DG

ucd

\(u_{c,ESD}\)

ESD1 charging decision

ESD1

boolean

udd

\(u_{d,ESD}\)

ESD1 discharging decision

ESD1

boolean

zce

\(z_{c,ESD}\)

Aux var for charging, \(z_{c,ESD}=u_{c,ESD}*p_{c,ESD}\)

ESD1

nonneg

zde

\(z_{d,ESD}\)

Aux var for discharging, \(z_{d,ESD}=u_{d,ESD}*p_{d,ESD}\)

ESD1

nonneg

ExpressionCalcs#

Name

Description

Expression

Unit

Source

pi

LMP, dual of <pb>

\(\phi[pb]\)

$/p.u.

Bus

mu1

Lagrange multipliers, dual of <plflb>

\(\phi[plflb]\)

$/p.u.

Line

mu2

Lagrange multipliers, dual of <plfub>

\(\phi[plfub]\)

$/p.u.

Line

Services#

Name

Symbol

Description

Type

pd

\(p_{d}\)

effective active demand

NumOpDual

isb

\(I_{sb}\)

Index slack bus from all buses

VarSelect

ctrle

\(c_{trl, e}\)

Effective Gen controllability

NumOpDual

nctrl

\(c_{trl,n}\)

Effective Gen uncontrollability

NumOp

nctrle

\(c_{trl,n,e}\)

Effective Gen uncontrollability

NumOpDual

gs

\(S_{g}\)

Sum Gen vars vector in shape of area

ZonalSum

ds

\(S_{d}\)

Sum pd vector in shape of area

ZonalSum

pdz

\(p_{d,z}\)

zonal total load

NumOpDual

dud

\(d_{u, d}\)

zonal RegUp reserve requirement

NumOpDual

ddd

\(d_{d, d}\)

zonal RegDn reserve requirement

NumOpDual

tlv

\(1_{tl}\)

time length vector

NumOp

pds

\(p_{d,s}\)

Scaled load

LoadScale

Mr

\(M_{r}\)

Subtraction matrix for ramping

RampSub

RR30

\(R_{30,R}\)

Repeated ramp rate

NumHstack

dsrpz

\(d_{s,r, p, z}\)

zonal spinning reserve requirement in percentage

NumOpDual

dsr

\(d_{s,r,z}\)

zonal spinning reserve requirement

NumOpDual

REtaD

\(\frac{1}{\eta_d}\)

NumOp

Mb

\(M_{big}\)

10 times of max of pmax as big M

NumOp

ies

\(I_{ESD}\)

Index ESD from StaticGen

VarSelect

idg

\(I_{DG}\)

Index DG power from pg

VarSelect

Mre

\(M_{r,ES}\)

Subtraction matrix for SOC

RampSub

EnR

\(E_{n,R}\)

Repeated En as 2D matrix, (ng, ng-1)

NumHstack

EtaCR

\(\eta_{c,R}\)

Repeated Etac as 2D matrix, (ng, ng-1)

NumHstack

REtaDR

\(R_{\eta_d,R}\)

Repeated REtaD as 2D matrix, (ng, ng-1)

NumHstack

Parameters#

Name

Symbol

Description

Unit

Source

ug

\(u_{g}\)

unit commitment decisions

EDSlotGen.ug

pg0

\(p_{g, 0}\)

Gen initial active power

p.u.

StaticGen.p0

gsh

\(g_{sh}\)

shunt conductance

Shunt.g

buss

\(B_{us,s}\)

Bus slack

Slack.bus

ud

\(u_{d}\)

Load connection status

StaticLoad.u

pd0

\(p_{d,0}\)

active demand

p.u.

StaticLoad.p0

Cg

\(C_{g}\)

Gen connection matrix

MatProcessor.Cg

Cl

\(C_{l}\)

Load connection matrix

MatProcessor.Cl

CftT

\(C_{ft}^T\)

Transpose of line connection matrix

MatProcessor.CftT

Csh

\(C_{sh}\)

Shunt connection matrix

MatProcessor.Csh

Bbus

\(B_{bus}\)

Bus admittance matrix

MatProcessor.Bbus

Bf

\(B_{f}\)

Bf matrix

MatProcessor.Bf

Pbusinj

\(P_{bus}^{inj}\)

Bus power injection vector

MatProcessor.Pbusinj

Pfinj

\(P_{f}^{inj}\)

Line power injection vector

MatProcessor.Pfinj

c2

\(c_{2}\)

Gen cost coefficient 2

$/(p.u.^2)

GCost.c2

c1

\(c_{1}\)

Gen cost coefficient 1

$/(p.u.)

GCost.c1

c0

\(c_{0}\)

Gen cost coefficient 0

$

GCost.c0

ctrl

\(c_{trl}\)

Gen controllability

StaticGen.ctrl

pmax

\(p_{g, max}\)

Gen maximum active power

p.u.

StaticGen.pmax

pmin

\(p_{g, min}\)

Gen minimum active power

p.u.

StaticGen.pmin

ul

\(u_{l}\)

Line connection status

Line.u

rate_a

\(R_{ATEA}\)

long-term flow limit

p.u.

Line.rate_a

amax

\(\theta_{bus, max}\)

max line angle difference

Line.amax

amin

\(\theta_{bus, min}\)

min line angle difference

Line.amin

zg

\(z_{one,g}\)

Gen area

StaticGen.area

zd

\(z_{one,d}\)

Load area

StaticLoad.area

R10

\(R_{10}\)

10-min ramp rate

p.u./h

StaticGen.R10

cru

\(c_{r,u}\)

RegUp reserve coefficient

$/(p.u.)

SFRCost.cru

crd

\(c_{r,d}\)

RegDown reserve coefficient

$/(p.u.)

SFRCost.crd

du

\(d_{u}\)

RegUp reserve requirement in percentage

%

SFR.du

dd

\(d_{d}\)

RegDown reserve requirement in percentage

%

SFR.dd

timeslot

\(t_{s,idx}\)

Time slot for multi-period ED

EDSlot.idx

sd

\(s_{d}\)

area load scaling factor

EDSlotLoad.sd

R30

\(R_{30}\)

30-min ramp rate

p.u./h

StaticGen.R30

dsr

\(d_{sr}\)

spinning reserve requirement in percentage

%

SR.demand

csr

\(c_{sr}\)

cost for spinning reserve

$/(p.u.*h)

SRCost.csr

En

\(E_n\)

Rated energy capacity

MWh

ESD1.En

SOCmax

\(SOC_{max}\)

Maximum allowed value for SOC in limiter

ESD1.SOCmax

SOCmin

\(SOC_{min}\)

Minimum required value for SOC in limiter

ESD1.SOCmin

SOCinit

\(SOC_{init}\)

Initial SOC

ESD1.SOCinit

SOCend

\(SOC_{end}\)

Target SOC at the end of the period

ESD1.SOCend

EtaC

\(\eta_c\)

Efficiency during charging

ESD1.EtaC

EtaD

\(\eta_d\)

Efficiency during discharging

ESD1.EtaD

cesdc

\(c_{c,ESD}\)

Charging cost

$/p.u.*h

ESD1.cesdc

cesdd

\(c_{d,ESD}\)

Discharging cost

$/p.u.*h

ESD1.cesdd

genesd

\(g_{ESD}\)

gen of ESD

ESD1.gen

gendg

\(g_{DG}\)

gen of DG

DG.gen

gammapd

\(\gamma_{p,DG}\)

Ratio of DG.pge w.r.t to that of static generator

DG.gammap

tdc

\(t_{dc}\)

Minimum charging duration

h

ESD1.tdc

tdd

\(t_{dd}\)

Minimum discharging duration

h

ESD1.tdd

tdc0

\(t_{dc0}\)

Initial charging time

h

ESD1.tdc0

tdd0

\(t_{dd0}\)

Initial discharging time

h

ESD1.tdd0

Config Fields in [EDES]

Option

Symbol

Value

Info

Accepted values

t

\(T_{cfg}\)

1

time interval in hours

ED2#

DC-based multi-period economic dispatch (ED) using PTDF. Dispatch interval config.t ($T_{cfg}$) is introduced, 1 [Hour] by default. ED extends DCOPF as follows:

  • Vars pg, pru, prd are extended to 2D

  • 2D Vars rgu and rgd are introduced

  • Param ug is sourced from EDSlotGen.ug as generator commitment

Notes#

  • Formulations have been adjusted with interval config.t

  • The tie-line flow is not implemented in this model.

  • EDSlotGen.ug is used instead of StaticGen.u for generator commitment.

  • Following reserves are balanced for each "Area": RegUp reserve rbu, RegDn reserve rbd, and Spinning reserve rsr.

Objective#

Unit

Expression

$

\(min. \sum(T_{cfg}^{2} c_{2} p_g^{2})+ T_{cfg} \sum(c_{1} p_g + c_{sr} p_{r,s})+ \sum(u_{g} c_{0} 1_{tl})\)

Expressions#

Name

Description

Expression

Unit

Source

plf

2D Line flow

\(P_{TDF} (C_{g} p_g - C_{l} p_{d,s} - C_{sh} g_{sh} 1_{tl} - P_{bus}^{inj} 1_{tl})\)

p.u.

Line

pmaxe

Effective pmax

\(c_{trl,n,e} p_{g, 0} 1_{tl} + c_{trl, e} 1_{tl} p_{g, max}\)

p.u.

StaticGen

pmine

Effective pmin

\(c_{trl,n,e} p_{g, 0} 1_{tl} + c_{trl, e} 1_{tl} p_{g, min}\)

p.u.

StaticGen

Constraints#

Name

Description

Expression

pb

power balance

\(\sum(p_g, axis=0) - \sum(p_{d,s}, axis=0) = 0\)

sbus

align slack bus angle

\(I_{sb} \theta_{bus} = 0\)

pglb

pg min

\(-p_g + p_{g, min, e} \leq 0\)

pgub

pg max

\(p_g - p_{g, max, e} \leq 0\)

plflb

line flow lower bound

\(-B_{f} \theta_{bus} - P_{f}^{inj} 1_{tl} - u_{l} R_{ATEA} 1_{tl} \leq 0\)

plfub

line flow upper bound

\(B_{f} \theta_{bus} + P_{f}^{inj} 1_{tl} - u_{l} R_{ATEA} 1_{tl} \leq 0\)

alflb

line angle difference lower bound

\(-C_{ft}^T \theta_{bus} + \theta_{bus, min} 1_{tl} \leq 0\)

alfub

line angle difference upper bound

\(C_{ft}^T \theta_{bus} - \theta_{bus, max} 1_{tl} \leq 0\)

rbu

RegUp reserve balance

\(S_{g} u_{g} p_{r,u} - d_{u, d} 1_{tl} = 0\)

rbd

RegDn reserve balance

\(S_{g} u_{g} p_{r,d} - d_{d, d} 1_{tl} = 0\)

rru

RegUp reserve source

\(p_g + p_{r,u} - u_{g} p_{g, max} 1_{tl} \leq 0\)

rrd

RegDn reserve source

\(-p_g + p_{r,d} + u_{g} p_{g, min} 1_{tl} \leq 0\)

rgu

Gen ramping up

\(p_g M_{r} - T_{cfg} R_{30,R} \leq 0\)

rgd

Gen ramping down

\(-p_g M_{r} - T_{cfg} R_{30,R} \leq 0\)

prsb

spinning reserve balance

\(u_{g} p_{g, max} 1_{tl} - p_g - p_{r,s} = 0\)

rsr

spinning reserve requirement

\(-S_{g} p_{r,s} + d_{s,r,z} \leq 0\)

rgu0

Initial gen ramping up

\(u_{g}[: 0], p_g[:, 0] - p_{g, 0}[:, 0] - R_{30} \leq 0\)

rgd0

Initial gen ramping down

\(u_{g}[: 0], -p_g[:, 0] + p_{g, 0}[:, 0] - R_{30} \leq 0\)

Vars#

Name

Symbol

Description

Unit

Source

Properties

pg

\(p_g\)

2D Gen power

p.u.

StaticGen.p

vBus

\(v_{Bus}\)

2D Bus voltage

p.u.

Bus.v

aBus

\(\theta_{bus}\)

2D Bus angle

rad

Bus.a

pru

\(p_{r,u}\)

2D RegUp power

p.u.

StaticGen

nonneg

prd

\(p_{r,d}\)

2D RegDn power

p.u.

StaticGen

nonneg

prs

\(p_{r,s}\)

spinning reserve

p.u.

StaticGen

nonneg

ExpressionCalcs#

Name

Description

Expression

Unit

Source

pi

locational marginal price (LMP)

\(-\phi[pb] - P_{TDF}^T (\phi[plfub] - \phi[plflb])\)

$/p.u.

Bus

mu1

Lagrange multipliers, dual of <plflb>

\(\phi[plflb]\)

$/p.u.

Line

mu2

Lagrange multipliers, dual of <plfub>

\(\phi[plfub]\)

$/p.u.

Line

pie

Energy price

\(-\phi[pb]\)

$/p.u.

pic

Congestion price

\(-P_{TDF}^T (\phi[plfub] - \phi[plflb])\)

$/p.u.

Bus

Services#

Name

Symbol

Description

Type

pd

\(p_{d}\)

effective active demand

NumOpDual

isb

\(I_{sb}\)

Index slack bus from all buses

VarSelect

ctrle

\(c_{trl, e}\)

Effective Gen controllability

NumOpDual

nctrl

\(c_{trl,n}\)

Effective Gen uncontrollability

NumOp

nctrle

\(c_{trl,n,e}\)

Effective Gen uncontrollability

NumOpDual

gs

\(S_{g}\)

Sum Gen vars vector in shape of area

ZonalSum

ds

\(S_{d}\)

Sum pd vector in shape of area

ZonalSum

pdz

\(p_{d,z}\)

zonal total load

NumOpDual

dud

\(d_{u, d}\)

zonal RegUp reserve requirement

NumOpDual

ddd

\(d_{d, d}\)

zonal RegDn reserve requirement

NumOpDual

tlv

\(1_{tl}\)

time length vector

NumOp

pds

\(p_{d,s}\)

Scaled load

LoadScale

Mr

\(M_{r}\)

Subtraction matrix for ramping

RampSub

RR30

\(R_{30,R}\)

Repeated ramp rate

NumHstack

dsrpz

\(d_{s,r, p, z}\)

zonal spinning reserve requirement in percentage

NumOpDual

dsr

\(d_{s,r,z}\)

zonal spinning reserve requirement

NumOpDual

PTDFt

\(P_{TDF}^T\)

PTDF transpose

NumOp

Parameters#

Name

Symbol

Description

Unit

Source

ug

\(u_{g}\)

unit commitment decisions

EDSlotGen.ug

pg0

\(p_{g, 0}\)

Gen initial active power

p.u.

StaticGen.p0

gsh

\(g_{sh}\)

shunt conductance

Shunt.g

buss

\(B_{us,s}\)

Bus slack

Slack.bus

ud

\(u_{d}\)

Load connection status

StaticLoad.u

pd0

\(p_{d,0}\)

active demand

p.u.

StaticLoad.p0

Cg

\(C_{g}\)

Gen connection matrix

MatProcessor.Cg

Cl

\(C_{l}\)

Load connection matrix

MatProcessor.Cl

CftT

\(C_{ft}^T\)

Transpose of line connection matrix

MatProcessor.CftT

Csh

\(C_{sh}\)

Shunt connection matrix

MatProcessor.Csh

Bbus

\(B_{bus}\)

Bus admittance matrix

MatProcessor.Bbus

Bf

\(B_{f}\)

Bf matrix

MatProcessor.Bf

Pbusinj

\(P_{bus}^{inj}\)

Bus power injection vector

MatProcessor.Pbusinj

Pfinj

\(P_{f}^{inj}\)

Line power injection vector

MatProcessor.Pfinj

c2

\(c_{2}\)

Gen cost coefficient 2

$/(p.u.^2)

GCost.c2

c1

\(c_{1}\)

Gen cost coefficient 1

$/(p.u.)

GCost.c1

c0

\(c_{0}\)

Gen cost coefficient 0

$

GCost.c0

ctrl

\(c_{trl}\)

Gen controllability

StaticGen.ctrl

pmax

\(p_{g, max}\)

Gen maximum active power

p.u.

StaticGen.pmax

pmin

\(p_{g, min}\)

Gen minimum active power

p.u.

StaticGen.pmin

ul

\(u_{l}\)

Line connection status

Line.u

rate_a

\(R_{ATEA}\)

long-term flow limit

p.u.

Line.rate_a

amax

\(\theta_{bus, max}\)

max line angle difference

Line.amax

amin

\(\theta_{bus, min}\)

min line angle difference

Line.amin

zg

\(z_{one,g}\)

Gen area

StaticGen.area

zd

\(z_{one,d}\)

Load area

StaticLoad.area

R10

\(R_{10}\)

10-min ramp rate

p.u./h

StaticGen.R10

cru

\(c_{r,u}\)

RegUp reserve coefficient

$/(p.u.)

SFRCost.cru

crd

\(c_{r,d}\)

RegDown reserve coefficient

$/(p.u.)

SFRCost.crd

du

\(d_{u}\)

RegUp reserve requirement in percentage

%

SFR.du

dd

\(d_{d}\)

RegDown reserve requirement in percentage

%

SFR.dd

timeslot

\(t_{s,idx}\)

Time slot for multi-period ED

EDSlot.idx

sd

\(s_{d}\)

area load scaling factor

EDSlotLoad.sd

R30

\(R_{30}\)

30-min ramp rate

p.u./h

StaticGen.R30

dsr

\(d_{sr}\)

spinning reserve requirement in percentage

%

SR.demand

csr

\(c_{sr}\)

cost for spinning reserve

$/(p.u.*h)

SRCost.csr

PTDF

\(P_{TDF}\)

PTDF

MatProcessor.PTDF

Config Fields in [ED2]

Option

Symbol

Value

Info

Accepted values

t

\(T_{cfg}\)

1

time interval in hours

ED2DG#

ED with distributed generation DG using PTDF.

Note that ED2DG only includes DG output power. If ESD1 is included, ED2ES should be used instead, otherwise there is no SOC.

Objective#

Unit

Expression

$

\(min. \sum(T_{cfg}^{2} c_{2} p_g^{2})+ T_{cfg} \sum(c_{1} p_g + c_{sr} p_{r,s})+ \sum(u_{g} c_{0} 1_{tl})\)

Expressions#

Name

Description

Expression

Unit

Source

plf

2D Line flow

\(P_{TDF} (C_{g} p_g - C_{l} p_{d,s} - C_{sh} g_{sh} 1_{tl} - P_{bus}^{inj} 1_{tl})\)

p.u.

Line

pmaxe

Effective pmax

\(c_{trl,n,e} p_{g, 0} 1_{tl} + c_{trl, e} 1_{tl} p_{g, max}\)

p.u.

StaticGen

pmine

Effective pmin

\(c_{trl,n,e} p_{g, 0} 1_{tl} + c_{trl, e} 1_{tl} p_{g, min}\)

p.u.

StaticGen

Constraints#

Name

Description

Expression

pb

power balance

\(\sum(p_g, axis=0) - \sum(p_{d,s}, axis=0) = 0\)

sbus

align slack bus angle

\(I_{sb} \theta_{bus} = 0\)

pglb

pg min

\(-p_g + p_{g, min, e} \leq 0\)

pgub

pg max

\(p_g - p_{g, max, e} \leq 0\)

plflb

line flow lower bound

\(-B_{f} \theta_{bus} - P_{f}^{inj} 1_{tl} - u_{l} R_{ATEA} 1_{tl} \leq 0\)

plfub

line flow upper bound

\(B_{f} \theta_{bus} + P_{f}^{inj} 1_{tl} - u_{l} R_{ATEA} 1_{tl} \leq 0\)

alflb

line angle difference lower bound

\(-C_{ft}^T \theta_{bus} + \theta_{bus, min} 1_{tl} \leq 0\)

alfub

line angle difference upper bound

\(C_{ft}^T \theta_{bus} - \theta_{bus, max} 1_{tl} \leq 0\)

rbu

RegUp reserve balance

\(S_{g} u_{g} p_{r,u} - d_{u, d} 1_{tl} = 0\)

rbd

RegDn reserve balance

\(S_{g} u_{g} p_{r,d} - d_{d, d} 1_{tl} = 0\)

rru

RegUp reserve source

\(p_g + p_{r,u} - u_{g} p_{g, max} 1_{tl} \leq 0\)

rrd

RegDn reserve source

\(-p_g + p_{r,d} + u_{g} p_{g, min} 1_{tl} \leq 0\)

rgu

Gen ramping up

\(p_g M_{r} - T_{cfg} R_{30,R} \leq 0\)

rgd

Gen ramping down

\(-p_g M_{r} - T_{cfg} R_{30,R} \leq 0\)

prsb

spinning reserve balance

\(u_{g} p_{g, max} 1_{tl} - p_g - p_{r,s} = 0\)

rsr

spinning reserve requirement

\(-S_{g} p_{r,s} + d_{s,r,z} \leq 0\)

rgu0

Initial gen ramping up

\(u_{g}[: 0], p_g[:, 0] - p_{g, 0}[:, 0] - R_{30} \leq 0\)

rgd0

Initial gen ramping down

\(u_{g}[: 0], -p_g[:, 0] + p_{g, 0}[:, 0] - R_{30} \leq 0\)

cdgb

Select DG power from pg

\(I_{DG} p_g - p_{g,DG} = 0\)

Vars#

Name

Symbol

Description

Unit

Source

Properties

pg

\(p_g\)

2D Gen power

p.u.

StaticGen.p

vBus

\(v_{Bus}\)

2D Bus voltage

p.u.

Bus.v

aBus

\(\theta_{bus}\)

2D Bus angle

rad

Bus.a

pru

\(p_{r,u}\)

2D RegUp power

p.u.

StaticGen

nonneg

prd

\(p_{r,d}\)

2D RegDn power

p.u.

StaticGen

nonneg

prs

\(p_{r,s}\)

spinning reserve

p.u.

StaticGen

nonneg

pgdg

\(p_{g,DG}\)

DG output power

p.u.

DG

ExpressionCalcs#

Name

Description

Expression

Unit

Source

pi

locational marginal price (LMP)

\(-\phi[pb] - P_{TDF}^T (\phi[plfub] - \phi[plflb])\)

$/p.u.

Bus

mu1

Lagrange multipliers, dual of <plflb>

\(\phi[plflb]\)

$/p.u.

Line

mu2

Lagrange multipliers, dual of <plfub>

\(\phi[plfub]\)

$/p.u.

Line

pie

Energy price

\(-\phi[pb]\)

$/p.u.

pic

Congestion price

\(-P_{TDF}^T (\phi[plfub] - \phi[plflb])\)

$/p.u.

Bus

Services#

Name

Symbol

Description

Type

pd

\(p_{d}\)

effective active demand

NumOpDual

isb

\(I_{sb}\)

Index slack bus from all buses

VarSelect

ctrle

\(c_{trl, e}\)

Effective Gen controllability

NumOpDual

nctrl

\(c_{trl,n}\)

Effective Gen uncontrollability

NumOp

nctrle

\(c_{trl,n,e}\)

Effective Gen uncontrollability

NumOpDual

gs

\(S_{g}\)

Sum Gen vars vector in shape of area

ZonalSum

ds

\(S_{d}\)

Sum pd vector in shape of area

ZonalSum

pdz

\(p_{d,z}\)

zonal total load

NumOpDual

dud

\(d_{u, d}\)

zonal RegUp reserve requirement

NumOpDual

ddd

\(d_{d, d}\)

zonal RegDn reserve requirement

NumOpDual

tlv

\(1_{tl}\)

time length vector

NumOp

pds

\(p_{d,s}\)

Scaled load

LoadScale

Mr

\(M_{r}\)

Subtraction matrix for ramping

RampSub

RR30

\(R_{30,R}\)

Repeated ramp rate

NumHstack

dsrpz

\(d_{s,r, p, z}\)

zonal spinning reserve requirement in percentage

NumOpDual

dsr

\(d_{s,r,z}\)

zonal spinning reserve requirement

NumOpDual

PTDFt

\(P_{TDF}^T\)

PTDF transpose

NumOp

idg

\(I_{DG}\)

Index DG power from pg

VarSelect

Parameters#

Name

Symbol

Description

Unit

Source

ug

\(u_{g}\)

unit commitment decisions

EDSlotGen.ug

pg0

\(p_{g, 0}\)

Gen initial active power

p.u.

StaticGen.p0

gsh

\(g_{sh}\)

shunt conductance

Shunt.g

buss

\(B_{us,s}\)

Bus slack

Slack.bus

ud

\(u_{d}\)

Load connection status

StaticLoad.u

pd0

\(p_{d,0}\)

active demand

p.u.

StaticLoad.p0

Cg

\(C_{g}\)

Gen connection matrix

MatProcessor.Cg

Cl

\(C_{l}\)

Load connection matrix

MatProcessor.Cl

CftT

\(C_{ft}^T\)

Transpose of line connection matrix

MatProcessor.CftT

Csh

\(C_{sh}\)

Shunt connection matrix

MatProcessor.Csh

Bbus

\(B_{bus}\)

Bus admittance matrix

MatProcessor.Bbus

Bf

\(B_{f}\)

Bf matrix

MatProcessor.Bf

Pbusinj

\(P_{bus}^{inj}\)

Bus power injection vector

MatProcessor.Pbusinj

Pfinj

\(P_{f}^{inj}\)

Line power injection vector

MatProcessor.Pfinj

c2

\(c_{2}\)

Gen cost coefficient 2

$/(p.u.^2)

GCost.c2

c1

\(c_{1}\)

Gen cost coefficient 1

$/(p.u.)

GCost.c1

c0

\(c_{0}\)

Gen cost coefficient 0

$

GCost.c0

ctrl

\(c_{trl}\)

Gen controllability

StaticGen.ctrl

pmax

\(p_{g, max}\)

Gen maximum active power

p.u.

StaticGen.pmax

pmin

\(p_{g, min}\)

Gen minimum active power

p.u.

StaticGen.pmin

ul

\(u_{l}\)

Line connection status

Line.u

rate_a

\(R_{ATEA}\)

long-term flow limit

p.u.

Line.rate_a

amax

\(\theta_{bus, max}\)

max line angle difference

Line.amax

amin

\(\theta_{bus, min}\)

min line angle difference

Line.amin

zg

\(z_{one,g}\)

Gen area

StaticGen.area

zd

\(z_{one,d}\)

Load area

StaticLoad.area

R10

\(R_{10}\)

10-min ramp rate

p.u./h

StaticGen.R10

cru

\(c_{r,u}\)

RegUp reserve coefficient

$/(p.u.)

SFRCost.cru

crd

\(c_{r,d}\)

RegDown reserve coefficient

$/(p.u.)

SFRCost.crd

du

\(d_{u}\)

RegUp reserve requirement in percentage

%

SFR.du

dd

\(d_{d}\)

RegDown reserve requirement in percentage

%

SFR.dd

timeslot

\(t_{s,idx}\)

Time slot for multi-period ED

EDSlot.idx

sd

\(s_{d}\)

area load scaling factor

EDSlotLoad.sd

R30

\(R_{30}\)

30-min ramp rate

p.u./h

StaticGen.R30

dsr

\(d_{sr}\)

spinning reserve requirement in percentage

%

SR.demand

csr

\(c_{sr}\)

cost for spinning reserve

$/(p.u.*h)

SRCost.csr

PTDF

\(P_{TDF}\)

PTDF

MatProcessor.PTDF

gendg

\(g_{DG}\)

gen of DG

DG.gen

gammapd

\(\gamma_{p,DG}\)

Ratio of DG.pge w.r.t to that of static generator

DG.gammap

Config Fields in [ED2DG]

Option

Symbol

Value

Info

Accepted values

t

\(T_{cfg}\)

1

time interval in hours

ED2ES#

ED with energy storage ESD1 using PTDF.

Objective#

Unit

Expression

$

\(min. \sum(T_{cfg}^{2} c_{2} p_g^{2})+ T_{cfg} \sum(c_{1} p_g + c_{sr} p_{r,s})+ \sum(u_{g} c_{0} 1_{tl})+ T_{cfg} \sum(- c_{c,ESD} p_{c,ESD} + c_{d,ESD} p_{d,ESD})\)

Expressions#

Name

Description

Expression

Unit

Source

plf

2D Line flow

\(P_{TDF} (C_{g} p_g - C_{l} p_{d,s} - C_{sh} g_{sh} 1_{tl} - P_{bus}^{inj} 1_{tl})\)

p.u.

Line

pmaxe

Effective pmax

\(c_{trl,n,e} p_{g, 0} 1_{tl} + c_{trl, e} 1_{tl} p_{g, max}\)

p.u.

StaticGen

pmine

Effective pmin

\(c_{trl,n,e} p_{g, 0} 1_{tl} + c_{trl, e} 1_{tl} p_{g, min}\)

p.u.

StaticGen

Constraints#

Name

Description

Expression

pb

power balance

\(\sum(p_g, axis=0) - \sum(p_{d,s}, axis=0) = 0\)

sbus

align slack bus angle

\(I_{sb} \theta_{bus} = 0\)

pglb

pg min

\(-p_g + p_{g, min, e} \leq 0\)

pgub

pg max

\(p_g - p_{g, max, e} \leq 0\)

plflb

line flow lower bound

\(-B_{f} \theta_{bus} - P_{f}^{inj} 1_{tl} - u_{l} R_{ATEA} 1_{tl} \leq 0\)

plfub

line flow upper bound

\(B_{f} \theta_{bus} + P_{f}^{inj} 1_{tl} - u_{l} R_{ATEA} 1_{tl} \leq 0\)

alflb

line angle difference lower bound

\(-C_{ft}^T \theta_{bus} + \theta_{bus, min} 1_{tl} \leq 0\)

alfub

line angle difference upper bound

\(C_{ft}^T \theta_{bus} - \theta_{bus, max} 1_{tl} \leq 0\)

rbu

RegUp reserve balance

\(S_{g} u_{g} p_{r,u} - d_{u, d} 1_{tl} = 0\)

rbd

RegDn reserve balance

\(S_{g} u_{g} p_{r,d} - d_{d, d} 1_{tl} = 0\)

rru

RegUp reserve source

\(p_g + p_{r,u} - u_{g} p_{g, max} 1_{tl} \leq 0\)

rrd

RegDn reserve source

\(-p_g + p_{r,d} + u_{g} p_{g, min} 1_{tl} \leq 0\)

rgu

Gen ramping up

\(p_g M_{r} - T_{cfg} R_{30,R} \leq 0\)

rgd

Gen ramping down

\(-p_g M_{r} - T_{cfg} R_{30,R} \leq 0\)

prsb

spinning reserve balance

\(u_{g} p_{g, max} 1_{tl} - p_g - p_{r,s} = 0\)

rsr

spinning reserve requirement

\(-S_{g} p_{r,s} + d_{s,r,z} \leq 0\)

rgu0

Initial gen ramping up

\(u_{g}[: 0], p_g[:, 0] - p_{g, 0}[:, 0] - R_{30} \leq 0\)

rgd0

Initial gen ramping down

\(u_{g}[: 0], -p_g[:, 0] + p_{g, 0}[:, 0] - R_{30} \leq 0\)

cesd

Select pce and pde from pg

\(I_{ESD} p_g + p_{c,ESD} - p_{d,ESD} = 0\)

SOClb

SOC lower bound

\(-SOC + SOC_{min} \leq 0\)

SOCub

SOC upper bound

\(SOC - SOC_{max} \leq 0\)

SOCb

ESD1 SOC balance

\(E_{n,R} SOC M_{r,ES} - T_{cfg} \eta_{c,R} p_{c,ESD}[:, 1:] + T_{cfg} R_{\eta_d,R} p_{d,ESD}[:, 1:] = 0\)

SOCr

ESD1 final SOC requirement

\(SOC_{end} - SOC[:, -1] \leq 0\)

cdgb

Select DG power from pg

\(I_{DG} p_g - p_{g,DG} = 0\)

cdb

Charging decision bound

\(u_{c,ESD} + u_{d,ESD} - 1 = 0\)

zce1

zce bound 1

\(-z_{c,ESD} + p_{c,ESD} \leq 0\)

zce2

zce bound 2

\(z_{c,ESD} - p_{c,ESD} - M_{big} (1-u_{c,ESD}) \leq 0\)

zce3

zce bound 3

\(z_{c,ESD} - M_{big} u_{c,ESD} \leq 0\)

zde1

zde bound 1

\(-z_{d,ESD} + p_{d,ESD} \leq 0\)

zde2

zde bound 2

\(z_{d,ESD} - p_{d,ESD} - M_{big} (1-u_{d,ESD}) \leq 0\)

zde3

zde bound 3

\(z_{d,ESD} - M_{big} u_{d,ESD} \leq 0\)

tcdr

Minimum charging duration

\((t_{dc0} > 0) (t_{dc} > t_{dc0}) - u_{c,ESD} \leq 0\)

tddr

Minimum discharging duration

\((t_{dd0} > 0) (t_{dd} > t_{dd0}) - u_{d,ESD} \leq 0\)

SOCb0

ESD1 SOC initial balance

\(E_n SOC[:, 0] - SOC_{init} - T_{cfg} \eta_c p_{c,ESD}[:, 0] + T_{cfg} \frac{1}{\eta_d} p_{d,ESD}[:, 0] = 0\)

Vars#

Name

Symbol

Description

Unit

Source

Properties

pg

\(p_g\)

2D Gen power

p.u.

StaticGen.p

vBus

\(v_{Bus}\)

2D Bus voltage

p.u.

Bus.v

aBus

\(\theta_{bus}\)

2D Bus angle

rad

Bus.a

pru

\(p_{r,u}\)

2D RegUp power

p.u.

StaticGen

nonneg

prd

\(p_{r,d}\)

2D RegDn power

p.u.

StaticGen

nonneg

prs

\(p_{r,s}\)

spinning reserve

p.u.

StaticGen

nonneg

SOC

\(SOC\)

ESD1 State of Charge

p.u. (%)

ESD1

nonneg

pce

\(p_{c,ESD}\)

ESD1 charging power

p.u.

ESD1

nonneg

pde

\(p_{d,ESD}\)

ESD1 discharging power

p.u.

ESD1

nonneg

pgdg

\(p_{g,DG}\)

DG output power

p.u.

DG

ucd

\(u_{c,ESD}\)

ESD1 charging decision

ESD1

boolean

udd

\(u_{d,ESD}\)

ESD1 discharging decision

ESD1

boolean

zce

\(z_{c,ESD}\)

Aux var for charging, \(z_{c,ESD}=u_{c,ESD}*p_{c,ESD}\)

ESD1

nonneg

zde

\(z_{d,ESD}\)

Aux var for discharging, \(z_{d,ESD}=u_{d,ESD}*p_{d,ESD}\)

ESD1

nonneg

ExpressionCalcs#

Name

Description

Expression

Unit

Source

pi

locational marginal price (LMP)

\(-\phi[pb] - P_{TDF}^T (\phi[plfub] - \phi[plflb])\)

$/p.u.

Bus

mu1

Lagrange multipliers, dual of <plflb>

\(\phi[plflb]\)

$/p.u.

Line

mu2

Lagrange multipliers, dual of <plfub>

\(\phi[plfub]\)

$/p.u.

Line

pie

Energy price

\(-\phi[pb]\)

$/p.u.

pic

Congestion price

\(-P_{TDF}^T (\phi[plfub] - \phi[plflb])\)

$/p.u.

Bus

Services#

Name

Symbol

Description

Type

pd

\(p_{d}\)

effective active demand

NumOpDual

isb

\(I_{sb}\)

Index slack bus from all buses

VarSelect

ctrle

\(c_{trl, e}\)

Effective Gen controllability

NumOpDual

nctrl

\(c_{trl,n}\)

Effective Gen uncontrollability

NumOp

nctrle

\(c_{trl,n,e}\)

Effective Gen uncontrollability

NumOpDual

gs

\(S_{g}\)

Sum Gen vars vector in shape of area

ZonalSum

ds

\(S_{d}\)

Sum pd vector in shape of area

ZonalSum

pdz

\(p_{d,z}\)

zonal total load

NumOpDual

dud

\(d_{u, d}\)

zonal RegUp reserve requirement

NumOpDual

ddd

\(d_{d, d}\)

zonal RegDn reserve requirement

NumOpDual

tlv

\(1_{tl}\)

time length vector

NumOp

pds

\(p_{d,s}\)

Scaled load

LoadScale

Mr

\(M_{r}\)

Subtraction matrix for ramping

RampSub

RR30

\(R_{30,R}\)

Repeated ramp rate

NumHstack

dsrpz

\(d_{s,r, p, z}\)

zonal spinning reserve requirement in percentage

NumOpDual

dsr

\(d_{s,r,z}\)

zonal spinning reserve requirement

NumOpDual

PTDFt

\(P_{TDF}^T\)

PTDF transpose

NumOp

REtaD

\(\frac{1}{\eta_d}\)

NumOp

Mb

\(M_{big}\)

10 times of max of pmax as big M

NumOp

ies

\(I_{ESD}\)

Index ESD from StaticGen

VarSelect

idg

\(I_{DG}\)

Index DG power from pg

VarSelect

Mre

\(M_{r,ES}\)

Subtraction matrix for SOC

RampSub

EnR

\(E_{n,R}\)

Repeated En as 2D matrix, (ng, ng-1)

NumHstack

EtaCR

\(\eta_{c,R}\)

Repeated Etac as 2D matrix, (ng, ng-1)

NumHstack

REtaDR

\(R_{\eta_d,R}\)

Repeated REtaD as 2D matrix, (ng, ng-1)

NumHstack

Parameters#

Name

Symbol

Description

Unit

Source

ug

\(u_{g}\)

unit commitment decisions

EDSlotGen.ug

pg0

\(p_{g, 0}\)

Gen initial active power

p.u.

StaticGen.p0

gsh

\(g_{sh}\)

shunt conductance

Shunt.g

buss

\(B_{us,s}\)

Bus slack

Slack.bus

ud

\(u_{d}\)

Load connection status

StaticLoad.u

pd0

\(p_{d,0}\)

active demand

p.u.

StaticLoad.p0

Cg

\(C_{g}\)

Gen connection matrix

MatProcessor.Cg

Cl

\(C_{l}\)

Load connection matrix

MatProcessor.Cl

CftT

\(C_{ft}^T\)

Transpose of line connection matrix

MatProcessor.CftT

Csh

\(C_{sh}\)

Shunt connection matrix

MatProcessor.Csh

Bbus

\(B_{bus}\)

Bus admittance matrix

MatProcessor.Bbus

Bf

\(B_{f}\)

Bf matrix

MatProcessor.Bf

Pbusinj

\(P_{bus}^{inj}\)

Bus power injection vector

MatProcessor.Pbusinj

Pfinj

\(P_{f}^{inj}\)

Line power injection vector

MatProcessor.Pfinj

c2

\(c_{2}\)

Gen cost coefficient 2

$/(p.u.^2)

GCost.c2

c1

\(c_{1}\)

Gen cost coefficient 1

$/(p.u.)

GCost.c1

c0

\(c_{0}\)

Gen cost coefficient 0

$

GCost.c0

ctrl

\(c_{trl}\)

Gen controllability

StaticGen.ctrl

pmax

\(p_{g, max}\)

Gen maximum active power

p.u.

StaticGen.pmax

pmin

\(p_{g, min}\)

Gen minimum active power

p.u.

StaticGen.pmin

ul

\(u_{l}\)

Line connection status

Line.u

rate_a

\(R_{ATEA}\)

long-term flow limit

p.u.

Line.rate_a

amax

\(\theta_{bus, max}\)

max line angle difference

Line.amax

amin

\(\theta_{bus, min}\)

min line angle difference

Line.amin

zg

\(z_{one,g}\)

Gen area

StaticGen.area

zd

\(z_{one,d}\)

Load area

StaticLoad.area

R10

\(R_{10}\)

10-min ramp rate

p.u./h

StaticGen.R10

cru

\(c_{r,u}\)

RegUp reserve coefficient

$/(p.u.)

SFRCost.cru

crd

\(c_{r,d}\)

RegDown reserve coefficient

$/(p.u.)

SFRCost.crd

du

\(d_{u}\)

RegUp reserve requirement in percentage

%

SFR.du

dd

\(d_{d}\)

RegDown reserve requirement in percentage

%

SFR.dd

timeslot

\(t_{s,idx}\)

Time slot for multi-period ED

EDSlot.idx

sd

\(s_{d}\)

area load scaling factor

EDSlotLoad.sd

R30

\(R_{30}\)

30-min ramp rate

p.u./h

StaticGen.R30

dsr

\(d_{sr}\)

spinning reserve requirement in percentage

%

SR.demand

csr

\(c_{sr}\)

cost for spinning reserve

$/(p.u.*h)

SRCost.csr

PTDF

\(P_{TDF}\)

PTDF

MatProcessor.PTDF

En

\(E_n\)

Rated energy capacity

MWh

ESD1.En

SOCmax

\(SOC_{max}\)

Maximum allowed value for SOC in limiter

ESD1.SOCmax

SOCmin

\(SOC_{min}\)

Minimum required value for SOC in limiter

ESD1.SOCmin

SOCinit

\(SOC_{init}\)

Initial SOC

ESD1.SOCinit

SOCend

\(SOC_{end}\)

Target SOC at the end of the period

ESD1.SOCend

EtaC

\(\eta_c\)

Efficiency during charging

ESD1.EtaC

EtaD

\(\eta_d\)

Efficiency during discharging

ESD1.EtaD

cesdc

\(c_{c,ESD}\)

Charging cost

$/p.u.*h

ESD1.cesdc

cesdd

\(c_{d,ESD}\)

Discharging cost

$/p.u.*h

ESD1.cesdd

genesd

\(g_{ESD}\)

gen of ESD

ESD1.gen

gendg

\(g_{DG}\)

gen of DG

DG.gen

gammapd

\(\gamma_{p,DG}\)

Ratio of DG.pge w.r.t to that of static generator

DG.gammap

tdc

\(t_{dc}\)

Minimum charging duration

h

ESD1.tdc

tdd

\(t_{dd}\)

Minimum discharging duration

h

ESD1.tdd

tdc0

\(t_{dc0}\)

Initial charging time

h

ESD1.tdc0

tdd0

\(t_{dd0}\)

Initial discharging time

h

ESD1.tdd0

Config Fields in [ED2ES]

Option

Symbol

Value

Info

Accepted values

t

\(T_{cfg}\)

1

time interval in hours

DCOPF1#

DC optimal power flow using PYPOWER.

This routine provides a wrapper for running DC optimal power flow analysis using the PYPOWER. It leverages PYPOWER's internal DC optimal power flow solver and maps results back to the AMS system.

In PYPOWER, the c0 term (the constant coefficient in the generator cost function) is always included in the objective, regardless of the generator's commitment status. See pypower/opf_costfcn.py for implementation details.

Notes#

  • This class does not implement the AMS-style DC optimal power flow formulation.

  • For detailed mathematical formulations and algorithmic details, refer to the MATPOWER User's Manual, section on Optimal Power Flow.

  • Algorithms 400, 500, 600, and 700 are not fully supported yet.

Added in version 1.0.10.

Objective#

Unit

Expression

$

\(min. \sum(c_{2} p_{g}^{2}) + \sum(c_{1} p_{g}) + \sum(u_{g} c_{0})\)

Vars#

Name

Symbol

Description

Unit

Source

Properties

aBus

\(a_{Bus}\)

bus voltage angle

rad

Bus.a

vBus

\(v_{Bus}\)

Bus voltage magnitude

p.u.

Bus.v

pg

\(p_{g}\)

Gen active power

p.u.

StaticGen.p

qg

\(q_{g}\)

Gen reactive power

p.u.

StaticGen.q

plf

\(p_{lf}\)

Line flow

p.u.

Line

pi

\(pi\)

Lagrange multiplier on real power mismatch

$/p.u.

Bus

piq

\(piq\)

Lagrange multiplier on reactive power mismatch

$/p.u.

Bus

mu1

\(mu1\)

Kuhn-Tucker multiplier on MVA limit at bus1

$/p.u.

Line

mu2

\(mu2\)

Kuhn-Tucker multiplier on MVA limit at bus2

$/p.u.

Line

ExpressionCalcs#

Name

Description

Expression

Unit

Source

None

Total cost

\(\sum(c_{2} p_{g}^{2})+ \sum(c_{1} p_{g})+ \sum(u_{g} c_{0})\)

$

Parameters#

Name

Symbol

Description

Unit

Source

ug

\(u_{g}\)

Gen connection status

StaticGen.u

c2

\(c_{2}\)

Gen cost coefficient 2

$/(p.u.^2)

GCost.c2

c1

\(c_{1}\)

Gen cost coefficient 1

$/(p.u.)

GCost.c1

c0

\(c_{0}\)

Gen cost coefficient 0

$

GCost.c0

pd

\(p_{d}\)

active demand

p.u.

StaticLoad.p0

qd

\(q_{d}\)

reactive demand

p.u.

StaticLoad.q0

Config Fields in [DCOPF1]

Option

Symbol

Value

Info

Accepted values

verbose

\(v_{erbose}\)

1

0: no progress info, 1: little, 2: lots, 3: all

(0, 1, 2, 3)

out_all

\(o_{ut\_all}\)

0

-1: individual flags control what prints, 0: none, 1: all

(-1, 0, 1)

out_sys_sum

\(o_{ut\_sys\_sum}\)

1

print system summary

(0, 1)

out_area_sum

\(o_{ut\_area\_sum}\)

0

print area summaries

(0, 1)

out_bus

\(o_{ut\_bus}\)

1

print bus detail

(0, 1)

out_branch

\(o_{ut\_branch}\)

1

print branch detail

(0, 1)

out_gen

\(o_{ut\_gen}\)

0

print generator detail (OUT_BUS also includes gen info)

(0, 1)

out_all_lim

\(o_{ut\_all\_lim}\)

-1

-1: individual flags, 0: none, 1: binding, 2: all

(-1, 0, 1, 2)

out_v_lim

\(o_{ut\_v\_lim}\)

1

0: don't print, 1: binding constraints only, 2: all constraints

(0, 1, 2)

out_line_lim

\(o_{ut\_line\_lim}\)

1

0: don't print, 1: binding constraints only, 2: all constraints

(0, 1, 2)

out_pg_lim

\(o_{ut\_pg\_lim}\)

1

0: don't print, 1: binding constraints only, 2: all constraints

(0, 1, 2)

out_qg_lim

\(o_{ut\_qg\_lim}\)

1

0: don't print, 1: binding constraints only, 2: all constraints

(0, 1, 2)

opf_alg_dc

\(o_{pf\_alg\_dc}\)

200

0: choose default solver based on availability, 200: PIPS, 250: PIPS-sc, 400: IPOPT, 500: CPLEX, 600: MOSEK, 700: GUROBI

(0, 200, 250, 400, 500, 600, 700)

opf_violation

\(o_{pf\_violation}\)

0.000

constraint violation tolerance

>=0

opf_flow_lim

\(o_{pf\_flow\_lim}\)

0

qty to limit for branch flow constraints: 0 - apparent power flow (limit in MVA), 1 - active power flow (limit in MW), 2 - current magnitude (limit in MVA at 1 p.u. voltage)

(0, 1, 2)

opf_ignore_ang_lim

\(o_{pf\_ignore\_ang\_lim}\)

0

ignore angle difference limits for branches even if specified

(0, 1)

grb_method

\(o_{grb\_method}\)

1

0 - primal simplex, 1 - dual simplex, 2 - barrier, 3 - concurrent (LP only), 4 - deterministic concurrent (LP only)

(0, 1, 2, 3, 4)

grb_timelimit

\(o_{grb\_timelimit}\)

inf

maximum time allowed for solver (TimeLimit)

(0, inf)

grb_threads

\(o_{grb\_threads}\)

0

(auto) maximum number of threads to use (Threads)

(0, 1)

grb_opt

\(o_{grb\_opt}\)

0

See gurobi_options() for details

(0, 1)

pdipm_feastol

\(o_{pdipm\_feastol}\)

0

feasibility (equality) tolerance for Primal-Dual Interior Points Methods, set to value of OPF_VIOLATION by default

>=0

pdipm_gradtol

\(o_{pdipm\_gradtol}\)

0.000

gradient tolerance for Primal-Dual Interior Points Methods

>=0

pdipm_comptol

\(o_{pdipm\_comptol}\)

0.000

complementary condition (inequality) tolerance for Primal-Dual Interior Points Methods

>=0

pdipm_costtol

\(o_{pdipm\_costtol}\)

0.000

optimality tolerance for Primal-Dual Interior Points Methods

>=0

pdipm_max_it

\(o_{pdipm\_max\_it}\)

150

maximum iterations for Primal-Dual Interior Points Methods

>=0

scpdipm_red_it

\(o_{scpdipm\_red\_it}\)

20

maximum reductions per iteration for Step-Control Primal-Dual Interior Points Methods

>=0