日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Nagel-Schreckenberg(交通流)模型——python实现

發布時間:2023/12/20 python 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Nagel-Schreckenberg(交通流)模型——python实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文詳細代碼見我的github倉庫 AI_ML_DataAnalysis_DataVisualization_Classic-Examples

Nagel-Schreckenberg模型是高速公路交通模擬的理論模型。該模型由德國物理學家Kai Nagel和Michael Schreckenberg于20世紀90年代初開發。它本質上是用于道路交通流量的簡單元胞自動機模型,其可以再現交通擁堵,即,當道路擁擠時顯示平均車速減慢。
現在模擬一個場景,在一個環形公路上,所有車圍成一個圓,每輛車有一定的概率減速.當后面的車的車速比它前面相鄰的車車速快時,即將產生追及問題時,后面的車就必須減速,這樣就會導致各種不同情況的擁堵.
模擬代碼如下:
減速概率p,車輛初速度v都可以手動改變,以測試不同情況
ns.ttc是一個字庫,需要導入
當減速概率p為0.5時:

# -*- coding: utf-8 -*-from matplotlib.font_manager import * import matplotlib.pyplot as plt import numpy as npmyfont = FontProperties(fname='ns.ttc') matplotlib.rcParams['axes.unicode_minus'] = False np.random.seed(0)def Run(path=5000, n=100, v0=60, ltv=120, p=0.3, times=3000):'''path = 5000.0 # 道路長度n = 100 # 車輛數目v0 = 60 # 初始速度ltv = 120 # 最大限速p = 0.3 # 減速概率times = 3000 # 模擬的時刻數目'''# x保存每輛車在道路上的位置,隨機初始化x = np.random.rand(n) * pathx.sort()# v保存每輛車的速度,初速度相同v = np.ones(n) * v0plt.figure(figsize=(5, 4), facecolor='w')# 模擬每個時刻for t in range(times):plt.scatter(x, [t] * n, s=1, c='k', alpha=0.05)# 模擬每輛車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:if np.random.rand() > p:v[i] += 1else:v[i] -= 1else:v[i] = d - 1# 對速度進行限制v = v.clip(0, ltv)# 一秒后,車輛的位置發生了變化x += v# 注意是環形車道x = x % path# 展示plt.xlim(0, path)plt.ylim(0, times)plt.xlabel(u'車輛位置', fontproperties=myfont)plt.ylabel(u'模擬時間', fontproperties=myfont)plt.title(u'交通模擬(車道長度%d,車輛數%d,初速度%s,減速概率%s)' % (path, n, v0, p), fontproperties=myfont)# plt.tight_layout(pad=2)plt.show()if __name__ == '__main__':# Run(v0=0)# Run(v0=20)# Run(v0=40)# Run(v0=60)# Run(p=0.0)# Run(p=0.1)# Run(p=0.3)Run(p=0.5) # Run(p=0.8) # Run(p=1.0)

運行結果:

圖中線條越密集的地方代表越有可能發生堵車的情況

當p=0時,也就是不減速,你會發現所有車勻速行駛,不會出現堵車情況

當p=0.3時

當p=0.8時:

極端現象,車輛直接堵死了,就像北京環內一樣,當p=1時:

所以可以得出結論:減速概率越大,交通擁擠概率越大,越容易堵車

總結

以上是生活随笔為你收集整理的Nagel-Schreckenberg(交通流)模型——python实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。