سؤال

لدي تطبيق يتفاعل فيه المستخدمون مع بعضهم البعض.أريد تصور هذه التفاعلات حتى أتمكن من تحديد ما إذا كانت هناك مجموعات من المستخدمين (التي تكون التفاعلات أكثر تكرارًا فيها).

لقد قمت بتعيين نقطة ثنائية الأبعاد لكل مستخدم (حيث يتراوح كل إحداثي بين 0 و1).فكرتي هي أن نقطتي المستخدمين تقتربان من بعضهما البعض عندما يتفاعلان، "قوة جاذبة"، وأنا فقط أتصفح سجلات التفاعل الخاصة بي مرارًا وتكرارًا.

بالطبع، أحتاج إلى "قوة تنافر" من شأنها أن تدفع المستخدمين بعيدًا عن بعضهم البعض أيضًا، وإلا فسوف ينهارون جميعًا في نقطة واحدة.

حاولت أولاً مراقبة أدنى وأعلى كل من إحداثيات XY، وتطبيع مواقعها، لكن هذا لم ينجح، بقي عدد قليل من المستخدمين الذين لديهم عدد قليل من التفاعلات عند الحواف، وانهار الباقي في المنتصف.

هل يعرف أحد ما هي المعادلات التي يجب أن أستخدمها لتحريك النقاط، سواء بالنسبة للقوة "الجاذبة" بين المستخدمين عندما يتفاعلون، أو القوة "البغيضة" لمنعهم جميعًا من الانهيار في نقطة واحدة؟

يحرر:وردا على سؤال، يجب أن أشير إلى أنني أتعامل مع حوالي مليون مستخدم، وحوالي 10 ملايين تفاعل بين المستخدمين.إذا كان بإمكان أي شخص أن يوصي بأداة يمكنها القيام بذلك من أجلي، فأنا آذان صاغية :-)

هل كانت مفيدة؟

المحلول

في الماضي، عندما جربت هذا النوع من الأشياء، استخدمت نموذجًا نابضًا لسحب العقد المرتبطة معًا، مثل: dx = -k*(x-l). dx هو التغيير في الموقف، x هو الوضع الحالي، l هو الانفصال المطلوب، و k هو معامل الزنبرك الذي تقوم بتعديله حتى تحصل على توازن جيد بين قوة الزنبرك وثباته، سيكون أقل من 0.1.نأخذ l > 0 يضمن أن كل شيء لا ينتهي في المنتصف.

بالإضافة إلى ذلك، فإن القوة "التنافرية" العامة بين جميع العقد سوف تنشرها، مثل: dx = k / x^2.سيكون هذا أكبر كلما اقتربت العقدتان k للحصول على تأثير معقول.

نصائح أخرى

يمكنني أن أوصي ببعض الاحتمالات:أولاً، حاول تسجيل حجم التفاعلات أو تشغيلها من خلال دالة سينية لسحق النطاق.سيعطيك هذا توزيعًا مرئيًا أكثر سلاسة للتباعد.

مستقلة عن مشكلة القياس هذه:انظر إلى بعض استراتيجيات العرض في 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).

أخيرًا، فكر في إحدى استراتيجيات القياس، وهي قوة جاذبة ونوع من معامل السحب بدلاً من القوة التنافرية.في الواقع تحريك الأمور أقرب و ثم ربما في وقت لاحق قد يؤدي ذلك إلى سلوكك الدوري.

النظر في نموذج فيه كل شيء سوف الانهيار في نهاية المطاف، ولكن ببطء.ثم قم فقط بالتشغيل حتى يتم استيفاء بعض الشروط (تعبر العقدة وسط منطقة التخطيط أو ما شابه ذلك).

يمكن تشفير السحب أو الزخم كمقاومة أساسية للحركة وتصل إلى اختناق الحركات؛يمكن تطبيقه بشكل تفاضلي (يمكن للأشياء أن تتحرك بشكل أبطأ بناءً على المسافة التي قطعتها، وموقعها في الفضاء، وعدد العقد الأخرى القريبة، وما إلى ذلك).

أتمنى أن يساعدك هذا.

النموذج الربيعي هو الطريقة التقليدية للقيام بذلك:إنشاء قوة تجاذب بين كل عقدة بناءً على التفاعل، وقوة تنافر بين جميع العقد بناءً على المربع العكسي للمسافة بينها.ثم حل، والتقليل من الطاقة.قد تحتاج إلى بعض البرامج عالية الطاقة إلى حد ما للحصول على حل فعال لهذه المشكلة إذا كان لديك أكثر من بضع عقد.تأكد من أن مواضع البداية عشوائية، وقم بتشغيل البرنامج عدة مرات:تحتوي حالة مثل هذه دائمًا تقريبًا على الحد الأدنى من الطاقة المحلية، وتريد التأكد من حصولك على حالة جيدة.

أيضًا، ما لم يكن لديك سوى عدد قليل من العقد، سأفعل ذلك بتقنية ثلاثية الأبعاد.يسمح البعد الإضافي للحرية بحلول أفضل، ويجب أن تكون قادرًا على تصور المجموعات ثلاثية الأبعاد أيضًا إن لم تكن أفضل من ثنائية الأبعاد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top