地理分散启发式

Posted

技术标签:

【中文标题】地理分散启发式【英文标题】:Geographical Dispersion Heuristic 【发布时间】:2013-01-20 07:59:11 【问题描述】:

我正在尝试实施爬山算法,以根据特定标准从一组位置中选择哪些位置。有多达 5000 个地点可供选择。

这些标准之一是地理分散,因此我需要能够为我的位置的任何子集分配一个代表分散的值。

每个位置都有经纬度数据。

速度是一个问题,这就是为什么我需要一些启发式方法来估计一组特定位置(即可能的解决方案)的分散程度。

我已尝试将潜在解决方案中每个位置的成对距离相加,但事实证明这太慢了。

然后,我尝试了在我的潜在解决方案中与所有位置中心的距离总和,结果证明这更快,但效果不佳。使用这种方法将有利于几个位置集群。

任何其他建议将不胜感激。

【问题讨论】:

我很好奇为什么成对距离求和太慢了。我认为设施选址问题是战略性的、高成本的决策问题,即需要数小时或数天才能运行的算法足以做出需要数年才能解决的决策。 是的,你是对的,我的问题在于,与其他因素相比,地理分散始终是一个三元目标,即在所有其他条件相同的情况下,选择两个解决方案中更分散的一个。如果没有地理分散,我的实施在 15 秒内提供了良好的结果,我不能超过 30 秒。我基本上是想找到一个中间立场,在那里我可以收集关于分散的部分迹象,而无需支付计算费用。 【参考方案1】:

首先,您能否重申一下成对求和的含义?我在问,因为听起来你形成了所有可能的配对,这将是非常低效的。如果是这种情况,如何先找到 1) 最近的邻居,然后 2) 最长的路径?

1) 如果我没记错的话,您可以在少于 O(n log n) 的时间内完成此操作。 2)如果形成的树是断开的,你也必须找到树之间的最短距离。并且因为有树,这不是一个 NP 完全问题,实际上最短路径算法就足够了。

此时,我非常怀疑我没有正确理解您的问题,在 geog 区域的出现次数上出现某种偏差怎么样,要么在极值点之间平均分配,要么通过一些先验的启发式方法选择。

您能否定义或进一步阐述分散概念?

【讨论】:

【参考方案2】:

考虑三种情况:

    您的所有节点都在一个密集的集群中。 您的所有节点都在一个集群中,但集群很宽。 您的许多节点都在一个集群中,但少数节点远离集群。

您在所有成对距离上的总和很好地捕捉到了 (1) 和 (2):紧密的集群比大型集群产生的结果更小。它对(3)有什么作用?这里,e 的一部分节点总数N 距离很远,平均距离为D。其他(1-e)N 节点是一个平均距离为d 的集群。

现在,必须考虑多少成对连接?对于集群节点,有((1-e)N)^2=e^2*N^2-2*e*N^2+N^2 这样的连接。对于远程节点,有e^2*N^2 连接。

现在,将这些值乘以平均距离。这给出了(d*(e^2*N^2-2*e*N^2+N^2)+D*(e^2*N^2))/N 的总成对平均值。现在,假设e 很小,那么我们可以忽略包含e^2 的项。因此,平均值为d*(N^2-2*e*N^2)/N

现在,考虑您的第二个指标:每个人与平均中心点的距离。这在 (1) 和 (2) 上也很好:紧密的集群比较大的集群具有更小的结果。 3 的表现如何?使用和上面一样的e来表示异常值的比例。现在,节点到中心点的平均距离由(d*(1-e)*N+D*e*N)/N 给出。换句话说,集群节点的权重不再那么大。

有没有一种方法可以让您在进行轻量级计算的同时更适当地加权集群节点?我想是的。

我的建议是从列表中随机选择节点对,计算节点间距离,然后对结果进行平均。对于 (1) 紧密集群,所有节点将靠近在一起,因此您绘制的所有随机对都将接近您在计算中得到的成对平均值。对于 (2),松散簇,同样如此。对于 (3),一个具有异常值的集群,您更有可能从集群内部绘制节点而不是从外部绘制节点,因此异常值最终会被忽略。

随着抽样节点数量的增加,集群将倾向于主导随机抽样。我猜这将在O(N) 而不是O(N^2) 时间提供不错的准确性。

【讨论】:

以上是关于地理分散启发式的主要内容,如果未能解决你的问题,请参考以下文章

启发式分析器 是啥意思啊?

启发式和元启发式有啥区别?

启发式合并

A*启发式搜索

A*启发式搜索

Linux 过度提交启发式