- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我已经实现了一种遗传算法来解决旅行商问题 (TSP)。当我只使用突变时,我找到了比添加交叉时更好的解决方案。我知道普通的交叉方法对 TSP 不起作用,所以我同时实现了 Ordered Crossover和 PMX Crossover方法,并且都遭受不良结果。
这是我使用的其他参数:
突变:单交换突变或反转子序列突变 (as described by Tiendil here),突变率测试在 1% 到 25% 之间。
选择:轮盘赌选择
适应度函数:1/游览距离
种群大小:测试了100、200、500,我也跑了5次GA,这样我就有了各种不同的起始种群。
停止条件:2500代
对于相同的 26 个点的数据集,我通常使用具有高突变率的纯突变得到大约 500-600 距离的结果。添加交叉时,我的结果通常在 800 距离范围内。另一个令人困惑的事情是,我还实现了一个非常简单的爬山算法来解决问题,当我运行 1000 次(比运行 GA 5 次更快)时,我得到的结果大约是 410-450 距离,我希望使用 GA 获得更好的结果。
关于添加交叉时为什么我的 GA 表现更差的任何想法?为什么它的性能比简单的 Hill-Climb 算法差得多,后者应该卡在局部最大值上,因为一旦找到局部最大值就无法探索?
最佳答案
看起来您的交叉运算符在新一代中引入了太多随机性,因此您在尝试改进不良解决方案时正在浪费计算精力。想象一下,爬山算法可以将给定的解决方案改进到其邻域的最佳解决方案,但您的遗传算法只能对几乎随机的种群(解决方案)进行有限的改进。
还值得一提的是,GA 并不是解决 TSP 的最佳工具。无论如何,您应该看看如何实现它的一些示例。例如http://www.lalena.com/AI/Tsp/
关于algorithm - 为什么将交叉添加到我的遗传算法中会给我带来更差的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2439391/
当我为我的项目运行“mvn dependency:tree”时,它显示如下: [INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ x
我调用 ajax 的脚本 function search_func(value) { $.ajax({ type: "GET", url: "sample.php
我正在使用 SIM 安装 Sitecore 8.1,但在打开启动板时,由于 ajax 请求返回 HTTP 500 错误,出现了几个 Javascript 错误。查看开发人员工具会显示以下消息: htt
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我有一张 table : +-----------+-------------+------+-----+---------+-------+| Field | Type | N
所以,我对这个阵列很生气,第 2 天让我感到疼痛 *.... 我正在开发面向对象的 PHP 脚本。 我得到一个数组: Array ( [0] => Project Object ( [project_
我正在尝试将我的一个 Rails 项目升级到 Ruby 1.9.2。一切进展顺利,但一个 RSpec 测试失败了。在这个测试中,我需要一个Ruby lib: # file spec/models/my
我可以使用 Maven 的插件 spring-boot:run 运行 Spring Boot,但是当我尝试执行打包的 jar 时,它给出: Error creating bean with name
我是一名优秀的程序员,十分优秀!