****************z

Download Report

Transcript ****************z

最优化方法概述
最优化技术是一门较新的学科分支。它是在上世
纪五十年代初在电子计算机广泛应用的推动下才得到
迅速发展,并成为一门直到目前仍然十分活跃的新兴
学科。
最优化方法,顾名思义,就是从所有可能方案中
选择最合理的一种以达到最优目标的方法。由于其宗
旨是追求最优目标,因此它具有广泛的应用性。
最优化问题的一般形式
最优化问题的一般形式


 s .t .


min f
hi  x   0
g j ( x)  0
 x
i  1, 2,
j  1, 2,
其中x=[ x1,x2,…,xn]T∈ R n
,m
p
最优化问题常用的概念

min f  x   目标函数


g j  x   0  不等式约束
 s .t .

hi  x   0  等式约束


•x称为决策变量,
•满足所有约束的变量称为可行解或可行点,可行点
的集合称为可行域。
•问题的求解是指在可行域中找一点x*,使得目标函
数在该点取极小值,这样的点称为问题的最优点,也
称为最小点,而相应的目标函数值f(x*)称为最优值,
(x*,f(x*))称为最优解,习惯上x*称为最优解。
定义1:整体(全局)最优解:若x*  D,对于一切 x  D ,
恒有 f  x*   f  x 
则称 x *是最优化问题的整体最优解。
)
定义2:局部最优解:若 x*  D,存在某邻域 N  ( x* ,使得对于
*
一切 x  N  ( x* ) D ,恒有 f  x   f  x  则称 x *是最优化问题
的局部最优解。其中 N  ( x* )  { x | x  x*   ,   0}
严格最优解:当 x  x * ,有
严格最优解。
f
 x   f  x  则称 x *为问题的
*
局部最优解
f(X)
整体最优解
最优化问题分类
最优化问题


 线性问题

 无约束问题 


 非线性问题







 线性规划
 约束问题 

 非线性规划


 一维问题

 n 维问题
最优化方法的基本方法——迭代法
为什么求最优解要用迭代法?下面举例说明。
例
2x
2
则最优解必定是方程
min f ( x )  e  x
f ( x )  2 e
2x
 2x  0
的解 ,
但x 无法显化。而由于
x   , f ( x )  
x   , f ( x )  
可知
f ( x )  0
的解存在
最优化方法的基本方法——迭代法
迭代:从 一 点 x ( k )出 发 , 按 照 某 种 规 则 A, 求 出 后 继 点 x ( k 1),
用 k  1代 替 k , 重 复 以 上 过 程 , 得 到 一 个 解 的 序 列 { x
(k )
若 该 序 列 有 极 限 点 x *, 即
lim x
(k )
k
 x*  0
则 称 它 收 敛 于 x *。
下降:在每次迭代中,后继点处的函数值要有所减少。
},
最优化方法的基本方法——迭代法
迭代算法的步骤:
1 .选定某一初始点
2 .确定搜索方向
(k )
d
x
(k )
。
3 .从 x 出发,沿方向
迭代点 x
4 .检查 x
,置 k  0。
(0)
d
(k )
求步长  k ,以产生下一个
( k 1)
( k 1)
。
是否为极小点或近似极
止迭代;否则,令
小点,若是,则停
k : k  1,返回 2。
线性规划
线性规划是求线性目标函数在线性约束条件
下的最大值或最小值的问题。
线性规划问题的数学模型是将实际问题转化
为一组线性不等式或等式约束下求线性目标函数
的最小(大)值问题, 它都可以化为如下标准(矩
阵)形式:
c = (c , c , … , c )
A = (aij )m×n
min f  cx
 Ax  b,
s
.
t
.
x≥0指x中的每 
x

0
.

一个分量xj ≥0
1
2
n
 x1 
 b1 
 
 
 x2 
 b2 
x   b 


 
 
x 
b 
 n
 m
单纯形法
• 单纯形方法基本思路:
• 从可行域中某个基础可行解(一个顶点)
开始(称为初始基础可行解)。
• 如可能,从可行域中求出具有更优目标函
数值的另一个基础可行解(另一个顶点),
以改进初始解。
• 继续寻找更优的基础可行解,进一步改进
目标函数值。当某一个基础可行解不能再
改善时,该解就是最优解。
数学模型
max S = 50x1 + 30x2
s.t.
4x1 + 3x2
2x1 + x2
x1 , x2
≤
120
≤ 50
≥ 0
x2
50
Q3(0,40)
40
30
Q2(15,20)
20
可行域
10
Q1(25,0)
O(0,0)
10
20
30
40
x
数学模型的标准形:
maxS = 50x1 + 30x2
s.t.
4x1 + 3x2+ x3 = 120
2x1+ x2 + x4= 50
x1,x2 , x3 , x4 ≥0
基础可行解X(1)=(0, 0,120,50)T,
目标函数值
C
S= 0
50
30
0
0
b
CB
XB
X1
X2
X3
X4
0
X3
4
3
1
0
120
0
X4
2
1
0
1
50
50
30
0
0
0
σ
Θ
x2
50
X(1)=(0, 0,120,50)T
Q3(0,40)
40
相当于O(0,0)
30
Q2(15,20)
20
可行域
10
Q1(25,0)
O(0,0)
10
20
30
40
x
X1 进基变量, X4出基变量,
主元(2)
C
50
30
0
0
CB
XB
X1
X2
X3
X4
0
X3
4
3
1
0
0
X4
(2 )
1
0
1
50
30
0
0
σ
b
Θ
120
1 2 0 /4
5 0 5 0 /2
0
第二行除以2
C
50
30
0
0
b
CB
XB
X1
X2
X3
X4
0
X3
4
3
1
0
120
0
X4
1
1 /2
0
1 /2
25
σ
Θ
第一行加上第二行的负4倍
C
50
30
0
0
b
CB
XB
X1
X2
X3
X4
0
X3
0
1
1
-2
20
50
X1
1
1 /2
0
1 /2
25
σ
1250
Θ
新的基础可行解X(2)=(25, 0,20,0)t,
目标函数值
S = 1250
计算检验数
C
50
30
0
0
b
CB
XB
X1
X2
X3
X4
0
X3
0
1
1
-2
20
50
X1
1
1 /2
0
1 /2
25
0
5
0
-2 5 1 2 5 0
σ
Θ
x2
50
Q3(0,40)
40
X(2)=(25, 0,20,0)t
相当于Q1(25,0)
30
Q2(15,20)
20
可行域
10
Q1(25,0)
O(0,0)
10
20
30
40
x
X2 进基变量, X3出基变量,
主元(1)
C
50
30
0
0
b
Θ
CB
XB
X1
X2
X3
X4
0
X3
0
( 1)
1
-2
20
20
50
X1
1
1 /2
0
1 /2
25
25*2
0
5
0
-2 5 1 2 5 0
σ
第二行加上第一行的负1/2倍
C
50
30
0
0
b
CB
XB
X1
X2
X3
X4
30
X2
0
( 1)
1
-2
20
50
X1
1
0
-1 /2 3 /2
15
σ
1350
Θ
基础可行解X(3)=(15,20,0,0)T,
也是最优解,其最优值
S = 1350
x2
50
X(3)=(15,20,0,0)T
Q3(0,40)
40
相当于Q2(15,20)
30
Q2(15,20)
20
可行域
10
Q1(25,0)
O(0,0)
10
20
30
40
x
x2
50
Q3(0,40)
40
30
Q2(15,20)
20
可行域
10
Q1(25,0)
O(0,0)
10
20
30
40
x
x2
50
X(1)=(0, 0,120,50)T
Q3(0,40)
40
相当于O(0,0)
30
Q2(15,20)
20
可行域
10
Q1(25,0)
O(0,0)
10
20
30
40
x
x2
50
X(1)=(0, 0,120,50)T
Q3(0,40)
40
相当于O(0,0)
30
Q2(15,20)
20
可行域
10
Q1(25,0)
O(0,0)
10
20
30
40
x
x2
50
Q3(0,40)
40
X(2)=(25, 0,20,0)T
相当于Q1(25,0)
30
Q2(15,20)
20
可行域
10
Q1(25,0)
O(0,0)
10
20
30
40
x
x2
50
Q3(0,40)
40
X(2)=(25, 0,20,0)T
相当于Q1(25,0)
30
Q2(15,20)
20
可行域
10
Q1(25,0)
O(0,0)
10
20
30
40
x
x2
50
X(3)=(15,20,0,0)T
Q3(0,40)
40
相当于Q2(15,20)
30
Q2(15,20)
20
可行域
10
Q1(25,0)
O(0,0)
10
20
30
40
x
用Matlab求解线性规划
• 模型
•
•
•
•
• 用命令
• [x, fval]= linprog(f,A,b,A1,b1,lb,ub)
用Matlab求解线性规划
• minf(x)=-5x1-4x2-6x3
s.t. x1-x2+x3≦20
3x1+2x2+4x3≦42
3x1+2x2≦30
0≦x1, 0≦x2,0≦x3
用Matlab求解线性规划
用Matlab求解线性规划
• 解问题
• 把问题极小化并将约束标准化
用Matlab求解线性规划
•
•
•
•
•
键入c=[-2,-3,5];a=[-2,5,-1];
b=-10;a1=[1,1,1];b1=7;LB=[0,0,0];
[x,y]=linprog(c,a,b,a1,b1,LB)
得当X=(6.4286,0.5714,0.0000)时,
z=-14.5714最大.
exitflag
1
2
算法终止原因
梯度小于指定值
x的变化小于指定值
3
0
目标函数的变化小于指定值
迭代数超过options.MaxIter或函数的计算数超过
options.FunEvals
-1
-2
算法被输出函数终止
直线搜索沿着目前的搜索方向不能找到可以接受的点
output
iterations
包含优化信息的结构
迭代数
funcCount
lgorithm
cgiterations
函数计算数
使用的算法
PCG迭代数(large-scale algorithm only)
stepsize
最终步长(medium-scale algorithm only)
无约束非线性规划
一元函数无约束优化问题
多元函数无约束优化问题
min{ f (x)| x ∈En }, 这里x =(x1 , x2 , …, xn)T.
一元函数无约束优化问题(一维搜索)
• 精确线搜索
试探法: 黄金分割法、Fibonacci法、二分法
函数逼近法: Newton法、割线法、抛物线法、
三次插值法
• 非精确线搜索
Armijo步长规则、Goldstein步长规则、
Wolfe步长规则
一元函数无约束优化问题
我们先介绍求解一元函数 y = f (x)极小值的数值迭
代算法:一维搜索算法中的黄金分割法(0.618法).
分割法原理:设函数 f (x) 在
闭区间 [a, b] 上是下单峰函数, 即
在 (a, b) 内 f (x) 由唯一的极小点x*,
在x* 的左边 f (x) 严格单调下降, 在
x* 的右边f (x)严格单调上升. 那么
对于(a, b)内任意两点x1<x2, 如果
f (x1)< f (x2 ), 则x*∈[a, x2];否则
x*∈[x1, b].
如右图
给定下单峰区间 [a, b] 及控制误差>
0, 黄金分割法(0.618法)的迭代步骤:
①取 x2 = a + 0.618 (b - a), f2 = f (x2), 转向②.
②取 x1 = a + 0.382 (b - a), f1 = f (x1), 转向③.
③若 | b – a |< , 则取x* = (a + b )/2, 停. 否则
转向④.
④若f1< f2 , 则取b = x2 , x2 = x1, f2 = f1 , 转向
②;
若f1= f2 , 则取a = x1, b = x2, 转向①;
若f1>f2 , 则取a = x1, x1= x2, f1 = f2 , 转向⑤.
⑤取 x2 = a + 0.618 (b - a), f2= f (x2), 转向③.
函数逼近法:牛顿法
基本思想:在极小点附近用二阶Taylor多项式近似。
min
令  ( x)  f ( x
(k )
f ( x)
)  f ( x
(k )
)( x  x
(k )
)
1
(k )
(k ) 2
f ( x )( x  x )
2
(k )
(k )
(k )



又 令  ( x )  f ( x )  f ( x )( x  x )  0
得  ( x )的驻点,记作
x
( k 1)
 x
(k )
x

( k 1)
,则
(k )
f ( x )
(k )


f (x )
算法步骤:
1.给 定 初 始 点 x
(0)
, 允 许 误 差   0, 置 k  0。
(k )
2 .若 | f ( x ) |  , 则停止计算,得点
3 .计算点 x
x
x
(k )
; 否则转 3 .
( k 1)
( k 1)
 x
(k )

(k )

f (x )

f  x
(k )

,
置 k  k  1,返回 2。
缺点:初始点选择十分重要。如果初始点靠近极小点,则
可能很快收敛;如果初始点远离极小点,迭代产生的点
列可能不收敛于极小点。
例: min e x  5 x
解:

取初始点 x
(1  x  2 ),   0 . 01 .
(0)
2
k
x 
0
2
2 . 388
7 . 388
1
1 . 677
0 . 349
5 . 349
2
1 . 612
0 . 012
5 . 012
3
1 . 6096
(k )

(k )
f x


(k )
f  x
 0 . 00002
x  1 . 6096 为近似解。

用Matlab解无约束优化问题
1. 一元函数无约束优化问题 :
min f( x)
x1  x  x 2
常用格式如下:
(1)x= fminbnd (fun,x1,x2)
(2)x= fminbnd (fun,x1,x2 ,options)
(3)[x,fval]= fminbnd(...)
(4)[x,fval,exitflag]= fminbnd(...)
(5)[x,fval,exitflag,output]= fminbnd(...)
其中(3)、(4)、(5)的等式右边可选用(1)或
(2)的等式右边。
函数fminbnd的算法基于黄金分割法,它要求目标函数
必须是连续函数,并可能只给出局部最优解。
例 1
求
f = 2e
x
sin x 在 0<x<8 中 的 最 小 值 与 最 大 值
主程序为wliti1.m:
f='2*exp(-x).*sin(x)';
fplot(f,[0,8]);
%作图语句
[xmin,ymin]=fminbnd (f, 0,8)
f1='-2*exp(-x).*sin(x)';
[xmax,ymax]=fminbnd (f1, 0,8)
运行结果:
x min = 3. 9270
ymin = -0.02 79
x max =
ymax =
0 .7854
0.64 48
例2 对边长为3米的正方形铁板,在四个角剪去相等的正方形以
制成方形无盖水槽,问如何剪法使水槽的容积最大?
解
设 剪 去 的 正 方 形 的 边 长 为 x, 则 水 槽 的 容 积 为 : ( 3  2 x ) x
2
建 立 无 约 束 优 化 模 型 为 : min y=- ( 3  2 x ) x , 0<x<1.5
2
先编写M文件fun0.m如下:
function f=fun0(x)
f=-(3-2*x).^2*x;
主程序为wliti2.m:
[x,fval]=fminbnd('fun0',0,1.5);
xmax=x
fmax=-fval
运算结果为: xmax = 0.5000,fmax =2.0000.即剪掉的正方形的
边长为0.5米时水槽的容积最大,最大容积为2立方米.
最速下降法
问题:在点 xk 处,沿什么方向 d k , f x  下降最快?
结论:负梯度方向使 f x  下降最快,亦即最速
下降方向.
最速下降法算法
Step1: 给出
x0  R ,0    1, k : 0
n
Step2: 计算f xk , 如果 f xk 
Step3: 计算下降方向 d k
  , 停.
 gk .
Step4: 计算步长因子 k .
Step5: 令 xk 1
 xk   k d k ,
转步2.
分析:设 f x  
1
2
x Gx  b x  c 是正定二次函数,
T
T
由精确的线搜索确定的  k
T
k  
特别当:d k
gk dk
T
d k Gd k
  gk
T
k 
gk gk
T
g k Gg k
?
例1:用最速下降法求解:
min f  x  
1
2
 x1 
解: g x   


9
x
2 

x0  9,1
x 
2
1
9
2
x
2
2
1
Gx   
0

x0  9, 1
T
0

9

x  0,0
*
T
g 0  f x0   9,9
T
T
 7.2 
 7.2 


x1  x0  T
g0  
g1  





0
.
8

7
.
2
g 0 Gg0




2
T


9

0
.
8
g1 g1

x2  x1  T
g1  
2
2 

g1 Gg1
  1  0.8 
T
g0 g0
 9 
k


0.8 , k  1, 2,
xk  
k 
  1 
*
xk 1  x
xk 1
 lim
 0.8
分析:
(1) lim
*
k 
k 
xk
xk  x
因此:最速下降法是整体收敛的,
且是线性收敛的.
(2) 两个相邻的搜索方向是正交的.
d 0  9,9 d1  7.2, 7.2
T
T
d 0 d1  0
T
最速下降法优点
(1) 程序设计简单,计算量小,存储量小,
对初始点没有特别要求.
(2) 有着很好的整体收敛性,即使对一般的
目标函数,它也整体收敛.
最速下降法缺点
(1) 最速下降法是线性收敛的,并且有时是
很慢的线性收敛.
原因:①
dk   gk
仅反映 f x  在 xk 处
的局部性质.
T
g
② k 1d k  0 , 相继两次迭代中搜索
方向是正交的.
小结
(1) 最速下降法是基本算法之一,而非有效
的实用算法.
最速下降法的本质是用线性函数来近似
目标函数,要想得到快速算法,需要考
虑对目标函数的高阶逼近.
牛顿法
基本思想
利用目标函数 f x  在点 xk 处的二阶Taylor
展开式去近似目标函数,用二次函数的极小点
去逼近目标函数的极小点.
算法构造
问题:如何从 xk  xk 1 ?
设 f x  二阶连续可微,xk  R , g k  f xk ,
n
海赛阵 Gk   f xk  正定.
2
f x   f xk  x  xk   qk x   f k  g k x  xk 
T

1
2
 x  xk 
T
Gk  x  xk 
因为Gk 正定,则 qk x  有唯一极小点,用这个
极小点作为 xk 1.
所以要求:qk xk 1   0
即:Gk xk 1  xk   g k  0
1
k
因此: xk 1  xk  G g k
这就是牛顿法迭代公式.
1
k
注:这里 k  1, d k  G g k .
牛顿法算法
Step1: 给出
x0  R ,0    1, k : 0
n
Step2: 计算f xk , 如果
f xk    ,
Step3: 否则计算 Gk , 并且求解方程
Gk d k   g k , 得出 d k .
Step4: 令 xk 1
 xk  d k , 转步2.
停.
例1:用牛顿法求解:
min f  x  
1
2
 x1 
解: g x   


9
x
2 

x 
2
1
9
2
x
2
2
1
Gx   
0

9 1
x1  x0  G g 0  
1

0
  
1
0
x0  9, 1
T
0

9

0

9

1
x  0,0
*
T
9  0
*

9

0
x
   
牛顿法优点
(1) 如果 G * 正定且初始点选取合适,算法
二阶收敛.
(2) 对正定二次函数,迭代一次就可以得到
极小点.
牛顿法缺点
(1) 对多数问题算法不是整体收敛的.
(2) 每次都需要计算Gk , 计算量大.
(3) 每次都需要解 Gk d   g k ;
方程组有时奇异或病态的,无法确定d k ,
或 d k 不是下降方向.
(4) 收敛到鞍点或极大点的可能性并不小.
阻尼牛顿法算法
Step1: 给出
x0  R ,0    1, k : 0
n
Step2: 计算f xk , 如果
f xk    ,
Step3: 否则计算 Gk , 并且求解方程
Gk d   g k ,
Step4: 沿
dk
得出d k .
进行线搜索,
得出 k .
Step5: 令 xk 1
 xk   k d k , 转Step2.
可以克服牛顿法的缺点(1)
停.
共轭方向法
与共轭梯度法
算法特点
(1)有效的算法,克服了最速下降法的慢
收敛性,又避免了牛顿法的计算量大和局部收
性的缺点.
(2)算法简单,易于编程,需存储空间小等
优点,是求解大规模问题的主要方法.
共轭方向及其性质
定义1: 设 d1 , d 2 ,, d m 是 R n 中任一组
非零向量,如果:diT Gd j  0 , i  j 
则称 d1 , d 2 ,, d m 是关于 G 共轭的.
注:若
G  I , 则是正交的,因此共轭是
正交的推广.
共轭方向法算法
Step1: 给出
x0  R ,0    1, k : 0
n
计算 g 0  g x0  和初始下降方向 d 0 .
Step2: 如果 g k   , 停止迭代.
Step3: 计算  k , xk 1 , 使得 xk 1  xk
  k dk .
Step4: 采用某种共轭方向法计算 d k 1使得:
d k 1Gd j  0, j  0,1,, k .
T
Step5: 令k : k  1, 转Step2.
共轭梯度法
取:
记:
d0   g0
d k   g k   k 1d k 1
左乘 d kT1G ,并使 d kT1G d k
 0,得:
T
 k 1 
g k Gdk 1
d
T
k 1
Gdk 1
(Hestenes-Stiefel公式)
共轭梯度法基本性质
定理3: 对于正定二次函数,采用精确线搜索
的共轭梯度法在 m  n 步后终止,且对
1  i  n 成立下列关系式:
di Gd j  0 , j  0,1,, i  1,
(共轭性)
g g j  0 , j  0,1,, i  1,
(正交性)
T
T
i
g d j  0 j  0,1,i  1,
T
i
d gi   g gi
T
i
T
i
,
(下降条件)
系数的其他形式
(1)FR公式
T
 k 1 
gk gk
g
T
k 1
(1964)
g k 1
(2)PRP公式
g k  g k  g k 1 
T
 k 1 
g
T
k 1
g k 1
(1969)
FR共轭梯度法算法
Step1: 给出
x0  R ,0    1, k : 0
n
Step2: 计算 g k
Step3:
 f  xk , 如果 g k
  ,停.
d k   g k   k 1d k 1
 k 1
 g kT g k
 T
g g
k 1 k 1
0

k 1
k 1
Step4: 由精确线搜索求  k .
Step5:
xk 1  xk   k d k , k  k  1, 转Step2.
例4:用FR共轭梯度法求解:
min f  x  
解:化成
3
2
1
x 
2
1
f x  
2
1
x  x1 x2  2 x1
x Gx  b x  c
T
2
 3
f  x    x1 , x2 
 1
2

1
(1)
2
2
  2
x0  
 4 



12 
d0  
 6



T
x0   2, 4 
形式
 1 x1 
 x1 




  2,0





x
1  x2 
 2
  12 
g 0  Gx0  b  
 6 



T
T
0  
g0 d0
T
0
d Gd0

5
17
 6 


g1  Gx1  b   17 
 12 


 17 
T
g1 g1
1

(2)  0  T
g0 g0
289
 26 


x1  x0   0 d 0   17 
 38 


 17 
g1  0.789


d1   g1   0 d 0  


T
g1 d1
10
1 
1   T


x2  x1  1d1  


d1 Gd1
17
1
 
1
 
*
x  x2  
g2  0
1

 
90 

289 
210 

289 
例5:用FR共轭梯度法求解:
min f  x  
解:化成
1
2
1
x 
2
1
f x  
2
1
x
2
2
x0  1, 1 d 0   1,0 
T
x Gx  b x  c
T
T
2
1
f  x    x1 , x2 
0
2

1
(1)
 1
x0  
 1

 
  1
d0  
 0 



形式
0  x1 





1  x2 

1
g 0  Gx0  b  
1

 
T
T
g0 d0
0  
T
0
1
d Gd0
 0
g1  Gx1  b  
1

 
T
(2)  0

g1 g1
T
0

g g0
2
T
1  
g1 d1
T
1
d Gd1
1

4
5
 0
x1  x0   0 d 0  
1

 
g1  1
 1
 
d1   g1   0 d 0 
 2
 1 
 2
 
x2  x1  1d1   5 
 1 


 5 
用Matlab求解多元函数无约束优化问题
所用函数
min f ( x )
x
x——向量;
f(x)——返回值为标量的函数;
fminunc——寻找无约束多变量函数f(x)最小值.
x = fminunc(fun,x0)
初始点为x0,寻找fun所定义的函数的局部最小。
x = fminunc(fun,x0,options)
初始点为x0,寻找fun所定义的函数的局部最小,
优化选项包含在结构options中。
[x,fval] = fminunc(...)
x为最小点,fval为最优值。
[x,fval,exitflag] = fminunc(...)
exitflag标识算法终止的原因。
[x,fval,exitflag,output] = fminunc(...)
结构output中包含优化信息。
[x,fval,exitflag,output,grad] = fminunc(...)
在grad中包含函数fun在x处的梯度值。
[x,fval,exitflag,output,grad,hessian] = fminunc(...)
hessian中返回函数fun在x处的Hessian矩阵值。
问
题
min f ( x )  e ( 4 x  2 x  4 x1 x 2  2 x 2  1)
x1
2
1
2
2
Matlab工具箱求解过程
步骤1: 写一个目标函数的M文件objfun.m
function f = objfun(x)
f = exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1);
步骤2: 调用一个无约束优化程序
x0 = [-1,1];
% 起始点
options = optimset('LargeScale','off');
[x,fval,exitflag,output] = fminunc(@objfun,x0,options)
注:1.可把步骤二的内容建立一个M文件Unconstr.m,
在命令行运行Unconstr即得到以下运行结果。
2.以M文件函数给出时文件名前加@
运行结果
Matlab命令窗口显示如下运行结果。
Optimization terminated: relative infinity-norm of gradient less
than options.TolFun.
x=
0.5000 -1.0000
fval =
1.0983e-015
exitflag =
1
output =
iterations: 8
funcCount: 66
stepsize: 1
firstorderopt: 7.3704e-008
algorithm: 'medium-scale: Quasi-Newton line search'
message: [1x85 char]
结果分析
66次函数计算后,找到最终答案。
x=
0.5000 -1.0000
在终点x 处函数值为fval:
fval =
1.0983e-015
exitflag 是算法是否收敛的标识. exitflag > 0 意味着找到局部极小。
exitflag =
1
输出结构给出更多关于优化的信息。对于fminunc,包括iterations
中的迭代数,funcCount中的函数计算次数,stepsize 中的最终步长,
firstorderopt中的一阶最优性的测量。Algorithm中的算法的类型。
当多于一种局部最小存在,初始点 [x1,x2]的设置影响函
数评价的次数和最终点的值。在前面的例子中, x0被初
始化为 [-1,1]。
变量options可被传递到 fminunc改变优化算法的特性,
x = fminunc(@objfun,x0,options);
option是一种包含终止误差和算法选择的结构。Options
可以使用optimset函数创建。
options = optimset('LargeScale','off');
这个例子中,已关闭了large-scale算法缺省选项,而使用
medium-scale算法。其他选项包括控制优化迭代过程命令
行显示的数量,终止准则的公差,使用使用者提供的梯度
还是雅可比矩阵,迭代或函数计算的最大数。
非线性不等式约束
所用函数:
min f ( x )
x
c ( x )  0 , ceq ( x )  0
A  x  b , Aeq  x  beq , lb  x  ub
式中:
x,b,beq,lb,ub ——向量;
A,Aeq——矩阵;
c(x),ceq(x)——返回向量的函数;
f(x)——返回标量的函数;
f(x),c(x),ceq(x)——可以是非线性函数。
x = fmincon(fun,x0,A,b)
x0为起始点,寻找函数fun的最小值,约束条件为线性不
等式约束A*x≤b。x0可以是标量、向量或矩阵。
x = fmincon(fun,x0,A,b,Aeq,beq)
寻找函数fun的最小值,约束条件为线性等式约束Aeq*x =
beq以及线性不等式约束A*x ≤b。如果无线性不等式约束
设置A=[]、b=[]。
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
定义了变量x的上下界,使最优解x为lb ≤ x ≤ub。如果等式
约束不存在,设置Aeq=[]、beq=[] 如果x(i)无下界,设置
lb(i)=-Inf;如果x(i) 无上界,设置ub(i)=Inf。
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
nonlcon中定义了非线性不等式c(x)或等式ceq(x)约束。优化结果使
c(x) ≤ 0、ceq(x) = 0。如果变量x无上下界,设置lb=[]、ub=[]。
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
优化选项在结构options中定义。使用optimset 函数定义options.
如果没有非线性不等式和等式约束,设置nonlcon = []。
[x,fval] = fmincon(...)
返回最优解(x,fval)。
[x,fval,exitflag] = fmincon(...)
返回描述fmincon 结束的原因的标识符exitflag。
[x,fval,exitflag,output] = fmincon(...)
结构output中包含优化信息。
[x,fval,exitflag,output,lambda] = fmincon(...)
返回最优解x的拉格朗日乘子,存储在结构lambda中。
[x,fval,exitflag,output,lambda,grad] = fmincon(...)
在grad中包含函数fun在x处的梯度值。
[x,fval,exitflag,output,lambda,grad,hessian] = fmincon(...)
在hessian中包含函数fun在x处的Hessian矩阵值。
exitflag
算法终止原因
1
First order optimality conditions were satisfied to
the specified tolerance
2
x的变化小于指定值
3
目标函数的变化小于指定值
4
搜索方向的绝对值小于特定的容许值并且约束偏差小于
options.TolCon
5
方向导数的绝对值小于特定的容许值并且约束偏差小于
options.TolCon
0
迭代数超过options.MaxIter或函数的计算数超过
options.FunEvals
-1
算法被输出函数终止
-2
找不到可行点
lambda
在最优点x处的拉格朗日乘子
lower
下界lb
upper
上界ub
ineqlin
线性不等式
eqlin
线性等式
ineqnonlin
非线性不等式
Nonlinear equalities
非线性等式
output
包含优化信息的结构
iterations
迭代数
funcCount
函数计算数
lgorithm
使用的算法
cgiterations
PCG迭代数(large-scale algorithm only)
stepsize
最终步长(medium-scale algorithm only)
firstorderopt
一阶最优性的测量
问题
minimize
f (x)  e
x1
x
( 4 x 1  2 x 2  4 x 1 x 2  2 x 2  1)
2
约束条件:
x 1 x 2 - x 1 - x 2  -1.5
x 1 x 2  -10
2
Matlab工具箱求解过程
不能在命令行把非线性的约束传给fmincon。
但可创建一个M-file,confun.m,这个文件返回当
前x的两个约束条件的变量c。接着调用带约束的优
化函数fmincon。由于fmincon要求约束条件被写成
c(x)  0
的形式,因此必须重写以下形式的约束。
x 1 x 2 - x 1 - x 2  1.5  0
- x 1 x 2 - 10  0
步骤1:写一个约束条件的confun.m 文件。
function [c, ceq] = confun(x)
c = [1.5 + x(1)*x(2) - x(1) - x(2); -x(1)*x(2) - 10];
%非线性不等式约束
ceq = [];
% 非线性等式约束
步骤2:写一个目标函数的M文件objfun.m
function f = objfun(x)
f = exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1);
步骤3:调用带约束的优化程序。
x0 = [-1,1];
% 起始点
options = optimset('LargeScale','off','Display','iter');
[x,fval,exitflag,output]=
fmincon(@objfun,x0,[],[],[],[],[],[],@confun,options)
运行结果
x=
-9.5474 1.0474
fval =
0.0236
exitflag =
1
output =
iterations: 8
funcCount: 36
stepsize: 1
algorithm: 'medium-scale: SQP, Quasi-Newton, line-search'
firstorderopt: 8.5125e-007
cgiterations: []
message: [1x144 char]
运行结果分析
36 次函数调用后,最优解为
x=
-9.5474 1.0474
fval =
0.0236
也可计算最优解处的约束。
[c,ceq] = confun(x)
返回 c=
1.0e-14 *
0.1110
-0.1776
ceq =
[]
可注意到约束值小于等于0,即x满足。
带边界的约束
问题
2
2
m inim ize f(x)  e (4x 1  2x 2  4x 1 x 2  2x 2  1)
x1
x
约束条件:
x1  0
x2  0
Matlab工具箱求解过程
通过对约束优化函数定义简单的边界约束,变量x可以被
限制在某一范围。对于函数fmincon,命令
x = fmincon(@objfun,x0,[],[],[],[],lb,ub,@confun,options);
限制 x 为 lb ≤ x ≤ ub。
步骤1:写一个约束条件的confun.m 文件。
function [c, ceq] = confun(x)
c = [1.5 + x(1)*x(2) - x(1) - x(2); -x(1)*x(2) - 10];
%非线性不等式约束
ceq = [];
% 非线性等式约束
步骤2:写一个目标函数的M文件objfun.m
function f = objfun(x)
f = exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1);
步骤3:调用带约束的优化程序
为使方程中x大于0,使用如下命令。
x0 = [-1,1];
% 估计问题的起始点
lb = [0,0];
% 设置下界
ub = [ ];
% 无上界
options = optimset('LargeScale','off','Display','iter');
[x,fval,exitflag,output]=
fmincon(@objfun,x0,[],[],[],[],lb,ub,@confun,options)
[c, ceq] = confun(x)
注意:为了向fmincon传递下界作为第七个变量,必
须定义第三个到第六个变量的值。本例中因为没有
线性不等式或线性等式约束,定义这些变量为空。
运行结果
x=
0 1.5000
fval =
8.5000
exitflag =
1
output =
iterations: 3
funcCount: 15
stepsize: 1
algorithm: 'medium-scale: SQP, Quasi-Newton, line-search
firstorderopt: 1.6307e-012
cgiterations: []
message: [1x144 char]
c=
0
-10
ceq =
[]
运行结果分析
当 lb或 ub 比 x包含的元素少,仅仅x中对应的元素
被约束。如果仅仅变量的一部分被约束,在 lb中使用inf作为无约束的下边界向量,在 ub中使用 inf 作为无约
束的上变量。例如:
lb = [-inf 0];
ub = [10 inf];
边界x1≤10、x2≥0,x1没有下界和x2没有上界。使
用inf和 -inf 比使用很大的正数或很大的负数作为缺少的
边界,得到更好的数值结果。
注意:进一步限制了搜索空间后,寻找最终解的函数计算
次数减少(66→36→15)。当问题有较多的约束和边界限
制时,通常有较少的函数计算。因为最优化关于步长和
可行性区域,约束问题比无约束问题有更好的判断。因
此,尽可能约束和限制问题较好,这可促进快速收敛。
为了显示每次迭代的输出,键入
options = optimset('Display', 'iter');
此命令设置Display option 的值为‘iter’。
这个命令的设置使工具箱每次迭代都显示结果。也
可以关闭任何输出结果(display 设为‘off’), 仅仅在最后
显示输出结果 (display 设为‘final’), 或在问题不收敛
时显示 (display 设为'notify')。
当选项Display设为'iter',运行结果呈以下形式。
max
Directional First-order
Iter F-count f(x) constraint Step-size derivative
optimality Procedure
等式约束
非线性等式约束必须与非线性不等式约束同时
在M文件中计算。
问题
minimize
x
f (x)  e
x1
( 4 x  2 x  4 x 1 x 2  2 x 2  1)
2
1
x 1+ x 2  1
2
约束条件:
x 1 x 2  -10
2
2
Matlab工具箱求解过程
约束条件改写为:
约束条件:
x 1 + x 2- 1  0
2
- x 1 x 2- 10  0
步骤1:写M文件objfun.m
function f = objfun(x)
f = exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1);
步骤2:写非线性约束的 M文件constraints
function [c, ceq] = confuneq(x)
c = -x(1)*x(2) - 10;
%非线性不等式约束
ceq = x(1)^2 + x(2) - 1;
%非线性等式约束
步骤3:调用约束优化程序
x0 = [-1,1];
% 估计初始点
options = optimset('LargeScale','off', 'Display','iter');
[x,fval] = fmincon(@objfun,x0,[],[],[],[],[],[], @confuneq,option
[c,ceq] = confuneq(x)
% 检查x点的约束值
x=
-0.7529
0.4332
fval =
1.5093
c=
-9.6739
ceq =
6.3038e-009
运行结果分析
在约束的缺省误差1.0e-006范围内为0,c小于等于0。