可以将pyomo内部变量转换为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:whatevernode1_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]作为参数而不是abcdXabcY,错误仍然出现。

我需要知道我是否能以某种方式使这段代码工作。我已经阅读了文档。在第339到340页,它讨论了插值,但我对Pyomo和Python不够熟悉,无法理解它,所以请,如果有人帮助我,我将非常感激。

很多信息从这和你的另一个线程。我将尽我所能处理一切。

问题不是将pyomo.IndexedVar转换为float,因为当您在pyomo模型中创建变量时,您可以将其作为NonNegativeReal。这个问题不是一个数字的隐式转换(在您的代码中,m.lammda[i,1]是一个类,而不是一个数字)。即使它有一个浮点值)与float语句。

当你在你的评论在另一个线程,当你试图使用pyomo.environ.IndexedVar到配件(插值)Rbf函数,你提高错误TypeError试图把一个IndexedVarfloatRbf函数(内部)。要计算该值,您可以使用model.m.lammda[i,1](),因为调用该类将返回该值,但这仍然没有帮助,因为另一个错误肯定会引发

我建议你访问这篇文章,以获得更多关于使用外部函数作为pyomo约束或目标函数的潜在困难的信息

Pyomo有一个分段函数库,您可以在其中建模线性(pyo.environ层也在pyo.environ.Piecewise中得到它)或多线性插值,但您需要使用内核层,它使用scipy生成插值的Dlunay,您可以使用help(pyomo.kernel.piecewise_nd)进行检查。这当然对你有用,但它需要一点努力。

相关内容

  • 没有找到相关文章

最新更新