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

  • 假设某辆车的当前速度是 v
  • 如果 前方可见范围内没车,下一秒车速提高到 v+1
  • 如果 前方有车,前车的距离为 d ,且 d < v ,则 下一秒车速降低到 d - 1
  • 每辆车会以概率 p 随机减速 v - 1

  Python代码如下:

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt def clip(x, path):
for i in range(len(x)):
if x[i] >= path:
x[i] %= path if __name__ == "__main__":
# 输出中文(黑体SinHei),仿宋(fangsong)
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False path = 5000 # 环形公路长度
n = 100 # 公路中的车辆数目
v0 = 50 # 车辆的初始速度
p = 0.3 # 随机减速概率
Times = 3000 # 模拟次数3000 np.random.seed(0) # 种子设为0 -> 生成的随机数都相同
x = np.random.rand(n)*path # 列表x生成100*5000个随机数
x.sort() # 对x升序排序
v = np.tile([v0], n).astype(float) # 将v0重复n次并转换为浮点型赋给数组v中的n个元素 plt.figure(figsize=(9, 7), facecolor='w') # 创建图像高9英寸宽7英寸,背景色:white = #FFFFFF
for t in range(Times): # 每一次是图中的一行数据
# 测试4行数据
# if t not in [100, 150, 175, 1000]:
# continue
plt.scatter(x, [t]*n, s=1, c='k', alpha=0.05) # 横轴x,纵轴t*n(t从0到2999,n=100)
for i in range(n): # 对于每一行数据
# 本车当前速度为v
# 如果 前方有车 && 前车的距离d < 车速v:下一秒车速 = d-1
# 如果 没车:加速到 v+1
# 每辆车以概率p随机减速v-1
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:
if np.random.rand() > p:
v[i] += 1
else:
v[i] -= 1
else:
v[i] = d - 1
v = v.clip(0, 150) # 保证车速是正向的,在0-150之间
x += v # 位移就是一秒钟时间的速度,速度v之和就是位移x
clip(x, path)
plt.xlim(0, path) # x的取值范围x limit=0-5000
plt.ylim(0, Times)
plt.xlabel('车辆位置', fontsize=14)
plt.ylabel('模拟时间', fontsize=14)
plt.title('环形公路车辆堵车模拟', fontsize=18)
plt.tight_layout(pad=2) # pad越小,坐标轴越靠边
# plt.savefig('环形公路车辆堵车模拟.png')
plt.show()

    结果:

  

    以上为本人在b站听了邹博老师陆家嘴学堂视频课之后的结果。

  

公路堵车概率模型Python(Nagel-Schreckenberg交通流模型)的更多相关文章

  1. python dpkt解析ssl流

    用法:python extract_tls_flow.py -vr  white_pcap/11/2018-01-10_13-05-09_2.pcap  -o pcap_ssl_flow.txt  & ...

  2. python+ mysql存储二进制流的方式

    很多时候我们为了管理方便会把依稀很小的图片存入数据库,有人可能会想这样会不会对数据库造成很大的压力,其实大家可以不用担心,因为我说过了,是存储一些很小的图片,几K的,没有问题的! 再者,在这里我们是想 ...

  3. Python web前端 04 盒子模型

    Python web前端 04 盒子模型 盒子模型是由内容(content).内边距(padding).外边距(margin).边框(border)组成的 一.边框 border #border 边框 ...

  4. JavaScript的事件、DOM模型、事件流模型以及内置对象详解(三)

    JS中的事件 JS中的事件分类 1.鼠标事件: click/dbclick/mouseover/mouseout 2.HTML事件: onload/onunload/onsubmit/onresize ...

  5. JS的事件绑定、事件流模型

    .t1 { background-color: #ff8080; width: 1100px; height: 40px } 一.JS事件 (一)JS事件分类 1.鼠标事件:click/dbclick ...

  6. 基于Python的信用评分卡模型分析(二)

    上一篇文章基于Python的信用评分卡模型分析(一)已经介绍了信用评分卡模型的数据预处理.探索性数据分析.变量分箱和变量选择等.接下来我们将继续讨论信用评分卡的模型实现和分析,信用评分的方法和自动评分 ...

  7. java web应用调用python深度学习训练的模型

    之前参见了中国软件杯大赛,在大赛中用到了深度学习的相关算法,也训练了一些简单的模型.项目线上平台是用java编写的web应用程序,而深度学习使用的是python语言,这就涉及到了在java代码中调用p ...

  8. 控制论模型&心流模型&波模型

    1.控制论模型 这是对设定的目标,通过多次输入和输出,反馈调节,最终达成目标的方法.广泛运用于自然科学与社会科学中.反馈的周期长短决定了调节精度的大小以及达到目标的速度.反馈结果与目标背离的立即纠正, ...

  9. 深入理解JS的事件绑定、事件流模型

     一.JS事件 (一)JS事件分类 1.鼠标事件: click/dbclick/mouseover/mouseout 2.HTML事件: onload/onunload/onsubmit/onresi ...

  10. JS事件流模型

    JS事件流模型 事件捕获Event Capturing是一种从上而下的传播方式,以click事件为例,其会从最外层根节向内传播到达点击的节点,为从最外层节点逐渐向内传播直到目标节点的方式. 事件冒泡E ...

随机推荐

  1. Windows7卡在正在关机

    据我的分析,Windows系统卡在正在关机的原因很大可能性是破解过系统主题.解决方法就是还原成主题未被破解时候的状态.但是这种情况是随机性的,但是可以确定的是,只要是破解过系统主题,都有一定概率关不了 ...

  2. 实现一个CRDT工具库——PSet

    PSet 这段代码实现了一个PSet,即Positive Set,是GSet的扩展.PSet是一个集合,支持添加和删除元素,但是不支持重复元素.PSet的实现是通过两个GSet来实现的,一个GSet存 ...

  3. 【ACM算法竞赛日常训练】DAY4题解与分析【树】【子序列】| 组合数学 | 动态规划

    DAY4共2题: 树(组合数学) 子序列(dp,数学) 作者:Eriktse 简介:19岁,211计算机在读,现役ACM银牌选手力争以通俗易懂的方式讲解算法!️欢迎关注我,一起交流C++/Python ...

  4. 修复Joe主题静态资源为国内地址

    背景 Typecho 是由 type 和 echo 两个词合成的,来自于开发团队的头脑风暴. Type,有打字的意思,博客这个东西,正是一个让我们通过打字,在网络上表达自己的平台.Echo,意思是回声 ...

  5. python之os常用方法

              1.os模块的部分常用属性(Windows系统) os模块常用属性 相应的作用 os.name 返回你电脑的操作系统(Windows系统下会返回'nt') os.curdir 指代 ...

  6. .NET Exceptionless 本地部署踩坑记录

    仅已此文记录 Exceptionless 本地部署所遇到的问题 1.安装ElasticSearch文本 执行elasticsearch目录中的elasticsearch.bat 没有执行成功. 使用命 ...

  7. 帝国cms随机sql语句,mysql高效的随机查询

    select * from AppleStorewhere rand()<0.015limit 100;

  8. Arrays.asList() 示例

    1 package Test.others; 2 3 import java.util.Arrays; 4 import java.util.Collections; 5 import java.ut ...

  9. Rails 中的布局和渲染

    Templates, Partials, and Layouts 在 Rails 中,视图是用于呈现 HTML.XML.JSON 等响应的模板.Rails 的视图系统支持模板.局部模板和布局模板,它们 ...

  10. C# 禁用窗口激活

    如果界面点击时,不想让窗口激活,可以按如下操作: 1 public MainWindow() 2 { 3 InitializeComponent(); 4 SourceInitialized += O ...