pub struct Params {
pub tau: f64,
pub a_ped: f64,
pub b_ped: f64,
pub a_wall: f64,
pub b_wall: f64,
pub mass: f64,
pub max_speed: f64,
pub arrival_radius: f64,
pub max_accel: f64,
}Expand description
Parameters for the Social Force model.
Defaults are taken from Helbing, Farkas & Vicsek (2000) Table 1.
Fields§
§tau: f64Relaxation time toward the desired velocity (s).
a_ped: f64Interaction strength between pedestrians (N).
b_ped: f64Interaction range between pedestrians (m).
a_wall: f64Interaction strength with walls (N).
b_wall: f64Interaction range with walls (m).
mass: f64Pedestrian mass (kg).
max_speed: f64Hard upper bound on speed after integration (m/s).
arrival_radius: f64Arrival radius (m). Inside this distance the desired speed
tapers linearly to zero so the agent decelerates into its
destination instead of overshooting and oscillating. Set to
0.0 to disable the taper. Default: 0.3 m.
max_accel: f64Hard upper bound on acceleration magnitude (m/s²).
The Helbing exponential repulsion is numerically stiff: at a
light body overlap of 0.1 m the pair force with default a_ped = 2000 N and b_ped = 0.08 m is already ~5.4 kN, i.e.
~68 m/s² for an 80 kg pedestrian. Explicit integration at
dt = 0.05 s would push the velocity by 3.4 m/s in a single
tick, relying entirely on max_speed to
keep the trajectory physical. Clamping |a| ≤ max_accel
before integration gives a well-behaved CFL-like bound: the
default of 20 m/s² (≈ 2 g) is enough headroom for crowded
panic flows but low enough that dt * max_accel ≤ max_speed
at typical simulation rates. JuPedSim and PedSim apply the
same cap; this is a standard production hardening for SFM.
Implementations§
Source§impl Params
impl Params
Sourcepub fn validate(&self, dt: f64) -> Result<(), CrowdError>
pub fn validate(&self, dt: f64) -> Result<(), CrowdError>
Validate this parameter set against dt.
Returns Ok(()) if every invariant holds, otherwise the first
offending constraint as a [CrowdError]. Guards the same
failure modes as the other force-based models:
non-positive physical parameters, non-negative arrival radius,
finite positive dt, and the explicit-Euler CFL-like condition
dt * max_accel <= max_speed.
Cheap: a handful of comparisons, no allocations.