基于ABM的社会力模型(Social Force)拆解

1.背景

在前文已经有所提及,Agent-Based Modeling(简称ABM,代理基础建模)通过构建具体的模型以模拟个体代理及其组成的群体之间的互动,进而研究整体系统的行为与演化。而其中较为典型的例子便是通过特定环境条件下的流体模拟(人流车流等)而对应空间性质进行参考评估,如城市空间的公共性、商业性、可达性等一系列性质量化研究。

AgentMap:https://github.com/noncomputable/AgentMaps/tree/master

 如上述项目就导入了地图及建筑等数据形成了相应的环境模型,并实现了人流、车流、污染源等的模拟。该项目由JavaScript语言编写,源代码包含载入环境,预设主体,输出图像,项目测试等文件,考虑了用户操作界面及交互,一定程度上实现了对道路疏通性、公共性、污染防治效果等领域的的模拟运用,在城市尺度的空间环境分析研究上仍具有发展潜力。

而同样基于ABM开发而成的Social Force项目则是聚焦代理点在抽象空间环境下相互作用的运动过程,相对于前者Social Force项目研究的维度更微观具体,同时该项目完整地纳入了障碍、吸引、排斥、边界等基本的作用力条件,基于ABM的研究更为详实科学,基础的底层框架使得项目整体呈现出更强的拓展性。

2.框架拆解

经笔者的拆解分析,可以看出项目整体构建了一个相对简洁且清晰的文件框架。主体由配置文件——项目入口——模拟器构成,通过相应完整的参数调配与赋值声明,能够实现任意数量代理群体在相应环境条件下的运动模拟。

项目拆解

3.重构及运行生成

3.1 初始化环境 

模拟一组相遇并绕过障碍的运动轨迹:

from pathlib import Path
import numpy as np
import pysocialforce as psf


if __name__ == "__main__":
initial_state = np.array(
         [
             [0.0, 10, -0.5, -0.5, 0.0, 0.0],
             [0.5, 10, -0.5, -0.5, 0.5, 0.0],
             [0.0, 0.0, 0.0, 0.5, 1.0, 10.0],
         ]
     )
     # social groups informoation is represented as lists of indices of the state array
     groups = [[1, 0], [2]]
     obs = [[1, 2, 7, 8]]
     s = psf.Simulator(
        initial_state,
        groups=groups,
        obstacles=obs,
        config_file=Path(__file__).resolve().parent.joinpath("example.toml"),
     )
     # update 50 steps
     s.step(50)
     # 使用 with 语句创建了一个 SceneVisualizer 实例 sv,并在代码块结束时自动关闭该实例
     with psf.plot.SceneVisualizer(s, "images/exmaple") as sv:
        sv.animate()
运行结果

 

模拟一定数量群体往同一目标运动的进行轨迹:

from pathlib import Path
import numpy as np
import pysocialforce as psf


if __name__ == "__main__":
    # initial states, each entry is the position, velocity and goal of a pedestrian in the form of (px, py, vx, vy, gx, gy)
    min_position = 0
    max_position = 3.0
    min_velocity = -0.5
    max_velocity = 1.5
    min_goal = 8
    max_goal = 10
    num_pedestrians = 100
    # 生成随机数据
    initial_state = np.random.uniform(
    [min_position, min_position, min_velocity, min_velocity, min_goal, min_goal],
    [max_position, max_position, max_velocity, max_velocity, max_goal, max_goal],
    size=(num_pedestrians, 6)
)

groups = None
obs = [[-1, -1, -3, 11], [5, 13, -3, 11]]
s = psf.Simulator(
        initial_state,
        groups=groups,
        obstacles=obs,
        config_file=Path(__file__).resolve().parent.joinpath("example.toml"),
    )
# update 50 steps
    s.step(50)
    # 使用 with 语句创建了一个 SceneVisualizer 实例 sv,并在代码块结束时自动关闭该实例
    with psf.plot.SceneVisualizer(s, "images/exmaple") as sv:
        sv.animate()

 

运行结果

可以看到代理点群体在相互作用下逐渐像目标区域趋近,在合理控制速度及位置的范围情况下,项目代理能够模拟近似人群运动的结果,抽象化的研究群体效应对具体空间的性能分析(公共性、疏散性、边界控制等)具有一定意义。

3.2 其他模拟结果
出入口模拟
过道模拟

  总体看来,项目在空间商业性分析、医疗建筑人流评估、景观路径等领域具有开发潜力,ABM作为一种空间分析维度能够进一步优化并完善设计,是一种更具实用价值的空间分析方法

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值