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=1Gcici=(FCipi+VCih=1Hpi,h)i=1Gpi,hldcmoh+ldcno0pi,hpih[H]h[H],o=1,2i[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=1Gpi,hmax(ldcm0h+ldcn0,ldcm1h+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 plt

G = 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 两台发电机发电机的在不同时段发电量如上图所示,其中绿色的折线表示分段符合持续时间曲线

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深入理解和使用定时线程池ScheduledThreadPoolExecutor

文章目录 前言认识定时线程池什么是定时线程池&#xff1f;定时线程池基本API使用定时线程池的应用场景1、定时任务调度2、缓存过期清理3、心跳检测4、延迟任务执行 定时线程池scheduleAtFixedRate与scheduleWithFixedDelay区别scheduleAtFixedRate案例demo&#xff08;period&…

在Mac mini M4上部署DeepSeek R1本地大模型

在Mac mini M4上部署DeepSeek R1本地大模型 安装ollama 本地部署&#xff0c;我们可以通过Ollama来进行安装 Ollama 官方版&#xff1a;【点击前往】 Web UI 控制端【点击安装】 如何在MacOS上更换Ollama的模型位置 默认安装时&#xff0c;OLLAMA_MODELS 位置在"~/.o…

动态规划练习九(完全背包问题)

一、问题介绍与解题心得 完全背包问题与01背包问题很相似&#xff0c;不同点就是每个物品数量有多个&#xff0c;每个物品可以取多个或不取&#xff0c;来达到收益最大&#xff0c;或者收益在某个值。 限制条件&#xff1a;背包容量有限 解决问题&#xff1a;从价值入手&…

百亿大表的实时分析:华安基金 HTAP 数据库的选型历程与 TiDB 使用体验

导读 在金融科技迅猛发展的今天&#xff0c;华安基金作为行业的先行者&#xff0c;面临着数据管理和分析的全新挑战。随着业务的不断扩展和数据量的激增&#xff0c;传统的数据库架构已难以满足系统对实时性、灵活性和分析能力的需求。在这样的背景下&#xff0c;HTAP&#xf…

低代码系统-产品架构案例介绍、蓝凌(十三)

蓝凌低代码系统&#xff0c;依旧是从下到上&#xff0c;从左至右的顺序。 技术平台h/iPaas 指低层使用了哪些技术&#xff0c;例如&#xff1a;微服务架构&#xff0c;MySql数据库。个人认为&#xff0c;如果是市场的主流&#xff0c;就没必要赘述了。 新一代门户 门户设计器&a…

DeepSeek研究员在线爆料:R1训练仅用两到三周,春节期间观察到R1 zero强大进化

内容提要 刚刚我注意到DeepSeek研究员Daya Guo回复了网友有关DeepSeek R1的一些问题&#xff0c;以及接下来的公司的计划&#xff0c;只能说DeepSeek的R1仅仅只是开始&#xff0c;内部研究还在快速推进&#xff0c;DeepSeek 的研究员过年都没歇&#xff0c;一直在爆肝推进研究…

【Rust自学】20.1. 最后的项目:单线程Web服务器

喜欢的话别忘了点赞、收藏加关注哦&#xff08;加关注即可阅读全文&#xff09;&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 20.1.1. 什么是TCP和HTTP Web 服务器涉及的两个主要协议是超文本传输​​协议(Hypertext T…

19.[前端开发]Day19-王者荣项目耀实战(二)

01_(掌握)王者荣耀-main-banner展示实现 完整代码 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewpor…

Java 基于微信小程序的高校失物招领平台小程序(附源码,文档)

博主介绍&#xff1a;✌程序员徐师兄、8年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战*✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447…

题解:洛谷 P5837 [USACO19DEC] Milk Pumping G

题目https://www.luogu.com.cn/problem/P5837 温馨提示&#xff1a;鉴于数据范围小的可怜&#xff0c;我们可以用暴力一些的想法去做&#xff0c;别看到是普及/提高就被吓退了。 枚举最小流量 &#xff0c;然后跑一遍最短路&#xff0c;求出带限制的 到 的最短路的长度&#…

动态规划——斐波那契数列模型问题

文章目录 1137. 第 N 个泰波那契数算法原理代码实现 面试题 08.01. 三步问题算法原理代码实现 746. 使用最小花费爬楼梯算法原理代码实现 91. 解码方法算法原理代码实现 1137. 第 N 个泰波那契数 题目链接&#xff1a;1137. 第 N 个泰波那契数 算法原理 状态表示&#xff1a;…

LabVIEW涡轮诊断系统

一、项目背景与行业痛点 涡轮机械是发电厂、航空发动机、石油化工等领域的核心动力设备&#xff0c;其运行状态直接关系到生产安全与经济效益。据统计&#xff0c;涡轮故障导致的非计划停机可造成每小时数十万元的经济损失&#xff0c;且突发故障可能引发严重安全事故。传统人…

java程序员面试自身优缺点,详细说明

程序员面试大厂经常被问到的Java异常机制问题,你搞懂了吗运行时异常:运行时异常是可能被程序员避免的异常。与检查性相反,运行时异常可以在编译时被忽略。错误(ERROR):错误不是异常,而是脱离程序员控制的问题。错误通常在代码中容易被忽略。例如:当栈溢出时,一个错误就发生了,它…

大话特征工程:3.特征扩展

公元 2147 年&#xff0c;人类文明站在科技的巅峰&#xff0c;所有决策、发展甚至感知都被“全维计算网络”所掌控。这套系统以高维空间中的数据为基础&#xff0c;试图预测并塑造未来。然而&#xff0c;这场辉煌的技术革命却在悄无声息之间酿成了人类最大的危机——维数灾难。…

CSV数据分析智能工具(基于OpenAI API和streamlit)

utils.py&#xff1a; from langchain_openai import ChatOpenAI from langchain_experimental.agents.agent_toolkits import create_csv_agent import jsonPROMPT_TEMPLATE """你是一位数据分析助手&#xff0c;你的回应内容取决于用户的请求内容。1. 对于文…

2025.2.5

Web [SWPUCTF 2021 新生赛]ez_unserialize: 这个题先了解一下反序列化&#xff1a;反序列化是序列化的逆过程。序列化是将对象或数据结构转换为可以存储或传输的格式&#xff08;如JSON、XML或二进制格式&#xff09;的过程。反序列化则是将这个格式的数据转换回原始的对象或…

新版AndroidStudio 修改 jdk版本

一、问题 之前&#xff0c;在安卓项目中配置JDK和Gradle的过程非常直观&#xff0c;只需要进入Android Studio的File菜单中的Project Structure即可进行设置&#xff0c;十分方便。 如下图可以在这修改JDK: 但是升级AndroidStudio之后&#xff0c;比如我升级到了Android Stu…

Web3技术详解

Web3技术代表着互联网技术的最新进展&#xff0c;它致力于打造一个去中心化的互联网生态系统。以下是对Web3技术的详细解析&#xff1a; 一、Web3技术的核心概念 Web3是第三代互联网技术的代名词&#xff0c;代表着去中心化、区块链驱动和用户自有控制的理念。在Web3的世界中…

景联文科技:专业数据采集标注公司 ,助力企业提升算法精度!

随着人工智能技术加速落地&#xff0c;高质量数据已成为驱动AI模型训练与优化的核心资源。据统计&#xff0c;全球AI数据服务市场规模预计2025年突破200亿美元&#xff0c;其中智能家居、智慧交通、医疗健康等数据需求占比超60%。作为国内领先的AI数据服务商&#xff0c;景联文…

3.【BUUCTF】XSS-Lab1

进入题目页面如下 好好好&#xff0c;提示点击图片&#xff0c;点进去页面如下&#xff0c;且url中有传参&#xff0c;有注入点 发现题目给出了源码 查看得到本题的源码 分析一下代码 <!DOCTYPE html><!--STATUS OK--> <!-- 声明文档类型为 HTML5&#xff0c;告…