社会力模型:Social force model for pedestrian dynamics
Social Force Model——社会力模型-CSDN博客
简介:
时间:1995
期刊:《Physical Review E》
作者:Dirk Helbing and P´eter Moln´ar
摘要:
提出一种描述行人运动的“社会力模型”。认为行人的运动可看作是受到一系列“社会力”的驱动,这些力反映了行人内在的动机,而非直接由外部物理接触产生。

模型主要包括以下几个方面:
加速项:行人以一定的期望速度前进,当实际速度偏离目标速度时,会有一个加速/减速过程使其趋向期望速度。
相互排斥力:行人与其他行人或障碍物之间保持一定距离,这种排斥作用通过一个随距离呈指数衰减的势能函数来描述。
吸引力:在某些情境下,行人会受到其他个体或物体的吸引,例如朋友、街头表演者或橱窗展示。
该模型将上述各项“力”相加,构成非线性耦合的 Langevin 方程,从而模拟行人群体的自组织现象,如动态车道形成以及通过狭窄通道时的往复交替现象。
创新点:
①首次将“社会力”这一概念引入行人运动的建模中
②多项力的综合考虑
③非线性耦合 Langevin 方程模拟随机性带来的个体差异和突发现象
④扩展性与普适性
相关工作:
加速项:
他/她想要尽可能舒适地到达某个目的地

:行人实际位置
:行人的目标位置
如果行人的运动不受干扰,他/她将以一定的期望速度向期望方向
行走

:实际速度偏差
:期望速度
:松弛时间
相互排斥力:
行人与行人距离:
他/她与其他行人保持一定的距离

:行人
和行人
之间由于距离
产生的排斥势能
:行人
和行人
相对位置
原因:行人需要空间来进行下一步,而其他行人会考虑到这一点

行人与建筑距离:
行人还与建筑物、墙壁、街道、障碍物等的边界保持一定的距离。

: 行人
和障碍物 B 之间由于距离
而产生的排斥势能
:行人
和障碍物 B 相对位置
吸引力:
行人有时会被其他人(朋友、街头艺术家等)或物品(如橱窗展示)吸引。

:函数,表示行人
对目标 i 的吸引力势能,这个势能随时间 t 和行人与目标之间的距离
变化
:行人
由于目标 i 存在而感受到的吸引力
:行人
和目标 i 之间的相对位置向量
与排斥力不同,吸引力通常随着时间 t 递减,因为行人对目标兴趣会随着时间推移而减少。

总效应:
综上所述,排斥和吸引对行人行为的影响由式给出


社会力模型定义:

图示:

增加了一个波动项,它考虑了行为的随机变化。

相关代码:
参考代码:
foreach(Agent agent in Agents){if (agent.IsActivity == true){Vector2 self_Force = Get_Self_Force(agent);Vector2 other_Force = Get_OtherAgents_Force(agent);Vector2 obstacle_Force = Get_Obstacle_Force(agent);Vector2 Sum = self_Force + other_Force + obstacle_Force;Vector2 Dex_speed = Sum / agent.Mass * Paramaters._ε;agent.Real_speed += Dex_speed * Paramaters._Scale;agent.Real_speed = GetRealSpeed(agent);agent.Position = new PointF(agent.Position.X + (agent.Real_speed.X * Paramaters.TimeStep),agent.Position.Y + (agent.Real_speed.Y * Paramaters.TimeStep));agent.Self = new RectangleF((agent.Position.X - agent.Radius), (agent.Position.Y - agent.Radius), agent.Radius * 2f, agent.Radius * 2f);}}
示例实现:
缺少吸引力部分
import numpy as np
import matplotlib.pyplot as plt# 定义行人类
class Pedestrian:def __init__(self, pos, vel, desired_direction, v0, tau):self.pos = np.array(pos, dtype=float) # 当前位置 (二维向量)self.vel = np.array(vel, dtype=float) # 当前速度 (二维向量)self.desired_direction = np.array(desired_direction, dtype=float) # 期望运动方向(单位向量)self.v0 = v0 # 期望速度self.tau = tau # 调整时间常数# 驱动力:行人向其期望速度加速
def driving_force(ped):desired_velocity = ped.v0 * ped.desired_directionreturn (desired_velocity - ped.vel) / ped.tau# 排斥力函数:简单采用指数衰减模型
def repulsive_force(ped_i, ped_j, A=2.0, B=0.3):r_ij = ped_i.pos - ped_j.posdistance = np.linalg.norm(r_ij)if distance == 0:return np.array([0.0, 0.0])# 指向 ped_i 的单位向量direction = r_ij / distance# 排斥力大小force_magnitude = A * np.exp(-distance / B)return force_magnitude * direction# 更新单个行人状态:合成所有作用力并更新速度与位置
def update_pedestrian(ped, pedestrians, dt):F_drive = driving_force(ped)F_rep_total = np.array([0.0, 0.0])# 计算来自其他行人的排斥力for other in pedestrians:if other is not ped:F_rep_total += repulsive_force(ped, other)# 总作用力F_total = F_drive + F_rep_total# 更新速度(简单欧拉积分)ped.vel += F_total * dt# 更新位置ped.pos += ped.vel * dt# 主函数:初始化行人并进行简单模拟
def simulate(num_pedestrians=20, steps=500, dt=0.1):pedestrians = []# 随机生成行人初始状态for _ in range(num_pedestrians):pos = np.random.rand(2) * 10 # 在 10x10 区域内随机位置vel = np.zeros(2)# 设定所有行人均朝右运动desired_direction = np.array([1.0, 0.0])v0 = 1.3 # 期望速度tau = 0.5 # 调整时间常数pedestrians.append(Pedestrian(pos, vel, desired_direction, v0, tau))# 用于存储轨迹便于后续绘图trajectories = [ [ped.pos.copy()] for ped in pedestrians ]for _ in range(steps):# 更新每个行人的状态for ped in pedestrians:update_pedestrian(ped, pedestrians, dt)# 保存轨迹数据for i, ped in enumerate(pedestrians):trajectories[i].append(ped.pos.copy())# 绘制所有行人的轨迹plt.figure(figsize=(8, 8))for traj in trajectories:traj = np.array(traj)plt.plot(traj[:, 0], traj[:, 1])plt.scatter(traj[0, 0], traj[0, 1], c='green', marker='o') # 起点plt.scatter(traj[-1, 0], traj[-1, 1], c='red', marker='x') # 终点plt.title("社会力模型下行人运动轨迹")plt.xlabel("X 位置")plt.ylabel("Y 位置")plt.grid(True)plt.show()if __name__ == "__main__":simulate()

相关文章:
社会力模型:Social force model for pedestrian dynamics
Social Force Model——社会力模型-CSDN博客 简介: 时间:1995 期刊:《Physical Review E》 作者:Dirk Helbing and Peter Molnar 摘要: 提出一种描述行人运动的“社会力模型”。认为行人的运动可看作是受到一系列…...
机器学习数学通关指南
✨ 写在前面 💡 在代码的世界里沉浸了十余载,我一直自诩逻辑思维敏捷,编程能力不俗。然而,当我初次接触 DeepSeek-R1 并领略其清晰、系统的思考过程时,我不禁为之震撼。那一刻,我深刻意识到:在A…...
【Mac】2025-MacOS系统下常用的开发环境配置
早期版本的一个环境搭建参考 1、brew Mac自带终端运行: /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" Installation successful!成功后运行三行命令后更新环境(xxx是mac的username&a…...
# C# 中堆(Heap)与栈(Stack)的区别
在 C# 中,堆和栈是两种不同的内存分配机制,它们在存储位置、生命周期、性能和用途上存在显著差异。理解堆和栈的区别对于优化代码性能和内存管理至关重要。 1. 栈(Stack) 1.1 定义 栈是一种后进先出(LIFO࿰…...
ubuntu离线安装nvidia-container-runtime
参考文章 ubuntu系统docker20.4版本安装nvidia-container-runtime3.11.0-1版本(离线安装nvidia-docker) - jokerMM - 博客园 https://zhuanlan.zhihu.com/p/15194336245 一、软件地址 Index of /nvidia-docker/libnvidia-container/stable/ 从上述地地址——进入对应系统—…...
用Python+Flask打造可视化武侠人物关系图生成器:从零到一的实战全记录
用PythonFlask打造可视化武侠人物关系图生成器:从零到一的实战全记录 一、缘起:一个程序小白的奇妙探索之旅 作为一个接触Python仅13天的编程萌新,我曾以为开发一个完整的应用是遥不可及的事情。但在DeepSeek的帮助下,我竟用短短…...
学习笔记-DeepSeek在开源第四天发布DualPipe和EPLB两项技术
在AI模型训练的进程中,优化并行策略对于提升训练效率和资源利用率至关重要。DeepSeek在开源周第四天发布的DualPipe和EPLB两项技术,为V3/R1训练场景下的并行优化提供了创新解决方案。 DualPipe:双向管道并行算法 技术原理: Dua…...
C++入门基础知识1
今天,我们正式来学习C,由于C是在C的基础之上,容纳进去了面向对象编程思想,并增加了许多有用的库,以及编程范式等。熟悉C语言之后,对C学习有一定的帮助。 现在我们这篇主要是: 1. 补充C语言语法…...
神经网络AI原理回顾
长期记忆存储在大模型的参数权重中,不经过推理和编码无法读取,且必须依赖输入的提示,因为大模型不会无缘无故的自言自语,毕竟输入层是它唯一 与外界交互的窗口。 目前个性化大模型的局限就是训练成本过高,除非使用RAG&…...
PPT 小黑第38套
对应大猫40 幻灯片母板-最后一页-重命名为奇数页 奇偶页-点中标题-形状格式-形状填充-青色 最后一页页码左对齐 更换幻灯片背景:设计-设置背景格式-图片填充 【开始】-段落居中,对齐文本-中部对齐,排列-对齐-底端,-再水平居中…...
主时钟与虚拟时钟约束
1、主时钟约束 1.1、主时钟约束语法: create_clock -name< clock_name > -period <period> -waveform{ <rise_time> <fall_time> } [get_ports< port_name >] 说明: name 之后的<clock_name> 是clk 的name&a…...
K8S学习之基础六:k8s中pod亲和性
Pod节点亲和性和反亲和性 podaffinity:pod节点亲和性指的是pod会被调度到更趋近与哪个pod或哪类pod。 podunaffinity:pod节点反亲和性指的是pod会被调度到远离哪个pod或哪类pod 1. Pod节点亲和性 requiredDuringSchedulingIgnoredDuringExecution&am…...
如何通过rust实现自己的web登录图片验证码
在进行web系统开发时,为保障系统登录安全,登录页面中的验证码必不可少。在java中,我们可以利用相应的2D图像库快速生成图形验证码,而对于rust,我们没有合适的标准库进行图像验证码的生成。今天,我们通过使用…...
盛京开源社区加入 GitCode,书写东北开源生态新篇章
在数字化转型与开源技术蓬勃发展的浪潮下,开源社区已成为推动技术创新的核心力量。盛京开源社区(SJOSC)作为沈阳地区的开源交流平台,始终致力于连接开发者、企业及高校,构建区域技术生态圈。 现在,盛京开源…...
QKV 注意力机制在Transformer架构中的作用,和卷积在卷积神经网络中的地位,有哪些相似之处?
QKV 注意力机制在Transformer架构中的作用,和卷积在卷积神经网络中的地位,有哪些相似之处? QKV(Query-Key-Value)注意力机制在Transformer架构和卷积在卷积神经网络(CNN)中都起着核心作用&…...
高效与高并发API开发:使用FastAPI与Redis实现请求限制与速率控制
高效与高并发API开发:使用FastAPI与Redis实现请求限制与速率控制 📚 目录 API速率限制的基本概念Redis实现分布式速率限制防止DDoS攻击的常见策略基于IP或用户身份的访问频率控制 1. API速率限制的基本概念 API速率限制(Rate Limiting&…...
Centos7源码编译安装Sqlite最新版本
下载源码 https://www.sqlite.org/download.html 复制下载链接,然后用 wget 下载 wget https://www.sqlite.org/2025/sqlite-autoconf-3490100.tar.gz 解压缩编译安装 tar -zxf sqlite-autoconf-3490100.tar.gz cd sqlite-autoconf-3490100 ./configure --prefi…...
mybatis热点面试题第五弹
1. MyBatis与Hibernate的区别 答案: MyBatis: 不完全是一个ORM框架,需要手动编写SQL语句,灵活性高,适合对数据库操作有高性能要求的场景。缺点是无法做到数据库无关性,如果需要支持多种数据库,…...
KTransformers部署 使671B DeepSeek R1成「办公桌标配」
671B DeepSeek R1成「办公桌标配」 1. 什么是KTransformersDeepSeek 版本技术破局密钥:强稀疏化MoE模型需要全新的私有化架构设计趋境AI大模型推理软硬一体工作站——让大模型推理门槛降低10倍 2. 准备环境3 环境准备与资源下载4 安装过程1. linux环境搭建2. window…...
sql-labs less5-8
Less-5 双注入 基于单引号的字符型注入,涉及二次查询注入 Less-6 双注入 基于双引号的字符型注入,涉及二次查询注入 Less-7 字符型注入 基于单引号变形注入之导入文件 Less-8 布尔盲注 不返回任何错误信息,通过布尔逻辑判断 以下…...
XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...
