遗传算法在java中的应用

遗传算法在java中的应用,java,genetic-algorithm,Java,Genetic Algorithm,我正试图寻找一种使用遗传算法(GA)生成时间表的解决方案。 在我的场景中,我查看6天的时间表。星期一到星期六 每天分为讲座数量/时间段。(如果1小时,则每天最多讲座6次/每个时间段,这意味着每天6小时) 我试着代表一个由老师、学生小组(set)和讲座组成的班级。 我保留了一个可能的老师、可能的科目和可能的学生群体。 我随机把他们分配到这些班级 所以类是所有这些引用的集合。 因此,对于每个时隙,我们都有类对象表示。 同样地,一天的课数也是由课堂对象表示组成的。 以此类推,一周由6天组成 我有一组可

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

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

我试着代表一个由老师、学生小组(set)和讲座组成的班级。 我保留了一个可能的老师、可能的科目和可能的学生群体。 我随机把他们分配到这些班级

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

我有一组可能的约束条件:

1.一名教师在一个时间段内只能听课一次
2.教师可以选修一组科目(有限)
3.某一天老师可能不在
4.教师可能在某个时间段不可用

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

谁能告诉我如何表示这些约束或处理这些约束?如何根据约束条件计算健身分数


编辑:实现在这里

对于这个问题,没有有效的解决方案。我想你也是因为你使用了遗传算法。几个月前我自己写了一个遗传算法框架。
我想你错过了:每节课每周都有一个课程列表,一次只能上一节课。现在,您可以随机组合教师和班级的时间段。
在fitnes函数中,如果一个班一周要上所有的课,我会给它一个巨大的加分。如果老师们没有同样的工作量(例如,A老师每周上两节课,b老师12节课),那将是一个很大的负效应。如果一个老师一周只工作20小时,你可能会想到这一点(使用%)。
总而言之,这并不是一件小事,你可以找一位有经验的同事或导师来帮助你解决这个问题。

如果您需要更具体的建议,请指定您的问题。

更新:

可在此处找到代码

在生成时间表时,我使用了一个时间表对象。该对象包括教室对象和每个对象的时间表,以及时间表的适宜性分数。 适合度分数对应于时间表相对于不同课程的其他时间表的冲突次数

教室对象由周对象组成。周对象由天组成。天由时间段组成。时间段有一个讲座,其中一个主题、参加讲座的学生群体和教授该主题是相关联的

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

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

在每个约束类中,在两个时间表对象之间检查问题中指定的条件。 如果满足条件,即存在碰撞,则分数将增加1


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

你不是说5天(不是6天)…为什么这被否决了?你找到答案了吗?我找到了一个代码,但没有检查它是否有效,为了更详细地说明这一点,我会把代码放在网上,并附上我的方法!