【问题标题】:How to mix genetic algorithm with some heuristic如何将遗传算法与一些启发式方法结合起来
【发布时间】:2012-04-27 12:44:19
【问题描述】:

我正在研究大学调度问题并为此使用简单的遗传算法。实际上它工作得很好,并将目标函数值从 0% 优化到 90%(大约)1 小时。但是随后该过程会急剧变慢,并且需要数天才能获得最佳解决方案。我看到很多论文认为将其他算法与基因混合是合理的。请你给我一些建议,告诉我什么算法可以与遗传算法混合,以及如何应用这种算法来加快求解过程。主要问题是如何将任何启发式方法应用于这种复杂结构的问题?我不知道如何在那里应用,例如贪婪启发式。

提前感谢大家!非常感谢您的帮助!


问题描述:

  1. 我有:

    • 由 ScheduleSlot 对象填充的数组
    • 由课程对象填充的数组
  2. 我愿意:

    • 标准两点交叉
    • 变异(将随机课程移动到随机位置)
    • 粗略选择(仅选择 n 个最佳个体进入下一个种群)

@Dougal@izomorphius 的其他信息:
我正在尝试制定一个大学时间表,该课程表在课程、重叠和针对团体和教授的地理分布课程之间没有中断。
适应度函数非常简单:适应度 = -1000*numberOfOverlaps - 1000*numberOfDistrebutedLessons - 20*numberOfBreaks。 (或类似的东西,我们可以简单地改变变量前面的系数)
在最开始时,我生成我的个人只是在随机的房间、时间和日期放置课程。
如上所述,变异和交叉,非常简单:

  1. Crossover - 带到父 schedule,随机选择交叉的点和范围,只交换父 schedule 的部分,生成两个子 schedule。
  2. 突变 - 采用子计划并将 n 个随机课程移动到随机位置。

【问题讨论】:

  • 这不是我以前做过的事情,也不知道是否是标准的,但你可以考虑运行 GA 一段时间,让一个体质良好的人群,然后使用这些点作为波束搜索的起点或使用标准本地搜索技术的东西。
  • 我已经成功地将遗传算法与动态规划、神经网络甚至一些数据挖掘算法相结合。但是如果不知道更多关于你尝试做什么、你的拟合函数是什么、你如何创造个体以及你如何变异的信息,我认为我无法就如何将这些应用于你的问题给你任何建议。
  • @izomorphius,请在更正的主题中找到更多信息,提前感谢您的帮助
  • @Dougal,请在更正的主题中找到更多信息,提前感谢您的帮助
  • 如果在 X 次迭代后适应度未能提高,您可以尝试添加模拟退火(可能尊重前 N 个个体):增加热量,然后进行调整。

标签: algorithm scheduling heuristics hybrid genetic


【解决方案1】:

我的初步观察:您选择了numberOfOverlapsnumberOfDistrebutedLessonsnumberOfBreaks 前面的系数有点随机。我的经验表明,通常这些选择都不是最好的,你最好让计算机来选择它们。我建议编写第二种算法来选择它们——可以是神经网络、第二种遗传算法或爬山算法。这个想法是 - 计算一段时间后你得到的结果有多好,并尝试优化这 3 个值的选择。

另一个想法:在得到结果后,你可以尝试暴力优化它。我的意思是以下 - 如果您遇到最初的问题,“愚蠢”的解决方案将是检查所有可能性的回溯,这通常使用dfs 完成。现在这会很慢,但您可以尝试使用depth first search with iterative deepening 或仅使用深度受限的 DFS。

【讨论】:

  • 完全同意。把头撞到墙上是学不到东西的。以及 GA 无法学习正负适应度函数项之间差异如此之大的规则。
  • @0x69,我不确定是否有必要找到系数。我们自己设置它们只是试图强调哪些标准对我们来说更重要,哪些不重要。无论如何,我会尝试暴力破解我将从 GA 获得的最佳解决方案。希望能带来好的结果。谢谢大家,我会提供一些关于结果的信息。
  • @izomorphius,好吧,我写了一个蛮力优化器,它在 GA 之后工作,而且我认为,最困难的问题是同时消除小组和教授的课程之间的差距,它有效很慢。我真的认为,混合 GA 可以更有效率。
【解决方案2】:

对于很多问题,我发现 Lamarckian 风格的 GA 效果很好,将局部搜索结合到 GA 算法中。

对于您的情况,我会尝试引入部分系统搜索作为本地搜索。有两种明显的方法可以做到这一点,您可能应该同时尝试。

  1. 与本地搜索迭代交替的 GA 迭代。例如,对于您的本地搜索,您可以暴力破解一天内分配的所有课程,同时保持其他所有内容不变。另一种可能性是将随机选择的课程移动到所有空闲位置以找到最佳选择。关键是尽量减少暴力搜索的成本,同时仍然有机会找到局部改进。

  2. 在执行本地搜索的突变和交叉旁边添加一个新运算符。 (您可能会发现变异算子在混合方案中用处不大,因此仅替换它可能是可行的。)

本质上,您会将 GA 的全局探索与高效的本地搜索相结合。一些 GA 框架包含有助于这种组合的功能。例如,GAUL 实现了上述替代方案 1,在每次迭代时使用完整种群或仅使用新后代。

【讨论】:

    猜你喜欢
    • 2020-03-26
    • 1970-01-01
    • 2022-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-07
    • 2011-03-15
    • 2012-07-07
    相关资源
    最近更新 更多