1. 微网优化调度与YALMIP工具概述
微网作为分布式能源系统的重要实现形式,其优化调度直接关系到运行经济性和供电可靠性。传统手工推导KKT条件或动态规划的方法在面对多时段、多约束的调度问题时,往往存在建模复杂、求解效率低的痛点。YALMIP作为MATLAB环境下的建模语言,通过代数描述方式将优化问题转化为标准形式,显著降低了复杂优化问题的实现门槛。
我在参与某工业园区微网项目时,曾尝试用传统方法实现包含光伏、储能和柴油发电机的24小时调度模型。手动编写约束条件就耗费了两周时间,而改用YALMIP后,同样的建模工作仅需3天即可完成。这个工具最突出的优势在于:
- 支持混合整数规划、二阶锥规划等复杂问题描述
- 自动选择适配的求解器(如CPLEX、GUROBI)
- 提供直观的约束条件表达语法
2. 微网系统建模关键要素
2.1 设备模型构建
微网中的每个组件都需要建立对应的数学模型。以最常见的蓄电池为例,其充放电模型需要包含:
matlab复制% 蓄电池SOC状态方程
constraints = [constraints, SOC(t+1) == SOC(t) + (eta_ch*P_ch(t) - P_dis(t)/eta_dis)*delta_t/E_max];
constraints = [constraints, 0 <= P_ch(t) <= u_ch(t)*P_max];
constraints = [constraints, 0 <= P_dis(t) <= u_dis(t)*P_max];
constraints = [constraints, u_ch(t) + u_dis(t) <= 1]; % 互斥约束
其中需要特别注意:
- 充放电效率η_ch和η_dis通常取0.9-0.95,实际项目中需通过充放电测试校准
- SOC上下限建议设置为[0.2,0.9]以延长电池寿命
- 互斥约束必须添加,否则求解器可能得出同时充放电的荒谬解
2.2 目标函数设计
经济性优化通常采用总运行成本最小化目标:
matlab复制% 包含燃料成本、维护成本和购电成本
objective = sum(C_fuel*P_diesel(t) + C_maintenance*P_PV(t) + grid_price(t)*P_grid_import(t));
在环保要求高的场景,可增加碳排放惩罚项:
matlab复制objective = objective + lambda*sum(P_diesel(t)*EF_diesel);
调节系数λ需要根据碳交易价格动态调整,我们在某项目中取0.2元/kgCO2时获得了最佳经济环保平衡。
3. 典型约束条件实现技巧
3.1 功率平衡约束
这是微网优化的核心约束,需考虑所有电源和负荷:
matlab复制constraints = [constraints, P_PV(t) + P_diesel(t) + P_grid(t) + P_dis(t) - P_ch(t) == P_load(t)];
实际应用中容易忽略的是:
- 电网功率P_grid需区分购入和售出:
matlab复制P_grid(t) = P_grid_import(t) - P_grid_export(t); constraints = [constraints, P_grid_import(t) >= 0, P_grid_export(t) >= 0]; - 柴油机需添加最小出力约束(通常为30%额定功率)
3.2 联络线功率约束
并网运行时需遵守电网调度要求:
matlab复制constraints = [constraints, -P_max_export <= P_grid(t) <= P_max_import];
在某工业园区项目中,我们通过历史数据统计发现:
- 工作日白天宜设置P_max_import为峰值负荷的40%
- 夜间可放宽至60%以提高经济性
4. 求解器选择与调试经验
4.1 求解器性能对比
| 求解器类型 | 适用问题规模 | 整数变量支持 | 典型求解时间 |
|---|---|---|---|
| CPLEX | 大型MIP | 优秀 | 10-30s |
| GUROBI | 中型MIP | 优秀 | 5-20s |
| IPOPT | 非线性问题 | 不支持 | 15-60s |
实测发现对于含20个离散变量的24时段问题,GUROBI比CPLEX快约18%。但在处理100+变量时,CPLEX的稳定性更优。
4.2 常见报错处理
-
Infeasible model错误:
- 逐步注释约束定位冲突源
- 检查功率平衡等式左右量纲是否一致
- 验证时间步长δt是否与功率单位匹配
-
Solution unbounded错误:
- 检查目标函数符号是否正确
- 确认光伏出力是否设置了上限约束
- 验证柴油机成本系数是否为正值
在某次调试中,我们曾因忘记设置柴油机最大出力约束,导致求解器给出采购无限量电网电力的荒谬解。这个教训说明完备的约束检查至关重要。
5. 实际项目优化案例分析
5.1 工业园区微网调度
某制造园区配置:
- 光伏:1.2MWp
- 储能:500kW/2MWh
- 柴油机:800kW×2台
通过YALMIP建模实现:
matlab复制ops = sdpsettings('solver','gurobi','verbose',1);
optimize(constraints,objective,ops);
优化后相比人工调度:
- 燃料成本降低23%
- 峰谷套利收益增加15%
- 碳排放减少18%
5.2 离网型微网优化
对于无电网支撑的离网系统,需特别注意:
- 增加旋转备用约束:
matlab复制constraints = [constraints, sum(P_diesel_available(t)) >= P_load(t)*1.2]; - 采用鲁棒优化处理光伏预测误差:
matlab复制P_PV_actual = P_PV_predicted + uncertainty; constraints = [constraints, uncertainty >= -0.2*P_PV_predicted];
在某海岛项目中,通过引入10%的功率裕度,将供电可靠性从92%提升至99.7%。
6. 模型扩展与进阶应用
6.1 多时间尺度优化
将调度周期分为:
- 日前调度(24时段,1小时分辨率)
- 实时调度(15分钟分辨率)
实现方法:
matlab复制% 粗粒度模型
day_ahead = optimize(day_constraints, obj_1, ops);
% 细粒度滚动优化
for k = 1:96
current_status = get_real_time_data();
real_time = optimize(real_constraints, obj_2, ops);
implement_decision(real_time.P_opt(1));
end
6.2 机器学习结合优化
利用LSTM预测光伏出力:
matlab复制% 训练预测模型
net = trainLSTM(PV_history, weather_data);
% 将预测结果代入优化
P_PV_pred = predict(net, weather_forecast);
constraints = [constraints, P_PV(t) == P_PV_pred(t)];
在某商业区项目中,这种混合方法将预测误差从15%降至8%,相应降低了3%的备用成本。
关键提示:YALMIP最新版本已支持直接调用Python模型,可通过yalmip('python_initialize')实现跨平台集成。