.. _DCUC: ================================================================================ DCUC ================================================================================ Type for DC-based unit commitment. Available routines: UC_, UCDG_, UCES_ .. _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 ----- 1. Formulations has been adjusted with interval ``config.t`` 2. 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} z_{u_{g}}^{2} + T_{cfg} c_{1} z_{u_{g}})+ \sum(u_{g} c_{0} 1_{tl}) + T_{cfg} \sum(c_{su} v_{g,d} + c_{sd} w_{g,d} + c_{sr} p_{r,s} + c_{nsr} p_{r, ns} + c_{d,p} p_{d,u})` | +------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 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:`c_{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` | +---------+-----------------------------------+----------------------------------------------------------------------------------------------------------------------+ | 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` | +---------+-----------------------------------+----------------------------------------------------------------------------------------------------------------------+ | 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` | +---------+-----------------------------------+----------------------------------------------------------------------------------------------------------------------+ | 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 | | +-------+----------------------+-----------------------------------------+--------+-------------+------------+ | prs | :math:`p_{r,s}` | 2D Spinning reserve | *p.u.* | StaticGen | nonneg | +-------+----------------------+-----------------------------------------+--------+-------------+------------+ | prns | :math:`p_{r, ns}` | 2D Non-spinning reserve | | 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 | +------+-------------------+------------------+----------+--------+ Services --------- +---------+-----------------------+------------------------------------------------------+-----------+ | Name | Symbol | Description | Type | +=========+=======================+======================================================+===========+ | csb | :math:`c_{sb}` | select slack bus | 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 | +---------+-----------------------+------------------------------------------------------+-----------+ | 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 | +---------+-----------------------+------------------------------------------------------+-----------+ | dnsrpz | :math:`d_{nsr, p, z}` | zonal non-spinning reserve requirement in percentage | NumOpDual | +---------+-----------------------+------------------------------------------------------+-----------+ | dnsr | :math:`d_{nsr}` | zonal non-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 | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | pd | :math:`p_{d}` | 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 | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | sd | :math:`s_{d}` | zonal load factor for UC | | UCTSlot.sd | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | timeslot | :math:`t_{s,idx}` | Time slot for multi-period UC | | UCTSlot.idx | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | R30 | :math:`R_{30}` | 30-min ramp rate | *p.u./h* | StaticGen.R30 | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | dsr | :math:`d_{sr}` | spinning reserve requirement in percentage | *%* | SR.demand | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | csr | :math:`c_{sr}` | cost for spinning reserve | *$/(p.u.*h)* | SRCost.csr | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | 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 | +-----------+---------------------------+------------------------------------------------+--------------+----------------------+ | 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 inlcudes 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} z_{u_{g}}^{2} + T_{cfg} c_{1} z_{u_{g}})+ \sum(u_{g} c_{0} 1_{tl}) + T_{cfg} \sum(c_{su} v_{g,d} + c_{sd} w_{g,d} + c_{sr} p_{r,s} + c_{nsr} p_{r, ns} + c_{d,p} p_{d,u})` | +------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 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:`c_{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` | +---------+-----------------------------------+----------------------------------------------------------------------------------------------------------------------+ | 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` | +---------+-----------------------------------+----------------------------------------------------------------------------------------------------------------------+ | 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` | +---------+-----------------------------------+----------------------------------------------------------------------------------------------------------------------+ | 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:`C_{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 | | +-------+----------------------+-----------------------------------------+--------+-------------+------------+ | prs | :math:`p_{r,s}` | 2D Spinning reserve | *p.u.* | StaticGen | nonneg | +-------+----------------------+-----------------------------------------+--------+-------------+------------+ | prns | :math:`p_{r, ns}` | 2D Non-spinning reserve | | 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 | +------+-------------------+------------------+----------+--------+ Services --------- +---------+-----------------------+------------------------------------------------------+-----------+ | Name | Symbol | Description | Type | +=========+=======================+======================================================+===========+ | csb | :math:`c_{sb}` | select slack bus | 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 | +---------+-----------------------+------------------------------------------------------+-----------+ | 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 | +---------+-----------------------+------------------------------------------------------+-----------+ | dnsrpz | :math:`d_{nsr, p, z}` | zonal non-spinning reserve requirement in percentage | NumOpDual | +---------+-----------------------+------------------------------------------------------+-----------+ | dnsr | :math:`d_{nsr}` | zonal non-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 | +---------+-----------------------+------------------------------------------------------+-----------+ | cd | :math:`C_{DG}` | Select 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 | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | pd | :math:`p_{d}` | 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 | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | sd | :math:`s_{d}` | zonal load factor for UC | | UCTSlot.sd | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | timeslot | :math:`t_{s,idx}` | Time slot for multi-period UC | | UCTSlot.idx | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | R30 | :math:`R_{30}` | 30-min ramp rate | *p.u./h* | StaticGen.R30 | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | dsr | :math:`d_{sr}` | spinning reserve requirement in percentage | *%* | SR.demand | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | csr | :math:`c_{sr}` | cost for spinning reserve | *$/(p.u.*h)* | SRCost.csr | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | 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 | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | 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} z_{u_{g}}^{2} + T_{cfg} c_{1} z_{u_{g}})+ \sum(u_{g} c_{0} 1_{tl}) + T_{cfg} \sum(c_{su} v_{g,d} + c_{sd} w_{g,d} + c_{sr} p_{r,s} + c_{nsr} p_{r, ns} + c_{d,p} p_{d,u})` | +------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 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:`c_{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` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | 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` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | 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` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | 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:`C_{DG} p_g - p_{g,DG} = 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | SOClb | SOC lower bound | :math:`-SOC + SOC_{min} \leq 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | SOCub | SOC upper bound | :math:`SOC - SOC_{max} \leq 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | cescb | Select pce from DG | :math:`C_{ESD} p_{g,DG} - p_{c,ESD} = 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | cesdb | Select pde from DG | :math:`C_{ESD} p_{g,DG} - p_{d,ESD} = 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` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | SOCb | ESD1 SOC balance | :math:`E_{n,R} SOC M_{r,ES} - T_{cfg} \eta_{c,R} z_{c,ESD}[:, 1:] + T_{cfg} R_{\eta_d,R} z_{d,ESD}[:, 1:] = 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | SOCb0 | ESD1 SOC initial balance | :math:`E_n SOC[:, 0] - SOC_{init} - T_{cfg} \eta_c z_{c,ESD}[:, 0] + T_{cfg} \frac{1}{\eta_d} z_{d,ESD}[:, 0] = 0` | +---------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | SOCr | SOC requirement | :math:`SOC[:, -1] - SOC_{init} = 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 | | +-------+----------------------+----------------------------------------------------------------+--------+-------------+------------+ | prs | :math:`p_{r,s}` | 2D Spinning reserve | *p.u.* | StaticGen | nonneg | +-------+----------------------+----------------------------------------------------------------+--------+-------------+------------+ | prns | :math:`p_{r, ns}` | 2D Non-spinning reserve | | 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 | | +-------+----------------------+----------------------------------------------------------------+--------+-------------+------------+ | SOC | :math:`SOC` | ESD1 State of Charge | *%* | ESD1 | pos | +-------+----------------------+----------------------------------------------------------------+--------+-------------+------------+ | pce | :math:`p_{c,ESD}` | ESD1 charging power | *p.u.* | ESD1 | nonneg | +-------+----------------------+----------------------------------------------------------------+--------+-------------+------------+ | pde | :math:`p_{d,ESD}` | ESD1 discharging power | *p.u.* | ESD1 | nonneg | +-------+----------------------+----------------------------------------------------------------+--------+-------------+------------+ | uce | :math:`u_{c,ESD}` | ESD1 charging decision | | ESD1 | boolean | +-------+----------------------+----------------------------------------------------------------+--------+-------------+------------+ | ude | :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 | +------+-------------------+------------------+----------+--------+ Services --------- +---------+--------------------------+------------------------------------------------------+-----------+ | Name | Symbol | Description | Type | +=========+==========================+======================================================+===========+ | csb | :math:`c_{sb}` | select slack bus | 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 | +---------+--------------------------+------------------------------------------------------+-----------+ | 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 | +---------+--------------------------+------------------------------------------------------+-----------+ | dnsrpz | :math:`d_{nsr, p, z}` | zonal non-spinning reserve requirement in percentage | NumOpDual | +---------+--------------------------+------------------------------------------------------+-----------+ | dnsr | :math:`d_{nsr}` | zonal non-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 | +---------+--------------------------+------------------------------------------------------+-----------+ | cd | :math:`C_{DG}` | Select DG power from pg | VarSelect | +---------+--------------------------+------------------------------------------------------+-----------+ | REtaD | :math:`\frac{1}{\eta_d}` | | NumOp | +---------+--------------------------+------------------------------------------------------+-----------+ | Mb | :math:`M_{big}` | 10 times of max of pmax as big M | NumOp | +---------+--------------------------+------------------------------------------------------+-----------+ | ces | :math:`C_{ESD}` | Select ESD power from DG | 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 | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | pd | :math:`p_{d}` | 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 | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | sd | :math:`s_{d}` | zonal load factor for UC | | UCTSlot.sd | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | timeslot | :math:`t_{s,idx}` | Time slot for multi-period UC | | UCTSlot.idx | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | R30 | :math:`R_{30}` | 30-min ramp rate | *p.u./h* | StaticGen.R30 | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | dsr | :math:`d_{sr}` | spinning reserve requirement in percentage | *%* | SR.demand | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | csr | :math:`c_{sr}` | cost for spinning reserve | *$/(p.u.*h)* | SRCost.csr | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | 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 | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | 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 | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | 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 | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | EtaC | :math:`\eta_c` | Efficiency during charging | *%* | ESD1.EtaC | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | EtaD | :math:`\eta_d` | Efficiency during discharging | *%* | ESD1.EtaD | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | genesd | :math:`g_{ESD}` | gen of ESD1 | | ESD1.idx | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ Config Fields in [UCES] +--------+-----------------+-------+------------------------+-----------------+ | Option | Symbol | Value | Info | Accepted values | +========+=================+=======+========================+=================+ | t | :math:`T_{cfg}` | 1 | time interval in hours | | +--------+-----------------+-------+------------------------+-----------------+