当前位置: 首页 > 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;通过布尔逻辑判断 以下…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验&#xff0c;以及大语言模型的分析能力&#xff0c;我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际&#xff0c;我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测&#xff0c;聊作存档。等到明…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

Java毕业设计:WML信息查询与后端信息发布系统开发

JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发&#xff0c;实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构&#xff0c;服务器端使用Java Servlet处理请求&#xff0c;数据库采用MySQL存储信息&#xff0…...

NPOI操作EXCEL文件 ——CAD C# 二次开发

缺点:dll.版本容易加载错误。CAD加载插件时&#xff0c;没有加载所有类库。插件运行过程中用到某个类库&#xff0c;会从CAD的安装目录找&#xff0c;找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库&#xff0c;就用插件程序加载进…...

Oracle11g安装包

Oracle 11g安装包 适用于windows系统&#xff0c;64位 下载路径 oracle 11g 安装包...

FFmpeg avformat_open_input函数分析

函数内部的总体流程如下&#xff1a; avformat_open_input 精简后的代码如下&#xff1a; int avformat_open_input(AVFormatContext **ps, const char *filename,ff_const59 AVInputFormat *fmt, AVDictionary **options) {AVFormatContext *s *ps;int i, ret 0;AVDictio…...