【发布时间】:2023-03-31 20:56:01
【问题描述】:
我有一个问题,我找不到答案。我正在使用 Perl。我的输入是一个对称成本矩阵,有点像 TSP。
我想知道位于我的边界(即 10)之下的所有解。
这是我的矩阵:
- B E G I K L P S
B - 10 10 2 10 10 10 10
E 10 - 2 10 10 10 1 10
G 10 2 - 10 2 3 3 3
I 2 10 10 - 4 10 10 2
K 10 10 2 4 - 10 10 3
L 10 10 3 10 10 - 2 2
P 10 1 3 10 10 2 - 10
S 10 10 3 2 3 2 10 -
有人知道如何实现分支定界算法来解决这个问题吗?目前,我确实将矩阵中的每 10 个替换为“-”。
到目前为止我做了什么:
@verwbez = ( ["-", B, E, G, I, K, L, P, S],
[B,"-", 10, 10, 2, 10, 10, 10, 10],
[E, 10, "-", 2, 10, 10, 10, 1, 10],
[G, 10, 2, "-", 10, 2, 3, 3, 3],
[I, 2, 10, 10, "-", 4, 10, 10, 2],
[K, 10, 10, 2, 4, "-", 10, 10, 3],
[L, 10, 10, 3, 10, 10, "-", 2, 2],
[P, 10, 1, 3, 10, 10, 2, "-", 10],
[S, 10, 10, 3, 2, 3, 2, 10, "-"]);
for ($i=0;$i<=$#verwbez;$i++) {
for ($j=0; $j<=$#{$verwbez[$i]};$j++) {
while ($verwbez[$i][$j] >=7) {
$verwbez[$i][$j] = "-";
}
}
}
基本上只是改变矩阵,每10个被替换为“-”。现在我想找到所有低于 10 的解决方案,并且包含 4 个总是两个城市连接在一起的地区。但不幸的是,我不知道如何继续/开始......
【问题讨论】:
-
解决方案是什么样的,如何使用成本矩阵来评估它?对于 TSP,它将是一个有序序列,因为成本指的是路径,例如
BISLPEGK。你的问题也是这样,还是你在构建路径以外的东西? -
我忘了说。字母是城市。始终应将两个链接到导致成本的“区域”。所以最终应该总是有 4 个区(包括 8 个城市)一起计算,最大成本为 10。每个城市应该只提到一次/解决方案。
-
所以它就像一个分段的TSP?解决方案可能如下所示:
['BI', 'SL', "PE', 'KG'](cost 7) 。 . .对吗? -
您遇到的具体问题是什么?你试过什么吗?
-
好的,我意识到我的最后一步,改变矩阵,并不是真正需要的,所以我跳过了。反过来,我希望它逐步通过矩阵并找到条目
标签: perl branch-and-bound