我一直在编写软件来解决业务问题。我在浏览其中一篇SO帖子时遇到了LIP。我用谷歌搜索,但我无法解释如何使用它来解决业务问题。感谢是否有人可以帮助我理解外行。
答案 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告诉你哪些人应该做哪个工作!
碰巧,这个特殊问题有special structure,可以使用不同的算法更有效地解决它。使用ILP的优点是可以轻松地将问题的变化结合起来:例如,如果实际上有4个人而且只有3个工作,那么我们需要放松约束,以便每个人最多 > 1份工作,而不是一份工作。这可以简单地通过将前3个约束中的每个约束中的等号更改为小于或等于符号来表达。
答案 2 :(得分:1)
示例ILP问题类似于:
其中
...但是,
形式中有一组约束现在,更简单地阐述维基百科的例子:
现在,
所以,
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)
这里的其他答案都有很好的例子。使用整数规划和更普遍的运营研究的两个黄金标准是
Interfaces发布了使用运算研究应用于实际问题的研究,而Edelman奖是一项竞争激烈的运营研究技术商业使用奖。