
简介一份交直流混联电力系统领域的专业参考文献适合电力系统运行分析、调度优化方向的研究人员和工程技术人员。内容围绕大规模‘西电东送’‘北电南送’背景下交直流混联网络的两个核心问题展开潮流计算与安全约束机组组合。潮流部分重点剖析统一迭代法与交替迭代法的原理、收敛性缺陷及改进手段如简化雅可比矩阵、结合快速解耦法等机组组合部分则引入Benders分解、分层抽样与场景修正策略为解决直流线路接入后的调度难题提供思路。包体为1个PDF文件大小约2.13MB属于轻量型文献资源。目前已有113人学习浏览适用于需要快速理解交直流系统建模、算法选型及论文写作参考的电力专业读者亦可辅助相关课题的文献调研与初步技术选型。1. 交直流混联电力系统潮流计算与机组组合换流站让一切都变成“阴阳两面”一个电力系统里同时存在交流和直流输电线路最直接的变化就是潮流计算和机组组合都不再是“交流那一套”能单独收场的了。以前算交流潮流节点分PQ、PV、平衡三类牛顿-拉夫逊法迭代到残差收敛就完事现在多了直流线路和换流站等于在电网模型里嵌了一套“异质元件”——换流站既能整流也能逆变一条直流线路功率方向可控但代价是引入了直流电压、有功指令、下垂系数、无功控制模式这些额外变量并且交流侧和直流侧在换流站处耦合在一起不拆开算不行硬合在一起算又容易跑飞。交直流混联系统里做机组组合痛点更直接传统机组组合只看交流潮流约束最多加个直流断面限值但有了VSC-HVDC之后换流站的功率分配本身就是决策变量——同一座换流站有功怎么分、直流电压谁维持、无功要不要参与交流电压调节都直接影响联络线功率和网损。如果你只是把直流通道等效成一条“比交流线容量大一点的交流线”来参与机组组合那么结果往往是调度计划在交流校核下没错但换流站的实际运行点在直流网络上根本走不通。本文就按“建模→潮流求解→机组组合→避坑→验证”这条路把交直流混联系统里的这两个问题讲透适合电网调度、规划、新能源并网研究方向的从业者也适合刚接触柔性直流输电的在校研究生照着复现。2. 交直流混联系统建模换流站稳态方程与交直流之间怎么“对话”2.1 VSC-HVDC换流站的稳态模型一套方程管住整流、逆变和无功VSC-HVDC换流站的稳态模型核心是解释清楚换流站和交流电网之间交换的有功功率$P_s$、无功功率$Q_s$与直流侧电压$U_{dc}$、直流电流$I_{dc}$是怎么通过同一个物理元件建立关系的。工程上最常用的是所谓的“理想变压器等效阻抗”模型换流站交流侧母线电压$U_s$经过换流变压器和相电抗器之后在换流桥侧得到一个幅值相位都可控的电压$U_c$两者之间的阻抗为$Z R_c jX_c$。于是有功和无功的交换关系就是经典的传输功率方程$$P_s \frac{U_s U_c}{X_c} \sin\delta, \qquad Q_s \frac{U_s^2 - U_s U_c \cos\delta}{X_c}$$其中$\delta$是$U_s$和$U_c$之间的相位差。这个方程看着眼熟但关键区别在于$U_c$的幅值和相位在VSC里是可以通过PWM调制控制的所以$P_s$和$Q_s$是四个独立可控的量——这正是VSC-HVDC比传统LCC-HVDC灵活的地方。直流侧电压和换流站有功之间的关系通过功率守恒约束住$U_{dc} \cdot I_{dc} P_s - P_{loss}$而$P_{loss}$通常用换流站的损耗特性曲线拟合常见做法是用一个二次函数近似工程上也有直接取额定容量的1%1.5%作固定损耗简化处理。直流侧网络本身在稳态下是一组线性电阻网络方程每一条直流线路等效成串联电阻$R_{dc}$可能带有直流电抗器电抗节点电压满足$I_{dc} G_{dc} U_{dc}$其中$G_{dc}$是直流网络的节点电导矩阵。这里要注意一个差异交流节点潮流方程是非线性的直流节点方程是线性的所以在交直流交替迭代法里直流部分的求解速度非常快真正拖慢收敛的是交流侧和交直流接口的匹配。2.2 交直流交替迭代法与统一迭代法两套思路的取舍交直流潮流计算按求解策略可以分成两大类交替迭代法和统一迭代法。交替迭代法的逻辑很直观——先假定直流侧变量已知把换流站等效成交流节点上的PQ或PV注入做一次交流潮流然后用算出的交流节点电压和功率反推直流网络解再把直流解代入换流站功率重新做交流潮流如此反复直到交直流接口功率差小于给定阈值。统一迭代法则把交流节点方程、直流节点方程、换流站方程全部非线性方程联立起来用牛顿-拉夫逊法整体迭代求解状态变量包含交流节点电压幅值/相角、直流节点电压、换流站有功/无功控制变量。两种方法的取舍核心在于交替迭代法程序结构清晰、模块化好交流部分可以直接复用现成的交流潮流程序适合工程上快速改造但弱耦合特性决定了它在中重负荷场景下可能收敛慢甚至震荡。统一迭代法收敛性更稳但对初值极其敏感而且要对雅可比矩阵做大幅扩展——多一座换流站雅可比矩阵维度就增加若干个变量代码复杂度不是一个量级。我个人的工程习惯是第一步用交替迭代法跑通功能确认交直流接口功率匹配逻辑没问题第二步如果发现某些运行点不收敛再考虑切统一迭代法并给换流站变量设定合理的初值——这个初值来源就是交流潮流计算时换流站作为一种“特殊负荷”的近似解。3. 潮流计算求解流程用Python在18节点交直流电网上跑通3.1 构建交直流混合电网在pandapower中把VSC-HVDC建模成可控电源现在常见的开源工具里pandapower等工具对常规交流和直流变电站有一定的支持能力但对多端柔性直流网络的支持仍有限因此工程上更常见的做法是用Python的pandapower或matpower搭建交流电网直流网络用自定义代码耦合进去。下面这个例子展示的是用pandapower搭建一个混联网络再用交替迭代法把直流部分嵌进去的核心思路。先建交流部分import pandapower as pp import numpy as np # 创建一个18节点的交流电网骨架 net pp.create_empty_network(sn_mva100.0) # 母线电压等级220kV交流网络 for bus_id in range(18): pp.create_bus(net, vn_kv220.0, namefbus_{bus_id}) # 发电机节点(假设交流网内有两个主力电厂) pp.create_ext_grid(net, bus0, vm_pu1.02, va_degree0.0, nameslack) pp.create_gen(net, bus3, p_mw180.0, vm_pu1.01, namegen_1) # 负荷节点与负荷大小 loads {1: 75.0, 5: 120.0, 8: 90.0, 12: 65.0, 15: 80.0} for bus, p in loads.items(): pp.create_load(net, busbus, p_mwp, q_mvarp * 0.3) # 交流线路(示例接线双环网部分互联) line_pairs [(0, 1, 60.0), (1, 2, 45.0), (2, 5, 55.0), (5, 8, 40.0), (8, 12, 60.0), (12, 15, 50.0), (0, 3, 30.0), (3, 6, 40.0), (6, 9, 35.0), (9, 13, 45.0), (13, 16, 40.0), (16, 17, 25.0)] for f, t, length in line_pairs: pp.create_line_from_parameters( net, from_busf, to_bust, length_kmlength, r_ohm_per_km0.08, x_ohm_per_km0.4, c_nf_per_km12.0, max_i_ka1.2, namefline_{f}_{t} ) # 变压器(220kV-110kV负荷侧降压) pp.create_transformer_from_parameters( net, hv_bus8, lv_bus10, sn_mva100.0, vn_hv_kv220.0, vn_lv_kv110.0, vkr_percent0.5, vk_percent12.0, pfe_kw50.0, i0_percent0.2 )这段代码的核心逻辑是先把交流网络完整建好包括平衡节点slack、发电机节点PV、PQ型负荷节点。注意我把平衡节点设在0号母线而不是发电机所在的3号母线——这是因为在交直流混联系统里换流站往往承担部分功率输送交流侧的平衡节点最好留在主力电厂附近给直流部分留出功率调节空间。线路参数用的是标幺化之前的欧姆/公里和纳法/公里pandapower内部会自行转换标幺值sn_mva100定义了整个网络计算的基准功率。3.2 设置换流站控制模式定有功、定电压和下垂控制直流网络涉及两个VSC换流站一个在8号母线整流侧一个在13号母线逆变侧。整流侧采用定有功定无功控制向直流网络输入800MW逆变侧采用定直流电压定无功控制条件是直流侧电压稳定在400kV附近。下面是直流网络数据和换流站接口代码# 直流系统参数 R_dc_line 0.01 # 直流线路电阻(标幺值, 基准400kV/1000MW) V_dc_rated 400.0 # 直流额定电压 kV P_ref_rect 800.0 # 整流侧有功 MW Q_ref_rect 50.0 # 整流侧无功 MVar (可参与交流电压调节) V_dc_ref_inv 400.0 # 逆变侧直流电压参考值 kV Q_ref_inv -30.0 # 逆变侧无功 MVar # 把换流站等效为交流节点上的可控注入 # 整流侧(PQ控制 有功注入)在交流潮流中先当PQ节点, P 800, Q 50 pp.create_load(net, bus8, p_mw0.0, q_mvar0.0, namevsc_rect_dummy) # 逆变侧(定直流电压控制)交流侧等效为PQ节点, P -P_inv(由直流网络决定), Q -30 # 直流网络节点电导: 整流侧节点r, 逆变侧节点i G_dc np.array([[1/R_dc_line, -1/R_dc_line], [-1/R_dc_line, 1/R_dc_line]]) # 只含一条直流线, 2节点 # 交替迭代法中的残差记录 tolerance 1e-4 # 有功残差阈值 (MW) max_iter 20 # 最大交替迭代次数控制模式的选择直接决定潮流计算的数学性质。定有功定无功控制PQ控制在交流侧就是一个普通的PQ节点不增加额外变量但这样直流电压就没人管了所以至少要有一个换流站切换成定直流电压控制也叫Vdc控制。工程实践中多端直流系统往往不止一个换流站承担电压支撑常见方案是下垂控制每个换流站的有功指令根据直流电压偏差自动调节$P P_{ref} - K_{droop} \cdot (V_{dc} - V_{dc,ref})$。下垂系数的取值我一般取额定功率的10%对应额定电压的1%这个比例在大多数VSC-HVDC工程里是一个经验上比较稳的范围——下垂系数太大电压偏差小但功率分配不均太小电压容易跑偏。3.3 交替迭代求解回路收敛判据与初值设定下面这段代码是交替迭代的核心循环。每次迭代分三步先在给定换流站注入的情况下算交流潮流再根据交流潮流结果更新换流站的直流侧有功然后解直流网络方程更新逆变侧注入最后检查交直流接口的功率匹配残差达到阈值就停。import pandapower as pp def ac_dc_alternating_iteration(net, G_dc, R_dc_line, p_ref_rect, v_dc_ref_inv, max_iter20, tol1e-4): P_inv 0.0 # 逆变侧有功的初值 V_dc np.array([V_dc_rated, V_dc_rated]) # 直流电压初值 for it in range(max_iter): # --- 步骤1: 更新换流站在交流侧的等效注入, 跑一遍AC潮流 --- # 整流侧: 定P控制, 注入800MW pp.update_element(net, load, net.load.index[net.load.name vsc_rect_dummy], p_mw-p_ref_rect, q_mvar-Q_ref_rect) # 逆变侧: 暂定P为上一轮的P_inv, Q为定值 # (实际工程中用一个可控元件实现) # 运行交流潮流(牛顿-拉夫逊法) try: pp.runpp(net, algorithmnr, tolerance_mva1e-6) except Exception as e: raise RuntimeError(f第{it1}次交流潮流不收敛: {e}) # --- 步骤2: 取交流侧换流站母线电压幅值, 换算出换流站直流侧功率 --- V_ac_rect net.res_bus.vm_pu.loc[8] * 220.0 # 整流侧交流线电压(kV) V_ac_inv net.res_bus.vm_pu.loc[13] * 220.0 # 换流站损耗简化为额定功率的1% p_loss_rect 0.01 * abs(P_ref_rect) p_loss_inv 0.01 * abs(P_inv) # --- 步骤3: 解直流网络方程 --- # 直流节点功率平衡: 整流侧P_dc_r P_ref_rect - p_loss_rect P_dc_r P_ref_rect - p_loss_rect # 直流电流已知: I_dc P_dc_r / V_dc[0] I_dc P_dc_r * 1000 / V_dc[0] # 单位换为MW/kV kA # 直流线路压降 V_dc[1] V_dc[0] - I_dc * R_dc_line * V_dc_rated # 逆变侧直流功率 V_dc[1] * I_dc P_dc_i V_dc[1] * I_dc / 1000 # 转回MW P_inv_new P_dc_i - p_loss_inv # --- 步骤4: 收敛判断 --- residual abs(P_inv_new - P_inv) print(f迭代 {it1}: P_inv {P_inv_new:.2f} MW, fV_dc_inv {V_dc[1]:.2f} kV, 残差 {residual:.4f}) if residual tol: return it1, V_dc, P_inv_new P_inv P_inv_new raise RuntimeError(f达到最大迭代次数 {max_iter}, 未收敛) n_iter, V_dc_final, P_inv_final ac_dc_alternating_iteration( net, G_dc, R_dc_line, P_ref_rect, V_dc_ref_inv ) print(f收敛于 {n_iter} 次迭代, 逆变侧注入交流网功率 {P_inv_final:.2f} MW)这段代码里有几个关键点值得注意。第一P_inv的初值设成0通常没问题但如果直流网络负载很重传输功率接近换流站额定值初值为0会导致前几次迭代的交流潮流严重偏离真实运行点甚至让交流潮流本身不收敛。我有一次调试一条±500kV/3000MW的直流通道时就是因为初值设0导致连续7次交流潮流发散。解决办法是先把直流线路当作一条理想输电支路零损耗用一个直流潮流近似算出P_inv初值再进入交替迭代。第二收敛判据用MW绝对残差而不是相对残差是因为在混联系统里换流站功率动辄几百MW相对残差阈值太小会无意义地拉长迭代。4. 机组组合如何与交直流潮流衔接MILP模型与双闭环反馈4.1 机组组合的MILP标准形式从最小启停时间到启动成本机组组合问题本质上是一个大规模混合整数规划MILP。目标函数是最小化一个调度周期通常是24小时内所有机组的燃料成本和启动成本之和。决策变量包含三类每个时段每台机组的启停状态$u_{i,t}$0/1整数、机组出力$p_{i,t}$连续、以及启动变量$s_{i,t}$表示机组从停运转入运行。约束包括系统功率平衡、每台机组的出力上下限、爬坡速率限制、最小开机/停机时间、旋转备用容量。一个典型的24时段机组组合模型如下from pulp import LpProblem, LpMinimize, LpVariable, LpStatus, lpSum, value # 调度参数 T 24 # 调度时段数(小时) gen_data [ {name: G1, p_min: 150, p_max: 500, ramp: 120, cost: 0.08, start_cost: 15000, min_up: 4, min_down: 3}, {name: G2, p_min: 80, p_max: 300, ramp: 60, cost: 0.12, start_cost: 8000, min_up: 3, min_down: 2}, {name: G3, p_min: 50, p_max: 200, ramp: 40, cost: 0.18, start_cost: 4000, min_up: 2, min_down: 2}, ] NG len(gen_data) # 负荷曲线(可以换成实际预测数据) load_profile [280, 270, 260, 255, 260, 290, 350, 420, 480, 520, 550, 560, 545, 530, 520, 510, 505, 500, 490, 480, 470, 430, 370, 300] # 直流系统对机组组合的约束直流通道输送计划(取决于换流站控制) P_dc_schedule [150, 150, 148, 145, 150, 155, 160, 165, 170, 175, 178, 180, 177, 175, 172, 170, 168, 165, 162, 158, 155, 152, 150, 148] # 定义MILP模型 model LpProblem(Unit_Commitment_ACDC, LpMinimize) # 变量 u {(i, t): LpVariable(fu_{i}_{t}, catBinary) for i in range(NG) for t in range(T)} p {(i, t): LpVariable(fp_{i}_{t}, lowBoundgen_data[i][p_min], upBoundgen_data[i][p_max]) for i in range(NG) for t in range(T)} s {(i, t): LpVariable(fs_{i}_{t}, catBinary) for i in range(NG) for t in range(T)} # 目标函数: 燃料成本(线性近似) 启动成本 model lpSum( gen_data[i][cost] * p[i, t] * 1000 gen_data[i][start_cost] * s[i, t] for i in range(NG) for t in range(T) )MILP模型中目标函数的形式决定了解的质量。实际发电机的煤耗曲线是二次函数$a bP cP^2$但在MILP里直接放二次项会让求解器用MIQP混合整数二次规划速度明显变慢。工程上最常见的简化是分段线性化——把出力范围切成35段每段用一条线性成本线逼近。切分的精度直接影响结果的工程可用性我常用的做法是最小出力到最大出力之间按百分位切5段二次项误差控制在1%以内。启动成本本身的取值也有讲究热启动和冷启动的成本能差35倍取决于停机时长这里的s_i,t是一个简化版本。更精细的模型会定义热启动变量和冷启动变量分别处理。4.2 把直流网络约束写入机组组合断面限值不只是“一条线”现在关键来了交直流混联系统的机组组合怎么把直流结构的约束加进去如果只把直流线路当作一条最大传输功率固定的交流等值线那约束写起来非常小就是每一时段$-P_{dc,max} \leq P_{dc,t} \leq P_{dc,max}$。但这样忽略了直流网络的一个重要特性——换流站有功分配受直流电压约束。一个三端直流系统里某一个换流站的有功指令变了其他换流站的功率会自动根据电压-功率特性重新分配这种耦合关系不是一条简单不等式能表达完整的。工程上常用的折中方案分两个层级。第一层在机组组合的MILP里把每个直流接口的输送功率作为连续变量$P_{dc,k,t}$并附加约束$$0 \leq P_{dc,k,t} \leq P_{conv,rated,k} \cdot x_{k,t}$$$$-R_{dc,limit} \leq \sum_{k \in \Omega_{dc}} P_{dc,k,t} - \sum_{k \in \Omega_{ac}} P_{ac,k,t} \leq R_{dc,limit}$$这里的第二式是交直流断面约束直流走廊总输送功率与交流走廊总输送功率之间的差值被限制在$R_{dc,limit}$以内。这个约束的价值在于它能把换流站功率决策和机组出力决策耦合在一起。第二层机组组合求解完成后把出来的各换流站功率序列作为已知量回代到交直流潮流里做校核——如果发现直流电压越限或换流站运行点不合理就把对应的约束以割平面cutting plane的形式加回MILP重新求解。这种“先松弛、后校核、再加约束”的迭代是一个典型的“安全约束机组组合”SCUC框架。下面是把直流约束加入MILP的代码# 直流走廊总功率与交流替代通道约束 P_dc_var {t: LpVariable(fP_dc_{t}, lowBound0, upBound200) for t in range(T)} P_ac_alt {t: LpVariable(fP_ac_alt_{t}, lowBound0, upBound150) for t in range(T)} for t in range(T): # 每一个时段, 直流输送功率 交流替代通道功率 该断面需求 model P_dc_var[t] P_ac_alt[t] load_profile[t] # 机组组合功率平衡约束: 总出力 负荷 直流外送功率 model lpSum(p[i, t] for i in range(NG)) \ load_profile[t] P_dc_var[t] * 0.02 # 最小启停时间约束(需要引入前序状态变量, 这里用简化写法) # 最少运行时间: 若在t时段开机, 则t到tmin_up-1时段必须开机 for i in range(NG): min_up gen_data[i][min_up] for t in range(T - min_up 1): model lpSum(u[i, k] for k in range(t, t min_up)) \ min_up * s[i, t] # 求解 status model.solve() print(求解状态:, LpStatus[status])4.3 潮流校验回代闭环为什么不直接全耦合读者可能会问既然最终要的调度计划必须过潮流校验为什么不直接在MILP里把交直流潮流方程全加进去答案是规模。一个含20台机组、24时段、4个换流站的系统如果把潮流方程线性化并全部嵌入MILP变量数轻松突破10万求解器可能要跑几个小时而把机组组合和潮流校核分开机组组合算一遍可能只要几十秒潮流校核每次只要几秒即使迭代58轮总时长也可控在10分钟级别。所以工程界的主流做法是“分解协调”而不是一次求全解。这里想多说一句潮流校核回代闭环中最常见的“假收敛”发生在换流站的有功指令刚好落在直流网络可行域边界时——比如某换流站有功指令是900MW但直流电压已经漂到1.06pu潮流计算虽然能收敛但结果已经不满足电压约束。所以回代校验不仅要看潮流是否收敛还要逐站检查直流电压、换流站无功功率、直流线路电流是否在设计范围内。我的一般做法是在校验脚本里设置一个“危险指标”清单任何一项越限就断定为校验失败而不是只看潮流计算输出码。5. 避坑指南交直流潮流计算与机组组合里常见的“玄学”翻车现场5.1 换流站节点类型设置错误导致雅可比矩阵奇异现象潮流计算在某个迭代步突然报“singular matrix”或“maximum load flow iteration exceeded”但交流部分单独算怎么跑都能收敛。原因换流站节点类型设置冲突——整流侧设了定有功控制的同时又设了定直流电压控制相当于在同一个节点上同时绑定了两个有功变量约束无解还有一种情况是直流网络里两个换流站都设了定有功控制没有换流站承担直流电压调节直流电压变成悬空变量。解决检查所有换流站的控制模式配置确保直流网络中有且至少有一个换流站设为定直流电压控制或下垂控制新建模型时先用最简单的两端拓扑一端定P、一端定Vdc跑通再扩展控制策略。5.2 机组组合里的直流功率与潮流校核里的换流站功率“对不上账”现象机组组合给出的直流输送计划在潮流校核中回带后发现换流站母线电压偏差达到8%以上换流站无功功率越限。原因机组组合模型里没有计及换流站的无功损耗。VSC换流站在输送有功的同时本身要消耗一定的无功功率来维持换流桥的交流电压矢量这个无功消耗量大约等于输送有功的3%8%具体数值取决于脉宽调制系数。如果机组组合里把换流站当成纯有功元件那么交流电网里每个换流站节点少了一笔无功负荷潮流校核时这些无功就会由附近发电机硬扛导致电压偏移。解决在机组组合模型里给每个换流站节点预置固定无功负荷按额定功率的5%估算校核时再用精确值修正多端直流系统里还要注意换流站运行模式不同功率因数差异明显不要把无功预设成一刀切。5.3 24时段机组组合里机组功率跨时段跳变导致潮流校验不收敛现象机组组合结果通过所有约束但把24时段逐一回代到交直流潮流里发现某些时段潮流不收敛。原因机组组合的爬坡约束是分时段耦合的即$|p_{i,t} - p_{i,t-1}| \leq R_i$但MILP求解器在靠近可行域边界过渡时会倾向把机组安排在爬坡速率刚好等于限制值的状态——这种边界状态在数学上可行在物理上前一个时段和后一个时段的网络潮流差异很大特别是如果该时段恰好伴随直流功率大范围调整潮流初值用上一时段的收敛结果就容易发散。解决对机组组合结果做“爬坡后处理”将24时段功率序列做平滑处理比如限制相邻时段功率差不超过爬坡限制的85%或者在潮流校核时用上一时段潮流解做初值而不是从平启动flat start算起。5.4 直流网络初值设零、直流电压跑偏潮流“恶性循环”往返震荡现象交替迭代法在前几次迭代中残差不减反增呈现周期性震荡最后到最大迭代次数自动退出。原因直流电压初值设成0或远离额定值导致第一次迭代后换流站的直流功率计算结果异常回代到交流潮流时产生一个极端的功率注入使交流节点电压偏离严重下一轮直流方程又在错误的电压下算功率……形成正反馈。解决两个初值技巧。第一直流电压初值设成额定值直流电流初值可以用额定功率除以额定电压提前估算第二为交替迭代加上动态阻尼即每次迭代的换流站功率更新用$P_{new} \alpha P_{calc} (1 - \alpha) P_{old}$阻尼系数$\alpha$取0.30.5可以显著抑制震荡。这个阻尼方法是我在调试一条两端±320kV直流线时摸索出来的对弱交流系统短路比SCR低于3特别有效。6. 验证方法与工程习惯怎么证明算出来的是“能用的结果”6.1 24时段回代验证让结果“自证清白”机组组合结果出来后最该做的一项工作是把24时段的调度计划逐时段送回交直流潮流程序重新计算。这不是走过场而是要检查三个量每个时段潮流是否收敛、每个换流站的直流电压是否在0.951.05pu内、交流关键断面载流量是否超限。代码实现很直接——循环24个时段把机组组合给出的机组出力、换流站有功指令分别下发到潮流模型里跑完后收集指标def verify_uc_schedule(uc_result, net_template, dc_model): uc_result: 24时段的机组出力直流输送功率计划 violations [] net deepcopy(net_template) for t in range(24): # 更新负荷和机组出力 for i, gen in enumerate(gen_data): pp.update_element(net, gen, i, p_mwuc_result[t][gen]) # 更新换流站有功指令 update_vsc_setpoints(dc_model, uc_result[t][p_dc]) # 求解 try: result solve_acdc(net, dc_model) except ConvergenceError: violations.append((t, 潮流不收敛)) continue # 检查直流电压是否越限 for vsc in dc_model.vsc_stations: v_pu result.dc_voltage(vsc) / vsc.v_dc_rated if v_pu 0.95 or v_pu 1.05: violations.append((t, f{vsc.name}直流电压越限 v_pu{v_pu:.3f})) return violations这个验证的价值在于它能抓到MILP里线性化约束无法表达的物理越限。我有一次跑出来的机组组合结果22时段全部通过交流校核但只有1时段因为直流功率恰好顶到换流站容量上限导致直流电压掉到0.93pu——如果不做24时段回代这个隐患根本看不出来。回代发现的问题要么在MILP里加割平面约束要么直接在调度计划里限功率两者必居其一。6.2 用灵敏度检验断面约束的松紧程度验证完成后还可以进一步用灵敏度分析判断直流断面约束在哪些时段是“真约束”还是“死约束”。具体手法是在机组组合模型里把某时段直流输送上限提高10MW重新求解观察目标函数总成本的变化量。如果目标函数变化很小100元说明这个断面约束在对应时段没有卡住经济调度可以适当放松如果目标函数变化显著1000元说明这是关键断面值得在运行规程里重点监视。这个灵敏度值同时也可以指导调度员理解直流通道容量对经济性的影响——比如发现某个时段直流容量每增加10MW可节省成本800元那就说明该时段电网“缺直流”是规划层面值得关注的信号。6.3 数值健康度检查与长期习惯最后一件事是每次计算完成后别急着抄数出报告先看几个数值健康度指标。第一潮流计算迭代次数——如果交直流潮流稳定在35次收敛说明运行点在可行域内部如果突然跳到10次以上往往意味着换流站有功指令接近直流网络输送极限。第二雅可比矩阵条件数——在统一迭代法里这个指标直接反映方程组的数值稳定性条件数超过10^12基本就可以认定矩阵接近奇异了。第三直流网络各节点电压之间的偏差——如果同一直流网络里两个节点的电压偏差超过3%说明直流线路压降过大或者负荷分配不均值得排查。做交直流混联系系统计计算这几年我自己养成的最重要习惯是每一个潮流结果送出去之前都会把这个算例的输入参数、控制模式、迭代次数、残差曲线完整存档因为这种系统里的“诡异问题”十有八九是控制模式组合的唯一性与初值敏感性造成的没有当时的环境参数事后排查会耗费大量时间。另一个习惯是给每个换流站设一个独立的“越限阈值表”而不是用一个统一的判断标准——因为整流站和逆变站的无功极限、电压范围往往相差很大。希望这些细碎却实用的经验帮到你让这套计算从“能跑”变成“敢用”。本文还有配套的精品资源点击获取