一尘不染

创建学校时间表的算法

algorithm

我一直想知道是否存在用于创建学校时间表的算法的已知解决方案。基本上,它是针对给定的班级-主体-
教师关联优化“小时分散”(在教师和班级情况下均如此)。我们可以假设我们在输入时有一组相互关联的班级,课程主题和教师,并且时间表应该在上午8点至下午4点之间。

我猜可能没有精确的算法,但是也许有人知道很好的近似或提示来开发它。


阅读 229

收藏
2020-07-28

共1个答案

一尘不染

这个问题是 NP完全的
简而言之,需要探索所有可能的组合以找到可接受的解决方案列表。由于各种学校出现问题的环境各不相同(例如:教室是否受到限制?,某些时间是否将某些班级分组划分为小组?,这是每周时间表吗?等),没有一个与所有计划问题相对应的众所周知的问题类别。也许
背包问题
与这些
问题
有很多相似之处。

要确认这既是一个艰巨的问题,又是人们一直在寻求解决方案的一个问题,是要检查
(主要是商用的)软件调度工具的

这一(较长)
列表

由于涉及的变量数量众多,其中最大的来源通常是教师的愿望;-)…,因此 考虑枚举所有可能的组合 通常是 不切实际的
。相反,我们需要选择一种访问问题/解决方案空间子集的方法。
- 在另一个答案中引用的 遗传算法 (或 似乎 是恕我直言)装备精良,可以执行这种半向导式搜索(问题是为下一代保留的候选者找到良好的评估功能)
- 图重写 方法也可用于此类组合优化问题。

除了要关注自动计划生成器程序的特定实现之外,我还想提出 一些可以 在问题的定义级别上 应用的策略
一般的理由是,在大多数现实世界中的调度问题中,将需要一些折衷方案,而不是所有明示和暗示的约束:将完全满足。因此,我们通过以下方式帮助自己:

  • 定义和排名所有已知约束
  • 通过手动提供一组 附加 约束来减少问题空间。
    这似乎是违反直觉的,但是例如通过提供一个初始的,部分填充的计划(例如大约30%的时隙),以完全满足所有约束的方式,并考虑到该部分计划是不可变的,我们可以大大减少产生候选解所需的时间/空间。
    附加约束的另一种帮助方法是,例如“人为地”添加约束,以防止在一周的某些天教某些主题(如果这是每周计划…);这种类型的约束导致减少问题/解决方案的空间,通常不会排除大量的良好候选者。

  • 确保可以快速计算出问题的某些约束条件。这通常与用于代表问题的数据模型的选择有关;这个想法是为了能够快速选择(或删除)某些选项。

  • 重新定义问题并允许一些约束被破坏几次(通常朝向图的末端节点)。这里的想法是消除 一些 用于填写时间表中最后几个空位的约束,或者使自动时间表生成器程序避开完成整个时间表,而向我们提供一打大概的清单候选人。如图所示,人类通常处于更好的位置来完成拼图,可能会使用通常不与自动逻辑共享的信息来打破一些矛盾(例如,“有时无数学”规则有时会被打破)对于“高级数学和物理学”课程;或“违反史密斯女士的一项要求比史密斯女士的一项要好… ;-))

在校对这个答案的过程中,我意识到提供一个明确的答案是很害羞的,但是它仍然充满了实用的建议。我希望这种帮助毕竟是一个“难题”。

2020-07-28