模擬環(huán)行公路堵車問題

公路堵車概率模型 | Nagel-Schreckenberg 交通流模型。
路面上有N輛車,以不同的速度向前行駛,模擬堵車問題有以下假設(shè):

  • 假設(shè)某輛車的當(dāng)前車速是V;
  • 若前方可見范圍內(nèi)沒車,則它在下一秒的車速提高到V+1,直到達(dá)到規(guī)定最高限速;
  • 若前方有車,前車距離為d,且d<v, 則它下一秒的車速降低到d-1;
  • 每輛車會以概率p隨機(jī)減速v-1
# -*- encoding: utf-8
import math
import numpy as np
import matplotlib.pyplot as plt
path = 5000
n = 100
v0 = 5
p = 0.3
Times = 3000
np.random.seed(0)

x = np.random.rand(n) * path  # N輛車的起始位置
x.sort()
v = np.tile([v0], n).astype(np.float) # N輛車的初始車速

plt.figure(figsize=(10, 8),facecolor='white')

for t in range(Times):
    plt.scatter(x, [t]*n, s=1, c='k', alpha=0.1)
    for i in range(n):# 計算每輛車與前車的距離,并準(zhǔ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] += 1 # 正常加速
            else:
                v[i] -= 1 # 隨機(jī)減速
        else:
            v[i] = d-1 # 非安全距離,減速
            
    v = v.clip(0, 150) # 限速為0-150
    x += v # 更新位置
    x %= path # 環(huán)行公路位置修正
plt.xlim(0, path)
plt.ylim(0, Times)
plt.tight_layout(pad=2)
plt.show()
模擬環(huán)行公路堵車.png

【參考資料】

  1. 鄒博課件
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容