You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Pandas或CSV读取器向Pyomo Concrete模型参数导入CSV数据?

用Pandas或CSV读取器将CSV数据导入Pyomo Concrete模型参数

方法一:使用Pandas(推荐,处理复杂数据更高效)

假设你有两个CSV文件:

  • time_set.csv:单列存储时间步,表头为Time,每行一个时间标识(如t1、t2)
  • time_data.csv:第一列为时间步,后续列对应各参数(如demand、price)

步骤示例:

  1. 导入依赖库
import pandas as pd
from pyomo.environ import ConcreteModel, Set, Param
  1. 读取时间集并创建Pyomo集合
# 读取时间集文件
time_df = pd.read_csv('time_set.csv')
# 提取时间步列表
time_steps = time_df['Time'].tolist()

# 初始化Concrete模型
model = ConcreteModel()
# 创建时间集合
model.T = Set(initialize=time_steps)
  1. 读取参数数据并映射到Pyomo参数
# 读取参数数据文件,将时间列设为索引
data_df = pd.read_csv('time_data.csv').set_index('Time')

# 为每个参数创建字典并导入模型
# 需求参数
model.demand = Param(model.T, initialize=data_df['demand'].to_dict())
# 价格参数
model.price = Param(model.T, initialize=data_df['price'].to_dict())

如果你的数据文件结构是参数为行、时间为列,只需转置数据后再转字典:

data_dict = data_df.T.to_dict('index')
model.demand = Param(model.T, initialize=data_dict['demand'])

方法二:使用Python原生csv模块(无额外依赖)

如果不想引入Pandas,可直接用标准库读取:

步骤示例:

  1. 导入依赖库
import csv
from pyomo.environ import ConcreteModel, Set, Param
  1. 读取时间集
time_steps = []
with open('time_set.csv', 'r') as f:
    reader = csv.reader(f)
    next(reader)  # 跳过表头行
    for row in reader:
        time_steps.append(row[0])

model = ConcreteModel()
model.T = Set(initialize=time_steps)
  1. 读取参数数据并构建字典
demand_dict = {}
price_dict = {}

with open('time_data.csv', 'r') as f:
    # 按列名读取
    reader = csv.DictReader(f)
    for row in reader:
        t = row['Time']
        # 转换数据类型为浮点数(Pyomo参数默认支持数值类型)
        demand_dict[t] = float(row['demand'])
        price_dict[t] = float(row['price'])

# 将字典导入模型参数
model.demand = Param(model.T, initialize=demand_dict)
model.price = Param(model.T, initialize=price_dict)

注意事项

  • 确保时间集文件中的时间标识与数据文件中的完全匹配,否则Pyomo会抛出索引不存在的错误
  • 若参数是多维度(如时间+设备集),只需将数据整理为元组键的字典(如{(t1, dev1): value}),再传入Param的initialize参数
  • 处理非数值型数据时,需根据Pyomo参数的类型要求做对应转换

内容的提问来源于stack exchange,提问作者Pwrpyth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 19:25:29