首页 文章

如何改进TSP的遗传算法?

提问于
浏览
0

这是我的遗传算法,一步一步:

  • 随机生成两个初始种群,并从两者中选择最适合的游览 .

  • 执行有序交叉,按顺序选择第一个适合游览的随机部分并从第二个填充其余部分 .

  • 通过随机交换两个城市来改变这个旅游,如果旅行的次数只是初始人口中前10%的旅行的1.3倍(我实际上只是通过归纳完成,挑选出来的穷人旅行) - 我会喜欢要改变这一点,却想不出更好的方法 .

  • 突变选自几个突变的群体 .

  • 返回生成的游览 .

然而,突变几乎总是更糟,如果不是与交叉相同 .

我非常感谢一些帮助 . 谢谢!

1 回答

  • 0

    GA的一个问题是缩小您的搜索空间太快并达到局部最大值解决方案 . 除了选择/适应功能之外,您需要确保不以任何方式引导您的解决方案 . 所以,当你说,

    为什么你会采取一个好的解决方案,然后执行一个很可能使它成为一个更糟糕的解决方案的功能

    原因是你希望解决方案有机会退一步,它可能需要在它变好之前变得更糟 . 所以你应该从遗传算法中删除任何判断逻辑,将其留给选择过程 .

    此外,交叉和变异应被视为生成儿童个体的两种不同方式,您应该使用其中一种 . 在实践中,这意味着您有机会执行单个父母的突变或2个父母之间的交叉 . 通常突变几率仅为5%,交叉用于产生另外95% .

    交叉保持父母双方的遗传信息(儿童是镜像),因此一个孩子将比父母更差,另一个孩子更好(或两者都相同) . 所以在这种意义上,交叉,如果有变化,你将永远得到一个更好的个体 .

    另一方面,突变不能保证更好的个体,但它的存在是为了引入新数据,有助于将GA从局部最大值方案中移除 . 如果突变无法改善个体并使其变得更糟,那么无论如何它被选择为养育孩子的机会较少(即你在变异算子本身中不需要这种逻辑) .

    你选择最好的变异

    这不是严格意义上的,好的人应该有更高的选择机会 . 在这里有一个微妙的区别,BAD个人也可能被选为父母 . 同样,这有助于降低达到局部最大值解决方案的机会 . 这也意味着一代人中最好的个体可能(并且经常会)实际上变得更糟 . 为了解决这个问题,我们通常会实施“精英主义”,即最好的个人总是被复制到下一代(在没有操作的情况下) .

    如果我可以评论您正在使用哪些遗传算子也将是有益的 . 我发现循环交叉和反转突变在我的经验中运作良好 .

相关问题