我有一个应用程序的用户在其与。我想象这些相互作用,所以,我可以确定是否有群用户的存在(在其相互作用更加频繁).

我已经分配了一个2D点到每个用户(其中每个坐标是在0和1之间).我的想法是这两个用户点靠拢在一起,当他们互动,一种"吸引力",我只是重复去过我的日志交互作用。

当然,我需要一个"反弹力",这将推动用户的分开过,否则他们都会只是崩溃成为一个单一点。

首先我试图监测的最低和最高的每个x-y坐标,并规范它们的职位,但这没有工作,一些用户有少量的相互作用住在边缘,其余所有倒塌到中间。

任何人都不会知道什么方程式的我应该使用移动点,无论是对"吸引力"的力量用户之间,当他们进行互动,和一个"排斥"的力量阻止他们的所有崩溃的成一个单一点吗?

编辑:在针对一个问题,我要指出,我处理的大约1万个用户,大约10万之间的相互作用的用户。如果任何人都可以推荐一个工具,可以这样做,对我来说,我所有的耳朵:-)

有帮助吗?

解决方案

在过去,当我试过这种事情,我用弹簧模型拉链接节点在一起,是这样的: dx = -k*(x-l). dx 是变化中的位置, x 是当前的位置, l 是的所需的分离, k 是弹簧系数调整,直到你得到一个很好的平衡之间的春季的强度和稳定性,它将低于0.1.具有 l > 0 确保一切都不会最终在中间。

除此之外,一般的"排斥"部队之间的所有节点将会扩散出来,是这样的: dx = k / x^2.这将是大近两个节点,调整 k 得到合理的效果。

其他提示

我可以推荐一些可能性:第一,试图记录扩展的相互作用或运行它们通过s型的功能压制的范围。这会给你一个更光滑些分布的间隔。

独立的这一扩展的问题:看看一些渲染战略graphviz,特别程序"他"和"被迫流离失所者".从人页:

  neato  draws  undirected graphs using ``spring'' models (see Kamada and
  Kawai, Information Processing Letters 31:1, April 1989).   Input files
  must  be  formatted  in the dot attributed graph language.  By default,
  the output  of  neato  is  the  input  graph  with  layout coordinates
  appended.

  fdp  draws  undirected  graphs using a ``spring'' model. It relies on a
  force-directed approach in the spirit of Fruchterman and Reingold  (cf.
  Software-Practice & Experience 21(11), 1991, pp. 1129-1164).

最后,考虑的一个扩展的战略,一个有吸引力的力量,和某种形式的阻力系数,而不是排斥的力量。实际上移动的东西靠近 然后可能更远的后来可能只是得到你的循环的行为。

考虑一个模型,在该模型中的一切 崩溃最终,但速度缓慢。然后就运行,直到某些条件得到满足(a节点跨越中心的布局的区域或一些这样的).

或拖累势头,可以进行编码作为一个基本的抵抗运动和数量限制的动作;它可以应用于差异(事情可以动较慢的基础有多远,他们走了,他们是在太空中,有多少其他的节点被关闭,等等)。

希望这会有所帮助。

弹簧模型是传统的方式来这样做:做一个有吸引力的力量的各个节点之间基于相互作用,并排斥力的所有节点之间基于平方反对他们的距离。然后解决,最大限度地减少能源。你可能需要一些相当高的动力的程序,以获得有效解决这个如果你有更多的节点。确保开始的职位是随机的,和运行程序的几次:这样的情况下,几乎总是有几个当地能量的极小,你想要确定你已经有了一个良好的一个。

此外,除非你只有一些节点,我会做这个3D。一个额外的维度的自由允许更好的解决方案,而且你应该能想象的群集在3D,以及如果不比2D。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top