问题:
我有一个数据框,其中包含一组带有纬度和经度信息的点。我们需要从 A 开始,遍历其他每个节点一次,并在任意点结束。目标是最小化总的半正矢距离。
df <- data.frame("name" = c("A", "B", "C", "D", "E"),
"lon" = c(-73.001, 23.231, 1.23, 115.40, -87.98),
"lat" = c(40.21, 32.78, -34.30, 21.92, -12.2))
如果点数很大,则生成所有排列将不起作用。我尝试使用 iGraph 包但不明白如何解决这个问题。使用 distm (gepsphere),我可以获得所有距离矩阵,但我不知道如何继续。
请帮助我弄清楚如何做到这一点。我正在寻找 R 中的解决方案。
正如@42 已经指出的,这似乎是一个旅行商问题。所以你可以尝试
library(TSP)
library(geosphere)
d <- distm(as.matrix(df[, -1]))
tour <- solve_TSP(TSP(d, labels=df$name),
method="nearest_insertion",
control=list(start=1L))
labels(tour)
# [1] "A" "D" "B" "C" "E"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)