ch3(3) Matlab在最优化问题中的应用

更新时间:2023-03-08 05:34:08 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第3章 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中的实现作比较详细的讲解。另外还将介绍两个利用优化方法解非线性方程的函数。

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

3.1 线性规划问题

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

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

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

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

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

minfTx

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

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

126

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的线性等式。 例3-1 求解下列优化问题:

min f(x)??5x1?4x2?6x3

sub.to x1?x2?x3?20 3x1?2x2?4x3?42 3x1?2x2?30

0?x1,0?x2,0?x3

解:在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

127

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处。

例3-2 生产决策问题。

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

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

z?7x1?5x2 max sub. to 3x1?2x2?90 4x1?6x2?200 7x2?210

x1?0,x2?0

该模型中要求目标函数最大化,需要按照Matlab的要求进行转换,即目标函数为

z??7x1?5x2 min在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 =

128

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处。

例3-3 厂址选择问题。

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

A、B、C三地出产原料、消耗产品情况表 地点 年产原料(万吨) 年销产品(万吨) 生产费用(万元/万吨) A 20 7 150 B 16 13 120 C 24 0 100 解:令xij为由i地运到j地的原料数量(万吨),yij为由i地运到j地的产品数量(万吨),i,j = 1,2,3(分别对应A、B、C三地)。根据题意,可以建立问题的数学模型(其中目标函数包括原料运输费、产品运输费和生产费用(万元)):

min z?75x12?75x21?50x13?50x31?100x23?100x32?150y11?240y12?210y21

?120y22?160y31?220y32 sub.to 3y11?3y12?x12?x13?x21?x31?20 3y21?3y22?x12?x21?x23?x32?16 3y31?3y32?x13?x23?x31?x32?24 y11?y21?y31?7 y12?y22?y32?13 y21?y22?5

xij?0,i,j?1,2,3;i?j yij?0,i?1,2,3;j?1,2

在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 =

129

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万元。

3.2 非线性规划问题

3.2.1非线性无约束规划问题

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

函数:fminbnd

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

minf(x)

x x1?x?x2

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

格式: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(...) 返回包含优化信息的结构输出。

130

本文来源:https://www.bwwdw.com/article/bf5.html

Top