.. _DCUC: ================================================================================ DCUC ================================================================================ Type for DC-based unit commitment. Available routines: UC_, UCDG_, UCES_, UC2_, UC2DG_, UC2ES_ .. _UC: -------------------------------------------------------------------------------- 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 ----- - The formulations have 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 | +======+===================================================================================================================================================================================================================================+ | *$* | :math:`min. T_{cfg}^{2} \sum(c_{2} p_g^{2})+ T_{cfg} \sum(c_{1} p_g)+ \sum(u_{g} c_{0} 1_{tl})+ \sum(c_{su} v_{g,d} + c_{sd} w_{g,d}) + T_{cfg} \sum(c_{sr} p_{r,s} + c_{nsr} p_{r, ns} + c_{d,p} p_{d,u})` | +------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ Expressions ---------------------------------- +--------+----------------+-----------------------------------------------------------------+--------+-----------+ | Name | Description | Expression | Unit | Source | +========+================+=================================================================+========+===========+ | plf | 2D Line flow | :math:`B_{f} \theta_{bus} + P_{f}^{inj}` | *p.u.* | Line | +--------+----------------+-----------------------------------------------------------------+--------+-----------+ | pmaxe | Effective pmax | :math:`c_{trl,n} p_{g, 0} u_{g,d} + c_{trl} p_{g, max} u_{g,d}` | *p.u.* | StaticGen | +--------+----------------+-----------------------------------------------------------------+--------+-----------+ | pmine | Effective pmin | :math:`c_{trl} p_{g, min} u_{g,d} + c_{trl,n} p_{g, 0} u_{g,d}` | *p.u.* | StaticGen | +--------+----------------+-----------------------------------------------------------------+--------+-----------+ Constraints ---------------------------------- +---------+-----------------------------------+----------------------------------------------------------------------------------------------------------------------+ | Name | Description | Expression | +=========+===================================+======================================================================================================================+ | pb | power balance | :math:`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` | +---------+-----------------------------------+----------------------------------------------------------------------------------------------------------------------+ | sbus | align slack bus angle | :math:`I_{sb} \theta_{bus} = 0` | +---------+-----------------------------------+----------------------------------------------------------------------------------------------------------------------+ | pglb | pg min | :math:`-p_g + p_{g, min, e} \leq 0` | +---------+-----------------------------------+----------------------------------------------------------------------------------------------------------------------+ | pgub | pg max | :math:`p_g - p_{g, max, e} \leq 0` | +---------+-----------------------------------+----------------------------------------------------------------------------------------------------------------------+ | plflb | line flow lower bound | :math:`-B_{f} \theta_{bus} - P_{f}^{inj} - R_{ATEA} 1_{tl} \leq 0` | +---------+-----------------------------------+----------------------------------------------------------------------------------------------------------------------+ | plfub | line flow upper bound | :math:`B_{f} \theta_{bus} + P_{f}^{inj} - R_{ATEA} 1_{tl} \leq 0` | +---------+-----------------------------------+----------------------------------------------------------------------------------------------------------------------+ | alflb | line angle difference lower bound | :math:`-C_{ft}^T \theta_{bus} - \theta_{bus, max} 1_{tl} \leq 0` | +---------+-----------------------------------+----------------------------------------------------------------------------------------------------------------------+ | alfub | line angle difference upper bound | :math:`C_{ft}^T \theta_{bus} - \theta_{bus, max} 1_{tl} \leq 0` | +---------+-----------------------------------+----------------------------------------------------------------------------------------------------------------------+ | prnsb | non-spinning reserve balance | :math:`1-u_{g,d} p_{g, max} 1_{tl} - p_{r, ns} = 0` | +---------+-----------------------------------+----------------------------------------------------------------------------------------------------------------------+ | rnsr | non-spinning reserve requirement | :math:`-S_{g} p_{r, ns} + d_{nsr} \leq 0` | +---------+-----------------------------------+----------------------------------------------------------------------------------------------------------------------+ | prsb | spinning reserve balance | :math:`u_{g,d} p_{g, max} 1_{tl} - z_{u_{g}} - p_{r,s} = 0` | +---------+-----------------------------------+----------------------------------------------------------------------------------------------------------------------+ | rsr | spinning reserve requirement | :math:`-S_{g} p_{r,s} + d_{s,r,z} \leq 0` | +---------+-----------------------------------+----------------------------------------------------------------------------------------------------------------------+ | actv | startup action | :math:`u_{g,d} M_{r} - v_{g,d}[:, 1:] = 0` | +---------+-----------------------------------+----------------------------------------------------------------------------------------------------------------------+ | actv0 | initial startup action | :math:`u_{g,d}[:, 0] - u_{g}[:, 0] - v_{g,d}[:, 0] = 0` | +---------+-----------------------------------+----------------------------------------------------------------------------------------------------------------------+ | actw | shutdown action | :math:`-u_{g,d} M_{r} - w_{g,d}[:, 1:] = 0` | +---------+-----------------------------------+----------------------------------------------------------------------------------------------------------------------+ | actw0 | initial shutdown action | :math:`-u_{g,d}[:, 0] + u_{g}[:, 0] - w_{g,d}[:, 0] = 0` | +---------+-----------------------------------+----------------------------------------------------------------------------------------------------------------------+ | zuglb | zug lower bound | :math:`- z_{u_{g}} + p_g \leq 0` | +---------+-----------------------------------+----------------------------------------------------------------------------------------------------------------------+ | zugub | zug upper bound | :math:`z_{u_{g}} - p_g - M_{zug} (1 - u_{g,d}) \leq 0` | +---------+-----------------------------------+----------------------------------------------------------------------------------------------------------------------+ | zugub2 | zug upper bound | :math:`z_{u_{g}} - M_{zug} u_{g,d} \leq 0` | +---------+-----------------------------------+----------------------------------------------------------------------------------------------------------------------+ | don | minimum online duration | :math:`T_{on} v_{g,d} - u_{g,d} \leq 0` | +---------+-----------------------------------+----------------------------------------------------------------------------------------------------------------------+ | doff | minimum offline duration | :math:`T_{off} w_{g,d} - (1 - u_{g,d}) \leq 0` | +---------+-----------------------------------+----------------------------------------------------------------------------------------------------------------------+ | pdumax | unserved demand upper bound | :math:`p_{d,u} - p_{d,s}^{+} c_{trl,d} 1_{tl} \leq 0` | +---------+-----------------------------------+----------------------------------------------------------------------------------------------------------------------+ Vars ---------------------------------- +-------+----------------------+-----------------------------------------+--------+-------------+------------+ | Name | Symbol | Description | Unit | Source | Properties | +=======+======================+=========================================+========+=============+============+ | pg | :math:`p_g` | 2D Gen power | *p.u.* | StaticGen.p | | +-------+----------------------+-----------------------------------------+--------+-------------+------------+ | vBus | :math:`v_{Bus}` | 2D Bus voltage | *p.u.* | Bus.v | | +-------+----------------------+-----------------------------------------+--------+-------------+------------+ | aBus | :math:`\theta_{bus}` | 2D Bus angle | *rad* | Bus.a | | +-------+----------------------+-----------------------------------------+--------+-------------+------------+ | prns | :math:`p_{r, ns}` | 2D Non-spinning reserve | | StaticGen | nonneg | +-------+----------------------+-----------------------------------------+--------+-------------+------------+ | prs | :math:`p_{r,s}` | 2D Spinning reserve | *p.u.* | StaticGen | nonneg | +-------+----------------------+-----------------------------------------+--------+-------------+------------+ | ugd | :math:`u_{g,d}` | commitment decision | | StaticGen.u | boolean | +-------+----------------------+-----------------------------------------+--------+-------------+------------+ | vgd | :math:`v_{g,d}` | startup action | | StaticGen.u | boolean | +-------+----------------------+-----------------------------------------+--------+-------------+------------+ | wgd | :math:`w_{g,d}` | shutdown action | | StaticGen.u | boolean | +-------+----------------------+-----------------------------------------+--------+-------------+------------+ | zug | :math:`z_{ug}` | Aux var, :math:`z_{ug} = u_{g,d} * p_g` | | StaticGen | pos | +-------+----------------------+-----------------------------------------+--------+-------------+------------+ | pdu | :math:`p_{d,u}` | unserved demand | *p.u.* | StaticLoad | nonneg | +-------+----------------------+-----------------------------------------+--------+-------------+------------+ ExpressionCalcs ---------------------------------- +------+---------------------------------------+---------------------+----------+--------+ | Name | Description | Expression | Unit | Source | +======+=======================================+=====================+==========+========+ | pi | LMP, dual of | :math:`\phi[pb]` | *$/p.u.* | Bus | +------+---------------------------------------+---------------------+----------+--------+ | mu1 | Lagrange multipliers, dual of | :math:`\phi[plflb]` | *$/p.u.* | Line | +------+---------------------------------------+---------------------+----------+--------+ | mu2 | Lagrange multipliers, dual of | :math:`\phi[plfub]` | *$/p.u.* | Line | +------+---------------------------------------+---------------------+----------+--------+ Services --------- +---------+-----------------------+------------------------------------------------------+-----------+ | Name | Symbol | Description | Type | +=========+=======================+======================================================+===========+ | pd | :math:`p_{d}` | effective active demand | NumOpDual | +---------+-----------------------+------------------------------------------------------+-----------+ | isb | :math:`I_{sb}` | Index slack bus from all buses | VarSelect | +---------+-----------------------+------------------------------------------------------+-----------+ | ctrle | :math:`c_{trl, e}` | Reshaped controllability | NumOpDual | +---------+-----------------------+------------------------------------------------------+-----------+ | nctrl | :math:`c_{trl,n}` | Effective Gen uncontrollability | NumOp | +---------+-----------------------+------------------------------------------------------+-----------+ | nctrle | :math:`c_{trl,n,e}` | Reshaped non-controllability | NumOpDual | +---------+-----------------------+------------------------------------------------------+-----------+ | gs | :math:`S_{g}` | Sum Gen vars vector in shape of area | ZonalSum | +---------+-----------------------+------------------------------------------------------+-----------+ | ds | :math:`S_{d}` | Sum pd vector in shape of area | ZonalSum | +---------+-----------------------+------------------------------------------------------+-----------+ | pdz | :math:`p_{d,z}` | zonal total load | NumOpDual | +---------+-----------------------+------------------------------------------------------+-----------+ | tlv | :math:`1_{tl}` | time length vector | NumOp | +---------+-----------------------+------------------------------------------------------+-----------+ | pds | :math:`p_{d,s}` | Scaled load | LoadScale | +---------+-----------------------+------------------------------------------------------+-----------+ | Mr | :math:`M_{r}` | Subtraction matrix for ramping | RampSub | +---------+-----------------------+------------------------------------------------------+-----------+ | RR30 | :math:`R_{30,R}` | Repeated ramp rate | NumHstack | +---------+-----------------------+------------------------------------------------------+-----------+ | dnsrpz | :math:`d_{nsr, p, z}` | zonal non-spinning reserve requirement in percentage | NumOpDual | +---------+-----------------------+------------------------------------------------------+-----------+ | dnsr | :math:`d_{nsr}` | zonal non-spinning reserve requirement | NumOpDual | +---------+-----------------------+------------------------------------------------------+-----------+ | dsrpz | :math:`d_{s,r, p, z}` | zonal spinning reserve requirement in percentage | NumOpDual | +---------+-----------------------+------------------------------------------------------+-----------+ | dsr | :math:`d_{s,r,z}` | zonal spinning reserve requirement | NumOpDual | +---------+-----------------------+------------------------------------------------------+-----------+ | Mzug | :math:`M_{zug}` | 10 times of max of pmax as big M for zug | NumOp | +---------+-----------------------+------------------------------------------------------+-----------+ | Con | :math:`T_{on}` | minimum ON coefficient | MinDur | +---------+-----------------------+------------------------------------------------------+-----------+ | Coff | :math:`T_{off}` | minimum OFF coefficient | MinDur | +---------+-----------------------+------------------------------------------------------+-----------+ | pdsp | :math:`p_{d,s}^{+}` | positive demand | NumOp | +---------+-----------------------+------------------------------------------------------+-----------+ Parameters ---------------------------------- +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | Name | Symbol | Description | Unit | Source | +===========+===========================+================================================+==============+======================+ | ug | :math:`u_{g}` | Gen connection status | | StaticGen.u | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | pg0 | :math:`p_{g, 0}` | Gen initial active power | *p.u.* | StaticGen.p0 | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | gsh | :math:`g_{sh}` | shunt conductance | | Shunt.g | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | buss | :math:`B_{us,s}` | Bus slack | | Slack.bus | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | ud | :math:`u_{d}` | Load connection status | | StaticLoad.u | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | pd0 | :math:`p_{d,0}` | active demand | *p.u.* | StaticLoad.p0 | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | Cg | :math:`C_{g}` | Gen connection matrix | | MatProcessor.Cg | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | Cl | :math:`C_{l}` | Load connection matrix | | MatProcessor.Cl | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | CftT | :math:`C_{ft}^T` | Transpose of line connection matrix | | MatProcessor.CftT | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | Csh | :math:`C_{sh}` | Shunt connection matrix | | MatProcessor.Csh | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | Bbus | :math:`B_{bus}` | Bus admittance matrix | | MatProcessor.Bbus | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | Bf | :math:`B_{f}` | Bf matrix | | MatProcessor.Bf | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | Pbusinj | :math:`P_{bus}^{inj}` | Bus power injection vector | | MatProcessor.Pbusinj | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | Pfinj | :math:`P_{f}^{inj}` | Line power injection vector | | MatProcessor.Pfinj | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | c2 | :math:`c_{2}` | Gen cost coefficient 2 | *$/(p.u.^2)* | GCost.c2 | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | c1 | :math:`c_{1}` | Gen cost coefficient 1 | *$/(p.u.)* | GCost.c1 | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | c0 | :math:`c_{0}` | Gen cost coefficient 0 | *$* | GCost.c0 | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | ctrl | :math:`c_{trl}` | Gen controllability | | StaticGen.ctrl | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | pmax | :math:`p_{g, max}` | Gen maximum active power | *p.u.* | StaticGen.pmax | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | pmin | :math:`p_{g, min}` | Gen minimum active power | *p.u.* | StaticGen.pmin | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | ul | :math:`u_{l}` | Line connection status | | Line.u | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | rate_a | :math:`R_{ATEA}` | long-term flow limit | *p.u.* | Line.rate_a | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | amax | :math:`\theta_{bus, max}` | max line angle difference | | Line.amax | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | amin | :math:`\theta_{bus, min}` | min line angle difference | | Line.amin | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | zg | :math:`z_{one,g}` | Gen area | | StaticGen.area | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | zd | :math:`z_{one,d}` | Load area | | StaticLoad.area | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | R10 | :math:`R_{10}` | 10-min ramp rate | *p.u./h* | StaticGen.R10 | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | timeslot | :math:`t_{s,idx}` | Time slot for multi-period UC | | UCSlot.idx | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | sd | :math:`s_{d}` | area load scaling factor for UC | | UCSlotLoad.sd | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | R30 | :math:`R_{30}` | 30-min ramp rate | *p.u./h* | StaticGen.R30 | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | cnsr | :math:`c_{nsr}` | cost for non-spinning reserve | *$/(p.u.*h)* | NSRCost.cnsr | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | dnsr | :math:`d_{nsr}` | non-spinning reserve requirement in percentage | *%* | NSR.demand | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | dsr | :math:`d_{sr}` | spinning reserve requirement in percentage | *%* | SR.demand | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | csr | :math:`c_{sr}` | cost for spinning reserve | *$/(p.u.*h)* | SRCost.csr | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | csu | :math:`c_{su}` | startup cost | *$* | GCost.csu | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | csd | :math:`c_{sd}` | shutdown cost | *$* | GCost.csd | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | cdp | :math:`c_{d,p}` | penalty for unserved load | *$/(p.u.*h)* | DCost.cdp | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | dctrl | :math:`c_{trl,d}` | load controllability | | StaticLoad.ctrl | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | td1 | :math:`t_{d1}` | minimum ON duration | *h* | StaticGen.td1 | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | td2 | :math:`t_{d2}` | minimum OFF duration | *h* | StaticGen.td2 | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ Config Fields in [UC] +--------+-----------------+-------+------------------------+-----------------+ | Option | Symbol | Value | Info | Accepted values | +========+=================+=======+========================+=================+ | t | :math:`T_{cfg}` | 1 | time interval in hours | | +--------+-----------------+-------+------------------------+-----------------+ .. _UCDG: -------------------------------------------------------------------------------- UCDG -------------------------------------------------------------------------------- UC with distributed generation :ref:`DG`. Note that UCDG only includes DG output power. If ESD1 is included, UCES should be used instead, otherwise there is no SOC. Objective ---------------------------------- +------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Unit | Expression | +======+===================================================================================================================================================================================================================================+ | *$* | :math:`min. T_{cfg}^{2} \sum(c_{2} p_g^{2})+ T_{cfg} \sum(c_{1} p_g)+ \sum(u_{g} c_{0} 1_{tl})+ \sum(c_{su} v_{g,d} + c_{sd} w_{g,d}) + T_{cfg} \sum(c_{sr} p_{r,s} + c_{nsr} p_{r, ns} + c_{d,p} p_{d,u})` | +------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ Expressions ---------------------------------- +--------+----------------+-----------------------------------------------------------------+--------+-----------+ | Name | Description | Expression | Unit | Source | +========+================+=================================================================+========+===========+ | plf | 2D Line flow | :math:`B_{f} \theta_{bus} + P_{f}^{inj}` | *p.u.* | Line | +--------+----------------+-----------------------------------------------------------------+--------+-----------+ | pmaxe | Effective pmax | :math:`c_{trl,n} p_{g, 0} u_{g,d} + c_{trl} p_{g, max} u_{g,d}` | *p.u.* | StaticGen | +--------+----------------+-----------------------------------------------------------------+--------+-----------+ | pmine | Effective pmin | :math:`c_{trl} p_{g, min} u_{g,d} + c_{trl,n} p_{g, 0} u_{g,d}` | *p.u.* | StaticGen | +--------+----------------+-----------------------------------------------------------------+--------+-----------+ Constraints ---------------------------------- +---------+-----------------------------------+----------------------------------------------------------------------------------------------------------------------+ | Name | Description | Expression | +=========+===================================+======================================================================================================================+ | pb | power balance | :math:`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` | +---------+-----------------------------------+----------------------------------------------------------------------------------------------------------------------+ | sbus | align slack bus angle | :math:`I_{sb} \theta_{bus} = 0` | +---------+-----------------------------------+----------------------------------------------------------------------------------------------------------------------+ | pglb | pg min | :math:`-p_g + p_{g, min, e} \leq 0` | +---------+-----------------------------------+----------------------------------------------------------------------------------------------------------------------+ | pgub | pg max | :math:`p_g - p_{g, max, e} \leq 0` | +---------+-----------------------------------+----------------------------------------------------------------------------------------------------------------------+ | plflb | line flow lower bound | :math:`-B_{f} \theta_{bus} - P_{f}^{inj} - R_{ATEA} 1_{tl} \leq 0` | +---------+-----------------------------------+----------------------------------------------------------------------------------------------------------------------+ | plfub | line flow upper bound | :math:`B_{f} \theta_{bus} + P_{f}^{inj} - R_{ATEA} 1_{tl} \leq 0` | +---------+-----------------------------------+----------------------------------------------------------------------------------------------------------------------+ | alflb | line angle difference lower bound | :math:`-C_{ft}^T \theta_{bus} - \theta_{bus, max} 1_{tl} \leq 0` | +---------+-----------------------------------+----------------------------------------------------------------------------------------------------------------------+ | alfub | line angle difference upper bound | :math:`C_{ft}^T \theta_{bus} - \theta_{bus, max} 1_{tl} \leq 0` | +---------+-----------------------------------+----------------------------------------------------------------------------------------------------------------------+ | prnsb | non-spinning reserve balance | :math:`1-u_{g,d} p_{g, max} 1_{tl} - p_{r, ns} = 0` | +---------+-----------------------------------+----------------------------------------------------------------------------------------------------------------------+ | rnsr | non-spinning reserve requirement | :math:`-S_{g} p_{r, ns} + d_{nsr} \leq 0` | +---------+-----------------------------------+----------------------------------------------------------------------------------------------------------------------+ | prsb | spinning reserve balance | :math:`u_{g,d} p_{g, max} 1_{tl} - z_{u_{g}} - p_{r,s} = 0` | +---------+-----------------------------------+----------------------------------------------------------------------------------------------------------------------+ | rsr | spinning reserve requirement | :math:`-S_{g} p_{r,s} + d_{s,r,z} \leq 0` | +---------+-----------------------------------+----------------------------------------------------------------------------------------------------------------------+ | actv | startup action | :math:`u_{g,d} M_{r} - v_{g,d}[:, 1:] = 0` | +---------+-----------------------------------+----------------------------------------------------------------------------------------------------------------------+ | actv0 | initial startup action | :math:`u_{g,d}[:, 0] - u_{g}[:, 0] - v_{g,d}[:, 0] = 0` | +---------+-----------------------------------+----------------------------------------------------------------------------------------------------------------------+ | actw | shutdown action | :math:`-u_{g,d} M_{r} - w_{g,d}[:, 1:] = 0` | +---------+-----------------------------------+----------------------------------------------------------------------------------------------------------------------+ | actw0 | initial shutdown action | :math:`-u_{g,d}[:, 0] + u_{g}[:, 0] - w_{g,d}[:, 0] = 0` | +---------+-----------------------------------+----------------------------------------------------------------------------------------------------------------------+ | zuglb | zug lower bound | :math:`- z_{u_{g}} + p_g \leq 0` | +---------+-----------------------------------+----------------------------------------------------------------------------------------------------------------------+ | zugub | zug upper bound | :math:`z_{u_{g}} - p_g - M_{zug} (1 - u_{g,d}) \leq 0` | +---------+-----------------------------------+----------------------------------------------------------------------------------------------------------------------+ | zugub2 | zug upper bound | :math:`z_{u_{g}} - M_{zug} u_{g,d} \leq 0` | +---------+-----------------------------------+----------------------------------------------------------------------------------------------------------------------+ | don | minimum online duration | :math:`T_{on} v_{g,d} - u_{g,d} \leq 0` | +---------+-----------------------------------+----------------------------------------------------------------------------------------------------------------------+ | doff | minimum offline duration | :math:`T_{off} w_{g,d} - (1 - u_{g,d}) \leq 0` | +---------+-----------------------------------+----------------------------------------------------------------------------------------------------------------------+ | pdumax | unserved demand upper bound | :math:`p_{d,u} - p_{d,s}^{+} c_{trl,d} 1_{tl} \leq 0` | +---------+-----------------------------------+----------------------------------------------------------------------------------------------------------------------+ | cdgb | Select DG power from pg | :math:`I_{DG} p_g - p_{g,DG} = 0` | +---------+-----------------------------------+----------------------------------------------------------------------------------------------------------------------+ Vars ---------------------------------- +-------+----------------------+-----------------------------------------+--------+-------------+------------+ | Name | Symbol | Description | Unit | Source | Properties | +=======+======================+=========================================+========+=============+============+ | pg | :math:`p_g` | 2D Gen power | *p.u.* | StaticGen.p | | +-------+----------------------+-----------------------------------------+--------+-------------+------------+ | vBus | :math:`v_{Bus}` | 2D Bus voltage | *p.u.* | Bus.v | | +-------+----------------------+-----------------------------------------+--------+-------------+------------+ | aBus | :math:`\theta_{bus}` | 2D Bus angle | *rad* | Bus.a | | +-------+----------------------+-----------------------------------------+--------+-------------+------------+ | prns | :math:`p_{r, ns}` | 2D Non-spinning reserve | | StaticGen | nonneg | +-------+----------------------+-----------------------------------------+--------+-------------+------------+ | prs | :math:`p_{r,s}` | 2D Spinning reserve | *p.u.* | StaticGen | nonneg | +-------+----------------------+-----------------------------------------+--------+-------------+------------+ | ugd | :math:`u_{g,d}` | commitment decision | | StaticGen.u | boolean | +-------+----------------------+-----------------------------------------+--------+-------------+------------+ | vgd | :math:`v_{g,d}` | startup action | | StaticGen.u | boolean | +-------+----------------------+-----------------------------------------+--------+-------------+------------+ | wgd | :math:`w_{g,d}` | shutdown action | | StaticGen.u | boolean | +-------+----------------------+-----------------------------------------+--------+-------------+------------+ | zug | :math:`z_{ug}` | Aux var, :math:`z_{ug} = u_{g,d} * p_g` | | StaticGen | pos | +-------+----------------------+-----------------------------------------+--------+-------------+------------+ | pdu | :math:`p_{d,u}` | unserved demand | *p.u.* | StaticLoad | nonneg | +-------+----------------------+-----------------------------------------+--------+-------------+------------+ | pgdg | :math:`p_{g,DG}` | DG output power | *p.u.* | DG | | +-------+----------------------+-----------------------------------------+--------+-------------+------------+ ExpressionCalcs ---------------------------------- +------+---------------------------------------+---------------------+----------+--------+ | Name | Description | Expression | Unit | Source | +======+=======================================+=====================+==========+========+ | pi | LMP, dual of | :math:`\phi[pb]` | *$/p.u.* | Bus | +------+---------------------------------------+---------------------+----------+--------+ | mu1 | Lagrange multipliers, dual of | :math:`\phi[plflb]` | *$/p.u.* | Line | +------+---------------------------------------+---------------------+----------+--------+ | mu2 | Lagrange multipliers, dual of | :math:`\phi[plfub]` | *$/p.u.* | Line | +------+---------------------------------------+---------------------+----------+--------+ Services --------- +---------+-----------------------+------------------------------------------------------+-----------+ | Name | Symbol | Description | Type | +=========+=======================+======================================================+===========+ | pd | :math:`p_{d}` | effective active demand | NumOpDual | +---------+-----------------------+------------------------------------------------------+-----------+ | isb | :math:`I_{sb}` | Index slack bus from all buses | VarSelect | +---------+-----------------------+------------------------------------------------------+-----------+ | ctrle | :math:`c_{trl, e}` | Reshaped controllability | NumOpDual | +---------+-----------------------+------------------------------------------------------+-----------+ | nctrl | :math:`c_{trl,n}` | Effective Gen uncontrollability | NumOp | +---------+-----------------------+------------------------------------------------------+-----------+ | nctrle | :math:`c_{trl,n,e}` | Reshaped non-controllability | NumOpDual | +---------+-----------------------+------------------------------------------------------+-----------+ | gs | :math:`S_{g}` | Sum Gen vars vector in shape of area | ZonalSum | +---------+-----------------------+------------------------------------------------------+-----------+ | ds | :math:`S_{d}` | Sum pd vector in shape of area | ZonalSum | +---------+-----------------------+------------------------------------------------------+-----------+ | pdz | :math:`p_{d,z}` | zonal total load | NumOpDual | +---------+-----------------------+------------------------------------------------------+-----------+ | tlv | :math:`1_{tl}` | time length vector | NumOp | +---------+-----------------------+------------------------------------------------------+-----------+ | pds | :math:`p_{d,s}` | Scaled load | LoadScale | +---------+-----------------------+------------------------------------------------------+-----------+ | Mr | :math:`M_{r}` | Subtraction matrix for ramping | RampSub | +---------+-----------------------+------------------------------------------------------+-----------+ | RR30 | :math:`R_{30,R}` | Repeated ramp rate | NumHstack | +---------+-----------------------+------------------------------------------------------+-----------+ | dnsrpz | :math:`d_{nsr, p, z}` | zonal non-spinning reserve requirement in percentage | NumOpDual | +---------+-----------------------+------------------------------------------------------+-----------+ | dnsr | :math:`d_{nsr}` | zonal non-spinning reserve requirement | NumOpDual | +---------+-----------------------+------------------------------------------------------+-----------+ | dsrpz | :math:`d_{s,r, p, z}` | zonal spinning reserve requirement in percentage | NumOpDual | +---------+-----------------------+------------------------------------------------------+-----------+ | dsr | :math:`d_{s,r,z}` | zonal spinning reserve requirement | NumOpDual | +---------+-----------------------+------------------------------------------------------+-----------+ | Mzug | :math:`M_{zug}` | 10 times of max of pmax as big M for zug | NumOp | +---------+-----------------------+------------------------------------------------------+-----------+ | Con | :math:`T_{on}` | minimum ON coefficient | MinDur | +---------+-----------------------+------------------------------------------------------+-----------+ | Coff | :math:`T_{off}` | minimum OFF coefficient | MinDur | +---------+-----------------------+------------------------------------------------------+-----------+ | pdsp | :math:`p_{d,s}^{+}` | positive demand | NumOp | +---------+-----------------------+------------------------------------------------------+-----------+ | idg | :math:`I_{DG}` | Index DG power from pg | VarSelect | +---------+-----------------------+------------------------------------------------------+-----------+ Parameters ---------------------------------- +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | Name | Symbol | Description | Unit | Source | +===========+===========================+===================================================+==============+======================+ | ug | :math:`u_{g}` | Gen connection status | | StaticGen.u | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | pg0 | :math:`p_{g, 0}` | Gen initial active power | *p.u.* | StaticGen.p0 | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | gsh | :math:`g_{sh}` | shunt conductance | | Shunt.g | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | buss | :math:`B_{us,s}` | Bus slack | | Slack.bus | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | ud | :math:`u_{d}` | Load connection status | | StaticLoad.u | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | pd0 | :math:`p_{d,0}` | active demand | *p.u.* | StaticLoad.p0 | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | Cg | :math:`C_{g}` | Gen connection matrix | | MatProcessor.Cg | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | Cl | :math:`C_{l}` | Load connection matrix | | MatProcessor.Cl | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | CftT | :math:`C_{ft}^T` | Transpose of line connection matrix | | MatProcessor.CftT | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | Csh | :math:`C_{sh}` | Shunt connection matrix | | MatProcessor.Csh | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | Bbus | :math:`B_{bus}` | Bus admittance matrix | | MatProcessor.Bbus | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | Bf | :math:`B_{f}` | Bf matrix | | MatProcessor.Bf | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | Pbusinj | :math:`P_{bus}^{inj}` | Bus power injection vector | | MatProcessor.Pbusinj | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | Pfinj | :math:`P_{f}^{inj}` | Line power injection vector | | MatProcessor.Pfinj | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | c2 | :math:`c_{2}` | Gen cost coefficient 2 | *$/(p.u.^2)* | GCost.c2 | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | c1 | :math:`c_{1}` | Gen cost coefficient 1 | *$/(p.u.)* | GCost.c1 | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | c0 | :math:`c_{0}` | Gen cost coefficient 0 | *$* | GCost.c0 | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | ctrl | :math:`c_{trl}` | Gen controllability | | StaticGen.ctrl | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | pmax | :math:`p_{g, max}` | Gen maximum active power | *p.u.* | StaticGen.pmax | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | pmin | :math:`p_{g, min}` | Gen minimum active power | *p.u.* | StaticGen.pmin | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | ul | :math:`u_{l}` | Line connection status | | Line.u | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | rate_a | :math:`R_{ATEA}` | long-term flow limit | *p.u.* | Line.rate_a | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | amax | :math:`\theta_{bus, max}` | max line angle difference | | Line.amax | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | amin | :math:`\theta_{bus, min}` | min line angle difference | | Line.amin | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | zg | :math:`z_{one,g}` | Gen area | | StaticGen.area | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | zd | :math:`z_{one,d}` | Load area | | StaticLoad.area | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | R10 | :math:`R_{10}` | 10-min ramp rate | *p.u./h* | StaticGen.R10 | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | timeslot | :math:`t_{s,idx}` | Time slot for multi-period UC | | UCSlot.idx | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | sd | :math:`s_{d}` | area load scaling factor for UC | | UCSlotLoad.sd | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | R30 | :math:`R_{30}` | 30-min ramp rate | *p.u./h* | StaticGen.R30 | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | cnsr | :math:`c_{nsr}` | cost for non-spinning reserve | *$/(p.u.*h)* | NSRCost.cnsr | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | dnsr | :math:`d_{nsr}` | non-spinning reserve requirement in percentage | *%* | NSR.demand | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | dsr | :math:`d_{sr}` | spinning reserve requirement in percentage | *%* | SR.demand | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | csr | :math:`c_{sr}` | cost for spinning reserve | *$/(p.u.*h)* | SRCost.csr | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | csu | :math:`c_{su}` | startup cost | *$* | GCost.csu | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | csd | :math:`c_{sd}` | shutdown cost | *$* | GCost.csd | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | cdp | :math:`c_{d,p}` | penalty for unserved load | *$/(p.u.*h)* | DCost.cdp | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | dctrl | :math:`c_{trl,d}` | load controllability | | StaticLoad.ctrl | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | td1 | :math:`t_{d1}` | minimum ON duration | *h* | StaticGen.td1 | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | td2 | :math:`t_{d2}` | minimum OFF duration | *h* | StaticGen.td2 | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | gendg | :math:`g_{DG}` | gen of DG | | DG.gen | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | gammapd | :math:`\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 | :math:`T_{cfg}` | 1 | time interval in hours | | +--------+-----------------+-------+------------------------+-----------------+ .. _UCES: -------------------------------------------------------------------------------- UCES -------------------------------------------------------------------------------- UC with energy storage :ref:`ESD1`. Objective ---------------------------------- +------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Unit | Expression | +======+================================================================================================================================================================================================================================================================================================+ | *$* | :math:`min. T_{cfg}^{2} \sum(c_{2} p_g^{2})+ T_{cfg} \sum(c_{1} p_g)+ \sum(u_{g} c_{0} 1_{tl})+ \sum(c_{su} v_{g,d} + c_{sd} w_{g,d}) + T_{cfg} \sum(c_{sr} p_{r,s} + c_{nsr} p_{r, ns} + c_{d,p} p_{d,u})+ 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 | :math:`B_{f} \theta_{bus} + P_{f}^{inj}` | *p.u.* | Line | +--------+----------------+-----------------------------------------------------------------+--------+-----------+ | pmaxe | Effective pmax | :math:`c_{trl,n} p_{g, 0} u_{g,d} + c_{trl} p_{g, max} u_{g,d}` | *p.u.* | StaticGen | +--------+----------------+-----------------------------------------------------------------+--------+-----------+ | pmine | Effective pmin | :math:`c_{trl} p_{g, min} u_{g,d} + c_{trl,n} p_{g, 0} u_{g,d}` | *p.u.* | StaticGen | +--------+----------------+-----------------------------------------------------------------+--------+-----------+ Constraints ---------------------------------- +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | Name | Description | Expression | +=========+===================================+========================================================================================================================+ | pb | power balance | :math:`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` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | sbus | align slack bus angle | :math:`I_{sb} \theta_{bus} = 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | pglb | pg min | :math:`-p_g + p_{g, min, e} \leq 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | pgub | pg max | :math:`p_g - p_{g, max, e} \leq 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | plflb | line flow lower bound | :math:`-B_{f} \theta_{bus} - P_{f}^{inj} - R_{ATEA} 1_{tl} \leq 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | plfub | line flow upper bound | :math:`B_{f} \theta_{bus} + P_{f}^{inj} - R_{ATEA} 1_{tl} \leq 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | alflb | line angle difference lower bound | :math:`-C_{ft}^T \theta_{bus} - \theta_{bus, max} 1_{tl} \leq 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | alfub | line angle difference upper bound | :math:`C_{ft}^T \theta_{bus} - \theta_{bus, max} 1_{tl} \leq 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | prnsb | non-spinning reserve balance | :math:`1-u_{g,d} p_{g, max} 1_{tl} - p_{r, ns} = 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | rnsr | non-spinning reserve requirement | :math:`-S_{g} p_{r, ns} + d_{nsr} \leq 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | prsb | spinning reserve balance | :math:`u_{g,d} p_{g, max} 1_{tl} - z_{u_{g}} - p_{r,s} = 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | rsr | spinning reserve requirement | :math:`-S_{g} p_{r,s} + d_{s,r,z} \leq 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | actv | startup action | :math:`u_{g,d} M_{r} - v_{g,d}[:, 1:] = 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | actv0 | initial startup action | :math:`u_{g,d}[:, 0] - u_{g}[:, 0] - v_{g,d}[:, 0] = 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | actw | shutdown action | :math:`-u_{g,d} M_{r} - w_{g,d}[:, 1:] = 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | actw0 | initial shutdown action | :math:`-u_{g,d}[:, 0] + u_{g}[:, 0] - w_{g,d}[:, 0] = 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | zuglb | zug lower bound | :math:`- z_{u_{g}} + p_g \leq 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | zugub | zug upper bound | :math:`z_{u_{g}} - p_g - M_{zug} (1 - u_{g,d}) \leq 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | zugub2 | zug upper bound | :math:`z_{u_{g}} - M_{zug} u_{g,d} \leq 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | don | minimum online duration | :math:`T_{on} v_{g,d} - u_{g,d} \leq 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | doff | minimum offline duration | :math:`T_{off} w_{g,d} - (1 - u_{g,d}) \leq 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | pdumax | unserved demand upper bound | :math:`p_{d,u} - p_{d,s}^{+} c_{trl,d} 1_{tl} \leq 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | cesd | Select pce and pde from pg | :math:`I_{ESD} p_g + p_{c,ESD} - p_{d,ESD} = 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | SOClb | SOC lower bound | :math:`-SOC + SOC_{min} \leq 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | SOCub | SOC upper bound | :math:`SOC - SOC_{max} \leq 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | SOCb | ESD1 SOC balance | :math:`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 | :math:`SOC_{end} - SOC[:, -1] \leq 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | cdgb | Select DG power from pg | :math:`I_{DG} p_g - p_{g,DG} = 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | cdb | Charging decision bound | :math:`u_{c,ESD} + u_{d,ESD} - 1 = 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | zce1 | zce bound 1 | :math:`-z_{c,ESD} + p_{c,ESD} \leq 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | zce2 | zce bound 2 | :math:`z_{c,ESD} - p_{c,ESD} - M_{big} (1-u_{c,ESD}) \leq 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | zce3 | zce bound 3 | :math:`z_{c,ESD} - M_{big} u_{c,ESD} \leq 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | zde1 | zde bound 1 | :math:`-z_{d,ESD} + p_{d,ESD} \leq 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | zde2 | zde bound 2 | :math:`z_{d,ESD} - p_{d,ESD} - M_{big} (1-u_{d,ESD}) \leq 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | zde3 | zde bound 3 | :math:`z_{d,ESD} - M_{big} u_{d,ESD} \leq 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | tcdr | Minimum charging duration | :math:`(t_{dc0} > 0) (t_{dc} > t_{dc0}) - u_{c,ESD} \leq 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | tddr | Minimum discharging duration | :math:`(t_{dd0} > 0) (t_{dd} > t_{dd0}) - u_{d,ESD} \leq 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | SOCb0 | ESD1 SOC initial balance | :math:`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 | :math:`p_g` | 2D Gen power | *p.u.* | StaticGen.p | | +-------+----------------------+----------------------------------------------------------------+------------+-------------+------------+ | vBus | :math:`v_{Bus}` | 2D Bus voltage | *p.u.* | Bus.v | | +-------+----------------------+----------------------------------------------------------------+------------+-------------+------------+ | aBus | :math:`\theta_{bus}` | 2D Bus angle | *rad* | Bus.a | | +-------+----------------------+----------------------------------------------------------------+------------+-------------+------------+ | prns | :math:`p_{r, ns}` | 2D Non-spinning reserve | | StaticGen | nonneg | +-------+----------------------+----------------------------------------------------------------+------------+-------------+------------+ | prs | :math:`p_{r,s}` | 2D Spinning reserve | *p.u.* | StaticGen | nonneg | +-------+----------------------+----------------------------------------------------------------+------------+-------------+------------+ | ugd | :math:`u_{g,d}` | commitment decision | | StaticGen.u | boolean | +-------+----------------------+----------------------------------------------------------------+------------+-------------+------------+ | vgd | :math:`v_{g,d}` | startup action | | StaticGen.u | boolean | +-------+----------------------+----------------------------------------------------------------+------------+-------------+------------+ | wgd | :math:`w_{g,d}` | shutdown action | | StaticGen.u | boolean | +-------+----------------------+----------------------------------------------------------------+------------+-------------+------------+ | zug | :math:`z_{ug}` | Aux var, :math:`z_{ug} = u_{g,d} * p_g` | | StaticGen | pos | +-------+----------------------+----------------------------------------------------------------+------------+-------------+------------+ | pdu | :math:`p_{d,u}` | unserved demand | *p.u.* | StaticLoad | nonneg | +-------+----------------------+----------------------------------------------------------------+------------+-------------+------------+ | SOC | :math:`SOC` | ESD1 State of Charge | *p.u. (%)* | ESD1 | nonneg | +-------+----------------------+----------------------------------------------------------------+------------+-------------+------------+ | pce | :math:`p_{c,ESD}` | ESD1 charging power | *p.u.* | ESD1 | nonneg | +-------+----------------------+----------------------------------------------------------------+------------+-------------+------------+ | pde | :math:`p_{d,ESD}` | ESD1 discharging power | *p.u.* | ESD1 | nonneg | +-------+----------------------+----------------------------------------------------------------+------------+-------------+------------+ | pgdg | :math:`p_{g,DG}` | DG output power | *p.u.* | DG | | +-------+----------------------+----------------------------------------------------------------+------------+-------------+------------+ | ucd | :math:`u_{c,ESD}` | ESD1 charging decision | | ESD1 | boolean | +-------+----------------------+----------------------------------------------------------------+------------+-------------+------------+ | udd | :math:`u_{d,ESD}` | ESD1 discharging decision | | ESD1 | boolean | +-------+----------------------+----------------------------------------------------------------+------------+-------------+------------+ | zce | :math:`z_{c,ESD}` | Aux var for charging, :math:`z_{c,ESD}=u_{c,ESD}*p_{c,ESD}` | | ESD1 | nonneg | +-------+----------------------+----------------------------------------------------------------+------------+-------------+------------+ | zde | :math:`z_{d,ESD}` | Aux var for discharging, :math:`z_{d,ESD}=u_{d,ESD}*p_{d,ESD}` | | ESD1 | nonneg | +-------+----------------------+----------------------------------------------------------------+------------+-------------+------------+ ExpressionCalcs ---------------------------------- +------+---------------------------------------+---------------------+----------+--------+ | Name | Description | Expression | Unit | Source | +======+=======================================+=====================+==========+========+ | pi | LMP, dual of | :math:`\phi[pb]` | *$/p.u.* | Bus | +------+---------------------------------------+---------------------+----------+--------+ | mu1 | Lagrange multipliers, dual of | :math:`\phi[plflb]` | *$/p.u.* | Line | +------+---------------------------------------+---------------------+----------+--------+ | mu2 | Lagrange multipliers, dual of | :math:`\phi[plfub]` | *$/p.u.* | Line | +------+---------------------------------------+---------------------+----------+--------+ Services --------- +---------+--------------------------+------------------------------------------------------+-----------+ | Name | Symbol | Description | Type | +=========+==========================+======================================================+===========+ | pd | :math:`p_{d}` | effective active demand | NumOpDual | +---------+--------------------------+------------------------------------------------------+-----------+ | isb | :math:`I_{sb}` | Index slack bus from all buses | VarSelect | +---------+--------------------------+------------------------------------------------------+-----------+ | ctrle | :math:`c_{trl, e}` | Reshaped controllability | NumOpDual | +---------+--------------------------+------------------------------------------------------+-----------+ | nctrl | :math:`c_{trl,n}` | Effective Gen uncontrollability | NumOp | +---------+--------------------------+------------------------------------------------------+-----------+ | nctrle | :math:`c_{trl,n,e}` | Reshaped non-controllability | NumOpDual | +---------+--------------------------+------------------------------------------------------+-----------+ | gs | :math:`S_{g}` | Sum Gen vars vector in shape of area | ZonalSum | +---------+--------------------------+------------------------------------------------------+-----------+ | ds | :math:`S_{d}` | Sum pd vector in shape of area | ZonalSum | +---------+--------------------------+------------------------------------------------------+-----------+ | pdz | :math:`p_{d,z}` | zonal total load | NumOpDual | +---------+--------------------------+------------------------------------------------------+-----------+ | tlv | :math:`1_{tl}` | time length vector | NumOp | +---------+--------------------------+------------------------------------------------------+-----------+ | pds | :math:`p_{d,s}` | Scaled load | LoadScale | +---------+--------------------------+------------------------------------------------------+-----------+ | Mr | :math:`M_{r}` | Subtraction matrix for ramping | RampSub | +---------+--------------------------+------------------------------------------------------+-----------+ | RR30 | :math:`R_{30,R}` | Repeated ramp rate | NumHstack | +---------+--------------------------+------------------------------------------------------+-----------+ | dnsrpz | :math:`d_{nsr, p, z}` | zonal non-spinning reserve requirement in percentage | NumOpDual | +---------+--------------------------+------------------------------------------------------+-----------+ | dnsr | :math:`d_{nsr}` | zonal non-spinning reserve requirement | NumOpDual | +---------+--------------------------+------------------------------------------------------+-----------+ | dsrpz | :math:`d_{s,r, p, z}` | zonal spinning reserve requirement in percentage | NumOpDual | +---------+--------------------------+------------------------------------------------------+-----------+ | dsr | :math:`d_{s,r,z}` | zonal spinning reserve requirement | NumOpDual | +---------+--------------------------+------------------------------------------------------+-----------+ | Mzug | :math:`M_{zug}` | 10 times of max of pmax as big M for zug | NumOp | +---------+--------------------------+------------------------------------------------------+-----------+ | Con | :math:`T_{on}` | minimum ON coefficient | MinDur | +---------+--------------------------+------------------------------------------------------+-----------+ | Coff | :math:`T_{off}` | minimum OFF coefficient | MinDur | +---------+--------------------------+------------------------------------------------------+-----------+ | pdsp | :math:`p_{d,s}^{+}` | positive demand | NumOp | +---------+--------------------------+------------------------------------------------------+-----------+ | REtaD | :math:`\frac{1}{\eta_d}` | | NumOp | +---------+--------------------------+------------------------------------------------------+-----------+ | Mb | :math:`M_{big}` | 10 times of max of pmax as big M | NumOp | +---------+--------------------------+------------------------------------------------------+-----------+ | ies | :math:`I_{ESD}` | Index ESD from StaticGen | VarSelect | +---------+--------------------------+------------------------------------------------------+-----------+ | idg | :math:`I_{DG}` | Index DG power from pg | VarSelect | +---------+--------------------------+------------------------------------------------------+-----------+ | Mre | :math:`M_{r,ES}` | Subtraction matrix for SOC | RampSub | +---------+--------------------------+------------------------------------------------------+-----------+ | EnR | :math:`E_{n,R}` | Repeated En as 2D matrix, (ng, ng-1) | NumHstack | +---------+--------------------------+------------------------------------------------------+-----------+ | EtaCR | :math:`\eta_{c,R}` | Repeated Etac as 2D matrix, (ng, ng-1) | NumHstack | +---------+--------------------------+------------------------------------------------------+-----------+ | REtaDR | :math:`R_{\eta_d,R}` | Repeated REtaD as 2D matrix, (ng, ng-1) | NumHstack | +---------+--------------------------+------------------------------------------------------+-----------+ Parameters ---------------------------------- +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | Name | Symbol | Description | Unit | Source | +===========+===========================+===================================================+==============+======================+ | ug | :math:`u_{g}` | Gen connection status | | StaticGen.u | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | pg0 | :math:`p_{g, 0}` | Gen initial active power | *p.u.* | StaticGen.p0 | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | gsh | :math:`g_{sh}` | shunt conductance | | Shunt.g | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | buss | :math:`B_{us,s}` | Bus slack | | Slack.bus | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | ud | :math:`u_{d}` | Load connection status | | StaticLoad.u | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | pd0 | :math:`p_{d,0}` | active demand | *p.u.* | StaticLoad.p0 | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | Cg | :math:`C_{g}` | Gen connection matrix | | MatProcessor.Cg | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | Cl | :math:`C_{l}` | Load connection matrix | | MatProcessor.Cl | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | CftT | :math:`C_{ft}^T` | Transpose of line connection matrix | | MatProcessor.CftT | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | Csh | :math:`C_{sh}` | Shunt connection matrix | | MatProcessor.Csh | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | Bbus | :math:`B_{bus}` | Bus admittance matrix | | MatProcessor.Bbus | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | Bf | :math:`B_{f}` | Bf matrix | | MatProcessor.Bf | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | Pbusinj | :math:`P_{bus}^{inj}` | Bus power injection vector | | MatProcessor.Pbusinj | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | Pfinj | :math:`P_{f}^{inj}` | Line power injection vector | | MatProcessor.Pfinj | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | c2 | :math:`c_{2}` | Gen cost coefficient 2 | *$/(p.u.^2)* | GCost.c2 | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | c1 | :math:`c_{1}` | Gen cost coefficient 1 | *$/(p.u.)* | GCost.c1 | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | c0 | :math:`c_{0}` | Gen cost coefficient 0 | *$* | GCost.c0 | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | ctrl | :math:`c_{trl}` | Gen controllability | | StaticGen.ctrl | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | pmax | :math:`p_{g, max}` | Gen maximum active power | *p.u.* | StaticGen.pmax | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | pmin | :math:`p_{g, min}` | Gen minimum active power | *p.u.* | StaticGen.pmin | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | ul | :math:`u_{l}` | Line connection status | | Line.u | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | rate_a | :math:`R_{ATEA}` | long-term flow limit | *p.u.* | Line.rate_a | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | amax | :math:`\theta_{bus, max}` | max line angle difference | | Line.amax | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | amin | :math:`\theta_{bus, min}` | min line angle difference | | Line.amin | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | zg | :math:`z_{one,g}` | Gen area | | StaticGen.area | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | zd | :math:`z_{one,d}` | Load area | | StaticLoad.area | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | R10 | :math:`R_{10}` | 10-min ramp rate | *p.u./h* | StaticGen.R10 | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | timeslot | :math:`t_{s,idx}` | Time slot for multi-period UC | | UCSlot.idx | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | sd | :math:`s_{d}` | area load scaling factor for UC | | UCSlotLoad.sd | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | R30 | :math:`R_{30}` | 30-min ramp rate | *p.u./h* | StaticGen.R30 | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | cnsr | :math:`c_{nsr}` | cost for non-spinning reserve | *$/(p.u.*h)* | NSRCost.cnsr | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | dnsr | :math:`d_{nsr}` | non-spinning reserve requirement in percentage | *%* | NSR.demand | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | dsr | :math:`d_{sr}` | spinning reserve requirement in percentage | *%* | SR.demand | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | csr | :math:`c_{sr}` | cost for spinning reserve | *$/(p.u.*h)* | SRCost.csr | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | csu | :math:`c_{su}` | startup cost | *$* | GCost.csu | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | csd | :math:`c_{sd}` | shutdown cost | *$* | GCost.csd | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | cdp | :math:`c_{d,p}` | penalty for unserved load | *$/(p.u.*h)* | DCost.cdp | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | dctrl | :math:`c_{trl,d}` | load controllability | | StaticLoad.ctrl | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | td1 | :math:`t_{d1}` | minimum ON duration | *h* | StaticGen.td1 | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | td2 | :math:`t_{d2}` | minimum OFF duration | *h* | StaticGen.td2 | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | En | :math:`E_n` | Rated energy capacity | *MWh* | ESD1.En | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | SOCmax | :math:`SOC_{max}` | Maximum allowed value for SOC in limiter | | ESD1.SOCmax | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | SOCmin | :math:`SOC_{min}` | Minimum required value for SOC in limiter | | ESD1.SOCmin | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | SOCinit | :math:`SOC_{init}` | Initial SOC | | ESD1.SOCinit | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | SOCend | :math:`SOC_{end}` | Target SOC at the end of the period | | ESD1.SOCend | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | EtaC | :math:`\eta_c` | Efficiency during charging | | ESD1.EtaC | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | EtaD | :math:`\eta_d` | Efficiency during discharging | | ESD1.EtaD | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | cesdc | :math:`c_{c,ESD}` | Charging cost | *$/p.u.*h* | ESD1.cesdc | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | cesdd | :math:`c_{d,ESD}` | Discharging cost | *$/p.u.*h* | ESD1.cesdd | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | genesd | :math:`g_{ESD}` | gen of ESD | | ESD1.gen | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | gendg | :math:`g_{DG}` | gen of DG | | DG.gen | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | gammapd | :math:`\gamma_{p,DG}` | Ratio of DG.pge w.r.t to that of static generator | | DG.gammap | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | tdc | :math:`t_{dc}` | Minimum charging duration | *h* | ESD1.tdc | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | tdd | :math:`t_{dd}` | Minimum discharging duration | *h* | ESD1.tdd | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | tdc0 | :math:`t_{dc0}` | Initial charging time | *h* | ESD1.tdc0 | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | tdd0 | :math:`t_{dd0}` | Initial discharging time | *h* | ESD1.tdd0 | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ Config Fields in [UCES] +--------+-----------------+-------+------------------------+-----------------+ | Option | Symbol | Value | Info | Accepted values | +========+=================+=======+========================+=================+ | t | :math:`T_{cfg}` | 1 | time interval in hours | | +--------+-----------------+-------+------------------------+-----------------+ .. _UC2: -------------------------------------------------------------------------------- UC2 -------------------------------------------------------------------------------- DC-based unit commitment (UC) using PTDF formulations: 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 ----- - The formulations have 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 | +======+===================================================================================================================================================================================================================================+ | *$* | :math:`min. T_{cfg}^{2} \sum(c_{2} p_g^{2})+ T_{cfg} \sum(c_{1} p_g)+ \sum(u_{g} c_{0} 1_{tl})+ \sum(c_{su} v_{g,d} + c_{sd} w_{g,d}) + T_{cfg} \sum(c_{sr} p_{r,s} + c_{nsr} p_{r, ns} + c_{d,p} p_{d,u})` | +------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ Expressions ---------------------------------- +--------+----------------+---------------------------------------------------------------------------------------------------------+--------+-----------+ | Name | Description | Expression | Unit | Source | +========+================+=========================================================================================================+========+===========+ | plf | 2D Line flow | :math:`P_{TDF} (C_{g} p_g - C_{l} (p_{d,s} - p_{d,u}) - C_{sh} g_{sh} 1_{tl} - P_{bus}^{inj} 1_{tl})` | *p.u.* | Line | +--------+----------------+---------------------------------------------------------------------------------------------------------+--------+-----------+ | pmaxe | Effective pmax | :math:`c_{trl,n} p_{g, 0} u_{g,d} + c_{trl} p_{g, max} u_{g,d}` | *p.u.* | StaticGen | +--------+----------------+---------------------------------------------------------------------------------------------------------+--------+-----------+ | pmine | Effective pmin | :math:`c_{trl} p_{g, min} u_{g,d} + c_{trl,n} p_{g, 0} u_{g,d}` | *p.u.* | StaticGen | +--------+----------------+---------------------------------------------------------------------------------------------------------+--------+-----------+ Constraints ---------------------------------- +---------+-----------------------------------+--------------------------------------------------------------------+ | Name | Description | Expression | +=========+===================================+====================================================================+ | pb | power balance | :math:`\sum(p_g, axis=0) - \sum(p_{d,s} - p_{d,u}, axis=0) = 0` | +---------+-----------------------------------+--------------------------------------------------------------------+ | sbus | align slack bus angle | :math:`I_{sb} \theta_{bus} = 0` | +---------+-----------------------------------+--------------------------------------------------------------------+ | pglb | pg min | :math:`-p_g + p_{g, min, e} \leq 0` | +---------+-----------------------------------+--------------------------------------------------------------------+ | pgub | pg max | :math:`p_g - p_{g, max, e} \leq 0` | +---------+-----------------------------------+--------------------------------------------------------------------+ | plflb | line flow lower bound | :math:`-B_{f} \theta_{bus} - P_{f}^{inj} - R_{ATEA} 1_{tl} \leq 0` | +---------+-----------------------------------+--------------------------------------------------------------------+ | plfub | line flow upper bound | :math:`B_{f} \theta_{bus} + P_{f}^{inj} - R_{ATEA} 1_{tl} \leq 0` | +---------+-----------------------------------+--------------------------------------------------------------------+ | alflb | line angle difference lower bound | :math:`-C_{ft}^T \theta_{bus} - \theta_{bus, max} 1_{tl} \leq 0` | +---------+-----------------------------------+--------------------------------------------------------------------+ | alfub | line angle difference upper bound | :math:`C_{ft}^T \theta_{bus} - \theta_{bus, max} 1_{tl} \leq 0` | +---------+-----------------------------------+--------------------------------------------------------------------+ | prnsb | non-spinning reserve balance | :math:`1-u_{g,d} p_{g, max} 1_{tl} - p_{r, ns} = 0` | +---------+-----------------------------------+--------------------------------------------------------------------+ | rnsr | non-spinning reserve requirement | :math:`-S_{g} p_{r, ns} + d_{nsr} \leq 0` | +---------+-----------------------------------+--------------------------------------------------------------------+ | prsb | spinning reserve balance | :math:`u_{g,d} p_{g, max} 1_{tl} - z_{u_{g}} - p_{r,s} = 0` | +---------+-----------------------------------+--------------------------------------------------------------------+ | rsr | spinning reserve requirement | :math:`-S_{g} p_{r,s} + d_{s,r,z} \leq 0` | +---------+-----------------------------------+--------------------------------------------------------------------+ | actv | startup action | :math:`u_{g,d} M_{r} - v_{g,d}[:, 1:] = 0` | +---------+-----------------------------------+--------------------------------------------------------------------+ | actv0 | initial startup action | :math:`u_{g,d}[:, 0] - u_{g}[:, 0] - v_{g,d}[:, 0] = 0` | +---------+-----------------------------------+--------------------------------------------------------------------+ | actw | shutdown action | :math:`-u_{g,d} M_{r} - w_{g,d}[:, 1:] = 0` | +---------+-----------------------------------+--------------------------------------------------------------------+ | actw0 | initial shutdown action | :math:`-u_{g,d}[:, 0] + u_{g}[:, 0] - w_{g,d}[:, 0] = 0` | +---------+-----------------------------------+--------------------------------------------------------------------+ | zuglb | zug lower bound | :math:`- z_{u_{g}} + p_g \leq 0` | +---------+-----------------------------------+--------------------------------------------------------------------+ | zugub | zug upper bound | :math:`z_{u_{g}} - p_g - M_{zug} (1 - u_{g,d}) \leq 0` | +---------+-----------------------------------+--------------------------------------------------------------------+ | zugub2 | zug upper bound | :math:`z_{u_{g}} - M_{zug} u_{g,d} \leq 0` | +---------+-----------------------------------+--------------------------------------------------------------------+ | don | minimum online duration | :math:`T_{on} v_{g,d} - u_{g,d} \leq 0` | +---------+-----------------------------------+--------------------------------------------------------------------+ | doff | minimum offline duration | :math:`T_{off} w_{g,d} - (1 - u_{g,d}) \leq 0` | +---------+-----------------------------------+--------------------------------------------------------------------+ | pdumax | unserved demand upper bound | :math:`p_{d,u} - p_{d,s}^{+} c_{trl,d} 1_{tl} \leq 0` | +---------+-----------------------------------+--------------------------------------------------------------------+ Vars ---------------------------------- +-------+----------------------+-----------------------------------------+--------+-------------+------------+ | Name | Symbol | Description | Unit | Source | Properties | +=======+======================+=========================================+========+=============+============+ | pg | :math:`p_g` | 2D Gen power | *p.u.* | StaticGen.p | | +-------+----------------------+-----------------------------------------+--------+-------------+------------+ | vBus | :math:`v_{Bus}` | 2D Bus voltage | *p.u.* | Bus.v | | +-------+----------------------+-----------------------------------------+--------+-------------+------------+ | aBus | :math:`\theta_{bus}` | 2D Bus angle | *rad* | Bus.a | | +-------+----------------------+-----------------------------------------+--------+-------------+------------+ | prns | :math:`p_{r, ns}` | 2D Non-spinning reserve | | StaticGen | nonneg | +-------+----------------------+-----------------------------------------+--------+-------------+------------+ | prs | :math:`p_{r,s}` | 2D Spinning reserve | *p.u.* | StaticGen | nonneg | +-------+----------------------+-----------------------------------------+--------+-------------+------------+ | ugd | :math:`u_{g,d}` | commitment decision | | StaticGen.u | boolean | +-------+----------------------+-----------------------------------------+--------+-------------+------------+ | vgd | :math:`v_{g,d}` | startup action | | StaticGen.u | boolean | +-------+----------------------+-----------------------------------------+--------+-------------+------------+ | wgd | :math:`w_{g,d}` | shutdown action | | StaticGen.u | boolean | +-------+----------------------+-----------------------------------------+--------+-------------+------------+ | zug | :math:`z_{ug}` | Aux var, :math:`z_{ug} = u_{g,d} * p_g` | | StaticGen | pos | +-------+----------------------+-----------------------------------------+--------+-------------+------------+ | pdu | :math:`p_{d,u}` | unserved demand | *p.u.* | StaticLoad | nonneg | +-------+----------------------+-----------------------------------------+--------+-------------+------------+ ExpressionCalcs ---------------------------------- +------+---------------------------------------+-----------------------------------------------------------+----------+--------+ | Name | Description | Expression | Unit | Source | +======+=======================================+===========================================================+==========+========+ | pi | locational marginal price (LMP) | :math:`-\phi[pb] - P_{TDF}^T (\phi[plfub] - \phi[plflb])` | *$/p.u.* | Bus | +------+---------------------------------------+-----------------------------------------------------------+----------+--------+ | mu1 | Lagrange multipliers, dual of | :math:`\phi[plflb]` | *$/p.u.* | Line | +------+---------------------------------------+-----------------------------------------------------------+----------+--------+ | mu2 | Lagrange multipliers, dual of | :math:`\phi[plfub]` | *$/p.u.* | Line | +------+---------------------------------------+-----------------------------------------------------------+----------+--------+ | pie | Energy price | :math:`-\phi[pb]` | *$/p.u.* | | +------+---------------------------------------+-----------------------------------------------------------+----------+--------+ | pic | Congestion price | :math:`-P_{TDF}^T (\phi[plfub] - \phi[plflb])` | *$/p.u.* | Bus | +------+---------------------------------------+-----------------------------------------------------------+----------+--------+ Services --------- +---------+-----------------------+------------------------------------------------------+-----------+ | Name | Symbol | Description | Type | +=========+=======================+======================================================+===========+ | pd | :math:`p_{d}` | effective active demand | NumOpDual | +---------+-----------------------+------------------------------------------------------+-----------+ | isb | :math:`I_{sb}` | Index slack bus from all buses | VarSelect | +---------+-----------------------+------------------------------------------------------+-----------+ | ctrle | :math:`c_{trl, e}` | Reshaped controllability | NumOpDual | +---------+-----------------------+------------------------------------------------------+-----------+ | nctrl | :math:`c_{trl,n}` | Effective Gen uncontrollability | NumOp | +---------+-----------------------+------------------------------------------------------+-----------+ | nctrle | :math:`c_{trl,n,e}` | Reshaped non-controllability | NumOpDual | +---------+-----------------------+------------------------------------------------------+-----------+ | gs | :math:`S_{g}` | Sum Gen vars vector in shape of area | ZonalSum | +---------+-----------------------+------------------------------------------------------+-----------+ | ds | :math:`S_{d}` | Sum pd vector in shape of area | ZonalSum | +---------+-----------------------+------------------------------------------------------+-----------+ | pdz | :math:`p_{d,z}` | zonal total load | NumOpDual | +---------+-----------------------+------------------------------------------------------+-----------+ | tlv | :math:`1_{tl}` | time length vector | NumOp | +---------+-----------------------+------------------------------------------------------+-----------+ | pds | :math:`p_{d,s}` | Scaled load | LoadScale | +---------+-----------------------+------------------------------------------------------+-----------+ | Mr | :math:`M_{r}` | Subtraction matrix for ramping | RampSub | +---------+-----------------------+------------------------------------------------------+-----------+ | RR30 | :math:`R_{30,R}` | Repeated ramp rate | NumHstack | +---------+-----------------------+------------------------------------------------------+-----------+ | dnsrpz | :math:`d_{nsr, p, z}` | zonal non-spinning reserve requirement in percentage | NumOpDual | +---------+-----------------------+------------------------------------------------------+-----------+ | dnsr | :math:`d_{nsr}` | zonal non-spinning reserve requirement | NumOpDual | +---------+-----------------------+------------------------------------------------------+-----------+ | dsrpz | :math:`d_{s,r, p, z}` | zonal spinning reserve requirement in percentage | NumOpDual | +---------+-----------------------+------------------------------------------------------+-----------+ | dsr | :math:`d_{s,r,z}` | zonal spinning reserve requirement | NumOpDual | +---------+-----------------------+------------------------------------------------------+-----------+ | Mzug | :math:`M_{zug}` | 10 times of max of pmax as big M for zug | NumOp | +---------+-----------------------+------------------------------------------------------+-----------+ | Con | :math:`T_{on}` | minimum ON coefficient | MinDur | +---------+-----------------------+------------------------------------------------------+-----------+ | Coff | :math:`T_{off}` | minimum OFF coefficient | MinDur | +---------+-----------------------+------------------------------------------------------+-----------+ | pdsp | :math:`p_{d,s}^{+}` | positive demand | NumOp | +---------+-----------------------+------------------------------------------------------+-----------+ | PTDFt | :math:`P_{TDF}^T` | PTDF transpose | NumOp | +---------+-----------------------+------------------------------------------------------+-----------+ Parameters ---------------------------------- +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | Name | Symbol | Description | Unit | Source | +===========+===========================+================================================+==============+======================+ | ug | :math:`u_{g}` | Gen connection status | | StaticGen.u | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | pg0 | :math:`p_{g, 0}` | Gen initial active power | *p.u.* | StaticGen.p0 | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | gsh | :math:`g_{sh}` | shunt conductance | | Shunt.g | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | buss | :math:`B_{us,s}` | Bus slack | | Slack.bus | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | ud | :math:`u_{d}` | Load connection status | | StaticLoad.u | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | pd0 | :math:`p_{d,0}` | active demand | *p.u.* | StaticLoad.p0 | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | Cg | :math:`C_{g}` | Gen connection matrix | | MatProcessor.Cg | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | Cl | :math:`C_{l}` | Load connection matrix | | MatProcessor.Cl | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | CftT | :math:`C_{ft}^T` | Transpose of line connection matrix | | MatProcessor.CftT | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | Csh | :math:`C_{sh}` | Shunt connection matrix | | MatProcessor.Csh | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | Bbus | :math:`B_{bus}` | Bus admittance matrix | | MatProcessor.Bbus | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | Bf | :math:`B_{f}` | Bf matrix | | MatProcessor.Bf | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | Pbusinj | :math:`P_{bus}^{inj}` | Bus power injection vector | | MatProcessor.Pbusinj | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | Pfinj | :math:`P_{f}^{inj}` | Line power injection vector | | MatProcessor.Pfinj | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | c2 | :math:`c_{2}` | Gen cost coefficient 2 | *$/(p.u.^2)* | GCost.c2 | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | c1 | :math:`c_{1}` | Gen cost coefficient 1 | *$/(p.u.)* | GCost.c1 | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | c0 | :math:`c_{0}` | Gen cost coefficient 0 | *$* | GCost.c0 | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | ctrl | :math:`c_{trl}` | Gen controllability | | StaticGen.ctrl | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | pmax | :math:`p_{g, max}` | Gen maximum active power | *p.u.* | StaticGen.pmax | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | pmin | :math:`p_{g, min}` | Gen minimum active power | *p.u.* | StaticGen.pmin | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | ul | :math:`u_{l}` | Line connection status | | Line.u | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | rate_a | :math:`R_{ATEA}` | long-term flow limit | *p.u.* | Line.rate_a | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | amax | :math:`\theta_{bus, max}` | max line angle difference | | Line.amax | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | amin | :math:`\theta_{bus, min}` | min line angle difference | | Line.amin | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | zg | :math:`z_{one,g}` | Gen area | | StaticGen.area | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | zd | :math:`z_{one,d}` | Load area | | StaticLoad.area | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | R10 | :math:`R_{10}` | 10-min ramp rate | *p.u./h* | StaticGen.R10 | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | timeslot | :math:`t_{s,idx}` | Time slot for multi-period UC | | UCSlot.idx | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | sd | :math:`s_{d}` | area load scaling factor for UC | | UCSlotLoad.sd | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | R30 | :math:`R_{30}` | 30-min ramp rate | *p.u./h* | StaticGen.R30 | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | cnsr | :math:`c_{nsr}` | cost for non-spinning reserve | *$/(p.u.*h)* | NSRCost.cnsr | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | dnsr | :math:`d_{nsr}` | non-spinning reserve requirement in percentage | *%* | NSR.demand | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | dsr | :math:`d_{sr}` | spinning reserve requirement in percentage | *%* | SR.demand | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | csr | :math:`c_{sr}` | cost for spinning reserve | *$/(p.u.*h)* | SRCost.csr | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | csu | :math:`c_{su}` | startup cost | *$* | GCost.csu | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | csd | :math:`c_{sd}` | shutdown cost | *$* | GCost.csd | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | cdp | :math:`c_{d,p}` | penalty for unserved load | *$/(p.u.*h)* | DCost.cdp | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | dctrl | :math:`c_{trl,d}` | load controllability | | StaticLoad.ctrl | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | td1 | :math:`t_{d1}` | minimum ON duration | *h* | StaticGen.td1 | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | td2 | :math:`t_{d2}` | minimum OFF duration | *h* | StaticGen.td2 | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | PTDF | :math:`P_{TDF}` | PTDF | | MatProcessor.PTDF | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ Config Fields in [UC2] +--------+-----------------+-------+------------------------+-----------------+ | Option | Symbol | Value | Info | Accepted values | +========+=================+=======+========================+=================+ | t | :math:`T_{cfg}` | 1 | time interval in hours | | +--------+-----------------+-------+------------------------+-----------------+ .. _UC2DG: -------------------------------------------------------------------------------- UC2DG -------------------------------------------------------------------------------- UC with distributed generation :ref:`DG`, using PTDF formulations. Note that UCDG only includes DG output power. If ESD1 is included, UCES should be used instead, otherwise there is no SOC. Objective ---------------------------------- +------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Unit | Expression | +======+===================================================================================================================================================================================================================================+ | *$* | :math:`min. T_{cfg}^{2} \sum(c_{2} p_g^{2})+ T_{cfg} \sum(c_{1} p_g)+ \sum(u_{g} c_{0} 1_{tl})+ \sum(c_{su} v_{g,d} + c_{sd} w_{g,d}) + T_{cfg} \sum(c_{sr} p_{r,s} + c_{nsr} p_{r, ns} + c_{d,p} p_{d,u})` | +------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ Expressions ---------------------------------- +--------+----------------+---------------------------------------------------------------------------------------------------------+--------+-----------+ | Name | Description | Expression | Unit | Source | +========+================+=========================================================================================================+========+===========+ | plf | 2D Line flow | :math:`P_{TDF} (C_{g} p_g - C_{l} (p_{d,s} - p_{d,u}) - C_{sh} g_{sh} 1_{tl} - P_{bus}^{inj} 1_{tl})` | *p.u.* | Line | +--------+----------------+---------------------------------------------------------------------------------------------------------+--------+-----------+ | pmaxe | Effective pmax | :math:`c_{trl,n} p_{g, 0} u_{g,d} + c_{trl} p_{g, max} u_{g,d}` | *p.u.* | StaticGen | +--------+----------------+---------------------------------------------------------------------------------------------------------+--------+-----------+ | pmine | Effective pmin | :math:`c_{trl} p_{g, min} u_{g,d} + c_{trl,n} p_{g, 0} u_{g,d}` | *p.u.* | StaticGen | +--------+----------------+---------------------------------------------------------------------------------------------------------+--------+-----------+ Constraints ---------------------------------- +---------+-----------------------------------+--------------------------------------------------------------------+ | Name | Description | Expression | +=========+===================================+====================================================================+ | pb | power balance | :math:`\sum(p_g, axis=0) - \sum(p_{d,s} - p_{d,u}, axis=0) = 0` | +---------+-----------------------------------+--------------------------------------------------------------------+ | sbus | align slack bus angle | :math:`I_{sb} \theta_{bus} = 0` | +---------+-----------------------------------+--------------------------------------------------------------------+ | pglb | pg min | :math:`-p_g + p_{g, min, e} \leq 0` | +---------+-----------------------------------+--------------------------------------------------------------------+ | pgub | pg max | :math:`p_g - p_{g, max, e} \leq 0` | +---------+-----------------------------------+--------------------------------------------------------------------+ | plflb | line flow lower bound | :math:`-B_{f} \theta_{bus} - P_{f}^{inj} - R_{ATEA} 1_{tl} \leq 0` | +---------+-----------------------------------+--------------------------------------------------------------------+ | plfub | line flow upper bound | :math:`B_{f} \theta_{bus} + P_{f}^{inj} - R_{ATEA} 1_{tl} \leq 0` | +---------+-----------------------------------+--------------------------------------------------------------------+ | alflb | line angle difference lower bound | :math:`-C_{ft}^T \theta_{bus} - \theta_{bus, max} 1_{tl} \leq 0` | +---------+-----------------------------------+--------------------------------------------------------------------+ | alfub | line angle difference upper bound | :math:`C_{ft}^T \theta_{bus} - \theta_{bus, max} 1_{tl} \leq 0` | +---------+-----------------------------------+--------------------------------------------------------------------+ | prnsb | non-spinning reserve balance | :math:`1-u_{g,d} p_{g, max} 1_{tl} - p_{r, ns} = 0` | +---------+-----------------------------------+--------------------------------------------------------------------+ | rnsr | non-spinning reserve requirement | :math:`-S_{g} p_{r, ns} + d_{nsr} \leq 0` | +---------+-----------------------------------+--------------------------------------------------------------------+ | prsb | spinning reserve balance | :math:`u_{g,d} p_{g, max} 1_{tl} - z_{u_{g}} - p_{r,s} = 0` | +---------+-----------------------------------+--------------------------------------------------------------------+ | rsr | spinning reserve requirement | :math:`-S_{g} p_{r,s} + d_{s,r,z} \leq 0` | +---------+-----------------------------------+--------------------------------------------------------------------+ | actv | startup action | :math:`u_{g,d} M_{r} - v_{g,d}[:, 1:] = 0` | +---------+-----------------------------------+--------------------------------------------------------------------+ | actv0 | initial startup action | :math:`u_{g,d}[:, 0] - u_{g}[:, 0] - v_{g,d}[:, 0] = 0` | +---------+-----------------------------------+--------------------------------------------------------------------+ | actw | shutdown action | :math:`-u_{g,d} M_{r} - w_{g,d}[:, 1:] = 0` | +---------+-----------------------------------+--------------------------------------------------------------------+ | actw0 | initial shutdown action | :math:`-u_{g,d}[:, 0] + u_{g}[:, 0] - w_{g,d}[:, 0] = 0` | +---------+-----------------------------------+--------------------------------------------------------------------+ | zuglb | zug lower bound | :math:`- z_{u_{g}} + p_g \leq 0` | +---------+-----------------------------------+--------------------------------------------------------------------+ | zugub | zug upper bound | :math:`z_{u_{g}} - p_g - M_{zug} (1 - u_{g,d}) \leq 0` | +---------+-----------------------------------+--------------------------------------------------------------------+ | zugub2 | zug upper bound | :math:`z_{u_{g}} - M_{zug} u_{g,d} \leq 0` | +---------+-----------------------------------+--------------------------------------------------------------------+ | don | minimum online duration | :math:`T_{on} v_{g,d} - u_{g,d} \leq 0` | +---------+-----------------------------------+--------------------------------------------------------------------+ | doff | minimum offline duration | :math:`T_{off} w_{g,d} - (1 - u_{g,d}) \leq 0` | +---------+-----------------------------------+--------------------------------------------------------------------+ | pdumax | unserved demand upper bound | :math:`p_{d,u} - p_{d,s}^{+} c_{trl,d} 1_{tl} \leq 0` | +---------+-----------------------------------+--------------------------------------------------------------------+ | cdgb | Select DG power from pg | :math:`I_{DG} p_g - p_{g,DG} = 0` | +---------+-----------------------------------+--------------------------------------------------------------------+ Vars ---------------------------------- +-------+----------------------+-----------------------------------------+--------+-------------+------------+ | Name | Symbol | Description | Unit | Source | Properties | +=======+======================+=========================================+========+=============+============+ | pg | :math:`p_g` | 2D Gen power | *p.u.* | StaticGen.p | | +-------+----------------------+-----------------------------------------+--------+-------------+------------+ | vBus | :math:`v_{Bus}` | 2D Bus voltage | *p.u.* | Bus.v | | +-------+----------------------+-----------------------------------------+--------+-------------+------------+ | aBus | :math:`\theta_{bus}` | 2D Bus angle | *rad* | Bus.a | | +-------+----------------------+-----------------------------------------+--------+-------------+------------+ | prns | :math:`p_{r, ns}` | 2D Non-spinning reserve | | StaticGen | nonneg | +-------+----------------------+-----------------------------------------+--------+-------------+------------+ | prs | :math:`p_{r,s}` | 2D Spinning reserve | *p.u.* | StaticGen | nonneg | +-------+----------------------+-----------------------------------------+--------+-------------+------------+ | ugd | :math:`u_{g,d}` | commitment decision | | StaticGen.u | boolean | +-------+----------------------+-----------------------------------------+--------+-------------+------------+ | vgd | :math:`v_{g,d}` | startup action | | StaticGen.u | boolean | +-------+----------------------+-----------------------------------------+--------+-------------+------------+ | wgd | :math:`w_{g,d}` | shutdown action | | StaticGen.u | boolean | +-------+----------------------+-----------------------------------------+--------+-------------+------------+ | zug | :math:`z_{ug}` | Aux var, :math:`z_{ug} = u_{g,d} * p_g` | | StaticGen | pos | +-------+----------------------+-----------------------------------------+--------+-------------+------------+ | pdu | :math:`p_{d,u}` | unserved demand | *p.u.* | StaticLoad | nonneg | +-------+----------------------+-----------------------------------------+--------+-------------+------------+ | pgdg | :math:`p_{g,DG}` | DG output power | *p.u.* | DG | | +-------+----------------------+-----------------------------------------+--------+-------------+------------+ ExpressionCalcs ---------------------------------- +------+---------------------------------------+-----------------------------------------------------------+----------+--------+ | Name | Description | Expression | Unit | Source | +======+=======================================+===========================================================+==========+========+ | pi | locational marginal price (LMP) | :math:`-\phi[pb] - P_{TDF}^T (\phi[plfub] - \phi[plflb])` | *$/p.u.* | Bus | +------+---------------------------------------+-----------------------------------------------------------+----------+--------+ | mu1 | Lagrange multipliers, dual of | :math:`\phi[plflb]` | *$/p.u.* | Line | +------+---------------------------------------+-----------------------------------------------------------+----------+--------+ | mu2 | Lagrange multipliers, dual of | :math:`\phi[plfub]` | *$/p.u.* | Line | +------+---------------------------------------+-----------------------------------------------------------+----------+--------+ | pie | Energy price | :math:`-\phi[pb]` | *$/p.u.* | | +------+---------------------------------------+-----------------------------------------------------------+----------+--------+ | pic | Congestion price | :math:`-P_{TDF}^T (\phi[plfub] - \phi[plflb])` | *$/p.u.* | Bus | +------+---------------------------------------+-----------------------------------------------------------+----------+--------+ Services --------- +---------+-----------------------+------------------------------------------------------+-----------+ | Name | Symbol | Description | Type | +=========+=======================+======================================================+===========+ | pd | :math:`p_{d}` | effective active demand | NumOpDual | +---------+-----------------------+------------------------------------------------------+-----------+ | isb | :math:`I_{sb}` | Index slack bus from all buses | VarSelect | +---------+-----------------------+------------------------------------------------------+-----------+ | ctrle | :math:`c_{trl, e}` | Reshaped controllability | NumOpDual | +---------+-----------------------+------------------------------------------------------+-----------+ | nctrl | :math:`c_{trl,n}` | Effective Gen uncontrollability | NumOp | +---------+-----------------------+------------------------------------------------------+-----------+ | nctrle | :math:`c_{trl,n,e}` | Reshaped non-controllability | NumOpDual | +---------+-----------------------+------------------------------------------------------+-----------+ | gs | :math:`S_{g}` | Sum Gen vars vector in shape of area | ZonalSum | +---------+-----------------------+------------------------------------------------------+-----------+ | ds | :math:`S_{d}` | Sum pd vector in shape of area | ZonalSum | +---------+-----------------------+------------------------------------------------------+-----------+ | pdz | :math:`p_{d,z}` | zonal total load | NumOpDual | +---------+-----------------------+------------------------------------------------------+-----------+ | tlv | :math:`1_{tl}` | time length vector | NumOp | +---------+-----------------------+------------------------------------------------------+-----------+ | pds | :math:`p_{d,s}` | Scaled load | LoadScale | +---------+-----------------------+------------------------------------------------------+-----------+ | Mr | :math:`M_{r}` | Subtraction matrix for ramping | RampSub | +---------+-----------------------+------------------------------------------------------+-----------+ | RR30 | :math:`R_{30,R}` | Repeated ramp rate | NumHstack | +---------+-----------------------+------------------------------------------------------+-----------+ | dnsrpz | :math:`d_{nsr, p, z}` | zonal non-spinning reserve requirement in percentage | NumOpDual | +---------+-----------------------+------------------------------------------------------+-----------+ | dnsr | :math:`d_{nsr}` | zonal non-spinning reserve requirement | NumOpDual | +---------+-----------------------+------------------------------------------------------+-----------+ | dsrpz | :math:`d_{s,r, p, z}` | zonal spinning reserve requirement in percentage | NumOpDual | +---------+-----------------------+------------------------------------------------------+-----------+ | dsr | :math:`d_{s,r,z}` | zonal spinning reserve requirement | NumOpDual | +---------+-----------------------+------------------------------------------------------+-----------+ | Mzug | :math:`M_{zug}` | 10 times of max of pmax as big M for zug | NumOp | +---------+-----------------------+------------------------------------------------------+-----------+ | Con | :math:`T_{on}` | minimum ON coefficient | MinDur | +---------+-----------------------+------------------------------------------------------+-----------+ | Coff | :math:`T_{off}` | minimum OFF coefficient | MinDur | +---------+-----------------------+------------------------------------------------------+-----------+ | pdsp | :math:`p_{d,s}^{+}` | positive demand | NumOp | +---------+-----------------------+------------------------------------------------------+-----------+ | PTDFt | :math:`P_{TDF}^T` | PTDF transpose | NumOp | +---------+-----------------------+------------------------------------------------------+-----------+ | idg | :math:`I_{DG}` | Index DG power from pg | VarSelect | +---------+-----------------------+------------------------------------------------------+-----------+ Parameters ---------------------------------- +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | Name | Symbol | Description | Unit | Source | +===========+===========================+===================================================+==============+======================+ | ug | :math:`u_{g}` | Gen connection status | | StaticGen.u | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | pg0 | :math:`p_{g, 0}` | Gen initial active power | *p.u.* | StaticGen.p0 | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | gsh | :math:`g_{sh}` | shunt conductance | | Shunt.g | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | buss | :math:`B_{us,s}` | Bus slack | | Slack.bus | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | ud | :math:`u_{d}` | Load connection status | | StaticLoad.u | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | pd0 | :math:`p_{d,0}` | active demand | *p.u.* | StaticLoad.p0 | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | Cg | :math:`C_{g}` | Gen connection matrix | | MatProcessor.Cg | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | Cl | :math:`C_{l}` | Load connection matrix | | MatProcessor.Cl | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | CftT | :math:`C_{ft}^T` | Transpose of line connection matrix | | MatProcessor.CftT | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | Csh | :math:`C_{sh}` | Shunt connection matrix | | MatProcessor.Csh | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | Bbus | :math:`B_{bus}` | Bus admittance matrix | | MatProcessor.Bbus | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | Bf | :math:`B_{f}` | Bf matrix | | MatProcessor.Bf | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | Pbusinj | :math:`P_{bus}^{inj}` | Bus power injection vector | | MatProcessor.Pbusinj | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | Pfinj | :math:`P_{f}^{inj}` | Line power injection vector | | MatProcessor.Pfinj | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | c2 | :math:`c_{2}` | Gen cost coefficient 2 | *$/(p.u.^2)* | GCost.c2 | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | c1 | :math:`c_{1}` | Gen cost coefficient 1 | *$/(p.u.)* | GCost.c1 | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | c0 | :math:`c_{0}` | Gen cost coefficient 0 | *$* | GCost.c0 | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | ctrl | :math:`c_{trl}` | Gen controllability | | StaticGen.ctrl | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | pmax | :math:`p_{g, max}` | Gen maximum active power | *p.u.* | StaticGen.pmax | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | pmin | :math:`p_{g, min}` | Gen minimum active power | *p.u.* | StaticGen.pmin | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | ul | :math:`u_{l}` | Line connection status | | Line.u | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | rate_a | :math:`R_{ATEA}` | long-term flow limit | *p.u.* | Line.rate_a | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | amax | :math:`\theta_{bus, max}` | max line angle difference | | Line.amax | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | amin | :math:`\theta_{bus, min}` | min line angle difference | | Line.amin | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | zg | :math:`z_{one,g}` | Gen area | | StaticGen.area | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | zd | :math:`z_{one,d}` | Load area | | StaticLoad.area | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | R10 | :math:`R_{10}` | 10-min ramp rate | *p.u./h* | StaticGen.R10 | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | timeslot | :math:`t_{s,idx}` | Time slot for multi-period UC | | UCSlot.idx | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | sd | :math:`s_{d}` | area load scaling factor for UC | | UCSlotLoad.sd | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | R30 | :math:`R_{30}` | 30-min ramp rate | *p.u./h* | StaticGen.R30 | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | cnsr | :math:`c_{nsr}` | cost for non-spinning reserve | *$/(p.u.*h)* | NSRCost.cnsr | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | dnsr | :math:`d_{nsr}` | non-spinning reserve requirement in percentage | *%* | NSR.demand | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | dsr | :math:`d_{sr}` | spinning reserve requirement in percentage | *%* | SR.demand | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | csr | :math:`c_{sr}` | cost for spinning reserve | *$/(p.u.*h)* | SRCost.csr | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | csu | :math:`c_{su}` | startup cost | *$* | GCost.csu | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | csd | :math:`c_{sd}` | shutdown cost | *$* | GCost.csd | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | cdp | :math:`c_{d,p}` | penalty for unserved load | *$/(p.u.*h)* | DCost.cdp | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | dctrl | :math:`c_{trl,d}` | load controllability | | StaticLoad.ctrl | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | td1 | :math:`t_{d1}` | minimum ON duration | *h* | StaticGen.td1 | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | td2 | :math:`t_{d2}` | minimum OFF duration | *h* | StaticGen.td2 | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | PTDF | :math:`P_{TDF}` | PTDF | | MatProcessor.PTDF | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | gendg | :math:`g_{DG}` | gen of DG | | DG.gen | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | gammapd | :math:`\gamma_{p,DG}` | Ratio of DG.pge w.r.t to that of static generator | | DG.gammap | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ Config Fields in [UC2DG] +--------+-----------------+-------+------------------------+-----------------+ | Option | Symbol | Value | Info | Accepted values | +========+=================+=======+========================+=================+ | t | :math:`T_{cfg}` | 1 | time interval in hours | | +--------+-----------------+-------+------------------------+-----------------+ .. _UC2ES: -------------------------------------------------------------------------------- UC2ES -------------------------------------------------------------------------------- UC with energy storage :ref:`ESD1`, using PTDF formulations. Objective ---------------------------------- +------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Unit | Expression | +======+================================================================================================================================================================================================================================================================================================+ | *$* | :math:`min. T_{cfg}^{2} \sum(c_{2} p_g^{2})+ T_{cfg} \sum(c_{1} p_g)+ \sum(u_{g} c_{0} 1_{tl})+ \sum(c_{su} v_{g,d} + c_{sd} w_{g,d}) + T_{cfg} \sum(c_{sr} p_{r,s} + c_{nsr} p_{r, ns} + c_{d,p} p_{d,u})+ 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 | :math:`P_{TDF} (C_{g} p_g - C_{l} (p_{d,s} - p_{d,u}) - C_{sh} g_{sh} 1_{tl} - P_{bus}^{inj} 1_{tl})` | *p.u.* | Line | +--------+----------------+---------------------------------------------------------------------------------------------------------+--------+-----------+ | pmaxe | Effective pmax | :math:`c_{trl,n} p_{g, 0} u_{g,d} + c_{trl} p_{g, max} u_{g,d}` | *p.u.* | StaticGen | +--------+----------------+---------------------------------------------------------------------------------------------------------+--------+-----------+ | pmine | Effective pmin | :math:`c_{trl} p_{g, min} u_{g,d} + c_{trl,n} p_{g, 0} u_{g,d}` | *p.u.* | StaticGen | +--------+----------------+---------------------------------------------------------------------------------------------------------+--------+-----------+ Constraints ---------------------------------- +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | Name | Description | Expression | +=========+===================================+========================================================================================================================+ | pb | power balance | :math:`\sum(p_g, axis=0) - \sum(p_{d,s} - p_{d,u}, axis=0) = 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | sbus | align slack bus angle | :math:`I_{sb} \theta_{bus} = 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | pglb | pg min | :math:`-p_g + p_{g, min, e} \leq 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | pgub | pg max | :math:`p_g - p_{g, max, e} \leq 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | plflb | line flow lower bound | :math:`-B_{f} \theta_{bus} - P_{f}^{inj} - R_{ATEA} 1_{tl} \leq 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | plfub | line flow upper bound | :math:`B_{f} \theta_{bus} + P_{f}^{inj} - R_{ATEA} 1_{tl} \leq 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | alflb | line angle difference lower bound | :math:`-C_{ft}^T \theta_{bus} - \theta_{bus, max} 1_{tl} \leq 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | alfub | line angle difference upper bound | :math:`C_{ft}^T \theta_{bus} - \theta_{bus, max} 1_{tl} \leq 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | prnsb | non-spinning reserve balance | :math:`1-u_{g,d} p_{g, max} 1_{tl} - p_{r, ns} = 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | rnsr | non-spinning reserve requirement | :math:`-S_{g} p_{r, ns} + d_{nsr} \leq 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | prsb | spinning reserve balance | :math:`u_{g,d} p_{g, max} 1_{tl} - z_{u_{g}} - p_{r,s} = 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | rsr | spinning reserve requirement | :math:`-S_{g} p_{r,s} + d_{s,r,z} \leq 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | actv | startup action | :math:`u_{g,d} M_{r} - v_{g,d}[:, 1:] = 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | actv0 | initial startup action | :math:`u_{g,d}[:, 0] - u_{g}[:, 0] - v_{g,d}[:, 0] = 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | actw | shutdown action | :math:`-u_{g,d} M_{r} - w_{g,d}[:, 1:] = 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | actw0 | initial shutdown action | :math:`-u_{g,d}[:, 0] + u_{g}[:, 0] - w_{g,d}[:, 0] = 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | zuglb | zug lower bound | :math:`- z_{u_{g}} + p_g \leq 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | zugub | zug upper bound | :math:`z_{u_{g}} - p_g - M_{zug} (1 - u_{g,d}) \leq 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | zugub2 | zug upper bound | :math:`z_{u_{g}} - M_{zug} u_{g,d} \leq 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | don | minimum online duration | :math:`T_{on} v_{g,d} - u_{g,d} \leq 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | doff | minimum offline duration | :math:`T_{off} w_{g,d} - (1 - u_{g,d}) \leq 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | pdumax | unserved demand upper bound | :math:`p_{d,u} - p_{d,s}^{+} c_{trl,d} 1_{tl} \leq 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | cesd | Select pce and pde from pg | :math:`I_{ESD} p_g + p_{c,ESD} - p_{d,ESD} = 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | SOClb | SOC lower bound | :math:`-SOC + SOC_{min} \leq 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | SOCub | SOC upper bound | :math:`SOC - SOC_{max} \leq 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | SOCb | ESD1 SOC balance | :math:`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 | :math:`SOC_{end} - SOC[:, -1] \leq 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | cdgb | Select DG power from pg | :math:`I_{DG} p_g - p_{g,DG} = 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | cdb | Charging decision bound | :math:`u_{c,ESD} + u_{d,ESD} - 1 = 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | zce1 | zce bound 1 | :math:`-z_{c,ESD} + p_{c,ESD} \leq 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | zce2 | zce bound 2 | :math:`z_{c,ESD} - p_{c,ESD} - M_{big} (1-u_{c,ESD}) \leq 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | zce3 | zce bound 3 | :math:`z_{c,ESD} - M_{big} u_{c,ESD} \leq 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | zde1 | zde bound 1 | :math:`-z_{d,ESD} + p_{d,ESD} \leq 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | zde2 | zde bound 2 | :math:`z_{d,ESD} - p_{d,ESD} - M_{big} (1-u_{d,ESD}) \leq 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | zde3 | zde bound 3 | :math:`z_{d,ESD} - M_{big} u_{d,ESD} \leq 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | tcdr | Minimum charging duration | :math:`(t_{dc0} > 0) (t_{dc} > t_{dc0}) - u_{c,ESD} \leq 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | tddr | Minimum discharging duration | :math:`(t_{dd0} > 0) (t_{dd} > t_{dd0}) - u_{d,ESD} \leq 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | SOCb0 | ESD1 SOC initial balance | :math:`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 | :math:`p_g` | 2D Gen power | *p.u.* | StaticGen.p | | +-------+----------------------+----------------------------------------------------------------+------------+-------------+------------+ | vBus | :math:`v_{Bus}` | 2D Bus voltage | *p.u.* | Bus.v | | +-------+----------------------+----------------------------------------------------------------+------------+-------------+------------+ | aBus | :math:`\theta_{bus}` | 2D Bus angle | *rad* | Bus.a | | +-------+----------------------+----------------------------------------------------------------+------------+-------------+------------+ | prns | :math:`p_{r, ns}` | 2D Non-spinning reserve | | StaticGen | nonneg | +-------+----------------------+----------------------------------------------------------------+------------+-------------+------------+ | prs | :math:`p_{r,s}` | 2D Spinning reserve | *p.u.* | StaticGen | nonneg | +-------+----------------------+----------------------------------------------------------------+------------+-------------+------------+ | ugd | :math:`u_{g,d}` | commitment decision | | StaticGen.u | boolean | +-------+----------------------+----------------------------------------------------------------+------------+-------------+------------+ | vgd | :math:`v_{g,d}` | startup action | | StaticGen.u | boolean | +-------+----------------------+----------------------------------------------------------------+------------+-------------+------------+ | wgd | :math:`w_{g,d}` | shutdown action | | StaticGen.u | boolean | +-------+----------------------+----------------------------------------------------------------+------------+-------------+------------+ | zug | :math:`z_{ug}` | Aux var, :math:`z_{ug} = u_{g,d} * p_g` | | StaticGen | pos | +-------+----------------------+----------------------------------------------------------------+------------+-------------+------------+ | pdu | :math:`p_{d,u}` | unserved demand | *p.u.* | StaticLoad | nonneg | +-------+----------------------+----------------------------------------------------------------+------------+-------------+------------+ | SOC | :math:`SOC` | ESD1 State of Charge | *p.u. (%)* | ESD1 | nonneg | +-------+----------------------+----------------------------------------------------------------+------------+-------------+------------+ | pce | :math:`p_{c,ESD}` | ESD1 charging power | *p.u.* | ESD1 | nonneg | +-------+----------------------+----------------------------------------------------------------+------------+-------------+------------+ | pde | :math:`p_{d,ESD}` | ESD1 discharging power | *p.u.* | ESD1 | nonneg | +-------+----------------------+----------------------------------------------------------------+------------+-------------+------------+ | pgdg | :math:`p_{g,DG}` | DG output power | *p.u.* | DG | | +-------+----------------------+----------------------------------------------------------------+------------+-------------+------------+ | ucd | :math:`u_{c,ESD}` | ESD1 charging decision | | ESD1 | boolean | +-------+----------------------+----------------------------------------------------------------+------------+-------------+------------+ | udd | :math:`u_{d,ESD}` | ESD1 discharging decision | | ESD1 | boolean | +-------+----------------------+----------------------------------------------------------------+------------+-------------+------------+ | zce | :math:`z_{c,ESD}` | Aux var for charging, :math:`z_{c,ESD}=u_{c,ESD}*p_{c,ESD}` | | ESD1 | nonneg | +-------+----------------------+----------------------------------------------------------------+------------+-------------+------------+ | zde | :math:`z_{d,ESD}` | Aux var for discharging, :math:`z_{d,ESD}=u_{d,ESD}*p_{d,ESD}` | | ESD1 | nonneg | +-------+----------------------+----------------------------------------------------------------+------------+-------------+------------+ ExpressionCalcs ---------------------------------- +------+---------------------------------------+-----------------------------------------------------------+----------+--------+ | Name | Description | Expression | Unit | Source | +======+=======================================+===========================================================+==========+========+ | pi | locational marginal price (LMP) | :math:`-\phi[pb] - P_{TDF}^T (\phi[plfub] - \phi[plflb])` | *$/p.u.* | Bus | +------+---------------------------------------+-----------------------------------------------------------+----------+--------+ | mu1 | Lagrange multipliers, dual of | :math:`\phi[plflb]` | *$/p.u.* | Line | +------+---------------------------------------+-----------------------------------------------------------+----------+--------+ | mu2 | Lagrange multipliers, dual of | :math:`\phi[plfub]` | *$/p.u.* | Line | +------+---------------------------------------+-----------------------------------------------------------+----------+--------+ | pie | Energy price | :math:`-\phi[pb]` | *$/p.u.* | | +------+---------------------------------------+-----------------------------------------------------------+----------+--------+ | pic | Congestion price | :math:`-P_{TDF}^T (\phi[plfub] - \phi[plflb])` | *$/p.u.* | Bus | +------+---------------------------------------+-----------------------------------------------------------+----------+--------+ Services --------- +---------+--------------------------+------------------------------------------------------+-----------+ | Name | Symbol | Description | Type | +=========+==========================+======================================================+===========+ | pd | :math:`p_{d}` | effective active demand | NumOpDual | +---------+--------------------------+------------------------------------------------------+-----------+ | isb | :math:`I_{sb}` | Index slack bus from all buses | VarSelect | +---------+--------------------------+------------------------------------------------------+-----------+ | ctrle | :math:`c_{trl, e}` | Reshaped controllability | NumOpDual | +---------+--------------------------+------------------------------------------------------+-----------+ | nctrl | :math:`c_{trl,n}` | Effective Gen uncontrollability | NumOp | +---------+--------------------------+------------------------------------------------------+-----------+ | nctrle | :math:`c_{trl,n,e}` | Reshaped non-controllability | NumOpDual | +---------+--------------------------+------------------------------------------------------+-----------+ | gs | :math:`S_{g}` | Sum Gen vars vector in shape of area | ZonalSum | +---------+--------------------------+------------------------------------------------------+-----------+ | ds | :math:`S_{d}` | Sum pd vector in shape of area | ZonalSum | +---------+--------------------------+------------------------------------------------------+-----------+ | pdz | :math:`p_{d,z}` | zonal total load | NumOpDual | +---------+--------------------------+------------------------------------------------------+-----------+ | tlv | :math:`1_{tl}` | time length vector | NumOp | +---------+--------------------------+------------------------------------------------------+-----------+ | pds | :math:`p_{d,s}` | Scaled load | LoadScale | +---------+--------------------------+------------------------------------------------------+-----------+ | Mr | :math:`M_{r}` | Subtraction matrix for ramping | RampSub | +---------+--------------------------+------------------------------------------------------+-----------+ | RR30 | :math:`R_{30,R}` | Repeated ramp rate | NumHstack | +---------+--------------------------+------------------------------------------------------+-----------+ | dnsrpz | :math:`d_{nsr, p, z}` | zonal non-spinning reserve requirement in percentage | NumOpDual | +---------+--------------------------+------------------------------------------------------+-----------+ | dnsr | :math:`d_{nsr}` | zonal non-spinning reserve requirement | NumOpDual | +---------+--------------------------+------------------------------------------------------+-----------+ | dsrpz | :math:`d_{s,r, p, z}` | zonal spinning reserve requirement in percentage | NumOpDual | +---------+--------------------------+------------------------------------------------------+-----------+ | dsr | :math:`d_{s,r,z}` | zonal spinning reserve requirement | NumOpDual | +---------+--------------------------+------------------------------------------------------+-----------+ | Mzug | :math:`M_{zug}` | 10 times of max of pmax as big M for zug | NumOp | +---------+--------------------------+------------------------------------------------------+-----------+ | Con | :math:`T_{on}` | minimum ON coefficient | MinDur | +---------+--------------------------+------------------------------------------------------+-----------+ | Coff | :math:`T_{off}` | minimum OFF coefficient | MinDur | +---------+--------------------------+------------------------------------------------------+-----------+ | pdsp | :math:`p_{d,s}^{+}` | positive demand | NumOp | +---------+--------------------------+------------------------------------------------------+-----------+ | PTDFt | :math:`P_{TDF}^T` | PTDF transpose | NumOp | +---------+--------------------------+------------------------------------------------------+-----------+ | REtaD | :math:`\frac{1}{\eta_d}` | | NumOp | +---------+--------------------------+------------------------------------------------------+-----------+ | Mb | :math:`M_{big}` | 10 times of max of pmax as big M | NumOp | +---------+--------------------------+------------------------------------------------------+-----------+ | ies | :math:`I_{ESD}` | Index ESD from StaticGen | VarSelect | +---------+--------------------------+------------------------------------------------------+-----------+ | idg | :math:`I_{DG}` | Index DG power from pg | VarSelect | +---------+--------------------------+------------------------------------------------------+-----------+ | Mre | :math:`M_{r,ES}` | Subtraction matrix for SOC | RampSub | +---------+--------------------------+------------------------------------------------------+-----------+ | EnR | :math:`E_{n,R}` | Repeated En as 2D matrix, (ng, ng-1) | NumHstack | +---------+--------------------------+------------------------------------------------------+-----------+ | EtaCR | :math:`\eta_{c,R}` | Repeated Etac as 2D matrix, (ng, ng-1) | NumHstack | +---------+--------------------------+------------------------------------------------------+-----------+ | REtaDR | :math:`R_{\eta_d,R}` | Repeated REtaD as 2D matrix, (ng, ng-1) | NumHstack | +---------+--------------------------+------------------------------------------------------+-----------+ Parameters ---------------------------------- +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | Name | Symbol | Description | Unit | Source | +===========+===========================+===================================================+==============+======================+ | ug | :math:`u_{g}` | Gen connection status | | StaticGen.u | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | pg0 | :math:`p_{g, 0}` | Gen initial active power | *p.u.* | StaticGen.p0 | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | gsh | :math:`g_{sh}` | shunt conductance | | Shunt.g | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | buss | :math:`B_{us,s}` | Bus slack | | Slack.bus | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | ud | :math:`u_{d}` | Load connection status | | StaticLoad.u | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | pd0 | :math:`p_{d,0}` | active demand | *p.u.* | StaticLoad.p0 | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | Cg | :math:`C_{g}` | Gen connection matrix | | MatProcessor.Cg | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | Cl | :math:`C_{l}` | Load connection matrix | | MatProcessor.Cl | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | CftT | :math:`C_{ft}^T` | Transpose of line connection matrix | | MatProcessor.CftT | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | Csh | :math:`C_{sh}` | Shunt connection matrix | | MatProcessor.Csh | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | Bbus | :math:`B_{bus}` | Bus admittance matrix | | MatProcessor.Bbus | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | Bf | :math:`B_{f}` | Bf matrix | | MatProcessor.Bf | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | Pbusinj | :math:`P_{bus}^{inj}` | Bus power injection vector | | MatProcessor.Pbusinj | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | Pfinj | :math:`P_{f}^{inj}` | Line power injection vector | | MatProcessor.Pfinj | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | c2 | :math:`c_{2}` | Gen cost coefficient 2 | *$/(p.u.^2)* | GCost.c2 | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | c1 | :math:`c_{1}` | Gen cost coefficient 1 | *$/(p.u.)* | GCost.c1 | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | c0 | :math:`c_{0}` | Gen cost coefficient 0 | *$* | GCost.c0 | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | ctrl | :math:`c_{trl}` | Gen controllability | | StaticGen.ctrl | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | pmax | :math:`p_{g, max}` | Gen maximum active power | *p.u.* | StaticGen.pmax | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | pmin | :math:`p_{g, min}` | Gen minimum active power | *p.u.* | StaticGen.pmin | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | ul | :math:`u_{l}` | Line connection status | | Line.u | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | rate_a | :math:`R_{ATEA}` | long-term flow limit | *p.u.* | Line.rate_a | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | amax | :math:`\theta_{bus, max}` | max line angle difference | | Line.amax | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | amin | :math:`\theta_{bus, min}` | min line angle difference | | Line.amin | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | zg | :math:`z_{one,g}` | Gen area | | StaticGen.area | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | zd | :math:`z_{one,d}` | Load area | | StaticLoad.area | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | R10 | :math:`R_{10}` | 10-min ramp rate | *p.u./h* | StaticGen.R10 | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | timeslot | :math:`t_{s,idx}` | Time slot for multi-period UC | | UCSlot.idx | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | sd | :math:`s_{d}` | area load scaling factor for UC | | UCSlotLoad.sd | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | R30 | :math:`R_{30}` | 30-min ramp rate | *p.u./h* | StaticGen.R30 | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | cnsr | :math:`c_{nsr}` | cost for non-spinning reserve | *$/(p.u.*h)* | NSRCost.cnsr | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | dnsr | :math:`d_{nsr}` | non-spinning reserve requirement in percentage | *%* | NSR.demand | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | dsr | :math:`d_{sr}` | spinning reserve requirement in percentage | *%* | SR.demand | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | csr | :math:`c_{sr}` | cost for spinning reserve | *$/(p.u.*h)* | SRCost.csr | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | csu | :math:`c_{su}` | startup cost | *$* | GCost.csu | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | csd | :math:`c_{sd}` | shutdown cost | *$* | GCost.csd | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | cdp | :math:`c_{d,p}` | penalty for unserved load | *$/(p.u.*h)* | DCost.cdp | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | dctrl | :math:`c_{trl,d}` | load controllability | | StaticLoad.ctrl | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | td1 | :math:`t_{d1}` | minimum ON duration | *h* | StaticGen.td1 | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | td2 | :math:`t_{d2}` | minimum OFF duration | *h* | StaticGen.td2 | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | PTDF | :math:`P_{TDF}` | PTDF | | MatProcessor.PTDF | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | En | :math:`E_n` | Rated energy capacity | *MWh* | ESD1.En | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | SOCmax | :math:`SOC_{max}` | Maximum allowed value for SOC in limiter | | ESD1.SOCmax | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | SOCmin | :math:`SOC_{min}` | Minimum required value for SOC in limiter | | ESD1.SOCmin | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | SOCinit | :math:`SOC_{init}` | Initial SOC | | ESD1.SOCinit | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | SOCend | :math:`SOC_{end}` | Target SOC at the end of the period | | ESD1.SOCend | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | EtaC | :math:`\eta_c` | Efficiency during charging | | ESD1.EtaC | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | EtaD | :math:`\eta_d` | Efficiency during discharging | | ESD1.EtaD | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | cesdc | :math:`c_{c,ESD}` | Charging cost | *$/p.u.*h* | ESD1.cesdc | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | cesdd | :math:`c_{d,ESD}` | Discharging cost | *$/p.u.*h* | ESD1.cesdd | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | genesd | :math:`g_{ESD}` | gen of ESD | | ESD1.gen | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | gendg | :math:`g_{DG}` | gen of DG | | DG.gen | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | gammapd | :math:`\gamma_{p,DG}` | Ratio of DG.pge w.r.t to that of static generator | | DG.gammap | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | tdc | :math:`t_{dc}` | Minimum charging duration | *h* | ESD1.tdc | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | tdd | :math:`t_{dd}` | Minimum discharging duration | *h* | ESD1.tdd | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | tdc0 | :math:`t_{dc0}` | Initial charging time | *h* | ESD1.tdc0 | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | tdd0 | :math:`t_{dd0}` | Initial discharging time | *h* | ESD1.tdd0 | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ Config Fields in [UC2ES] +--------+-----------------+-------+------------------------+-----------------+ | Option | Symbol | Value | Info | Accepted values | +========+=================+=======+========================+=================+ | t | :math:`T_{cfg}` | 1 | time interval in hours | | +--------+-----------------+-------+------------------------+-----------------+