V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
michaelliuyang
V2EX  ›  程序员

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

  •  
  •   michaelliuyang ·
    michaelliuyang · 5 天前 · 1598 次点击

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    以上你列举的所有厂商,还有科大讯飞的,都一样。自称新高考排课第一厂的晓羊都从排课转型
    yy306525121
        15
    yy306525121  
       5 天前 via iPhone
    @michaelliuyang 大佬的 python 代码已经贴出来了,java 的代码的话还需要吗
    michaelliuyang
        16
    michaelliuyang  
    OP
       5 天前
    @yy306525121 在您帖子最后看到了 python 的,Java 不需要了,我自己看看实现逻辑就行,多谢了
    michaelliuyang
        17
    michaelliuyang  
    OP
       5 天前
    @Tiller 其实现在新高考的每个学生选科,排起来是比较复杂的。小学基本没有强需求,中学其实 Excel 都能解决,主要还是高中,多谢回答,我自己在调研调研。
    xxmaqzas
        18
    xxmaqzas  
       5 天前
    要不试试这个 https://timefold.ai/
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5590 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 06:45 · PVG 14:45 · LAX 22:45 · JFK 01:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.