最近在调研排课系统,有熟悉的大佬帮忙解答解答 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
michaelliuyang
V2EX    程序员

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

  •  
  •   michaelliuyang
    michaelliuyang 2024-10-30 15:07:29 +08:00 3312 次点击
    这是一个创建于 391 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

    19 条回复    2024-11-29 00:12:03 +08:00
    joyypjh
        1
    joyypjh  
       2024-10-30 15:15:28 +08:00
    要这么复杂吗?我怎么感觉就是堆业务逻辑
    mixuxin
        2
    mixuxin  
       2024-10-30 15:15:42 +08:00
    看下这个帖子:
    t/1066877
    [确实有难度]
    michaelliuyang
        3
    michaelliuyang  
    OP
       2024-10-30 15:18:50 +08:00
    @mixuxin 多谢,我看看
    yy306525121
        4
    yy306525121  
       2024-10-30 16:03:52 +08:00
    之前我问过,可以去翻我的帖子,最后论坛的一个大佬用 ortools 帮我写出来了,我现在基本都是用 ortools 写的排课,OptaPlanner 这玩意规模只要一上去速度很慢
    xuanbg
        5
    xuanbg  
       2024-10-30 16:27:43 +08:00
    排课有技巧的,硬来肯定很复杂也很慢。科大讯飞的做的不错,OP 可以参考一下。
    michaelliuyang
        6
    michaelliuyang  
    OP
       2024-10-30 17:18:55 +08:00
    @yy306525121 有代码可以分享的不,学习学习
    xhawk
        7
    xhawk  
       2024-10-30 19:30:37 +08:00
    可以参考一下 简课网
    lifanxi
        8
    lifanxi  
       2024-10-30 20:29:53 +08:00
    我 30 多年前上初中时想过能不能写个程序来实现自动排课,想了想发现很复杂搞不定,后来就没有再想过了。
    democrazyx
        9
    democrazyx  
       2024-10-30 21:05:39 +08:00
    数学规划问题的话,可以试试 COPT 求解器,个人可以无限期免费试用
    Tiller
        10
    Tiller  
       2024-10-30 21:49:37 +08:00
    真行业相关了

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    以上你列举的所有厂商,还有科大讯飞的,都一样。自称新高考排课第一厂的晓羊都从排课转型
    yy306525121
        15
    yy306525121  
       2024-10-31 08:09:45 +08:00 via iPhone
    @michaelliuyang 大佬的 python 代码已经贴出来了,java 的代码的话还需要吗
    michaelliuyang
        16
    michaelliuyang  
    OP
       2024-10-31 11:19:21 +08:00
    @yy306525121 在您帖子最后看到了 python 的,Java 不需要了,我自己看看实现逻辑就行,多谢了
    michaelliuyang
        17
    michaelliuyang  
    OP
       2024-10-31 11:23:06 +08:00
    @Tiller 其实现在新高考的每个学生选科,排起来是比较复杂的。小学基本没有强需求,中学其实 Excel 都能解决,主要还是高中,多谢回答,我自己在调研调研。
    xxmaqzas
        18
    xxmaqzas  
       2024-10-31 12:17:24 +08:00
    要不试试这个 https://timefold.ai/
    d5d
        19
    d5d  
       361 天前
    @michaelliuyang 现在选课走班要是大走班的课表,一人一个课表。基本新高考的高中学校都需要外部公司的支持。
    不然这个课排不出来。现在公司都收费贵,现在这个经济形势就有点矛盾。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2855 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 14:11 PVG 22:11 LAX 06:11 JFK 09:11
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86