pandas - 如何使用字典中的数据初始化索引参数
问题描述
我正在使用两个块,一个使用 pandas 从 .csv 文件导入数据,另一个使用此信息来构造变量值。
第一个块工作正常,我可以用索引值构建一个表(在这种情况下是能源关税价格):
import pandas as pd
df_1 = pd.read_csv('time_tff_data.csv', sep=';', usecols=['time', 'tff'], index_col='time', header=0)
data_Tariff = {
'tff':{'time': df_1['tff'].to_dict()} #Set of tariff prices
}
data = {None: dict(tariff=data_Tariff)}
问题是在另一个块上,即我需要使用数据的块上,我无法使用字典中的数据初始化参数。尽管我正在使用 Pyomo(用于优化),但我的问题不是关于 Pyomo 本身,而是关于如何使用存储在字典(self.tff)中的数据初始化参数:
from pyomo.environ import *
from data import data_Tariff
from pyomo.environ import SimpleBlock
class tariff(SimpleBlock):
def __init__(self, *args, **kwds):
super().__init__(*args, **kwds)
self.time = Set()
self.Tmax = Param(self.time, doc='Maximum tariff price', default=1.06, multable=True)
self.Tmin = Param(self.time, doc='Minimum tariff price', default=0.39, multable=True)
self.tff = Param(self.time, doc='Set of tariff prices', default=data_Tariff['tff'], mutable=True)
self.Tc = Var(self.time, doc='Tariff priority index', initialize=0)
def _Tc(m, t):
if tff is not None:
return (m.Tc[t] == (m.Tmax-m.tff[t])/(m.Tmax-m.Tmin) for t in m.time)
return Constraint.Skip
self.Tc = Constraint(self.time, rule=_Tc, doc='Tariff priority index')
我的问题是:我如何从数据块中导入关税数据“tff[t]”,因为该集合是按时间 [t] 索引的?
解决方案
几个快速观察...
首先,您应该使用关键字initialize
notdefault
从集合中初始化。另外,我不明白你为什么要让它可变,所以你可以删除它。尝试:
self.tff = Param(self.time, doc='Set of tariff prices', initialize=data_Tariff['tff'])
这假设data_Tariff[tff]
返回一个正确构造的字典,该字典由self.time
备份,我看到你还需要初始化self.time:
self.time = Set(initialize=data_Tariff[tff].keys())
你的约束...你的约束看起来不正确。for t in m.time
当您使用集合调用规则时,会处理该部分。它将对 的每个值进行约束t
。检查 tff... 可能没有必要,对吧?如果有必要,您需要将其引用为self.tff
. 所以:
def _Tc(m, t):
return m.Tc[t] == (m.Tmax-m.tff[t])/(m.Tmax-m.Tmin)
self.Tc = Constraint(self.time, rule=_Tc, doc='Tariff priority index')
此外,您的Tmax
andTmin
似乎只是常量(未编入索引)。如果是这种情况,您可以稍微简化一下,只需将它们视为常规 python 变量的常量,如果需要,将它们从模型声明中取出。
推荐阅读
- javascript - 如何在 MapGuide Maestro 6.0 中启用查询小部件?
- html - 缓慢渲染的 Html 页面
- java - 类型实参是参数化类型时的子类型化
- excel - 按出现计数重复
- javascript - 添加时区后“getDate 不是函数”
- python - Python PyShark 生成器退出
- javascript - 通过表单提交创建 ArrayList(Thymeleaf + Spring MVC)
- bash - 如何将一个 shell 命令的大二进制输出作为参数传播到下一个?
- python - 是否有适用于 python 的 Firebase SDK?
- python - 具有多个 CNN 调用权重的多线程