简单几步实现NaSch模型的Python仿真

简单几步实现NaSch模型的Python仿真

NaSch模型是对184号模型的推广,1992年Nagle和Schreckenberg提出了著名的NaSch模型,在这一模型中,时间、空间以及速度都被离散化,道路被划分为离散的格子(即元胞),每个元胞都是空的,或者被一辆车占据,每辆车的速度可以取1,2,…,Vmax ,Vmax 为最大速度。在时间步增加的过程中,模型按照如下规则进行演化。

1 加速

Vn —> min(Vn+1, Vmax),直观上的解释是若能加速则速度加一,反应了司机倾向于以尽可能大的速度行驶的特点。

2 减速

Vn —> min(Vn, Dn),以确保车辆不会与前车发生碰撞。

3 随机慢化

以随机概率p令Vn —> max(Vn-1,0),该规则用来体现驾驶人的行为差异,这样既可以反映随机加速行为,又可以反映减速过程中的过度反应行为。这一规则也是堵塞自发产生的至关重要因素。

4 位置更新

Xn —> Xn+Vn,车辆按照更新后的速度继续向前移动。

NaSch模型的Python实现

用python编写一个NaSch模型代码,并用Matplotlib可视化地绘制成图,并让图像随时间步的推移动态变化。

  • 老规矩,先调包,并创建一个图像
import matplotlib as mpl
import matplotlib.pyplot as plt
import random
# 创建图像
fig = plt.figure(figsize=(10,1))
  • 设置模型的参数,相当于一个遥控器,哪里不对点哪里~
# 模型参数设置
numofcell = 20     # 道路长度
numofcar = 12      # 空间中的车辆数
max_time = 100     # 设置最大时间步
max_speed = 5      # 允许的车辆最大速度
p_slowdown = 0.3   # 随机慢化概率
pause_time = 0.1   # 刷新时间(每一帧持续的时间)
cell_size = 15     # 元胞的大小
  • 定义一个函数来构建一维空间,空间的长度就是道路长度,相当于用一系列和X轴或Y轴平行的直线,绘制一排小网格,每个小网格的中心,相当于(i,0),其中,i=1,2,…,numofcell
# 函数:构建一维空间
def Plot_Space():
    for
  • 3
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值