.. _DCED: ================================================================================ DCED ================================================================================ Type for DC-based economic dispatch. Common Parameters: c2, c1, c0, pmax, pmin, pd, ptdf, rate_a Common Vars: pg Common Constraints: pb, lub, llb Available routines: DCOPF_, DCOPF2_, RTED_, RTEDDG_, RTEDESP_, RTEDES_, RTEDVIS_, RTED2_, RTED2DG_, RTED2ESP_, RTED2ES_, ED_, EDDG_, EDES_, ED2_, ED2DG_, ED2ES_, DCOPF1_ .. _DCOPF: -------------------------------------------------------------------------------- DCOPF -------------------------------------------------------------------------------- DC optimal power flow (DCOPF) using B-theta formulation. Notes ----- - The nodal price is calculated as ``pi`` in ``pic``. - Devices online status of ``StaticGen``, ``StaticLoad``, and ``Shunt`` are considered in the connectivity matrices ``Cft``, ``Cg``, ``Cl``, and ``Csh``. References ---------- 1. R. D. Zimmerman, C. E. Murillo-Sanchez, and R. J. Thomas, “MATPOWER: Steady-State Operations, Planning, and Analysis Tools for Power Systems Research and Education,” IEEE Trans. Power Syst., vol. 26, no. 1, pp. 12-19, Feb. 2011 2. Y. Chen et al., "Security-Constrained Unit Commitment for Electricity Market: Modeling, Solution Methods, and Future Challenges," in IEEE Transactions on Power Systems, vol. 38, no. 5, pp. 4668-4681, Sept. 2023 Objective ---------------------------------- +------+----------------------------------------------------------------------+ | Unit | Expression | +======+======================================================================+ | *$* | :math:`min. \sum(c_{2} p_g^{2})+ \sum(c_{1} p_g)+ \sum(u_{g} c_{0})` | +------+----------------------------------------------------------------------+ Expressions ---------------------------------- +--------+----------------+------------------------------------------------------+--------+-----------+ | Name | Description | Expression | Unit | Source | +========+================+======================================================+========+===========+ | plf | Line flow | :math:`B_{f} \theta_{bus} + P_{f}^{inj}` | *p.u.* | Line | +--------+----------------+------------------------------------------------------+--------+-----------+ | pmaxe | Effective pmax | :math:`c_{trl,n,e} p_{g, 0} + c_{trl, e} p_{g, max}` | *p.u.* | StaticGen | +--------+----------------+------------------------------------------------------+--------+-----------+ | pmine | Effective pmin | :math:`c_{trl,n,e} p_{g, 0} + c_{trl, e} p_{g, min}` | *p.u.* | StaticGen | +--------+----------------+------------------------------------------------------+--------+-----------+ Constraints ---------------------------------- +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | Name | Description | Expression | +========+===================================+============================================================================================+ | pb | power balance | :math:`B_{bus} \theta_{bus} + P_{bus}^{inj} + C_{l} p_{d} + C_{sh} g_{sh} - C_{g} p_g = 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | sbus | align slack bus angle | :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:`-p_{lf} - u_{l} R_{ATEA} \leq 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | plfub | line flow upper bound | :math:`p_{lf} - u_{l} R_{ATEA} \leq 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | alflb | line angle difference lower bound | :math:`-C_{ft}^T \theta_{bus} + \theta_{bus, min} \leq 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | alfub | line angle difference upper bound | :math:`C_{ft}^T \theta_{bus} - \theta_{bus, max} \leq 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ Vars ---------------------------------- +-------+----------------------+------------------------------------+--------+-------------+------------+ | Name | Symbol | Description | Unit | Source | Properties | +=======+======================+====================================+========+=============+============+ | pg | :math:`p_g` | Gen active power | *p.u.* | StaticGen.p | | +-------+----------------------+------------------------------------+--------+-------------+------------+ | vBus | :math:`v_{Bus}` | Bus voltage magnitude, placeholder | *p.u.* | Bus.v | | +-------+----------------------+------------------------------------+--------+-------------+------------+ | aBus | :math:`\theta_{bus}` | Bus voltage angle | *rad* | Bus.a | | +-------+----------------------+------------------------------------+--------+-------------+------------+ 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}` | Effective Gen controllability | NumOpDual | +---------+---------------------+---------------------------------+-----------+ | nctrl | :math:`c_{trl,n}` | Effective Gen uncontrollability | NumOp | +---------+---------------------+---------------------------------+-----------+ | nctrle | :math:`c_{trl,n,e}` | Effective Gen uncontrollability | NumOpDual | +---------+---------------------+---------------------------------+-----------+ 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 | +----------+---------------------------+-------------------------------------+--------------+----------------------+ .. _DCOPF2: -------------------------------------------------------------------------------- DCOPF2 -------------------------------------------------------------------------------- DC optimal power flow (DCOPF) using PTDF formulation. For large cases, it is recommended to build the PTDF first, especially when incremental build is necessary. Notes ----- - This routine requires PTDF matrix. - LMP ``pi`` is calculated with two parts, energy price and congestion price. - Bus angle ``aBus`` is calculated after solving the problem. - In export results, ``pi`` and ``pic`` are kept for each bus, while ``pie`` can be restored manually by ``pie = pi - pic`` if needed. Warning ------- In this implementation, the dual variables for constraints have opposite signs compared to the mathematical formulation: 1. The dual of `pb` returns a negative value, so energy price is computed as `-pb.dual_variables[0]`. 2. Similarly, a minus sign is applied to the duals of `plfub` and `plflb` when calculating congestion price. The reason for this sign difference is not yet fully understood. References ---------- 1. R. D. Zimmerman, C. E. Murillo-Sanchez, and R. J. Thomas, “MATPOWER: Steady-State Operations, Planning, and Analysis Tools for Power Systems Research and Education,” IEEE Trans. Power Syst., vol. 26, no. 1, pp. 12-19, Feb. 2011 2. Y. Chen et al., "Security-Constrained Unit Commitment for Electricity Market: Modeling, Solution Methods, and Future Challenges," in IEEE Transactions on Power Systems, vol. 38, no. 5, pp. 4668-4681, Sept. 2023 Objective ---------------------------------- +------+----------------------------------------------------------------------+ | Unit | Expression | +======+======================================================================+ | *$* | :math:`min. \sum(c_{2} p_g^{2})+ \sum(c_{1} p_g)+ \sum(u_{g} c_{0})` | +------+----------------------------------------------------------------------+ Expressions ---------------------------------- +--------+----------------+-----------------------------------------------------------------------------+--------+-----------+ | Name | Description | Expression | Unit | Source | +========+================+=============================================================================+========+===========+ | plf | Line flow | :math:`P_{TDF} (C_{g} p_g - C_{l} p_{d} - C_{sh} g_{sh} - P_{bus}^{inj})` | *p.u.* | Line | +--------+----------------+-----------------------------------------------------------------------------+--------+-----------+ | pmaxe | Effective pmax | :math:`c_{trl,n,e} p_{g, 0} + c_{trl, e} p_{g, max}` | *p.u.* | StaticGen | +--------+----------------+-----------------------------------------------------------------------------+--------+-----------+ | pmine | Effective pmin | :math:`c_{trl,n,e} p_{g, 0} + c_{trl, e} p_{g, min}` | *p.u.* | StaticGen | +--------+----------------+-----------------------------------------------------------------------------+--------+-----------+ Constraints ---------------------------------- +--------+-----------------------------------+-----------------------------------------------------------+ | Name | Description | Expression | +========+===================================+===========================================================+ | pb | power balance | :math:`\sum(p_g) - \sum(p_{d}) = 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:`-p_{lf} - u_{l} R_{ATEA} \leq 0` | +--------+-----------------------------------+-----------------------------------------------------------+ | plfub | line flow upper bound | :math:`p_{lf} - u_{l} R_{ATEA} \leq 0` | +--------+-----------------------------------+-----------------------------------------------------------+ | alflb | line angle difference lower bound | :math:`-C_{ft}^T \theta_{bus} + \theta_{bus, min} \leq 0` | +--------+-----------------------------------+-----------------------------------------------------------+ | alfub | line angle difference upper bound | :math:`C_{ft}^T \theta_{bus} - \theta_{bus, max} \leq 0` | +--------+-----------------------------------+-----------------------------------------------------------+ Vars ---------------------------------- +-------+----------------------+------------------------------------+--------+-------------+------------+ | Name | Symbol | Description | Unit | Source | Properties | +=======+======================+====================================+========+=============+============+ | pg | :math:`p_g` | Gen active power | *p.u.* | StaticGen.p | | +-------+----------------------+------------------------------------+--------+-------------+------------+ | vBus | :math:`v_{Bus}` | Bus voltage magnitude, placeholder | *p.u.* | Bus.v | | +-------+----------------------+------------------------------------+--------+-------------+------------+ | aBus | :math:`\theta_{bus}` | Bus voltage angle | *rad* | Bus.a | | +-------+----------------------+------------------------------------+--------+-------------+------------+ 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}` | Effective Gen controllability | NumOpDual | +---------+---------------------+---------------------------------+-----------+ | nctrl | :math:`c_{trl,n}` | Effective Gen uncontrollability | NumOp | +---------+---------------------+---------------------------------+-----------+ | nctrle | :math:`c_{trl,n,e}` | Effective Gen uncontrollability | NumOpDual | +---------+---------------------+---------------------------------+-----------+ | 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 | +----------+---------------------------+-------------------------------------+--------------+----------------------+ | PTDF | :math:`P_{TDF}` | PTDF | | MatProcessor.PTDF | +----------+---------------------------+-------------------------------------+--------------+----------------------+ .. _RTED: -------------------------------------------------------------------------------- RTED -------------------------------------------------------------------------------- DC-based real-time economic dispatch (RTED). RTED extends DCOPF with: - Vars for SFR reserve: ``pru`` and ``prd`` - Param for linear SFR cost: ``cru`` and ``crd`` - Param for SFR requirement: ``du`` and ``dd`` - Param for ramping: start point ``pg0`` and ramping limit ``R10`` - Param ``pg0``, which can be retrieved from dynamic simulation results. The function ``dc2ac`` sets the ``vBus`` value from solved ACOPF. Without this conversion, dynamic simulation might fail due to the gap between DC-based dispatch results and AC-based dynamic initialization. Notes ----- - Formulations have been adjusted with interval ``config.t``, 5/60 [Hour] by default. - The tie-line flow related constraints are omitted in this formulation. - Power generation is balanced for the entire system. - SFR is balanced for each area. Objective ---------------------------------- +------+-----------------------------------------------------------------------------------------------------------------------------------------+ | Unit | Expression | +======+=========================================================================================================================================+ | *$* | :math:`min. T_{cfg}^{2} \sum(c_{2} p_g^{2}) + \sum(u_{g} c_{0})+ T_{cfg} \sum(c_{1} p_g + c_{r,u} p_{r,u} + c_{r,d} p_{r,d})` | +------+-----------------------------------------------------------------------------------------------------------------------------------------+ Expressions ---------------------------------- +--------+----------------+------------------------------------------------------+--------+-----------+ | Name | Description | Expression | Unit | Source | +========+================+======================================================+========+===========+ | plf | Line flow | :math:`B_{f} \theta_{bus} + P_{f}^{inj}` | *p.u.* | Line | +--------+----------------+------------------------------------------------------+--------+-----------+ | pmaxe | Effective pmax | :math:`c_{trl,n,e} p_{g, 0} + c_{trl, e} p_{g, max}` | *p.u.* | StaticGen | +--------+----------------+------------------------------------------------------+--------+-----------+ | pmine | Effective pmin | :math:`c_{trl,n,e} p_{g, 0} + c_{trl, e} p_{g, min}` | *p.u.* | StaticGen | +--------+----------------+------------------------------------------------------+--------+-----------+ Constraints ---------------------------------- +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | Name | Description | Expression | +========+===================================+============================================================================================+ | pb | power balance | :math:`B_{bus} \theta_{bus} + P_{bus}^{inj} + C_{l} p_{d} + C_{sh} g_{sh} - C_{g} p_g = 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | sbus | align slack bus angle | :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:`-p_{lf} - u_{l} R_{ATEA} \leq 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | plfub | line flow upper bound | :math:`p_{lf} - u_{l} R_{ATEA} \leq 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | alflb | line angle difference lower bound | :math:`-C_{ft}^T \theta_{bus} + \theta_{bus, min} \leq 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | alfub | line angle difference upper bound | :math:`C_{ft}^T \theta_{bus} - \theta_{bus, max} \leq 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | rbu | RegUp reserve balance | :math:`S_{g} u_{g} p_{r,u} - d_{u, d} = 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | rbd | RegDn reserve balance | :math:`S_{g} u_{g} p_{r,d} - d_{d, d} = 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | rru | RegUp reserve source | :math:`u_{g} (p_g + p_{r,u}) - u_{g} p_{g, max, e} \leq 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | rrd | RegDn reserve source | :math:`u_{g} (-p_g + p_{r,d}) + u_{g} p_{g, min, e} \leq 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | rgu | Gen ramping up | :math:`u_{g} (p_g-p_{g, 0}-R_{10}) \leq 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | rgd | Gen ramping down | :math:`u_{g} (-p_g+p_{g, 0}-R_{10}) \leq 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ Vars ---------------------------------- +-------+----------------------+------------------------------------+--------+-------------+------------+ | Name | Symbol | Description | Unit | Source | Properties | +=======+======================+====================================+========+=============+============+ | pg | :math:`p_g` | Gen active power | *p.u.* | StaticGen.p | | +-------+----------------------+------------------------------------+--------+-------------+------------+ | vBus | :math:`v_{Bus}` | Bus voltage magnitude, placeholder | *p.u.* | Bus.v | | +-------+----------------------+------------------------------------+--------+-------------+------------+ | aBus | :math:`\theta_{bus}` | Bus voltage angle | *rad* | Bus.a | | +-------+----------------------+------------------------------------+--------+-------------+------------+ | pru | :math:`p_{r,u}` | RegUp reserve | *p.u.* | StaticGen | nonneg | +-------+----------------------+------------------------------------+--------+-------------+------------+ | prd | :math:`p_{r,d}` | RegDn reserve | *p.u.* | StaticGen | 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}` | Effective Gen controllability | NumOpDual | +---------+---------------------+--------------------------------------+-----------+ | nctrl | :math:`c_{trl,n}` | Effective Gen uncontrollability | NumOp | +---------+---------------------+--------------------------------------+-----------+ | nctrle | :math:`c_{trl,n,e}` | Effective Gen uncontrollability | 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 | +---------+---------------------+--------------------------------------+-----------+ | dud | :math:`d_{u, d}` | zonal RegUp reserve requirement | NumOpDual | +---------+---------------------+--------------------------------------+-----------+ | ddd | :math:`d_{d, d}` | zonal RegDn reserve requirement | NumOpDual | +---------+---------------------+--------------------------------------+-----------+ 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 | +----------+---------------------------+-------------------------------------------+--------------+----------------------+ | cru | :math:`c_{r,u}` | RegUp reserve coefficient | *$/(p.u.)* | SFRCost.cru | +----------+---------------------------+-------------------------------------------+--------------+----------------------+ | crd | :math:`c_{r,d}` | RegDown reserve coefficient | *$/(p.u.)* | SFRCost.crd | +----------+---------------------------+-------------------------------------------+--------------+----------------------+ | du | :math:`d_{u}` | RegUp reserve requirement in percentage | *%* | SFR.du | +----------+---------------------------+-------------------------------------------+--------------+----------------------+ | dd | :math:`d_{d}` | RegDown reserve requirement in percentage | *%* | SFR.dd | +----------+---------------------------+-------------------------------------------+--------------+----------------------+ Config Fields in [RTED] +--------+-----------------+-------+------------------------+-----------------+ | Option | Symbol | Value | Info | Accepted values | +========+=================+=======+========================+=================+ | t | :math:`T_{cfg}` | 0.083 | time interval in hours | | +--------+-----------------+-------+------------------------+-----------------+ .. _RTEDDG: -------------------------------------------------------------------------------- RTEDDG -------------------------------------------------------------------------------- RTED with distributed generator :ref:`DG`. Note that RTEDDG only includes DG output power. If ESD1 is included, RTEDES should be used instead, otherwise there is no SOC. Objective ---------------------------------- +------+-----------------------------------------------------------------------------------------------------------------------------------------+ | Unit | Expression | +======+=========================================================================================================================================+ | *$* | :math:`min. T_{cfg}^{2} \sum(c_{2} p_g^{2}) + \sum(u_{g} c_{0})+ T_{cfg} \sum(c_{1} p_g + c_{r,u} p_{r,u} + c_{r,d} p_{r,d})` | +------+-----------------------------------------------------------------------------------------------------------------------------------------+ Expressions ---------------------------------- +--------+----------------+------------------------------------------------------+--------+-----------+ | Name | Description | Expression | Unit | Source | +========+================+======================================================+========+===========+ | plf | Line flow | :math:`B_{f} \theta_{bus} + P_{f}^{inj}` | *p.u.* | Line | +--------+----------------+------------------------------------------------------+--------+-----------+ | pmaxe | Effective pmax | :math:`c_{trl,n,e} p_{g, 0} + c_{trl, e} p_{g, max}` | *p.u.* | StaticGen | +--------+----------------+------------------------------------------------------+--------+-----------+ | pmine | Effective pmin | :math:`c_{trl,n,e} p_{g, 0} + c_{trl, e} p_{g, min}` | *p.u.* | StaticGen | +--------+----------------+------------------------------------------------------+--------+-----------+ Constraints ---------------------------------- +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | Name | Description | Expression | +========+===================================+============================================================================================+ | pb | power balance | :math:`B_{bus} \theta_{bus} + P_{bus}^{inj} + C_{l} p_{d} + C_{sh} g_{sh} - C_{g} p_g = 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | sbus | align slack bus angle | :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:`-p_{lf} - u_{l} R_{ATEA} \leq 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | plfub | line flow upper bound | :math:`p_{lf} - u_{l} R_{ATEA} \leq 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | alflb | line angle difference lower bound | :math:`-C_{ft}^T \theta_{bus} + \theta_{bus, min} \leq 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | alfub | line angle difference upper bound | :math:`C_{ft}^T \theta_{bus} - \theta_{bus, max} \leq 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | rbu | RegUp reserve balance | :math:`S_{g} u_{g} p_{r,u} - d_{u, d} = 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | rbd | RegDn reserve balance | :math:`S_{g} u_{g} p_{r,d} - d_{d, d} = 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | rru | RegUp reserve source | :math:`u_{g} (p_g + p_{r,u}) - u_{g} p_{g, max, e} \leq 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | rrd | RegDn reserve source | :math:`u_{g} (-p_g + p_{r,d}) + u_{g} p_{g, min, e} \leq 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | rgu | Gen ramping up | :math:`u_{g} (p_g-p_{g, 0}-R_{10}) \leq 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | rgd | Gen ramping down | :math:`u_{g} (-p_g+p_{g, 0}-R_{10}) \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` | Gen active power | *p.u.* | StaticGen.p | | +-------+----------------------+------------------------------------+--------+-------------+------------+ | vBus | :math:`v_{Bus}` | Bus voltage magnitude, placeholder | *p.u.* | Bus.v | | +-------+----------------------+------------------------------------+--------+-------------+------------+ | aBus | :math:`\theta_{bus}` | Bus voltage angle | *rad* | Bus.a | | +-------+----------------------+------------------------------------+--------+-------------+------------+ | pru | :math:`p_{r,u}` | RegUp reserve | *p.u.* | StaticGen | nonneg | +-------+----------------------+------------------------------------+--------+-------------+------------+ | prd | :math:`p_{r,d}` | RegDn reserve | *p.u.* | StaticGen | 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}` | Effective Gen controllability | NumOpDual | +---------+---------------------+--------------------------------------+-----------+ | nctrl | :math:`c_{trl,n}` | Effective Gen uncontrollability | NumOp | +---------+---------------------+--------------------------------------+-----------+ | nctrle | :math:`c_{trl,n,e}` | Effective Gen uncontrollability | 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 | +---------+---------------------+--------------------------------------+-----------+ | dud | :math:`d_{u, d}` | zonal RegUp reserve requirement | NumOpDual | +---------+---------------------+--------------------------------------+-----------+ | ddd | :math:`d_{d, d}` | zonal RegDn reserve requirement | NumOpDual | +---------+---------------------+--------------------------------------+-----------+ | 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 | +----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | cru | :math:`c_{r,u}` | RegUp reserve coefficient | *$/(p.u.)* | SFRCost.cru | +----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | crd | :math:`c_{r,d}` | RegDown reserve coefficient | *$/(p.u.)* | SFRCost.crd | +----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | du | :math:`d_{u}` | RegUp reserve requirement in percentage | *%* | SFR.du | +----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | dd | :math:`d_{d}` | RegDown reserve requirement in percentage | *%* | SFR.dd | +----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | 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 [RTEDDG] +--------+-----------------+-------+------------------------+-----------------+ | Option | Symbol | Value | Info | Accepted values | +========+=================+=======+========================+=================+ | t | :math:`T_{cfg}` | 0.083 | time interval in hours | | +--------+-----------------+-------+------------------------+-----------------+ .. _RTEDESP: -------------------------------------------------------------------------------- RTEDESP -------------------------------------------------------------------------------- Price run of RTED with energy storage :ref:`ESD1`. This routine is not intended to work standalone. It should be used after solved :class:`RTEDES`. The binary variables ``ucd`` and ``udd`` are now parameters retrieved from solved :class:`RTEDES`. The constraints ``zce1`` - ``zce3`` and ``zde1`` - ``zde3`` are now simplified to ``zce`` and ``zde`` as below: .. math:: (1 - u_{cd}) * p_{ce} <= 0 (1 - u_{dd}) * p_{de} <= 0 Objective ---------------------------------- +------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Unit | Expression | +======+======================================================================================================================================================================================================+ | *$* | :math:`min. T_{cfg}^{2} \sum(c_{2} p_g^{2}) + \sum(u_{g} c_{0})+ T_{cfg} \sum(c_{1} p_g + c_{r,u} p_{r,u} + c_{r,d} p_{r,d})+ T_{cfg} \sum(- c_{c,ESD} p_{c,ESD} + c_{d,ESD} p_{d,ESD})` | +------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ Expressions ---------------------------------- +--------+----------------+------------------------------------------------------+--------+-----------+ | Name | Description | Expression | Unit | Source | +========+================+======================================================+========+===========+ | plf | Line flow | :math:`B_{f} \theta_{bus} + P_{f}^{inj}` | *p.u.* | Line | +--------+----------------+------------------------------------------------------+--------+-----------+ | pmaxe | Effective pmax | :math:`c_{trl,n,e} p_{g, 0} + c_{trl, e} p_{g, max}` | *p.u.* | StaticGen | +--------+----------------+------------------------------------------------------+--------+-----------+ | pmine | Effective pmin | :math:`c_{trl,n,e} p_{g, 0} + c_{trl, e} p_{g, min}` | *p.u.* | StaticGen | +--------+----------------+------------------------------------------------------+--------+-----------+ Constraints ---------------------------------- +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | Name | Description | Expression | +========+===================================+=======================================================================================================+ | pb | power balance | :math:`B_{bus} \theta_{bus} + P_{bus}^{inj} + C_{l} p_{d} + C_{sh} g_{sh} - C_{g} p_g = 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | sbus | align slack bus angle | :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:`-p_{lf} - u_{l} R_{ATEA} \leq 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | plfub | line flow upper bound | :math:`p_{lf} - u_{l} R_{ATEA} \leq 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | alflb | line angle difference lower bound | :math:`-C_{ft}^T \theta_{bus} + \theta_{bus, min} \leq 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | alfub | line angle difference upper bound | :math:`C_{ft}^T \theta_{bus} - \theta_{bus, max} \leq 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | rbu | RegUp reserve balance | :math:`S_{g} u_{g} p_{r,u} - d_{u, d} = 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | rbd | RegDn reserve balance | :math:`S_{g} u_{g} p_{r,d} - d_{d, d} = 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | rru | RegUp reserve source | :math:`u_{g} (p_g + p_{r,u}) - u_{g} p_{g, max, e} \leq 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | rrd | RegDn reserve source | :math:`u_{g} (-p_g + p_{r,d}) + u_{g} p_{g, min, e} \leq 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | rgu | Gen ramping up | :math:`u_{g} (p_g-p_{g, 0}-R_{10}) \leq 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | rgd | Gen ramping down | :math:`u_{g} (-p_g+p_{g, 0}-R_{10}) \leq 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | cdgb | Select DG power from pg | :math:`I_{DG} p_g - p_{g,DG} = 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 (SOC - SOC_{init}) - T_{cfg} \eta_c p_{c,ESD}+ T_{cfg} \frac{1}{\eta_d} p_{d,ESD} = 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | SOCr | ESD1 final SOC requirement | :math:`SOC_{end} - SOC \leq 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | zce | zce bound | :math:`1-u_{c,ESD} p_{c,ESD} \leq 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | zde | zde bound | :math:`1-u_{d,ESD} p_{d,ESD} \leq 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ Vars ---------------------------------- +-------+----------------------+------------------------------------+------------+-------------+------------+ | Name | Symbol | Description | Unit | Source | Properties | +=======+======================+====================================+============+=============+============+ | pg | :math:`p_g` | Gen active power | *p.u.* | StaticGen.p | | +-------+----------------------+------------------------------------+------------+-------------+------------+ | vBus | :math:`v_{Bus}` | Bus voltage magnitude, placeholder | *p.u.* | Bus.v | | +-------+----------------------+------------------------------------+------------+-------------+------------+ | aBus | :math:`\theta_{bus}` | Bus voltage angle | *rad* | Bus.a | | +-------+----------------------+------------------------------------+------------+-------------+------------+ | pru | :math:`p_{r,u}` | RegUp reserve | *p.u.* | StaticGen | nonneg | +-------+----------------------+------------------------------------+------------+-------------+------------+ | prd | :math:`p_{r,d}` | RegDn reserve | *p.u.* | StaticGen | nonneg | +-------+----------------------+------------------------------------+------------+-------------+------------+ | pgdg | :math:`p_{g,DG}` | DG output power | *p.u.* | DG | | +-------+----------------------+------------------------------------+------------+-------------+------------+ | 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 | +-------+----------------------+------------------------------------+------------+-------------+------------+ 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}` | Effective Gen controllability | NumOpDual | +---------+--------------------------+--------------------------------------+-----------+ | nctrl | :math:`c_{trl,n}` | Effective Gen uncontrollability | NumOp | +---------+--------------------------+--------------------------------------+-----------+ | nctrle | :math:`c_{trl,n,e}` | Effective Gen uncontrollability | 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 | +---------+--------------------------+--------------------------------------+-----------+ | dud | :math:`d_{u, d}` | zonal RegUp reserve requirement | NumOpDual | +---------+--------------------------+--------------------------------------+-----------+ | ddd | :math:`d_{d, d}` | zonal RegDn reserve requirement | NumOpDual | +---------+--------------------------+--------------------------------------+-----------+ | idg | :math:`I_{DG}` | Index 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 | +---------+--------------------------+--------------------------------------+-----------+ | ies | :math:`I_{ESD}` | Index ESD from StaticGen | 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 | +----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | cru | :math:`c_{r,u}` | RegUp reserve coefficient | *$/(p.u.)* | SFRCost.cru | +----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | crd | :math:`c_{r,d}` | RegDown reserve coefficient | *$/(p.u.)* | SFRCost.crd | +----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | du | :math:`d_{u}` | RegUp reserve requirement in percentage | *%* | SFR.du | +----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | dd | :math:`d_{d}` | RegDown reserve requirement in percentage | *%* | SFR.dd | +----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | 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 | +----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | 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 | +----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | ucd | :math:`u_{c,ESD}` | Retrieved ESD1 charging decision | | ESD1.ucd0 | +----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | udd | :math:`u_{d,ESD}` | Retrieved ESD1 discharging decision | | ESD1.udd0 | +----------+---------------------------+---------------------------------------------------+--------------+----------------------+ Config Fields in [RTEDESP] +--------+-----------------+-------+------------------------+-----------------+ | Option | Symbol | Value | Info | Accepted values | +========+=================+=======+========================+=================+ | t | :math:`T_{cfg}` | 0.083 | time interval in hours | | +--------+-----------------+-------+------------------------+-----------------+ .. _RTEDES: -------------------------------------------------------------------------------- RTEDES -------------------------------------------------------------------------------- RTED with energy storage :ref:`ESD1`. The bilinear term in the formulation is linearized with big-M method. While the formulation enforces SOCend, the ESD1 owner is not required to provide an SOC constraint for every RTED interval. The optimization treats SOCend as a terminal boundary condition, allowing the dispatcher maximum flexibility to optimize power output within the hour, provided the target is met at the interval's conclusion. The minimum charging/discharging duration logic is implemented in `tcdr` and `tddr`. For example, the logic of `tcdr` is: `u_{cd} >= fcd`, where `fcd = 1` if `tdc0 > 0` and `tdc > tdc0`, else `fcd = 0`. Objective ---------------------------------- +------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Unit | Expression | +======+======================================================================================================================================================================================================+ | *$* | :math:`min. T_{cfg}^{2} \sum(c_{2} p_g^{2}) + \sum(u_{g} c_{0})+ T_{cfg} \sum(c_{1} p_g + c_{r,u} p_{r,u} + c_{r,d} p_{r,d})+ T_{cfg} \sum(- c_{c,ESD} p_{c,ESD} + c_{d,ESD} p_{d,ESD})` | +------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ Expressions ---------------------------------- +--------+----------------+------------------------------------------------------+--------+-----------+ | Name | Description | Expression | Unit | Source | +========+================+======================================================+========+===========+ | plf | Line flow | :math:`B_{f} \theta_{bus} + P_{f}^{inj}` | *p.u.* | Line | +--------+----------------+------------------------------------------------------+--------+-----------+ | pmaxe | Effective pmax | :math:`c_{trl,n,e} p_{g, 0} + c_{trl, e} p_{g, max}` | *p.u.* | StaticGen | +--------+----------------+------------------------------------------------------+--------+-----------+ | pmine | Effective pmin | :math:`c_{trl,n,e} p_{g, 0} + c_{trl, e} p_{g, min}` | *p.u.* | StaticGen | +--------+----------------+------------------------------------------------------+--------+-----------+ Constraints ---------------------------------- +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | Name | Description | Expression | +========+===================================+=======================================================================================================+ | pb | power balance | :math:`B_{bus} \theta_{bus} + P_{bus}^{inj} + C_{l} p_{d} + C_{sh} g_{sh} - C_{g} p_g = 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | sbus | align slack bus angle | :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:`-p_{lf} - u_{l} R_{ATEA} \leq 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | plfub | line flow upper bound | :math:`p_{lf} - u_{l} R_{ATEA} \leq 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | alflb | line angle difference lower bound | :math:`-C_{ft}^T \theta_{bus} + \theta_{bus, min} \leq 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | alfub | line angle difference upper bound | :math:`C_{ft}^T \theta_{bus} - \theta_{bus, max} \leq 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | rbu | RegUp reserve balance | :math:`S_{g} u_{g} p_{r,u} - d_{u, d} = 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | rbd | RegDn reserve balance | :math:`S_{g} u_{g} p_{r,d} - d_{d, d} = 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | rru | RegUp reserve source | :math:`u_{g} (p_g + p_{r,u}) - u_{g} p_{g, max, e} \leq 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | rrd | RegDn reserve source | :math:`u_{g} (-p_g + p_{r,d}) + u_{g} p_{g, min, e} \leq 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | rgu | Gen ramping up | :math:`u_{g} (p_g-p_{g, 0}-R_{10}) \leq 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | rgd | Gen ramping down | :math:`u_{g} (-p_g+p_{g, 0}-R_{10}) \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 (SOC - SOC_{init}) - T_{cfg} \eta_c p_{c,ESD}+ T_{cfg} \frac{1}{\eta_d} p_{d,ESD} = 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | SOCr | ESD1 final SOC requirement | :math:`SOC_{end} - SOC \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` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ Vars ---------------------------------- +-------+----------------------+----------------------------------------------------------------+------------+-------------+------------+ | Name | Symbol | Description | Unit | Source | Properties | +=======+======================+================================================================+============+=============+============+ | pg | :math:`p_g` | Gen active power | *p.u.* | StaticGen.p | | +-------+----------------------+----------------------------------------------------------------+------------+-------------+------------+ | vBus | :math:`v_{Bus}` | Bus voltage magnitude, placeholder | *p.u.* | Bus.v | | +-------+----------------------+----------------------------------------------------------------+------------+-------------+------------+ | aBus | :math:`\theta_{bus}` | Bus voltage angle | *rad* | Bus.a | | +-------+----------------------+----------------------------------------------------------------+------------+-------------+------------+ | pru | :math:`p_{r,u}` | RegUp reserve | *p.u.* | StaticGen | nonneg | +-------+----------------------+----------------------------------------------------------------+------------+-------------+------------+ | prd | :math:`p_{r,d}` | RegDn reserve | *p.u.* | StaticGen | 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}` | Effective Gen controllability | NumOpDual | +---------+--------------------------+--------------------------------------+-----------+ | nctrl | :math:`c_{trl,n}` | Effective Gen uncontrollability | NumOp | +---------+--------------------------+--------------------------------------+-----------+ | nctrle | :math:`c_{trl,n,e}` | Effective Gen uncontrollability | 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 | +---------+--------------------------+--------------------------------------+-----------+ | dud | :math:`d_{u, d}` | zonal RegUp reserve requirement | NumOpDual | +---------+--------------------------+--------------------------------------+-----------+ | ddd | :math:`d_{d, d}` | zonal RegDn reserve requirement | NumOpDual | +---------+--------------------------+--------------------------------------+-----------+ | 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 | +---------+--------------------------+--------------------------------------+-----------+ 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 | +----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | cru | :math:`c_{r,u}` | RegUp reserve coefficient | *$/(p.u.)* | SFRCost.cru | +----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | crd | :math:`c_{r,d}` | RegDown reserve coefficient | *$/(p.u.)* | SFRCost.crd | +----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | du | :math:`d_{u}` | RegUp reserve requirement in percentage | *%* | SFR.du | +----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | dd | :math:`d_{d}` | RegDown reserve requirement in percentage | *%* | SFR.dd | +----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | 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 [RTEDES] +--------+-----------------+-------+------------------------+-----------------+ | Option | Symbol | Value | Info | Accepted values | +========+=================+=======+========================+=================+ | t | :math:`T_{cfg}` | 0.083 | time interval in hours | | +--------+-----------------+-------+------------------------+-----------------+ .. _RTEDVIS: -------------------------------------------------------------------------------- RTEDVIS -------------------------------------------------------------------------------- RTED with virtual inertia scheduling. This class implements real-time economic dispatch with virtual inertia scheduling. Please ensure that the parameters `dvm` and `dvd` are set according to the system base. References ---------- 1. B. She, F. Li, H. Cui, J. Wang, Q. Zhang and R. Bo, "Virtual Inertia Scheduling (VIS) for Real-Time Economic Dispatch of IBR-Penetrated Power Systems," in IEEE Transactions on Sustainable Energy, vol. 15, no. 2, pp. 938-951, April 2024, doi: 10.1109/TSTE.2023.3319307. Objective ---------------------------------- +------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Unit | Expression | +======+================================================================================================================================================================================+ | *$* | :math:`min. T_{cfg}^{2} \sum(c_{2} p_g^{2}) + \sum(u_{g} c_{0})+ T_{cfg} \sum(c_{1} p_g + c_{r,u} p_{r,u} + c_{r,d} p_{r,d})+ T_{cfg} \sum(c_{m} M + c_{d} D)` | +------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ Expressions ---------------------------------- +--------+----------------+------------------------------------------------------+--------+-----------+ | Name | Description | Expression | Unit | Source | +========+================+======================================================+========+===========+ | plf | Line flow | :math:`B_{f} \theta_{bus} + P_{f}^{inj}` | *p.u.* | Line | +--------+----------------+------------------------------------------------------+--------+-----------+ | pmaxe | Effective pmax | :math:`c_{trl,n,e} p_{g, 0} + c_{trl, e} p_{g, max}` | *p.u.* | StaticGen | +--------+----------------+------------------------------------------------------+--------+-----------+ | pmine | Effective pmin | :math:`c_{trl,n,e} p_{g, 0} + c_{trl, e} p_{g, min}` | *p.u.* | StaticGen | +--------+----------------+------------------------------------------------------+--------+-----------+ Constraints ---------------------------------- +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | Name | Description | Expression | +========+===================================+============================================================================================+ | pb | power balance | :math:`B_{bus} \theta_{bus} + P_{bus}^{inj} + C_{l} p_{d} + C_{sh} g_{sh} - C_{g} p_g = 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | sbus | align slack bus angle | :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:`-p_{lf} - u_{l} R_{ATEA} \leq 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | plfub | line flow upper bound | :math:`p_{lf} - u_{l} R_{ATEA} \leq 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | alflb | line angle difference lower bound | :math:`-C_{ft}^T \theta_{bus} + \theta_{bus, min} \leq 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | alfub | line angle difference upper bound | :math:`C_{ft}^T \theta_{bus} - \theta_{bus, max} \leq 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | rbu | RegUp reserve balance | :math:`S_{g} u_{g} p_{r,u} - d_{u, d} = 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | rbd | RegDn reserve balance | :math:`S_{g} u_{g} p_{r,d} - d_{d, d} = 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | rru | RegUp reserve source | :math:`u_{g} (p_g + p_{r,u}) - u_{g} p_{g, max, e} \leq 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | rrd | RegDn reserve source | :math:`u_{g} (-p_g + p_{r,d}) + u_{g} p_{g, min, e} \leq 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | rgu | Gen ramping up | :math:`u_{g} (p_g-p_{g, 0}-R_{10}) \leq 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | rgd | Gen ramping down | :math:`u_{g} (-p_g+p_{g, 0}-R_{10}) \leq 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | Mub | M upper bound | :math:`M - M_{max} \leq 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | Dub | D upper bound | :math:`D - D_{max} \leq 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | Mreq | Emulated inertia requirement | :math:`-S_{g} M + d_{v,m} = 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | Dreq | Emulated damping requirement | :math:`-S_{g} D + d_{v,d} = 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ Vars ---------------------------------- +-------+----------------------+---------------------------------------+--------+-------------+------------+ | Name | Symbol | Description | Unit | Source | Properties | +=======+======================+=======================================+========+=============+============+ | pg | :math:`p_g` | Gen active power | *p.u.* | StaticGen.p | | +-------+----------------------+---------------------------------------+--------+-------------+------------+ | vBus | :math:`v_{Bus}` | Bus voltage magnitude, placeholder | *p.u.* | Bus.v | | +-------+----------------------+---------------------------------------+--------+-------------+------------+ | aBus | :math:`\theta_{bus}` | Bus voltage angle | *rad* | Bus.a | | +-------+----------------------+---------------------------------------+--------+-------------+------------+ | pru | :math:`p_{r,u}` | RegUp reserve | *p.u.* | StaticGen | nonneg | +-------+----------------------+---------------------------------------+--------+-------------+------------+ | prd | :math:`p_{r,d}` | RegDn reserve | *p.u.* | StaticGen | nonneg | +-------+----------------------+---------------------------------------+--------+-------------+------------+ | M | :math:`M` | Emulated startup time constant (M=2H) | *s* | VSG.M | nonneg | +-------+----------------------+---------------------------------------+--------+-------------+------------+ | D | :math:`D` | Emulated damping coefficient | *p.u.* | VSG.D | 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}` | Effective Gen controllability | NumOpDual | +---------+---------------------+--------------------------------------+-----------+ | nctrl | :math:`c_{trl,n}` | Effective Gen uncontrollability | NumOp | +---------+---------------------+--------------------------------------+-----------+ | nctrle | :math:`c_{trl,n,e}` | Effective Gen uncontrollability | 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 | +---------+---------------------+--------------------------------------+-----------+ | dud | :math:`d_{u, d}` | zonal RegUp reserve requirement | NumOpDual | +---------+---------------------+--------------------------------------+-----------+ | ddd | :math:`d_{d, d}` | zonal RegDn reserve requirement | NumOpDual | +---------+---------------------+--------------------------------------+-----------+ | gvsg | :math:`S_{g}` | Sum VSG vars vector in shape of area | ZonalSum | +---------+---------------------+--------------------------------------+-----------+ 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 | +----------+---------------------------+-------------------------------------------+--------------+----------------------+ | cru | :math:`c_{r,u}` | RegUp reserve coefficient | *$/(p.u.)* | SFRCost.cru | +----------+---------------------------+-------------------------------------------+--------------+----------------------+ | crd | :math:`c_{r,d}` | RegDown reserve coefficient | *$/(p.u.)* | SFRCost.crd | +----------+---------------------------+-------------------------------------------+--------------+----------------------+ | du | :math:`d_{u}` | RegUp reserve requirement in percentage | *%* | SFR.du | +----------+---------------------------+-------------------------------------------+--------------+----------------------+ | dd | :math:`d_{d}` | RegDown reserve requirement in percentage | *%* | SFR.dd | +----------+---------------------------+-------------------------------------------+--------------+----------------------+ | cm | :math:`c_{m}` | Virtual inertia cost | *$/s* | VSGCost.cm | +----------+---------------------------+-------------------------------------------+--------------+----------------------+ | cd | :math:`c_{d}` | Virtual damping cost | *$/(p.u.)* | VSGCost.cd | +----------+---------------------------+-------------------------------------------+--------------+----------------------+ | zvsg | :math:`z_{one,vsg}` | VSG zone | | VSG.zone | +----------+---------------------------+-------------------------------------------+--------------+----------------------+ | Mmax | :math:`M_{max}` | Maximum inertia emulation | *s* | VSG.Mmax | +----------+---------------------------+-------------------------------------------+--------------+----------------------+ | Dmax | :math:`D_{max}` | Maximum damping emulation | *p.u.* | VSG.Dmax | +----------+---------------------------+-------------------------------------------+--------------+----------------------+ | dvm | :math:`d_{v,m}` | Emulated inertia requirement | *s* | VSGR.dvm | +----------+---------------------------+-------------------------------------------+--------------+----------------------+ | dvd | :math:`d_{v,d}` | Emulated damping requirement | *p.u.* | VSGR.dvd | +----------+---------------------------+-------------------------------------------+--------------+----------------------+ Config Fields in [RTEDVIS] +--------+-----------------+-------+------------------------+-----------------+ | Option | Symbol | Value | Info | Accepted values | +========+=================+=======+========================+=================+ | t | :math:`T_{cfg}` | 0.083 | time interval in hours | | +--------+-----------------+-------+------------------------+-----------------+ .. _RTED2: -------------------------------------------------------------------------------- RTED2 -------------------------------------------------------------------------------- DC-based real-time economic dispatch (RTED) using PTDF. For large cases, it is recommended to build the PTDF first, especially when incremental build is necessary. RTED2 extends RTED with PTDF formulation: - Uses PTDF matrix instead of B-theta for line flow calculation - Calculates LMP with energy price and congestion price components - Inherits all RTED features: reserves, ramping, etc. The function ``dc2ac`` sets the ``vBus`` value from solved ACOPF. Without this conversion, dynamic simulation might fail due to the gap between DC-based dispatch results and AC-based dynamic initialization. Notes ----- - Formulations have been adjusted with interval ``config.t``, 5/60 [Hour] by default. - The tie-line flow related constraints are omitted in this formulation. - Power generation is balanced for the entire system. - SFR is balanced for each area. Objective ---------------------------------- +------+-----------------------------------------------------------------------------------------------------------------------------------------+ | Unit | Expression | +======+=========================================================================================================================================+ | *$* | :math:`min. T_{cfg}^{2} \sum(c_{2} p_g^{2}) + \sum(u_{g} c_{0})+ T_{cfg} \sum(c_{1} p_g + c_{r,u} p_{r,u} + c_{r,d} p_{r,d})` | +------+-----------------------------------------------------------------------------------------------------------------------------------------+ Expressions ---------------------------------- +--------+----------------+-----------------------------------------------------------------------------+--------+-----------+ | Name | Description | Expression | Unit | Source | +========+================+=============================================================================+========+===========+ | plf | Line flow | :math:`P_{TDF} (C_{g} p_g - C_{l} p_{d} - C_{sh} g_{sh} - P_{bus}^{inj})` | *p.u.* | Line | +--------+----------------+-----------------------------------------------------------------------------+--------+-----------+ | pmaxe | Effective pmax | :math:`c_{trl,n,e} p_{g, 0} + c_{trl, e} p_{g, max}` | *p.u.* | StaticGen | +--------+----------------+-----------------------------------------------------------------------------+--------+-----------+ | pmine | Effective pmin | :math:`c_{trl,n,e} p_{g, 0} + c_{trl, e} p_{g, min}` | *p.u.* | StaticGen | +--------+----------------+-----------------------------------------------------------------------------+--------+-----------+ Constraints ---------------------------------- +--------+-----------------------------------+-------------------------------------------------------------+ | Name | Description | Expression | +========+===================================+=============================================================+ | pb | power balance | :math:`\sum(p_g) - \sum(p_{d}) = 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:`-p_{lf} - u_{l} R_{ATEA} \leq 0` | +--------+-----------------------------------+-------------------------------------------------------------+ | plfub | line flow upper bound | :math:`p_{lf} - u_{l} R_{ATEA} \leq 0` | +--------+-----------------------------------+-------------------------------------------------------------+ | alflb | line angle difference lower bound | :math:`-C_{ft}^T \theta_{bus} + \theta_{bus, min} \leq 0` | +--------+-----------------------------------+-------------------------------------------------------------+ | alfub | line angle difference upper bound | :math:`C_{ft}^T \theta_{bus} - \theta_{bus, max} \leq 0` | +--------+-----------------------------------+-------------------------------------------------------------+ | rbu | RegUp reserve balance | :math:`S_{g} u_{g} p_{r,u} - d_{u, d} = 0` | +--------+-----------------------------------+-------------------------------------------------------------+ | rbd | RegDn reserve balance | :math:`S_{g} u_{g} p_{r,d} - d_{d, d} = 0` | +--------+-----------------------------------+-------------------------------------------------------------+ | rru | RegUp reserve source | :math:`u_{g} (p_g + p_{r,u}) - u_{g} p_{g, max, e} \leq 0` | +--------+-----------------------------------+-------------------------------------------------------------+ | rrd | RegDn reserve source | :math:`u_{g} (-p_g + p_{r,d}) + u_{g} p_{g, min, e} \leq 0` | +--------+-----------------------------------+-------------------------------------------------------------+ | rgu | Gen ramping up | :math:`u_{g} (p_g-p_{g, 0}-R_{10}) \leq 0` | +--------+-----------------------------------+-------------------------------------------------------------+ | rgd | Gen ramping down | :math:`u_{g} (-p_g+p_{g, 0}-R_{10}) \leq 0` | +--------+-----------------------------------+-------------------------------------------------------------+ Vars ---------------------------------- +-------+----------------------+------------------------------------+--------+-------------+------------+ | Name | Symbol | Description | Unit | Source | Properties | +=======+======================+====================================+========+=============+============+ | pg | :math:`p_g` | Gen active power | *p.u.* | StaticGen.p | | +-------+----------------------+------------------------------------+--------+-------------+------------+ | vBus | :math:`v_{Bus}` | Bus voltage magnitude, placeholder | *p.u.* | Bus.v | | +-------+----------------------+------------------------------------+--------+-------------+------------+ | aBus | :math:`\theta_{bus}` | Bus voltage angle | *rad* | Bus.a | | +-------+----------------------+------------------------------------+--------+-------------+------------+ | pru | :math:`p_{r,u}` | RegUp reserve | *p.u.* | StaticGen | nonneg | +-------+----------------------+------------------------------------+--------+-------------+------------+ | prd | :math:`p_{r,d}` | RegDn reserve | *p.u.* | StaticGen | 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}` | Effective Gen controllability | NumOpDual | +---------+---------------------+--------------------------------------+-----------+ | nctrl | :math:`c_{trl,n}` | Effective Gen uncontrollability | NumOp | +---------+---------------------+--------------------------------------+-----------+ | nctrle | :math:`c_{trl,n,e}` | Effective Gen uncontrollability | 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 | +---------+---------------------+--------------------------------------+-----------+ | dud | :math:`d_{u, d}` | zonal RegUp reserve requirement | NumOpDual | +---------+---------------------+--------------------------------------+-----------+ | ddd | :math:`d_{d, d}` | zonal RegDn reserve requirement | NumOpDual | +---------+---------------------+--------------------------------------+-----------+ | 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 | +----------+---------------------------+-------------------------------------------+--------------+----------------------+ | cru | :math:`c_{r,u}` | RegUp reserve coefficient | *$/(p.u.)* | SFRCost.cru | +----------+---------------------------+-------------------------------------------+--------------+----------------------+ | crd | :math:`c_{r,d}` | RegDown reserve coefficient | *$/(p.u.)* | SFRCost.crd | +----------+---------------------------+-------------------------------------------+--------------+----------------------+ | du | :math:`d_{u}` | RegUp reserve requirement in percentage | *%* | SFR.du | +----------+---------------------------+-------------------------------------------+--------------+----------------------+ | dd | :math:`d_{d}` | RegDown reserve requirement in percentage | *%* | SFR.dd | +----------+---------------------------+-------------------------------------------+--------------+----------------------+ | PTDF | :math:`P_{TDF}` | PTDF | | MatProcessor.PTDF | +----------+---------------------------+-------------------------------------------+--------------+----------------------+ Config Fields in [RTED2] +--------+-----------------+-------+------------------------+-----------------+ | Option | Symbol | Value | Info | Accepted values | +========+=================+=======+========================+=================+ | t | :math:`T_{cfg}` | 0.083 | time interval in hours | | +--------+-----------------+-------+------------------------+-----------------+ .. _RTED2DG: -------------------------------------------------------------------------------- RTED2DG -------------------------------------------------------------------------------- RTED with distributed generator :ref:`DG` using PTDF formulation. Note that RTED2DG only includes DG output power. If ESD1 is included, RTED2ES should be used instead, otherwise there is no SOC. Objective ---------------------------------- +------+-----------------------------------------------------------------------------------------------------------------------------------------+ | Unit | Expression | +======+=========================================================================================================================================+ | *$* | :math:`min. T_{cfg}^{2} \sum(c_{2} p_g^{2}) + \sum(u_{g} c_{0})+ T_{cfg} \sum(c_{1} p_g + c_{r,u} p_{r,u} + c_{r,d} p_{r,d})` | +------+-----------------------------------------------------------------------------------------------------------------------------------------+ Expressions ---------------------------------- +--------+----------------+-----------------------------------------------------------------------------+--------+-----------+ | Name | Description | Expression | Unit | Source | +========+================+=============================================================================+========+===========+ | plf | Line flow | :math:`P_{TDF} (C_{g} p_g - C_{l} p_{d} - C_{sh} g_{sh} - P_{bus}^{inj})` | *p.u.* | Line | +--------+----------------+-----------------------------------------------------------------------------+--------+-----------+ | pmaxe | Effective pmax | :math:`c_{trl,n,e} p_{g, 0} + c_{trl, e} p_{g, max}` | *p.u.* | StaticGen | +--------+----------------+-----------------------------------------------------------------------------+--------+-----------+ | pmine | Effective pmin | :math:`c_{trl,n,e} p_{g, 0} + c_{trl, e} p_{g, min}` | *p.u.* | StaticGen | +--------+----------------+-----------------------------------------------------------------------------+--------+-----------+ Constraints ---------------------------------- +--------+-----------------------------------+-------------------------------------------------------------+ | Name | Description | Expression | +========+===================================+=============================================================+ | pb | power balance | :math:`\sum(p_g) - \sum(p_{d}) = 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:`-p_{lf} - u_{l} R_{ATEA} \leq 0` | +--------+-----------------------------------+-------------------------------------------------------------+ | plfub | line flow upper bound | :math:`p_{lf} - u_{l} R_{ATEA} \leq 0` | +--------+-----------------------------------+-------------------------------------------------------------+ | alflb | line angle difference lower bound | :math:`-C_{ft}^T \theta_{bus} + \theta_{bus, min} \leq 0` | +--------+-----------------------------------+-------------------------------------------------------------+ | alfub | line angle difference upper bound | :math:`C_{ft}^T \theta_{bus} - \theta_{bus, max} \leq 0` | +--------+-----------------------------------+-------------------------------------------------------------+ | rbu | RegUp reserve balance | :math:`S_{g} u_{g} p_{r,u} - d_{u, d} = 0` | +--------+-----------------------------------+-------------------------------------------------------------+ | rbd | RegDn reserve balance | :math:`S_{g} u_{g} p_{r,d} - d_{d, d} = 0` | +--------+-----------------------------------+-------------------------------------------------------------+ | rru | RegUp reserve source | :math:`u_{g} (p_g + p_{r,u}) - u_{g} p_{g, max, e} \leq 0` | +--------+-----------------------------------+-------------------------------------------------------------+ | rrd | RegDn reserve source | :math:`u_{g} (-p_g + p_{r,d}) + u_{g} p_{g, min, e} \leq 0` | +--------+-----------------------------------+-------------------------------------------------------------+ | rgu | Gen ramping up | :math:`u_{g} (p_g-p_{g, 0}-R_{10}) \leq 0` | +--------+-----------------------------------+-------------------------------------------------------------+ | rgd | Gen ramping down | :math:`u_{g} (-p_g+p_{g, 0}-R_{10}) \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` | Gen active power | *p.u.* | StaticGen.p | | +-------+----------------------+------------------------------------+--------+-------------+------------+ | vBus | :math:`v_{Bus}` | Bus voltage magnitude, placeholder | *p.u.* | Bus.v | | +-------+----------------------+------------------------------------+--------+-------------+------------+ | aBus | :math:`\theta_{bus}` | Bus voltage angle | *rad* | Bus.a | | +-------+----------------------+------------------------------------+--------+-------------+------------+ | pru | :math:`p_{r,u}` | RegUp reserve | *p.u.* | StaticGen | nonneg | +-------+----------------------+------------------------------------+--------+-------------+------------+ | prd | :math:`p_{r,d}` | RegDn reserve | *p.u.* | StaticGen | 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}` | Effective Gen controllability | NumOpDual | +---------+---------------------+--------------------------------------+-----------+ | nctrl | :math:`c_{trl,n}` | Effective Gen uncontrollability | NumOp | +---------+---------------------+--------------------------------------+-----------+ | nctrle | :math:`c_{trl,n,e}` | Effective Gen uncontrollability | 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 | +---------+---------------------+--------------------------------------+-----------+ | dud | :math:`d_{u, d}` | zonal RegUp reserve requirement | NumOpDual | +---------+---------------------+--------------------------------------+-----------+ | ddd | :math:`d_{d, d}` | zonal RegDn reserve requirement | NumOpDual | +---------+---------------------+--------------------------------------+-----------+ | idg | :math:`I_{DG}` | Index DG power from pg | VarSelect | +---------+---------------------+--------------------------------------+-----------+ | 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 | +----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | cru | :math:`c_{r,u}` | RegUp reserve coefficient | *$/(p.u.)* | SFRCost.cru | +----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | crd | :math:`c_{r,d}` | RegDown reserve coefficient | *$/(p.u.)* | SFRCost.crd | +----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | du | :math:`d_{u}` | RegUp reserve requirement in percentage | *%* | SFR.du | +----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | dd | :math:`d_{d}` | RegDown reserve requirement in percentage | *%* | SFR.dd | +----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | 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 | +----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | PTDF | :math:`P_{TDF}` | PTDF | | MatProcessor.PTDF | +----------+---------------------------+---------------------------------------------------+--------------+----------------------+ Config Fields in [RTED2DG] +--------+-----------------+-------+------------------------+-----------------+ | Option | Symbol | Value | Info | Accepted values | +========+=================+=======+========================+=================+ | t | :math:`T_{cfg}` | 0.083 | time interval in hours | | +--------+-----------------+-------+------------------------+-----------------+ .. _RTED2ESP: -------------------------------------------------------------------------------- RTED2ESP -------------------------------------------------------------------------------- Price run of RTED with energy storage :ref:`ESD1` using PTDF formulation. This routine is not intended to work standalone. It should be used after solved :class:`RTED2ES`. When both are solved, :class:`RTED2ES` will be used. The binary variables ``ucd`` and ``udd`` are now parameters retrieved from solved :class:`RTED2ES`. The constraints ``zce1`` - ``zce3`` and ``zde1`` - ``zde3`` are now simplified to ``zce`` and ``zde`` as below: .. math:: (1 - u_{cd}) * p_{ce} <= 0 (1 - u_{dd}) * p_{de} <= 0 Objective ---------------------------------- +------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Unit | Expression | +======+======================================================================================================================================================================================================+ | *$* | :math:`min. T_{cfg}^{2} \sum(c_{2} p_g^{2}) + \sum(u_{g} c_{0})+ T_{cfg} \sum(c_{1} p_g + c_{r,u} p_{r,u} + c_{r,d} p_{r,d})+ T_{cfg} \sum(- c_{c,ESD} p_{c,ESD} + c_{d,ESD} p_{d,ESD})` | +------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ Expressions ---------------------------------- +--------+----------------+-----------------------------------------------------------------------------+--------+-----------+ | Name | Description | Expression | Unit | Source | +========+================+=============================================================================+========+===========+ | plf | Line flow | :math:`P_{TDF} (C_{g} p_g - C_{l} p_{d} - C_{sh} g_{sh} - P_{bus}^{inj})` | *p.u.* | Line | +--------+----------------+-----------------------------------------------------------------------------+--------+-----------+ | pmaxe | Effective pmax | :math:`c_{trl,n,e} p_{g, 0} + c_{trl, e} p_{g, max}` | *p.u.* | StaticGen | +--------+----------------+-----------------------------------------------------------------------------+--------+-----------+ | pmine | Effective pmin | :math:`c_{trl,n,e} p_{g, 0} + c_{trl, e} p_{g, min}` | *p.u.* | StaticGen | +--------+----------------+-----------------------------------------------------------------------------+--------+-----------+ Constraints ---------------------------------- +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | Name | Description | Expression | +========+===================================+=======================================================================================================+ | pb | power balance | :math:`\sum(p_g) - \sum(p_{d}) = 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:`-p_{lf} - u_{l} R_{ATEA} \leq 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | plfub | line flow upper bound | :math:`p_{lf} - u_{l} R_{ATEA} \leq 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | alflb | line angle difference lower bound | :math:`-C_{ft}^T \theta_{bus} + \theta_{bus, min} \leq 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | alfub | line angle difference upper bound | :math:`C_{ft}^T \theta_{bus} - \theta_{bus, max} \leq 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | rbu | RegUp reserve balance | :math:`S_{g} u_{g} p_{r,u} - d_{u, d} = 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | rbd | RegDn reserve balance | :math:`S_{g} u_{g} p_{r,d} - d_{d, d} = 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | rru | RegUp reserve source | :math:`u_{g} (p_g + p_{r,u}) - u_{g} p_{g, max, e} \leq 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | rrd | RegDn reserve source | :math:`u_{g} (-p_g + p_{r,d}) + u_{g} p_{g, min, e} \leq 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | rgu | Gen ramping up | :math:`u_{g} (p_g-p_{g, 0}-R_{10}) \leq 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | rgd | Gen ramping down | :math:`u_{g} (-p_g+p_{g, 0}-R_{10}) \leq 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | cdgb | Select DG power from pg | :math:`I_{DG} p_g - p_{g,DG} = 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 (SOC - SOC_{init}) - T_{cfg} \eta_c p_{c,ESD}+ T_{cfg} \frac{1}{\eta_d} p_{d,ESD} = 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | SOCr | ESD1 final SOC requirement | :math:`SOC_{end} - SOC \leq 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | zce | zce bound | :math:`1-u_{c,ESD} p_{c,ESD} \leq 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | zde | zde bound | :math:`1-u_{d,ESD} p_{d,ESD} \leq 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ Vars ---------------------------------- +-------+----------------------+------------------------------------+------------+-------------+------------+ | Name | Symbol | Description | Unit | Source | Properties | +=======+======================+====================================+============+=============+============+ | pg | :math:`p_g` | Gen active power | *p.u.* | StaticGen.p | | +-------+----------------------+------------------------------------+------------+-------------+------------+ | vBus | :math:`v_{Bus}` | Bus voltage magnitude, placeholder | *p.u.* | Bus.v | | +-------+----------------------+------------------------------------+------------+-------------+------------+ | aBus | :math:`\theta_{bus}` | Bus voltage angle | *rad* | Bus.a | | +-------+----------------------+------------------------------------+------------+-------------+------------+ | pru | :math:`p_{r,u}` | RegUp reserve | *p.u.* | StaticGen | nonneg | +-------+----------------------+------------------------------------+------------+-------------+------------+ | prd | :math:`p_{r,d}` | RegDn reserve | *p.u.* | StaticGen | nonneg | +-------+----------------------+------------------------------------+------------+-------------+------------+ | pgdg | :math:`p_{g,DG}` | DG output power | *p.u.* | DG | | +-------+----------------------+------------------------------------+------------+-------------+------------+ | 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 | +-------+----------------------+------------------------------------+------------+-------------+------------+ 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}` | Effective Gen controllability | NumOpDual | +---------+--------------------------+--------------------------------------+-----------+ | nctrl | :math:`c_{trl,n}` | Effective Gen uncontrollability | NumOp | +---------+--------------------------+--------------------------------------+-----------+ | nctrle | :math:`c_{trl,n,e}` | Effective Gen uncontrollability | 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 | +---------+--------------------------+--------------------------------------+-----------+ | dud | :math:`d_{u, d}` | zonal RegUp reserve requirement | NumOpDual | +---------+--------------------------+--------------------------------------+-----------+ | ddd | :math:`d_{d, d}` | zonal RegDn reserve requirement | NumOpDual | +---------+--------------------------+--------------------------------------+-----------+ | idg | :math:`I_{DG}` | Index 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 | +---------+--------------------------+--------------------------------------+-----------+ | ies | :math:`I_{ESD}` | Index ESD from StaticGen | VarSelect | +---------+--------------------------+--------------------------------------+-----------+ | 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 | +----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | cru | :math:`c_{r,u}` | RegUp reserve coefficient | *$/(p.u.)* | SFRCost.cru | +----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | crd | :math:`c_{r,d}` | RegDown reserve coefficient | *$/(p.u.)* | SFRCost.crd | +----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | du | :math:`d_{u}` | RegUp reserve requirement in percentage | *%* | SFR.du | +----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | dd | :math:`d_{d}` | RegDown reserve requirement in percentage | *%* | SFR.dd | +----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | 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 | +----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | 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 | +----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | ucd | :math:`u_{c,ESD}` | Retrieved ESD1 charging decision | | ESD1.ucd0 | +----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | udd | :math:`u_{d,ESD}` | Retrieved ESD1 discharging decision | | ESD1.udd0 | +----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | PTDF | :math:`P_{TDF}` | PTDF | | MatProcessor.PTDF | +----------+---------------------------+---------------------------------------------------+--------------+----------------------+ Config Fields in [RTED2ESP] +--------+-----------------+-------+------------------------+-----------------+ | Option | Symbol | Value | Info | Accepted values | +========+=================+=======+========================+=================+ | t | :math:`T_{cfg}` | 0.083 | time interval in hours | | +--------+-----------------+-------+------------------------+-----------------+ .. _RTED2ES: -------------------------------------------------------------------------------- RTED2ES -------------------------------------------------------------------------------- RTED with energy storage :ref:`ESD1`. The bilinear term in the formulation is linearized with big-M method. While the formulation enforces SOCend, the ESD1 owner is not required to provide an SOC constraint for every RTED interval. The optimization treats SOCend as a terminal boundary condition, allowing the dispatcher maximum flexibility to optimize power output within the hour, provided the target is met at the interval's conclusion. Objective ---------------------------------- +------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Unit | Expression | +======+======================================================================================================================================================================================================+ | *$* | :math:`min. T_{cfg}^{2} \sum(c_{2} p_g^{2}) + \sum(u_{g} c_{0})+ T_{cfg} \sum(c_{1} p_g + c_{r,u} p_{r,u} + c_{r,d} p_{r,d})+ T_{cfg} \sum(- c_{c,ESD} p_{c,ESD} + c_{d,ESD} p_{d,ESD})` | +------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ Expressions ---------------------------------- +--------+----------------+-----------------------------------------------------------------------------+--------+-----------+ | Name | Description | Expression | Unit | Source | +========+================+=============================================================================+========+===========+ | plf | Line flow | :math:`P_{TDF} (C_{g} p_g - C_{l} p_{d} - C_{sh} g_{sh} - P_{bus}^{inj})` | *p.u.* | Line | +--------+----------------+-----------------------------------------------------------------------------+--------+-----------+ | pmaxe | Effective pmax | :math:`c_{trl,n,e} p_{g, 0} + c_{trl, e} p_{g, max}` | *p.u.* | StaticGen | +--------+----------------+-----------------------------------------------------------------------------+--------+-----------+ | pmine | Effective pmin | :math:`c_{trl,n,e} p_{g, 0} + c_{trl, e} p_{g, min}` | *p.u.* | StaticGen | +--------+----------------+-----------------------------------------------------------------------------+--------+-----------+ Constraints ---------------------------------- +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | Name | Description | Expression | +========+===================================+=======================================================================================================+ | pb | power balance | :math:`\sum(p_g) - \sum(p_{d}) = 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:`-p_{lf} - u_{l} R_{ATEA} \leq 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | plfub | line flow upper bound | :math:`p_{lf} - u_{l} R_{ATEA} \leq 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | alflb | line angle difference lower bound | :math:`-C_{ft}^T \theta_{bus} + \theta_{bus, min} \leq 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | alfub | line angle difference upper bound | :math:`C_{ft}^T \theta_{bus} - \theta_{bus, max} \leq 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | rbu | RegUp reserve balance | :math:`S_{g} u_{g} p_{r,u} - d_{u, d} = 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | rbd | RegDn reserve balance | :math:`S_{g} u_{g} p_{r,d} - d_{d, d} = 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | rru | RegUp reserve source | :math:`u_{g} (p_g + p_{r,u}) - u_{g} p_{g, max, e} \leq 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | rrd | RegDn reserve source | :math:`u_{g} (-p_g + p_{r,d}) + u_{g} p_{g, min, e} \leq 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | rgu | Gen ramping up | :math:`u_{g} (p_g-p_{g, 0}-R_{10}) \leq 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | rgd | Gen ramping down | :math:`u_{g} (-p_g+p_{g, 0}-R_{10}) \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 (SOC - SOC_{init}) - T_{cfg} \eta_c p_{c,ESD}+ T_{cfg} \frac{1}{\eta_d} p_{d,ESD} = 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | SOCr | ESD1 final SOC requirement | :math:`SOC_{end} - SOC \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` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ Vars ---------------------------------- +-------+----------------------+----------------------------------------------------------------+------------+-------------+------------+ | Name | Symbol | Description | Unit | Source | Properties | +=======+======================+================================================================+============+=============+============+ | pg | :math:`p_g` | Gen active power | *p.u.* | StaticGen.p | | +-------+----------------------+----------------------------------------------------------------+------------+-------------+------------+ | vBus | :math:`v_{Bus}` | Bus voltage magnitude, placeholder | *p.u.* | Bus.v | | +-------+----------------------+----------------------------------------------------------------+------------+-------------+------------+ | aBus | :math:`\theta_{bus}` | Bus voltage angle | *rad* | Bus.a | | +-------+----------------------+----------------------------------------------------------------+------------+-------------+------------+ | pru | :math:`p_{r,u}` | RegUp reserve | *p.u.* | StaticGen | nonneg | +-------+----------------------+----------------------------------------------------------------+------------+-------------+------------+ | prd | :math:`p_{r,d}` | RegDn reserve | *p.u.* | StaticGen | 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}` | Effective Gen controllability | NumOpDual | +---------+--------------------------+--------------------------------------+-----------+ | nctrl | :math:`c_{trl,n}` | Effective Gen uncontrollability | NumOp | +---------+--------------------------+--------------------------------------+-----------+ | nctrle | :math:`c_{trl,n,e}` | Effective Gen uncontrollability | 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 | +---------+--------------------------+--------------------------------------+-----------+ | dud | :math:`d_{u, d}` | zonal RegUp reserve requirement | NumOpDual | +---------+--------------------------+--------------------------------------+-----------+ | ddd | :math:`d_{d, d}` | zonal RegDn reserve requirement | NumOpDual | +---------+--------------------------+--------------------------------------+-----------+ | 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 | +---------+--------------------------+--------------------------------------+-----------+ | 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 | +----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | cru | :math:`c_{r,u}` | RegUp reserve coefficient | *$/(p.u.)* | SFRCost.cru | +----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | crd | :math:`c_{r,d}` | RegDown reserve coefficient | *$/(p.u.)* | SFRCost.crd | +----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | du | :math:`d_{u}` | RegUp reserve requirement in percentage | *%* | SFR.du | +----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | dd | :math:`d_{d}` | RegDown reserve requirement in percentage | *%* | SFR.dd | +----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | 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 | +----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | PTDF | :math:`P_{TDF}` | PTDF | | MatProcessor.PTDF | +----------+---------------------------+---------------------------------------------------+--------------+----------------------+ Config Fields in [RTED2ES] +--------+-----------------+-------+------------------------+-----------------+ | Option | Symbol | Value | Info | Accepted values | +========+=================+=======+========================+=================+ | t | :math:`T_{cfg}` | 0.083 | time interval in hours | | +--------+-----------------+-------+------------------------+-----------------+ .. _ED: -------------------------------------------------------------------------------- ED -------------------------------------------------------------------------------- DC-based multi-period economic dispatch (ED). Dispatch interval ``config.t`` ($T_{cfg}$) is introduced, 1 [Hour] by default. ED extends DCOPF as follows: - Vars ``pg``, ``pru``, ``prd`` are extended to 2D - 2D Vars ``rgu`` and ``rgd`` are introduced - Param ``ug`` is sourced from ``EDSlotGen.ug`` as generator commitment Notes ----- - Formulations have been adjusted with interval ``config.t`` - The tie-line flow is not implemented in this model. - ``EDSlotGen.ug`` is used instead of ``StaticGen.u`` for generator commitment. - Following reserves are balanced for each "Area": RegUp reserve ``rbu``, RegDn reserve ``rbd``, and Spinning reserve ``rsr``. Objective ---------------------------------- +------+----------------------------------------------------------------------------------------------------------------------------+ | Unit | Expression | +======+============================================================================================================================+ | *$* | :math:`min. \sum(T_{cfg}^{2} c_{2} p_g^{2})+ T_{cfg} \sum(c_{1} p_g + c_{sr} p_{r,s})+ \sum(u_{g} c_{0} 1_{tl})` | +------+----------------------------------------------------------------------------------------------------------------------------+ Expressions ---------------------------------- +--------+----------------+--------------------------------------------------------------------+--------+-----------+ | Name | Description | Expression | Unit | Source | +========+================+====================================================================+========+===========+ | plf | 2D Line flow | :math:`B_{f} \theta_{bus} + P_{f}^{inj} 1_{tl}` | *p.u.* | Line | +--------+----------------+--------------------------------------------------------------------+--------+-----------+ | pmaxe | Effective pmax | :math:`c_{trl,n,e} p_{g, 0} 1_{tl} + c_{trl, e} 1_{tl} p_{g, max}` | *p.u.* | StaticGen | +--------+----------------+--------------------------------------------------------------------+--------+-----------+ | pmine | Effective pmin | :math:`c_{trl,n,e} p_{g, 0} 1_{tl} + c_{trl, e} 1_{tl} p_{g, min}` | *p.u.* | StaticGen | +--------+----------------+--------------------------------------------------------------------+--------+-----------+ Constraints ---------------------------------- +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------+ | Name | Description | Expression | +========+===================================+============================================================================================================+ | pb | power balance | :math:`B_{bus} \theta_{bus} + P_{bus}^{inj} 1_{tl} + C_{l} p_{d,s} + C_{sh} g_{sh} 1_{tl} - C_{g} p_g = 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------+ | sbus | align slack bus angle | :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} 1_{tl} - u_{l} R_{ATEA} 1_{tl} \leq 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------+ | plfub | line flow upper bound | :math:`B_{f} \theta_{bus} + P_{f}^{inj} 1_{tl} - u_{l} R_{ATEA} 1_{tl} \leq 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------+ | alflb | line angle difference lower bound | :math:`-C_{ft}^T \theta_{bus} + \theta_{bus, min} 1_{tl} \leq 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------+ | alfub | line angle difference upper bound | :math:`C_{ft}^T \theta_{bus} - \theta_{bus, max} 1_{tl} \leq 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------+ | rbu | RegUp reserve balance | :math:`S_{g} u_{g} p_{r,u} - d_{u, d} 1_{tl} = 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------+ | rbd | RegDn reserve balance | :math:`S_{g} u_{g} p_{r,d} - d_{d, d} 1_{tl} = 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------+ | rru | RegUp reserve source | :math:`p_g + p_{r,u} - u_{g} p_{g, max} 1_{tl} \leq 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------+ | rrd | RegDn reserve source | :math:`-p_g + p_{r,d} + u_{g} p_{g, min} 1_{tl} \leq 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------+ | rgu | Gen ramping up | :math:`p_g M_{r} - T_{cfg} R_{30,R} \leq 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------+ | rgd | Gen ramping down | :math:`-p_g M_{r} - T_{cfg} R_{30,R} \leq 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------+ | prsb | spinning reserve balance | :math:`u_{g} p_{g, max} 1_{tl} - p_g - p_{r,s} = 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------+ | rsr | spinning reserve requirement | :math:`-S_{g} p_{r,s} + d_{s,r,z} \leq 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------+ | rgu0 | Initial gen ramping up | :math:`u_{g}[: 0], p_g[:, 0] - p_{g, 0}[:, 0] - R_{30} \leq 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------+ | rgd0 | Initial gen ramping down | :math:`u_{g}[: 0], -p_g[:, 0] + p_{g, 0}[:, 0] - R_{30} \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 | | +-------+----------------------+------------------+--------+-------------+------------+ | pru | :math:`p_{r,u}` | 2D RegUp power | *p.u.* | StaticGen | nonneg | +-------+----------------------+------------------+--------+-------------+------------+ | prd | :math:`p_{r,d}` | 2D RegDn power | *p.u.* | StaticGen | nonneg | +-------+----------------------+------------------+--------+-------------+------------+ | prs | :math:`p_{r,s}` | spinning reserve | *p.u.* | StaticGen | 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}` | Effective Gen controllability | NumOpDual | +---------+-----------------------+--------------------------------------------------+-----------+ | nctrl | :math:`c_{trl,n}` | Effective Gen uncontrollability | NumOp | +---------+-----------------------+--------------------------------------------------+-----------+ | nctrle | :math:`c_{trl,n,e}` | Effective Gen uncontrollability | 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 | +---------+-----------------------+--------------------------------------------------+-----------+ | dud | :math:`d_{u, d}` | zonal RegUp reserve requirement | NumOpDual | +---------+-----------------------+--------------------------------------------------+-----------+ | ddd | :math:`d_{d, d}` | zonal RegDn reserve requirement | 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 | +---------+-----------------------+--------------------------------------------------+-----------+ Parameters ---------------------------------- +-----------+---------------------------+--------------------------------------------+--------------+----------------------+ | Name | Symbol | Description | Unit | Source | +===========+===========================+============================================+==============+======================+ | ug | :math:`u_{g}` | unit commitment decisions | | EDSlotGen.ug | +-----------+---------------------------+--------------------------------------------+--------------+----------------------+ | 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 | +-----------+---------------------------+--------------------------------------------+--------------+----------------------+ | cru | :math:`c_{r,u}` | RegUp reserve coefficient | *$/(p.u.)* | SFRCost.cru | +-----------+---------------------------+--------------------------------------------+--------------+----------------------+ | crd | :math:`c_{r,d}` | RegDown reserve coefficient | *$/(p.u.)* | SFRCost.crd | +-----------+---------------------------+--------------------------------------------+--------------+----------------------+ | du | :math:`d_{u}` | RegUp reserve requirement in percentage | *%* | SFR.du | +-----------+---------------------------+--------------------------------------------+--------------+----------------------+ | dd | :math:`d_{d}` | RegDown reserve requirement in percentage | *%* | SFR.dd | +-----------+---------------------------+--------------------------------------------+--------------+----------------------+ | timeslot | :math:`t_{s,idx}` | Time slot for multi-period ED | | EDSlot.idx | +-----------+---------------------------+--------------------------------------------+--------------+----------------------+ | sd | :math:`s_{d}` | area load scaling factor | | EDSlotLoad.sd | +-----------+---------------------------+--------------------------------------------+--------------+----------------------+ | 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 | +-----------+---------------------------+--------------------------------------------+--------------+----------------------+ Config Fields in [ED] +--------+-----------------+-------+------------------------+-----------------+ | Option | Symbol | Value | Info | Accepted values | +========+=================+=======+========================+=================+ | t | :math:`T_{cfg}` | 1 | time interval in hours | | +--------+-----------------+-------+------------------------+-----------------+ .. _EDDG: -------------------------------------------------------------------------------- EDDG -------------------------------------------------------------------------------- ED with distributed generation :ref:`DG`. Note that EDDG only includes DG output power. If ESD1 is included, EDES should be used instead, otherwise there is no SOC. Objective ---------------------------------- +------+----------------------------------------------------------------------------------------------------------------------------+ | Unit | Expression | +======+============================================================================================================================+ | *$* | :math:`min. \sum(T_{cfg}^{2} c_{2} p_g^{2})+ T_{cfg} \sum(c_{1} p_g + c_{sr} p_{r,s})+ \sum(u_{g} c_{0} 1_{tl})` | +------+----------------------------------------------------------------------------------------------------------------------------+ Expressions ---------------------------------- +--------+----------------+--------------------------------------------------------------------+--------+-----------+ | Name | Description | Expression | Unit | Source | +========+================+====================================================================+========+===========+ | plf | 2D Line flow | :math:`B_{f} \theta_{bus} + P_{f}^{inj} 1_{tl}` | *p.u.* | Line | +--------+----------------+--------------------------------------------------------------------+--------+-----------+ | pmaxe | Effective pmax | :math:`c_{trl,n,e} p_{g, 0} 1_{tl} + c_{trl, e} 1_{tl} p_{g, max}` | *p.u.* | StaticGen | +--------+----------------+--------------------------------------------------------------------+--------+-----------+ | pmine | Effective pmin | :math:`c_{trl,n,e} p_{g, 0} 1_{tl} + c_{trl, e} 1_{tl} p_{g, min}` | *p.u.* | StaticGen | +--------+----------------+--------------------------------------------------------------------+--------+-----------+ Constraints ---------------------------------- +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------+ | Name | Description | Expression | +========+===================================+============================================================================================================+ | pb | power balance | :math:`B_{bus} \theta_{bus} + P_{bus}^{inj} 1_{tl} + C_{l} p_{d,s} + C_{sh} g_{sh} 1_{tl} - C_{g} p_g = 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------+ | sbus | align slack bus angle | :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} 1_{tl} - u_{l} R_{ATEA} 1_{tl} \leq 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------+ | plfub | line flow upper bound | :math:`B_{f} \theta_{bus} + P_{f}^{inj} 1_{tl} - u_{l} R_{ATEA} 1_{tl} \leq 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------+ | alflb | line angle difference lower bound | :math:`-C_{ft}^T \theta_{bus} + \theta_{bus, min} 1_{tl} \leq 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------+ | alfub | line angle difference upper bound | :math:`C_{ft}^T \theta_{bus} - \theta_{bus, max} 1_{tl} \leq 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------+ | rbu | RegUp reserve balance | :math:`S_{g} u_{g} p_{r,u} - d_{u, d} 1_{tl} = 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------+ | rbd | RegDn reserve balance | :math:`S_{g} u_{g} p_{r,d} - d_{d, d} 1_{tl} = 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------+ | rru | RegUp reserve source | :math:`p_g + p_{r,u} - u_{g} p_{g, max} 1_{tl} \leq 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------+ | rrd | RegDn reserve source | :math:`-p_g + p_{r,d} + u_{g} p_{g, min} 1_{tl} \leq 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------+ | rgu | Gen ramping up | :math:`p_g M_{r} - T_{cfg} R_{30,R} \leq 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------+ | rgd | Gen ramping down | :math:`-p_g M_{r} - T_{cfg} R_{30,R} \leq 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------+ | prsb | spinning reserve balance | :math:`u_{g} p_{g, max} 1_{tl} - p_g - p_{r,s} = 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------+ | rsr | spinning reserve requirement | :math:`-S_{g} p_{r,s} + d_{s,r,z} \leq 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------+ | rgu0 | Initial gen ramping up | :math:`u_{g}[: 0], p_g[:, 0] - p_{g, 0}[:, 0] - R_{30} \leq 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------+ | rgd0 | Initial gen ramping down | :math:`u_{g}[: 0], -p_g[:, 0] + p_{g, 0}[:, 0] - R_{30} \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 | | +-------+----------------------+------------------+--------+-------------+------------+ | pru | :math:`p_{r,u}` | 2D RegUp power | *p.u.* | StaticGen | nonneg | +-------+----------------------+------------------+--------+-------------+------------+ | prd | :math:`p_{r,d}` | 2D RegDn power | *p.u.* | StaticGen | nonneg | +-------+----------------------+------------------+--------+-------------+------------+ | prs | :math:`p_{r,s}` | spinning reserve | *p.u.* | StaticGen | 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}` | Effective Gen controllability | NumOpDual | +---------+-----------------------+--------------------------------------------------+-----------+ | nctrl | :math:`c_{trl,n}` | Effective Gen uncontrollability | NumOp | +---------+-----------------------+--------------------------------------------------+-----------+ | nctrle | :math:`c_{trl,n,e}` | Effective Gen uncontrollability | 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 | +---------+-----------------------+--------------------------------------------------+-----------+ | dud | :math:`d_{u, d}` | zonal RegUp reserve requirement | NumOpDual | +---------+-----------------------+--------------------------------------------------+-----------+ | ddd | :math:`d_{d, d}` | zonal RegDn reserve requirement | 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 | +---------+-----------------------+--------------------------------------------------+-----------+ | idg | :math:`I_{DG}` | Index DG power from pg | VarSelect | +---------+-----------------------+--------------------------------------------------+-----------+ Parameters ---------------------------------- +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | Name | Symbol | Description | Unit | Source | +===========+===========================+===================================================+==============+======================+ | ug | :math:`u_{g}` | unit commitment decisions | | EDSlotGen.ug | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | 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 | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | cru | :math:`c_{r,u}` | RegUp reserve coefficient | *$/(p.u.)* | SFRCost.cru | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | crd | :math:`c_{r,d}` | RegDown reserve coefficient | *$/(p.u.)* | SFRCost.crd | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | du | :math:`d_{u}` | RegUp reserve requirement in percentage | *%* | SFR.du | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | dd | :math:`d_{d}` | RegDown reserve requirement in percentage | *%* | SFR.dd | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | timeslot | :math:`t_{s,idx}` | Time slot for multi-period ED | | EDSlot.idx | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | sd | :math:`s_{d}` | area load scaling factor | | EDSlotLoad.sd | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | 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 | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | 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 [EDDG] +--------+-----------------+-------+------------------------+-----------------+ | Option | Symbol | Value | Info | Accepted values | +========+=================+=======+========================+=================+ | t | :math:`T_{cfg}` | 1 | time interval in hours | | +--------+-----------------+-------+------------------------+-----------------+ .. _EDES: -------------------------------------------------------------------------------- EDES -------------------------------------------------------------------------------- ED with energy storage :ref:`ESD1`. The bilinear term in the formulation is linearized with big-M method. Objective ---------------------------------- +------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Unit | Expression | +======+=========================================================================================================================================================================================+ | *$* | :math:`min. \sum(T_{cfg}^{2} c_{2} p_g^{2})+ T_{cfg} \sum(c_{1} p_g + c_{sr} p_{r,s})+ \sum(u_{g} c_{0} 1_{tl})+ T_{cfg} \sum(- c_{c,ESD} p_{c,ESD} + c_{d,ESD} p_{d,ESD})` | +------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ Expressions ---------------------------------- +--------+----------------+--------------------------------------------------------------------+--------+-----------+ | Name | Description | Expression | Unit | Source | +========+================+====================================================================+========+===========+ | plf | 2D Line flow | :math:`B_{f} \theta_{bus} + P_{f}^{inj} 1_{tl}` | *p.u.* | Line | +--------+----------------+--------------------------------------------------------------------+--------+-----------+ | pmaxe | Effective pmax | :math:`c_{trl,n,e} p_{g, 0} 1_{tl} + c_{trl, e} 1_{tl} p_{g, max}` | *p.u.* | StaticGen | +--------+----------------+--------------------------------------------------------------------+--------+-----------+ | pmine | Effective pmin | :math:`c_{trl,n,e} p_{g, 0} 1_{tl} + c_{trl, e} 1_{tl} p_{g, min}` | *p.u.* | StaticGen | +--------+----------------+--------------------------------------------------------------------+--------+-----------+ Constraints ---------------------------------- +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | Name | Description | Expression | +========+===================================+========================================================================================================================+ | pb | power balance | :math:`B_{bus} \theta_{bus} + P_{bus}^{inj} 1_{tl} + C_{l} p_{d,s} + C_{sh} g_{sh} 1_{tl} - C_{g} p_g = 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | sbus | align slack bus angle | :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} 1_{tl} - u_{l} R_{ATEA} 1_{tl} \leq 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | plfub | line flow upper bound | :math:`B_{f} \theta_{bus} + P_{f}^{inj} 1_{tl} - u_{l} R_{ATEA} 1_{tl} \leq 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | alflb | line angle difference lower bound | :math:`-C_{ft}^T \theta_{bus} + \theta_{bus, min} 1_{tl} \leq 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | alfub | line angle difference upper bound | :math:`C_{ft}^T \theta_{bus} - \theta_{bus, max} 1_{tl} \leq 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | rbu | RegUp reserve balance | :math:`S_{g} u_{g} p_{r,u} - d_{u, d} 1_{tl} = 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | rbd | RegDn reserve balance | :math:`S_{g} u_{g} p_{r,d} - d_{d, d} 1_{tl} = 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | rru | RegUp reserve source | :math:`p_g + p_{r,u} - u_{g} p_{g, max} 1_{tl} \leq 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | rrd | RegDn reserve source | :math:`-p_g + p_{r,d} + u_{g} p_{g, min} 1_{tl} \leq 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | rgu | Gen ramping up | :math:`p_g M_{r} - T_{cfg} R_{30,R} \leq 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | rgd | Gen ramping down | :math:`-p_g M_{r} - T_{cfg} R_{30,R} \leq 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | prsb | spinning reserve balance | :math:`u_{g} p_{g, max} 1_{tl} - p_g - p_{r,s} = 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | rsr | spinning reserve requirement | :math:`-S_{g} p_{r,s} + d_{s,r,z} \leq 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | rgu0 | Initial gen ramping up | :math:`u_{g}[: 0], p_g[:, 0] - p_{g, 0}[:, 0] - R_{30} \leq 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | rgd0 | Initial gen ramping down | :math:`u_{g}[: 0], -p_g[:, 0] + p_{g, 0}[:, 0] - R_{30} \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 | | +-------+----------------------+----------------------------------------------------------------+------------+-------------+------------+ | pru | :math:`p_{r,u}` | 2D RegUp power | *p.u.* | StaticGen | nonneg | +-------+----------------------+----------------------------------------------------------------+------------+-------------+------------+ | prd | :math:`p_{r,d}` | 2D RegDn power | *p.u.* | StaticGen | nonneg | +-------+----------------------+----------------------------------------------------------------+------------+-------------+------------+ | prs | :math:`p_{r,s}` | spinning reserve | *p.u.* | StaticGen | 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}` | Effective Gen controllability | NumOpDual | +---------+--------------------------+--------------------------------------------------+-----------+ | nctrl | :math:`c_{trl,n}` | Effective Gen uncontrollability | NumOp | +---------+--------------------------+--------------------------------------------------+-----------+ | nctrle | :math:`c_{trl,n,e}` | Effective Gen uncontrollability | 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 | +---------+--------------------------+--------------------------------------------------+-----------+ | dud | :math:`d_{u, d}` | zonal RegUp reserve requirement | NumOpDual | +---------+--------------------------+--------------------------------------------------+-----------+ | ddd | :math:`d_{d, d}` | zonal RegDn reserve requirement | 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 | +---------+--------------------------+--------------------------------------------------+-----------+ | 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}` | unit commitment decisions | | EDSlotGen.ug | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | 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 | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | cru | :math:`c_{r,u}` | RegUp reserve coefficient | *$/(p.u.)* | SFRCost.cru | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | crd | :math:`c_{r,d}` | RegDown reserve coefficient | *$/(p.u.)* | SFRCost.crd | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | du | :math:`d_{u}` | RegUp reserve requirement in percentage | *%* | SFR.du | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | dd | :math:`d_{d}` | RegDown reserve requirement in percentage | *%* | SFR.dd | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | timeslot | :math:`t_{s,idx}` | Time slot for multi-period ED | | EDSlot.idx | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | sd | :math:`s_{d}` | area load scaling factor | | EDSlotLoad.sd | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | 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 | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | 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 [EDES] +--------+-----------------+-------+------------------------+-----------------+ | Option | Symbol | Value | Info | Accepted values | +========+=================+=======+========================+=================+ | t | :math:`T_{cfg}` | 1 | time interval in hours | | +--------+-----------------+-------+------------------------+-----------------+ .. _ED2: -------------------------------------------------------------------------------- ED2 -------------------------------------------------------------------------------- DC-based multi-period economic dispatch (ED) using PTDF. Dispatch interval ``config.t`` ($T_{cfg}$) is introduced, 1 [Hour] by default. ED extends DCOPF as follows: - Vars ``pg``, ``pru``, ``prd`` are extended to 2D - 2D Vars ``rgu`` and ``rgd`` are introduced - Param ``ug`` is sourced from ``EDSlotGen.ug`` as generator commitment Notes ----- - Formulations have been adjusted with interval ``config.t`` - The tie-line flow is not implemented in this model. - ``EDSlotGen.ug`` is used instead of ``StaticGen.u`` for generator commitment. - Following reserves are balanced for each "Area": RegUp reserve ``rbu``, RegDn reserve ``rbd``, and Spinning reserve ``rsr``. Objective ---------------------------------- +------+----------------------------------------------------------------------------------------------------------------------------+ | Unit | Expression | +======+============================================================================================================================+ | *$* | :math:`min. \sum(T_{cfg}^{2} c_{2} p_g^{2})+ T_{cfg} \sum(c_{1} p_g + c_{sr} p_{r,s})+ \sum(u_{g} c_{0} 1_{tl})` | +------+----------------------------------------------------------------------------------------------------------------------------+ Expressions ---------------------------------- +--------+----------------+---------------------------------------------------------------------------------------------+--------+-----------+ | Name | Description | Expression | Unit | Source | +========+================+=============================================================================================+========+===========+ | plf | 2D Line flow | :math:`P_{TDF} (C_{g} p_g - C_{l} p_{d,s} - C_{sh} g_{sh} 1_{tl} - P_{bus}^{inj} 1_{tl})` | *p.u.* | Line | +--------+----------------+---------------------------------------------------------------------------------------------+--------+-----------+ | pmaxe | Effective pmax | :math:`c_{trl,n,e} p_{g, 0} 1_{tl} + c_{trl, e} 1_{tl} p_{g, max}` | *p.u.* | StaticGen | +--------+----------------+---------------------------------------------------------------------------------------------+--------+-----------+ | pmine | Effective pmin | :math:`c_{trl,n,e} p_{g, 0} 1_{tl} + c_{trl, e} 1_{tl} p_{g, min}` | *p.u.* | StaticGen | +--------+----------------+---------------------------------------------------------------------------------------------+--------+-----------+ Constraints ---------------------------------- +--------+-----------------------------------+---------------------------------------------------------------------------------+ | Name | Description | Expression | +========+===================================+=================================================================================+ | pb | power balance | :math:`\sum(p_g, axis=0) - \sum(p_{d,s}, 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} 1_{tl} - u_{l} R_{ATEA} 1_{tl} \leq 0` | +--------+-----------------------------------+---------------------------------------------------------------------------------+ | plfub | line flow upper bound | :math:`B_{f} \theta_{bus} + P_{f}^{inj} 1_{tl} - u_{l} R_{ATEA} 1_{tl} \leq 0` | +--------+-----------------------------------+---------------------------------------------------------------------------------+ | alflb | line angle difference lower bound | :math:`-C_{ft}^T \theta_{bus} + \theta_{bus, min} 1_{tl} \leq 0` | +--------+-----------------------------------+---------------------------------------------------------------------------------+ | alfub | line angle difference upper bound | :math:`C_{ft}^T \theta_{bus} - \theta_{bus, max} 1_{tl} \leq 0` | +--------+-----------------------------------+---------------------------------------------------------------------------------+ | rbu | RegUp reserve balance | :math:`S_{g} u_{g} p_{r,u} - d_{u, d} 1_{tl} = 0` | +--------+-----------------------------------+---------------------------------------------------------------------------------+ | rbd | RegDn reserve balance | :math:`S_{g} u_{g} p_{r,d} - d_{d, d} 1_{tl} = 0` | +--------+-----------------------------------+---------------------------------------------------------------------------------+ | rru | RegUp reserve source | :math:`p_g + p_{r,u} - u_{g} p_{g, max} 1_{tl} \leq 0` | +--------+-----------------------------------+---------------------------------------------------------------------------------+ | rrd | RegDn reserve source | :math:`-p_g + p_{r,d} + u_{g} p_{g, min} 1_{tl} \leq 0` | +--------+-----------------------------------+---------------------------------------------------------------------------------+ | rgu | Gen ramping up | :math:`p_g M_{r} - T_{cfg} R_{30,R} \leq 0` | +--------+-----------------------------------+---------------------------------------------------------------------------------+ | rgd | Gen ramping down | :math:`-p_g M_{r} - T_{cfg} R_{30,R} \leq 0` | +--------+-----------------------------------+---------------------------------------------------------------------------------+ | prsb | spinning reserve balance | :math:`u_{g} p_{g, max} 1_{tl} - p_g - p_{r,s} = 0` | +--------+-----------------------------------+---------------------------------------------------------------------------------+ | rsr | spinning reserve requirement | :math:`-S_{g} p_{r,s} + d_{s,r,z} \leq 0` | +--------+-----------------------------------+---------------------------------------------------------------------------------+ | rgu0 | Initial gen ramping up | :math:`u_{g}[: 0], p_g[:, 0] - p_{g, 0}[:, 0] - R_{30} \leq 0` | +--------+-----------------------------------+---------------------------------------------------------------------------------+ | rgd0 | Initial gen ramping down | :math:`u_{g}[: 0], -p_g[:, 0] + p_{g, 0}[:, 0] - R_{30} \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 | | +-------+----------------------+------------------+--------+-------------+------------+ | pru | :math:`p_{r,u}` | 2D RegUp power | *p.u.* | StaticGen | nonneg | +-------+----------------------+------------------+--------+-------------+------------+ | prd | :math:`p_{r,d}` | 2D RegDn power | *p.u.* | StaticGen | nonneg | +-------+----------------------+------------------+--------+-------------+------------+ | prs | :math:`p_{r,s}` | spinning reserve | *p.u.* | StaticGen | 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}` | Effective Gen controllability | NumOpDual | +---------+-----------------------+--------------------------------------------------+-----------+ | nctrl | :math:`c_{trl,n}` | Effective Gen uncontrollability | NumOp | +---------+-----------------------+--------------------------------------------------+-----------+ | nctrle | :math:`c_{trl,n,e}` | Effective Gen uncontrollability | 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 | +---------+-----------------------+--------------------------------------------------+-----------+ | dud | :math:`d_{u, d}` | zonal RegUp reserve requirement | NumOpDual | +---------+-----------------------+--------------------------------------------------+-----------+ | ddd | :math:`d_{d, d}` | zonal RegDn reserve requirement | 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 | +---------+-----------------------+--------------------------------------------------+-----------+ | PTDFt | :math:`P_{TDF}^T` | PTDF transpose | NumOp | +---------+-----------------------+--------------------------------------------------+-----------+ Parameters ---------------------------------- +-----------+---------------------------+--------------------------------------------+--------------+----------------------+ | Name | Symbol | Description | Unit | Source | +===========+===========================+============================================+==============+======================+ | ug | :math:`u_{g}` | unit commitment decisions | | EDSlotGen.ug | +-----------+---------------------------+--------------------------------------------+--------------+----------------------+ | 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 | +-----------+---------------------------+--------------------------------------------+--------------+----------------------+ | cru | :math:`c_{r,u}` | RegUp reserve coefficient | *$/(p.u.)* | SFRCost.cru | +-----------+---------------------------+--------------------------------------------+--------------+----------------------+ | crd | :math:`c_{r,d}` | RegDown reserve coefficient | *$/(p.u.)* | SFRCost.crd | +-----------+---------------------------+--------------------------------------------+--------------+----------------------+ | du | :math:`d_{u}` | RegUp reserve requirement in percentage | *%* | SFR.du | +-----------+---------------------------+--------------------------------------------+--------------+----------------------+ | dd | :math:`d_{d}` | RegDown reserve requirement in percentage | *%* | SFR.dd | +-----------+---------------------------+--------------------------------------------+--------------+----------------------+ | timeslot | :math:`t_{s,idx}` | Time slot for multi-period ED | | EDSlot.idx | +-----------+---------------------------+--------------------------------------------+--------------+----------------------+ | sd | :math:`s_{d}` | area load scaling factor | | EDSlotLoad.sd | +-----------+---------------------------+--------------------------------------------+--------------+----------------------+ | 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 | +-----------+---------------------------+--------------------------------------------+--------------+----------------------+ | PTDF | :math:`P_{TDF}` | PTDF | | MatProcessor.PTDF | +-----------+---------------------------+--------------------------------------------+--------------+----------------------+ Config Fields in [ED2] +--------+-----------------+-------+------------------------+-----------------+ | Option | Symbol | Value | Info | Accepted values | +========+=================+=======+========================+=================+ | t | :math:`T_{cfg}` | 1 | time interval in hours | | +--------+-----------------+-------+------------------------+-----------------+ .. _ED2DG: -------------------------------------------------------------------------------- ED2DG -------------------------------------------------------------------------------- ED with distributed generation :ref:`DG` using PTDF. Note that ED2DG only includes DG output power. If ESD1 is included, ED2ES should be used instead, otherwise there is no SOC. Objective ---------------------------------- +------+----------------------------------------------------------------------------------------------------------------------------+ | Unit | Expression | +======+============================================================================================================================+ | *$* | :math:`min. \sum(T_{cfg}^{2} c_{2} p_g^{2})+ T_{cfg} \sum(c_{1} p_g + c_{sr} p_{r,s})+ \sum(u_{g} c_{0} 1_{tl})` | +------+----------------------------------------------------------------------------------------------------------------------------+ Expressions ---------------------------------- +--------+----------------+---------------------------------------------------------------------------------------------+--------+-----------+ | Name | Description | Expression | Unit | Source | +========+================+=============================================================================================+========+===========+ | plf | 2D Line flow | :math:`P_{TDF} (C_{g} p_g - C_{l} p_{d,s} - C_{sh} g_{sh} 1_{tl} - P_{bus}^{inj} 1_{tl})` | *p.u.* | Line | +--------+----------------+---------------------------------------------------------------------------------------------+--------+-----------+ | pmaxe | Effective pmax | :math:`c_{trl,n,e} p_{g, 0} 1_{tl} + c_{trl, e} 1_{tl} p_{g, max}` | *p.u.* | StaticGen | +--------+----------------+---------------------------------------------------------------------------------------------+--------+-----------+ | pmine | Effective pmin | :math:`c_{trl,n,e} p_{g, 0} 1_{tl} + c_{trl, e} 1_{tl} p_{g, min}` | *p.u.* | StaticGen | +--------+----------------+---------------------------------------------------------------------------------------------+--------+-----------+ Constraints ---------------------------------- +--------+-----------------------------------+---------------------------------------------------------------------------------+ | Name | Description | Expression | +========+===================================+=================================================================================+ | pb | power balance | :math:`\sum(p_g, axis=0) - \sum(p_{d,s}, 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} 1_{tl} - u_{l} R_{ATEA} 1_{tl} \leq 0` | +--------+-----------------------------------+---------------------------------------------------------------------------------+ | plfub | line flow upper bound | :math:`B_{f} \theta_{bus} + P_{f}^{inj} 1_{tl} - u_{l} R_{ATEA} 1_{tl} \leq 0` | +--------+-----------------------------------+---------------------------------------------------------------------------------+ | alflb | line angle difference lower bound | :math:`-C_{ft}^T \theta_{bus} + \theta_{bus, min} 1_{tl} \leq 0` | +--------+-----------------------------------+---------------------------------------------------------------------------------+ | alfub | line angle difference upper bound | :math:`C_{ft}^T \theta_{bus} - \theta_{bus, max} 1_{tl} \leq 0` | +--------+-----------------------------------+---------------------------------------------------------------------------------+ | rbu | RegUp reserve balance | :math:`S_{g} u_{g} p_{r,u} - d_{u, d} 1_{tl} = 0` | +--------+-----------------------------------+---------------------------------------------------------------------------------+ | rbd | RegDn reserve balance | :math:`S_{g} u_{g} p_{r,d} - d_{d, d} 1_{tl} = 0` | +--------+-----------------------------------+---------------------------------------------------------------------------------+ | rru | RegUp reserve source | :math:`p_g + p_{r,u} - u_{g} p_{g, max} 1_{tl} \leq 0` | +--------+-----------------------------------+---------------------------------------------------------------------------------+ | rrd | RegDn reserve source | :math:`-p_g + p_{r,d} + u_{g} p_{g, min} 1_{tl} \leq 0` | +--------+-----------------------------------+---------------------------------------------------------------------------------+ | rgu | Gen ramping up | :math:`p_g M_{r} - T_{cfg} R_{30,R} \leq 0` | +--------+-----------------------------------+---------------------------------------------------------------------------------+ | rgd | Gen ramping down | :math:`-p_g M_{r} - T_{cfg} R_{30,R} \leq 0` | +--------+-----------------------------------+---------------------------------------------------------------------------------+ | prsb | spinning reserve balance | :math:`u_{g} p_{g, max} 1_{tl} - p_g - p_{r,s} = 0` | +--------+-----------------------------------+---------------------------------------------------------------------------------+ | rsr | spinning reserve requirement | :math:`-S_{g} p_{r,s} + d_{s,r,z} \leq 0` | +--------+-----------------------------------+---------------------------------------------------------------------------------+ | rgu0 | Initial gen ramping up | :math:`u_{g}[: 0], p_g[:, 0] - p_{g, 0}[:, 0] - R_{30} \leq 0` | +--------+-----------------------------------+---------------------------------------------------------------------------------+ | rgd0 | Initial gen ramping down | :math:`u_{g}[: 0], -p_g[:, 0] + p_{g, 0}[:, 0] - R_{30} \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 | | +-------+----------------------+------------------+--------+-------------+------------+ | pru | :math:`p_{r,u}` | 2D RegUp power | *p.u.* | StaticGen | nonneg | +-------+----------------------+------------------+--------+-------------+------------+ | prd | :math:`p_{r,d}` | 2D RegDn power | *p.u.* | StaticGen | nonneg | +-------+----------------------+------------------+--------+-------------+------------+ | prs | :math:`p_{r,s}` | spinning reserve | *p.u.* | StaticGen | 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}` | Effective Gen controllability | NumOpDual | +---------+-----------------------+--------------------------------------------------+-----------+ | nctrl | :math:`c_{trl,n}` | Effective Gen uncontrollability | NumOp | +---------+-----------------------+--------------------------------------------------+-----------+ | nctrle | :math:`c_{trl,n,e}` | Effective Gen uncontrollability | 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 | +---------+-----------------------+--------------------------------------------------+-----------+ | dud | :math:`d_{u, d}` | zonal RegUp reserve requirement | NumOpDual | +---------+-----------------------+--------------------------------------------------+-----------+ | ddd | :math:`d_{d, d}` | zonal RegDn reserve requirement | 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 | +---------+-----------------------+--------------------------------------------------+-----------+ | 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}` | unit commitment decisions | | EDSlotGen.ug | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | 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 | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | cru | :math:`c_{r,u}` | RegUp reserve coefficient | *$/(p.u.)* | SFRCost.cru | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | crd | :math:`c_{r,d}` | RegDown reserve coefficient | *$/(p.u.)* | SFRCost.crd | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | du | :math:`d_{u}` | RegUp reserve requirement in percentage | *%* | SFR.du | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | dd | :math:`d_{d}` | RegDown reserve requirement in percentage | *%* | SFR.dd | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | timeslot | :math:`t_{s,idx}` | Time slot for multi-period ED | | EDSlot.idx | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | sd | :math:`s_{d}` | area load scaling factor | | EDSlotLoad.sd | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | 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 | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | 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 [ED2DG] +--------+-----------------+-------+------------------------+-----------------+ | Option | Symbol | Value | Info | Accepted values | +========+=================+=======+========================+=================+ | t | :math:`T_{cfg}` | 1 | time interval in hours | | +--------+-----------------+-------+------------------------+-----------------+ .. _ED2ES: -------------------------------------------------------------------------------- ED2ES -------------------------------------------------------------------------------- ED with energy storage :ref:`ESD1` using PTDF. Objective ---------------------------------- +------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Unit | Expression | +======+=========================================================================================================================================================================================+ | *$* | :math:`min. \sum(T_{cfg}^{2} c_{2} p_g^{2})+ T_{cfg} \sum(c_{1} p_g + c_{sr} p_{r,s})+ \sum(u_{g} c_{0} 1_{tl})+ T_{cfg} \sum(- c_{c,ESD} p_{c,ESD} + c_{d,ESD} p_{d,ESD})` | +------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ Expressions ---------------------------------- +--------+----------------+---------------------------------------------------------------------------------------------+--------+-----------+ | Name | Description | Expression | Unit | Source | +========+================+=============================================================================================+========+===========+ | plf | 2D Line flow | :math:`P_{TDF} (C_{g} p_g - C_{l} p_{d,s} - C_{sh} g_{sh} 1_{tl} - P_{bus}^{inj} 1_{tl})` | *p.u.* | Line | +--------+----------------+---------------------------------------------------------------------------------------------+--------+-----------+ | pmaxe | Effective pmax | :math:`c_{trl,n,e} p_{g, 0} 1_{tl} + c_{trl, e} 1_{tl} p_{g, max}` | *p.u.* | StaticGen | +--------+----------------+---------------------------------------------------------------------------------------------+--------+-----------+ | pmine | Effective pmin | :math:`c_{trl,n,e} p_{g, 0} 1_{tl} + c_{trl, e} 1_{tl} p_{g, min}` | *p.u.* | StaticGen | +--------+----------------+---------------------------------------------------------------------------------------------+--------+-----------+ Constraints ---------------------------------- +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | Name | Description | Expression | +========+===================================+========================================================================================================================+ | pb | power balance | :math:`\sum(p_g, axis=0) - \sum(p_{d,s}, 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} 1_{tl} - u_{l} R_{ATEA} 1_{tl} \leq 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | plfub | line flow upper bound | :math:`B_{f} \theta_{bus} + P_{f}^{inj} 1_{tl} - u_{l} R_{ATEA} 1_{tl} \leq 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | alflb | line angle difference lower bound | :math:`-C_{ft}^T \theta_{bus} + \theta_{bus, min} 1_{tl} \leq 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | alfub | line angle difference upper bound | :math:`C_{ft}^T \theta_{bus} - \theta_{bus, max} 1_{tl} \leq 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | rbu | RegUp reserve balance | :math:`S_{g} u_{g} p_{r,u} - d_{u, d} 1_{tl} = 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | rbd | RegDn reserve balance | :math:`S_{g} u_{g} p_{r,d} - d_{d, d} 1_{tl} = 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | rru | RegUp reserve source | :math:`p_g + p_{r,u} - u_{g} p_{g, max} 1_{tl} \leq 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | rrd | RegDn reserve source | :math:`-p_g + p_{r,d} + u_{g} p_{g, min} 1_{tl} \leq 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | rgu | Gen ramping up | :math:`p_g M_{r} - T_{cfg} R_{30,R} \leq 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | rgd | Gen ramping down | :math:`-p_g M_{r} - T_{cfg} R_{30,R} \leq 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | prsb | spinning reserve balance | :math:`u_{g} p_{g, max} 1_{tl} - p_g - p_{r,s} = 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | rsr | spinning reserve requirement | :math:`-S_{g} p_{r,s} + d_{s,r,z} \leq 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | rgu0 | Initial gen ramping up | :math:`u_{g}[: 0], p_g[:, 0] - p_{g, 0}[:, 0] - R_{30} \leq 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | rgd0 | Initial gen ramping down | :math:`u_{g}[: 0], -p_g[:, 0] + p_{g, 0}[:, 0] - R_{30} \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 | | +-------+----------------------+----------------------------------------------------------------+------------+-------------+------------+ | pru | :math:`p_{r,u}` | 2D RegUp power | *p.u.* | StaticGen | nonneg | +-------+----------------------+----------------------------------------------------------------+------------+-------------+------------+ | prd | :math:`p_{r,d}` | 2D RegDn power | *p.u.* | StaticGen | nonneg | +-------+----------------------+----------------------------------------------------------------+------------+-------------+------------+ | prs | :math:`p_{r,s}` | spinning reserve | *p.u.* | StaticGen | 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}` | Effective Gen controllability | NumOpDual | +---------+--------------------------+--------------------------------------------------+-----------+ | nctrl | :math:`c_{trl,n}` | Effective Gen uncontrollability | NumOp | +---------+--------------------------+--------------------------------------------------+-----------+ | nctrle | :math:`c_{trl,n,e}` | Effective Gen uncontrollability | 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 | +---------+--------------------------+--------------------------------------------------+-----------+ | dud | :math:`d_{u, d}` | zonal RegUp reserve requirement | NumOpDual | +---------+--------------------------+--------------------------------------------------+-----------+ | ddd | :math:`d_{d, d}` | zonal RegDn reserve requirement | 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 | +---------+--------------------------+--------------------------------------------------+-----------+ | 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}` | unit commitment decisions | | EDSlotGen.ug | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | 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 | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | cru | :math:`c_{r,u}` | RegUp reserve coefficient | *$/(p.u.)* | SFRCost.cru | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | crd | :math:`c_{r,d}` | RegDown reserve coefficient | *$/(p.u.)* | SFRCost.crd | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | du | :math:`d_{u}` | RegUp reserve requirement in percentage | *%* | SFR.du | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | dd | :math:`d_{d}` | RegDown reserve requirement in percentage | *%* | SFR.dd | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | timeslot | :math:`t_{s,idx}` | Time slot for multi-period ED | | EDSlot.idx | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | sd | :math:`s_{d}` | area load scaling factor | | EDSlotLoad.sd | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | 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 | +-----------+---------------------------+---------------------------------------------------+--------------+----------------------+ | 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 [ED2ES] +--------+-----------------+-------+------------------------+-----------------+ | Option | Symbol | Value | Info | Accepted values | +========+=================+=======+========================+=================+ | t | :math:`T_{cfg}` | 1 | time interval in hours | | +--------+-----------------+-------+------------------------+-----------------+ .. _DCOPF1: -------------------------------------------------------------------------------- DCOPF1 -------------------------------------------------------------------------------- DC optimal power flow using PYPOWER. This routine provides a wrapper for running DC optimal power flow analysis using the PYPOWER. It leverages PYPOWER's internal DC optimal power flow solver and maps results back to the AMS system. In PYPOWER, the ``c0`` term (the constant coefficient in the generator cost function) is always included in the objective, regardless of the generator's commitment status. See `pypower/opf_costfcn.py` for implementation details. Notes ----- - This class does not implement the AMS-style DC optimal power flow formulation. - For detailed mathematical formulations and algorithmic details, refer to the MATPOWER User's Manual, section on Optimal Power Flow. - Algorithms 400, 500, 600, and 700 are not fully supported yet. .. versionadded:: 1.0.10 Objective ---------------------------------- +------+----------------------------------------------------------------------------+ | Unit | Expression | +======+============================================================================+ | *$* | :math:`min. \sum(c_{2} p_{g}^{2}) + \sum(c_{1} p_{g}) + \sum(u_{g} c_{0})` | +------+----------------------------------------------------------------------------+ Vars ---------------------------------- +-------+-----------------+------------------------------------------------+----------+-------------+------------+ | Name | Symbol | Description | Unit | Source | Properties | +=======+=================+================================================+==========+=============+============+ | aBus | :math:`a_{Bus}` | bus voltage angle | *rad* | Bus.a | | +-------+-----------------+------------------------------------------------+----------+-------------+------------+ | vBus | :math:`v_{Bus}` | Bus voltage magnitude | *p.u.* | Bus.v | | +-------+-----------------+------------------------------------------------+----------+-------------+------------+ | pg | :math:`p_{g}` | Gen active power | *p.u.* | StaticGen.p | | +-------+-----------------+------------------------------------------------+----------+-------------+------------+ | qg | :math:`q_{g}` | Gen reactive power | *p.u.* | StaticGen.q | | +-------+-----------------+------------------------------------------------+----------+-------------+------------+ | plf | :math:`p_{lf}` | Line flow | *p.u.* | Line | | +-------+-----------------+------------------------------------------------+----------+-------------+------------+ | pi | :math:`pi` | Lagrange multiplier on real power mismatch | *$/p.u.* | Bus | | +-------+-----------------+------------------------------------------------+----------+-------------+------------+ | piq | :math:`piq` | Lagrange multiplier on reactive power mismatch | *$/p.u.* | Bus | | +-------+-----------------+------------------------------------------------+----------+-------------+------------+ | mu1 | :math:`mu1` | Kuhn-Tucker multiplier on MVA limit at bus1 | *$/p.u.* | Line | | +-------+-----------------+------------------------------------------------+----------+-------------+------------+ | mu2 | :math:`mu2` | Kuhn-Tucker multiplier on MVA limit at bus2 | *$/p.u.* | Line | | +-------+-----------------+------------------------------------------------+----------+-------------+------------+ ExpressionCalcs ---------------------------------- +-------+-------------+---------------------------------------------------------------------+------+--------+ | Name | Description | Expression | Unit | Source | +=======+=============+=====================================================================+======+========+ | None | Total cost | :math:`\sum(c_{2} p_{g}^{2})+ \sum(c_{1} p_{g})+ \sum(u_{g} c_{0})` | *$* | | +-------+-------------+---------------------------------------------------------------------+------+--------+ Parameters ---------------------------------- +------+---------------+------------------------+--------------+---------------+ | Name | Symbol | Description | Unit | Source | +======+===============+========================+==============+===============+ | ug | :math:`u_{g}` | Gen connection status | | StaticGen.u | +------+---------------+------------------------+--------------+---------------+ | 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 | +------+---------------+------------------------+--------------+---------------+ | pd | :math:`p_{d}` | active demand | *p.u.* | StaticLoad.p0 | +------+---------------+------------------------+--------------+---------------+ | qd | :math:`q_{d}` | reactive demand | *p.u.* | StaticLoad.q0 | +------+---------------+------------------------+--------------+---------------+ Config Fields in [DCOPF1] +---------------------+----------------------------------+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------+ | Option | Symbol | Value | Info | Accepted values | +=====================+==================================+=======+===============================================================================================================================================================================+===================================+ | verbose | :math:`v_{erbose}` | 1 | 0: no progress info, 1: little, 2: lots, 3: all | (0, 1, 2, 3) | +---------------------+----------------------------------+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------+ | out_all | :math:`o_{ut\_all}` | 0 | -1: individual flags control what prints, 0: none, 1: all | (-1, 0, 1) | +---------------------+----------------------------------+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------+ | out_sys_sum | :math:`o_{ut\_sys\_sum}` | 1 | print system summary | (0, 1) | +---------------------+----------------------------------+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------+ | out_area_sum | :math:`o_{ut\_area\_sum}` | 0 | print area summaries | (0, 1) | +---------------------+----------------------------------+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------+ | out_bus | :math:`o_{ut\_bus}` | 1 | print bus detail | (0, 1) | +---------------------+----------------------------------+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------+ | out_branch | :math:`o_{ut\_branch}` | 1 | print branch detail | (0, 1) | +---------------------+----------------------------------+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------+ | out_gen | :math:`o_{ut\_gen}` | 0 | print generator detail (OUT_BUS also includes gen info) | (0, 1) | +---------------------+----------------------------------+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------+ | out_all_lim | :math:`o_{ut\_all\_lim}` | -1 | -1: individual flags, 0: none, 1: binding, 2: all | (-1, 0, 1, 2) | +---------------------+----------------------------------+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------+ | out_v_lim | :math:`o_{ut\_v\_lim}` | 1 | 0: don't print, 1: binding constraints only, 2: all constraints | (0, 1, 2) | +---------------------+----------------------------------+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------+ | out_line_lim | :math:`o_{ut\_line\_lim}` | 1 | 0: don't print, 1: binding constraints only, 2: all constraints | (0, 1, 2) | +---------------------+----------------------------------+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------+ | out_pg_lim | :math:`o_{ut\_pg\_lim}` | 1 | 0: don't print, 1: binding constraints only, 2: all constraints | (0, 1, 2) | +---------------------+----------------------------------+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------+ | out_qg_lim | :math:`o_{ut\_qg\_lim}` | 1 | 0: don't print, 1: binding constraints only, 2: all constraints | (0, 1, 2) | +---------------------+----------------------------------+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------+ | opf_alg_dc | :math:`o_{pf\_alg\_dc}` | 200 | 0: choose default solver based on availability, 200: PIPS, 250: PIPS-sc, 400: IPOPT, 500: CPLEX, 600: MOSEK, 700: GUROBI | (0, 200, 250, 400, 500, 600, 700) | +---------------------+----------------------------------+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------+ | opf_violation | :math:`o_{pf\_violation}` | 0.000 | constraint violation tolerance | >=0 | +---------------------+----------------------------------+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------+ | opf_flow_lim | :math:`o_{pf\_flow\_lim}` | 0 | qty to limit for branch flow constraints: 0 - apparent power flow (limit in MVA), 1 - active power flow (limit in MW), 2 - current magnitude (limit in MVA at 1 p.u. voltage) | (0, 1, 2) | +---------------------+----------------------------------+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------+ | opf_ignore_ang_lim | :math:`o_{pf\_ignore\_ang\_lim}` | 0 | ignore angle difference limits for branches even if specified | (0, 1) | +---------------------+----------------------------------+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------+ | grb_method | :math:`o_{grb\_method}` | 1 | 0 - primal simplex, 1 - dual simplex, 2 - barrier, 3 - concurrent (LP only), 4 - deterministic concurrent (LP only) | (0, 1, 2, 3, 4) | +---------------------+----------------------------------+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------+ | grb_timelimit | :math:`o_{grb\_timelimit}` | inf | maximum time allowed for solver (TimeLimit) | (0, inf) | +---------------------+----------------------------------+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------+ | grb_threads | :math:`o_{grb\_threads}` | 0 | (auto) maximum number of threads to use (Threads) | (0, 1) | +---------------------+----------------------------------+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------+ | grb_opt | :math:`o_{grb\_opt}` | 0 | See gurobi_options() for details | (0, 1) | +---------------------+----------------------------------+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------+ | pdipm_feastol | :math:`o_{pdipm\_feastol}` | 0 | feasibility (equality) tolerance for Primal-Dual Interior Points Methods, set to value of OPF_VIOLATION by default | >=0 | +---------------------+----------------------------------+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------+ | pdipm_gradtol | :math:`o_{pdipm\_gradtol}` | 0.000 | gradient tolerance for Primal-Dual Interior Points Methods | >=0 | +---------------------+----------------------------------+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------+ | pdipm_comptol | :math:`o_{pdipm\_comptol}` | 0.000 | complementary condition (inequality) tolerance for Primal-Dual Interior Points Methods | >=0 | +---------------------+----------------------------------+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------+ | pdipm_costtol | :math:`o_{pdipm\_costtol}` | 0.000 | optimality tolerance for Primal-Dual Interior Points Methods | >=0 | +---------------------+----------------------------------+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------+ | pdipm_max_it | :math:`o_{pdipm\_max\_it}` | 150 | maximum iterations for Primal-Dual Interior Points Methods | >=0 | +---------------------+----------------------------------+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------+ | scpdipm_red_it | :math:`o_{scpdipm\_red\_it}` | 20 | maximum reductions per iteration for Step-Control Primal-Dual Interior Points Methods | >=0 | +---------------------+----------------------------------+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------+