📜  使用匈牙利方法的旅行商问题

📅  最后修改于: 2022-05-13 01:56:08.415000             🧑  作者: Mango

使用匈牙利方法的旅行商问题

一个旅行推销员计划访问N个城市,每个城市只访问一次,然后返回他开始的城市。城市 i城市 j之间的距离为C ij 。找到他能做的最短的旅行。

注意:从城市 i 到城市 i 的旅行是不可能的,并且 C ij可能不等于 C ji

例子:

直觉:假设有 3 个城市,即城市 1 、城市 2 和城市 3。访问城市的所有可能组合是

因此,可以通过6 种不同的方式游览城市,但如果仔细观察,可以看出第 1、第 4 和第 5 次旅行是等效的第 2、第 3 和第 6 次旅行是等效的。因此,可能的不同组合实际上是2 ,而那些是

因此,如果有N 个城市可以访问,那么可以有(N-1) 个!前往每个城市一次并返回起始城市的方法。这类问题可以通过匈牙利法、分支定界法、惩罚法和最近邻法来解决。我们将看到如何使用匈牙利方法解决此类问题。

方法:下面提到的是使用匈牙利方法解决问题的步骤。
考虑图像中显示的示例:

请按照上述示例的解决方案说明更好地理解。

步骤 1:在成本矩阵的每一行中找到最小的成本元素。从相应行的每个其他元素中减去该元素。因此,降低成本矩阵的每一行中至少有一个零

步骤2:类似地,在得到的降低成本矩阵中找到每一列的最小元素,并从对应列的每个元素中减去该最小元素。因此,在第二个降低成本矩阵的每一行和每一列中应该至少有一个零。

第 3 步:在矩阵中进行赋值,如下所示。

  1. 逐行移动,直到找到带有单个零的行。
  2. 分配包含零的单元格并划掉其列中的所有其他零。
  3. 继续此过程,直到分配了所有带有单个零的行。
  4. 对每一列重复该过程。
  5. 如果一行和(或)一列有两个或多个零,并且无法通过检查选择一个,则分配这些零中的任意一个,并划掉该行/列的所有其他零。

步骤4:通过引入最小的非零元素并重复步骤2和步骤3,可以获得下一个最佳解决方案

第 5 步:进行不同的可能分配