最优化技术1-2
- 格式:doc
- 大小:707.00 KB
- 文档页数:59
最优化原理优化问题 1.1线性规划1.线性规划问题描述线性规划问题(Linear Programming )是目标函数和约束条件均为线性函数的问题,MA TLAB 中的线性规划问题的标准形式描述如下:min nR x x f ∈' sub.to :b x A ≤⋅ beq x Aeq =⋅ ub x lb ≤≤其中f 、x 、b 、beq 、lb 、ub 为矢量;A 、Aeq 为矩阵。
提示:其它形式的线性规划都能够经过适当变换化成上述标准形式。
接下来,使用MA TLAB 中的函数求解线性规划问题。
在MA TLAB6.0及以上版本中,求解线性规划问题的函数是linprog 。
调用格式1: x = linprog(f,A,b)2数学软件与实验2 功能说明:求min f ' *x sub.to bx A ≤⋅线性规划的最优解。
调用格式2:x = linprog(f,A,b,Aeq,beq)功能说明: 等式约束beq x Aeq =⋅,若没有不等式约束b x A ≤⋅,则A=[ ],b=[ ]。
调用格式3:x = linprog(f,A,b,Aeq,beq,lb,ub)功能说明:约束x :ub x lb ≤≤,若没有等式约束beq x Aeq =⋅ ,则Aeq=[ ],beq=[ ]调用格式4:x = linprog(f,A,b,Aeq,beq,lb,ub,x0) 功能说明:设置初值x0调用格式5:x = linprog(f,A,b,Aeq,beq,lb,ub,x0,options) 功能说明: options 为指定的优化参数,参数详情请查看optimset 和optimget 函数。
调用格式6:[x,fval] = linprog(…)功能说明:返回目标函数最优值,即fval= f ' *x 。
调用格式7:[x,lambda,exitflag] = linprog(…)功能说明: lambda 为解x 的Lagrange 乘子。
若lambda=lower 表示下界lb ,lambda=upper 表示上界ub ,lambda=ineqlin 表示不等式约束,lambda=eqlin 表示等式约束,lambda 中的非0元素表最优化原理 33示对应的约束是有效约束。
调用格式8:[x, lambda,fval,exitflag] = linprog(…) 功能说明:exitflag 为终止迭代的错误条件;若exitflag>0表示函数收敛于解x ,exitflag=0表示超过函数估值或迭代的最大数字,exitflag<0表示函数不收敛于解x 。
应用实例例2-1: 求下面的线性规划问题。
min43215342x x x x --+约束条件:20234321≤++-x x x x 364234321≤++-x x x x6023321≤+-x x x205431≤++x x x43211,0,0,0x x x x ≤≤≤≤解:编写的MA TLAB 指令如下(源代码见光盘\2\m0208.m ): f = [2;4; -3; -5];%线性函数 A = [1 -1 3 2;3 -2 1 4;1 -3 2 0;5 0 1 1]; %参数 b = [20 ; 36; 60; 20];%约束条件4数学软件与实验lb = [0 0 0 1]; %约束参数初始条件%调用linprog函数求解线性规划[x,fval,exitflag,lambda] = linprog(f,A,b,[],[],lb)运行M文件,得到的结果为:>> Optimization terminated successfully.x = %最优解0.00000.00000.80008.8000fval = %最优值-46.4000exitflag = %收敛情形1lambda =iterations: 7 %迭代次数cgiterations: 04最优化原理 55algorithm: 'lipsol'%使用规则1.2非线性规划常用的非线性规划函数如表2-1所示。
表2-1 常用的非线性规划函数2.有约束函数的一元函数的最小值有约束条件的一元函数求最小值的标准形式为:)x (f minx约束条件:21x x x <<在MA TLAB 中可以使用fminbnd 函数来求其最小值。
调用格式1: x = fminbnd(fun,x1,x2)说 明:fun 为目标函数的表达式字符串;结果返回自变量x 在21x x x<<区间上函数fun 取最小值时的x 值。
调用格式2:x = fminbnd(fun,x1,x2,options) 说 明:options 为指定优化参数选项。
6数学软件与实验6 调用格式3:[x,fval] = fminbnd(…) 说 明:fval 为目标函数的最小值 调用格式4:[x,fval,exitflag] = fminbnd(…)说 明:exitflag 为终止迭代的条件,若参数exitflag>0,表示函数收敛于x ;若exitflag=0,表示超过函数估计值或迭代的最大次数;exitflag<0表示函数不收敛于x 。
调用格式5:[x,fval,exitflag,output] = fminbnd(…) 说 明:output 为优化信息:若参数output=iterations 表示迭代次数,output=funccount 表示函数赋值次数,output=algorithm 表示所使用的算法。
例2-2:计算下面函数1)3()(2--=x x f 在区间(0,5)内的最小值。
解:可以先自定义一个函数: 编写内容如下的M 文件: function f = myfun(x) f = (x-3).^2 - 1;然后在命令窗口键入命令:[x,fval,exitflag,output]= fminbnd(@myfun,0,5) 运行以上指令得到的显示结果如下:最优化原理 77x = 3 fval = -1 exitflag = 1 output = iterations: 6 funcCount: 6algorithm: 'golden section search, parabolic interpolation' 1.3无约束多元函数最小值无约束条件的多元函数最小值的标准形式为:)x (f minx其中:x 为矢量,如]x ,,x,x [x n 21在MA TLAB 中使用fminsearch 函数求其最小值。
调用格式1: x = fminsearch(fun,x0)说 明:fun 为目标函数的表达式字符串,x0为初始点。
调用格式2:x = fminsearch(fun,x0,options)说 明:options 为指定优化参数选项(查看optimset 函8数学软件与实验8 数)。
调用格式3:[x,fval,exitflag] = fminsearch(...)说 明:exitflag 与fminbnd 函数里的exitflag 参数使用一致调用格式4:[x,fval,exitflag,output] = fminsearch(...)说 明:output 与fminbnd 函数里的output 参数使用一致 例2-3: 求32312133221652x x x x x x x x x y -+---=的最小值点及最小值。
解:编写内容如下所示的M 文件:function f=myfun(x)f=x(1)^-x(2)^2-x(3)^3-2*x(1)*x(2)+5*x(1)*x(3)-6*x(2)*x(3);在命令窗口键入指令:>>[X,fval,exitflag,output]=fminsearch(@m0210,[0,0,0])运行以上指令得到的显示结果如下: X =%最小值点-0.0000 -0.1769 0.1132 fval = %最小值0.1187 + 0.0001i最优化原理 99exitflag = %收敛状况1 output =iterations: 142 %叠代次数funcCount: 274algorithm: 'Nelder-Mead simplex direct search' %采用的算法1.4有约束的多元函数最小值非线性有约束的多元函数的标准形式为:)x (f minx约束条件:)x (C ≤,0)x (Ceq =,b x A ≤⋅,beq x Aeq =⋅,ub x lb ≤≤其中:x 、b 、beq 、lb 、ub 是矢量,A 、Aeq 为矩阵,C(x)、Ceq(x)是返回矢量的函数,f(x)为目标函数,f(x)、C(x)、Ceq(x)都可以是非线性函数。
在MA TLAB 中,求解有约束的多元函数最小值由函数fmincon 实现。
fmincon 函数的调用格式如下: x = fmincon(fun,x0,A,b)10数学软件与实验10 x = fmincon(fun,x0,A,b,Aeq,beq) x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub) x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon) x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options) x=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options,P1,P2, ...)[x,fval] = fmincon(...) [x,fval,exitflag] = fmincon(...) [x,fval,exitflag,output] = fmincon(...) [x,fval,exitflag,output,lambda] = fmincon(...) [x,fval,exitflag,output,lambda,grad] = fmincon(...)其中,fun 为目标函数;x0为初始值;A 、b 满足线性不等式约束b x A ≤⋅,若没有不等式约束,则取A=[ ],b=[ ];Aeq 、beq 满足等式约束beq x Aeq =⋅,若没有,则取Aeq=[ ],beq=[ ];lb 、ub 满足ub x lb ≤≤,若没有界,可设lb=[ ],ub=[ ];lambda 是Lagrange 乘数,它体现有效约束的个数;output 输出优化信息;grad 表示目标函数在x 处的梯度。