§ 2 多变量函数极值问题解法(直接法)
本节讨论求目标函数
) ( ) , , ,
(x1 x2 x f x f
y n
在定义区域D上的最优解的直接方法(或试验最优化方法),其中 )
, , ,
(x1 x2 xn
x ( 表示矢量的转置)
表示自变量x1,x2,,xn组成的列矢量,由于极小和极大只是目标函数相差一符号,因此这里 只讨论求n维列矢量x* (x1*,x*2,,x*n)使得
) ( min )
(x* f x
f
xD
这时,x*称为最优解(最优点)。
[单峰函数] 如果函数y f(x)在所讨论的区域D上只有一个极值点(最大点或最小点),
那末称这个函数为多变量单峰函数。
多变量单峰函数也可用分析定义。例如,设函数y f(x1,x2)定义在区域D上,由于区域 D上的任一路线都可用一参数方程
) (
) (
2 2
1 1
x x
x
x (01) 表示,所以函数y f(x1,x2)沿这条路线也可用参数表示为
) ( )) ( ), (
(x1 x2 y f
y
设 a(a1,a2)(x1(0),x2(0)) )) 1 ( ), 1 ( ( ) ,
(b1 b2 x1 x2
b
又设 min ( ),
1
0
y
m y(*)m 如果 y(1) y(2) y(*),当1 2 *
) ( ) ( )
(* y 1 y 2
y ,当* 1 2
那末称函数y在区域D上从点a和点b的路线上是单峰的,式中1,2
0,1 设 * min (x),x f
m
D
f(x*)m*
如果对区域D上的任一对点a和b,都存在一条从a经过x*到b的路线,在其上函数y是单峰 的,那末称函数y在区域D上为单峰的.
[因素交替法] 这个方法是轮流按坐标轴方向探索最优点.设ei为第 i 个坐标轴的单位矢 量,即
)
0 , , 1 , , 0
(
i i
e (i1,2,,n) 并且预先给定允许误差 0.那末,迭代程序如下:
(1) 选取初始点x(0).
(2) 由初始点x(0)出发,先沿第一个坐标轴方向进行优选(用§1的单因素方法),得到好
点x(1),即
) (
min )
(x(1) f x(0) se1 f
s
式中s为实参数.然后以x(1)为起点沿第二个坐标轴方向进行优选,得到好点x(2),即 )
( min )
(x(2) f x(1) se2 f
s
如此等等,一直到n个方向全部优选完毕,得到x(n),它满足 ) (
min )
( ( ) (n1) n
s
n f s
f x x e
(3) 再以x(n)为新的初始点,重复步骤(2)。
(4) 以上步骤一直进行到从某一初始点出发,经过n个方向搜索后得不到新点,或与前 n个初始点之间的距离都小于预先给定的允许误差 为止。这时x(n)即为最优点x*的近似解。
[平行线法] 如果处理的双因素问题中,有一个因素难于调整,而另一个因素却容易变 动,这时用双因素交替法就不太方便,应改用下面的平行线法:
把难于调整的因素x2放在纵轴上(图18.5),设其可调范围为[0,l],把容易变动的因素x1放 在横轴上,设其可调范围为[0,m ].先把因素x2固定在点
l 618 .
0 处,在过这点而平行于横轴的直线L1上对因素x1在 [0,m]上优选,好点为①;再把x2固定在点0.382l处,在 过这点而平行于横轴的直线L2上对因素x1在[0,m]上优选,
好点为②;比较①与②两点的好坏,如果②比①好,就去掉 直线L1的上半部(如果①比②好,就去掉直线L2的下半部),
然后把因素x2固定在可调范围的0.236l处,在过这点而平行于横轴的直线L3上对因素x1在[0,
m]上优选,好点为③;比较②与③两点的好坏,如果②比③好,就去掉直线L3的下半部,, 如此继续做下去把优选范围不断缩小,就可以找到最优点的近似解。
对因素x2的选择也可采用分数法。
[瞎子爬山法] 迭代过程如下:
(1) 选取初始点(基点)x(0)的步长h,命k:0。
(2) 进行第k阶段的第l次方向(即xl轴方向)的局部探索
l k l k
l x he
x( ) (1) 其中el为第l个坐标轴的单位矢量,首先沿正方向探索
l k l k
l x he
x( ) (1)
如果 f(xl(k)) f(xl(k1)),则探索成功,就把这点作为下一次沿第l+1个坐标轴方向探索的起点,
并命l:l1;否则就沿反方向搜索
在此采用矢量记号
)
, ,
( 1( ) 2( ) ( )
)
( k
nl k l k l k
l x x x
x
它代表n维空间的一点.上标k表示搜索的第k个阶段,下标l表示第k个阶段搜索中的第l次循环.若xl(k)
表示搜索中的基点序列,则当接近最优点x时,有
) ( )
( )
( )
(x f x(1) f x1( ) f x1(0)
f lk k
l k l k
l x he
x( ) (1)
如果 f(xl(k)) f(xl(k1)),则探索成功,就把这点作为下一次沿第l+1个坐标轴方向探索的起点,
并命l:l1;如果正反方向探索都失败就退回原处,即命
) (
1 )
( k
l k
l x
x 并命l:l1。
当沿各个坐标轴方向的局部探索都轮流进行后,这个阶段的局部探索也就完成了,这时 得到第k阶段的最好点xn(k)。
(3) 命k:k1,以x(k1) x(nk)为新基点,重复步骤(2),如果不能得到更好的点,就缩 小步长再进行局部探索,直到步长缩小到规定的精度为止,这时所得最好点即为最优点x*的 近似解。
瞎子爬山法(也称探索爬山法)虽然没有前面几个方法快,但它特别适用于因素不能大幅 度调动,或是在大生产中如果出一次废品就造成很大损失的情况。
[陡度法与对角线法]
1 陡度和陡度法 设在A(x1(1),x(21)),B(x1(2),x2(2))两点已经做 试验,其目标函数值分别为a,b(图 18.6),而且ba,那末
2 ) 1 ( 2 ) 2 ( 2 2 ) 1 ( 1 ) 2 (
1 ) ( )
(x x x x
a b AB
a b
称为从A上升到B的陡度.对n维空间有类似的定义。
陡度大的方向目标函数显然上升得快一些.所谓陡度法,就是 利用已得的试验结果,算出各点间的陡度,然后沿陡度最大的方 向(有利方向)再取点做试验。
2 联合法(瞎子爬山法与陡度法联合使用) 例如用瞎子爬山法从A点出发,沿x2轴方
向调动因素x2得到点B,效果较好,仍沿x2轴方向调动因
素x2得到点C(图18.7),效果还是好的,然后沿x1轴方向
调动因素x1得到点D,效果也好,接下去就不一定从D出 发再沿纵横方向去探索了。这时可以分别算出目标函数由
A上升到D的陡度,由B上升到D的陡度,由C上升到D 的陡度,从中选出一个陡度最大的方向,例如AD ,那末 下一次就可以沿AD 的方向往上爬了,这时可以从D点出 发沿线段AD的延长线DE用瞎子爬山法往上爬,也可以在
DE上应用单因素的方法优选,一般总可以找出一个比D好的点.
3 对角线法 以上我们通过比较,从通过D点的三个方向
CD BD
AD, , 的陡度挑出一个较陡的方向来,例如是AD,但AD并 不一定过D点的最陡方向,其实只要利用过D点的二个方向的陡 度就可以找出过D点的更陡的方向来。
如图18.8,在过D垂直于BD的方向上取一点L,使DL 的长等于A到D的陡度,且L和A分别在BD的两侧;再在 过D垂直于AD的方向上取一点M ,使DM 的长等于B到
D的陡度,且M 和B分别在AD的两侧,以DL,DM 为边 作平行四边形,其对角线DG的方向就是在D点的陡度最大 的方向。
[步长加速法] 步长加速法实际上是瞎子爬山法和沿有利方向加速相结合的方法.其迭代 程序如下:
(1) 选取初始点(基点)x(0)和步长h,命k:0。 (2) 瞎子爬山(程序见瞎子爬山法)。
当沿各个坐标轴方向的局部探索都轮流进行后,这个阶段的局部探索也就完成了,下一 步就可沿有利方向进行加速。
(3) 加速爬山。命x(k1) xn(k)。若x(k1) x(k),那末移到新的位置x(k1)进行加速试探,
在此
) ( ) 1 ( ) 1 (
0k 2x k x k
x 有两种情形可能产生:
1 如果 f(x0(k1))的数值有改进,那末命k:k1,应用步骤(2)的方法开始新的探索。
2 如果 f(x0(k1))的数值没有改进,那末取消这个加速,将基点放在上次发现的最好点,
即xn(k) x(k1)。命k:0,象步骤(2)一样开始一个新的局部探索。
如果经过一个阶段后发现x(k1) x(k)不能加速移动,那末就缩小步长重复步骤(2)。如果 逐次缩小步长都不能加速移动,这点便是最优点的近似解。
步长加速法在二维的情形如图18。9所示。
[方向加速法(共轭方向法)] 迭代程序如下:
(1) 从前面的最好数值位置x0(k)(可以是前一次迭代最后所确定的点或用其他方法所得 的好点)和一组线性独立的探索方向1(k),2(k),,n(k)(可以取坐标轴的方向)出发。首先寻找过 点x0(k)平行于1(k)的直线上的最好点设为x1(k),再找过点x1(k)平行于2(k)的直线上的最好点设 为x2(k),继续这个过程直到所有n个探索方向都已试探过,最后所得点为xn(k)。
(2) 寻找特殊点xm(k),这个点使目标函数的数值同前一点相比改进最大,即点xm(k)给出n 个移动的最大改变量,其中 f(xm(k)) f(xm(k)1)。此外决定矢量xn(k)x0(k)。
(3) 计算 f(2x(nk)x0(k)) fl(k) (4) 记 fn(k) f(xn(k)),如果
) ( )
( k
n k
l f
f (1) 或
2 ) ) (
)(
2 (
2 ) ( 2 0
) ( ) ( 0 ) ( ) ( ) ( 0
k l k k
n k k l k n
k f f
f f f f
f
(2) 那末 不是探索中的好方向,则应重新开始探索,从最后一点出发并用同样的方法,即
) ( ) 1 ( 0
k n
k x
x 和i(k1) i(k),i1,2,,n,重复步骤(1)。如果不等式(1),(2)都不满足,那末沿方向
探 索 直 到 找 到 极 小 点 。 将 这 个 点 定 义 为 x0(k1) , 而 k+1 阶 段 的 新 探 索 方 向 为
),
( ) 1
( k
i k
i
i1,2,,m1;i(k1) i(k1),im,,n1;又n(k1) 。然后从步骤(1)出发重复整 个过程,直到 xi(k11)xi(k1) ,i1,2,,n,其中 为预先给定的允许误差。
例 应用方向加速法找出目标函数
2 2 1 2 2 1 2
1, ) 10( 5) ( )
(x x x x x x
f
的极小点。
解 应用导数的方法容易求出目标函数的绝对极小点为(x1,x2)(2.5,2.5)。下面用方向加 速法来求出这个极小点。
从点x0(0) (0,0)开始探索,探索方向用1(0) (1,0)和2(0) (0,1)。 第一阶段 从基点出发,沿方向1(0)进行一维探索,移动距离由使
2 2 )
0 ( 1 ) 0 (
0 ) 10( 5)
( s s s
f x
到达极小, 得到 s4.545,因 此 x1(0) (4.545,0),而目标 函数值 由 f(x0(0))250减少到 727
. 22 ) (x1(0)
f 。 再 沿 方 向2(0) 用 同 样 的 方 法 探 索 , 得 到 x(20) (4.545,0.826) , 同 时 2 0 7
. 15 ) ( (20)
) 0 (
2 f x
f 。
为 决 定 下 一 阶 段 是 否 用 方 向 μ (0) x(20)x0(0) , 应 检 验 不 等 式 (1), 计 算 点 )
652 . 1 , 090 . 9 ( ) 0 826 . 0 2 , 0 545 . 4 2 (
2 (20) 0(0)
x x
xt ,而 ft(0) 385.029,由 于 ft(0) f2(0) )
207 . 15
(f2(0) ,所以下一阶段不用方向μ (0)。
第 二 阶 段 本 阶 段 的 方 向 和 前 一 阶 段 的 一 样(因 为μ (0) 不 采 用)。 相 继 探 索 得 到 )
826 . 0 , 869 . 3
) (
1 (
1
x , 而 f1(1) 10.1 9 0又 x2(1) (3.869,1.380) , 而 f2(1) 6.8 1 5。 再 计 算 点 )
934 . 1 , 193 . 3 ( ) 826 . 0 380 . 1 2 , 545 . 4 869 . 3 2
(
t
x 。在此 ft(1) 1.746,由于 ft(1) f21),不 等式(1)不满足。再检验不等式(2),计算
851 . 37
] 017 . 5 815 . 6 207 . 15 [ ] 746 . 1 815 . 6 2 207 . 15 [
) )(
2 (
2 2
) 1 ( 2 ) 1 ( 0 ) 1 ( ) 1 ( 2 ) 1 ( 0
f f f f
f t
式中是目标函数在给定方向的最大改变量,即 f0(1) f1(1) 5.017。不等式(2)的右端是 537
. 454 )
2(
2 ) 1 ( ) 1 (
0
ft
f
因此不等式(2)不满足,即下一阶段可以采用方向μ (1)(3.8694.545,1.3800.826)(0.676, )
554 .
0 ,沿方向μ (1)探索得到第三阶段的基点为x0(2) (2.500,2.500),并且 f0(2) 0。
第三阶段 本阶段的探索方向为ξ 1(2)ξ (21)(0,1)和ξ (22)μ (1)(0.076,0.553)。沿这两个 方向探索将发现不能再前进,因为事实上前一阶段已经找到绝对极小点。当然,这是不足为 奇的,因为目标函数是二次的。
[方向步长双加速法] 迭代程序如下:
考虑第k阶段
(1) 选择一初始点(基点)x0(k),一组步长h1,h2,,hn和一组方向ξ 1(k),ξ (2k),,ξ (nk),其中 )
, ,
( 1( ) ( )
)
( k
nl k
l k
l m m
ξ ,上指标k表示第k个阶段,下指标l表示第l个方向。当k 1时,一般选 择探索方向平行于坐标轴方向。
(2) 依次平行于n个方向的每一个进行相继探索,若移动是成功的,则采用新点,若移 动不成功则保留基点。若在一给定方向的移动是成功的,则下一次再在这个方向上探索时,
步长将增大为倍(1);若失败,则缩小为倍(01),负号表示在反方向探索。一 般取3, 0.5。
(3) 直到在每一个方向上都至少有一次成功,一次失败,这时沿该方向的探索就告结束。
依次沿平行于n个方向的探索完毕后最后一次成功的点为新的基点x0(k1)。下一阶段(即第k1 阶段)的探索方向ξ l(k1),l1,2,,n,由下列方程计算得到:
首先定义矢量
) 1
) (
( )
( d l n
n
l j
k j j k
l
A ξ
其中dj是在ξ (kj )方向的所有成功移动的代数和,
) , ,
( 1( ) ( )
)
( k
nl k
l k
l A A
A
) , , 2 , 1
) (
( )
( d m i n
A
n
l j
k ij j k
il
然后方向ξ (jk1),(j1,2,,n)由下式给出
) , , 2 , 1
) (
( ) ( ) 1
( j n
k j
k k j
j
D ξ D
其中
) 1 ( 1 ) 1 ( 1 ) ( 2 ) ( 2 ) ( 2
) ( 1 ) ( 1
)
(
k k k k
k k k
ξ A ξ
A D
A D
) 1 ( 2 ) 1 ( 2 ) ( 3 ) 1 ( 1 ) 1 ( 1 ) ( 3 ) ( 3 ) (
3k Ak (Ak ξ k )ξ k (Ak ξ k )ξ k D
1
1
) 1 ( ) 1 ( ) ( )
( )
( ( )
n
l
k l k l k n k
n k
n A A ξ ξ
D
特别,其中主要方向
) ( 1 ) ( 1 ) ( 1 ) ( ) 1 1 (
1 k
k k
k k
A A D
ξ D
它的各个分量为
) , , 2 , 1 (
1
) (
1 ) (
1 ) ( 1
1
) (
1 ) (
1 ) ( ) 1
1 (
1 i n
A A A D
D m D
n
j
k j k j
k i n
j
k j k j
k k i
i
(4) 以上步骤一直进行到
n
i
di 1
2 ( 为预先给定的允许误差)为止,所得最后的基点
) ( ) 1 ( 0
k n
k x
x 就近似于最优点。
方向步长双加速法在二维的情况如图18.10所示。
[单纯形调优法] 迭代程序如下:
(1) 命 n 维 空 间 的 单 纯 形 的 n+1 个 顶 点 为 x(i)(i1,2,,n1) , 计 算 函 数 值 )
1 , , 2 , 1 ( )
( ()
f i n
fi xi ,比较大小,并确定
n i R i
R f f
f
1 ) 1
( ) max
(
x
i R i
n G i
G f f
f
1 ) 1
( ) max
(x
n i L i
L f f
f
1 ) 1
( ) max
(
x (2) 求出最坏点x(R)的对称点
)
2 F (R
N x x
x
式中
1
1
) ( )
( )
1 n (
i
R i
F n x x
x
(3) 若 f(xN) fR,则将xN缩小为xM,xM由下式定义:
) 5 . 0 , 1 0
( )
1
( ( )
R N
M x x
x
这里要求0.5,是避免xM xF的情形发生。
如果 f(xM) fG,那末x(R):xM,并重复以上步骤。
如果 f(xM) fG,那末
: () 2 ( )
) (
L i i
x
x x
,并重新开始迭代。
(4) 若 f(xN) fG,则将xN扩大为xE,xE由下式定义:
) 1 ( )
1
( ( )
R N
E x x
x 扩大的条件 f(xN) fG也可以换成
L
N f
f(x )
或 (1)f(x(R)) f(xN)f(xL) (1) 如果上述条件满足,并且
) ( )
( E f N
f x x 那末 x(R): xE 否则 x(R):xN 并重复以上步骤。
上述过程一直继续到
1
1
)2
(
n
i
L
i f
f
或 fR fL fL 为止,其中 是预先给定的正数。