首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何可视化Numpy/MatplotLib中线性规划的可行域(带有任意不等式)?

如何可视化Numpy/MatplotLib中线性规划的可行域(带有任意不等式)?
EN

Stack Overflow用户
提问于 2019-07-13 08:25:17
回答 2查看 10K关注 0票数 8

我需要实现线性规划问题的求解器。所有的限制都是<=限制,例如

5x + 10 y <= 10

可能存在任意数量的这些限制。此外,x>=0 y>=0隐式地。

我需要找到最优解(Max),并在matplotlib中给出可行区域。我通过实现单纯形方法找到了最优解,但我不知道如何绘制这个图。

我发现了一些方法:

  1. 这个链接从每个函数中找到y点的最小值,并使用plt.fillBetween()绘制区域。但当我改变方程的顺序时,它就行不通了。我不确定要最小化()的y值。所以我不能用它来做任意的限制。
  2. 为每对限制找到解决方案,并绘制一个多边形。效率不高。
EN

回答 2

Stack Overflow用户

发布于 2019-07-13 08:57:07

一种更简单的方法可能是让matplotlib自己计算可行区域(仅提供约束),然后简单地在顶部覆盖“约束”行。

代码语言:javascript
复制
# plot the feasible region
d = np.linspace(-2,16,300)
x,y = np.meshgrid(d,d)
plt.imshow( ((y>=2) & (2*y<=25-x) & (4*y>=2*x-8) & (y<=2*x-5)).astype(int) , 
                extent=(x.min(),x.max(),y.min(),y.max()),origin="lower", cmap="Greys", alpha = 0.3);


# plot the lines defining the constraints
x = np.linspace(0, 16, 2000)
# y >= 2
y1 = (x*0) + 2
# 2y <= 25 - x
y2 = (25-x)/2.0
# 4y >= 2x - 8 
y3 = (2*x-8)/4.0
# y <= 2x - 5 
y4 = 2 * x -5

# Make plot
plt.plot(x, 2*np.ones_like(y1))
plt.plot(x, y2, label=r'$2y\leq25-x$')
plt.plot(x, y3, label=r'$4y\geq 2x - 8$')
plt.plot(x, y4, label=r'$y\leq 2x-5$')
plt.xlim(0,16)
plt.ylim(0,11)
plt.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.)
plt.xlabel(r'$x$')
plt.ylabel(r'$y$')

票数 13
EN

Stack Overflow用户

发布于 2020-12-25 14:58:38

这是一个顶点枚举问题。您可以使用函数lineqs来可视化任意多行的不等式系统A >= b。该函数还将显示绘制图形的顶点。

最后2行表示x,y >=0

代码语言:javascript
复制
from intvalpy import lineqs
import numpy as np

A = -np.array([[5, 10],
               [-1, 0],
               [0, -1]])
b = -np.array([10, 0, 0])

lineqs(A, b, title='Solution', color='gray', alpha=0.5, s=10, size=(15,15), save=False, show=True)

可视化解决方案链接

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57017444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档