组合优化在航空航天、交通规划以及经济学等众多学科领域中有广泛应用,其目标是在有限集中寻找最优解。然而状态空间过大的问题让目前组合优化变得棘手。在过去的几年中,使用深度强化学习(deep reinforcement learning,DRL)解决组合优化问题受到广泛关注。然而,现有的方法有两大缺点:
- 大部分工作主要集中在标准的TSP问题上,推广到其他问题并不容易。
- 只能提供一个近似最优解或者满意解,没有一个系统的方法来提升解的质量或者证明其最优性。
另一方面,约束规划(constraint programming,CP)是一种用于解决组合优化问题的有效方法,基于完全搜索的策略,如果时间足够,总可以找到最优解。分支决策是CP的关键选择,用于指导如何探索剩余的搜索空间。
本篇论文 [1] 的工作提出了一种基于DRL和CP的通用方法来解决组合优化问题。方法的核心是将动态规划作为连接两种方法的桥梁,首先通将组合优化问题建模成动态规划形式,再使用深度强化学习方法学习分支搜索方法,将学习到的agent用于CP的分支选取中,从而进一步提升CP的搜索效率提升算法性能。具体的结构如图1所示。
整体结构分为三个阶段,统一表示阶段是指将组合优化问题描述为动态规划模型,该动态规划模型既可以进一步描述为深度强化学习的训练形式用于训练agent,也可以进一步描述为CP模型并根据分支选择策略进行搜索求解。学习阶段主要通过随机生成的方法生成很多约束规划问题的样本,并根据样本进行求解训练。求解阶段将需要求解的问题实例通过动态规划描述为CP模型,并根据学习到的agent进行分支选择求解。图1中的蓝色模块为已有的成熟算法,绿色模块为本文的工作。
图1 本篇论文总体方法架构
总的来说,本文结合了search-based和learning-based两种方法。基于搜索的方法可以保证最优解,但是往往不能从历史数据中得到经验,并且搜索过程有很大的提升空间。基于学习的方法可以利用历史经验,但是不能保证最优并且没有行之有效的提升手段。本文的方法结合了两者的优点,既可以保证最优解,又可以利用历史经验,同时还可以提升搜索效率。
将组合优化写为动态规划(DP)模型
动态规划是一种结合数学建模和编程的方法,通常用于解决复杂的优化问题。动态规划主要通过将问题分解为多阶段子问题,并通过状态转移方程将不同状态联系起来。通过最终的状态反向递推求解每个阶段的解。
考虑优化问题 Q : { max f ( x ) : x ∈ X ⊆ Z n } \mathcal{Q}:\left\{\max f(x): x \in X \subseteq \mathbb{Z}^n\right\} Q:{maxf(x):x∈X⊆Zn}其中 x i x_i xi是决策变量,用于最小化目标函数 f ( x ) f(x) f(x)。将其改造后的动态规划由以下几部分组成 ⟨ S , X , T , R , V , P ⟩ \left \langle S,X,T,R,V,P\right \rangle ⟨S,X,T,R,V,P⟩,现分别进行介绍。
S S S:系统状态:用于描述阶段 i , i ∈ { 1 , . . . , n } i,i \in \{1,...,n\} i,i∈{1,...,n}时的系统状态 s i s_i si。
X X X:系统控制:用于描述阶段 i i i时系统实施的控制 x i x_i xi,其定义域是 D ( x i ) D(x_i) D(xi)。
T T T:状态转移函数:用于描述阶段 i i i时系统状态 s i s_i si经过控制 x i x_i xi转移到下一阶段的状态 s i + 1 s_{i+1} si+1,即 T : S × X → S T:S\times X\rightarrow S T:S×X→S。
R R R:回报函数:用于描述阶段 i i i时系统状态 s i s_i si经过控制 x i x_i xi得到的回报 R ( s i , x i ) R(s_i,x_i) R(si,xi),即 R : S × X → R R:S\times X\rightarrow \mathbb{R} R:S×X→R。
V V V:可行条件:用于描述阶段 i i i时系统状态 s i s_i si是否可行,用于约束可行动作集,即 V : S × X → { 0 , 1 } V:S\times X\rightarrow \{0,1\} V:S×X→{0,1}。
P P P:支配条件:用于描述阶段 i i i时系统状态 s i s_i si是否被支配,同样用于约束可行动作集,即 P : S × X → { 0 , 1 } P:S\times X\rightarrow \{0,1\} P:S×X→{0,1}。
V , P V,P V,P都是用于约束可行动作集的,二者的区别是可行条件V是用于保证模型的可行性,而支配条件 P是用于动作集简化的效率提升手段。
本问题可以通过贝尔曼方程递归迭代求解,即 g i : X → R g_i:X\rightarrow \mathbb{R} gi:X→R表示阶段i时的最优值函数,其递归迭代公式为 g i ( s i ) = max { R ( s i , x i ) + g i + 1 ( T ( s i , x i ) ) } ∀ i ∈ { 1.. n } s.t. T ( s i , x i ) ≠ ⊥ g_i\left(s_i\right)=\max \left\{R\left(s_i, x_i\right)+g_{i+1}\left(T\left(s_i, x_i\right)\right)\right\} \quad \forall i \in\{1 . . n\} \text { s.t. } T\left(s_i, x_i\right) \neq \perp gi(si)=max{R(si,xi)+gi+1(T(si,xi))}∀i∈{1..n} s.t. T(si,xi)=⊥
在最终的时刻回报函数是0,依次递推至初始时刻,该值就是Q的最优值,然后通过递推依次赋值给每个阶段的控制 x i x_i xi并进行存储,即可得到最优解。
但是通常动态规划问题面临维数灾挑战,通常的操作是对支配动作进行剪枝,如果满足以下两个条件之一,该动作会被剪枝:
•根据递推公式,严格地比另一个动作差
•无法产生一个可行的状态转移
但是在实际问题中,虽然剪枝策略可以有效的减少搜索空间,但是由于这两个条件是problem-dependent,因此识别这两个条件开销比较大。此外,有的问题即使进行了剪枝,动作集的维数仍然很大。
RL Encoding
强化学习的主要目的是研究并解决智能体的序贯决策问题,可以用四元组<S,A,T,R>定义强化学习的行为。其中, S S S为状态集合, A A A为动作集合, T T T为转移函数, R R R为奖励函数。注意在累积奖励函数中,删除了discounting factor,这是针对优化问题这一具体应用场景的改进。主流强化学习方法包括两类,即value-based和policy-based。Value-based的代表性算法Deep Q-learning (DQN),其应用深度网络近似action-value function,即 Q ^ ( s , a , w ) ≈ Q ( s , a ) \hat{Q}(s,a,\boldsymbol{w})\approx Q(s,a) Q^(s,a,w)≈Q(s,a),进而选择对应值最大的动作。Policy-based的代表性算法Proximal policy gradient (PPO),其基于policy gradient theorem,即 ∇ π ( V π ( s 0 ) ) = E π [ ∇ w l n π ( a ∣ s , w ) Q π ( s , a ) ) ] \nabla_\pi(V^\pi(s_0))=\mathbb{E}_\pi[\nabla_{\boldsymbol{w}}ln\pi(a|s,\boldsymbol{w})Q^\pi(s,a))] ∇π(Vπ(s0))=Eπ[∇wlnπ(a∣s,w)Qπ(s,a))]直接应用梯度下降优化智能体策略 π \pi π。
由于前文已经将原优化问题建模为DP形式,并得到了对应的六元组。本节的关键在于:如何利用六元组和一个给定问题实例 Q p \mathcal{Q}_p Qp生成强化学习所需的四元组?
State
对于DP模型的每一个阶段 i i i,我们定义其状态为 ( Q p , s i ) (\mathcal{Q}_p,s_i) (Qp,si)。其中 s i s_i si是动态变化的,并根据DP模型进行每阶段的实时更新; Q p \mathcal{Q}_p Qp是静态的,在每一个episode保持不变。在实践中,需要设计良好的嵌入层(Embedding layer),以提取状态向量的特征,并进一步将嵌入处理的结果输入后续的神经网络。
Action
给定DP模型在第 i i i阶段的状态 x i x_i xi和控制量 x i x_i xi,当前阶段的动作 a i ∈ A a_i\in\mathsf{A} ai∈A与 x i x_i xi具备一一对应关系。当然,在选择某个动作之前,需要根据有效性条件(Validity conditions)、支配条件(Dominance conditions)等判定其可行性。具体公式表示为 A i = { v i ∣ v i ∈ D ( x i ) ∧ V ( s i , v i ) = 1 ∧ P ( s i , v i ) = 1 } \mathsf{A}_i=\{v_i|v_i\in D(x_i)\wedge V(s_i,v_i)=1\wedge P(s_i,v_i)=1\} Ai={vi∣vi∈D(xi)∧V(si,vi)=1∧P(si,vi)=1}
Transition
RL的状态转移过程与DP一致,具体公式表示为 s i + 1 = T ( s i , a i ) = ( Q p , T ( s i , a i ) ) = ( Q p , T ( s i , v i ) ) s_{i+1}=\mathsf{T}(s_i,a_i)=(\mathcal{Q}_p,T(s_i,a_i))=(\mathcal{Q}_p,T(s_i,v_i)) si+1=T(si,ai)=(Qp,T(si,ai))=(Qp,T(si,vi))
Reward
奖励函数的设计对于RL来说至关重要,其提供了关键的训练反馈信息。本文指出,在具体的优化问题场景中,首先找到可行解(Feasible solution)相对于最大化奖励值,要处在更高的优先级上。基于此,本文提出了两条奖励函数设计时需要遵守的性质:(1)如果episode e 1 e_1 e1得到的解比episode e 2 e_2 e2的差,那么episode e 1 e_1 e1收集的奖励应该相对更少;(2)存在不可行解的episode收集的奖励,应比得到可行解的episode收集的奖励更少。由此,奖励函数使得智能体首先找到可行解,然后再不断提升可行解的质量。奖励函数具体为 R ( s , a ) = ρ × ( 1 + ∣ U B ( Q p ) ∣ + R ( s , a ) ) \mathsf{R}(s,a)=\rho\times(1+|\mathsf{UB}(\mathcal{Q}_p)|+R(s,a)) R(s,a)=ρ×(1+∣UB(Qp)∣+R(s,a))其中, U B ( Q p ) \mathsf{UB}(\mathcal{Q}_p) UB(Qp)表示组合优化问题 Q p \mathcal{Q}_p Qp目标函数值的上界(Upper bound)。缩放因子 ρ \rho ρ将奖励值的空间进行压缩,到更接近于0的区间值。
Network Architecture and Learning Algorithm
为了保证所提出框架的普适性和高效性,针对优化问题的特点,本文引入了两种深度网络架构,以对输入状态进行高质量的嵌入(Embedding)与表征。第一个架构是图注意力网络(Graph attention network, GAT),这是由于许多组合优化问题天然地具备图结构,例如旅行商问题、车辆路径规划问题等。第二个架构是Set Transformer,这是由于在诸如投资组合优化问题中,我们希望保证输入变量顺序的不变性,例如编码的输入变量 { x 1 , x 2 , x 3 } \{x_1, x_2, x_3\} {x1,x2,x3}和 { x 3 , x 2 , x 1 } \{x_3, x_2, x_1\} {x3,x2,x1}应生成一致的输出。
无论是应用DQN还是PPO训练架构,本文均首先随机生成一系列训练样本,并使得训练样本的分布与我们试图解决问题的分布一致,这也是目前绝大多数应用机器学习求解NP-hard优化问题的研究的做法。
CP Encoding
约束规划(constraint programming,CP)是一种泛用性比较好的算法框架,在实际应用中常用于处理复杂的组合问题。因为应用场景和算法框架的相似,但却不像后者应用范围如此之广,所以人们常常将CP与整数规划(LP)进行比较,来更好的理解CP的特点与优势,如下图所示,虽然两种算法的框架都是系统性的搜索,但是在搜索中,CP不需要同时保证所有约束成立,而是对约束逐一分析,即约束传播(constraint propagation),再对变量的值域进行过滤,这使得CP在更复杂的组合问题(可行域连续性较差)中经常有超过LP的表现。
本文中的 CP 问题,可以使用一个四元组进行定义,其中
X
X
X 是所有变量构成的集合,
D
D
D 是所有变量的值域构成的集合,
C
C
C 是所有约束条件的集合,
O
O
O 是目标函数。本节将会讲解如何通过 DP 模型的六元组得到 CP 所需的四元组并使用该四元组构建 CP 求解模型。
X X X:CP 问题中所需的变量分为两类,与 DP 相同,共有 n 各阶段,每个阶段有两个变量,分别为辅助变量 X i s X_i^s Xis 代表 i 阶段当前模型的状态,决策变量 X i a X_i^a Xia 代表 i 阶段所能够执行的决策动作,值得注意的是求解过程中只对决策变量进行搜索,辅助变量的值可在决策变量确定后通过约束得到。
D D D: CP 问题求解需要所有变量的值域,本文中两类变量的值域分别为 DP 中 S S S 和 X X X 的值域集合。
C C C:包含所有 CP 模型中的约束条件,是 CP 建模的核心,具体的约束如下:
X
i
s
=
ϵ
(
1
)
X_i^s = \epsilon \quad(1)
Xis=ϵ(1)
X
i
s
+
1
=
T
(
X
i
s
,
X
i
a
)
∀
i
∈
{
1
,
.
.
.
,
n
}
(
2
)
X_i^{s+1} = T(X_i^s, X_i^a)\quad \forall i \in\{1, . . .,n\}\quad(2)
Xis+1=T(Xis,Xia)∀i∈{1,...,n}(2)
v
a
l
i
d
i
t
y
C
o
n
d
i
t
i
o
n
(
X
i
s
,
X
i
a
)
∀
i
∈
{
1
,
.
.
.
,
n
}
(
3
)
validityCondition(X_i^s, X_i^a) \quad\forall i \in\{1, . . .,n\}\quad (3)
validityCondition(Xis,Xia)∀i∈{1,...,n}(3)
d
o
m
i
n
a
n
c
e
C
o
n
d
i
t
i
o
n
(
X
i
s
,
X
i
a
)
∀
i
∈
{
1
,
.
.
.
,
n
}
(
4
)
dominanceCondition(X_i^s, X_i^a) \quad\forall i \in\{1, . . .,n\}\quad(4)
dominanceCondition(Xis,Xia)∀i∈{1,...,n}(4)
约束(1)代表初始状态设置为一个值(例如 ϵ \epsilon ϵ)(2)是通过 DP 的转换函数 T T T 将每个阶段的状态链接到前一个阶段 (3)使用 DP 中的 V V V 检验每个阶段状态的可行性 (4)添加 DP 中的 P P P 增加冗余约束加快收敛
O O O:给出 CP 问题的目标方程,本文中通过将每个阶段 CP 的决策变量与环境变量的取值对应到 DP 问题中得到每个阶段的回报 R R R 并求和。
max x a ∑ i = 1 n R ( X i s , X i a ) \max_{x^a}\sum_{i=1}^{n} R(X_i^s, X_i^a) xamaxi=1∑nR(Xis,Xia)
Search Strategy
从前文中,我们已经将同一个DP模型同时转换为RL模型和CP模型,这使得我们可以将RL中训练得出的agent用于CP求解的搜索过程中,针对于不同的应用场景和不同的RL模型,本文提供了三种不同的CP搜索策略,深度优先分枝定界depth-first-branch-and-bound search (BaB),有限差异束搜索iterative limited discrepancy search (ILDS) 基于数值优化进行搜索,更适合于DQN训练出的Agent,而重启搜索restart based search需要一定的策略随机性,更适合policy-based的强化学习训练模型。
实验结果
为了评估算法的性能,本文在两个应用场景上分别测试了三种基于RL的CP搜索策略的算法,RL和CP不结合各自单独求解的算法以及一些工业求解器的算法,其中第一个测试场景为the travelling salesman problem with time windows (TSPTW),是包含非线性约束的常见组合优化问题,另一个测试场景为4-moments portfolio optimization problem (PORT),则是目标为非线性函数的经典组合优化问题。为确保公平性,训练时常都限制再48小时之内,内存占用在1Gb之内,都使用同一台GPU (Tesla V100-SXM2-32GB)执行所有算法。
TSPTW 实验结果
Table1中,我们可以看在城市的数量增长后 OR-Tools、CP-model 和 DQN 的结果明显差于各种RL和CP的混合方法。在混合方法中,基于 DQN 的搜索在寻找解决方案和证明最优性方面都给出了最好的结果。同时使用cache能够明显的提升混合算法的效率。这是因为RL训练得到模型调用次数极多,使用缓存会节约大量的搜索时间。
Table 1 主要实验结果1
PORT实验结果
Table2中,首先考虑目标函数连续的实例,其中size最小的实例,我们观察到 B a B − D Q N ⋆ BaB-DQN^{\star} BaB−DQN⋆, I L D S − D Q N ⋆ ILDS-DQN^{\star} ILDS−DQN⋆, 和 C P CP CP模型取得了最好的结果,但只有 B a B − D Q N ⋆ BaB-DQN^{\star} BaB−DQN⋆找到了所有的最优解。对于size较大的实例,非线性求解器可获得最佳结果,但紧随其后的是 R B S − P P O ⋆ RBS-PPO^{\star} RBS−PPO⋆。目标函数不连续时,非线性求解器由于难以利用求导来求解,而不再占有优势甚至APOPT不再支持这种问题的求解。但混合方法不受此影响,因为事先没有对 DP 公式进行连续性假设。从结果上看,各种混合式的求解算法效果更为优秀。
Table 2 主要实验结果2
Table 2 各算法在100个算例上的运行结果,其中高亮的是表现最好的算法,Sol代表算法给出的最优平均收益,Opt代表达到最优解的算例个数
总结
约束规划算法在组合优化中应用广泛且在复杂组合优化中表现出色,但性能受限于变量的搜索策略,本文通过动态规划作为桥梁联通强化学习和约束规划,将DQN和PPO等强化学习策略和BaB、RBS等搜索策略相结合,使得强化学习训练得到的经验能够帮助更好的进行CP搜索,同时在TSPTW和PORT两个普通组合优化算法表现不佳的非线性应用场景中进行了测试,展现了混合算法的显著提升。文章来源:https://www.toymoban.com/news/detail-692125.html
参考文献
[1] Cappart, Q., Moisan, T., Rousseau, L. M., Prémont-Schwarz, I., & Cire, A. A. (2021, May). Combining reinforcement learning and constraint programming for combinatorial optimization. In Proceedings of the AAAI Conference on Artificial Intelligence (Vol. 35, No. 5, pp. 3677-3687).
[2] Burak Gökgür, Brahim Hnich & Selin Özpeynirci (2018) Parallel machine scheduling with tool loading: a constraint programming approach, International Journal of Production Research, 56:16, 5541-5557, DOI: 10.1080/00207543.2017.1421781
[3] Kanet, John J.; Ahire, Sanjay L.; and Gorman, Michael F., “Constraint Programming for Scheduling” (2004). MIS/OM/DS Faculty Publications. Paper 1.文章来源地址https://www.toymoban.com/news/detail-692125.html
到了这里,关于OM | 强化学习 + 约束规划求解组合优化问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!