最近有个需求,做排课系统的调研,查了几天资料,写了写 DEMO ,发现难度还是不小的。发现常用的一个是 Google 的 OR-Tools ,一个是 OptaPlanner 。不知道有没有在这个行业的大佬,帮我解解惑 :)
1.整体的实现路径 3 个部分:页面(选择各种条件,XML 或 JSON 格式输出)-> 算法+问题解释器 -> 排课结果 -> 反馈到页面中去
是不是约束限制( Hard ) + 关联要求( Soft )使用算法、问题解释器进行计算,然后得出结果,再投入其他优化算法进行再次计算,最后得出 Best Score 呢?核心难度是不是主要在算法的选择和组合,以及最终得分到底什么算是好呢。
2.规模大后复杂度问题 我用 OptaPlanner 写了个 DEMO ,样本比较小(十几门课,60 个老师,8 个约束),Hard 和 Soft 也相对简单,是不是当规模上去后,求解的时间会很长呢。是否会用到分布式架构解决单机性能瓶颈问题
3.调研了下市面上的产品
发现这些产品其实已经比较成熟了,有没有曾经在相关行业公司的朋友,给我解解惑
1
joyypjh 1 天前
要这么复杂吗?我怎么感觉就是堆业务逻辑
|
2
mixuxin 1 天前
|
3
michaelliuyang OP @mixuxin 多谢,我看看
|
4
yy306525121 1 天前
之前我问过,可以去翻我的帖子,最后论坛的一个大佬用 ortools 帮我写出来了,我现在基本都是用 ortools 写的排课,OptaPlanner 这玩意规模只要一上去速度很慢
|
5
xuanbg 1 天前
排课有技巧的,硬来肯定很复杂也很慢。科大讯飞的做的不错,OP 可以参考一下。
|
6
michaelliuyang OP @yy306525121 有代码可以分享的不,学习学习
|
7
xhawk 1 天前
可以参考一下 简课网
|
8
lifanxi 1 天前
我 30 多年前上初中时想过能不能写个程序来实现自动排课,想了想发现很复杂搞不定,后来就没有再想过了。
|
9
democrazyx 1 天前
数学规划问题的话,可以试试 COPT 求解器,个人可以无限期免费试用
|
10
Tiller 1 天前
真行业相关了
前东家是高效教务系统前几名。 其实我们是这样的,草台班子是这么写的 首先,我们会初始化时间片:1. 教室时间 2. 教师时间 3. 学生时间; 这个很好理解,教室同时不能有多门课一起上,也不可能一个老师同时上两门课,学生也不会分身术同时上几门课。 他们之间不能相互冲突是第一层约束 然后到选课环节。流程是根据每年的教学安排,生成课程基本信息。 课程也分为必修课,选修课。 必修课会先排课,因为学生是固定的。 我们来说一下这部分的基本约束; 1. 教室、学生、老师时间不能冲突 2. 排课时要跳过不允许排课的时间 (例如军训周、实习月、老师不可上课时间) 3. 自定义约束条件(老师、学生不能连续上课多少节,一周不能上超过多少节等等) 这部分是拖拉拽实现的,也就是选定排课的周数,我把左侧的课程拖到课程表中,就可以完成。在此界面,还可以设置是否合班排课,分班排课等 基本的必修课排课完成之后,会继续排选修课。排好之后开选 学生根据时间,课程适用对象等条件过滤可选的课程,完成选课。如果有冲突,是选不上的 手动排课,实际上就是在满足各种约束条件下,对资源的时间片进行操作。 |
11
Tiller 1 天前
自动排课的部分,实际上就是贪心算法。在不停的遍历中,找到一个满足条件的,就写入数据库。这部分纯纯的单线程执行,我记得一个高校,自动排课会排大概十几二十分钟就可以了
技术上的实现,纯手工写的业务逻辑,不涉及任何规则引擎、约束解释器。因为我们用 Oracle 的存储过程实现的(可能会被同事认出来 |
12
Tiller 1 天前
最后再说一句,我看你调研的产品都是面向中小学的。中小学应该没有大学的教务系统这么复杂。
我们系统的复杂度来源于要应对各种学校的不同的需求,拥有较多的约束规则。在日常使用中,学校更多是自动排课后,再手动排课进行调整。 也有可能是我们自动排课做的垃圾,约束规则都是针对手排,没有针对老师个人意愿加入更多约束条件。(例如有的老师不喜欢上早课、有的老师希望前三天上课之类的这种很主观的意愿) |
13
beneo 1 天前
愿意付费么?
|
14
beneo 1 天前
如果做教育这块,学校希望有软件支撑学校自己的排课,然后兄弟你希望和学校完成共创之后,在支撑其他学校的排课。如果你是这个想法,你基本上可以放弃了。
所有排课需求不仅依赖于算法,更需要大量的服务支持。无论你的算法多么先进,都离不开人工的深度参与,而这种人工服务的成本往往不低,还大部分集中在八月份下。 以上你列举的所有厂商,还有科大讯飞的,都一样。自称新高考排课第一厂的晓羊都从排课转型 |
15
yy306525121 1 天前 via iPhone
@michaelliuyang 大佬的 python 代码已经贴出来了,java 的代码的话还需要吗
|
16
michaelliuyang OP @yy306525121 在您帖子最后看到了 python 的,Java 不需要了,我自己看看实现逻辑就行,多谢了
|
17
michaelliuyang OP @Tiller 其实现在新高考的每个学生选科,排起来是比较复杂的。小学基本没有强需求,中学其实 Excel 都能解决,主要还是高中,多谢回答,我自己在调研调研。
|
18
xxmaqzas 1 天前
要不试试这个 https://timefold.ai/
|