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

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战&#xff1a;腾讯云IM群组成员管理&#xff08;增删改查&#xff09; 一、前言 在社交类App开发中&#xff0c;群组成员管理是核心功能之一。本文将基于UniApp框架&#xff0c;结合腾讯云IM SDK&#xff0c;详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持&#xff0c;不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词

Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵&#xff0c;其中每行&#xff0c;每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid&#xff0c;其中有多少个 3 3 的 “幻方” 子矩阵&am…...

LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》

这段 Python 代码是一个完整的 知识库数据库操作模块&#xff0c;用于对本地知识库系统中的知识库进行增删改查&#xff08;CRUD&#xff09;操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 &#x1f4d8; 一、整体功能概述 该模块…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)

引言 在人工智能飞速发展的今天&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;已成为技术领域的焦点。从智能写作到代码生成&#xff0c;LLM 的应用场景不断扩展&#xff0c;深刻改变了我们的工作和生活方式。然而&#xff0c;理解这些模型的内部…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.

ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #&#xff1a…...