新高考自动排课 (Gaokao Auto Schedule)
适用场景
- 实施新高考"走班制"的中学需要为选考科目排课;
- 用户提到 "3+1+2"、"3+3"、"走班"、"教学班"、"选课排课"、"排课冲突" 等关键词;
- 需要产出行政班课表、教学班课表、教师课表;
- 需要校验学生/教师/教室三方冲突。
排课模型(速览)
- 行政班: 语文、数学、外语全员必考, 在固定行政班内上课。
- 走班(教学班): 选考科目按单科把选修学生集中, 按教室容量拆分为若干教学班,
学生跨行政班走班上课。 - 一名学生同一节次只能在一个地点上课 → 这是核心约束, 决定了排课为 CSP 问题。
详细选科组合、行政班/教学班区别见 references/gaokao_models.md;
约束清单、参数与求解器说明见 references/constraints.md。
工作流程
1. 准备输入
支持两种入口:
- 演示/快速验证: 直接用内置演示数据(无需输入文件)。
- 真实数据: 用户提供以下文件, 参考
assets/下的模板: students.csv:id,admin_class,elective(elective 为逗号分隔选考科目)teachers.csv:teacher,subjects(覆盖默认教师池, 可选)config.json: 排课参数(可选, 见references/constraints.md第 3 节)
若用户没有提供输入, 可先用 scripts/generate_sample_input.py 生成示例:
python scripts/generate_sample_input.py --out ./sample_input --mode 3+1+2
2. 运行排课引擎
# 完整能力(推荐, 需 ortools): 在含 ortools 的 Python 环境中运行
python scripts/schedule.py --students students.csv --teachers teachers.csv \
--config config.json --out ./output
# 无输入快速演示
python scripts/schedule.py --demo --mode 3+1+2 --out ./output
- 引擎优先使用 OR-Tools CP-SAT 求解器(对 3+3 等密集冲突场景稳定);
- 未安装
ortools时自动回退到内置贪心 + 交换修复引擎(3+1+2 同样可解)。
> 运行环境: 若使用 CP-SAT, 需在已安装 ortools 的虚拟环境中执行
> (参见技能目录 requirements.txt)。用 python -m venv 建隔离环境并
> pip install ortools 后, 用该环境的 python 运行 scripts/schedule.py。
3. 检查输出
运行后在 --out 目录生成:
- schedule_result.html —— 可视化课表, 含「行政班 / 教学班 / 教师」三个分页;
- timetable_admin.csv / timetable_teacher.csv / timetable_elective.csv;
- conflicts.txt —— 仅当校验发现冲突时才生成(正常情况不出现)。
引擎已内置三重冲突校验(学生/教师/教室)。若仍出现 未排满节次 > 0 或冲突,
按 references/constraints.md 第 3 节调整参数(如增加 elective_room_count、
降低 students_per_class、提高 cp_timeout)后重跑。
常见调整
- 模式切换:
--mode 3+3处理六选三。 - 规模调整: 编辑
config.json的admin_classes、students_per_class、
elective_room_count等。 - 课时调整: 改
required_periods/elective_periods。 - 教师资源: 提供
teachers.csv指定各科目可用教师(影响教学班拆分与并发上限)。
资源索引
scripts/schedule.py—— 核心排课引擎(CP-SAT + 贪心回退 + 冲突校验 + 课表导出)。scripts/generate_sample_input.py—— 生成示例输入(学生/教师/配置)。references/gaokao_models.md—— 新高考选科模式与走班制详解。references/constraints.md—— 约束清单、参数表、求解器与输入/输出格式。assets/students_template.csv/assets/teachers_template.csv/assets/config_template.json—— 输入模板。requirements.txt—— 依赖(ortools)。