【发布时间】:2022-02-12 11:53:10
【问题描述】:
我发现这个链接告诉你如何用随机数制作一个矩阵:https://www.tutorialspoint.com/how-to-create-a-matrix-with-random-values-in-r
#random symmetric matrix with diagnoal elements as 0
A <- matrix(runif(16), 4, 4)
A1 = A %*% t(A)
out_1 = A1 - diag(diag(A1))
[,1] [,2] [,3] [,4]
[1,] 0.00 20371.54 19136.91 18380.49
[2,] 20371.54 0.00 19392.13 19476.78
[3,] 19136.91 19392.13 0.00 16651.73
[4,] 18380.49 19476.78 16651.73 0.00
-
假设每个索引对应于这个矩阵 (out_1) 中的一个城市 - 有 4 个城市。
-
任意(行、列)组合对应两个城市之间的距离(例如[2][3]对应城市2和城市3的距离)。
-
从逻辑上讲,相同的两个城市之间的距离是相同的,例如[2] [3] = [3] [2]
-
从逻辑上讲,一个城市与其自身的距离为 0,例如[2] [2] = 0
使用这个矩阵(out_1),我想从这个矩阵中计算所有具有以下结构的“路径”:
- 路径必须从同一个城市开始和结束,并且除了第一个城市之外,其他城市不能两次访问。
例如,最终目标如下所示:
- Path 1 : [1] [2] , [2] [3], [3] [4], [4] [1] = 20371.54 + 19392.13 + 16651.73 + 18380.49 = 74795.89
- Path 2 : [2] [4] , [4] [3], [3] [1], [1] [2] = 19476.78 + 16651.73 + 19136.91 + 20371.54 = 75636.96
- ....
- Path n: [3] [4] , [4] [1], [1] [2], [2] [3] = 16651.73 + 18380.49 + 20371.54 + 19392.13 = 74795.89
我试图在 R 中找到一些库来执行此操作(注意:我认为我正在尝试做的事情被称为“图的哈密顿循环”):https://www.rdocumentation.org/packages/adagio/versions/0.8.4/topics/hamiltonian
但这不起作用:
c = c(out_1)
hamiltonian(c, cycle = TRUE)
Error in graph_vect2list(edges) :
Argument 'edges' is not a correct edge list.
如何获得所有此类“路径”的列表,显示城市的顺序和每条路径的总距离?
谢谢!
【问题讨论】:
-
您的路径是否需要仅访问其他城市一次?还是最多一次?
-
您好!为简单起见 - 假设每个城市应该只访问一次。谢谢!