我知道有一些调度问题是NP-hard / NP-complete ...但是,没有一种是以这种方式表明这种情况也是NP。
如果您有一组约束 startAfter , startBy 和持续时间的任务,则所有尝试使用单一资源 ...如果没有详尽的搜索,您是否可以解决时间表或确定无法解决问题?
如果答案是“抱歉,但这是NP-complete”什么是最好的启发式(s?)使用,有没有办法减少a)所需的时间解决时间表和b)确定无法解决的时间表。
我通过实现“最小窗口优先”启发式的递归实现了(在prolog中)一个基本的冲突解决目标。这实际上很快找到了解决方案,但在查找无效的计划时非常慢。有办法克服这个问题吗?
不管是复合问题!
答案 0 :(得分:17)
现实生活中大多数调度问题中最困难的部分是掌握可靠性和完整的约束条件。如果我们以创建大学时间表为例:
然后您需要一个可以应对变化的计划系统,因此当最后一分钟更改一个约束时,您不必更改完整的时间表。
关于调度系统的研究论文通常会忽略以上所有内容。至于给定调度问题的NP完整性,在现实生活中你不关心,因为即使它不是NP完全你甚至不可能定义“最佳解决方案”是什么,这么好就够了。
请参阅http://www.asap.cs.nott.ac.uk/watt/resources/university.html以获取可能有助于您入门的论文列表;调度软件中还有很多PHD。
答案 1 :(得分:3)
对于NP-hard / complete优化问题(例如调度),通常有approximation algorithms好的Approximation Algorithms for scheduling。你可以在papers或hardness of approximation上浏览Ahmed Abu Safia的课程笔记。
从某种意义上说,所有的公钥加密都是通过“不太难”的问题来完成的,比如因为NP难问题提供了太多容易的案例,因为部分因素。它是相同的NP完全性,使它们“在道德上很难”,这也给它们带来了太多容易出现的问题,这些问题往往属于最优的误差范围。
有一个更深入的{{3}}理论讨论了近似算法的局限性。
答案 2 :(得分:2)
您可以使用动态编程来解决其中的一些问题。贪心算法也浮现在脑海中。调度理论既深刻又美观,但我发现这两个理论将解决我遇到的大部分问题。也许我很幸运。
答案 3 :(得分:1)
你对startBy的意思是什么?
使用startAfter并且如果只有一个资源,那么快速解决方案可能是使用topological sorting。示例算法以线性时间运行,但如果图形包含循环,则不包括错误情况。
答案 4 :(得分:1)
答案 5 :(得分:0)
考虑P类中的调度问题:
输入:包含开始时间和结束时间的活动列表。
按完成时间排序。
选择此排序列表的前N个元素,以查找您可以在给定时间内安排的最大活动量。
您可以添加以下警告:所有活动必须在下午5点结束,在这种情况下,当您完成列表时,一旦您到达在此时间之后结束的活动就停止。