Page 238 - 《软件学报》2026年第4期
P. 238

田浩翔 等: 基于路网建模的自动驾驶关键场景生成与自适应演化方法                                                1679


                    (2) 空间约束: 每辆从车的初始位置不能部分重叠, 并且车辆之间至少要保持 5 m                    的间距.
                    (3) 车速约束: 车辆的行驶速度不得超过道路的限速.
                    (4) 时间约束: 每辆从车的速度和位置变化应遵循轨迹状态的顺序, 确保运动的时序一致.
                    对于每个抽象场景, LEADE       会生成   k 个可执行且可行的具体场景作为初代种群.
                  2.3   场景自适应演化
                    基于生成的场景程序, LEADE        执行并测试自动驾驶系统. 若场景执行过程中, 没有发现主车的安全违背, 则开
                 始后续的演化过程: LEADE       根据主车在该场景中的具体行驶轨迹, 对其他参与者的轨迹进行针对性的自适应修
                 改, 以提高场景参与者对主车行驶过程的干扰和挑战. LEADE                 采用改进的自适应遗传算法进行搜索, 以发现更多
                 具有安全关键性和多样性的具体场景. 算法过程如算法                  1  所示. 在启动进化搜索时, LEADE 基于上一步生成的符
                 合测试需求的场景程序, 构建初代场景. 接下来, LEADE             通过多目标进化搜索方法进行场景搜索, 包括细粒度评估、
                 自适应选择、自适应变异操作, 旨在提高高质量场景的遗传能力, 并增强低质量场景的变异性. LEADE                              执行生成
                 的场景来测试自动驾驶系统, 并记录自动驾驶系统中引发安全违背的场景, 这些场景可以自动重现并用于重新测
                 试自动驾驶系统.
                 算法  1. 安全关键场景下改进的自适应进化搜索算法.
                 输入: 第  1  代个体 P (第  2.2  节生成的场景程序);
                 输出: 安全关键场景集合 SC.

                                ∅ ∅ ∅ ∅
                 1. SC, TP, TS, EP ←  ,  ,  ,
                 2. while not TerminationCondition() do
                              ∅ ∅
                 3.   EX, BN ←  ,
                 4.   for x i  ∈ |TP[–1]| do
                 5.    ex i  = execute(x i ), EX ← EX ∪ ex i
                 6.    if isEgoCollision() then
                 7.     SC ← SC ∪ x i
                 8.    end if
                 9.    S ← arg x∈EX  {minf c (x), minf e (x), minf d (x), minf o (x)}
                 10.     TS ← TS ∪ S, PN ←  ∅
                 11.     if |TP|==1 then
                 12.     PN ← P
                 13.     else
                 14.     PN ← sort(TP, TS)
                 15.     update(TP, TS, PN)
                 16.     threshold ← generate_variation_threshold(S)
                 17.     end if
                 18.     for S i  ∈ PN do
                 19.     PM i  ← generate_mutation_probability(S i , TS[–1])
                 20.     if PM i  > threshold then
                             x  ← scenario_mutation(x i )
                              ′
                 21.          i
                 22.      BN ← BN ∪    x ′
                                       i
                 23.    end if
                 24.   end for
   233   234   235   236   237   238   239   240   241   242   243