我有一个城市区域(让我们把它想象成街道图),所有街道都有一些重量和长度。我想要做的是找到一组连接的街道,位于其他街道附近,最大(或接近最大)总重量W,因为我的最大子图最多只能包含N条街道。
我特别对一个跨越整个图表的子图不感兴趣,而只是一小群街道的最大或接近最大组合重量,并且所有街道彼此“靠近”,其中“ “将被定义为没有距离集群中心超过X米的街道。必须连接所得到的子图。
有人知道这个算法的名称是否存在?
也对任何解决方案,精确或近似感兴趣。
要在视觉上显示,请假设我的图表是下图中所有街道段(交叉点到交叉点)。因此,个别街道不是A大道,而是大道A在10日到11日之间,依此类推。 Street的权重为1或0.假设具有最大权重的街道集在选定的多边形中 - 我想要做的是找到此多边形。
答案 0 :(得分:0)
这是一个提案。将节点图中的每个顶点视为" center"正如你所定义的那样。对于每个中心C[i]
,请以C[i]
为原点执行Dijkstra's algorithm to construct a shortest path tree。当它包含一个超过中心允许的最大值的顶点时,停止构造树。
然后让A[i]
成为以V[i]
为中心的树中顶点的所有边的集合。结果将是具有最大权重的集合A[i]
。
对于O(|E[i]| + |V[i]| log |V[i]|)
中心,一次执行Dijkstra算法的运行时间为i
。这里的集合的大小受到距离中心的最大距离的限制。总费用为sum_(i in 1..|V|) O(|E[i]| + |V[i]| log |V[i]|)
。在退化的情况下,最大允许重量允许从每个中心包含整个图形,成本将为O(|V| (|E| + |V| log |V|))
。
我可以考虑一些可能的优化来改善运行时间,但是想要验证这可以解决你想到的问题。
答案 1 :(得分:0)
这是一个针对该问题的整数编程精确公式,假设您拥有有限数量的总街道S,并且群集的“中心”可以是有限数量的街道之一S.如果您正在查看连续欧几里德空间中的聚类中心,它将把我们带入Weber Problem的领域。这可能仍然可行,但我们必须查看column-generation formulation。
目标函数可最大化j
索引的所选街道的权重。约束(1)指定只选择一个中心。约束(2)指定对于任何潜在的中心i
,仅选择N
个街道作为邻居。约束条件(3)规定,只有选择了相应的中心,才选择街道作为某个社区的一部分。其余的是二进制整数约束。
如果选择作为中心的街道计为N
街道之一,则可以通过指定y_{ii} = x_i
注意:如果上述表述正确,或准确捕捉到问题,一旦确定N_i
已设定,就可以轻松解决[MIP]。
依次考虑每个i
。从N_i
按重量降序选择前N
个相邻街道。这是您的现有解决方案。如果在迭代i
时找到更好的解决方案,请更新现有解决方案。