强化学习如何运用到车辆路径规划(VRP)
强化学习如何运用到车辆路径规划(VRP)
车辆路径规划问题(Vehicle Routing Problem,VRP)是运筹学领域十分经典的0-1整数规划问题。近几十年来已经有众多学者通过启发式以及一些精确算法对该问题进行了全面且深入的研究。
但值得注意的是,该问题的众多特性也十分适用于使用机器学习、强化学习等方法进行求解,例如Hao Lu等人就提出了L2I方法等RL方法并取得了不错的效果。
那么想要将RL运用到VRP主要需要学习哪些知识呢,本文将简单的介绍3个最基础的背景知识:
- 注意力机制
- 指针网络
- 策略网络
注意力机制(Attention Mechanism)
首先,我们要理解VRP的输入和输出,其实就是输入一些离散的点,然后把它们连接为一条条路,这样就完成了车辆路径的规划。所以我们可以将其作为一个Seq2Seq的过程,客户点的序列进行处理后作为输入,而生成的最终路径就是输出。Seq2Seq是通过encoder和decoder的过程进行翻译,这一过程在机器翻译的场景中十分常见,这里就产生了一个问题。
在机器翻译中一直存在对齐的问题。也就是说源语言的某个单词应该和目标语言的哪个单词对应的问题,比如说“Who are you”对应“你是谁”,由于英文和中文常用的语序不同,如果我们简单地按照顺序将词汇进行翻译,显然会得到一个错误的翻译结果“谁是你”。
那么如何让词之间实现对齐,让模型准确的知道“你”是和“you”对应的呢?这时候,我们就得用到注意力机制。注意力机制(Attention Mechanism)会给输入序列的每一个元素分配一个权重,这样在预测“你”这个字的时候输入序列中的“you”这个词的权重最大,从而实现了软对齐。
传统的注意力公式如下。第一条公式中ej和di分别是encoder和decoder的隐状态,其余是可学习的参数;得到的通过softmax操作得到分配给输入序列的权重。之后再根据该权重求加权和,得到后加到decoder的隐状态上,即可进行解码和预测。
指针网络(Pointer Network)
解决了软对齐的问题,接下来还要处理另一个问题:传统注意力机制的输出是输出词汇表中的词汇,接着上面的例子来说,输出是英文词汇对应的中文词汇表“你”、“是”、“谁”。但是在VRP中,我们希望输出的路径序列中的组成元素恰恰就是输入中的客户点。
对于这种输出往往是输入的子集的问题。考虑能不能找到一种指针,每个指针对应输入序列的一个元素,我们可以直接通过指针来讲输入序列进行变换和输出,而不是输出词汇表。这就是指针网络(Pointer Networks)。下图展示了传统Seq2Seq和指针网络输入输出的区别。
下图是指针网络的公式,相比传统注意力机制更加简单,公式一与传统注意力机制相同,公式二直接将softmax得到的权重值作为了输出,充当指针。
策略网络(Policy Network)
接下来要将的策略网络就是强化学习比较核心的内容了。其实对于VRP,也有很多学者用DQN等方法进行解决,大家可以更多的查阅文献进行了解。此处,我仅着重介绍策略网络。
策略网络其实十分简单粗暴,仅仅是循环这3个步骤 :1、作出行为 2、得到结果3、根据结果来增加/减少下次该行为被选择的概率。
举个小例子:小老鼠在一个房间中爬行,它可以进行上下左右移动的行为。如果他遇到猫或者捕鼠夹,他会受伤或死亡,这时环境返回的reward将会很小甚至是负的。但如果他遇到奶酪,就会得到一个较大的正reward。策略网络将根据这些reward来增大或减少行为发生的概率,从而使小老鼠学会正确的找奶酪路径。
下图给出了经典的蒙特卡洛梯度策略强化算法Monte-Carlo Policy Gradient,其中:
Π:自变量为θ的策略函数,s状态下a动作发生的概率
Vt:奖励函数,根据动作好坏决定改进方向取对数:以得到更好的收敛性
梯度:即参数改进的方向
α:学习率
算法的伪代码如下所示:
- 点赞
- 收藏
- 关注作者
评论(0)