综合能源配网协调优化运行:气电联合需求响应与MISOCP模型 📅 发布时间:2026/9/20 3:54:01 👁 浏览次数: 干综合能源优化这个方向的朋友对“气电联合需求响应下的综合能源配网系统协调优化运行研究基于凸优化与混合整数二阶锥规划模型”这种题目应该不陌生——标题虽然长但技术路线全写在里面了气电联合需求响应是场景综合能源配网系统是研究对象协调优化运行是最终目标凸优化与混合整数二阶锥规划MISOCP是求解工具。这篇文章就沿着这四个层面展开把我实际做这个方向时踩过的坑、验证过的建模细节、求解器调参的体会都拿出来聊。内容适合正在做综合能源系统优化、气网电网友联建模或者打算用凸优化方法做配网调度研究的同行参考刚入门的人也能借着这条线把“为什么偏偏是二阶锥”“松弛为什么能松”“MISOCP到底难在哪”这几个问题一次弄明白。1. 项目要解决什么问题从气电联合需求响应说起1.1 气电联合需求响应到底在“响应”什么传统需求响应基本只盯着电网削峰填谷、电价引导、可中断负荷这些都是电的维度。但综合能源系统把电、气、热绑在一起之后情况变了很多用户的用能需求在气、电之间是可以替代的燃气锅炉和电锅炉能切换燃气轮机和电储能也能在一定程度上互相补位。所谓气电联合需求响应就是不再把电和气分开调度而是把两套网络里的可调负荷放在同一个优化框架里统一协调。举个最简单的例子一天里电价尖峰时段如果气价相对平稳那部分原本用电驱动的负荷可以转移到燃气侧反过来气网压力偏高、气价低谷时可以通过P2G电转气把多余的电变成天然气储存起来。这种跨网络的柔性调度就是气电联合需求响应的核心价值。相比单一电网的需求响应它多了一个自由度但也多了一堆耦合约束——这正是这个项目要处理的难点。建模时需求响应通常分成两类价格型price-based和激励型incentive-based。价格型负荷对分时电价和气价做弹性响应适合用需求价格弹性矩阵描述激励型则是直接签合同约定可转移量、可削减量以及对应的补偿成本。实际算例里我一般两种都会建但激励型更常用因为它的决策变量清晰、物理意义明确和优化模型的耦合也更直接。需要说明的是这里提到的两类建模方式是行业内做需求响应的常见做法具体参数要根据实际系统来定。1.2 综合能源配网系统协调优化的核心对象这套模型里的“系统”不是简单把电网和气网叠在一起而是要让两者通过耦合设备形成闭环。核心的耦合对象包括三类燃气轮机/热电联产机组气转电或气转电热是气网向电网输出功率的主要通道。电转气设备P2G电网向气网注入天然气相当于把电力系统的富余出力转化为气网的气源。气电混合负荷用户侧可切换的用能设备是需求响应调节的直接抓手。优化目标一般是系统总运行成本最小包括向上级电网购电费用、购气费用、设备启停成本、需求响应补偿成本必要时再叠加碳排放成本或弃风弃光惩罚项。决策变量则覆盖发电出力、气源产气量、网络潮流状态、各节点电压与气压、需求响应调整量以及机组启停等0-1状态变量。最关键的一点在于电网和气网不是独立优化的而是通过耦合设备联立约束、协同求解。单独优化电网可能给出一个让气网节点气压越限的出力方案单独优化气网又可能让配电网电压崩溃。这个项目里的“协调”本质上就是把这些跨网络约束写进同一个数学模型再通过合适的算法求出全局意义上最优、且两个网络都可行的运行方案。2. 数学模型拆解从物理约束到凸表达式2.1 配电网潮流约束与二阶锥松弛配电网通常呈辐射状结构直接解完整交流潮流方程AC power flow是非凸问题求解难度大且容易陷入局部最优。做优化调度时业内最常用的做法是用DistFlow方程描述辐射状配电网的潮流P_j P_i − r_ij·l_ij − p_jQ_j Q_i − x_ij·l_ij − q_jv_j v_i − 2(r_ij·P_ij x_ij·Q_ij) (r_ij² x_ij²)·l_ij其中P、Q是支路有功和无功功率r、x是支路电阻和电抗v是节点电压幅值的平方l是支路电流幅值的平方。这三个方程本身是线性的但潮流物理特性还要求满足等式l_ij (P_ij² Q_ij²) / v_i这个等式是非凸的。凸优化的思路不是直接硬解它而是先把它“松弛”成不等式l_ij ≥ (P_ij² Q_ij²) / v_i因为右侧是凸函数二次型除以变量约束变成“凸函数≤线性变量”的形式恰好可以写成标准的二阶锥约束。这就是配电网二阶锥规划的核心思想。松弛之后的最优解如果恰好让这个不等式取等号就说明松弛是紧的得到的解就是原问题的可行解。实际算例中只要目标函数对网损有惩罚、或者电压约束在边界处起作用的场景绝大多数情况下松弛都能保证紧性这也是DistFlow二阶锥松弛能成为行业标配方法的原因。2.2 天然气网约束与Weymouth方程的凸化处理天然气网的难点在管道稳态方程。天然气在管道中的流量与两端气压的关系工程上通常用Weymouth方程描述f_mn·|f_mn| C_mn²·(π_m² − π_n²)其中f_mn是管道流量π是节点气压C_mn是管道常数与管径、长度、摩擦系数有关。这个方程的非线性体现在左边是带绝对值的二次项导致约束是典型的非凸等式。如果直接放进优化模型就是非凸非线性规划NLP求解全局最优极其困难。Weymouth方程的处理方式有几种实际项目里我经常组合使用固定流向法如果通过管网的物理特征和负荷分布能预先判断每根管道的流向就可以去掉绝对值符号把方程拆成两个不等式再利用凸松弛处理成二阶锥形式。大M二进制变量法流向不确定时引入0-1变量表示流向把Weymouth方程做MCCormick包络或分段线性化。这样模型变成混合整数形式但能处理流向切换的场景。分段线性化把流量-气压差曲线分段逼近误差可以控制在1%~3%以内。气和电有个本质区别电力系统里功率必须时刻平衡但天然气网因为有管道容存linepack可以存在一定程度的“缓冲”所以气网约束在时间维度上比电网更宽容。这既是建模的简化机会也是需要注意的误差来源。2.3 气电耦合设备与需求响应建模耦合设备的模型相对直接主要是能量转换效率和输出范围约束燃气轮机P_gas_turbine η_gt · F_gas_in · HHV出力范围受上下限约束启停用0-1变量控制。P2G设备F_gas_out η_p2g · P_p2g_in同样有输入功率上下限。需求响应资源可转移负荷要满足“总用电量在一个调度周期内不变”的约束只是把部分时段负荷平移到其他时段模型里表现为能量守恒方程可削减负荷则是限制削减比例上限并累加补偿成本。把这几块约束和电网、气网约束全部联立整个问题的雏形就出来了目标函数是二次或线性的约束里既有线性方程、二阶锥松弛还有0-1变量——这就是标准的混合整数二阶锥规划MISOCP。建模到这里算是一个能放进求解器里的完整数学规划模型了。3. 算法选型与求解框架为什么是MISOCP3.1 凸优化与二阶锥规划的基本逻辑做优化的人都知道凸优化之所以受欢迎核心就一条凸问题没有“局部最优”和“全局最优”之分任何一个满足KKT条件的解都是全局最优解。相比之下非凸问题可能有大量局部最优点求解器只能靠启发式搜索碰运气结果好坏看天吃饭。二阶锥规划是凸优化里非常实用的一类。它的目标函数是线性的约束是二阶锥约束形式虽然比线性规划复杂但内点法能在多项式时间内稳定求解。正因为这个特性工程上大量非凸问题都想办法“凸化”能松则松、能替则替把问题转化成SOCP或者MISOCP。本项目选凸优化路线本质上就是用可验证的全局最优性换取一点点建模精度上的损失——而这个损失通常可以通过紧性校验控制在工程可接受范围内。3.2 混合整数变量从哪来MISOCP里的“M”指mixed integer也就是0-1整数变量。前面建模时已经出现了三处燃机和P2G设备的启停状态天然气管道流向选择用大M法时分段线性化时的区间选择变量以及可能的变压器分接头档位整数变量让问题从多项式可解变成NP-hard但现代求解器在分支定界框架下配合割平面和启发式策略对几百个整数变量的中等规模算例还是能接受的。实际经验是整数变量数量控制在500以内、每个节点的SOCP子问题规模不大时Gurobi或CPLEX都能在合理时间内给出最优解或高质量可行解。这里有一个非常实用的判断如果做完凸松弛后发现松驰间隙relaxation gap很小说明整数变量是“好解”的分支定界收敛快如果间隙大就得考虑加有效不等式valid inequalities收紧模型而不是盲目增加求解时间限制。3.3 凸松弛的紧性校验——决定结果可信度的关键松弛方法最大的软肋就在“紧性”两个字。你松弛了约束求出最优解之后必须验证松弛掉的等式到底有没有被满足如果最优解处原来那个非凸等式明显不成立那这个“最优解”在物理上根本不可行结果就是废的。紧性校验的做法很直接把求解结果代回原始非凸等式计算最大违背量。电网上是电流幅值等式气网上是Weymouth方程等式。我习惯设两个阈值硬阈值1e-3标幺值超了就判定松弛不紧软阈值1e-4~1e-5超了但不太多可以接受并做后处理修正。如果发现不紧常见补救手段有两种一是目标函数中加一个很小的网损惩罚项引导松弛尽量取等号二是改用顺序凸规划SCP迭代凸近似逼近原问题。后者收敛慢但精度高适合对结果要求严格的场景。紧性校验这一步经常被人忽略但恰恰是审稿人和工程验收最关心的点不建议省。4. 实操过程与工具链配置4.1 算例系统与参数设置做这类研究算例系统的选择直接决定结果的说服力。我这套模型常用的配置是IEEE 33节点配电网耦合20节点天然气网这是行业内做气电联合系统优化的经典组合。调度周期取24小时时间分辨率1小时如果要做更细致的峰谷分析可以加密到15分钟但求解规模会成倍增长。几个关键参数的参考取值都是我在多次实验中验证过比较合理的参数参考取值说明燃气轮机效率35%~45%不同容量机组差异较大P2G综合效率50%~60%含电解水与甲烷化损耗可转移负荷比例10%~20%占该节点总负荷可削减负荷比例5%~10%超过需要加高额补偿天然气热值9.7~10.5 kWh/m³用于气-电单位换算节点气压下限0.9~1.1倍基准气压标幺化处理单位一致性是建模时最容易翻车的点。电的功率单位是MW气的流量单位是m³/h两者靠热值换算。我刚开始做的时候因为没统一热值算出来的P2G产气量偏差了将近20%排查了半天才发现是单位问题。建议建模初期就把所有参数统一换算成标幺值或同一能量单位体系能少踩很多坑。4.2 建模与求解工具链建模工具我主力用的是MATLABYALMIPGurobi这套组合。YALMIP的语法对科研人员很友好二阶锥约束和整数变量写起来都很直观几行代码就能把前面那堆数学公式变成可求解的模型。给一个简化的框架示例%% 定义决策变量 Pg sdpvar(ngen, T); % 发电机出力 Qg sdpvar(ngen, T); % 无功出力 u binvar(ngen, T); % 启停状态 Pij sdpvar(nbranch, T); % 支路有功 Qij sdpvar(nbranch, T); % 支路无功 vi sdpvar(nbus, T); % 电压幅值平方 lij sdpvar(nbranch, T); % 电流幅值平方 %% 目标函数购电购气需求响应补偿 Objective sum(C_e.*Pe_buy) sum(C_g.*F_gas) sum(C_dr.*P_dr); %% 约束DistFlow SOCP松弛 Constraints []; for t 1:T for k 1:nbranch Constraints [Constraints, lij(k,t) (Pij(k,t)^2 Qij(k,t)^2)/vi(i,t)]; end end %% 求解 ops sdpsettings(solver,gurobi,verbose,2,mipgap,0.001); optimize(Constraints, Objective, ops);如果更习惯Python推荐Pyomo或CVXPY配合Gurobi。CVXPY写凸问题很简洁但对混合整数二阶锥的支持不如Pyomo全面大规模问题我更倾向PyomoGurobi。4.3 求解流程与结果分析要点完整的求解流程我总结成五步建立电网DistFlow松弛约束和气网Weymouth凸化约束所有参数做标幺化。加入耦合设备与需求响应约束形成完整的MISOCP模型。先求解连续松弛版本去掉整数变量确认模型可行、量级合理。恢复整数变量设定适当的MIP Gap一般1e-3提交Gurobi求解。后处理把最优解代回原始非凸等式做紧性校验输出目标函数、各节点电压/气压、DR调整量等结果。结果分析时有一个容易忽略的点不要只盯着总成本看一定要分项拆解——购电成本多少、购气成本多少、补偿成本多少、各类约束的阴影价格对偶变量长什么样。阴影价格往往能反映出系统真正的瓶颈在电网还是气网。有一次我算出来气网节点气压约束的阴影价格特别高顺着查才发现P2G设备容量选小了导致气网在某个时段供气不足。这个问题只从总成本上看根本发现不了。5. 常见问题与排查技巧实录5.1 求解器不收敛怎么排查MISOCP模型最常见的求解失败原因是数值问题。表现就是求解器日志里出现NaN、Infeasible或者分支定界卡在某个节点不动。按我排查的经验按以下顺序检查先查量纲是否统一m³/h和kW混用、标幺值和有名值混用是头号杀手。再查Big-M参数过大或者过小都会导致数值病态。M能取紧就取紧比如管道流量上限根据物理管径估算不要拍脑袋给个10的6次方。然后查变量缩放尽量让所有变量都落在10^-3到10^3的范围内。气压用标幺值功率用p.u.电流和电压取平方值基本能保证数值健康的量级。最后查约束冗余比如同时给了潮流上下界和节点注入上下界可能造成冲突检查是否存在逻辑矛盾的约束。5.2 二阶锥松弛不紧怎么处理前面说到紧性问题。如果校验发现最大违背量超过1e-3先别急着改模型按这个顺序做先检查目标函数是不是缺乏“引导”机制。如果目标里没有网损项模型对l_ij没有最小的倾向松弛就很容易松弛过头。对策是在目标里加一个小惩罚项Objective Objective λ·Σ l_ijλ取值要远小于主目标的量级比如主目标成本是10^4量级λ取0.01~0.1就够否则惩罚项会扭曲原目标。再不行就检查电压幅值约束是不是有裕度。SOCP松弛的紧性本质上依赖于支路电流尽量小而支路电流又和电压分布强相关。适当收紧电压上下限、让系统运行在更“紧张”的状态往往能提升松弛紧性。最后还是不行就上顺序凸规划求解SOCP松弛然后把得到的解作为初值线性化原始非凸等式再次求解迭代3~5次。虽然计算量大但基本能保证收敛到原问题的可行解。5.3 气网模型带来的精度陷阱气网建模的坑比电网多这里单独提三个Weymouth方程的常数C_mn通常与管道内壁粗糙度、天然气温度有关很多人直接用文献默认值但实际系统用久了管道粗糙度会变化C值偏差10%都算正常。建议根据实际管网数据反算C值。天然气的可压缩性导致linepack效应。稳态模型假设流量瞬时平衡忽略了管道储气能力。做24小时调度时如果负荷波动大稳态假设会带来明显误差。更精细的做法是用拟动态模型但求解难度陡增。对一般研究场景稳态模型够用但报告里要说明这个假设。压缩机是气网建模里最容易被简化掉的东西。压缩机站消耗天然气来升压这部分损耗在长距离输气管网里占比可能达到3%~5%。如果系统里含加压站建议至少用线性化的压缩机模型别直接忽略。5.4 关于混合整数规模失控的最后一招当系统规模变大整数变量冲到几千个Gurobi也啃不动的时候别硬扛。我常用的解法是两层优化外层用启发式遗传算法或粒子群搜索0-1变量组合内层对固定的整数变量求解连续SOCP。这种做法不保证全局最优但工程上往往能拿到一个比纯启发式好得多、又比MISOCP快很多的方案。另外如果做日内滚动调度可以把上一时段的整数变量解作为初始热启动传给求解器实测能节省至少30%的分支定界时间效果很稳定。6. 个人体会与扩展方向做这个项目最大的体会是模型比算法更重要。很多人一上来就研究求解技巧结果发现模型本身约束耦合有问题、或者物理建模有硬伤再牛的求解器也救不回来。我现在的习惯是先用尽量小的算例把模型调通确认每个约束的物理意义都对得上再铺开做大规模计算。另外一个心得是紧性校验一定要写进自动化流程里每次求解完自动跑一遍校验脚本输出违背量报告省掉大量手工检查的时间。这套模型后续可以扩展的方向很多。比如把新能源出力和负荷的不确定性加进来做成鲁棒优化或分布鲁棒优化国际上这两年很火或者把单时段优化扩展成多时间尺度协调日前-日内两层调度联动再或者把集中式求解改成分布式算法比如ADMM解决大规模系统和多利益主体场景下的隐私保护问题。无论往哪个方向走气电联合建模的思路和MISOCP这套框架都是通用的地基。最后再分享一个小技巧Gurobi的参数里把MIPFocus调成2重点优化最优解下界在有些模型上能显著加速收敛我几次卡壳都是靠它救回来的可以试试。