【需求响应】一种新的需求响应机制DR-VCG研究

news2024/9/27 9:30:51

目录

1 主要内容

2 部分代码

3 程序结果

4 程序链接


主要内容

该程序对应文章《Contract Design for Energy Demand Response》,电力系统需求响应(DR)用来调节用户对电能的需求,即在预测的需求高于电能供应时,希望通过需求响应减少用户用电,从而满足系统平衡。程序实现新的需求响应模型DR-VCG,该模型提供了灵活的用户参与DR过程合同,并且通过投标活动保证收益分配和价格计算的合理性。通过实例证实该方法的有效性,可靠性显著提升,总费用明显降低。该程序采用python编写。

部分代码

import grid
import agent
import contract
import matplotlib.pyplot as plt
import time
import statistics
import pandas as pd
from datetime import datetime
​
​
​
def main():
    for i in range(1):
        M = 1000
        number_of_agents = 200
        number_of_simulation_per_lanbda = 100
        generator_price_multiply = 1
        gamma = [1.0,1.166,1.333,1.5,1.666,1.833,2]
        df_columns = ['actuel expanse','gamma','M','actuel kWh reduced','Met the demand']
        row_data_df = pd.DataFrame(columns=df_columns)
​
        Fixed_cont_avg_cost = []
        Fixed_cont_avg_reliability = []
        Fixed_single_cont_avg_cost = []
        Fixed_single_cont_avg_reliability = []
        T_F_List_Fixed_cont_Met_the_demand = []
        Fixed_cont_Total_expense = []
        gamma_used = []
        for lb in gamma:
            Fixed_cont_reduce_list = []
            for i in range(number_of_simulation_per_lanbda):
                start = time.time()
                print('iteration:',i)
                Grid = grid.grid(M,lb)
                Grid.introduce_self()
                Agents = []
​
                for num in range(number_of_agents):
                    ag = agent.agent(num)
                    Agents.append(ag)
​
​
                Contracts = []
                for i in range(10, M+1, 10):
                    Contracts.append(contract.contract(i,0.3,0.5))
​
​
                single_contract = []
                single_contract.append(contract.contract(50,0.3,0.5))
​
                Grid.set_single_contract(single_contract)
                Grid.set_contract(Contracts)
                Grid.set_agents(Agents)
                Grid.send_contrects_to_agents()
                Grid.send_single_contrects_to_agents()
​
​
                for ag in Agents:
                    ag.Fixed_cont_bid_on_contract()
​
​
                for ag in Agents:
                    ag.Fixed_single_cont_bid_on_contract()
​
                Grid.Fixed_cont_get_bids_from_agent()
                Grid.Fixed_cont_generator_bids(price_multiply=generator_price_multiply)
                Grid.Fixed_cont_get_q_from_agent()
                Fixed_cont_sum_of_bids = Grid.knapsack(bids_type='Fixed_cont')
                Grid.Fixed_cont_pay_to_agents(Fixed_cont_sum_of_bids)
                Grid.Fixed_cont_reliability()
                Grid.Fixed_single_cont_get_bids_from_agent()
                Grid.Fixed_single_cont_get_q_from_agent()
​
​
                Fixed_cont_Total_expense.append(Grid.Fixed_cont_Total_expense_sum)
                Fixed_cont_reduce_list.append(Grid.Fixed_cont_reliability_sum_q)
                if Grid.Fixed_cont_reliability_sum_q >= Grid.M:
                    met_the_demand = 1
                else:
                    met_the_demand = 0
                T_F_List_Fixed_cont_Met_the_demand.append(met_the_demand)
                print('Fixed_cont- Met_the_demand: ', T_F_List_Fixed_cont_Met_the_demand)
                print('Fixed_cont- Total_expense: ', Fixed_cont_Total_expense)
                gamma_used.append(lb)
​
​
                row_data_df = row_data_df.append(pd.DataFrame(
                                                 {'actuel expanse':[Grid.Fixed_cont_Total_expense_sum],
                                                  'gamma':[lb],
                                                  'M': [M],
                                                  'actuel kWh reduced': [Grid.Fixed_cont_reliability_sum_q],
                                                  'Met the demand': [met_the_demand]}))
                end = time.time()
                print('iteration took:', (end - start), 'sec')
                print('-'*200)
            Fixed_cont_avg_cost.append(statistics.mean(Fixed_cont_Total_expense))
            if len(T_F_List_Fixed_cont_Met_the_demand) > 0:
                Fixed_cont_avg_reliability.append(T_F_List_Fixed_cont_Met_the_demand.count(True) / len(T_F_List_Fixed_cont_Met_the_demand))
            else:
                Fixed_cont_avg_reliability.append(0.0)
​
        filename = datetime.now().strftime('data/energy_demamd_row_data-%Y-%m-%d-%H-%M-%S.csv')
        row_data_df.to_csv(filename,index=False)
        graph_it(Fixed_cont_avg_reliability,
                 Fixed_single_cont_avg_reliability, Fixed_cont_avg_cost,
                 Fixed_single_cont_avg_cost)
​
def graph_it(Fixed_cont_avg_reliability =[],
             Fixed_single_cont_avg_reliability=[],
             Fixed_cont_avg_cost=[],
             Fixed_single_cont_avg_cost=[]):
    plt.rcParams["figure.figsize"] = (8, 8)
    fig, ax = plt.subplots()
​
    ax.plot(Fixed_cont_avg_reliability, Fixed_cont_avg_cost, color='blue',marker='o',label="fixed multiple cont")
    ax.plot(Fixed_single_cont_avg_reliability, Fixed_single_cont_avg_cost, color='black',marker='o', label="fixed single cont")
    ax.set(xlabel="Total_Reliability", ylabel="expenses ($)", title="(a)n= 400")
    fig.savefig("test.png")
​
​
​
if __name__ == "__main__":
    main()
    plt.show()

程序结果

原文结果图:

4 程序链接

 关注+私信免费获取程序源码和资料!

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

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

相关文章

VS Code调试Darknet

一、安装插件 二、连接服务器 三、调试darknet工程 {"version": "2.0.0","options": {"cwd": "${workspaceFolder}"},"tasks": [{"label": "clean","type": "shell",&qu…

数据结构之动态顺序表(附带完整程序)

🎈基本概念 🌈一.线性表、顺序表的定义 ☀️(1)线性表: 是n个具有相同特性的数据元素的有限序列。线性表在逻辑上是线性结构,但在物理上存储时,通常以数组和链式结构的形式存储。 ☀️&…

C# 关于使用newlife包将webapi接口寄宿于一个控制台程序、winform程序、wpf程序运行

C# 关于使用newlife包将webapi接口寄宿于一个控制台程序、winform程序、wpf程序运行 安装newlife包 Program的Main()函数源码 using ConsoleApp3; using NewLife.Log;var server new NewLife.Http.HttpServer {Port 8080,Log XTrace.Log,SessionLog XTrace.Log }; serv…

hcip——ospf综合

要求 1. 搭建toop 2.地址规划 协议范围路由器地址 RIP 172.16.0.0 17 R12 loop0:172.16.0.0 24 loop1:172.16.1.0 24 OSPF 172.16.128.0 17 area1 172.16.144.0 20 R1 g0:172.16.144.1 24 loop0:172.16.145.1 24 R2 g0:172.16.144.2 24 loop:172…

iOS - Apple开发者账户添加新测试设备

获取UUID 首先将设备连接XCode,打开Window -> Devices and Simulators,通过下方位置查看 之后登录(苹果开发者网站)[https://developer.apple.com/account/] ,点击设备 点击加号添加新设备 填写信息之后点击Continue,并一路继续…

Golang Devops项目开发(1)

1.1 GO语言基础 1 初识Go语言 1.1.1 开发环境搭建 参考文档:《Windows Go语言环境搭建》 1.2.1 Go语言特性-垃圾回收 a. 内存自动回收,再也不需要开发人员管理内存 b. 开发人员专注业务实现,降低了心智负担 c. 只需要new分配内存,…

Android系统服务之AMS

目录 概述 重点和难点问题 启动方式 main入口: run方法: BootstrapSevices 小结: 与其他线程的通信原理 参考文档: 概述 AMS是Android系统主要负责四大组件的启动,切换,调度以及应用程序进程管理和调度等工…

watch避坑,使用computed进行处理数据

业务场景:在vue中监听el-input 中的字数有没有超过60,如果超过60字时将60后面的字变为 “>>” 符号,以此实现预览苹果手机推送摘要场景。 错误:开始的逻辑是使用watch监听,检查length超过60直接 加上符号&#x…

选好NAS网络储存解决方案,是安全储存的关键

随着网络信息的发展,NAS也越来越受到企业的关注,NAS网络存储除了提供简单的存储服务外,还可以提供更好的数据安全性、更方便的文件共享方式。但市面上的产品种类繁多,我们该如何选择合适的产品,通过企业云盘&#xff0…

spring5源码篇(12)——spring-mvc请求流程

spring-framework 版本:v5.3.19 文章目录 一、请求流程1、处理器映射器1.1、 RequestMappingHandlerMapping1.2、获取对应的映射方法1.3、添加拦截器 2、获取合适的处理器适配器3、通过处理器适配器执行处理器方法3.1、拦截器的前置后置3.2、处理器的执行3.2.1 参数…

Unity 性能优化二:内存问题

目录 策略导致的内存问题 GFX内存 纹理资源 压缩格式 Mipmap 网格资源 Read/Write 顶点数据 骨骼 静态合批 Shader资源 Reserved Memory RenderTexture 动画资源 音频资源 字体资源 粒子系统资源 Mono堆内存 策略导致的内存问题 1. Assetbundle 打包的时候…

【C++】C++ STL标准模板库知识点总结(秋招篇)

文章目录 前言STL的六大组件是?容器(container) 算法(algorithm) 迭代器(iterator) 三者的关系?容器分为几种?分别有哪些?关联性容器和非关联性容器有什么区别?Vector容器是怎么调整大小的?(内存…

VirtualEnv 20.24.0 发布

导读VirtualEnv 20.24.0 现已发布,VirtualEnv 用于在一台机器上创建多个独立的 Python 运行环境,可隔离项目之间的第三方包依赖,为部署应用提供方便,把开发环境的虚拟环境打包到生产环境即可,不需要在服务器上再折腾一…

RAM明明断电会丢失数据,为什么初始化的全局变量存储在RAM?详细分析程序的存储

前言 (1)之前因为一个字符指针和字符数组指针引发的bug,折磨了我一个下午才发现问题。之后我就打算研究一下系统是如何发现野指针乱访问问题。后面就一直深入到微机系统中的内存管理了。 (2)这些其实都是基础知识&…

SpringBoot房屋租赁系统【附ppt|万字文档(LW)和搭建文档】

主要功能 前台登录: ①首页:公告信息、房屋信息展示、查看更多等 ②房屋信息、房屋类型、我要当房主、公告信息、留言反馈等 ③个人中心:可以查看自己的信息、更新图片、更新信息、退出登录、我的收藏 后台登录: ①首页、个人中心…

Day 69-70:矩阵分解

代码: package dl;import java.io.*; import java.util.Random;/** Matrix factorization for recommender systems.*/public class MatrixFactorization {/*** Used to generate random numbers.*/Random rand new Random();/*** Number of users.*/int numUsers…

使用贝叶斯算法完成文档分类问题

贝叶斯原理 贝叶斯原理(Bayes theorem)是一种用于计算条件概率的数学公式。它是以18世纪英国数学家托马斯贝叶斯(Thomas Bayes)的名字命名的。贝叶斯原理表达了在已知某个事件发生的情况下,另一个事件发生的概率。具体…

【Golang系统开发】搜索引擎(1) 如何快速判断网页是否已经被爬取

文章目录 1. 写在前面2. 数组存储3. 位图存储3.1 位图简介3.2 链表法3.3 开放寻址法 1. 写在前面 在实际工作中,我们经常需要判断一个对象是否存在,比如判断用户注册登陆时候,需要判断用户是否存在,再比如搜索引擎中的爬虫&#x…

大数据面试题之Elasticsearch:每日三题(七)

大数据面试题之Elasticsearch:每日三题 1.Elasticsearch索引文档的流程?2.Elasticsearch更新和删除文档的流程?3.Elasticsearch搜索的流程? 1.Elasticsearch索引文档的流程? 协调节点默认使用文档ID参与计算(也支持通过routing)&a…

【UE4】给角色添加脚步声

步骤: 1. 导入一个脚步声音频文件(.wav格式) 2. 打开角色蓝图,这里以第三人称角色模板蓝图“ThirdPersonCharacter”为例,在事件图表中添加一个生成音效的自定义事件。 3. 打开动画序列“ThirdPersonRun” 找到小白人…