我一直在想,创建学校时间表的算法是否有已知的解决方案。基本上,它是关于优化给定的班级-学科-教师协会的“小时分散”(在教师和班级情况下)。我们可以假设我们在输入端有一组相互关联的班级、课程主题和教师,时间表应该在上午8点到下午4点之间。
我猜可能没有准确的算法,但也许有人知道一个很好的近似值或开发它的提示。
发布于 2010-02-02 01:11:52
这个问题是NP-!
简而言之,我们需要探索所有可能的组合,以找到可接受的解决方案列表。由于在不同学校出现问题的情况不同(例如:教室是否有限制?一些班级有时会分成小组吗?这是每周的时间表吗?等)没有一个众所周知的问题类可以对应于所有的调度问题。也许,与这些问题有许多相似之处。
确认这既是一个困难的问题,也是人们长期寻求解决方案的问题,就是检查这个(长)
由于涉及到大量的变量,其中最大的来源通常是教员的愿望;-)...,考虑枚举所有可能的组合通常是不切实际的。相反,我们需要选择一种访问问题/解决方案空间的子集的方法。
在另一个答案中引用的
与其专注于自动时间表生成器程序的特定实现,我想建议一些可以应用的策略,在问题定义( definition of problem )的层面上。
一般的理由是,在大多数现实世界的调度问题中,将需要一些妥协,而不是所有的约束,明示和暗示:将完全满足。因此,我们通过以下方式帮助自己:
这看起来可能有悖于直觉,但例如,通过提供一个初始的、部分填满的时间表(比如大约30%的时隙),以一种完全满足所有约束的方式,并且通过考虑这个部分时间表是不可变的,我们可以显著减少产生候选解决方案所需的时间/空间。
另一种附加约束的帮助方式是例如“人为地”添加约束,该约束阻止在一周中的某些天教授某些科目(如果这是每周的日程安排...);这种类型的约束导致减少问题/解决方案空间,而通常不排除大量的良好candidates.
在校对这个答案时,我意识到它很难给出明确的答复,但它仍然充满了实际的建议。我希望这对解决这个“难题”有帮助。
发布于 2010-02-02 01:33:32
真是一团糟。王室的烂摊子。为了补充已经非常完整的答案,我想指出我的家庭经历。我的母亲是一名教师,她曾经参与到这个过程中。
事实证明,拥有一台计算机来做到这一点不仅本身很难编码,而且也很难,因为有一些条件很难指定给预先烘焙的计算机程序。示例:
正如你所看到的,这个问题不是NP完全的,而是NP疯狂的。
所以他们所做的就是他们有一张带有小塑料插页的大桌子,他们移动插页直到得到令人满意的结果。他们从不从头开始:他们通常从上一年的时间表开始并进行调整。
发布于 2011-12-21 00:53:01
有一个课程安排跟踪和考试安排跟踪。许多研究人员参加了那次比赛。尝试了许多启发式和元启发式算法,但最终局部搜索元启发式算法(如禁忌搜索和模拟退火)明显优于其他算法(如遗传算法)。
看看一些决赛选手使用的两个开源框架:
https://stackoverflow.com/questions/2177836
复制相似问题