我正在尝试使用genealg包中的rbga.bin来解决TSP(旅行商问题)。我有矩阵存储城市之间的距离 像这样:
[,1] [,2] [,3] [,4]
[1,] 0 2 10 4
[2,] 0 0 12 12
[3,] 0 0 0 5
[4,] 0 0 0 0
但是我无法编写正确的评估函数(尽管我已经在文档和网络上看到了一些示例)。我知道染色体将作为参数传递给评估函数,但我不知道要做什么操作来返回正确的值。
答案 0 :(得分:0)
基本上,你问的是如何评估给定路径上的端点和距离矩阵的路径长度(对于路径1-3-2-4,你想要d13 + d32 + d24 + d41)。您可以使用矩阵索引和sum
函数执行此操作。让我们考虑你的距离矩阵和解决方案1-3-2-4(因为TSP通常以对称形式提出,我已经使它对称):
(d <- matrix(c(0, 2, 10, 4, 2, 0, 12, 12, 10, 12, 0, 5, 4, 12, 5, 0), nrow=4))
# [,1] [,2] [,3] [,4]
# [1,] 0 2 10 4
# [2,] 2 0 12 12
# [3,] 10 12 0 5
# [4,] 4 12 5 0
sln <- c(1, 3, 2, 4)
现在,您可以从解决方案中获取矩阵索引并拉出距离,将它们相加以进行最终评估:
(idx <- cbind(sln, c(tail(sln, -1), sln[1])))
# [1,] 1 3
# [2,] 3 2
# [3,] 2 4
# [4,] 4 1
d[idx]
# [1] 10 12 12 4
sum(d[idx])
# [1] 38