电力系统调度一直是能源领域的关键课题。在"双碳"目标背景下,如何协调水电和火电这两种主力电源的出力分配,实现经济性、环保性和可靠性的多目标平衡,成为电力行业亟待解决的复杂问题。传统单目标优化方法往往顾此失彼,而简单的加权多目标优化又难以获得真正意义上的Pareto最优解集。
这正是NSGA-Ⅲ(非支配排序遗传算法第三代)大显身手的领域。作为多目标优化领域的标杆算法,NSGA-Ⅲ通过引入参考点机制和精英保留策略,能够高效处理高维目标空间下的优化问题。将其应用于梯级水电-火电联合调度,可以同时考虑发电成本、碳排放量、弃水量等多个相互冲突的目标,为决策者提供一组分布均匀的折衷方案。
在梯级水电与火电联合调度中,通常需要考虑三个核心目标:
经济性目标:最小化系统总发电成本
matlab复制f1 = sum(C_coal.*P_thermal) + sum(C_water.*P_hydro)
其中C_coal和C_water分别是火电和水电的发电成本系数,P_thermal和P_hydro为机组出力。
环保性目标:最小化CO2排放量
matlab复制f2 = sum(E_coal.*P_thermal)
E_coal表示火电机组的排放强度系数。
水力利用目标:最小化梯级水库弃水量
matlab复制f3 = sum(max(0, Q_in - Q_max))
Q_in为入库流量,Q_max为最大允许下泄流量。
功率平衡约束:
matlab复制sum(P_thermal) + sum(P_hydro) = P_load + P_loss
机组出力限制:
matlab复制P_min <= P_thermal <= P_max
P_hydro_min <= P_hydro <= P_hydro_max
水力耦合约束(考虑梯级电站的水流延迟):
matlab复制Q_out(i,t) = Q_in(i,t) + Q_gen(i,t) - S(i,t)
Q_in(i+1,t+τ) = Q_out(i,t)
其中τ表示水流从上游到下游的传播时滞。
NSGA-Ⅲ的核心创新在于采用结构化参考点维持种群多样性。对于M个目标的问题,参考点沿(M-1)维超平面均匀分布:
matlab复制function RefPoints = GenerateRefPoints(M, p)
if M == 1
RefPoints = 1;
else
gaps = linspace(0, 1, p+1);
points = nchoosek(gaps(1:end-1), M-1);
points = points(sum(points,2)<=1,:);
RefPoints = [points, 1-sum(points,2)];
end
end
与传统NSGA-II不同,NSGA-Ⅲ在非支配排序后增加了基于参考点的选择机制:
matlab复制% 关联个体到最近参考点
for i = 1:size(PopObj,1)
[~,assignedRef(i)] = min(sqrt(sum((PopObj(i,:)-RefPoints).^2,2)));
end
% 计算niching计数
nicheCount = histcounts(assignedRef,1:size(RefPoints,1)+1);
matlab复制function [X, F] = NSGA3(Problem, N, maxGen)
% 初始化参考点
[Z, Zmin] = GenerateRefPoints(Problem.M, Problem.p);
% 初始化种群
Pop = Problem.Init(N);
for gen = 1:maxGen
% 生成子代
Offspring = GeneticOperators(Pop);
% 合并种群
Combined = [Pop; Offspring];
% 非支配排序
[Fronts, ~] = NDSort(Combined.objs, N);
% 环境选择
Pop = EnvironmentalSelection(Combined, Fronts, Z, Zmin, N);
end
X = Pop.decs;
F = Pop.objs;
end
由于水电具有强时空耦合特性,需特别处理:
matlab复制function [Q] = RepairHydro(Q_in, Q_max)
for t = 2:size(Q_in,2)
excess = Q_in(:,t) - Q_max(:,t);
idx = excess > 0;
Q_in(idx,t) = Q_max(idx,t);
Q_in(idx,t+1) = Q_in(idx,t+1) + excess(idx);
end
Q = Q_in;
end
matlab复制P_hydro = eta * g * rho * H(Q) * Q
其中H(Q)为考虑库容-水位关系的水头函数。
通过某省级电网实际数据测试(12台火电机组+5级梯级水电),得到:
| 方案类型 | 成本(万元) | 排放(吨) | 弃水(万m³) |
|---|---|---|---|
| 纯经济调度 | 1256 | 45,678 | 32.5 |
| 纯环保调度 | 1432 | 38,921 | 28.7 |
| NSGA-Ⅲ折衷方案 | 1328 | 41,256 | 15.2 |
Pareto前沿三维分布显示,NSGA-Ⅲ获得的解集在目标空间均匀分布,为决策者提供了丰富的选择余地。
penalty = β^t * violationmatlab复制% 并行化适应度计算
parfor i = 1:size(Pop,1)
Pop(i).obj = Evaluate(Pop(i).dec);
end
关键提示:水电调度问题中,务必检查梯级间水流时滞是否准确建模,这是误差的主要来源之一。
matlab复制f4 = sum((P_wind - P_wind_forecast).^2) % 最小化风电预测偏差
通过Matlab的面向对象编程,可以构建可扩展的调度框架:
matlab复制classdef HydroThermalSystem < handle
properties
ThermalPlants
HydroCascades
LoadProfile
end
methods
function [cost, emission] = Evaluate(self, schedule)
% 实现多目标评估
end
end
end
在实际工程应用中,建议先采用简化模型验证算法有效性,再逐步增加物理细节。每次新增约束时,都要检查Pareto前沿的形状变化,这能直观反映不同目标间的冲突程度。