跳转到主要内容

导致您的 FET 课表无法排出的约束

Importing from FET 1 分钟阅读

一个错误的约束就可能使FET文件无解,而搜索可能耗费数小时才发现问题,请先检查文件,此过程免费且只需几秒。

您完成了数据输入。您在 FET 中按下生成。然后您开始等待。

十分钟过去了。一个小时过去了。已排的活动总数始终达不到总数。最后,您停止了生成,却没得到一张课表。更糟糕的是,您不知道为什么。

问题往往在于一条约束

一张学校课表有数百条约束。其中大多数是正确的。但有一条不正确,而您看不出来。

例如:

  • 一个有 31 名学生的班级只能使用有 30 个座位的教室。
  • 一位老师有 26 小时的课程,但只有 24 个时间段可用。
  • 一条规则导致某个活动在一周内没有合法的开始时间。
  • 四节课必须安排在不同的日子,但该学生组一周只上三天课。

这些情况中的任何一种都会使课表变得不可能。没有任何排法能够满足它。但文件看起来很正常。FET 打开它并开始搜索。

为什么搜索过程不会告诉您

FET 非常擅长它的工作。它会搜索一种能遵守每条约束的排法。FET 会立即拒绝某些文件。但对于许多其他问题,它会开始一个不可能成功的搜索。

一次失败的搜索只告诉您一件事:这次搜索没有找到一种排法。它无法区分“您的约束使其不可能”和“我这次没有找到”。于是您更改一个权重,再试一次,然后再次等待。

时间就是这样被消耗掉的。时间花在了永远不可能成功的搜索上,而不是花在求解上。

先计算,后搜索

在生成之前,有一个更快的问题可以问:这张课表到底有没有可能排出来?

这个问题不需要搜索,只需要算术。检查功能会读取您的约束,并计算它们留下的空间:

  • 老师必须授课的小时数,与仍然可用的时间段数对比
  • 应用所有规则后,一个活动仍然拥有的开始时间
  • 两个都必须发生的课程是否被强制安排在同一个时间段
  • 一组课程是否需要比一周所拥有的天数更多的天数

当其中任何一个计数达到零时,课表就是不可能的。这不是对难度的猜测,而是一个证明,并且检查功能在几秒钟内就能给出结果。

它会指明是哪条规则

一个证明只有在您可以据此采取行动时才有用。每一条检查结果都会用平实的语言说明问题所在,并指明涉及的规则。

打开一条检查结果:该班级有 31 名学生,而其可使用的最大教室有 30 个座位。涉及的规则已被指明
打开一条检查结果:该班级有 31 名学生,而其可使用的最大教室有 30 个座位。涉及的规则已被指明

在上面的例子中,数学 · 9A 班有 31 名学生。活动首选教室约束所允许的最大教室有 30 个座位。解决方法很明确:允许一个更大的教室,或者拆分这个班级。

检查结果是分组的。证明不可能组包含了任何求解器都无法绕过的问题。其他组则包含可能的错误以及使文件难以处理的因素。请在四种检查结果中阅读更多信息。

两个使用它的地方

没有账户:FET 助手。 前往 fetviewer.com/check 并选择您的 .fet 文件。它是免费的,并且没有重新检查的次数限制。您的文件会保留在您的计算机上。您的浏览器只会向我们的服务器发送一份摘要,该摘要不包含任何名称:老师、教室和学生组都以数字形式传输。我们不存储任何东西。请参阅在没有账户的情况下检查文件。

在您的账户内:预检。 当您导入课表时,预检页面会与数据屏幕上的约束放在一起。每个约束部分顶部也会显示一行摘要。更改一条约束,并在工作时再次检查。请参阅预检功能的作用。

它不能告诉您什么

检查功能可以证明不可能的情况。但它不能证明一个文件一定能求解,也无法告诉您 FET 需要多长时间。一次干净的检查消除了一个失败的原因。搜索仍然是 FET 的工作。

所以请按此顺序两者都使用:

  1. 检查文件。
  2. 修正检查所证明的问题。
  3. 然后让 FET 进行搜索。

请在检查与让 FET 求解有何不同中阅读完整的比较。

在下一次漫长等待之前

下一次当生成运行时间过长时,请停止它。先检查文件。如果某条约束使课表不可能生成,您会在几秒钟内发现,并看到是哪一条。

检查您的 FET 文件 →