文章译自 Ant Colony Optimization for Continuous Domains by Krzysztof Socha and Marco Dorigo,仅供参考。
连续域的蚁群优化算法—— A C O R ACO_{\mathbb{R}} ACOR
文章目录
摘要
本文提出了蚁群优化算法在连续域上的一种扩展。我们展示了蚁群算法是如何适应连续优化的,而不需要对其结构进行任何重大的概念改变,蚁群算法最初是作为组合优化的元启发式算法开发的。我们介绍了总体思路、具体实现和获得的结果。我们将结果与文献中报道的其他连续优化方法进行比较:其他与蚂蚁相关的方法和其他元启发式方法最初是为组合优化开发的,后来被用来处理连续情况。我们讨论了我们的扩展蚁群算法与这些算法的比较,并对其效率和鲁棒性进行了分析。
关键词:蚁群优化,连续优化,元启发式
1. 引言
受蚂蚁觅食行为启发的优化算法最初被提出用于解决组合优化问题。典型的组合优化问题包括调度、车辆路线、时间表排等。这些问题中的很多问题,尤其是那些实际相关的问题,都是NP难的。换句话说,被认为不可能找到有效的(即多项式时间)算法来最优地解决它们。通常这些问题用启发式方法(即不精确的方法)来解决,允许在合理的时间内找到近似解(即较优的但不可证明是最优的解)。
组合优化,顾名思义,即处理寻找可用问题组成的最佳组合或排列。因此,需要将问题划分为有限的组成集合,组合优化算法试图找到它们的最佳组合或排列。许多现实世界的优化问题可以用简单的方式表示为组合优化问题。然而,有一类重要的问题并非如此:需要为连续变量选择值的优化问题。只有允许值的连续范围被转换成有限集合时,才可以用组合优化算法来解决这些问题。大多情况下这并不便捷,尤其是如果初始范围很广的情况下,并且所需的划分精度非常高。在这些情况下,那些天生处理连续变量的算法通常性能更好。本文提出了一种有效的方法,使得蚁群优化算法应用于连续优化问题。
自从蚁群算法作为一种组合优化方法出现以来,人们一直试图用它来解决连续问题。然而,将蚁群元启发式算法应用于连续领域并不简单,所提出的方法通常从蚁群算法中获得灵感,但并不完全遵循它。
与早期的方法相反,本文提出了一种将蚁群算法扩展到连续域的方法,而不需要对其结构进行任何重大的概念改变。为了提高论文的简洁性,我们用 A C O R ACO_\mathbb{R} ACOR表示推广到连续域的蚁群算法。我们旨在展示应用于连续域的 A C O R ACO_\mathbb{R} ACOR的核心思想,以及其在标准基准测试问题上良好的实现。
连续优化并不是一个新的研究领域。有许多算法——包括元启发式——是为解决这类问题而开发的。为了对 A C O R ACO_\mathbb{R} ACOR的性能有一个正确的看法,我们不仅将其与其他与蚂蚁相关的方法进行比较,还将其与其他用于连续优化的元启发式方法进行比较。
值得一提的是,由于接近于蚁群算法的原始公式, A C O R ACO_\mathbb{R} ACOR拥有一个额外的优势——解决混合离散-连续优化问题的可能性。换句话说,有了 A C O R ACO_\mathbb{R} ACOR,现在应该可以考虑一些变量是离散的而另一些是连续的问题。然而,本文没有探讨这种可能性——这是正在进行中的研究。在这里,我们专注于解决纯粹的连续优化问题。
论文组织如下:第二节简要概述了蚁群算法。第3节介绍了 A C O R ACO_\mathbb{R} ACOR,即扩展的解决连续优化问题的蚁群算法。第4节讨论了 A C O R ACO_\mathbb{R} ACOR与其他连续优化方法的比较。第5节介绍了实验设置和获得的结果,并将它们与文献中的结果进行了比较。最后,第6节介绍了结论和未来的工作展望。此外,附录A讨论了一个关于 A C O R ACO_\mathbb{R} ACOR变量相关性处理的重要问题。
2 蚁群优化
在20世纪90年代,蚁群优化作为一种新的自然激励方法被引入解决困难的组合优化问题。蚁群算法的灵感来源于真实蚂蚁的觅食行为。当寻找食物时,蚂蚁最初以随机的方式探索它们巢穴周围的区域。蚂蚁一找到食物来源,就对其进行评估,并把一些食物带回巢穴。在回程中,蚂蚁在地面上留下信息素痕迹。沉积的信息素,其数量可能取决于食物的数量和质量,引导其他蚂蚁寻找食物来源。正如已经表明的那样,蚂蚁之间通过信息素踪迹的间接通信使它们能够找到它们的巢和食物来源之间的最短路径。真实蚁群的这种能力启发了人工蚁群的定义,人工蚁群可以找到困难的组合优化问题的近似解。
蚁群算法的核心部分是信息素模型,它用于对搜索空间进行概率抽样。如[Blum,2004]所示,它可以从组合优化问题模型中导出。组合优化问题模型可定义如下:
定义 2.1 组合优化问题模型 P = ( S , Ω , f ) P = (\bold S,\bold \Omega,f) P=(S,Ω,f)包括:
- 有限离散决策变量集合上定义的搜索空间 S \bold S S和变量之间的一组约束 Ω \bold \Omega Ω;
- 目标函数 f : S → R 0 + f:\bold S\rarr\mathbb{R}_0^+ f:S→R0+尽可能取得最小值。
搜索空间 S \bold S S 定义如下:给定的是一组离散变量 X i ( i = 1 , . . . , n ) X_i(i=1,...,n) Xi(i=1,...,n),其值为 v i j ∈ D i = { v i 1 , . . . , v i ∣ D i ∣ } , ( i = 1 , . . . , n ) v_i^j\in \bold D_i=\{v_i^1,...,v_i^{|D_i|}\},(i=1,...,n) vij∈Di={vi1,...,vi∣Di∣},(i=1,...,n)。一个变量实例化,即一个值 v i j v_i^j vij分配给到一个变量 X i X_i Xi的赋值,用 X i ← v i j X_i\larr v_i^j Xi←vij表示。问题的一个解 s ∈ S s\in S s∈S,即一组完全指派,其中所有变量都有赋值,并且满足 Ω \Omega Ω中所有约束。这便是给定优化组合问题的一个可行解。若集合 Ω \Omega Ω为空, P P P称为无约束问题模型,反之,则称为有约束问题模型。
一个解 s ∗ ∈ S s^*\in S s∗∈S称为全局最优解,当且仅当 f ( s ∗ ) ≤ f ( s ) , ∀ s ∈ S f(s^*)\leq f(s), \forall s\in S f(s∗)≤f(s),∀s∈S。所有全局最优解的集合表示为 S ∗ ⊆ S S^*\subseteq S S∗⊆S。求解组合优化问题要求至少找到一个全局最优解 s ∗ ∈ S s^*\in S s∗∈S。
组合优化问题模型起源于蚁群算法使用的信息素模型。首先,一个实例化的决策变量 X i = v i j X_i= v_i^j Xi=vij(即变量 X i X_i Xi赋值为其值域 D i \bold D_i Di中的一个值 v i j v_i^j vij ),被称为一个解,由 c i j c_{ij} cij表示。所有可能的解的集合由 C \bold C C表示。信息素踪迹参数 T i j T_{ij} Tij与每个解 c i j c_{ij} cij相关。所有信息素踪迹参数的集合用 T \bold T T表示。信息素踪迹参数 T i j T_{ij} Tij的值用 τ i j \tau_{ij} τij表示(也称为信息素值)。然后,在搜索过程中,蚁群算法使用并更新该信息素值。它使得不同组的解的每个组成有概率分布模型。
2.1 蚁群元启发式算法
---------------------------------------------------
Algorithm 1 Ant Colony Optimization metaheuristic
---------------------------------------------------
while termination conditions not met do
ScheduleActivities
AntBasedSolutionConstruction()
PheromoneUpdate()
DaemonActions() {optional}
end ScheduleActivities
end while
蚁群元启发式算法由算法1所示。它由三个算法组成,这些组件聚集在 S c h e d u l e A c t i v i t i e s ScheduleActivities ScheduleActivities构造中。 S c h e d u l e A c t i v i t i e s ScheduleActivities ScheduleActivities构造没有指定如何调度和同步这三个活动,这留给算法设计者自行决定。在下文中,我们将更详细地解释这三个算法块。
A n t B a s e d S o l u t i o n C o n s t r u c t i o n ( ) AntBasedSolutionConstruction() AntBasedSolutionConstruction():人工蚂蚁从有限的一组n个可用解的集合 C = { c i j } \bold C=\{c_{ij}\} C={cij}中获取解的部分序列来构造解。一条解决方案的构造从一个空的解 s p = ∅ s^p=\empty sp=∅开始。然后,在每个构造步骤,通过从向解步骤集合 N ( s p ) ∈ C \ s p N(s^p)\in \bold C\backslash s^p N(sp)∈C\sp中添加一个可行解分量来扩展当前部分解集合 s p s^p sp。构造解的过程可以看作是构造图 G C = ( V , E ) G_C=(\bold V,\bold E) GC=(V,E)上的一条路径。解的集合 C \bold C C可以和图 G C G_C GC的点的集合 V \bold V V有关,也可以和边的集合 E \bold E E相关。 G C G_C GC中允许的路径由解的构造机制隐式定义,该机制定义了关于部分解 s p s^p sp决方案的集合 N ( s p ) N(s^p) N(sp)。
从
N
(
s
p
)
N(s^p)
N(sp)中选择一个解的组成是在每个构建步骤中按概率完成的。解的组成的概率选择的确切规则在不同的蚁群算法中有所不同。最基本和最著名的是蚂蚁系统:
p
(
c
i
j
∣
s
p
)
=
τ
i
j
α
⋅
η
(
c
i
j
)
β
∑
c
i
l
∈
N
(
s
p
)
τ
i
l
α
⋅
η
(
c
i
l
)
β
,
∀
c
i
j
∈
N
(
s
p
)
,
p(c_{ij}|s^p)=\frac{\tau_{ij}^\alpha \cdot\eta(c_{ij})^\beta} {\sum_{c_{il}\in N(s^p)}\tau_{il}^\alpha\cdot\eta(c_{il})^\beta},\quad \forall c_{ij}\in N(s^p),
p(cij∣sp)=∑cil∈N(sp)τilα⋅η(cil)βτijα⋅η(cij)β,∀cij∈N(sp),
其中
τ
i
j
\tau_{ij}
τij是与组成
c
i
j
c_{ij}
cij相关联的信息素值,
η
(
⋅
)
\eta(\cdot)
η(⋅)是在每个构建步骤为每个可行解组件
c
i
j
∈
N
(
s
p
)
c_{ij}\in N(s^p)
cij∈N(sp)分配启发式值的加权函数。加权函数给出的值通常称为启发式信息。此外,
α
\alpha
α和
β
\beta
β是正参数,它们的值决定了信息素信息和启发式信息之间的关系。
P
h
e
r
o
m
o
n
e
U
p
d
a
t
e
(
)
PheromoneUpdate()
PheromoneUpdate():信息素更新的目的是增加好的或有希望的解决方案相关联的信息素值,减少与坏的解决方案相关联的信息素值。通常,这是通过将与所选好的解决方案
s
c
h
s_{ch}
sch相关联的信息素水平增加某个值
Δ
τ
\Delta \tau
Δτ,并通过信息素蒸发降低所有信息素值来实现的:
τ
i
j
←
{
(
1
−
ρ
)
τ
i
j
+
ρ
Δ
τ
i
f
τ
i
j
∈
s
c
h
,
(
1
−
ρ
)
τ
i
j
o
t
h
e
r
w
i
s
e
,
\tau_{ij}\larr \begin{cases} (1-\rho)\tau_{ij}+\rho\Delta\tau \quad if\quad \tau_{ij}\in s_{ch}, \\(1-\rho)\tau_{ij}\quad \quad \quad \quad otherwise, \end{cases}
τij←{(1−ρ)τij+ρΔτifτij∈sch,(1−ρ)τijotherwise,
上式中
ρ
∈
(
0
,
1
]
)
\rho \in(0,1])
ρ∈(0,1]),表示信息素蒸发速率。为了避免算法收敛过快,需要进行信息素蒸发。它实现了一种有实用的遗忘形式,有利于对搜索空间探索新的区域。
一般来说,蚂蚁较早找到的好的解决方案被用来更新信息素,以便增加后续蚂蚁在搜索空间的有希望的区域中搜索的概率。不同的蚁群算法,例如蚁群系统或者最大最小蚂蚁系统,它们的信息素更新方式并不相同。原则上,算法使用迭代最优解(即在最后一次迭代中找到的最优解)或迄今为止的最优解(即从算法运行开始到现在所找到的最优解)来更新信息素(有时使用蚂蚁找到的几个解的组合)。至今最优解更新策略导致更快的收敛,而迭代最优解更新策略允许搜索更加多样化。
D a e m o n A c t i o n s ( ) DaemonActions() DaemonActions():守护进程动作可以用来实现不能由单个蚂蚁执行的集中式动作。例如,将局部搜索应用于构建的解决方案,或者收集全局信息,这些信息可用于决定是否需要存储额外的信息素,以便从非局部的角度来偏置搜索过程。
2.2 蚁群算法应用
在最初的概念验证应用于旅行商问题(TSP)之后[Dorigo,1992,Dorigo等人,1996],ACO被应用于许多其他的组合优化问题。例子包括分配问题的应用[科斯塔和赫兹,1997年,圣尤兹勒和霍斯,2000年,索查等人,2003年],调度问题[默克勒等人,2002年,加根等人,2002年,布卢姆和桑佩尔斯,2004年],和车辆路线问题[甘巴拉等人,1999年,雷曼等人,2004年]。
3. 连续域的蚁群算法— A C O R ACO_\mathbb{R} ACOR
类似于组合优化问题,连续优化问题的模型可以定义为:
定义 3.1 连续优化问题模型 Q = ( S , Ω , f ) Q=(\bold S, \bold \Omega,f) Q=(S,Ω,f)包括:
-
有限连续决策变量集合上定义的搜索空间 S \bold S S和变量之间的一组约束 Ω \bold \Omega Ω;
-
目标函数 f : S → R 0 + f:\bold S\rarr\mathbb{R}_0^+ f:S→R0+尽可能取得最小值。
搜索空间S定义如下:给定一组连续变量,其值为 v i j ∈ D i = { v i 1 , . . . , v i ∣ D i ∣ } , ( i = 1 , . . . , n ) v_i^j\in \bold D_i=\{v_i^1,...,v_i^{|D_i|}\},(i=1,...,n) vij∈Di={vi1,...,vi∣Di∣},(i=1,...,n)。一个变量实例化,即一个值 v i j v_i^j vij分配给到一个量 X i X_i Xi的赋值,用 X i ← v i j X_i\larr v_i^j Xi←vij表示。问题的一个解 s ∈ S s\in S s∈S,即一组完全指派,其中所有变量都有赋值,并且满足 Ω \Omega Ω中所有约束。这便是给定的连续优化问题的一个可行解。若集合 Ω \Omega Ω为空, P P P称为无约束问题模型,反之,则称为有约束问题模型。
一个解 s ∗ ∈ S s^*\in S s∗∈S称为全局最优解,当且仅当 f ( s ∗ ) ≤ f ( s ) , ∀ s ∈ S f(s^*)\leq f(s), \forall s\in S f(s∗)≤f(s),∀s∈S。所有全局最优解的集合表示为 S ∗ ⊆ S S^*\subseteq S S∗⊆S。求解连续优化问题要求至少找到一个全局最优解 s ∗ ∈ S s^*\in S s∗∈S。
蚁群算法的核心思想是基于有偏的(由信息素引起的)解决方案概率选择,逐步构建解决方案的组成。在应用于组合优化问题的蚁群算法中,可用解的集合由问题公式定义。在每个构建步骤中,蚂蚁根据**公式(1)**从可用组件的集合中概率性地选择解决方案组成。与集合
N
(
s
p
)
N(s^p)
N(sp)元素相关联的概率构成了蚂蚁采样的离散概率分布(图1 a),以便选择要添加到当前部分解
s
p
s^p
sp的分量。
图1. (a) 有限集合 { c i 1 , . . . , c i 10 } ∈ N ( s p ) \{c_{i1},...,c_{i10}\}\in N(s^p) {ci1,...,ci10}∈N(sp)成员的离散概率分布 P d ( c i j ∣ s P ) P_d(c_{ij}|s^P) Pd(cij∣sP);(b) 在可取区间 x ∈ [ x m i n , x m a x ] x\in [x_{min},x_{max}] x∈[xmin,xmax]连续概率分布 P c ( x ∣ s p ) P_c(x|s^p) Pc(x∣sp)。两个图上的 y y y轴表示概率 p p p,注意 ∑ l p ( c i j ∣ s p ) = ∫ x m i n x m a x p ( x ∣ s p ) d x = 1 \sum_lp(c_{ij}|s^p)=\int_{x_{min}}^{x_{max}}p(x|s^p)dx=1 ∑lp(cij∣sp)=∫xminxmaxp(x∣sp)dx=1。
应用 A C O R ACO_{\mathbb{R}} ACOR的基本思想是从使用离散概率分布改为使用连续概率分布,即概率密度函数(图1 b)。
在 A C O R ACO_{\mathbb{R}} ACOR中,单只蚂蚁从概率分布密度函数取样。在下面的章节中,我们将解释这是如何实现的。在3.1节,我们简要介绍了使用概率分布密度函数的想法。在3.2节,我们概述了 A C O R ACO_{\mathbb{R}} ACOR使用的信息素表示。最后,在3.3节,我们给出了 A C O R ACO_{\mathbb{R}} ACOR算法本身的详细描述。此外,附录A介绍了处理 A C O R ACO_{\mathbb{R}} ACOR相关变量的一些具体方法。
3.1 概率密度函数 P D F PDF PDF
在深入描述
A
C
O
R
ACO_{\mathbb{R}}
ACOR算法之前,我们必须讨论概率分布函数的某些特性,并选择我们将使用的概率函数。原则上,概率密度函数可以是任何函数
P
(
x
)
:
R
∋
x
→
P
(
x
)
∈
R
P(x):\mathbb{R}\ni x→P(x)\in \mathbb{R}
P(x):R∋x→P(x)∈R,使得:
∫
−
∞
∞
P
(
x
)
d
x
=
1
.
\int_{-\infty}^\infty P(x)dx=1 \ .
∫−∞∞P(x)dx=1 .
对于给定的一个概率密度函数
P
(
x
)
P(x)
P(x),可以定义相关的分布函数(Cumulative distribution function,CDF)。这在对相应的PDF进行采样时通常很有用。与PDF
P
(
x
)
P(x)
P(x)关联的CDF
D
(
x
)
D(x)
D(x)定义如下:
D
(
x
)
=
∫
−
∞
x
P
(
t
)
d
t
.
D(x)=\int_{-\infty}^xP(t)dt\ .
D(x)=∫−∞xP(t)dt .
对概率密度函数PDF取样的通常做法是使用其分布函数CDF的倒数
D
−
1
(
x
)
D^{-1}(x)
D−1(x)。当使用CDF的逆函数时,有一个产生均匀分布的实数的伪随机数发生器就足够了。然而,要注意的是,对于任意选择的概率密度函数
P
(
x
)
P(x)
P(x),找到
D
−
1
(
x
)
D^{-1}(x)
D−1(x)并不总是简单的。
常用的概率密度函数之一是高斯分布函数。它有一些明显的优势,比如一种相当简单的采样方式,如Box-Muller方法,但它也有一些劣势。单个高斯函数不能描述搜索空间的两个不相交区域有希望的情况,因为它只有一个最大值。由于这个事实,我们使用了一个基于高斯函数,但略有增强的概率密度函数—高斯核概率密度函数(Gaussian Kernel PDF)。类似的结构以前也使用过[博斯曼和蒂伦斯,2000],但方式并不完全相同。我们将高斯核定义为几个一维高斯函数的加权和
g
l
i
(
x
)
g_l^i(x)
gli(x),并将其表示为
G
i
(
x
)
G^i(x)
Gi(x):
G
i
(
x
)
=
∑
l
=
1
k
ω
l
g
l
i
(
x
)
=
∑
l
=
1
k
ω
l
1
σ
l
i
2
π
e
−
(
x
−
μ
l
i
)
2
2
σ
l
i
2
.
G^i(x)=\sum_{l=1}^k \omega_lg_l^i(x)=\sum_{l=1}^k \omega_l\frac{1}{\sigma_l^i\sqrt{2\pi}}e^{-\frac{(x-\mu_l^i)^2}{2\sigma_l^{i^2}}}\ .
Gi(x)=l=1∑kωlgli(x)=l=1∑kωlσli2π1e−2σli2(x−μli)2 .
因为我们使用的高斯核概率密度函数和问题的维数一样多,
i
=
1
,
.
.
.
,
n
i = 1,...,n
i=1,...,n 标识单个这样的PDF。高斯核
G
i
(
x
)
G^i(x)
Gi(x)由三个向量参数参数化:
ω
\bold{\omega}
ω为与每个高斯函数相关的权重向量,
μ
i
\bold \mu^i
μi是各个高斯函数均值向量,
σ
i
\bold \sigma^i
σi是各个高斯函数标准差向量。所有这些向量的基数等于构成高斯核的高斯函数的数量。为了方便起见,我们将使用参数
k
k
k来表示它,因此
∣
ω
∣
=
∣
μ
i
∣
=
∣
σ
i
∣
=
k
|\bold \omega | = |\bold \mu^i| = |\bold \sigma^i| = k
∣ω∣=∣μi∣=∣σi∣=k。
与单一高斯函数相比,这种概率密度函数允许相当简单的采样,但在可能的形状上提供了更大的灵活性。这种高斯核概率密度函数的一个例子如图2所示。
图2. 五个高斯函数和它们叠加得到的高斯核函数的例子(图示限于范围 x ∈ [ 5 , 5 ] x \in [5,5] x∈[5,5])。
3.2 A C O R ACO_{\mathbb{R}} ACOR的信息素表示方法
在用于组合优化的蚁群算法中,信息素信息以表格的形式存储。在每次迭代中,当选择要添加到当前部分解的组件时(根据公式1),蚂蚁使用该表中的一些值作为离散概率分布(图1 a)。在连续优化的情况下,蚂蚁的选择不限于有限集合(图1 b)。因此,不可能以表格的形式表示信息素。必须采取不同的方法。
我们使用了一个类似于Guntsch和米Middendorf在基于种群的蚁群算法(Population-Based ACO,PB-ACO)[Guntsch and Middendorf, 2002]中提出的想法。在PB-ACO中,信息素表是根据找到的好的解决方案的组成部分来更新的,就像在常规的ACO中一样。然而,在常规蚁群算法中,一旦信息素表被更新,蚂蚁找到的当前解就会被丢弃。相比之下,PB-ACO跟踪一定数量的解用于更新信息素表。通过对信息素表执行减量更新,最早解的解决方案相关联的信息素最终被移除,从而消除其影响。
在
A
C
O
R
ACO_{\mathbb{R}}
ACOR中,我们也跟踪一个解决方案档案中的多个解决方案。对于一个n维问题的每个解决方案,
A
C
O
R
ACO_{\mathbb{R}}
ACOR在
T
T
T中存储其n个变量的值和目标函数的值
f
(
s
)
f(s)
f(s)。第
l
l
l个解的第
i
i
i个变量在此用
s
l
i
s_l^i
sli表示。图3给出了解档案的结构。
图3. A C O R ACO_{\mathbb{R}} ACOR保存的解决方案档案。解决方案根据其质量在档案中排序,即对于最小化问题: f ( s 1 ) ≤ f ( s 2 ) ≤ . . . ≤ f ( s l ) ≤ . . . ≤ f ( s k ) f(s_1) ≤ f(s_2) ≤...≤ f(s_l) ≤...≤ f(s_k) f(s1)≤f(s2)≤...≤f(sl)≤...≤f(sk)。每个解决方案都有一个相关的权重 ω \omega ω,该权重取决于解决方案的质量。因此, ω 1 ≥ ω 2 ≥ . . . ≥ ω l ≥ . . . ≥ ω k \omega_1≥ \omega_2≥...≥ \omega_l≥...≥\omega_k ω1≥ω2≥...≥ωl≥...≥ωk。概率密度函数 G i G^i Gi仅由档案中第 i i i个坐标的所有 k k k个解构建。
在PB-ACO算法中,解的成分直接用于修改信息素表,而在连续的情况下,我们使用它们来动态生成概率密度函数。为了实现这一点,定义了一种基于一组记忆解生成PDF的方法。
如第3.1节的公式5所示,高斯核PDF由三个向量 ω \bold \omega ω, μ i \bold \mu^i μi,和 σ i \bold \sigma^i σi(它们的基数都是 k k k)参数所确定。档案中的解决方案用于计算这些参数的值,从而形成高斯核概率密度函数,用于指导蚂蚁的搜索过程。
档案中存储的解的数量被设置为
k
k
k,因此该参数决定了PDF的复杂性:有
k
k
k个独立的高斯函数组成高斯核PDF。对于每个维度
i
=
1
,
.
.
.
,
n
i = 1,...,n
i=1,...,n的问题,都有定义一个不同的高斯核PDF
G
i
G^i
Gi(见图3)。对于每个这样的
G
i
G^i
Gi,档案中所有解的第
i
i
i个变量值成为向量
μ
i
\bold \mu^i
μi的元素:
μ
i
=
{
μ
1
i
,
.
.
.
,
μ
k
i
}
=
{
s
1
i
,
.
.
.
s
k
i
}
.
\bold \mu^i=\{\mu_1^i,...,\mu_k^i\}=\{s_1^i,...s_k^i\}\ .
μi={μ1i,...,μki}={s1i,...ski} .
权重向量
ω
\bold \omega
ω通过以下方式创建。对添加到档案
T
T
T中的每个解决方案进行评估和排名(随机断开联系)。档案中的解决方案根据其等级进行排序,如解决方案
s
l
s_l
sl的等级为
l
l
l。解决方案
s
l
s_l
sl的权重
ω
l
\omega_l
ωl根据以下公式计算:
ω
l
=
1
q
k
2
π
e
−
(
l
−
1
)
2
2
q
2
k
2
,
\omega_l=\frac{1}{qk\sqrt{2\pi}}e^{-\frac{(l-1)^2}{2q^2k^2}},
ωl=qk2π1e−2q2k2(l−1)2,
上式本质上将权重定义为具有自变量
l
l
l、均值1.0和标准差
q
k
qk
qk的高斯函数值,其中
q
q
q是算法的参数。当
q
q
q值较小的时候,排序最好的解是首选的,当
q
q
q值较大的时候,概率变得更均匀。此参数对
A
C
O
R
ACO_{\mathbb{R}}
ACOR算法的影响类似于调整
A
C
O
ACO
ACO算法中迭代最佳路径和迄今最佳信息素更新之间的平衡。参数
q
q
q的影响的更详细的分析在第5.3节中给出。
为了描绘每个高斯核概率密度函数 G i G^i Gi的最终形状,需要定义标准差的向量 σ i \bold \sigma^i σi。作为解决方案构建过程的一部分,下面一节将详细描述如何实现这一点。
3.3 A C O R ACO_{\mathbb{R}} ACOR元启发式方法框架
在本节中,我们概述了 A l g o r i t h m 1 Algorithm \ 1 Algorithm 1中提出的蚁群算法元启发式算法的三个主要算法组件的版本。
A n t B a s e d S o l u t i o n C o n s t r u c t i o n ( ) AntBasedSolutionConstruction() AntBasedSolutionConstruction():给定决策变量 X i , i = 1 , . . . , n Xi,\ i=1,...,n Xi, i=1,...,n,蚂蚁通过执行 n n n个构造步骤来构造一个解。在 s t e p i step \ i step i,一只蚂蚁为变量 X i X_i Xi选择一个值。如前所述,高斯核PDF由许多常规的高斯函数组成。所使用的函数的数量等于解决方案档案的大小 k k k。在 s t e p i step \ i step i,仅使用关于第 i i i维的信息(即,决策变量 X i Xi Xi)。这样,在每一步中,得到的高斯核函数 G i G^i Gi都是不同的。
遵循公式5,为了定义PDF G i G^i Gi,必须定义向量 μ i \bold \mu^i μi、 σ i \bold \sigma^i σi和 ω \bold \omega ω的值。而 μ i \bold \mu^i μi和 ω \bold \omega ω的构建已经在3.2节讨论过了。标准差向量 σ i \bold \sigma^i σi的计算是最复杂的问题。在详细介绍如何做到这一点之前,我们先解释一下公式5的实际实现。
在实际中,采样过程按如下方式完成。首先,权重向量
ω
ω
ω的元素按照公式7计算。然后,采样分两个阶段进行。第一阶段包括选择构成高斯核的高斯函数之一。选择第
l
l
l个高斯函数的概率
p
l
p_l
pl由下式给出:
p
l
=
w
l
∑
r
=
1
k
ω
r
.
p_l=\frac{w_l}{\sum_{r=1}^k\omega_r}\ .
pl=∑r=1kωrwl .
第二阶段包括对选定的高斯函数(即,在步骤
i
i
i中的函数
g
l
i
g_l^i
gli)进行采样。这可以使用随机数生成器来完成,该随机数生成器能够根据参数化正态分布来生成随机数,或者通过结合例如Box-Muller方法使用均匀随机发生器来完成[Box-Muller,1958]。这两阶段采样等价于对公式5中定义的高斯核PDF 进行采样。
显然,在步骤 i i i,标准差只需要在第一阶段选择单个高斯函数 g l i ( x ) g_l^i(x) gli(x)时知道。因此,我们不计算标准差 σ i \bold \sigma^i σi的整个向量,只需要计算单个元素 σ l i \sigma^i_l σli。
第 l l l个高斯函数的选择在每只蚂蚁每次迭代中只进行一次。这意味着蚂蚁仅使用与单个解 s l s_l sl相关的高斯函数,即函数 g l i , i = 1 , . . . , n g_l^i,\ i = 1,...,n gli, i=1,...,n,用于在一次迭代中构造整个解。这允许利用变量之间的相关性,这在附录A中有详细解释。当然,在每个构建步骤中实际采样的高斯函数不同,如步骤 i i i, μ l i \mu_l^i μli,并且 σ l i \sigma_l^i σli是动态计算的,如下所示。
为了确定在构建步骤
i
i
i中标准偏差
σ
l
i
\sigma_l^i
σli的值,我们计算从所选解决方案
s
l
s_l
sl到档案中其他解决方案的平均距离,并将其乘以参数
ξ
\xi
ξ:
σ
l
i
=
ξ
∑
e
=
1
k
x
e
i
−
x
l
i
k
−
1
.
\sigma_l^i=\xi\sum_{e=1}^k\frac{x_e^i-x_l^i}{k-1}\ .
σli=ξe=1∑kk−1xei−xli .
所有维度中参数
ξ
>
0
\xi > 0
ξ>0,参数
ξ
\xi
ξ具有与蚁群算法中信息素蒸发率相似的效果。
ξ
\xi
ξ值越高,算法的收敛速度越慢。
A
C
O
ACO
ACO算法中的信息素蒸发率会影响长期记忆,即更差的解会被更快地遗忘。
A
C
O
R
ACO_\mathbb{R}
ACOR中参数
ξ
\xi
ξ影响对长期记忆的使用,即在构建新的解时,更差的解不太可能被考虑。
正如我们所说的,整个过程是针对每个维度 i = 1 , . . , n i=1,..,n i=1,..,n依次完成的,每次平均距离 σ l i \sigma_l^i σli的计算只使用了当前单独维度 i i i。这确保了算法能够适应所求问题的线性变换(例如,从球面模型移动到椭球体模型,或者旋转椭球体模型)。
P h e r o m o n e U p d a t e ( ) PheromoneUpdate() PheromoneUpdate():如前所述,在 A C O R ACO_\mathbb{R} ACOR算法中,信息素信息存储为解决方案档案。这意味着信息素更新程序必须对该档案执行某种形式的更新。
档案 T T T的大小 k k k是算法的一个参数。 k k k不能小于被解决问题的维数。在算法开始时,通过均匀随机抽样产生 k k k个解来初始化解档案 T T T。
信息素更新是通过将一组新生成的解决方案添加到解决方案档案 T T T中,然后移除相同数量的最差解决方案来完成的,因此档案的总大小不会改变。这个过程保证了只有最好的解决方案保存在存档中,使它们有效地引导蚂蚁的搜索过程。
D a e m o n A c t i o n s ( ) DaemonActions() DaemonActions():作为这个算法块的一部分,这步更新迄今最优解,这样一旦满足终止条件,它就可以被返回。我们不应用任何局部搜索试探法,尽管这可以很容易地提高算法性能。
4. A C O R ACO_\mathbb{R} ACOR算法的定位
蚁群算法是一个相当大的连续优化算法家族的一部分。对于这类问题,文献中已经提出了许多方法。它们包括一些与蚂蚁相关的方法[Bilchev and Parmee, 1995, Monmarche et. al, 2000, Dreo and Siarry, 2002],以及更一般的群体启发的方法,如粒子群优化算法[Kennedy and Eberhart, 1995]。还有许多其他方法:许多元启发式方法最初是为组合优化而开发的,后来被用于连续情况。例子包括连续遗传算法(CGA)[Chelouah and Siarry, 2000],增强模拟退火(ESA) [Siarry et al., 1997],或增强连续禁忌搜索(ECTS)[Chelouah and Siarry, 1999]。
此外,还有其他方法——类似于蚁群算法——明确使用概率分布估计的概念。这些算法中的许多都是从进化算法的一般类别中衍生出来的。例子包括进化策略(ES) [Schwefel,1981,Ostermeier等人,1994,Hansen和Ostermeier,2001],迭代密度估计算法(IDEA) [Bosman和Thierens,2000],混合贝叶斯优化算法()cen aˇ sek和Schwarz,2002],或基于种群的增量学习()[Baluja和Caruana,1995,袁和。其中一些,类似于蚁群算法,最初用于组合优化,后来才适用于处理连续域。
除了到目前为止提到的所有算法,还有很多基于梯度的连续优化算法。它们优化速度很快,但是需要一些先决条件。它们能够快速找到局部最小值,但是它们要求优化函数是连续的和可微的。这种算法的例子包括牛顿法 [Ralston and Rabinowitz, 1978],或通常用于训练人工神经网络的反向传播算法 [Rumelhart et al., 1986]。由于上述先决条件,基于梯度的算法的有用性是有限的。 A C O R ACO_\mathbb{R} ACOR以及前面提到的所有其他连续优化算法都没有这样的限制,这使得它们更加通用。
4.1 A C O R ACO_\mathbb{R} ACOR算法对比其它群体算法
我们将在本节中提到的基于群体的算法的主要是与蚂蚁相关的算法。在这一节的最后,我们将介绍一个与蚂蚁无关的基于群体的算法。
如第1节所述,以前已经有将基于蚂蚁优化算法应用于连续域的尝试。有些尝试比其他尝试更成功,但没有一个是蚁群算法对连续域的扩展。相反,它们是新的算法,也从蚂蚁的行为中获得了最初的灵感。在下面的段落中,我们将简要介绍这些算法,并指出它们与 A C O R ACO_\mathbb{R} ACOR有何不同。
将蚂蚁相关算法应用于连续优化问题的第一个尝试是连续蚁群算法(CACO)[Bilchev and Parmee, 1995]。在CACO,蚂蚁从一个叫做巢穴的地方开始,这个地方位于搜索空间的某个地方。找到的好的解决方案被存储为一组向量,它们起源于巢穴。在算法的每次迭代中,蚂蚁从概率上选择其中一个向量。然后,他们继续从所选向量的端点开始搜索,从那里进行一些随机移动。向量用找到的最佳结果进行更新。尽管CACO的作者声称他们从最初的蚁群算法公式中获得了灵感,但还是有重要的不同之处。他们引入了巢穴的概念,这在蚁群算法元启发式算法中是不存在的。此外,CACO没有执行解决方案的增量构造,这是蚁群算法元启发式的主要特征之一。因此,CACO不足以称之为ACO的扩展。
另一种与蚂蚁相关的连续优化方法是API算法[Monmarche等人,2000]。API没有声称是基于蚁群算法元启发式的。蚂蚁独立进行搜索,但从同一个巢穴开始(巢穴定期移动)。蚂蚁只采取串联行进,这是一种自然增长策略。这是迄今为止发表的与蚂蚁相关的算法中唯一已知的既能解决离散优化问题又能解决连续优化问题的算法。
第三种基于蚂蚁的连续优化方法是连续交互蚁群(CIAC)[Dreo和Siarry博士,2002]。CIAC在蚂蚁之间使用两种类型的通讯:信息素信息(存放在搜索空间路径点上的信息素)和蚂蚁之间的直接通讯。蚂蚁在搜索空间中移动,被放置在路径点上的信息素所吸引,并由个体之间的一些直接通信所引导。尽管CIAC也声称其最初的灵感来自于蚁群算法,但区别是多方面的:蚂蚁之间有直接的交流,而没有解决方案的增量构建。作为CACO,CIAC也不是ACO的延伸。
最后,正如本节开头提到的,有一个众所周知的基于群体的连续优化算法,它与蚂蚁无关。叫做粒子群优化(PSO) [Kennedy and Eberhart,1995]。粒子群优化算法通过一群粒子作用实现。这些粒子以一定的速度在搜索空间中移动。速度向量的值和方向根据搜索空间中的吸引子而变化。每个粒子对两个这样的吸引子起反应。一个是粒子找到的最佳值,一个是全局找到的最佳值。实验表明,粒子群算法在许多连续优化问题上表现良好。
4.2 A C O R ACO_\mathbb{R} ACOR和进化算法
组合优化的 A C O ACO ACO算法在许多方面类似于进化算法(EAs)。蚁群算法和进化算法都明确地使用了概率分布的概念,以便在搜索空间中找到有希望的区域。这种相似性在比较 A C O R ACO_\mathbb{R} ACOR和进化算法它们适用于连续域时得以保持。
Kern et al. in [Kern et al., 2004]对几种致力于连续优化的进化算法进行了广泛的比较—从非常简单的算法到非常先进的算法。我们将简要介绍它们。
Kern等人比较的算法集包括三个版本的进化策略(ES),以及另外两个算法—混合贝叶斯优化算法(MBOA)和迭代密度估计算法(IDEA)。在这种比较中使用的最简单的算法是(1+1)ES [Kern et al., 2004]。它是一个简单的ES,每个迭代有一个父代生成一个子代。只有代表更高质量解决方案的个体被保留下来。第二个ES是累积步长适应ES( Evolutionary Strategy with Cumulative Step Size Adaptation,CSA-ES)[Ostermeier et al., 1994, Kern et al., 2004]。它通过使用父元素所遍历的路径来调整全局步长。第三种被考虑的ES是CMA-ES(ES with Covariance Matrix Adaptation)[Hansen and Ostermeier, 2001, Kern et al., 2004]。它是CSA-ES的扩展版本,具有协方差矩阵的随机自适应。
两个非ES算法中的第一个是IDEA,由Bosman和Thierens提出[Bosman and Thierens, 2000]。它形式化了连续域中的EDAs(估计分布算法)。为了估计父种群的分布,IDEA利用了每个多元联合概率分布都可以写成一个条件因数分解: P ( x i , . . . , x n ) = Π i = 1 n P ( x i ∣ x i + 1 , x i + 2 , . . . , x n ) P(x_i,...,x_n)=\Pi_{i=1}^n P(x_i|x_{i+1},x_{i+2},...,x_n) P(xi,...,xn)=Πi=1nP(xi∣xi+1,xi+2,...,xn)。父代种群的概率模型每次迭代都会重建。
在这次比较中最后考虑的算法是MBOA。这是一个具有决策树形式的局部结构的贝叶斯网络,它记录了父个体之间的相互依赖关系。第一个使用带有决策树的贝叶斯网络模型的EDA是分层贝叶斯优化算法(hBOA) [Pelikan et al., 2000]。MBOA是hBOA从二进制到连续域的扩展。事实上,MBOA能够同时处理离散和连续变量,就像 A C O R ACO_\mathbb{R} ACOR一样。
这些算法各不相同,但它们都使用了一些学习和建模明确概率分布的方法。这些算法有两种使用概率分布的方法。所有版本的ES在每次迭代中递增地更新它们的概率分布。相比之下,IDEA和MBOA每次都完全重建它们。在这方面的行为是不同的。与蚁群算法的组合优化相似,蚁群在每个构造步骤中使用不同的、动态创建的概率分布。这种分布依赖于前面的构建步骤,并且对于每个蚂蚁可能不同。因此, A C O R ACO_\mathbb{R} ACOR更接近IDEA和MBOA的做法,但它的粒度更细——在一次迭代中使用了几个动态创建的概率分布。
Kern等人比较的所有概率学习算法都使用某种形式的高斯函数来建模概率分布。(1+1)ES和CSA-ES采用各向同性高斯分布。IDEA使用一种(或者更多种——如果启用了聚类的话,是多种聚合)随机高斯分布。MBOA使用与 A C O R ACO_\mathbb{R} ACOR相似的概念——Gaussian核分布,但是MBOA的高斯核分布函数是在搜索空间的分区上定义的。而 A C O R ACO_\mathbb{R} ACOR使用一组一维高斯核分布。每个这样的高斯分布在一次迭代中用于不同的构造步骤。 A C O R ACO_\mathbb{R} ACOR的主要特征是它对每个维度都使用了不同的分布函数,每个这样的高斯核函数由几个一维高斯函数叠加而成。
5. 实验设置和结果
在本节中,我们将介绍评估 A C O R ACO_\mathbb{R} ACOR算法性能的实验设置和所获得的结果。为了对 A C O R ACO_\mathbb{R} ACOR与其他连续优化方法的性能进行比较,我们使用了典型的基准测试函数(benchmark),这些基准测试函数已经在文献中用于展示不同方法和算法的性能。
显然,与过去用于连续优化的每一种方法进行比较是不切实际的。因此,我们决定将比较的算法限制为用于连续优化的其他元启发式算法。然后我们根据它们与 A C O R ACO_\mathbb{R} ACOR的相似性,将这些元启发式算法分成三组:
- 概率学习方法—有明确建模和样本概率分布的方法;
- 与蚂蚁相关的方法—声称从蚂蚁的行为中获得灵感的方法;
- 其他元启发方法—最初为组合优化而产生,后来改造适应于连续域的方法。
为了使 A C O R ACO_\mathbb{R} ACOR所得到的结果与其他方法所得到的结果具有尽可能大的可比性,我们对每次比较都使用了一种略有不同的实验方法。
需要强调的是,与组合优化不同,连续优化的算法比较通常不是基于CPU时间进行的。在组合优化的情况下,通常给每个算法相同的CPU时间,并比较在此时间内得到的结果。这使得不同算法的比较变得复杂,因为CPU时间在很大程度上取决于所使用的编程语言、编译器、程序员的技能,最后还取决于运行实验所用的机器。因此,在组合优化的情况下,强烈建议重新实现在比较中使用的所有算法,以使其公平。这仍然不能保证完全公平的比较,因为很难保证在所有实现算法的代码优化上投入相同的精力。
相比之下,绝大多数关于连续优化算法的论文使用达到一定解质量所需的函数评估次数作为比较标准。这种方法有几个关键的优点:它解决了使用不同编程语言实现算法可能会导致结果不一致的问题;它对编程者的代码优化能力(或所使用的编译器)不敏感;它允许比较在不同机器上获得的结果。这种方法的缺点是它没有考虑比较算法的时间复杂度。然而,考虑到使用CPU时间作为标准存在大量缺点,相比之下,这是一种可以接受的方法,我们在本文中采用它。
使用函数评估数量作为标准,使得我们进行 A C O R ACO_\mathbb{R} ACOR实验而获得结果,进而与文献中提到的其它算法进行对比。此外,为了确保公平的比较,我们仔细地复刻了竞争算法所使用的实验设置(特别是初始化间隔、参数调优方法和终止条件)。
Function | Formula |
---|---|
P l a n e ( P L ) x ⃗ ∈ [ 0.5 , 1.5 ] n , n = 10 Plane(PL)\\ \vec{x}\in [0.5,1.5]^n,n=10 Plane(PL)x∈[0.5,1.5]n,n=10 | f P L ( x ⃗ ) = x 1 f_{PL}(\vec{x})=x_1 fPL(x)=x1 |
D i a g o n a l P l a n e ( D P ) x ⃗ ∈ [ 0.5 , 1.5 ] n , n = 10 Diagonal\ Plane(DP)\\ \vec{x}\in [0.5,1.5]^n,n=10 Diagonal Plane(DP)x∈[0.5,1.5]n,n=10 | f P L ( x ⃗ ) = 1 n ∑ i = 1 n x i f_{PL}(\vec{x})=\frac{1}{n}\sum_{i=1}^nx_i fPL(x)=n1∑i=1nxi |
S p h e r e ( S P ) x ⃗ ∈ [ − 3 , 7 ] n , n = 10 Sphere(SP)\\ \vec{x}\in [-3,7]^n,n=10 Sphere(SP)x∈[−3,7]n,n=10 | f S P ( x ⃗ ) = ∑ i = 1 n x i 2 f_{SP}(\vec{x})=\sum_{i=1}^nx_i^2 fSP(x)=∑i=1nxi2 |
E l l i p s o i d ( E L ) x ⃗ ∈ [ − 3 , 7 ] n , n = 10 Ellipsoid(EL)\\ \vec{x}\in [-3,7]^n,n=10 Ellipsoid(EL)x∈[−3,7]n,n=10 | f E L ( x ⃗ ) = ∑ i = 1 n ( 10 0 i − 1 n − 1 x i ) 2 f_{EL}(\vec{x})=\sum_{i=1}^n(100^{\frac{i-1}{n-1}}x_i)^2 fEL(x)=∑i=1n(100n−1i−1xi)2 |
C i g a r ( C G ) x ⃗ ∈ [ − 3 , 7 ] n , n = 10 Cigar(CG)\\ \vec{x}\in [-3,7]^n,n=10 Cigar(CG)x∈[−3,7]n,n=10 | f C G ( x ⃗ ) = x 1 2 + 1 0 4 ∑ i = 1 n x i 2 f_{CG}(\vec{x})=x_1^2+10^4\sum_{i=1}^n x_i^2 fCG(x)=x12+104∑i=1nxi2 |
T a b l e t ( T B ) x ⃗ ∈ [ − 3 , 7 ] n , n = 10 Tablet(TB)\\ \vec{x}\in [-3,7]^n,n=10 Tablet(TB)x∈[−3,7]n,n=10 | f P L ( x ⃗ ) = 1 0 4 x 1 2 + ∑ i = 1 n x i 2 f_{PL}(\vec{x})=10^4x_1^2+\sum_{i=1}^n x_i^2 fPL(x)=104x12+∑i=1nxi2 |
R o s e n b r o c k ( R n ) x ⃗ ∈ [ − 5 , 5 ] n , n = 10 Rosenbrock(R_n)\\ \vec{x}\in [-5,5]^n,n=10 Rosenbrock(Rn)x∈[−5,5]n,n=10 | f P L ( x ⃗ ) = ∑ i = 1 n − 1 100 ( x i 2 − x i + 1 ) 2 + ( x i − 1 ) 2 f_{PL}(\vec{x})=\sum_{i=1}^{n-1}100(x_i^2-x_{i+1})^2+(x_i-1)^2 fPL(x)=∑i=1n−1100(xi2−xi+1)2+(xi−1)2 |
表1 一些用于比较 A C O R ACO_\mathbb{R} ACOR与其他方法明确估计概率分布的测试函数。我们对这里列出的所有测试函数使用了$ n=10$维。
5.1 A C O R ACO_\mathbb{R} ACOR与概率学习式方法的比较
有许多元启发式直接建模和采样概率分布。在比较中,我们使用Kern等人测试的算法[Kern等人,2004],这些算法已经在第4.2节中描述。
用于比较的测试函数有非常简单的,也有非常复杂的,Kern等人根据其特点选择了测试函数。特别是,他们为了算法的鲁棒性,考虑到所求问题应用到线性变换。为了公平地比较 A C O R ACO_\mathbb{R} ACOR的性能,我们使用了相同的测试函数。它们列在表1中。平面和对角平面函数是最大化问题(目标是达到 ϵ m a x = 1 0 10 \ \epsilon_{max}=10^{10} ϵmax=1010),其余是最小化问题(要求的精度是 ϵ m i n = 1 0 − 10 \ \epsilon_{min}=10^{-10} ϵmin=10−10)。除了表1中列出的函数外,还使用了椭球体、Cigar和Tablet的随机旋转版本的函数。在所有的实验中,我们使用了这些函数的10维版本。性能是根据达到停止条件所需的函数评估数来判断的。所使用的停止条件是最大化问题所需的精度 f > ϵ m a x f>\epsilon_{max} f>ϵmax,和最小化问题 ∣ f − f ∗ ∣ < ϵ m i n |f-f^*|<\epsilon_{min} ∣f−f∗∣<ϵmin,其中 f f f是 A C O R ACO_\mathbb{R} ACOR找到的最佳解决方案的值, f ∗ f^* f∗是给定测试问题的(已知的先验)最优解决方案。