在Pyomo约束内使用外部函数



我需要使用外部python函数在pyomo模型中创建约束,但我不相信它能正常工作。例如,如果我有以下外部功能

# External function
def total_cost(length, flow):
return length * floww * 1000

然后我想在创建pyomo模型对象时调用它,但"长度"one_answers"流量"值是我的模型中的变量,这会正常工作吗?有人有这方面的经验吗?

您的示例在大多数情况下都可以正常工作。有三个例外需要注意(但这些也适用于正常约束规则(:

  1. 在构建约束表达式时,不要显式获取变量的value,因为该变量将在表达式树中替换为常量数值(而不会发送到解算器(
  2. 不要编写依赖于变量值的条件语句(if语句(
  3. 在编写约束时,仅使用Pyomo提供的内在数学函数(sin、cos、exp等(

我还建议在构造约束后对其调用pprint,以验证约束表达式是否符合您的期望。如果约束太长/太乱,那么您可以print函数返回的子表达式,并验证您得到的是Pyomo表达式对象,而不是常量数值。

最新更新