0

我正在尝试使用遗传算法(GA)寻找时间表生成的解决方案。在我的场景中,我查看了 6 天的时间表。周一到周六。

每天分为讲座数/时间段。(每天最多6次讲座/每个时间段如果1小时,这意味着一天6小时)

我试图代表一个由教师、学生组(组)和讲座组成的班级。我维护着一个可能的教师、可能的科目和可能的学生群体。我随机将它们分配给这些类。

所以一个类是所有这些引用的集合。所以对于每个时隙,我们都有 Class 对象表示。同样,一天是由讲座的数量组成的类对象表示。以此类推,一周由 6 天组成。

我拥有的一组可能的约束是:

1.一位老师在一个时间段内只能上一
节课 2.一位老师可以上一组科目(有限)
3.一位老师可以在某一天不上课
4.一位老师可以在某个时段不上课

以及最近可能包含的其他限制。

谁能给我一个关于如何表示这些约束或处理这些约束的想法?以及如何根据约束计算适应度分数?

编辑:实现在这里 https://github.com/shridattz/dynamicTimeTable

4

2 回答 2

3

更新:

代码可以在这里找到

github.com/shridattz/dynamicTimeTable

在我的时间表生成中,我使用了时间表对象。该对象由 ClassRoom 对象和每个它们的时间表时间表以及时间表的适合度分数组成。适合度分数对应于时间表相对于各种课程的其他时间表的冲突次数。

ClassRoom 对象由周对象组成。周对象由天组成。Days 由时隙组成。TimeSlot 有一个讲座,其中一个科目、参加讲座的学生群体和教授该科目的教授相关联

通过这种方式,我将时间表表示为一条染色体。

在进一步讨论约束时,我使用了复合设计模式,它可以很好地扩展以添加或删除尽可能多的约束。

在每个约束类中,我的问题中指定的条件在两个时间表对象之间进行检查。如果满足条件,即存在冲突,则分数加一。

这样,分数最低的时间表就是我们能得到的最好的时间表。

于 2012-05-26T04:30:21.583 回答
-1

对于这个问题,没有有效的解决方案。我想你也明白了,因为你使用了遗传算法。一个月前,我自己编写了一个遗传算法框架。
我想你错过了:每节课都有每周的课程清单,一次只能上一节课。现在,您可以随机组合时间段的教师和班级。
在 fitnes 功能中,如果一堂课一周内有所有课程要做,我会加分不少。如果教师没有类似的负荷(例如,a 老师每周有两节课,b 老师 12 节课),则将是一个很大的减号。如果老师每周只需要工作 20 小时(使用 %),您可能会对此有所了解。
总而言之,这并非微不足道,您可能会寻找有经验的同事或导师来帮助您解决这个问题。
如果您需要更具体的建议,请说明您的问题。

于 2012-05-09T10:01:58.327 回答