配电网韧性、移动储能、预布局、动态调度,这几个词放在一起,基本就是当前配电系统防灾减灾领域最热的方向之一。我之前在好几个项目里都碰到过类似的课题,这次完整跑通并复现了IEEE33节点下的移动储能预布局与动态调度策略,整个过程踩了不少坑,也积累了一些心得,打算全部写出来。
这套方案解决的核心问题是:极端灾害(台风、冰灾、洪水等)来临前后,配电网往往来不及完全依靠固定设备硬抗,而移动储能车可以在灾前灵活的预先放置到关键节点附近,灾后再根据故障实际情况动态转移、并网供电,从而把负荷损失降到最低。这比单纯堆固定储能要划算得多,也比完全靠抢修恢复快得多。适合正在研究配电网韧性提升、微网孤岛运行、移动储能调度的高年级本科生、研究生,以及电力系统优化方向的工程师参考复现。
1. 项目到底在解决什么问题
1.1 配电网韧性是个啥概念
韧性(Resilience)和传统的可靠性(Reliability)不一样。可靠性关注的是随机故障下的平均停电指标,比如系统平均停电持续时间指标(SAIDI)、系统平均停电频率指标(SAIFI)这些长期统计量。韧性关注的则是极端小概率-高损失事件下,系统性能曲线的下降幅度和恢复速度。
简单说,可靠性看的是“平时稳不稳”,韧性看的是“被重锤砸了之后能不能挺住、能不能快速缓过来”。台风过境这种场景,配电网往往不是一根线断,而是区域性成片故障,分布式电源、固定储能如果恰好不在关键节点附近,基本帮不上忙。所以就有了移动储能这种“平时可用、灾时可动”的资源。
在IEEE33节点的标准算例里复现这个策略,核心价值在于:你不用去处理一堆地理信息、路网约束这些旁支细节,可以把注意力全放在储能怎么布置、怎么移动、怎么出力这个主逻辑上。等主逻辑跑通,再往实际系统迁移就会顺畅很多。
1.2 为什么选移动储能而不是固定储能
拿生活来打个比方。固定储能像家里的固定电话,位置定死了,停电时如果人不在旁边,它再好用也使不上劲。移动储能更像共享充电宝,哪里缺电就调度到哪里去,灵活度高了好几个量级。
在配电网韧性提升场景下,移动储能有几个天然优势。
一是灾前预布局。虽然灾害路径有不确定性,但往往有预测范围,可以在台风登陆前12到24小时把储能车开到预测的关键节点附近待命。这就像暴雨预警前把沙袋放到容易进水的小区门口,而不是等水淹了再满城找沙袋。
二是灾中动态调度。故障发生后,受损区域可能有多个孤岛,每个孤岛里如果有分布式光伏或者小水电还能撑着,但缺的是短时功率支撑和电量支撑。移动储能车可以在道路通行允许的前提下,从一个孤岛转移到另一个孤岛,轮流支撑关键负荷。这相当于把有限的储能资源当成“救火队”用,谁最危急先支援谁。
三是灾后恢复辅助。配电网重构也好、抢修联动也好,在合闸和并网的过程中往往伴随短时电压波动,移动储能可以临时充当电压支撑源,配合黑启动过程。
固定储能当然也有不可替代的优势,比如响应快、容量大、不用考虑运输时间。但移动储能突出的就是“时空可转移”这四个字,这也是本课题模型里最核心的变量。
1.3 这份代码方案和普通储能的区别
单纯做储能优化调度的代码很多,但通常都是固定位置、固定接入点,属于“给定储能在哪,然后去优化充放电功率”。这份实现真正把装备预布局和灾后转场两层决策放进了同一个建模框架里。
说得直白一点,普通调度代码的变量是“某个时刻充多少电、放多少电”,而这份代码的变量还包括“储能车预先放在哪个节点”“故障发生后移动到哪个节点”“什么时候转移到下一个节点”。
这就带来了一个很关键的建模区别:普通调度是连续时间上的功率分配,而这个课题是功率分配加上离散的资源选址和路径转移,本质上是混合整数优化问题。后面我会详细说这里面的坑。
2. 整体模型与数学框架拆解
2.1 两阶段决策框架
移动储能参与韧性提升,不能用一个单一时间断面去建模,因为决策发生在不同时刻,信息来源和确定程度也不同。这里采用的是学术界比较标准的两阶段随机优化框架。
第一阶段是灾前预布局。在灾害事件发生前,基于对故障场景的预测(比如根据台风路径预报,生成多个可能受损的设备场景),决定移动储能车的初始停放节点。这个决策必须在灾害发生前锁定,因为一旦灾害来临,道路可能中断,储能车没法再大规模移动。
第二阶段是灾后动态调度。观测到实际故障发生后,在配电网重构、分布式电源出力、负荷需求等条件下,动态决定移动储能车的转场路径、接入节点、充放电功率以及停电负荷的恢复量。
两阶段之间的耦合点就是第一阶段的预布局结果——车载储能初始在哪,直接决定了第二阶段灾害刚发生时能多快支撑起第一个孤岛。
从目标函数的角度,很多文献用“最小化负荷削减期望值”,也有用“最大化恢复负荷量”的。本质上一样,就是让韧性曲线中间那个下凹的坑尽可能浅、尽可能短。
2.2 预布局阶段的核心变量和约束
预布局阶段最重要的变量是布点变量。假设系统有若干个候选节点,每台移动储能车选择一个节点接入。这是一个二进制变量,比如,储能车 v 是否在 ,预布局阶段放在节点 i。
在这个阶段,约束相对简单,无非是:
- 一台车最多放在一个节点;
- 一个节点最多接入一台车(根据容量和现场条件决定,可调整);
- 预布局节点的数量不能超过车队总数;
- 如果有充电条件约束,还要考虑预布局期间储能车的SOC状态,一般假设出发时是满电的,或者允许在预布局节点充满。
这里特别提醒一点,预布局节点和候选接入节点往往不是同一个集合。预布局要考虑地理可达性和场地条件,往往选在变电站附近、关键馈线首端或者重要用户所在的节点附近。而故障后动态调度阶段的接入节点,可以是分布在网络各处的负荷节点、联络开关附近节点等。
2.3 动态调度阶段的核心约束
第二阶段才是模型的重头戏,包含的网络约束和时序约束比较多。
储能车转场约束是移动储能区别于固定储能的核心。储能车在时刻 t 位于节点 i,到 t+1 时刻要么原地不动,要么移动到相邻节点。如果用二进制变量 m(i,j,t) 表示时刻 t 到 t+1 是否从节点 i 转移到节点 j,那么需要满足:
- 每台车每个时刻至多转移一次;
- 车在 t+1 的位置等于 t 的位置加上转移效果;
- 如果移动,需要消耗时间(一般假设跨节点转移耗时一个调度步长;如果时间尺度更细,可以设转移时间矩阵);
- 转场过程中不能充放电,即功率为 0。
这部分实现起来最繁琐的其实是时空一致性,因为位置变量、转移变量、功率变量之间需要互相耦合,稍不注意就会出现“车还没到节点却已经在放电了”这种逻辑上不可能的调度结果。
充放电功率约束和普通储能一致,包括充放电功率上下限、SOC动态方程以及SOC上下限。移动储能车一般容量不大,常见的配置是250kW/500kWh到500kW/1000kWh这个区间,对应一辆中型储能车。
潮流约束是配电网络侧的约束。由于要处理孤岛运行状态,网络拓扑不再是一个简单的辐射状连通图。常见做法是引入辅助二进制变量表示线路是否投入运行,然后用DistFlow方程建立潮流模型,并通过大M法或者二阶锥松弛来处理潮流方程中的二次项。
2.4 目标函数设置与韧性指标
大多数文献的目标函数可以写成最小化所有场景下的负荷削减风险:
[ \min \sum_{s \in S} p_s \sum_{t \in T} \sum_{i \in N} w_i \cdot (1 - \lambda_{i,t,s}) \cdot P_{i,t}^L ]
其中 λ 是负荷恢复比例,w 是负荷权重(重要负荷权重大,普通负荷权重小),p 是场景概率。
这里有个工程经验可以分享:对重要负荷的权重设置非常关键。如果所有负荷权重一样,优化结果往往是雨露均沾,每个节点都恢复一点,但重要的医院、通信基站可能得不到足够的功率支撑。实际做项目时,我一般给一级负荷设10倍以上的权重,仿真结果会更贴近调度员的实际操作习惯。
韧性指标的落地,通常在得到优化结果后,通过系统的“时间-性能曲线”来刻画,也就是计算每个时刻系统负荷供应率或可用容量百分比,然后考察曲线的最低点(韧性下降幅度)、在低水平停留的时间(韧性持续损失时间)以及恢复到正常水平的斜率(恢复速率)。移动储能预布局与动态调度主要作用于“降低下降幅度”和“加快恢复速度”这两个环节。
3. IEEE33节点系统与算例设计细节
3.1 IEEE33节点系统的基本参数
IEEE33节点是配电网研究里的经典算例,我见到的大多数相关方向文献都会拿它做基准测试。
这个系统的基本情况是:基准电压12.66千伏,33个节点,32条支路,5条联络开关,总负荷约5084千瓦加2547千乏(也有版本用3715千瓦加2300千乏,数据不同是因为部分文献对负荷做了标准化处理,复现的时候一定注意保持全网数据统一)。网络结构上,它是典型的辐射状结构,1号节点为电源点,通过主变压器与上级电网相连。
对于移动储能调度来说,这种规模的好处是:潮流计算快,模型求解压力适中,同时网络结构又有足够的分支去构造孤岛场景。比如把中段某几条支路断开,就能形成带分布式电源的孤岛运行区域。
做预布局时,我不会把全部33个节点都当作候选节点,那会显著增加整数变量个数。一般根据拓扑特征筛选出6到10个关键节点作为候选布点集,比如:
- 馈线末端节点(末端容易电压越限,储能支撑效果好);
- 大负荷节点(负荷集中,恢复收益高);
- 联络开关附近节点(方便形成孤岛和转供);
- 分布式电源接入节点(可以和分布式电源联合支撑孤岛)。
3.2 故障场景怎么构造
灾害场景的构造直接影响预布局结果。我用的是场景法:根据历史灾害数据或者气象预报,生成一组故障场景,每个场景对应不同的线路开断组合和故障时段。
一个比较实用的做法是:先给定几个典型故障区域(比如“首段故障”“中段故障”“末端故障”),再在每个区域内随机选择少量线路作为故障集,故障线路数控制在2到5条。这样既有足够的场景覆盖度,又不会让枚举指数爆炸。
举个例子:
| 场景 | 故障线路 | 影响区域 | 概率 |
|---|---|---|---|
| S1 | 线路2-3、3-4 | 馈线主干中断,末端大面积停电 | 0.3 |
| S2 | 线路6-7、8-9 | 中段辐射支线孤岛 | 0.25 |
| S3 | 线路10-11、12-13 | 末端支线孤岛 | 0.25 |
| S4 | 线路15-16、25-26 | 双侧末端负荷失电 | 0.2 |
场景概率的设置对预布局结果影响很大。如果概率高的场景都集中在网络中部,预布局点自然往中部靠;如果均匀分布,布点就会比较分散。这一点在做结果分析时可以重点观察。
如果后期想做得更深入,可以用蒙特卡洛采样生成大量场景,再用同步回代缩减法(fast forward selection)把场景削减到几十个以内,这样能明显提高求解效率。但初次复现时,建议先用20个以内的场景把流程跑通。
3.3 移动储能参数设置建议
移动储能车参数要贴近实际,不能拍脑袋。以下是我在一组对照测试中用的参数:
- 储能车数量:2到3台
- 单台容量:500千瓦时
- 功率上限:200千瓦(充放电对称)
- SOC范围:10%到90%,初始SOC:90%
- 转移耗时:同一电气区域内部转移一个调度步长(15分钟),跨区域转移两个步长
- 调度时段:24小时,96个时间点(15分钟分辨率)
这里我特别想提醒第一次做这个课题的朋友:时间分辨率选择很关键。如果用1小时分辨率,一天才24个点,求解快但调度指令太粗糙,无法体现储能车“先支援A孤岛,再转移去B孤岛”这种时序转移的价值。用15分钟分辨率,点数是96个,计算量上升很多,但才能看到移动储能的动态优势。
如果计算机性能有限,建议先做两步走:先用60分钟分辨率跑通功能,确认建模正确,再切换到15分钟分辨率做正式实验。不要一上来就跑全部分辨率,否则模型有bug的时候调试成本会很高。
4. Matlab代码实现的关键环节
4.1 建模工具与求解器选型
以Matlab为主的复现方案中,优先推荐用Yalmip工具箱建模,因为Yalmip对混合整数二阶锥规划支持得比较友好,代码表达清晰,排查约束比较直观。
求解器方面,如果有条件用Gurobi或CPLEX,那是最省心的,直接求解MISOCP没有问题;如果条件有限,可以试试免费的Mosek或SCIP。比较尴尬的是Matlab自带的intlinprog只能求解混合整数线性规划,处理不了二阶锥约束,遇到这种情况要么把DistFlow二阶锥约束近似成线性约束,要么换求解器。
我在实际复现过程中踩过的一个坑是:MISOCP的求解时间对节点数和时间点数非常敏感。33节点加96个时点再加3台储能车,整型变量能轻松破万,Gurobi默认参数下有时候能跑几十分钟甚至更久。这时候就不要傻等了,要用以下手段加速:
- 开启Gurobi的MIPFocus参数,设置成3(强调快速找到好解而不是证明最优);
- 设置TimeLimit参数,比如600秒,到期取当前最优解;
- 削减场景数量至5到10个;
- 适当松弛整数变量的Big-M值,减小约束矩阵的条件数。
4.2 核心代码骨架示例
代码框架一般分成四层:参数定义层、变量定义层、约束组装层、求解与结果输出层。下面给出一段我整理的Yalmip骨架代码,帮助你先理解结构。
%% 算例参数定义 % 系统参数 N = 33; % 节点数 T = 96; % 时间段数 TimeStep = 15/60; % 小时 % 移动储能参数 numMES = 2; % 移动储能车数量 CapMES = 500; % kWh PMaxMES = 200; % kW SOCMin = 0.1; SOCMax = 0.9; SOC0 = 0.9; % 候选布点与动态接入位置集合 initCandidates = [5, 12, 18, 25, 30]; dynCandidates = [3, 5, 6, 7, 10, 12, 18, 22, 25, 30]; %% 定义优化变量 % 预布局位置 x(i) 二进制 x_pre = binvar(33, numMES, 'full'); % 动态位置 w(v, i, t) 二进制 w_pos = binvar(numMES, N, T, 'full'); % 充放电功率 p_ch, p_dis (kW) p_ch = sdpvar(numMES, N, T, 'full'); p_dis = sdpvar(numMES, N, T, 'full'); % SOC变量 soc = sdpvar(numMES, N, T, 'full'); % 节点电压、支路潮流(DistFlow) P_ij = sdpvar(32, T, 'full'); Q_ij = sdpvar(32, T, 'full'); V_sq = sdpvar(33, T, 'full'); % 电压幅值平方 %% 约束条件 Constraints = []; % 预布局约束:每台车只能放置在一个候选节点 for v = 1:numMES Constraints = [Constraints, sum(x_pre(:, v)) == 1]; end % 动态位置一致性:任一时刻车有且仅有一个接入节点 for v = 1:numMES for t = 1:T Constraints = [Constraints, sum(w_pos(v, :, t)) == 1]; end end % 预布局与初始动态位置一致性 for v = 1:numMES Constraints = [Constraints, w_pos(v, :, 1) == x_pre(:, v)]; end % SOC动态方程 for v = 1:numMES for t = 2:T for i = 1:N Constraints = [Constraints, ... soc(v, i, t) == soc(v, i, t-1) + TimeStep*(p_ch(v,i,t)/1000 - p_dis(v,i,t)/1000)]; end end end %% 求解 ops = sdpsettings('solver', 'gurobi', 'verbose', 2, ... 'gurobi.TimeLimit', 600, 'gurobi.MIPGap', 0.05); optimize(Constraints, Objective, ops);注意,这段骨架代码做了大量简化,实际使用中还需要加入储能车转移约束(w_pos在时间上的空间连续性)、充放电互斥约束、节点功率平衡约束、DistFlow约束以及孤岛负荷恢复约束。但整体结构就是这样的分层搭建思路。
4.3 第二阶段的转移逻辑必须用额外约束锁死
我通读很多初版代码发现,很多人把动态位置变量 w_pos 定义好之后,就直接写SOC方程和功率平衡,结果跑出来发现储能车的SOC轨迹完全不符合物理规律。
原因是:只定义了“车在某时刻属于某个节点”,但没定义“车如何从一个节点到另一个节点”。没有转场约束的模型里,优化器可以让一辆车第1时刻在节点5放电,第2时刻在节点20放电,第3时刻又在节点7充电,看起来每个时刻的位置都满足约束,但实际车辆不可能瞬移。
所以必须额外添加转场约束:
% 转移连续性约束:车辆v在时刻t位于节点i,则在t+1只能位于i或与i相邻的节点 for v = 1:numMES for t = 1:T-1 for i = 1:N if w_pos(v,i,t) == 1 % 相邻节点集合 neighbor{i} Constraints = [Constraints, ... w_pos(v, i, t+1) + sum(w_pos(v, j, t+1) for j in neighbor{i}) == 1]; end end end end这里需要注意,Matlab的Yalmip语法里没法直接对二进制变量做“if == 1”这种逻辑判断,你需要用大M法或指数型约束。我当时实现时是构造了转移变量 trans(v, i, j, t),然后用三个约束把它们耦合起来,核心思想就是:前一刻在 i,后一刻位置只能是 i 或相邻节点。
这一步是整个建模过程中逻辑最绕、也是出错率最高的地方,做完之后一定要做后检验:输出每台车每个时刻的位置序列,人工核对是否存在瞬移。
5. 结果分析与可视化方法
5.1 预布局结果怎么呈现
预布局结果是一个二进制选择矩阵,直观展示方式是在IEEE33节点的单线图上标出储能车的初始位置。我习惯用不同颜色区分不同车,再用圆圈标注候选节点。
如果做多场景对比,可以生成一张表格列出不同场景概率下的布点方案差异,比如:
| 方案 | 车1位置 | 车2位置 | 车3位置 | 对应的负荷切除期望 |
|---|---|---|---|---|
| 均匀场景 | 节点12 | 节点25 | 节点5 | 128kWh |
| 概率偏向中段 | 节点18 | 节点7 | 节点30 | 103kWh |
| 概率偏向末端 | 节点30 | 节点12 | 节点5 | 141kWh |
这种对比最容易讲清楚一个观点:预布局是跟着风险走的,不是拍脑袋选的。
5.2 动态调度曲线怎么解读
动态调度结果的核心是两个图。
第一张图是各台储能车的SOC随时间变化曲线,多条曲线画在同一张图上。从这张图上能清楚看到:储能车在哪个时段放电、哪个时段充电、哪个时段处于转场停运状态。转场期间SOC是一条水平线,功率为零,这是判断转移约束有没有生效的直观证据。
第二张图是节点电压分布或负荷恢复比例热力图。横轴时间、纵轴节点、颜色表示电压或负荷恢复程度。这种图很适合放进论文里展示时空动态效果,能一眼看出哪些节点在什么时段被恢复了,哪些节点恢复得晚。
第三个推荐画的是系统韧性曲线,即总供电负荷占正常负荷的比例随时间的变化。对比无储能、固定储能、移动储能三条曲线,三者的差异就是移动储能价值的最直观体现。实测下来,移动储能在严重故障场景下能把最低点抬高8到15个百分点,恢复速度也能提前2到3个小时。
5.3 对比实验设计建议
做这个课题,对比实验做得越扎实,结论就越有说服力。我建议至少设计四组方案:
- 方案A:无储能,仅靠重构恢复
- 方案B:固定储能,位置提前给定且不可移动
- 方案C:移动储能,但只做灾前预布局,灾后不转场(等价于“位置选得好的固定储能”)
- 方案D:移动储能,预布局加动态转场(本文方法)
四组方案对比,核心论点就很清晰了:D比C强,说明动态转场有价值;C比B强,说明预布局有价值。如果D和C差距不大,反而说明灾害场景里道路转移条件太差或者时间窗口太短,这时候你的分析重点要转向“什么时候转场价值高、什么时候价值低”。
这个研究方向上有不少文献已经指出:当故障持续时间较长、道路可通行窗口充分、多个孤岛相距较近时,动态转移的增益最明显。反过来,如果故障在2小时内就被修复,储能车可能刚到位就要返程,移动价值就被削弱了。
6. 常见问题与排查技巧实录
6.1 求解器报“Infeasible Problem”怎么办
这是做MILP/MISOCP最常碰到的问题。模型不可行,通常不是某一个约束写错了,而是多个约束之间的矛盾造成的。
排查顺序我一般是这样:
- 先把所有和移动储能相关的二进制变量固定成某个已知可行解(比如把储能车全部固定初始位置,不参与转移),然后求解连续优化问题,看是否可行。
- 如果连续问题可行,再把位置变量按时间顺序逐步放开,逐步缩小不可行范围。
- 重点检查SOC动态方程里的充放电效率。很多模型初版默认充电效率100%,但实际是95%左右。如果设置了不等于1的效率,SOC方程用效率系数耦合,要注意数值方向别搞反了。
- 检查节点功率平衡约束里负荷和电源的方向定义。DistFlow中注入功率为正、负荷取出的方向,各家代码符号习惯不一样,一旦跟储能功率方向对不上,模型必然不可行。
另外,一定检查时间尺度的单位统一。我见过把功率单位设为kW、储能容量设为MWh,结果SOC变化量差了一千倍的情况,表面上看不可行,实际上只是单位错乱。
6.2 求解时间过长怎么加速
如果Gurobi跑了几十分钟还卡在10%的MIP Gap上,我的经验是从三个方向下手:
- 降场景数。把20个场景削减到5个代表性场景,计算量基本能降到原来的四分之一以下。
- 降对称性。多台移动储能车如果参数完全相同,模型里会产生大量对称解,Gurobi会在等价分支里反复搜索。解决办法是给每台车设置微小的参数差异(比如初始SOC相差2%),或者固定第一台车的候选布点序号小于第二台。
- 添加有效不等式。比如,如果一台车在某时刻根本不参与任何供电,那么它转移的二进制变量应该为0。这类逻辑约束可以大幅收紧搜索空间。
有个通用经验:问题规模大到一定程度,求解器调参比建模优化更能立竿见影。Gurobi相关参数中,MIPFocus=3、MIPGap=0.05、TimeLimit=300,是我跑这类模型的标准配置,大多数情况下都能在数分钟内给出工业级可用的满意解。
6.3 二阶锥松弛不紧导致奇怪结果
DistFlow的潮流方程为:
[ U_j = U_i - 2(r_{ij}P_{ij} + x_{ij}Q_{ij}) + (r_{ij}^2 + x_{ij}^2) L_{ij} ]
其中 ( L_{ij} ) 是电流平方。为了保证模型凸性,一般把 ( P_{ij}^2 + Q_{ij}^2 \leq U_i L_{ij} ) 作为二阶锥形式引入,即经典SOCR。
但这里有一个局部最优的问题:SOCR只有在目标函数“鼓励”电流尽可能小的时候才是紧的。如果你的目标函数里有某种让电流增大的机制,比如给储能充电的协调策略反而鼓励网损增大,松弛可能不紧,求出来的解实际上不满足原始潮流方程。
排查方法很简单:求解后用原始潮流方程逐时段验算一遍电压和潮流,把偏差最大的节点、时段打出来看。如果偏差明显,就把该节点的二阶锥约束改成等号约束,或者在该节点上用大M法加入电压偏差惩罚项。
6.4 场景削减后结果不稳定怎么办
场景削减本来是降计算量的好办法,但削减后的结果往往和全场景结果有偏差。如果只做几组场景然后发现结果波动很大,先别急着怀疑算法,大概率是场景代表性不足。
我当时做的一个案例里,5个削减场景得到的预布局方案与20个原始场景的最优方案不一致,原因是最优布点恰好在一个被削减掉的场景对应的关键位置附近。解决办法是保留该场景,再重新削减;或者采用收敛性判断——多次用不同的初始场景子集跑,如果最优布点变化不大,说明结果对场景选择不敏感;如果每次布点都不一样,说明需要增加场景数或调整场景概率。
7. 个人体会与后续可以扩展的方向
模型框架跑通,代码结构稳定之后,我自己最大的感触是:这个课题的难度并不在于数学建模本身有多深,而在于把“时空转移”的逻辑用离散变量准确表达出来,并且时刻保持物理常识感——优化结果出来以后,先问自己一句:储能车真的能从A点开到B点吗?如果不能,模型里一定缺了约束。
从扩展角度来说,这套框架后续还有几个很好的升级方向。
一是把交通网和配电网耦合起来。车载储能的转场时间、路径选择目前是按简化的转移时间矩阵处理的,如果加入实际路网信息(距离、拥塞、道路是否被灾损破坏),模型会贴近工程实际得多,当然求解难度也会大幅上升。
二是加入修复时序协同。目前的模型只优化储能调度和重构,没有跟抢修队路径规划、修复顺序选择协同优化。现实中储能车到了现场还要等抢修队完成线路修复才能并网,这个协同优化价值很大,但也复杂很多,建议在基础版本彻底搞懂之后再往这个方向延伸。
三是把台风、暴雨的气象动态预测直接耦合进场景生成。如果能够把气象模式输出的时间变化趋势转化为故障概率的时变参数,预布局方案就可以做到“滚动更新、动态调防”,而不是只做一次性静态决策。
最后再分享一个小技巧。很多人拿到这类代课题,喜欢先去找代码资源。这个可以,但建议先自己把数学建模推一遍,至少把变量表、约束表、目标函数手写清楚。这一步做好,后面看任何人的代码都是降维打击。我见过太多同学因为没有提前建模,拿着现成代码跑了好几天,连变量维度都对不上,改起来完全无从下手。
希望这套从建模到实现的完整过程能给你一个清晰的参考。移动储能这个方向还有很大的研究空间,基础版本跑通之后,能延伸的方向非常多,祝顺利。