Package epidemic.strategies.movement
Class SocialDistancingStrategy
java.lang.Object
epidemic.strategies.movement.SocialDistancingStrategy
- All Implemented Interfaces:
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.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate static final recordWewnętrzna struktura danych (DTO) reprezentująca wektor siły o wysokiej precyzji zmiennoprzecinkowej, używana podczas sumowania repulsywnych wpływów środowiskowych. -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final doubleprivate final doubleprivate final doubleprivate final doubleWagi sił wpływające na priorytetyzację kierunku ruchu. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptioncalculateBoundaryRepulsion(Point2D pos, WorldMap world) calculateNextPosition(Agent agent, WorldMap world) Oblicza nową pozycję agenta na podstawie bilansu sił w środowisku.private Point2DclampToWorldBounds(Point2D pos, WorldMap world)
-
Field Details
-
perceptionRadius
private final double perceptionRadius -
edgeMargin
private final double edgeMargin -
boundaryForceWeight
private final double boundaryForceWeight
-
-
Constructor Details
-
SocialDistancingStrategy
public SocialDistancingStrategy()
-
-
Method Details
-
calculateNextPosition
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:
calculateNextPositionin interfaceMovementStrategy- 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
-
socialForceWeight