Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 如何设计最优的出行计划_Algorithm - Fatal编程技术网

Algorithm 如何设计最优的出行计划

Algorithm 如何设计最优的出行计划,algorithm,Algorithm,我正在制定一个旅行计划。每个城市都有一个名为rateOfInterest的属性。两个城市之间的每条道路都有时间成本。问题是,给定起始城市和我们想要花费的具体时间,如何输出最有趣的路径(即城市的利率总和)。我在考虑使用贪婪算法,但是有没有算法可以保证最优路径 编辑正如@robotking所说,我们允许多次访问地点,而且只在第一次访问时才感兴趣。我们有50个城市,每个城市大约有5个相邻的城市。每条边上的代价函数是时间或距离。我们不必访问所有城市,只需使用给定的成本函数,我们需要返回具有最高ROI的最

我正在制定一个旅行计划。每个城市都有一个名为rateOfInterest的属性。两个城市之间的每条道路都有时间成本。问题是,给定起始城市和我们想要花费的具体时间,如何输出最有趣的路径(即城市的利率总和)。我在考虑使用贪婪算法,但是有没有算法可以保证最优路径

编辑正如@robotking所说,我们允许多次访问地点,而且只在第一次访问时才感兴趣。我们有50个城市,每个城市大约有5个相邻的城市。每条边上的代价函数是时间或距离。我们不必访问所有城市,只需使用给定的成本函数,我们需要返回具有最高ROI的最佳部分行程。我希望这能让问题更清楚

从中,请注意决策问题版本是“(其中,给定长度L,任务是确定任何巡演是否短于L)”。如果有人给我一个旅行推销员的问题来解决,我可以设置所有的城市都有相同的利率,然后决定的问题是我是否真的访问了所有的城市并返回了时间最有趣的路径

因此,如果你的问题有一个有效的解决方案,那么旅行推销员问题就有一个有效的解决方案,这是不可能的


如果你想比贪婪搜索更进一步,旅行商问题的一些方法可能是适用的-描述了“迭代局部搜索”,看起来很有趣,关于TSP。

这听起来非常像一个加权的TSP实例,这意味着有一些顶点比其他顶点更理想

现在,您可以根据我们讨论的城市数量,尝试各种可能的排列(使用回溯和一些修剪使其更快),找到最佳路径。看TSP问题是一个n!问题,所以在n>10后,您可以忘记它

如果你的城市数量不是那么少,那么找到一条最佳路径是不可行的,所以放弃这个想法。。。然而,很可能有一个足够好的启发式算法来近似一个足够好的解决方案

史蒂文·斯基纳建议将“模拟退火”作为逼近此类难题的启发式方法。这很像一种“爬山”方法,但更灵活或更宽容。我的意思是,在“爬山”中,你总是只接受改进你的解决方案的更改,而在“模拟退火”中,有些情况下,你实际上接受了更改,即使它使你的解决方案在当地变得更糟,但你希望以后你能拿回你的钱


无论采用哪种方法,用于近似TSP类问题的任何方法都适用于此。

如果您想要优化,请使用蛮力穷举搜索,其中树叶是时间用完的树叶。只要搜索树的预期深度小于
10
,最坏情况小于
15
,就可以生成一个实用的算法


现在,如果你考虑未来,并期望你的城市网络增长,那么你就无法确保最优。在这种情况下,您正在处理一个本地搜索问题。

您可以遍历每一条可能的路径,找到一条具有最大
总投资回报率(ROI)
的路径。我假设您可以访问每个城市多次,但只在第一次访问时才感兴趣。请您进一步说明您的问题好吗?它有一些目前还不能完全解决的问题。你被允许参观一次以上的地方吗?我们谈论的是多少城市?如果你可以多次访问某个地方,@robertking的解释适用吗?如果可能的话,你能举个例子吗?是的,就像2RobertKing一样,我们允许多次访问地点。是的,正如@robotking所说,我们允许多次访问地点,而且只在第一次访问时才感兴趣。我们有50个城市,每个城市大约有5个相邻的城市。每条边上的代价函数是时间或距离。我们不必访问所有城市,只需使用给定的成本函数,我们需要返回具有最高ROI的最佳部分行程。希望这能让问题更清楚:)