Pandas 如何将外部数据传递给Pyomo约束规则

Pandas 如何将外部数据传递给Pyomo约束规则,pandas,constraints,rules,pyomo,Pandas,Constraints,Rules,Pyomo,在Pyomo中构建约束或约束列表的经典方法是使用规则 例如 但是,如果DemandQuantity是外部数据,例如熊猫系列,则需要以某种方式将其传递给函数,或声明为全局数据,以便在范围内。似乎没有任何方便的方法可以按照 全局声明在脚本中是可以的,但在生产应用程序中是不可取的 另一种方法是将DemandQty数据作为参数加载到模型中,以便访问它。但这可能无法扩展性能,并且仅为Pyomo维护数据的第二个副本可能会很尴尬。有没有办法在约束规则函数中访问此“外部数据”?如果您关心对“DemandQty”

在Pyomo中构建约束或约束列表的经典方法是使用规则

例如

但是,如果DemandQuantity是外部数据,例如熊猫系列,则需要以某种方式将其传递给函数,或声明为全局数据,以便在范围内。似乎没有任何方便的方法可以按照

全局声明在脚本中是可以的,但在生产应用程序中是不可取的


另一种方法是将DemandQty数据作为参数加载到模型中,以便访问它。但这可能无法扩展性能,并且仅为Pyomo维护数据的第二个副本可能会很尴尬。有没有办法在约束规则函数中访问此“外部数据”?

如果您关心对“DemandQty”的全局访问,为什么不将其作为模型的一个参数,可以从pandas系列轻松初始化?是的,这是我作为解决方法所做的,请参见上文。但随着数据越来越大。Pyomo文档建议最好直接访问数据。这种情况似乎很有趣,因为在约束规则函数中使用外部数据的例子比比皆是,但没有人提到范围问题。也许大多数工作都是在开放代码(即脚本)中完成的。您能否提供指向促进“直接访问”的dox部分的指针?在我的理解中,这是直接访问,因为数据保存在模型对象中,这里不应该有任何关于大小的问题……即使是大型模型。我不能!我不知道我在哪里看到的。我已适当地修正了我的问题。
def ConSatisfyDemand(model,p):

    return sum(model.OutQty[pl,r] for (pl,r) in model.OutputTypeIndex if pl==p) == DemandQty[p]