1. 电力市场中的主辅助服务与旋转备用
在电力系统运营中,除了基本的电能交易外,还存在一类被称为"辅助服务"的特殊商品。这类服务不直接提供电能,但对维持电网安全稳定运行至关重要。主辅助服务市场(Primary Ancillary Service Market)就是专门交易这类服务的平台,其核心功能包括频率调节、电压控制、备用容量保障等。
旋转备用(Spinning Reserve)是其中最具代表性的服务之一,指已经并网运行且能在短时间内(通常10-30分钟)增加出力的发电容量。与冷备用(需要数小时启动)不同,旋转备用机组处于热备用状态,可以快速响应系统突发情况,比如:
- 某大型发电机组突然跳闸
- 负荷预测出现重大偏差
- 可再生能源出力剧烈波动
以美国PJM市场为例,其旋转备用要求占总负荷的2.5%-7%,具体比例根据系统特性动态调整。这种备用机制有效降低了大规模停电风险,2021年德州大停电事件就暴露出备用容量不足的严重后果。
2. 市场出清模型的核心架构
市场出清(Market Clearing)是指通过优化算法确定中标机组及其出力的过程。旋转备用市场的出清模型通常采用安全约束经济调度(SCED)框架,包含以下核心组件:
2.1 目标函数设计
典型的出清模型以总成本最小化为目标:
code复制min Σ(C_g(P_g) + C_s(S_g))
其中:
- P_g:机组g的有功出力
- S_g:机组g提供的旋转备用容量
- C_g(·):电能生产成本函数(通常为二次函数)
- C_s(·):备用服务成本函数
注意:备用成本不仅包含机会成本(因预留容量而减少的电能收入),还应考虑机组的快速响应特性溢价。
2.2 约束条件体系
-
功率平衡约束:
code复制ΣP_g = D + LD为系统总负荷,L为网损(可近似为负荷的固定比例)
-
旋转备用需求约束:
code复制ΣS_g ≥ RR为系统要求的旋转备用总量,通常按负荷百分比设定
-
机组运行约束:
code复制P_g^min ≤ P_g ≤ P_g^max - S_g S_g ≤ SR_g^max其中SR_g^max为机组最大可提供的旋转备用容量,受爬坡速率限制
-
网络安全约束(可选):
code复制-F_l^max ≤ PTDF·(P - D) ≤ F_l^maxPTDF为功率传输分布因子,F_l^max为线路l的传输极限
3. Matlab实现关键步骤
以下代码展示了旋转备用市场出清的基本实现框架:
matlab复制%% 参数初始化
ngen = 5; % 机组数量
load = 1000; % 系统负荷(MW)
reserve_req = 0.05 * load; % 备用需求=5%负荷
% 机组参数 [Pmin Pmax a b c SRmax]
gen_data = [
50 200 0.01 5 10 50;
100 400 0.005 10 20 80;
80 300 0.008 8 15 60;
120 500 0.003 12 25 100;
60 250 0.015 6 12 40
];
%% 定义优化变量
P = optimvar('P', ngen, 'LowerBound', gen_data(:,1));
S = optimvar('S', ngen, 'UpperBound', gen_data(:,6));
%% 创建优化问题
prob = optimproblem('ObjectiveSense', 'minimize');
% 目标函数:总成本最小
cost = optimexpr;
for i = 1:ngen
a = gen_data(i,3); b = gen_data(i,4); c = gen_data(i,5);
cost = cost + (a*P(i)^2 + b*P(i) + c) + 0.3*S(i); % 备用报价假设为0.3$/MW
end
prob.Objective = cost;
% 添加约束
prob.Constraints.power_balance = sum(P) == load;
prob.Constraints.reserve_req = sum(S) >= reserve_req;
prob.Constraints.gen_limit = P + S <= gen_data(:,2);
%% 求解问题
options = optimoptions('fmincon', 'Display', 'iter');
[sol, fval] = solve(prob, 'Options', options);
%% 输出结果
disp('机组出力(MW)及备用(MW):');
disp([sol.P sol.S]);
disp(['总成本: $' num2str(fval)]);
3.1 关键实现技巧
-
成本函数处理:
- 对于非凸成本函数(如包含启停成本),可引入整数变量转为MIP问题
- 实际市场中应采用分段线性化处理报价曲线
-
求解器选择:
- 中小规模问题可用
fmincon - 大规模问题建议使用
intlinprog(混合整数)或专用求解器如GUROBI
- 中小规模问题可用
-
灵敏度分析:
matlab复制[~, lambda] = solve(prob); LMP = lambda.power_balance; % 节点边际电价 RMP = lambda.reserve_req; % 备用边际价格
4. 实际应用中的挑战与改进
4.1 风电高渗透率的影响
当系统含有30%以上风电时,传统旋转备用模型面临挑战:
-
预测误差增大:
matlab复制% 考虑风电预测误差的备用需求调整 wind_forecast_error = 0.2; % 20%预测误差 reserve_req = 0.05*load + wind_forecast_error*wind_capacity; -
爬坡能力不足:
- 需要引入爬坡约束:
matlab复制
prob.Constraints.ramp_up = P - P0 <= ramp_rate*delta_t; - 其中P0为上一时段出力,delta_t为调度间隔
- 需要引入爬坡约束:
4.2 多时间尺度协调
先进市场采用三阶段出清架构:
- 日前市场:确定机组启停和基础备用
- 日内市场:每15分钟调整备用分配
- 实时市场:5分钟粒度精细调节
matlab复制% 多时段模型示例
T = 24; % 24小时
P = optimvar('P', ngen, T);
for t = 1:T
prob.Constraints.(['balance_' num2str(t)]) = sum(P(:,t)) == load_forecast(t);
if t > 1
prob.Constraints.(['ramp_' num2str(t)]) = ...
-ramp_limit <= P(:,t)-P(:,t-1) <= ramp_limit;
end
end
5. 扩展应用:需求侧响应参与备用
现代电力市场允许负荷聚合商提供备用服务:
matlab复制% 添加需求侧资源参数
dr_reserve_max = [30; 40; 25]; % 3个负荷聚合商的最大备用能力
dr_cost = [0.25; 0.20; 0.30]; % 报价($/MW)
% 扩展优化变量
S_dr = optimvar('S_dr', 3, 'LowerBound', 0, 'UpperBound', dr_reserve_max);
% 修改目标函数
prob.Objective = cost + sum(dr_cost.*S_dr);
% 调整备用约束
prob.Constraints.reserve_req = sum(S) + sum(S_dr) >= reserve_req;
这种模式显著提高了市场效率,加州独立系统运营商(CAISO)的数据显示,需求侧资源参与可使备用采购成本降低15%-20%。
