收到一个特别典型的求助:“含微网的配电网优化调度,用YALMIP在IEEE33节点上做,能不能给我讲讲怎么入门?”说实话,这几年我带过不少研究生和刚转行做配电侧优化的工程师,问到最后卡住的地方高度一致:不是看不懂文献里的数学模型,而是不知道怎么把一个优化问题干净利落地落成YALMIP代码,也不知道求解器返回的结果到底靠不靠谱。
这篇东西我打算按自己实际搭模型的顺序来写,从“为什么要建这个模型”一路讲到“结果出来了怎么验算”,中间把我踩过、也帮人排过的问题都摊开说。内容不追求论文式的高深推导,重点是你拿到一个IEEE33算例之后,能沿着这条链路把代码写出来、跑起来、结果讲得通。适合正在做毕业设计、课题组项目复现,或者想快速验证某个调度策略的工程师参考。
1. 为什么“含微网的配电网优化调度”成了绕不开的题目
先说个背景判断。传统配电网的规划运行思路是“无源网络”:电源在上游,负荷在下游,功率单向流动,调度就是调主变、调无功补偿。光伏、风电、储能大规模进配网之后,这个前提被打破了。台区里出现了分布式电源,功率可能倒送,电压可能越限,一条10kV馈线的运行方式不再只由变电站出口决定。微网的出现又让问题多了一层:它既能并网运行,也能离网孤岛,内部有自己的分布式电源、储能和负荷,对外表现为一个“可协调的功率接口”。
调度问题的本质,就是在一个满足潮流约束、设备运行约束和安全约束的条件下,决定各个可控资源怎么出力。含微网之后,决策变量里多了微网与主网的交换功率、储能充放电、分布式电源出力,目标通常是综合运行成本最小,或者网损最小,也可以把电压偏差、弃光弃风量加权进去。
IEEE33节点系统在这个领域里属于“标准练习场地”。它规模适中:33个节点、37条支路,包含联络开关,既不会像单馈线算例那样简单到没有说服力,又不像上万节点的真实馈线那样难以调试。用YALMIP做,是因为它能让你把优化模型和求解器解耦——你只需要用Matlab的语法描述变量、目标、约束,求解器选Gurobi、Cplex还是ECOS,换一行配置就行。这套组合拳已经是该方向的事实标准,从硕士论文到期刊复现,再到工程预研,基本都是这条路。
不过我得先说个容易误解的地方:很多初学者以为“YALMIP是个求解器”,其实不对。YALMIP是建模层,它负责把你的数学模型编译成求解器认识的标准形式。真正干活的是底层求解器。这个区别后面讲到求解器选型时还会反复提到。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 写代码之前,先把三个建模决策定下来
2.1 潮流方程选型:DistFlow与二阶锥松弛
配电网优化调度不是简单的经济调度,潮流约束不能省。很多人一开始想用牛顿拉夫逊算出来的潮流结果作为“约束”,这是概念搞混了:调度是在优化变量的同时隐式满足潮流方程,而不是事先给定一个潮流断面。
配电网是辐射状网络,最常用的潮流方程是DistFlow。它的物理含义特别直白:每条支路首端的有功/无功,等于末端节点负荷加上往下游所有支路的功率,再扣除该节点注入的分布式电源;同时电压降落和支路功率、电阻电抗直接相关。
但DistFlow原始形式里有电压平方和电流平方的乘积项,是非凸约束。直接扔给YALMIP,它会报“非凸问题”,或者求解器根本处理不了。工程界的标准解法是二阶锥松弛(SOCP):把电压平方设为一个新变量,电流平方设为新变量,原非线性约束变成一组线性等式加一个旋转锥约束。松弛之后,只要目标函数是凸的且网络呈现辐射状,最优解往往能精确回到原问题。这也是整个模型能高效求解的核心原因。
在YALMIP里,二阶锥约束写起来非常顺手,核心就一句代码。我习惯用cone()写法,它比直接用norm()更不容易踩坑,因为cone()让YALMIP明确知道这是在构造二阶锥,而norm()有时会被识别成一般非线性的范数约束,导致求解器报错。代码片段长这样:
matlab复制% 支路k连接节点i、j
% Pij, Qij为流过支路的有功/无功, Ui是节点i电压平方
% cone([2*Pij; 2*Qij; Ui - Uj], Ui + Uj)
Constraints = [Constraints, cone([2*Pij(k,t); 2*Qij(k,t); ...
Ui(branch(k,1),t) - Ui(branch(k,2),t)], ...
Ui(branch(k,1),t) + Ui(branch(k,2),t))];
这条约束的物理意义我用一句话概括:它保证了给定支路功率和两端电压平方时,电流平方不小于其最低理论值,从而把非线性潮流方程“松弛”成了一个凸可行域。
2.2 时间尺度:24小时全时序,还是单断面优化
配电网调度分很多种:日前计划按小时粒度做24小时优化,日内滚动可能细化到15分钟,实时控制则要秒级响应。IEEE33算例里最常见的版本是日前经济调度,时间粒度1小时、优化周期24小时。
选择24小时时序,最大的麻烦是储能SOC跨时段耦合。SOC(t+1) = SOC(t) - P_ch / 容量 + P_dis / 容量,这条递推关系把24个时段串成一个链条。如果你想做“独立24个单断面优化”,储能永远只会执行“低充高放”的局部策略,不会考虑跨夜的充放电安排。所以必须把整个24小时作为一个整体优化,这意味着决策变量是24倍的节点数,约束矩阵规模瞬间上来。
我建议第一次实现时不要贪多。先把一个典型日的24小时优化跑通,负荷和光伏出力曲线用公开
