随机化产生三车道的交通流,不废话,直接上代码(我Paper正在做,先存一下)
import random
# 第一步,首先按照CAVs的渗透率来建立初始车辆列表
car_num = 100 # 输入1:车辆数量
cav_Per = 0.50 # 输入2:CAVs渗透率
CAVs_num = int(car_num*cav_Per) # 联网自动车辆的数量
HDVs_num = car_num - CAVs_num # 人工驾驶车辆的数量
flow_list1 = [] # 车道1的混合交通流
for i in range(car_num):
if i < HDVs_num:
flow_list1.append(0)
else:
flow_list1.append(1)
# 首先生成一个未打乱的混合交通流
# print(flow_list1)
# 第二步,随机化
mixed_flow_list1 = flow_list1.copy() # 初始化车道1(创建副本)
mixed_flow_list2 = flow_list1.copy() # 初始化车道2
mixed_flow_list3 = flow_list1.copy() # 初始化车道3
# 考虑随机化的车排长度
random.shuffle(mixed_flow_list1)
random.shuffle(mixed_flow_list2)
random.shuffle(mixed_flow_list3)
print("车道1: "+str(mixed_flow_list1))
print("车道2: "+str(mixed_flow_list2))
print("车道3: "+str(mixed_flow_list3))
# 第三步:计算车排强度(这里也是my paper中的一个公式)
p_str = 0 # 初始车排强度
T_CC = 0.9 # 三种跟车模式,分别是cav跟随cav、cav跟随hdv、hdv跟随车辆
T_CH = 1.2
T_HH = 1.5
# 计算车道车辆的车排强度。车排强度越大,车道中的平均车头时距越小
def calculate_platoon_S(arr):
S_p = 0
p_str = 0 # 初始车排强度
T_CC = 0.9 # 三种跟车模式,分别是cav跟随cav、cav跟随hdv、hdv跟随车辆
T_CH = 1.2
T_HH = 1.5
for i in range(0, len(arr)):
# 遍历车辆数
if i == len(arr) - 1:
# 如果是第一辆车
if arr[i] == 1:
p_str = p_str + arr[i] * T_CC
else:
p_str = p_str + arr[i] * T_HH
else:
# case1:后车为hdv
if arr[i] == 0:
p_str = p_str + arr[i] * T_HH
# case2:cav跟随cav
elif arr[i] + arr[i + 1] == 2:
p_str = p_str + arr[i] * T_CC
# case3:cav跟随hdv
elif arr[i] == 1 and arr[i + 1] == 0:
p_str = p_str + arr[i] * T_CH
return p_str
p_str_lane1 = calculate_platoon_S(mixed_flow_list1)
S_platoon_lane1 = round(len(mixed_flow_list1)/p_str_lane1, 2)
p_str_lane2 = calculate_platoon_S(mixed_flow_list2)
S_platoon_lane2 = round(len(mixed_flow_list2)/p_str_lane2, 2)
p_str_lane3 = calculate_platoon_S(mixed_flow_list3)
S_platoon_lane3 = round(len(mixed_flow_list3)/p_str_lane3, 2)
print("车道1的车队强度 "+str(S_platoon_lane1))
print("车道2的车队强度 "+str(S_platoon_lane2))
print("车道3的车队强度 "+str(S_platoon_lane3))