3

ユーザーが相互作用するアプリケーションがあります。これらのインタラクションを視覚化して、ユーザーのクラスターが存在するかどうか(どのインタラクションがより頻繁に発生するか)を判断できるようにします。

各ユーザーに2Dポイントを割り当てました(各座標は0から1の間です)。私の考えでは、2人のユーザーが対話すると、「魅力的な力」である2つのユーザーのポイントが互いに近づき、対話ログを何度も繰り返し調べます。

もちろん、ユーザーを引き離す「反発力」が必要です。そうしないと、すべてが1つのポイントに崩壊します。

最初に、各XY座標の最低と最高を監視し、それらの位置を正規化しようとしましたが、これは機能せず、インタラクションの数が少ない少数のユーザーがエッジに留まり、残りはすべて中央に崩壊しました。

ユーザーが対話するときのユーザー間の「魅力的な」力と、すべてのユーザーが1つのポイントに崩壊するのを防ぐ「反発する」力の両方について、ポイントを移動するために使用する方程式を知っている人はいますか?

編集:質問に答えて、私は約100万人のユーザーと、ユーザー間の約1,000万人のインタラクションを扱っていることを指摘する必要があります。誰かが私のためにこれを行うことができるツールを推薦することができれば、私はすべての耳です:-)

4

3 に答える 3

2

過去に、この種のことを試したとき、リンクされたノードをまとめるためにスプリング モデルを使用しましたdx = -k*(x-l)dxは位置の変更、xは現在の位置、lは目的の分離、kはばねの強さと安定性のバランスが取れるまで微調整するばね係数です。0.1 未満になります。持つl > 0ことで、すべてが中途半端に終わらないことが保証されます。

それに加えて、すべてのノード間の一般的な「反発」力は、それらを次のように広げますdx = k / x^2。これは、2 つのノードが近いほど大きくなりkます。適切な効果が得られるように調整してください。

于 2008-10-06T05:17:47.000 に答える
1

いくつかの可能性をお勧めします。まず、相互作用を対数スケーリングするか、シグモイド関数を実行して範囲を縮小してみてください。これにより、間隔の視覚的な分布がよりスムーズになります。

このスケーリングの問題とは別に、graphviz のレンダリング戦略のいくつか、特にプログラム「neato」と「fdp」を見てください。マニュアルページから:

  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).

最後に、スケーリング戦略の 1 つ、引力、および斥力の代わりに何らかの抗力係数を検討します。実際に物を近づけたり、後で遠ざけたりすると、周期的な動作が発生する可能性があります。

すべてが最終的にはゆっくりと崩壊するモデルを考えてみましょう。次に、何らかの条件が満たされるまで実行します (ノードがレイアウト領域の中心を横切るなど)。

抗力または運動量は、動きに対する基本的な抵抗としてエンコードされ、動きを抑えることになります。異なる方法で適用できます (移動距離、空間内の場所、近くにある他のノードの数などに基づいて、物事の動きが遅くなる可能性があります)。

お役に立てれば。

于 2008-09-18T15:53:42.693 に答える
0

スプリング モデルは、これを行う従来の方法です。相互作用に基づいて各ノード間に引力を発生させ、距離の逆二乗に基づいてすべてのノード間に反発力を発生させます。次に、エネルギーを最小化して解決します。ノードが複数ある場合、これを効率的に解決するには、かなり強力なプログラミングが必要になる場合があります。開始位置がランダムであることを確認し、プログラムを数回実行します。このようなケースでは、ほとんどの場合、いくつかのローカル エネルギー最小値があり、適切な最小値が得られていることを確認する必要があります。

また、ノードが数個しかない場合を除き、これを 3D で行います。追加の自由度により、より優れたソリューションが可能になり、2D よりも優れていなくても、3D でもクラスターを視覚化できるはずです。

于 2008-11-27T17:11:16.460 に答える