ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

基于优化模型的配电网可靠性评估:混合整数规划与故障恢复复现

基于优化模型的配电网可靠性评估:混合整数规划与故障恢复复现

接到这个“顶刊复现”需求的时候,我第一反应是先翻一遍资料库——“基于优化模型的配电网可靠性评估”这个题目看起来简短,实际横跨了可靠性指标体系、混合整数规划、配电网潮流建模和Matlab工程化好几座山头。真正动手复现那几天我才意识到,这类工作是典型的“看文献觉得不难,建出能用的代码才难”。这篇文章把我在整个复现过程中的方法逻辑、数学模型、代码骨架和踩坑记录完整整理出来,不管是做可靠性方向起步的研究生,还是做配电网规划、供电可靠性管理的工程师,都能把内容直接拿去当参考。

这次复现最终落在Matlab平台,建模层用YALMIP,底层调用商用MILP求解器,经典33节点测试系统作为主算例。接下来直接进入正题,先从方法论层面说清楚传统方法为什么不够用,再一步步拆解优化模型怎么搭、故障场景怎么建、代码怎么写、结果怎么验证。

1. 传统评估方法卡在哪里:FMEA、最小割集与蒙特卡洛的共性短板

1.1 教科书里的经典方法都默认“恢复规则先于评估存在”

配电网可靠性评估,早期主流做法可以归成解析法和模拟法两条路。解析法里最常见的是故障模式与影响分析(FMEA)和最小割集法。FMEA的套路很像工厂里的质量检验:先列一张“可能坏的东西”的清单,然后逐个模拟它退出运行,再根据一份事先写好的逻辑表判断哪些用户停电、停多久。逻辑表的核心内容无非“有没有联络线可转供”“配电自动化是否动作”“备用电源是否投入”。单故障、分支少、没有分布式电源的辐射状网络,这套流程又快又准,直到今天行业规范里的很多可靠性计算仍然按这个思路编。

最小割集法则是反向思维:不去逐个模拟故障,而是枚举“哪些元件组合停运会导致负荷失电”,再按概率公式把组合的发生频率和停电后果累加。它能覆盖多故障,但在设备数量和运行方式增加时,割集数量会指数膨胀,维护成本很高。我现在还清楚记得第一次手工列33节点系统割集时的痛苦,稍不留神就会漏掉一条影响路径,后面所有计算结果全变。

模拟法以蒙特卡洛为代表。它按元件故障率和修复时间的概率分布,随机生成一条元件状态的时间序列,再在每个状态上做潮流和供电能力判断,最后对所有样本统计平均。思路非常通用,缺点是方差收敛慢,想评估一年8760小时的可靠性指标,经常要跑成千上万次采样,每采样一次就要做一次完整潮流,计算量相当可观。

这三类方法体系都很成熟,但它们有一个共同的预设前提:故障发生之后,电网怎么恢复供电,这条规则在评估之前就写死了。故障模式复杂的网络里,这条规则恰恰是最难写对的部分。联络开关和分段开关先操作哪个、分布式电源能不能带孤岛运行、二级负荷能否切到另一条馈线,任何一个细节写偏,评估结果就跟着偏。

1.2 优化模型改变的不是指标,而是“恢复决策”的产生方式

这次复现工作的核心思想,概括成一句话:把每个故障场景下的恢复策略,从人工规则换成数学寻优。

具体流程是这样的。对每个预想的故障场景,先在模型中把故障元件强行退出运行,然后把剩余网络里所有可控资源都变成优化变量:分段开关和联络开关的开合状态、负荷点的投切状态、分布式电源的有功无功出力。接着求解一个以“失负荷损失最小”为目标函数的混合整数优化问题,得到这个场景下的最优恢复策略和对应的最小失负荷。最后把所有场景的最优结果按发生概率加权汇总,得到SAIFI、SAIDI、ENS这些可靠性指标。

换句话说,传统方法里“评估人员预先定的恢复顺序”在优化模型里变成一组约束和一组决策变量,由求解器在数学空间里寻找最优解。这带来一个很实在的好处:评估结果不再依赖评估者的个人经验,同样的网络、同样的故障场景,谁来算结论都一样。这个特性在工程评审场景里尤其重要,可审计、可复现,不会出现两个工程师对同一个网架给出不同可靠性结论的情况。

1.3 哪些场景必须靠优化模型撑场子

我复现完第一版之后,专门把优化模型和传统方法放在同一组算例上对比,发现有三类场景是优化模型真正发挥价值的地方。

第一类是分布式电源和储能接入后的孤岛运行。故障发生后,DG所在的局部配网能不能脱离主网自持运行,过去只能靠经验划分孤岛边界,边界是否合理直接决定指标好坏。优化模型可以在约束里显式表达孤岛形成的所有条件,求出来的孤岛范围是容量、电压和拓扑约束下的最优解,而不是拍脑袋估出来的近似边界。

第二类是多故障组合。双故障甚至三故障场景下,可选的恢复动作序列呈组合爆炸式增长,人工写规则效率低,而且根本写不全。优化模型天然支持同时表达多个故障的状态,N-2评估在数学上仍然是同一个形式的混合整数规划,不会因为故障数量增加而改变建模范式。

第三类是可靠性指标要反复嵌入上层规划计算。比如做联络线规划、储能容量配置时,每次迭代都要评估一次可靠性,优化模型作为一个可重复调用的数学模块,比每次重新人工推演要可靠得多。这也是我后来把这套代码封装成函数的直接动机,规划程序里循环调用,跑起来非常顺手。

2. 优化目标与决策变量:把“故障后怎么恢复”翻译成数学清单

2.1 目标函数:切负荷惩罚要大,操作惩罚要小

把实际问题翻译成优化模型,第一步是定目标函数。配电网故障恢复问题的目标很直观——尽量少让用户停电,所以目标函数通常写成:最小化所有负荷点的失负荷功率乘以停电持续时间再乘以单位缺电成本,同时叠加一条很小的开关操作惩罚项。

单位缺电成本也叫VOLL(Value of Lost Load),不同用户类型取值差异很大,工业负荷动辄每千瓦时上百元,居民负荷相对低一些。实际做可靠性评估时如果只比较方案优劣,不涉及经济性换算,可以把失负荷部分简化为等权重功率之和,单位缺电成本设为1。我的建议是按“量纲干净”的原则来,不掺入过多经济参数,评估结果更好解释。

这里有一个很容易犯的错:把失负荷的权重设得太小,结果求解器为了少操作几次开关,宁可闲置一条有电的联络线。我的做法是故意拉开数量级——失负荷惩罚权重取10000,开关操作惩罚权重取1到10。这样求解器行为非常明确:优先保住负荷,只有在失负荷完全相同的多组恢复方案里,才去选择开关动作次数更少的那个。这个数值比例是我跑了几组算例后定下来的,直接照抄一般问题不大。

2.2 决策变量类型:二进制变量是重头戏

优化模型里最核心、也最影响求解速度的是二进制变量。整个恢复策略本质上是拓扑决策:哪条分段开关合上、哪条联络开关合上、哪个负荷点被切掉,全部是“开还是关”的二值问题。

我习惯把模型变量分成三类。第一类是支路开关状态变量,二进制,每条支路一个,1表示该支路投入运行。第二类是负荷投切变量,二进制,每个负荷点一个,1表示该负荷保持供电。第三类是连续变量,包括每条支路的有功功率、无功功率、电流平方,以及每个节点的电压平方。如果DG出力也参与优化,还要增加DG有功和无功的连续变量。

变量类型含义规模
s_br二进制支路是否闭合每条支路一个
u_load二进制负荷是否供电每个负荷点一个
P / Q连续支路有功、无功功率每条支路一组
U2连续节点电压平方每个节点一个
l2连续支路电流平方每条支路一个

把所有场景的变量组织成一个大的混合整数规划同时求解,还是按场景逐个求解后汇总,这是本文第五节要聊的实现权衡。从模型表达上看,两者没有本质区别,区别主要在求解压力和数据组织方式。

2.3 可靠性指标:优化结果如何变成SAIFI、SAIDI、ENS

目标函数求解出来是一组开关状态和失负荷点集合,要变成行业通用的可靠性指标,需要一套批量化统计口径。我在复现里固定用四个最常用指标做汇总。

SAIFI(系统平均停电频率指标)衡量一年里每个用户平均停电几次:把每个故障场景的失负荷用户数乘以年发生频率,累加后除以总用户数。SAIDI(系统平均停电持续时间指标)衡量每个用户平均停电多少小时:把每个故障场景的失负荷用户数、平均修复时间和年发生频率三者相乘累加,再除以总用户数。CAIDI是SAIDI除以SAIFI,代表一次停电平均持续多久。ENS(系统缺供电量)更直接关心电量损失:每个故障场景的年发生频率乘以失负荷功率再乘以修复时间,累加后就是全系统每年的缺供电量期望值,工程上常用MWh/年表示,注意kW乘以小时的单位要先除以1000再进MWh。

这里有一个关键口径细节:SAIFI和SAIDI的分母用的是“用户数”,不是“负荷点数”。一个负荷点可能挂着几十上百个用户。我在建模时把每个负荷点的用户数作为独立参数保存,而不是默认每个节点一个用户,否则指标算出来会严重失真。这个问题在后文6.4节还会单独展开。

3. 三组约束的细节:拓扑、潮流与运行安全边界

3.1 故障状态怎么进入模型

优化模型要评估故障场景,必须把“某个元件坏掉了”这个事实编码进约束。我的做法很简单:每个故障事件对应一个元件的状态变量固定为0。

比如第12条支路发生永久性故障,在求解该场景时就把s_br(12)锁定为0,其余所有健康支路的s_br仍然是可优化变量。这样做的好处是,联络开关和分段开关的转供能力全部保留在模型里,故障后该合哪条、该开哪条,完全由求解器决定,而不是由我提前指定。故障支路对应的潮流变量P、Q则通过大M约束强制归零,避免出现“故障支路还在送电”这种荒谬解。大M的具体取值在6.3节细说,这里先记住一个原则:所有涉及开断的约束都要同时管住状态变量和连续变量,缺一不可。

3.2 辐射状拓扑约束:防止优化模型自己造出环网

配电网正常运行必须保持辐射状,有源网络一旦成环,潮流不可控,保护配合也会全乱。优化模型里最容易犯的低级错误,是只约束了连通性、没约束无环性,最后求解器给出的“最优恢复方案”里出现一个大环网,工程上根本没法执行。

我采用的方案是“虚拟潮流法”。具体做法:给每条支路定义一个额外的虚拟流变量,它不参与任何电气量计算,只用来确保拓扑正确。约束条件写两条。第一条,虚拟流的值不能超过该支路闭合状态乘以一个足够大的数M,也就是说支路断开时虚拟流必须为0。第二条,对每个非电源节点,要求流入的虚拟流之和减去流出的虚拟流之和等于1。

这两条合起来的效果,是每个负荷节点都必须通过闭合支路从电源节点获得一份虚拟流,而网络本身不形成多余环网。用大白话说,相当于给每个节点发了一张“必须从根节点领到一单位物资”的券,路断了券就发不下去;如果网络成环,虚拟流会在环上叠加,约束立刻被违反。我在调试时发现这个约束极其可靠,基本不会出现漏判环网的情况。

3.3 DistFlow潮流方程:线性化是求解速度的生死线

配电网潮流计算的通用模型是DistFlow。它把潮流从电源侧逐段往下推:每条支路末端的功率,等于上一段功率减去沿线损耗,再加上下游负荷和分布式电源注入。标准形式里有一个非线性二次项,直接丢进混合整数规划会让求解器非常吃力,所以在实际复现中,绝大多数相关工作会采用线性化形式(LDF),忽略支路损耗项,把电压降落近似写成:

U_j平方 = U_i平方 - 2乘以(r_ij乘以P_ij + x_ij乘以Q_ij)

其中r和x是支路电阻、电抗,P和Q是该支路流过的有功、无功。线性化在配电网这种电阻偏大、电压等级不高的网络上会引入一定误差,但对可靠性评估结论的影响通常可以接受,换来的是求解时间从小时级降到秒级。我在多个算例里对比过,ENS的偏差基本控制在个位数百分比以内,完全能满足评估用途。

支路开断时,还需要给P和Q加上大M约束:支路断开则功率强制为0,支路闭合则功率在容量范围内自由流动。大M取值非常讲究,取太小物理上不合理,取太大会让求解器数值病态。我一般用全网最大可转供负荷的1.5倍作为功率项的M上限,工程上够用且数值稳定。

3.4 电压与容量约束:给最优解套上安全边界

求解出的恢复方案不仅要“能用”,还要“安全用”,运行约束不能少。最常用的是节点电压上下限约束:正常运行电压在0.95到1.05倍额定电压之间,故障恢复期间一些标准允许更宽的范围,但评估时保守取0.95到1.05已经足够。

支路容量约束通过电流平方的上下限表达:每条支路的电流平方不能超过该支路导线长期允许载流量的平方。DG无论在正常场景还是恢复场景都不能超过额定有功出力和无功上下限,无功出力通常按固定功率因数0.9到1.0约束,避免DG在恢复过程中把电压抬得过高。

这些约束看着基础,但每一条都对应真实物理限制。我的初版代码偷工减料漏了电压约束,结果某个故障场景的最优解把联络开关全合上,失负荷确实是0,末端节点电压却掉到了0.82标幺值,工程上一塌糊涂。安全边界约束宁多勿少,这是这次复现里最深刻的一条教训。

4. 故障事件集怎么建:从元件故障率到代表性场景

4.1 元件可靠性参数的两状态模型

可靠性评估的前提,是知道每个元件多久坏一次、坏一次修多久。行业里最常用的两状态模型这样定义:每个元件有“正常运行”和“故障修复”两个状态,从正常到故障按年故障率λ发生,从故障回到正常按平均修复时间r发生。

元件的年不可用率近似等于λ乘以r再除以8760。比如一台配电变压器的λ是0.02次/年,r是5小时/次,不可用率大约是万分之一点一。这个数值很小,但对整个配电网SAIDI的贡献可能不小,因为变压器故障的影响范围往往覆盖一整片低压用户。

配网里需要建模的元件通常包括10kV馈线、配电变压器、断路器和母线,每个元件分别给λ和r。馈线故障率常按长度乘以单位长度故障率来算,比如某型号架空线每公里每年0.1次。复现时用常参数作为基础版本就够了,把季节、天气分档功能留成接口,后面想扩展非常方便。

4.2 N-1与N-2:枚举维度必须受控

可靠性评估的经典做法是枚举故障场景。最基础的是N-1,每次只考虑一个元件故障,覆盖所有馈线、变压器、断路器和母线。对33节点测试系统,单故障场景数大约是馈线段数加变压器数,数量在三四十个左右,逐个求解优化模型毫无压力。

如果要覆盖N-2,也就是两个元件同时故障,组合数会迅速膨胀。33节点算例里可故障的馈线段通常按32条计,单馈线双故障组合就是C(32,2)=496种,再叠加变压器和母线的组合就上千了。每个场景都要做一次混合整数规划,全部跑一遍,在普通笔记本上会等得怀疑人生。

主流的解决办法不是硬扛全部组合,而是做场景削减。先判断哪些双故障场景在物理上高度相似,再合并成有限个代表性场景。顶刊论文里很少追求“一个不漏”,而是控制削减误差,让缩减后得到的指标与全枚举的偏差落在统计容忍范围内。这个方法我们在4.3节展开。

4.3 场景削减:聚类代表加概率归并

我复现时用的场景削减策略分两步。第一步,按故障事件的“后果向量”做K-means聚类。后果向量可以是历史仿真得到的失负荷功率、失负荷用户数、越限程度,也可以是故障元件的电气位置特征。聚类完成后,每组取质心场景为代表场景。

第二步是概率归并。每个故障事件原本有各自的年发生频率,把同组内的频率全部累加到代表场景上,代表场景的求解结果就代表整组的平均水平。这样做的误差主要来自组内事件之间的后果差异,K越大误差越小。从我的经验看,K取8到12时,和全枚举的ENS偏差通常能压到5%以内。

时间维度也要做类似处理。一年8760小时的负荷曲线没必要全部枚举,按负荷水平聚成峰、腰、谷三个典型时段,每个时段各配一组故障事件,评估规模会从几万次优化骤降到几百次,结果仍然能反映负荷高峰时故障和低谷时故障的显著差异。这个“时空双维度削减”是复现工作里性价比最高的优化,没有之一。

4.4 负荷曲线与用户参数的挂接

可靠性指标最终要落到“用户”身上,所以负荷建模不能只给功率。我在数据表里对每个负荷点维护四列信息:有功负荷基数、无功负荷基数、接入用户数、负荷类型。时段系数用一个数组表示,峰荷时段系数1.0、腰荷0.7、谷荷0.4,负荷点的实际功率等于基数乘以对应时段系数。

用户数和功率是完全不同的口径。一个工业园负荷点可能只算一个用户但功率很大,一个居民区负荷点可能有500个用户但单户功率很小。SAIDI的统计强烈依赖用户数的准确挂接,这也是2.3节口径问题在场景构建层面的延伸。我建议在数据准备阶段就把用户数和功率分开维护,后续任何指标计算都不会因为数据混用而出错。

5. Matlab代码骨架:YALMIP建模、求解与指标汇总

5.1 输入数据的组织方式

Matlab里做这类优化,我习惯用结构体组织系统数据,而不是散落在工作区里的一堆命名变量。这样一个33节点测试系统的输入结构大致如下:

sys.n_bus = 33; sys.n_br = 32; sys.bus = struct('id', [], 'type', [], 'Vmin', 0.95, 'Vmax', 1.05); sys.br = struct('from', [], 'to', [], 'r', [], 'x', [], ... 'rate', [], 'lambda', [], 'r_repair', []); sys.load = struct('bus', [], 'P', [], 'Q', [], 'users', [], 'type', []);

每条支路的from和to表示连接的节点编号,r和x是阻抗,rate是载流量,lambda和r_repair就是4.1节里的故障率和修复时间。负荷点通过bus字段挂在节点上,P、Q是峰值负荷,users是用户数。这样的结构在YALMIP建模时索引非常顺,后期做指标汇总也不会搞混字段。

5.2 YALMIP建模核心代码

建模层我统一用YALMIP,底层求解器选一个商用MILP求解器,机器上装好后调用接口即可。安装配置网上资料很多,这里直接给出核心建模片段,注意代码是结构示意,实际用的时候要按YALMIP索引习惯逐条展开:

s_br = binvar(sys.n_br, 1, 'full'); % 支路闭合状态 u_load = binvar(sys.n_load, 1, 'full'); % 负荷供电状态 P = sdpvar(sys.n_br, 1, 'full'); % 支路有功 Q = sdpvar(sys.n_br, 1, 'full'); % 支路无功 U2 = sdpvar(sys.n_bus, 1, 'full'); % 节点电压平方 vf = sdpvar(sys.n_br, 1, 'full'); % 虚拟流 Constraints = []; M_vf = 1e5; Constraints = [Constraints, vf <= s_br * M_vf]; for k = 2 : sys.n_bus sel = find((sys.br.from == k) | (sys.br.to == k)); % 示意 Constraints = [Constraints, sum(vf(sel)) == 1]; end % DistFlow线性化与支路开断大M约束示意,逐支路展开 % 电压、容量、DG出力等约束同理 Objective = sum(sys.load.P .* (1 - u_load)) * 1e4 ... + sum(abs(s_br - s_br0)) * 10; ops = sdpsettings('solver', 'mosek-or-gurobi', 'verbose', 0); optimize(Constraints, Objective, ops);

建模顺序我习惯先写目标函数再写约束。目标函数能帮助我在写约束时反复确认决策变量是否缺漏,哪个变量没进目标函数,常常就是约束漏掉的线索。s_br0是故障前的支路状态向量,这一项统计开关操作次数。

5.3 求解结果到可靠性指标的转换

优化求解完成后,u_load变量里保存的是该场景下保持供电的负荷点集合。指标汇总脚本的核心逻辑如下:

N_loss = sum(sys.load.users .* (1 - value(u_load))); P_loss = sum(sys.load.P .* (1 - value(u_load))); SAIFI = SAIFI + lambda_s * N_loss / N_total; SAIDI = SAIDI + lambda_s * r_repair_s * N_loss / N_total; ENS = ENS + lambda_s * P_loss * r_repair_s / 1000; % MWh/年

这里要特别提醒一个容易搞反的地方:SAIFI的分子是“停电用户次数”,一个用户一年里经历几次停电就计几次;SAIDI分子的单位是“停电用户小时”,要用N_loss乘以r_repair才是停电用户小时。我第一版把SAIDI的公式写成了单纯N_loss乘以r_repair,忘记乘故障频率lambda_s,结果指标大了上千倍,一眼就能看出不合理。

5.4 求解速度优化的几个实用技巧

33节点系统跑单场景优化,几十毫秒到几百毫秒就能出解,几十个场景的总评估也不慢。但做N-2评估或者把网络规模扩大到几百个节点时,速度立刻变成瓶颈。我试过几招都有效。

第一招是热启动。把前一个场景的开关状态解作为下一个场景的初始值,传给求解器的start参数,整数变量的预判准确度会明显提高,整体能省30%到50%的时间。故障场景变化较大时热启动可能起反作用,需要设置一个可接受的MIP Gap后重置初值。

第二招是并行。Matlab的parfor把每个故障场景的优化求解分发到多个工作进程,接近线性加速。唯一要处理好的是输出结果的有序归并,以及保证每个worker的随机数种子互不干扰。

第三招是约束预简化。部分场景里,远离故障区域的支路状态可以先锁定,比如完全孤立的末梢支路,没有联络线转供时状态根本不会变。把这类变量固定后,二进制变量数显著下降,求解速度立刻上来。这一步需要预先对网络拓扑做连通性分析,实现起来不复杂,收益非常可观。

6. 复现验证与最容易翻车的四个细节

6.1 绿灯亮不代表模型对:验证必须先于信任

优化模型有个特点:只要约束写得不冲突,求解器总能给一个解,但解的质量和物理合理性完全取决于约束是否完整。求解器状态返回Success,只能说明数学问题被解决了,物理上站不站得住脚,必须靠额外手段验证。

我复现时给自己定了一条规矩:任何一组新算例,先过三轮验证再谈结果。第一轮是单场景人工复算,挑一个只有三四条支路的小网络,手动枚举所有开关组合,确认优化解确实是人工枚举中的最优解。第二轮是标准算例对照,在33节点测试系统上把模型退化成“无DG、单故障、固定恢复规则”模式,与经典FMEA枚举结果对比,SAIFI和SAIDI相对偏差压到1%以内才算过关。第三轮是蒙特卡洛统计对照,用同一网络、同样参数做序贯蒙特卡洛模拟,两种方法的ENS应在5%左右统计误差范围内吻合。对不上就先怀疑场景削减误差,再怀疑潮流线性化精度。

6.2 最容易翻车的第一个坑:约束出了环网

拓扑约束的原理在3.2节讲过,但我在调试时发现,约束写法上有个很隐蔽的bug:如果对每个非电源节点只约束“出虚拟流之和等于1”,却忘了约束虚拟流与支路状态绑定,断开支路依然可能在虚拟流里有值,拓扑约束形同虚设。

我的排查经验是,约束建立完成后单独把该场景的支路状态解和虚拟流解提取出来,画成连通图,人眼扫一遍有没有环。后来我把这套“拓扑合法性检查”脚本固化成了固定模块,每次求解完自动跑一遍,避免纯肉眼的疏漏。

6.3 最容易翻车的第二个坑:Big-M取值不合理

Big-M在潮流归零和虚拟流约束中都要用,它的取值直接决定求解器数值稳定性。取小了,约束其实没有真正生效,故障支路还残存微小功率,最优解可能偏向一个不切实际的恢复方案。取大了,求解器内部预求解阶段会因数值差异过大产生数值噪声,表现为同样的模型偶尔解出不同结果,甚至报数值错误。

我的经验值前面提过:虚拟流用1e5,潮流功率用全网最大可转供负荷的1.5倍,电流平方用载流量平方乘一个裕度系数。实际项目里要根据系统量纲微调,换测试系统后重新检查这类参数,不能一套值走天下。

6.4 最容易翻车的第三个坑:用户数与功率口径混用

这个坑在2.3节和4.4节都提过,但每次复现总是有人踩,值得单独再强调。可靠性指标里SAIFI、SAIDI、CAIDI的分母都是用户数,而计算时用负荷点数做分母,会得到失真指标。

一个典型的错误是:33节点系统有32个负荷点,于是直接除以32。如果有的节点挂1000户、有的节点挂5户,除以32算出来的SAIFI和真实值完全对不上。正确做法是每个负荷点独立设置用户数参数,所有节点用户数求和得到总用户数,统计时严格按用户数加权。这个字段在数据准备阶段就建好,后面所有指标计算都不会出问题。

6.5 最容易翻车的第四个坑:孤岛场景被潮流约束默默抹掉

含DG的网络里,故障发生后DG可能带孤岛持续供电,这是优化模型相比传统方法的亮点。但如果潮流约束的参考电压只设在主变电站一侧,孤岛部分失去参考节点,求解器可能直接把孤岛解算成失负荷,可靠性指标被误伤。

我的处理办法是在模型里加虚拟平衡节点机制:提前识别每个可能孤岛的区域,给该区域设置一个可选的参考电压源,并在目标函数里给“使用孤岛模式”一个极小惩罚。这个机制在双故障评估中尤其重要,很多时候正是联络线和孤岛配合,才能把失负荷压到接近零。

这几轮复现下来,我最大的体会是:优化模型做配电网可靠性评估,门槛不在数学公式有多深,而是有没有把“故障后恢复”这件事涉及的所有物理约束翻译清楚。模型漏一条电压约束,求解器就还给你一个看似最优、实则危险的方案;用户数口径错一位,SAIDI就离谱到没法向任何人解释。

如果你是刚接触这个方向,建议先在含DG和联络线的33节点系统上把单故障场景跑通,再逐步扩展到N-2和场景削减。跑通之后再回头看顶刊论文里的数学符号,你会发现自己已经能看懂每一行约束背后的工程含义了。最后提醒一句,优化模型只是一个评估器,工程判断和现场数据质量,才是可靠性结论真正的根。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进