这是我的遗传算法,一步一步:
随机生成两个初始种群,并从两者中选择最适合的游览。
执行有序交叉,按顺序选择第一个适合游览的随机部分并从第二个填充其余部分。
通过随机交换两个城市来改变这次旅游,如果旅行的次数只是初始人口中前10%旅游的1.3倍(我实际上只是通过归纳完成,挑选出来的差旅) - 我想改变这一点,但想不出更好的方法。
返回生成的游览。
我非常感谢一些帮助。谢谢!
答案 0 :(得分:0)
GA的一个问题是缩小您的搜索空间太快并达到局部最大值解决方案。除了选择/适应性功能之外,您需要确保不以任何方式引导您的解决方案。所以,当你说,
为什么你会采取一个好的解决方案呢? 执行一项最有可能使其成为更糟糕解决方案的功能
,原因是你有机会让解决方案退后一步,它可能需要在它变好之前变得更糟。所以你应该从遗传算法中删除任何判断逻辑,将其留给选择过程。
此外,交叉和变异应被视为生成儿童个体的两种不同方式,您应该使用其中一种。在实践中,这意味着您有可能执行单个父母的突变或2个父母之间的交叉。通常突变几率仅为5%,交叉用于产生另外95%。
交叉保持父母双方的遗传信息(儿童是镜像),因此一个孩子将比父母更差,另一个孩子更好(或两者都相同)。所以在这种意义上,交叉,如果有变化,你将永远得到一个更好的个人。
另一方面,突变不能保证更好的个体,但它的存在是为了引入新数据,有助于将GA从局部最大值方案中移除。如果突变无法改善个体并使其变得更糟,那么无论如何它被选择为养育孩子的机会较少(即你在变异算子本身中不需要这种逻辑)。你选择最好的一个变异
这并非严格意义上说,好的人应该有更高的选择机会。在这里有一个微妙的区别,也可以为父母选择BAD个体。同样,这有助于降低达到局部最大值解决方案的机会。这也意味着一代人中最好的个体可能(并且经常会)实际上变得更糟。为了解决这个问题,我们通常会实施“精英主义”,即最好的个人总是被复制到下一代(当时正在/不进行任何操作)。
如果我能评论您正在使用哪种遗传算法,那也是有益的。我发现循环交叉和反转变异在我的经验中运作良好。