(文章复现)基于主从博弈的新型城镇配电系统产消者竞价策略

news2025/1/21 15:31:59

参考文献:

[1]陈修鹏,李庚银,夏勇.基于主从博弈的新型城镇配电系统产消者竞价策略[J].电力系统自动化,2019,43(14):97-104.

1.基本原理

        在竞争性电力市场下,新型城镇配电系统内主要有以下几类主体:电力交易中心和调度部门、产消者、电网公共服务企业以及普通用户。其中,产消者将多余的电能出售给配电网其他用户,每个产消者都是独立且理性的个体,产消者相互之间形成竞争,向交易中心提交竞标曲线,追求自身利益最大化;电网公共服务企业的角色已经发生变化,传统配电网内电网企业从上一级电网购电,是配电网唯一的供电方,而在零售电力市场开放后,电网企业拥有配电经营权,主要提供保底供电服务。一方面,向配电网内售电方收取过网费;另一方面,在配电网内部供电不足时维持功率平衡,保证供电的可靠性,还可以防止配电网内产消者 “抱 团”,故意抬高电价的现象发生。

        电力交易中心和调度部门是城镇配电系统零售市场的管理者与监督者,保证系统安全经济运行,引导电力市场有序健康发展。配电网内日前市场具体调度过程如下:产消者在交易日前15日至交易日前1日向交易中心提交竞标曲线,调度中心与交易中心信息透明、相互配合,根据产消者的竞标曲线与用户的用电需求确定各个产消者的调度出力和出清价格。产消者竞价过程与调度过程满足主从递阶结构,可以视为Stackelberg动态博弈过程,本文将该实际问题转化为包含竞价层和调度层的双层优化模型,具体过程如图1所示。

        产消者为上层决策者,相当于博弈中的领导者,通过非合作博弈,自主报价,以自身利益最大为优化目标。产消者目标函数的一般数学表达式为:

        调度与交易中心为下层决策者,相当于Stackelberg博弈中的跟随者,根据产消者竞标曲线和用电需求,在保证城镇配电系统供电经济性与安全性基础上,以运行成本最低为优化目标,确定各产消者出力。

        目标函数的一般数学表达式为:

1.1上层产消者竞价模型

        本文考虑的新型城镇配电系统中的产消者i具备微型燃气轮机等常规发电设备,也具备光伏、风电等新能源发电设备。

        对于常规发电设备,其发电成本可表示为二次函数,即:

        在不完全竞争的电力市场下,产消者将不会按照边际发电成本竞标,而是为提高收益调整竞标曲线。本文基于SFE构造产消者i的竞价函数为

        一般来讲,新能源发电具有随机性和波动性,由于本文旨在研究竞争导致的零售市场均衡问题,故忽略了不确定性因素而采用预测值。在实际调度过程中,由于微型燃气轮机调节速度快,可以平衡新能源发电引起的不平衡量。

        调度部门确定产消者调度出力,采用按报价结算(pay as bid, PAB)的收益机制结算,产消者i收益的具体目标为:

1.2下层优化调度模型

        本文中电网公共服务企业和普通用户由配电系统调度部门进行统一管理和控制,因此将三者在下层优化调度模型进行论述。

        1.2.1 调度部门优化运行模型

        新型城镇配电系统优化调度的目标为系统整体运行经济成本最低,包括购电成本、网络损耗成本和DR补偿成本,引入网损成本可以优化潮流分布、降低运行成本,而DR成本是为鼓励实施激励政策而提供的补偿成本。

        调度部门在进行调度时应满足如下约束条件。

        1.2.2 电网公共服务企业模型

1.2.3普通用户模型

        能源互联技术的发展允许配电系统中用户参与DR。DR可以分为电价型DR和激励型DR。采用实时电价(real time price,RTP)结算用户电费可以充分调动用户的DR能力。RTP是一种重要的电价型DR项目,通过价格信号对电网运行和市场运营进行最优引导

        用户通过影响下层调度模型潮流约束中的节点负荷量,进一步影响产消者的调度出力和收益从而参与博弈,防止博弈过程中出现产消者集体垄断导致价格不合理。用户通过参与DR最终减少的用电费用为:

2.主从博弈模型求解过程 

2.1产消者竞价主从博弈模型

        在城镇配电网中,各产消者是独立的利益主体,调度部门基于产消者竞标曲线安排产消者出力,并确定电网公共服务企业提供的不平衡功率和用户参与需求响应的负荷调整量。而产消者基于调度部门安排的调度出力调整竞价曲线,提高售电收益。产消者与调度部门之间属于完全信息下的Stackelberg动态博弈,产消者之间竞价策略相互影响,属于完全信息下的非合作博弈。最终,各产消者和电网调度部门的博弈可以构建为Nash-Stackelberg博弈模型。通常,博弈包括博弈方、博弈方策略和收益三个因素。

        该博弈纳什均衡解的存在性在数学上是难以证明的,但可以对下层调度模型潮流约束条件进行凸松弛,使其转化为二阶锥规划问题,具体过程见附录A第A2节。此时,当产消者竞价策略给定时,下层模型可以确定唯一的优化调度结果,因此每个产消者的最优反应总是存在的,意味着该博弈模型的纳什均衡模型是存在的。

2.2 求解过程

        该模型上下层优化目标不一致且变量求解结果相互影响,本文采用改进粒子群优化算法与CPLEX求解器相结合的方法迭代求解模型的均衡解。对于上层产消者非合作博弈模型,采用粒子群优化算法求解迭代过程中产消者的最优竞价策略,该改进粒子群优化算法对粒子位置和速度迭代过程中的权重系数和学习因子重新定义,可实现其自适应调整,提高收敛速度,避免陷入局部最优,改进过程见附录A3。 对于下层优化调度模型,基于YALMIP平 台,采用CPLEX求解器进行求解,以保证解的计算效率和最优性。

        具体求解过程如下。

3.编程思路

3.1参数和变量定义

表1 相关参数

2 上层决策变量

3 下层决策变量

3.2编程思路

        根据对文献内容的解读,可以设计下面的编程思路:

        步骤1:输入所需数据

        这一步比较简单。算例分析用到的部分数据可以从原文中找到,其他数据可以自己假设一下。然后将所有需要的数据,按照表1的定义格式输入即可。

        步骤2改进粒子群算法

        参考文中的改进思路,写出改进粒子群算法的代码。针对Sphere函数,改进粒子群算法和基本粒子群算法的对比如下:

        基本粒子群算法:

        改进粒子群算法:

        说明改进粒子群算法确实效果更好。

        步骤3下层优化调度代码

        文章是一个双层博弈问题,为了调试方便,一般都是要先确保下层优化调度问题求解无误,再将其和上层优化结合起来迭代求解。从数学模型上看,下层优化调度就是一个基于混合整数二阶锥规划(MISOCP)的最优潮流问题,和我之前博客(基于混合整数二阶锥(MISOCP)的配电网重构)中模型基本一致,不同之处在于这篇文章中的模型没有拓扑变量(即不考虑重构),且增加了节点电价这一变量。

        步骤4上层粒子群算法

        上层粒子群算法中,只有一个决策变量a_G,表示产销者的竞价策略,而产销者的出力策略是通过下层优化调度得到的。上层的目标函数是多个产销者的效益最大化,本质上是一个多目标优化,但文中并没有具体告知是采用怎样的优化方式,我在代码中直接将3个产销者的总体效益最大作为优化目标,将多目标转为单目标。

        步骤5上下层迭代寻优

        通过上下层优化迭代求解,得到主从博弈的最优解。

        步骤6输出优化结果

        按文中给定的图表形式,求出最终的优化结果。

4.Matlab代码

%% 清除变量
clc
clear
close all
warning off
 
tic
%% 设置种群参数
parameters;
index = input('选择仿真时刻,1:T=8h,2:T=15h  :');
sizepop = 25;                       % 初始种群个数
dim = 3;                            % 空间维数
ger = 50;                           % 最大迭代次数    
x_max = f_grid*ones(1,dim);         % 位置上限
x_min = zeros(1,dim);               % 位置下限
v_max = 20*ones(1,dim);             % 速度上限
v_min = -20*ones(1,dim);            % 速度下限
wb = 1.5;                           % 惯性权重初值
we = 0.1;                           % 惯性权重末值
c_1b = 1.5;                         % 自我学习因子初值
c_1e = 0.1;                         % 自我学习因子末值
c_2b = 0.1;                         % 群体学习因子初值
c_2e = 1.5;                         % 群体学习因子末值
%% 种群初始化
pop = x_min + rand(sizepop,dim).*(x_max-x_min);     % 初始化种群
pop_v = v_min + rand(sizepop,dim).*(v_max-v_min);   % 初始化种群速度        
pop_zbest = pop(1,:);                               % 初始化群体最优位置
pop_gbest = pop;                                    % 初始化个体最优位置
fitness = zeros(1,sizepop);                         % 所有个体的适应度
fitness_zbest = -inf;                               % 初始化群体最优适应度
fitness_gbest = -inf*ones(1,sizepop);               % 初始化个体最优适应度
%% 初始的适应度
for k = 1:sizepop
    % 计算适应度值
    [Gi,~,~,~,~] = Up_fitnessfun(pop(k,:),index);
    fitness(k) = sum(Gi);
    if fitness(k) > fitness_zbest
        fitness_zbest = fitness(k);
        pop_zbest = pop(k,:);
    end
end
history_pso = zeros(1,ger);            % 粒子群历史最优适应度值
%% 迭代求最优解
iter = 1;
while iter <= ger
    % 更新惯性权重和学习因子
    g = iter;
    g_max = ger;
    w = wb - g/g_max*(wb - we);
    c_1 = c_1e + (c_1b - c_1e)*(1 - acos(-2*g/g_max + 1)/pi);
    c_2 = c_2e + (c_2b - c_2e)*(1 - acos(-2*g/g_max + 1)/pi);
    for k = 1:sizepop
        % 更新速度并对速度进行边界处理 
        pop_v(k,:)= w * pop_v(k,:) + c_1*rand*(pop_gbest(k,:) - pop(k,:)) + c_2*rand*(pop_zbest - pop(k,:));
        for kk = 1:dim
            if  pop_v(k,kk) > v_max(kk)
                pop_v(k,kk) = v_max(kk);
            end
            if  pop_v(k,kk) < v_min(kk)
                pop_v(k,kk) = v_min(kk);
            end
        end
        % 更新位置并对位置进行边界处理
        pop(k,:) = pop(k,:) + pop_v(k,:);
        for kk = 1:dim
            if  pop(k,kk) > x_max(kk)
                pop(k,kk) = x_max(kk);
            end
            if  pop(k,kk) < x_min(kk)
                pop(k,kk) = x_min(kk);
            end
        end
        % 更新适应度值
        [Gi,~,~,~,~] = Up_fitnessfun(pop(k,:),index);
        fitness(k) = sum(Gi);
        if fitness(k) > fitness_zbest
            fitness_zbest = fitness(k);
            pop_zbest = pop(k,:);
 
        end
        if fitness(k) > fitness_gbest(k)
            fitness_gbest(k) = fitness(k);
            pop_gbest(k,:) = pop(k,:);
        end
    end
    history_pso(iter) = fitness_zbest;
    disp(['PSO第',num2str(iter),'次迭代最优适应度=',num2str(fitness_zbest)])
    iter = iter+1;
end
time0 = toc;
 
 
%% 运行结果
show_result;

        以上仅为主函数部分的matlab代码,完整的matlab代码可以从这个链接获取:

基于主从博弈的新型城镇配电系统产消者竞价策略matlab代码

5.运行结果分析

        因为原文并未提供完整的数据,因此结果不完全一样,但原理是相同的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/996756.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WebSocket的那些事(5-Spring STOMP支持之连接外部消息代理)

目录 一、序言二、开启RabbitMQ外部消息代理三、代码示例1、Maven依赖项2、相关实体3、自定义用户认证拦截器4、Websocket外部消息代理配置5、ChatController6、前端页面chat.html 四、测试示例1、群聊、私聊、后台定时推送测试2、登录RabbitMQ控制台查看队列信息 五、结语 一、…

合宙Air724UG LuatOS-Air LVGL API控件-截屏(Screenshots)

截屏&#xff08;Screenshots&#xff09; 分 享导出pdf 截屏功能&#xff0c;core版本号要>3211 示例代码 -- 创建图片控件img lvgl.img_create(lvgl.scr_act(), nil)-- 设置图片显示的图像lvgl.img_set_src(img, "/lua/test.png")-- 图片居中lvgl.obj_align(…

Pygame中Sprite类的使用1

在Pygame中有一个名为sprite的模块&#xff0c;又叫做“精灵”模块。通过该模块中的Sprite类可以实现图形的绘制、移动以及碰撞检测等功能。 1 Sprite类的编写 例如&#xff0c;要绘制“植物大战僵尸”中的僵尸&#xff0c;就可以创建一个新类&#xff0c;让该类继承自sprite…

零基础Linux_2(基本指令_上)目录/文件的显示跳转创建删除

目录 1. 目录内容的显示 ls(显示非隐藏文件) pwd(显示用户当前所在的目录) ls -l(列出文件的详细信息) ls -a(显示隐藏文件) 2. 目录的跳转操作 cd ..(回到上级路径) cd 绝对路径名(进入这个路径) cd 绝对相对名(进入这个路径) cd ~(跳转到当前用户的家目录) cd -(跳…

SQL语法知识回顾

一、SQL语言的分类 由于数据库管理系统&#xff08;数据库软件&#xff09;功能非常多&#xff0c;不仅仅是存储数据&#xff0c;还要包含&#xff1a;数据的管理、表的管理、库的管理、账户管理、权限管理等等。所以&#xff0c;操作数据库的SQL语言&#xff0c;也基于功能&am…

Microsoft Edge网页视频播放绿屏解决方法(B站)

一&#xff1a;问题&#xff0c;在B站观看视频时有绿色条纹 二&#xff1a;查找原因&#xff0c;未知 三&#xff1a;解决方法 三.1网页设置关闭硬件加速 三.2 点击视频播放下的 “小齿轮”&#xff0c;然后点击“更多播放设置” 把播放策略 “默认” 改为“AVC” 四&…

[SUCTF2019]SignIn 题解

是一个64位的文件 使用了RSA加密算法 N是103461035900816914121390101299049044413950405173712170434161686539878160984549 使用在线网站分离得到p&#xff0c;q 然后编写脚本进行解密 import gmpy2 import binasciip 282164587459512124844245113950593348271 q 366669…

回归预测 | MATLAB实现MPA-BiGRU海洋捕食者算法优化双向门控循环单元多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现MPA-BiGRU海洋捕食者算法优化双向门控循环单元多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现MPA-BiGRU海洋捕食者算法优化双向门控循环单元多输入单输出回归预测&#xff08;多指标&#xff0c;多图&a…

03-系统篇-内存碎片

一.常见的malloc内存分配原理 1内存分配原理 linux中应用层动态分配内存一般是用的malloc函数&#xff0c;而malloc在glibc中实现时&#xff0c;是用sbrk()来分内存. 在前面的章节中&#xff0c;我们了解到了堆的概念&#xff0c;堆在内存中&#xff0c;是一断连续的内存&…

适应度函数

23个基准测试函数 优化算法常用的适应度函数23个基准测试函数的图像python版code将以上代码打包为exe 优化算法常用的适应度函数 23个基准测试函数的图像 python版code 将23个基准测试函数封装成python库&#xff0c;并进行实例化、调用绘图函数。下面代码只需根据提示打印&am…

算法通关村18关 | 透析回溯的

回溯有清晰的解题模板&#xff0c; void backtracking(参数){if (终止条件){存放结果;return;}for (选择本层中的集合元素&#xff08;画成树&#xff0c;就是树节点孩子的大小) {处理节点;backtracking();回溯&#xff0c;撤销处理结果;}} 1. 从N叉树说起 在回溯之前&#x…

时序分解 | MATLAB实现ICEEMDAN+SE改进的自适应经验模态分解+样本熵重构分量

时序分解 | MATLAB实现ICEEMDANSE改进的自适应经验模态分解样本熵重构分量 目录 时序分解 | MATLAB实现ICEEMDANSE改进的自适应经验模态分解样本熵重构分量效果一览基本介绍程序设计参考资料 效果一览 基本介绍 ICEEMDANSE改进的自适应经验模态分解样本熵重构分量 包括频谱图 避…

配置Xftp绕过跳板机直连内网环境

一、需求说明 因现场环境限制&#xff0c;现在只有一台管理主机可连入内网环境&#xff0c;但因现在需要传入大量数据到内网环境&#xff0c;二管理主机的存储又无法满足需求&#xff0c;rz和sz命令又有传输大小限制&#xff0c;因此&#xff0c;我们来看下如何配置【隧道】实现…

Win10如何找回图片查看器

近期有小伙伴反映在将Win10升级之后发现电脑自带的图片查看器没有了&#xff0c;这是怎么回事&#xff0c;该怎么找回呢&#xff0c;下面小编就给大家详细介绍一下Win10找回图片查看器的方法&#xff0c;有需要的小伙伴快来和小编一起阅读看看吧。 win10找回windows照片查看器…

日志平台搭建第三章:Linux安装logstash

相关链接 项⽬主⻚&#xff1a; https://www.elastic.co/cn/downloads/logstash 下载地址&#xff1a; wget https://artifacts.elastic.co/downloads/logstash/logstash-7.5.1.tar.gz 官网下载可能比较慢&#xff0c;下面提供下载地址 百度云链接&#xff1a;https://pan.…

【Linux】对进程概念的理解

一丶进程概念 进程定义 进程是一个具有一定独立功能的程序在一个数据集合上依次动态执行的过程。进程是一个正在执行的程序的实例&#xff0c;包括程序计数器、寄存器和程序变量的当前值。 进程特征 1.进程依赖于程序运行而存在&#xff0c;进程是动态的&#xff0c;程序是…

生成树协议 STP(spanning-tree protocol)

一、STP作用 1、消除环路&#xff1a;通过阻断冗余链路来消除网络中可能存在的环路。 2、链路备份&#xff1a;当活动路径发生故障时&#xff0c;激活备份链路&#xff0c;及时恢复网络连通性。 二、STP选举机制 1、目的&#xff1a;找到阻塞的端口 2、STP交换机的角色&am…

UG\NX CAM二次开发 设置工序毛坯 UF_CAMGEOM_append_items

文章作者:代工 来源网站:NX CAM二次开发专栏 简介: UG\NX CAM二次开发 设置工序毛坯 UF_CAMGEOM_append_items 效果: 代码: static int init_proc(UF_UI_selection_p_t select, void* user_data) { int errorCode = 0; int num_triples = 1; UF_UI_mask_t mas…

JavaScript设计模式(五)——发布订阅模式、桥接模式、组合模式

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1f4c3;个人状态&#xff1a; 研发工程师&#xff0c;现效力于中国工业软件事业 &#x1f680;人生格言&#xff1a; 积跬步…

Rokid Jungle--Max pro

介绍和功能开发 YodaOS-Master操作系统&#xff1a;以交换计算为核心&#xff0c;实现单目SLAM空间交互&#xff0c;具有高精度、实时性和稳定性。发布UXR2.0SDK&#xff0c;为构建空间内容提供丰富的开发套件 多模态交互 算法原子化 多种开发工具协同 多生态支持 骁龙XR2…