social_force_step — DRIVE traffic op

• 資料種類:points × points × points → any

• 呼叫: import fullseye as fs; fs.ledger.social_force_step(pos, vel, goals, *, dt: 'float', v0, tau: 'float', A: 'float', B: 'float', radius, walls=None)(要直接呼叫實作,import drivetraffic; drivetraffic.social_force_step(pos, vel, goals, *, dt: 'float', v0, tau: 'float', A: 'float', B: 'float', radius, walls=None);從台帳取用則 opsdrive.get("social_force_step"))

用法

social force 的 1 步(單位質量。Helbing & Molnár 1995 / Helbing, Farkas, Vicsek 2000 的形式)。

dv_i/dt = (v0_i e_i − v_i)/τ + Σ_j A exp((r_ij − d_ij)/B) n_ij + Σ_W A exp((r_i − d_iW)/B) n_iW

e_i = 指向目標的單位向量(距目標 1e-9 m 以內則為 0),r_ij = r_i + r_j,d_ij = |x_i − x_j|, n_ij = (x_i − x_j)/d_ij。牆 W 是線段 ((x0, y0), (x1, y1)) 的列表,d_iW 與 n_iW 取自最近點。

積分(指數積分):假定斥力 F 在步長內恆定,精確求解線性部分 (v_d − v)/τ(v_d = v0 e + τ F):

v' = v_d + (v − v_d) e^{−dt/τ},x' = x + v_d dt + (v − v_d) τ (1 − e^{−dt/τ})。單人且無斥力時,結果與 v(t) = v0(1 − e^{−t/τ}) 與 dt 無關地 一致(門)。有斥力時為一階誤差。

參數:pos、vel、goals 為 (N, 2)。v0 與 radius 為純量或 (N,)。walls 為 (M, 2, 2) 或 None。

回傳值:(pos', vel')。若配置為鏡像對稱或點對稱,結果也保持同樣的對稱性(因為公式是對稱的;由門確認)。

Raises ValueError:形狀不一致、非有限值、τ、B、dt ≤ 0、A < 0、半徑 < 0、兩人位置重合。

參考(範例資料、文獻)

• 範例資料目錄(下載 URL / 授權) —— 2-D 用 skimage.data(BSD/公有領域)加合成圖,3-D 給出真實資料源(Stanford/PDS 等)的下載 URL。

• 運算子來歷與參考文獻 —— 該運算子族所依據的研究/方法出處。

• 演算法的正典(作者、年份)與用途見上面的族使用指南。

可執行的範例(實際呼叫該運算子並已驗證的樣例)

• gallery_drive_mirrors_crowds — py -3.11 examples/gallery_drive_mirrors_crowds.py

型別可銜接的下一個運算子(可接受 any 作為輸入)

course_crank · course_s_curve · course_turnaround · course_slope · course_intersection · course_parallel_parking · course_crossing · course_road

同類別(traffic)

idm_accel · idm_equilibrium_gap · idm_platoon_simulate · driver_style · lateral_wobble · ou_estimate · pedestrian_crossing · occlusion_reveal_distance


*Provenance: drivetraffic.py — DRIVE 運算子登記表。本條目由 tools/opdocs.py md 自動產生(請勿手動編輯)。*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.