您是否有过业务要求,结果证明是NP-Complete问题?

时间:2009-03-10 00:45:16

标签: language-agnostic np-complete

NP-completeness在我看来就像其中一个主要是理论上的东西,而不是你在正常工作环境中遇到的东西。

所以我有点好奇,如果有人在他们的工作中遇到问题,结果证明是NP完全的,并且设计需要改变以适应它?

9 个答案:

答案 0 :(得分:7)

正如其他人所说,背包(用于包装货物)和旅行商问题可能是最常见的“现实世界”NP完全问题。

我倾向于在工作中遇到问题,这些问题无法证明是NP完整或不完整的,因为它们的定义不是很明确。

答案 1 :(得分:1)

您需要在两个以上位置之间找到最佳旅行点的任何类型的地图工具都可以不加任何变更NP-Complete problem

答案 2 :(得分:1)

从仓库优化波次拣选的问题等同于Travelling Salesman problem

也就是说,你有N个订单等待被选中,你想要找到n个最佳订单,以最大限度地减少旅行距离和选择器访问的不同选择位置。

我最近遇到过这个问题。我们使用了一种近似值,这种近似值适用于普通情况,但有时可能会提供次优效果。

答案 3 :(得分:1)

此外,背包问题(NP-hard)经常出现。试图优化事物是一个诱人的陷阱。

答案 4 :(得分:1)

当我还是一名大学一年级学生时,我同意为朋友的父亲编写软件。这是为了调度资源。我当时没有意识到这一点,但事实证明这是一个NP完全问题。

谢天谢地,找到一个解决方案是可以接受的 - 不需要找到最佳解决方案。编写启发式方法很有趣 - 实际上是一组启发式方法 - 可以在程序运行时进行更改并尝试解决问题。

我在夏天完成了一个解决方案,但后来每年都在开发新版本。我出售它的大计划持平。我是一个比营销人员更好的开发人员。

这很有趣,很早就教会了我很多关于开发的真实世界 - (最终用户,需求收集,测试等等 - 很多你在本科CS中没有得到的东西)

要解决您的问题 - 那是一位老师必须安排学生进行特殊教学。他是语言治疗师和听力学家 - 但它可以应用于任何类似的领域。他有现成的老师,课堂和学生活动,每周必须与学生见面一些特定的次数。这是背包问题或任何其他类似/等效的调度问题。

再次,事实证明,只是得到一个解决方案很好 - 我们没有必要最大化或最小化任何东西 - 我们只需要容纳所有学生。

我只记得无法解决我以前运行场景的测试用例 - 多年来我们解决的所有问题。

我从来没有能够推销它 - 主要是因为我不知道我在做什么,我不知道如何到达我的市场/买家。

答案 5 :(得分:1)

值得注意的是,存在启发式近似技术,用于获得NP完全问题的“足够好”的答案,例如模拟退火和压缩退火。如果您可以将NP完全问题减少到旅行商问题,则可以使用这些方法。 (任何NP完全问题都可以减少到任何其他NP完全问题,但实际上这样做有时会让人痛苦。)

无论如何,那里有模拟退火和压缩退火实现;其中一个是Djinni,它是用C ++编写的,并且有Python绑定。

答案 6 :(得分:0)

旅行商问题就是一个很好的例子。同样的后勤问题也适用于航空公司,邮局和各种行业。

答案 7 :(得分:0)

另一个例子是拥有区域分销中心的公司,特别是那些直接向客户提供服务的公司(例如Netflix),需要担心被称为facility location的NP-Complete问题家族。

事实上,NP-Complete问题在现实世界中具有相关性的观点可以通过以下事实得到证明:它们的近似算法经常出现在运筹学的期刊中。

答案 8 :(得分:0)

几年前我正在制作一个地图程序,就像本地Google地图一样。我在地图上放置了一些小标记,但是很多标记在某些位置紧密聚集在一起。我的老板说:“让我这样做,这样我就可以把标记拖走一点”(并且它有一条线或语音泡沫指针 - 从标记到实际位置)。

我认为让用户这样做是很愚蠢的,特别是因为他花了5分钟让它变得完美,然后改变缩放级别,然后一切都会出错。

我决定尝试编写一个函数来找到一种布局标签的方法,以便最小化从每个标签到其位置的总屏幕距离。我相信当时我确信这是NP完全的,但是点数可能足够小以至于仍然可行,至少在很多情况下。 (我记得我们认为我们在课堂上花了太多时间来讨论NP完整性证明,而对于替代解决方案还不够:如果你的老板想要完成某些事情,你不能只说“NP难,不会做” - 你仍然需要提出的东西。)

然后谷歌地图出现了,只是把所有的标签都喷在了彼此之上,这完全很糟糕(我每天都在诅咒它),但是我无法与其他功能竞争,所以我放弃了。 : - (