一个旅行家问题算法题的变种题,各位算法大佬来提供个思路

2020-05-14 15:41:31 +08:00
 black11black

如题,最终公司最近在折腾有个项目涉及到巨额计算量的分布式解耦问题,跟同事简单讨论了一下也没啥结果,我想了想这个问题可以抽象成以下这个算法题:

假设太平洋上有 N 个岛屿,我们有 M 个旅行家,为了简化问题,我们取特殊值假设现在有 1000 个岛屿和 2 个旅行家。这 1000 个岛屿中,任意两个岛屿之间必有且只有一条航空通道,其距离最小值为 1km,最大值为 1000km 。

现在两个旅行家的目标是,他们可以从任意不同的岛屿出发,两人的足迹合起来要覆盖全部 1000 个岛屿,并且两人合计消耗的燃油数要最小(即两人合计走过的里程数最小)。即(某种理想的情况下),A 旅行家要走过其中 500 个岛屿而 B 要走过另外 500 个岛屿,求他们各自负责走过的范围。

==========================================================分割线

旅行家是传统的 DP 算法题,老生常谈了。这个问题如果让我求一个旅行家遍历所有岛屿的最短距离感觉还是蛮简单的,但是如果旅行家增多突然就两眼一抹黑不知道怎么写了。

如同上文说的这个实际上是一个资源分配解耦的问题。在实际生产中遇到的问题是目前有若干个计算任务,每个之间有若干耦合度,我希望将其打包成不同的块分布给不同的机器(核心),希望这种打包的方式可以让不同包之间的总耦合度最小。

因为是资源分配问题,所以除了总里程最小之外还可能有另外一个需求就是让 A 和 B 的里程数方差最小(任务分配到不同节点之后,我们希望每个节点所需的计算时间接近,而不要某个节点早早完成任务,而另一个节点还有很久才能完成)

=========================================================== 各位带佬给提个意见吧,学艺不精,完全没思路。

3106 次点击
所在节点    Java
23 条回复
luozic
2020-05-14 21:01:22 +08:00
这种不能确定全局最优解,可以局部最优搞贪心算法。实际工程的时效性很重要,除非是预先算好的数据模型套,否则每次都必须足够快的给结果,
baozixixi
2020-05-14 21:25:54 +08:00
优化问题,精确解法分枝定界
非精确解法可以看一看 启发式算法(蚁群算法、模拟退火法等)或者近似算法

可以看一下《最优化导论》
teddyss
2020-05-15 08:51:25 +08:00
简单粗暴(去五金店买个卷尺,买个对讲机,再租个老婆,亲身体会)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/671649

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX