Python是世界上最好的語言。
import random import math a0 = 6 # 車的正常加速度m/s^2 MAX_SPEED = 36 # 最大行駛速度m/s L = 10 # 停車安全距離m v0 = 20 # 車輛平均行駛速度,可視爲車輛正常情況下速度m/s scenes = ['被搶道', '跟馳', '停車啓動', '隨行', '靠近', '停車'] # 不會改變的參數 """ 在整個過程,前車與後車正常減速相同 """ def action(scene, v1, v2): # 實際操作 t = 10 # 假設場景持續時間 a1 = 0 """ 對六種微觀場景進行參數改變 """ if scene == scenes[0]: # 被搶道的參數改變 x2 = 0 x1 = random.uniform(L, s0 - L) v1 = v0 v2 = v0 a1 = 0 if scene == scenes[1]: # 跟馳的參數改變 x2 = 0 x1 = x2 + v2 * T v1 = v0 v2 = v0 if random.random() < 1 / 2: # 隨機生成加速和減速兩種跟馳場景 a1 = a0 if random.random() >= 1 / 2: a1 = -a0 if scene == scenes[2]: # 停車起步的參數改變 a1 = a0 v1 = 0 v2 = 0 x2 = 0 x1 = x2 + v2 * T if scene == scenes[3]: # 隨行的參數改變 v1 = v0 v2 = v0 x2 = 0 x1 = x2 + v2 * T a1 = a0 if scene == scenes[4]: # 靠近的參數改變 v1 = random.randint(0, v0) a1 = a0 v2 = v0 x2 = 0 x1 = x2 + v2 * T if scene == scenes[5]: # 停車的參數改變 v1 = v0 v2 = v0 a1 = -a0 x2 = 0 x1 = x2 + v2 * T if v1 <= 0: v1 = 0 if v2 <= 0: v2 = 0 for i in range(0, t): if x1 - x2 < 125: a2 = ld * (v1 - v2) # 車頭間距受到前車影響 if i != 0: v2 = v2 + a2 * T v1 = v1 + a1 * T if i == 0: x1 = L + v2 * T x1 = x1 + v1 * T x2 = x2 + v2 * T if math.fabs(v1 - v2) <= 0.2: # 車速差距較小,結束循環,以速度相等作爲結束的標誌 return v1, v2, x1, x2 if v2 > MAX_SPEED: # 後車車速大於MAX_SPEED,結束迭代 return v1, v2, x1, x2 if v1 <= 0: v1 = 0 return v1, v2, x1, x2 if v2 <= 0: v2 = 0 # 任何一個值爲0,結束迭代 return v1, v2, x1, x2 return v1, v2, x1, x2 # 定義各部分迭代結束 for i in range(0, 100): # 定義輸出情況個數 state = True # 定義初運行正常 v1, v2 = v0, v0 # v1前車速度 v2後車速度 a1, a2 = a0, a0 # 前車加速度m/s^2 後車加速度m/s^2 T = random.random() + 0.2 # 時間間隔,即反應時間s,設定爲0.2s-1.2s C = random.random() * 2 # 設定C的值爲0-2 ld = C / T # 反應強度λ if ld > 1 or ld < 0.1: continue # 剔除太小的反應強度值 x2 = 0 x1 = x2 + v2 * T # 設定初始前後車間距 s0 = L + v2 * T # 車輛以正常速度行駛狀態中的車頭間距m,安全距離 scene = random.choice(scenes) # 隨機產生場景 v1, v2, x1, x2 = action(scene, v1, v2) print("------------\n") if v2 > MAX_SPEED: state = False print("按照此模型,{}將可能導致後車速度超過了最大限制".format(scene)) if v2 * T + L > x1 - x2: state = False print("按照此模型,{}將可能導致車輛相撞".format(scene)) print("此時λ的值:{:.3} T的值:{:.3}".format(ld, T)) if state: print("可以正常運行") else: print("模型在該情況出錯") print("運行一段時間後各參數的值:v1:{}m/s v2:{}m/s x1:{}m x2:{}m".format(round(v1, 2), round(v2, 2), round(x1, 2), round(x2, 2)))