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

Is there an algorithm that creates of university timetable for the whole semester?

我必须实现一个为大学生成时间表的算法。我搜索了很多算法。但问题是。我需要一个算法来生成整个学期的时间表,而不是每周的时间表。还应考虑课程各部分的预定顺序,例如练习1应在第2课之后和第3课之前进行。你有什么建议吗?

谢谢。

更新:我有以下严格限制:h1:在任何时段,每个房间只分配一个课程部分。H2:该房间可容纳所有参加活动的学生,并满足活动所需的所有功能。H3:没有学生同时参加一门课程(至少是必修课程)H4:没有老师同时教授一个以上的课程部分。

软约束包括:S1:课程部分不应分配给讲师不方便的时段。S2:一个老师的班级之间应该有最少的差距。S3:学生上课之间应该有最少的间隔。S4:课堂应满足讲师的偏好-天和时隙。S5:课程部分应安排预定义订单。

例子:"软件架构"课程

1
2
3
4
5
6
7
8
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


您可能需要研究间隔调度。听起来您需要一个修改过的版本,它添加了一些约束,比如允许将练习放在哪里。贪婪算法通常是相当容易修改的,而且有一大堆已经修改过的基本IS算法版本。


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

详细研究遗传算法,然后使用你的约束设计一个流程图来解决你的问题,考虑到你所提到的所有约束。


最后我得到了这里建议的一种改进算法。采用迭代正演算法,然后对软约束进行模拟退火。我改变了时间段设置,这样它就包含了整个学期的时间段,没有周末和假期。例如,如果这个学期有6周,每周我有40个小时,那么我的时间段集合将包含整个240个时间段。

我还为订单添加了一个约束。如果不满足此约束,则会对当前解决方案施加很高的权重。这样,我就避免了算法选择一个课程不符合with顺序的解决方案。


IIRC这样的问题不是完全可以用算法解决的。