旅行推销员将贬值物品运送到不同的市场

Posted

技术标签:

【中文标题】旅行推销员将贬值物品运送到不同的市场【英文标题】:Travelling Salesman Shipping Depreciating Items to Different Markets 【发布时间】:2013-01-19 09:36:37 【问题描述】:

什么是解决以下挑战的好启发式方法?

Quality Blimps Inc. 正在寻求将其销售扩展到其他城市 (N), 所以他们雇你做推销员飞到其他城市去推销 飞艇。飞艇旅行可能很昂贵,因此您需要 确定每次旅行要带多少飞艇以及何时 回到总部获得更多。质量飞艇有无限 供应飞艇。

您将只能在您访问的每个城市出售一个飞艇,但是 您不需要访问每个城市,因为有些城市的旅行费用很高 费用。每个城市都有一个飞艇出售的初始价格,但这 随着更多的飞艇被出售(并且 新奇感消失)。找到可以最大化利润的好路线。

https://www.hackerrank.com/codesprint4/challenges/tbsp

这个挑战类似于标准的旅行推销员问题,但有一些额外的曲折:推销员需要跟踪自己的旅行成本和飞艇的费用。每个城市都有不同的飞艇售价,但这些价格会随着他的旅程而下降。什么是用于最大化利润的快速算法(即 n log n )?

以某种方式运输物品的价格使 TSP 更简单。如果业务员在A市,想去B市,他可以比较直接去B市的成本和先回总部接更多飞艇的成本。 IE。通过 A 乘坐额外的飞艇到 B 或在两者之间返回是否更便宜。此检查将创建一系列循环旅行,然后销售人员可以按照收入最高的顺序进行循环。但是首先确定这些循环的好方法是什么?

【问题讨论】:

不一定循环。如果回溯的成本低于继续到另一个城市的成本,那么销售人员可能会决定去HQ->A->B->C->D->C->B->E->B->A->HQ 旅行推销员和 O(nlogn) 不能很好地结合在一起(除非 P=NP,然后谁知道)。然而,这个问题对我来说更像是spanning tree。 @amit,如果 P=NP,TSP 的O(nlogn) 解决方案真的会让每个人都感到尴尬 @Shahbaz,一个城市只能卖一个单位,所以不能两次返回同一个城市。 @amit,它只是一个近似的解决方案,我认为它需要在小于 O(n^2) 的时间内完成。 【参考方案1】:

这是一个搜索问题。假设网络比蛮力解决的要大,最好的算法是Monte Carlo Tree Search。

【讨论】:

【参考方案2】:

这类问题的算法通常是“多次运行解决方案,选择最好的”类型。此外,要选择下一步尝试的解决方案,请使用之前迭代的结果。

至于特定算法,尝试使用修剪、模拟退火、禁忌搜索、遗传算法、神经网络进行回溯(按照我认为相关的顺序)。另外,Tyler Durden 提出的蒙特卡罗树搜索思路看起来也很酷。

【讨论】:

【参考方案3】:

我已阅读原始问题。由于城市数量众多,因此无法得到准确的答案。逼近算法是唯一的选择。正如@maniek 提到的,AA 有很多选择。如果你以前有过AA的经验,那最好,你可以选择一个你熟悉的,然后得到一个大概的答案。但是,如果您之前没有进行 AA,也许您可​​以从回溯和修剪开始。

至于这个问题,你可以很容易地得到这些剪枝规则:

    尽可能少带飞艇。也就是说,当你从总部出发,访问城市A,B,C......,然后返回总部(你可以将其视为单轮),你带来的飞艇数量与你将访问的城市相同. 随着销售价格越来越低,当它低于旅行费用时,这个城市将永远不会被访问。这给出了回溯方法的结束。

您甚至可以先应用 KNN 对附近的几个城市进行聚类。然后从总部出发,走访各个小组。

总而言之,这确实是一个悬而未决的问题。没有最佳答案。也许在情况 1 中,使用回溯给出了最好的答案,而在情况 2 中,模拟退火是最好的。只需计算近似答案就足够了,有很多方法可以实现这一目标。总而言之,真正最好的方法是尽可能多地编写 AA,然后比较这些结果并输出最好的。

【讨论】:

【参考方案4】:

这看起来像是一个经典的优化问题,我知道可以使用模拟退火算法来处理(我认为这是模拟退火的第一个商业用途,即早在 1980 年代的 Wintek 电子 CAD 自动放置程序)。大多数优化算法可以处理像您这样的许多变量的问题——问题是正确设置适应度算法,以便您获得最佳解决方案(在您的情况下,成本最低)。

其他优化算法可能值得一看——我只是有实现模拟退火算法的经验。

(如果您走模拟退火路线,您可能想要获得 PJ van Laarhoven 和 EH Aarts 的“模拟退火:理论与应用(数学及其应用)”,但您必须从它已经绝版了(它甚至可能是我在 1980 年代使用的书)。

【讨论】:

以上是关于旅行推销员将贬值物品运送到不同的市场的主要内容,如果未能解决你的问题,请参考以下文章

旅行推销员建设性启发式

基于C#的机器学习--旅行推销员问题

优化旅行推销员算法(时间旅行者算法)

遗传算法 - 旅行推销员

scipy 中的旅行推销员

旅行推销员/车辆路线用例的最佳实现