精华内容
下载资源
问答
  • 移动机器人在复杂环境中移动难以得到较优的路径,基于马尔可夫过程的Q学习(Q-learning)算法能通过试错学习取得较优的路径,但这种方法收敛速度慢,迭代次数多,且试错方式无法应用于真实的环境中。在Q-learning...
  • 通过强化学习算法,实现最短路径寻找,确定路径起点与终点,设置路径权重,完成路径规划
  • 在基于神经网络结构的机器人全局路径规划算法中。利用强化学习的思想.引进评价预测学习的自适应变步长算法。实现了步长的在线自动调节。加快了路径规划的计算速度。仿真试验表明。该算法能有效实现步长参数的在线...
  • 强化学习进行路径规划,各种强化学习算法,适合从一开始进行学习,加实践代码哦
  • 运用强化学习算法在网格环境中进行了路径规划
  • 路径规划算法学习

    2021-07-19 23:16:54
    Ⅱ Dijkstra算法 算法思想 用蚂蚁的行走路径表示待优化问题的可行解, 整个蚂蚁群体的所有路径构成待优化问题...总而言之,蚁群算法是对局部路径规划的优化算法,但它是一种概率算法,并且受蚁群数量的影响,收敛...

    Ⅱ   Dijkstra算法

    算法思想

    用蚂蚁的行走路径表示待优化问题的可行解, 整个蚂蚁群体的所有路径构成待优化问题的解空间。路径较短的蚂蚁释放的信息素量较多, 随着时间的推进, 较短的路径上累积的信息素浓度逐渐增高, 选择该路径的蚂蚁个数也愈来愈多。最终, 整个蚂蚁会在正反馈的作用下集中到最佳的路径上, 此时对应的便是待优化问题的最优解。

     

     

     

     

    自我解读

    总而言之,蚁群算法是对局部路径规划的优化算法,但它是一种概率算法,并且受蚁群数量的影响,收敛的效果不太适合实际应用,每一只蚂蚁释放的信息素浓度都会对路径规划产生一定的影响,一旦出现偏差,不断强化路径上信息素浓度的正反馈会使结果产生严重的误差。

    修改代码中的启发函数重要程度因子值为0.5时,最短路径收敛至22,即正确的最短距离,但是相应平均距离会收敛至25

    代码解读

    clc
    clear
    close all
    ​
    ​
    %% 初始化参数
    % 根据节点的邻近节点表及字母节点-数字节点对应表,构造节点元胞数组
    nodes_data = cell(0);
    nodes_data(1,:) = {1, [2, 6, 7], [12, 16, 14]};
    nodes_data(2,:) = {2, [1, 3, 6], [12, 10, 7]};
    nodes_data(3,:) = {3, [2, 4, 5, 6], [10, 3, 5, 6]};
    nodes_data(4,:) = {4, [3, 5], [3, 4]};
    nodes_data(5,:) = {5, [3, 4, 6, 7], [5, 4, 2, 8]};
    nodes_data(6,:) = {6, [1, 2, 3, 5, 7], [16, 7, 6, 2, 9]};
    nodes_data(7,:) = {7, [1, 5, 6], [14, 8, 9]};
    ​
    % 始末节点
    node_start = 4;                       % 初始源节点
    node_end = 1;                         % 终节点
    ​
    % 蚁群相关定义
    m = 60;                              % 蚂蚁数量
    n = size(nodes_data,1);              % 节点数量
    alpha = 1;                           % 信息素重要程度因子3
    beta = 5;                            % 启发函数重要程度因子
    rho = 0.1;                           % 信息素挥发因子
    Q = 1;                               % 常数
    ​
    % 迭代过程中,相关参数初始化定义
    iter = 1;                            % 迭代次数初值
    iter_max = 100;                      % 最大迭代次数 
    Route_best = cell(iter_max,1);       % 各代最佳路径       
    Length_best = zeros(iter_max,1);     % 各代最佳路径的长度  
    Length_ave = zeros(iter_max,1);      % 各代路径的平均长度
    ​
    % 将信息素、挥发因子一并放入nodes_data中
    Delta_Tau_initial = nodes_data(:,1:2);
    for i = 1:size(nodes_data,1)
        nodes_data{i,4} = ones(1, length(nodes_data{i,3}));   % 信息素
        nodes_data{i,5} = 1./nodes_data{i,3};                 % 挥发因子
        Delta_Tau_initial{i,3} = zeros(1, length(nodes_data{i,3}));
    end
    ​
    ​
    %% 迭代寻找最佳路径
    while iter <= iter_max  
    route = cell(0);
    ​
    %%  逐个蚂蚁路径选择
    for i = 1:m
        % 逐个节点路径选择
        neighbor = cell(0);
        node_step = node_start;
        path = node_step;
        dist = 0;
        while ~ismember(node_end, path) %当路径表里面包含了终节点时,该蚂蚁完成路径寻优,跳出循环
           
            % 寻找邻近节点           
            neighbor = nodes_data{node_step,2};
            
            % 删除已经访问过的临近节点
            idx = [];
            for k = 1:length(neighbor)
                if ismember(neighbor(k), path)
                    idx(end+1) =  k;
                end
            end
            neighbor(idx) = [];
            
            % 判断是否进入死胡同, 若是,直接返回到起点,重新寻路
            if isempty(neighbor)
                neighbor = cell(0);
                node_step = node_start;
                path = node_step;
                dist = 0;
                continue
            end
               %计算下一个节点的访问概率
            P = neighbor;
            for k=1:length(P)
                P(2,k) = nodes_data{node_step, 4}(k)^alpha * ...
                    nodes_data{node_step, 5}(k)^beta;
            end
            P(2,:) = P(2,:)/sum(P(2,:));
            
            % 轮盘赌法选择下一个访问节点
            Pc = cumsum(P(2,:));
            Pc = [0, Pc];
            randnum = rand;
            for k = 1:length(Pc)-1
                if randnum > Pc(k) && randnum < Pc(k+1)
                    target_node = neighbor(k);
                end
            end
             % 计算单步距离
            idx_temp = find(nodes_data{node_step, 2} == target_node);
            dist = dist + nodes_data{node_step, 3}(idx_temp);
            
            % 更新下一步的目标节点及路径集合            
            node_step = target_node;
            path(end+1) = node_step;         
                       
        end
        
        % 存放第i只蚂蚁的累计距离及对应路径
        Length(i,1) = dist;
        route{i,1} = path;
    end
    ​
    %% 计算这一代的m只蚂蚁中最短距离及对应路径
    if iter == 1
        [min_Length,min_index] = min(Length);
        Length_best(iter) = min_Length;
        Length_ave(iter) = mean(Length);
        Route_best{iter,1} = route{min_index,1};
        
    else
        [min_Length,min_index] = min(Length);
        Length_best(iter) = min(Length_best(iter - 1),min_Length);
        Length_ave(iter) = mean(Length);
        if Length_best(iter) == min_Length
            Route_best{iter,1} = route{min_index,1};
        else
            Route_best{iter,1} = Route_best{iter-1,1};
        end
    end
    ​
    %% 更新信息素
    ​
    % 计算每一条路径上的经过的蚂蚁留下的信息素
    Delta_Tau = Delta_Tau_initial;    
    ​
    % 逐个蚂蚁计算
    for i = 1:m
       
        % 逐个节点间计算
        for j = 1:length(route{i,1})-1
            node_start_temp = route{i,1}(j);
            node_end_temp = route{i,1}(j+1);
            idx =  find(Delta_Tau{node_start_temp, 2} == node_end_temp);
            Delta_Tau{node_start_temp,3}(idx) = Delta_Tau{node_start_temp,3}(idx) + Q/Length(i);
        end
        
    end
    ​
    % 考虑挥发因子,更新信息素
    for i = 1:size(nodes_data, 1)
        nodes_data{i, 4} = (1-rho) * nodes_data{i, 4} + Delta_Tau{i, 3};
    end
    ​
    % 更新迭代次数
    iter = iter + 1;
    end
    ​
    ​
    %% 绘图、结果   
    ​
    figure
    plot(1:iter_max,Length_best,'b',1:iter_max,Length_ave,'r')
    legend('最短距离','平均距离')
    xlabel('迭代次数')
    ylabel('距离')
    title('各代最短距离与平均距离对比')
    ​
    % 最优路径
    [dist_min, idx] = min(Length_best);
    path_opt = Route_best{idx,1};
    展开全文
  • 路径规划算法

    2021-07-28 17:13:30
    文章目录前言一、传统路径规划算法二、图形学方法三、智能仿生算法四、其他算法总结 前言 移动机器人的自动探索需要对机器人进行路径规划,移动机器人的路径规划问题始于20世纪60年代。路径规划作为机器人导航最...


    前言

    移动机器人的自动探索需要对机器人进行路径规划,移动机器人的路径规划问题始于20世纪60年代。路径规划作为机器人导航最基本的环节之一,是目前很多技术领域研究的热点,具有广阔的应用前景和科研价值,而路径规划算法的研究是其中的核心内容。路径规划的主要任务是从一个初始点出发,然后按照特定的问题需求,寻找到一系列的动作在保证无碰撞、安全的情况下,到达任务的目标点为止。路径规划的核心就是算法的设计,根据对环境信息的把握程度可把路径规划划分为基于先验完全信息的全局路径规划和基于传感器信息的局部路径规划。

    一、传统路径规划算法

    1. 模拟退火算法:是一种适用于大规模组合优化问题的有效近似算法。该算法是通过模拟固体退火的过程,通过设定初始温度、初始状态和降温率控制温度的不断下降,结合概率突跳的特性,利用解空间邻域结构进行随机搜索。该算法具有描述简单、使用灵活、运行效率高、初始条件限制少等优点,但是存在着收敛速度慢、随机性等缺点。参数设定是应用过程中的关键环节。

    2. 人工势场法:是一种虚拟力法。该算法模拟引力、斥力下的物体运动,目标点与运动体间为引力,运动体和障碍物间为斥力,通过建立引力场、斥力场函数进行路径规划。该算法具有规划出来的路径平滑安全、描述简单等优点,但是存在局部最优问题。引力场的设计是算法能否成功应用的关键。

    3. 模糊逻辑算法:是一种模拟驾驶员的驾驶经验,将生理上的感知和动作结合起来,根据系统实时的传感器信息,通过查表得到规划信息,从而实现路径规划。算法符合人类思维习惯,免去数学建模,也便于将专家知识转换为控制信号,具有很好的一致性、稳定性和连续性。但总结模糊规则比较困难,而且一旦确定模糊规则在线调整困难,应变性差。最优的隶属度函数、控制规则及在线调整方法是最大难题。

    二、图形学方法

    传统算法解决实际问题时往往存在着建模困难的问题,图形学的方法则提供了建模的基本方法,但是图形学的方法普遍存在着搜索能力的不足,往往需要结合专门的搜索算法。

    1. C空间法:也成为可视图法,就是在运动空间中扩展障碍物为多边形,以起始点、终点和多有多边形定点间的可行直线连线为路径范围来搜索最短路径。C空间法具有直观,容易求得最短路径的优点。缺点是一旦起始点和目标点发生改变,就要重新构造可视图,缺乏灵活性。因为C空间法局部路径规划能力较差,所以适用于全局路径规划和连续域范围内的路径规划。

    2. 栅格法:是用编码的栅格来表示地图,把包含障碍物的栅格标记为障碍栅格,其余栅格标记为自由栅格,在此基础上进行路径搜索。栅格法目前在路径规划中的环境建模应用比较广泛,栅格法作为路径规划方法很难解决复杂环境信息的问题,一般需要与其他智能算法相结合。

    3. Voronoi图:是一种关于空间邻近关系的一种基础数据结构。他是用一些被称为元素的基本图形来划分空间,以每两个点间的中垂线来确定元素的边,最终把整个空间划分为结构紧凑的voronoi图,而后运用算法对多边形的边所构成的路径网进行最优搜索。优点是把障碍物包围在元素中,能实现有效避障,缺点图的重绘比较费时,因而不适用于大型动态环境。

    三、智能仿生算法

    在未知动态环境下处理路径规划问题时,传统的算法已经无法满足路径规划问题,来自自然界的启示往往能起到很好的作用。

    1. 蚁群算法:该算法的思想来自于对蚁群觅食行为的探索,每个蚂蚁觅食时都会在走过的道路上留下一定浓度的信息素,相同时间内最短的路径上由于蚂蚁遍历的次数多而信息素浓度高,加上后来的蚂蚁在选择路径时会以信息素浓度为依据,起到正反馈作用,因此信息素浓度高的最短路径很快就会被发现。算法通过迭代来模拟蚁群觅食的行为达到目的。具有良好的全局优化能力、本质上的并行性、易于用计算机实现等优点,但计算量大、易陷入局部最优解,不过可通过加入精英蚁等方法改进。

    2. 神经网络算法:是人工智能领域中的一种非常优秀的算法,它主要模拟动物神经网络行为,进行分布式并行信息处理。神经网络是由很多的神经元联结而成的,然后通过反向传播,梯度下降修改神经网络中的参数。目前它在路径规划中的应用比较广泛,尤其是在复杂多变的环境中,由于神经网络具有优秀的学习能力,智能体能够自主学习,且其学习能力强鲁棒性好。

    3. 遗传算法:是当代人工智能科学的一个重要研究分支,是一种模拟达尔文遗传选择和自然淘汰的生物进化过程中的计算模型。它的思想源于生物遗传学和适者生存的自然规律,是按照基因遗传学原理而实现的一种迭代过程的搜索算法。最大的优点是易于与其他算法相结合,并充分发挥自身迭代的优势,缺点是运算效率不高,不如蚁群算法有先天优势,但其改进算法也是目前研究的热点。

    4. 粒子群算法:也是一种迭代算法,它模拟鸟群飞行捕食行为,和遗传算法相似,它也是从随机解出发,通过迭代寻找最优解,也是通过适应度来评价解的品质,但它比遗传算法规则更为简单,它没有遗传算法的“交叉”和“变异”操作,有记忆功能,它通过追随当前搜索到的最优值来寻找全局最优。具有算法简洁、易于实现、鲁棒性好、算法对种群大小不十分敏感"收敛速度快等优点,但易陷入局部最优解。


    四、其他算法

    1. A*算法:是一种启发式搜索算法,通过设定合适的启发函数,全面评估各扩展搜索节点的代价值,通过比较各扩展节点代价值的大小,选择最有希望的点加以扩展,直到找到目标节点为止。优点是扩展节点少,鲁棒好,对环境信息反应快; 缺点是在实际应用中忽略了运动体自身的体积带来的节点限制,不过通过增加节点即可改进。

    2. Dijkstra算法:一种典型的最短路径算法,它是以起始点为中心向外层层扩展,直到扩展到终点为止,即通过所有节点的正向遍历比较得到最短路径!因为它是遍历完所有节点才得到最短路径,所以得到的最短路径成功率很高,鲁棒性也好; 但是遍历节点多,效率低是其运用于大型复杂路径拓扑网络时的致命缺点,此外,Dijkstra算法也不能处理有负边的问题。

    总结

    当前,移动机器人路径规划过于依赖环境模型,在某些恶劣环境下,机器人所处的环境可能有点复杂,并且周边的环境可能是动态的且多变。综合以上因素,移动机器人越来越需要有自主学习的能力,产生了Q-Learning算法,但是Q-Learning在决策时容易产生维数灾难问题,在路径规划问题上的效果不佳。随着深度学习的发展,将深度学习与强化学习相结合。充分利用深度学习的感知能力与强化学习的决策能力,利用深度学习对函数优秀的拟合能力去解决强化学习的策略问题,两者取长补短形成深度强化学习方法,深度强化学习算法就应运而生了。

    Google的DeepMind团队在2013提出了第一个深度强化学习模型,DQN算法在Atari游戏中取得了巨大的成功,在某些方面,并超越了人类游戏水平。之后改进的DQN算法,如DoubleDQN,竞争网络等。在AlphaGo战胜了世界围棋冠军李世石之后,深度强化学习引起了广泛的关注,有些学者也开始考虑将深度强化学习算法应用于路径规划中。Lei Tai等人通过简单的传感器信息,将机器人所处位置坐标作为输入方式,输出为机器人的动作指令,利用深度强化学习的方法尝试解决移动机器人室内环境下的路径规划问题。

    深度强化学习相对于之前的算法优势在于,我们无需依靠手动引导,只需要确定最终的目标。机器人通过与环境的交互,训练网络模型,从而获得更好的路径规划结果。

    详见深度强化学习算法及代码请见微信公众号:深度学习与路径规划
    在这里插入图片描述

    展开全文
  • 强化学习与动态规划、博弈论、有监督学习、无监督学习和进化算法的差异强化学习的特点强化学习 vs. 动态规划强化学习 vs. 博弈论强化学习 vs. 有监督学习强化学习 vs. 无监督学习强化学习 vs. 进化算法 强化学习的...

    强化学习的特点

    在这里插入图片描述
    强化学习中必备的三个要素是策略、收益信号和价值函数。

    1. 策略定义了智能体Agent在特定时间的行为方式(action);
    2. 收益信号定义了强化学习问题中的目标,主要根据环境(Environment)向智能体Agent返回的收益(reward)对策略进行调整;
    3. 不同于表示即时收益的收益信号,价值函数表示未来可以累积的总收益的期望

    强化学习中并非必须的要素是环境模型,即给定一个状态sts_t和动作rtr_t就能够预测外部环境的下一个状态st+1s_{t+1}和下一个收益rt+1r_{t+1}的模型。根据是否具有环境模型这一要素,可以将强化学习划分为无模型方法和有模型方法。

    根据大佬的定义,强化学习就是学习“做什么(即如何把当前的情境映射成动作)才能使得数值化的收益信号最大化”。简单来说,强化学习通过与环境的交互/试错不断学习、更新模型从而达到长期目标。

    综上,强化学习试图解决的是决策优化问题,即在特定状态(state)下,采取何种⾏动⽅案(action),才能使收益最⼤(reward)。

    强化学习 vs. 动态规划

    序贯决策问题中的经典优化算法如动态规划,也可以用于根据当前的状态决定下一步的行动,例如经典的最短路问题。动态规划中需要输入整个过程中完整、明确的信息(最短路问题中包括哪些路径以及每一条路径的成本),即需要很多先验知识。然而,强化学习中则不需要这些先验知识

    强化学习 vs. 博弈论

    博弈论也是一个和强化学习类似的研究领域,例如,在一些棋类游戏中,我们可以通过博弈论计算出当前的最优动作。然而,经典的博弈论使用了“极大极小”的假设,即假设了对手会按照某种特定的方式来下棋,这一假设与现实情况并不相同,即使是高手也存在出错的可能性。强化学习中则没有使用类似的假设,更加符合真实的应用场景。

    强化学习 vs. 有监督学习

    有监督学习是当前机器学习领域中的常用模型,从外部监督者提供的带标注训练集中进行学习。每一个样本都是关于情境和标注的描述,标注中给出了针对当前情境,系统应该做出的正确动作,也可以看作是对当前情境进行分类的所属类别标签,从而能够让系统具备推断或者泛化能力,已经取得了成功。

    有监督学习所要解决的是智能感知的问题,而强化学习所要解决的则是智能决策的问题。例如,在数字手写体识别中,有监督学习根据输入的大量带有标签的图片来识别数字,即学习”输⼊“长得像什么(特征),以及与该长相一一对应的是什么(标签)。然而,在atari游戏中,强化学习则不关心当前状态的图片是什么,而是只关心在当前状态下选择何种行动能够使得总收益最大。

    强化学习和有监督学习的共同点是两者都需要⼤量的数据进⾏训练,但是两者所需要的数据类型不同。有监督学习需要的是多样化的标签数据,强化学习需要的是带有回报的交互数据

    虽然强化学习和有监督学习之间存在差异,但是两种范式也可以融合。当状态空间是连续值,即状态空间的取值范围非常大时,例如在西洋双陆棋中大约有102010^{20}种状态,我们便不可能再通过遍历这些状态,哪怕是遍历其中很小的一部分来对模型进行训练。考虑到神经网络能够为程序提供从经验中进行归纳的能力,因此在新的状态中,根据保存的过去遇到的相似状态的信息来选择动作,并由神经网络来做出最终决策便成为了解决这类问题的一种方案。在这一思路下,在强化学习中引入深度学习(有监督学习)便成为了一大研究的方向。

    强化学习 vs. 无监督学习

    既然强化学习不属于有监督学习,那么是否属于无监督学习呢?

    无监督学习是一类典型的寻找未标注数据中隐含结构的过程,在这一过程中不依赖于每个样本对应的标注。例如,在聚类问题中,根据样本所具有的特征,可以将样本分为K个类,而在这一过程中并不涉及样本所对应的标注。

    尽管强化学习也不依赖于每个样本的标注,但是强化学习的目的是最大化收益信号,而不是找出数据的隐含结构,即两种学习范式的学习目标不同。

    强化学习 vs. 进化算法

    在解决智能决策问题的方法,还存在着许多进化算法,如遗传算法、模拟退火等。这些算法采取大量静态策略,每个策略在扩展过的较长时间内与环境的一个独立实例进行交互,选择获取了最多收益的策略及其变种来产生下一代策略,然后继续循环更新。

    和强化学习相比,进化算法中没有显示地计算价值函数,即忽略了智能体Agent与环境之间的交互细节。因此,进化算法只考虑这个策略的最终结果,例如在下棋情境下,只要这句比赛获胜就认为比赛中所有动作都有功劳,而与每一步具体动作的关键程度无关,而强化学习则可以评估策略对单个状态的回报,即考虑了交互过程中的诸多细节,会更加高效。

    展开全文
  • 首先推导了铰接车的运动学模型,根据该模型建立实际行驶路径与参考路径偏差的模型,以 PID 控制算法为基础,设计了基于强化学习的自适应 PID 路径跟踪控制器,该控制器以横向位置偏差、航向角偏差、曲率偏差为输入,...
  • 桔妹导读:滴滴的路线引擎每天要处理超过400亿次的路线规划请求,路径规划是滴滴地图输出的核心服务之一。不同于传统的路径规划算法,本文主要介绍的是一次深度强化学习路径规划业务场景下的探索...

    桔妹导读:滴滴的路线引擎每天要处理超过400亿次的路线规划请求,路径规划是滴滴地图输出的核心服务之一。不同于传统的路径规划算法,本文主要介绍的是一次深度强化学习在路径规划业务场景下的探索,目标是为用户规划出最符合司乘双方习惯的路线,降低偏航率。

    当我们打开滴滴使用网约车服务时,出发前我们往往会关注要走哪条路,这条路要花多长时间,要花多少钱,有多少个红绿灯,路况是否拥堵......这些都与路径规划密切相关。路径规划对滴滴来说十分重要,它是网约车服务的重要一环,与用户体验直接相关,一次糟糕的“绕路”可能会引起一次投诉进线,甚至影响用户留存;而良好的路径规划不仅可以显著提升司乘双方的使用体验,还能让司机少堵在路上,进一步提升整体出行效率。

    1. 

    滴滴路径规划的背景

    以及业务逻辑的复杂性

    类似于语言任务中的token,物理世界的道路会被建模成一段一段的link,这些link都具有唯一的id以及对应的道路属性,比如长度,方向,道路等级等。对于路口来说,进入路口的link和出路口的link往往都有多个。拿北京举例,北京的路网包含大约200W个link,网约车订单可能会包含数十甚至上百个路口,在如此庞大且复杂的路网中和较为苛刻的时间限制下,规划出高质量的路线绝非易事。

    图中每一个带箭头的红色线段表示一个link,可以看出不同link之间的长度差别是比较大的。

    此外,我们知道物理世界的道路是会发生改变的,这种改变可能是永久的,比如修路,也可能是临时的,比如交通管制。所以路网数据也是动态的,实际上目前我们地图的路网数据是天级更新的,这也加大了路径规划任务的复杂度。

    从实际业务来看,和自驾推荐走更快,更通畅的路线不同,由于网约车会基于里程、时长计费,我们需要同时考虑时间、距离、价格、安全因素,推荐相对快又相对便宜的路线。考虑用户的偏好,让用户在安全、快速到达目的地的同时,让行驶距离尽量短,总花费尽量少,是我们路径规划的核心原则。但很多时候“快”和“近”很难同时满足。距离更短的路往往是次干路或者支路,红绿灯多,堵车可能性更大;而绕远的高速路或者环路,通行能力更强,只要不极拥堵,车速通常更快,反倒用时更短。

    有乘客希望更快,也有乘客希望不绕远。为了尽量平衡,从去年3月起,我们率先在网约车上线了“选择路线”功能,充分考虑乘客的出行偏好,提供最多三条路线供乘客选择(拼车、一口价订单司机需按照平台指定路线行驶);并联动司机服务部鼓励司机主动询问乘客是否有常走路线。今年8月,我们还进一步在北京、杭州、深圳、南京、西安、厦门等28个城市试行“行前多路线选择”功能。乘客实时呼叫网约车,发单前可以根据路线标签、预估里程、行驶时长等信息选择最合适的路线,系统自动同步至司机端导航。

    综上,想要做好让司乘双方都满意的路径规划是一件极具挑战的事情,但是这也为我们进一步提高出行服务质量提供了机遇。

    2. 

    路径规划算法和AI技术的融合 

    路径规划是指给定起终点的情况下,规划出一条或多条由起点到终点的路线。传统的路径规划是一个图论问题,当路网中的权值都是静态的时候,使用dijkstra等算法就可以求出权值之和最小的路线,比如求出两点之间距离最短的路线是容易的。然而在很多场景需要动态权值,调整权值大小也需要大量经验,目前线上采用的方式是先使用基于图论的算法生成一批低权值的路线,然后再经过基于机器学习算法的排序模型的筛选,这个过程涉及到粗排,精排,rerank,最后将排名靠前的路线透出给用户选择。这个路线规划系统涉及的链路还是比较长的,不同于基于图论算法生成高权值的路线,我们尝试探索一种基于AI算法的路线生成方式。

    得益于滴滴海量的出行数据尤其是高质量的轨迹数据,我们可以利用深度学习技术去挖掘和学习司机的驾驶行为以及用户对路线的偏好,借助训练出的深度模型在短时间内为用户规划出满意的路线,降低线上的偏航率。

    我们这里可以把寻路的过程和AlphaGo下围棋的场景进行类比,司机在路网中行驶犹如棋手在棋盘上落子,初级棋手往往通过记忆棋谱来获取暂时的领先,而最终赢棋往往要求棋手有“大局观”,每一步的落子考虑到之后棋局的演变,关键在于最终赢棋,而不在于一时的得失。寻路过程也是需要往后多看几步的,因为在某个路口的选择眼前可能看是最优的,放在全局看则不一定是最好的选择。我们探索路线生成的过程是和AlphaGo“进化”过程是相似的[1],是一个从监督学习到强化学习的过程。

    3. 

    规划最符合司乘习惯的路线:

    从监督学习到强化学习 

    3.1 “克隆”高质量的历史轨迹

    我们最先想到的是使用行为克隆(behavior clone)的方式解决寻路问题,这里可以将寻路看作一个连续决策的过程,把用户的历史真实轨迹当做专家轨迹,在每个路口(对应一个状态)用户作出的选择看作是一个近似最优的动作(action),接下来我们就可以在每个决策点做分类,专家行为作为正样本,非专家行为作为负样本,让分类模型去判断某个决策是否符合用户习惯,分类器会对一个状态和动作对输出一个概率值,这个概率越大代表用户越有可能在该状态采取对应的动作。这点与AlphaGo中的走子网络是类似的:通过专业棋手的棋谱数据来训练模型,让它学习专业棋手的下棋行为。

    在实际处理中,因为路线是被建模成连续的link序列,所以我们在网络结构中引入了在序列预测上表现强大的lstm,用lstm可以更好地建模用户从起点到当前位置的状态信息,在经过百万量级条轨迹训练后,我们的模型在每个路口的决策准确率达到了98%+,我们将这个能够在每个路口输出决策概率的模型称作寻路agent,它已经基本可以模拟用户的真实选择。

    如果在每一次决策都选择概率最大的那一个link(即贪心搜索)往往只能找到局部最优解,比如一条路前半段看起来更优,但是后半段可能不是最佳的。为了尽可能找到最符合用户习惯(即整条路线的概率最大),我们使用了beam search搜索策略,其主要思想就是在寻路过程中维护若干个(即beam size)最优的候选集,这种方式相比穷举法大大缩减了需要探索的空间,相比于贪心搜索考虑的情况更多,往往能够找到得分更高的路线,在自然语言处理领域,比如机器翻译任务中被大量使用。可以通过下面简单的例子理解beam search的过程。

    图中移动的小车展示了beam search在路径规划中的应用,在小车前进的过程中,我们可以给不同的路线打分,维护得分最高的topK路线,直到小车抵达终点。红色的路线表示最终得分最高的路线,也是最符合用户习惯的路线。

    3.2 行为克隆的问题

    行为克隆实际上属于监督学习的范畴,在AlphaGo中如果让agent纯粹的去学习棋谱中的走法,它很难打败更加专业的棋手,所以AlphaGo引入了强化学习并搭配MCTS这一搜索策略,从而大大提升了对弈的胜率。同样的,纯粹的拟合专家轨迹是存在问题的:当寻路agent在某个路口判断错误,那么就会进入到没有遇到过的状态,在这种状态下agent的判断容易出错,而错误的累积会容易导致寻路过程演变成“一步错步步错”的结果。虽然我们的模型具有一定的泛化能力,寻路agent也可以找到终点,但由于我们没有显式的引入偏航后的监督信号,寻路agent往往需要更多不必要的“绕路”才能回到理想的路线上来。图中蓝色轨迹是小车偏航后所致,小车既有可能回到demo轨迹(红色路线)上来,也有可能越来越远,偏离demo轨迹,因为模型并没有学习到发生偏航后该如何快速纠正。

    3.3 强化学习的应用

    强化学习是近年来解决行为克隆带来的问题的热门方向。在文本生成领域,seqGAN通过判别器(简称D)来指导生成器(简称G)的训练,在G生成下一个单词时,使用MCTS和D来评估这个单词的好坏,通过reward作为反馈,使用Policy Gradient来更新G的参数,从而增加reward大的单词的生成概率。与此方法类似的还有在游戏系列数据集上表现优秀的GAIL,AIRL,这些方法的主要思想是另外训练一个能够指导生成网络更新的评估网络,缺点在于略显复杂,训练难度和计算量较大。

    AlphaGoZero通过“自己与自己对弈”的过程大大增强了棋力,类似的,我们想要通过生成学习的方式来增强路线引擎的能力。这里我们采用Q-learning的方式来学习一个寻路策略,为了加速模型收敛的速度,我们这里先使用前文提到的行为克隆的方式训练一个能够容易走到目的地的基础模型,然后使用该基础模型在路网上寻路,生成大量的采样轨迹,如果在某个状态,模型采取的动作与用户一致,则给该状态-动作对以+1的reward,相反如果在该状态模型采取的动作与用户不一致,则给该状态-动作对的reawrd为0。这种人为设定reward的方式既没有引入对抗学习的过程,也不要额外学一个reward函数,计算量大幅度减小,同时它可以有效克服行为克隆带来的状态分布偏移的问题。

    图中大致展示了我们的训练流程,通过老模型的self-play获取新的轨迹数据,将采样得到的新轨迹和真实轨迹融合训练,更新我们的策略模型,该过程是可以不断迭代的。经过多轮迭代后,路线生成模型的分类准确率虽然没有明显提升,但是生成轨迹质量更高:与真实轨轨迹的重合率明显提高,偏航后返回到demo轨迹的速度更快。这是让人惊喜的结果。

    4. 

    总结

    滴滴的路线引擎每天需要处理超过400亿次的路线规划请求,我们致力于为平台用户提供安全,快捷的路线服务。本文介绍的路线生成方式是深度强化学习在路径规划业务上落地的一次探索,主要用来降低偏航率。考虑到路径规划业务的复杂性,我们会从更多的方向(比如躲避拥堵)来打磨我们的路线引擎,让它变得更加智能。

    当然目前路线引擎还有它不完善的地方,还需要持续的迭代和优化,也欢迎大家给我们提供宝贵的意见。我们团队将会持续优化路线引擎系统的性能,迭代路线规划的算法,为司机和乘客创造更大的用户价值。

    引用

    1. Mastering the game of Go with deep neural networks and tree search[J]. Nature, 2016, 529(7587):484-489.

    本文作者

    团队招聘

    滴滴地图与公交事业群定位团队负责为滴滴平台上的司乘双方提供精准的定位服务,构建出行基础设施,发挥平台的大数据优势,应用概率统计、机器学习、深度学习等技术,在GPS质量优化、网络定位、惯导推算、融合定位等细分方向上持续深耕,以技术驱动用户体验的提升。

    团队长期招聘算法工程师,包括机器学习、惯导推算等方向,欢迎有兴趣的小伙伴加入,可投递简历至 diditech@didiglobal.com,邮件请邮件主题请命名为「姓名-应聘部门-应聘方向」。

    扫描了解更多

    延伸阅读


    
    内容编辑 | Charlotte联系我们 | DiDiTech@didiglobal.com
    
    
    展开全文
  • 上一篇文章回顾了强化学习的核心概念,这里继续通过Open AI 的Spinning Up项目总结强化学习(RL)的算法,通过分类和对比的方法系统介绍强化学习算法。 1. 算法分类 现代强化学习算法分类 ---图片来自Open...
  • 强化学习路线图

    2021-01-12 11:46:51
    决策解决how,强化学习在游戏和机器人等领域取得了一定效果;认知解决why,知识图谱、因果推理、持续学习等第三代人工智能正在研究。 强化学习,采用反馈学习的方式解决序贯决策问题,因此必然是通往通用人工智能的...
  • 一个简单的matlab的M语言编写的强化学习Q-Learning算法
  • 此方法同源借鉴于ICIA一篇强化学习paper 源码github地址:https://github.com/a7b23/Autonomous-MazePathFinder-using-DQN 该程序将由几个封锁(由块颜色表示)组成的图像作为输入,起始点由蓝色表示,目的地由绿色...
  • 根据车辆导航系统的研究历程 , 车辆路径规划算法可分为静态路径规划算法和动态路径算法。静态路径规划是以物理地理信息和交通规则等条件为约束来寻求最短路径,静态路径规划算法已日趋成熟 , 相对比较简单 , 但对于...
  • 强化学习和遗传算法优胜劣汰的思想类似,通过奖惩机制不断强化好的行为,弱化坏的行为。什么是好的行为,什么是坏的行为,这跟你要解决的具体问题有关,比如路径规划问题,走距离目标点较近的路线就是好的行为,走...
  • 强化学习基础算法 文章目录强化学习基础算法1. 基于动态规划算法1.1 策略评估1.2 策略改进1.3 策略迭代1.4 值迭代2. 蒙特卡洛算法2.1 蒙特卡洛算法求解预测问题2.2 蒙特卡洛算法求解控制问题3. 时序差分学习3.1 ...
  • 莫烦课程强化学习部分的代码解析,从q-learning算法到ddpg算法,整体代码的思路流程,还有关键部分的详细解释,配套公式详解。
  • README This is a project about deep reinforcement learning autonomous obstacle avoidance algorithm for UAV. The whole project includes obstacle avoidance in static environment and obstacle avoidance
  • 如何判断强化学习算法是否收敛 1. 策略熵 对于随机性策略(PPO等)可以用策略熵来表示策略是否“确定”。在训练过程中随着策略提升,策略变得越来越确定,此时熵应该是随着逐渐降低的,熵曲线趋于平缓。 2. loss...
  • 针对现有机器人路径规划强化学习算法收敛速度慢的问题,提出了一种基于人工势能场的移动机器人强化学习初始化方法.将机器人工作环境虚拟化为一个人工势能场,利用先验知识确定场中每点的势能值,它代表最优策略可...
  • ... 第一时间获取价值内容 鱼羊 发自 凹非寺 量子位 报道 | 公众号 QbitAI ...自从有了强化学习(RL),AI上能星际争霸,下能雅达利称王,让内行人沉醉,让外行人惊奇。...这里恰有一份标星过万的强化学习资源,既有...
  • 多点路径规划指标机器人强化学习 增强学习已成为研究和研究的热门话题,该领域的许多领域都未曾动过。 这些领域之一是在物理机器人上实施强化学习算法。 我探索了在物理定制3D打印机器人Benny和Bunny上实现RL算法的...
  • 以下为原创代码,这段代码解决的是TSP问题,采用的思路是强化学习的Q-learning方法。import numpy as npepsilon = 0.5gamma = 0.98lr = 0.1distance =np.array([[0,7,6,1,3],[7,0,3,7,8],[6,3,0,12,11],[1,7,12,0,2]...
  • 来源:AI科技评论摘要:如何赋予机器自主学习的能力,一直是人工智能领域的研究热点。 强化学习与宽度学习如何赋予机器自主学习的能力,一直是人工智能领域的研究热点。在越来越多...
  • 在基于目标的强化学习任务中,欧氏距离常用于Dyna_Q学习的启发式规划中,但对于井下救援机器人路径规划这类状态空间在欧氏空间内不连续的任务效果不理想。针对该问题,文章引入流形学习中计算复杂度较低的拉普拉斯特征...
  • (零基础可以看懂)深度强化学习之DQN类算法-第1篇(含代码)-《强化学习系列专栏第4篇》背景论文原文链接介绍模型关键部分解释代码代码复现、详细讲解及我的Github地址 背景     DQN是由Deep Q-Learning缩写而...
  • 之前用Q-learning算法实现了一维和二维空间的探宝游戏,取得了不错的效果,证明了Q-learning算法对于状态不大的或离散状态下的RL问题有较好的收敛效果,为了强化对Q-learning的认识,本次我将继续实现以一个比较有趣...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,579
精华内容 2,231
关键字:

强化学习路径规划算法