当前位置: 首页 > news >正文

社会力模型:Social force model for pedestrian dynamics

Social Force Model——社会力模型-CSDN博客

简介:

时间:1995

期刊:《Physical Review E》

作者:Dirk Helbing and P´eter Moln´ar

摘要:

提出一种描述行人运动的“社会力模型”。认为行人的运动可看作是受到一系列“社会力”的驱动,这些力反映了行人内在的动机,而非直接由外部物理接触产生。

模型主要包括以下几个方面:

加速项:行人以一定的期望速度前进,当实际速度偏离目标速度时,会有一个加速/减速过程使其趋向期望速度。

相互排斥力:行人与其他行人或障碍物之间保持一定距离,这种排斥作用通过一个随距离呈指数衰减的势能函数来描述。

吸引力:在某些情境下,行人会受到其他个体或物体的吸引,例如朋友、街头表演者或橱窗展示。

该模型将上述各项“力”相加,构成非线性耦合的 Langevin 方程,从而模拟行人群体的自组织现象,如动态车道形成以及通过狭窄通道时的往复交替现象。

创新点:

①首次将“社会力”这一概念引入行人运动的建模中

②多项力的综合考虑

③非线性耦合 Langevin 方程模拟随机性带来的个体差异和突发现象

④扩展性与普适性

相关工作:

加速项:

他/她想要尽可能舒适地到达某个目的地

 \overrightarrow{r_{\alpha }}(t):行人实际位置

\overrightarrow{r}_{\alpha }^{k}:行人的目标位置

如果行人的运动不受干扰,他/她将以一定的期望速度v_{\alpha }^{0}向期望方向\overrightarrow{e_{\alpha }}(t)行走

 \overrightarrow{v_{\alpha }}(t):实际速度偏差

\overrightarrow{v_{\alpha }^{0}}(t):期望速度

\tau _{\alpha }:松弛时间

相互排斥力:

行人与行人距离:

他/她与其他行人保持一定的距离

V_{\alpha \beta }(b):行人\alpha和行人\beta之间由于距离b产生的排斥势能

\overrightarrow{r_{\alpha \beta }}:行人\alpha和行人\beta相对位置 

原因:行人需要空间来进行下一步,而其他行人会考虑到这一点

行人与建筑距离: 

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

U_{\alpha B }(\left \| \overrightarrow{r}_{\alpha B} \right \|): 行人\alpha和障碍物 B 之间由于距离\left \| \overrightarrow{r}_{\alpha B} \right \|而产生的排斥势能

\overrightarrow{r_{\alpha B }}:行人\alpha和障碍物 B 相对位置 

吸引力:

行人有时会被其他人(朋友、街头艺术家等)或物品(如橱窗展示)吸引。

 (W_{\alpha i}(\left \| \overrightarrow{r_{\alpha i}} \right \|),t):函数,表示行人\alpha对目标 i 的吸引力势能,这个势能随时间 t 和行人与目标之间的距离\left \| \overrightarrow{r}_{\alpha i} \right \|变化

(f_{\alpha i}(\left \| \overrightarrow{r_{\alpha i}} \right \|),t):行人\alpha由于目标 i 存在而感受到的吸引力

\overrightarrow{r_{\alpha i }}:行人\alpha和目标 i 之间的相对位置向量

与排斥力不同,吸引力\left \| \overrightarrow{f_{\alpha i}} \right \|通常随着时间 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&#xff0…...

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、主时钟约束语法&#xff1a; create_clock -name< clock_name > -period <period> -waveform{ <rise_time> <fall_time> } [get_ports< port_name >] 说明&#xff1a; name 之后的<clock_name> 是clk 的name&a…...

K8S学习之基础六:k8s中pod亲和性

Pod节点亲和性和反亲和性 podaffinity&#xff1a;pod节点亲和性指的是pod会被调度到更趋近与哪个pod或哪类pod。 podunaffinity&#xff1a;pod节点反亲和性指的是pod会被调度到远离哪个pod或哪类pod 1. Pod节点亲和性 requiredDuringSchedulingIgnoredDuringExecution&am…...

如何通过rust实现自己的web登录图片验证码

在进行web系统开发时&#xff0c;为保障系统登录安全&#xff0c;登录页面中的验证码必不可少。在java中&#xff0c;我们可以利用相应的2D图像库快速生成图形验证码&#xff0c;而对于rust&#xff0c;我们没有合适的标准库进行图像验证码的生成。今天&#xff0c;我们通过使用…...

盛京开源社区加入 GitCode,书写东北开源生态新篇章

在数字化转型与开源技术蓬勃发展的浪潮下&#xff0c;开源社区已成为推动技术创新的核心力量。盛京开源社区&#xff08;SJOSC&#xff09;作为沈阳地区的开源交流平台&#xff0c;始终致力于连接开发者、企业及高校&#xff0c;构建区域技术生态圈。 现在&#xff0c;盛京开源…...

QKV 注意力机制在Transformer架构中的作用,和卷积在卷积神经网络中的地位,有哪些相似之处?

QKV 注意力机制在Transformer架构中的作用&#xff0c;和卷积在卷积神经网络中的地位&#xff0c;有哪些相似之处&#xff1f; QKV&#xff08;Query-Key-Value&#xff09;注意力机制在Transformer架构和卷积在卷积神经网络&#xff08;CNN&#xff09;中都起着核心作用&…...

高效与高并发API开发:使用FastAPI与Redis实现请求限制与速率控制

高效与高并发API开发&#xff1a;使用FastAPI与Redis实现请求限制与速率控制 &#x1f4da; 目录 API速率限制的基本概念Redis实现分布式速率限制防止DDoS攻击的常见策略基于IP或用户身份的访问频率控制 1. API速率限制的基本概念 API速率限制&#xff08;Rate Limiting&…...

Centos7源码编译安装Sqlite最新版本

下载源码 https://www.sqlite.org/download.html 复制下载链接&#xff0c;然后用 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的区别 答案&#xff1a; MyBatis&#xff1a; 不完全是一个ORM框架&#xff0c;需要手动编写SQL语句&#xff0c;灵活性高&#xff0c;适合对数据库操作有高性能要求的场景。缺点是无法做到数据库无关性&#xff0c;如果需要支持多种数据库&#xff0c…...

KTransformers部署 使671B DeepSeek R1成「办公桌标配」

671B DeepSeek R1成「办公桌标配」 1. 什么是KTransformersDeepSeek 版本技术破局密钥&#xff1a;强稀疏化MoE模型需要全新的私有化架构设计趋境AI大模型推理软硬一体工作站——让大模型推理门槛降低10倍 2. 准备环境3 环境准备与资源下载4 安装过程1. linux环境搭建2. window…...

sql-labs less5-8

Less-5 双注入 基于单引号的字符型注入&#xff0c;涉及二次查询注入 Less-6 双注入 基于双引号的字符型注入&#xff0c;涉及二次查询注入 Less-7 字符型注入 基于单引号变形注入之导入文件 Less-8 布尔盲注 不返回任何错误信息&#xff0c;通过布尔逻辑判断 以下…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

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&#xff1a;Java Virtual Machine 定义&#xff1a;Java虚拟机&#xff0c;Java二进制字节码的运行环境好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收的功能数组下标越界检查&#xff08;会抛异常&#xff0c;不会覆盖到其他代码…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils&#xff1a; ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类&#xff0c;封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz&#xff0c;先构建任务的 JobD…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

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服务&#xff1a; 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 -…...