
基于MATLAB+YALMIP+CPLEX的分布式光伏消纳微电网群双层规划模型研究
大中午的太阳晒得光伏板发烫,微电网群里十几个储能设备正忙着充放电。这场景让我想起去年在
实验室折腾的双层规划模型——既要考虑储能电站未来十年的容量配置,又得保证每个小时的风光荷协调
运行,真就跟同时照顾熊孩子和做五年计划似的。
先说咱们这个双层模型的骨架。上层用YALMIP建模的时候得注意,储能容量变量可是要被下层反复
调用的。记得当时写代码手滑把"eps"打成"EPs",结果CPLEX直接报错三小时:
```matlab
% 上层模型储能容量变量定义
eps_s = sdpvar(1,24,'full'); % 正确写法
EPs = sdpvar(1,24,'full'); % 错误写法导致后续约束崩溃
```
下层模型的运行优化才是真战场,每个微网都得算清楚15分钟级的功率平衡。这里有个特别贼的约
束条件——储能充放电不能同时进行,得用Big-M法处理。来看这段实际跑通了的代码:
```matlab
M = 1000; % 足够大的常数
cons = [cons, P_ch <= M*(1-u_dis), P_dis <= M*u_dis]; % u_dis为0-1变量
```
重点来了,怎么把下层优化的KKT条件塞进上层模型。这步相当于要把动态调度策略"冻"成静态约
束。咱们用互补松弛条件转化时,发现直接处理非线性的if-else关系会让求解器罢工,最后改用分段线性
化才搞定。举个典型场景的处理:
```matlab
% KKT互补松弛条件线性化
for k = 1:N_scenario
cons = [cons, lambda_low(k) <= M*(1-y_k(k))];
cons = [cons, g_k(k) <= M*y_k(k)]; % y_k为辅助二元变量
end
```
实验数据出来那天真有意思,储能配置容量和运行成本的关系曲线居然呈现明显的"微笑曲线"特
征。用MATLAB画图时特意加了场景聚类的颜色区分:
```matlab
scatter(capacity, cost, 50, cluster_idx,'filled');