我正在使用Spark来设计TSP求解器。从本质上讲,RDD中的每个元素都是一个3元组(id, x, y)
,其中id
是一个点的索引,x-y
是该点的坐标。给定一个存储3元组序列的RDD,如何评估该序列的路径成本?例如,序列(1,0,0),(2,0,1),(3,1,1)将给出成本1 + 1 = 2
(从第一点到第二点,然后到第三点)。似乎为了做到这一点,我必须知道Spark如何分割序列(RDD)。另外,如何评估两个分区的边界点之间的成本?或者我有什么简单的操作吗?
答案 0 :(得分:0)
通过任何并行处理,您需要认真考虑单个数据元素是什么,以便只有需要在一起的数据才能在一起。
因此,不是每行都是一个点,而是每一行都应该是定义路径的点数组,此时使用Spark计算总路径长度变得容易。您只需使用通常用于计算给定定义点的线段数组总长度的任何内容。
但即便如此,我们还不清楚我们是否需要点的完整通用性。对于TSP,候选解决方案是包含所有位置的路径,这意味着我们不需要为每个解决方案存储城市的位置,或者每次都计算距离。我们只需要计算一个距离矩阵,然后我们可以广播,这样每个Spark工作人员都可以访问它,然后查找距离而不是计算距离。
(它实际上是位置ID的排列,而不仅仅是它们的列表,它可以简化更多的事情。)