Class SocialDistancingStrategy

java.lang.Object
epidemic.strategies.movement.SocialDistancingStrategy
All Implemented Interfaces:
MovementStrategy

public class SocialDistancingStrategy extends Object implements MovementStrategy
Zaawansowana strategia ruchu (wzorzec Strategy) realizująca protokoły dystansowania społecznego. Wykorzystuje algorytm pól potencjałów (Potential Fields) do generowania dynamicznych wektorów sił odpychających. Agent poddawany jest repulsji zarówno ze strony innych jednostek, jak i samych granic mapy, co skutecznie zapobiega sztucznemu zjawisku agregacji i blokowania się tłumu w narożnikach symulacji.
  • Field Details

    • perceptionRadius

      private final double perceptionRadius
    • edgeMargin

      private final double edgeMargin
    • socialForceWeight

      private final double socialForceWeight
      Wagi sił wpływające na priorytetyzację kierunku ruchu.
    • boundaryForceWeight

      private final double boundaryForceWeight
  • Constructor Details

    • SocialDistancingStrategy

      public SocialDistancingStrategy()
  • Method Details

    • calculateNextPosition

      public Point2D calculateNextPosition(Agent agent, WorldMap world)
      Oblicza nową pozycję agenta na podstawie bilansu sił w środowisku. Algorytm sumuje wektory ucieczki od wszystkich sąsiadów w promieniu percepcji oraz wektory odpychające od krawędzi mapy, uwzględniając konfigurację wag. Wypadkowa siła jest następnie normalizowana do pojedynczego kroku. W przypadku idealnej równowagi sił (brak dominujących bodźców), agent wykonuje losowy krok, aby uniknąć uwięzienia w lokalnym minimum.
      Specified by:
      calculateNextPosition in interface MovementStrategy
      Parameters:
      agent - Agent poddawany działaniu sił dystansowania społecznego.
      world - Stan mapy symulacyjnej pozwalający na odczyt pozycji sąsiadów i granic.
      Returns:
      Znormalizowana pozycja docelowa, bezpiecznie ograniczona do obszaru mapy.
    • calculateBoundaryRepulsion

      private SocialDistancingStrategy.ForceVector calculateBoundaryRepulsion(Point2D pos, WorldMap world)
    • clampToWorldBounds

      private Point2D clampToWorldBounds(Point2D pos, WorldMap world)