【问题标题】:linear programming in python?python中的线性规划?
【发布时间】:2012-05-22 07:56:30
【问题描述】:

我需要建立一个线性规划模型。以下是我正在使用的不等式(例如):

6x + 4y <= 24
x + 2y <= 6
-x + y <= 1
y <= 2

我需要找到这些不等式所描述的区域,并在图形中对其进行着色,并跟踪该区域边界线的顶点,并以不同的颜色绘制边界线。有关我正在寻找的示例,请参见下图。

.

我正在使用 Python 3.2、numpy 和 matplotlib。 Python 中是否有更好的线性编程模块?

【问题讨论】:

  • 第一步将不等式系统转换为矩阵形式。
  • @izomorphius 根据维基百科,线性规划是数学优化:en.wikipedia.org/wiki/Linear_programming
  • @möter 同意 - 删除我的评论。错误是我的,不是操作员的
  • 你的第三个方程,-x + x &lt;= 1 是一个空操作,因为它简化为 0 &lt;= 1,这对所有 x 和 y 都是正确的。
  • @user24562 您能否详细说明您用于默认代码的过程。 (使用 numpy 和 matplotlib)

标签: python linear-programming


【解决方案1】:

更新:在过去的 4 年里,答案已经有些过时了, 这是一个更新。你有很多选择:

  • 如果您不需要必须使用 Python,那么使用 Python 会容易得多 在建模语言中执行此操作,请参阅Any good tools to solve integer programs on linux?

  • 我个人使用Gurobi这些 几天通过它的 Python API。它是一个商业的、闭源的 产品,但免费用于学术研究。

  • 使用 PuLP 您可以创建 MPSLP files 然后 通过他们的 GLPK、COIN CLP/CBC、CPLEX 或 XPRESS 解决它们 命令行界面。这种方法有它的优点和 缺点。

  • OR-Tools from Google 是一个用于优化的开源软件套件,专为解决世界上最棘手的车辆路线、流程、整数和线性规划以及约束规划问题而调整。

  • Pyomo 是一种基于 Python 的开源优化建模语言,具有多种优化功能。

  • SciPy 提供线性规划:scipy.optimize.linprog.(我有 没试过这个。)

  • 显然,CVXOPT 提供了Python interface to GLPK,我做到了 不知道。我已经使用GLPK 8 年了,我可以 强烈推荐 GLPK。 examples and tutorial of CVXOPT 看起来很不错!

  • 您可以在以下 Wikibook 中找到其他可能性 GLPK/Python. 请注意,其中许多不一定受到限制 到 GLPK。

【讨论】:

  • 使用 PuLP,它是一个很棒的用于 GLPK、CPLEX 或 Gurobi 的 Python 接口
  • 匿名投票对任何人都没有帮助。答案有什么问题?
  • Version 1.1 of PuLP 链接到 jeannot.org 上的主页,我的 Sophos 以“高风险网站已被阻止,访问已被阻止,因为在该网站上发现了威胁 C2/Generic-A”。 Sophos 的page 说它是“命令和控制恶意软件”。有人用过纸浆吗?您对此有何看法?
  • @mmorin 谢谢,我接受了你的编辑。很高兴看到人们发现此答案很有用。
  • 我认为 PuLP 应该在这个列表的顶部,其次是 Google ortools 和 Pyomo
【解决方案2】:

我推荐使用包 cvxopt 来解决 Python 中的凸优化问题。 cvxopt 的文档here 中有一个用于线性程序的 Python 代码的简短示例。

【讨论】:

    【解决方案3】:

    其他答案在提供求解器列表方面做得很好。但是,只有 PuLP 被提及作为 Python 库来制定 LP 模型。

    另一个不错的选择是Pyomo。像 PuLP 一样,您可以将问题发送给任何求解器,然后将解决方案读回 Python。您还可以操纵求解器参数。我和一个同学在 2015 年比较了 PuLP 和 Pyomo 的性能,我们发现 Pyomo 针对相同问题生成 .LP 文件的速度比 PuLP 快几倍。

    【讨论】:

      【解决方案4】:

      图用于解决线性程序的唯一情况是用于家庭作业问题。在所有其他情况下,线性规划问题都是通过矩阵线性代数解决的。

      对于 Python,虽然有一些纯 Python 库,但大多数人使用带有 Python 绑定的本机库。有大量用于线性规划的免费和商业库。有关详细列表,请参阅 Wikipedia 中的 Linear Programming 或 OR/MS Today 中的 Linear Programming Software Survey

      免责声明:我目前在 Gurobi Optimization 工作,之前曾在提供 CPLEX 的 ILOG 工作。

      【讨论】:

      • 作业和工作之间还有学习的热情——我觉得你写的第一句话不合适......
      • 线性规划问题哪个最快?
      【解决方案5】:

      为了解决线性规划问题,可以使用SciPy中的scipy.optimize.linprog模块,该模块使用Simplex算法。

      【讨论】:

        【解决方案6】:

        我会推荐使用PuLP python 包。它有一个很好的界面,你可以使用不同类型的算法来解决 LP。

        【讨论】:

          【解决方案7】:

          lpsolve 对我来说是最简单的。无需安装单独的求解器。它在包装中。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多