Electricity Market Optimization 探索系列(三)
本文参考链接link
电网容量规划是一个寻求最优发电容量的过程,找到的最优发电容量能够可靠地满足未来电网的需求
发电机的容量和发电成本呈正相关关系,一台发电机的发电量不能超过其额定发电容量,结合我之前的博客所说的内容,可知负荷持续时间曲线可以很好的帮助电网容量规划
在我之前的博客中可以看到负荷持续时间曲线的大致形状,两台发电机在某一时段的发电量需要大于在该时段的负荷,而为了安全性考虑,可以考虑直接将负载负荷曲线看作是一个分段线性函数,但是这个分段这里考虑的并不是在之前那篇博客中显示的三段线性函数,而是形如下面的图片中的分段函数
下面建立一个简化的发电容量成本最小化模型
参数说明:
符号 | 说明 | 值 |
---|---|---|
G | 发电机个数 | 2 |
H | 时段个数 | 8760 |
O | 分段线性负荷持续时间曲线的分段数 | 2 |
F C i FC_i FCi | 第 i \text \space i\space i 个发电机的固定成本系数 | [140, 120] |
V C i VC_i VCi | 第 i \text \space i\space i 个发电机的可变成本系数 | [0.0238, 0.0336] |
p i , h p_{i, h} pi,h | 第 i \text \space i\space i 个发电机在时段 h \text \space h \space h 的实际发电量 | - |
p ‾ i \overline{p}_{i} pi | 第 i \text \space i\space i 个发电机的发电容量 | - |
l d c m o ldcm_o ldcmo | 分段线性负荷持续时间曲线的斜率(单位: G W / h \text \space GW / h\space GW/h ) | [-0.003, -0.0004427] |
l d c n o ldcn_o ldcno | 分段线性负荷持续时间曲线的截距(单位: G W \text \space GW \space GW ) | [15, 8.728] |
模型的目标函数由发电机的固定成本和可变成本两部分组成
\text \quad 1. 发电机一个时段内的可变成本 \color{red}{发电机一个时段内的可变成本 } 发电机一个时段内的可变成本:该成本与这个时段内的发电量成正比,可变成本会随时间累积
\text \quad 2. 发电机的固定成本 \color{red}{发电机的固定成本 } 发电机的固定成本:该成本与发电机的发电容量成正比
模型的约束由以下几部分组成
\text \quad 1. 每个时段所有发电机的实际发电量之和应该大于等于负荷持续时间曲线在 h \text \space h\space h 时段的取值,
\text \quad 2. 每个时段发电机的实际发电量都不应该超过其发电容量 p ‾ i \overline{p}_{i} pi。
min ∑ i = 1 G c i s.t. c i = ( F C i p ‾ i + V C i ∗ ∑ h = 1 H p i , h ) ∀ h ∈ [ H ] ∑ i = 1 G p i , h ≥ l d c m o ∗ h + l d c n o ∀ h ∈ [ H ] , o = 1 , 2 0 ≤ p i , h ≤ p ‾ i ∀ i ∈ [ G ] , h ∈ [ H ] \begin{align} \min \quad & \sum_{i=1}^{G} c_i \hspace{-4cm}\\ \text{s.t.}\quad & c_i = \left( FC_{i} \overline{p}_{i} +VC_i* \sum_{h=1}^{H} p_{i,h} \right) && \forall h \in [H] \\ & \sum_{i=1}^{G} p_{i,h} \geq ldcm_{o}*h + ldcn_{o} && \forall h \in [H], o=1,2 \\ & 0 \leq p_{i,h} \leq \overline{p}_{i} && \forall i \in [G] , h \in [H] \end{align} mins.t.i=1∑Gcici=(FCipi+VCi∗h=1∑Hpi,h)i=1∑Gpi,h≥ldcmo∗h+ldcno0≤pi,h≤pi∀h∈[H]∀h∈[H],o=1,2∀i∈[G],h∈[H]
其中(3)式也可以写成:
∑ i = 1 G p i , h ≥ max ( l d c m 0 ∗ h + l d c n 0 , l d c m 1 ∗ h + l d c n 1 ) \begin{align} & \sum_{i=1}^{G} p_{i,h} \geq \max(ldcm_0 * h+ldcn_0, ldcm_1 * h+ldcn_1) \end{align} i=1∑Gpi,h≥max(ldcm0∗h+ldcn0,ldcm1∗h+ldcn1)
借助gurobipy 和 plotly, 可以写出如下代码
import pandas as pd
import numpy as np
import plotly.express as px
import plotly.offline as pyo
pyo.init_notebook_mode()import gurobipy as gp
from gurobipy import *
import matplotlib.pyplot as pltG = 2
H = 8760
fixed = [140, 120]
varia = [0.0238, 0.0336] ldc_m = [-0.003, -0.0004427]
ldc_n = [15, 8.628] m = gp.Model()
m.setParam('OutputFlag', 0)cost = m.addVars(G, name="cost") # $
cap = m.addVars(G, name="cap") # 发电机的发电容量作为决策变量
p = m.addVars(G, H, name="p") # 发电机在每一个时段的发电量
ke, kv = multidict(p)
m.update()# 写法一:
for i in range(G):# compute total cost m.addConstr(cost[i] == fixed[i]*cap[i] + varia[i] * gp.quicksum(p[ksub] # 写法二:
for ksub in ke.select(i, '*')))for h in range(H):m.addConstr(p[i,h] <= cap[i])
# for h in range(H):
# for o in range(G):
# # production must at least meet demand
# m.addConstr(sum(p[i,h] for i in range(G)) >= ldc_m[o]*h + ldc_n[o])for h in range(H):# 发电量大于等于该时段的对应的负荷m.addConstr(gp.quicksum(p[ksub] for ksub in ke.select('*', h)) >= max(ldc_m[0]*h + ldc_n[0], ldc_m[1]*h + ldc_n[1]))m.setObjective(gp.quicksum(cost.values()), GRB.MINIMIZE)m.optimize()gen1inh = []
gen2inh = []for h in range(H):for i in range(G):if i == 0:gen1inh.append(p[i, h].X)else:gen2inh.append(p[i, h].X)gen1 = np.array(gen1inh)
gen2 = np.array(gen2inh)# 计算两个发电机在不同时段应该发出的电量
data_plot = pd.DataFrame({"gen1": gen1,"gen2": gen2,"h_count": np.arange(1, H + 1),
})# 计算两条 LDC 曲线的值,并打印取最大值之后的分段线性函数
ldc1 = [ldc_m[0]*h + ldc_n[0] for h in range(H)]
ldc2 = [ldc_m[1]*h + ldc_n[1] for h in range(H)]
max_ldc = [max(ldc1[h], ldc2[h]) for h in range(H)]
data_plot["max_ldc"] = max_ldc
data_plot_long = pd.melt(data_plot, id_vars=['h_count'], value_vars=['gen1', 'gen2', 'max_ldc'], var_name='Source', value_name='Generation')
label_dict = {"h_count": "Hour","Generation": "Generation in GW","Source": "Source"
}
fig = px.line(data_plot_long, x="h_count", y="Generation", color="Source", labels=label_dict)
line_styles = {'gen1': 'solid', 'gen2': 'dash', 'max_ldc': 'dot'}
line_widths = {'gen1': 2, 'gen2': 2, 'max_ldc': 2}
for trace in fig.data:trace.line.dash = line_styles[trace.name]trace.line.width = line_widths[trace.name]
fig.update_layout(width=900, height=600,
)
fig.show()
结果:
\text \quad 发电机1的规划发电容量为8.88,发电机2的规划发电容量为6.12
\text \quad 两台发电机发电机的在不同时段发电量如上图所示,其中绿色的折线表示分段符合持续时间曲线
相关文章:
Electricity Market Optimization 探索系列(三)
本文参考链接link 电网容量规划是一个寻求最优发电容量的过程,找到的最优发电容量能够可靠地满足未来电网的需求 发电机的容量和发电成本呈正相关关系,一台发电机的发电量不能超过其额定发电容量,结合我之前的博客所说的内容,可…...
JAVA进阶之线程
为神马有线程?这玩意儿在干嘛??? 回答这个问题,就先要知道一点点计算机的工作方式。 总所周知,计算机有五部分:输入输出、计算器、存储器、控制器。而在计算机内,CPU、内存、I/O之…...
浙江安吉成新照明电器有限公司分布式光伏发电项目--安科瑞Acrel-1000DP分布式光伏监控系统
安科瑞 崔丽洁 项目背景 随着可再生能源的发展,分布式光伏发电成为重要的能源利用方式。浙江安吉成新照明电器有限公司 3234.465kWp 分布式光伏发电项目应运而生。该公司是螺旋节能灯毛管专业生产企业,于 2007 年 6 月成立,具备全自动生产线、…...
pytorch实现主成分分析 (PCA):用于数据降维和特征提取
人工智能例子汇总:AI常见的算法和例子-CSDN博客 使用 PyTorch 实现主成分分析(PCA)可以通过以下步骤进行: 标准化数据:首先,需要对数据进行标准化处理,确保每个特征的均值为 0,方差…...
2025_2_4 C语言中关于free函数及悬空指针,链表的一级指针和二级指指针
1.free函数 free函数所接受的参数只能是动态分配出来的内存,,否者free的行为是未定义的同一片内存空间不能被free两次 free过后的内存可能会引发悬空指针的问题 2.悬空指针 悬空指针的问题主要是free过后的内存空间,原先指向这片空间的指…...
pytorch逻辑回归实现垃圾邮件检测
人工智能例子汇总:AI常见的算法和例子-CSDN博客 完整代码: import torch import torch.nn as nn import torch.optim as optim from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.model_selection import train_test_split …...
一次线程数超限导致的hive写入hbase作业失败分析
1.集群配置 操作系统:SuSe操作系统 集群节点:100台相同配置的服务器 单台:核心112Core,内存396G 2.问题现象 现象1:跑单个入库任务报错,批量提交任务后出现OOM异常 执行12个hivesql,将数据写入hbase.hbase入库有近一半的任务报错。 每次报错的任务不是同一个,hivesql…...
JAVA安全—反射机制攻击链类对象成员变量方法构造方法
前言 还是JAVA安全,哎,真的讲不完,太多啦。 今天主要是讲一下JAVA中的反射机制,因为反序列化的利用基本都是要用到这个反射机制,还有一些攻击链条的构造,也会用到,所以就讲一下。 什么是反射…...
Java集合面试总结(题目来源JavaGuide)
问题1:说说 List,Set,Map 三者的区别? 在 Java 中,List、Set 和 Map 是最常用的集合框架(Collection Framework)接口,它们的主要区别如下: 1. List(列表) 特点…...
【区块链】深入理解椭圆曲线密码学(ECC)
🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 💫个人格言: "如无必要,勿增实体" 文章目录 深入理解椭圆曲线密码学(ECC)1. 概述2. 椭圆曲线的数学基础2.1 基本定义2.2 有限…...
接口游标分页
由于数据库本身的的限制(以MySQL为例),以 page_num,page_size 为代表的偏移分页方式不可避免的会遇到深分页问题。 不过用户若要找符合条件的少量数据,通过翻页则十分低效,且大多用户也不会往后翻很多页,故对于C端筛选数据场景,限制分页数量增加筛选条件才是标准解决方…...
大数据数仓实战项目(离线数仓+实时数仓)2
目录 1.课程目标和课程内容介绍 2.数仓维度建模设计 3.数仓为什么要分层 4.数仓分层思想和作用 5.数仓中表的种类和同步策略 6.数仓中表字段介绍以及表关系梳理 订单表itcast_orders 订单明细表 itcast_order_goods 商品信息表 itcast_goods 店铺表 itcast_shops 商…...
C++输入输出(上)
cin和cout cin是C中提供的标准输入流对象,一般针对的是键盘,也就是从键盘上输入的字符流,使用 cin来进行数据的提取,cin一般是和 >> (流提取运算符) 配合使用的。 cin的功能和scanf是类似的 cout是C中提供的标准输出流对象,一般针对的是控制台的窗口,也就是将数据以字符…...
SpringBoot 连接Elasticsearch带账号密码认证 ES连接 加密连接
依赖 <dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId> </dependency>配置文件 es:ip: 172.23.4.130port: 9200user: elasticpassword: qwertyuiop读取配置文件…...
选择排序
选择排序的基本思想: 每⼀次从待排序的数据元素中选出最⼩(或最⼤)的⼀个元素,存放在序列的起始位置,直到全部待 排序的数据元素排完。 直接选择排序 1. 在元素集合 array[i]--array[n-1] 中选择关键码最⼤(⼩)的数据…...
Linux——进程概念
目录 一、系统调用和库函数概念二、基本概念三、描述进程-PCB3.1 task_struct-PCB的一种3.2 task_ struct内容分类 四、组织进程五、查看进程六、通过系统调用获取进程标示符七、通过系统调用创建进程- fork初始7.1 fork函数创建子进程7.2 fork 之后通常要用 if 进行分流 八、进…...
强化学习笔记(5)——PPO
PPO视频课程来源 首先理解采样期望的转换 变量x在p(x)分布下,函数f(x)的期望 等于f(x)乘以对应出现概率p(x)的累加 经过转换后变成 x在q(x)分布下,f(x)*p(x)/q(x) 的期望。 起因是:求最大化回报的期望,所以对ceta求梯度 具体举例…...
Java设计模式:行为型模式→状态模式
Java 状态模式详解 1. 定义 状态模式(State Pattern)是一种行为型设计模式,它允许对象在内部状态改变时改变其行为。状态模式通过将状态需要的行为封装在不同的状态类中,实现对象行为的动态改变。该模式的核心思想是分离不同状态…...
postgresql的用户、数据库和表
在 PostgreSQL 中,用户、数据库和表是关系型数据库系统的基本组成部分。理解这些概念对数据库管理和操作至关重要。下面是对这些概念的详细解释: 1. 用户(User) 在 PostgreSQL 中,用户(也称为 角色&#…...
什么是Rust?它有什么特点?为什么要学习Rust?
什么是Rust?它有什么特点?为什么要学习Rust? 如果你是一名编程初学者,或者已经有一些编程经验但对Rust感兴趣,那么这篇文章就是为你准备的!我们将用简单易懂的语言,带你了解Rust是什么、它有什…...
Maven(Ⅱ):依赖范围,依赖传递,依赖阻断,可选依赖
1. Maven 依赖范围 概念 依赖范围(Dependency Scope)用于控制依赖在不同构建阶段的可见性和可用性。Maven 定义了几种不同的依赖范围,每种范围都有其特定的使用场景。 常见依赖范围及用途 compile:默认的依赖范围,…...
个人c项目 java项目解释
1. 测试环境与方法 中文: 本地测试环境:可以在一台配置中等的电脑上构建一个测试环境,利用现成的大词库数据(例如英文词典或自定义数据集)来构建 Trie。使用 C 语言的编译器(例如 gcc)编译项目&…...
51单片机看门狗系统
在 STC89C52 单片机中,看门狗控制寄存器的固定地址为 0xE1。此地址由芯片厂商在硬件设计时确定,但是它在头文件中并未给出,因此在使用看门狗系统时需要声明下这个特殊功能寄存器 sfr WDT_CONTR 0xE1; 本案将用一个小灯的工作状况来展示看门…...
爬虫基础(五)爬虫基本原理
目录 一、爬虫是什么 二、爬虫过程 (1)获取网页 (2)提取信息 (3)保存数据 三、爬虫可爬的数据 四、爬虫问题 一、爬虫是什么 互联网,后面有个网字,我们可以把它看成一张蜘蛛网…...
Android 使用ExpandableListView时,需要注意哪些细节
1. 布局属性设置 尺寸属性 宽度和高度:要合理设置 android:layout_width 和 android:layout_height 属性。如果设置为 match_parent,它会填满父容器;设置为 wrap_content,则会根据内容自动调整大小。例如,若想让 Exp…...
人工智能赋能企业系统架构设计:以ERP与CRM系统为例
一、引言 1.1 研究背景与意义 在数字化时代,信息技术飞速发展,人工智能(Artificial Intelligence, AI)作为一项具有变革性的技术,正深刻地影响着各个领域。近年来,AI 在技术上取得了显著突破,…...
使用HttpClient和HttpRequest发送HTTP请求
项目中经常会用到向第三方系统发送请求来传递数据或者获得信息,一般用的比较多的为HttpClient 和 HttpRequest,这里简要总结一下 HttpClient 和 HttpRequest 的用法 一、HttpClient 1. 发送get请求 public static String get(String url, Map<Stri…...
深度解析:网站快速收录与服务器性能的关系
本文转自:百万收录网 原文链接:https://www.baiwanshoulu.com/37.html 网站快速收录与服务器性能之间存在着密切的关系。服务器作为网站运行的基础设施,其性能直接影响到搜索引擎对网站的抓取效率和收录速度。以下是对这一关系的深度解析&am…...
Android记事本App设计开发项目实战教程2025最新版Android Studio
平时上课录了个视频,从新建工程到打包Apk,从头做到尾,没有遗漏任何实现细节,欢迎学过Android基础的同学参加,如果你做过其他终端软件开发,也可以学习,快速上手Android基础开发。 Android记事本课…...
DeepSeek-R1大模型学习笔记
DeepSeek-R1模型架构设计 DeepSeek-R1基于DeepSeek-V3 base模型,提出了一系列训练策略,包括基于纯强化学习的训练(DeepSeek-R1-Zero)、基于多阶段的训练和冷启动(DeepSeek-R1)、知识蒸馏等。下面的思维导图…...
Unity游戏(Assault空对地打击)开发(4) 碰撞体和刚体的添加
前言 飞机和世界的大小关系不太对,我稍微缩小了一下飞机。 详细步骤 选中所有地形对象,如果没有圈起的部分,点击Add Component搜索添加。 接着选中Player对象,添加这两个组件,最好(仅对于本项目开发&#x…...
每日一题——滑动窗口的最大值
滑动窗口的最大值 题目描述示例说明 解题思路双端队列的特点实现步骤代码实现(C语言)代码解析 总结 题目描述 给定一个长度为 n 的数组 num 和滑动窗口的大小 size,找出所有滑动窗口里数值的最大值。 例如,如果输入数组 {2, 3, …...
DeepSeek 的含金量还在上升
大家好啊,我是董董灿。 最近 DeepSeek 越来越火了。 网上有很多针对 DeepSeek 的推理测评,除此之外,也有很多人从技术的角度来探讨 DeepSeek 带给行业的影响。 比如今天就看到了一篇文章,探讨 DeepSeek 在使用 GPU 进行模型训练…...
list容器(详解)
list的介绍及使用(了解,后边细讲) 1.1 list的介绍(双向循环链表) https://cplusplus.com/reference/list/list/?kwlist(list文档介绍) 1. list是可以在常数范围内在任意位置进行插入和删除的序…...
FinRobot:一个使用大型语言模型的金融应用开源AI代理平台
“FinRobot: An Open-Source AI Agent Platform for Financial Applications using Large Language Models” 论文地址:https://arxiv.org/pdf/2405.14767 Github地址:https://github.com/AI4Finance-Foundation/FinRobot 摘要 在金融领域与AI社区间&a…...
【llm对话系统】大模型 Llama 源码分析之 LoRA 微调
1. 引言 微调 (Fine-tuning) 是将预训练大模型 (LLM) 应用于下游任务的常用方法。然而,直接微调大模型的所有参数通常需要大量的计算资源和内存。LoRA (Low-Rank Adaptation) 是一种高效的微调方法,它通过引入少量可训练参数,固定预训练模型的权重,从而在保持性能的同时大…...
为AI聊天工具添加一个知识系统 之86 详细设计之27 数据处理:ETL
本文要点 ETL 数据提取 作为 数据项目的起点。数据的整个三部曲--里程碑式的发展进程: ETL : 1分形 Type()-层次Broker / 2完形 Method() - 维度Delegate /3 整形 Class() - 容器 Agent 1变象。变象 脸谱Extractor - 缠度(物理 皮肤缠度…...
「全网最细 + 实战源码案例」设计模式——策略模式
核心思想 策略模式(Strategy Pattern)是一种行为型设计模式,用于定义一系列算法或策略,将它们封装成独立的类,并使它们可以相互替换,而不影响客户端的代码,提高代码的可维护性和扩展性。 结构 …...
框架与代码的形状
作为一个代码的设计者,我之前讨论过代码的形状,从“名字”出发,进行讨论。代码的形状:重构的方向-CSDN博客 从比喻的角度来看,名字似代码的血和肉,而框架则似代码的骨架。 猎豹和大象 在大自然中&…...
解决vscode扩展插件开发webview中的请求跨域问题
在webview中是无法发送跨域请求的,可以通过消息机制,在插件中发请求,然后将请求结果传递给webview 我的代码是基于vscode-webview-ui-toolkit-samples-vue来写的 webview vue组件中的代码示例 async function initData() {// 向插件发送消…...
junit5定制点
一、JUnit 5 自定义定制点是什么? JUnit 5 提供了强大的扩展模型(Extension Model),允许开发者通过实现特定接口(如 BeforeEachCallback、ParameterResolver)自定义测试行为。这些接口称为定制点ÿ…...
基于SpringBoot的信息技术知识赛系统的设计与实现(源码+SQL脚本+LW+部署讲解等)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...
【Rust自学】20.1. 最后的项目:单线程Web服务器
喜欢的话别忘了点赞、收藏加关注哦(加关注即可阅读全文),对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 20.1.1. 什么是TCP和HTTP Web 服务器涉及的两个主要协议是超文本传输协议(Hypertext T…...
LabVIEW涡轮诊断系统
一、项目背景与行业痛点 涡轮机械是发电厂、航空发动机、石油化工等领域的核心动力设备,其运行状态直接关系到生产安全与经济效益。据统计,涡轮故障导致的非计划停机可造成每小时数十万元的经济损失,且突发故障可能引发严重安全事故。传统人…...
想品客老师的第十天:类
类是一个优化js面向对象的工具 类的声明 //1、class User{}console.log(typeof User)//function//2、let Hdclass{}//其实跟1差不多class Stu{show(){}//注意这里不用加逗号,对象才加逗号get(){console.log(后盾人)}}let hdnew Stu()hd.get()//后盾人 类的原理 类…...
注解(Annotation)
注解(Annotation)在 Java 中可以用来简化类的使用,使得被注解的类能够被自动发现、自动创建并在需要的地方直接调用,而不需要手动创建实例。具体来说,注解是用来标识类、方法、字段等的,它们通常与一些框架…...
使用开源项目:pdf2docx,让PDF转换为Word
目录 1.安装python 2.安装 pdf2docx 3.使用 pdf2docx 转换 PDF 到 Word pdf2docx:GitCode - 全球开发者的开源社区,开源代码托管平台 环境:windows电脑 1.安装python Download Python | Python.org 最好下载3.8以上的版本 安装时记得选择上&#…...
编程AI深度实战:AI编程工具哪个好? Copilot vs Cursor vs Cody vs Supermaven vs Aider
Cursor自己可以看成一个IDE,而且有强大的RAG功能,这让它对你的意图感知非常厉害,可以精确补全,可以感受代码片段 Aider可以看作一个袖珍,灵活,强大的扳手,怎么用都行,可以放在脚本里调用,可以看代码,可以修改代码。相比Cursor而言,它感受的是文件级别,颗粒度有些不…...
如何安全地管理Spring Boot项目中的敏感配置信息
在开发Spring Boot应用时,我们经常需要处理一些敏感的配置信息,比如数据库密码、API密钥等。以下是一个最佳实践方案: 1. 创建配置文件 application.yml(版本控制) spring:datasource:url: ${MYSQL_URL:jdbc:mysql…...
为AI聊天工具添加一个知识系统 之77 详细设计之18 正则表达式 之5
本文要点 昨天讨论了 本项目(AI聊天工具添加一个知识系统)中正则表达式模板的设计中可能要考虑到的一些问题(讨论到的内容比较随意,暂时无法确定 那些考虑 是否 应该是正则表达式模板设计要考虑的以及 是否完整)。今天…...