约束
决定课程位置的规则——如何添加、权重的含义以及列表顺序的重要性。
活动说明了必须教授的内容。约束说明了它可能安排的位置:这位老师周五不可用,那个实验室一次只能容纳一节课,这门主题不应该是当天最后一节课。
它们分为两个部分,因为FET将它们视为两个独立的问题。时间约束是关于时间的。空间约束是关于地点的。

您未编写的两条规则
每个课表都带有两条它未创建的约束:一条基本的时间强制规则和一条空间强制规则。它们是基础——没有老师或学生组同时出现在两个地方,没有教室被重复预订。
FET要求这些规则,因此它们始终具有完整权重且无法关闭。它们在标记为必需的列表中显示,其开关处于锁定状态。
权重是核心理念
所有其他约束都带有一个介于0到100之间的权重。您可以选择某些类型上的数字,但不能选择其他类型上的数字——规则在本页下方。
100%是硬性要求。它必须满足。如果不能满足,则没有课表。
低于100%是偏好,其权重表示您希望它被满足的强度。95%的规则将被遵守,除非遵守它会使其他事情变得不可能;40%的规则只是一个提示。这就是让课表变得良好而不仅仅是合法的原因——您可以表达我宁愿不这样做,但如果必须,我也会做,这正是真实学校的运作方式。
列表正是以此为基础,将每行标记为硬性或软性,您可以通过权重范围过滤列表,以找到所有您已设为硬性的,或所有您已保留为愿望的规则。
大多数约束类型根本无法加权。FET维护一个您可以自由加权的类型列表,并拒绝所有不在该列表中的类型。
⛔ 这并非形式。FET会两次拒绝该值:它自己的对话框不会保存它,其生成器会在开始前停止。一个包含这些类型中任何一种低于100%的文件不会给您一个更差的课表。它根本不会给您课表。
编辑器会禁用这些类型的权重字段并告诉您原因。因此,您无法输入FET会拒绝的数字。
另外两种情况强制100%:
- 上述强制性规则
- 针对已固定到特定真实房间的虚拟房间的优先房间规则——FET自身的要求。这条规则取决于其内容,而非其类型,因此它会随着您编辑房间列表而改变。
有一个真实的细节。从FET导入的文件永远不会被调整,即使它包含低于完整权重的规则。静默地重写他人的文件会打破“输入即输出”的承诺。因此,列表显示的是存储的权重,原因以工具提示形式显示,而不是显示文件中不存在的数字。
添加一个
添加会打开一个选择器,其中包含FET支持的所有约束类型,按类别分组且可搜索。类型非常多,搜索框是查找的途径——输入房间、空隙或连续,查看存在哪些类型。
选择一个类型会打开其编辑器,该编辑器是根据该类型自身的定义构建的,因此您获得的字段就是该类型实际拥有的字段。旁边是一个帮助面板,描述了该约束的作用。值得一读:约束名称简洁,并且有几种类型是近邻,但在一个重要方面有所不同。
当约束需要时间段时,您无需填写列表——您会得到一个天数 × 小时网格并点击单元格。少数类型需要多组时间段而非单个选择;这些类型会给您一个单一网格,其中每个单元格都被涂色到编号的集合中,这样您就可以看到各个集合之间的关系,而不是并排维护多个列表。
所有活动,还是仅部分活动?
这会让人困惑,值得明确说明:在许多约束类型中,命名老师、主题或组的字段并不决定谁受影响——它们决定了规则查看哪些活动。
它们是对活动的筛选器,而不是目标。将表单字段理解为此规则是关于史密斯先生的,而它实际意味着考虑涉及史密斯先生的课程,会导致规则悄无声息地不起作用。每种类型的帮助面板都会说明它是哪种情况。
顺序
列表有一个顺序,它并非装饰性的:它是约束写入导出文件的顺序。
通过拖动行的手柄来排列它们,或者使用按A→Z排序来按字母顺序排列整个部分并保存。只有当您查看完整列表的自然顺序时才提供拖动功能——当搜索、排序或过滤正在缩小范围时,您拖动到的位置将毫无意义。强制性规则由FET管理,永不移动。
重新排序可以撤销。
处理长列表
该部分有一个类别栏、一个搜索框、一个活动/非活动过滤器和权重范围滑块。通过它们,您通常可以从周五出了问题找到提及它的少数几条规则。
选择行允许您在一个操作中激活、停用、设置权重或删除。停用是其中最有用的——它保留了规则及其设置,同时使其失效,这是您测试某条规则是否导致您的课表无法生成的方法。
批量操作中的每个约束都单独授权。通过范围共享链接操作的人员只能更改他们被允许更改的内容,其余部分保持不变,而不是整个操作失败。批量权重更改还会列出任何它拒绝移动的项目。
列表上方,编辑者会看到一行预检摘要。如果它报告了阻塞冲突,那是一个证明而非警告,在您进行任何进一步操作之前,值得遵循它。