想写一个排课功能,请教大佬们

29 天前
 yy306525121

因为媳妇高中需要排课,享用程序给她写一个, 之前试了 timefold ,写出来之后由于规模太大, 两三个老师还能拍出来,数量一多之后连着跑了一两天也没跑出来,想问一下,除了 timefold 这种问题求解器之外, 还有什么简单的方法做这种排课程序,遗传算法是不是最简单的方式?

7790 次点击
所在节点    程序员
135 条回复
wangxin3
28 天前
OptaPlanner 官方有排课的 demo 吧,看看能不能满足你需求
https://www.optaplanner.org/docs/optaplanner/latest/quickstart/spring-boot/spring-boot-quickstart.html
chniccs
28 天前
看了一下,好多人的老婆是老师呀。
yy306525121
28 天前
@wangxin3 这个看过了, 数据比较大的话计算时间太长了
yy306525121
28 天前
@chniccs 哈哈, 老师多好呀
luxurine
28 天前
https://github.com/SJTU-Plus/course-plus
不知这个是否可以直接用
juventusryp
27 天前
最近也在写一个机房的排课软件,主要就是把需要某门课安排到有这个软件的机房中,然后尽量连着上课,看着简单,写起来头都是大的,借助 AI 磕磕碰碰写的也算能用,蹲个坑看看有没有大佬有更好的解法
yy306525121
27 天前
@juventusryp 用什么算法实现的啊
Sawyerhou
27 天前
看了下 stackflow ,确实有难度。

你这个排课有点像拼魔方,约束条件之间互相干涉。

参考魔方万能公式的思路呢?
将一个格子归位的同时,必须保证其他格子不动。

换到你这里,
解决当前冲突的同时,不能产生新的已经解决过的冲突
直到冲突全部解决。

当然,这种贪心算法说起来容易,能不能写出来就两说 : P
yy306525121
27 天前
感谢 @Firw 大佬,程序已经写出来了,速度还很快, 使用的是 or-tools 的 cp-sat (具体我不太懂,也刚开始学习), 目前还有一些约束正在和大佬确认中, 已经确认程序可行, 有想要的伙伴们,等所有约束都确认完之后会放到下面的评论中的
yy306525121
27 天前
代码地址: https://raw.githubusercontent.com/yy306525121/school_scheduling/main/plan3.py , 有感兴趣的大佬们可以去看一下
wangxin3
20 天前
基于 op 的数据和约束,用 OptaPlanner 做了一个 Java 版本,有兴趣的朋友可以看看😁
https://github.com/WangXin3/school_scheduling/
yy306525121
18 天前
@wangxin3 好的大佬有空我试试
lifeOsDeveloper
17 天前
@wangxin3 用你的代码测试了一下,2min 只能跑到 best score (90hard/18soft), 这种一般要跑多久啊,最终能跑到 0hard 吗
yy306525121
17 天前
@tywtyw2002
@lifeOsDeveloper 这种和我之前用的 timefold 一样,问题规模小的话可以跑,问题规模一大无解,不知道上高性能计算机能不能跑出来,我之前 hard 跑了一夜还是 18 ,想跑到 0 很难
wangxin3
17 天前
@lifeOsDeveloper 是这样的。90hard 是我给加分了,90 来源是因为 1 、2 、6 节必须有课,所以每天每个班需要加三分,一周一个班需要加 18 分,测试数据五个班是加了 90 分,所以在硬约束来说是最优解了。我现在代码有点乱,有加分、有减分。。。

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

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

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

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

© 2021 V2EX