关卡 1:模拟排课表(找出最优解)
背景:请为小王、小李、小张排周一到周三的课程表(每人1天,不能重复)。
软约束惩罚规则:
规则 A:小王不排周一。若违规,该格子爆红,罚 100分。
规则 B:小李和小张必须相邻。若不相邻(中间隔了人),罚 50分。
小王周一惩罚: 100 分 | 李张不相邻惩罚: 0 分
当前总罚分: 100
当前总分 100。请继续调整下拉菜单,目标是把罚分降到最低!
关卡 2:锁定周五的惩罚代码
背景:看下方的周一到周五课程表。目前周五安排了“小华(ID:3)”,触发了软约束警告(尽量不排小华在周五)。
编程任务:为了让程序知道“如果周五是小华,就开启惩罚”,请补全下方的 Reification(具体化) 代码逻辑。
model.Add(schedule[4]
3).OnlyEnforceIf(
)
model.Add(schedule[4]
3).OnlyEnforceIf(
)
关卡 3:课程表防疲劳扫描仪
背景:在排满一周的课程表时,**尽量不要让同一个人连续两天值日**。如果发生(今天和明天安排了同一个人),罚分 200。
操作步骤:
1. 先在上方课程表中故意造出“连班”的情况(默认已有连班)。
2. 补全下方代码逻辑,将相邻两天 `schedule[i]` 和 `schedule[i+1]` 的关系映射到疲劳惩罚变量 `p_fatigue` 上。
3. 点击“检查”,代码将按你的逻辑检查上方课程表。
model.Add(schedule[i]
schedule[i+1]).OnlyEnforceIf(
)
model.Add(schedule[i]
schedule[i+1]).OnlyEnforceIf(
)