numpy - 在 Pyomo 目标中使用 numpy 通用函数
问题描述
我在 Pyomo 中使用 numpy 函数(例如 numpy sqrt
ufunc )时遇到问题Objective
。
采用以下虚拟模型:
simple_model_1 = ConcreteModel()
simple_model_1.x = Var(domain=PositiveReals)
def simple_rule_1(m):
return np.sqrt(m.x)
simple_model_1.obj = Objective(rule=simple_rule_1)
这失败并出现以下错误:
TypeError:ufunc 的循环不支持 NoneType 类型的参数 0,它没有可调用的 sqrt 方法
当然,在这个例子中,我可以通过不使用 Numpy 来避免这个问题。例如:
simple_model_2 = ConcreteModel()
simple_model_2.x = Var(domain=PositiveReals)
def simple_rule_2(m):
return m.x**0.5
simple_model_2.obj = Objective(rule=simple_rule_2)
工作得很好。
但是,在某些情况下,我想使用 numpy。在 pyomo 目标函数中使用 numpy 函数是否有限制?我究竟做错了什么?
解决方案
np.sqrt
使用数字 numpy 数组使用快速编译计算。但如果给定别的东西,它会先做np.array(m.x)
。
如果这产生了一个对象dtype
数组,它将迭代并尝试使用该sqrt
对象的方法。
该错误告诉我们它m.x
是None
或包含None
值。显然None.sqrt()
行不通。
推荐阅读
- javascript - 无法在 JavaScript 中构造正则表达式
- hl7-fhir - 在两个 HAPI 服务器之间共享数据
- cmake - gnu 和 gnu-arm 编译器可以在同一个系统上共存吗?
- java - Java HashSet 不使用自定义对象的比较器
- css - CSS -ms-grid-columns 语法显示带有扩展名的 VS Code 中的错误
- parallel-processing - 在(AMD)GPU而不是CPU上运行二进制(exec)的方法是什么?
- r - 如何将基于键的行与组合在单个列中的值组合
- c# - 在 Excel 中发生缓慢计算时,如何让计算百分比显示在我的 WinForm 中?
- c# - 如何在 C# 中添加延迟?
- javascript - Typescript 方法参数装饰器仅在构建时评估,是否可以在请求时评估?(nodejs+nestjs)