学习笔记:电力现货市场预测及ABM模型应用

一、赛题背景与数据集说明

电力现货市场

  • 类似于证券交易市场,按需实时交易电能。
  • 市场参与者包括供给方、会集并出售电力方等。
  • 目标是实现资源最优配置,市场价格由供需关系决定。

数据集说明

  • electricity price.csv:包含市场出清价格、需求等信息。
  • unit.csv:包含发电机组的参数信息。

示例数据:

  • electricity price.csv

    • day:交易日期
    • time:交易时间
    • demand:电力需求总量
    • clearing price (CNY/MWh):市场出清价格
  • unit.csv

    • unit ID:机组编号
    • Capacity (MW):机组的额定容量
    • Utilization Hour (h):电厂年平均运行小时数
    • Coal Consumption (g coal/KWh):每发一度电需要消耗的煤量
    • Power Consumption Rate (%):电厂单位时间内的电量与发电量的百分比
二、市场出清价格(Market Clearing Price)形成机制

出清价格形成

  • 所有发电机组根据自己实际出的电价和电量,从低到高排序,依次从低价开始成交。
  • 当总需求被满足时,最后一个达成交易的机组报价为市场出清价格。

出清价格示例

  • 市场总需求为3000MW,四个机组报价和容量如下:
    • 机组1:报价100元,容量500MW
    • 机组2:报价150元,容量2000MW
    • 机组3:报价200元,容量2000MW
    • 机组4:报价250元,容量2500MW
  • 最后一个达成交易的机组是机组4,报价250元即为市场出清价格。

价格帽

  • 为了保证市场稳定,电力现货市场存在价格帽限制:
    • 报价上限:3000元/MWh
    • 报价下限:-80元/MWh
    • 出清价格上限:1500元/MWh
    • 出清价格下限:-100元/MWh
三、代码解析

安装和导入必要的库

python

!pip install numpy pandas scikit-learn matplotlib seaborn
import numpy as np
import pandas as pd
from pathlib import Path
from sklearn.linear_model import LinearRegression

读取数据

python

base_path = Path("data")  # 确保数据都放在同级的data目录下
electricity_price = pd.read_csv(base_path / "electricity price.csv")
unit = pd.read_csv(base_path / "unit.csv")

处理数据

  1. 准备示例提交数据sample_submit

python

sample_submit = electricity_price[electricity_price["clearing price (CNY/MWh)"].isna()].drop(columns="demand")
sample_submit.to_csv(base_path / "sample_submit.csv", index=False)

  1. 合并daytime列为timestamp列,并处理24:00:00的情况:

python

electricity_price["timestamp"] = pd.to_datetime(
    electricity_price["day"] + " " + electricity_price["time"].str.replace("24:00:00", "00:00"))

mask = electricity_price['timestamp'].dt.time == pd.Timestamp('00:00:00').time()
electricity_price.loc[mask, 'timestamp'] += pd.Timedelta(days=1)

electricity_price = electricity_price[["timestamp", "demand", "clearing price (CNY/MWh)"]]

  1. 按照耗煤量排序,并计算累积容量:

python

sorted_unit = unit.sort_values("coal consumption (g coal/KWh)")
sorted_unit['cumulative_capacity'] = sorted_unit['Capacity(MW)'].cumsum()

  1. 根据需求找到满足总需求的机组报价:

python

prices = []
for demand in electricity_price["demand"]:
    price = sorted_unit[sorted_unit['cumulative_capacity'] >= demand]["coal consumption (g coal/KWh)"].iloc[0]
    prices.append(price)

模型训练和预测

  1. 使用线性回归模型进行训练:

python

model = LinearRegression()
train_length = 55392
prices = np.array(prices).reshape(-1, 1)
X = prices[:train_length]
y = electricity_price["clearing price (CNY/MWh)"].iloc[:train_length].values.reshape(-1, 1)
model.fit(X, y)

  1. 进行预测并保存结果:

python

y_pred = model.predict(prices[train_length:])
y_pred = y_pred.flatten()
sample_submit["clearing price (CNY/MWh)"] = y_pred
sample_submit.to_csv("submit.csv", index=False)

四、简要介绍ABM (Agent-Based Modeling)

ABM简介

  • 基于个体建模,模拟系统复杂行为的工具。
  • 通过模拟个体(代理)的行为和相互作用,研究系统整体的动态变化。

ABM应用案例

  • 生命游戏(Game of Life)
  • 新冠传播模拟
  • 政府企业博弈模型
  • 马群模型
五、边际成本定价策略

边际成本

  • 定义为生产额外一单位产品(电)的成本增加。
  • 机组的报价不能低于其边际成本。

边际成本定价策略

  • 机组根据自身的边际成本进行报价,保证电力市场价格的合理性和稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值