遗传算法 - 更好的交叉/变异算法?

时间:2014-06-10 06:46:36

标签: algorithm genetic-algorithm

对于随机交叉边界和随机比特位置随机突变数的基本遗传算法实现,创造了许多次等儿童并留下了偶然发现的最佳解决方案。这浪费了大量的CPU,并且用户不知道何时找到最佳解决方案,因为它可能总是"下一个"。

是否存在一种能够持续获得更好孩子的算法,而不是将这个重要过程留给机会?

谢谢。

4 个答案:

答案 0 :(得分:2)

正如其他人所说,后代的质量取决于很多因素,并且经常需要使用已知的解决方案进行实验才能做到正确。

然而,决定孩子质量的最重要因素之一是父母染色体的选择。由于更强壮的父母更有可能创造出强壮的孩子,因此选择的类型起着重要作用。

最佳选择类型(更常见的类型是基于排名,轮盘赌和锦标赛选择)与遗传算法相关的大多数事情在很大程度上取决于问题,并且通常需要实验才能正确。

对于基本遗传算法是否有更好的交叉/变异算法,答案是,而不是真的。您可以尝试不同类型的交叉(1点,2点,n点)和突变(交换或替换)。每个的值也可以改变。还有很多东西你可以改变或添加到遗传算法以提高效率(诸如剔除,重复删除,允许最好的染色体进入下一代),但随后你的遗传算法将不再是基本的遗传算法。添加这些功能还意味着您可能需要进行更多实验才能获得所使用的功能及其参数。

答案 1 :(得分:1)

正如Michalewicz在他的书“如何解决它”中所述,没有现成的遗传算法。所以,问题的答案基本上就是@OnABauer所说的。

我只想完成他的回答,建议你研究一个模因算法(there is an interesting introduction here)。如果你添加一个局部优化运算符,很可能会改善后代(谨防局部陷阱)。

答案 2 :(得分:1)

对于旅行营业员等优化问题,您可以对解决方案进行编码,以便所有可能的交叉形成有效的解决方案。

例如,您可以将基因组视为城市列表中的转换列表,而不是将基因组视为城市列表(从而使每个基因组错过城市或重新访问城市无效),您可以将基因组视为城市列表中的转换列表,从一些(任意的)规范的城市列表开始。

假设我们有一个城市列表:

  1. 博卡拉顿
  2. 辛辛那提
  3. 丹佛
  4. 如果您将每对位视为其中一个城市的编码,则只有少量位模式对有效巡视进行编码。有效游览之间的变异和交叉很有可能导致另一次有效游览。

    如果您将每四位视为交换指令。现在任何位列表都有效。要确定正确的旅行,您可以从"官方"订购城市,并按顺序应用掉期清单。即使某些掉期是无操作,您也会以有效的旅行结束。

    我已经在一些优化问题中使用了这种方法并取得了良好的效果。

答案 3 :(得分:1)

本质上,遗传算法是一种搜索算法。 GA是一种特殊的启发式搜索。 您正试图探索您认为最有可能是最好的答案。 在GA中,您选择探索答案的基础是因为它与之前已知的好答案(父母)相似。 GA在传统上可以在探索所有可能的答案之前终止,我认为这是最让您担忧的方面。

如果您想要始终查看所有可能的答案,那么您正在考虑进行详尽搜索。例如,通过深度优先搜索所有可能的答案。

总之,GA是一种启发式搜索。 你选择它,如果:

  1. 详尽的搜索速度不够快。
  2. 您不关心最终结果是最佳(全局最佳)
  3. 根据探索到的答案,您了解如何猜测更好的答案。这取决于问题域。它决定了什么是突变和交叉算子。