深度强化学习(Deep Reinforcement Learning,DRL)可以用于解决优化问题,尤其是具有复杂、高维度的状态空间和动作空间的问题。它结合了深度学习的强大表示能力和强化学习的学习框架,深度神经网络可以学习复杂的特征和模式,而强化学习可以在与环境的交互中进行学习和优化,因此能够有效地解决复杂的优化问题。其基本思路是将优化问题建模为强化学习问题,然后利用深度神经网络来学习策略或值函数,以最大化累积奖励或最小化成本函数。通过与环境的交互,智能体学习如何在不同状态下采取行动以达到最优解。在这个过程中,深度神经网络可以作为函数近似器来表示策略函数或值函数,帮助智能体学习复杂的优化策略。智能体通过与环境的交互来不断地更新网络参数,以逐步提高策略的性能,并最终找到最优解或近似最优解。
在传统的TSP(Traveling Salesman Problem)中,问题的结构通常是保持不变的,即客户的位置和客户之间的旅行时间是固定的。但在现实应用中,客户的订单状况和道路交通情况是在不断变化的:客户可能会添加或取消订单;交通情况的变化会影响路线的预期总时间,有时还会因被迫绕行而影响距离。由此我们引出DTSP,即在这种动态环境中调整路线计划,使得总行驶路径长度最短。
本文将具体介绍深度强化学习求解动态旅行商问题(Dynamic Traveling Salesman Problems,DTSP)的方法,即重点介绍深度强化学习解决单目标优化问题的研究。
1.问题描述
本文考虑DTSP的序贯决策问题(a sequential decision-making problem of DTSP),其中销售员可以在当前顾客访问完成后决定下一个顾客的访问。同时考虑了客户和流量的变化,具体体现在边权和节点的变化:
-
边权的变化:两个点之间所需要的通行时间受到当前的交通状况的影响,并随着时间的变化而变化。在本文中,假设任意两个点
在时刻
实际所需的通行时间为
。由于各种原因(如交通事故等),我们不能提前准确预测时间,所以假设
。其中
为事先预测的通行时间,而
是一个随机变量,表示突发情况延迟的时间。
-
节点的变化:顾客的需求是动态变化的。在旅行商的行程中,会收到新顾客的需求,旧的顾客也有可能会取消订单。在本文中,我们假设顾客所有潜在出现的位置集合为 V ,当前所有顾客所在位置集合为 C 。在旅行商服务完一名顾客后,有一定概率从集合 V \ C 中取一个新的点加入 C,也有一定概率删除一位从 C 中选出的未服务的顾客。我们引入随机操作
,表示旅行商在完成第k个顾客的订单后,随机选取insert,delete和do nothing三种操作来表示顾客需求的动态变化。
DTSP是在线优化问题(online optimization problem),是时间依赖的旅行商问题(time-dependent traveling salesman problem,TDTSP)的在线优化版本。而TDTSP是一个单阶段决策问题,考虑由于受交通事故、天气变化、上下班高峰期的影响而使得任意两节点间的旅行时间依赖于一天中所处的具体时段或依赖于该节点在哈密顿圈中所处的具体位置(顺序),我们用函数 来表示旅行时间,其值受抵达节点
的时间
影响。
以下为TDTSP问题的模型。
其中 为二元决策变量,若销售员从节点
到节点
,则
等于1,否则为0。为销售员访问节点
的时间。C为待访问客户池,0为仓库的编号。
此外还研究了DTSP的一个变体——动态取送货问题(Dynamic Pickup and Delivery Problem,DPDP),在此问题中,一个订单包括两位顾客,送货顾客与取货顾客,而每个订单的数量 不一定相同,旅行商同时最多携带不超过数量为Q的货物。该问题的其余设置与旅行商问题相同,具体细节在此不再赘述。
2.算法流程
为了实时求解DTSP,提出了一种基于注意力模型的DRL方法。该方法将DTSPs视为一个马尔科夫决策过程,由状态(state),行动(action),奖励(reward),智能体(agent)四个部分组成:
-
状态分为静态信息和动态信息。静态信息包括所有顾客信息,交通状况模式,订单运输量;动态信息包括当前的所有顾客,当前的交通以及顾客的访问状态。
-
行动定义为下一个访问的顾客。
-
奖励设置为总旅行时间的相反数。
-
设计了两个基于深度神经网络模型的智能体:Model 1(M1)和Model 2(M2)。两者都由编码器和解码器组成。其中M1包含1次编码过程和多次解码过程,较适合处理仅边权(交通情况)变化情况,而M2包含多次编码与解码过程,更适合处理节点(顾客)变化情况。
DRL框架
在深度强化学习中,智能体的编码器和解码器通常与序列数据处理相关。以下是它们的含义及作用:
1.编码器(Encoder):
含义:编码器是将输入序列转换为隐藏表示的组件。它接收来自环境的输入数据(如状态或观察)并将其转换为一个固定维度的向量,其中包含了输入序列的信息。
作用:编码器的主要作用是捕获输入序列中的特征和模式,并将其编码成一个表示,以便后续的处理和学习。它通常使用神经网络(如循环神经网络或卷积神经网络)来实现。
2.解码器(Decoder):
含义:解码器是将隐藏表示转换回原始数据形式的