旅行推销员将贬值物品运送到不同的市场
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 年代使用的书)。
【讨论】:
以上是关于旅行推销员将贬值物品运送到不同的市场的主要内容,如果未能解决你的问题,请参考以下文章