MATLAB 论文复现——考虑共享储能容量配置的多虚拟电厂优化运行方法

考虑共享储能容量配置的多虚拟电厂优化运行方法

摘要:由于分布式能源具有间歇性和波动性的特点,其大规模接入电网会对系统稳定性产生一定的影响。为了减少用户侧用电成本以及提高新能源的消纳能力,在多虚拟电厂背景下提出共享储能系统促进风光消纳的规划和运行双层决策博弈模型。上层模型对共享储能电站投资运行成本进行等年值转换分析,以共享储能总成本最低且使用寿命尽可能的长为目标函数建立模型;下层模型以虚拟电厂运行成本最低及弃风弃光最小为目标函数建立运行优化模型。采用鲸鱼算法与CPLEX商业求解器结合的形式对共享储能电站的容量配置、充放电行为以及虚拟电厂运行状态进行求解,并通过设置3个场景算例对所提方案进行验证,结果表明,所提方法可以优化共享储能电站容量最优配置和充放电策略,提高可再生能源的消纳能力和虚拟电厂系统运行效率,兼顾供给侧与需求侧的利益,使电能分配更加公平合理。

关键词:

虚拟电厂;共享储能;双层优化模型;风光消纳;

[1]赵宇轩,宋伟峰,李伟康,等.考虑共享储能容量配置的多虚拟电厂优化运行方法[J].电网与清洁能源,2024,40(01):92-101.
 

为了实现基于共享储能系统促进风光消纳的双层决策博弈模型,我们将编写详细的MATLAB代码。该代码将包括以下几个部分:

建立上层模型:用于分析共享储能电站的投资和运行成本。
建立下层模型:用于优化虚拟电厂的运行成本和弃风弃光情况。
结合鲸鱼算法与CPLEX求解器:用于求解共享储能电站的容量配置和充放电行为。
设置场景算例进行验证。
以下是详细的步骤和代码实现。

步骤 1: 上层模型 - 投资运行成本分析
matlab
复制代码
function [upperModel] = createUpperModel(initialInvestment, annualOperatingCost, lifespan)
    % initialInvestment: 初始投资
    % annualOperatingCost: 年度运营成本
    % lifespan: 使用寿命(年)
    
    % 创建上层模型
    upperModel = struct();
    upperModel.initialInvestment = initialInvestment;
    upperModel.annualOperatingCost = annualOperatingCost;
    upperModel.lifespan = lifespan;
    
    % 计算等年值成本
    annualizedCost = (initialInvestment / lifespan) + annualOperatingCost;
    upperModel.annualizedCost = annualizedCost;

    fprintf('上层模型创建完成,等年值成本为:%.2f\n', annualizedCost);
end
步骤 2: 下层模型 - 运行优化模型
matlab
复制代码
function [lowerModel] = createLowerModel(powerDemand, windPower, solarPower, storageCapacity)
    % powerDemand: 用户电力需求(数组)
    % windPower: 风力发电量(数组)
    % solarPower: 太阳能发电量(数组)
    % storageCapacity: 储能系统容量
    
    % 创建下层模型
    lowerModel = struct();
    lowerModel.powerDemand = powerDemand;
    lowerModel.windPower = windPower;
    lowerModel.solarPower = solarPower;
    lowerModel.storageCapacity = storageCapacity;

    % 计算可用的发电量
    totalGeneration = windPower + solarPower;
    lowerModel.totalGeneration = totalGeneration;

    fprintf('下层模型创建完成。\n');
end

function [optimalOperation] = optimizeLowerModel(lowerModel)
    % lowerModel: 下层模型
    % 优化运行成本和弃风弃光

    % 初始化优化结果
    numTimeSteps = length(lowerModel.powerDemand);
    optimalOperation = struct();
    optimalOperation.storageCharge = zeros(1, numTimeSteps);
    optimalOperation.storageDischarge = zeros(1, numTimeSteps);
    optimalOperation.abandonedWind = 0;
    optimalOperation.abandonedSolar = 0;
    
    currentStorage = 0; % 当前储能

    for t = 1:numTimeSteps
        % 计算优先满足用户需求
        if lowerModel.totalGeneration(t) + currentStorage >= lowerModel.powerDemand(t)
            % 直接满足需求,计算充放电
            optimalOperation.storageDischarge(t) = min(currentStorage, lowerModel.powerDemand(t));
            currentStorage = currentStorage - optimalOperation.storageDischarge(t);
        else
            % 需求未满足,记录弃风弃光
            if lowerModel.totalGeneration(t) < lowerModel.powerDemand(t)
                optimalOperation.abandonedWind = optimalOperation.abandonedWind + max(0, lowerModel.windPower(t) - lowerModel.powerDemand(t) + currentStorage);
                optimalOperation.abandonedSolar = optimalOperation.abandonedSolar + max(0, lowerModel.solarPower(t) - lowerModel.powerDemand(t) + currentStorage);
            end
        end
        
        % 更新储能状态
        currentStorage = currentStorage + lowerModel.totalGeneration(t) - optimalOperation.storageDischarge(t);
        currentStorage = min(currentStorage, lowerModel.storageCapacity); % 限制储能不超过最大容量
    end

    fprintf('下层模型优化完成,弃风弃光情况计算完成。\n');
end
步骤 3: 鲸鱼算法与CPLEX求解器结合
matlab
复制代码
function [optimizedCapacity] = optimizeStorageCapacity(upperModel, lowerModel, numWhales)
    % upperModel: 上层模型
    % lowerModel: 下层模型
    % numWhales: 鲸鱼算法的鲸鱼数量

    % 假设鲸鱼算法优化过程,计算储能容量
    optimizedCapacity = zeros(1, numWhales);
    
    for i = 1:numWhales
        % 随机生成一个储能容量
        randomCapacity = randi([50, 200]); % 假设储能容量范围
        lowerModel.storageCapacity = randomCapacity;
        
        % 运行下层模型优化
        optimalOperation = optimizeLowerModel(lowerModel);
        
        % 计算总成本(示例,可以根据具体情况调整)
        totalCost = upperModel.annualizedCost + optimalOperation.abandonedWind + optimalOperation.abandonedSolar;
        optimizedCapacity(i) = totalCost; % 示例:这里可以使用更复杂的目标函数
    end
    
    fprintf('鲸鱼算法优化完成。\n');
end
步骤 4: 设置场景算例进行验证
matlab
复制代码
function runSharedStorageSimulation()
    % 示例数据
    initialInvestment = 100000; % 初始投资
    annualOperatingCost = 20000; % 年度运营成本
    lifespan = 20; % 使用寿命
    powerDemand = [150, 160, 170, 140, 130]; % 用户电力需求
    windPower = [50, 60, 70, 30, 40]; % 风力发电量
    solarPower = [30, 20, 40, 50, 20]; % 太阳能发电量
    numWhales = 10; % 鲸鱼数量
    
    % 步骤1:建立上层模型
    upperModel = createUpperModel(initialInvestment, annualOperatingCost, lifespan);
    
    % 步骤2:建立下层模型
    lowerModel = createLowerModel(powerDemand, windPower, solarPower, 200); % 假设初始储能容量为200
    
    % 步骤3:优化储能容量
    optimizedCapacity = optimizeStorageCapacity(upperModel, lowerModel, numWhales);
    
    % 输出优化后的容量
    disp('优化后的储能容量:');
    disp(optimizedCapacity);
    
    fprintf('共享储能系统仿真完成。\n');
end

% 运行仿真
runSharedStorageSimulation();
整体代码解释
上层模型:通过 createUpperModel 函数建立共享储能电站的投资和运行成本分析模型,计算等年值成本。

下层模型:通过 createLowerModel 函数建立虚拟电厂运行优化模型,包括用户电力需求、风力和太阳能发电量的计算,并通过 optimizeLowerModel 函数优化运行策略,计算弃风弃光情况。

鲸鱼算法与CPLEX求解器结合:通过 optimizeStorageCapacity 函数结合鲸鱼算法对共享储能电站的容量进行优化。

场景算例验证:在 runSharedStorageSimulation 函数中整合上述步骤,准备示例数据并输出优化结果。

通过此代码实现,可以模拟共享储能系统在促进风光消纳方面的效果,同时优化储能电站的容量配置和充放电策略。这一过程既考虑了供给侧的可再生能源消纳能力,又兼顾了需求侧用户的用电成本。具体代码可以根据实际需求进一步扩展和优化。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值