1. 微网优化调度背景与核心挑战
微网作为分布式能源系统的重要形态,正在从实验室走向规模化应用。我参与过多个微网示范项目,发现多微网协同优化是当前最棘手的工程问题之一。三个微网构成的系统虽然规模不大,但已经具备典型的多时间尺度、多目标优化特征。
在实际项目中,我们常遇到这些典型问题:
- 燃气轮机爬坡速率与储能响应速度不匹配
- 光伏预测误差导致日前计划与实时调度偏差
- 联络线功率波动引发的电压越限问题
Matlab+YALMIP的组合之所以成为行业首选,是因为它完美平衡了算法开发效率与实际工程需求。去年在某工业园区微网项目中,我们对比过Python+Pyomo方案,最终仍选择回归Matlab生态,原因有三:
- Simulink可无缝对接物理模型验证
- YALMIP的建模语法更贴近数学表达
- 已有的大量电力系统工具箱可直接调用
2. 环境搭建与工具链配置
2.1 Matlab版本选择建议
经过多个项目验证,我强烈推荐使用R2021b版本。这个版本对YALMIP的支持最稳定,且内置的Optimization Toolbox已集成interior-point算法。注意避免使用2023a之后的版本,其符号计算引擎改动会导致部分YALMIP函数异常。
安装时必须勾选:
- Optimization Toolbox
- Parallel Computing Toolbox(用于多核加速)
- Power System Toolbox(可选但推荐)
2.2 YALMIP安装的隐藏陷阱
官方教程不会告诉你这些细节:
- 安装后务必执行
yalmiptest,检查求解器接口 - 对于三微网问题,建议配置Gurobi作为主求解器
- 遇到"mex文件缺失"错误时,需要手动设置编译器路径:
matlab复制
mex -setup mex -setup C++
重要提示:商业项目务必购买正版授权,学术研究可使用CPLEX学术版,其混合整数规划性能优于开源方案
3. 三微网建模关键技术实现
3.1 设备模型参数化方法
以燃气轮机为例,其成本函数需要转化为二次规划形式:
matlab复制% 燃气轮机模型参数
gt.cost = [0.5 2 100]; % 系数 [a b c] for a*P^2 + b*P + c
gt.pmin = 20; % 最小出力(kW)
gt.pmax = 200;
% YALMIP变量定义
P_gt = sdpvar(24,3); % 24小时*3个微网
Cost_gt = sum(gt.cost(1)*P_gt.^2 + gt.cost(2)*P_gt + gt.cost(3));
储能系统建模时特别注意:
matlab复制% SOC状态方程
SOC = sdpvar(25,3); % 多一个初始时刻
constraints = [SOC(2:end,:) == SOC(1:end-1,:) - P_ch/eta_ch + P_dis*eta_dis];
constraints = [constraints, 0.2 <= SOC <= 0.9]; % 安全区间
3.2 多时间尺度耦合约束处理
三微网间的功率交互需要特殊处理:
- 建立联络线功率平衡方程:
matlab复制P_exchange = sdpvar(24,3,3); % i->j at time t for t = 1:24 for i = 1:3 constraints = [constraints, sum(P_exchange(t,i,:)) == sum(P_exchange(t,:,i))]; end end - 添加传输损耗补偿(实测约2-5%):
matlab复制constraints = [constraints, P_exchange >= -100, P_exchange <= 100]; % 100kW限值 loss = 0.02*abs(P_exchange);
4. 优化模型求解与结果分析
4.1 求解器参数调优经验
在调试过程中,这些参数设置很关键:
matlab复制ops = sdpsettings('verbose',1,'solver','gurobi');
ops.gurobi.Method = 2; % 使用内点法
ops.gurobi.BarConvTol = 1e-6;
ops.gurobi.TimeLimit = 3600; % 1小时超时
常见问题处理:
- 遇到"infeasible"错误时,先检查约束冲突:
matlab复制diagnostics = optimize(constraints,objective,ops); if diagnostics.problem == 1 [~,~,~,index] = check(constraints); inconsistent = find(index == 1); end - 内存不足时可启用分解算法:
matlab复制ops.gurobi.Presolve = 2; ops.gurobi.Aggregate = 0;
4.2 结果可视化技巧
推荐使用自定义绘图函数展示三微网互动:
matlab复制function plot_microgrid_results(P_gen, P_exchange, SOC)
subplot(3,1,1);
area(P_gen); % 各电源出力
subplot(3,1,2);
bar(P_exchange(:,:,1)); % 微网1交换功率
subplot(3,1,3);
plot(SOC); % 储能状态
end
对于大型结果集,建议导出到Excel进行深度分析:
matlab复制writetable(table(P_gen), 'generation.xlsx');
writetable(table(P_exchange), 'exchange.xlsx');
5. 工程实践中的进阶技巧
5.1 不确定性问题处理
针对光伏预测误差,我们采用鲁棒优化方法:
matlab复制% 定义不确定集
P_pv_forecast = 100; % 预测值(kW)
delta = sdpvar(24,3);
constraints = [constraints, uncertain(delta)];
constraints = [constraints, -0.2*P_pv_forecast <= delta <= 0.2*P_pv_forecast];
% 鲁棒约束
P_pv_actual = P_pv_forecast + delta;
constraints = [constraints, sum(P_gen,2) + sum(P_pv_actual,2) >= Load];
5.2 并行计算加速
对于多场景分析,使用parfor加速:
matlab复制scenarios = 100;
parfor i = 1:scenarios
[results(i), diagnostics(i)] = optimize(constraints, objective, ops);
end
记得预先分配内存:
matlab复制results = repmat(struct(), scenarios, 1);
diagnostics = repmat(struct(), scenarios, 1);
6. 典型问题排查指南
6.1 YALMIP报错"No suitable solver"
这是最常见的问题,排查步骤:
- 运行
yalmiptest确认求解器识别状态 - 检查许可证文件是否过期(特别是Gurobi)
- 验证MATLAB路径是否包含求解器接口
matlab复制
which gurobi which cplex
6.2 模型求解时间过长
优化方案:
- 启用warm start:
matlab复制
assign(P_gt, previous_solution); - 简化模型:
- 将24小时尺度改为4小时时段
- 松弛整数变量为连续变量
- 采用Benders分解等算法
在最近的一个项目中,通过将求解精度从1e-6降到1e-4,计算时间从3小时缩短到25分钟,而成本结果仅相差0.3%。
