R genealg包rbga.bin评估函数

时间:2015-02-20 23:30:13

标签: r mathematical-optimization genetic-algorithm traveling-salesman

我正在尝试使用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

但是我无法编写正确的评估函数(尽管我已经在文档和网络上看到了一些示例)。我知道染色体将作为参数传递给评估函数,但我不知道要做什么操作来返回正确的值。

1 个答案:

答案 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