1. 分布式储能容量配置策略的背景与挑战
在能源转型的大背景下,分布式储能系统正成为电力系统中不可或缺的组成部分。与传统集中式储能不同,分布式储能具有灵活部署、快速响应等优势,特别适合应对新能源发电的间歇性和波动性。然而,如何科学合理地配置分布式储能容量,尤其是考虑产销者(Prosumer)这一新型市场主体的参与,成为当前研究的热点问题。
产销者是指同时具备能源生产与消费能力的用户,他们可能拥有屋顶光伏、小型风机等分布式发电设备,并配备储能系统。这种新型能源参与者给电力系统带来了新的运行模式,也使得储能容量配置问题变得更加复杂。我们需要考虑的因素包括:
- 产销者的用电/发电行为模式
- 电价机制(分时电价、实时电价等)
- 储能系统的技术经济参数(充放电效率、循环寿命、投资成本等)
- 电网运行约束(功率平衡、电压稳定等)
2. 问题建模与数学表达
2.1 目标函数构建
我们的核心目标是找到最优的储能容量配置,使得整个系统的总成本最小化。总成本通常包括:
-
储能系统投资成本(CAPEX):
[
C_{invest} = c_{inv} \cdot E_{rated}
]
其中,$c_{inv}$为单位容量投资成本(元/kWh),$E_{rated}$为储能额定容量。 -
运行维护成本(OPEX):
[
C_{O&M} = c_{om} \cdot E_{rated} \cdot N_{years}
]
$c_{om}$为单位容量年维护成本,$N_{years}$为考虑年限。 -
购电成本:
[
C_{purchase} = \sum_{t=1}^{T} p_t \cdot P_{grid,t} \cdot \Delta t
]
$p_t$为t时段电价,$P_{grid,t}$为t时段从电网购电功率。 -
售电收益:
[
R_{sale} = \sum_{t=1}^{T} p_t \cdot P_{feed-in,t} \cdot \Delta t
]
$P_{feed-in,t}$为t时段向电网馈电功率。
因此,完整的目标函数可表示为:
[
\min \left( C_{invest} + C_{O&M} + C_{purchase} - R_{sale} \right)
]
2.2 约束条件
-
功率平衡约束:
[
P_{load,t} + P_{charge,t} = P_{PV,t} + P_{discharge,t} + P_{grid,t} - P_{feed-in,t}
]
其中,$P_{load,t}$为t时段负荷功率,$P_{charge,t}$/$P_{discharge,t}$为储能充放电功率。 -
储能系统运行约束:
[
SOC_{t+1} = SOC_t + \left( \eta_{ch} P_{charge,t} - \frac{P_{discharge,t}}{\eta_{dis}} \right) \frac{\Delta t}{E_{rated}}
]
[
SOC_{min} \leq SOC_t \leq SOC_{max}
]
[
0 \leq P_{charge,t} \leq P_{rated}
]
[
0 \leq P_{discharge,t} \leq P_{rated}
]
SOC为储能荷电状态,$\eta_{ch}$/$\eta_{dis}$为充放电效率。 -
电网交互约束:
[
P_{grid}^{min} \leq P_{grid,t} \leq P_{grid}^{max}
]
[
P_{feed-in}^{min} \leq P_{feed-in,t} \leq P_{feed-in}^{max}
]
3. Matlab实现详解
3.1 基础数据准备
首先需要准备以下基础数据:
matlab复制% 时间参数
T = 24; % 24小时调度周期
dt = 1; % 时间间隔1小时
% 电价数据(元/kWh)
price = [0.35*ones(1,7), 0.55*ones(1,8), 0.85*ones(1,5), 0.55*ones(1,4)];
% 光伏发电预测(kW)
PV = [0,0,0,0,0, 20,50,80,120,150,180,200,...
220,200,180,150,120,80,50,20,0,0,0,0];
% 负荷预测(kW)
load = [60,55,50,48,50,55,70,85,95,90,85,80,...
75,80,85,90,95,100,95,85,75,70,65,60];
% 储能参数
eta_ch = 0.95; % 充电效率
eta_dis = 0.95; % 放电效率
SOC_min = 0.2; % 最小SOC
SOC_max = 0.9; % 最大SOC
P_rated = 50; % 额定功率kW
c_inv = 1500; % 单位容量投资成本元/kWh
c_om = 50; % 单位容量年维护成本元/kWh
life_year = 10; % 使用寿命
3.2 优化模型构建
我们使用Matlab的优化工具箱来构建和求解这个问题:
matlab复制% 创建优化问题
prob = optimproblem('ObjectiveSense','minimize');
% 定义决策变量
E_rated = optimvar('E_rated','LowerBound',0,'UpperBound',500); % 储能容量kWh
P_ch = optimvar('P_ch',T,'LowerBound',0,'UpperBound',P_rated); % 充电功率
P_dis = optimvar('P_dis',T,'LowerBound',0,'UpperBound',P_rated); % 放电功率
P_grid = optimvar('P_grid',T,'LowerBound',0); % 从电网购电功率
P_feedin = optimvar('P_feedin',T,'LowerBound',0); % 向电网馈电功率
SOC = optimvar('SOC',T+1,'LowerBound',SOC_min*E_rated,'UpperBound',SOC_max*E_rated); % SOC状态
% 目标函数
invest_cost = c_inv * E_rated;
om_cost = c_om * E_rated * life_year;
purchase_cost = sum(price' .* P_grid * dt);
sale_revenue = sum(price' .* P_feedin * dt);
prob.Objective = invest_cost + om_cost + purchase_cost - sale_revenue;
% 约束条件
% 功率平衡约束
prob.Constraints.powerBalance = P_ch + load' == PV' + P_dis + P_grid - P_feedin;
% SOC动态约束
prob.Constraints.SOCdynamics = SOC(2:T+1) == SOC(1:T) + ...
(eta_ch*P_ch - P_dis/eta_dis)*dt;
% 初始和终止SOC约束
prob.Constraints.SOCinit = SOC(1) == 0.5*E_rated;
prob.Constraints.SOCend = SOC(T+1) >= 0.5*E_rated;
% 充放电互斥约束
for t = 1:T
prob.Constraints.chargeDischarge(t) = P_ch(t) * P_dis(t) == 0;
end
3.3 模型求解与结果分析
matlab复制% 求解优化问题
options = optimoptions('fmincon','Display','iter','Algorithm','interior-point');
[sol,fval] = solve(prob,'Options',options);
% 结果可视化
figure;
subplot(3,1,1);
plot(1:T,PV,'g',1:T,load,'r',1:T,sol.P_dis-sol.P_ch,'b');
legend('光伏发电','负荷需求','储能充放电');
title('功率平衡');
subplot(3,1,2);
plot(1:T+1,sol.SOC/sol.E_rated);
title('SOC变化曲线');
ylabel('SOC (%)');
subplot(3,1,3);
plot(1:T,price,'k');
title('分时电价');
xlabel('时间 (h)');
ylabel('电价 (元/kWh)');
fprintf('最优储能容量: %.2f kWh\n', sol.E_rated);
fprintf('总成本: %.2f 元\n', fval);
4. 关键实现技巧与注意事项
4.1 非线性项的处理
在实际问题中,储能系统的退化成本与充放电深度(DOD)相关,这引入了非线性项。我们可以采用分段线性化或引入整数变量来处理:
matlab复制% 引入退化成本
cycle_life = 5000; % 循环次数
DOD = 1 - (SOC_min + SOC_max)/2; % 平均放电深度
deg_cost = c_inv * E_rated / (cycle_life * sqrt(DOD));
% 在目标函数中添加
prob.Objective = prob.Objective + deg_cost * sum(P_dis) * dt / E_rated;
4.2 大规模问题的加速技巧
当考虑多个产销者或长时间尺度时,问题规模会急剧增大。可以采用以下加速策略:
- 并行计算:
matlab复制% 启用并行计算
if isempty(gcp('nocreate'))
parpool;
end
options.UseParallel = true;
- 问题分解:
- 将长期规划问题分解为多个短期运行问题
- 采用Benders分解或拉格朗日松弛等方法
4.3 实际应用中的调整建议
- 数据预处理:
- 对光伏和负荷预测数据进行平滑处理
- 考虑不同季节、不同天气场景的典型日曲线
- 不确定性处理:
matlab复制% 采用鲁棒优化或随机规划
% 示例:光伏发电的不确定性集合
PV_uncertainty = 0.1; % 10%波动
PV_low = PV * (1 - PV_uncertainty);
PV_high = PV * (1 + PV_uncertainty);
- 多目标优化:
如果需要同时考虑经济性和可再生能源消纳率,可以构建多目标优化模型:
matlab复制% 定义第二个目标:可再生能源消纳最大化
renewable_utilization = sum(PV' - P_feedin) / sum(PV);
prob.Objective = [prob.Objective, -renewable_utilization]; % 负号表示最大化
% 使用gamultiobj求解
options = optimoptions('gamultiobj','ParetoFraction',0.4);
[sol_multi,fval_multi] = solve(prob,[],'Options',options);
5. 扩展应用与进阶方向
5.1 考虑需求响应的扩展模型
在实际应用中,可以进一步考虑需求响应资源,通过调整可平移负荷来优化系统运行:
matlab复制% 添加可平移负荷变量
P_shiftable = optimvar('P_shiftable',T,'LowerBound',0);
total_shiftable = 30; % 总可平移电量kWh
% 添加约束
prob.Constraints.shiftableTotal = sum(P_shiftable) == total_shiftable;
prob.Constraints.shiftableLimit = P_shiftable <= 10; % 每小时最大平移量
% 修改功率平衡约束
prob.Constraints.powerBalance = P_ch + load' - P_shiftable == PV' + P_dis + P_grid - P_feedin;
5.2 机器学习辅助预测
利用机器学习算法提高光伏和负荷预测精度:
matlab复制% 使用LSTM进行负荷预测示例
layers = [ ...
sequenceInputLayer(1)
lstmLayer(50)
fullyConnectedLayer(1)
regressionLayer];
options = trainingOptions('adam', ...
'MaxEpochs',100, ...
'MiniBatchSize',32);
net = trainNetwork(load_data,layers,options);
5.3 硬件在环测试
将优化算法部署到实际硬件前,建议进行硬件在环(HIL)测试:
- 使用Matlab Simulink构建实时仿真模型
- 通过OPC UA或Modbus协议与实际储能设备通信
- 验证控制策略的实时性和可靠性
matlab复制% 示例:OPC UA连接
uaClient = opcua('localhost',4840);
connect(uaClient);
node = findNodeByName(uaClient.Namespace,'Battery.SOC');
writeValue(node,0.5); % 设置初始SOC
