.. _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_, ED_, EDDG_, EDES_, RTED_, RTEDDG_, RTEDES_, RTEDVIS_ .. _DCOPF: -------------------------------------------------------------------------------- DCOPF -------------------------------------------------------------------------------- DC optimal power flow (DCOPF). Line flow variable `plf` is calculated as ``Bf@aBus + Pfinj`` after solving the problem in ``_post_solve()`` . Objective ---------------------------------- +------+-------------+------+----------------------------------------------------------------------------+ | Name | Description | Unit | Expression | +======+=============+======+============================================================================+ | obj | total cost | *$* | :math:`min. \sum(c_{2} power(p_g, 2))+ \sum(c_{1} p_g)+ \sum(u_{g} c_{0})` | +------+-------------+------+----------------------------------------------------------------------------+ Constraints ---------------------------------- +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | Name | Description | Expression | +========+===================================+============================================================================================+ | pglb | pg min | :math:`-p_g + c_{trl,n,e} p_{g, 0} + c_{trl, e} p_{g, min} <= 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | pgub | pg max | :math:`p_g - c_{trl,n,e} p_{g, 0} - c_{trl, e} p_{g, max} <= 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | pb | power balance | :math:`B_{bus} \theta_{bus} + P_{bus}^{inj} + C_{l} p_{d} + C_{sh} g_{sh} - C_{g} p_g = 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | plflb | line flow lower bound | :math:`-B_{f} \theta_{bus} - P_{f}^{inj} - R_{ATEA} <= 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | plfub | line flow upper bound | :math:`B_{f} \theta_{bus} + P_{f}^{inj} - R_{ATEA} <= 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | alflb | line angle difference lower bound | :math:`-C_{ft}^T \theta_{bus} - \theta_{max} <= 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | alfub | line angle difference upper bound | :math:`C_{ft}^T \theta_{bus} - \theta_{max} <= 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ Vars ---------------------------------- +-------+----------------------+-------------------+--------+-------------+------------+ | Name | Symbol | Description | Unit | Source | Properties | +=======+======================+===================+========+=============+============+ | pg | :math:`p_g` | Gen active power | *p.u.* | StaticGen.p | | +-------+----------------------+-------------------+--------+-------------+------------+ | aBus | :math:`\theta_{bus}` | Bus voltage angle | *rad* | Bus.a | | +-------+----------------------+-------------------+--------+-------------+------------+ | plf | :math:`p_{lf}` | Line flow | *p.u.* | | | +-------+----------------------+-------------------+--------+-------------+------------+ Services --------- +---------+----------------------+---------------------------------+-----------+ | Name | Symbol | Description | Type | +=========+======================+=================================+===========+ | 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 | +---------+----------------------+---------------------------------+-----------+ | amax | :math:`\theta_{max}` | max line angle difference | NumOp | +---------+----------------------+---------------------------------+-----------+ Parameters ---------------------------------- +----------+-----------------------+-------------------------------------+--------------+----------------------+ | Name | Symbol | Description | Unit | Source | +==========+=======================+=====================================+==============+======================+ | 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 | +----------+-----------------------+-------------------------------------+--------------+----------------------+ | ug | :math:`u_{g}` | Gen connection status | | StaticGen.u | +----------+-----------------------+-------------------------------------+--------------+----------------------+ | 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 | +----------+-----------------------+-------------------------------------+--------------+----------------------+ | p0 | :math:`p_{g, 0}` | Gen initial active power | *p.u.* | StaticGen.pg0 | +----------+-----------------------+-------------------------------------+--------------+----------------------+ | pd | :math:`p_{d}` | active demand | *p.u.* | StaticLoad.p0 | +----------+-----------------------+-------------------------------------+--------------+----------------------+ | rate_a | :math:`R_{ATEA}` | long-term flow limit | *MVA* | Line.rate_a | +----------+-----------------------+-------------------------------------+--------------+----------------------+ | gsh | :math:`g_{sh}` | shunt conductance | | Shunt.g | +----------+-----------------------+-------------------------------------+--------------+----------------------+ | 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 | +----------+-----------------------+-------------------------------------+--------------+----------------------+ .. _ED: -------------------------------------------------------------------------------- ED -------------------------------------------------------------------------------- DC-based multi-period economic dispatch (ED). Dispath interval ``config.t`` (:math:`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 ``EDTSlot.ug`` as commitment decisions Notes ----- 1. Formulations has been adjusted with interval ``config.t`` 2. The tie-line flow is not implemented in this model. Objective ---------------------------------- +------+-----------------------------------+------+---------------------------------------------------------------------------------------------------------------------------------------+ | Name | Description | Unit | Expression | +======+===================================+======+=======================================================================================================================================+ | obj | total generation and reserve cost | *$* | :math:`min. \sum(c_{2} (T_{cfg} p_g)^{2} + c_{1} (T_{cfg} p_g))+ \sum(u_{g} c_{0} 1_{tl}) + \sum(c_{sr} (T_{cfg} p_{r,s}))` | +------+-----------------------------------+------+---------------------------------------------------------------------------------------------------------------------------------------+ Constraints ---------------------------------- +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------+ | Name | Description | Expression | +========+===================================+============================================================================================================+ | pglb | pg min | :math:`-p_g + c_{trl,n,e} p_{g, 0} 1_{tl} + c_{trl, e} 1_{tl} p_{g, min} <= 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------+ | pgub | pg max | :math:`p_g - c_{trl,n,e} p_{g, 0} 1_{tl} - c_{trl, e} 1_{tl} p_{g, max} <= 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------+ | 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` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------+ | plflb | line flow lower bound | :math:`-B_{f} \theta_{bus} - P_{f}^{inj} 1_{tl} - R_{ATEA} 1_{tl} <= 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------+ | plfub | line flow upper bound | :math:`B_{f} \theta_{bus} + P_{f}^{inj} 1_{tl} - R_{ATEA} 1_{tl} <= 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------+ | alflb | line angle difference lower bound | :math:`-C_{ft}^T \theta_{bus} - \theta_{max} 1_{tl} <= 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------+ | alfub | line angle difference upper bound | :math:`C_{ft}^T \theta_{bus} - \theta_{max} 1_{tl} <= 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:`u_{g} p_g + p_{r,u} - p_{g, max} 1_{tl} <= 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------+ | rrd | RegDn reserve source | :math:`u_{g} -p_g + p_{r,d} + p_{g, min} 1_{tl} <= 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------+ | rgu | Gen ramping up | :math:`p_g M_{r} - T_{cfg} R_{30,R} <= 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------+ | rgd | Gen ramping down | :math:`-p_g M_{r} - T_{cfg} R_{30,R} <= 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} <= 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------+ | rgu0 | Initial gen ramping up | :math:`p_g[:, 0] - p_{g, 0}[:, 0] - R_{30} <= 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------+ | rgd0 | Initial gen ramping down | :math:`- p_g[:, 0] + p_{g, 0}[:, 0] - R_{30} <= 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------+ Vars ---------------------------------- +-------+----------------------+------------------+--------+-------------+------------+ | Name | Symbol | Description | Unit | Source | Properties | +=======+======================+==================+========+=============+============+ | pg | :math:`p_g` | 2D Gen power | *p.u.* | StaticGen.p | | +-------+----------------------+------------------+--------+-------------+------------+ | aBus | :math:`\theta_{bus}` | 2D Bus angle | *rad* | Bus.a | | +-------+----------------------+------------------+--------+-------------+------------+ | plf | :math:`p_{lf}` | 2D Line flow | *p.u.* | | | +-------+----------------------+------------------+--------+-------------+------------+ | pru | :math:`p_{r,u}` | 2D RegUp power | *p.u.* | | nonneg | +-------+----------------------+------------------+--------+-------------+------------+ | prd | :math:`p_{r,d}` | 2D RegDn power | *p.u.* | | nonneg | +-------+----------------------+------------------+--------+-------------+------------+ | prs | :math:`p_{r,s}` | spinning reserve | *p.u.* | | nonneg | +-------+----------------------+------------------+--------+-------------+------------+ Services --------- +---------+-----------------------+--------------------------------------------------+-----------+ | Name | Symbol | Description | Type | +=========+=======================+==================================================+===========+ | 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 | +---------+-----------------------+--------------------------------------------------+-----------+ | amax | :math:`\theta_{max}` | max line angle difference | NumOp | +---------+-----------------------+--------------------------------------------------+-----------+ | gs | :math:`S_{g}` | Sum Gen vars vector in shape of zone | ZonalSum | +---------+-----------------------+--------------------------------------------------+-----------+ | ds | :math:`S_{d}` | Sum pd vector in shape of zone | 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 | +---------+-----------------------+--------------------------------------------------+-----------+ | ugt | :math:`u_{g}` | input ug transpose | NumOp | +---------+-----------------------+--------------------------------------------------+-----------+ Parameters ---------------------------------- +-----------+-----------------------+--------------------------------------------+--------------+----------------------+ | Name | Symbol | Description | Unit | Source | +===========+=======================+============================================+==============+======================+ | 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 | +-----------+-----------------------+--------------------------------------------+--------------+----------------------+ | ug | :math:`u_{g}` | unit commitment decisions | | EDTSlot.ug | +-----------+-----------------------+--------------------------------------------+--------------+----------------------+ | 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 | +-----------+-----------------------+--------------------------------------------+--------------+----------------------+ | p0 | :math:`p_{g, 0}` | Gen initial active power | *p.u.* | StaticGen.pg0 | +-----------+-----------------------+--------------------------------------------+--------------+----------------------+ | pd | :math:`p_{d}` | active demand | *p.u.* | StaticLoad.p0 | +-----------+-----------------------+--------------------------------------------+--------------+----------------------+ | rate_a | :math:`R_{ATEA}` | long-term flow limit | *MVA* | Line.rate_a | +-----------+-----------------------+--------------------------------------------+--------------+----------------------+ | gsh | :math:`g_{sh}` | shunt conductance | | Shunt.g | +-----------+-----------------------+--------------------------------------------+--------------+----------------------+ | 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 | +-----------+-----------------------+--------------------------------------------+--------------+----------------------+ | zg | :math:`z_{one,g}` | Gen zone | | StaticGen.zone | +-----------+-----------------------+--------------------------------------------+--------------+----------------------+ | zd | :math:`z_{one,d}` | Load zone | | StaticLoad.zone | +-----------+-----------------------+--------------------------------------------+--------------+----------------------+ | 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 | +-----------+-----------------------+--------------------------------------------+--------------+----------------------+ | sd | :math:`s_{d}` | zonal load factor for ED | | EDTSlot.sd | +-----------+-----------------------+--------------------------------------------+--------------+----------------------+ | timeslot | :math:`t_{s,idx}` | Time slot for multi-period ED | | EDTSlot.idx | +-----------+-----------------------+--------------------------------------------+--------------+----------------------+ | R30 | :math:`R_{30}` | 30-min ramp rate | *p.u./h* | StaticGen.R30 | +-----------+-----------------------+--------------------------------------------+--------------+----------------------+ | dsr | :math:`d_{sr}` | spinning reserve requirement in percentage | *%* | SR.demand | +-----------+-----------------------+--------------------------------------------+--------------+----------------------+ | csr | :math:`c_{sr}` | cost for spinning reserve | *$/(p.u.*h)* | SRCost.csr | +-----------+-----------------------+--------------------------------------------+--------------+----------------------+ .. _EDDG: -------------------------------------------------------------------------------- EDDG -------------------------------------------------------------------------------- ED with distributed generation :ref:`DG`. Note that EDDG only inlcudes DG output power. If ESD1 is included, EDES should be used instead, otherwise there is no SOC. Objective ---------------------------------- +------+-----------------------------------+------+---------------------------------------------------------------------------------------------------------------------------------------+ | Name | Description | Unit | Expression | +======+===================================+======+=======================================================================================================================================+ | obj | total generation and reserve cost | *$* | :math:`min. \sum(c_{2} (T_{cfg} p_g)^{2} + c_{1} (T_{cfg} p_g))+ \sum(u_{g} c_{0} 1_{tl}) + \sum(c_{sr} (T_{cfg} p_{r,s}))` | +------+-----------------------------------+------+---------------------------------------------------------------------------------------------------------------------------------------+ Constraints ---------------------------------- +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------+ | Name | Description | Expression | +========+===================================+============================================================================================================+ | pglb | pg min | :math:`-p_g + c_{trl,n,e} p_{g, 0} 1_{tl} + c_{trl, e} 1_{tl} p_{g, min} <= 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------+ | pgub | pg max | :math:`p_g - c_{trl,n,e} p_{g, 0} 1_{tl} - c_{trl, e} 1_{tl} p_{g, max} <= 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------+ | 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` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------+ | plflb | line flow lower bound | :math:`-B_{f} \theta_{bus} - P_{f}^{inj} 1_{tl} - R_{ATEA} 1_{tl} <= 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------+ | plfub | line flow upper bound | :math:`B_{f} \theta_{bus} + P_{f}^{inj} 1_{tl} - R_{ATEA} 1_{tl} <= 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------+ | alflb | line angle difference lower bound | :math:`-C_{ft}^T \theta_{bus} - \theta_{max} 1_{tl} <= 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------+ | alfub | line angle difference upper bound | :math:`C_{ft}^T \theta_{bus} - \theta_{max} 1_{tl} <= 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:`u_{g} p_g + p_{r,u} - p_{g, max} 1_{tl} <= 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------+ | rrd | RegDn reserve source | :math:`u_{g} -p_g + p_{r,d} + p_{g, min} 1_{tl} <= 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------+ | rgu | Gen ramping up | :math:`p_g M_{r} - T_{cfg} R_{30,R} <= 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------+ | rgd | Gen ramping down | :math:`-p_g M_{r} - T_{cfg} R_{30,R} <= 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} <= 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------+ | rgu0 | Initial gen ramping up | :math:`p_g[:, 0] - p_{g, 0}[:, 0] - R_{30} <= 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------+ | rgd0 | Initial gen ramping down | :math:`- p_g[:, 0] + p_{g, 0}[:, 0] - R_{30} <= 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------+ | cdgb | Select DG power from pg | :math:`C_{DG} p_g - p_{g,DG} = 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------+ Vars ---------------------------------- +-------+----------------------+------------------+--------+-------------+------------+ | Name | Symbol | Description | Unit | Source | Properties | +=======+======================+==================+========+=============+============+ | pg | :math:`p_g` | 2D Gen power | *p.u.* | StaticGen.p | | +-------+----------------------+------------------+--------+-------------+------------+ | aBus | :math:`\theta_{bus}` | 2D Bus angle | *rad* | Bus.a | | +-------+----------------------+------------------+--------+-------------+------------+ | plf | :math:`p_{lf}` | 2D Line flow | *p.u.* | | | +-------+----------------------+------------------+--------+-------------+------------+ | pru | :math:`p_{r,u}` | 2D RegUp power | *p.u.* | | nonneg | +-------+----------------------+------------------+--------+-------------+------------+ | prd | :math:`p_{r,d}` | 2D RegDn power | *p.u.* | | nonneg | +-------+----------------------+------------------+--------+-------------+------------+ | prs | :math:`p_{r,s}` | spinning reserve | *p.u.* | | nonneg | +-------+----------------------+------------------+--------+-------------+------------+ | pgdg | :math:`p_{g,DG}` | DG output power | *p.u.* | | | +-------+----------------------+------------------+--------+-------------+------------+ Services --------- +---------+-----------------------+--------------------------------------------------+-----------+ | Name | Symbol | Description | Type | +=========+=======================+==================================================+===========+ | 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 | +---------+-----------------------+--------------------------------------------------+-----------+ | amax | :math:`\theta_{max}` | max line angle difference | NumOp | +---------+-----------------------+--------------------------------------------------+-----------+ | gs | :math:`S_{g}` | Sum Gen vars vector in shape of zone | ZonalSum | +---------+-----------------------+--------------------------------------------------+-----------+ | ds | :math:`S_{d}` | Sum pd vector in shape of zone | 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 | +---------+-----------------------+--------------------------------------------------+-----------+ | ugt | :math:`u_{g}` | input ug transpose | NumOp | +---------+-----------------------+--------------------------------------------------+-----------+ | cd | :math:`C_{DG}` | Select DG power from pg | VarSelect | +---------+-----------------------+--------------------------------------------------+-----------+ Parameters ---------------------------------- +-----------+-----------------------+--------------------------------------------------------+--------------+----------------------+ | Name | Symbol | Description | Unit | Source | +===========+=======================+========================================================+==============+======================+ | 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 | +-----------+-----------------------+--------------------------------------------------------+--------------+----------------------+ | ug | :math:`u_{g}` | unit commitment decisions | | EDTSlot.ug | +-----------+-----------------------+--------------------------------------------------------+--------------+----------------------+ | 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 | +-----------+-----------------------+--------------------------------------------------------+--------------+----------------------+ | p0 | :math:`p_{g, 0}` | Gen initial active power | *p.u.* | StaticGen.pg0 | +-----------+-----------------------+--------------------------------------------------------+--------------+----------------------+ | pd | :math:`p_{d}` | active demand | *p.u.* | StaticLoad.p0 | +-----------+-----------------------+--------------------------------------------------------+--------------+----------------------+ | rate_a | :math:`R_{ATEA}` | long-term flow limit | *MVA* | Line.rate_a | +-----------+-----------------------+--------------------------------------------------------+--------------+----------------------+ | gsh | :math:`g_{sh}` | shunt conductance | | Shunt.g | +-----------+-----------------------+--------------------------------------------------------+--------------+----------------------+ | 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 | +-----------+-----------------------+--------------------------------------------------------+--------------+----------------------+ | zg | :math:`z_{one,g}` | Gen zone | | StaticGen.zone | +-----------+-----------------------+--------------------------------------------------------+--------------+----------------------+ | zd | :math:`z_{one,d}` | Load zone | | StaticLoad.zone | +-----------+-----------------------+--------------------------------------------------------+--------------+----------------------+ | 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 | +-----------+-----------------------+--------------------------------------------------------+--------------+----------------------+ | sd | :math:`s_{d}` | zonal load factor for ED | | EDTSlot.sd | +-----------+-----------------------+--------------------------------------------------------+--------------+----------------------+ | timeslot | :math:`t_{s,idx}` | Time slot for multi-period ED | | EDTSlot.idx | +-----------+-----------------------+--------------------------------------------------------+--------------+----------------------+ | R30 | :math:`R_{30}` | 30-min ramp rate | *p.u./h* | StaticGen.R30 | +-----------+-----------------------+--------------------------------------------------------+--------------+----------------------+ | dsr | :math:`d_{sr}` | spinning reserve requirement in percentage | *%* | SR.demand | +-----------+-----------------------+--------------------------------------------------------+--------------+----------------------+ | csr | :math:`c_{sr}` | cost for spinning reserve | *$/(p.u.*h)* | SRCost.csr | +-----------+-----------------------+--------------------------------------------------------+--------------+----------------------+ | 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 | +-----------+-----------------------+--------------------------------------------------------+--------------+----------------------+ .. _EDES: -------------------------------------------------------------------------------- EDES -------------------------------------------------------------------------------- ED with energy storage :ref:`ESD1`. The bilinear term in the formulation is linearized with big-M method. Objective ---------------------------------- +------+-----------------------------------+------+---------------------------------------------------------------------------------------------------------------------------------------+ | Name | Description | Unit | Expression | +======+===================================+======+=======================================================================================================================================+ | obj | total generation and reserve cost | *$* | :math:`min. \sum(c_{2} (T_{cfg} p_g)^{2} + c_{1} (T_{cfg} p_g))+ \sum(u_{g} c_{0} 1_{tl}) + \sum(c_{sr} (T_{cfg} p_{r,s}))` | +------+-----------------------------------+------+---------------------------------------------------------------------------------------------------------------------------------------+ Constraints ---------------------------------- +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | Name | Description | Expression | +========+===================================+========================================================================================================================+ | pglb | pg min | :math:`-p_g + c_{trl,n,e} p_{g, 0} 1_{tl} + c_{trl, e} 1_{tl} p_{g, min} <= 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | pgub | pg max | :math:`p_g - c_{trl,n,e} p_{g, 0} 1_{tl} - c_{trl, e} 1_{tl} p_{g, max} <= 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | 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` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | plflb | line flow lower bound | :math:`-B_{f} \theta_{bus} - P_{f}^{inj} 1_{tl} - R_{ATEA} 1_{tl} <= 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | plfub | line flow upper bound | :math:`B_{f} \theta_{bus} + P_{f}^{inj} 1_{tl} - R_{ATEA} 1_{tl} <= 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | alflb | line angle difference lower bound | :math:`-C_{ft}^T \theta_{bus} - \theta_{max} 1_{tl} <= 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | alfub | line angle difference upper bound | :math:`C_{ft}^T \theta_{bus} - \theta_{max} 1_{tl} <= 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:`u_{g} p_g + p_{r,u} - p_{g, max} 1_{tl} <= 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | rrd | RegDn reserve source | :math:`u_{g} -p_g + p_{r,d} + p_{g, min} 1_{tl} <= 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | rgu | Gen ramping up | :math:`p_g M_{r} - T_{cfg} R_{30,R} <= 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | rgd | Gen ramping down | :math:`-p_g M_{r} - T_{cfg} R_{30,R} <= 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} <= 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | rgu0 | Initial gen ramping up | :math:`p_g[:, 0] - p_{g, 0}[:, 0] - R_{30} <= 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | rgd0 | Initial gen ramping down | :math:`- p_g[:, 0] + p_{g, 0}[:, 0] - R_{30} <= 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | cdgb | Select DG power from pg | :math:`C_{DG} p_g - p_{g,DG} = 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | SOClb | SOC lower bound | :math:`-SOC + SOC_{min} <= 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | SOCub | SOC upper bound | :math:`SOC - SOC_{max} <= 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | cdb | Charging decision bound | :math:`u_{c,ESD} + u_{d,ESD} - 1 = 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | cesb | Select ESD1 power from pg | :math:`C_{ESD} p_g + z_{c,ESD} - z_{d,ESD} = 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | zce1 | zce bound 1 | :math:`-z_{c,ESD} + p_{c,ESD} <= 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | zce2 | zce bound 2 | :math:`z_{c,ESD} - p_{c,ESD} - M_{big} (1-u_{c,ESD}) <= 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | zce3 | zce bound 3 | :math:`z_{c,ESD} - M_{big} u_{c,ESD} <= 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | zde1 | zde bound 1 | :math:`-z_{d,ESD} + p_{d,ESD} <= 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | zde2 | zde bound 2 | :math:`z_{d,ESD} - p_{d,ESD} - M_{big} (1-u_{d,ESD}) <= 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | zde3 | zde bound 3 | :math:`z_{d,ESD} - M_{big} u_{d,ESD} <= 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | SOCb | ESD1 SOC balance | :math:`E_{n,R} SOC M_{r,ES} - T_{cfg} \eta_{c,R} z_{c,ESD}[:, 1:] + T_{cfg} R_{\eta_d,R} z_{d,ESD}[:, 1:] = 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | SOCb0 | ESD1 SOC initial balance | :math:`E_n SOC[:, 0] - SOC_{init} - T_{cfg} \eta_c z_{c,ESD}[:, 0] + T_{cfg} \frac{1}{\eta_d} z_{d,ESD}[:, 0] = 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ | SOCr | SOC requirement | :math:`SOC[:, -1] - SOC_{init} = 0` | +--------+-----------------------------------+------------------------------------------------------------------------------------------------------------------------+ Vars ---------------------------------- +-------+----------------------+----------------------------------------------------------------+--------+-------------+------------+ | Name | Symbol | Description | Unit | Source | Properties | +=======+======================+================================================================+========+=============+============+ | pg | :math:`p_g` | 2D Gen power | *p.u.* | StaticGen.p | | +-------+----------------------+----------------------------------------------------------------+--------+-------------+------------+ | aBus | :math:`\theta_{bus}` | 2D Bus angle | *rad* | Bus.a | | +-------+----------------------+----------------------------------------------------------------+--------+-------------+------------+ | plf | :math:`p_{lf}` | 2D Line flow | *p.u.* | | | +-------+----------------------+----------------------------------------------------------------+--------+-------------+------------+ | pru | :math:`p_{r,u}` | 2D RegUp power | *p.u.* | | nonneg | +-------+----------------------+----------------------------------------------------------------+--------+-------------+------------+ | prd | :math:`p_{r,d}` | 2D RegDn power | *p.u.* | | nonneg | +-------+----------------------+----------------------------------------------------------------+--------+-------------+------------+ | prs | :math:`p_{r,s}` | spinning reserve | *p.u.* | | nonneg | +-------+----------------------+----------------------------------------------------------------+--------+-------------+------------+ | pgdg | :math:`p_{g,DG}` | DG output power | *p.u.* | | | +-------+----------------------+----------------------------------------------------------------+--------+-------------+------------+ | SOC | :math:`SOC` | ESD1 State of Charge | *%* | | pos | +-------+----------------------+----------------------------------------------------------------+--------+-------------+------------+ | pce | :math:`p_{c,ESD}` | ESD1 charging power | *p.u.* | | nonneg | +-------+----------------------+----------------------------------------------------------------+--------+-------------+------------+ | pde | :math:`p_{d,ESD}` | ESD1 discharging power | *p.u.* | | nonneg | +-------+----------------------+----------------------------------------------------------------+--------+-------------+------------+ | uce | :math:`u_{c,ESD}` | ESD1 charging decision | | | boolean | +-------+----------------------+----------------------------------------------------------------+--------+-------------+------------+ | ude | :math:`u_{d,ESD}` | ESD1 discharging decision | | | boolean | +-------+----------------------+----------------------------------------------------------------+--------+-------------+------------+ | zce | :math:`z_{c,ESD}` | Aux var for charging, :math:`z_{c,ESD}=u_{c,ESD}*p_{c,ESD}` | | | nonneg | +-------+----------------------+----------------------------------------------------------------+--------+-------------+------------+ | zde | :math:`z_{d,ESD}` | Aux var for discharging, :math:`z_{d,ESD}=u_{d,ESD}*p_{d,ESD}` | | | nonneg | +-------+----------------------+----------------------------------------------------------------+--------+-------------+------------+ Services --------- +---------+--------------------------+--------------------------------------------------+-----------+ | Name | Symbol | Description | Type | +=========+==========================+==================================================+===========+ | 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 | +---------+--------------------------+--------------------------------------------------+-----------+ | amax | :math:`\theta_{max}` | max line angle difference | NumOp | +---------+--------------------------+--------------------------------------------------+-----------+ | gs | :math:`S_{g}` | Sum Gen vars vector in shape of zone | ZonalSum | +---------+--------------------------+--------------------------------------------------+-----------+ | ds | :math:`S_{d}` | Sum pd vector in shape of zone | 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 | +---------+--------------------------+--------------------------------------------------+-----------+ | ugt | :math:`u_{g}` | input ug transpose | NumOp | +---------+--------------------------+--------------------------------------------------+-----------+ | cd | :math:`C_{DG}` | Select DG power from pg | VarSelect | +---------+--------------------------+--------------------------------------------------+-----------+ | REtaD | :math:`\frac{1}{\eta_d}` | | NumOp | +---------+--------------------------+--------------------------------------------------+-----------+ | Mb | :math:`M_{big}` | 10 times of max of pmax as big M | NumOp | +---------+--------------------------+--------------------------------------------------+-----------+ | ce | :math:`C_{ESD}` | Select zue 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 | +============+========================+========================================================+==============+======================+ | 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 | +------------+------------------------+--------------------------------------------------------+--------------+----------------------+ | ug | :math:`u_{g}` | unit commitment decisions | | EDTSlot.ug | +------------+------------------------+--------------------------------------------------------+--------------+----------------------+ | 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 | +------------+------------------------+--------------------------------------------------------+--------------+----------------------+ | p0 | :math:`p_{g, 0}` | Gen initial active power | *p.u.* | StaticGen.pg0 | +------------+------------------------+--------------------------------------------------------+--------------+----------------------+ | pd | :math:`p_{d}` | active demand | *p.u.* | StaticLoad.p0 | +------------+------------------------+--------------------------------------------------------+--------------+----------------------+ | rate_a | :math:`R_{ATEA}` | long-term flow limit | *MVA* | Line.rate_a | +------------+------------------------+--------------------------------------------------------+--------------+----------------------+ | gsh | :math:`g_{sh}` | shunt conductance | | Shunt.g | +------------+------------------------+--------------------------------------------------------+--------------+----------------------+ | 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 | +------------+------------------------+--------------------------------------------------------+--------------+----------------------+ | zg | :math:`z_{one,g}` | Gen zone | | StaticGen.zone | +------------+------------------------+--------------------------------------------------------+--------------+----------------------+ | zd | :math:`z_{one,d}` | Load zone | | StaticLoad.zone | +------------+------------------------+--------------------------------------------------------+--------------+----------------------+ | 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 | +------------+------------------------+--------------------------------------------------------+--------------+----------------------+ | sd | :math:`s_{d}` | zonal load factor for ED | | EDTSlot.sd | +------------+------------------------+--------------------------------------------------------+--------------+----------------------+ | timeslot | :math:`t_{s,idx}` | Time slot for multi-period ED | | EDTSlot.idx | +------------+------------------------+--------------------------------------------------------+--------------+----------------------+ | R30 | :math:`R_{30}` | 30-min ramp rate | *p.u./h* | StaticGen.R30 | +------------+------------------------+--------------------------------------------------------+--------------+----------------------+ | dsr | :math:`d_{sr}` | spinning reserve requirement in percentage | *%* | SR.demand | +------------+------------------------+--------------------------------------------------------+--------------+----------------------+ | csr | :math:`c_{sr}` | cost for spinning reserve | *$/(p.u.*h)* | SRCost.csr | +------------+------------------------+--------------------------------------------------------+--------------+----------------------+ | gendg | :math:`g_{DG}` | gen of DG | | DG.gen | +------------+------------------------+--------------------------------------------------------+--------------+----------------------+ | gammapd | :math:`\gamma_{p,DG}` | ('Ratio of DG.pge w.r.t to that of static generator',) | | DG.gammap | +------------+------------------------+--------------------------------------------------------+--------------+----------------------+ | En | :math:`E_n` | Rated energy capacity | *MWh* | ESD1.En | +------------+------------------------+--------------------------------------------------------+--------------+----------------------+ | SOCmax | :math:`SOC_{max}` | Maximum allowed value for SOC in limiter | *%* | ESD1.SOCmax | +------------+------------------------+--------------------------------------------------------+--------------+----------------------+ | SOCmin | :math:`SOC_{min}` | Minimum required value for SOC in limiter | *%* | ESD1.SOCmin | +------------+------------------------+--------------------------------------------------------+--------------+----------------------+ | SOCinit | :math:`SOC_{init}` | Initial SOC | *%* | ESD1.SOCinit | +------------+------------------------+--------------------------------------------------------+--------------+----------------------+ | EtaC | :math:`\eta_c` | Efficiency during charging | *%* | ESD1.EtaC | +------------+------------------------+--------------------------------------------------------+--------------+----------------------+ | EtaD | :math:`\eta_d` | Efficiency during discharging | *%* | ESD1.EtaD | +------------+------------------------+--------------------------------------------------------+--------------+----------------------+ | genesd | :math:`g_{ESD}` | gen of ESD1 | | ESD1.gen | +------------+------------------------+--------------------------------------------------------+--------------+----------------------+ | gammapesd | :math:`\gamma_{p,ESD}` | Ratio of ESD1.pge w.r.t to that of static generator | | ESD1.gammap | +------------+------------------------+--------------------------------------------------------+--------------+----------------------+ .. _RTED: -------------------------------------------------------------------------------- RTED -------------------------------------------------------------------------------- DC-based real-time economic dispatch (RTED). RTED extends DCOPF with: - Mapping dicts to interface with ANDES - Function ``dc2ac`` to do the AC conversion - 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 ----- 1. Formulations has been adjusted with interval ``config.t``, 5/60 [Hour] by default. 2. The tie-line flow has not been implemented in formulations. Objective ---------------------------------- +------+-----------------------------------+------+---------------------------------------------------------------------------------------------------------------------------------------------+ | Name | Description | Unit | Expression | +======+===================================+======+=============================================================================================================================================+ | obj | total generation and reserve cost | *$* | :math:`min. \sum(c_{2} power(T_{cfg} p_g, 2))+ \sum(c_{1} (T_{cfg} p_g))+ u_{g} c_{0}+ \sum(c_{r,u} p_{r,u} + c_{r,d} p_{r,d})` | +------+-----------------------------------+------+---------------------------------------------------------------------------------------------------------------------------------------------+ Constraints ---------------------------------- +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | Name | Description | Expression | +========+===================================+============================================================================================+ | pglb | pg min | :math:`-p_g + c_{trl,n,e} p_{g, 0} + c_{trl, e} p_{g, min} <= 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | pgub | pg max | :math:`p_g - c_{trl,n,e} p_{g, 0} - c_{trl, e} p_{g, max} <= 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | pb | power balance | :math:`B_{bus} \theta_{bus} + P_{bus}^{inj} + C_{l} p_{d} + C_{sh} g_{sh} - C_{g} p_g = 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | plflb | line flow lower bound | :math:`-B_{f} \theta_{bus} - P_{f}^{inj} - R_{ATEA} <= 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | plfub | line flow upper bound | :math:`B_{f} \theta_{bus} + P_{f}^{inj} - R_{ATEA} <= 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | alflb | line angle difference lower bound | :math:`-C_{ft}^T \theta_{bus} - \theta_{max} <= 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | alfub | line angle difference upper bound | :math:`C_{ft}^T \theta_{bus} - \theta_{max} <= 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} <= 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | rrd | RegDn reserve source | :math:`u_{g} -p_g + p_{r,d} + u_{g} p_{g, min} <= 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | rgu | Gen ramping up | :math:`u_{g} p_g-p_{g, 0}-R_{10} <= 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | rgd | Gen ramping down | :math:`u_{g} -p_g+p_{g, 0}-R_{10} <= 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ Vars ---------------------------------- +-------+----------------------+-------------------+--------+-------------+------------+ | Name | Symbol | Description | Unit | Source | Properties | +=======+======================+===================+========+=============+============+ | pg | :math:`p_g` | Gen active power | *p.u.* | StaticGen.p | | +-------+----------------------+-------------------+--------+-------------+------------+ | aBus | :math:`\theta_{bus}` | Bus voltage angle | *rad* | Bus.a | | +-------+----------------------+-------------------+--------+-------------+------------+ | plf | :math:`p_{lf}` | Line flow | *p.u.* | | | +-------+----------------------+-------------------+--------+-------------+------------+ | pru | :math:`p_{r,u}` | RegUp reserve | *p.u.* | | nonneg | +-------+----------------------+-------------------+--------+-------------+------------+ | prd | :math:`p_{r,d}` | RegDn reserve | *p.u.* | | nonneg | +-------+----------------------+-------------------+--------+-------------+------------+ Services --------- +---------+----------------------+--------------------------------------+-----------+ | Name | Symbol | Description | Type | +=========+======================+======================================+===========+ | 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 | +---------+----------------------+--------------------------------------+-----------+ | amax | :math:`\theta_{max}` | max line angle difference | NumOp | +---------+----------------------+--------------------------------------+-----------+ | gs | :math:`S_{g}` | Sum Gen vars vector in shape of zone | ZonalSum | +---------+----------------------+--------------------------------------+-----------+ | ds | :math:`S_{d}` | Sum pd vector in shape of zone | 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 | +==========+=======================+===========================================+==============+======================+ | 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 | +----------+-----------------------+-------------------------------------------+--------------+----------------------+ | ug | :math:`u_{g}` | Gen connection status | | StaticGen.u | +----------+-----------------------+-------------------------------------------+--------------+----------------------+ | 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 | +----------+-----------------------+-------------------------------------------+--------------+----------------------+ | p0 | :math:`p_{g, 0}` | Gen initial active power | *p.u.* | StaticGen.pg0 | +----------+-----------------------+-------------------------------------------+--------------+----------------------+ | pd | :math:`p_{d}` | active demand | *p.u.* | StaticLoad.p0 | +----------+-----------------------+-------------------------------------------+--------------+----------------------+ | rate_a | :math:`R_{ATEA}` | long-term flow limit | *MVA* | Line.rate_a | +----------+-----------------------+-------------------------------------------+--------------+----------------------+ | gsh | :math:`g_{sh}` | shunt conductance | | Shunt.g | +----------+-----------------------+-------------------------------------------+--------------+----------------------+ | 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 | +----------+-----------------------+-------------------------------------------+--------------+----------------------+ | zg | :math:`z_{one,g}` | Gen zone | | StaticGen.zone | +----------+-----------------------+-------------------------------------------+--------------+----------------------+ | zd | :math:`z_{one,d}` | Load zone | | StaticLoad.zone | +----------+-----------------------+-------------------------------------------+--------------+----------------------+ | 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 | +----------+-----------------------+-------------------------------------------+--------------+----------------------+ .. _RTEDDG: -------------------------------------------------------------------------------- RTEDDG -------------------------------------------------------------------------------- RTED with distributed generator :ref:`DG`. Note that RTEDDG only inlcudes DG output power. If ESD1 is included, RTEDES should be used instead, otherwise there is no SOC. Objective ---------------------------------- +------+-----------------------------------+------+---------------------------------------------------------------------------------------------------------------------------------------------+ | Name | Description | Unit | Expression | +======+===================================+======+=============================================================================================================================================+ | obj | total generation and reserve cost | *$* | :math:`min. \sum(c_{2} power(T_{cfg} p_g, 2))+ \sum(c_{1} (T_{cfg} p_g))+ u_{g} c_{0}+ \sum(c_{r,u} p_{r,u} + c_{r,d} p_{r,d})` | +------+-----------------------------------+------+---------------------------------------------------------------------------------------------------------------------------------------------+ Constraints ---------------------------------- +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | Name | Description | Expression | +========+===================================+============================================================================================+ | pglb | pg min | :math:`-p_g + c_{trl,n,e} p_{g, 0} + c_{trl, e} p_{g, min} <= 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | pgub | pg max | :math:`p_g - c_{trl,n,e} p_{g, 0} - c_{trl, e} p_{g, max} <= 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | pb | power balance | :math:`B_{bus} \theta_{bus} + P_{bus}^{inj} + C_{l} p_{d} + C_{sh} g_{sh} - C_{g} p_g = 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | plflb | line flow lower bound | :math:`-B_{f} \theta_{bus} - P_{f}^{inj} - R_{ATEA} <= 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | plfub | line flow upper bound | :math:`B_{f} \theta_{bus} + P_{f}^{inj} - R_{ATEA} <= 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | alflb | line angle difference lower bound | :math:`-C_{ft}^T \theta_{bus} - \theta_{max} <= 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | alfub | line angle difference upper bound | :math:`C_{ft}^T \theta_{bus} - \theta_{max} <= 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} <= 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | rrd | RegDn reserve source | :math:`u_{g} -p_g + p_{r,d} + u_{g} p_{g, min} <= 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | rgu | Gen ramping up | :math:`u_{g} p_g-p_{g, 0}-R_{10} <= 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | rgd | Gen ramping down | :math:`u_{g} -p_g+p_{g, 0}-R_{10} <= 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | cdgb | Select DG power from pg | :math:`C_{DG} p_g - p_{g,DG} = 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ Vars ---------------------------------- +-------+----------------------+-------------------+--------+-------------+------------+ | Name | Symbol | Description | Unit | Source | Properties | +=======+======================+===================+========+=============+============+ | pg | :math:`p_g` | Gen active power | *p.u.* | StaticGen.p | | +-------+----------------------+-------------------+--------+-------------+------------+ | aBus | :math:`\theta_{bus}` | Bus voltage angle | *rad* | Bus.a | | +-------+----------------------+-------------------+--------+-------------+------------+ | plf | :math:`p_{lf}` | Line flow | *p.u.* | | | +-------+----------------------+-------------------+--------+-------------+------------+ | pru | :math:`p_{r,u}` | RegUp reserve | *p.u.* | | nonneg | +-------+----------------------+-------------------+--------+-------------+------------+ | prd | :math:`p_{r,d}` | RegDn reserve | *p.u.* | | nonneg | +-------+----------------------+-------------------+--------+-------------+------------+ | pgdg | :math:`p_{g,DG}` | DG output power | *p.u.* | | | +-------+----------------------+-------------------+--------+-------------+------------+ Services --------- +---------+----------------------+--------------------------------------+-----------+ | Name | Symbol | Description | Type | +=========+======================+======================================+===========+ | 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 | +---------+----------------------+--------------------------------------+-----------+ | amax | :math:`\theta_{max}` | max line angle difference | NumOp | +---------+----------------------+--------------------------------------+-----------+ | gs | :math:`S_{g}` | Sum Gen vars vector in shape of zone | ZonalSum | +---------+----------------------+--------------------------------------+-----------+ | ds | :math:`S_{d}` | Sum pd vector in shape of zone | 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 | +---------+----------------------+--------------------------------------+-----------+ | cd | :math:`C_{DG}` | Select DG power from pg | VarSelect | +---------+----------------------+--------------------------------------+-----------+ Parameters ---------------------------------- +----------+-----------------------+--------------------------------------------------------+--------------+----------------------+ | Name | Symbol | Description | Unit | Source | +==========+=======================+========================================================+==============+======================+ | 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 | +----------+-----------------------+--------------------------------------------------------+--------------+----------------------+ | ug | :math:`u_{g}` | Gen connection status | | StaticGen.u | +----------+-----------------------+--------------------------------------------------------+--------------+----------------------+ | 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 | +----------+-----------------------+--------------------------------------------------------+--------------+----------------------+ | p0 | :math:`p_{g, 0}` | Gen initial active power | *p.u.* | StaticGen.pg0 | +----------+-----------------------+--------------------------------------------------------+--------------+----------------------+ | pd | :math:`p_{d}` | active demand | *p.u.* | StaticLoad.p0 | +----------+-----------------------+--------------------------------------------------------+--------------+----------------------+ | rate_a | :math:`R_{ATEA}` | long-term flow limit | *MVA* | Line.rate_a | +----------+-----------------------+--------------------------------------------------------+--------------+----------------------+ | gsh | :math:`g_{sh}` | shunt conductance | | Shunt.g | +----------+-----------------------+--------------------------------------------------------+--------------+----------------------+ | 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 | +----------+-----------------------+--------------------------------------------------------+--------------+----------------------+ | zg | :math:`z_{one,g}` | Gen zone | | StaticGen.zone | +----------+-----------------------+--------------------------------------------------------+--------------+----------------------+ | zd | :math:`z_{one,d}` | Load zone | | StaticLoad.zone | +----------+-----------------------+--------------------------------------------------------+--------------+----------------------+ | 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 | +----------+-----------------------+--------------------------------------------------------+--------------+----------------------+ .. _RTEDES: -------------------------------------------------------------------------------- RTEDES -------------------------------------------------------------------------------- RTED with energy storage :ref:`ESD1`. The bilinear term in the formulation is linearized with big-M method. Objective ---------------------------------- +------+-----------------------------------+------+---------------------------------------------------------------------------------------------------------------------------------------------+ | Name | Description | Unit | Expression | +======+===================================+======+=============================================================================================================================================+ | obj | total generation and reserve cost | *$* | :math:`min. \sum(c_{2} power(T_{cfg} p_g, 2))+ \sum(c_{1} (T_{cfg} p_g))+ u_{g} c_{0}+ \sum(c_{r,u} p_{r,u} + c_{r,d} p_{r,d})` | +------+-----------------------------------+------+---------------------------------------------------------------------------------------------------------------------------------------------+ Constraints ---------------------------------- +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | Name | Description | Expression | +========+===================================+=======================================================================================================+ | pglb | pg min | :math:`-p_g + c_{trl,n,e} p_{g, 0} + c_{trl, e} p_{g, min} <= 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | pgub | pg max | :math:`p_g - c_{trl,n,e} p_{g, 0} - c_{trl, e} p_{g, max} <= 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | pb | power balance | :math:`B_{bus} \theta_{bus} + P_{bus}^{inj} + C_{l} p_{d} + C_{sh} g_{sh} - C_{g} p_g = 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | plflb | line flow lower bound | :math:`-B_{f} \theta_{bus} - P_{f}^{inj} - R_{ATEA} <= 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | plfub | line flow upper bound | :math:`B_{f} \theta_{bus} + P_{f}^{inj} - R_{ATEA} <= 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | alflb | line angle difference lower bound | :math:`-C_{ft}^T \theta_{bus} - \theta_{max} <= 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | alfub | line angle difference upper bound | :math:`C_{ft}^T \theta_{bus} - \theta_{max} <= 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} <= 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | rrd | RegDn reserve source | :math:`u_{g} -p_g + p_{r,d} + u_{g} p_{g, min} <= 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | rgu | Gen ramping up | :math:`u_{g} p_g-p_{g, 0}-R_{10} <= 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | rgd | Gen ramping down | :math:`u_{g} -p_g+p_{g, 0}-R_{10} <= 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | cdgb | Select DG power from pg | :math:`C_{DG} p_g - p_{g,DG} = 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | SOClb | SOC lower bound | :math:`-SOC + SOC_{min} <= 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | SOCub | SOC upper bound | :math:`SOC - SOC_{max} <= 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | cdb | Charging decision bound | :math:`u_{c,ESD} + u_{d,ESD} - 1 = 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | cesb | Select ESD1 power from pg | :math:`C_{ESD} p_g + z_{c,ESD} - z_{d,ESD} = 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | zce1 | zce bound 1 | :math:`-z_{c,ESD} + p_{c,ESD} <= 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | zce2 | zce bound 2 | :math:`z_{c,ESD} - p_{c,ESD} - M_{big} (1-u_{c,ESD}) <= 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | zce3 | zce bound 3 | :math:`z_{c,ESD} - M_{big} u_{c,ESD} <= 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | zde1 | zde bound 1 | :math:`-z_{d,ESD} + p_{d,ESD} <= 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | zde2 | zde bound 2 | :math:`z_{d,ESD} - p_{d,ESD} - M_{big} (1-u_{d,ESD}) <= 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | zde3 | zde bound 3 | :math:`z_{d,ESD} - M_{big} u_{d,ESD} <= 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ | SOCb | ESD1 SOC balance | :math:`E_n (SOC - SOC_{init}) - T_{cfg} \eta_c z_{c,ESD}+ T_{cfg} \frac{1}{\eta_d} z_{d,ESD} = 0` | +--------+-----------------------------------+-------------------------------------------------------------------------------------------------------+ Vars ---------------------------------- +-------+----------------------+----------------------------------------------------------------+--------+-------------+------------+ | Name | Symbol | Description | Unit | Source | Properties | +=======+======================+================================================================+========+=============+============+ | pg | :math:`p_g` | Gen active power | *p.u.* | StaticGen.p | | +-------+----------------------+----------------------------------------------------------------+--------+-------------+------------+ | aBus | :math:`\theta_{bus}` | Bus voltage angle | *rad* | Bus.a | | +-------+----------------------+----------------------------------------------------------------+--------+-------------+------------+ | plf | :math:`p_{lf}` | Line flow | *p.u.* | | | +-------+----------------------+----------------------------------------------------------------+--------+-------------+------------+ | pru | :math:`p_{r,u}` | RegUp reserve | *p.u.* | | nonneg | +-------+----------------------+----------------------------------------------------------------+--------+-------------+------------+ | prd | :math:`p_{r,d}` | RegDn reserve | *p.u.* | | nonneg | +-------+----------------------+----------------------------------------------------------------+--------+-------------+------------+ | pgdg | :math:`p_{g,DG}` | DG output power | *p.u.* | | | +-------+----------------------+----------------------------------------------------------------+--------+-------------+------------+ | SOC | :math:`SOC` | ESD1 State of Charge | *%* | | pos | +-------+----------------------+----------------------------------------------------------------+--------+-------------+------------+ | pce | :math:`p_{c,ESD}` | ESD1 charging power | *p.u.* | | nonneg | +-------+----------------------+----------------------------------------------------------------+--------+-------------+------------+ | pde | :math:`p_{d,ESD}` | ESD1 discharging power | *p.u.* | | nonneg | +-------+----------------------+----------------------------------------------------------------+--------+-------------+------------+ | uce | :math:`u_{c,ESD}` | ESD1 charging decision | | | boolean | +-------+----------------------+----------------------------------------------------------------+--------+-------------+------------+ | ude | :math:`u_{d,ESD}` | ESD1 discharging decision | | | boolean | +-------+----------------------+----------------------------------------------------------------+--------+-------------+------------+ | zce | :math:`z_{c,ESD}` | Aux var for charging, :math:`z_{c,ESD}=u_{c,ESD}*p_{c,ESD}` | | | nonneg | +-------+----------------------+----------------------------------------------------------------+--------+-------------+------------+ | zde | :math:`z_{d,ESD}` | Aux var for discharging, :math:`z_{d,ESD}=u_{d,ESD}*p_{d,ESD}` | | | nonneg | +-------+----------------------+----------------------------------------------------------------+--------+-------------+------------+ Services --------- +---------+--------------------------+--------------------------------------+-----------+ | Name | Symbol | Description | Type | +=========+==========================+======================================+===========+ | 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 | +---------+--------------------------+--------------------------------------+-----------+ | amax | :math:`\theta_{max}` | max line angle difference | NumOp | +---------+--------------------------+--------------------------------------+-----------+ | gs | :math:`S_{g}` | Sum Gen vars vector in shape of zone | ZonalSum | +---------+--------------------------+--------------------------------------+-----------+ | ds | :math:`S_{d}` | Sum pd vector in shape of zone | 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 | +---------+--------------------------+--------------------------------------+-----------+ | cd | :math:`C_{DG}` | Select DG power from pg | VarSelect | +---------+--------------------------+--------------------------------------+-----------+ | REtaD | :math:`\frac{1}{\eta_d}` | | NumOp | +---------+--------------------------+--------------------------------------+-----------+ | Mb | :math:`M_{big}` | 10 times of max of pmax as big M | NumOp | +---------+--------------------------+--------------------------------------+-----------+ | ce | :math:`C_{ESD}` | Select zue from pg | VarSelect | +---------+--------------------------+--------------------------------------+-----------+ Parameters ---------------------------------- +------------+------------------------+--------------------------------------------------------+--------------+----------------------+ | Name | Symbol | Description | Unit | Source | +============+========================+========================================================+==============+======================+ | 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 | +------------+------------------------+--------------------------------------------------------+--------------+----------------------+ | ug | :math:`u_{g}` | Gen connection status | | StaticGen.u | +------------+------------------------+--------------------------------------------------------+--------------+----------------------+ | 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 | +------------+------------------------+--------------------------------------------------------+--------------+----------------------+ | p0 | :math:`p_{g, 0}` | Gen initial active power | *p.u.* | StaticGen.pg0 | +------------+------------------------+--------------------------------------------------------+--------------+----------------------+ | pd | :math:`p_{d}` | active demand | *p.u.* | StaticLoad.p0 | +------------+------------------------+--------------------------------------------------------+--------------+----------------------+ | rate_a | :math:`R_{ATEA}` | long-term flow limit | *MVA* | Line.rate_a | +------------+------------------------+--------------------------------------------------------+--------------+----------------------+ | gsh | :math:`g_{sh}` | shunt conductance | | Shunt.g | +------------+------------------------+--------------------------------------------------------+--------------+----------------------+ | 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 | +------------+------------------------+--------------------------------------------------------+--------------+----------------------+ | zg | :math:`z_{one,g}` | Gen zone | | StaticGen.zone | +------------+------------------------+--------------------------------------------------------+--------------+----------------------+ | zd | :math:`z_{one,d}` | Load zone | | StaticLoad.zone | +------------+------------------------+--------------------------------------------------------+--------------+----------------------+ | 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 | +------------+------------------------+--------------------------------------------------------+--------------+----------------------+ | EtaC | :math:`\eta_c` | Efficiency during charging | *%* | ESD1.EtaC | +------------+------------------------+--------------------------------------------------------+--------------+----------------------+ | EtaD | :math:`\eta_d` | Efficiency during discharging | *%* | ESD1.EtaD | +------------+------------------------+--------------------------------------------------------+--------------+----------------------+ | genesd | :math:`g_{ESD}` | gen of ESD1 | | ESD1.gen | +------------+------------------------+--------------------------------------------------------+--------------+----------------------+ | gammapesd | :math:`\gamma_{p,ESD}` | Ratio of ESD1.pge w.r.t to that of static generator | | ESD1.gammap | +------------+------------------------+--------------------------------------------------------+--------------+----------------------+ .. _RTEDVIS: -------------------------------------------------------------------------------- RTEDVIS -------------------------------------------------------------------------------- RTED with virtual inertia scheduling. Reference: [1] B. She, F. Li, H. Cui, J. Wang, Q. Zhang and R. Bo, "Virtual Inertia Scheduling (VIS) for Real-time Economic Dispatch of IBRs-penetrated Power Systems," in IEEE Transactions on Sustainable Energy, doi: 10.1109/TSTE.2023.3319307. Objective ---------------------------------- +------+-----------------------------------+------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Name | Description | Unit | Expression | +======+===================================+======+==========================================================================================================================================================================================+ | obj | total generation and reserve cost | *$* | :math:`min. \sum(c_{2} power(p_g, 2))+ \sum(c_{1} (T_{cfg} p_g))+ u_{g} c_{0} + \sum(c_{r,u} (T_{cfg} p_{r,u}) + c_{r,d} (T_{cfg} p_{r,d})) + \sum(c_{m} M + c_{d} D)` | +------+-----------------------------------+------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ Constraints ---------------------------------- +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | Name | Description | Expression | +========+===================================+============================================================================================+ | pglb | pg min | :math:`-p_g + c_{trl,n,e} p_{g, 0} + c_{trl, e} p_{g, min} <= 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | pgub | pg max | :math:`p_g - c_{trl,n,e} p_{g, 0} - c_{trl, e} p_{g, max} <= 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | pb | power balance | :math:`B_{bus} \theta_{bus} + P_{bus}^{inj} + C_{l} p_{d} + C_{sh} g_{sh} - C_{g} p_g = 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | plflb | line flow lower bound | :math:`-B_{f} \theta_{bus} - P_{f}^{inj} - R_{ATEA} <= 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | plfub | line flow upper bound | :math:`B_{f} \theta_{bus} + P_{f}^{inj} - R_{ATEA} <= 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | alflb | line angle difference lower bound | :math:`-C_{ft}^T \theta_{bus} - \theta_{max} <= 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | alfub | line angle difference upper bound | :math:`C_{ft}^T \theta_{bus} - \theta_{max} <= 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} <= 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | rrd | RegDn reserve source | :math:`u_{g} -p_g + p_{r,d} + u_{g} p_{g, min} <= 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | rgu | Gen ramping up | :math:`u_{g} p_g-p_{g, 0}-R_{10} <= 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | rgd | Gen ramping down | :math:`u_{g} -p_g+p_{g, 0}-R_{10} <= 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | Mub | M upper bound | :math:`M - M_{max} <= 0` | +--------+-----------------------------------+--------------------------------------------------------------------------------------------+ | Dub | D upper bound | :math:`D - D_{max} <= 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 | | +-------+----------------------+---------------------------------------+--------+-------------+------------+ | aBus | :math:`\theta_{bus}` | Bus voltage angle | *rad* | Bus.a | | +-------+----------------------+---------------------------------------+--------+-------------+------------+ | plf | :math:`p_{lf}` | Line flow | *p.u.* | | | +-------+----------------------+---------------------------------------+--------+-------------+------------+ | pru | :math:`p_{r,u}` | RegUp reserve | *p.u.* | | nonneg | +-------+----------------------+---------------------------------------+--------+-------------+------------+ | prd | :math:`p_{r,d}` | RegDn reserve | *p.u.* | | nonneg | +-------+----------------------+---------------------------------------+--------+-------------+------------+ | M | :math:`M` | Emulated startup time constant (M=2H) | *s* | | nonneg | +-------+----------------------+---------------------------------------+--------+-------------+------------+ | D | :math:`D` | Emulated damping coefficient | *p.u.* | | nonneg | +-------+----------------------+---------------------------------------+--------+-------------+------------+ Services --------- +---------+----------------------+--------------------------------------+-----------+ | Name | Symbol | Description | Type | +=========+======================+======================================+===========+ | 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 | +---------+----------------------+--------------------------------------+-----------+ | amax | :math:`\theta_{max}` | max line angle difference | NumOp | +---------+----------------------+--------------------------------------+-----------+ | gs | :math:`S_{g}` | Sum Gen vars vector in shape of zone | ZonalSum | +---------+----------------------+--------------------------------------+-----------+ | ds | :math:`S_{d}` | Sum pd vector in shape of zone | 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 zone | ZonalSum | +---------+----------------------+--------------------------------------+-----------+ Parameters ---------------------------------- +----------+-----------------------+-------------------------------------------+--------------+----------------------+ | Name | Symbol | Description | Unit | Source | +==========+=======================+===========================================+==============+======================+ | 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 | +----------+-----------------------+-------------------------------------------+--------------+----------------------+ | ug | :math:`u_{g}` | Gen connection status | | StaticGen.u | +----------+-----------------------+-------------------------------------------+--------------+----------------------+ | 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 | +----------+-----------------------+-------------------------------------------+--------------+----------------------+ | p0 | :math:`p_{g, 0}` | Gen initial active power | *p.u.* | StaticGen.pg0 | +----------+-----------------------+-------------------------------------------+--------------+----------------------+ | pd | :math:`p_{d}` | active demand | *p.u.* | StaticLoad.p0 | +----------+-----------------------+-------------------------------------------+--------------+----------------------+ | rate_a | :math:`R_{ATEA}` | long-term flow limit | *MVA* | Line.rate_a | +----------+-----------------------+-------------------------------------------+--------------+----------------------+ | gsh | :math:`g_{sh}` | shunt conductance | | Shunt.g | +----------+-----------------------+-------------------------------------------+--------------+----------------------+ | 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 | +----------+-----------------------+-------------------------------------------+--------------+----------------------+ | zg | :math:`z_{one,g}` | Gen zone | | StaticGen.zone | +----------+-----------------------+-------------------------------------------+--------------+----------------------+ | zd | :math:`z_{one,d}` | Load zone | | StaticLoad.zone | +----------+-----------------------+-------------------------------------------+--------------+----------------------+ | 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 | +----------+-----------------------+-------------------------------------------+--------------+----------------------+