使用 Android 应用程序使用模拟退火的最短路径

Shortest path using Simulated Annealing using an Android app

我正在使用不同的地理坐标实现一个 android 应用程序,我需要解决类似于旅行推销员的问题。

我在 http://www.theprojectspot.com/tutorial-post/simulated-annealing-algorithm-for-beginners/6 找到了该算法的实现。

我根据需要调整了代码,它产生了理论上最优的结果。但是,我注意到每次执行都会产生不同类型的结果。

我回到原来的代码,发现即使是原来的,结果也有分歧。

不明白。结果不应该是唯一的吗?毕竟,我们正在寻找最小的路径......也许是一些小的变化,但每次执行都与前一次执行相差几个单位。

如何调整算法以在所有运行中产生相同的结果?有人用过这个吗?

这就是您为这种算法付出的代价:每次获得的结果很可能都不同。算法 不会 "find the shortest path," 这是一个计算上棘手的问题 ("travelling salesman")。相反,它试图 快速 找到一个解决方案 "short enough." 它是否真的这样做在很大程度上取决于数据......而且,在一个重要的程度上, 随机。

而且,由于算法 相对较快,有时您会连续 运行 多次执行该算法,以衡量所获得解决方案的可变性。如果(比方说)三个 运行 各自产生彼此 "close enough" 的结果,那么结果很可能是可靠的。但如果标准差很大,算法可能不会给你一个好的答案。 (请记住,有时解决方案会 错误。)

可以这么说:"you get what you pay for, but you don't pay much for it, and of course that is the point."