最近在调研排课系统,有熟悉的大佬帮忙解答解答

1 天前
 michaelliuyang

最近有个需求,做排课系统的调研,查了几天资料,写了写 DEMO ,发现难度还是不小的。发现常用的一个是 Google 的 OR-Tools ,一个是 OptaPlanner 。不知道有没有在这个行业的大佬,帮我解解惑 :)

1.整体的实现路径 3 个部分:页面(选择各种条件,XML 或 JSON 格式输出)-> 算法+问题解释器 -> 排课结果 -> 反馈到页面中去

是不是约束限制( Hard ) + 关联要求( Soft )使用算法、问题解释器进行计算,然后得出结果,再投入其他优化算法进行再次计算,最后得出 Best Score 呢?核心难度是不是主要在算法的选择和组合,以及最终得分到底什么算是好呢。

2.规模大后复杂度问题 我用 OptaPlanner 写了个 DEMO ,样本比较小(十几门课,60 个老师,8 个约束),Hard 和 Soft 也相对简单,是不是当规模上去后,求解的时间会很长呢。是否会用到分布式架构解决单机性能瓶颈问题

3.调研了下市面上的产品

发现这些产品其实已经比较成熟了,有没有曾经在相关行业公司的朋友,给我解解惑

1400 次点击
所在节点    程序员
18 条回复
joyypjh
1 天前
要这么复杂吗?我怎么感觉就是堆业务逻辑
mixuxin
1 天前
看下这个帖子:
https://www.v2ex.com/t/1066877
[确实有难度]
michaelliuyang
1 天前
@mixuxin 多谢,我看看
yy306525121
1 天前
之前我问过,可以去翻我的帖子,最后论坛的一个大佬用 ortools 帮我写出来了,我现在基本都是用 ortools 写的排课,OptaPlanner 这玩意规模只要一上去速度很慢
xuanbg
1 天前
排课有技巧的,硬来肯定很复杂也很慢。科大讯飞的做的不错,OP 可以参考一下。
michaelliuyang
1 天前
@yy306525121 有代码可以分享的不,学习学习
xhawk
1 天前
可以参考一下 简课网
lifanxi
1 天前
我 30 多年前上初中时想过能不能写个程序来实现自动排课,想了想发现很复杂搞不定,后来就没有再想过了。
democrazyx
1 天前
数学规划问题的话,可以试试 COPT 求解器,个人可以无限期免费试用
Tiller
1 天前
真行业相关了

前东家是高效教务系统前几名。

其实我们是这样的,草台班子是这么写的

首先,我们会初始化时间片:1. 教室时间 2. 教师时间 3. 学生时间;
这个很好理解,教室同时不能有多门课一起上,也不可能一个老师同时上两门课,学生也不会分身术同时上几门课。

他们之间不能相互冲突是第一层约束

然后到选课环节。流程是根据每年的教学安排,生成课程基本信息。

课程也分为必修课,选修课。

必修课会先排课,因为学生是固定的。
我们来说一下这部分的基本约束;
1. 教室、学生、老师时间不能冲突
2. 排课时要跳过不允许排课的时间 (例如军训周、实习月、老师不可上课时间)
3. 自定义约束条件(老师、学生不能连续上课多少节,一周不能上超过多少节等等)

这部分是拖拉拽实现的,也就是选定排课的周数,我把左侧的课程拖到课程表中,就可以完成。在此界面,还可以设置是否合班排课,分班排课等

基本的必修课排课完成之后,会继续排选修课。排好之后开选

学生根据时间,课程适用对象等条件过滤可选的课程,完成选课。如果有冲突,是选不上的

手动排课,实际上就是在满足各种约束条件下,对资源的时间片进行操作。
Tiller
1 天前
自动排课的部分,实际上就是贪心算法。在不停的遍历中,找到一个满足条件的,就写入数据库。这部分纯纯的单线程执行,我记得一个高校,自动排课会排大概十几二十分钟就可以了

技术上的实现,纯手工写的业务逻辑,不涉及任何规则引擎、约束解释器。因为我们用 Oracle 的存储过程实现的(可能会被同事认出来
Tiller
1 天前
最后再说一句,我看你调研的产品都是面向中小学的。中小学应该没有大学的教务系统这么复杂。

我们系统的复杂度来源于要应对各种学校的不同的需求,拥有较多的约束规则。在日常使用中,学校更多是自动排课后,再手动排课进行调整。

也有可能是我们自动排课做的垃圾,约束规则都是针对手排,没有针对老师个人意愿加入更多约束条件。(例如有的老师不喜欢上早课、有的老师希望前三天上课之类的这种很主观的意愿)
beneo
1 天前
愿意付费么?
beneo
1 天前
如果做教育这块,学校希望有软件支撑学校自己的排课,然后兄弟你希望和学校完成共创之后,在支撑其他学校的排课。如果你是这个想法,你基本上可以放弃了。

所有排课需求不仅依赖于算法,更需要大量的服务支持。无论你的算法多么先进,都离不开人工的深度参与,而这种人工服务的成本往往不低,还大部分集中在八月份下。

以上你列举的所有厂商,还有科大讯飞的,都一样。自称新高考排课第一厂的晓羊都从排课转型
yy306525121
1 天前
@michaelliuyang 大佬的 python 代码已经贴出来了,java 的代码的话还需要吗
michaelliuyang
1 天前
@yy306525121 在您帖子最后看到了 python 的,Java 不需要了,我自己看看实现逻辑就行,多谢了
michaelliuyang
1 天前
@Tiller 其实现在新高考的每个学生选科,排起来是比较复杂的。小学基本没有强需求,中学其实 Excel 都能解决,主要还是高中,多谢回答,我自己在调研调研。
xxmaqzas
23 小时 27 分钟前
要不试试这个 https://timefold.ai/

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1084952

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX