【发布时间】:2021-04-26 11:41:39
【问题描述】:
我正在尝试使用 matplotlib 中的“轮廓”构建一个 Pyomo 模型。下面的代码重现了我得到的错误(这不是完整的模型,而只是重现错误的简短代码部分)。对于我的模型,我需要知道某种形状的轮廓(这里我使用一个圆圈来说明问题)。我在这里做错了什么。
import numpy as np
import matplotlib.pyplot as plt
import pyomo.environ as pmo
mesh_size = 1001
x_m = np.linspace(0, 1000, mesh_size)
y_m = np.linspace(0, 1000, mesh_size)
X, Y = np.meshgrid(x_m, y_m)
def circ(a, b):
return (X - a) ** 2 + (Y - b) ** 2 - 10000
def m_rule(model):
F = circ(model.x[1], model.x[2])
expr = plt.contour(X, Y, F, [0]).allsegs[0][0]
plt.close() # otherwise "contour" plots a plot
return expr
model = pmo.ConcreteModel()
model.x = pmo.Var([1, 2], initialize=500)
model.o = pmo.Objective(rule=m_rule)
我收到以下错误:
TypeError:Pyomo NumericValue 类型“sum”到浮点数的隐式转换是 禁用。此错误通常是使用 Pyomo 组件作为 Python 内置数学模块函数之一的参数 定义表达式。通过使用 Pyomo 提供的数学来避免这个错误 功能。
【问题讨论】: