我目前正在将Pyomo变量存储在Pandas数据帧中,并一直使用它来生成约束数组
是否有一种方法可以将它们添加到我的模型中(例如,通过使用它初始化约束列表),而不必遍历它们并单独添加它们?我认为我不能使用规则来创建约束,因为我是基于我的数据框架进行索引的
这就是我存储变量的方式——我使用Pandas是因为我发现通过数据框中的值进行索引非常容易:
model.duid_bids = pe.Var(bid_df['DUID_BAND_DATETIME'], domain=pe.PositiveReals)
bid_df['PE_BIDS'] = bid_df['DUID_BAND_DATETIME'].apply(lambda x: model.duid_bids[x])
我想做一些这样的事情,但这是行不通的:
model.bid_volume = pe.Constraint(expr=bid_df['PE_BIDS'] <= bid_df['VOLUME'])
如果我这样单独添加它们,它会起作用:
pe.Constraint(expr=bid_df['PE_BIDS'].iloc[0] <= bid_df['VOLUME'].iloc[0])
非常感谢
我认为你太努力了,想把
pyomo
推入一个pandas
框中。但这只是一种观点。我不认为这样做有什么好处,因为这里没有“矢量化”任何操作,因为pyomo
约束构造没有矢量化我建议(其他人可能会有所不同)只在
pyomo
中进行优化,而不将任何组件放入df中,而是根据约束的需要提取常量。关于我是否将您使用的索引集放入pyomoSet
中,我认为这使T/S更容易,并且pyomo
将在内部生成一个虚拟集,您可以在下面的第一个示例中看到,但这是一个附带的故事这里有两个在你的结构上的切口,我认为是可行的,并且从
pandas
中分离出一点。这假设df中的datetime
是唯一的,为了简单起见,可以将其制作成索引。(实际上,它必须是唯一的,因为您已经将其用作索引集…回答了我自己的问题)生成:
模型2为清晰起见分开…
相关问题 更多 >
编程相关推荐