复现:基于非合作博弈的居民负荷分层调度模型 为促进居民用户柔性负荷资源有效参与需求响应,可以利用负荷聚合商来聚合用户负荷资源参与电网调度 通过将居民用户的柔性负荷进行分类,建立电网公司、负荷聚合商和居民用户的分层调度模型 在日前投标环节,构建了以聚合商利润最大化为目标的日前投标博弈模型,利用非合作博弈思想对聚合商在日前投标市场进行分析,并给出了博弈纳什均衡解的存在性证明;在实时调度环节,聚合商以分类柔性负荷各自用电物理特性作为约束条件,以实时调度和日前投标量之间的偏差最小作为目标函数对用户分类柔性负荷进行实时调度,使得在不影响用户舒适度情况下提高聚合商的利润 代码采用双层鲸鱼算法求解,仿真结果如图

在电力领域,如何促进居民用户柔性负荷资源有效参与需求响应,一直是个热门话题。利用负荷聚合商来聚合用户负荷资源参与电网调度,无疑是个不错的思路。今天咱就来聊聊基于非合作博弈的居民负荷分层调度模型的复现过程。

一、模型构建思路

首先得把居民用户的柔性负荷进行分类,然后在此基础上建立电网公司、负荷聚合商和居民用户的分层调度模型。这个模型可以说是整个调度策略的核心框架。

1. 日前投标环节

在日前投标环节,构建了以聚合商利润最大化为目标的日前投标博弈模型。这里用到了非合作博弈思想来分析聚合商在日前投标市场的行为。

比如说,假设有多个聚合商在市场中竞争,每个聚合商都会根据自己的利益来决定投标策略。从代码实现角度,我们可以这样来定义一些基本变量(这里以Python为例):

# 假设聚合商数量
num_aggregators = 5
# 每个聚合商的初始资源量
initial_resources = [100 for _ in range(num_aggregators)]

在这个模型中,聚合商需要考虑其他聚合商的策略,以达到自身利润最大化。这里我们需要证明博弈纳什均衡解的存在性。简单来讲,纳什均衡就是一种状态,在这种状态下,每个聚合商采取的策略都是对其他聚合商策略的最优反应,任何一方单独改变策略都不会使自己的收益增加。

2. 实时调度环节

到了实时调度环节,聚合商又有新任务。它要以分类柔性负荷各自用电物理特性作为约束条件,以实时调度和日前投标量之间的偏差最小作为目标函数,对用户分类柔性负荷进行实时调度。这样既能保证不影响用户舒适度,又能提高聚合商的利润。

复现:基于非合作博弈的居民负荷分层调度模型 为促进居民用户柔性负荷资源有效参与需求响应,可以利用负荷聚合商来聚合用户负荷资源参与电网调度 通过将居民用户的柔性负荷进行分类,建立电网公司、负荷聚合商和居民用户的分层调度模型 在日前投标环节,构建了以聚合商利润最大化为目标的日前投标博弈模型,利用非合作博弈思想对聚合商在日前投标市场进行分析,并给出了博弈纳什均衡解的存在性证明;在实时调度环节,聚合商以分类柔性负荷各自用电物理特性作为约束条件,以实时调度和日前投标量之间的偏差最小作为目标函数对用户分类柔性负荷进行实时调度,使得在不影响用户舒适度情况下提高聚合商的利润 代码采用双层鲸鱼算法求解,仿真结果如图

从代码角度,我们可能会有类似这样的约束条件和目标函数定义:

# 假设柔性负荷的用电物理特性限制
flexible_load_limit = 50
# 实时调度量和日前投标量
real_time_scheduling = 40
day_ahead_bidding = 45
# 计算偏差
deviation = abs(real_time_scheduling - day_ahead_bidding)

二、求解算法 - 双层鲸鱼算法

这次代码采用双层鲸鱼算法来求解整个模型。鲸鱼算法是一种模拟鲸鱼群体觅食行为的优化算法。双层结构可能是为了更好地处理不同层次的优化问题,比如外层可能针对宏观的聚合商投标策略优化,内层针对具体的柔性负荷调度优化。

以下是一个简化的鲸鱼算法框架代码示例(同样以Python为例):

import numpy as np

# 定义目标函数
def objective_function(x):
    return np.sum(x**2)

# 鲸鱼算法参数
n = 5  # 种群数量
max_iter = 100
lb = -100
ub = 100

# 初始化鲸鱼位置
whales = np.random.uniform(lb, ub, (n, 2))

for t in range(max_iter):
    a = 2 - t * (2 / max_iter)
    for i in range(n):
        r1 = np.random.rand()
        r2 = np.random.rand()

        A = 2 * a * r1 - a
        C = 2 * r2

        l = np.random.uniform(-1, 1)
        p = np.random.rand()

        if p < 0.5:
            if np.abs(A) < 1:
                D = np.abs(C * np.max(whales, axis=0) - whales[i])
                whales[i] = np.max(whales, axis=0) - A * D
            else:
                rand_whale_index = np.random.choice([j for j in range(n) if j!= i])
                D = np.abs(C * whales[rand_whale_index] - whales[i])
                whales[i] = whales[rand_whale_index] - A * D
        else:
            D = np.abs(np.mean(whales, axis=0) - whales[i])
            whales[i] = np.mean(whales, axis=0) + np.exp(l) * np.cos(2 * np.pi * l) * D

    best_whale = whales[np.argmin([objective_function(whale) for whale in whales])]
    print(f"Iteration {t + 1}, Best solution: {best_whale}, Fitness: {objective_function(best_whale)}")

在这个示例中,我们定义了一个简单的目标函数(这里只是一个简单的平方和函数,实际应用中会替换为模型的目标函数),然后通过鲸鱼算法不断迭代寻找最优解。

三、仿真结果

通过上述模型和算法,最终得到了仿真结果。虽然这里没详细描述仿真结果的图,但可以想象,通过双层鲸鱼算法求解后,我们能够看到在不同场景下,聚合商如何通过合理的投标和实时调度策略,在满足用户舒适度的同时,实现自身利润的提升。整个基于非合作博弈的居民负荷分层调度模型,从理论构建到代码实现,再到最终的仿真结果,形成了一个完整的体系,为电力调度领域提供了一种有效的解决方案。希望这篇博文能给对这个方向感兴趣的朋友一些启发。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐