1. 项目概述
在内蒙古某地区,我们设计了一套风光互补制氢合成氨系统,这套系统最大的特点在于能够根据实际情况灵活切换并网和离网两种工作模式。作为一名长期从事可再生能源系统优化的工程师,我发现这套系统最吸引人的地方在于它完美解决了可再生能源发电波动性大的痛点问题。
系统主要由三大部分组成:风光发电单元、电解制氢单元和合成氨生产单元。其中风光发电单元采用风电和光伏互补的方式,利用内蒙古丰富的风能和太阳能资源;电解制氢单元将富余电能转化为氢气储存;合成氨单元则通过哈伯-博世工艺将氢气与氮气合成为氨。整个系统的核心创新点在于通过CPLEX求解器实现了容量配置和运行调度的联合优化,使得系统能够在不同季节、不同天气条件下自动选择最优运行模式。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 系统建模与优化方法
2.1 数学模型构建
系统的数学模型是整个优化设计的核心,我们主要考虑了以下几个关键方程:
- 电力平衡方程:
code复制P_wind(t) + P_pv(t) + P_grid(t) = P_elec(t) + P_curt(t) + P_battery_ch(t) - P_battery_dis(t)
其中,P_wind和P_pv分别表示风电和光伏的实际出力,P_grid表示与电网交换的功率(并网模式下),P_elec是电解槽消耗功率,P_curt是弃风弃光功率,P_battery_ch/dis是蓄电池充放电功率。
- 氢气平衡方程:
code复制m_H2_prod(t) = η_elec * P_elec(t) / HHV_H2
m_H2_cons(t) = m_NH3(t) * 3/17
dS_H2(t)/dt = m_H2_prod(t) - m_H2_cons(t) - m_H2_vent(t)
这里η_elec是电解槽效率,HHV_H2是氢气高热值,m_NH3是合成氨产量,S_H2是储氢罐中的氢气存量。
- 经济性目标函数:
code复制max Σ [P_grid_sell(t)*π_sell(t) - P_grid_buy(t)*π_buy(t) + m_NH3(t)*π_NH3]
- [C_cap_wind + C_cap_pv + C_cap_elec + C_cap_H2storage + C_cap_battery]/T
目标函数综合考虑了电力交易收益、氨产品收益和各类设备的年化投资成本。
2.2 CPLEX求解器实现
在Matlab中调用CPLEX求解器时,有几个关键点需要注意:
- 变量定义:
matlab复制% 定义连续变量
P_elec = cplex.continuousVar(0, P_elec_max, 'P_elec');
S_H2 = cplex.continuousVar(0, S_H2_max, 'S_H2');
% 定义二进制变量(用于模式切换)
is_ongrid = cplex.binaryVar('is_ongrid');
- 约束条件添加:
matlab复制% 添加电力平衡约束
for t = 1:T
cplex.addEq(P_wind(t) + P_pv(t) + is_ongrid*P_grid(t), ...
P_elec(t) + P_curt(t) + P_battery_ch(t) - P_battery_dis(t), ...
sprintf('PowerBalance_%d',t));
end
- 求解参数设置:
matlab复制cplex.Param.mip.tolerances.mipgap.Cur = 0.01; % 设置MIP gap为1%
cplex.Param.timelimit.Cur = 3600; % 设置求解时间限制为1小时
3. 数据准备与预处理
3.1 风光出力数据处理
内蒙古地区风光资源数据来源于当地气象站实测数据,处理流程如下:
- 数据清洗:
matlab复制% 处理缺失值
wind_data = fillmissing(wind_raw,'linear');
pv_data = fillmissing(pv_raw,'spline');
% 异常值处理
wind_data(wind_data > 25) = 25; % 风速上限截断
- 功率曲线转换:
matlab复制% 风电功率曲线拟合
P_wind = P_rated * (wind_speed.^3 - V_cutin^3)/(V_rated^3 - V_cutin^3);
P_wind(wind_speed < V_cutin | wind_speed > V_cutoff) = 0;
% 光伏功率计算
P_pv = G_tilt * Area * eta_pv * (1 - 0.005*(T_amb - 25));
3.2 经济参数设置
设备投资成本参数基于2023年市场调研数据:
| 设备类型 | 单位投资成本 | 寿命(年) | O&M成本(%/年) |
|---|---|---|---|
| 风电 | 6500元/kW | 20 | 2.5 |
| 光伏 | 3800元/kW | 25 | 1.8 |
| 电解槽 | 4500元/Nm³/h | 10 | 3.0 |
| 储氢罐 | 1200元/kg | 15 | 1.5 |
| 合成氨设备 | 850万元/千吨 | 15 | 4.0 |
4. 优化结果分析
4.1 典型日运行调度
图2a和2b展示了并网系统在大风季和小风季的典型周运行情况。从电力平衡图中可以明显看出:
- 大风季(图2a):
- 风电出力占主导,日内波动明显
- 白天光伏出力叠加使总可再生出力更高
- 夜间主要依靠风电和电网交互
- 小风季(图2b):
- 光伏成为主要电力来源
- 系统在午间光伏大发时向电网售电
- 早晚高峰时段从电网购电
4.2 容量配比影响
风光容量配比对系统经济性有显著影响,我们测试了从150MW风电+1050MW光伏到1200MW风电+0MW光伏的多种配比:
- 电解槽容量变化:
- 并网系统:随风电比例增加先减小后增大,最低点在风电600MW时
- 离网系统:整体需求更大,且变化趋势更平缓
- 储氢罐容量:
- 与电解槽容量变化趋势类似
- 离网系统需要配置约多30%的储氢容量
- 合成氨成本:
- 并网系统最低成本出现在风电略多于光伏时(约700MW风电)
- 离网系统最优配比为风光各600MW
5. 关键实现代码解析
5.1 主优化流程
主函数代码结构清晰,分为三个主要部分:
matlab复制function main_optimization()
% 1. 数据加载
data = load_system_data();
cfg = config();
% 2. 并网系统优化
result_ongrid = optimize_ongrid(data, cfg, ...);
save_and_plot_ongrid(result_ongrid);
% 3. 离网系统优化
result_offgrid = optimize_offgrid(data, cfg, ...);
save_and_plot_offgrid(result_offgrid);
% 4. 容量配比分析
analyze_capacity_ratio(data, cfg);
end
5.2 并网优化函数
并网系统优化的核心函数如下:
matlab复制function result = optimize_ongrid(data, cfg, varargin)
% 参数解析
p = inputParser;
addParameter(p, 'WindCapacity', 600);
addParameter(p, 'SolarCapacity', 600);
parse(p, varargin{:});
% 初始化CPLEX模型
cplex = Cplex('ongrid_optimization');
cplex.Model.sense = 'maximize';
% 添加变量和约束
add_variables(cplex, data, cfg, p.Results);
add_constraints(cplex, data, cfg, p.Results);
% 求解并处理结果
cplex.solve();
result = process_results(cplex, data, cfg);
end
5.3 结果可视化
系统提供了丰富的结果可视化函数,例如电力平衡图:
matlab复制function plot_power_balance(data, start_idx, end_idx, save_path)
figure('Position', [100,100,800,400]);
% 绘制各功率分量
area(data.time(start_idx:end_idx), ...
[data.P_wind, data.P_pv, data.P_grid_pos, -data.P_grid_neg]);
% 设置图例和标签
legend('风电','光伏','售电','购电');
xlabel('时间'); ylabel('功率(kW)');
title('系统电力平衡');
% 保存图像
saveas(gcf, save_path);
end
6. 实践中的经验与教训
在实际项目实施过程中,我们积累了一些宝贵经验:
- 电解槽启停优化:
- 频繁启停会显著降低电解槽寿命
- 实践中设置最小运行时间约束(如至少4小时)
- 采用"热待机"模式减少启动损耗
- 储氢系统管理:
- 保持储氢罐在20-85%的合理区间运行
- 设置安全裕度应对风光预测误差
- 采用分级存储策略(高压+中压)
- 电网交互策略:
- 利用电价差实现套利(如夜间低价购电)
- 设置最大交互功率限制避免电网冲击
- 考虑参与辅助服务市场的可能性
- 常见问题排查:
-
问题:优化结果出现不合理的频繁模式切换
解决:添加模式切换惩罚项和最小持续时间约束 -
问题:氢平衡出现微小累积误差
解决:在约束中添加松弛变量,并设置极小惩罚系数 -
问题:求解时间过长
解决:采用warm start策略,先求解简化模型
这套系统在实际运行中展现出了良好的适应性。特别是在2023年冬季的一次持续一周的低风速期间,系统自动切换到并网模式,通过智能调度电网电力维持了合成氨生产的连续性,避免了传统离网系统可能面临的停产风险。
