1. 项目背景与核心价值
电力系统备用容量优化一直是电网运行中的关键难题。随着新能源大规模并网和用电需求多样化,传统确定性优化方法越来越难以应对不确定性带来的挑战。两阶段鲁棒优化方法通过构建不确定性集合,能够在最恶劣场景下保证系统安全运行,近年来在电力系统调度领域获得广泛应用。
这个项目聚焦需求侧响应(DSR)参与备用容量优化的问题。DSR通过价格或激励手段引导用户调整用电行为,为系统提供灵活性资源。将DSR纳入备用优化框架,需要解决三个核心问题:
- 如何建模DSR的不确定性?
- 如何协调日前计划和日内调整的关系?
- 如何处理多时间尺度下的鲁棒性要求?
2. 模型架构设计思路
2.1 两阶段鲁棒优化框架
项目采用"日前-日内"双层决策架构:
- 上层(日前阶段):确定机组启停、常规机组出力、DSR签约量等慢变量
- 下层(日内阶段):应对新能源出力波动和负荷偏差,调整DSR调用量和机组备用
数学模型可抽象为:
code复制min_x c^T x + max_u min_y d^T y
s.t. Ax ≥ b
Fx + Gy ≥ h - Eu
u ∈ U, y ∈ Y
其中x为日前决策变量,y为日内调整变量,u为不确定性参数。
2.2 需求侧响应建模关键
DSR参与备用需要特殊处理:
- 可中断负荷建模:用0-1变量表示用户是否参与响应
- 价格弹性模型:构建需求-价格响应矩阵
- 响应延迟特性:考虑工业用户的生产周期约束
matlab复制% DSR参与度模型示例
DSR_max = load_profile .* participation_rate;
DSR_min = 0.2 * DSR_max; % 最小参与保障
3. 求解算法实现细节
3.1 列与约束生成法(C&CG)
采用C&CG算法求解两阶段鲁棒问题:
- 主问题生成初始方案
- 子问题找出最恶劣场景
- 添加最优割返回主问题
关键实现步骤:
matlab复制while gap > tolerance
% 求解主问题
[x, obj_main] = solve_master(previous_cuts);
% 求解子问题
[u, obj_sub] = solve_subproblem(x);
% 生成新约束
new_cut = generate_cut(x, u);
% 更新迭代
gap = abs(obj_main - obj_sub)/obj_sub;
end
3.2 不确定性集合设计
采用多面体不确定性集合:
code复制U = {u | W_u u ≤ w_u, u_min ≤ u ≤ u_max}
其中包含:
- 新能源预测误差边界
- 负荷波动范围
- DSR响应偏差区间
4. Matlab实现关键代码解析
4.1 主问题建模(YALMIP)
matlab复制% 机组决策变量
x_gen = binvar(n_gen, T, 'full'); % 启停状态
p_gen = sdpvar(n_gen, T, 'full'); % 出力计划
% DSR签约量
dsr_contract = sdpvar(n_bus, T, 'full');
% 构建目标函数
obj = sum(sum(c_gen' * p_gen)) + sum(c_dsr * dsr_contract(:));
% 添加常规约束
constraints = [sum(p_gen,1) == load_base - dsr_contract,...];
4.2 子问题求解(Gurobi)
matlab复制function [worst_u, worst_obj] = solve_subproblem(x_fixed)
% 定义不确定性变量
u_pv = sdpvar(T,1); % 光伏波动
u_load = sdpvar(T,1); % 负荷偏差
% 构建最恶劣场景目标
obj_sub = -sum(penalty * shed_load); % 最大化惩罚成本
% 不确定性集合约束
constraints_sub = [...
norm(u_pv,inf) <= delta_pv,...
norm(u_load,1) <= Gamma_load,...
shed_load >= 0];
% 求解
ops = sdpsettings('solver','gurobi');
optimize(constraints_sub, obj_sub, ops);
end
5. 实际应用中的关键参数设置
5.1 鲁棒调节参数
| 参数 | 物理意义 | 典型值 | 设置建议 |
|---|---|---|---|
| Γ_load | 负荷不确定性预算 | 1.2-1.5 | 根据历史波动数据校准 |
| δ_pv | 光伏预测误差边界 | 15-25% | 考虑天气预报精度 |
| ρ_dsr | DSR响应可靠系数 | 0.7-0.9 | 依赖用户信用评级 |
5.2 计算性能优化技巧
- 并行计算配置:
matlab复制parpool('local',4); % 启用4线程
sdpsettings('solver','gurobi','usex0',1,'verbose',0);
- 有效不等式添加:
matlab复制% 机组爬坡约束的强化形式
constraints = [constraints, ...
-ramp_down <= diff(p_gen,1,2) <= ramp_up,...
sum(x_gen,2) >= min_up_time];
6. 典型问题排查指南
6.1 模型不可行常见原因
- 备用容量不足:
- 现象:子问题返回无限大惩罚值
- 解决:检查机组备用上限约束是否过紧
- DSR响应能力不足:
- 现象:负荷削减量超过签约量
- 解决:调整DSR价格弹性系数
6.2 计算不收敛处理
- 主问题震荡:
- 调整:限制主问题变量变化幅度
matlab复制constraints = [constraints, ...
abs(x_gen - x_prev) <= 0.1];
- 子问题求解慢:
- 优化:采用场景削减技术
matlab复制% 保留前K个恶劣场景
[~,idx] = sortk(sub_results, K);
active_scenarios = idx(1:K);
7. 工程实践中的经验总结
- 数据预处理要点:
- 负荷数据需进行归一化处理
- 新能源预测误差应采用条件分布建模
- DSR响应曲线需要分段线性化
- 结果后处理技巧:
matlab复制% 提取关键指标
reserve_margin = (total_capacity - actual_load)./actual_load;
dsr_utilization = actual_dsr ./ contracted_dsr;
% 可视化
figure('Position',[100,100,800,400])
yyaxis left; plot(reserve_margin);
yyaxis right; plot(dsr_utilization);
- 实际部署建议:
- 日前阶段采用保守的Γ值
- 日内阶段根据实时数据动态调整
- 建立DSR响应效果评价体系