Path 遗传算法.路径的交叉和变异算子

Path 遗传算法.路径的交叉和变异算子,path,genetic-algorithm,mutation,Path,Genetic Algorithm,Mutation,我想知道是否有人知道图中路径的直觉交叉和变异算子?谢谢 Emm。。这是一个非常困难的问题,人们为此写论文,但仍然没有正确的答案 一般规则是“一切取决于你的领域” 有一些通用GA库可以为您做一些工作,但为了获得最佳结果,建议您自己实现GA操作,特别是针对您的域 你可能会有更多的幸运的答案,但你需要扩大你的问题更多,并添加更多关于你的任务和领域的细节 更新: 所以你有一个图表。在GA术语中,通过图的路径代表一个个体,路径中的节点将是染色体。 在这种情况下,我会说变异可以表示为路径偏离原始路径的某个位

我想知道是否有人知道图中路径的直觉交叉和变异算子?谢谢

Emm。。这是一个非常困难的问题,人们为此写论文,但仍然没有正确的答案

一般规则是“一切取决于你的领域”

有一些通用GA库可以为您做一些工作,但为了获得最佳结果,建议您自己实现GA操作,特别是针对您的域

你可能会有更多的幸运的答案,但你需要扩大你的问题更多,并添加更多关于你的任务和领域的细节

更新: 所以你有一个图表。在GA术语中,通过图的路径代表一个个体,路径中的节点将是染色体。 在这种情况下,我会说变异可以表示为路径偏离原始路径的某个位置-其中一个节点被移动到某个位置,路径被调整,因此路径中的起始值和结束值保持不变

突变可能导致无效个体。在这种情况下,你需要做出一个决定:允许无效的,并希望它们会收敛到一些未经探索的解决方案。或者当场杀了他们。当我使用GA时,我确实允许使用无效的解决方案,在适合度的同时添加“不适合度”值。一些研究人员认为,这有助于广泛探索溶液空间

交叉只能发生在相互交叉的路径上:在交叉点上,将路径的剩余部分与父路径交换

请记住,交叉有多种方式:个人可以在多个点上交叉,也可以只在一个点上交叉。在图形的情况下,可以有多个交叉点,这自然会导致多个子图形


正如我之前所说,做这件事没有对错之分,但你只能通过实验来找出最好的方法。

这个问题有点老了,但这个问题似乎没有过时或解决,所以我认为我的研究可能对某些人还是有帮助的

至于TSP问题中的变异和交叉问题,在最短路径或最优路径的情况下,每个变异都是有效的(这是因为染色体代表访问固定节点的顺序-交换顺序总是可以产生有效的结果),其中染色体是精确的路径表示,这不适用,也不是很明显。下面是我如何用遗传算法解决最优路径的问题

对于交叉,有几个选项:

  • 对于至少有一个公共点(除了起点和终点节点)的路线,找到所有公共点并在交叉点处交换子线路

    家长1:
    5133417129160

    家长2:
    519332512431560

    潜在交叉点为3312。我们可以得到以下子项:
    519334712431560
    513325129160
    ,它们是使用这两个交叉点交叉的结果

  • 当两条路径没有公共点时,从每个父路径中随机选择两个点并连接它们(可以使用随机遍历、回溯或启发式搜索,如*或波束搜索)。现在,该路径可以被视为交叉路径。为了更好地理解,请参见下面两种交叉方法的图片:

    黑色和灰色路径为父路径,粉色和橙色路径为父路径 孩子们,绿点是交叉点,红点是起点 和结束节点。第一个图显示了第一种交叉,第二个图是另一个交叉的例子

  • 对于突变,也没有多少选择。通常,对于具有平均密度的图,虚拟变异(如节点交换顺序或添加随机节点)实际上是无效的。以下是保证有效突变的方法:

  • 从路径中随机选取两个点,并用这两个节点之间的随机路径替换它们

    染色体:
    51 33 41 7 12 91 60
    ,随机点:3312,随机/最短路径:
    33 29 71 12
    ,突变染色体:
    51 33 29 71 12 91 60

  • 从路径中找到随机点,将其移除并连接其邻居(与第一个非常相似)

  • 从路径中找到随机点,并找到到其邻居的随机路径

  • 尝试从某个随机选择的点开始对路径进行细分,直到到达初始路线上的任何点(对第一种方法的轻微修改)

    每个图以适当的顺序对应于每个变异方法。在最后一个示例中,橙色路径将替换突变点(绿色节点)之间的原始路径

  • <强>注:在这种情况下,该方法显然可能有性能缺陷,当找到替代的子路径(使用随机或启发式方法)将停留在某个地方或找到非常长且无用的子路径时,考虑考虑执行或试验次数的时间。 对于我的例子来说,这些方法是非常有效的,并且给出了一个很好的结果,即在最大化顶点和权重的同时保持节点和的权重小于给定的界限。如果您有任何问题,请随时提问。还有,对不起我的MS绘画技巧;)

    更新

    一个重要提示:我基本上在我的实现中使用了这种方法,但是使用随机路径生成有一个很大的缺点。我决定切换到使用最短路径遍历随机选取的点生成半随机路径-效率更高(但显然可能不适用于所有问题)。

    哦,我想找到