中国科技论文在线
http://www.paper.edu.cn
自适应 SPSA 算法在气动优化设计中的优势比较
于文静
北京航空航天大学 数学与系统科学学院,北京(100191)
E-mail:vidabaobei@sina.com
摘 要:本文先后选取 34、130 个设计变量分别对 BFGS、SPSA 及自适应 SPSA 三种优化
算法进行数值试验,并确定 BFGS 算法只能处理目标函数为二阶及二阶以上的优化问题。在
同样迭代 50 次的条件下,BFGS 算法以其高精度见长,但当设计变量数目上升为 130 时,
其计算消耗是其他两种算法的 10 倍以上;SPSA 计算时间最少,但其精确程度较差,与此
同时,在算法中加入适当的步长约束条件,可以提高它的收敛速度和计算精度;自适应 SPSA
算法以其较少的计算消耗同时保证较高的计算精度而力显优势,考虑到机翼优化中涉及调用
流场计算,同样精度下,该方法调用流场计算的次数较少,因此更适合进行气动优化设计,
具有较高的计算效率。
关键词:机翼优化;BGFS 算法;SPSA 算法;自适应 SPSA。
中图分类号:V211.41
1. 引言
机翼的气动优化设计已经成为流体力学中的一个重要研究分支。一般来说,基于 CFD
数值求解流场内的各参数是整个优化过程中计算量最大的部分,它直接影响计算时间。但是,
优化方法的选取也越来越被重视,选取合适的优化算法将很大程度提高计算时间以及结果的
精确性。
目前数值优化方法一般分为梯度法和非梯度法。非梯度法中比较典型的有基于遗传算法
的搜索算法、神经网络方法及响应面法[12],但是计算量大是这类方法目前为止难以解决的
问题。梯度法较为典型的是有限差分法,其缺点同样是计算消耗较大,基于这点,拟牛顿法
以及以其为原型的各种优化方法相继被提出,但是对于应用 N-S 方程对机翼进行较多设计
变量的气动优化设计存在一定难度。由 Jameson 等人提出的基于控制理论的优化设计方法再
很大程度上解决了梯度的快速求解问题。国外对于该方法的研究比较深入并取得了较为丰富
的研究成果,已经应用于工程实践中并取得较好的效果[1][7][8][10]。
BFGS 就是一种基于梯度法的经典的优化算法,但由于涉及矩阵计算,在处理大规模问
题时计算速度略显逊色[6]。同时扰动随机估计(SPSA)方法基于随机理论方法[3][7][8][9],不需
要直接求解梯度或者 Hessian 矩阵,大大减少了计算消耗。SPSA 已经成功应用到机翼优化
中[1][2][4],并且 Jameson 等人又对该方法提出很多修改意见,适用于多种不同问题[2][5]。但考
虑到随机理论方法的特点,当循环次数趋于无穷大时收敛性最好,同时 SPSA 方法仅仅对梯
度进行估计,因此它的收敛速度稍慢。而后基于随机理论,自适应 SPSA 方法等一些非梯度
优化法相继被提出[10][11],自适应 SPSA 通过随机方法给出 Hessian 矩阵的估计值,相对于
SPSA 方法收敛速度及效果有很大的提高。本文通过数值试验来检测上述三种方法计算效率,
说明自适应 SPSA 算法在机翼优化中的优势。文章第一部分分别介绍三种算法,在第二部分
给出数值试验结果,第三部分提出结论。
2.简介优化算法
设待优化的目标函数是 (
L X , X 是 p 维向量由控制点组成。找到一个向量 *X 使得
)
L
∂
X
∂
=
0
就是我们的目的。这是优化问题的典型形式,当然
L X 必须是可导的。有时目标
(
)
- 1 -
中国科技论文在线
函数带有噪音,我们引进一个与 (
常用的目标函数。
2.1 BFGS 算法:
L X 相关的函数, (
y X
)
http://www.paper.edu.cn
)
=
L X
(
)
+
noise
,这是算法中最
BFGS 算法是准牛顿搜索法中的典型算法,它体现着牛顿法的基本思想,其突出贡献是
不用在每次迭代中生硬的计算矩阵的逆,而是给出了 Hessian 矩阵逆的解析表达式,将矩阵
求逆的计算量降低,同时用另外的子优化问题求解步长。BFGS 主要迭代格式:
(2.1)
x
+ =
1k
p
k
x
pα
+
k
k
k
H y
= − ∇
k
k
同时, kα 需要满足下列条件:
+
y x
(
k
α
k
p
k
)
≤
y x
(
k
)
+
σα
k
∇
y x
(
k
)
⋅
p
k
(2.2)
σ∈
1(0,
2
)
,一般取值为 410− ,
kα =
1(
2
m
)
Hessian 矩阵的逆的更新格式为:
,m 是满足(1.2)式的最小整数。
−
ρ
k
y z
k
T
k
)
+
ρ
k
s s
k
T
k
(2.3)
− ∇ ,
y
k
ρ =
k
1
z s
T
k
k
H
+ =
1
k
(
I
−
ρ
k
)
T
k
s z H I
(
k
k
其中
s
k
x
+=
k
1
− ,
x
k
z
k
= ∇
y
k
1
+
2.2 SPSA 算法:
SPSA 算法沿用了 SA 算法的迭代格式:
X
+ =
1
X
−
a g X
k
(
k
)
k
k
此时 (
g X 是每次迭代中对梯度的估计值。单侧梯度估计涉及到两个函数 (
(2.4)
y X 和
X± ∆ 。同时扰动估计方法就是将控制向量 kX 的
每个元素分别独立的给于一个随机的扰动,以此获得两个衡量函数,进而估计待求梯度。双
侧同时扰动估计可以表示为:
X+ ∆ ,双侧梯度估计涉及 (
y X
(
y X
)k
)k
)
)
k
k
k
k
g X
(
)
=
k
y X
(
k
y X
(
k
c
k
)
+ ∆ −
c
2
k
k
k
⎡
⎢
c
)
− ∆ ⎢
k
⎢
⎢
∆⎢
⎣
1
⎤∆
−
k
1
⎥∆
1
−
⎥
k
2
M (2.5)
⎥
⎥
⎥
⎦
1
−
kp
- 2 -
中国科技论文在线
k
=
kc
)m
参数
c
0 /(
http://www.paper.edu.cn
, 0c 是一个小的正数,m 是某个系数,在实践中推荐取值为 1/6。 k∆
项代表随机扰动向量,它的每个元素都是独立地、随机的产生,最简单的能够产生随机扰动
向量的随机分布是 Bernoulli 1± 分布,每个元素都以 1/2 的概率产生 1 或者-1。SPSA 算法的
实现只涉及到两个衡量函数,基本上与 p 无关,因为无论 p 的取值如何分子都是一样的,因
, 0a 、A、α是保
,对于壶嘴形状
ka
a
0 /(
=
a =
0.167
证算法高效性的参数,一般来说,对于机翼形状设计 0
设计问题 1A = ,α可以取值为 1。
2.3 自适应 SPSA:
此当 p 值非常大时,该算法表现出良好的计算效率。
A k α
)
+
A =
300
和
自适应同时扰动方法的主要思想是建立两个循环体,一个用来估计控制变量θ,另一个
用来估计 Hessian 矩阵 ( )H θ 。第一个循环体类似于 Newton-Raphson 算法,第二个循环可以
简单的给出每次循环 Hessian 矩阵的估计值,同时在第二个循环中给出的矩阵估计值又可以
用于第一个循环体中。
上述两个递归式分别表示为:
a H G
k
)
,
H
k
=
f H
k
(
k
)
(2.6)
+ =
1
ˆ
ˆ
−
θ θ
k
k
k
+
H
=
k
k
1
k
ˆ(
1
θ−
k
k
1
+
+
k
1
H
k
1
−
这里 ka 是非负的标量参数, ˆ(
kG θ 是与 ˆ(
)
k
的函数,并且 ˆ
以确定时,这两个并行的递推式就可以实现了。
kH 是每次循环中对 Hessian 矩阵的估计值。由于
ˆ
H
,
k
k =
0,1,2
K (2.7)
)kg θ 相关的函数,属于已知信息。 kf 是 kH
kH 可
kG θ 是已知量,当 ˆ
ˆ(
)
k
p
某个正标量,
我们进一步介绍一下每次循环时 Hessian 矩阵的估计值 ˆ
kH 。在一阶 SPSA 算法中, kc 是
k R
∆ ∈ 是一个由操作者给出的均值为零的随机向量,当然这个向量必须满足
ik∆ 必须独立取值、有边界的、对称分布的,例如
某些特定条件,一般来说,每个组成元素
k∆ 的每个元素都取值为 Bernoulli 1± 随机分布。应用向量相除,在每次循环中 Hessian 矩阵
的估计值可以表示为:
ˆ
H
k
=
⎡
G
T
1
δ
⎢
k
c
2 2
∆
⎢
⎣
k
k
⎛
+ ⎜
⎝
G
T
δ
k
c
2
∆
k
k
T
⎞
⎟
⎠
⎤
⎥
⎥
⎦
(2.8)
G G
(1)
k
=
ˆ
(
θ
k
+ ∆ −
)
c
k
G
(1)
k
ˆ
(
θ
k
− ∆
)
c
k
k
这里
kG 有可能等于 ()kG ,这取决于初始的设置。在自适应 SPSA 算法中使用单侧梯度
k
k
δ
(1)()
估计可以减小计算量同时取到很好的精确值。
kG 的表达形式与一阶 SPSA 算法中完全相同,在自适应 SPSA 算法中,为了估计梯度
- 3 -
中国科技论文在线
需要引入两个参量, ˆ(
c
k
y
k
http://www.paper.edu.cn
θ ± ∆ + ∆%% 。这两个参量用来估计单侧梯度的算法如下:
)
c
k
k
k
G
(1)
k
ˆ(
θ
k
y
ˆ
(
θ
k
± ∆ =
)
c
k
k
± ∆ + ∆ −
)
c
k
k
%%
c
k
k
%
c
k
y
ˆ
(
θ
k
%
1
⎤∆
⎡
−
k
1
⎥∆
⎢
%
1
−
c
)
± ∆ ⎢
⎥
k
2
k
⎥
⎢
M
⎥
⎢
%
1
−
∆⎢
⎥
⎦
⎣
kp
k
(2.9)
这时
% % %
∆ = ∆ ∆
k
k
,
1
k
(
T
)
,是随机产生的向量并且每个元素都是独立产生的, kc%需
%L
∆
,
kp
,
2
要满足的条件与 kc 相似。
3.数值试验结果
机翼优化涉及流场分析与计算,本文只测评优化算法的计算性能,因此将模型简化为机
翼的拟合,不考虑流场计算部分。
3.1 目标函数光滑性的选取
以 NACA0012 为基准翼型,RAE2822 为目标翼型,选取基准翼型上 130 个点作为优化
变量(也称为设计变量),目标函数简单取为距离函数,即与目标翼型的距离的最大值。设
A(u)是不断优化的翼型曲线,通过三次样条拟合得到,C(u)表示目标翼型,则一阶目标函数
可以表示为:
(3.1)
使用 BFGS 作为优化算法时,得到的效果图如图 1 所示,拟合效果非常不好,结果失真
min
A u C u
( )
( )
−
程度较高。但是,当提高目标函数光滑性使其变为二阶时,即二阶目标函数表示为:
min
1
2
A u C u
( )
( )
−
2
(3.2)
BFGS 算法立刻表现出不一样的计算精度,见图 2。
与 BFGS 不同的是,对于不同阶数的目标函数,SPSA 的计算精度却没有太大变化,将
基准翼型变为 BOEING106,一阶目标函数效果图见图 3,二阶的见图 4。
可以看出,SPSA 二阶情况的效果图与目标函数是一阶时的相差不多,甚至还没有一阶
精确度高。究其原因可以发现,BFGS 算法用到目标函数的导数,当目标函数变成高阶更光
滑时,其算法的精确性越高,它反而不适用于目标函数为一阶最简单的情况。相对的,SPSA
以及自适应 SPSA 理论基础是随机理论,迭代过程中不使用导数,而是用随机的方法给出导
数以及 Hessian 矩阵的估计形式,便于计算,提高计算效率。因此下文算例中,BFGS 算法
使用二阶目标函数,SPSA、自适应 SPSA 使用一阶目标函数。
- 4 -
中国科技论文在线
http://www.paper.edu.cn
0.08
0.06
0.04
0.02
0
-0.02
-0.04
-0.06
-0.08
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
图 1 BFGS,目标函数为一阶,虚线 图 2 BFGS,目标函数为二阶,虚线
是最终优化结果,星线表示目标 是最终优化结果,星线表示目标
翼型曲线,实线是基准翼型。 翼型曲线,实线是基准翼型。
图 3 SPSA,目标函数为一阶,虚线是 图 4 SPSA,目标函数为二阶,虚线是
最终优化结果,星线表示目标翼 最终优化结果,星线表示目标翼
型曲线,实线是基准翼型。 型曲线,实线是基准翼型。
3.2 算法的数值试验
例一:以 BOEING106 为基准翼型,RAE2822 为目标翼型,选取基准翼型上、下表面各
17 个点作为优化变量,即 34 个优化变量。分别使用 BFGS、SPSA、自适应 SPSA 优化算法,
迭代 50 次,结果如下:
SPSA 算法参数取值为, 0
a =
0.167
,
A =
300
,
c = ,alpha=0.602,m=0.101。
0
0.5
算法效果(目标函数一阶)见表 1,计算时间为 19.207 秒。效果见图 5。
自适应 SPSA 参数取值为: 0
c = ,alpha=0.602,m=0.101, 2.4
。
这里 0c 和 c%需要根据不同问题给出不同的取值,它们对结果的影响很大。算法效果见表 2,
计算时间为 23.885 秒。优化结果见图 6。
A = , 0
, 40
c =%
a =
0.167
1
BFGS 算法的计算时间为 189.69 秒,结果见表 3。
表 1 SPSA(34 点)迭代 50 步的计算结果
0
10
20
30
40
50
与目标翼型的最大距离 0.027089
0.02199
0.01722
0.01348
0.010585 0.0083471
- 5 -
中国科技论文在线
http://www.paper.edu.cn
表 2 自适应 SPSA(34 点)迭代 50 步的计算结果
0
10
20
30
40
50
与目标翼型的最
大距离
0.049895 0.023678
0.0053206
0.0015048
1.1073e-005 3.4774e-006
表 3 BFGS 算法(34 点)迭代 50 步的计算结果
距离的
平方
0
4
15
30
40
50
0.0060717 4.6396e-005
3.4928e-005
3.3987e-005
3.3611e-005 3.3611e-005
可以看到 BFGS 算法在第 4 次迭代的时候已经取得不错的结果,但是计算时间较长,一
旦设计变量数目增加到很大时,BFGS 的计算时间将令人担忧。
将这三种算法比较,图 7,可以看出 SPSA 算法只涉及到梯度计算,因而收敛速度较慢,
如果要求达到一定精度,需要很大的迭代次数作保证,计算效率会随之降低。虽然 BFGS
算法精度要比 SPSA 高,收敛速度也较快,但其计算时间是其他二者的 8-10 倍。自适应 SPSA
算法的计算时间比 SPSA 稍微长一点,但是计算精度比 SPSA、BFGS 算法高很多。
图 5 SPSA,虚线是最终优化结果,星线 图 6 自适应 SPSA,虚线是最终优化结果,
表示目标翼型曲线,实线是基准翼型。 星线表示目标翼型曲线,实线是基准翼型
图 7 位置偏上的实线是 BOEING106 的基准翼型,偏下方的实线是 RAE2822 的目标翼型,虚线表示 BFGS
算法效果图,星线表示自适应 SPSA 算法效果图,小圆圈组成的曲线代表 SPSA 的结果。
- 6 -
中国科技论文在线
http://www.paper.edu.cn
例二:
以 NACA0012 为初始翼型,RAE2822 设为目标翼型,选取机翼上的 130 个点作为优化
变量,迭代 50 次,三种算法结果如下:
0.167
A =
计算时间为 55.78 秒,收敛效果见表 4、图 8。
,
SPSA 算法参数取值为, 0
a =
300
,
c = ,alpha=0.602,m=0.101。
0
0.5
与目标翼
型的最大
距离
表 4 SPSA 算法(130 点)迭代 50 步的计算结果
0
10
20
30
40
50
0.015937
0.012937
0.010131
0.0079307
0.0060799
0.0049108
可以看出,虚线与距离它最近的实线(目标翼型曲线)有一定差别,在翼型的上下部分
均有小凸起。因此考虑在优化迭代过程中加入一个约束条件,当距离差大于某个小数时,人
为修改步长,加快收敛速度,提高计算精度。
对 SPSA 算法进行修正后,结果见图 9。修改后的计算速度稍稍减慢,但是效果明显变
好,计算时间 78.062 秒,与目标翼型的最大距离减小为 0.0034791,并且最终图形规整没有
凸起。
图 8 SPSA,虚线是最终的优化结果 图 9 修正后 SPSA,虚线是最终优化结果
图 10 自适应 SPSA,虚线是最终优化结果,星线表示目标翼型曲线,实线表示初始翼型。
- 7 -
中国科技论文在线
自适 应 SPSA 算法:参数的取 值为 0
a =
0.167
,
http://www.paper.edu.cn
A = , 0
40
c = ,alpha=0.602,
1
m=0.101,,
c =%
2.4
。这里计算时间为 98.041 秒。该算法拟合效果见表 5 和图 10。
表 5 自适应 SPSA 算法(130 点)迭代 50 步的计算结果
0
10
20
30
40
50
与目标翼型的最大
距离
0.14156 0.091685
0.016494
0.0012585
0.00069888 5.8065e-005
由于该算法涉及矩阵运算,计算时间稍长一点,但是算法提供了对 Hessian 矩阵的估计
值,在处理大规模问题上很有优势,计算量不是很大同时收敛效果很好。
BFGS 算法基于梯度法使用到 Hessian 矩阵的估计,计算量与选点个数成倍增加,因此
计算时间也是相对最久的,5 次迭代计算时间就到达 225.66 秒,预计完成 50 次迭代的时间
可以达到其他二者的 10-20 倍。但它的计算精度相对较高,仅仅迭代 5 次就到很小的距离范
围, 2
,最终结果见图 11。
3.3538e-006
e =
0.08
0.06
0.04
0.02
0
-0.02
-0.04
-0.06
-0.08
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
图 11 BFGS,虚线是最终优化结果,星线表示目标翼型曲线,实线是初始翼型。
4. 结论
对于同一问题,优化目标函数的选取在一定程度上影响了优化算法的效果,不同问题使
用恰当的优化算法可以节省计算时间、大大提高计算效率。
上述三种优化方法各有特点, BFGS 作为经典的梯度法优化算法,以其高精度见长,
但是当变量数目达到很大时,使用 BFGS 计算消耗巨大。如果机翼曲线可以用较少参量表示,
使用 BFGS 作为最后的优化算法是不错的选择。相反的,SPSA 方法由随机理论发展而来,
它的计算量不因变量数目的增加而增加,计算时间可以控制在较短的范围内;但该方法收敛
速度较慢,需要一个很大的迭代次数作为高精度的保证。自适应 SPSA 是随后被提出的、基
于 SPSA 的方法,它的收敛速度和计算量相比前两种方法都有很大的改进,尤其在处理大规
模问题时优势更加明显。
另一方面,BFGS 算法在每次迭代中需要调用 5 次目标函数,而 SPSA 算法调用 2 次,
自适应 SPSA 算法调用 4 次。在处理跨音速机翼优化问题时涉及流场计算,每一次调用目标
函数即意味着调用一次流场计算,如果设定优化过程迭代 100 次,那么 BFGS 将调用 500
- 8 -