<?xml version="1.0" encoding="us-ascii"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD Journal Publishing DTD v2.3 20070202//EN" "journalpublishing.dtd">
<article article-type="research-article" dtd-version="2.3" xml:lang="EN" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink">
<front>
<journal-meta>
<journal-id journal-id-type="publisher-id">Front. Energy Res.</journal-id>
<journal-title>Frontiers in Energy Research</journal-title>
<abbrev-journal-title abbrev-type="pubmed">Front. Energy Res.</abbrev-journal-title>
<issn pub-type="epub">2296-598X</issn>
<publisher>
<publisher-name>Frontiers Media S.A.</publisher-name>
</publisher>
</journal-meta>
<article-meta>
<article-id pub-id-type="publisher-id">1361593</article-id>
<article-id pub-id-type="doi">10.3389/fenrg.2024.1361593</article-id>
<article-categories>
<subj-group subj-group-type="heading">
<subject>Energy Research</subject>
<subj-group>
<subject>Original Research</subject>
</subj-group>
</subj-group>
</article-categories>
<title-group>
<article-title>Two-layer iterative energy dispatch for a multi-energy-flow VPP in the distribution power grid</article-title>
<alt-title alt-title-type="left-running-head">Li et al.</alt-title>
<alt-title alt-title-type="right-running-head">
<ext-link ext-link-type="uri" xlink:href="https://doi.org/10.3389/fenrg.2024.1361593">10.3389/fenrg.2024.1361593</ext-link>
</alt-title>
</title-group>
<contrib-group>
<contrib contrib-type="author">
<name>
<surname>Li</surname>
<given-names>Wanbin</given-names>
</name>
<xref ref-type="aff" rid="aff1">
<sup>1</sup>
</xref>
<role content-type="https://credit.niso.org/contributor-roles/conceptualization/"/>
<role content-type="https://credit.niso.org/contributor-roles/data-curation/"/>
<role content-type="https://credit.niso.org/contributor-roles/investigation/"/>
<role content-type="https://credit.niso.org/contributor-roles/software/"/>
<role content-type="https://credit.niso.org/contributor-roles/writing-original-draft/"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Zhou</surname>
<given-names>Zaiyan</given-names>
</name>
<xref ref-type="aff" rid="aff1">
<sup>1</sup>
</xref>
<role content-type="https://credit.niso.org/contributor-roles/conceptualization/"/>
<role content-type="https://credit.niso.org/contributor-roles/data-curation/"/>
<role content-type="https://credit.niso.org/contributor-roles/writing-original-draft/"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Zhang</surname>
<given-names>Yuqi</given-names>
</name>
<xref ref-type="aff" rid="aff1">
<sup>1</sup>
</xref>
<role content-type="https://credit.niso.org/contributor-roles/conceptualization/"/>
<role content-type="https://credit.niso.org/contributor-roles/data-curation/"/>
<role content-type="https://credit.niso.org/contributor-roles/methodology/"/>
<role content-type="https://credit.niso.org/contributor-roles/writing-original-draft/"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Jin</surname>
<given-names>Guiyue</given-names>
</name>
<xref ref-type="aff" rid="aff1">
<sup>1</sup>
</xref>
<role content-type="https://credit.niso.org/contributor-roles/conceptualization/"/>
<role content-type="https://credit.niso.org/contributor-roles/data-curation/"/>
<role content-type="https://credit.niso.org/contributor-roles/formal-analysis/"/>
<role content-type="https://credit.niso.org/contributor-roles/writing-original-draft/"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Wang</surname>
<given-names>Wenxin</given-names>
</name>
<xref ref-type="aff" rid="aff1">
<sup>1</sup>
</xref>
<role content-type="https://credit.niso.org/contributor-roles/data-curation/"/>
<role content-type="https://credit.niso.org/contributor-roles/formal-analysis/"/>
<role content-type="https://credit.niso.org/contributor-roles/validation/"/>
<role content-type="https://credit.niso.org/contributor-roles/writing-original-draft/"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Ren</surname>
<given-names>Yanchao</given-names>
</name>
<xref ref-type="aff" rid="aff2">
<sup>2</sup>
</xref>
<role content-type="https://credit.niso.org/contributor-roles/investigation/"/>
<role content-type="https://credit.niso.org/contributor-roles/methodology/"/>
<role content-type="https://credit.niso.org/contributor-roles/writing-original-draft/"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Wan</surname>
<given-names>Yuchao</given-names>
</name>
<xref ref-type="aff" rid="aff1">
<sup>1</sup>
</xref>
<role content-type="https://credit.niso.org/contributor-roles/conceptualization/"/>
<role content-type="https://credit.niso.org/contributor-roles/formal-analysis/"/>
<role content-type="https://credit.niso.org/contributor-roles/methodology/"/>
<role content-type="https://credit.niso.org/contributor-roles/Writing - review &#x26; editing/"/>
</contrib>
<contrib contrib-type="author" corresp="yes">
<name>
<surname>Liu</surname>
<given-names>Yimin</given-names>
</name>
<xref ref-type="aff" rid="aff1">
<sup>1</sup>
</xref>
<xref ref-type="corresp" rid="c001">&#x2a;</xref>
<uri xlink:href="https://loop.frontiersin.org/people/2614075/overview"/>
<role content-type="https://credit.niso.org/contributor-roles/conceptualization/"/>
<role content-type="https://credit.niso.org/contributor-roles/data-curation/"/>
<role content-type="https://credit.niso.org/contributor-roles/writing-original-draft/"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Liu</surname>
<given-names>Chunxiu</given-names>
</name>
<xref ref-type="aff" rid="aff1">
<sup>1</sup>
</xref>
<uri xlink:href="https://loop.frontiersin.org/people/2508613/overview"/>
<role content-type="https://credit.niso.org/contributor-roles/formal-analysis/"/>
<role content-type="https://credit.niso.org/contributor-roles/methodology/"/>
<role content-type="https://credit.niso.org/contributor-roles/Writing - review &#x26; editing/"/>
</contrib>
</contrib-group>
<aff id="aff1">
<sup>1</sup>
<institution>State Grid Dezhou Electric Power Company</institution>, <addr-line>Dezhou</addr-line>, <country>China</country>
</aff>
<aff id="aff2">
<sup>2</sup>
<institution>State Grid Yucheng Electric Power Company</institution>, <addr-line>Yucheng</addr-line>, <country>China</country>
</aff>
<author-notes>
<fn fn-type="edited-by">
<p>
<bold>Edited by:</bold> <ext-link ext-link-type="uri" xlink:href="https://loop.frontiersin.org/people/1376122/overview">Hugo Morais</ext-link>, University of Lisbon, Portugal</p>
</fn>
<fn fn-type="edited-by">
<p>
<bold>Reviewed by:</bold> <ext-link ext-link-type="uri" xlink:href="https://loop.frontiersin.org/people/1914289/overview">Suhan Zhang</ext-link>, Hong Kong Polytechnic University, Hong Kong SAR, China</p>
<p>
<ext-link ext-link-type="uri" xlink:href="https://loop.frontiersin.org/people/2614850/overview">Zhenyu Zhou</ext-link>, Waseda University, Japan</p>
<p>
<ext-link ext-link-type="uri" xlink:href="https://loop.frontiersin.org/people/1008524/overview">Chaowei Wang</ext-link>, Beijing University of Posts and Telecommunications (BUPT), China</p>
<p>
<ext-link ext-link-type="uri" xlink:href="https://loop.frontiersin.org/people/2172948/overview">Chunyu Chen</ext-link>, China University of Mining and Technology, China</p>
<p>
<ext-link ext-link-type="uri" xlink:href="https://loop.frontiersin.org/people/2586526/overview">Bin Gou</ext-link>, Southwest Jiaotong University, China</p>
</fn>
<corresp id="c001">&#x2a;Correspondence: Yimin Liu, <email>liuyiming1998nn@163.com</email>
</corresp>
</author-notes>
<pub-date pub-type="epub">
<day>09</day>
<month>05</month>
<year>2024</year>
</pub-date>
<pub-date pub-type="collection">
<year>2024</year>
</pub-date>
<volume>12</volume>
<elocation-id>1361593</elocation-id>
<history>
<date date-type="received">
<day>26</day>
<month>12</month>
<year>2023</year>
</date>
<date date-type="accepted">
<day>25</day>
<month>03</month>
<year>2024</year>
</date>
</history>
<permissions>
<copyright-statement>Copyright &#xa9; 2024 Li, Zhou, Zhang, Jin, Wang, Ren, Wan, Liu and Liu.</copyright-statement>
<copyright-year>2024</copyright-year>
<copyright-holder>Li, Zhou, Zhang, Jin, Wang, Ren, Wan, Liu and Liu</copyright-holder>
<license xlink:href="http://creativecommons.org/licenses/by/4.0/">
<p>This is an open-access article distributed under the terms of the Creative Commons Attribution License (CC BY). The use, distribution or reproduction in other forums is permitted, provided the original author(s) and the copyright owner(s) are credited and that the original publication in this journal is cited, in accordance with accepted academic practice. No use, distribution or reproduction is permitted which does not comply with these terms.</p>
</license>
</permissions>
<abstract>
<p>In light of the growing urgency surrounding energy and environmental concerns, this paper presents a two-layer iterative energy dispatch strategy tailored for a multi-energy-flow virtual power plant (VPP) operating within the distribution power grid. The proposed strategy unfolds in two key phases. First, it establishes an energy dispatch framework designed specifically for the multi-energy-flow VPP within the distribution power grid. Subsequently, it introduces an improved ant colony algorithm aimed at optimizing the output power of each VPP. In addition, the paper presents an optimization method for substation energy dispatch. This method uses a delay-aware consensus algorithm with the substation dispatch cost increment rate as the consensus variable, taking into account the communication delay between VPPs. Integrating a proportional&#x2013;derivative (PD) control mechanism enhances the convergence speed of the delay-aware consensus algorithm and enables real-time energy dispatch of the multi-energy-flow VPP. The paper presents its conclusions by validating the efficacy of the proposed approach through simulation, thereby addressing the challenges and adapting to the shifting energy and environmental landscape.</p>
</abstract>
<kwd-group>
<kwd>two-layer iterative energy dispatch</kwd>
<kwd>multi-energy-flow virtual power plant</kwd>
<kwd>distribution power grid</kwd>
<kwd>improved ant colony algorithm</kwd>
<kwd>delay-aware consensus algorithm</kwd>
</kwd-group>
<custom-meta-wrap>
<custom-meta>
<meta-name>section-at-acceptance</meta-name>
<meta-value>Process and Energy Systems Engineering</meta-value>
</custom-meta>
</custom-meta-wrap>
</article-meta>
</front>
<body>
<sec id="s1">
<title>1 Introduction</title>
<p>With increased severity in energy and environmental issues, decarbonization has emerged as an unavoidable trend in the future energy industry (<xref ref-type="bibr" rid="B15">Li et al., 2023</xref>). A virtual power plant (VPP) is a system that uses information technology to aggregate and coordinate resources such as distributed generators, energy storage, and interruptible load to enhance the stability and security of the power grid. The global energy system is accelerating its transition to renewable energy (<xref ref-type="bibr" rid="B39">Zhong et al., 2023a</xref>; <xref ref-type="bibr" rid="B23">Sarantakos et al., 2023</xref>; <xref ref-type="bibr" rid="B27">Wang et al., 2023</xref>). As a crucial energy structure for the future, multi-energy flow systems have the capacity to interconnect different types of energy (electricity, heat, gas, etc.); unify the planning, operation, and dispatch of various energy devices; and achieve efficient energy utilization (<xref ref-type="bibr" rid="B3">Chen et al., 2020</xref>; <xref ref-type="bibr" rid="B26">Wang et al., 2020</xref>). However, with the large-scale integration of renewable energy, encompassing distributed power sources, energy storage, and dispatchable loads, the volatility of multi-energy flow systems is also on the rise (<xref ref-type="bibr" rid="B41">Zhou et al., 2017</xref>; <xref ref-type="bibr" rid="B40">Zhong et al., 2023b</xref>). A multi-energy flow VPP, as an integrated energy network that connects electricity&#x2013;gas&#x2013;thermal energy sources, can coordinate and dispatch various internal units including renewable energy, gas resources, and thermal resources, which can not only provide more economic benefits but also help achieve the goal of energy-saving and emission reduction. At present, the multi-energy flow VPP faces difficulties such as high actual carbon emissions, complex multi-energy flow optimization variables, and multi-optimization objectives. It is urgent to explore how to improve the renewable energy consumption capacity of the multi-energy-flow VPP while reducing carbon emissions. The interconnection of diverse energy devices within multi-energy flow virtual power plants enables coordinated dispatch of electricity, gas, and heat, facilitating complementary utilization of multiple energy flows (<xref ref-type="bibr" rid="B35">Zhang et al., 2019</xref>; <xref ref-type="bibr" rid="B6">Gao et al., 2023</xref>; <xref ref-type="bibr" rid="B28">Wu et al., 2023</xref>). This not only effectively mitigates the fluctuations in multi-energy flow systems, reduces distribution grid losses, and enhances energy utilization efficiency but also promotes supply&#x2013;demand balance, bringing about significant economic benefits.</p>
<p>Currently, when various types of energy are interconnected and complementarily integrated within a VPP, the involvement of diverse entities with different interests and complex energy and information exchange relationships among these entities pose a series of challenges in multi-energy flow VPP energy dispatch (<xref ref-type="bibr" rid="B33">Yang et al., 2023</xref>). A multi-energy flow VPP faces difficulties such as high actual carbon emissions, complex multi-energy-flow optimization variables, and multi-optimization objectives. It is urgent to explore how to improve the renewable energy consumption capacity of multi-energy flow VPPs. Many scholars have undertaken initial investigations into the challenges of energy dispatch in VPPs, with ant colony algorithms and consensus algorithms finding widespread application in the realm of energy dispatch. Ant colony algorithms are suitable for centralized energy dispatch. These algorithms possess global search capabilities and simulate the process of ants searching for food, thus helping in finding the global optimal solution for complex energy dispatch problems. Consensus algorithms, on the other hand, are applicable to distributed energy dispatch. They use real-time status information from neighboring substations and continually update their status to maintain consistency among all substations, thus ensuring the stable operation of the overall energy system.</p>
<p>However, there are still many challenges facing the energy dispatch process in multi-energy flow VPPs:</p>
<p>The energy interaction among electricity, gas, and heat within the VPP, coupled with the interdependence between the VPP, substations, and distribution grids, makes the energy dispatch of multi-energy flow VPPs an extremely complex problem. Complex energy and information exchange relationships exist among multiple entities (<xref ref-type="bibr" rid="B14">Li et al., 2022</xref>; <xref ref-type="bibr" rid="B11">Huang et al., 2023</xref>). Due to the conflicts of ownership, optimization objectives, and interests among different entities, the increase in the multi-energy flow coupling degree will inevitably make the mutual influence among various energy subsystems more obvious. Traditional single-layer energy dispatch methods usually only consider the optimization of a single energy source when solving the multi-energy flow dispatch model, ignoring the coordination of multi-energy flow. Moreover, the local fluctuations of the system affect the solution of the whole system, resulting in high dispatch costs and high network losses, which are unsuitable for the complex energy dispatch for multi-energy flow VPPs.</p>
<p>In traditional ant colony algorithms, the concentration of pheromones and the heuristic function typically remain static. As the number of iterations increases, there is a gradual rise in the concentration of pheromones, potentially elevating the risk of converging toward local optima. Simultaneously, the value of the heuristic function decreases, possibly resulting in excessive dependence on pheromones. In the context of energy dispatch for multi-energy-flow VPPs, the adaptability of traditional ant colony algorithms decreases. This results in a slow convergence rate when solving the energy dispatch problem for multi-energy flow VPPs, making it challenging to meet the real-time requirements of such dispatch.</p>
<p>Consensus algorithms achieve consistency for all substation states through the transmission of state information among neighboring substations. However, during the consensus iteration process, there is a delay in the transmission of state information among neighboring substations. This leads to traditional consensus algorithms being unable to promptly and accurately obtain state information from neighboring substations, affecting the convergence speed of the consensus iteration, increasing the fluctuation of multi-energy flow within the VPP, and resulting in high dispatch costs and distribution grid losses in the energy dispatch for multi-energy flow VPPs.</p>
<p>During the consensus iteration process, factors such as channel conditions and geographical locations cause a delay in the transmission of state information between neighboring substations. Traditional consensus algorithms overlook the time delay in the transmission of state information, making it challenging to promptly and accurately acquire the state information of neighboring substations. This, in turn, affects the convergence speed of the consensus iteration, increases the fluctuations in multi-energy flow within the VPP, and results in excessively high dispatch costs and distribution grid losses in the energy dispatch for the multi-energy-flow VPPs.</p>
<p>Presently, extensive research is being conducted on the energy dispatch for VPPs. One approach involves conceptualizing VPPs as coalitions of wind generators and electric vehicles, establishing an operational model based on linear programming. This model, as discussed in <xref ref-type="bibr" rid="B25">Vasirani et al. (2013)</xref>, demonstrates how scheduling the supply to the grid and storage in electric vehicle batteries can enhance the VPP&#x2019;s profitability. Another highlighted in <xref ref-type="bibr" rid="B32">Yang et al. (2013)</xref>, Yang <italic>et al.</italic> proposed a distributed optimal dispatch method using the distributed primal-dual sub-gradient algorithm. This method involves coordinating the individual decision-making of distributed energy resources within the VPP through limited communication, ultimately maximizing the VPP&#x2019;s profit. In the context of multiple distributed generators within a VPP, a distributed control strategy is introduced in <xref ref-type="bibr" rid="B29">Xin et al. (2013)</xref>. This strategy aims to guide the VPP to converge and operate at an optimal output power determined by the costs of distributed generations and the required services assigned by the distribution grid. <xref ref-type="bibr" rid="B19">Mohy-ud din et al. (2020)</xref> adopts the linearization method to solve the energy transaction management problem of integrated energy systems based on VPPs. The linearization-based optimization method is well-suited for addressing linear optimization objectives of a relatively straightforward nature. However, it encounters challenges when attempting to tackle complex nonlinear optimization targets, such as those related to distribution power grid loss. There is currently much research on the use of intelligent algorithms in the field of VPP energy dispatch. <xref ref-type="bibr" rid="B1">Abdolrasol et al. (2018)</xref>; <xref ref-type="bibr" rid="B9">Hannan et al. (2021)</xref> applied optimization research to solve the application problems of current technologies, adding value by enhancing them in the direction of optimal solutions. <xref ref-type="bibr" rid="B36">Zhang et al. (2023a)</xref> focuses on the interaction between electricity and heat, demonstrating the influence of multiple factors on the safe operation of electricity. <xref ref-type="bibr" rid="B31">Yan et al. (2020)</xref> focuses on the efficiency and convergence accuracy of the method in solving the electricity and gas system model. However, the above-mentioned literature has not taken into account the coupling of multi-energy flow within VPPs nor has it considered energy dispatch strategies with multiple layers of interaction.</p>
<p>Various studies have explored the multi-energy flow complementation of VPPs. <xref ref-type="bibr" rid="B4">Cui et al. (2016)</xref> integrated electric boilers and heat storage equipment into wind power plants, using thermoelectric conversion for consume wind power consumption. Yuan <italic>et al.</italic>, as highlighted in <xref ref-type="bibr" rid="B8">Guili et al. (2017)</xref>, achieved &#x201c;thermoelectric decoupling&#x201d; through use of electric heating equipment, enabling coordinated dispatch of thermoelectric power in the system. <xref ref-type="bibr" rid="B13">Li et al. (2019)</xref> analyzed the operation strategy of a multi-energy flow complementary system with the goal of enhancing the system economy. Additionally, there have been advancements in the application of ant colony algorithms. Niknam <italic>et al.</italic> proposed a novel approach based on the ant colony algorithm for the distribution management system in the context of dispersed generation (<xref ref-type="bibr" rid="B21">Niknam et al., 2005</xref>). <xref ref-type="bibr" rid="B24">Trivedi et al. (2015)</xref> used the ant colony optimization technique to address multiple environment dispatch problems in microgrids, solving the generation dispatch problem. Hou <italic>et al.</italic> introduced a versatile optimization algorithm named the generalized ant colony optimization algorithm to tackle discontinuous, nonconvex, nonlinear constrained optimization problems (<xref ref-type="bibr" rid="B10">Hou et al., 2002</xref>). Blockchain technology has also been incorporated into VPP systems, as presented by Wang <italic>et al.</italic> in <xref ref-type="bibr" rid="B12">Jing et al. (2022)</xref>, where a VPP system architecture based on blockchain was proposed, accompanied by a blockchain partition consensus algorithm for VPP dispatch. Furthermore, consensus-based algorithms have been introduced. <xref ref-type="bibr" rid="B20">Naina and Swarup (2022)</xref> proposed a robust, fully distributed consensus-based algorithm utilizing a monotonic decreasing consensus gain function to mitigate the effects of communication delays and noise, allowing the VPP to optimize electricity output and intake based on grid demand. For addressing trust issues in real-time VPP dispatch, Qi <italic>et al.</italic> designed a hybrid consensus mechanism combining multiple algorithms and proposed a mixed consensus algorithm based on convex optimization problems in <xref ref-type="bibr" rid="B34">Yu et al. (2022)</xref>, optimizing computational resources and improving VPP dispatch efficiency. <xref ref-type="bibr" rid="B30">Xu et al. (2019)</xref> proposed a two-layer distributed coordinated control method for managing VPPs in an active distribution power grid, with the first layer dispatching the total output power of multiple VPPs and the second layer handling the output power of each intelligent agent within the VPPs. Despite these advancements, challenges persist: 1) one notable issue is real-time adjustment of pheromone concentration and heuristic functions. With the increase in the number of iterations, the adaptability of traditional ant colony algorithms diminishes, leading to slow convergence speeds when addressing the energy dispatch problem of multi-energy-flow VPPs. 2) There is a delay in the transmission of state information among neighboring substations, causing traditional consensus algorithms to be unable to promptly and accurately obtain state information from neighboring substations. This affects the convergence speed of the consensus iteration, increases the fluctuation of multi-energy flow within the VPP, and leads to high dispatch costs and distribution grid losses in the energy dispatch for multi-energy flow VPPs.</p>
<p>In response to the aforementioned issues, we propose a two-layer iterative energy dispatch strategy for a multi-energy flow VPP in the distribution power grid. First, we establish an energy dispatch framework for a multi-energy flow VPP in the distribution power grid. Second, we decompose the energy dispatch optimization problem of a multi-energy flow VPP into an upper-layer multi-energy flow VPP energy dispatch sub-problem and a lower-layer distributed substation energy dispatch sub-problem. The upper-layer optimization is designed to minimize distribution grid loss and compensatory electricity price cost, adhering to the constraints of VPP output and power flow balance. Moreover, the lower-layer optimization focuses on minimizing dispatch costs within the constraints of the natural gas pipeline network, thermal network, and inequality. Finally, we propose a two-layer iterative energy dispatch algorithm that incorporates an improved ant colony algorithm and a delay-aware consensus algorithm. This approach reduces the dispatch costs and distribution grid losses of multi-energy flow VPP energy dispatch, enhancing the real-time performance of the energy dispatch process.</p>
<p>The innovation points are given as follows:</p>
<p>A two-layer iterative energy dispatch strategy for a multi-energy flow VPP: the transmission of substation dispatch power occurs from the upper layer to the lower layer, while the lower layer transmits load dispatch ability information to the upper layer. This process enables the realization of a two-layer optimal dispatch method for the multi-energy flow VPP. This strategy achieves coordinated dispatch of electricity, gas, and heat flows, addressing the challenges posed by complex energy and information exchange relationships and conflicting interests among different entities. The two-layer energy dispatch strategy for multi-energy flow in the distribution power grid couples the electric&#x2013;gas energy sources through gas turbines at the upper layer and couples the electric&#x2013;thermal energy sources through electric boilers at the upper layer, achieving the complementarity of multi-energy flow. At the lower layer, the two-layer energy dispatch of multi-energy flow only optimizes the output of electric power energy. It improves the flexibility of the VPP, effectively alleviates the fluctuation of the multi-energy flow system, reduces the loss of the distribution power grid, and achieves the coordination and balance of the multi-energy-flow VPP internally.</p>
<p>Multi-energy flow VPP energy dispatch based on the improved ant colony algorithm: in light of real-time operational cost deviations, this paper adjusts the computation of pheromone concentration and heuristic functions dynamically to consider the evolving conditions. This adjustment enhances the algorithm&#x2019;s adaptability, improves convergence speed, and ensures the real-time performance of multi-energy flow VPP energy dispatch.</p>
<p>Distributed substation energy dispatch based on the delay-aware consensus algorithm: considering the impact of communication delays on consensus convergence. The introduction of a proportional&#x2013;derivative (PD) controller enables a rapid response to changes in the state information of each substation. Additionally, a time-dependent feedback term is incorporated into the PD controller to adjust dispatch signal updates, improving convergence speed, suppressing fluctuations in multi-energy-flow within the VPP, and reducing the dispatch costs and distribution grid losses of multi-energy flow VPP energy dispatch.</p>
</sec>
<sec id="s2">
<title>2 System model</title>
<p>
<xref ref-type="fig" rid="F1">Figure 1</xref> shows the energy dispatch framework for a multi-energy flow VPP in the distribution power grid, which consists of a cloud layer, an edge layer, and a device layer. The cloud layer is composed of a regional multi-energy-flow dispatch center, a grid dispatch center, and a power trading center. The edge layer is composed of multiple VPPs, where each VPP is responsible for communicating and interacting with various substations within its jurisdiction. It undertakes substation dispatch, monitoring, and other edge analytics functions. The set of VPPs is represented as <inline-formula id="inf1">
<mml:math id="m1">
<mml:mi mathvariant="script">K</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mrow>
<mml:mn>1,2</mml:mn>
<mml:mo>,</mml:mo>
<mml:mo>&#x2026;</mml:mo>
<mml:mo>,</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mo>&#x2026;</mml:mo>
<mml:mo>,</mml:mo>
<mml:mi>K</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">}</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>. The device layer consists of multiple substations, and the <italic>k</italic>-th VPP has <italic>N</italic>
<sub>
<italic>k</italic>
</sub> substations. Each substation includes a distributed power generator, energy storage, interruptible load, a gas turbine, and an electric heating boiler.</p>
<fig id="F1" position="float">
<label>FIGURE 1</label>
<caption>
<p>Two-layer iterative energy dispatch framework for a multi-energy flow VPP in the distribution power grid.</p>
</caption>
<graphic xlink:href="fenrg-12-1361593-g001.tif"/>
</fig>
<p>The VPPs are connected to the distribution power grid, and there is a coupling relationship between them. The set of distribution grid nodes is denoted as <inline-formula id="inf2">
<mml:math id="m2">
<mml:mi mathvariant="script">I</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mrow>
<mml:mn>1,2</mml:mn>
<mml:mo>,</mml:mo>
<mml:mo>&#x2026;</mml:mo>
<mml:mo>,</mml:mo>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mo>&#x2026;</mml:mo>
<mml:mo>,</mml:mo>
<mml:mi>I</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">}</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>. In the natural gas network, there are natural gas nodes supplied by gas sources, and gas turbines can achieve gas-to-electricity conversion. Therefore, there is a node coupling relationship between the distribution power grid and the natural gas network. The set of nodes in the natural gas network is denoted as <inline-formula id="inf3">
<mml:math id="m3">
<mml:mi mathvariant="script">Z</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mrow>
<mml:mn>1,2</mml:mn>
<mml:mo>,</mml:mo>
<mml:mo>&#x2026;</mml:mo>
<mml:mo>,</mml:mo>
<mml:mi>z</mml:mi>
<mml:mo>,</mml:mo>
<mml:mo>&#x2026;</mml:mo>
<mml:mo>,</mml:mo>
<mml:mi>Z</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">}</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>, and the set of gas sources is denoted as <inline-formula id="inf4">
<mml:math id="m4">
<mml:mi mathvariant="script">O</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mrow>
<mml:mn>1,2</mml:mn>
<mml:mo>,</mml:mo>
<mml:mo>&#x2026;</mml:mo>
<mml:mo>,</mml:mo>
<mml:mi>o</mml:mi>
<mml:mo>,</mml:mo>
<mml:mo>&#x2026;</mml:mo>
<mml:mo>,</mml:mo>
<mml:mi>O</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">}</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>. The thermal network consists of thermal load nodes and electric heating boilers. Electric heating boilers are responsible for providing heat, which achieve electricity-to-heat conversion to supply the thermal load. Therefore, a node coupling relationship exists between the distribution power grid and the thermal network. The set of thermal load nodes is denoted as <inline-formula id="inf5">
<mml:math id="m5">
<mml:mi mathvariant="script">M</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mrow>
<mml:mn>1,2</mml:mn>
<mml:mo>,</mml:mo>
<mml:mo>&#x2026;</mml:mo>
<mml:mo>,</mml:mo>
<mml:mi>m</mml:mi>
<mml:mo>,</mml:mo>
<mml:mo>&#x2026;</mml:mo>
<mml:mo>,</mml:mo>
<mml:mi>M</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">}</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>.</p>
<p>We use a time-slotted model in which the overall optimization period is segmented into <italic>T</italic> time slots, each with an equal duration of <italic>&#x3c4;</italic>. The set of time slots is denoted as <inline-formula id="inf6">
<mml:math id="m6">
<mml:mi mathvariant="script">T</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>,</mml:mo>
<mml:mo>&#x2026;</mml:mo>
<mml:mo>,</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:mo>&#x2026;</mml:mo>
<mml:mo>,</mml:mo>
<mml:mi>T</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">}</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>. In the cloud layer, the integrated regional energy dispatch center collaborates with the grid dispatch center and the power trading center. It receives the information on real-time power grid status from the grid dispatch center, that on real-time market price from the power trading center, and that of load dispatch capacity from the edge layer. Subsequently, the integrated regional energy dispatch center engages in optimization to minimize compensatory electricity price cost and distribution power grid loss, determining optimal power dispatch values for each VPP. The resulting VPP energy dispatch strategies are then disseminated to the edge layer. In the edge layer, VPPs dispatch power to the substation groups within their jurisdiction. At the device layer, the substations optimize the dispatch cost of their internal resources and dispatch power to their internal resources accordingly. The summary of the main notations in this paper is shown in <xref ref-type="table" rid="T1">Table 1</xref>.</p>
<table-wrap id="T1" position="float">
<label>TABLE 1</label>
<caption>
<p>Nomenclature.</p>
</caption>
<table>
<thead valign="top">
<tr>
<th colspan="2" align="left">Variables</th>
</tr>
</thead>
<tbody valign="top">
<tr>
<td align="center">
<inline-formula id="inf7">
<mml:math id="m7">
<mml:msubsup>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>DG</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">Dispatch cost of the distributed generator</td>
</tr>
<tr>
<td align="center">
<inline-formula id="inf8">
<mml:math id="m8">
<mml:msubsup>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>STO</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">Dispatch cost of energy storage</td>
</tr>
<tr>
<td align="center">
<inline-formula id="inf9">
<mml:math id="m9">
<mml:msubsup>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>IL</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">Dispatch cost of interruptible load</td>
</tr>
<tr>
<td align="center">
<inline-formula id="inf10">
<mml:math id="m10">
<mml:msubsup>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>gas</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">Dispatch cost of the gas turbine</td>
</tr>
<tr>
<td align="center">
<inline-formula id="inf11">
<mml:math id="m11">
<mml:msubsup>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>heat</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">Dispatch cost of the electric heating boiler</td>
</tr>
<tr>
<td align="center">
<italic>C</italic>
<sub>loss</sub>(<italic>t</italic>)</td>
<td align="center">Distribution power grid loss</td>
</tr>
<tr>
<td align="center">
<italic>C</italic>
<sub>ep</sub>(<italic>t</italic>)</td>
<td align="center">Compensatory electricity price cost</td>
</tr>
<tr>
<td align="center">
<italic>P</italic>
<sub>
<italic>k</italic>,<italic>l</italic>
</sub>(<italic>t</italic>)</td>
<td align="center">Dispatch power of the substation</td>
</tr>
<tr>
<td align="center">
<inline-formula id="inf12">
<mml:math id="m12">
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>DG</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">Dispatch power of the distributed generator</td>
</tr>
<tr>
<td align="center">
<inline-formula id="inf13">
<mml:math id="m13">
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>STO</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">Dispatch power of energy storage</td>
</tr>
<tr>
<td align="center">
<inline-formula id="inf14">
<mml:math id="m14">
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>IL</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">Dispatch power of interruptible load</td>
</tr>
<tr>
<td align="center">
<inline-formula id="inf15">
<mml:math id="m15">
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>gas</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">Dispatch power of the gas turbine</td>
</tr>
<tr>
<td align="center">
<inline-formula id="inf16">
<mml:math id="m16">
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>heat</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">Dispatch power of the electric heating boiler</td>
</tr>
<tr>
<td align="center">
<inline-formula id="inf17">
<mml:math id="m17">
<mml:msubsup>
<mml:mrow>
<mml:mi>f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">Natural gas consumption of the gas turbine</td>
</tr>
<tr>
<td align="center">
<italic>o</italic>
<sub>
<italic>m</italic>
</sub>(<italic>t</italic>)</td>
<td align="center">Water flow rate passing through the thermal load node</td>
</tr>
<tr>
<td align="center">
<inline-formula id="inf18">
<mml:math id="m18">
<mml:msubsup>
<mml:mrow>
<mml:mi>T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>in</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">Supply water temperature</td>
</tr>
<tr>
<td align="center">
<inline-formula id="inf19">
<mml:math id="m19">
<mml:msubsup>
<mml:mrow>
<mml:mi>T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>out</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">Return water temperature</td>
</tr>
<tr>
<td align="center">
<italic>f</italic>
<sub>
<italic>zz</italic>&#x2032;</sub>(<italic>t</italic>)</td>
<td align="center">Natural gas flow between nodes <italic>z</italic> and <italic>z</italic>&#x2032; in the natural gas network</td>
</tr>
<tr>
<td align="center">
<inline-formula id="inf20">
<mml:math id="m20">
<mml:msubsup>
<mml:mrow>
<mml:mi>f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>o</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">Natural gas supply flow from gas source <italic>o</italic> connected to node <italic>z</italic>
</td>
</tr>
<tr>
<td align="center">
<italic>&#x3bc;</italic>
<sub>
<italic>k</italic>,<italic>l</italic>
</sub>(<italic>t</italic>)</td>
<td align="center">Cost increment rate</td>
</tr>
<tr>
<td colspan="2" align="left">Parameters</td>
</tr>
<tr>
<td align="center">
<inline-formula id="inf21">
<mml:math id="m21">
<mml:msubsup>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>y</mml:mi>
<mml:mo>,</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:mrow>
<mml:mrow>
<mml:mi>a</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula>
</td>
<td align="center">State transfer probability</td>
</tr>
<tr>
<td align="center">
<italic>&#x3c1;</italic>
</td>
<td align="center">Pheromone concentration dilution coefficient</td>
</tr>
<tr>
<td align="center">
<italic>&#x3b1;</italic>
<sup>DG</sup>, <italic>&#x3b2;</italic>
<sup>DG</sup>, and <italic>&#x3b3;</italic>
<sup>DG</sup>
</td>
<td align="center">Quadratic, linear, and constant cost coefficients of the distributed generator</td>
</tr>
<tr>
<td align="center">
<italic>&#x3b7;</italic>
<sup>STO</sup>
</td>
<td align="center">Coefficient of the energy storage dispatch cost</td>
</tr>
<tr>
<td align="center">
<italic>&#x3c9;</italic>
<sup>IL</sup>
</td>
<td align="center">Coefficient of the interruptible load dispatch cost</td>
</tr>
<tr>
<td align="center">
<italic>&#x3c0;</italic>
<sub>grid</sub>
</td>
<td align="center">Efficiency of electricity generation of the gas turbine</td>
</tr>
<tr>
<td align="center">
<italic>&#x3b8;</italic>
<sub>gas</sub>
</td>
<td align="center">Thermal efficiency of natural gas combustion</td>
</tr>
<tr>
<td align="center">
<italic>&#x3c9;</italic>
<sup>gas</sup>
</td>
<td align="center">Coefficient of the gas turbine dispatch cost</td>
</tr>
<tr>
<td align="center">
<italic>&#x3c9;</italic>
<sup>heat</sup>
</td>
<td align="center">Coefficient of the electric heating boiler dispatch cost</td>
</tr>
<tr>
<td align="center">
<italic>q</italic>
<sub>R</sub>
</td>
<td align="center">Specific heat capacity of hot water</td>
</tr>
<tr>
<td align="center">
<inline-formula id="inf98">
<mml:math id="m129">
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>min</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula>
</td>
<td align="center">Lower bound of substation dispatch power</td>
</tr>
<tr>
<td align="center">
<inline-formula id="inf99">
<mml:math id="m130">
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>max</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula>
</td>
<td align="center">Upper bound of substation dispatch power</td>
</tr>
</tbody>
</table>
</table-wrap>
<sec id="s2-1">
<title>2.1 Multi-energy-flow VPP model</title>
<sec id="s2-1-1">
<title>2.1.1 Distributed generator model</title>
<p>The dispatch cost of the distributed generator <inline-formula id="inf22">
<mml:math id="m22">
<mml:msubsup>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>DG</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> is given by Eq. <xref ref-type="disp-formula" rid="e1">1</xref>.<disp-formula id="e1">
<mml:math id="m23">
<mml:msubsup>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>DG</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>&#x3b1;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>DG</mml:mtext>
</mml:mrow>
</mml:msup>
<mml:msup>
<mml:mrow>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>DG</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>&#x2b;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>&#x3b2;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>DG</mml:mtext>
</mml:mrow>
</mml:msup>
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>DG</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2b;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>&#x3b3;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>DG</mml:mtext>
</mml:mrow>
</mml:msup>
<mml:mo>,</mml:mo>
</mml:math>
<label>(1)</label>
</disp-formula>where <inline-formula id="inf23">
<mml:math id="m24">
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>DG</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> represents the distributed generator dispatch power of substation <italic>l</italic> in VPP <italic>k</italic> during the <italic>t</italic>-th time slot. <italic>&#x3b1;</italic>
<sup>DG</sup>, <italic>&#x3b2;</italic>
<sup>DG</sup>, and <italic>&#x3b3;</italic>
<sup>DG</sup> are the quadratic, linear, and constant cost coefficients of the distributed generator, respectively.</p>
</sec>
<sec id="s2-1-2">
<title>2.1.2 Energy storage model</title>
<p>The dispatch cost of energy storage <inline-formula id="inf24">
<mml:math id="m25">
<mml:msubsup>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>STO</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> is given by Eq. <xref ref-type="disp-formula" rid="e2">2</xref>.<disp-formula id="e2">
<mml:math id="m26">
<mml:msubsup>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>STO</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>&#x3b7;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>STO</mml:mtext>
</mml:mrow>
</mml:msup>
<mml:msup>
<mml:mrow>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>STO</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>,</mml:mo>
</mml:math>
<label>(2)</label>
</disp-formula>where <inline-formula id="inf25">
<mml:math id="m27">
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>STO</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> represents the energy storage dispatch power of substation <italic>l</italic> in VPP <italic>k</italic> during the <italic>t</italic>-th time slot. <inline-formula id="inf26">
<mml:math id="m28">
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>STO</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x2265;</mml:mo>
<mml:mn>0</mml:mn>
</mml:math>
</inline-formula> represents that the energy storage is in the discharging mode. <inline-formula id="inf27">
<mml:math id="m29">
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>STO</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x3c;</mml:mo>
<mml:mn>0</mml:mn>
</mml:math>
</inline-formula> represents that the energy storage is in the charging mode. <italic>&#x3b7;</italic>
<sup>STO</sup> is the coefficient of the energy storage dispatch cost.</p>
<p>The capacity of energy storage <inline-formula id="inf28">
<mml:math id="m30">
<mml:msubsup>
<mml:mrow>
<mml:mi>Q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>STO</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> is given by Eq. <xref ref-type="disp-formula" rid="e3">3</xref>.<disp-formula id="e3">
<mml:math id="m31">
<mml:msubsup>
<mml:mrow>
<mml:mi>Q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>STO</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:mi>max</mml:mi>
<mml:mfenced open="{" close="}">
<mml:mrow>
<mml:mi>min</mml:mi>
<mml:mfenced open="{" close="}">
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>Q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>STO</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2b;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>STO</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mi>&#x3c4;</mml:mi>
<mml:mo>,</mml:mo>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>Q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>max</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>STO</mml:mtext>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
</mml:math>
<label>(3)</label>
</disp-formula>where <inline-formula id="inf29">
<mml:math id="m32">
<mml:msubsup>
<mml:mrow>
<mml:mi>Q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>max</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>STO</mml:mtext>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula> represents the maximum capacity of energy storage.</p>
</sec>
<sec id="s2-1-3">
<title>2.1.3 Interruptible load model</title>
<p>There is a clear distinction drawn between controllable and uncontrollable loads in the distribution power grid. Uncontrolled loads are loads that cannot participate in the demand response of the distribution power grid (<xref ref-type="bibr" rid="B16">Liang et al., 2021</xref>). In contrast, controllable loads refer to the loads that can participate in the demand response of the distribution power grid. The interruptible load proposed in this paper is one of the controllable loads. The dispatch cost of the interruptible load <inline-formula id="inf30">
<mml:math id="m33">
<mml:msubsup>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>IL</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> is given by Eq. <xref ref-type="disp-formula" rid="e4">4</xref>.<disp-formula id="e4">
<mml:math id="m34">
<mml:msubsup>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>IL</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>&#x3c9;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>IL</mml:mtext>
</mml:mrow>
</mml:msup>
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>IL</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
</mml:math>
<label>(4)</label>
</disp-formula>where <inline-formula id="inf31">
<mml:math id="m35">
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>IL</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> represents the interruptible load dispatch power of substation <italic>l</italic> in VPP <italic>k</italic> during the <italic>t</italic>-th time slot. <italic>&#x3c9;</italic>
<sup>IL</sup> is the coefficient of the interruptible load dispatch cost.</p>
</sec>
<sec id="s2-1-4">
<title>2.1.4 Gas turbine model</title>
<p>The dispatch power of the gas turbine <inline-formula id="inf32">
<mml:math id="m36">
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>gas</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> is given by Eq. <xref ref-type="disp-formula" rid="e5">5</xref>.<disp-formula id="e5">
<mml:math id="m37">
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>gas</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c0;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>grid</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:msubsup>
<mml:mrow>
<mml:mi>f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b8;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>gas</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
</mml:math>
<label>(5)</label>
</disp-formula>where <italic>&#x3c0;</italic>
<sub>grid</sub> represents the efficiency of electricity generation by the gas turbine. <inline-formula id="inf33">
<mml:math id="m38">
<mml:msubsup>
<mml:mrow>
<mml:mi>f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> represents the natural gas consumption of the gas turbine in substation <italic>l</italic> at the connection point to natural gas node <italic>z</italic> during the <italic>t</italic>-th time slot. <italic>&#x3b8;</italic>
<sub>gas</sub> is the thermal efficiency of natural gas combustion.</p>
<p>The dispatch cost of gas turbine <inline-formula id="inf34">
<mml:math id="m39">
<mml:msubsup>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>gas</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> is given by Eq. <xref ref-type="disp-formula" rid="e6">6</xref>.<disp-formula id="e6">
<mml:math id="m40">
<mml:msubsup>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>gas</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>&#x3c9;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>gas</mml:mtext>
</mml:mrow>
</mml:msup>
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>gas</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
</mml:math>
<label>(6)</label>
</disp-formula>where <italic>&#x3c9;</italic>
<sup>gas</sup> represents the coefficient of the gas turbine dispatch cost.</p>
<p>The gas turbine is linked to the natural gas network, and the model for the gas network is formulated as follows. It is assumed that natural gas flows in the pipeline at a constant temperature and stable flow, and friction coefficients within the pipeline are neglected, i.e., kinetic energy changes during the flow process are ignored.</p>
<p>The balance relationship between natural gas flow refers to the node air flow balance of the natural gas pipeline network, i.e., the natural gas flow injected by the node is equal to the sum of the flow consumed by the node and the gas flowing to the next node (<xref ref-type="bibr" rid="B5">Dai et al., 2018</xref>), which is given by Eq. <xref ref-type="disp-formula" rid="e7">7</xref>.<disp-formula id="e7">
<mml:math id="m41">
<mml:mstyle displaystyle="true">
<mml:munder>
<mml:mrow>
<mml:mo>&#x2211;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mo>&#x2208;</mml:mo>
<mml:mi mathvariant="script">Z</mml:mi>
</mml:mrow>
</mml:munder>
</mml:mstyle>
<mml:msub>
<mml:mrow>
<mml:mi>f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>z</mml:mi>
<mml:msup>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2b;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:mstyle displaystyle="true">
<mml:munder>
<mml:mrow>
<mml:mo>&#x2211;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi>w</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mi mathvariant="script">W</mml:mi>
</mml:mrow>
</mml:munder>
</mml:mstyle>
<mml:msubsup>
<mml:mrow>
<mml:mi>f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>o</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
</mml:math>
<label>(7)</label>
</disp-formula>where <italic>f</italic>
<sub>
<italic>zz</italic>&#x2032;</sub>(<italic>t</italic>) represents the natural gas flow between nodes <italic>z</italic> and <italic>z</italic>&#x2032; in the natural gas pipeline network. <inline-formula id="inf35">
<mml:math id="m42">
<mml:msubsup>
<mml:mrow>
<mml:mi>f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>o</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> represents the natural gas supply flow from gas source <italic>o</italic> connected to node <italic>z</italic>.</p>
<p>The natural gas flow <italic>f</italic>
<sub>
<italic>zz</italic>&#x2032;</sub>(<italic>t</italic>) between natural gas nodes <italic>z</italic> and <italic>z</italic>&#x2032; is given by Eq. <xref ref-type="disp-formula" rid="e8">8</xref>.<disp-formula id="e8">
<mml:math id="m43">
<mml:msub>
<mml:mrow>
<mml:mi>f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>z</mml:mi>
<mml:msup>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>K</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>z</mml:mi>
<mml:msup>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi>D</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>z</mml:mi>
<mml:msup>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:msub>
<mml:msqrt>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>D</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>z</mml:mi>
<mml:msup>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:msub>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2212;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:msqrt>
<mml:mo>,</mml:mo>
</mml:math>
<label>(8)</label>
</disp-formula>where <italic>K</italic>
<sub>
<italic>zz</italic>&#x2032;</sub> is the pipeline constant. <italic>D</italic>
<sub>
<italic>zz</italic>&#x2032;</sub> represents the gas flow direction between nodes <italic>z</italic> and <italic>z</italic>&#x2032;, with <italic>D</italic>
<sub>
<italic>zz</italic>&#x2032;</sub> &#x3d; 1 when gas flows from <italic>z</italic> to <italic>z</italic>&#x2032;, and <italic>D</italic>
<sub>
<italic>zz</italic>&#x2032;</sub> &#x3d; &#x2212;1 otherwise. <italic>p</italic>
<sub>
<italic>z</italic>
</sub>(<italic>t</italic>) and <italic>p</italic>
<sub>
<italic>z</italic>&#x2032;</sub>(<italic>t</italic>) represent the gas pressure at nodes <italic>z</italic> and <italic>z</italic>&#x2032;, respectively.</p>
</sec>
<sec id="s2-1-5">
<title>2.1.5 Electric heating boiler model</title>
<p>As a controllable thermal load, the dispatch cost of electric heating boiler <inline-formula id="inf36">
<mml:math id="m44">
<mml:msubsup>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>heat</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> is given by Eq. <xref ref-type="disp-formula" rid="e9">9</xref>.<disp-formula id="e9">
<mml:math id="m45">
<mml:msubsup>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>heat</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>&#x3c9;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>heat</mml:mtext>
</mml:mrow>
</mml:msup>
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>heat</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
</mml:math>
<label>(9)</label>
</disp-formula>where <italic>&#x3c9;</italic>
<sup>heat</sup> represents the coefficient of the electric heating boiler dispatch cost. <inline-formula id="inf37">
<mml:math id="m46">
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>heat</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> represents the dispatch power of the electric heating boiler in substation <italic>l</italic> during the <italic>t</italic>-th time slot.</p>
<p>The electric heating boiler is directly connected to the thermal load node <italic>m</italic>, and the electric heating boiler is connected to the distribution power grid through substation <italic>l</italic> within VPP <italic>k</italic>. The interactive power is given by <inline-formula id="inf38">
<mml:math id="m47">
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>heat</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>heat</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>. <inline-formula id="inf39">
<mml:math id="m48">
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>heat</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> represents the dispatch power of thermal load node <italic>m</italic>.</p>
<p>In a certain range of ambient temperature difference, considering that the heating medium in the thermal network is hot water, minor flow rate changes due to temperature differences in the supply and return pipes are neglected (<xref ref-type="bibr" rid="B37">Zhang et al., 2023b</xref>). In this study, it is assumed that the temperature of water in the return pipes is known, and, therefore, the temperature <inline-formula id="inf40">
<mml:math id="m49">
<mml:msubsup>
<mml:mrow>
<mml:mi>T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>in</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> of water in the supply pipes is given by Eq. <xref ref-type="disp-formula" rid="e10">10</xref>.<disp-formula id="e10">
<mml:math id="m50">
<mml:msubsup>
<mml:mrow>
<mml:mi>T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>in</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mi>&#x3b6;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">heat</mml:mi>
</mml:mrow>
</mml:msup>
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>heat</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>R</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi>o</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfrac>
<mml:mo>&#xd7;</mml:mo>
<mml:mn>1</mml:mn>
<mml:msup>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>&#x2b;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>out</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
</mml:math>
<label>(10)</label>
</disp-formula>where <italic>&#x3b6;</italic>
<sup>heat</sup> represents the heat production efficiency of the electric heating boiler. <italic>q</italic>
<sub>R</sub> is the specific heat capacity of hot water. <italic>o</italic>
<sub>
<italic>m</italic>
</sub>(<italic>t</italic>) is the water flow rate passing through thermal load node <italic>m</italic> during the <italic>t</italic>-th time slot. <inline-formula id="inf41">
<mml:math id="m51">
<mml:msubsup>
<mml:mrow>
<mml:mi>T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>in</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> and <inline-formula id="inf42">
<mml:math id="m52">
<mml:msubsup>
<mml:mrow>
<mml:mi>T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>out</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> are the temperature of water in the supply and return pipes at thermal load node <italic>m</italic>, respectively. The constraint for supply water temperature is given by Eq. <xref ref-type="disp-formula" rid="e11">11</xref>.<disp-formula id="e11">
<mml:math id="m53">
<mml:msubsup>
<mml:mrow>
<mml:mi>T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>in</mml:mtext>
<mml:mo>,</mml:mo>
<mml:mi>min</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo>&#x2264;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="normal">i</mml:mi>
<mml:mi mathvariant="normal">n</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2264;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>in</mml:mtext>
<mml:mo>,</mml:mo>
<mml:mi>max</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo>,</mml:mo>
</mml:math>
<label>(11)</label>
</disp-formula>where <inline-formula id="inf43">
<mml:math id="m54">
<mml:msubsup>
<mml:mrow>
<mml:mi>T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>in</mml:mtext>
<mml:mo>,</mml:mo>
<mml:mi>min</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula> and <inline-formula id="inf44">
<mml:math id="m55">
<mml:msubsup>
<mml:mrow>
<mml:mi>T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>in</mml:mtext>
<mml:mo>,</mml:mo>
<mml:mi>max</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula> represent the minimum and maximum supply water temperatures at thermal load node <italic>m</italic>, respectively.</p>
</sec>
<sec id="s2-1-6">
<title>2.1.6 Substation model</title>
<p>In order to facilitate resource management, the internal resources of the VPP are divided into multiple substations. We assume that in VPP <italic>k</italic>, substation <italic>l</italic> contains the aforementioned five types of resources. The dispatch power of substation <italic>P</italic>
<sub>
<italic>k</italic>,<italic>l</italic>
</sub>(<italic>t</italic>) is given by Eq. <xref ref-type="disp-formula" rid="e12">12</xref>.<disp-formula id="e12">
<mml:math id="m56">
<mml:msub>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>DG</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2b;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>STO</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2b;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>IL</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2b;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>heat</mml:mtext>
</mml:mrow>
<mml:mrow>
<mml:mi>l</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>r</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2b;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>gas</mml:mtext>
</mml:mrow>
<mml:mrow>
<mml:mi>l</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>h</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>.</mml:mo>
</mml:math>
<label>(12)</label>
</disp-formula>
</p>
<p>The dispatch power constraint for substation <italic>l</italic> in VPP <italic>k</italic> is given by Eq. <xref ref-type="disp-formula" rid="e13">13</xref>.<disp-formula id="e13">
<mml:math id="m57">
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>min</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo>&#x2a7d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2a7d;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>max</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo>,</mml:mo>
</mml:math>
<label>(13)</label>
</disp-formula>where <inline-formula id="inf45">
<mml:math id="m58">
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>min</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula> and <inline-formula id="inf46">
<mml:math id="m59">
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>max</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula> represent the lower and upper bounds of substation dispatch power, respectively.</p>
</sec>
</sec>
<sec id="s2-2">
<title>2.2 Distribution power grid loss model</title>
<p>The distribution power grid loss <italic>C</italic>
<sub>loss</sub>(<italic>t</italic>) is given by Eq. <xref ref-type="disp-formula" rid="e14">14</xref>.<disp-formula id="e14">
<mml:math id="m60">
<mml:msub>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>loss</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:mstyle displaystyle="true">
<mml:munderover accentunder="false" accent="true">
<mml:mrow>
<mml:mo>&#x2211;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi>I</mml:mi>
</mml:mrow>
</mml:munderover>
</mml:mstyle>
<mml:mstyle displaystyle="true">
<mml:munder>
<mml:mrow>
<mml:mo>&#x2211;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mi>v</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:munder>
</mml:mstyle>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b3;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>loss</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi>R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mfrac>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mi>j</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2b;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>Q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mi>j</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>A</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfrac>
<mml:mo>,</mml:mo>
</mml:math>
<label>(14)</label>
</disp-formula>where <italic>&#x3b3;</italic>
<sub>loss</sub> represents the unit grid loss cost. <italic>R</italic>
<sub>
<italic>ij</italic>
</sub>(<italic>t</italic>) is the resistance value between the distribution power grid node <italic>i</italic> and node <italic>j</italic> during the <italic>t</italic>-th slot. <italic>v</italic>(<italic>i</italic>) represents the set of end nodes of branches in the power grid that have node <italic>i</italic> as the starting node. <inline-formula id="inf47">
<mml:math id="m61">
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mi>j</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> and <inline-formula id="inf48">
<mml:math id="m62">
<mml:msubsup>
<mml:mrow>
<mml:mi>Q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mi>j</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> are the active and reactive power flowing from the upstream distribution power grid node <italic>i</italic> to node <italic>j</italic> during the <italic>t</italic>-th slot, respectively. <italic>A</italic>
<sub>
<italic>i</italic>
</sub>(<italic>t</italic>) is the voltage magnitude at the distribution power grid node <italic>i</italic>. The power flow equation of the distribution power grid is given by Eq. <xref ref-type="disp-formula" rid="e15">15</xref>.<disp-formula id="e15">
<mml:math id="m63">
<mml:mfenced open="{" close="">
<mml:mrow>
<mml:mtable class="cases">
<mml:mtr>
<mml:mtd columnalign="left">
<mml:msub>
<mml:mstyle displaystyle="true">
<mml:mrow>
<mml:mo>&#x2211;</mml:mo>
</mml:mrow>
</mml:mstyle>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mi>u</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mstyle displaystyle="true">
<mml:mrow>
<mml:mo>&#x2211;</mml:mo>
</mml:mrow>
</mml:mstyle>
<mml:mrow>
<mml:mi>s</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mi>v</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
<mml:mspace width="1em"/>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="left">
<mml:msub>
<mml:mstyle displaystyle="true">
<mml:mrow>
<mml:mo>&#x2211;</mml:mo>
</mml:mrow>
</mml:mstyle>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mi>u</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi>Q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>X</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>Q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mstyle displaystyle="true">
<mml:mrow>
<mml:mo>&#x2211;</mml:mo>
</mml:mrow>
</mml:mstyle>
<mml:mrow>
<mml:mi>s</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mi>v</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi>Q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
<mml:mspace width="1em"/>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:math>
<label>(15)</label>
</disp-formula>where <italic>u</italic>(<italic>j</italic>) represents the set of starting nodes in the distribution power grid with node <italic>j</italic> as the tail node. <italic>v</italic>(<italic>j</italic>) represents the set of end nodes of branches in the power grid with node <italic>j</italic> as the starting node. <italic>R</italic>
<sub>
<italic>ij</italic>
</sub> and <italic>X</italic>
<sub>
<italic>ij</italic>
</sub> are the resistance and reactance of the line between the distribution power grid node <italic>i</italic> and node <italic>j</italic>, respectively. <italic>P</italic>
<sub>
<italic>j</italic>
</sub>(<italic>t</italic>) is the net active power at node <italic>j</italic>. <italic>P</italic>
<sub>
<italic>js</italic>
</sub>(<italic>t</italic>) is the load active power flowing from upstream node <italic>j</italic> to node <italic>s</italic>. <inline-formula id="inf49">
<mml:math id="m64">
<mml:msub>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msqrt>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mi>j</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x2b;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>Q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mi>j</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:msqrt>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>A</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mfrac>
</mml:math>
</inline-formula> represents the current between node <italic>i</italic> and node <italic>j</italic> in the line. <italic>Q</italic>
<sub>
<italic>j</italic>
</sub>(<italic>t</italic>) is the net reactive power at node <italic>j</italic>. <italic>Q</italic>
<sub>
<italic>js</italic>
</sub>(<italic>t</italic>) is the load reactive power flowing from the upstream node <italic>j</italic> to node <italic>s</italic>. The net active power and net reactive power constraints of node <italic>j</italic> are given by Eq. <xref ref-type="disp-formula" rid="e16">16</xref>.<disp-formula id="e16">
<mml:math id="m65">
<mml:mfenced open="{" close="">
<mml:mrow>
<mml:mtable class="cases">
<mml:mtr>
<mml:mtd columnalign="left">
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>min</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2264;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2264;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>max</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
<mml:mspace width="1em"/>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="left">
<mml:msubsup>
<mml:mrow>
<mml:mi>Q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>min</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2264;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>Q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2264;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>Q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>max</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
<mml:mspace width="1em"/>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:math>
<label>(16)</label>
</disp-formula>where <inline-formula id="inf50">
<mml:math id="m66">
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>min</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> and <inline-formula id="inf51">
<mml:math id="m67">
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>max</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> represent the lower and upper active power output bounds at node <italic>j</italic>, respectively. <inline-formula id="inf52">
<mml:math id="m68">
<mml:msubsup>
<mml:mrow>
<mml:mi>Q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>min</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> and <inline-formula id="inf53">
<mml:math id="m69">
<mml:msubsup>
<mml:mrow>
<mml:mi>Q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>max</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> represent the lower and upper reactive power output bounds, respectively. The voltage relationship at node <italic>j</italic> is given by Eq. <xref ref-type="disp-formula" rid="e17">17</xref>.<disp-formula id="e17">
<mml:math id="m70">
<mml:msubsup>
<mml:mrow>
<mml:mi>V</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mo>&#x3d;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>V</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>2</mml:mn>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>X</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi>Q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2b;</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mi>j</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mo>&#x2b;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>X</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mi>j</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:mfenced>
<mml:msubsup>
<mml:mrow>
<mml:mi>L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mi>j</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
</mml:math>
<label>(17)</label>
</disp-formula>where <italic>V</italic>
<sub>
<italic>i</italic>
</sub> and <italic>V</italic>
<sub>
<italic>j</italic>
</sub> represent the voltage at node <italic>i</italic> and node <italic>j</italic>, respectively. The voltage constraint of node <italic>i</italic> is given by Eq. <xref ref-type="disp-formula" rid="e18">18</xref>.<disp-formula id="e18">
<mml:math id="m71">
<mml:msubsup>
<mml:mrow>
<mml:mi>V</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>min</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo>&#x2a7d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>V</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2a7d;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>V</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>max</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo>,</mml:mo>
</mml:math>
<label>(18)</label>
</disp-formula>where <inline-formula id="inf54">
<mml:math id="m72">
<mml:msubsup>
<mml:mrow>
<mml:mi>V</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>min</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula> and <inline-formula id="inf55">
<mml:math id="m73">
<mml:msubsup>
<mml:mrow>
<mml:mi>V</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>max</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula> are the lower and upper voltage bounds for node <italic>i</italic>, respectively.</p>
</sec>
</sec>
<sec id="s3">
<title>3 Problem formulation of two-layer iterative energy dispatch</title>
<p>The two-layer iterative energy dispatch problem for a multi-energy flow VPP in the distribution power grid can be decomposed into two optimization sub-problems: the upper-layer multi-energy flow VPP energy dispatch sub-problem and the lower-layer distributed substation energy dispatch sub-problem.</p>
<sec id="s3-1">
<title>3.1 Upper-layer multi-energy flow VPP energy dispatch sub-problem</title>
<p>During the real-time operational phase, the regional multi-energy-flow dispatch center takes on the task of global optimization and dispatch (<xref ref-type="bibr" rid="B18">Liao et al., 2023</xref>). The upper layer multi-energy flow VPP energy dispatch sub-problem is optimized to minimize the distribution power grid loss and the compensatory electricity price cost, and the dispatch power <italic>P</italic>
<sub>
<italic>k</italic>
</sub>(<italic>t</italic>) of each VPP participating in the demand response is the optimization variable. The specific formulation of the upper-layer multi-energy flow VPP energy dispatch sub-problem is given by Eq. <xref ref-type="disp-formula" rid="e19">19</xref>.</p>
<p>
<disp-formula id="e19">
<mml:math id="m74">
<mml:mtable class="align" columnalign="left">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mspace width="2em"/>
<mml:mi mathvariant="bold">P</mml:mi>
<mml:mn mathvariant="bold">1</mml:mn>
<mml:mo>:</mml:mo>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:munder>
<mml:mrow>
<mml:mi>min</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mfenced open="{" close="}">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2208;</mml:mo>
<mml:mi mathvariant="script">K</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:munder>
<mml:msub>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>total</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>ep</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>loss</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right"/>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:mstyle displaystyle="true">
<mml:munder>
<mml:mrow>
<mml:mo>&#x2211;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mi>K</mml:mi>
</mml:mrow>
</mml:munder>
</mml:mstyle>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b1;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:msub>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right"/>
<mml:mtd columnalign="left">
<mml:mspace width="1em"/>
<mml:mo>&#x2b;</mml:mo>
<mml:mstyle displaystyle="true">
<mml:munderover accentunder="false" accent="true">
<mml:mrow>
<mml:mo>&#x2211;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi>I</mml:mi>
</mml:mrow>
</mml:munderover>
</mml:mstyle>
<mml:mstyle displaystyle="true">
<mml:munder>
<mml:mrow>
<mml:mo>&#x2211;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mi>v</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:munder>
</mml:mstyle>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b3;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">loss</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi>R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mfrac>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mi>j</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2b;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>Q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mi>j</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>A</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfrac>
<mml:mo>,</mml:mo>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mi mathvariant="normal">s</mml:mi>
<mml:mo>.</mml:mo>
<mml:mspace width="0.3333em"/>
<mml:mi>t</mml:mi>
<mml:mo>.</mml:mo>
<mml:mspace width="0.3333em"/>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:msub>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>:</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mn>13</mml:mn>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right"/>
<mml:mtd columnalign="left">
<mml:msub>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>:</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mn>15</mml:mn>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x223c;</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mn>18</mml:mn>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
<label>(19)</label>
</disp-formula>where <italic>C</italic>
<sub>total</sub>(<italic>t</italic>) represents the distribution power grid dispatch cost, <italic>C</italic>
<sub>ep(t)</sub> represents the compensatory electricity price cost, <italic>&#x3b1;</italic>
<sub>
<italic>k</italic>
</sub>(<italic>t</italic>) represents the compensatory electricity price, <italic>P</italic>
<sub>
<italic>k</italic>
</sub>(<italic>t</italic>) represents the amount of purchased electricity of VPP <italic>k</italic> during the <italic>t</italic>-th time slot, <italic>C</italic>
<sub>loss</sub>(<italic>t</italic>) stands for the distribution power grid loss cost, <italic>C</italic>
<sub>1</sub> represents the constraints on the upper and lower bounds of substation dispatch power, and <italic>C</italic>
<sub>2</sub> represents the constraints on distribution power flow.</p>
</sec>
<sec id="s3-2">
<title>3.2 Lower-layer distributed substation energy dispatch sub-problem</title>
<p>The regional multi-energy-flow dispatch center sends the optimized dispatch power values to the substations within VPPs. Within each substation, the dispatch power of the distributed generator, energy storage, interruptible load, gas turbine, and electric heating boiler is optimized and adjusted based on the dispatch power values. The substation energy dispatch sub-problem aims to minimize the dispatch cost of the above resources, with the dispatch power of each resource as the optimization variable. Taking the substation <italic>l</italic> within VPP <italic>k</italic> as an example, the specific problem description is given by Eq. <xref ref-type="disp-formula" rid="e20">20</xref>.</p>
<p>
<disp-formula id="e20">
<mml:math id="m75">
<mml:mtable class="align" columnalign="left">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mspace width="2em"/>
<mml:mi mathvariant="bold">P</mml:mi>
<mml:mn mathvariant="bold">2</mml:mn>
<mml:mo>:</mml:mo>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:munder>
<mml:mrow>
<mml:mi>min</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mfenced open="{" close="}">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2208;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>N</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:munder>
<mml:msub>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:mstyle displaystyle="true">
<mml:munder>
<mml:mrow>
<mml:mo>&#x2211;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi>l</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>N</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:munder>
</mml:mstyle>
<mml:msub>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:mstyle displaystyle="true">
<mml:munder>
<mml:mrow>
<mml:mo>&#x2211;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi>l</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>N</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:munder>
</mml:mstyle>
<mml:msubsup>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>DG</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right"/>
<mml:mtd columnalign="left">
<mml:mo>&#x2b;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>STO</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2b;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>IL</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2b;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>heat</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2b;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>gas</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mtext>s.&#x2009;t.&#x2009;</mml:mtext>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:msub>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>:</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mn>7</mml:mn>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x223c;</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mn>8</mml:mn>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right"/>
<mml:mtd columnalign="left">
<mml:msub>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>:</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mn>10</mml:mn>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x223c;</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mn>11</mml:mn>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right"/>
<mml:mtd columnalign="left">
<mml:msub>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>:</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="normal">D</mml:mi>
<mml:mi mathvariant="normal">G</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="normal">M</mml:mi>
<mml:mi mathvariant="normal">I</mml:mi>
<mml:mi mathvariant="normal">N</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo>&#x2264;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="normal">D</mml:mi>
<mml:mi mathvariant="normal">G</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2264;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="normal">D</mml:mi>
<mml:mi mathvariant="normal">G</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="normal">M</mml:mi>
<mml:mi mathvariant="normal">A</mml:mi>
<mml:mi mathvariant="normal">X</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>N</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right"/>
<mml:mtd columnalign="left">
<mml:msub>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>4</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>:</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="normal">S</mml:mi>
<mml:mi mathvariant="normal">T</mml:mi>
<mml:mi mathvariant="normal">O</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="normal">M</mml:mi>
<mml:mi mathvariant="normal">I</mml:mi>
<mml:mi mathvariant="normal">N</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo>&#x2264;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="normal">S</mml:mi>
<mml:mi mathvariant="normal">T</mml:mi>
<mml:mi mathvariant="normal">O</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2264;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="normal">S</mml:mi>
<mml:mi mathvariant="normal">T</mml:mi>
<mml:mi mathvariant="normal">O</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="normal">M</mml:mi>
<mml:mi mathvariant="normal">A</mml:mi>
<mml:mi mathvariant="normal">X</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>N</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right"/>
<mml:mtd columnalign="left">
<mml:msub>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>5</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>:</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="normal">I</mml:mi>
<mml:mi mathvariant="normal">L</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="normal">M</mml:mi>
<mml:mi mathvariant="normal">I</mml:mi>
<mml:mi mathvariant="normal">N</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo>&#x2264;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="normal">I</mml:mi>
<mml:mi mathvariant="normal">L</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2264;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="normal">I</mml:mi>
<mml:mi mathvariant="normal">L</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="normal">M</mml:mi>
<mml:mi mathvariant="normal">A</mml:mi>
<mml:mi mathvariant="normal">X</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>N</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right"/>
<mml:mtd columnalign="left">
<mml:msub>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>6</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>:</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="normal">g</mml:mi>
<mml:mi mathvariant="normal">a</mml:mi>
<mml:mi mathvariant="normal">s</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="normal">M</mml:mi>
<mml:mi mathvariant="normal">I</mml:mi>
<mml:mi mathvariant="normal">N</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo>&#x2264;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="normal">g</mml:mi>
<mml:mi mathvariant="normal">a</mml:mi>
<mml:mi mathvariant="normal">s</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2264;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="normal">g</mml:mi>
<mml:mi mathvariant="normal">a</mml:mi>
<mml:mi mathvariant="normal">s</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="normal">M</mml:mi>
<mml:mi mathvariant="normal">A</mml:mi>
<mml:mi mathvariant="normal">X</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>N</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right"/>
<mml:mtd columnalign="left">
<mml:msub>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>7</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>:</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="normal">h</mml:mi>
<mml:mi mathvariant="normal">e</mml:mi>
<mml:mi mathvariant="normal">a</mml:mi>
<mml:mi mathvariant="normal">t</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="normal">M</mml:mi>
<mml:mi mathvariant="normal">I</mml:mi>
<mml:mi mathvariant="normal">N</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo>&#x2264;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="normal">h</mml:mi>
<mml:mi mathvariant="normal">e</mml:mi>
<mml:mi mathvariant="normal">a</mml:mi>
<mml:mi mathvariant="normal">t</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2264;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="normal">h</mml:mi>
<mml:mi mathvariant="normal">e</mml:mi>
<mml:mi mathvariant="normal">a</mml:mi>
<mml:mi mathvariant="normal">t</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="normal">M</mml:mi>
<mml:mi mathvariant="normal">A</mml:mi>
<mml:mi mathvariant="normal">X</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>N</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right"/>
<mml:mtd columnalign="left">
<mml:msub>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>8</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>:</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:mstyle displaystyle="true">
<mml:munder>
<mml:mrow>
<mml:mo>&#x2211;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi>l</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>N</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:munder>
</mml:mstyle>
<mml:msub>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
<label>(20)</label>
</disp-formula>where <italic>C</italic>
<sub>
<italic>k</italic>,<italic>l</italic>
</sub>(<italic>t</italic>) represents the dispatch cost of substation <italic>l</italic> in VPP <italic>k</italic> during the <italic>t</italic>-th time slot. <italic>C</italic>
<sub>1</sub> and <italic>C</italic>
<sub>6</sub> represent the constraints related to the natural gas network and gas turbine dispatch power, respectively. <inline-formula id="inf56">
<mml:math id="m76">
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="normal">g</mml:mi>
<mml:mi mathvariant="normal">a</mml:mi>
<mml:mi mathvariant="normal">s</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="normal">M</mml:mi>
<mml:mi mathvariant="normal">I</mml:mi>
<mml:mi mathvariant="normal">N</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula> and <inline-formula id="inf57">
<mml:math id="m77">
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="normal">g</mml:mi>
<mml:mi mathvariant="normal">a</mml:mi>
<mml:mi mathvariant="normal">s</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="normal">M</mml:mi>
<mml:mi mathvariant="normal">A</mml:mi>
<mml:mi mathvariant="normal">X</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula> are the minimum and maximum dispatch power of the gas turbine in substation <italic>l</italic> within VPP <italic>k</italic>, respectively. <italic>C</italic>
<sub>2</sub> and <italic>C</italic>
<sub>7</sub> represent the constraints related to the thermal network and electric heat boiler dispatch power, respectively. <inline-formula id="inf58">
<mml:math id="m78">
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="normal">h</mml:mi>
<mml:mi mathvariant="normal">e</mml:mi>
<mml:mi mathvariant="normal">a</mml:mi>
<mml:mi mathvariant="normal">t</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="normal">M</mml:mi>
<mml:mi mathvariant="normal">I</mml:mi>
<mml:mi mathvariant="normal">N</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula> and <inline-formula id="inf59">
<mml:math id="m79">
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="normal">h</mml:mi>
<mml:mi mathvariant="normal">e</mml:mi>
<mml:mi mathvariant="normal">a</mml:mi>
<mml:mi mathvariant="normal">t</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="normal">M</mml:mi>
<mml:mi mathvariant="normal">A</mml:mi>
<mml:mi mathvariant="normal">X</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula> are the minimum and maximum dispatch power of the electric heat boiler in substation <italic>l</italic> within VPP <italic>k</italic>, respectively. <italic>C</italic>
<sub>3</sub> represents the constraints on the dispatch power of distributed energy source. <inline-formula id="inf60">
<mml:math id="m80">
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="normal">D</mml:mi>
<mml:mi mathvariant="normal">G</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="normal">M</mml:mi>
<mml:mi mathvariant="normal">I</mml:mi>
<mml:mi mathvariant="normal">N</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula> and <inline-formula id="inf61">
<mml:math id="m81">
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="normal">D</mml:mi>
<mml:mi mathvariant="normal">G</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="normal">M</mml:mi>
<mml:mi mathvariant="normal">A</mml:mi>
<mml:mi mathvariant="normal">X</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula> are the minimum and maximum dispatch power of the distributed energy source in substation <italic>l</italic> within VPP <italic>k</italic>, respectively. <italic>C</italic>
<sub>4</sub> represents the constraints on the dispatch power of energy storage systems. <inline-formula id="inf62">
<mml:math id="m82">
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="normal">S</mml:mi>
<mml:mi mathvariant="normal">T</mml:mi>
<mml:mi mathvariant="normal">O</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="normal">M</mml:mi>
<mml:mi mathvariant="normal">I</mml:mi>
<mml:mi mathvariant="normal">N</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula> and <inline-formula id="inf63">
<mml:math id="m83">
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="normal">S</mml:mi>
<mml:mi mathvariant="normal">T</mml:mi>
<mml:mi mathvariant="normal">O</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="normal">M</mml:mi>
<mml:mi mathvariant="normal">A</mml:mi>
<mml:mi mathvariant="normal">X</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula> are the minimum and maximum dispatch power of the energy storage system in substation <italic>l</italic> within VPP <italic>k</italic>, respectively. <italic>C</italic>
<sub>5</sub> represents the constraints on the dispatch power of interruptible loads. <inline-formula id="inf64">
<mml:math id="m84">
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="normal">I</mml:mi>
<mml:mi mathvariant="normal">L</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="normal">M</mml:mi>
<mml:mi mathvariant="normal">I</mml:mi>
<mml:mi mathvariant="normal">N</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula> and <inline-formula id="inf65">
<mml:math id="m85">
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="normal">I</mml:mi>
<mml:mi mathvariant="normal">L</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="normal">M</mml:mi>
<mml:mi mathvariant="normal">A</mml:mi>
<mml:mi mathvariant="normal">X</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula> are the minimum and maximum dispatch power of the interruptible load in substation <italic>l</italic> within VPP <italic>k</italic>, respectively. <italic>C</italic>
<sub>8</sub> represents the constraint on the total dispatch power of all substations within VPP <italic>k</italic> during the <italic>t</italic>-th time slot.</p>
</sec>
</sec>
<sec id="s4">
<title>4 Two-layer iterative energy dispatch for a multi-energy flow VPP based on the improved ant colony algorithm and the delay-aware consensus algorithm</title>
<p>The principle of the proposed algorithm is illustrated in <xref ref-type="fig" rid="F2">Figure 2</xref>. The two-layer iterative energy dispatch strategy incorporates an improved ant colony algorithm in the upper layer and a delay-aware consensus algorithm in the lower layer. First, a combined pheromone update strategy and improved pheromone factor and heuristic factor were adopted to improve the ant colony algorithm for solving the sub-problem of multi-energy flow VPP energy dispatch. This involves adjusting the dispatch power of each VPP according to diverse service requirements. The calculated dispatch power was distributed to each substation for lower-layer optimization. Second, communication interaction was carried out among the substations, with the micro-increment rate of substation dispatch cost serving as the consensus variable for the consensus iteration. To solve the substation energy dispatch sub-problem, the PD controller was introduced into the traditional consensus algorithm. Information exchange occurs between the two layers: the upper layer issues dispatch power to the lower layer for substation scheduling, and the lower layer uploads information on the load dispatch capability.</p>
<fig id="F2" position="float">
<label>FIGURE 2</label>
<caption>
<p>The proposed algorithm principle.</p>
</caption>
<graphic xlink:href="fenrg-12-1361593-g002.tif"/>
</fig>
<sec id="s4-1">
<title>4.1 Upper-layer multi-energy flow VPP energy dispatch based on the improved ant colony algorithm</title>
<p>The ant colony algorithm falls within the category of heuristic global optimization algorithms, transforming the optimization problem into an ant path problem. However, in traditional ant colony algorithms, the range in variation between pheromone concentration and heuristic function is fixed. As the number of iterations increases, the pheromone concentration gradually increases, and the heuristic function value gradually decreases. This lack of adaptability with the increasing number of iterations results in slow convergence speed when solving the upper-layer multi-energy flow VPP energy dispatch sub-problem, leading to sub-optimal energy dispatch strategies. To address this limitation, this paper introduces real-time operational cost deviation considerations in the computation of pheromone and heuristic factors. This allows for adaptive changes in pheromone concentration and heuristic function based on real-time cost deviations. Such an adaptation accelerates the convergence speed, ensuring the real-time nature of energy dispatch. The specific implementation procedures are summarized in <xref ref-type="statement" rid="Algorithm_1">Algorithm 1</xref>.</p>
<p>
<statement content-type="algorithm" id="Algorithm_1">
<label>Algorithm 1</label>
<p>Upper-layer energy dispatch for a multi-energy flow VPP based on the improved ant colony algorithm.<list list-type="simple">
<list-item>
<p>1:&#x2003;<bold>Initialize</bold> maximum iteration <italic>h</italic>
<sub>max</sub>, pheromone factor &#x393;, and heuristic factor <italic>&#x3f1;</italic>.</p>
</list-item>
<list-item>
<p>2:&#x2003;<bold>For</bold> <italic>h</italic> &#x3d; 1 to <italic>h</italic>
<sub>max</sub> <bold>do</bold>
</p>
</list-item>
<list-item>
<p>3:&#x2003;Randomly initialize ant positions.</p>
</list-item>
<list-item>
<p>4:&#x2003;&#x2003;<bold>For</bold> <italic>a</italic> &#x3d; 1 to <italic>S</italic> <bold>do</bold>
</p>
</list-item>
<list-item>
<p>5:&#x2003;&#x2003;&#x2003;Determine the next optional transfer position according to the tabu list and calculate the state transfer probabilities based on <xref ref-type="disp-formula" rid="e21">(21).</xref>
</p>
</list-item>
<list-item>
<p>6:&#x2003;&#x2003;&#x2003;Choose the next position using the roulette wheel method based on the state transfer probabilities.</p>
</list-item>
<list-item>
<p>7:&#x2003;&#x2003;&#x2003;<bold>If</bold> the selected transfer position does not satisfy constraints <xref ref-type="disp-formula" rid="e13">(13)</xref> and <xref ref-type="disp-formula" rid="e15">(15)</xref>&#x223c;<xref ref-type="disp-formula" rid="e18">(18)</xref> <bold>do</bold>
</p>
</list-item>
<list-item>
<p>8:&#x2003;&#x2003;&#x2003;&#x2003;Marks the current position from the tabu list as not optional.</p>
</list-item>
<list-item>
<p>9:&#x2003;&#x2003;&#x2003;&#x2003;The <italic>a</italic>-th ant returns to the previous position and selects a new transfer position again.</p>
</list-item>
<list-item>
<p>10:&#x2003;&#x2003;&#x2003;<bold>Else</bold>
</p>
</list-item>
<list-item>
<p>11:&#x2003;&#x2003;&#x2003;&#x2003;Update the local pheromone concentration according to <xref ref-type="disp-formula" rid="e25">(25)</xref>.</p>
</list-item>
<list-item>
<p>12:&#x2003;&#x2003;&#x2003;<bold>End if</bold>
</p>
</list-item>
<list-item>
<p>13:&#x2003;&#x2003;<bold>End for</bold>
</p>
</list-item>
<list-item>
<p>14:&#x2003;&#x2003;Update the global pheromone concentration according to <xref ref-type="disp-formula" rid="e23">(23).</xref>
</p>
</list-item>
<list-item>
<p>15:&#x2003;<bold>End for</bold>
</p>
</list-item>
</list>
</p>
</statement>
</p>
<p>During the state updating process, it is essential to ensure that the control strategies associated with each position meet various constraint conditions for upper-level multi-energy real-time dispatch. Therefore, this paper initially compares the dispatch strategies associated with each position with various constraint conditions to construct a tabu list, thereby confirming that certain positions cannot be reached. This ensures that the optimization results obtained during the algorithm&#x2019;s iteration process satisfy all constraint conditions.</p>
<p>The state transfer probabilities are given by Eq. <xref ref-type="disp-formula" rid="e21">21</xref>.<disp-formula id="e21">
<mml:math id="m86">
<mml:msubsup>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>y</mml:mi>
<mml:mo>,</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:mrow>
<mml:mrow>
<mml:mi>a</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="normal">&#x3a6;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>y</mml:mi>
<mml:mo>,</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="normal">&#x393;</mml:mi>
</mml:mrow>
</mml:msup>
<mml:msup>
<mml:mrow>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b9;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>y</mml:mi>
<mml:mo>,</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3f1;</mml:mi>
</mml:mrow>
</mml:msup>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mo movablelimits="false" form="prefix">&#x2211;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi>y</mml:mi>
<mml:mo>,</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mo>&#x2208;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="normal">Y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>a</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub>
<mml:msup>
<mml:mrow>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="normal">&#x3a6;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>y</mml:mi>
<mml:mo>,</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="normal">&#x393;</mml:mi>
</mml:mrow>
</mml:msup>
<mml:msup>
<mml:mrow>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b9;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>y</mml:mi>
<mml:mo>,</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3f1;</mml:mi>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:mfrac>
<mml:mo>,</mml:mo>
</mml:math>
<label>(21)</label>
</disp-formula>where <inline-formula id="inf66">
<mml:math id="m87">
<mml:msubsup>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>y</mml:mi>
<mml:mo>,</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:mrow>
<mml:mrow>
<mml:mi>a</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula> is the probability of the <italic>a</italic>-th ant transferring from position <italic>y</italic> to position <italic>y</italic>&#x2032;. Y<sub>
<italic>a</italic>
</sub> is the tabu list of the <italic>a</italic>-th ant, which represents the set of the next allowed positions. &#x3a6;<sub>
<italic>y</italic>,<italic>y</italic>&#x2032;</sub>(<italic>t</italic>) is the pheromone concentration along the path from position <italic>y</italic> to position <italic>y</italic>&#x2032; during the <italic>t</italic>-th time slot. <italic>&#x3b9;</italic>
<sub>
<italic>y</italic>,<italic>y</italic>&#x2032;</sub>(<italic>t</italic>) is the heuristic function, which is the reciprocal of the Euclidean distance between position <italic>y</italic> and position <italic>y</italic>&#x2032;. &#x393; and <italic>&#x3f1;</italic> denote the pheromone factor and the heuristic factor, respectively.</p>
<p>To enhance the convergence speed of the algorithm, this paper proposes the following improvements to the pheromone factor and heuristic factor (Eq. <xref ref-type="disp-formula" rid="e22">22</xref>):<disp-formula id="e22">
<mml:math id="m88">
<mml:mfenced open="{" close="">
<mml:mrow>
<mml:mtable class="cases">
<mml:mtr>
<mml:mtd columnalign="left">
<mml:mi mathvariant="normal">&#x393;</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mi mathvariant="normal">&#x393;</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mi mathvariant="normal">&#x394;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>total</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2212;</mml:mo>
<mml:mi mathvariant="normal">&#x394;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>total</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
<mml:mspace width="1em"/>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="left">
<mml:mi>&#x3f1;</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mi>&#x3f1;</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mi mathvariant="normal">&#x394;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>total</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2212;</mml:mo>
<mml:mi mathvariant="normal">&#x394;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>total</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
<mml:mspace width="1em"/>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:math>
<label>(22)</label>
</disp-formula>where &#x394;<italic>C</italic>
<sub>total</sub>(<italic>t</italic>) represents the deviation of the real-time operational cost between the <italic>t</italic>-th time slot and the (<italic>t</italic> &#x2212; 1)-th time slot and &#x394;<italic>C</italic>
<sub>total</sub>(<italic>t</italic> &#x2212; 1) represents the deviation of the real-time operational cost between the (<italic>t</italic> &#x2212; 1)-th time slot and the(<italic>t</italic> &#x2212; 2)-th time slot.</p>
<p>To attain comprehensive performance optimization, this paper proposes a combined strategy involving both local and global adjustments for pheromone concentration. This strategy aims to avoid getting stuck in local optima while increasing the selection probability for better paths as much as possible, in order to accurately and quickly find the global optimum. In each iteration of the improved ant colony algorithm, every ant selects the next position based on a state transfer probability formula, thereby generating a complete path. With an increasing number of iterations, the concentration of pheromones on each path undergoes continuous changes. After all ants have completed their journeys within a single iteration cycle, the adjustment of the pheromone concentration &#x3a6;<sub>
<italic>y</italic>,<italic>y</italic>&#x2032;</sub>(<italic>t</italic>) is updated. The updating strategy for pheromone concentration in the ant colony algorithm is given by Eq. <xref ref-type="disp-formula" rid="e23">23</xref>.<disp-formula id="e23">
<mml:math id="m89">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="normal">&#x3a6;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>y</mml:mi>
<mml:mo>,</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:mi>&#x3c1;</mml:mi>
<mml:mo>&#xd7;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="normal">&#x3a6;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>y</mml:mi>
<mml:mo>,</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2b;</mml:mo>
<mml:mstyle displaystyle="true">
<mml:munderover accentunder="false" accent="true">
<mml:mrow>
<mml:mo>&#x2211;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi>S</mml:mi>
</mml:mrow>
</mml:munderover>
</mml:mstyle>
<mml:mi mathvariant="normal">&#x394;</mml:mi>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="normal">&#x3a6;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>y</mml:mi>
<mml:mo>,</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
</mml:math>
<label>(23)</label>
</disp-formula>where <italic>s</italic> represents the number of ants, and there are a total of <italic>S</italic> ants. <italic>&#x3c1;</italic> represents the improved pheromone concentration dilution coefficient. <inline-formula id="inf67">
<mml:math id="m90">
<mml:mi mathvariant="normal">&#x394;</mml:mi>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="normal">&#x3a6;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>y</mml:mi>
<mml:mo>,</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> represents the pheromone concentration adjustment coefficient.</p>
<p>In traditional ant colony algorithms, the pheromone concentration dilution coefficient is typically given and relies heavily on historical experience, without the ability to be updated based on real-time conditions. In this paper, the formula for improved pheromone concentration dilution coefficient is introduced by incorporating a negative exponential function that accounts for real-time deviations in operational costs. The improved pheromone concentration dilution coefficient is given by Eq. <xref ref-type="disp-formula" rid="e24">24</xref>.<disp-formula id="e24">
<mml:math id="m91">
<mml:mi>&#x3c1;</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>u</mml:mi>
<mml:mi>x</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mi>&#x3b3;</mml:mi>
<mml:mi mathvariant="normal">&#x394;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>total</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:msup>
<mml:mo>,</mml:mo>
<mml:mi>u</mml:mi>
<mml:mo>&#x3c;</mml:mo>
<mml:mn>0</mml:mn>
</mml:math>
<label>(24)</label>
</disp-formula>where <italic>x</italic> represents the number of iterations and <italic>u</italic> represents the influence coefficient of <italic>x</italic> on <italic>&#x3c1;</italic>. As the number of iterations <italic>x</italic> increases, the pheromone concentration dilution coefficient <italic>&#x3c1;</italic> decreases to retain a certain degree of prior experience, facilitating global search. The parameter <italic>&#x3b3;</italic> serves as the cost weight used to standardize magnitudes. A larger real-time operational cost deviation, indicating a greater distance from the optimal solution, results in a reduction of the pheromone concentration on that path, effectively increasing the pheromone concentration dilution coefficient. In this scenario, ants are more inclined to explore. Conversely, when the real-time operational cost deviation is smaller, indicating proximity to the optimal solution, the pheromone concentration on that path is strengthened by reducing the pheromone concentration dilution coefficient. In such cases, ants are more inclined to exploit the path.</p>
<p>By improving the adaptive selection function in the ant colony algorithm, the pheromone concentration adjustment coefficient is given by Eq. <xref ref-type="disp-formula" rid="e25">25</xref>.<disp-formula id="e25">
<mml:math id="m92">
<mml:mi mathvariant="normal">&#x394;</mml:mi>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="normal">&#x3a6;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>y</mml:mi>
<mml:mo>,</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mi>G</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>total</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfrac>
<mml:mo>,</mml:mo>
</mml:math>
<label>(25)</label>
</disp-formula>where <italic>G</italic> represents the concentration adjustment constant and <italic>C</italic>
<sub>total</sub>(<italic>t</italic>) represents the distribution power grid dispatch cost during <italic>t</italic>-th time slot.</p>
</sec>
<sec id="s4-2">
<title>4.2 Lower-layer substation energy dispatch based on the delay-aware consensus algorithm</title>
<p>In the context of processing self-generated information within a substation and receiving data from neighboring substations, traditional consensus algorithms disregard the influence of communication delay on consensus convergence. In scenarios requiring time-sensitive demand&#x2013;response services, the sluggish convergence rate of traditional algorithms proves inadequate for meeting service demands (<xref ref-type="bibr" rid="B42">Zhou et al., 2022</xref>). This paper proposes an enhancement by integrating a proportional&#x2013;derivative (PD) controller to address the issue of sluggish convergence attributable to communication delay. First, this improvement incorporates the communication delay factor into the algorithm, thereby aligning it more effectively with the requirements of delay-aware service scenarios. Second, the introduction of the PD controller enables the system to respond promptly to changes in substation information, thereby improving both convergence speed and system stability. The fundamental principle of this enhancement involves introducing a time-dependent feedback term into the PD controller to adjust dispatch signal updates for various resource power strategies within each substation. This facilitates the PD controller&#x2019;s swift and effective response to changes in substation information, mitigating the impact of communication delay on system convergence. The specific implementation procedures are outlined in <xref ref-type="statement" rid="Algorithm_2">Algorithm 2</xref>.</p>
<p>
<statement content-type="algorithm" id="Algorithm_2">
<label>Algorithm 2</label>
<p>Lower-layer power optimization for substations based on the delay-aware consensus algorithm.<list list-type="simple">
<list-item>
<p>1:&#x2003;<bold>Initialize</bold> <italic>P</italic>
<sub>
<italic>k</italic>,<italic>l</italic>
</sub>(<italic>t</italic>) in VPP <italic>k</italic>.</p>
</list-item>
<list-item>
<p>2:&#x2003;<bold>While</bold> <xref ref-type="disp-formula" rid="e30">(30)</xref> is not satisfied <bold>do</bold>
</p>
</list-item>
<list-item>
<p>3:&#x2003;&#x2003;Calculate <italic>&#x3bc;</italic>
<sub>
<italic>k</italic>,<italic>l</italic>
</sub>(<italic>t</italic>) according to <xref ref-type="disp-formula" rid="e26">(26)</xref>, <xref ref-type="disp-formula" rid="e27">(27)</xref>.</p>
</list-item>
<list-item>
<p>4:&#x2003;&#x2003;Update <italic>&#x3bc;</italic>
<sub>
<italic>k</italic>,<italic>l</italic>
</sub>(<italic>t</italic>) according to <xref ref-type="disp-formula" rid="e28">(28)</xref>.</p>
</list-item>
<list-item>
<p>5:&#x2003;&#x2003;Calculate <italic>P</italic>
<sub>
<italic>k</italic>,<italic>l</italic>
</sub>(<italic>t</italic>) according to <xref ref-type="disp-formula" rid="e31">(31)</xref>.</p>
</list-item>
<list-item>
<p>6:&#x2003;<bold>End while</bold>
</p>
</list-item>
</list>
</p>
</statement>
</p>
<p>In the algorithm, each substation only acquires the status information of its neighbors at the triggering moment and relies solely on its own status and the status of its neighbors at the triggering moment to update the cost increment rate. There is no need to use real-time status information from neighbors nor is there a need for any global information about the communication topology. The designed dispatch strategy effectively avoids continuous communication. Based on the objective of minimizing dispatch costs of each VPP, the delay-aware consensus algorithm is used to solve the lower-layer distributed substation energy dispatch sub-problem, which is defined in Eq. <xref ref-type="disp-formula" rid="e20">20</xref>. The substation&#x2019;s dispatch cost increment rate is defined as the derivative of the dispatch cost with respect to dispatch power over unit time, which is given by Eq. <xref ref-type="disp-formula" rid="e26">26</xref>.<disp-formula id="e26">
<mml:math id="m93">
<mml:msub>
<mml:mrow>
<mml:mi>&#x3bc;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mi>&#x2202;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x2202;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfrac>
<mml:mo>,</mml:mo>
</mml:math>
<label>(26)</label>
</disp-formula>where <italic>&#x3bc;</italic>
<sub>
<italic>k</italic>,<italic>l</italic>
</sub>(<italic>t</italic>) represents the cost increment rate for substation <italic>l</italic> within VPP <italic>k</italic> during the <italic>t</italic>-th time slot.</p>
<p>The cost increment rate for substation <italic>l</italic> is obtained from <xref ref-type="disp-formula" rid="e1">(1)</xref>&#x2013;<xref ref-type="disp-formula" rid="e4">(4)</xref>, <xref ref-type="disp-formula" rid="e6">(6)</xref>, and <xref ref-type="disp-formula" rid="e9">(9)</xref>, which is given by Eq. <xref ref-type="disp-formula" rid="e27">27</xref>.<disp-formula id="e27">
<mml:math id="m94">
<mml:mfenced open="{" close="">
<mml:mrow>
<mml:mtable class="cases">
<mml:mtr>
<mml:mtd columnalign="left">
<mml:msub>
<mml:mrow>
<mml:mi>&#x3bc;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>2</mml:mn>
<mml:msub>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mi>X</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mi>Y</mml:mi>
<mml:mo>,</mml:mo>
<mml:mspace width="1em"/>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="left">
<mml:mi>X</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>&#x3b1;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>DG</mml:mtext>
</mml:mrow>
</mml:msup>
<mml:mo>&#x2b;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>&#x3b7;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>STO</mml:mtext>
</mml:mrow>
</mml:msup>
<mml:mo>,</mml:mo>
<mml:mspace width="1em"/>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="left">
<mml:mi>Y</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>&#x3b2;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>DG</mml:mtext>
</mml:mrow>
</mml:msup>
<mml:mo>&#x2b;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>&#x3c9;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>IL</mml:mtext>
</mml:mrow>
</mml:msup>
<mml:mo>&#x2b;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>&#x3c9;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>gas</mml:mtext>
</mml:mrow>
</mml:msup>
<mml:mo>&#x2b;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>&#x3c9;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>heat</mml:mtext>
</mml:mrow>
</mml:msup>
<mml:mo>.</mml:mo>
<mml:mspace width="1em"/>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:math>
<label>(27)</label>
</disp-formula>
</p>
<p>To accelerate the convergence rate of the consensus algorithm and ensure standardized convergence rates across different substations, the design of the PD controller incorporates considerations for the inter-substation communication delay and the VPP consensus delay. A delay-dependent feedback term is introduced to adapt the cost increment rate update strategy for each substation. The consensus iteration formula post PD correction is given by Eq. <xref ref-type="disp-formula" rid="e28">28</xref>.<disp-formula id="e28">
<mml:math id="m95">
<mml:mfenced open="{" close="">
<mml:mrow>
<mml:mtable class="cases">
<mml:mtr>
<mml:mtd columnalign="left">
<mml:mtable class="aligned">
<mml:mtr>
<mml:mtd columnalign="right"/>
<mml:mtd columnalign="left">
<mml:msubsup>
<mml:mrow>
<mml:mi>&#x3bc;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>&#x3bc;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2b;</mml:mo>
<mml:mstyle displaystyle="true">
<mml:munderover accentunder="false" accent="true">
<mml:mrow>
<mml:mo>&#x2211;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>N</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:munderover>
</mml:mstyle>
<mml:msub>
<mml:mrow>
<mml:mi>a</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:mrow>
</mml:msub>
<mml:mfenced open="[" close="">
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>&#x3bc;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c4;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right"/>
<mml:mtd columnalign="left">
<mml:mfenced open="" close="]">
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>&#x3bc;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b7;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:mrow>
</mml:msub>
<mml:msubsup>
<mml:mrow>
<mml:mi>&#x3bc;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right"/>
<mml:mtd columnalign="left">
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b7;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mi>&#x3b2;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c4;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:mspace width="1em"/>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:math>
<label>(28)</label>
</disp-formula>where <italic>d</italic> is the number of consensus iterations. <inline-formula id="inf68">
<mml:math id="m96">
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c4;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> is the transmission time between substation <italic>l</italic> and substation <inline-formula id="inf69">
<mml:math id="m97">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula> within VPP <italic>k</italic>. <inline-formula id="inf70">
<mml:math id="m98">
<mml:msub>
<mml:mrow>
<mml:mi>a</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> represents the element in the adjacency matrix <italic>A</italic>
<sub>
<italic>k</italic>
</sub> indicating the connectivity between substation <italic>l</italic> and substation <inline-formula id="inf71">
<mml:math id="m99">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula> within VPP <italic>k</italic>. Specifically, <inline-formula id="inf72">
<mml:math id="m100">
<mml:msub>
<mml:mrow>
<mml:mi>a</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>1</mml:mn>
</mml:math>
</inline-formula> signifies that substation <italic>l</italic> is connected to substation <inline-formula id="inf73">
<mml:math id="m101">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula> within VPP <italic>k</italic>; otherwise, they are not connected. <inline-formula id="inf74">
<mml:math id="m102">
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b7;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> is the PD feedback strength parameter.</p>
<p>If the optimal allocation of dispatch power is achieved among the substations, meaning that the dispatch cost increment rates for all substations tend to be consistent, there exists Eq. <xref ref-type="disp-formula" rid="e29">29</xref>.<disp-formula id="e29">
<mml:math id="m103">
<mml:msub>
<mml:mrow>
<mml:mi>&#x3bc;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mn>1</mml:mn>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mo>&#x2026;</mml:mo>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3bc;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>.</mml:mo>
</mml:math>
<label>(29)</label>
</disp-formula>
</p>
<p>The termination criteria for the iteration are given by Eq. <xref ref-type="disp-formula" rid="e30">30</xref>.<disp-formula id="e30">
<mml:math id="m104">
<mml:mfenced open="{" close="">
<mml:mrow>
<mml:mtable class="cases">
<mml:mtr>
<mml:mtd columnalign="left">
<mml:mo stretchy="false">&#x7c;</mml:mo>
<mml:mi mathvariant="normal">&#x394;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo stretchy="false">&#x7c;</mml:mo>
<mml:mo>&#x3c;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c3;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:mspace width="1em"/>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="left">
<mml:mi mathvariant="normal">&#x394;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mstyle displaystyle="true">
<mml:mrow>
<mml:mo>&#x2211;</mml:mo>
</mml:mrow>
</mml:mstyle>
<mml:mrow>
<mml:mi>l</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>N</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">grid</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
<mml:mspace width="1em"/>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="left">
<mml:mo stretchy="false">&#x7c;</mml:mo>
<mml:mi mathvariant="normal">&#x394;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3bc;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo stretchy="false">&#x7c;</mml:mo>
<mml:mo>&#x3c;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="normal">&#x3a9;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:mspace width="1em"/>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="left">
<mml:mi mathvariant="normal">&#x394;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3bc;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>max</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mfenced open="{" close="}">
<mml:mrow>
<mml:mi>l</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>N</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3bc;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>min</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mfenced open="{" close="}">
<mml:mrow>
<mml:mi>l</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>N</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3bc;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
<mml:mspace width="1em"/>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:math>
<label>(30)</label>
</disp-formula>where &#x394;<italic>P</italic>
<sub>
<italic>k</italic>
</sub>(<italic>t</italic>) and &#x394;<italic>&#x3bc;</italic>
<sub>
<italic>k</italic>,<italic>l</italic>
</sub>(<italic>t</italic>) are used as the convergence criteria during the computation process of the delay-aware consensus algorithm, with <italic>&#x3c3;</italic>
<sub>
<italic>k</italic>
</sub> and &#x3a9;<sub>
<italic>k</italic>
</sub> representing convergence errors within VPP <italic>k</italic>.</p>
<p>In the proposed consensus algorithm, consideration is given to the communication delay between substations, realizing communication delay awareness. However, due to the introduction of communication delay, the convergence speed of the consensus algorithm is slowed down. Therefore, the algorithm introduces PD control. The PD feedback strength parameter <inline-formula id="inf75">
<mml:math id="m105">
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b7;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> can be adjusted according to specific system requirements for <italic>&#x3b2;</italic>, thereby achieving modulation of the system&#x2019;s sensitivity to delay. By modifying <italic>&#x3b2;</italic> to accommodate communication delays for each substation, it addresses the challenge of inconsistent convergence speeds among different substations due to varying communication delays, thereby expediting consensus convergence.</p>
</sec>
<sec id="s4-3">
<title>4.3 Algorithm implementation process</title>
<p>We use the delay-aware consensus algorithm to achieve energy dispatch of multi-energy flow VPPs. The initial values for iteration, i.e., the cost increment rate, are calculated by Eq. <xref ref-type="disp-formula" rid="e27">27</xref> and the initial power values for each resource are determined. As the algorithm continues to converge, the power values of each resource in the current time slot gradually approach the optimal value, achieving optimal real-time energy dispatching. <xref ref-type="fig" rid="F3">Figure 3</xref> shows the specific implementation process:</p>
<fig id="F3" position="float">
<label>FIGURE 3</label>
<caption>
<p>The implementation process of two-layer iterative energy dispatch for a multi-energy flow VPP based on the improved ant colony algorithm and the delay-aware consensus algorithm.</p>
</caption>
<graphic xlink:href="fenrg-12-1361593-g003.tif"/>
</fig>
<p>Upper-layer multi-energy-flow VPP energy dispatch based on the improved ant colony algorithm.</p>
<p>
<italic>Step 1</italic>: Initialize <italic>t</italic> &#x3d; 1. Initialize the iteration count in the ant colony algorithm and randomly assign ants to different dispatch strategies, including <italic>P</italic>
<sub>
<italic>k</italic>
</sub>(<italic>t</italic>). Set the maximum iteration count as <italic>h</italic>
<sub>max</sub>.</p>
<p>
<italic>Step 2</italic>: Calculate the transfer probabilities for all ants, determine the probabilities of selecting different dispatch strategies, and choose the next transfer using the roulette wheel method. Verify if the next transfer satisfies all constraints. If it does, proceed to <italic>Step 3</italic>; otherwise, mark this position in the tabu list, disallowing other ants from transferring to this position. The ant then returns to the previous position and selects a new next position.</p>
<p>
<italic>Step 3</italic>: After an ant completes its current search, use Eq. <xref ref-type="disp-formula" rid="e19">19</xref> as the objective function to calculate <italic>C</italic>
<sub>
<italic>total</italic>
</sub>(<italic>t</italic>) and update the local pheromone levels. Check if constraints (13) and (15&#x223c;18) are satisfied. If it is satisfied, continue the implementation process; otherwise, return to <italic>Step 2</italic>.</p>
<p>
<italic>Step 4</italic>: After all ants have completed their searches for this round, update the global pheromone levels. Check if constraints (13) and (15&#x223c;18) are satisfied. If it is satisfied, continue the implementation process; otherwise, return to <italic>Step 2</italic>.</p>
<p>
<italic>Step 5</italic>: If <italic>h</italic>&#x2a7d;<italic>h</italic>
<sub>max</sub>, set <italic>h</italic> &#x3d; <italic>h</italic> &#x2b; 1 and return to <italic>Step 1</italic>; otherwise, output the optimal result. The regional multi-energy-flow dispatch center allocates optimal dispatch power to each VPP.</p>
<p>
<italic>Step 6</italic>: The total dispatch power of each substation cluster is obtained from the VPP after global optimization calculation.</p>
<p>Lower-layer substation energy dispatch based on the delay-aware consensus.</p>
<p>
<italic>Step 7</italic>: Each VPP allocates the total dispatch power to the substations within its coverage area.</p>
<p>
<italic>Step 8</italic>: Initialize the cost increment rate <italic>&#x3bc;</italic>
<sub>
<italic>k</italic>,<italic>l</italic>
</sub>(<italic>t</italic>) based on Eqs <xref ref-type="disp-formula" rid="e26">(26)</xref> and <xref ref-type="disp-formula" rid="e27">(27)</xref>, initialize <italic>d</italic> &#x3d; 1, and set <inline-formula id="inf76">
<mml:math id="m106">
<mml:msubsup>
<mml:mrow>
<mml:mi>&#x3bc;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3bc;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>.</p>
<p>
<italic>Step 9</italic>: Update the consensus variables for each substation according to Eq. <xref ref-type="disp-formula" rid="e28">28</xref>, and calculate the power dispatch value for each substation in this state based on Eq. <xref ref-type="disp-formula" rid="e31">31</xref>, which can be given by<disp-formula id="e31">
<mml:math id="m107">
<mml:msub>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="{" close="">
<mml:mrow>
<mml:mtable class="array">
<mml:mtr>
<mml:mtd columnalign="left">
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>min</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo>,</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3bc;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2212;</mml:mo>
<mml:mi>Y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mi>X</mml:mi>
</mml:mrow>
</mml:mfrac>
<mml:mo>&#x2a7d;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>min</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="left">
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3bc;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2212;</mml:mo>
<mml:mi>Y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mi>X</mml:mi>
</mml:mrow>
</mml:mfrac>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>min</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo>&#x2a7d;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3bc;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2212;</mml:mo>
<mml:mi>Y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mi>X</mml:mi>
</mml:mrow>
</mml:mfrac>
<mml:mo>&#x2a7d;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>max</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="left">
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>max</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo>,</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3bc;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2212;</mml:mo>
<mml:mi>Y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mi>X</mml:mi>
</mml:mrow>
</mml:mfrac>
<mml:mo>&#x2a7e;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>max</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:mo>,</mml:mo>
</mml:mrow>
</mml:mfenced>
</mml:math>
<label>(31)</label>
</disp-formula>where <inline-formula id="inf77">
<mml:math id="m108">
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>max</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula> and <inline-formula id="inf78">
<mml:math id="m109">
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>min</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula> correspond to the upper and lower bounds of the output power of the corresponding resources within the substation, respectively.</p>
<p>
<italic>Step 10</italic>: Check if Eq. <xref ref-type="disp-formula" rid="e30">30</xref> and the constraints of optimization problem <bold>P2</bold> are satisfied. If they are not satisfied, continue to execute <italic>Step 11</italic>. If they are satisfied, output the power dispatch value for the substation, i.e., the dispatch power value of each internal resource, and continue to execute <italic>Step 12</italic>.</p>
<p>
<italic>Step 11</italic>: Based on the power obtained in <italic>Step 9,</italic> recalculate the consensus variable. Set <italic>d</italic> &#x3d; <italic>d</italic> &#x2b; 1, and return to <italic>Step 9</italic>.</p>
<p>
<italic>Step 12</italic>: If <italic>t</italic> &#x3e; <italic>T</italic>, the optimization process ends; otherwise, set <italic>t</italic> &#x3d; <italic>t</italic> &#x2b; 1 and return to <italic>Step 2</italic>.</p>
</sec>
<sec id="s4-4">
<title>4.4 Complexity and convergence analysis</title>
<sec id="s4-4-1">
<title>4.4.1 Complexity analysis</title>
<p>The computational complexity of the proposed algorithm is analyzed as follows. It consists of two parts, namely, the improved ant colony algorithm and the delay-aware consensus algorithm, which together make up the computational complexity.</p>
<p>The computational complexity of the improved ant colony algorithm consists of six parts. The complexity of calculating transfer probabilities is <italic>O</italic>(1). The complexity of assessing the constraint conditions during transfers is <italic>O</italic>(5). The complexity of transferring to the next step is <italic>O</italic>(<italic>v</italic>), where <italic>O</italic>(<italic>v</italic>) represents the number of required successful transfers in a single step. The complexity of updating local pheromone concentrations is <italic>O</italic>(1). The complexity of updating global pheromone concentrations is <italic>O</italic>(<italic>S</italic>). The complexity of the number of iteration calculations is <italic>O</italic>(<italic>h</italic>
<sub>max</sub>). Therefore, the total computation complexity of the improved ant colony algorithm is <italic>O</italic>(<italic>h</italic>
<sub>max</sub>
<italic>S</italic>(<italic>v</italic> &#x2b; 7)).</p>
<p>The computational complexity of the delay-aware consensus algorithm consists of four parts. The complexity of iteration termination judgment is <italic>O</italic>(&#x39b;), where <italic>O</italic>(&#x39b;) represents the number of iterations required to satisfy the constraint and <italic>O</italic>(&#x39b;) &#x3d; <italic>f</italic>(<italic>&#x3c3;</italic>, &#x3a9;). <italic>f</italic>(<italic>x</italic>) represents the fuzzy correlation function. &#x39b; is inversely proportional to <italic>&#x3c3;</italic>, so as to &#x3a9;. The complexity of calculating the cost increment rate is <italic>O</italic>(2). The complexity of updating the cost increment rate is <italic>O</italic>(1). The complexity of calculating the substation power is <italic>O</italic>(1). Therefore, the total computation complexity of the delay-aware consensus algorithm is <italic>O</italic>(4&#x39b;).</p>
<p>Totally, the computation complexity of the proposed algorithm is <italic>O</italic>(<italic>h</italic>
<sub>max</sub>
<italic>S</italic>(<italic>v</italic> &#x2b; 7) &#x2b; 4&#x39b;).</p>
</sec>
<sec id="s4-4-2">
<title>4.4.2 Convergence analysis</title>
<p>In the proposed delay-aware consensus algorithm, we introduce the PD controller to accelerate convergence. The convergence of this algorithm is related to the delay. When the delay is <inline-formula id="inf79">
<mml:math id="m110">
<mml:mi>&#x3c4;</mml:mi>
<mml:mo>&#x2a7e;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>&#x3c4;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>max</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">con</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula>, the algorithm cannot reach convergence. The detailed derivation of the convergence analysis and the introduction of <inline-formula id="inf80">
<mml:math id="m111">
<mml:msubsup>
<mml:mrow>
<mml:mi>&#x3c4;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>max</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">con</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula> can be found in <xref ref-type="bibr" rid="B2">Chen and Zhao (2018)</xref>.</p>
</sec>
</sec>
</sec>
<sec id="s5">
<title>5 Simulation result</title>
<p>To validate the effectiveness of the proposed algorithm, we use a simulation model based on a modified IEEE 33-node distribution grid system. <xref ref-type="fig" rid="F4">Figure 4</xref> illustrates the specific topological relations of each VPP. There are three VPPs in the model, each containing multiple substations. Each substation contains different quantities of distributed generators, energy storage, interruptible loads, gas turbines, and electric heating boilers.</p>
<fig id="F4" position="float">
<label>FIGURE 4</label>
<caption>
<p>VPP topological relationships based on the modified IEEE 33-node distribution grid system.</p>
</caption>
<graphic xlink:href="fenrg-12-1361593-g004.tif"/>
</fig>
<p>We compare the proposed algorithm with three baselines, with baseline 1 using the DDPG algorithm in the upper layer and the traditional consensus algorithm in the lower layer, baseline 2 using the traditional ant colony algorithm in the upper layer and the traditional consensus algorithm in the lower layer, and baseline 3 using the particle swarm optimization algorithm in the upper layer and the traditional consensus algorithm in the lower layer. Compared with similar deep learning algorithms, the DDPG algorithm has higher training efficiency (<xref ref-type="bibr" rid="B38">Zhang et al., 2023c</xref>). Although the desired dispatching value is almost the same as the theoretical optimal value, the real-time requirement of power dispatching is ignored. <xref ref-type="table" rid="T2">Table 2</xref> shows the simulation parameters (<xref ref-type="bibr" rid="B22">Pasetti et al., 2018</xref>; <xref ref-type="bibr" rid="B7">Gough et al., 2022</xref>; <xref ref-type="bibr" rid="B17">Liang and Ma, 2022</xref>). The power constraints of various resources in each substation are shown in <xref ref-type="table" rid="T3">Tables 3</xref>&#x2013;<xref ref-type="table" rid="T5">5</xref>. We simulate a 24-hour operation, optimizing dispatch every hour, with a consensus iteration period of 0.1 s.</p>
<table-wrap id="T2" position="float">
<label>TABLE 2</label>
<caption>
<p>Simulation parameters.</p>
</caption>
<table>
<thead valign="top">
<tr>
<th align="center">Parameter</th>
<th align="center">Value</th>
<th align="center">Parameter</th>
<th align="center">Value</th>
</tr>
</thead>
<tbody valign="top">
<tr>
<td align="center">
<inline-formula id="inf81">
<mml:math id="m112">
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c4;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>
</td>
<td align="center">
<italic>U</italic>(10, 20)ms<xref ref-type="table-fn" rid="Tfn1">
<sup>a</sup>
</xref>
</td>
<td align="center">
<italic>&#x3b1;</italic>
<sup>
<italic>DG</italic>
</sup>
</td>
<td align="center">0.5$/kW<sup>2</sup>
</td>
</tr>
<tr>
<td align="center">&#x393;</td>
<td align="center">1</td>
<td align="center">
<italic>&#x3b2;</italic>
<sup>DG</sup>
</td>
<td align="center">0.2$/kW</td>
</tr>
<tr>
<td align="center">
<italic>&#x3f1;</italic>
</td>
<td align="center">7</td>
<td align="center">
<italic>&#x3b3;</italic>
<sup>DG</sup>
</td>
<td align="center">0.1$</td>
</tr>
<tr>
<td align="center">
<italic>&#x3b3;</italic>
</td>
<td align="center">0.01</td>
<td align="center">
<italic>&#x3c9;</italic>
<sup>IL</sup>
</td>
<td align="center">0.8$/kW</td>
</tr>
<tr>
<td align="center">
<italic>&#x3b2;</italic>
<sub>
<italic>PD</italic>
</sub>
</td>
<td align="center">1</td>
<td align="center">
<italic>&#x3c9;</italic>
<sup>gas</sup>
</td>
<td align="center">0.6$/kW</td>
</tr>
<tr>
<td align="center">
<italic>S</italic>
</td>
<td align="center">50</td>
<td align="center">
<italic>&#x3b8;</italic>
<sub>gas</sub>
</td>
<td align="center">3.5 &#xd7; 10<sup>4</sup> kJ/m<sup>3</sup>
</td>
</tr>
<tr>
<td align="center">
<italic>&#x3c3;</italic>
</td>
<td align="center">0.1 kW</td>
<td align="center">
<italic>&#x3b3;</italic>
<sub>loss</sub>
</td>
<td align="center">0.8$/kW</td>
</tr>
<tr>
<td align="center">&#x3a9;</td>
<td align="center">0.002$/kW</td>
<td align="center">
<italic>&#x3c9;</italic>
<sup>heat</sup>
</td>
<td align="center">0.4$/kW</td>
</tr>
<tr>
<td align="center">
<italic>&#x3b7;</italic>
<sup>STO</sup>
</td>
<td align="center">0.5$/kW<sup>2</sup>
</td>
<td align="center">
<italic>&#x3b6;</italic>
<sub>grid</sub>
</td>
<td align="center">0.35</td>
</tr>
<tr>
<td align="center">
<italic>h</italic>
<sub>max</sub>
</td>
<td align="center">30</td>
<td align="left"/>
<td align="left"/>
</tr>
</tbody>
</table>
<table-wrap-foot>
<fn id="Tfn1">
<label>
<sup>a</sup>
</label>
<p>
<italic>U</italic>(10, 20) ms indicates that the value of the simulation parameter <inline-formula id="inf82">
<mml:math id="m113">
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c4;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> obeys a uniform distribution from 20 ms to 30 ms.</p>
</fn>
</table-wrap-foot>
</table-wrap>
<table-wrap id="T3" position="float">
<label>TABLE 3</label>
<caption>
<p>Constraints of dispatch power in VPP 1.</p>
</caption>
<table>
<thead valign="top">
<tr>
<th align="center">Substation number</th>
<th align="center">
<inline-formula id="inf83">
<mml:math id="m114">
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>DG</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>(kW)</th>
<th align="center">
<inline-formula id="inf84">
<mml:math id="m115">
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>STO</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>(kW)</th>
<th align="center">
<inline-formula id="inf85">
<mml:math id="m116">
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>IL</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>(kW)</th>
<th align="center">
<inline-formula id="inf86">
<mml:math id="m117">
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>gas</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>(kW)</th>
<th align="center">
<inline-formula id="inf87">
<mml:math id="m118">
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>heat</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>(kW)</th>
</tr>
</thead>
<tbody valign="top">
<tr>
<td align="center">1</td>
<td align="center">[100, 300]</td>
<td align="center">[50, 120]</td>
<td align="center">&#x2014;</td>
<td align="center">&#x2014;</td>
<td align="center">[30, 150]</td>
</tr>
<tr>
<td align="center">2</td>
<td align="center">[90, 270]</td>
<td align="center">[20, 90]</td>
<td align="center">&#x2014;</td>
<td align="center">[300, 1200]</td>
<td align="center">[60, 210]</td>
</tr>
<tr>
<td align="center">3</td>
<td align="center">&#x2014;</td>
<td align="center">&#x2014;</td>
<td align="center">[40, 90]</td>
<td align="center">&#x2014;</td>
<td align="center">[40, 190]</td>
</tr>
</tbody>
</table>
</table-wrap>
<table-wrap id="T4" position="float">
<label>TABLE 4</label>
<caption>
<p>Constraints of dispatch power in VPP 2.</p>
</caption>
<table>
<thead valign="top">
<tr>
<th align="center">Substation number</th>
<th align="center">
<inline-formula id="inf88">
<mml:math id="m119">
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>DG</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>(kW)</th>
<th align="center">
<inline-formula id="inf89">
<mml:math id="m120">
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>STO</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>(kW)</th>
<th align="center">
<inline-formula id="inf90">
<mml:math id="m121">
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>IL</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>(kW)</th>
<th align="center">
<inline-formula id="inf91">
<mml:math id="m122">
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>gas</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>(kW)</th>
<th align="center">
<inline-formula id="inf92">
<mml:math id="m123">
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>heat</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>(kW)</th>
</tr>
</thead>
<tbody valign="top">
<tr>
<td align="center">4</td>
<td align="center">[150, 320]</td>
<td align="center">[55, 110]</td>
<td align="center">&#x2014;</td>
<td align="center">&#x2014;</td>
<td align="center">&#x2014;</td>
</tr>
<tr>
<td align="center">5</td>
<td align="center">[210, 350]</td>
<td align="center">[70, 115]</td>
<td align="center">[20, 85]</td>
<td align="center">&#x2014;</td>
<td align="center">&#x2014;</td>
</tr>
</tbody>
</table>
</table-wrap>
<table-wrap id="T5" position="float">
<label>TABLE 5</label>
<caption>
<p>Constraints of dispatch power in VPP 3.</p>
</caption>
<table>
<thead valign="top">
<tr>
<th align="center">Substation number</th>
<th align="center">
<inline-formula id="inf93">
<mml:math id="m124">
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>DG</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>(kW)</th>
<th align="center">
<inline-formula id="inf94">
<mml:math id="m125">
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>STO</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>(kW)</th>
<th align="center">
<inline-formula id="inf95">
<mml:math id="m126">
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>IL</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>(kW)</th>
<th align="center">
<inline-formula id="inf96">
<mml:math id="m127">
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>gas</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>(kW)</th>
<th align="center">
<inline-formula id="inf97">
<mml:math id="m128">
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>heat</mml:mtext>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>(kW)</th>
</tr>
</thead>
<tbody valign="top">
<tr>
<td align="center">6</td>
<td align="center">[100, 280]</td>
<td align="center">[40, 100]</td>
<td align="center">[40, 90]</td>
<td align="center">&#x2014;</td>
<td align="center">&#x2014;</td>
</tr>
<tr>
<td align="center">7</td>
<td align="center">[110, 300]</td>
<td align="center">[20, 130]</td>
<td align="center">&#x2014;</td>
<td align="center">[100, 800]</td>
<td align="center">&#x2014;</td>
</tr>
<tr>
<td align="center">8</td>
<td align="center">[80, 290]</td>
<td align="center">&#x2014;</td>
<td align="center">[40, 80]</td>
<td align="center">&#x2014;</td>
<td align="center">[50, 200]</td>
</tr>
</tbody>
</table>
</table-wrap>
<p>In <xref ref-type="fig" rid="F5">Figure 5A</xref>, the distribution power grid loss versus time is depicted for the mentioned algorithms. The figure reveals that the proposed algorithm consistently produces lower losses in comparison to the other three algorithms. Taking 4:00 as an example, compared to baseline 1, baseline 2, and baseline 3, the proposed algorithm reduces grid loss by 11.27%, 8.03%, and 3.96%, respectively. The proposed algorithm can adjust the convergence speed according to the delay, thereby reducing the dispatch delay and leading to a decrease in distribution power grid loss.</p>
<fig id="F5" position="float">
<label>FIGURE 5</label>
<caption>
<p>Performance of the total dispatch cost and distribution power grid loss. <bold>(A)</bold> Distribution power grid losses. <bold>(B)</bold> Total dispatch costs.</p>
</caption>
<graphic xlink:href="fenrg-12-1361593-g005.tif"/>
</fig>
<p>
<xref ref-type="fig" rid="F5">Figure 5B</xref> shows the optimized dispatch process of the mentioned algorithms at 16:00. At the beginning of the mentioned algorithms, the total cost is rapidly decreasing. In the end, baseline 1 fluctuates within a certain range and can only achieve dynamic convergence. Baseline 2, baseline 3, and the proposed algorithm reach convergence after 88, 74, and 60 iterations, and their total dispatch costs are $12,000, $9,700, and $7,000, respectively. Compared with baseline 1, baseline 2, and baseline 3, the proposed algorithm reduces the total dispatch cost by 94.38%, 71.42%, and 38.57%, respectively. The proposed algorithm exhibits the fastest convergence speed due to the introduction of changing factors in the ant colony algorithm and PD correction in the consensus algorithm. The change factor and PD correction in the proposed algorithm significantly accelerate the convergence speed.</p>
<p>
<xref ref-type="fig" rid="F6">Figure 6A</xref> shows the dispatch power of each substation within VPP I at 16:00. At the beginning of the iteration, the power of substation 1 and substation 3 increases rapidly and the power of substation 2 decreases rapidly, and finally the resources of each substation converge to a stable value. After the PD correction, the convergence of the substations is significantly accelerated. Taking substation 2 as an example, convergence was reached through 38 iterations in 3.8 s before PD correction, and convergence was reached through 23 iterations in 2.3 s after PD correction.</p>
<fig id="F6" position="float">
<label>FIGURE 6</label>
<caption>
<p>VPP internal optimization dispatch results. <bold>(A)</bold> Power distribution of each substation within VPP 1. <bold>(B)</bold> Cost increment rate of each substation in VPP 1.</p>
</caption>
<graphic xlink:href="fenrg-12-1361593-g006.tif"/>
</fig>
<p>
<xref ref-type="fig" rid="F6">Figure 6B</xref> shows the cost increment rate versus time for each substation within VPP 1 at 16:00. The initial value of the cost increment rate is different for each substation, with a higher initial value for substation 2 and lower initial values for substations 1 and 3. At the beginning of the iteration, the cost increment rate of each substation area changes rapidly. The traditional consensus algorithm reaches convergence for all substations after 55 iterations in 5.5 s. The convergence speed is accelerated after the PD correction, reaching convergence for 45 iterations in 4.5 s with a result of 21.42.</p>
<p>
<xref ref-type="fig" rid="F7">Figure 7A</xref> shows the simulation time to reach convergence versus <italic>&#x3b2;</italic> when <italic>&#x3c3;</italic> &#x3d; 0.1 kW and &#x3a9; &#x3d; 0.02$/kW. In the beginning, increasing <italic>&#x3b2;</italic> will strengthen PD correction. The algorithm converges with larger fluctuations during each iteration, leading to a decrease in convergence time. The minimum time required for the simulation to reach convergence is 276 ms. Continuously increasing the <italic>&#x3b2;</italic> will lead to over-correction of PD, making it difficult for the algorithm to converge due to continuous fluctuations, resulting in an extension of convergence time. <italic>&#x3b2;</italic> has the shortest convergence time at a value of 1.18.</p>
<fig id="F7" position="float">
<label>FIGURE 7</label>
<caption>
<p>Simulation time to reach convergence versus various algorithm parameters. <bold>(A)</bold> Simulation time to reach convergence versus <italic>&#x3b2;</italic> when <italic>&#x3c3;</italic> &#x3d; 0.1 kW and &#x3a9; &#x3d; 0.02k$/kW. <bold>(B)</bold> Simulation time to reach convergence versus <italic>&#x3c3;</italic> and &#x3a9; when <italic>&#x3b2;</italic> &#x3d; 1. <bold>(C)</bold> The dispatch cost of the lower layer under different communication delays.</p>
</caption>
<graphic xlink:href="fenrg-12-1361593-g007.tif"/>
</fig>
<p>
<xref ref-type="fig" rid="F7">Figure 7B</xref> shows the simulation time to reach convergence versus <italic>&#x3c3;</italic> and &#x3a9; when <italic>&#x3b2;</italic> &#x3d; 1. To achieve convergence, two constraints need to be satisfied simultaneously, so a small value for either constraint will result in an extremely long convergence time. The convergence time will only decrease when both <italic>&#x3c3;</italic> and &#x3a9; are large. When both parameter settings are large, the simulation time required to achieve convergence is 276 ms.</p>
<p>
<xref ref-type="fig" rid="F7">Figure 7C</xref> shows the dispatch cost of the proposed algorithm and traditional consensus algorithm at the lower layer under different communication delays. When the communication delay is low, the dispatch cost difference between the two algorithms is not significant. When the delay is large, the proposed algorithm has lower dispatch costs compared to the traditional consensus algorithm. This is because the proposed algorithm introduces PD correction, which can adjust the convergence speed according to the communication delay. In the case of high communication delay, the convergence speed of the proposed algorithm is faster, so the dispatch cost is lower.</p>
<p>
<xref ref-type="fig" rid="F8">Figure 8</xref> shows the dispatch power of each substation in different VPPs. It can be observed that the power fluctuation of each substation is not large in the time range of 0&#x2013;24 h. In VPP1, the power of substations 1, 2, and 3 fluctuates around 130, 280, and 190, respectively. In VPP2, the power of substations 4 and 5 fluctuates around 80 and 170, respectively. In VPP3, the power of substations 6, 7, and 8 fluctuates around 230, 170, and 230, respectively.</p>
<fig id="F8" position="float">
<label>FIGURE 8</label>
<caption>
<p>Dispatch power in each VPP under the proposed algorithm. <bold>(A)</bold> VPP 1. <bold>(B)</bold> VPP 2. <bold>(C)</bold> VPP 3.</p>
</caption>
<graphic xlink:href="fenrg-12-1361593-g008.tif"/>
</fig>
</sec>
<sec sec-type="conclusion" id="s6">
<title>6 Conclusion</title>
<p>This paper proposes a novel two-layer iterative energy dispatch strategy for multi-energy flow VPPs in distribution power grids. The upper layer sub-problem of multi-energy flow VPP energy dispatch is tackled using an improved ant colony algorithm, while the lower layer substation energy dispatch is addressed through a delay-aware consensus algorithm. To enhance the convergence speed of the delay-aware consensus algorithm and enable real-time energy dispatch of the multi-energy flow VPP, a PD control mechanism is integrated. Simulation results demonstrate that the proposed algorithm significantly reduces the total dispatch cost by 61.11% and 45.45% compared to the two baseline algorithms. Moreover, the convergence speed is increased by 18.18% compared to the traditional consensus algorithm after incorporating the PD control mechanism. In the future, we plan to explore energy cooperative dispatch between electric vehicles and multi-energy flow VPPs.</p>
</sec>
</body>
<back>
<sec sec-type="data-availability" id="s7">
<title>Data availability statement</title>
<p>The original contributions presented in the study are included in the article/Supplementary Material; further inquiries can be directed to the corresponding author.</p>
</sec>
<sec id="s8">
<title>Author contributions</title>
<p>WL: conceptualization, data curation, investigation, software, and writing&#x2013;original draft. ZZ: conceptualization, data curation, and writing&#x2013;original draft. YZ: conceptualization, data curation, methodology, and writing&#x2013;original draft. GJ: conceptualization, data curation, formal analysis, and writing&#x2013;original draft. WW: data curation, formal analysis, validation, and writing&#x2013;original draft. YR: investigation, methodology, and writing&#x2013;original draft. YW: conceptualization, formal analysis, methodology, and writing&#x2013;review and editing. YL: conceptualization, data curation, and writing&#x2013;original draft. CL: formal analysis, methodology, and writing&#x2013;review and editing.</p>
</sec>
<sec sec-type="funding-information" id="s9">
<title>Funding</title>
<p>The author(s) declare that financial support was received for the research, authorship, and/or publication of this article.</p>
</sec>
<sec sec-type="COI-statement" id="s10">
<title>Conflict of interest</title>
<p>The authors declare that this study received funding from Science and Technology Project of State Grid Shandong Electric Power Company (Key Technical Research and Application of Real-time Data Sharing Capability Construction for Large-scale Power Gird Nodes, 520608230007). The funder had the following involvement in the study: study design, collection, analysis, interpretation of data, the writing of this article, and the decision to submit it for publication.</p>
</sec>
<sec sec-type="disclaimer" id="s11">
<title>Publisher&#x2019;s note</title>
<p>All claims expressed in this article are solely those of the authors and do not necessarily represent those of their affiliated organizations, or those of the publisher, the editors, and the reviewers. Any product that may be evaluated in this article, or claim that may be made by its manufacturer, is not guaranteed or endorsed by the publisher.</p>
</sec>
<ref-list>
<title>References</title>
<ref id="B1">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Abdolrasol</surname>
<given-names>M. G. M.</given-names>
</name>
<name>
<surname>Hannan</surname>
<given-names>M. A.</given-names>
</name>
<name>
<surname>Mohamed</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Amiruldin</surname>
<given-names>U. A. U.</given-names>
</name>
<name>
<surname>Abidin</surname>
<given-names>I. B. Z.</given-names>
</name>
<name>
<surname>Uddin</surname>
<given-names>M. N.</given-names>
</name>
</person-group> (<year>2018</year>). <article-title>An optimal scheduling controller for virtual power plant and microgrid integration using the binary backtracking search algorithm</article-title>. <source>IEEE Trans. Industry Appl.</source> <volume>54</volume>, <fpage>2834</fpage>&#x2013;<lpage>2844</lpage>. <pub-id pub-id-type="doi">10.1109/TIA.2018.2797121</pub-id>
</citation>
</ref>
<ref id="B2">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Chen</surname>
<given-names>G.</given-names>
</name>
<name>
<surname>Zhao</surname>
<given-names>Z.</given-names>
</name>
</person-group> (<year>2018</year>). <article-title>Delay effects on consensus-based distributed economic dispatch algorithm in microgrid</article-title>. <source>IEEE Trans. Power Syst.</source> <volume>33</volume>, <fpage>602</fpage>&#x2013;<lpage>612</lpage>. <pub-id pub-id-type="doi">10.1109/TPWRS.2017.2702179</pub-id>
</citation>
</ref>
<ref id="B3">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Chen</surname>
<given-names>Y.</given-names>
</name>
<name>
<surname>Zhao</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Ma</surname>
<given-names>J.</given-names>
</name>
</person-group> (<year>2020</year>). <article-title>Fast decoupled multi-energy flow calculation for integrated energy system</article-title>. <source>J. Mod. Power Syst. Clean Energy</source> <volume>8</volume>, <fpage>951</fpage>&#x2013;<lpage>960</lpage>. <pub-id pub-id-type="doi">10.35833/MPCE.2018.000598</pub-id>
</citation>
</ref>
<ref id="B4">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Cui</surname>
<given-names>Y.</given-names>
</name>
<name>
<surname>Chen</surname>
<given-names>Z.</given-names>
</name>
<name>
<surname>Yan</surname>
<given-names>G.</given-names>
</name>
<name>
<surname>Tang</surname>
<given-names>Y.</given-names>
</name>
</person-group> (<year>2016</year>). <article-title>Coordinated wind power accommodating dispatch model based on electric boiler and CHP with thermal energy storage</article-title>. <source>Proc. CSEE</source> <volume>36</volume>, <fpage>4072</fpage>&#x2013;<lpage>4081</lpage>. <pub-id pub-id-type="doi">10.13334/j.0258-8013.pcsee.152406</pub-id>
</citation>
</ref>
<ref id="B5">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Dai</surname>
<given-names>W.</given-names>
</name>
<name>
<surname>Yu</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Li</surname>
<given-names>W.</given-names>
</name>
</person-group> (<year>2018</year>). &#x201c;<article-title>Equivalent optimal power flow method considering natural gas network constraints</article-title>,&#x201d; in <conf-name>2018 5th International Conference on Electric Power and Energy Conversion Systems (EPECS)</conf-name>, <conf-loc>Kitakyushu, Japan</conf-loc>, <conf-date>23-25 April 2018</conf-date>, <fpage>1</fpage>&#x2013;<lpage>5</lpage>. <pub-id pub-id-type="doi">10.1109/EPECS.2018.8443539</pub-id>
</citation>
</ref>
<ref id="B6">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Gao</surname>
<given-names>H.</given-names>
</name>
<name>
<surname>Zhang</surname>
<given-names>F.</given-names>
</name>
<name>
<surname>Xiang</surname>
<given-names>Y.</given-names>
</name>
<name>
<surname>Ye</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Liu</surname>
<given-names>X.</given-names>
</name>
<name>
<surname>Liu</surname>
<given-names>J.</given-names>
</name>
</person-group> (<year>2023</year>). <article-title>Bounded rationality based multi-VPP trading in local energy markets: a dynamic game approach with different trading targets</article-title>. <source>CSEE J. Power Energy Syst.</source> <volume>9</volume>, <fpage>221</fpage>&#x2013;<lpage>234</lpage>. <pub-id pub-id-type="doi">10.17775/CSEEJPES.2021.01600</pub-id>
</citation>
</ref>
<ref id="B7">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Gough</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Santos</surname>
<given-names>S. F.</given-names>
</name>
<name>
<surname>Lotfi</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Javadi</surname>
<given-names>M. S.</given-names>
</name>
<name>
<surname>Os&#xf3;rio</surname>
<given-names>G. J.</given-names>
</name>
<name>
<surname>Ashraf</surname>
<given-names>P.</given-names>
</name>
<etal/>
</person-group> (<year>2022</year>). <article-title>Operation of a technical virtual power plant considering diverse distributed energy resources</article-title>. <source>IEEE Trans. Ind. Appl.</source> <volume>58</volume>, <fpage>2547</fpage>&#x2013;<lpage>2558</lpage>. <pub-id pub-id-type="doi">10.1109/TIA.2022.3143479</pub-id>
</citation>
</ref>
<ref id="B8">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Guili</surname>
<given-names>Y.</given-names>
</name>
<name>
<surname>Linbo</surname>
<given-names>W.</given-names>
</name>
<name>
<surname>Baoyuan</surname>
<given-names>W.</given-names>
</name>
</person-group> (<year>2017</year>). <article-title>Optimal dispatch of heat-power load and economy benefit analysis based on decoupling of heat and power of virtual power plant</article-title>. <source>Proc. CSEE</source> <volume>37</volume>, <fpage>4974</fpage>&#x2013;<lpage>4985</lpage>. <pub-id pub-id-type="doi">10.13334/j.0258-8013.pcsee.161300</pub-id>
</citation>
</ref>
<ref id="B9">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Hannan</surname>
<given-names>M. A.</given-names>
</name>
<name>
<surname>Abdolrasol</surname>
<given-names>M. G. M.</given-names>
</name>
<name>
<surname>Mohamed</surname>
<given-names>R.</given-names>
</name>
<name>
<surname>Al-Shetwi</surname>
<given-names>A. Q.</given-names>
</name>
<name>
<surname>Ker</surname>
<given-names>P. J.</given-names>
</name>
<name>
<surname>Begum</surname>
<given-names>R. A.</given-names>
</name>
<etal/>
</person-group> (<year>2021</year>). <article-title>Ann-based binary backtracking search algorithm for vpp optimal scheduling and cost-effective evaluation</article-title>. <source>IEEE Trans. Industry Appl.</source> <volume>57</volume>, <fpage>5603</fpage>&#x2013;<lpage>5613</lpage>. <pub-id pub-id-type="doi">10.1109/TIA.2021.3100321</pub-id>
</citation>
</ref>
<ref id="B10">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Hou</surname>
<given-names>Y. H.</given-names>
</name>
<name>
<surname>Wu</surname>
<given-names>Y. W.</given-names>
</name>
<name>
<surname>Lu</surname>
<given-names>L. J.</given-names>
</name>
<name>
<surname>Xiong</surname>
<given-names>X. Y.</given-names>
</name>
</person-group> (<year>2002</year>). <article-title>Generalized ant colony optimization for economic dispatch of power systems</article-title>. <source>Proc. Int. Conf. Power Syst. Technol.</source> <volume>1</volume>, <fpage>225</fpage>&#x2013;<lpage>229</lpage>. <pub-id pub-id-type="doi">10.1109/ICPST.2002.1053539</pub-id>
</citation>
</ref>
<ref id="B11">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Huang</surname>
<given-names>H.</given-names>
</name>
<name>
<surname>Li</surname>
<given-names>Z.</given-names>
</name>
<name>
<surname>Sampath</surname>
<given-names>LPMI</given-names>
</name>
<name>
<surname>Yang</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Nguyen</surname>
<given-names>H. D.</given-names>
</name>
<name>
<surname>Gooi</surname>
<given-names>H. B.</given-names>
</name>
<etal/>
</person-group> (<year>2023</year>). <article-title>Blockchain-enabled carbon and energy trading for network-constrained coal mines with uncertainties</article-title>. <source>IEEE Trans. Sustain. Energy</source> <volume>14</volume>, <fpage>1634</fpage>&#x2013;<lpage>1647</lpage>. <pub-id pub-id-type="doi">10.1109/TSTE.2023.3240203</pub-id>
</citation>
</ref>
<ref id="B12">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Jing</surname>
<given-names>W.</given-names>
</name>
<name>
<surname>Xuefeng</surname>
<given-names>B.</given-names>
</name>
<name>
<surname>Bin</surname>
<given-names>L.</given-names>
</name>
</person-group> (<year>2022</year>). &#x201c;<article-title>Research on consensus algorithm of hierarchical partition blockchain for virtual power plant transactions</article-title>,&#x201d; in <conf-name>2022 2nd International Conference on Advance Computing and Innovative Technologies in Engineering (ICACITE)</conf-name>, <conf-loc>Greater Noida</conf-loc>, <conf-date>28-29 April 2022</conf-date>, <fpage>1613</fpage>&#x2013;<lpage>1617</lpage>. <pub-id pub-id-type="doi">10.1109/ICACITE53722.2022.9823468</pub-id>
</citation>
</ref>
<ref id="B13">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Li</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Liu</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Chen</surname>
<given-names>X.</given-names>
</name>
<name>
<surname>Chen</surname>
<given-names>Z.</given-names>
</name>
</person-group> (<year>2019</year>). <article-title>Capacity allocation of multi-energy complementary system including renewable energy</article-title>. <source>Power Syst. Technol.</source> <volume>43</volume>, <fpage>4387</fpage>&#x2013;<lpage>4398</lpage>. <pub-id pub-id-type="doi">10.13335/j.1000-3673.pst.2019.0151</pub-id>
</citation>
</ref>
<ref id="B14">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Li</surname>
<given-names>Z.</given-names>
</name>
<name>
<surname>Wu</surname>
<given-names>L.</given-names>
</name>
<name>
<surname>Xu</surname>
<given-names>Y.</given-names>
</name>
<name>
<surname>Moazeni</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Tang</surname>
<given-names>Z.</given-names>
</name>
</person-group> (<year>2022</year>). <article-title>Multi-stage real-time operation of a multi-energy microgrid with electrical and thermal energy storage assets: a data-driven MPC-ADP approach</article-title>. <source>IEEE Trans. Smart Grid</source> <volume>13</volume>, <fpage>213</fpage>&#x2013;<lpage>226</lpage>. <pub-id pub-id-type="doi">10.1109/TSG.2021.3119972</pub-id>
</citation>
</ref>
<ref id="B15">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Li</surname>
<given-names>Z.</given-names>
</name>
<name>
<surname>Xu</surname>
<given-names>Y.</given-names>
</name>
<name>
<surname>Wang</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Xiao</surname>
<given-names>G.</given-names>
</name>
</person-group> (<year>2023</year>). <article-title>Restoration of multi energy distribution systems with joint district network recon figuration by a distributed stochastic programming approach</article-title>. <source>IEEE Trans. Smart Grid</source>, <fpage>1</fpage>. <pub-id pub-id-type="doi">10.1109/TSG.2023.3317780</pub-id>
</citation>
</ref>
<ref id="B16">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Liang</surname>
<given-names>B.</given-names>
</name>
<name>
<surname>Yang</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Hou</surname>
<given-names>B.</given-names>
</name>
<name>
<surname>He</surname>
<given-names>Z.</given-names>
</name>
</person-group> (<year>2021</year>). <article-title>A pricing method for distribution system aggregators considering differentiated load types and price uncertainty</article-title>. <source>IEEE Trans. Power Syst.</source> <volume>36</volume>, <fpage>1973</fpage>&#x2013;<lpage>1983</lpage>. <pub-id pub-id-type="doi">10.1109/TPWRS.2020.3032593</pub-id>
</citation>
</ref>
<ref id="B17">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Liang</surname>
<given-names>H.</given-names>
</name>
<name>
<surname>Ma</surname>
<given-names>J.</given-names>
</name>
</person-group> (<year>2022</year>). <article-title>Data-driven resource planning for virtual power plant integrating demand response customer selection and storage</article-title>. <source>IEEE Trans. Ind. Inf.</source> <volume>18</volume>, <fpage>1833</fpage>&#x2013;<lpage>1844</lpage>. <pub-id pub-id-type="doi">10.1109/TII.2021.3068402</pub-id>
</citation>
</ref>
<ref id="B18">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Liao</surname>
<given-names>H.</given-names>
</name>
<name>
<surname>Zhou</surname>
<given-names>Z.</given-names>
</name>
<name>
<surname>Jia</surname>
<given-names>Z.</given-names>
</name>
<name>
<surname>Shu</surname>
<given-names>Y.</given-names>
</name>
<name>
<surname>Tariq</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Rodriguez</surname>
<given-names>J.</given-names>
</name>
<etal/>
</person-group> (<year>2023</year>). <article-title>Ultra-low AoI digital twin-assisted resource allocation for multi-mode power IoT in distribution grid energy management</article-title>. <source>IEEE J. Sel. Areas Commun.</source> <volume>41</volume>, <fpage>3122</fpage>&#x2013;<lpage>3132</lpage>. <pub-id pub-id-type="doi">10.1109/JSAC.2023.3310101</pub-id>
</citation>
</ref>
<ref id="B19">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Mohy-ud din</surname>
<given-names>G.</given-names>
</name>
<name>
<surname>Muttaqi</surname>
<given-names>K. M.</given-names>
</name>
<name>
<surname>Sutanto</surname>
<given-names>D.</given-names>
</name>
</person-group> (<year>2020</year>). &#x201c;<article-title>A bi-level energy management model for energy transactions from vpp based integrated energy systems under system uncertainties</article-title>,&#x201d; in <conf-name>2020 IEEE International Conference on Power Electronics, Drives and Energy Systems (PEDES)</conf-name>, <conf-loc>Jaipur, India</conf-loc>, <conf-date>16-19 December 2020</conf-date>, <fpage>1</fpage>&#x2013;<lpage>6</lpage>. <pub-id pub-id-type="doi">10.1109/PEDES49360.2020.9379387</pub-id>
</citation>
</ref>
<ref id="B20">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Naina</surname>
<given-names>P. M.</given-names>
</name>
<name>
<surname>Swarup</surname>
<given-names>K. S.</given-names>
</name>
</person-group> (<year>2022</year>). <article-title>Double-consensus-based distributed energy management in a virtual power plant</article-title>. <source>IEEE Trans. Industry Appl.</source> <volume>58</volume>, <fpage>7047</fpage>&#x2013;<lpage>7056</lpage>. <pub-id pub-id-type="doi">10.1109/TIA.2022.3201060</pub-id>
</citation>
</ref>
<ref id="B21">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Niknam</surname>
<given-names>T.</given-names>
</name>
<name>
<surname>Ranjbar</surname>
<given-names>A. M.</given-names>
</name>
<name>
<surname>Shirani</surname>
<given-names>A. R.</given-names>
</name>
<name>
<surname>Ostadi</surname>
<given-names>A.</given-names>
</name>
</person-group> (<year>2005</year>). &#x201c;<article-title>A new approach based on ant colony algorithm to distribution management system with regard to dispersed generation</article-title>,&#x201d; in <conf-name>CIRED 2005 - 18th International Conference and Exhibition on Electricity Distribution</conf-name>, <conf-loc>Turin</conf-loc>, <conf-date>6-9 June 2005</conf-date>, <fpage>1</fpage>&#x2013;<lpage>5</lpage>. <pub-id pub-id-type="doi">10.1049/cp:20051242</pub-id>
</citation>
</ref>
<ref id="B22">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Pasetti</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Rinaldi</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Manerba</surname>
<given-names>D.</given-names>
</name>
</person-group> (<year>2018</year>). <article-title>A virtual power plant architecture for the demand-side management of smart prosumers</article-title>. <source>Appl. Sci.</source> <volume>8</volume>, <fpage>432</fpage>&#x2013;<lpage>452</lpage>. <pub-id pub-id-type="doi">10.3390/app8030432</pub-id>
</citation>
</ref>
<ref id="B23">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Sarantakos</surname>
<given-names>I.</given-names>
</name>
<name>
<surname>Bowkett</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Allahham</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Sayfutdinov</surname>
<given-names>T.</given-names>
</name>
<name>
<surname>Murphy</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Pazouki</surname>
<given-names>K.</given-names>
</name>
<etal/>
</person-group> (<year>2023</year>). <article-title>Digitalization for port decarbonization: decarbonization of key energy processes at the port of tyne</article-title>. <source>IEEE Electrification Mag.</source> <volume>11</volume>, <fpage>61</fpage>&#x2013;<lpage>72</lpage>. <pub-id pub-id-type="doi">10.1109/MELE.2022.3233114</pub-id>
</citation>
</ref>
<ref id="B24">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Trivedi</surname>
<given-names>I. N.</given-names>
</name>
<name>
<surname>Thesiya</surname>
<given-names>D. K.</given-names>
</name>
<name>
<surname>Esmat</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Jangir</surname>
<given-names>P.</given-names>
</name>
</person-group> (<year>2015</year>). &#x201c;<article-title>A multiple environment dispatch problem solution using ant colony optimization for micro-grids</article-title>,&#x201d; in <conf-name>2015 International Conference on Power and Advanced Control Engineering (ICPACE)</conf-name>, <conf-loc>Bengaluru, India</conf-loc>, <conf-date>12-14 August 2015</conf-date>, <fpage>109</fpage>&#x2013;<lpage>115</lpage>. <pub-id pub-id-type="doi">10.1109/ICPACE.2015.7274927</pub-id>
</citation>
</ref>
<ref id="B25">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Vasirani</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Kota</surname>
<given-names>R.</given-names>
</name>
<name>
<surname>Cavalcante</surname>
<given-names>R. L.</given-names>
</name>
<name>
<surname>Ossowski</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Jennings</surname>
<given-names>N. R.</given-names>
</name>
</person-group> (<year>2013</year>). <article-title>An agent-based approach to virtual power plants of wind power generators and electric vehicles</article-title>. <source>IEEE Trans. Smart Grid</source> <volume>4</volume>, <fpage>1314</fpage>&#x2013;<lpage>1322</lpage>. <pub-id pub-id-type="doi">10.1109/TSG.2013.2259270</pub-id>
</citation>
</ref>
<ref id="B26">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Wang</surname>
<given-names>C.</given-names>
</name>
<name>
<surname>Gao</surname>
<given-names>N.</given-names>
</name>
<name>
<surname>Wang</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Jia</surname>
<given-names>N.</given-names>
</name>
<name>
<surname>Bi</surname>
<given-names>T.</given-names>
</name>
<name>
<surname>Martin</surname>
<given-names>K.</given-names>
</name>
</person-group> (<year>2020</year>). <article-title>Robust operation of a water-energy nexus: a multi-energy perspective</article-title>. <source>IEEE Trans. Sustain. Energy</source> <volume>11</volume>, <fpage>2698</fpage>&#x2013;<lpage>2712</lpage>. <pub-id pub-id-type="doi">10.1109/TSTE.2020.2971259</pub-id>
</citation>
</ref>
<ref id="B27">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Wang</surname>
<given-names>Y.</given-names>
</name>
<name>
<surname>Guo</surname>
<given-names>Q.</given-names>
</name>
<name>
<surname>Yu</surname>
<given-names>Y.</given-names>
</name>
</person-group> (<year>2023</year>). <article-title>Cooperative pricing for vehicle-traffic-power nexus to support city decarbonization: a federated deep reinforcement learning framework</article-title>. <source>IEEE Trans. Industrial Cyber-Physical Syst.</source> <volume>1</volume>, <fpage>182</fpage>&#x2013;<lpage>191</lpage>. <pub-id pub-id-type="doi">10.1109/TICPS.2023.3317012</pub-id>
</citation>
</ref>
<ref id="B28">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Wu</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Lin</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Li</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Liu</surname>
<given-names>F.</given-names>
</name>
<name>
<surname>Song</surname>
<given-names>Y.</given-names>
</name>
<name>
<surname>Xu</surname>
<given-names>Y.</given-names>
</name>
<etal/>
</person-group> (<year>2023</year>). <article-title>Multi-timescale trading strategy for renewable power to ammonia virtual power plant in the electricity, hydrogen, and ammonia markets</article-title>. <source>IEEE Trans. Energy Mark. Policy Regul.</source> <volume>1</volume>, <fpage>322</fpage>&#x2013;<lpage>335</lpage>. <pub-id pub-id-type="doi">10.1109/TEMPR.2023.3287857</pub-id>
</citation>
</ref>
<ref id="B29">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Xin</surname>
<given-names>H.</given-names>
</name>
<name>
<surname>Gan</surname>
<given-names>D.</given-names>
</name>
<name>
<surname>Li</surname>
<given-names>N.</given-names>
</name>
<name>
<surname>Li</surname>
<given-names>H.</given-names>
</name>
<name>
<surname>Dai</surname>
<given-names>C.</given-names>
</name>
</person-group> (<year>2013</year>). <article-title>Virtual power plant-based distributed control strategy for multiple distributed generators</article-title>. <source>IET Control Theory &#x26; Appl.</source> <volume>7</volume>, <fpage>90</fpage>&#x2013;<lpage>98</lpage>. <pub-id pub-id-type="doi">10.1049/iet-cta.2012.0141</pub-id>
</citation>
</ref>
<ref id="B30">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Xu</surname>
<given-names>Y.</given-names>
</name>
<name>
<surname>Cheng</surname>
<given-names>Z.</given-names>
</name>
<name>
<surname>Hu</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Dai</surname>
<given-names>Y.</given-names>
</name>
<name>
<surname>Bi</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Shen</surname>
<given-names>Y.</given-names>
</name>
<etal/>
</person-group> (<year>2019</year>). <source>Distributed coordination control of multiple VPPs in an active distribution network</source>. <publisher-name>IEEE</publisher-name>, <fpage>5429</fpage>&#x2013;<lpage>5432</lpage>. <pub-id pub-id-type="doi">10.1109/CAC48633.2019.8996259</pub-id>
</citation>
</ref>
<ref id="B31">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Yan</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Li</surname>
<given-names>T.</given-names>
</name>
<name>
<surname>Huang</surname>
<given-names>D.</given-names>
</name>
<name>
<surname>Zhang</surname>
<given-names>C.</given-names>
</name>
<name>
<surname>Hao</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Zhou</surname>
<given-names>D.</given-names>
</name>
</person-group> (<year>2020</year>). &#x201c;<article-title>Dynamic modeling and simulation of the large-scale regional integrated electricity and natural gas system</article-title>,&#x201d; in <conf-name>2020 4th International Conference on Smart Grid and Smart Cities (ICSGSC)</conf-name>, <conf-loc>Osaka, Japan</conf-loc>, <conf-date>August 18-21, 2020</conf-date>, <fpage>6</fpage>&#x2013;<lpage>13</lpage>. <pub-id pub-id-type="doi">10.1109/ICSGSC50906.2020.9248547</pub-id>
</citation>
</ref>
<ref id="B32">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Yang</surname>
<given-names>H.</given-names>
</name>
<name>
<surname>Yi</surname>
<given-names>D.</given-names>
</name>
<name>
<surname>Zhao</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Dong</surname>
<given-names>Z.</given-names>
</name>
</person-group> (<year>2013</year>). <article-title>Distributed optimal dispatch of virtual power plant via limited communication</article-title>. <source>IEEE Trans. Power Syst.</source> <volume>28</volume>, <fpage>3511</fpage>&#x2013;<lpage>3512</lpage>. <pub-id pub-id-type="doi">10.1109/TPWRS.2013.2242702</pub-id>
</citation>
</ref>
<ref id="B33">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Yang</surname>
<given-names>Y.</given-names>
</name>
<name>
<surname>Li</surname>
<given-names>Z.</given-names>
</name>
<name>
<surname>Mandapaka</surname>
<given-names>P. V.</given-names>
</name>
<name>
<surname>Lo</surname>
<given-names>E. Y.</given-names>
</name>
</person-group> (<year>2023</year>). <article-title>Risk-averse restoration of coupled power and water systems with small pumped-hydro storage and stochastic rooftop renewables</article-title>. <source>Appl. Energy</source> <volume>339</volume>, <fpage>120953</fpage>. <pub-id pub-id-type="doi">10.1016/j.apenergy.2023.120953</pub-id>
</citation>
</ref>
<ref id="B34">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Yu</surname>
<given-names>Q.</given-names>
</name>
<name>
<surname>Cai</surname>
<given-names>Y.</given-names>
</name>
<name>
<surname>Qi</surname>
<given-names>L.</given-names>
</name>
<name>
<surname>Ai</surname>
<given-names>Q.</given-names>
</name>
<name>
<surname>Wang</surname>
<given-names>D.</given-names>
</name>
</person-group> (<year>2022</year>). &#x201c;<article-title>Improved hybrid consensus mechanism based on virtual power plant dispatching</article-title>,&#x201d; in <conf-name>2022 IEEE 6th Conference on Energy Internet and Energy System Integration (EI2)</conf-name>, <conf-loc>Chengdu, China</conf-loc>, <conf-date>October 28th to 30th 2022</conf-date>, <fpage>2176</fpage>&#x2013;<lpage>2181</lpage>. <pub-id pub-id-type="doi">10.1109/EI256261.2022.10116511</pub-id>
</citation>
</ref>
<ref id="B35">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Zhang</surname>
<given-names>C.</given-names>
</name>
<name>
<surname>Xu</surname>
<given-names>Y.</given-names>
</name>
<name>
<surname>Li</surname>
<given-names>Z.</given-names>
</name>
<name>
<surname>Dong</surname>
<given-names>Z. Y.</given-names>
</name>
</person-group> (<year>2019</year>). <article-title>Robustly coordinated operation of a multi-energy microgrid with flexible electric and thermal loads</article-title>. <source>IEEE Trans. Smart Grid</source> <volume>10</volume>, <fpage>2765</fpage>&#x2013;<lpage>2775</lpage>. <pub-id pub-id-type="doi">10.1109/TSG.2018.2810247</pub-id>
</citation>
</ref>
<ref id="B36">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Zhang</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Gu</surname>
<given-names>W.</given-names>
</name>
<name>
<surname>Wang</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Zhang</surname>
<given-names>X. P.</given-names>
</name>
<name>
<surname>Meng</surname>
<given-names>X.</given-names>
</name>
<name>
<surname>Lu</surname>
<given-names>S.</given-names>
</name>
<etal/>
</person-group> (<year>2023a</year>). <article-title>Steady-state security region of integrated energy system considering thermal dynamics</article-title>. <source>IEEE Trans. Power Syst.</source> <volume>39</volume>, <fpage>4138</fpage>&#x2013;<lpage>4153</lpage>. <pub-id pub-id-type="doi">10.1109/TPWRS.2023.3296080</pub-id>
</citation>
</ref>
<ref id="B37">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Zhang</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Liu</surname>
<given-names>W.</given-names>
</name>
<name>
<surname>Zhang</surname>
<given-names>Y.</given-names>
</name>
<name>
<surname>Wu</surname>
<given-names>H.</given-names>
</name>
<name>
<surname>Wan</surname>
<given-names>H.</given-names>
</name>
</person-group> (<year>2023b</year>). <article-title>Reliability assessment of regional integrated energy system considering with multiple thermal inertia characteristics</article-title>. <source>Trans. CHINA Electrotech. Soc.</source> <volume>38</volume>, <fpage>3289</fpage>&#x2013;<lpage>3305</lpage>. <pub-id pub-id-type="doi">10.19595/j.cnki.1000-6753.tces.220367</pub-id>
</citation>
</ref>
<ref id="B38">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Zhang</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Ye</surname>
<given-names>F.</given-names>
</name>
<name>
<surname>Zhou</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Xiao</surname>
<given-names>Q.</given-names>
</name>
<name>
<surname>Zhang</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Wang</surname>
<given-names>H.</given-names>
</name>
<etal/>
</person-group> (<year>2023c</year>). &#x201c;<article-title>Efficient virtual power plant dispatch model for distributed energy resources using deep reinforcement learning</article-title>,&#x201d; in <conf-name>2023 IEEE 13th International Conference on CYBER Technology in Automation, Control, and Intelligent Systems (CYBER)</conf-name>, <conf-loc>Qinhuangdao, China</conf-loc>, <conf-date>July 11-14, 2023</conf-date>, <fpage>510</fpage>&#x2013;<lpage>514</lpage>. <pub-id pub-id-type="doi">10.1109/CYBER59472.2023.10256633</pub-id>
</citation>
</ref>
<ref id="B39">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Zhong</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Li</surname>
<given-names>Y.</given-names>
</name>
<name>
<surname>Cao</surname>
<given-names>Y.</given-names>
</name>
<name>
<surname>Tan</surname>
<given-names>Y.</given-names>
</name>
<name>
<surname>Peng</surname>
<given-names>Y.</given-names>
</name>
<name>
<surname>Zhou</surname>
<given-names>Y.</given-names>
</name>
<etal/>
</person-group> (<year>2023a</year>). <article-title>Robust coordinated optimization with adaptive uncertainty set for a multi-energy microgrid</article-title>. <source>IEEE Trans. Sustain. Energy</source> <volume>14</volume>, <fpage>111</fpage>&#x2013;<lpage>124</lpage>. <pub-id pub-id-type="doi">10.1109/TSTE.2022.3203299</pub-id>
</citation>
</ref>
<ref id="B40">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Zhong</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Li</surname>
<given-names>Y.</given-names>
</name>
<name>
<surname>Wu</surname>
<given-names>Y.</given-names>
</name>
<name>
<surname>Cao</surname>
<given-names>Y.</given-names>
</name>
<name>
<surname>Li</surname>
<given-names>Z.</given-names>
</name>
<name>
<surname>Peng</surname>
<given-names>Y.</given-names>
</name>
<etal/>
</person-group> (<year>2023b</year>). <article-title>Optimal operation of energy hub: an integrated model combined distributionally robust optimization method with stackelberg game</article-title>. <source>IEEE Trans. Sustain. Energy</source> <volume>14</volume>, <fpage>1835</fpage>&#x2013;<lpage>1848</lpage>. <pub-id pub-id-type="doi">10.1109/TSTE.2023.3252519</pub-id>
</citation>
</ref>
<ref id="B41">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Zhou</surname>
<given-names>Z.</given-names>
</name>
<name>
<surname>Gong</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>He</surname>
<given-names>Y.</given-names>
</name>
<name>
<surname>Zhang</surname>
<given-names>Y.</given-names>
</name>
</person-group> (<year>2017</year>). <article-title>Software defined machine-to-machine communication for smart energy management</article-title>. <source>IEEE Commun. Mag.</source> <volume>55</volume>, <fpage>52</fpage>&#x2013;<lpage>60</lpage>. <pub-id pub-id-type="doi">10.1109/MCOM.2017.1700169</pub-id>
</citation>
</ref>
<ref id="B42">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Zhou</surname>
<given-names>Z.</given-names>
</name>
<name>
<surname>Jia</surname>
<given-names>Z.</given-names>
</name>
<name>
<surname>Liao</surname>
<given-names>H.</given-names>
</name>
<name>
<surname>Lu</surname>
<given-names>W.</given-names>
</name>
<name>
<surname>Mumtaz</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Guizani</surname>
<given-names>M.</given-names>
</name>
<etal/>
</person-group> (<year>2022</year>). <article-title>Secure and latency-aware digital twin assisted resource scheduling for 5G edge computing-empowered distribution grids</article-title>. <source>IEEE Trans. Industrial Inf.</source> <volume>18</volume>, <fpage>4933</fpage>&#x2013;<lpage>4943</lpage>. <pub-id pub-id-type="doi">10.1109/TII.2021.3137349</pub-id>
</citation>
</ref>
</ref-list>
</back>
</article>