Optimization Pyomo-将Pyomo数值隐式转换为整数
我试图优化一个pyomo抽象模型(m)。该模型有一个名为Optimization Pyomo-将Pyomo数值隐式转换为整数,optimization,pyomo,Optimization,Pyomo,我试图优化一个pyomo抽象模型(m)。该模型有一个名为a的(整数)参数。我想在构建模型时计算另一个整数值。让另一个变量为c=a*(a-1)/2。我想要一个大小为c 为此,我写下以下几行: #File - test.py# from pyomo.environ import * m = AbstractModel() m.a = Param() c = m.a*(m.a-1)/2 m.var = Var(range(1,c), within=Binary) m.obj = Objective(e
a
的(整数)参数。我想在构建模型时计算另一个整数值。让另一个变量为c=a*(a-1)/2
。我想要一个大小为c
为此,我写下以下几行:
#File - test.py#
from pyomo.environ import *
m = AbstractModel()
m.a = Param()
c = m.a*(m.a-1)/2
m.var = Var(range(1,c), within=Binary)
m.obj = Objective(expr = 0)
#File - data.dat#
param a := 5 ;
为了解决这个问题,我运行了-pyomo solve test.py data.dat--solver=glpk
运行此命令后,我出现以下错误:
Implicit conversion of Pyomo NumericValue type `<class
'pyomo.core.kernel.expr_coopr3._ProductExpression'>' to an integer
is disabled. This error is often the result of using Pyomo components as
arguments to one of the Python built-in math
module functions when defining expressions. Avoid this error by using Pyomo-
provided math functions.
Pyomo NumericValue类型`'到整数的隐式转换
它是残疾的。此错误通常是使用Pyomo组件作为
Python内置数学函数之一的参数
模块在定义表达式时起作用。通过使用Pyomo避免此错误-
提供了数学函数。
我认为当我尝试取范围(1,c)
时会出现错误。如果我错了,请纠正我
我有python2.7.12和Pyomo-5.3(Linux上的CPython-2.7.12)。我将不得不在安装时向某人询问安装方法,因此可能需要时间。我会在询问安装人员后更新安装方法
谢谢 这里发生了两件事:
m.a
时,您仅声明参数a
的存在。Python然后继续解析和执行模型的其余部分。当它点击c=m.a*(m.a-1)/2
时,Python会生成一个表示右侧的Pyomo表达式树。最后,当到达m.var=var(range(1,c),in=Binary)
时,Python首先执行range(1,c)
,然后调用var()
构造函数range
(Python函数)在生成范围列表之前将其参数强制转换为int
。该类型转换是产生错误的原因
通过使用(Pyomo)value(c)
函数显式计算表达式(c
)的值,可以绕过该错误。但是,这将生成一个不同的错误(可能信息更丰富),即您在构建参数a
之前对其进行评估。这是因为此时模型仍然是抽象的,并且为a
提供值的数据文件甚至还没有被读取
解决方案是创建一个显式Pyomo集
,该集将充当表达式的占位符,并且在构建模型的其余部分之前不会被构造(也就是说,表达式c
的计算将延迟到a
的值可用为止)。例如:
from pyomo.environ import *
m = AbstractModel()
m.a = Param()
c = m.a*(m.a-1)/2
# Note that RangeSet includes the upper bound, whereas range stops one short
m.IDX = RangeSet(1,c-1)
m.var = Var(m.IDX, within=Binary)
m.obj = Objective(expr = 0)
您的示例使用master或当前版本(5.3)不会引发任何错误。请提供以下基本信息:平台、python解释器和版本、pyomo版本、安装方法,以及演示错误的(最小)示例。请查看@jsiirola的更改。感谢您的示例仍然没有生成您报告的错误。如果有一个完整的示例(例如,您如何声明
m.a
?)、完整的错误(您的“(此处的某个内容)”实际上是有用的信息!)、平台、python解释器和版本、pyomo版本以及安装方法,这将更简单。感谢您的耐心@jsiirola。请看更新的问题。我试着回答你的问题。