课程表组成的遗传算法

时间:2012-04-12 15:30:04

标签: algorithm optimization genetic

我正在编写一个自动大学时间表组合的应用程序,并用于此遗传算法。但现在我遇到了一些实现问题。

一开始我假设我们有持续时间为1个时隙(时隙= 1小时)的类,我们可以简单地将其放入数组中(表示调度网格:1-d数组,容量为numberOfRooms * numberOfDays * numberOfTimeslots)并且可以执行变异和交叉,没有任何问题。

但是我知道我想改进应用程序并允许持有几个时隙的类。这里出现了很多问题:

我们怎样才能将一个类对象放入一个数组中并填充哪个类必须占用的所有插槽(几个数组单元格)(一个对象 - 几个单元格)? 并且根据我们将它放入阵列的方式,如何执行变异和交叉操作? 提前致谢!我真的很感谢你的帮助!

1 个答案:

答案 0 :(得分:3)

一个好的规则可能只是跨越具有相同时隙的类。例如,您可以跨越一个带有两个时隙的类,这两个时隙占用一个时隙。

要表示具有多个时隙持续时间的类,最简单但最棘手的方法是使用一个标志,每个时隙将告诉您时间段是由新类占用还是仅仅是之前启动的类的延续。当你越过时,你会看到那面旗帜,以确保你没有穿越部分班级。

另一种(更好的)方法是创建更复杂的数据结构:DailyRoomOccupation。该数据结构将包含:

  • 房间的每日容量,以时段数表示;
  • 该会议室当天安排的(双重链接)课程列表;
  • 一个函数,用于计算列表中的类是否适合时隙;
  • 一个允许跨越两个不同DailyRoomOccupation s的函数,负责跨越相同数量的时隙。