我需要制作线性编程模型。以下是我正在使用的不等式(例如):
6x + 4y <= 24
x + 2y <= 6
-x + y <= 1
y <= 2
我需要找到这些不等式描述的区域,并在图形中对其进行着色,以及跟踪该区域的边界线的顶点,并以不同的颜色绘制边界线。请参阅下图,了解我正在寻找的内容。
我正在使用Python 3.2,numpy和matplotlib。 Python中有更好的线性编程模块吗?
答案 0 :(得分:58)
更新:过去4年来,答案已经过时了, 这是一个更新。你有很多选择:
如果你不必须做Python,那么它就容易多了 以建模语言执行此操作,请参阅Any good tools to solve integer programs on linux?
我个人使用Gurobi这些 几天通过它的Python API。它是一个商业的封闭源 产品,但免费用于学术研究。
SciPy提供线性编程:scipy.optimize.linprog。 (我有 从未尝试过这个。)
使用PuLP,您可以创建MPS和LP files然后 通过他们的GLPK,COIN CLP / CBC,CPLEX或XPRESS解决它们 命令行界面。这种方法有其优点和优点 缺点
显然,CVXOPT提供Python interface to GLPK,我做了 不知道。我已经使用GLPK 8年了,我可以 强烈推荐GLPK。 examples and tutorial of CVXOPT似乎真的很棒!
您可以在Wikibook下找到其他可能性 GLPK/Python。请注意,其中许多不一定是resticted 到GLPK。
答案 1 :(得分:19)
答案 2 :(得分:5)
图表用于解决线性程序的唯一时间是作业问题。在所有其他情况下,线性规划问题通过矩阵线性代数得到解决。
对于Python,虽然有一些纯Python库,但大多数人使用带有Python绑定的本机库。有许多用于线性编程的免费和商业库。有关详细列表,请参阅维基百科中的Linear Programming或今日OR / MS中的Linear Programming Software Survey。
免责声明:我目前在Gurobi Optimization工作,之前曾在提供CPLEX的ILOG工作。
答案 3 :(得分:4)
为了解决线性规划问题,您可以使用SciPy中的scipy.optimize.linprog模块,该模块使用Simplex算法。
答案 4 :(得分:4)
其他答案在提供解算器列表方面做得很好。但是,只有PuLP被称为用于制定LP模型的Python库。
另一个很好的选择是Pyomo。与PuLP一样,您可以将问题发送给任何解算器并将解决方案读回Python。您还可以操作求解器参数。一位同学和我在2015年比较了PuLP和Pyomo的表现,我们发现Pyomo可以比PuLP快几倍地生成相同问题的.LP文件。
答案 5 :(得分:1)
我建议使用PuLP python包。它有一个很好的界面,你可以使用不同类型的算法来解决LP。
答案 6 :(得分:0)