3

我正在编写自动大学日程安排的应用程序并用于此遗传算法。但现在我在实现方面遇到了一些问题。

一开始我假设我们有持续时间为 1 个时隙(时隙 = 1 小时)的课程,我们可以简单地将其放入数组中(表示时间表网格:容量为 numberOfRooms*numberOfDays*numberOfTimeslots 的一维数组)和也可以毫无问题地执行突变和交叉。

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

我们如何将一个类对象放入一个数组中并填充类必须占用的所有槽(几个数组单元)(一个对象 - 几个单元)?并且按照我们将如何将其放入数组中,如何执行变异和交叉操作?提前致谢!我真的很感谢你的帮助!

4

1 回答 1

3

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

要表示具有多个时隙持续时间的类,最简单但棘手的方法是设置一个标志,该标志对于每个时隙会告诉您该时隙是被新类占用还是只是之前开始的类的延续。当你越过时,你会注意那面旗帜,以确保你没有穿过部分班级。

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

  • 房间的每日容量,以时段数表示;
  • 当天在该房间安排的课程(双链接)列表;
  • 计算列表中的类是否适合时隙的函数;
  • 一个允许跨越两个不同DailyRoomOccupations 的函数,只负责跨越相等数量的时隙。
于 2012-04-12T19:28:05.700 回答