首页 > 编程语言 >python代码:基于DDPG(深度确定性梯度策略)算法的售电公司竞价策略研究

python代码:基于DDPG(深度确定性梯度策略)算法的售电公司竞价策略研究

时间:2023-07-11 09:13:55浏览次数:34  
标签:multi plt python 算法 agents alpha DDPG 售电

python代码:基于DDPG(深度确定性梯度策略)算法的售电公司竞价策略研究

关键词:DDPG 算法 深度强化学习 电力市场 发电商 竞价

说明文档:完美复现英文文档,可找我看文档

主要内容:

代码主要研究的是多个售电公司的竞标以及报价策略,属于电力市场范畴,目前常用博弈论方法寻求电力市场均衡,但是此类方法局限于信息完备的简单市场环境,难以直观地反映竞争性的市场环境,因此,本代码通过深度确定性梯度策略算法(DDPG)对发电公司的售价进行建模,解决了传统的RL算法局限于低维离散状态空间和行为空间,收敛性不稳的问题,实验表明,该方法比传统的RL算法具有更高的精度,即使在不完全信息环境下也能收敛到完全信息的纳什均衡。

此外,该方法通过定量调整发电商的耐心参数,可以直观地反映不同的默契合谋程度,是分析市场策略的有效手段。

目前深度强化学习非常火热,很容易出成果,非常适合在本代码的基础上稍微加点东西,即可形成自己的成果,非常适合深度强化学习方向的人学习!

这段代码包含了三个程序,我们分别来进行详细分析。

程序一:

```python

import numpy as np

from market.three_bus import market_clearing

from algorithm.VRE import RothErevAgents

import matplotlib.pyplot as plt

n_agents = 2

action_space = np.arange(0, 3.1, 0.2)

n_steps = 10000

a_real = np.array([15.0, 18.0])

strategic_variables = np.zeros((n_steps, n_agents))

multi_agents = RothErevAgents(n_agents, action_space)

for step in range(n_steps):

action = multi_agents.select_action()

alpha = action * a_real

nodal_price, profit = market_clearing(alpha)

strategic_variables[step] = alpha

multi_agents.learn(profit)

if (step + 1) % 1000 == 0:

print('Step:', step + 1, 'a1: %.2f' % alpha[0], 'a2: %.2f' % alpha[1],

'r1: %.3f' % profit[0], 'r2: %.3f' % profit[1])

C = np.array([[0.36, 0.58, 0.75],

[0.92, 0.28, 0.29]])

plt.plot(strategic_variables[:, 0], lw=0.5, C=C[0], alpha=0.5, label=r"$\alpha_{1t}$")

plt.plot(strategic_variables[:, 1], lw=0.5, C=C[1], alpha=0.5, label=r"$\alpha_{2t}$")

plt.plot([0, 10000], [20.29, 20.29], '--', C=C[0], label=r"$\alpha_{1t}^\ast$")

plt.plot([0, 10000], [22.98, 22.98], '--', C=C[1], label=r"$\alpha_{2t}^\ast$")

plt.xlabel(r"$t$")

plt.ylabel(r"$\alpha_{gt}$ (\$/MHh)")

plt.title("VRE (3-Bus System)")

plt.legend()

plt.savefig('VRE.png', dpi=600)

plt.show()

```

这段代码主要是使用了RothErevAgents算法来进行市场交易的仿真。程序首先导入了一些必要的库,然后定义了一些变量,包括代理数量(n_agents)、动作空间(action_space)、仿真步数(n_steps)和真实的动作值(a_real)。接下来,创建了一个RothErevAgents对象(multi_agents),该对象使用Roth-Erev算法来选择动作。

在每个步骤中,程序通过调用multi_agents.select_action()来选择动作。然后,根据选择的动作和真实的动作值计算alpha值。接着,使用market_clearing函数计算节点价格和利润。将alpha值存储在strategic_variables数组中,并使用multi_agents.learn()函数来更新代理的策略。

在每1000个步骤后,程序会打印出当前步骤数、alpha值和利润。最后,程序使用matplotlib库绘制了两个alpha值随时间变化的图形,并保存为图片。

程序二和程序三的结构与程序一类似,只是使用了不同的算法(QLearning和DDPG)和模型(ANet2和CNet2)。它们的功能和工作方式与程序一类似,只是算法和模型的不同。

YID:77180647355363555

标签:multi,plt,python,算法,agents,alpha,DDPG,售电
From: https://www.cnblogs.com/hansonw/p/17542871.html

相关文章

  • python2.3
      print(10/3)#除法运算print(10/2)#隐式类型转换print(10//3)#整除运算print(10%3)#求余运算print(2**3)#幂运算  x=10y=20x+=y#x=30print(x)x-=y#x=10print(x)x*=y#x=200print(x)x/=y#x=10.0print(x)x%=y#x=10.0print(x)x//=y#x=0.0print(x)......
  • 模糊散布熵Fuzzy dispersion entropy(Python版)
    熵或复杂性度量区分时间序列类别和理解潜在动态的能力是众所周知的。模糊散布熵(Fuzzydispersionentropy,python代码:https://www.jianshu.com/p/1f2542dd8fc1)是采用一种新颖编码方法来保持子序列的符号表示。该算法非常简单,易于实现,作为特征提取方法可以与机器学习、深度学习结合......
  • 模糊散布熵Fuzzy dispersion entropy(Python版)
    熵或复杂性度量区分时间序列类别和理解潜在动态的能力是众所周知的。模糊散布熵(Fuzzydispersionentropy,python代码:https://mbd.pub/o/bread/mbd-ZJuVmZ1u)是采用一种新颖编码方法来保持子序列的符号表示。该算法非常简单,易于实现,作为特征提取方法可以与机器学习、深度学习结合,......
  • python: sqlalchemy ORM in mysql
     """StudengMaping.pyORM(ObjectRelationalMapping)学生表实体类对象关系映射one-oneone-moremore-onemore-moredate2023-06-23edit:GeovinDu,geovindu,涂聚文ide:PyCharm2023.1python11sqlalchemy2.0.1.6https://docs.sqlalchemy.org/en/20/cor......
  • python之数据库MySQL
    数据的演变史#以ATM为例#1.把数据存放在单个文件里面 1.文件名不规范2.数据格式也不规范 kevin|123kevin$123kevin*123#2.软件目录开发规范 db文件夹里 #当数据量多的时候,会产生很多的文件,多次读取文件会占用大量的资源#3.数据库阶段 把数据......
  • opencv-python图像处理模块(一)
    本章节主要记录了图像颜色空间转换(着重讲述了hsv空间和对应的一个roi颜色提取实验);图形的基本绘制,包括绘制直线,矩形,圆和椭圆,还有中英文文字绘制;利用鼠标和键盘控制绘制图形,在图像上面显示某一点的坐标和对应的rgb像素值或者hsv值;以及在图片合适的位置添加logo水印。1图像颜色空间......
  • 【Python】Locust持续优化:InfluxDB与Grafana实现数据持久化与可视化分析
    前言在进行性能测试时,我们需要对测试结果进行监控和分析,以便于及时发现问题并进行优化。Locust在内存中维护了一个时间序列数据结构,用于存储每个事件的统计信息。这个数据结构允许我们在Charts标签页中查看不同时间点的性能指标,但是正因为LocustWebUI上展示的数据实际上是存储......
  • python遍历tk菜单项的名字
    直接上代码:fromtkinterimport*defprint_menu_items(menu):num_items=menu.index('end')#最后一个菜单项的索引forindexinrange(num_items+1):#遍历所有的菜单项item_type=menu.type(index)#获取菜单项的类型#菜单项的......
  • python2.2
     制表位8个字节 1个字2个字节1个字节8位1个bit是1个2进制位,1个byte即1B,是1个字节。1B=8b   ord()将字符转换为Unicode编码,chr()将Unicode编码转换为字符eval()忽略‘’和“”#eval()运行时会忽略‘’和“”print('字符串索引与切片')print(eval('字符串索引与切片......
  • python3使用pip安装wordcloud报错error: Microsoft Visual C++ 14.0 or greater is re
    背景:使用的是Anaconda集成环境,python版本是:3.10,安装wordcloud包,使用的命令是:pipinstallwordcloud,出现报错:error:MicrosoftVisualC++14.0orgreaterisrequired.Getitwith"MicrosoftC++BuildTools":https://visualstudio.microsoft.com/visual-cpp-build-tools/......