datawhale AI夏令营 ABM预测

简介: Starting on 2024.07.26, aim to deeply understand ABM's principles, construction methods, applications,

开始日期: 2024.07.26

学习目标: 深入理解Agent-Based Modeling(ABM)的基本原理、构建方法、应用领域以及其在复杂系统研究中的价值。

Agent-Based Modeling是一种通过模拟系统中具有自主性和交互能力的个体代理(Agent)来研究和预测复杂系统整体行为的方法。

代理(Agent)

自主性:代理能够根据自己的内部状态和外部环境做出决策。
感知能力:代理能够感知周围环境中的信息,如其他代理的位置、状态等。
决策能力:基于感知到的信息和预设的规则或策略,代理能够做出决策并执行相应的动作。
交互性:代理之间可以通过直接或间接的方式相互通信和互动。

项目实施

背景:

电力现货市场是一个短时间内的电能量交易市场,通过市场机制实现电力资源的优化配置。市场中的发电机组(供给者)在指定平台上进行集中竞价,确定电能的交易量和价格。本项目的目标是通过Agent-Based Modeling (ABM) 方法,模拟549个发电机组在报价上的博弈行为,以预测2023年7月1日至2024年4月18日的市场出清价格。

目标:

构建一个基于ABM的电力现货市场模拟系统。
准确模拟发电机组之间的报价博弈行为。
预测指定时间段内的市场出清价格,并最小化MSE和RMSE。

数据准备

数据集:

electricity_price.csv:包含市场出清价格、市场需求等信息,用于训练和测试模型。
unit.csv:包含发电机组的参数信息,如额定容量、运行小时数、煤炭消耗等。

首先,进行数据预处理

base_path = Path("data")  # 确保数据都放在同级的data目录下
# 读取市场数据
electricity_price = pd.read_csv(base_path / "electricity price.csv")
# 读取市场主体(各发电机组)数据
unit = pd.read_csv(base_path / "unit.csv")

"""
准备示例提交数据sample_submit
1. electricity_price["clearing price (CNY/MWh)"].isna()找到出清价格为缺失值的行,即要预测的目标
2. 去除demand列,符合最后的提交格式 
"""

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)

# 将day和time列合并成timestamp列,便于提取时间戳特征
electricity_price["timestamp"] = pd.to_datetime(
    electricity_price["day"] + " " + electricity_price["time"].str.replace("24:00:00", "00:00"))

# 处理24:00: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)

# 设置列的顺序,同时去除day和time列
electricity_price = electricity_price[["timestamp", "demand", "clearing price (CNY/MWh)"]]

接着,使用ABM估计市场出清价格

Agent-Based Modeling (ABM) 是一种模拟系统的复杂行为和动态的计算方法。它通过定义系统中的个体(称为“代理(Agent)”)及其相互作用规则来进行建模。每个代理具有独特的属性和行为。ABM 模型通过模拟代理之间的互动,观察宏观层面的模式和现象,帮助理解复杂系统的行为和演化。


sorted_unit = unit.sort_values("coal consumption (g coal/KWh)")  # 按照一度电的耗煤量(近似为边际成本)降序排序
sorted_unit.head()

# 预先计算 sorted_unit 的累积和
sorted_unit['cumulative_capacity'] = sorted_unit['Capacity(MW)'].cumsum()

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)

print(len(prices))
prices[:5]

转换耗煤量为机组报价


model = LinearRegression()
# 55392为训练集的长度
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)

使用边际成本定价的机组报价为出清价格估计


y_pred = model.predict(prices[train_length:])
y_pred = y_pred.flatten()  # 2维矩阵转为1维
y_pred[:5]

最后保存结果


sample_submit["clearing price (CNY/MWh)"] = y_pred
sample_submit.head()

sample_submit.to_csv("submit.csv", index=False)
相关文章
|
2月前
|
数据采集 机器学习/深度学习 人工智能
Datawhale AI夏令营第四期魔搭-AIGC文生图方向Task1笔记
这段内容介绍了一个使用Stable Diffusion与LoRA技术创建定制化二次元图像生成模型的全流程。首先,通过安装必要的软件包如Data-Juicer和DiffSynth-Studio准备开发环境。接着,下载并处理二次元图像数据集,利用Data-Juicer进行数据清洗和筛选,确保图像质量和尺寸的一致性。随后,训练一个针对二次元风格优化的LoRA模型,并调整参数以控制模型复杂度。完成训练后,加载模型并通过精心设计的提示词(prompt)生成一系列高质量的二次元图像,展示模型对细节和艺术风格的理解与再现能力。整个过程展示了从数据准备到模型训练及结果生成的完整步骤,为定制化图像提供了方向。
|
2月前
|
人工智能
Datawhale X 魔搭 AI夏令营task 2笔记
Datawhale X 魔搭 AI夏令营task 2笔记
54 1
Datawhale X 魔搭 AI夏令营task 2笔记
|
2月前
|
数据采集 人工智能 物联网
Datawhale X 魔搭 AI夏令营task 3笔记
Datawhale X 魔搭 AI夏令营task 3笔记
70 2
|
2月前
|
人工智能 物联网
Datawhale X 魔搭 AI夏令营task 3笔记
Datawhale X 魔搭 AI夏令营task 3笔记
|
2月前
|
人工智能
Datawhale X 魔搭 AI夏令营task 2笔记
Datawhale X 魔搭 AI夏令营task 2笔记
|
2月前
|
数据采集 机器学习/深度学习 人工智能
Datawhale AI夏令营第四期魔搭-AIGC文生图方向Task1笔记
这段内容介绍了一个使用LoRA技术定制Stable Diffusion模型的工作流程。首先定义了提示词的结构,接着概述了LoRA作为轻量级微调方法的角色。ComfyUI作为一个图形化工具,简化了AI模型的配置与操作。示例脚本展示了如何通过Data-Juicer和DiffSynth-Studio进行数据准备、模型训练,并最终生成特定风格的二次元图像。通过不同的种子和提示词,生成了一系列具有一致风格但内容各异的高质量二次元角色图像。
|
2月前
|
人工智能
DataWhale AI夏令营 第四期魔搭- 大模型应用全栈开发task01笔记
DataWhale AI夏令营 第四期魔搭- 大模型应用全栈开发task01笔记
70 0
|
4天前
|
机器学习/深度学习 人工智能 自然语言处理
AI技术在自然语言处理中的应用与挑战
【10月更文挑战第3天】本文将探讨AI技术在自然语言处理(NLP)领域的应用及其面临的挑战。我们将分析NLP的基本原理,介绍AI技术如何推动NLP的发展,并讨论当前的挑战和未来的趋势。通过本文,读者将了解AI技术在NLP中的重要性,以及如何利用这些技术解决实际问题。
|
5天前
|
人工智能 监控 供应链
AI技术创业有哪些机会?
本文探讨了AI技术创业的多个机会,包括提供行业解决方案、开发智能产品和服务以及教育和培训,为创业者在医疗保健、金融服务、零售、教育等多个领域提供了丰富的机遇。
23 2
|
4天前
|
机器学习/深度学习 人工智能 算法
AI技术在医疗领域的应用及挑战
【10月更文挑战第4天】本文将探讨AI技术在医疗领域的应用及其面临的挑战。我们将从AI技术的定义和发展历程入手,分析其在医疗领域的应用场景,包括辅助诊断、个性化治疗、药物研发等方面。同时,我们也将讨论AI技术在医疗领域面临的挑战,如数据隐私、算法偏见等问题。最后,我们将以一个简单的代码示例来展示AI技术在医疗领域的应用。
20 0