【问题标题】:Travelling Salesman with multiple salesmen?有多个推销员的旅行推销员?
【发布时间】:2011-09-08 12:14:23
【问题描述】:

我有一个问题已被有效地简化为多个销售员的旅行推销员问题。我有一个要从初始位置访问的城市列表,并且必须访问所有销售人员数量有限的城市。

我正在尝试提出一种启发式方法,并且想知道是否有人可以提供帮助。例如,如果我有 20 个城市,有 2 个销售员,我想到的方法是两步法。首先,将 20 个城市随机分成 10 个城市,每个城市有 2 个推销员,我会发现每个城市的巡演好像是独立的几次迭代。之后,我想交换或分配一个城市给另一个推销员并找到旅行。实际上,这将是一个 TSP,然后是最小制造时间问题。这样做的问题是它太慢了,而且好邻居生成交换或分配一个城市很困难。

任何人都可以就我如何改进上述内容提出建议吗?

编辑:

每个城市的地理位置都是已知的,销售人员在同一个地方开始和结束。目标是最小化最大旅行时间,使这种最小制造时间问题。因此,例如,如果 salesman1 需要 10 小时,而 salesman2 需要 20 小时,则最长行程时间为 20 小时。

【问题讨论】:

  • 如果您只想找到最佳答案而不是 2 个销售人员访问一个城市的情况,我可以考虑您的算法找不到最佳答案的情况。想象一个有 20 个城市的国家,它们之间的距离都是 20。但是只有一个循环,其中所有城市的距离都为 1。这意味着 d(c[i],c[j])=20,i!=(j+1)%20d(c[i],c[(i+1)%20]) = 1 在此您的所有销售人员都必须以最低成本访问所有城市。
  • 所有的业务员都是从同一个城市开始的吗?
  • 一些可以改善这个问题的更多信息:您是否有城市的地理位置信息,或者它们之间的所有距离?您对每个销售员的限制是什么?时间,距离?只是此类问题的冰山一角。
  • 启发式 TS 是一个难题(参见本书,amazon.com/…
  • @dustin 好的,我把旧账号合并到了这个,还合并了TSP问题,那里有一个答案我在这里没有看到,所以它被移动了,你现在应该有在此处访问您的旧问题以及您在旧帐户上的任何声誉。此外,如果您还没有,您可能希望通过提供一些登录数据来确保您将来不会再次丢失您的帐户 :) 祝您 TSP 问题好运 :) 干杯。

标签: algorithm heuristics traveling-salesman


【解决方案1】:

TSP 是一个难题。多 TSP 可能更糟。我不确定您是否可以使用这样的临时方法找到好的解决方案。您是否尝试过元启发式方法?我会先尝试使用交叉熵方法:用它来解决你的问题应该不会太难。否则寻找通用算法,蚁群优化,模拟退火......

参见 Boer 等人的“交叉熵方法教程”。他们解释了如何在 TSP 上使用 CE 方法。针对您的问题的一个简单调整可能是为每个销售人员定义不同的矩阵。

您可能想假设您只想找到销售员之间的最佳城市划分(并将每个销售员的最短行程委托给经典的 TSP 实现)。在这种情况下,在交叉熵设置中,您考虑每个城市 Xi 在推销员 A 的行程中的概率:P(Xi in A) = pi。你在 p = (p1, ... pn) 的空间上工作。 (我不确定它是否能很好地工作,因为您将不得不解决许多 TSP 问题。)

【讨论】:

  • 元启发式方法实际上正是我所关注的。在我提到的“迭代”之后,我希望尝试使用模拟退火,以期关闭搜索空间。但同样,想出一个好的邻域生成器来指导搜索,我发现很难。
【解决方案2】:

当您开始谈论多个销售人员时,我开始考虑粒子群优化。我使用引力搜索算法在这方面取得了很大的成功。这是我发现的一篇(冗长的)论文,涵盖了该主题。 http://eprints.utm.my/11060/1/AmirAtapourAbarghoueiMFSKSM2010.pdf

【讨论】:

  • 是的,我忘了说“和粒子群优化”
  • 该链接不再有效。经过一番搜索,该论文似乎已被撤回(我在这里发现了同一作者的一篇论文撤回通知,该论文从 2010 年开始具有类似的主题:ieeexplore.ieee.org/abstract/document/5486167
【解决方案3】:

为什么不将多 TSP 转换为传统 TSP?
这是一个众所周知的问题(将多个推销员 TSP 转化为 TSP),你可以找到几篇关于它的文章。

对于大多数转换,您基本上将您的仓库(销售人员开始和完成的地方)复制到几个仓库(在您的情况 2 中),以强制 TSP 两次返回仓库的方式设置边权重,并且然后将两个 depot 移除并合二为一。

瞧!有两个最小成本游览,只覆盖一次顶点。

【讨论】:

  • 这可能有效,但问题还在于为软件仓库选择一个好的副本或分区。
【解决方案4】:

我不会开始为如此复杂的问题编写算法(除非这是我的日常工作 - 编写优化算法)。你为什么不转向像 http://www.optaplanner.org/ 这样的通用解决方案?您必须定义您的问题,并且该程序使用顶级开发人员花费数年时间创建和优化的算法。

【讨论】:

    【解决方案5】:

    阅读问题描述时,我的第一个想法是使用标准方法来解决销售员问题(谷歌搜索合适的方法,因为我实际上从未为此编写代码);然后把结果分成两半。然后,您的算法可能是决定“一半”在哪里——也许是城市的一半,或者它可能是基于距离,或者可能是某种组合。或者搜索两个城市之间最大距离的结果,并选择它作为推销员#1 的最后一个城市和推销员#2 的第一个城市之间的间隔。当然不限于两个推销员,你会分成x块;但总体而言,您的标准 1 推销员 TSP 解决方案应该已经在旅行图中将“附近”城市彼此相邻,因此您不必提出单独的分组算法......

    无论如何,我确信有更好的解决方案,但这对我来说似乎是一个很好的第一种方法。

    【讨论】:

      【解决方案6】:

      看看this question (562904) - 虽然和你的不一样,但应该有一些值得思考的好食物和进一步研究的参考。

      【讨论】:

      • 我同意...提到的层次聚类算法是此类问题的完美启发式算法。
      【解决方案7】:

      正如上面的答案中提到的,hierarchical clustering solution 可以很好地解决您的问题。然而,不要继续解散集群直到你有一个单一的路径,而是在你有 n 时停止,其中 n 是你拥有的销售人员的数量。如果初始集群过于分散,您可能可以通过添加一些“假”停靠点来改进它,以提高集群最终与初始目的地均匀间隔的可能性。它不是最优的——但你不会为这样的问题找到最优的解决方案。我会创建一个可视化问题的应用程序,然后测试解决方案的许多变体,以了解您的启发式方法是否足够最优。

      在任何情况下,我不会随机化集群,这会导致大多数集群都不是最优的。

      【讨论】:

        【解决方案8】:

        刚开始使用遗传算法阅读您的问题,我就想到了。只需同时使用两种遗传算法,一种可以解决如何为销售员分配城市,另一种可以解决您拥有的每个销售员的 TSP。

        【讨论】:

          【解决方案9】:

          自从提出这个问题以来,已经完成了一些工作。

          要开始构建您自己的解决方案,您可以从这里开始: https://www.tandfonline.com/doi/full/10.1080/21642583.2019.1674220

          【讨论】:

            猜你喜欢
            • 2023-03-30
            • 1970-01-01
            • 2015-04-28
            • 2017-11-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-10-24
            • 1970-01-01
            相关资源
            最近更新 更多