第一范文网 - 专业文章范例文档资料分享平台

Matlab在最优化问题中的应用

来源:用户分享 时间:2025/5/21 12:56:05 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

则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中线性相关的行。此过程需要进行反复的因子分解,因

此,如果相关行很多的话,计算将是一件很费时的事情; ·每一次迭代都要用下式进行稀疏最小二乘求解 B?AeqTR?T 其中RT为前提条件的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 求解下列优化问题: 目标函数

f(x)??x1x2x3 约束条件

0?x1?2x2?2x3?72 解:将约束条件改写成下面的不等式 ?x1?2x2?2x3?0 x1?2x2?2x3?72

两个约束条件都是线性的,在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

2

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

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

2 (x2 x3 + x3 x1 + x1 x2) = 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个。

3

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

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

22?2x2?2x1x2?4x1?6x2 min 2x1 ?x1?5x2??5 ?2x12?x2?0

0?x1,0?x2

初始点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 求解下列优化问题:

13 ?x?2?0 初始点x = 0。

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

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

min (x?1)3

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 目标规划

前面介绍的最优化方法只有一个目标函数,是单目标最优化方法。但是,在许多实际工程问题中,往往希望多个指标都达到最优值,所以它有多个目标函数。这种问题称为多目标最优化问题。

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

minF(x)

x?Rn Gi(x)?0 Gi(x)?0i?1,2,?,m1

i?m1?1,m1?2,?,m

xi?x?xu 其中F(x)为目标函数向量。

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

函数:fgoalattain

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

minimize?

x,? F(x)?weight???goal c(x)?0 ceq(x)?0 A?x?b

Aeq?x?beq lb?x?ub

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

搜索更多关于: Matlab在最优化问题中的应用 的文档
Matlab在最优化问题中的应用.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c22ukl4kbpj207lq1bbd16zh7s4eqk601d4z_4.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top