我可以将 pyomo 内部变量转换为 float
Can I convert pyomo internal variable to float
我在Python中定义了一个插值函数为:
rbfX = sp.interpolate.Rbf(X2, Y2, Wx2, function='multiquadric')
我想在 Pyomo 代码中使用它,其中 m.lammda[i,1]
和 m.phi[i,1]
是飞机在由先前插值表示的风场内移动的位置。请注意,m
是具体模型,
type(m.lammda)
Out[7]: pyomo.core.base.var.IndexedVar
我目前尝试的解决方案是
def Wind_lammda_definition1(model, i):
abcdX=float(m.lammda[i,1])
abcdY=float(m.phi[i,1])
return m.Wind_lammda[i,1] ==rbfX(abcdX, abcdY)
m.Wind_lammda_const1 = Constraint(m.N, rule = Wind_lammda_definition1)
因为我想知道轨迹中任意一点的风速。
当我运行程序时,我得到这个错误:
ERROR: Rule failed when generating expression for Constraint
Wind_lammda_const1 with index 0: TypeError: Implicit conversion of Pyomo
NumericValue type `lammda[0,1]' to a float 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.
ERROR: Constructing component 'Wind_lammda_const1' from data=None failed:
TypeError: Implicit conversion of Pyomo NumericValue type `lammda[0,1]' to
a float 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.
Traceback (most recent call last):
File "D:\whatever\node1_test.py", line 530, in <module>
m.Wind_lammda_const1 = Constraint(m.N, rule = Wind_lammda_definition1)
TypeError: Implicit conversion of Pyomo NumericValue type `lammda[0,1]' to a float 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.
如果我调用 m.lammda[i,1]
和 m.phi[i,1]
作为参数而不是 abcdX
和 abcY
.
,错误仍然出现
我需要知道我是否可以以某种方式调整此代码以使其正常工作。我已经阅读了documentation。在第339到340页中谈到了插值,但我对Pyomo不够熟悉,也Python无法理解它,所以请,如果有人帮助我,我将非常感激。
很多信息来自这个和你的另一个线程。我会尽量处理好。
问题不在于将 pyomo.IndexedVar
转换为 float
,因为当您在 pyomo
模型中创建变量时,您可以将其作为 NonNegativeReal
进行。这个问题是用 float
语句隐式转换不是数字(在你的代码中,m.lammda[i,1]
是一个 class,不完全是一个数字。即使它有一个浮点值) .
正如您在另一个线程中所述 ,当您尝试将 pyomo.environ.IndexedVar
用于拟合(插值)函数 Rbf 时,您会引发 TypeError
尝试转换的错误IndexedVar
到 float
(在 Rbf 函数内部)。要评估您可以使用 model.m.lammda[i,1]()
的值,因为调用 class returns 您的值,但这仍然无济于事,因为另一个错误肯定会引发
我建议您访问 this post 以获取有关使用外部函数作为 pyomo
约束或 Objective 函数
的潜在困难的更多信息
Pyomo
得到一个Piecewise Function Library where you can model a linear (pyo.environ
layer also got it in the pyo.environ.Piecewise
) or multilinear interpolation, but you will need to work with the kernel layer,它使用scipy生成一个Dlunay用于插值,你可以使用help(pyomo.kernel.piecewise_nd)
检查。这肯定对你有用,但它需要一些工作。
我在Python中定义了一个插值函数为:
rbfX = sp.interpolate.Rbf(X2, Y2, Wx2, function='multiquadric')
我想在 Pyomo 代码中使用它,其中 m.lammda[i,1]
和 m.phi[i,1]
是飞机在由先前插值表示的风场内移动的位置。请注意,m
是具体模型,
type(m.lammda)
Out[7]: pyomo.core.base.var.IndexedVar
我目前尝试的解决方案是
def Wind_lammda_definition1(model, i):
abcdX=float(m.lammda[i,1])
abcdY=float(m.phi[i,1])
return m.Wind_lammda[i,1] ==rbfX(abcdX, abcdY)
m.Wind_lammda_const1 = Constraint(m.N, rule = Wind_lammda_definition1)
因为我想知道轨迹中任意一点的风速。
当我运行程序时,我得到这个错误:
ERROR: Rule failed when generating expression for Constraint
Wind_lammda_const1 with index 0: TypeError: Implicit conversion of Pyomo
NumericValue type `lammda[0,1]' to a float 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.
ERROR: Constructing component 'Wind_lammda_const1' from data=None failed:
TypeError: Implicit conversion of Pyomo NumericValue type `lammda[0,1]' to
a float 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.
Traceback (most recent call last):
File "D:\whatever\node1_test.py", line 530, in <module>
m.Wind_lammda_const1 = Constraint(m.N, rule = Wind_lammda_definition1)
TypeError: Implicit conversion of Pyomo NumericValue type `lammda[0,1]' to a float 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.
如果我调用 m.lammda[i,1]
和 m.phi[i,1]
作为参数而不是 abcdX
和 abcY
.
我需要知道我是否可以以某种方式调整此代码以使其正常工作。我已经阅读了documentation。在第339到340页中谈到了插值,但我对Pyomo不够熟悉,也Python无法理解它,所以请,如果有人帮助我,我将非常感激。
很多信息来自这个和你的另一个线程。我会尽量处理好。
问题不在于将 pyomo.IndexedVar
转换为 float
,因为当您在 pyomo
模型中创建变量时,您可以将其作为 NonNegativeReal
进行。这个问题是用 float
语句隐式转换不是数字(在你的代码中,m.lammda[i,1]
是一个 class,不完全是一个数字。即使它有一个浮点值) .
正如您在另一个线程中所述 pyomo.environ.IndexedVar
用于拟合(插值)函数 Rbf 时,您会引发 TypeError
尝试转换的错误IndexedVar
到 float
(在 Rbf 函数内部)。要评估您可以使用 model.m.lammda[i,1]()
的值,因为调用 class returns 您的值,但这仍然无济于事,因为另一个错误肯定会引发
我建议您访问 this post 以获取有关使用外部函数作为 pyomo
约束或 Objective 函数
Pyomo
得到一个Piecewise Function Library where you can model a linear (pyo.environ
layer also got it in the pyo.environ.Piecewise
) or multilinear interpolation, but you will need to work with the kernel layer,它使用scipy生成一个Dlunay用于插值,你可以使用help(pyomo.kernel.piecewise_nd)
检查。这肯定对你有用,但它需要一些工作。