热电联产系统作为能源高效利用的典型方案,在工业园区和区域供暖领域应用广泛。但如何协调发电机组与供热设备的经济运行,一直是个复杂的多目标优化问题。传统调度方法往往面临计算效率低、易陷入局部最优等痛点,这正是智能算法大显身手的场景。
去年我在参与某工业园区能源系统改造时,就遇到过这样的挑战:系统包含3台燃气轮机、2台余热锅炉和1套电制冷机组,需要同时满足电价波动下的经济性和供热稳定性。当时尝试了多种算法组合,最终发现粒子群优化(PSO)与遗传算法(GA)的混合策略效果最为突出。本文将分享这种混合算法的Matlab实现细节,包含完整的成本模型构建和算法调参经验。
典型的热电联产系统包含以下核心组件:
以某园区实际配置为例:
matlab复制% 设备参数示例
units = {
% 类型 容量(MW) 成本系数[a,b,c] 供热比
'GT1', 50, [0.12, 15, 80], 0.4;
'GT2', 30, [0.15, 18, 60], 0.35;
'WHB', 20, [0.08, 12, 40], 1.0;
};
经济调度的核心是最小化总运行成本:
code复制min Σ(P_i^2*a_i + P_i*b_i + c_i) + startup_cost
其中需要考虑的约束条件包括:
PSO擅长全局搜索但易早熟,GA的交叉变异能增强局部探索。我们采用分层混合策略:
matlab复制function [best] = hybrid_PSO_GA(params)
% 初始化粒子群
swarm = init_swarm(params);
for iter = 1:params.max_iter
% PSO速度更新
swarm = update_velocity(swarm);
% 二进制GA操作
if mod(iter,5)==0
swarm = GA_crossover(swarm);
end
% 约束处理
swarm = apply_constraints(swarm);
% 更新全局最优
[gbest, swarm] = update_gbest(swarm);
end
end
通过200次不同参数组合的测试,得出较优参数范围:
| 参数 | 推荐值 | 影响分析 |
|---|---|---|
| 种群规模 | 50-100 | 过小易早熟,过大增加计算量 |
| 惯性权重 | 0.6-0.9 | 控制全局/局部搜索平衡 |
| 变异概率 | 0.01-0.05 | 过高会破坏优良基因 |
| 约束惩罚系数 | 1e4-1e6 | 需与成本量级匹配 |
实际应用中发现:当供热负荷波动较大时,适当提高变异概率(0.08左右)能获得更好的适应性
采用矩阵化运算提升速度:
matlab复制% 传统循环计算成本
for i = 1:n
cost(i) = a(i)*P(i)^2 + b(i)*P(i) + c(i);
end
% 矩阵化计算(提速3-5倍)
cost = sum(a.*P.^2 + b.*P + c, 2);
测试了三种约束处理方式:
推荐组合策略:
matlab复制function [new_pop] = handle_constraints(pop)
% 初级修复明显越界值
pop(pop<P_min) = P_min;
% 二级罚函数处理
penalty = 1e5 * sum(max(0, abs(P_sum-P_load)-tol), 2);
pop.cost = pop.cost + penalty;
% 精英保留
[~,idx] = sort(pop.cost);
new_pop = pop(idx(1:end/2));
end
某工业园区冬季典型日负荷曲线:
| 算法 | 成本(万元) | 计算时间(s) | 约束违反率 |
|---|---|---|---|
| 传统PSO | 78.2 | 45 | 6.2% |
| 二进制GA | 75.8 | 62 | 3.5% |
| 本文混合算法 | 73.5 | 53 | 0.8% |
典型日的机组出力曲线显示,混合算法能更好跟踪负荷变化:
matlab复制figure;
plot(time, P_GT1, 'r', time, P_GT2, 'b', time, P_load, 'k--');
xlabel('时间/h'); ylabel('功率/MW');
legend('机组1','机组2','总负荷');
现象:迭代50代后适应度不再变化
解决方法:
matlab复制if std(fitness)<threshold
particles = particles .* (1 + 0.1*randn(size(particles)));
end
当热电比约束严格时,可采取:
matlab复制parfor i = 1:pop_size
fitness(i) = evaluate(pop(i));
end
matlab复制P = gpuArray(P);
cost = gather(sum(a.*P.^2 + b.*P + c, 2));
经过实际项目验证,这套方法相比传统优化工具可降低运行成本5-8%,特别适合多机组、变负荷场景。代码已封装成模块化工具包,包含: