最优化问题的MATLAB求解
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用于求解无附加条件的极小值点。两命令的语法相同。 语法:x=fminsearch(fun,x0)—— 最简形式
x0 ——向量,指搜索点初值,表示为列向量。x0较难确 定,所以最好使用flag参数来把握求解过程的有效性。
fun —— 用内联函数,或M-函数文件(被引用时必须用
单引号括住函数名),或直接以单引号括起的函数表达 式给出的方程(组)。 在求多元函数最值时,需在fun的编写过程中将各变量写 成一个向量的各分量的形式,即x (1), x(2), …,并且方程 组要以多行一列的矩阵形式来表示。
最优化问题的求解
一、无约束最优化问题求解
问题的描述:求 min f ( x)
x
x =[x1, x2,…, xn] —— 最优化变量 f ( x) —— 目标函数
该求解问题就是要求取 x 的值,使目标函数 f ( x)为最
小。即求函数 f ( x)的最小值。
除满足函数定义域的要求外,对自变量x无其他约束条
执行结果: = x 4.6123
结合函数图像来检验初始搜索点的确定是否合理: >> ezplot('exp(x)-x^3-4*x^2',[-10,10])
exp(x)-x 3-4 x 2 2000
从函数图像看,如
1500
果初始搜索点改为负数, 我们可能得到另一个结果。 如:
1000
500
0 -10 -8 -6 -4 -2 0 x 2 4 6 8 10
件。因此称为无约束最优化问题。
若要计算一个函数 f (x) 的最大值,可根据“f (x) 的最大 值= - f (x) 的最小值”得到。 目前所有的最优化算法均不能保证求出全局最优解,即整 个定义域上的最值,以下介绍的命令实际上是求极小值 (局部最小值)点。
命令:fminsearch 或 fminunc
0.2
0
-0.2
-0.4
-0.6 6 4 2 0 1 0 3 2 5 4
根据上图,重新确定一个更为合理的绘图区域:
>>x=-3:0.2:3;y=-3:0.2:3;[xx,yy]=meshgrid(x,y); >>zz=(xx.^2-2*xx).*exp(-xx.^2-yy.^2-xx.*yy);mesh(xx,yy,zz)
变量 f fun H A,b Aeq,beq vlb,vub X0 x1,x2 options 描 述 线性规划的目标函数f*X 或二次规划的目标函 数X’*H*X+f*X 中线性项的系数向量 非线性优化的目标函数.fun必须为行命令对象 或M文件、嵌入函数、或MEX文件的名称 二次规划的目标函数X’*H*X+f*X 中二次项的系 数矩阵 A矩阵和b向量分别为线性不等式约束: AX b 中的系数矩阵和右端向量 Aeq矩阵和beq向量分别为线性等式约束: Aeq X beq 中的系数矩阵和右端向量 X的下限和上限向量:vlb≤X≤vub 迭代初始点坐标 函数最小化的区间 优化选项参数结构,定义用于优化函数的参数 调用函数 linprog,quadprog fminbnd,fminsearch,fminunc, fmincon,lsqcurvefit,lsqnonlin, fgoalattain,fminimax quadprog linprog,quadprog,fgoalattain, fmincon, fminimax linprog,quadprog,fgoalattain, fmincon, fminimax linprog,quadprog,fgoalattain, fmincon,fminimax,lsqcurvefit, lsqnonlin 除fminbnd外所有优化函数 fminbnd 所有优化函数
得:x = 0.6111 -0.3055
可事先绘制图像,来获得初始搜索点。首先较为随意 地给出一个绘图区域: >>x=0:0.2:5;y=0:0.2:5;[xx,yy]=meshgrid(x,y); >>zz=(xx.^2-2*xx).*exp(-xx.^2-yy.^2-xx.*yy);mesh(xx,yy,zz)
例1:求一元函数 y = ex – x 3 – 4 x2 的(局部)最小值点。 格式1 —— >> x=fminsearch('exp(x)-x^3-4*x^2',1)
可使用ezplot 命令作出函数图象来验证上述结果。
与fsolve 的情况类似,由于极值不一定唯一,改变初始 搜索点位置可能会得到不同的结果。 格式2 —— 首先编写M-函数文件如下: function y=ff1(x) y=exp(x)-x^3-4*x^2; 之后在命令窗口输入命令:>>x=fminsearch('ff1',1) 格式3 —— 使用内联函数 >>g=inline(‘exp(x)-x^3-4*x^2’,’x’); x=fminsearch(g,1)
fval
exitflag
output
所有优化函数
模型输入时需要注意的问题
• (1)目标函数最小化 • 优化函数fminbnd、fminsearch、fminunc、fmincon、 fgoalattain、fminmax和lsqnonlin都要求目标函数最小化。
• (2)约束非正 • 优化工具箱要求非线性不等式约束的形式为Ci(x)≤0,通过 对不等式取负可以达到使大于零的约束形式变为小于零的 不等式约束形式的目的。
格式2 —— 首先编写M-函数文件如下: function y=ff2(x) y= (x(1)^2-2*x(1))*exp(-x(1)^2-x(2)^2-x(1)*x(2)); 之后在命令窗口输入命令:>> x=fminsearch('ff2',[1,1])
格式3 —— 使用内联函数 >> g=inline('(x(1)^2-2*x(1))*exp(-x(1)^2-x(2)^2-x(1)*x(2))', 'x'); >> x=fminsearch(g,[1,1])
ຫໍສະໝຸດ Baidu部最优解
f(X)
整体最优解
求解 P 的基本方法(迭代算法) :
1 给定一个初始可行点 x0 D ;
2 产生可行点 x1 ,x 2 , …,x k , …, 记为 xk ;
3 使得或者某个 x k 恰好是问题的一个最优 解,或者该点列 xk 收敛到问题的一个最优解 x* 。
>> x=fminsearch('exp(x)-x^3-4*x^2',-2) 得: x = -2.6752
例2:求二元函数的 z ( x 小值点(曲面的最低点) 格式1
2
2x)e
x 2 y 2 xy
(局部)最
>>x=fminsearch('(x(1)^2-2*x(1))*exp(-x(1)^2-x(2)^2-x(1)*x(2))',[1,1])
控制选项,包含 含义见前面的“问题描述” 若干分量,用于 对求解过程进行 控制。可省略。 初始搜索点
反映求解过程中的迭代次数等信息 该值若为正,说明求解成功,否则表明求解 出现问题。 目标函数的最优解 求解结果(令目标函数取得最优解的x)
最简形式:
x=linprog (f, A,B,C,D, xm, xM, x0) 注意:各参数的参数名可以变,但位置必须 跟上述格式对牢。若相应的约束不存在,应该用 空矩阵[ ]占位。 由于输入变量较多且往往较复杂,一般需事 先定义。
Ax B x s .t . Cx D xm x x M
min
f x
x —— 自变量,是由若干分量组成的列向量;
f —— x的各分量前的系数构成的向量; f﹒x —— 目标函数(即求该函数的最小值),是 f 与 x 的数量积。
以下为约束函数: Ax ≤B —— 对目标函数的自变量x的线性不等式约束; 对“≥”的情况,需要通过两边同乘以-1改成标准的
3. 优化函数的输出变量下表:
变量 x 描 述 由优化函数求得的值.若exitflag>0,则x 为解;否则,x不是最终解,它只是迭代制止 时优化过程的值 解x处的目标函数值 描述退出条件: exitflag>0,表目标函数收敛于解x处 exitflag=0,表已达到函数评价或迭代 的最大次数 exitflag<0,表目标函数不收敛 包含优化结果信息的输出结构. Iterations:迭代次数 Algorithm:所采用的算法 FuncCount:函数评价次数 调用函数 所有优化函数 linprog,quadprog,fgoalattain, fmincon,fminimax,lsqcurvefit, lsqnonlin, fminbnd
3、模型:min z=fX s.t. AX b Aeq X beq VLB≤X≤VUB
命令:[1] x=linprog(f,A,b,Aeq,beq, VLB,VUB) [2] x=linprog(f,A,b,Aeq,beq, VLB,VUB, X0) 注意:[1] 若没有等式约束: Aeq X beq , 则令Aeq=[ ], beq=[ ]. [2]其中X0表示初始点 4、命令:[x,fval]=linprog(…) 返回最优解x及x处的目标函数值fval.
二次规划 约束极小 (非线性规划) 达到目标问题
s.t. Ax<=b Min F(X) s.t. G(X)<=0 Min r s.t. F(x)-wr<=goal Min max {Fi(x)}
X {Fi(x)}
极小极大问题
s.t. G(x)<=0
工具箱的结构
2. 优化函数的输入变量
使用优化函数或优化工具箱中其它优化函数时, 输入变量见下表:
Matlab 最优化工具箱
Name : E-mail:
曾泰山 zengtsh@gmail.com
最优化问题的一般算法
最优化问题的一般数学模型
s .t .
hi x 0
min f x i 1, 2, , m j 1, 2, p (P)
g j ( x) 0
下降算法: 在迭代算法中,若 f ( xk 1 ) f ( xk )
点列 x k 的产生,通常采取两步完成:
1 在可行域内 x k 点处求一个方向 pk , 称这个方向 为下降方向或搜索方向;
2 以 x k 为出发点,作射线 xk pk ,其中 0 , 在 此 射 线 上 求 一 点 xk 1 , xk 1 = xk k pk , 使 得 f ( xk 1 ) f ( xk ) ,其中 k 称为步长。
用MATLAB优化工具箱解线性规划
1、模型: min z=fX s.t. AX b 命令:x=linprog(f,A,b)
2、模型:min z=fX s.t. AX b Aeq X beq 命令:x=linprog(f,A,b,Aeq,beq)
AX 注意:若没有不等式: b 存在,则令A=[ ],b=[ ].
Matlab优化工具箱简介
1.MATLAB求解优化问题的主要函数
类 型
一元函数极小 无约束极小 线性规划
模 型 Min F(x)s.t.x1<x<x2 Min F(X) Min c X s.t.AX<=b T T Min 1 x Hx+c x
2
T
基本函数名 x=fminbnd(‘F’,x1,x2) X=fminunc(‘F’,X0) X=fminsearch(‘F’,X0) X=linprog(c,A,b) X=quadprog(H,c,A,b) X=fmincon(‘FG’,X0) X=fgoalattain(‘F’,x,goal,w) X=fminimax(‘FG’,x0)
1.5 1 0.5 0 -0.5 -1 5 4 0 -2 -5 -4 2 0
1.5
1
0.5
通过改变观察视角, 可以看出极小值点的横纵 坐标的大致值。
0
-0.5
-1 5 0 y -5 -3 -2 -1 x 0 1
1.5
2 3
1
0.5
0
-0.5 0 5 0 y -5
5
-1
x
2、线性规划问题的求解
线性规划问题是一种最简单的有约束最优化问题, 其目标函数和约束函数都是线性的,约束函数包括线性 不等式和线性等式。 问题的描述:求
“≤”的形式;
Cx=D —— 对目标函数的自变量x的线性等式约束; xm≤x≤xM —— x的取值范围,xm和xM分别为下界向量和上 界向量。
命令:linprog
附加参数,可省略
语法:[x,fopt,flag,c]=linprog (f,A,B,C,D, xm, xM, x0,OPT,p1,p2,…)
x0 ——向量,指搜索点初值,表示为列向量。x0较难确 定,所以最好使用flag参数来把握求解过程的有效性。
fun —— 用内联函数,或M-函数文件(被引用时必须用
单引号括住函数名),或直接以单引号括起的函数表达 式给出的方程(组)。 在求多元函数最值时,需在fun的编写过程中将各变量写 成一个向量的各分量的形式,即x (1), x(2), …,并且方程 组要以多行一列的矩阵形式来表示。
最优化问题的求解
一、无约束最优化问题求解
问题的描述:求 min f ( x)
x
x =[x1, x2,…, xn] —— 最优化变量 f ( x) —— 目标函数
该求解问题就是要求取 x 的值,使目标函数 f ( x)为最
小。即求函数 f ( x)的最小值。
除满足函数定义域的要求外,对自变量x无其他约束条
执行结果: = x 4.6123
结合函数图像来检验初始搜索点的确定是否合理: >> ezplot('exp(x)-x^3-4*x^2',[-10,10])
exp(x)-x 3-4 x 2 2000
从函数图像看,如
1500
果初始搜索点改为负数, 我们可能得到另一个结果。 如:
1000
500
0 -10 -8 -6 -4 -2 0 x 2 4 6 8 10
件。因此称为无约束最优化问题。
若要计算一个函数 f (x) 的最大值,可根据“f (x) 的最大 值= - f (x) 的最小值”得到。 目前所有的最优化算法均不能保证求出全局最优解,即整 个定义域上的最值,以下介绍的命令实际上是求极小值 (局部最小值)点。
命令:fminsearch 或 fminunc
0.2
0
-0.2
-0.4
-0.6 6 4 2 0 1 0 3 2 5 4
根据上图,重新确定一个更为合理的绘图区域:
>>x=-3:0.2:3;y=-3:0.2:3;[xx,yy]=meshgrid(x,y); >>zz=(xx.^2-2*xx).*exp(-xx.^2-yy.^2-xx.*yy);mesh(xx,yy,zz)
变量 f fun H A,b Aeq,beq vlb,vub X0 x1,x2 options 描 述 线性规划的目标函数f*X 或二次规划的目标函 数X’*H*X+f*X 中线性项的系数向量 非线性优化的目标函数.fun必须为行命令对象 或M文件、嵌入函数、或MEX文件的名称 二次规划的目标函数X’*H*X+f*X 中二次项的系 数矩阵 A矩阵和b向量分别为线性不等式约束: AX b 中的系数矩阵和右端向量 Aeq矩阵和beq向量分别为线性等式约束: Aeq X beq 中的系数矩阵和右端向量 X的下限和上限向量:vlb≤X≤vub 迭代初始点坐标 函数最小化的区间 优化选项参数结构,定义用于优化函数的参数 调用函数 linprog,quadprog fminbnd,fminsearch,fminunc, fmincon,lsqcurvefit,lsqnonlin, fgoalattain,fminimax quadprog linprog,quadprog,fgoalattain, fmincon, fminimax linprog,quadprog,fgoalattain, fmincon, fminimax linprog,quadprog,fgoalattain, fmincon,fminimax,lsqcurvefit, lsqnonlin 除fminbnd外所有优化函数 fminbnd 所有优化函数
得:x = 0.6111 -0.3055
可事先绘制图像,来获得初始搜索点。首先较为随意 地给出一个绘图区域: >>x=0:0.2:5;y=0:0.2:5;[xx,yy]=meshgrid(x,y); >>zz=(xx.^2-2*xx).*exp(-xx.^2-yy.^2-xx.*yy);mesh(xx,yy,zz)
例1:求一元函数 y = ex – x 3 – 4 x2 的(局部)最小值点。 格式1 —— >> x=fminsearch('exp(x)-x^3-4*x^2',1)
可使用ezplot 命令作出函数图象来验证上述结果。
与fsolve 的情况类似,由于极值不一定唯一,改变初始 搜索点位置可能会得到不同的结果。 格式2 —— 首先编写M-函数文件如下: function y=ff1(x) y=exp(x)-x^3-4*x^2; 之后在命令窗口输入命令:>>x=fminsearch('ff1',1) 格式3 —— 使用内联函数 >>g=inline(‘exp(x)-x^3-4*x^2’,’x’); x=fminsearch(g,1)
fval
exitflag
output
所有优化函数
模型输入时需要注意的问题
• (1)目标函数最小化 • 优化函数fminbnd、fminsearch、fminunc、fmincon、 fgoalattain、fminmax和lsqnonlin都要求目标函数最小化。
• (2)约束非正 • 优化工具箱要求非线性不等式约束的形式为Ci(x)≤0,通过 对不等式取负可以达到使大于零的约束形式变为小于零的 不等式约束形式的目的。
格式2 —— 首先编写M-函数文件如下: function y=ff2(x) y= (x(1)^2-2*x(1))*exp(-x(1)^2-x(2)^2-x(1)*x(2)); 之后在命令窗口输入命令:>> x=fminsearch('ff2',[1,1])
格式3 —— 使用内联函数 >> g=inline('(x(1)^2-2*x(1))*exp(-x(1)^2-x(2)^2-x(1)*x(2))', 'x'); >> x=fminsearch(g,[1,1])
ຫໍສະໝຸດ Baidu部最优解
f(X)
整体最优解
求解 P 的基本方法(迭代算法) :
1 给定一个初始可行点 x0 D ;
2 产生可行点 x1 ,x 2 , …,x k , …, 记为 xk ;
3 使得或者某个 x k 恰好是问题的一个最优 解,或者该点列 xk 收敛到问题的一个最优解 x* 。
>> x=fminsearch('exp(x)-x^3-4*x^2',-2) 得: x = -2.6752
例2:求二元函数的 z ( x 小值点(曲面的最低点) 格式1
2
2x)e
x 2 y 2 xy
(局部)最
>>x=fminsearch('(x(1)^2-2*x(1))*exp(-x(1)^2-x(2)^2-x(1)*x(2))',[1,1])
控制选项,包含 含义见前面的“问题描述” 若干分量,用于 对求解过程进行 控制。可省略。 初始搜索点
反映求解过程中的迭代次数等信息 该值若为正,说明求解成功,否则表明求解 出现问题。 目标函数的最优解 求解结果(令目标函数取得最优解的x)
最简形式:
x=linprog (f, A,B,C,D, xm, xM, x0) 注意:各参数的参数名可以变,但位置必须 跟上述格式对牢。若相应的约束不存在,应该用 空矩阵[ ]占位。 由于输入变量较多且往往较复杂,一般需事 先定义。
Ax B x s .t . Cx D xm x x M
min
f x
x —— 自变量,是由若干分量组成的列向量;
f —— x的各分量前的系数构成的向量; f﹒x —— 目标函数(即求该函数的最小值),是 f 与 x 的数量积。
以下为约束函数: Ax ≤B —— 对目标函数的自变量x的线性不等式约束; 对“≥”的情况,需要通过两边同乘以-1改成标准的
3. 优化函数的输出变量下表:
变量 x 描 述 由优化函数求得的值.若exitflag>0,则x 为解;否则,x不是最终解,它只是迭代制止 时优化过程的值 解x处的目标函数值 描述退出条件: exitflag>0,表目标函数收敛于解x处 exitflag=0,表已达到函数评价或迭代 的最大次数 exitflag<0,表目标函数不收敛 包含优化结果信息的输出结构. Iterations:迭代次数 Algorithm:所采用的算法 FuncCount:函数评价次数 调用函数 所有优化函数 linprog,quadprog,fgoalattain, fmincon,fminimax,lsqcurvefit, lsqnonlin, fminbnd
3、模型:min z=fX s.t. AX b Aeq X beq VLB≤X≤VUB
命令:[1] x=linprog(f,A,b,Aeq,beq, VLB,VUB) [2] x=linprog(f,A,b,Aeq,beq, VLB,VUB, X0) 注意:[1] 若没有等式约束: Aeq X beq , 则令Aeq=[ ], beq=[ ]. [2]其中X0表示初始点 4、命令:[x,fval]=linprog(…) 返回最优解x及x处的目标函数值fval.
二次规划 约束极小 (非线性规划) 达到目标问题
s.t. Ax<=b Min F(X) s.t. G(X)<=0 Min r s.t. F(x)-wr<=goal Min max {Fi(x)}
X {Fi(x)}
极小极大问题
s.t. G(x)<=0
工具箱的结构
2. 优化函数的输入变量
使用优化函数或优化工具箱中其它优化函数时, 输入变量见下表:
Matlab 最优化工具箱
Name : E-mail:
曾泰山 zengtsh@gmail.com
最优化问题的一般算法
最优化问题的一般数学模型
s .t .
hi x 0
min f x i 1, 2, , m j 1, 2, p (P)
g j ( x) 0
下降算法: 在迭代算法中,若 f ( xk 1 ) f ( xk )
点列 x k 的产生,通常采取两步完成:
1 在可行域内 x k 点处求一个方向 pk , 称这个方向 为下降方向或搜索方向;
2 以 x k 为出发点,作射线 xk pk ,其中 0 , 在 此 射 线 上 求 一 点 xk 1 , xk 1 = xk k pk , 使 得 f ( xk 1 ) f ( xk ) ,其中 k 称为步长。
用MATLAB优化工具箱解线性规划
1、模型: min z=fX s.t. AX b 命令:x=linprog(f,A,b)
2、模型:min z=fX s.t. AX b Aeq X beq 命令:x=linprog(f,A,b,Aeq,beq)
AX 注意:若没有不等式: b 存在,则令A=[ ],b=[ ].
Matlab优化工具箱简介
1.MATLAB求解优化问题的主要函数
类 型
一元函数极小 无约束极小 线性规划
模 型 Min F(x)s.t.x1<x<x2 Min F(X) Min c X s.t.AX<=b T T Min 1 x Hx+c x
2
T
基本函数名 x=fminbnd(‘F’,x1,x2) X=fminunc(‘F’,X0) X=fminsearch(‘F’,X0) X=linprog(c,A,b) X=quadprog(H,c,A,b) X=fmincon(‘FG’,X0) X=fgoalattain(‘F’,x,goal,w) X=fminimax(‘FG’,x0)
1.5 1 0.5 0 -0.5 -1 5 4 0 -2 -5 -4 2 0
1.5
1
0.5
通过改变观察视角, 可以看出极小值点的横纵 坐标的大致值。
0
-0.5
-1 5 0 y -5 -3 -2 -1 x 0 1
1.5
2 3
1
0.5
0
-0.5 0 5 0 y -5
5
-1
x
2、线性规划问题的求解
线性规划问题是一种最简单的有约束最优化问题, 其目标函数和约束函数都是线性的,约束函数包括线性 不等式和线性等式。 问题的描述:求
“≤”的形式;
Cx=D —— 对目标函数的自变量x的线性等式约束; xm≤x≤xM —— x的取值范围,xm和xM分别为下界向量和上 界向量。
命令:linprog
附加参数,可省略
语法:[x,fopt,flag,c]=linprog (f,A,B,C,D, xm, xM, x0,OPT,p1,p2,…)