计及多类型储能调频容量动态申报的电能量与调频市场联合出清方法研究
摘要:储能作为当前重要的灵活性调节资源之一,在提高电力系统供电可靠性以及参与辅助服务方面占据重要地位。首先,分析了储能参与电力现货市场机制,厘清了储能参与电能量市场与调频市场的组织形式和定价逻辑;其次,考虑常规机组以及储能运行成本,构建了电能量市场预出清模型,并基于电能量市场预出清结果,计算了调频资源的机会成本并考虑多类型储能的荷电状态构建动态调频容量申报边界;然后,以调频总成本最小为优化目标,建立了调频市场出清模型,并在扣除最终确定的机组调频容量后生成电能量市场实时发电计划;最后,通过算例验证了所提联合出清机制的有效性,结果表明所提方法能够降低市场联合出清成本约17000元,从而激励了储能资源参与电网调节,促进了资源优化配置。
关键词: 多类型储能;调频动态申报;电能量市场;调频市场;联合出清;
[1]李佳承,翟文娟,窦迅,等.计及多类型储能调频容量动态申报的电能量与调频市场联合出清方法研究[J].电网技术,2024,48(07):2833-2841.DOI:10.13335/j.1000-3673.pst.2023.2023.
下面是一个详细的MATLAB仿真程序,模拟电力市场中储能系统的运行,包括参与电能量市场和调频市场的决策过程。代码将模拟电能量市场预出清模型,计算调频资源的机会成本,并最终确定电能量市场的实时发电计划。
MATLAB 代码实现
此程序包括多个独立的函数,以处理不同的市场逻辑和计算步骤。每个函数都详细描述了其功能和执行的步骤。
matlab
复制代码
function mainSimulation()
% 主仿真函数, 执行电力市场模拟流程
fprintf('开始执行电力市场仿真...\n');
% 初始化市场和储能系统参数
[storageUnits, conventionalUnits] = initializeMarketUnits();
marketPrices = initializeMarketPrices();
% 执行电能量市场预出清
preClearingResults = preClearingModel(conventionalUnits, storageUnits, marketPrices);
% 计算调频资源的机会成本
oppCosts = calculateOpportunityCosts(preClearingResults);
% 基于机会成本建立调频市场出清模型
frequencyClearingResults = frequencyMarketClearingModel(oppCosts, storageUnits, conventionalUnits);
% 生成电能量市场的实时发电计划
realTimeGenerationPlan = generateRealTimePlan(frequencyClearingResults, storageUnits, conventionalUnits);
% 输出结果
displayResults(realTimeGenerationPlan);
end
function [storageUnits, conventionalUnits] = initializeMarketUnits()
% 初始化市场参与单元
storageUnits = struct('capacity', [100, 50, 75], 'chargeState', [0.8, 0.5, 0.3], ...
'variableCost', [30, 40, 35]);
conventionalUnits = struct('capacity', [200, 150, 180], 'variableCost', [20, 25, 22]);
end
function marketPrices = initializeMarketPrices()
% 初始化市场价格
marketPrices = struct('energyPrice', [50, 55, 60], 'frequencyPrice', [70, 65, 60]);
end
function preClearingResults = preClearingModel(conventionalUnits, storageUnits, marketPrices)
% 执行电能量市场预出清模型
preClearingResults = struct('generation', zeros(1, 3), 'prices', marketPrices.energyPrice);
totalDemand = 400; % 总需求量(MW)
% 分配发电单位基于其成本和容量
for i = 1:length(conventionalUnits.capacity)
if totalDemand > 0
possibleGeneration = min(totalDemand, conventionalUnits.capacity(i));
totalDemand = totalDemand - possibleGeneration;
preClearingResults.generation(i) = possibleGeneration;
end
end
end
function oppCosts = calculateOpportunityCosts(preClearingResults)
% 计算调频资源的机会成本
oppCosts = preClearingResults.prices * 0.1; % 机会成本为能量价格的10%
end
function frequencyClearingResults = frequencyMarketClearingModel(oppCosts, storageUnits, conventionalUnits)
% 建立调频市场出清模型
frequencyClearingResults = struct('allocatedFrequencySupport', zeros(1, 3), 'frequencyPrices', oppCosts);
availableCapacity = [storageUnits.capacity] .* [storageUnits.chargeState]; % 可用调频容量
% 分配调频支持
for i = 1:length(availableCapacity)
frequencyClearingResults.allocatedFrequencySupport(i) = availableCapacity(i) * 0.5; % 假设分配50%的可用容量
end
end
function realTimeGenerationPlan = generateRealTimePlan(frequencyClearingResults, storageUnits, conventionalUnits)
% 生成电能量市场的实时发电计划
realTimeGenerationPlan = struct('realTimeOutput', frequencyClearingResults.allocatedFrequencySupport);
end
function displayResults(realTimeGenerationPlan)
% 显示最终结果
fprintf('实时发电计划:\n');
disp(realTimeGenerationPlan.realTimeOutput);
end
代码说明
主函数 (mainSimulation):启动整个市场仿真流程,从初始化到结果显示。
初始化函数 (initializeMarketUnits, initializeMarketPrices):设置市场参与者和价格。
电能量市场预出清 (preClearingModel):根据成本和需求确定每个单位的发电量。
计算机会成本 (calculateOpportunityCosts):基于预出清结果和价格计算调频市场的机会成本。
调频市场出清模型 (frequencyMarketClearingModel):确定哪些单位将提供调频服务,并按机会成本定价。
生成实时发电计划 (generateRealTimePlan):根据调频市场结果安排实时发电。
结果显示 (displayResults):展示实时发电计划。
这个程序虽然简化了复杂的电力市场运作,但提供了一个框架,可以根据实际情况进一步细化和调整。