路面上有n辆车,以不同的速度向前行驶, 模拟堵车问题。有以下假设:

1.假设某辆车的当前速度是v。
2.若前方可见范围内没车,则它在下一秒的车速提高到v+1,直到达到规定的最高限速。
3.若前方有车,前车的距离为d,且d < v,则它下 一秒的车速降低到d-1 。
4.每辆车会以概率p随机减速v-1。
#好了这是别人家的代码:

import numpy as np
from matplotlib.font_manager import FontProperties
import matplotlib.pyplot as plt# 对车辆的位移进行限制,当大于水平的公路长度时,则认为是拐外后的位移
def clip(x, path):for i in range(len(x)):if x[i] >= path:x[i] %= pathif __name__ == "__main__":# 缺省情况下,matplotlib是无法显示中文的,主要原因是没有指定中文字体(文件)# 在python代码中指定字体(只是其中一种解决方法)# 定义字体font = FontProperties(fname=r'c:\windows\fonts\simsun.ttc', size=20)'''初始化定义'''path = 5000  # 环形公路的长度n = 100  # 公路中的车辆数目v0 = 50  # 车辆的初始速度p = 0.3  # 随机减速概率Times = 1000  # 模拟时间'''模拟车辆的位移和速度'''np.random.seed(0)# 模拟100辆车辆的位置x = np.random.rand(n) * path# 车辆位移进行排序# np.sort()与ndarray.sort()都可以,但有区别:np.sort()不改变输入;ndarray.sort()本地处理,不占用空间,但改变输入x.sort()# 将100个车辆的速度定义为50,并设为float类型数据# tile共有2个参数,A指待输入数组,reps则决定A重复的次数。整个函数用于重复数组A来构建新的数组,并设为float类型数据v = np.tile([v0], n).astype(np.float)'''画布大小'''plt.figure(figsize=(10, 8), facecolor='w')'''模拟在时间范围内的堵车情况'''for t in range(Times):# 绘图 x:车辆位置 [t]*n:时间plt.scatter(x, [t] * n, s=1, c='b', alpha=0.05)'''依次判断100辆车的速度和位移情况'''for i in range(n):# 计算前后车辆的距离if x[(i + 1) % n] > x[i]:d = x[(i + 1) % n] - x[i]else:d = path - x[i] + x[(i + 1) % n]'''判断此刻的速度和与前车的距离大小'''if v[i] < d:# 若前方可见范围内没车,则它在下一秒的车速提高到v+1,直到达到规定的最高限速。同时,每辆车会以概率p随机减速v-1。if np.random.rand() > p:v[i] += 1else:v[i] -= 1else:# 若前方有车,前车的距离为d,且d < v,则它下 一秒的车速降低到d-1 。v[i] = d - 1# 限制速度,v<0,则将v定义为0;v>150,则将v定义为150v = v.clip(0, 150)# 车辆的位移在增加,车在往前开x += v# 调用clipclip(x, path)# 坐标轴范围调整plt.xlim(0, path)plt.ylim(0, Times)# 标签,显示设置字体plt.xlabel('车辆位置', fontsize=16, fontproperties=font)plt.ylabel('模拟时间', fontsize=16, fontproperties=font)plt.title('环形公路车辆堵车模拟', fontsize=20,fontproperties=font)'''自动调整子图参数,使之填充整个图像区域'''plt.tight_layout(pad=2)'''画图'''plt.show()

运行结果:

这是我的代码:

import numpy as np
import matplotlib.pyplot as plt
#设置初始速度为32km/h(10m/s)
v_first=10
#设置最高速度(14m/s)初始速度为50km/h
v_max=14
#设置有N辆车
num_car=100
#就是路程为5000m
path=5000
#设置刚开始的时候汽车的位置
x = np.random.rand(num_car) * path
x_1=sorted(x)
#print(x_1)
#随机0.4概率减速
p=0.4
def car(d):x=np.random.rand()if 0<=x<=p:v_car=v_first-1else:v_car=v_firstif d<v_car:v_car=d-1if v_car>v_max:v_car=v_maxreturn v_car
#这个是模拟一秒内所有车位置的变化
z=[]
times=0
while True:times+=0.1for i in range(num_car):d=0#表名某辆车和前一个车的位置if i==num_car-1:d=path-x[i]+x[0]else:car_s1 = x[i]car_s2 = x[i + 1]d_first=car_s2-car_s1#表名某辆车的速度car_v1=car(d)if x[i]+car_v1*times>path:x[i]=x[i]+car_v1*times-pathelse:x[i] = x[i] + car_v1 * timesprint(x)z.append(x)plt.scatter(x, [times] * num_car, s=1, c='k', alpha=0.5)if times>10:break
print(z)
plt.tight_layout(pad=2)
plt.show()

运行结果:

##这就是卖家秀和买家秀么,QAQ
这里引用了一个大佬博客

9-Nagel-Schreckenberg交通流模型-公路堵车概率模型相关推荐

  1. 论文推荐 | 综述:自动驾驶背景下的交通流模型研究

    导读 题目:<Automated vehicle-involved traffic flow studies: A survey of assumptions, models, speculat ...

  2. 交通流模型仿真(Traffic flow)

    交通流模型,主要包括:宏观模型.微观模型.混合模型 交通模拟的一个 重要部分:是在不同的细节水平上描述车辆的运动.交通流建模与仿真的早期研究可以追溯到20世纪50年代,当时分别提出了宏观交通模型.微观 ...

  3. [Python机器学习]Nagel-Schreckenberg(交通流)模型

    据 Nagel-Schreckenberg 模型,车辆的运动满足以下规则: 1.   假设当前速度是 v ,和前一辆车的距离为d. 2.   如果 d > v,它在下一秒的速度会提高到 v + ...

  4. PanoSim仿真模型--交通流模型

    5.2.1 正常交通流模型 PanoSim 内置仿真正常驾驶场景的随机交通,称之为正常交通流模型(或称之为随机交通模型).随机交通流模型的参数设置,请参看 4.2.1.3 Traffic Tools ...

  5. 【元胞自动机】元胞自动机双车道交通流模型含靠右行驶【含Matlab源码 231期】

    ⛄一.元胞自动机简介 1 元胞自动机发展历程 最初的元胞自动机是由冯 · 诺依曼在 1950 年代为模拟生物 细胞的自我复制而提出的. 但是并未受到学术界重视. 1970 年, 剑桥大学的约翰 · 何 ...

  6. 【元胞自动机】基于matlab元胞自动机双车道交通流模型含靠右行驶【含Matlab源码 231期】

    ⛄一.元胞自动机简介 1 元胞自动机发展历程 最初的元胞自动机是由冯 · 诺依曼在 1950 年代为模拟生物 细胞的自我复制而提出的. 但是并未受到学术界重视. 1970 年, 剑桥大学的约翰 · 何 ...

  7. 【元胞自动机】基于元胞自动机模拟双车道交通流模型含靠右行驶matlab源码

    元胞自动机的初步理解 对元胞自动机的初步认识\ 元胞自动机(CA)是一种用来仿真局部规则和局部联系的方法.典型的元\ 胞自动机是定义在网格上的,每一个点上的网格代表一个元胞与一种有限的状\ 态.变化规 ...

  8. 环形公路堵车概率模型

    公路堵车概率模型 Nagel-Schreckenberg交通流模型 路面上有N辆车,以不同的速度向前行驶, 模拟堵车问题. 有以下假设: 假设某辆车的当前速度是v. 若前方可见范围内没车,则它在下一秒 ...

  9. 元胞自动机交通流模型c++_MATLAB——含出入匝道的交织区快速路元胞自动机模型...

    输出效果 本模型为包含一条变速车道和出入匝道的快速路交织区仿真模型. 车道编号 换道规则和不含出入匝道的路段的区别在于换道分为自由换道和强制换道.车辆在不同区域有不同换道状态,而车辆本身又有出匝道和直 ...

最新文章

  1. js 时间戳转为时间
  2. .mvn 需要放git上吗_下巴反复长痘,饮食上需要忌口吗?
  3. python中开关_pyq中的开关按钮
  4. 5分钟搞定AlertManager接入短信、语音等10+种通知渠道
  5. 命令逐行显示_Linux命令和Shell脚本学习随笔3
  6. 关于ElasticSearch处理过滤条件
  7. 性能测试、 障碍条件和回滚
  8. 万份销量,五星好评!这门Python神作刷爆朋友圈!
  9. KVM虚拟化教程(超详细)
  10. 【报告分享】 百度2021国潮骄傲搜索大数据报告-百度x人民网(附下载)
  11. 基于全局对比度的显著性区域检测
  12. 淘宝为何总是有骗子账号屡禁不止,气愤之下只能发帖告诫了
  13. 一文搞懂 | Linux 同步管理(上)
  14. 写给即将入行的程序员的一封信
  15. AQS——CLH队列维护方法详解
  16. 最全面鸿蒙系统开发的相关资料收录
  17. C语言红楼梦人物分析系统
  18. c语言软件开发心得:
  19. Laravel教程 八:queryScope 和 setAttribute
  20. 利用jmail qq邮箱发邮件 报错 解决方法

热门文章

  1. 学CNC编程,首先要从哪里开始?
  2. ADB命令连接逍遥模拟器并查看安卓日志
  3. Python爬虫入门教程 19-100 51CTO学院IT技术课程抓取
  4. 微信小程序基础(一) 文件结构配置项
  5. keil4 #pragma anon_unions
  6. 如何零基础创建自己的微信小程序
  7. mumu模拟器崩坏3分辨率_网易mumu模拟器设置崩坏3不卡的方法
  8. Unity开发手游常用适配分辨率
  9. 从头开始学习->JVM(九):垃圾收集(上)
  10. 第三方PORTAL认证系统对接华为AC6605实现无线WiFi微信认证、短信认证和访客认证