是否有算法可以为整个学期创建大学时间表?

The*_*hea 6 algorithm timetable

我必须实现一个为大学生成时间表的算法.我搜索并发现了很多算法.但这是问题所在.我需要一种算法来生成整个学期的时间表,而不是每周一次.它还应该考虑课程部分的预定义顺序,例如练习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
Run Code Online (Sandbox Code Playgroud)

The*_*hea 0

我最终对这里建议的算法进行了修改。我使用迭代前向算法,然后对软约束应用模拟退火。我更改了时间段集,以便它包含该学期的整个时间段集,不包括周末和假期。例如,如果学期有 6 周,每周有 40 个小时,那么我的时隙集将包含全部 240 个时隙。

我还为订单添加了约束。当不满足此约束时,就会对当前解决方案给予较高的权重。通过这种方式,我可以防止算法选择课程不符合顺序的解决方案。