DCUC#
Type for DC-based unit commitment.
Available routines: UC, UCDG, UCES
UC#
DC-based unit commitment (UC): The bilinear term in the formulation is linearized with big-M method.
Non-negative var pdu is introduced as unserved load with its penalty cdp.
Constraints include power balance, ramping, spinning reserve, non-spinning reserve, minimum ON/OFF duration. The cost inludes generation cost, startup cost, shutdown cost, spinning reserve cost, non-spinning reserve cost, and unserved load penalty.
Method _initial_guess
is used to make initial guess for commitment decision if all
generators are online at initial. It is a simple heuristic method, which may not be optimal.
Notes#
Formulations has been adjusted with interval
config.t
The tie-line flow has not been implemented in formulations.
References#
1. Huang, Y., Pardalos, P. M., & Zheng, Q. P. (2017). Electrical power unit commitment: deterministic and two-stage stochastic programming models and algorithms. Springer.
2. D. A. Tejada-Arango, S. Lumbreras, P. Sánchez-Martín and A. Ramos, "Which Unit-Commitment Formulation is Best? A Comparison Framework," in IEEE Transactions on Power Systems, vol. 35, no. 4, pp. 2926-2936, July 2020, doi: 10.1109/TPWRS.2019.2962024.
Objective#
Unit |
Expression |
---|---|
$ |
\(min. T_{cfg}^{2} \sum(c_{2} z_{u_{g}}^{2} + T_{cfg} c_{1} z_{u_{g}})+ \sum(u_{g} c_{0} 1_{tl}) + T_{cfg} \sum(c_{su} v_{g,d} + c_{sd} w_{g,d} + c_{sr} p_{r,s} + c_{nsr} p_{r, ns} + c_{d,p} p_{d,u})\) |
Constraints#
Name |
Description |
Expression |
---|---|---|
pglb |
pg min |
\(-p_g + c_{trl,n} p_{g, 0} u_{g,d}+ c_{trl} p_{g, min} u_{g,d} \leq 0\) |
pgub |
pg max |
\(p_g - c_{trl,n} p_{g, 0} u_{g,d}- c_{trl} p_{g, max} u_{g,d} \leq 0\) |
sbus |
align slack bus angle |
\(c_{sb} \theta_{bus} = 0\) |
pb |
power balance |
\(B_{bus} \theta_{bus} + P_{bus}^{inj} 1_{tl} + C_{l} (p_{d,s}-p_{d,u}) + C_{sh} g_{sh} 1_{tl} - C_{g} p_g = 0\) |
plflb |
line flow lower bound |
\(-B_{f} \theta_{bus} - P_{f}^{inj} - R_{ATEA} 1_{tl} \leq 0\) |
plfub |
line flow upper bound |
\(B_{f} \theta_{bus} + P_{f}^{inj} - R_{ATEA} 1_{tl} \leq 0\) |
alflb |
line angle difference lower bound |
\(-C_{ft}^T \theta_{bus} - \theta_{bus, max} 1_{tl} \leq 0\) |
alfub |
line angle difference upper bound |
\(C_{ft}^T \theta_{bus} - \theta_{bus, max} 1_{tl} \leq 0\) |
prsb |
spinning reserve balance |
\(u_{g,d} p_{g, max} 1_{tl} - z_{u_{g}} - p_{r,s} = 0\) |
rsr |
spinning reserve requirement |
\(-S_{g} p_{r,s} + d_{s,r,z} \leq 0\) |
prnsb |
non-spinning reserve balance |
\(1-u_{g,d} p_{g, max} 1_{tl} - p_{r, ns} = 0\) |
rnsr |
non-spinning reserve requirement |
\(-S_{g} p_{r, ns} + d_{nsr} \leq 0\) |
actv |
startup action |
\(u_{g,d} M_{r} - v_{g,d}[:, 1:] = 0\) |
actv0 |
initial startup action |
\(u_{g,d}[:, 0] - u_{g}[:, 0] - v_{g,d}[:, 0] = 0\) |
actw |
shutdown action |
\(-u_{g,d} M_{r} - w_{g,d}[:, 1:] = 0\) |
actw0 |
initial shutdown action |
\(-u_{g,d}[:, 0] + u_{g}[:, 0] - w_{g,d}[:, 0] = 0\) |
zuglb |
zug lower bound |
\(- z_{u_{g}} + p_g \leq 0\) |
zugub |
zug upper bound |
\(z_{u_{g}} - p_g - M_{zug} (1 - u_{g,d}) \leq 0\) |
zugub2 |
zug upper bound |
\(z_{u_{g}} - M_{zug} u_{g,d} \leq 0\) |
don |
minimum online duration |
\(T_{on} v_{g,d} - u_{g,d} \leq 0\) |
doff |
minimum offline duration |
\(T_{off} w_{g,d} - (1 - u_{g,d}) \leq 0\) |
pdumax |
unserved demand upper bound |
\(p_{d,u} - p_{d,s}^{+} c_{trl,d} 1_{tl} \leq 0\) |
Expressions#
Name |
Variable |
Description |
Expression |
---|---|---|---|
plfc |
plf |
plf calculation |
\(B_{f} \theta_{bus} + P_{f}^{inj}\) |
pic |
pi |
dual of Constraint pb |
\(\phi[pb]\) |
Vars#
Name |
Symbol |
Description |
Unit |
Source |
Properties |
---|---|---|---|---|---|
pg |
\(p_g\) |
2D Gen power |
p.u. |
StaticGen.p |
|
aBus |
\(\theta_{bus}\) |
2D Bus angle |
rad |
Bus.a |
|
pi |
\(\pi\) |
nodal price |
$/p.u. |
||
plf |
\(p_{lf}\) |
2D Line flow |
p.u. |
||
prs |
\(p_{r,s}\) |
2D Spinning reserve |
p.u. |
nonneg |
|
prns |
\(p_{r, ns}\) |
2D Non-spinning reserve |
nonneg |
||
ugd |
\(u_{g,d}\) |
commitment decision |
StaticGen.u |
boolean |
|
vgd |
\(v_{g,d}\) |
startup action |
StaticGen.u |
boolean |
|
wgd |
\(w_{g,d}\) |
shutdown action |
StaticGen.u |
boolean |
|
zug |
\(z_{ug}\) |
Aux var, \(z_{ug} = u_{g,d} * p_g\) |
pos |
||
pdu |
\(p_{d,u}\) |
unserved demand |
p.u. |
nonneg |
Services#
Name |
Symbol |
Description |
Type |
---|---|---|---|
ctrle |
\(c_{trl, e}\) |
Reshaped controllability |
NumOpDual |
nctrl |
\(c_{trl,n}\) |
Effective Gen uncontrollability |
NumOp |
nctrle |
\(c_{trl,n,e}\) |
Reshaped non-controllability |
NumOpDual |
csb |
\(c_{sb}\) |
select slack bus |
VarSelect |
gs |
\(S_{g}\) |
Sum Gen vars vector in shape of zone |
ZonalSum |
ds |
\(S_{d}\) |
Sum pd vector in shape of zone |
ZonalSum |
pdz |
\(p_{d,z}\) |
zonal total load |
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 |
dnsrpz |
\(d_{nsr, p, z}\) |
zonal non-spinning reserve requirement in percentage |
NumOpDual |
dnsr |
\(d_{nsr}\) |
zonal non-spinning reserve requirement |
NumOpDual |
Mzug |
\(M_{zug}\) |
10 times of max of pmax as big M for zug |
NumOp |
Con |
\(T_{on}\) |
minimum ON coefficient |
MinDur |
Coff |
\(T_{off}\) |
minimum OFF coefficient |
MinDur |
pdsp |
\(p_{d,s}^{+}\) |
positive demand |
NumOp |
Parameters#
Name |
Symbol |
Description |
Unit |
Source |
---|---|---|---|---|
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 |
ug |
\(u_{g}\) |
Gen connection status |
StaticGen.u |
|
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 |
p0 |
\(p_{g, 0}\) |
Gen initial active power |
p.u. |
StaticGen.pg0 |
buss |
\(B_{us,s}\) |
Bus slack |
Slack.bus |
|
pd |
\(p_{d}\) |
active demand |
p.u. |
StaticLoad.p0 |
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 |
|
gsh |
\(g_{sh}\) |
shunt conductance |
Shunt.g |
|
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 |
|
zg |
\(z_{one,g}\) |
Gen zone |
StaticGen.zone |
|
zd |
\(z_{one,d}\) |
Load zone |
StaticLoad.zone |
|
R10 |
\(R_{10}\) |
10-min ramp rate |
p.u./h |
StaticGen.R10 |
sd |
\(s_{d}\) |
zonal load factor for UC |
UCTSlot.sd |
|
timeslot |
\(t_{s,idx}\) |
Time slot for multi-period UC |
UCTSlot.idx |
|
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 |
cnsr |
\(c_{nsr}\) |
cost for non-spinning reserve |
$/(p.u.*h) |
NSRCost.cnsr |
dnsr |
\(d_{nsr}\) |
non-spinning reserve requirement in percentage |
% |
NSR.demand |
csu |
\(c_{su}\) |
startup cost |
$ |
GCost.csu |
csd |
\(c_{sd}\) |
shutdown cost |
$ |
GCost.csd |
cdp |
\(c_{d,p}\) |
penalty for unserved load |
$/(p.u.*h) |
DCost.cdp |
dctrl |
\(c_{trl,d}\) |
load controllability |
StaticLoad.ctrl |
|
td1 |
\(t_{d1}\) |
minimum ON duration |
h |
StaticGen.td1 |
td2 |
\(t_{d2}\) |
minimum OFF duration |
h |
StaticGen.td2 |
Config Fields in [UC]
Option |
Symbol |
Value |
Info |
Accepted values |
---|---|---|---|---|
t |
\(T_{cfg}\) |
1 |
time interval in hours |
UCDG#
UC with distributed generation DG.
Note that UCDG only inlcudes DG output power. If ESD1 is included, UCES should be used instead, otherwise there is no SOC.
Objective#
Unit |
Expression |
---|---|
$ |
\(min. T_{cfg}^{2} \sum(c_{2} z_{u_{g}}^{2} + T_{cfg} c_{1} z_{u_{g}})+ \sum(u_{g} c_{0} 1_{tl}) + T_{cfg} \sum(c_{su} v_{g,d} + c_{sd} w_{g,d} + c_{sr} p_{r,s} + c_{nsr} p_{r, ns} + c_{d,p} p_{d,u})\) |
Constraints#
Name |
Description |
Expression |
---|---|---|
pglb |
pg min |
\(-p_g + c_{trl,n} p_{g, 0} u_{g,d}+ c_{trl} p_{g, min} u_{g,d} \leq 0\) |
pgub |
pg max |
\(p_g - c_{trl,n} p_{g, 0} u_{g,d}- c_{trl} p_{g, max} u_{g,d} \leq 0\) |
sbus |
align slack bus angle |
\(c_{sb} \theta_{bus} = 0\) |
pb |
power balance |
\(B_{bus} \theta_{bus} + P_{bus}^{inj} 1_{tl} + C_{l} (p_{d,s}-p_{d,u}) + C_{sh} g_{sh} 1_{tl} - C_{g} p_g = 0\) |
plflb |
line flow lower bound |
\(-B_{f} \theta_{bus} - P_{f}^{inj} - R_{ATEA} 1_{tl} \leq 0\) |
plfub |
line flow upper bound |
\(B_{f} \theta_{bus} + P_{f}^{inj} - R_{ATEA} 1_{tl} \leq 0\) |
alflb |
line angle difference lower bound |
\(-C_{ft}^T \theta_{bus} - \theta_{bus, max} 1_{tl} \leq 0\) |
alfub |
line angle difference upper bound |
\(C_{ft}^T \theta_{bus} - \theta_{bus, max} 1_{tl} \leq 0\) |
prsb |
spinning reserve balance |
\(u_{g,d} p_{g, max} 1_{tl} - z_{u_{g}} - p_{r,s} = 0\) |
rsr |
spinning reserve requirement |
\(-S_{g} p_{r,s} + d_{s,r,z} \leq 0\) |
prnsb |
non-spinning reserve balance |
\(1-u_{g,d} p_{g, max} 1_{tl} - p_{r, ns} = 0\) |
rnsr |
non-spinning reserve requirement |
\(-S_{g} p_{r, ns} + d_{nsr} \leq 0\) |
actv |
startup action |
\(u_{g,d} M_{r} - v_{g,d}[:, 1:] = 0\) |
actv0 |
initial startup action |
\(u_{g,d}[:, 0] - u_{g}[:, 0] - v_{g,d}[:, 0] = 0\) |
actw |
shutdown action |
\(-u_{g,d} M_{r} - w_{g,d}[:, 1:] = 0\) |
actw0 |
initial shutdown action |
\(-u_{g,d}[:, 0] + u_{g}[:, 0] - w_{g,d}[:, 0] = 0\) |
zuglb |
zug lower bound |
\(- z_{u_{g}} + p_g \leq 0\) |
zugub |
zug upper bound |
\(z_{u_{g}} - p_g - M_{zug} (1 - u_{g,d}) \leq 0\) |
zugub2 |
zug upper bound |
\(z_{u_{g}} - M_{zug} u_{g,d} \leq 0\) |
don |
minimum online duration |
\(T_{on} v_{g,d} - u_{g,d} \leq 0\) |
doff |
minimum offline duration |
\(T_{off} w_{g,d} - (1 - u_{g,d}) \leq 0\) |
pdumax |
unserved demand upper bound |
\(p_{d,u} - p_{d,s}^{+} c_{trl,d} 1_{tl} \leq 0\) |
cdgb |
Select DG power from pg |
\(C_{DG} p_g - p_{g,DG} = 0\) |
Expressions#
Name |
Variable |
Description |
Expression |
---|---|---|---|
plfc |
plf |
plf calculation |
\(B_{f} \theta_{bus} + P_{f}^{inj}\) |
pic |
pi |
dual of Constraint pb |
\(\phi[pb]\) |
Vars#
Name |
Symbol |
Description |
Unit |
Source |
Properties |
---|---|---|---|---|---|
pg |
\(p_g\) |
2D Gen power |
p.u. |
StaticGen.p |
|
aBus |
\(\theta_{bus}\) |
2D Bus angle |
rad |
Bus.a |
|
pi |
\(\pi\) |
nodal price |
$/p.u. |
||
plf |
\(p_{lf}\) |
2D Line flow |
p.u. |
||
prs |
\(p_{r,s}\) |
2D Spinning reserve |
p.u. |
nonneg |
|
prns |
\(p_{r, ns}\) |
2D Non-spinning reserve |
nonneg |
||
ugd |
\(u_{g,d}\) |
commitment decision |
StaticGen.u |
boolean |
|
vgd |
\(v_{g,d}\) |
startup action |
StaticGen.u |
boolean |
|
wgd |
\(w_{g,d}\) |
shutdown action |
StaticGen.u |
boolean |
|
zug |
\(z_{ug}\) |
Aux var, \(z_{ug} = u_{g,d} * p_g\) |
pos |
||
pdu |
\(p_{d,u}\) |
unserved demand |
p.u. |
nonneg |
|
pgdg |
\(p_{g,DG}\) |
DG output power |
p.u. |
Services#
Name |
Symbol |
Description |
Type |
---|---|---|---|
ctrle |
\(c_{trl, e}\) |
Reshaped controllability |
NumOpDual |
nctrl |
\(c_{trl,n}\) |
Effective Gen uncontrollability |
NumOp |
nctrle |
\(c_{trl,n,e}\) |
Reshaped non-controllability |
NumOpDual |
csb |
\(c_{sb}\) |
select slack bus |
VarSelect |
gs |
\(S_{g}\) |
Sum Gen vars vector in shape of zone |
ZonalSum |
ds |
\(S_{d}\) |
Sum pd vector in shape of zone |
ZonalSum |
pdz |
\(p_{d,z}\) |
zonal total load |
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 |
dnsrpz |
\(d_{nsr, p, z}\) |
zonal non-spinning reserve requirement in percentage |
NumOpDual |
dnsr |
\(d_{nsr}\) |
zonal non-spinning reserve requirement |
NumOpDual |
Mzug |
\(M_{zug}\) |
10 times of max of pmax as big M for zug |
NumOp |
Con |
\(T_{on}\) |
minimum ON coefficient |
MinDur |
Coff |
\(T_{off}\) |
minimum OFF coefficient |
MinDur |
pdsp |
\(p_{d,s}^{+}\) |
positive demand |
NumOp |
cd |
\(C_{DG}\) |
Select DG power from pg |
VarSelect |
Parameters#
Name |
Symbol |
Description |
Unit |
Source |
---|---|---|---|---|
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 |
ug |
\(u_{g}\) |
Gen connection status |
StaticGen.u |
|
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 |
p0 |
\(p_{g, 0}\) |
Gen initial active power |
p.u. |
StaticGen.pg0 |
buss |
\(B_{us,s}\) |
Bus slack |
Slack.bus |
|
pd |
\(p_{d}\) |
active demand |
p.u. |
StaticLoad.p0 |
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 |
|
gsh |
\(g_{sh}\) |
shunt conductance |
Shunt.g |
|
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 |
|
zg |
\(z_{one,g}\) |
Gen zone |
StaticGen.zone |
|
zd |
\(z_{one,d}\) |
Load zone |
StaticLoad.zone |
|
R10 |
\(R_{10}\) |
10-min ramp rate |
p.u./h |
StaticGen.R10 |
sd |
\(s_{d}\) |
zonal load factor for UC |
UCTSlot.sd |
|
timeslot |
\(t_{s,idx}\) |
Time slot for multi-period UC |
UCTSlot.idx |
|
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 |
cnsr |
\(c_{nsr}\) |
cost for non-spinning reserve |
$/(p.u.*h) |
NSRCost.cnsr |
dnsr |
\(d_{nsr}\) |
non-spinning reserve requirement in percentage |
% |
NSR.demand |
csu |
\(c_{su}\) |
startup cost |
$ |
GCost.csu |
csd |
\(c_{sd}\) |
shutdown cost |
$ |
GCost.csd |
cdp |
\(c_{d,p}\) |
penalty for unserved load |
$/(p.u.*h) |
DCost.cdp |
dctrl |
\(c_{trl,d}\) |
load controllability |
StaticLoad.ctrl |
|
td1 |
\(t_{d1}\) |
minimum ON duration |
h |
StaticGen.td1 |
td2 |
\(t_{d2}\) |
minimum OFF duration |
h |
StaticGen.td2 |
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 [UCDG]
Option |
Symbol |
Value |
Info |
Accepted values |
---|---|---|---|---|
t |
\(T_{cfg}\) |
1 |
time interval in hours |
UCES#
UC with energy storage ESD1.
Objective#
Unit |
Expression |
---|---|
$ |
\(min. T_{cfg}^{2} \sum(c_{2} z_{u_{g}}^{2} + T_{cfg} c_{1} z_{u_{g}})+ \sum(u_{g} c_{0} 1_{tl}) + T_{cfg} \sum(c_{su} v_{g,d} + c_{sd} w_{g,d} + c_{sr} p_{r,s} + c_{nsr} p_{r, ns} + c_{d,p} p_{d,u})\) |
Constraints#
Name |
Description |
Expression |
---|---|---|
pglb |
pg min |
\(-p_g + c_{trl,n} p_{g, 0} u_{g,d}+ c_{trl} p_{g, min} u_{g,d} \leq 0\) |
pgub |
pg max |
\(p_g - c_{trl,n} p_{g, 0} u_{g,d}- c_{trl} p_{g, max} u_{g,d} \leq 0\) |
sbus |
align slack bus angle |
\(c_{sb} \theta_{bus} = 0\) |
pb |
power balance |
\(B_{bus} \theta_{bus} + P_{bus}^{inj} 1_{tl} + C_{l} (p_{d,s}-p_{d,u}) + C_{sh} g_{sh} 1_{tl} - C_{g} p_g = 0\) |
plflb |
line flow lower bound |
\(-B_{f} \theta_{bus} - P_{f}^{inj} - R_{ATEA} 1_{tl} \leq 0\) |
plfub |
line flow upper bound |
\(B_{f} \theta_{bus} + P_{f}^{inj} - R_{ATEA} 1_{tl} \leq 0\) |
alflb |
line angle difference lower bound |
\(-C_{ft}^T \theta_{bus} - \theta_{bus, max} 1_{tl} \leq 0\) |
alfub |
line angle difference upper bound |
\(C_{ft}^T \theta_{bus} - \theta_{bus, max} 1_{tl} \leq 0\) |
prsb |
spinning reserve balance |
\(u_{g,d} p_{g, max} 1_{tl} - z_{u_{g}} - p_{r,s} = 0\) |
rsr |
spinning reserve requirement |
\(-S_{g} p_{r,s} + d_{s,r,z} \leq 0\) |
prnsb |
non-spinning reserve balance |
\(1-u_{g,d} p_{g, max} 1_{tl} - p_{r, ns} = 0\) |
rnsr |
non-spinning reserve requirement |
\(-S_{g} p_{r, ns} + d_{nsr} \leq 0\) |
actv |
startup action |
\(u_{g,d} M_{r} - v_{g,d}[:, 1:] = 0\) |
actv0 |
initial startup action |
\(u_{g,d}[:, 0] - u_{g}[:, 0] - v_{g,d}[:, 0] = 0\) |
actw |
shutdown action |
\(-u_{g,d} M_{r} - w_{g,d}[:, 1:] = 0\) |
actw0 |
initial shutdown action |
\(-u_{g,d}[:, 0] + u_{g}[:, 0] - w_{g,d}[:, 0] = 0\) |
zuglb |
zug lower bound |
\(- z_{u_{g}} + p_g \leq 0\) |
zugub |
zug upper bound |
\(z_{u_{g}} - p_g - M_{zug} (1 - u_{g,d}) \leq 0\) |
zugub2 |
zug upper bound |
\(z_{u_{g}} - M_{zug} u_{g,d} \leq 0\) |
don |
minimum online duration |
\(T_{on} v_{g,d} - u_{g,d} \leq 0\) |
doff |
minimum offline duration |
\(T_{off} w_{g,d} - (1 - u_{g,d}) \leq 0\) |
pdumax |
unserved demand upper bound |
\(p_{d,u} - p_{d,s}^{+} c_{trl,d} 1_{tl} \leq 0\) |
cdgb |
Select DG power from pg |
\(C_{DG} p_g - p_{g,DG} = 0\) |
SOClb |
SOC lower bound |
\(-SOC + SOC_{min} \leq 0\) |
SOCub |
SOC upper bound |
\(SOC - SOC_{max} \leq 0\) |
cdb |
Charging decision bound |
\(u_{c,ESD} + u_{d,ESD} - 1 = 0\) |
cesb |
Select ESD1 power from pg |
\(C_{ESD} p_g + z_{c,ESD} - z_{d,ESD} = 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\) |
SOCb |
ESD1 SOC balance |
\(E_{n,R} SOC M_{r,ES} - T_{cfg} \eta_{c,R} z_{c,ESD}[:, 1:] + T_{cfg} R_{\eta_d,R} z_{d,ESD}[:, 1:] = 0\) |
SOCb0 |
ESD1 SOC initial balance |
\(E_n SOC[:, 0] - SOC_{init} - T_{cfg} \eta_c z_{c,ESD}[:, 0] + T_{cfg} \frac{1}{\eta_d} z_{d,ESD}[:, 0] = 0\) |
SOCr |
SOC requirement |
\(SOC[:, -1] - SOC_{init} = 0\) |
Expressions#
Name |
Variable |
Description |
Expression |
---|---|---|---|
plfc |
plf |
plf calculation |
\(B_{f} \theta_{bus} + P_{f}^{inj}\) |
pic |
pi |
dual of Constraint pb |
\(\phi[pb]\) |
Vars#
Name |
Symbol |
Description |
Unit |
Source |
Properties |
---|---|---|---|---|---|
pg |
\(p_g\) |
2D Gen power |
p.u. |
StaticGen.p |
|
aBus |
\(\theta_{bus}\) |
2D Bus angle |
rad |
Bus.a |
|
pi |
\(\pi\) |
nodal price |
$/p.u. |
||
plf |
\(p_{lf}\) |
2D Line flow |
p.u. |
||
prs |
\(p_{r,s}\) |
2D Spinning reserve |
p.u. |
nonneg |
|
prns |
\(p_{r, ns}\) |
2D Non-spinning reserve |
nonneg |
||
ugd |
\(u_{g,d}\) |
commitment decision |
StaticGen.u |
boolean |
|
vgd |
\(v_{g,d}\) |
startup action |
StaticGen.u |
boolean |
|
wgd |
\(w_{g,d}\) |
shutdown action |
StaticGen.u |
boolean |
|
zug |
\(z_{ug}\) |
Aux var, \(z_{ug} = u_{g,d} * p_g\) |
pos |
||
pdu |
\(p_{d,u}\) |
unserved demand |
p.u. |
nonneg |
|
pgdg |
\(p_{g,DG}\) |
DG output power |
p.u. |
||
SOC |
\(SOC\) |
ESD1 State of Charge |
% |
pos |
|
pce |
\(p_{c,ESD}\) |
ESD1 charging power |
p.u. |
nonneg |
|
pde |
\(p_{d,ESD}\) |
ESD1 discharging power |
p.u. |
nonneg |
|
uce |
\(u_{c,ESD}\) |
ESD1 charging decision |
boolean |
||
ude |
\(u_{d,ESD}\) |
ESD1 discharging decision |
boolean |
||
zce |
\(z_{c,ESD}\) |
Aux var for charging, \(z_{c,ESD}=u_{c,ESD}*p_{c,ESD}\) |
nonneg |
||
zde |
\(z_{d,ESD}\) |
Aux var for discharging, \(z_{d,ESD}=u_{d,ESD}*p_{d,ESD}\) |
nonneg |
Services#
Name |
Symbol |
Description |
Type |
---|---|---|---|
ctrle |
\(c_{trl, e}\) |
Reshaped controllability |
NumOpDual |
nctrl |
\(c_{trl,n}\) |
Effective Gen uncontrollability |
NumOp |
nctrle |
\(c_{trl,n,e}\) |
Reshaped non-controllability |
NumOpDual |
csb |
\(c_{sb}\) |
select slack bus |
VarSelect |
gs |
\(S_{g}\) |
Sum Gen vars vector in shape of zone |
ZonalSum |
ds |
\(S_{d}\) |
Sum pd vector in shape of zone |
ZonalSum |
pdz |
\(p_{d,z}\) |
zonal total load |
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 |
dnsrpz |
\(d_{nsr, p, z}\) |
zonal non-spinning reserve requirement in percentage |
NumOpDual |
dnsr |
\(d_{nsr}\) |
zonal non-spinning reserve requirement |
NumOpDual |
Mzug |
\(M_{zug}\) |
10 times of max of pmax as big M for zug |
NumOp |
Con |
\(T_{on}\) |
minimum ON coefficient |
MinDur |
Coff |
\(T_{off}\) |
minimum OFF coefficient |
MinDur |
pdsp |
\(p_{d,s}^{+}\) |
positive demand |
NumOp |
cd |
\(C_{DG}\) |
Select DG power from pg |
VarSelect |
REtaD |
\(\frac{1}{\eta_d}\) |
NumOp |
|
Mb |
\(M_{big}\) |
10 times of max of pmax as big M |
NumOp |
ce |
\(C_{ESD}\) |
Select zue 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 |
---|---|---|---|---|
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 |
ug |
\(u_{g}\) |
Gen connection status |
StaticGen.u |
|
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 |
p0 |
\(p_{g, 0}\) |
Gen initial active power |
p.u. |
StaticGen.pg0 |
buss |
\(B_{us,s}\) |
Bus slack |
Slack.bus |
|
pd |
\(p_{d}\) |
active demand |
p.u. |
StaticLoad.p0 |
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 |
|
gsh |
\(g_{sh}\) |
shunt conductance |
Shunt.g |
|
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 |
|
zg |
\(z_{one,g}\) |
Gen zone |
StaticGen.zone |
|
zd |
\(z_{one,d}\) |
Load zone |
StaticLoad.zone |
|
R10 |
\(R_{10}\) |
10-min ramp rate |
p.u./h |
StaticGen.R10 |
sd |
\(s_{d}\) |
zonal load factor for UC |
UCTSlot.sd |
|
timeslot |
\(t_{s,idx}\) |
Time slot for multi-period UC |
UCTSlot.idx |
|
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 |
cnsr |
\(c_{nsr}\) |
cost for non-spinning reserve |
$/(p.u.*h) |
NSRCost.cnsr |
dnsr |
\(d_{nsr}\) |
non-spinning reserve requirement in percentage |
% |
NSR.demand |
csu |
\(c_{su}\) |
startup cost |
$ |
GCost.csu |
csd |
\(c_{sd}\) |
shutdown cost |
$ |
GCost.csd |
cdp |
\(c_{d,p}\) |
penalty for unserved load |
$/(p.u.*h) |
DCost.cdp |
dctrl |
\(c_{trl,d}\) |
load controllability |
StaticLoad.ctrl |
|
td1 |
\(t_{d1}\) |
minimum ON duration |
h |
StaticGen.td1 |
td2 |
\(t_{d2}\) |
minimum OFF duration |
h |
StaticGen.td2 |
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 |
EtaC |
\(\eta_c\) |
Efficiency during charging |
% |
ESD1.EtaC |
EtaD |
\(\eta_d\) |
Efficiency during discharging |
% |
ESD1.EtaD |
genesd |
\(g_{ESD}\) |
gen of ESD1 |
ESD1.gen |
|
gammapesd |
\(\gamma_{p,ESD}\) |
Ratio of ESD1.pge w.r.t to that of static generator |
ESD1.gammap |
Config Fields in [UCES]
Option |
Symbol |
Value |
Info |
Accepted values |
---|---|---|---|---|
t |
\(T_{cfg}\) |
1 |
time interval in hours |