【发布时间】:2012-10-31 23:18:45
【问题描述】:
我需要开发一个课程时间表软件,它可以有效地分配时间段和房间。这是基于课程的例行程序,而不是基于注册后的程序。并且有效地意味着根据员工时间偏好为课程分配时间段,并且还需要最大限度地减少第一年和第二年的课程重叠,以便第二年的学生可以重新参加他们未能通过的课程。(以及第三年和第四年的对) .
现在,起初我认为这将是一个简单的问题,但现在似乎不同了。我看过的大多数论文都使用遗传算法/PSO/模拟退火或这些类型的算法。而且我仍然无法将问题解释为 GA 问题。 我很困惑的是为什么几乎没有人建议 DFS 或 Graph-coloring 算法?
如果使用 DFS/图形着色,有人可以解释一下场景吗?或者为什么不建议或尝试它们。
【问题讨论】:
-
根据细节,您的问题可能是“NP-Complete”。如果是这样,对于所有已知的精确算法,时间随着问题的大小呈指数增长。对于除了非常小的问题之外的任何问题,您都必须使用某种近似启发式算法,而不是精确算法。一般的图着色绝对是 NP-Complete。
-
稍微扩展一下,任何常见的难题都具有良好的启发式方法,可以为该问题实现准确度和性能的合理组合。除非我正在着手一项重大的研究项目,否则我会采用一种普遍推荐的方法。
-
作业调度或“时间表”问题如果引入了几个现实世界的约束,则往往是 NP-Complete 的。通过大量简化,它们可以在 P 时间内完成。因此,类似 DFS 的搜索是一种选择,但不是首选方法。只是其他几种优化技术(您已经发现)更适合此类问题。
-
过快地调用“NP-complete”是调度算法合理讨论的祸根。 许多现实世界的问题可以在与可接受误差成正比的 P 中解决。 Vazirani 的“逼近算法”是从事此类工作的书架必备:amazon.com/Approximation-Algorithms-Vijay-V-Vazirani/dp/…
-
如果问题规模足够小,我建议使用蛮力(例如 DFS),因为这样可以保证找到最佳解决方案,但是一旦问题规模太大,就会导致蛮力采取太长了。
标签: algorithm combinatorics genetic-algorithm mathematical-optimization evolutionary-algorithm