如何决定何时使用线性编程?

时间:2012-03-29 18:07:00

标签: optimization linear-programming

当我看到优化问题时,我看到了很多选择。一种是线性编程。我用抽象的术语理解LP是如何工作的,但我发现很难看出某个特定问题是否适合LP。是否有任何启发式方法可以帮助指导这一决定?

例如,在我看到如何正确构建问题之前,Is there a good way to do this type of mining?中描述的工作花了几周时间。是否有可能“提前”知道LP可以解决问题,而不首先看到“如何表达它”?

是否有可用于确定问题是否适合LP的清单?是否有针对该主题的标准(可读)参考?

1 个答案:

答案 0 :(得分:7)

启发式(和/或核对清单),以确定手头的问题是否真的是一个线性计划。

这是我尝试回答的问题,我也试图概述我是如何解决这个问题的。

表明某个特定问题适合制定为LP / IP的问题:

  1. 是否需要在不同的时间间隔定期进行决策?
  2. 是否有许多资源(工人,机器,车辆)需要分配任务? (小时,工作,目的地)
  3. 这是一个路由问题,其中不同的"点"必须被访问?
  4. 这是一个位置还是一个"布局"问题? (整类切割问题属于这一类)
  5. 对这些问题回答“是”意味着LP配方可能有用。

    常见的LP< s> 包括:资源分配:(分配,运输,转运,背包),投资组合分配,作业调度和网络流量问题。 Here's a good list of LP Applications适用于任何刚接触LP或IP的人。 也就是说,实际上有1000种不同类型的问题可以表述为LP / IP。我与之合作的人(研究人员,同事)培养了一种直觉。他们善于认识到问题是某种类型的整数计划,即使他们不记得细节,然后他们可以查找。

    为什么这个问题很难回答: 有很多原因可以解释为什么LP配方是否会切割它并不总是直截了当。

    1. 有很多"艺术" (主观性)在建模/制定方法中。
    2. 经验帮助很大。人们善于认识到这个问题可以被比作“#34;另一种已知的配方
    3. 即使问题不是直接的LP,也有许多聪明的主从技术(子问题)或嵌套技术使整个制定工作
    4. 看起来多个目标的内容可以组合成一个目标函数,并附加一组适当的权重。
    5. 有经验的建模人员使用分解约束 - 放松技术,然后对其进行补偿。
    6. 如何继续完成基本配方?

      以下总是引导我朝着正确的方向前进。我通常首先列出决策变量,约束和目标函数。然后,我通常会在这三个中进行迭代,以确保所有内容都适合。"

      因此,如果您手头有问题,请问问自己:

      • 什么是决策变量(DV)?我发现这始终是开始制定过程的好地方。 DV有多少类型? (哪个资源获取哪个任务,何时开始?)
      • 有哪些限制?
        一些限制很容易看到。其他人则稍微挑逗一下。约束必须根据您的决策变量以及强加的任何常数/限制来编写。
      • 什么是目标函数?
        需要最大化或最小化的数量是多少?注意:有时候,目标函数是什么并不清楚。这没关系,因为它很可能是约束 - 满意问题。

      一旦您认为您的LP配方完成后,将进行一些快速的完整性检查

      1. 我总是试图看看是否有一个简单的解决方案(全0或全部大 数字)不是解决方案集的一部分。如果是,那么 配方很可能不正确。一些约束是 失踪。
      2. 确保每个约束都是"相关的"'至 决策变量。 (我偶尔会发现约束 只是"在那里闲逛。"这意味着" 簿记约束" 已经错过了。)
      3. 根据我的经验,坚持下去的人几乎总是发展所需的直觉。希望这会有所帮助。