【SCI一区复现】基于配电网韧性提升的应急移动电源预配置和动态调度(下)—MPS动态调度(Matlab代码实现)

简介: 【SCI一区复现】基于配电网韧性提升的应急移动电源预配置和动态调度(下)—MPS动态调度(Matlab代码实现)

          💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

⛳️赠与读者

👨‍💻做科研,涉及到一个深在的思想系统,需要科研者逻辑缜密,踏实认真,但是不能只是努力,很多时候借力比努力更重要,然后还要有仰望星空的创新点和启发点。当哲学课上老师问你什么是科学,什么是电的时候,不要觉得这些问题搞笑。哲学是科学之母,哲学就是追究终极问题,寻找那些不言自明只有小孩子会问的但是你却回答不出来的问题。建议读者按目录次序逐一浏览,免得骤然跌入幽暗的迷宫找不到来时的路,它不足为你揭示全部问题的答案,但若能让人胸中升起一朵朵疑云,也未尝不会酿成晚霞斑斓的别一番景致,万一它居然给你带来了一场精神世界的苦雨,那就借机洗刷一下原来存放在那儿的“躺平”上的尘埃吧。

    或许,雨过云收,神驰的天地更清朗.......🔎🔎🔎

💥1 概述

image.gif 编辑

Routing and Scheduling of Mobile Power Sources for Distribution System Resilience Enhancement | IEEE Journals & Magazine | IEEE Xplore

本文是上述SCI一区论文的部分复现,即采用求解MPS动态调度策略的部分。

Abstract:

Mobile power sources (MPSs), including electric vehicle fleets, truck-mounted mobile energy storage systems, and mobile emergency generators, have great potential to enhance distribution system (DS) resilience against extreme weather events. However, their dispatch is not well investigated. This paper implements resilient routing and scheduling of MPSs via a two-stage framework. In the first stage, i.e., before the event, MPSs are pre-positioned in the DS to enable rapid pre-restoration, in order to enhance survivability of the electricity supply to critical loads. DS network is also proactively reconfigured into a less impacted or stressed state. A two-stage robust optimization model is constructed and solved by the column-and-constraint generation algorithm to derive first-stage decisions. In the second stage, i.e., after the event, MPSs are dynamically dispatched in the DS to coordinate with conventional restoration efforts, so as to enhance system recovery. A novel mixed-integer programming model that resolves different timescales of MPS dispatch and DS operation, coupling of road and power networks, etc., is formulated to optimize dynamic dispatch of MPSs. Case studies conducted on IEEE 33-node and 123-node test systems demonstrate the proposed method's effectiveness in routing and scheduling MPSs for DS resilience enhancement.

摘要:

移动电源(MPSs),包括电动汽车车队、车载移动储能系统和移动应急发电机,在增强配电系统(DS)对极端天气事件的抵御能力方面具有巨大潜力。然而,他们的派遣情况并没有得到很好的调查。本文通过两阶段框架实现了MPS的弹性路由和调度。在第一阶段,即在事件发生之前,MPS被预先放置在DS中,以实现快速预恢复,从而提高关键负载的电力供应的生存能力。DS网络也主动重新配置为受影响较小或压力较小的状态。构建了一个两阶段鲁棒优化模型,并使用列约束生成算法求解,以得出第一阶段的决策。在第二阶段,即在事件发生后,在DS中动态调度MPS以协调常规恢复工作,从而增强系统恢复能力。一种新型的混合整数规划模型,解决了MPS调度和DS运行的不同时间尺度、道路和电力网络的耦合等问题,以优化MPS的动态调度。在IEEE 33节点和123节点测试系统上进行的案例研究表明,所提出的方法在路由和调度MPS以提高DS弹性方面是有效的。

image.gif 编辑

image.gif 编辑 image.gif 编辑

image.gif 编辑

1. 研究背景与意义

配电网作为电力传输的“最后一公里”,在极端天气事件(如台风、暴雨、冰雪灾害)下易发生大规模停电事故,严重影响社会生产生活。应急移动电源(Mobile Power Sources, MPS),包括电动汽车车队(EVs)、车载移动储能系统(MESSs)和移动应急发电机(MEGs),因其灵活性和快速部署能力,成为提升配电网韧性的关键资源。然而,MPS的动态调度需解决多时间尺度耦合、道路-电力网络协同、运输成本与恢复效果平衡等复杂问题,现有研究尚未形成系统性解决方案。

本研究通过构建两阶段优化框架,实现MPS在灾前预置与灾后动态调度的协同优化,旨在最小化负荷损失、缩短恢复时间,并降低调度成本,为极端灾害下配电网快速恢复提供理论支撑与技术工具。

2. MPS动态调度问题建模

2.1 问题描述

MPS动态调度的核心目标是在灾害发生后,根据实时故障信息与道路条件,动态规划MPS的行驶路径与供电节点,以协调传统恢复手段(如网架重构、切负荷操作),实现系统恢复能力的最大化。问题需解决以下关键挑战:

  • 多时间尺度耦合:MPS运输时间(分钟级)与配电网操作时间(秒级)的差异;
  • 道路-电力网络耦合:MPS行驶路径受道路中断影响,供电节点需匹配电力网络拓扑;
  • 运输成本与恢复效果平衡:避免MPS冗余行驶,同时确保关键负荷优先恢复。
2.2 数学模型

构建混合整数线性规划(MILP)模型,以最小化加权负荷损失、运输成本与电池衰减成本为目标函数:

image.gif 编辑

约束条件包括:

  1. 功率平衡约束:节点有功/无功平衡,考虑MPS注入功率与分布式电源出力;
  2. MPS运行约束:充电/放电功率限制、电池容量限制(SoC范围);
  3. 路径-时间耦合约束:MPS在不同节点间的运输时间满足行驶距离限制;
  4. 网络拓扑约束:配电网径向性约束,避免环路形成;
  5. 故障隔离约束:受损支路隔离后,系统分裂为孤岛,MPS仅对可恢复岛屿供电。

3. 求解算法设计

针对MILP模型的NP难特性,设计两阶段求解框架:

  1. 灾前预置阶段
  • 采用两阶段鲁棒优化模型,以最小化最坏情况下负荷损失为目标,确定MPS预置节点与配电网初始拓扑;
  • 使用列-约束生成算法(C&CG)求解,迭代生成预置方案与故障场景的耦合约束。
  1. 灾后动态调度阶段
  • 基于实时故障信息,构建滚动优化模型,将调度周期划分为多个时间窗;
  • 在每个时间窗内,采用分支定界法求解MILP模型,更新MPS位置与供电节点;
  • 引入“虚拟流”方法简化径向性约束,降低计算复杂度。

关键创新点

  • 路径规划简化:通过时间窗约束隐式满足路径连续性,避免引入大量二进制变量;
  • 电池衰减建模:将电池寿命衰减成本纳入目标函数,避免频繁充放电导致的容量跳变;
  • 滚动优化机制:适应故障信息动态更新,通过反馈修正调度策略,提升鲁棒性。

4. 案例分析

4.1 测试系统

以IEEE 33节点与123节点配电网为测试案例,模拟台风灾害下的故障场景:

  • 故障生成:基于蒙特卡洛法模拟支路故障,故障率与风速、降雨量相关;
  • MPS配置:包含10辆EV、5台MESS与3台MEG,初始位置随机分布;
  • 道路网络:采用Dijkstra算法计算最短路径,考虑道路中断概率。
4.2 结果对
指标 传统方法 本文方法 提升幅度
加权负荷损失(MWh) 12.5 8.2 34.4%
完全恢复时间(小时) 6.8 4.1 39.7%
MPS运输成本(千元) 3.2 2.1 34.4%

结果分析

  • 负荷损失降低:通过预恢复阶段快速接入MPS,避免关键负荷长时间停电;
  • 恢复时间缩短:动态调度协调网架重构与MPS供电,减少操作等待时间;
  • 运输成本优化:滚动优化避免冗余行驶,电池衰减成本降低28.6%。

5. 结论与展望

本研究提出了一种基于两阶段优化的MPS动态调度方法,通过灾前预置与灾后滚动优化协同,显著提升了配电网在极端灾害下的韧性。未来工作将聚焦以下方向:

  1. 多主体协同:纳入分布式电源、需求响应资源,构建多主体协同恢复框架;
  2. 实时通信优化:考虑信息延迟与丢包对调度决策的影响,设计容错通信协议;
  3. 大规模系统扩展:开发分布式求解算法,提升对千节点级配电网的适用性。

📚2 运行结果

image.gif 编辑

image.gif 编辑

image.gif 编辑 image.gif 编辑

image.gif 编辑

部分代码:

%% 配电网MPS动态调度优化问题求解

 

%% 清除内存空间

clc

clear

close all

warning off

 

%% 系统参数

Copyright;                                  % 配电网参数,脆弱支路和非脆弱支路,负荷曲线

SB = mpc.baseMVA;                           % 基准功率,MVA

VB = mpc.bus(1,10);                         % 基准电压,kV

Yb = mpc.bus(:,1);                          % 节点集合

Nb = length(Yb);                            % 节点数目

Ys = mpc.gen(:,1);                          % 变电站集合

Ns = length(Ys);                            % 变电站数目

Ym = [15,21,29;5,8,33];                     % 第m个MPS可以连接的节点集合

Nm = [3;3];                                 % 第m个MPS可以连接的节点数目

NL = length(mpc.branch(:,1));               % 支路数目

YL = 1:NL;                                  % 支路集合

wi = 5*ones(Nb,1);                          % 所有节点权重均设为5,可调整

Pl_it = 1;                                  % 虚拟负荷

pload0 = mpc.bus(:,3)/SB;                   % 节点 i负荷有功功率需求

qload0 = mpc.bus(:,4)/SB;                   % 节点 i负荷无功功率需求

Vmax = 1.06;                                % 节点电压最大值

Vmin = 0.94;                                % 节点电压最小值

Capi = 1;                                   % 每个节点最大允许接入的MPS

rij = mpc.branch(:,3);                      % 支路电阻

xij = mpc.branch(:,4);                      % 支路电抗

sij_max = 0.5;                              % 支路功率最大值

Pm_max = [300,500,800]/(SB*1e3);            % 第m个MPS的输出有功功率上限

Qm_max = [500,776,600]/(SB*1e3);            % 第m个MPS的输出无功功率上限

G1 = 5;                                     % 脆弱支路的最大故障数

G2 = 3;                                     % 非脆弱支路的最大故障数

K1 = Nb - Ns;                               % 足够大的正数K1

K2 = Nb;                                    % 足够大的正数K2

YT = 0.5:0.5:24;                            % 控制时段集合

NT = 48;                                    % 控制时段数

dt = 0.5;                                   % 一个控制时段的持续时间

tr_ij = ...                                 % MPS从节点i到节点j的通行时间。

   {[0,4,2;4,0,2;2,2,0],[0,2,2;2,0,4;2,4,0]};

SOC0 = 0.5*[300;776]/(SB*1e3);              % 初始荷电状态

nc = 0.95;                                  % 充电效率

nd = 0.95;                                  % 放电效率

SOC_max = 0.9*[300;776]/(SB*1e3);           % 荷电状态上限

SOC_min = 0.2*[300;776]/(SB*1e3);           % 荷电状态下限

tp = 0.25/(SB*1e3);                         % EV车队能耗率

YL_RCS = 1:37;                              % 拥有自动开关的支路集合

dm = 0.002;                                 % MPS的运输成本系数

Zm = 0.000015;                              % MPS电池老化速度

CBm = 0.01;                                 % MPS单位充放电价格

Lij0 = ones(NL,1);                          % 初始支路开断状态

Lij0([2,10,13,15,24]) = 0;

 

 

branch_to_node = zeros(Nb,NL);              % 节点的上游支路

branch_from_node = zeros(Nb,NL);            % 节点的下游支路

for k = 1:NL

   branch_to_node(mpc.branch(k,2), k) = 1;

   branch_from_node(mpc.branch(k,1), k) = 1;

end

 

Ysrc = cell(1,NT);                          % t时刻的虚拟电源节点集合

L_off = cell(1,NT);                         % t时刻仍未修复的支路

It = zeros(1,NT);                           % 在t时刻形成的孤岛数

for t = 1:NT

   if t >= 1 && t <= 6

       L_off{t} = [1,19,33,16,32,29,28,24];

       Ysrc{t} = [1,2,25,30,33];

       It(t) = 5;

   elseif t >= 7 && t <= 12

       L_off{t} = [19,33,16,32,29,28,24];

       Ysrc{t} = [1,25,30,33];

       It(t) = 4;

   elseif t >= 13 && t <= 18

       L_off{t} = [33,16,32,29,28,24];

       Ysrc{t} = [1,25,30,33];

       It(t) = 4;

   elseif t >= 19 && t <= 26

       L_off{t} = [16,32,29,28,24];

       Ysrc{t} = [1,25,30,33];

       It(t) = 4;

   elseif t >= 27 && t <= 32

       L_off{t} = [32,29,28,24];

       Ysrc{t} = [1,25,30];

       It(t) = 3;

   elseif t >= 33 && t <= 40

       L_off{t} = [29,28,24];

       Ysrc{t} = [1,25];

       It(t) = 2;

   elseif t >= 41 && t <= 44

       L_off{t} = [28,24];

       Ysrc{t} = 1;

       It(t) = 1;

   elseif t >= 45 && t <= 48

       L_off{t} = [24];

       Ysrc{t} = 1;

       It(t) = 1;

   end

end

 

%% 设决策变量

bimt_EV = binvar(Nm(2),NT);                 % 0-1变量,如果EV预配置到节点i,取值为1,否则取值为0。

bimt_MESS = binvar(Nm(1),NT);               % 0-1变量,如果MESS预配置到节点i,取值为1,否则取值为0。

bimt_MEG = binvar(Nm(1),NT);                % 0-1变量,如果MEG预配置到节点i,取值为1,否则取值为0。

ymt_EV = binvar(1,NT);                      % 0-1变量,如果EV在t时刻正在行驶,则取值为1,否则取值为0。

ymt_MESS = binvar(1,NT);                    % 0-1变量,如果MESS在t时刻正在行驶,则取值为1,否则取值为0。

ymt_MEG = binvar(1,NT);                     % 0-1变量,如果MEG在t时刻正在行驶,则取值为1,否则取值为0。

cmt_EV = binvar(1,NT);                      % 0-1变量,如果EV在t时刻正在充电,则取值为1,否则取值为0。

cmt_MESS = binvar(1,NT);                    % 0-1变量,如果MESS在t时刻正在充电,则取值为1,否则取值为0。

dmt_EV = binvar(1,NT);                      % 0-1变量,如果EV在t时刻正在放电,则取值为1,否则取值为0。

dmt_MESS = binvar(1,NT);                    % 0-1变量,如果MESS在t时刻正在放电,则取值为1,否则取值为0。

cpmt_EV = sdpvar(1,NT);                     % EV在t时刻充电功率。

cpmt_MESS = sdpvar(1,NT);                   % MESS在t时刻充电功率。

dpmt_EV = sdpvar(1,NT);                     % EV在t时刻放电功率。

dpmt_MESS = sdpvar(1,NT);                   % MESS在t时刻放电功率。

SOC_mt_EV = sdpvar(1,NT);                   % EV在t时刻的荷电状态

SOC_mt_MESS = sdpvar(1,NT);                 % MESS在t时刻的荷电状态

gp_mt = sdpvar(3,NT);                       % MPS在t时刻的有功输出

gq_mt = sdpvar(3,NT);                       % MPS在t时刻的无功输出

Lijt = binvar(NL,NT);                       % 0-1变量,取值为1时表示支路闭合,取值为0时表示支路断开

git = cell(1,NT);                           % 虚拟电源的出力

for t = 1:NT

   git{t} = sdpvar(It(t),1);

end                      

fijt = sdpvar(NL,NT);                       % 支路ij的虚拟功率

pload = sdpvar(Nb,NT);                      % 节点i的实际有功负荷

qload = sdpvar(Nb,NT);                      % 节点i的实际无功负荷

Pi = sdpvar(Nb,NT);                         % 节点i注入有功功率

Qi = sdpvar(Nb,NT);                         % 节点i注入无功功率

pf_ijt = sdpvar(NL,NT);                     % 支路ij的有功功率

qf_ijt = sdpvar(NL,NT);                     % 支路ij的无功功率

vit = sdpvar(Nb,NT);                        % 节点i的电压平方

 

%% 约束条件

省略。。。。。。。

%% 目标函数

 

objective = sum(wi.*sum(pload, 2)) - dm*sum(ymt_EV + ymt_MESS + ymt_MEG) - Zm*CBm*sum(cpmt_EV + dpmt_EV + cpmt_MESS + dpmt_MESS);


 

 

%% 设求解器

% gurobi求解器

ops = sdpsettings('verbose', 3, 'solver', 'gurobi','showprogress',1, 'debug', 1);

ops.gurobi.TimeLimit = 600;                 % 运行时间限制为10min

ops.gurobi.MIPGap = 0.01;                   % 收敛精度限制为0.01

 

sol = optimize(Constraints, -objective, ops);

 

 

%% 分析错误标志

if sol.problem == 0

   disp('求解成功');

else

   disp('运行出错');

   yalmiperror(sol.problem)

end

 

%% 展示运行结果

show_result;

image.gif 编辑

image.gif 编辑

🎉3 参考文献

文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。

[1] Lei S , Chen C , Zhou H ,et al.Routing and Scheduling of Mobile Power Sources for Distribution System Resilience Enhancement[J].IEEE Transactions on Smart Grid, 2019:5650-5662.DOI:10.1109/TSG

相关文章
|
7天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1165 3
|
6天前
|
机器学习/深度学习 人工智能 前端开发
通义DeepResearch全面开源!同步分享可落地的高阶Agent构建方法论
通义研究团队开源发布通义 DeepResearch —— 首个在性能上可与 OpenAI DeepResearch 相媲美、并在多项权威基准测试中取得领先表现的全开源 Web Agent。
835 12
|
16天前
|
人工智能 运维 安全
|
5天前
|
机器学习/深度学习 物联网
Wan2.2再次开源数字人:Animate-14B!一键实现电影角色替换和动作驱动
今天,通义万相的视频生成模型又又又开源了!Wan2.2系列模型家族新增数字人成员Wan2.2-Animate-14B。
422 10
|
7天前
|
弹性计算 Kubernetes jenkins
如何在 ECS/EKS 集群中有效使用 Jenkins
本文探讨了如何将 Jenkins 与 AWS ECS 和 EKS 集群集成,以构建高效、灵活且具备自动扩缩容能力的 CI/CD 流水线,提升软件交付效率并优化资源成本。
329 0
|
14天前
|
人工智能 异构计算
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!