【问题标题】:Time table Generation using Genetic Algorithms in java在java中使用遗传算法生成时间表
【发布时间】:2012-05-09 08:23:47
【问题描述】:

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

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

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

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

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

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

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

谁能告诉我如何表示这些约束或处理这些约束?以及如何根据约束计算适应度分数?

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

【问题讨论】:

标签: java genetic-algorithm


【解决方案1】:

更新:

代码可以在这里找到

github.com/shridattz/dynamicTimeTable

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

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

这样我将时间表表示为一条染色体。

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

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

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

【讨论】:

  • 为了更详细地说明这个问题,我把代码放在网上以及我的做法!
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-08
    • 2015-02-16
    • 1970-01-01
    • 2011-08-09
    • 2011-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多