Algorithm 用不同角度聚类圆形区域

Algorithm 用不同角度聚类圆形区域,algorithm,random,cluster-analysis,distance,Algorithm,Random,Cluster Analysis,Distance,假设我有一个圆形区域,在这个区域中随机部署了n个对象。我想从圆心的位置将圆分成K组,这样同一区域中的对象被视为同一组的成员。此外,指定K人从圆心位置访问K组(具体来说,一人代表一组)。现在,我想以这样一种方式分组,每个组中一个人的旅行距离彼此接近 如果对象是统一部署的,那就很容易了。只要把面积分成相等的角度,我就能得到想要的结果。但是,对于对象的随机部署,我无法划分圆形区域(具体来说,无法固定角度),这为每个组中的每个人提供了彼此接近的旅行距离如评论中所述,在组内找到最短路径的子问题是NP难问题

假设我有一个圆形区域,在这个区域中随机部署了n个对象。我想从圆心的位置将圆分成K组,这样同一区域中的对象被视为同一组的成员。此外,指定K人从圆心位置访问K组(具体来说,一人代表一组)。现在,我想以这样一种方式分组,每个组中一个人的旅行距离彼此接近


如果对象是统一部署的,那就很容易了。只要把面积分成相等的角度,我就能得到想要的结果。但是,对于对象的随机部署,我无法划分圆形区域(具体来说,无法固定角度),这为每个组中的每个人提供了彼此接近的旅行距离

如评论中所述,在组内找到最短路径的子问题是NP难问题。因此,整个问题是NP难问题。我将提出一个动态规划算法,它既可以精确地(在指数时间内)解决问题,也可以用启发式方法(在多项式时间内)近似解决问题

这两种变体都需要一个功能
f(g)
,用于评估一组车辆的行驶距离。在确切的变体中,您需要求解TSP。在近似变量中,使用启发式。您应该尝试几种启发式方法,看看哪一种最适合。例如,对象边界环的区域可能是一个良好的开端(加上最近对象到中心的距离)

实际的算法如下所示:计算每个对象的角度位置,并根据该位置对它们进行排序。另外,计算到中心的距离

现在,我们假设第一组从第一个对象开始。然后,我们要找到使所有组的
f(g)
之和最小的分组。动态程序的状态由到目前为止指定的组数和属于第一个组和下一个组的对象参数化。这将生成一个二维表格。通过计算结果组的
f()
,可以轻松初始化第一列:

       groups | 1           2  3  4  5  6 ... K
next object   |
--------------+------------------------
   o2         | f(o1->o1)
   o3         | f(o1->o2)
   ...        | ...
   on         | f(o1->on-1)
   o1         | f(o1->on)
然后,填充后面的列。对于每个条目,您必须将该组与上一列中的所有组进行比较,并找到总和最小的组:

entry(column i, object j) = min_k (entry(i - 1, k) + f(ok->j-1))
实际上,您不必计算整个列。如果开头和结尾的条目不允许放入
K
组,则可以将它们保留为空。例如,在第一列中,您只需在-(K-1)上计算最多
,因为您必须将
K-1
对象保留为未分配对象,以获得有效分组。您可以缓存
f
的结果,以避免重复计算

填写表格后,您对
条目(K,o1)
感兴趣。按照从该条目返回到起点的路径,您将获得最佳分组,其中第一个分组从
o1
开始。当组开始时,对第一个
n-K
对象执行此操作,您将获得总体最佳效果


该算法的时间复杂度为
O(n^3*K*T(f))
其中
T(f)
是计算
f(g)
的复杂度,旅行距离是如何定义的?作为连接组中所有对象和圆心的最短路径的距离?这本身就是一个NP难问题(旅行推销员)是的。连接群中所有对象和圆心的最短路径距离。使用任何已知的启发式方法,都可以得到旅行距离。但是如何划分组,以便在随机部署时,每个组的移动距离彼此接近。非常感谢Nico。实际上,我不太清楚你的解决方案。你能解释更多吗?我也想确定每个组的角度。我如何从你的算法中确定角度?如果你解释得更多,这对我有很大帮助…如果你的意思是你知道扇区的角度,那么这需要一种不同的方法(因为你只有一个连续值的自由度,而不是几个离散值的自由度)。关于你有什么问题?实际上,我想在每个组之间分配角度,这样每个组都包含从中心到每个组访问一个人的对象,以及每个组彼此接近的距离。假设我有K个组,并划分圆(360/K)天使。现在我想调整K组的角度,使每组的移动距离几乎相等…然后你只需要调整目标函数。使用方差或标准差代替
条目(i-1,k)+f(确定->j-1)
。但是,时间复杂性将增加。你试过像k-means这样的简单方法吗?是的。我试过k-means。它没有给出每个组的平衡距离,因为部署是随机的。