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

您完成了数据输入。您在 FET 中按下生成。然后您开始等待。
十分钟过去了。一个小时过去了。已排的活动总数始终达不到总数。最后,您停止了生成,却没得到一张课表。更糟糕的是,您不知道为什么。
问题往往在于一条约束
一张学校课表有数百条约束。其中大多数是正确的。但有一条不正确,而您看不出来。
例如:
- 一个有 31 名学生的班级只能使用有 30 个座位的教室。
- 一位老师有 26 小时的课程,但只有 24 个时间段可用。
- 一条规则导致某个活动在一周内没有合法的开始时间。
- 四节课必须安排在不同的日子,但该学生组一周只上三天课。
这些情况中的任何一种都会使课表变得不可能。没有任何排法能够满足它。但文件看起来很正常。FET 打开它并开始搜索。
为什么搜索过程不会告诉您
FET 非常擅长它的工作。它会搜索一种能遵守每条约束的排法。FET 会立即拒绝某些文件。但对于许多其他问题,它会开始一个不可能成功的搜索。
一次失败的搜索只告诉您一件事:这次搜索没有找到一种排法。它无法区分“您的约束使其不可能”和“我这次没有找到”。于是您更改一个权重,再试一次,然后再次等待。
时间就是这样被消耗掉的。时间花在了永远不可能成功的搜索上,而不是花在求解上。
先计算,后搜索
在生成之前,有一个更快的问题可以问:这张课表到底有没有可能排出来?
这个问题不需要搜索,只需要算术。检查功能会读取您的约束,并计算它们留下的空间:
- 老师必须授课的小时数,与仍然可用的时间段数对比
- 应用所有规则后,一个活动仍然拥有的开始时间
- 两个都必须发生的课程是否被强制安排在同一个时间段
- 一组课程是否需要比一周所拥有的天数更多的天数
当其中任何一个计数达到零时,课表就是不可能的。这不是对难度的猜测,而是一个证明,并且检查功能在几秒钟内就能给出结果。
它会指明是哪条规则
一个证明只有在您可以据此采取行动时才有用。每一条检查结果都会用平实的语言说明问题所在,并指明涉及的规则。

在上面的例子中,数学 · 9A 班有 31 名学生。活动首选教室约束所允许的最大教室有 30 个座位。解决方法很明确:允许一个更大的教室,或者拆分这个班级。
检查结果是分组的。证明不可能组包含了任何求解器都无法绕过的问题。其他组则包含可能的错误以及使文件难以处理的因素。请在四种检查结果中阅读更多信息。
两个使用它的地方
没有账户:FET 助手。 前往 fetviewer.com/check 并选择您的 .fet 文件。它是免费的,并且没有重新检查的次数限制。您的文件会保留在您的计算机上。您的浏览器只会向我们的服务器发送一份摘要,该摘要不包含任何名称:老师、教室和学生组都以数字形式传输。我们不存储任何东西。请参阅在没有账户的情况下检查文件。
在您的账户内:预检。 当您导入课表时,预检页面会与数据屏幕上的约束放在一起。每个约束部分顶部也会显示一行摘要。更改一条约束,并在工作时再次检查。请参阅预检功能的作用。
它不能告诉您什么
检查功能可以证明不可能的情况。但它不能证明一个文件一定能求解,也无法告诉您 FET 需要多长时间。一次干净的检查消除了一个失败的原因。搜索仍然是 FET 的工作。
所以请按此顺序两者都使用:
- 检查文件。
- 修正检查所证明的问题。
- 然后让 FET 进行搜索。
请在检查与让 FET 求解有何不同中阅读完整的比较。
在下一次漫长等待之前
下一次当生成运行时间过长时,请停止它。先检查文件。如果某条约束使课表不可能生成,您会在几秒钟内发现,并看到是哪一条。