【问题标题】:Pyomo TypeError when using matplotlib contour使用 matplotlib 轮廓时出现 Pyomo TypeError
【发布时间】: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 提供的数学来避免这个错误 功能。

【问题讨论】:

    标签: python contour pyomo


    【解决方案1】:

    您正在最小化一个不正确的数字 您应该首先优化一个明确的目标函数,然后在求解后将其可视化

    【讨论】:

    • 其实我不是。我使用轮廓来获取新等值线多边形的坐标。不是为了绘制图形。
    • 请先根据您的决策变量明确定义您的目标函数
    • 我更新了目标函数:等值线多边形的面积 def m_rule(model): F = circ(model.x[1], model.x[2]) p = plt .contour(X, Y, F, [0]).allsegs[0][0] polys = gp.GeoSeries([Polygon(p)]) isoline_df = gp.GeoDataFrame({'geometry': polys}) expr = isoline_df.area 但是等高线命令后出现错误
    猜你喜欢
    • 2015-05-07
    • 1970-01-01
    • 2019-03-24
    • 1970-01-01
    • 2014-11-20
    • 1970-01-01
    • 1970-01-01
    • 2016-01-12
    • 1970-01-01
    相关资源
    最近更新 更多