有没有一种算法可以为整个学期创建大学课程表?

6
我需要实现一个算法,用于为大学生成课程表。我已经搜索并找到了很多算法。但是问题在于,我需要一个可以在整个学期内生成时间表的算法,而不是每周一次。它还应该考虑课程部分的预定义顺序,例如,练习1应该在第2节讲座之后和第3节讲座之前。你有什么建议吗?
谢谢。
更新: 我有以下硬约束条件: H1:每个时间段只分配一个课程部分到一个房间。 H2:房间可以容纳所有参加活动的学生,并满足所需的所有特性。 H3:没有学生同时参加多门课程(至少是必修课程)。 H4:没有老师同时教授多个课程部分。
软约束条件包括: S1:课程部分不应分配给对讲师不方便的时间段。 S2:同一老师的课之间应该有最少的空闲时间。 S3:学生的课之间应该有最少的空闲时间。 S4:课程应满足讲师的偏好 - 天数和时间段。 S5:课程部分应按预定义顺序安排。
例如: 课程“软件架构”
Week No   Course    Room    Course Part   Day       Time
--------+---------+-------+--------------+----------+-----
Week 1:   SA        435     Lecture 1     Wednesday  8.15-11
Week 2:   SA        435     Lecture 2     Wednesday  8.15-11
Week 3:   SA        47      Lab 1         Monday     13-15
Week 3:   SA        436     Lecture 3     Wednesday  11-14
Week 4:   SA        243     Exercise 1    Monday     13-15
Week 5:   SA        436     Lecture 4     Wednesday  8.15-11

嗨。我已经添加了约束条件和一个示例。 - Thea
兄弟,每次到了选课的时候,我都希望有一个程序/脚本可以替我完成这个任务。 - Dominic Bou-Samra
4个回答

1
你可能想要了解一下区间调度。听起来你需要一个修改过的版本,加入一些约束条件,比如允许放置练习的位置。贪婪算法通常很容易修改,而且已经有很多基本IS算法的修改版本了。

0

我最终使用了一个修改过的算法,该算法基于这里提出的算法。我使用了迭代前向算法,然后针对软约束应用了模拟退火算法。我更改了时间段集合,使其包含整个学期的时间段,但不包括周末和假期。例如,如果学期为6周,每周有40小时,则我的时间段集合将包含整个240个时间段。

我还添加了一个顺序约束。当此约束未满足时,它会为当前解决方案设置高权重。通过这种方式,我防止算法选择具有无序课程的解决方案。


0

我正在开发类似的项目,并使用改进遗传算法来解决手头的问题。

详细研究遗传算法,然后根据您的约束条件设计一个流程图来解决问题,考虑到您提到的所有限制条件。


-1

据我所知,这样的问题并不能完全通过算法解决。


2
无论如何,您都可以进行全面搜索。 - Thomas Ahle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接