Source code for collision_free_speed_v2
# Copyright © 2012-2024 Forschungszentrum Jülich GmbH
# SPDX-License-Identifier: LGPL-3.0-or-later
from dataclasses import dataclass
import jupedsim.native as py_jps
@dataclass(kw_only=True)
[docs]class CollisionFreeSpeedModelV2:
"""Collision Free Speed Model V2
This is a variation of the Collision Free Speed Model where geometry and neighbor repulsion are individual
agent parameters instead of global parameters.
A general description of the Collision Free Speed Model can be found in the originating publication
https://arxiv.org/abs/1512.05597
A more detailed description can be found at https://pedestriandynamics.org/models/collision_free_speed_model/
"""
pass
@dataclass(kw_only=True)
[docs]class CollisionFreeSpeedModelV2AgentParameters:
"""
Agent parameters for Collision Free Speed Model V2.
See the scientific publication for more details about this model
https://arxiv.org/abs/1512.05597
.. note::
Instances of this type are copied when creating the agent, you can safely
create one instance of this type and modify it between calls to `add_agent`
E.g.:
.. code:: python
positions = [...] # List of initial agent positions
params = CollisionFreeSpeedModelV2AgentParameters(v0=0.9) # all agents are slower
for p in positions:
params.position = p
sim.add_agent(params)
Attributes:
position: Position of the agent.
time_gap: Time constant that describe how fast pedestrian close gaps.
v0: Maximum speed of the agent.
radius: Radius of the agent.
journey_id: Id of the journey the agent follows.
stage_id: Id of the stage the agent targets.
strength_neighbor_repulsion: Strength of the repulsion from neighbors
range_neighbor_repulsion: Range of the repulsion from neighbors
strength_geometry_repulsion: Strength of the repulsion from geometry boundaries
range_geometry_repulsion: Range of the repulsion from geometry boundaries
"""
[docs] position: tuple[float, float] = (0.0, 0.0)
[docs] strength_neighbor_repulsion: float = 8.0
[docs] range_neighbor_repulsion: float = 0.1
[docs] strength_geometry_repulsion: float = 5.0
[docs] range_geometry_repulsion: float = 0.02
def as_native(
self,
) -> py_jps.CollisionFreeSpeedModelV2AgentParameters:
return py_jps.CollisionFreeSpeedModelV2AgentParameters(
position=self.position,
time_gap=self.time_gap,
v0=self.v0,
radius=self.radius,
journey_id=self.journey_id,
stage_id=self.stage_id,
strength_neighbor_repulsion=self.strength_neighbor_repulsion,
range_neighbor_repulsion=self.range_neighbor_repulsion,
strength_geometry_repulsion=self.strength_geometry_repulsion,
range_geometry_repulsion=self.range_geometry_repulsion,
)
[docs]class CollisionFreeSpeedModelV2State:
def __init__(self, backing):
self._obj = backing
@property
[docs] def time_gap(self) -> float:
return self._obj.time_gap
@time_gap.setter
def time_gap(self, time_gap):
self._obj.time_gap = time_gap
@property
[docs] def v0(self) -> float:
"""Maximum speed of this agent."""
return self._obj.v0
@v0.setter
def v0(self, v0):
self._obj.v0 = v0
@property
[docs] def radius(self) -> float:
"""Radius of this agent."""
return self._obj.radius
@radius.setter
def radius(self, radius):
self._obj.radius = radius
@property
[docs] def strength_neighbor_repulsion(self) -> float:
"""Strength of the repulsion from neighbors of this agent."""
return self._obj.strength_neighbor_repulsion
@strength_neighbor_repulsion.setter
def strength_neighbor_repulsion(self, strength_neighbor_repulsion):
self._obj.strength_neighbor_repulsion = strength_neighbor_repulsion
@property
[docs] def range_neighbor_repulsion(self) -> float:
"""Range of the repulsion from neighbors of this agent."""
return self._obj.range_neighbor_repulsion
@range_neighbor_repulsion.setter
def range_neighbor_repulsion(self, range_neighbor_repulsion):
self._obj.range_neighbor_repulsion = range_neighbor_repulsion
@property
[docs] def strength_geometry_repulsion(self) -> float:
"""Strength of the repulsion from geometry boundaries of this agent."""
return self._obj.strength_geometry_repulsion
@strength_geometry_repulsion.setter
def strength_geometry_repulsion(self, strength_geometry_repulsion):
self._obj.strength_geometry_repulsion = strength_geometry_repulsion
@property
[docs] def range_geometry_repulsion(self) -> float:
"""Range of the repulsion from geometry boundaries of this agent."""
return self._obj.range_geometry_repulsion
@range_geometry_repulsion.setter
def range_geometry_repulsion(self, range_geometry_repulsion):
self._obj.range_geometry_repulsion = range_geometry_repulsion