algorithm - 类(class)表组合的遗传算法

标签 algorithm optimization genetic

我正在编写一个自动大学类(class)表组合应用程序,并将其用于此遗传算法。但现在我在实现方面遇到了一些问题。

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

但我知道我想改进应用程序并允许上课时长为多个时隙。随之而来的是很多问题:

我们如何将一个类对象放入数组中并填充类必须占用的所有槽(多个数组单元格)(一个对象 - 多个单元格)? 而按照我们将如何放入数组中,如何进行变异和交叉操作呢? 提前致谢!非常感谢您的帮助!

最佳答案

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

要表示具有多个时隙持续时间的类,最简单但棘手的方法是为每个时隙设置一个标志,告诉您该时隙是被新类占用还是只是之前开始的类的延续.当你穿越时,你会看到那个标志,以确保你没有穿越部分类(class)。

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

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

关于algorithm - 类(class)表组合的遗传算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10126814/

相关文章:

arrays - 查找数组中的连续范围

optimization - Hyperopt 在执行期间设置超时并修改空间

C++ 遗传编程 : Invoking a linker/compiler, 执行编译程序和管道输入/输出

c - 对字符进行排序而不替换

javascript - 所需算法 : Predictable Randomized Tiles in Javascript

R - 根据位置将纬度/经度点的巨大数据帧分组

java - Java中的遗传算法分类器:基于规则的系统

python - Python 上的遗传编程 pyeasyGA 和 Zelle 图形

algorithm - 来自 3D 点集合的边界框

javascript - 在 AJAX 调用中同时返回 JSON 和 HTML