当前位置:文档之家› Matlab在最优化问题中的应用

Matlab在最优化问题中的应用

Matlab在最优化问题中的应用
Matlab在最优化问题中的应用

Matlab 在最优化问题中的应用

优化理论是一门实践性很强的学科,广泛应用于生产管理、军事指挥和科学试验等各种领域,Matlab 优化工具箱提供了对各种优化问题的一个完整的解决方案。

在数学上,所谓优化问题,就是求解如下形式的最优解: Min fun (x) Sub. to [C.E.] [B.C.] 其中fun (x)称为目标函数,“Sub. to ”为“subject to ”的缩写,由其引导的部分称为约束条件。[C.E.]表示Condition Equations ,即条件方程,可为等式方程,也可为不等式方程。[B.C.]表示Boundary Conditions ,即边界条件,用来约束自变量的求解域,以lb ≤x ≤ub 的形式给出。当[C.E.]为空时,此优化问题称为自由优化或无约束优化问题;当[C.E.]不空时,称为有约束优化或强约束优化问题。

在优化问题中,根据变量、目标函数和约束函数的不同,可以将问题大致分为: ·线性优化 目标函数和约束函数均为线性函数。

·二次优化 目标函数为二次函数,而约束条件为线性方程。线性优化和二次优化

统称为简单优化。

·非线性优化 目标函数为非二次的非线性函数,或约束条件为非线性方程。 ·多目标优化 目标函数并非一个时,称为多目标优化问题。

本章将对以上几类优化问题在Matlab 中的实现作比较详细的讲解。另外还将介绍两个利用优化方法解非线性方程的函数。

通过本章的介绍,用户可以不必掌握艰涩的各种优化算法而轻易地解决一些常用的最优化问题了。

10.1 线性规划问题

线性规划问题即目标函数和约束条件均为线性函数的问题。 其标准形式为: min C ’x sub. To Ax = b x ≥0

其中C, b, 0∈R n ,A ∈R m ?n ,均为数值矩阵,x ∈R n 。 若目标函数为:max C ’x ,则转换成:min –C ’x 。

标准形式的线性规划问题简称为LP (Linear Programming )问题。其它形式的线性规划问题经过适当的变换均可以化为此种标准形。线性规划问题虽然简单,但在工农业及其他生产部门中应用十分广泛。

在Matlab 中,线性规划问题由linprog 函数求解。

函数:linprog %求解如下形式的线性规划问题:

x

f

T

x

min

such that b x A ≤? beq x Aeq =? ub x lb ≤≤

其中f, x, b, beq, lb, ub 为向量,A, Aeq 为矩阵。 格式:x = linprog(f,A,b)

x = linprog(f,A,b,Aeq,beq)

x = linprog(f,A,b,Aeq,beq,lb,ub)

x = linprog(f,A,b,Aeq,beq,lb,ub,x0)

x = linprog(f,A,b,Aeq,beq,lb,ub,x0,options) [x,fval] = linprog(...)

[x,fval,exitflag] = linprog(...)

[x,fval,exitflag,output] = linprog(...)

[x,fval,exitflag,output,lambda] = linprog(...)

说明:

x = linprog(f,A,b) 求解问题 min f ’*x ,约束条件为A*x<=b 。

x = linprog(f,A,b,Aeq,beq) 求解上面的问题,但增加等式约束,即Aeq*x = beq 。若没有不等式存在,则令A = [ ]、b = [ ]。

x = linprog(f,A,b,Aeq,beq,lb,ub) 定义设计变量x 的下界lb 和上界ub ,使得x 始终在该范围内。若没有等式约束,令Aeq = [ ]、beq = [ ]。

x = linprog(f,A,b,Aeq,beq,lb,ub,x0) 设置初值为x0。该选项只适用于中型问题,默认时大型算法将忽略初值。

x = linprog(f,A,b,Aeq,beq,lb,ub,x0,options) 用options 指定的优化参数进行最小化。 [x,fval] = linprog(...) 返回解x 处的目标函数值fval 。

[x,fval,exitflag] = linprog(...) 返回exitflag 值,描述函数计算的退出条件。 [x,fval,exitflag,output] = linprog(...) 返回包含优化信息的输出变量output 。

[x,fval,exitflag,output,lambda] = linprog(...) 将解x 处的Lagrange 乘子返回到lambda 参数中。

exitflag 参数

描述退出条件:

·>0 表示目标函数收敛于解x 处;

·=0 表示已经达到函数评价或迭代的最大次数; ·<0 表示目标函数不收敛。 output 参数

该参数包含下列优化信息:

·output .iterations 迭代次数;

·output .cgiterations PCG 迭代次数(只适用于大型规划问题); ·output .algorithm 所采用的算法。 lambda 参数

该参数是解x 处的Lagrange 乘子。它有以下一些属性: ·lambda.lower —lambda 的下界; ·lambda.upper —lambda 的上界;

·lambda.ineqlin —lambda 的线性不等式; ·lambda.eqlin —lambda 的线性等式。 例10-1 求解下列优化问题:

min 321645)(x x x x f ---=

sub.to 20

321≤+-x x x

42

423321≤++x x x

30

2321≤+x x

3210,0,0x x x ≤≤≤

解:在Matlab 命令窗口键入: >> f=[-5;-4;-6];

>> A=[1 -1 1;3 2 4;3 2 0]; >> b=[20;42;30]; >> lb=zeros(3,1);

>> [x,fval,exitflag,output,lambda]=linprog(f,A,b,[],[],lb) Optimization terminated successfully. x =

0.0000 15.0000

3.0000 fval =

-78.0000 exitflag = 1 output =

iterations: 6 cgiterations: 0

algorithm: 'lipsol' lambda =

ineqlin: [3x1 double] eqlin: [0x1 double] upper: [3x1 double] lower: [3x1 double] >> lambda.ineqlin ans =

0.0000 1.5000 0.5000

>> lambda.lower ans =

1.0000 0.0000 0.0000

lambda 向量中的非零元素表示哪些约束是主动约束。本例中,第2个和第3个不等式约束,第1个下界约束是主动约束(如这些解位于约束边界上)。exitflag = 1表示过程正常收敛于解x 处。

例10-2 生产决策问题。

某厂生产甲乙两种产品,已知制成一吨产品甲需资源A 3吨,资源B 4m 3;制成一吨产品乙需资源A 2吨,资源B 6 m 3;资源C 7个单位。若一吨产品甲和乙的经济价值分别为7万元和5万元,三种资源的限制量分别为90吨、200 m 3和210个单位,试决定应生产这两种产品各多少吨才能使创造的总经济价值最高?

解:令生产产品甲的数量为x 1,生产产品甲的数量为x 2。由题意可以建立下面的数学模型:

2157max x x z +=

sub. to 90

2321≤+x x

200

6421≤+x x

210

72≤x

0,021≥≥x x

该模型中要求目标函数最大化,需要按照Matlab 的要求进行转换,即目标函数为 2157min x x z --= 在Matlab 中实现: >> f=[-7;-5];

>> A=[3 2;4 6;0 7]; >> b=[90;200;210]; >> lb=[0;0];

>> [x,fval,exitflag,output,lambda]=linprog(f,A,b,[],[],lb) Optimization terminated successfully. x =

14.0000 24.0000 fval =

-218.0000 exitflag =

1 output =

iterations: 5 cgiterations: 0

algorithm: 'lipsol' lambda =

ineqlin: [3x1 double] eqlin: [0x1 double] upper: [2x1 double] lower: [2x1 double]

由上可知,生产甲种产品14吨、乙种产品24吨可使创造的总经济价值最高为218万元。exitflag = 1表示过程正常收敛于解x 处。

例10-3 厂址选择问题。

考虑A 、B 、C 三地,每地都出产一定数量的原料也消耗一定数量的产品(见下表)。已知制成每吨产品需3吨原料,各地之间的距离为:A —B :150km ,A —C :100km ,B —C :200km 。假定每万吨原料运输1km 的运价是5000元,每万吨产品运输1km 的运价是6000元。由于地区条件的差异,在不同地点设厂的生产费用也不同。问究竟在哪些地方设厂,规模多大,才能使总费用最小?另外,由于其它条件限制,在B 处建厂的规模(生产的产品数量)不能超过5万吨。

ij x ij y 吨),i ,j = 1,2,3(分别对应A 、B 、C 三地)。根据题意,可以建立问题的数学模型(其中目标函数包括原料运输费、产品运输费和生产费用(万元)):

min 21121132233113211221024015010010050507575y y y x x x x x x z ++++++++=

32

3122220160120y y y +++

sub.to 2033312113121211≤--+++x x x x y y 1633322321122221≤-++-+x x x x y y 24

33323123133231≤++--+x x x x y y

7

312111=++y y y 13322212=++y y y

5

2221≤+y y

j

i j i x ij ≠=≥;3,2,1,,0

2

,1;3,2,1,0==≥j i y ij

在Matlab 中实现:

>> f=[75;75;50;50;100;100;150;240;210;120;160;220]; >> A=[1 -1 1 -1 0 0 3 3 0 0 0 0 -1 1 0 0 1 -1 0 0 3 3 0 0 0 0 -1 1 -1 1 0 0 0 0 3 3 0 0 0 0 0 0 0 0 1 1 0 0]; >> b=[20;16;24;5];

>> Aeq=[0 0 0 0 0 0 1 0 1 0 1 0 0 0 0 0 0 0 0 1 0 1 0 1]; >> beq=[7;13]; >> lb=zeros(12,1);

>> [x,fval,exitflag,output,lambda]=linprog(f,A,b,Aeq,beq,lb) Optimization terminated successfully. x =

0.0000 1.0000 0.0000 0.0000 0.0000 0.0000 7.0000 0.0000 0.0000 5.0000 0.0000 8.0000 fval =

3.4850e+003 exitflag = 1 output =

iterations: 8 cgiterations: 0

algorithm: 'lipsol' lambda =

ineqlin: [4x1 double] eqlin: [2x1 double] upper: [12x1 double] lower: [12x1 double]

因此,要使总费用最小,需要B 地向A 地运送1万吨原料,A 、B 、C 三地的建厂规模分别为7万吨、5万吨、8万吨。最小总费用为3485万元。

10.2 非线性规划问题

10.2.1非线性无约束规划问题

无约束规划由3个功能函数fminbnd 、fminsearch 、fminunc 实现。 10.2.1.1 fminbnd 函数

函数:fminbnd

功能:求取固定区间内单变量函数的最小值,也就是一元函数最小值问题。 数学模型:

)(min x f x

2

1x x x <<

式中,1,x x 和2x 为标量,)(x f 为函数,返回标量。

格式:x = fminbnd(fun,x1,x2)

x = fminbnd(fun,x1,x2,options)

x = fminbnd(fun,x1,x2,options,P1,P2,...) [x,fval] = fminbnd(...)

[x,fval,exitflag] = fminbnd(...)

[x,fval,exitflag,output] = fminbnd(...)

说明:

fminbnd 求取固定区间内单变量函数的最小值

x = fminbnd(fun,x1,x2) 返回[x1, x2]区间上fun 参数描述的标量函数的最小值点x 。 x = fminbnd(fun,x1,x2,options) 用options 参数指定的优化参数进行最小化。 x = fminbnd(fun,x1,x2,options,P1,P2,...) 提供另外的参数P1,P2等,传输给目标函数fun 。如果没有设置options 选项,则令options = [ ]。

[x,fval] = fminbnd(...) 返回解x 处目标函数的值。

[x,fval,exitflag] = fminbnd(...) 返回exitflag 值描述fminbnd 函数的退出条件。 [x,fval,exitflag,output] = fminbnd(...) 返回包含优化信息的结构输出。

·fun:需要最小化的目标函数。fun函数需要输入标量参数x,返回x处的目标函数标量值f。可以将fun函数指定为命令行,如

x = fminbnd (inline (‘sin (x*x)’), x0)

同样,fun参数可以是一个包含函数名的字符串。对应的函数可以是M文件、内部函数或MEX文件。若fun = ‘myfun’,则

x = fminbnd(@myfun,x0)

其中M文件函数myfun.m必须为下面的形式

function f = myfun (x)

f = …%计算x处的函数值。

·options:优化参数选项。你可以用optimset函数设置或改变这些参数的值。Options 参数有以下几个选项:

·Display 显示的水平。选择’off’,不显示输出;选择’iter’,显示每一步迭

代过程的输出;选择’final’,显示最终结果;

·MaxFunEvals 函数评价的最大允许次数;

·MaxIter 最大允许迭代次数;

·TolX x处的终止容限。

·exitflag:描述退出条件:

·>0 表示目标函数收敛于解x处;

·0 表示已经达到函数评价或迭代的最大次数;

·<0 表示目标函数不收敛。

·output:该参数包含下列优化信息:

·output .iteratiions 迭代次数;

·output .algorithm 所采用的算法;

·output .funcCount 函数评价次数。

注意:

(1)目标函数必须是连续的;

(2)fminbnd函数可能只给出局部最优解;

(3)当问题的解位于区间边界上时,fminbnd函数的收敛速度常常很慢。此时,fmincon 函数的计算速度更快,计算精度更高;

(4)fminbnd函数只用于实数变量。

例10-4在(0, )

2 上求函数sinx的最小值。

解:Matlab中实现:

>> [x,y_min]=fminbnd('sin(x)',0,2*pi)

x =

4.7124

y_min =

-1.0000

>> [x,y_min]=fminbnd(@sin,0,2*pi)

x =

4.7124

y_min =

-1.0000

例10-5对边长为3m的正方形铁板,在四个角处剪去相等的小正方形以制成方形无盖盒子,问如何剪法使盒子容积最大?

解:设剪去的正方形的边长为x,则盒子容积为

f (x) = (3-2x)2 x

现在要求在区间(0, 1.5)上确定x,使f (x)最大化。因为优化工具箱中要求目标函数最小化,所以需要对目标函数进行转换,即要求-f (x)最小化。

在Matlab中实现:

>> [x,f_min]=fminbnd('-(3-2*x)^2*x',0,1.5)

x =

0.5000

f_min =

-2.0000

或编写M文件Ex1005.m

>> [x,f_min]=fminbnd(@Ex1005,0,1.5)

x =

0.5000

f_min =

-2.0000

即剪去边长为0.5 m的正方形,最大容积为2 m3。

10.2.1.2 fminsearch函数

函数:fminsearch

功能:求解多变量无约束函数的最小值。

数学模型:

)

min x

f

(

x

其中,x为向量,)

f为一函数,返回标量。

(x

格式:x = fminsearch(fun,x0)

x = fminsearch(fun,x0,options)

x = fminsearch(fun,x0,options,P1,P2,...)

[x,fval] = fminsearch(...)

[x,fval,exitflag] = fminsearch(...)

[x,fval,exitflag,output] = fminsearch(...)

说明:

fminsearch 求解多变量无约束函数的最小值。该函数常用于无约束非线性最优化问题。

x = fminsearch(fun,x0) 初值为x0,求fun函数的局部极小点x。x0可以是标量、向量或矩阵。

x = fminsearch(fun,x0,options) 用options参数指定的优化参数进行最小化。

x = fminsearch(fun,x0,options,P1,P2,...) 将问题参数P1、P2等直接输给目标函数fun,将options参数设置为空矩阵,作为options参数的默认值。

[x,fval] = fminsearch(...) 将x处的目标函数值返回到fval参数中。

[x,fval,exitflag] = fminsearch(...) 返回exitflag值,描述函数的退出条件。

[x,fval,exitflag,output] = fminsearch(...) 返回包含优化信息参数output的结构输出。

各变量的意义同前及下面fminunc函数。

注意:

(1)应用fminsearch函数可能会得到局部最优解;

(2)fminsearch函数只对实数进行最小化,即x必须由实数组成,f (x)函数必须返回实数。如果x为复数,则必须将它分为实数部和虚数部两部分;

(3)对于求解二次以上的问题,fminunc函数比fminsearch函数有效,但对于高度非线性不连续问题时,fminsearch函数更具稳键性。

(4)fminsearch函数不适合求解平方和问题,用lsqnonlin函数更好一些。

例10-6求2x13+4x1x23-10x1x2+x22的最小值。

解:在Matlab中实现如下:

>> f='2*x(1)^3+4*x(1)*x(2)^3-10*x(1)*x(2)+x(2)^2';

>> x0=[0,0];

>> [x,f_min]=fminsearch(f,x0)

x =

1.0016 0.8335

f_min =

-3.3241

或在Matlab编辑器中编辑M文件Ex1006.m:

function f=Ex1006(x)

f=2*x(1)^3+4*x(1)*x(2)^3-10*x(1)*x(2)+x(2)^2;

x0=[0,0];

命令窗口运行:

>> [x,f_min]=fminsearch(@Ex1006,x0)

x =

1.0016 0.8335

f_min =

-3.3241

运行后结果一致。

10.2.1.3 fminunc函数

函数:fminunc

功能:求多变量无约束函数的最小值。

数学模型:

)

min x

f

(

x

其中,x为向量,)

f为一函数,返回标量。

(x

格式:x = fminunc(fun,x0)

x = fminunc(fun,x0,options)

x = fminunc(fun,x0,options,P1,P2,...)

[x,fval] = fminunc(...)

[x,fval,exitflag] = fminunc(...)

[x,fval,exitflag,output] = fminunc(...)

[x,fval,exitflag,output,grad] = fminunc(...)

[x,fval,exitflag,output,grad,hessian] = fminunc(...)

说明:

fminunc 给定初值,求多变量标量函数的最小值。常用于无约束非线性最优化问题。

x = fminunc(fun,x0) 给定初值x0,求fun函数的局部极小点x。x0可以是标量、向量或矩阵。

x = fminunc(fun,x0,options) 用options参数指定的优化参数进行最小化。

x = fminunc(fun,x0,options,P1,P2,...) 将问题参数P1、P2等直接输给目标函数fun,将options参数设置为空矩阵,作为options参数的默认值。

[x,fval] = fminunc(...) 将x处的目标函数值返回到fval参数中。

[x,fval,exitflag] = fminunc(...) 返回exitflag值,描述函数的退出条件。

[x,fval,exitflag,output] = fminunc(...) 返回包含优化信息参数output的结构输出。

[x,fval,exitflag,output,grad] = fminunc(...) 将解x处fun函数的梯度值返回到grad参数中。

[x,fval,exitflag,output,grad,hessian] = fminunc(...) 将解x处目标函数的Hessian矩阵信息返回到hessian参数中。

·fun变量:为目标函数。需要最小化的目标函数。fun函数需要输入向量参数x,返回x处的目标函数标量值f。可以将fun函数指定为命令行,如

x = fminunc(inline('norm(x)^2'),x0)

同样,fun函数可以是一个包含函数名的字符串。对应的函数可以是M文件、内部函数或MEX文件。若fun = ‘myfun’,则

x = fminunc(@myfun,x0)

其中M文件函数myfun.m必须有下面的形式:

function f = myfun (x)

f = …%计算x处的函数值。

若fun函数的梯度可以算得,且options.GradObj设为’on’(用下式设定)

options = optimset (‘GradObj’, ‘on’)

则fun函数必须返回解x处的梯度向量g到第二个输出变量中去。注意,当被调用的fun函数只需要一个输出变量时(如算法只需要目标函数的值而不需要其梯度值时),可以通过核

对nargout的值来避免计算梯度值

function[f, g] = myfun (x)

f = …%计算x处的函数值

if nargout > 1 %调用fun函数并要求有两个输出变量

g = …%计算x处的梯度值

end

若Hessian矩阵可以求得,并且options. Hessian设为’on’,即

options = optimset (‘Hessian’, ‘on’)

则fun函数必须返回解x处的Hessian对称矩阵H到第三个输出变量中去。注意,当被调用的fun函数只需要一个或两个输出变量时(如算法只需要目标函数的值f和梯度值g而不需要Hessian矩阵H时),可以通过核对nargout的值来避免计算Hessian矩阵

function[f, g] = myfun (x)

f = …%计算x处的函数值

if nargout > 1 %调用fun函数并要求有两个输出变量

g = …%计算x处的梯度值

if nargout > 2

H = …%计算x处的Hessian矩阵

end

·options变量:优化参数选项。可以通过optimset函数设置或改变这些参数。其中有的参数适用于所有的优化算法,有的则只适用于大型优化问题,另外一些则只适用于中型问题。

首先描述适用于大型问题的选项。这仅仅是一个参考,因为使用大型问题算法有一些条件。对于fminunc函数来说,必须提供梯度信息

·LargeScale 当设为’on’时,使用大型算法,若设为’off’则使用中型问题的算法适用于大型和中型算法的参数:

·Diagnostics 打印最小化函数的诊断信息

·Display 显示水平。选择’off’,不显示输出;选择’iter’,显示每一步迭代过

程的输出;选择’final’,显示最终结果

·GradObj 用户定义的目标函数的梯度。对于大型问题此参数是必选的,对于

中型问题则是可选项

·MaxFunEvals 函数评价的最大次数

·MaxIter 最大允许迭代次数

·TolFun 函数值的终止容限

·TolX x处的终止容限

只适用于大型算法的参数:

·Hessian 用户定义的目标函数的Hessian矩阵

·HessPattern 用于有限差分的Hessian矩阵的稀疏形式。若不方便求fun函数

的稀疏Hessian矩阵H,可以通过用梯度的有限差分获得的H的稀

疏结构(如非零值的位置等)来得到近似的Hessian矩阵H。若连

矩阵的稀疏结构都不知道,则可以将HessPattern设为密集矩阵,在

每一次迭代过程中,都将进行密集矩阵的有限差分近似(这是默认

设置)。这将非常麻烦,所以花一些力气得到Hessian矩阵的稀疏结

构还是值得的

·MaxPCGIter PCG迭代的最大次数

·PrecondBandWidth PCG前处理的上带宽,默认时为零。对于有些问题,增

加带宽可以减少迭代次数

·TolPCG PCG迭代的终止容限

·TypicalX 典型x值

只适用于中型算法的参数:

·DerivativeCheck 对用户提供的导数和有限差分求出的导数进行对比

·DiffMaxChange 变量有限差分梯度的最大变化

·DiffMixChange 变量有限差分梯度的最小变化

·LineSearchType 一维搜索算法的选择

·exitflag变量:描述退出条件:

·>0 表示目标函数收敛于解x处

·0 表示已经达到函数评价或迭代的最大次数

·<0 表示目标函数不收敛

·output变量:该参数包含下列优化信息:

·output.iterations 迭代次数

·output.algorithm 所采用的算法

·output.funCount 函数评价次数

·output.cgiterations PCG迭代次数(只适用于大型规划问题)

·output.stepsize 最终步长的大小(只适用于中型问题)

·output.firstorderopt 一阶优化的度量,解x处梯度的范数

注意:

(1)目标函数必须是连续的。fminunc函数有时会给出局部最优解;

(2)fminunc函数只对实数进行优化,即x必须为实数,而且f (x)必须返回实数。当x 为复数时,必须将它分解为实部和虚部;

(3)在使用大型算法时,用户必须在fun函数中提供梯度(options参数中GradObj属性必须设置为’on’ ),否则将给出警告信息;

(4)目前,若在fun函数中提供了解析梯度,则options参数DerivativeCheck不能用于大型算法以比较解析梯度和有限差分梯度。通过将options参数的MaxIter属性设置为0来用中型方法核对导数,然后重新用大型方法求解问题;

(5)对于求解平方和问题,fminunc函数不是最好的选择,用Isqnonlin函数效果更佳。

例10-7 最小化下列函数:

f (x) = 3x12+2x1x2+x22

解:使用M文件,创建文件Ex10071.m:

function f=Ex10071(x)

f=3*x(1)^2+2*x(1)*x(2)+x(2)^2;

然后调用fminunc函数求[1,1]附近f (x)函数的最小值:

>> x0=[1,1];

>> [x,fval]=fminunc(@Ex10071,x0)

Warning: Gradient must be provided for trust-region method;

using line-search method instead.

> In E:\matlab6p1\toolbox\optim\fminunc.m at line 211

Optimization terminated successfully:

Search direction less than 2*options.TolX

x =

1.0e-008 *

-0.7591 0.2665

fval =

1.3953e-016

下面用提供的梯度g最小化函数,修改M文件为Ex10072.m:

function [f,g]=Ex10072(x)

f=3*x(1)^2+2*x(1)*x(2)+x(2)^2;

if nargout>1

g(1)=6*x(1)+2*x(2);

g(2)=2*x(1)+2*x(2);

end

下面通过将优化选项结构options.GradObj设置为’on’来得到梯度值。

>> options=optimset('GradObj','on');

>> x0=[1,1];

>> [x,fval]=fminunc(@Ex10072,x0,options)

Optimization terminated successfully:

First-order optimality less than OPTIONS.TolFun, and no negative/zero curvature detected

x =

1.0e-015 *

0.1110 -0.8882 fval =

6.2862e-031

例10-8 求函数f (x) = e x1(4x 12+2x 22+4x 1x 2+2x 2+1)的最小值。 解:在Matlab 中实现:

>>[x,fval,exitflag,output]=fminunc('exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1)',[-1,1])

Warning: Gradient must be provided for trust-region method; using line-search method instead.

> In E:\matlab6p1\toolbox\optim\fminunc.m at line 211 Optimization terminated successfully:

Current search direction is a descent direction, and magnitude of directional derivative in search direction less than 2*options.TolFun x =

0.5000 -1.0000 fval =

1.3028e-010 exitflag = 1 output =

iterations: 7 funcCount: 40 stepsize: 1

firstorderopt: 8.1998e-004

algorithm: 'medium-scale: Quasi-Newton line search' 例10-9 求无约束非线性问题

f (x) = 100 (x 2-x 12)2+(1-x 1)2 x0 = [-1.2, 1] 解:在Matlab 中实现: >> x0=[-1.2,1];

>> [x,fval]=fminunc('100*(x(2)-x(1)^2)^2+(1-x(1))^2',x0) Warning: Gradient must be provided for trust-region method; using line-search method instead.

> In E:\matlab6p1\toolbox\optim\fminunc.m at line 211 Optimization terminated successfully:

Current search direction is a descent direction, and magnitude of directional derivative in search direction less than 2*options.TolFun x =

1.0000 1.0000 fval =

1.9116e-011

10.2.2 二次规划

数学模型:如果某非线性规划的目标函数为自变量的二次函数,约束条件全是线性函数,就称这种规划为二次规划。其数学模型为

x

f

Hx x T

T x

+2

1

min

b

x A ≤?

beq x Aeq =? ub x lb ≤≤

其中,H ,A 和Aeq 为矩阵,f ,b ,beq ,lb ,ub 和x 为向量。

函数:quadprog

功能:求解二次规划问题。 格式:x = quadprog(H,f,A,b)

x = quadprog(H,f,A,b,Aeq,beq)

x = quadprog(H,f,A,b,Aeq,beq,lb,ub)

x = quadprog(H,f,A,b,Aeq,beq,lb,ub,x0)

x = quadprog(H,f,A,b,Aeq,beq,lb,ub,x0,options)

x = quadprog(H,f,A,b,Aeq,beq,lb,ub,x0,options,p1,p2,...)

[x,fval] = quadprog(...)

[x,fval,exitflag] = quadprog(...)

[x,fval,exitflag,output] = quadprog(...)

[x,fval,exitflag,output,lambda] = quadprog(...)

说明:

x = quadprog(H,f,A,b) 返回向量x,最小化函数1/2*x’*H*x+f’*x,其约束条件为A*x<=b。

x = quadprog(H,f,A,b,Aeq,beq) 仍求上面的解,但添加了等式约束条件Aeq*x = beq。

x = quadprog(H,f,A,b,Aeq,beq,lb,ub) 定义设计变量的下界lb和上界ub,使得lb<=x<=ub。

x = quadprog(H,f,A,b,Aeq,beq,lb,ub,x0) 同上,并设置初值x0。

x = quadprog(H,f,A,b,Aeq,beq,lb,ub,x0,options) 根据options参数指定的优化参数进行最小化。

x = quadprog(H,f,A,b,Aeq,beq,lb,ub,x0,options,p1,p2,...) 将参数P1,P2等直接输给Hessian乘子函数,如果存在,用options参数中的HessMult属性指定。

[x,fval] = quadprog(...) 返回解x处的目标函数fval = 1/2*x’*H*x+f’*x。

[x,fval,exitflag] = quadprog(...) 返回exitflag参数,描述计算的退出条件。

[x,fval,exitflag,output] = quadprog(...) 返回包含优化信息的结构输出output。

[x,fval,exitflag,output,lambda] = quadprog(...) 返回解x处包含Lagrange乘子的lambda参数。

各变量的意义同前。

注意:

(1)一般地,如果问题不是严格凸性的,用quadprog函数得到的可能是局部最优解;

(2)如果用Aeq和Beq明确地指定等式约束,而不是用lb和ub指定,则可以得到更好的数值解;

(3)若x的组分没有上限或下限,则quadprog函数希望将对应的组分设置为Inf(对于上限)或-Inf(对于下限),而不是强制性地给予上限一个很大的数或给予下限一个很小的负数;

(4)对于大型优化问题,若没有提供初值x0,或x0不是严格可行,则quadprog函数会选择一个新的初始可行点;

(5)若为等式约束,且quadprog函数发现负曲度(negative curvature),则优化过程终止,exitflag的值等于-1;

(6)此时,显示水平只能选择’off’和’final’,迭代参数’iter’不可用;

(7)当问题不定或负定时,常常无解(此时exitflag参数给出一个负值,表示优化过程不收敛)。若正定解存在,则quadprog函数可能只给出局部极小值,因为问题可能是非凸的;

(8)对于大型问题,不能依靠线性等式,因为Aeq必须是行满秩的,即Aeq的行数必须不多于列数。若不满足要求,必须调用中型算法进行计算;

(9)大型化问题大型化问题不允许约束上限和下限相等,如若lb (2)= =ub (2),则给出以下出错信息:

Equal upper and lower bounds not permitted in this large-scale https://www.doczj.com/doc/8d16679974.html,e equality constraints and the medium-scale method instead.

若优化模型中只有等式约束,仍然可以使用大型算法;如果模型中既有等式约束又有边界约束,则必须使用中型方法。

中型优化问题当解不可行时,quadprog函数给出以下警告:

Warning: The constraints are overly stringent; there is no feasible solution.

这里,quadprog函数生成使约束条件矛盾最坏程度最小的结果。

当等式约束不连续时,给出下面的警告信息:

Warning: The equality constraints are overly stringent; there is no feasible solution.

当Hessian矩阵为负半定时,生成无边界解,给出下面的警告信息:

Warning: The solution is unbounded and at infinity; the constraints are not restrictive enough. 这里,quadprog 函数返回满足约束条件的x 值。 例10-10 求解下面的最优化问题: 目标函数 21212

22

1622

1)(x x x x x x x f ---+=

约束条件

2

21≤+x x 2221≤+-x x

3

221≤+x x

210,0x x ≤≤

解:首先,目标函数写成下面的矩阵形式:

??

??

??--=21

11H ,

?

?

????--=62f ,??

????=21x x x

在Matlab 中实现: >> H=[1 -1;-1 2]; >> f=[-2;-6];

>> A=[1 1;-1 2;2 1]; >> b=[2;2;3]; >> lb=zeros(2,1);

>> [x,fval,exitflag,output,lambda]=quadprog(H,f,A,b,[],[],lb)

Warning: Large-scale method does not currently solve this problem formulation, switching to medium-scale method.

> In E:\matlab6p1\toolbox\optim\quadprog.m at line 213 Optimization terminated successfully. x =

0.6667 1.3333 fval =

-8.2222 exitflag = 1 output =

iterations: 3

algorithm: 'medium-scale: active-set' firstorderopt: [] cgiterations: [] lambda =

lower: [2x1 double] upper: [2x1 double] eqlin: [0x1 double] ineqlin: [3x1 double] >> lambda.lower ans = 0 0

>> lambda.ineqlin ans =

3.1111 0.4444 0

10.2.3 有约束规划

函数:fmincon

功能:求多变量有约束非线性函数的最小值。 数学模型:

)(min x f x

0)(≤x c 0)(=x ceq b x A ≤?

beq x Aeq =? ub x lb ≤≤

其中,x ,b ,beq ,lb 和ub 为向量,A 和Aeq 为矩阵,)(x c 和)(x ceq 为函数,返回标量。)(x f ,)(x c 和)(x ceq 可以是非线性函数。 格式:x = fmincon(fun,x0,A,b)

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(...)

[x,fval,exitflag,output,lambda,grad,hessian] = fmincon(...) 说明:

fmincon 求多变量有约束非线性函数的最小值。该函数常用于有约束非线性优化问题。 x = fmincon(fun,x0,A,b) 给定初值x0,求解fun 函数的最小值点x 。fun 函数的约束条件为A*x<=b ,x0可以是标量、向量或矩阵。

x = fmincon(fun,x0,A,b,Aeq,beq) 最小化fun 函数,约束条件为A*x<=b 和Aeq*x = beq 。若没有不等式存在,则设置A = [ ],b = [ ]。

x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub) 定义设计变量x 的下界lb 和上界ub ,使得lb<=x<= ub 。若无等式存在,则令Aeq = [ ],beq = [ ]。

x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon) 在上面的基础上,在nonlcon 参数中提供非线性不等式c (x)或等式ceq (x)。fmincon 函数要求c (x)<=0且ceq (x) = 0。当无边界存在时,令lb = [ ]和(或)ub = [ ]。

x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options) 用options 参数指定的参数进行最小化。

x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options,P1,P2, ...) 将问题参数P1,P2等直接传递给函数fun 和nonlcon 。若不需要参数A ,b ,Aeq ,beq ,lb ,ub ,nonlcon 和options ,将它们设置为空矩阵。

[x,fval] = fmincon(...) 返回解x 处的目标函数值。

[x,fval,exitflag] = fmincon(...) 返回exitflag 参数,描述计算的退出条件。 [x,fval,exitflag,output] = fmincon(...) 返回包含优化信息的结构输出output 。

[x,fval,exitflag,output,lambda] = fmincon(...) 返回解x 处包含Lagrange 乘子的lambda 参数。

[x,fval,exitflag,output,lambda,grad] = fmincon(...) 返回解x 处fun 函数的梯度。

[x,fval,exitflag,output,lambda,grad,hessian] = fmincon(...) 返回解x 处fun 函数的Hessian 矩阵。

·nonlcon 参数

该参数计算非线性不等式约束c (x)<=0和非线性等式约束ceq (x) = 0。nonlcon 参数是一个包含函数名的字符串。该函数可以是M 文件、内部文件或MEX 文件。它要求输入一个向量x ,返回两个变量——解x 处的非线性不等式向量c 和非线性等式向量ceq 。例如,若nonlcon = ‘mycon ’,则M 文件mycon.m 具有下面的形式:

function [c, ceq] = mycon (x)

c = …%计算x处的非线性不等式

ceq =…%计算x处的非线性等式

若还计算了约束的梯度,即

options = optimset (‘GradConstr’, ‘on’)

则nonlcon函数必须在第三个和第四个输出变量中返回c (x)的梯度GC和ceq (x)的梯度GCeq。当被调用的nonlcon函数只需要两个输出变量(此时优化算法只需要c和ceq的值,而不需要GC和GCeq)时,可以通过查看nargout的值来避免计算GC和GCeq的值。

function [c, ceq, GC, GCeq] = mycon (x)

c = …%解x处的非线性不等式

ceq =…%解x处的非线性等式

if nargout>2 %被调用的nonlcon函数,要求有4个输出变量

GC = …%不等式的梯度

GCeq = …%等式的梯度

end

若nonlcon函数返回m元素的向量c和长度为n的x,则c (x)的梯度GC是一个n×m 的矩阵,其中GC(i, j)是c (j)对x (i)的偏导数。同样,若ceq是一个p元素的向量,则ceq (x)的梯度GCeq是一个n×p的矩阵,其中GCeq(i, j)是ceq (j)对x (i)的偏导数。

其它参数意义同前。

注意:

(1)大型优化问题:

(1.1)使用大型算法,必须在fun函数中提供梯度信息(options.GradObj设置

为’on’)。如果没有梯度信息,则将给出警告信息。

Fmincon函数允许g (x)为一近似梯度,但使用真正的梯度将使优化过程更具稳键

性。

(1.2)当对矩阵的二阶导数(即Hessian矩阵)进行计算后,用该函数求解大型问

题将更有效。但不需要求得真正的Hessian矩阵,如果能提供Hessian矩阵稀疏结

构的信息(用options参数的HessPattern属性),则fmincon函数可以算得Hessian

矩阵的稀疏有限差分近似。

(1.3)若x0不是严格可行的,则fmincon函数选择一个新的严格可行初始点。

(1.4)若x的某些元素没有上界或下界,则fmincon函数更希望对应的元素设置

为Inf(对于上界)或-Inf(对于下界),而不希望强制性地给上界赋一个很大的值,

给下界一个很小的负值。

(1.5)线性约束最小化课题中也有几个问题需要注意:

·Aeq矩阵中若存在密集列或近密集列(A dense or fairly dense column),会导致

满秩并使计算费时;

·fmincon函数剔除Aeq中线性相关的行。此过程需要进行反复的因子分解,因

此,如果相关行很多的话,计算将是一件很费时的事情;

·每一次迭代都要用下式进行稀疏最小二乘求解

T

T R

=

Aeq

B-

其中T R为前提条件的Cholesky(乔累斯基)因子。

(2)中型优化问题:

(2.1)如果用Aeq和beq清楚地提供等式约束,将比用lb和ub获得更好的数值

解。

(2.2)在二次子问题中,若有等式约束并且因等式(dependent equalities)被发现

和剔除的话,将在过程标题中显示’dependent’(当output参数要求使用

options.Display = ‘iter’)。只有在等式连续的情况下,因等式才会被剔除。若等式

系统不连续,则子问题将不可行并在过程标题中打印’infeasible’信息。

(3)求大型优化问题的代码中不允许上限和下限相等,即不能有lb (2)= =ub (2),否则给出下面的出错信息:

Equal upper and lower bounds not permitted in this large-scale method.

Use equality constraints and the medium-scale method instead.

若只有等式约束,仍然可以使用大型算法。当既有等式约束又有边界约束时,使用中型算法。

(4)目标函数和约束函数都必须是连续的,否则可能会只给出局部最优解。 (5)当问题不可行时,fmincon 函数将试图使最大约束值最小化。 (6)目标函数和约束函数都必须是实数。 (7)对于大型优化问题,使用大型优化算法时,用户必须在fun 函数中提供梯度(options 参数的GradObj 属性必须设置为’on ’),并且只可指定上界和下界约束,或者只有线性约束必须存在,Aeq 的行数不能多于列数。

(8)如果在fun 函数中提供了解析梯度,选项参数DerivativeCheck 不能与大型方法一起用,以比较解析梯度和有限差分梯度。可以通过将options 参数的MaxIter 属性设置为0来用中型方法核对导数,然后用大型方法求解问题。

例10-11 求解下列优化问题: 目标函数

321)(x x x x f -= 约束条件

72220321≤++≤x x x 解:将约束条件改写成下面的不等式 022321≤---x x x

7222321≤++x x x

两个约束条件都是线性的,在Matlab 中实现: >> x0=[10;10;10]; >> A=[-1 -2 -2;1 2 2]; >> b=[0;72];

>> [x,fval]=fmincon('-x(1)*x(2)*x(3)',x0,A,b)

Warning: Large-scale (trust region) method does not currently solve this type of problem, switching to medium-scale (line search).

> In E:\matlab6p1\toolbox\optim\fmincon.m at line 213 Optimization terminated successfully:

Magnitude of directional derivative in search direction

less than 2*options.TolFun and maximum constraint violation is less than options.TolCon Active Constraints: 2 x =

24.0000 12.0000 12.0000 fval =

-3456

线性不等式约束条件的值<=0 >> A*x-b ans = -72 0

例10-12 求表面积为常数150 m 2的体积最大的长方体体积。

解:设长方体的长、宽、高分别为x 1、x 2和x 3,根据题意得到下面的数学模型: min z= - x 1 x 2 x 3

2 (x 2 x

3 + x 3 x 1 + x 1 x 2) = 150

由于约束条件是非线性等式约束,所以需要编写一个约束条件M 文件Ex1012c.m : function [c,ceq]=Ex1012c(x)

ceq=x(2)*x(3)+x(3)*x(1)+x(1)*x(2)-75 在Matlab 中实现:

>> x0=[4;5;6]; >> lb=zeros(3,1);

>> [x,fval,exitflag,output,lambda]=fmincon('-x(1)*x(2)*x(3)',x0,[],[],[],[],lb,[],@Ex1012c) Warning: Large-scale (trust region) method does not currently solve this type of problem, switching to medium-scale (line search). Optimization terminated successfully:

Search direction less than 2*options.TolX and

maximum constraint violation is less than options.TolCon Active Constraints: 1 x =

5.0000 5.0000 5.0000 fval =

-125.0000 exitflag = 1 output =

iterations: 7 funcCount: 38 stepsize: 1

algorithm: 'medium-scale: SQP, Quasi-Newton, line-search' firstorderopt: [] cgiterations: [] lambda =

lower: [3x1 double] upper: [3x1 double] eqlin: [0x1 double] eqnonlin: 2.5000

ineqlin: [0x1 double] ineqnonlin: [0x1 double]

优化结果显示过程成功收敛,搜索方向小于两倍options.TolX ,最大违约值小于options.TolCon ,主动约束为1个。

问题的解为x (1) = x (2) = x (3) = 5.0000m ,最大体积为125.0000m 3。exitflag = 1,表示过程成功收敛于解x 处。output 输出变量显示了收敛过程中的迭代次数、目标函数计算次数、步长、算法等信息。lambda 则包含模型信息。

例10-13 求解下列优化问题:

min 2

1212

22

164222x x x x x x ---+

5521-≥--x x

222

1≥+-x x

210,0x x ≤≤ 初始点x0 = [0; 0.75]。

解:由于约束条件中有非线性不等式,所以需要编写一个约束条件M 文件Ex1013c.m : function [c,ceq]=Ex1013c(x) c=2*x(1)^2-x(2); 在Matlab 中实现: >> x0=[0;0.75]; >> A=[1 5]; >> b=5;

>> lb=zeros(2,1);

>>[x,fval,exitflag,output,lambda]=fmincon('2*x(1)^2+2*x(2)^2-2*x(1)*x(2)-4*x(1)-6*x(2)',

x0,A,b,[],[],lb,[],@Ex1013c)

Warning: Large-scale (trust region) method does not currently solve this type of problem,

switching to medium-scale (line search). Optimization terminated successfully:

Search direction less than 2*options.TolX and

maximum constraint violation is less than options.TolCon Active Constraints: 3 4 x =

0.6589 0.8682 fval =

-6.6131 exitflag = 1 output =

iterations: 6 funcCount: 27 stepsize: 1

algorithm: 'medium-scale: SQP, Quasi-Newton, line-search' firstorderopt: [] cgiterations: [] lambda =

lower: [2x1 double] upper: [2x1 double] eqlin: [0x1 double] eqnonlin: [0x1 double] ineqlin: 0.9419 ineqnonlin: 0.8192

问题的解为x (1) = 0.6589,x (2) = 0.8682,最小值为 -6.6131。 例10-14 求解下列优化问题: min

3

)

1(3

1-x

2≤+-x 初始点x = 0。

解:约束条件是线性约束。在Matlab 中实现: >> x0=0; >> A=-1; >> b=-2;

>> [x,fval]=fmincon('1/3*(x-1)^3',x0,A,b)

Warning: Large-scale (trust region) method does not currently solve this type of problem, switching to medium-scale (line search).

> In E:\matlab6p1\toolbox\optim\fmincon.m at line 213 Optimization terminated successfully:

Search direction less than 2*options.TolX and

maximum constraint violation is less than options.TolCon Active Constraints: 1 x = 2 fval =

0.3333

10.3 目标规划

前面介绍的最优化方法只有一个目标函数,是单目标最优化方法。但是,在许多实际

工程问题中,往往希望多个指标都达到最优值,所以它有多个目标函数。这种问题称为多目标最优化问题。

多目标最优化问题的数学模型为

)(min x F n

R

x ∈

1,,2,10)(m i x G i ==

m

m m i x G i ,,2,10

)(11 ++=≤

u i x x x ≤≤ 其中)(x F 为目标函数向量。

此优化问题在Matlab 中主要由函数fgoalattain 来实现。此问题在控制系统中有广泛的应用。

函数:fgoalattain

功能:求解多目标达到问题。 数学模型:

γγ

,minimize x

g oal weig ht )(≤?-γx F 0)(≤x c 0)(=x ceq b x A ≤?

beq x Aeq =? ub x lb ≤≤

其中x ,weight ,goal ,b ,beq ,lb 和ub 为向量,A 和Aeq 为矩阵,c (x ),ceq (x )和F (x )为函数,返回向量。F (x ),c (x ) 和ceq (x )可以是非线性函数。 格式:x = fgoalattain(fun,x0,goal,weight)

x = fgoalattain(fun,x0,goal,weight,A,b)

x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq)

x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub)

x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon)

x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq, lb,ub,nonlcon,options)

x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq, lb,ub,nonlcon,options,P1,P2,...) [x,fval] = fgoalattain(...)

[x,fval,attainfactor] = fgoalattain(...)

[x,fval,attainfactor,exitflag] = fgoalattain(...)

[x,fval,attainfactor,exitflag,output] = fgoalattain(...)

[x,fval,attainfactor,exitflag,output,lambda] = fgoalattain(...) 说明:

fgoalattain 求解多目标达到问题。

x = fgoalattain(fun,x0,goal,weight) 试图通过变化x 来使目标函数fun 达到goal 指定的目标。初值为x0,weight 参数指定权重。

x = fgoalattain(fun,x0,goal,weight,A,b) 求解目标达到问题,约束条件为线性不等式A*x <= b 。

x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq) 求解目标达到问题,除提供上面的线性不等式外,还提供线性等式Aeq*x = beq 。当没有不等式存在时,设置A=[ ]和b=[ ]。

x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub) 为设计变量x 定义下界lb 和上界ub 集合,这样始终有lb <= x <= ub 。

x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon) 将目标达到问题归结为nonlcon 参数定义的非线性不等式c (x)或非线性等式ceq (x)。fgoalattain 优化的约束条件为c(x) <= 0 和ceq(x) = 0。若不存在边界,设置lb=[ ] 和(或)ub=[ ]。

x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon,options) 用options 中设置的优化参数进行最小化。

x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon,options,P1,P2,...) 将问题参数

P1,P2等直接传递给函数fun和nonlcon。若不需要参数A,b,Aeq,beq,lb,ub,nonlcon 和options,将它们设置为空矩阵。

[x,fval] = fgoalattain(...) 返回解x处的目标函数值。

[x,fval,attainfactor] = fgoalattain(...) 返回解x处的目标达到因子。

[x,fval,attainfactor,exitflag] = fgoalattain(...) 返回exitflag参数,描述计算的退出条件。

[x,fval,attainfactor,exitflag,output] = fgoalattain(...) 返回包含优化信息的结构输出output。

[x,fval,attainfactor,exitflag,output,lambda] = fgoalattain(...) 返回解x处包含Lagrange乘子的lambda参数。

·goal变量

目标希望达到的向量值。向量的长度与fun函数返回的目标数F相等。fgoalattain函数试图通过最小化向量F中的值来达到goal参数给定的目标。

·nonlcon函数

该函数意义同前。

·options变量

优化参数选项。可以用optimset函数设置或改变这些参数的值。

DerivativeCheck 比较用户提供的导数(目标函数或约束函数的梯度)和有限差分导数。

Diagnostics 打印将要最小化或求解的函数的诊断信息。

DiffMaxChange 变量中有限差分梯度的最大变化。

DiffMinChange 变量中有限差分梯度的最小变化。

Display 显示水平。设置为’off’时不显示输出;设置为’iter’时显示每一次迭代的输出;设置为’final’时显示最终结果。

GoalsExactAchieve 使得目标个数刚好达到,不多也不少。

GradConstr 用户定义的约束函数的梯度。

GradObj 用户定义的目标函数的梯度。使用大型算法时必须使用梯度,对于中型方法则是可选项。

MaxFunEvals

MaxIter 函数迭代的允许最大次数。

MeritFunction 如果设为’multiobj’,则使用目标达到或最大最小化目标函数的方法;若设置为’singleobj’,则使用fmincon函数计算目标函数。

TolCon 约束矛盾的终止容限。

TolFun 函数值处的终止容限。

TolX x处的终止容限。

·weight变量

为权重向量,可以控制低于或超过fgoalattain函数指定目标的相对程度。当goal的值都是非零值时,为了保证活动对象超过或低于的比例相当,将权重函数设置为abs (goal)(活动对象为阻止解处目标改善的对象集合)。

注意:

(1)当目标值中的任意一个为零时,设置weight = abs (goal)将导致目标约束看起来更像硬约束,而不像目标约束;

(2)当加权函数weight为正时,fgoalattain函数试图使对象小于目标值。为了使目标函数大于目标值,将权重weight设置为负。为了使目标函数尽可能地接近目标值,使用Goal- ExactAchieve参数,将fun函数返回的第一个元素作为目标。

·attainfactor变量

attainfactor变量是超过或低于目标的个数。若attainfactor为负,则目标已经溢出;若attainfactor为正,则目标个数还未达到。

其它参数意义同前。

注意:

(1)当特征值为复数时,本问题不连续,这也说明了为什么收敛速度很慢。尽管原始方法假设函数是连续的,该法仍然可以向解的方向前进,因为在解的位置上,没有发生不连续的现象。当对象和目标为复数时,fgoalattain函数将试图得到最小二乘意义上的目标;

(2)目标函数必须是连续的;

2019年matlab优化工具箱的使用

优化工具箱的使用 MATLAB的优化工具箱提供了各种优化函数,这些优化函数可以通过在命令行输入相应的函数名加以调用;此外为了使用方便,MA TLAB还提供了图形界面的优化工具(GUI Optimization tool)。 1 GUI优化工具 GUI优化工具的启动 有两种启动方法: (1)在命令行输入optimtool; (2)在MA TLAB主界面单击左下角的“Start”按钮,然后依次选择“Toolboxes→Optimization→Optimization tool” GUI优化工具的界面 界面分为三大块: 左边(Problem Setup and Results)为优化问题的描述及计算结果显示; 中间(Options)为优化选项的设置; 右边(Quick Reference)为帮助。为了界面的简洁,可以单击右上角“<<”、“>>”的按钮将帮助隐藏或显示。 1、优化问题的描述及计算结果显示 此板块主要包括选择求解器、目标函数描述、约束条件描述等部分。 选择合适的求解器以及恰当的优化算法,是进行优化问题求解的首要工作。 ?Solver:选择优化问题的种类,每类优化问题对应不同的求解函数。 ?Algorithm:选择算法,对于不同的求解函数,可用的算法也不同。 Problem框组用于描述优化问题,包括以下内容: ?Objective function: 输入目标函数。 ?Derivatives: 选择目标函数微分(或梯度)的计算方式。 ?Start point: 初始点。 Constraints框组用于描述约束条件,包括以下内容: ?Linear inequalities: 线性不等式约束,其中A为约束系数矩阵,b代表约束向量。 ?Linear equalities: 线性等式约束,其中Aeq为约束系数矩阵,beq代表约束向量。 ?Bounds: 自变量上下界约束。 ?Nonlinear Constraints function; 非线性约束函数。 ?Derivatives: 非线性约束函数的微分(或梯度)的计算方式。 Run solver and view results框组用于显示求解过程和结果。 (对于不同的优化问题类型,此板块可能会不同,这是因为各个求解函数需要的参数个数不一样,如Fminunc 函数就没有Constraints框组。) 2、优化选项(Options) ?Stopping criteria: 停止准则。

应用matlab求解约束优化问题

应用matlab求解约束优化问题 姓名:王铎 学号: 2007021271 班级:机械078 上交日期: 2010/7/2 完成日期: 2010/6/29

一.问题分析 f(x)=x1*x2*x3-x1^6+x2^3+x2*x3-x4^2 s.t x1-x2+3x2<=6 x1+45x2+x4=7 x2*x3*x4-50>=0 x2^2+x4^2=14 目标函数为多元约束函数,约束条件既有线性约束又有非线性约束所以应用fmincon函数来寻求优化,寻找函数最小值。由于非线性不等式约束不能用矩阵表示,要用程序表示,所以创建m文件其中写入非线性不等式约束及非线性等式约束,留作引用。 二.数学模型 F(x)为目标函数求最小值 x1 x2 x3 x4 为未知量 目标函数受约束于 x1-x2+3x2<=6 x1+45x2+x4=7 x2*x3*x4-50>=0 x2^2+x4^2=14 三.fmincon应用方法 这个函数的基本形式为 x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options) 其中fun为你要求最小值的函数,可以单写一个文件设置函数,也可是m文件。 1.如果fun中有N个变量,如x y z, 或者是X1, X2,X3, 什么的,自己排个顺序,在fun中统一都是用x(1),x(2)....x(n) 表示的。 2. x0, 表示初始的猜测值,大小要与变量数目相同 3. A b 为线性不等约束,A*x <= b, A应为n*n阶矩阵。 4 Aeq beq为线性相等约束,Aeq*x = beq。 Aeq beq同上可求 5 lb ub为变量的上下边界,正负无穷用 -Inf和Inf表示, lb ub应为N阶数组 6 nonlcon 为非线性约束,可分为两部分,非线性不等约束 c,非线性相等约束,ceq 可按下面的例子设置 function [c,ceq] = nonlcon1(x) c = [] ceq = [] 7,最后是options,可以用OPTIMSET函数设置,具体可见OPTIMSET函数的帮助文件。 四.计算程序

MATLAB优化工具箱应用简介

MATLAB优化工具箱 1 工具箱概述 1.1 功能 (1)求解无约束条件非线性极小值; (2)求解约束条件下非线性极小值,包括目标逼近问题、极大-极小值问题和半无限极小值问题; (3)求解二次规划和线性规划问题; (4)非线性最小二乘逼近和曲线拟合; (5)非线性系统的方程求解; (6)约束条件下的线性最小二乘优化; (7)求解复杂结构的大规模优化问题。 1.2 工具箱的新特色 MATLAB R2008b使用的是4.1版本的优化工具箱,较3.x的变化在于: (1)fmincon、fminimax和fgoalattain中引入了并行机制,加快梯度计算速度; (2)函数gatool和pserchtool整合到优化工具箱GUI中; (3)函数fmincon的求解器中新增内点算法; (4)提供了KNITRO优化库的接口; (5)函数lsqcurvefit、lsqnonlin和fsolve的优化选项参数PrecondBandWinth默认值由0变为inf; (6)优化选项参数TolConSQP的默认值改为1e-6; (7)输出结构中引入了参数constrviolation。 2 工具箱函数 常用函数: 输入参数中可以用options,用于所有函数,其中包括有一下参数。 (1)Display:结果显示方式,off不显示,iter显示每次迭代的信息,final为最终结果,notify只有当求解不收敛的时候才显示结果。 (2)MaxFunEvals:允许函数计算的最大次数,取值为正整数。 (3)MaxIter:允许迭代的最大次数,正整数。 (4)TolFun:函数值(计算结果)精度,正整数。 (5)TolX:自变量的精度,正整数。 而且可以用函数optimset创建和修改。 模型输入时需要注意问题: (1)目标函数最小化;

matlab 无约束优化问题

实验八 无约束优化问题 一.实验目的 掌握应用matlab 求解无约束最优化问题的方法 二.实验原理及方法 1:标准形式: 元函数 为其中n R R f X f n R x n →∈:) (min 2.无约束优化问题的基本算法一.最速下降法(共轭梯度法)算法步骤:⑴ 给定初始点 n E X ∈0,允许误差0>ε,令k=0; ⑵ 计算() k X f ?; ⑶ 检验是否满足收敛性的判别准则: () ε≤?k X f , 若满足,则停止迭代,得点k X X ≈*,否则进行⑷; ⑷ 令() k k X f S -?=,从k X 出发,沿k S 进行一维搜索, 即求k λ使得: ()() k k k k k S X f S X f λλλ+=+≥0 min ; ⑸ 令k k k k S X X λ+=+1,k=k+1返回⑵. 最速下降法是一种最基本的算法,它在最优化方法中占有重要地位.最速下降法的优点是工作量小,存储变量较少,初始点要求不高;缺点是收敛慢,最速下降法适用于寻优过程的前期迭代或作为间插步骤,当接近极值点时,宜选用别种收敛快的算法..牛顿法算法步骤: (1) 选定初始点n E X ∈0,给定允许误差0>ε,令k=0; (2) 求()k X f ?,()() 1 2-?k X f ,检验:若() ε

最优化方法的Matlab实现(公式(完整版))

第九章最优化方法的MatIab实现 在生活和工作中,人们对于同一个问题往往会提出多个解决方案,并通过各方面的论证从中提取最佳方案。最优化方法就是专门研究如何从多个方案中科学合理地提取出最佳方案的科学。由于优化问题无所不在,目前最优化方法的应用和研究已经深入到了生产和科研的各个领域,如土木工程、机械工程、化学工程、运输调度、生产控制、经济规划、经济管理等,并取得了显著的经济效益和社会效益。 用最优化方法解决最优化问题的技术称为最优化技术,它包含两个方面的内容: 1)建立数学模型即用数学语言来描述最优化问题。模型中的数学关系式反映了最优化问题所要达到的目标和各种约束条件。 2)数学求解数学模型建好以后,选择合理的最优化方法进行求解。 最优化方法的发展很快,现在已经包含有多个分支,如线性规划、整数规划、非线性规划、动态规划、多目标规划等。 9.1 概述 利用Matlab的优化工具箱,可以求解线性规划、非线性规划和多目标规划问题。 具体而言,包括线性、非线性最小化,最大最小化,二次规划,半无限问题,线性、非线性方程(组)的求解,线性、非线性的最小二乘问题。另外,该工具箱还提供了线性、非线性最小化,方程求解,曲线拟合,二次规划等问题中大型课题的求解方法,为优化方法在工程中的实际应用提供了更方便快捷的途径。 9.1.1优化工具箱中的函数 优化工具箱中的函数包括下面几类: 1 ?最小化函数

2.方程求解函数 3.最小—乘(曲线拟合)函数

4?实用函数 5 ?大型方法的演示函数 6.中型方法的演示函数 9.1.3参数设置 利用OPtimSet函数,可以创建和编辑参数结构;利用OPtimget函数,可以获得o PtiOns优化参数。 ? OPtimget 函数 功能:获得OPtiOns优化参数。 语法:

用MATLAB求解规划问题

§15. 利用Matlab求解线性规划问题 线性规划是一种优化方法,Matlab优化工具箱中有现成函数linprog对如下式描述的LP问题求解: % min f'x % s.t .(约束条件):Ax<=b % (等式约束条件):Aeqx=beq % lb<=x<=ub linprog函数的调用格式如下: x=linprog(f,A,b) x=linprog(f,A,b,Aeq,beq) x=linprog(f,A,b,Aeq,beq,lb,ub) x=linprog(f,A,b,Aeq,beq,lb,ub,x0) x=linprog(f,A,b,Aeq,beq,lb,ub,x0,options) [x,fval]=linprog(…) [x, fval, exitflag]=linprog(…) [x, fval, exitflag, output]=linprog(…) [x, fval, exitflag, output, lambda]=linprog(…) 其中: x=linprog(f,A,b)返回值x为最优解向量。 x=linprog(f,A,b,Aeq,beq) 作有等式约束的问题。若没有不等式约束,则令 111

A=[ ]、b=[ ] 。 x=linprog(f,A,b,Aeq,beq,lb,ub,x0,options) 中lb ,ub为变量x的下界和上界,x0为初值点,options为指定优化参数进行最小化。 Options的参数描述: Display显示水平。选择’off’ 不显示输出;选择’I ter’显示每一步迭代过程的输出;选择’final’ 显示最终结果。 MaxFunEvals 函数评价的最大允许次数 Maxiter 最大允许迭代次数 TolX x处的终止容限 [x,fval]=linprog(…) 左端fval 返回解x处的目标函数值。 [x,fval,exitflag,output,lambda]=linprog(f,A,b, Aeq,beq,lb,ub,x0) 的输出部分: exitflag描述函数计算的退出条件:若为正值,表示目标函数收敛于解x 处;若为负值,表示目标函数不收敛;若为零值,表示已经达到函数评价或迭代的最大次数。 output 返回优化信息:output.iterations表示迭代次数;output.algorithm表示所采用的算法;outprt.funcCount表示函数评价次数。 lambda返回x处的拉格朗日乘子。它有以下属性: lambda.lower-lambda的下界; lambda.upper-lambda的上界; lambda.ineqlin-lambda的线性不等式; lambda.eqlin-lambda的线性等式。 112

最优化方法的Matlab实现(公式(完整版))

第九章最优化方法的Matlab实现 在生活和工作中,人们对于同一个问题往往会提出多个解决方案,并通过各方面的论证从中提取最佳方案。最优化方法就是专门研究如何从多个方案中科学合理地提取出最佳方案的科学。由于优化问题无所不在,目前最优化方法的应用和研究已经深入到了生产和科研的各个领域,如土木工程、机械工程、化学工程、运输调度、生产控制、经济规划、经济管理等,并取得了显著的经济效益和社会效益。 用最优化方法解决最优化问题的技术称为最优化技术,它包含两个方面的内容:1)建立数学模型即用数学语言来描述最优化问题。模型中的数学关系式反映了最优化问题所要达到的目标和各种约束条件。 2)数学求解数学模型建好以后,选择合理的最优化方法进行求解。 最优化方法的发展很快,现在已经包含有多个分支,如线性规划、整数规划、非线性规划、动态规划、多目标规划等。 9.1 概述 利用Matlab的优化工具箱,可以求解线性规划、非线性规划和多目标规划问题。具体而言,包括线性、非线性最小化,最大最小化,二次规划,半无限问题,线性、非线性方程(组)的求解,线性、非线性的最小二乘问题。另外,该工具箱还提供了线性、非线性最小化,方程求解,曲线拟合,二次规划等问题中大型课题的求解方法,为优化方法在工程中的实际应用提供了更方便快捷的途径。 9.1.1 优化工具箱中的函数 优化工具箱中的函数包括下面几类: 1.最小化函数

表9-1 最小化函数表 2.方程求解函数 表9-2 方程求解函数表 3.最小二乘(曲线拟合)函数 表9-3 最小二乘函数表

4.实用函数 表9-4 实用函数表 5.大型方法的演示函数 表9-5 大型方法的演示函数表 6.中型方法的演示函数 表9-6 中型方法的演示函数表 9.1.3 参数设置 利用optimset函数,可以创建和编辑参数结构;利用optimget函数,可以获得o ptions优化参数。 ● optimget函数 功能:获得options优化参数。

(整理)Matlab优化工具箱基本用法.

Matlab 优化工具箱 x = bintprog(f, A, b, Aeq, Beq, x0, options) 0-1规划

用MATLAB 优化工具箱解线性规划 命令:x=linprog (c ,A ,b ) 2、模型: beq AeqX b AX ..min =≤=t s cX z 命令:x=linprog (c ,A ,b ,Aeq,beq ) 注意:若没有不等式:b AX ≤存在,则令A=[ ],b=[ ]. 若没有等式约束, 则令Aeq=[ ], beq=[ ]. 3、模型: VUB X VLB beq AeqX b AX ..min ≤≤=≤=t s cX z 命令:[1] x=linprog (c ,A ,b ,Aeq,beq, VLB ,VUB ) [2] x=linprog (c ,A ,b ,Aeq,beq, VLB ,VUB, X0) 注意:[1] 若没有等式约束, 则令Aeq=[ ], beq=[ ]. [2]其中X0表示初始点 4、命令:[x,fval]=linprog(…) 返回最优解x及x处的目标函数值fval. 例1 max 6543216.064.072.032.028.04.0x x x x x x z +++++= 85003.003.003.001.001.001.0. .654321≤+++++x x x x x x t s 70005.002.041≤+x x 10005.002.052≤+x x 90008.003.063≤+x x 6,2,10 =≥j x j 解 编写M 文件小xxgh1.m 如下: c=[-0.4 -0.28 -0.32 -0.72 -0.64 -0.6]; A=[0.01 0.01 0.01 0.03 0.03 0.03;0.02 0 0 0.05 0 0;0 0.02 0 0 0.05 0;0 0 0.03 0 0 0.08]; b=[850;700;100;900]; Aeq=[]; beq=[]; vlb=[0;0;0;0;0;0]; vub=[]; [x,fval]=linprog(c,A,b,Aeq,beq,vlb,vub) min z=cX b AX t s ≤..1、模型:

利用Matlab求解机械设计优化问题的分析

利用MATLAB求解机械设计优化问题的分析 周婷婷 (能源与动力学院,油气0701) 摘要:MATLAB是目前国际上最流行的科学与工程计算的软件工具, 它具有强大的数值分析、矩阵运算、信号处理、图形显示、模拟仿真和最优化设计等功能。本文浅谈MATLAB在机械设计优化问题的几点应用。 关键词:MATLAB 约束条件机械设计优化 引言:在线性规划和非线性规划等领域经常遇到求函数极值等最优化问题,当函数或约束条件复杂到一定程度时就无法求解,而只能求助于极值分析算法,如果借助计算器进行手工计算的话,计算量会很大,如果要求遇到求解极值问题的每个人都去用BASIC,C和FORTRAN之类的高级语言编写一套程序的话,那是非一朝一日可以解决的,但如用MATLAB语言实现极值问题的数值解算,就可以避免计算量过大和编程难的两大难题,可以轻松高效地得到极值问题的数值解,而且可以达到足够的精度。 1无约束条件的极值问题的解算方法 设有Rosenbrock函数如下: f(X1,X2)=100(X2-X1*X1)2+(1-X1)2 求向量X取何值时,F(x)的值最小及最小值是多少? 先用MATLAB语言的编辑器编写求解该问题的程序如下: %把函数写成MATLAB语言表达式 fun=’100*(X(2)-X(1)*X(1)2+(1-X(1))2 %猜自变量的初值 X0=[-1 2]; %所有选项取默认值 options=[ ]; %调用最优化函数进行计算。 %函数最小值存放在数组元素options(8)中

%与极值点对应的自变量值存放在向量X里 %计算步数存放在数组元素options(10)中 [X,options]=fmins(fun,X0,options); %显示与极值点对应的自变向量X的值。 %显示函数最小值 options(8) %显示函数计算步数 options(10) 把上面这段程序保存为m文件,然后用“Tools”菜单中的“Run”命令行这段程序,就可以轻松的得到如下结果: X=9.999908938395383e-001 9.99982742178110e-001 ans=1.706171071794760e-001 ans=195 显然,计算结果与理论结果的误差小到e-10级,这里调用了MATLAB的最优化函数fmins(),它采用Nelder-Mead的单纯形算法,就是因为这个函数的采用,使最小值问题的解算变得非常简单。 2.带约束条件的极值问题的解法 设目标函数和约束条件如下: f(x) =-3X1+X2+X3 -X1+2X2-X3>= -11 4X1-X2-2X3<=-3 2X1-X3= -1 X1>=0,X2>=0,X3>=0; 求X向量取何值时函数取极小值? 对条件极值问题通常的做法都是将约束条件标准化(即把等式约束条件写成等号为0的形式,把不等式写成<=0的形式)。然后把条件极值问题转换为非条件极值问题,MATLAB也采用同样的做法。

第10章__Matlab在最优化问题中的应用

第10章 Matlab 在最优化问题中的应用 优化理论是一门实践性很强的学科,广泛应用于生产管理、军事指挥和科学试验等各种领域,Matlab 优化工具箱提供了对各种优化问题的一个完整的解决方案。 在数学上,所谓优化问题,就是求解如下形式的最优解: Min fun (x) Sub. to [C.E.] [B.C.] 其中fun (x)称为目标函数,“Sub. to ”为“subject to ”的缩写,由其引导的部分称为约束条件。[C.E.]表示Condition Equations ,即条件方程,可为等式方程,也可为不等式方程。[B.C.]表示Boundary Conditions ,即边界条件,用来约束自变量的求解域,以lb ≤x ≤ub 的形式给出。当[C.E.]为空时,此优化问题称为自由优化或无约束优化问题;当[C.E.]不空时,称为有约束优化或强约束优化问题。 在优化问题中,根据变量、目标函数和约束函数的不同,可以将问题大致分为: ·线性优化 目标函数和约束函数均为线性函数。 ·二次优化 目标函数为二次函数,而约束条件为线性方程。线性优化和二次优化 统称为简单优化。 ·非线性优化 目标函数为非二次的非线性函数,或约束条件为非线性方程。 ·多目标优化 目标函数并非一个时,称为多目标优化问题。 本章将对以上几类优化问题在Matlab 中的实现作比较详细的讲解。另外还将介绍两个利用优化方法解非线性方程的函数。 通过本章的介绍,用户可以不必掌握艰涩的各种优化算法而轻易地解决一些常用的最优化问题了。 10.1 线性规划问题 线性规划问题即目标函数和约束条件均为线性函数的问题。 其标准形式为: min C ’x sub. To Ax = b x ≥0 其中C, b, 0∈R n ,A ∈R m ?n ,均为数值矩阵,x ∈R n 。 若目标函数为:max C ’x ,则转换成:min –C ’x 。 标准形式的线性规划问题简称为LP (Linear Programming )问题。其它形式的线性规划问题经过适当的变换均可以化为此种标准形。线性规划问题虽然简单,但在工农业及其他生产部门中应用十分广泛。 在Matlab 中,线性规划问题由linprog 函数求解。 函数:linprog %求解如下形式的线性规划问题: x f T x min such that b x A ≤? beq x Aeq =? ub x lb ≤≤ 其中f, x, b, beq, lb, ub 为向量,A, Aeq 为矩阵。 格式:x = linprog(f,A,b) x = linprog(f,A,b,Aeq,beq) x = linprog(f,A,b,Aeq,beq,lb,ub)

MATLAB在土木工程中的应用

MATLAB在土木工程中的应用 MATLAB是由美国MathWorks公司于1984年发布的、面向科学计算、数据可视化以及交互程序设计的高级计算机语言。MA TLAB软件开发的初衷是方便地进行矩阵运算,如今的MATLAB已经把功能延伸到了科学研究和工程应用的诸多领域。在国外,MA TLAB已经成为数值分析、数理统计、系统识别、信号处理、动态仿真等领域的基本工具。同传统的土木工程计算机语言FORTRAN和C相比,MA TLAB 更具有以下几大优势: a)功能强大。除了数值计算上的绝对优势外,MA TLAB5.2以上版本中还开发了自己的符号计算功能。用户只要拥有一个MAT ,就可以方便的处理诸如矩阵运算,线性与非线性方程求解,特征值问题,统计及优化问题了。 b)语言简单。MA TLAB允许用户以数学形式的语言编写程序,比FORTRAN和C更接近计算公式的书写思维方式。它的操作和功能函数指令就是常用计算机和数学上一些简单的英文单词。 c)扩充能力强、可开发性强。MATLAB本身的函数就是以源代码形式出现,用户可以仿照其写法,创建自己的程序“库”。另外,MA TLAB可以方便的与FORTRAN 或C语言接口,充分利用现有资源。 d)编程易,效率高。MA TLAB程序文件是纯文本文件,用任何字处理文件都可以对它进行编写和修改。因此程序易调试,人机交互性强。另外,MATLAB自己也拥有视窗环境下的调试系统,程序调试简单、方便。随着科研水平的不断提高,科研领域的不断扩展,多学科并行、交叉发展已成必然,认识到MATLAB的强大功能,使得MATLAB在土木工程领域中得到充分应用,达到利用MA TLAB来快速实现科研构想和提高工作效率的效果。 1 MA TLAB在结构分析中的应用 土木工程中的结构分析主要是指结构在静力和动力荷载作用时结构内力和位移的求解问题。由于结构的复杂多变和对求解精度的严格要求,采用有限元法(finite element method)程序是常用的分析手段。有限元程序中非线性方程组的求解和解的收敛问题,是困扰许多科研人员的基本问题之一,采用FORTRAN或C不但需要很多语句,而且需要研究者有较高的计算机理论和实际操作水平,程序的编制与调试又要占用近一半的研究时间。MA TLAB的出现,可以在用简单的语句完成基本算法程序后,方程组的求解利用MA TLAB自身的命令实现,整个程序不但小巧、便于调试与操作,而且解的收敛问题易于解决。例如,经典的非线性方程组Newton解法MATLAB求解程序仅有l4行,而用C语言编写的Newton法子函数程序接近30行,而且在每个迭代步当Newton方程建立后,还要再调用其他子函数程序求解线性方程组,较MA TLAB程序要繁琐许多。再有,对图1所示的为整体坐标系中二维一次四结点单元,单元可以是任意形状的四边形。这种单元比较容易满足结构实际分析的需要,该单元在整体坐标系下(x0y坐标系)的形函数表达式非常复杂,用FORTRAN或C语言将其表达出来,是非常困难的。而用MATLAB语言就可以很容易的将其写出。如二维一次四结点单元的MA TLAB程序命令如下: clear v:sym(’[1,X,Y,X Y]’); m=sym(’【1,xl,yl,xl yl;x2,y2,x2 y2;1, x3,y3,x3 y3;1,x4,y4,x4 y4]’); mm=inv(m); d=v mm simplify(factor(d));

matlab在优化设计中的应用

Matlab在优化设计中的应用 摘要 常见的优化问题包括线性规划、无约束优化、约束优化、最下二乘优化、多目标规划等。本文研究了matlab在这些常见优化问题中的应用及求解。 在进行研究本课题之前,我们先通过网络、电子书刊等各种有效渠道获取我们所需信息,在充分了解与熟练掌握了各种优化问题的具体特点及性质后,我们给出了关于如何用matlab进行多类优化问题的求解基本方法,在此前提下,为了体现该软件在这些优化领域的实际应用效果,我们结合若干个优化问题的实例进行分析、建模、以及运用matlab编程求解,在求解过程中,通过得到的精确数据和反应结果的图例,我们了解到matlab工具箱的功能强大,是处理优化问题的非常方便的编程工具。 关键词:matlab 优化问题 二、基本概念 2.1.1 线性规划 线性规划是优化的一个重要分支。它在理论和算法上都比较成熟,在实际中有广泛的应用。例如数学表达形式:

???? ? ??? ?=≥=+++=+++=++++++n i x b x a x a x a b x a x a x a b x a x a x a t s x c x c x c i m n mn m m n n n n n n ,,2,1,0..min 221 122222121112121112211 在MTLAB 提供的优化工具箱中,解决规划的命令是linprog ,它的调用格式如下, ),,(b A c linprog x = 求解下列形式的线性规划: ?? ?≤b Ax t s x c T ..min ),,,,(beq Aeq b A c linprog x = 求解下面形式的线性规划: ?? ? ? ????=?≤beq x Aeq b Ax t s x c T ..min 若没有不等式约束b Ax ≤,则只需命令 [][],==b A 。 ),,,,,,(ub lb beq Aeq b A c linprog x = 求解下面形式的线性规划: ??? ?????? ? ? ?≤≤=?≤ub x lb beq x Aeq b Ax t s x c T ..min 若没有不等式约束b Ax ≤,则只需令[][],==b A ;若只有下界约束,则可以不用输入ub 。 2.1.2 无约束优化算法 对于无约束优化问题,已经有许多有效的算法。这些算法基本都是迭代法,它们都遵循下面的步骤: ① 选取初始点x 0 ,一般来说初始点越靠近最优解越好; ② 如果当前迭代点x k 不是原问题的最优解,那么就需要找一个搜索方向p k ,使得目标函数f (x ) 从x k 出发,沿方向p k 有所下降;

Matlab 7最优化问题求解

Matlab 最优化问题求解 1.无约束最优化问题 无约束最优化问题一般描述为: 其中,该数学表示的含义是求一组x,使得目标函数f(x)最小.这种问题也称为最小化问题. Matlab中提供了3个求最小值的函数,调用格式为: ·[x,fval]=fminbnd(@fname,x1,x2,options):求一元函数在(x1,x2)区间中的极小值点x和极小值fval; ·[x,fval]=fminsearch(@fname,x0,options):基于单纯形算法求多元函数的极小值点x和极小值fval; ·[x,fval]=fminunc(@fname,x0,options):基于拟牛顿法求多元函数的极小值点x和极小值fval. 这里讨论的是局域极值问题,fname是定义函数m文件的文件名,fminbnd的输入变量x1,x2分别是研究区间的左右边界;fminsearch和fminunc的输入变量x0是一个向量,表示极值点的初值.options为优化参数,可以通过optimset函数来设置,当目标函数的阶数大于2时,使用fminunc比fminsearch更有效;但是目标函数高度不连续时,使用fminsearch函数效果更好. Matlab中没有专门求最大值的函数,只要-f(x)在(a,b)上的最小值就是f(x)在(a,b)上最大值的相反数.因此用fminbnd(-f,x1,x2)返回函数f(x)在(x1,x2)上的最大值的相反数. --------------------------------------------------------------------- 例如:求函数在区间[0,5]内的极小值和极小值点. function fx=mymin(x) fx=x.^3-2*x-5; [x,fval]=fminbnd(@mymin,0,5) x = 0.8165 fval = -6.0887 因此极小值点为x=0.8165,极小值为-6.0887 --------------------------------------------------------------------- 例如:设 求函数f(x,y,z)在(0.5,0.5,0.5)附近的最小值. function f=fxyz(p)

优化方法MATLAB编程——大连理工大学

优化方法上机大作业 学院: 姓名: 学号: 指导老师:肖现涛

第一题 源程序如下: function zy_x = di1ti(x) %di1ti是用来求解优化作业第一题的函数。 x0=x; yimuxulong=0.000001; g0=g(x0);s0=-g0; A=2*ones(100,100); k=0; while k<100 lanmed=-(g0)'*s0/(s0'*A*s0); x=x0+lanmed*s0; g=g(x); k=k+1; if norm(g)

break; end miu=norm(g)^2/norm(g0)^2; s=-g+miu*s0; g0=g; s0=s;x0=x; end function f=f(x) f=(x'*ones(100,1))^2-x'*ones(100,1); function g=g(x) g=(2*x'*ones(100,1))*ones(100,1)-ones(100,1); 代入x0,运行结果如下: >> x=zeros(100,1); >> di1ti(x) After 1 iterations,obtain the optimal solution. The optimal solution is -0.250000. The optimal "x" is "ans". ans =0.005*ones(100,1).

matlab在优化设计中的应用

Matlab 在优化设计中的应用 摘 要 常见的优化问题包括线性规划、无约束优化、约束优化、最下二乘优化、多目标规划等。本文研究了matlab 在这些常见优化问题中的应用及求解。 在进行研究本课题之前,我们先通过网络、电子书刊等各种有效渠道获取我们所需信息,在充分了解与熟练掌握了各种优化问题的具体特点及性质后,我们给出了关于如何用matlab 进行多类优化问题的求解基本方法,在此前提下,为了体现该软件在这些优化领域的实际应用效果,我们结合若干个优化问题的实例进行分析、建模、以及运用matlab 编程求解,在求解过程中,通过得到的精确数据和反应结果的图例,我们了解到matlab 工具箱的功能强大,是处理优化问题的非常方便的编程工具。 关键词:matlab 优化问题 二、基本概念 2.1.1 线性规划 线性规划是优化的一个重要分支。它在理论和算法上都比较成熟,在实际中有广泛的应用。例如数学表达形式: ???? ? ??? ?=≥=+++=+++=++++++n i x b x a x a x a b x a x a x a b x a x a x a t s x c x c x c i m n mn m m n n n n n n ,,2,1,0..min 221 122222121112121112211 在MTLAB 提供的优化工具箱中,解决规划的命令是linprog ,它的调用格式如下, ),,(b A c linprog x = 求解下列形式的线性规划: ?? ?≤b Ax t s x c T ..min ),,,,(beq Aeq b A c linprog x = 求解下面形式的线性规划:

Matlab求解优化问题(可编辑修改word版)

= + x 预备知识:M 文件简介 在 MATLAB 中,用户可以利用 Edtior (编辑器)建立 M 文件,然后在命令窗口中的“>>”提示符下键入 M 文件的主文件名,回车执行. MATLAB 的 M 文件有两类:命令文件和函数文件。将原本要在 MATLAB 环境下直接输入的语句,放 在一个以 .m 为后缀的文件中,这一文件就称为命令文件;函数文件由五部分组成:函数定义行、H1 行、函数帮助文本、函数体、注释,MATLAB 的内部函数都是由函数文件定义的。 1.11 优化(最值、数学规划) 在数学上,优化问题包括最值问题和数学规划问题等,后者又包括线性规划、整数规划(含 0-1 规划)、二次规划等. 在 MATLAB 中,求解最值问题的命令主要有: fminbnd (f,x1,x2) 求一元函数 f 在区间[x1,x2]上的最小值点[x,fval]=fminbnd(f,x1,x2) 求一元函数 f 在区间[x1,x2]上的最小值点和最小值fminsearch (’f’,x0) 求多元函数 f 在点 x0 附近的最小值点[x,fval]=fminsearch(’f’,x0) 求多元函数 f 在点 x0 附近的最小值点和最小值 例 1.11.1 求函数 f (x ) = x 2 + 3x + 2 在区间[-5,5]上的最小值点和最小值. >> [x,fval]=fminbnd('x^2+3*x+2',-5,5) x = -1.5000 fval = -0.2500 2 例 1.11.2 求函数 f (x 1 , x 2 ) x 1 x 2 1 + 2 在点(1,1) 附近的最小值点和最小值. x 2 >> [x,fval]= fminsearch('x(1)*x(2)+2/x(1)+2/x(2)',[1 1]) x = 1.2599 1.2599 fval = 4.7622

Matlab在最优化问题中的应用举例

在企业生产和日常生活中,人们总是希望用最少的人力、物力、财力和时间去办更多的事,这就是所谓的最优化问题。线性规划方法是解决最优化问题的有效方法之一,因此受到人们的普遍关注。在企业生产过程中,生产计划安排直接影响到企业的经济效益,而生产计划本质就是在目标一定时,对于人力、时间和物质资源的优化配置问题。 1。综述了最优化方法,归纳了最优化闯题中线性规划和非线性规划模型的解法,并给出了相应的matlab求解代码。 2。提出了基于信息增益率的用电客户指标选择方法,根据信息增益率的大小选择对分类有贡献的指标。 关键词:Matlab,最优化方法,应用举例 In enterprise production and daily life, people always hope with the least amount of human, material and financial resources and time to do more things, this is the so-called optimization problem. Linear programming method is to solve the optimal problem, so one of the effective method by people's attention. In enterprise production process, production plan directly affect the enterprise economic benefit, but in essence is the production plan for the target certain human, time and material resources optimization allocation problem. 1·Studying the optimization,summing up the solutions ofoptimization problem for both linear and non-linear programming model and proposing the matlabcode. 2·Proposing a new way based on information-gain-ratio to choose the powercustomer indices,selecting the indices which are more contributive to theclassification,in order to avoid over learning。 K eywords:Matlab,Optimization method,Applied examples 1.1选题背景及研究意义 1.1.1最优化问题的相关应用

Matlab优化工具箱

Matlab优化工具箱 1工具箱概述 ?计算机学院软件工程系38专业 ?C#.NET,https://www.doczj.com/doc/8d16679974.html,,软件工程,UML ?Matlab,SPSS,BI,SAS ?王华秋 1.1工具箱的功能 优化工具箱主要可以用于解决以下问题: ?(1)求解无约束条件非线性极小值; ?(2)求解约束条件下非线性极小值,包括目标逼近问题、极大-极小值问题以及半无限极小值问题; ?(3)求解二次规划和线性规划问题; ?(4)非线性最小二乘逼近和曲线拟合; ?(5)非线性系统的方程求解; ?(6)约束条件下的线性最小二乘优化; ?(7)求解复杂结构的大规模优化问题。 1.2工具箱的新特色 MATLAB R2008b提供的优化工具箱是4.1版本,4.1版本较之以前的3.x版本,主要增加了以下新的特色。 ?(1)函数fmincon、fminimax和fgoalattain中引入了并行机制,加快了梯度的计算速度; ?(2)函数gatool和psearchtool整合到优化工具箱GUI中; ?(3)函数fmincon的求解器中新增内点算法; ?(4)提供了KNITRO优化库的接口; ?(5)函数lsqcurvefit、lsqnonlin和fsolve的优化选项参数PrecondBandWidth默认值由0变为inf; ?(6)优化选项参数TolConSQP的默认值修改为1e–6; 1

?(7)输出结构中引入了参数constrviolation。 1.3 工具箱的结构 2

3

4

5

模型输入时需要注意的问题 ?(1)目标函数最小化 ?优化函数fminbnd、fminsearch、fminunc、fmincon、fgoalattain、fminmax和lsqnonlin都要求目标函数最小化。 ?(2)约束非正 ?优化工具箱要求非线性不等式约束的形式为Ci(x)≤0,通过对不等式取负可以达到使大于零的约束形式变为小于零的不等式约束形式的目的。 ?(3)避免使用全局变量ce Model.vi”等VI来实现。 2工具箱函数 3GUI优化工具 优化工具(optimtool)是2006年9月在MATLAB7.2版本优化工具箱3.1版本中推出的,它是执行下列常见优化任务的图形用户界面。 ?选择求解器并定义优化问题; ?设置和检查优化选项; ?运行问题并将结果可视化; ?在MATLAB工作空间和优化工具之间导入和导出问题定义、算法选项和结果; ?自动生成M文件代码,以获取工作并自动执行任务; ?带有图形选项,用来显示对求解器执行期间进度的预定义或自定义测量标准。 3.1GUI优化工具的启动 ?启动GUI Optimization tool有以下两种方法。 ?(1)在命令行上输入optimtool; ?(2)在MATLAB主界面单击左下角的“Start”按钮,然后依次选择“Toolboxes→Optimization→Optimization tool(optimtool)。 6

相关主题
文本预览
相关文档 最新文档