用什么来解决以下挑战是一种很好的启发式方法?
Quality Blimps Inc.希望将销售扩展到其他城市 (N),所以他们聘请你作为推销员飞往其他城市出售 飞艇。随身携带的Blimp价格昂贵,所以你需要 确定每次旅行时和你一起携带多少飞艇 返回总部以获得更多。质量Blimps无限制 供应飞艇。
在您访问的每个城市,您只能销售一个飞艇,但是 你不需要去每个城市,因为有些旅行费用昂贵 成本。每个城市的初始价格都是飞利浦卖的,但是这个 随着更多的飞艇被售出而下降了一定的百分比(和 新奇感消失了)。找到一条能够实现利润最大化的好路线。
https://www.hackerrank.com/codesprint4/challenges/tbsp
这个挑战类似于标准的旅行商问题,但有一些额外的曲折:推销员需要跟踪他自己的旅行费用和飞艇。每个城市都有不同的价格,而且这些价格在他的旅程中下降。什么是快速算法(即n log n)用于最大化利润?
以某种方式运输物品的价格使TSP更简单。如果推销员在A市并且想要去B,他可以比较直接到B的成本与首先返回总部以获得更多飞艇的成本。即是通过A或者回到B之间来获得额外的飞艇是否更便宜?这项检查将创建一系列循环旅行,销售人员可以按照最高收入顺序进行。但是,首先确定这些循环的好方法是什么?
答案 0 :(得分:3)
这是一个搜索问题。假设网络大于蛮力可以解决的网络,最好的算法是Monte Carlo Tree Search。
答案 1 :(得分:3)
这类问题的算法通常是“多次运行解决方案,选择最佳解决方案”类型。此外,要选择接下来要尝试的解决方案,请使用先前迭代的结果。
对于特定的算法,尝试使用修剪,模拟退火,禁忌搜索,遗传算法,神经网络(按照我发现的相关顺序)进行回溯。此外,Tyler Durden提出的monte carlo树搜索理念看起来很酷。
答案 2 :(得分:0)
我已经阅读了原始问题。由于城市数量很大,因此无法得到确切的答案。近似算法是唯一的选择。正如@maniek所提到的,AA有很多种选择。如果你以前有AA的经验,那将是最好的,你可以选择一个你熟悉的那个并得到一个大概的答案。但是,如果你以前没有做AA,也许你可以从修剪开始回溯。
至于这个问题,您可以轻松获得这些修剪规则:
您甚至可以首先应用KNN来聚集位于附近的几个城市。然后从总部开始并访问每个小组。
总而言之,这确实是一个悬而未决的问题。没有最佳答案。也许在案例1中,使用回溯给出了最佳答案,而在案例2中,模拟退火是最好的。只计算近似答案就足够了,有很多方法可以实现这个目标。总而言之,真正最佳方法是尽可能多地编写AA,然后比较这些结果并输出最佳结果。
答案 3 :(得分:0)
这看起来像是一个经典的优化问题,我知道可以用模拟退火算法来处理(我认为这是模拟退火的第一次商业用途,早在20世纪80年代就是Wintek电子CAD自动放置程序)。大多数优化算法都可以处理像你这样的许多变量的问题 - 问题是正确设置适应度算法,以便获得最佳解决方案(在您的情况下,成本最低)。
其他优化算法可能值得一看 - 我只是有实施模拟退火算法的经验。
(如果你进入模拟退火路线,你可能想要获得PJ van Laarhoven和EH Aarts的“模拟退火:理论与应用(数学及其应用”),但你必须自己追捕它它已绝版(它甚至可能是我在1980年代使用的那本书)。)