C++ 遗传算法交叉产生更坏的结果

C++ 遗传算法交叉产生更坏的结果,c++,algorithm,graph-algorithm,genetic-algorithm,traveling-salesman,C++,Algorithm,Graph Algorithm,Genetic Algorithm,Traveling Salesman,目前采用的算法,是一种采用遗传算法、变异和有序交叉的算法。我们修改了原有的有序交叉算法,删除仓库端点,然后执行交叉,并在之后添加它们。父选择算法使用带有 goodness=1/时间到旅行路线 在没有交叉的情况下,该算法仅使用变异就可以产生良好的结果,但添加变异会显著恶化结果。下面是一个链接,指向一篇有类似问题的帖子: 根据帖子中给出的建议,善良变成了善良 goodness=1/时间\u到\u旅行\u路线^n随n变化 然而,这仍然没有产生有利的结果 人口规模:从100人到10000人 停止条件:从

目前采用的算法,是一种采用遗传算法、变异和有序交叉的算法。我们修改了原有的有序交叉算法,删除仓库端点,然后执行交叉,并在之后添加它们。父选择算法使用带有

goodness=1/时间到旅行路线

在没有交叉的情况下,该算法仅使用变异就可以产生良好的结果,但添加变异会显著恶化结果。下面是一个链接,指向一篇有类似问题的帖子:

根据帖子中给出的建议,善良变成了善良

goodness=1/时间\u到\u旅行\u路线^n随n变化

然而,这仍然没有产生有利的结果

人口规模:从100人到10000人 停止条件:从10代尝试到1000代 适应度算法:尝试1/次旅行路线^n,n从1变为大数


变异算法:该算法使用2-opt。所有的后代都是变异的。变异算法尝试不同的变异,直到找到更好的解决方案。然而,如果它找到一个更差的解决方案,它可能只返回概率为p的更差总体。这样做是为了增加一些随机性和逃避局部极小值。我们的p值从5%到20%不等。

为什么你认为遗传算法会给你带来好的结果?@DouglasZare我找到了多篇建议使用遗传算法的论文。遗传算法通常是我在网上发现的TSP问题的启发式算法。你确定你的交叉确实发生了正确的事情,并且你没有因为一些错误而破坏你的染色体吗?你有没有尝试过各种交叉方法,即每个父母一半,多个父母,等等?@Steve我们没有尝试过不同类型的交叉算法,因为经过研究,我们发现有序交叉算法是最好的算法之一。我们已经测试了电流输出,并且确信它目前正在做它应该做的事情。@algoBaller:听到这个消息我很惊讶。我认为遗传算法的性能会非常差。研究TSP问题的人是否认为遗传算法有效,或者研究遗传算法的人是否认为TSP是使用遗传算法的好地方?这些是非常不同的。