✅ 博主简介:擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导,毕业论文、期刊论文经验交流。
✅ 具体问题可以私信或扫描文章底部二维码。
(1)车辆队列分层控制算法框架及关键控制算法改进
在车辆队列于二维场景下出现的诸多复杂问题中,路权冲突以及横纵向运动耦合问题尤为突出。为此,构建了涵盖队列行为决策层、队列运动控制层及车辆底盘控制层的车辆队列分层控制算法框架。通过这种分层的方式,将复杂的多车协同控制功能进行分解,使得各层各司其职,控制流在各层间有序传递,从而有效降低了车辆队列协同控制的整体复杂度。
针对队列运动控制层及车辆底盘控制层在二维场景驾驶需求下的运动控制与控制分配功能,引入了参考向量场路径跟踪算法。该算法借助共同的参考路径以及独立的理想间距来构建跟踪向量场,进而提出哈密尔顿 - 参考向量场(H - RVF)路径跟踪算法。这一算法的巧妙之处在于,它成功实现了队列层及车辆层的横纵向解耦合跟踪控制。例如,在实际的车辆队列行驶场景中,车辆不再受到横纵向运动相互干扰的困扰,能够更精准地按照设定的队形和路径进行行驶,无论是在直线行驶过程中需要保持稳定的纵向间距,还是在转弯等操作时要兼顾横向位置的准确性,都可以通过该算法得到很好的协调。
同时,在控制分配方面也进行了改进。原有的直接利用伪逆矩阵进行控制分配的算法存在一定局限性,通过结合伪逆矩阵及哈密顿函数,采用加权、循环及修正等手段,实现了有约束轮胎力控制分配。这一改进极大地提高了轮胎力分配的精度与实时性。比如,在车辆需要根据不同路况和行驶状态调整轮胎力时,新算法能够更加准确且迅速地完成分配,确保车辆行驶的稳定性和操控性,避免因轮胎力分配不合理而导致的打滑、失控等安全隐患,为车辆队列的协同控制奠定了坚实的基础。
(2)基于合作博弈的车辆队列间距控制策略
考虑到当前车辆队列所采用的间距策略在系统角度分配纵向行驶空间方面的不足,从全新的视角出发,将间距控制策略视作空间最优分配问题来研究。借鉴生物界智能体的 “群聚运动” 机制,其包含避免碰撞、速度匹配、中心聚集等仿生运动原则,这些原则被巧妙地融入到合作博弈的收益函数之中,为车辆队列纵向空间分配提供了极具参考价值的依据。
把车辆队列间距分配这一实际问题抽象为有向图合作博弈问题,并进一步提出满足个体理性及群体理性的合作博弈特征函数。在此基础上,将诸如夏普利值、τ 值、平均字典序(AL)值等合作博弈的解应用于间距的分配过程中。而且,结合纵向运动控制器深入分析了该车辆队列控制策略的稳定性。例如,在实际的车辆队列行驶过程中,当车辆需要调整彼此间的间距时,通过合作博弈的方式,综合考虑各车辆的利益和整体队列的最优状态,运用不同的博弈解来确定合理的间距。以夏普利值为例,它能够根据各车辆在队列中的不同 “贡献”(如位置、速度等因素)来公平合理地分配间距,使整个队列的纵向行驶空间分配更加科学、有序,避免了因间距不合理而引发的车辆频繁加减速、碰撞风险增加等问题,同时保障了队列在行驶过程中的稳定性和高效性。
(3)应对车辆队列与外部车辆路权冲突的博弈模型及策略
针对车辆队列与队列外车辆存在冲突的常见驾驶场景,深入解析了队列非合作博弈结构,从而提出适用于与外部车辆进行路权竞争的两种博弈模型,即队列无限策略完全信息博弈模型及有限策略不完全信息动态博弈模型。
在构建博弈模型时,充分结合安全性、自身驾驶任务、经济性等多方面因素,提出了非合作博弈收益函数。以加速度作为动作策略,针对无限策略的完全信息博弈模型,通过严谨地评价成本函数的拟凹性来判断极值点存在的充分条件,进而在此基础上成功获得了均衡解。并且对比了合作型成本函数及自私型成本函数在并道工况中的性能差异,结果显示合作型成本函数的最终收益明显优于自私型成本函数。这意味着在实际的路权竞争场景中,若车辆采取合作型的策略,更有助于整个交通场景的优化和自身利益的保障,比如在并道时,合作型策略能让车辆更顺利地融入车流,减少交通拥堵和事故风险。
此外,构建用于表征博弈双方类型分布概率的信念池,结合驾驶意图辨识以及贝叶斯概率公式对信念池进行更新,以此获得类型分布的后验概率,再通过贝叶斯纳什均衡解,确定冲突双方的稳定行为策略,并深入分析了贝叶斯纳什均衡存在的稳定性。如此一来,在车辆队列与外部车辆发生路权冲突的博弈过程中,双方都能基于稳定的策略来调整自身驾驶行为,不会轻易做出改变,从而保障了整个交通场景的有序性和安全性,避免因冲突处理不当而引发的混乱和事故。
import numpy as np
# 车辆类
class Vehicle:
def __init__(self, index):
self.index = index
# 当前速度(m/s)
self.speed = 0
# 期望间距(m)
self.desired_gap = 0
# 实际间距(m)
self.actual_gap = 0
# 车辆队列类
class VehicleQueue:
def __init__(self, num_vehicles):
self.vehicles = [Vehicle(i) for i in range(num_vehicles)]
def set_initial_conditions(self, speeds, desired_gaps):
for i in range(len(self.vehicles)):
self.vehicles[i].speed = speeds[i]
self.vehicles[i].desired_gap = desired_gaps[i]
def calculate_actual_gaps(self):
for i in range(len(self.vehicles) - 1):
self.vehicles[i].actual_gap = self.vehicles[i + 1].speed * 2 - self.vehicles[i].speed * 2
def allocate_gaps_based_on_shapley_value(self):
num_vehicles = len(self.vehicles)
# 简单模拟夏普利值计算(实际更复杂)
shapley_values = np.ones(num_vehicles) / num_vehicles
total_gap = sum([v.desired_gap for v in self.vehicles])
for i in range(num_vehicles):
self.vehicles[i].actual_gap = shapley_values[i] * total_gap
# 模拟主循环
num_vehicles = 5
vehicle_queue = VehicleQueue(num_vehicles)
speeds = [10, 12, 11, 13, 12]
desired_gaps = [5, 6, 4, 7, 5]
vehicle_queue.set_initial_conditions(speeds, desired_gaps)
vehicle_queue.calculate_actual_gaps()
vehicle_queue.allocate_gaps_based_on_shapley_value()
for vehicle in vehicle_queue.vehicles:
print(f"Vehicle {vehicle.index}: Desired Gap: {vehicle.desired_gap}, Allocated Gap: {vehicle.actual_gap}")