什么是适合整数线性规划的问题的例子?

时间:2011-09-30 05:47:06

标签: algorithm architecture linear-programming

我一直在编写软件来解决业务问题。我在浏览其中一篇SO帖子时遇到了LIP。我用谷歌搜索,但我无法解释如何使用它来解决业务问题。感谢是否有人可以帮助我理解外行。

6 个答案:

答案 0 :(得分:2)

首先,阅读a linear programming example from Wikipedia

现在想象一下农民生产猪和鸡,或者生产烤面包机和真空吸尘器的工厂 - 现在输出(可能是限制因素)是整数,所以这些漂亮的图表将逐步走向弯曲。这是一个易于表示作为线性编程问题的业务应用程序。

我之前使用整数线性编程来确定如何平铺n个相同比例的图像以最大化用于显示这些图像的屏幕空间,并且形式主义可以表示覆盖问题,如调度,但整数线性编程的业务应用程序看起来像更自然的应用。

SO用户flolo说: 我经常遇到的用例:在数字电路设计中,您可以将对象放置/映射到芯片的某些部分(FPGA-Placing) - 这可以通过ILP完成。同样在HW-SW协同设备中经常出现分区问题:程序的哪个部分仍应在CPU上运行,哪个部分应在硬件上加速。这也可以通过ILP解决。

答案 1 :(得分:2)

ILP可用于解决基本上任何问题,涉及做出一系列决策,每个决策只有几个可能的结果,所有这些都是提前知道的,并且其中的整体“质量”可以使用不依赖于选择之间的“交互”的函数来描述任何选择的组合。要了解它是如何工作的,最简单的方法是进一步限制只能是0或1的变量(最小的有用整数范围)。现在:

  • 每个需要是/否答案的决定都会变成一个变量
  • 目标函数应该描述我们想要最大化(或最小化)的事物作为这些变量的加权组合
  • 您需要找到一种方法来表达使用一个或多个线性相等或不等式约束的每个约束(不能同时进行的选择的组合)

实施例

例如,假设您有3名工人,Anne,Bill和Carl,以及3个工作,Dusting,Typing and Packing。所有人都可以完成所有工作,但他们每个工作都有不同的效率/能力水平,因此我们希望为每个工作找到最佳任务,以最大限度地提高整体效率。我们希望每个人完成一份工作。

变量

设置此问题的一种方法是使用9个变量,每个变量对应一个worker和job的组合。如果Anne应该在最优解中干尘,则变量x_ad将得到值1,否则为0;如果Bill应该在最优解中包装,x_bp将得到值1,否则为0;等等。

目标函数

接下来要做的是制定一个我们想要最大化或最小化的目标函数。假设基于Anne,Bill和Carl最近的绩效评估,我们有一个9个数字表,告诉我们他们每人执行3个工作需要多少分钟。在这种情况下,有意义的是取所有9个变量的总和,每个变量乘以该特定工作人员执行该特定工作所需的时间,并寻求最小化该总和 - 即,最小化所花费的总时间。完成所有工作。

约束

最后一步是给出约束,强制执行(a)每个人完成一项工作,(b)每个工作完全由1个人完成。 (请注意,实际上这些步骤可以按任何顺序完成。)

为了确保Anne完成一项工作,我们可以添加x_ad + x_at + x_ap = 1的约束。可以为Bill和Carl添加类似的约束。

为了确保只有1人粉尘,我们可以添加x_ad + x_bd + x_cd = 1的约束。可以为打字和打包添加类似的约束。

总共有6个限制。现在,您可以将这个9变量,6个约束问题提供给ILP求解器,它将在最佳解决方案中吐出变量值 - 其中3个将是1,其余的将为0。 3是1告诉你哪些人应该做哪个工作!

ILP是一般

碰巧,这个特殊问题有special structure,可以使用不同的算法更有效地解决它。使用ILP的优点是可以轻松地将问题的变化结合起来:例如,如果实际上有4个人而且只有3个工作,那么我们需要放松约束,以便每个人最多 > 1份工作,而不是一份工作。这可以简单地通过将前3个约束中的每个约束中的等号更改为小于或等于符号来表达。

答案 2 :(得分:1)

示例ILP问题类似于:

  • 最大化 37∙x1 + 45∙x2

其中

  • x1,x2,...应为正整数

...但是,

形式中有一组约束
  • a1∙x1 + b1∙x2< k1
  • a2∙x1 + b2∙x2< K2
  • a3∙x1 + b3∙x2< K3
  • ...

现在,更简单地阐述维基百科的例子:

  • 农民有 L m²土地种植小麦或大麦或两者的组合。
  • 农民有 F 克肥料和 P 克杀虫剂。
  • 每平方米的小麦需要 F1 克肥, P1 克杀虫剂
  • 每平方米的大麦需要 F2 克肥, P2 克杀虫剂

现在,

  • a1 表示每平方米的小麦售价
  • a2 表示每平方米大麦的售价
  • x1 表示种植小麦的土地面积
  • x2 表示种植大麦的土地面积
  • x1,x2 是正整数(假设我们可以以1平方米的分辨率种植)

所以,

  • 利润 a1∙x1 + a2∙x2 - 我们希望将其最大化
  • 因为农民的土地面积有限: x1 + x2< = L
  • 因为农民的肥料量有限: F1∙x1 + F2∙x2< ˚F
  • 因为农民的杀虫剂数量有限: P1∙x1 + P2∙x2< P

a1,a2,L,F1,F2,F,P1,P2,P - 都是常数(在我们的例子中:正面)

我们正在寻找正整数 x1,x2 ,这将使所述表达式最大化,并给出约束条件。

希望它清楚......

答案 3 :(得分:1)

ILP“本身”可以直接模拟很多东西。如果您搜索LP示例,您可能会发现许多着名的教科书案例,例如饮食问题

  

给予一组药丸,每种药丸含有维生素和维生素   配额,找到与配额相匹配的最便宜的鸡尾酒。

许多此类问题自然会出现需要varialbe为整数的情况(也许你不能将药片分成两半)

真正有趣的是,实际上大量的组合问题会降低到LP。我最喜欢的一个是作业问题

  

给定一组N个工作人员,N个任务和N个N matirx描述如何   每个工作人员为每项任务收费,确定要完成的任务   给每个工人以最小化成本。

大多数自然出现的解决方案具有指数复杂性,但存在使用线性规划的多项式解决方案。


对于ILP,ILP具有NP完全性的额外好处/难度。这意味着它可以用于模拟各种各样的问题(布尔可满足性在这方面也非常流行)。由于有很多优秀且优化的ILP求解器,因此将NP完全问题转换为ILP通常是可行的,而不是设计自己的自定义算法。

答案 4 :(得分:0)

您可以轻松地在任何想要优化的位置应用线性程序,目标函数是线性的。您可以制定时间表(我的意思是大型,如火车公司,需要优化车辆和轨道的利用率),生产(优化获胜),几乎所有东西。有时将您的问题表述为IP和/或有时您遇到解决方案所遇到的问题是棘手的,您必须生成例如0.345辆赛车获得最佳胜利。这当然是不可能的,所以你限制了更多:汽车数量的变量必须是整数。即使它现在听起来更简单(因为你的变量选择无限少),它实际上更难。在这一刻,它变得NP难。这实际上意味着您可以使用ILP解决计算机中的任何问题,您只需要对其进行转换即可。

对于你我会建议阅读一些基本的(I)LP内容。从我的想法,我不知道任何好的在线网站(但如果你goolge你会发现一些),作为书我可以推荐线性编程 Chvatal 。它有很好的例子,并且还描述了真实的用例。

答案 5 :(得分:0)

这里的其他答案都有很好的例子。使用整数规划和更普遍的运营研究的两个黄金标准是

  1. INFORMS(运筹学与管理科学研究所)出版的期刊界面
  2. Franz Edelman运筹学和管理科学成就奖的获奖者
  3. Interfaces发布了使用运算研究应用于实际问题的研究,而Edelman奖是一项竞争激烈的运营研究技术商业使用奖。