实验七最优化问题
更新时间:2024-04-02 03:35:01 阅读量: 综合文库 文档下载
实验七.规划问题
一.实验目的:
学会用matlab优化工具箱求解线性规划、非线性规划。
二.实验原理与方法
Matlab优化工具箱简介
1. MATLAB求解优化问题的主要函数
类 型 一元函数极小 无约束极小 线性规划 二次规划 约束极小 (非线性规划) 达到目标问题 极小极大问题
模 型 Min F(x)s.t.x1 见下表: 变量 f fun H A,b Aeq,beq vlb,vub 描 述 线性规划的目标函数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, X0 迭代初始点坐标 x1,x2 函数最小化的区间 options 优化选项参数结构,定义用于优化函数的参数 lsqnonlin 除fminbnd外所有优化函数 fminbnd 所有优化函数 3. 优化函数的输出变量下表:变量 x 描 述 由优化函数求得的值.若exitflag>0,则x为解;否则,x不是最终解,它只是迭代终止时优化过程的值 解x处的目标函数值 调用函数 所有优化函数 linprog,quadprog,fgoalattain, fmincon,fminimax,lsqcurvefit, lsqnonlin, fminbnd fval 描述退出条件: 1. exitflag>0,表目标函数收敛于解x处 exitflag 2. exitflag=0,表已达到函数评价或迭代的最大次数 3. exitflag<0,表目标函数不收敛 包含优化结果信息的输出结构. 1. Iterations:迭代次数 output 2. Algorithm:所采用的算法 3. FuncCount:函数评价次数 所有优化函数 4.控制参数options的设置 Options中常用的几个参数的名称、含义、取值如下:(1) Display: 显示水平.取值为’off’时,不显示输出; 取值为’iter’时,显示每次迭代的信息;取值为’final’时,显示最终结果.默认值为’final’. (2) MaxFunEvals: 允许进行函数评价的最大次数,取值为正整数. (3) MaxIter: 允许进行迭代的最大次数,取值为正整数.控制参数options可以通过函数optimset创建或修改。命令的格式如下:(1) options=optimset(‘optimfun’) 创建一个含有所有参数名,并与优化函数optimfun相关的默认值的 选 项 结 构 options. ( 2 ) options=optimset(‘param1’,value1,’param2’,value2,...) 创建一个名称为options的优化选项参数,其中指定的参数具有指 定 值 , 所 有 未 指 定 的 参 数 取 默 认 值.(3)options=optimset(oldops,‘param1’,value1,’param2’,value2,...) 创建名称为oldops的参数的拷贝,用指定的参数值修改oldops中相应的参数.2.线性规划问题 线性规划问题是目标函数和约束条件均为线性函数的问题,MATLAB解决的线性规划问题的标准形式为: ?minc1x1?c2x2?????cnxn?ax?ax????ax??b1nn1?111122?a21?a22x2?????a2n??b2???????????????????????????ax?ax????ax??bmnnm?m11m22?am?1,1x1?am?1,2x2?????am?1,n?bm?1???????????????????????????ax?ax?????ax?bm?k,nnm?k?m?k,11m?k,22??x1,l??x1??x1,u,???,xn,l??xn??xn,u 写成矩阵形式: min cx TAx??bAeq?x?beqlb??x??ub其中 ?c1??x1??b1??a11a12???a1n??c??x??b???c??2?x??2?A??a21a22???a2n?b??2???????????????,?????,?????,????? ???????????cn??xn??bm??am1am2????amn? ?am?1,1??am?2,1Aeq???????a?m?k,1am?1,2am?2,2???am?k,2???am?1,n??...am?2,n?beq????????,????am?k,n???bm?1??b??m?2?????? ???bm?k??x1,l??x1,u??x??x?2,l?2,u?lb?ub????????, ????? ????x?n,l??xn,u?其它形式的线性规划问题都可经过适当变换化为此标准形式。 在MATLAB6.0版中,线性规划问题(Linear Programming)已用函数linprog取代了MATLAB5.x版中的lp函数。当然,由于版本的向下兼容性,一般说来,低版本中的函数在6.0版中仍可使用。 函数: linprog 格式1 : x = linprog(f,A,b) %求 min f ' *x sub.to A?x?b 线性规划的最优解。 格式2 :x = linprog(f,A,b,Aeq,beq) %等式约束Aeq?x?beq,若 没有不等式约束A?x?b,则A=[ ],b=[ ]。 格式3 :x = linprog(f,A,b,Aeq,beq,lb,ub) %指定x的范围 lb?x?ub,若没有等式约束Aeq?x?beq ,则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为指定的优化参数 格式6: [x,fval] = linprog(?) % 返回目标函数最优值,即 fval= f ' *x。 格式7:[x,lambda,exitflag] = linprog(?) % lambda为解x的 Lagrange乘子。 格式8: [x, lambda,fval,exitflag] = linprog(?) % exitflag 为终止迭代的条件。 格式9:[x,fval, lambda,exitflag,output] = linprog(?) % output为关于优化的一些信息 说明 : 若exitflag>0表示函数收敛于解x,exitflag=0表示超过函数估值或迭代的最大数字,exitflag<0表示函数不收敛于解x;lambda为结构体类型数据,其中lambda .lower 表示下界lb的信息,lambda .upper表示上界ub的信息,lambda .ineqlin表示不等式约束的信息,lambda .eqlin表示等式约束的信息.。lambda中的非0元素表示对应的约束是有效约束;output也为结构体类型 output.iterations表示迭代次数,output.algorithm表示使用的运算规则,output.cgiterations表示PCG迭代次数。 用MATLAB优化工具箱解线性规划 模型1: minz?f'X s.tAX?b 求解命令:x=linprog(c,A,b) 模型2: minz?fX s.t. AX?b AeqX?beq求解命令:x=linprog(f,A,b,Aeq,beq) 注意:若没有不等式:AX?b存在,则令A=[ ],b=[ ]. 若没有等式约束, 则令Aeq=[ ], beq=[ ]. 模型3:minz?cX s.t. AX?b AeqX?beq VLB?X?VUB求解命令:[1] x=linprog(c,A,b,Aeq,beq, VLB,VUB) [2] x=linprog(c,A,b,Aeq,beq, VLB,VUB, X0) 注意:若没有等式约束, 则令Aeq=[ ], beq=[ ];X0表示初始点 例: 求下面的优化问题 Min ?5x1?4x2?6x3 s.t. x1?x2?x3?20 3x1?2x2?4x3?42 3x1?2x2?30 0?x1,0?x2,0?x3 解: 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) 结果为: x = %最优解 0.0000 15.0000 3.0000 fval = -78.0000 %最优值 exitflag =1 %表示收敛 output = iterations: 6 %迭代次数 cgiterations: 0 algorithm: 'large-scale: interior point' %所使用规则 message: 'Optimization terminated.' lambda = ineqlin: [3x1 double] eqlin: [0x1 double] upper: [3x1 double] lower: [3x1 double] %lambda是结构体数据,可以按如下方式查看其取值: lambda.ineqlin ans = 0.0000 1.5000 0.5000 lambda.lower ans = 1.0000 0.0000 0.0000 说明:lambda .ineqlin和 lambda .lower的取值表明,不等约束条件2和3以及第1个下界是有效的 例: max z?0.4x1?0.28x2?0.32x3?0.72x4?0.64x5?0.6x6 s.t.0.01x1?0.01x2?0.01x3?0.03x4?0.03x5?0.03x6?850 0.02x1?0.05x4?700 0.02x2?0.05x5?100 0.03x3?0.08x6?900 xj?0j?1,2,?6 解: 编写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) 例: minz?6x1?3x2?4x3 s.t.x1?x2?x3?120 x1?30 0?x2?50 x3?20 解: 编写M文件xxgh2.m如下: c=[6 3 4]; A=[0 1 0]; b=[50]; Aeq=[1 1 1]; beq=[120]; vlb=[30,0,20]; vub=[]; [x,fval]=linprog(c,A,b,Aeq,beq,vlb,vub) 例:(任务分配问题)某车间有甲、乙两台机床,可用于加工三种工件。假定这两台车床的可用台时数分别为800和900,三种工件的数量分别为400、600和500,且已知用三种不同车床加工单位数量不同工件所需的台时数和加工,费用如下表。问怎样分配车床的加工任务,才能既满足加工工件的要求,又使加工费用最低? 车床类 型 甲 乙 单位工件所需加工台时数 工件1 0.4 0.5 工件2 1.1 1.2 工件3 1.0 1.3 单位工件的加工费用 工件1 13 11 工件2 9 12 工件3 10 8 可用台时数 800 900 解: 设在甲车床上加工工件1、2、3的数量分别为x1、x2、x3,在乙车床上加工工件1、2、3的数量分别为x4、x5、x6。可建立以下 线性规划模型: minz?13x1?9x2?10x3?11x4?12x5?8x6 ?x1?x4?400?x?x?6005?2??x?x6?500s.t. ?3 0.4x?1.1x?x?800123??0.5x4?1.2x5?1.3x6?900???xi?0,i?1,2,?,6编写M文件xxgh3.m如下: f = [13 9 10 11 12 8]; A = [0.4 1.1 1 0 0 0 0 0 0 0.5 1.2 1.3]; b = [800; 900]; Aeq=[1 0 0 1 0 0 0 1 0 0 1 0 0 0 1 0 0 1]; beq=[400 600 500]; vlb = zeros(6,1); vub=[]; [x,fval] = linprog(f,A,b,Aeq,beq,vlb,vub) 3.非线性规划问题 3.1 有约束的一元函数的最小值 单变量函数求最小值的标准形式为minxf(x) s.t.x1?x?x2 函数:fminbnd 格式:(1) x = fminbnd(fun,x1,x2) %返回自变量x在区间x1?x?x2 上函数fun取最小值时x值,fun为目标函数的表达式字符串或MATLAB自定义的函数或者为函数句柄。 (2) x = fminbnd(fun,x1,x2,options) % options为指定优化参数选项 (3) [x,fval] = fminbnd(?) % fval为目标函数的最小值 (4)[x,fval,exitflag] = fminbnd(?) %xitflag为终止迭代 的条件 (5)[x,fval,exitflag,output] = fminbnd(?) % output为 优化信息 说明:若参数exitflag>0,表示函数收敛于x,若exitflag=0,表 示超过函数估计值或迭代的最大数字,exitflag<0表示函数不收敛于x;参数output.iterations表示迭代次数,output.funccount表示函数赋值次数,output.algorithm表示所使用的算法。 例:计算下面函数在区间(0,1)内的最小值。 x3?cosx?xlogx f(x)?ex解 [x,fval,exitflag,output]=fminbnd('(x^3+cos(x)+x*log(x))/exp?(x)',0,1); 结果为:x = 0.5223 fval= 0.3974 exitflag = 1 output = iterations: 9 funcCount: 9 algorithm:'golden interpolation' 例: 在[0,5]上求下面函数的最小值f(x)?(x?3)3?1 section search, parabolic 解:先自定义函数:在MATLAB编辑器中建立M文件为: function f = myfun(x) f = (x-3).^2 - 1; 保存为myfun.m,然后在命令窗口键入命令: x=fminbnd(‘myfun’,0,5) 或者x=fminbnd(@myfun,0,5) %@的作用是返回函数myfun的句柄 则结果显示为: x = 3 例:对边长为3米的正方形铁板,在四个角剪去相等的正方形以制成方形无盖水槽,问如何剪法使水槽的容积最大? 解:设剪去的正方形的边长为x,则水槽的容积为:(3?2x2)x 建立无约束优化模型为:min y=-(3?2x2)x, 0 主程序为wliti2.m: [x,fval]=fminbnd('fun0',0,1.5); xmax=x fmax=-fval运算结果为: xmax = 0.5000,fmax =2.0000. 即剪掉的正方形的边长为0.5米时水槽的容积最大,最大容积为2立方米. 3.2 无约束多元函数最小值 多元函数最小值的标准形式为 minf(x) x其中:x为向量,如x?[x1,x2,?,xn] 表示n个自变量 在MATLAB5.x中使用fmins求其极小值。6.5及以上版本利用函数fminsearch以及fminunc求无约束多元函数极小值,两个函数的区别在于所使用的算法有所不同,但是均为局部极值。 函数 fminsearch 格式:(1) x = fminsearch(fun,x0) %x0为初始点,fun为目标函 数的表达式字符串或MATLAB自定义函数的函数柄。 (2)x = fminsearch(fun,x0,options) % options,查optimset (3)[x,fval] = fminsearch(?) %最优点的函数值 (4)[x,fval,exitflag] = fminsearch(?) % exitflag与单变量情形一致。 (5)[x,fval,exitflag,output] = fminsearch(?) %output与单变量情形一致 注意:fminsearch采用了Nelder-Mead型简单搜寻法。 32例:求y?2x1?4x1x32?10x1x2?x2的最小值点。 解: X=fminsearch('2*x(1)^3+4*x(1)*x(2)^3-10*x(1)*x(2)+x(2)^2',... [0,0]) 结果为 X = 1.0016 0.8335 或在MATLAB编辑器中建立函数文件 function f=myfun(x) f=2*x(1)^3+4*x(1)*x(2)^3-10*x(1)*x(2)+x(2)^2; 保存为myfun.m,在命令窗口键入 X=fminsearch ('myfun', [0,0]) 或X=fminsearch(@myfun, [0,0]) 结果为: X = 1.0016 0.8335 函数: fminunc 格式:(1)x = fminunc(fun,x0) %返回给定初始点x0的最小函数 值点 (2)x = fminunc(fun,x0,options) % options为指定优化参数 (3)[x,fval] = fminunc(?) %fval最优点x处的函数值 (4)[x,fval,exitflag] = fminunc(?) % exitflag为终止迭代 的条件,与前同。 (5)[x,fval,exitflag,output] = fminunc(?) %output为输出 优化信息 (6)[x,fval,exitflag,output,grad] = fminunc(?) % grad为 函数在解x处的梯度值 (7)[x,fval,exitflag,output,grad,hessian] = fminunc(?)%目 标函数在解x处的海赛(Hessian)值 注意:当函数的阶数大于2时,使用fminunc比fminsearch更有效,但当所选函数高度不连续时,使用fminsearch效果较好。 2例: 求f(x)?3x1?2x1x2?x22的最小值。 解: fun='3*x(1)^2+2*x(1)*x(2)+x(2)^2'; x0=[1 1]; [x,fval,exitflag,output,grad,hessian]=fminunc(fun,x0) 结果为: x = 1.0e-008 * -0.7591 0.2665 fval = 1.3953e-016 exitflag = 1 output = iterations: 3 funcCount: 16 stepsize: 1.2353 firstorderopt: 1.6772e-007 algorithm: 'medium-scale: Quasi-Newton line search' grad = 1.0e-006 * -0.1677 0.0114 hessian = 6.0000 2.0000 2.0000 2.0000 或用下面方法: fun=inline('3*x(1)^2+2*x(1)*x(2)+x(2)^2') fun = Inline function: fun(x) = 3*x(1)^2+2*x(1)*x(2)+x(2)^2 x0=[1 1]; x=fminunc(fun,x0) 结果为: x = 1.0e-008 * -0.7591 0.2665 3.3 有约束的多元函数最小值 非线性有约束的多元函数的标准形式为: minf(x) xsub.to C(x)?0 Ceq(x)?0 A?x?b Aeq?x?beq lb?x?ub 其中:x、b、beq、lb、ub是向量,A、Aeq为矩阵,C(x)、Ceq(x)是返回向量的函数,f(x)为目标函数,f(x)、C(x)、Ceq(x)可以是非线性函数。 在MATLAB5.x中,它的求解由函数constr实现。高级版本使用fmincon 函数: fmincon 格式:(1)x=fmincon(fun,x0,A,b) (2)x=fmincon(fun,x0,A,b,Aeq,beq) (3)x=fmincon(fun,x0,A,b,Aeq,beq,lb,ub) (4)x=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon) (5)x=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options) (6)[x,fval] = fmincon(?) (7)[x,fval,exitflag] = fmincon(?) (8)[x,fval,exitflag,output] = fmincon(?) (9)[x,fval,exitflag,output,lambda] = fmincon(?) (10)[x,fval,exitflag,output,lambda,grad] = fmincon(?) (11) [x,fval,exitflag,output,lambda,grad,hessian]=fmincon(?) 参数说明: fun为目标函数,它可用前面的方法定义; x0为初始值; A、b满足线性不等式约束A?x?b,若没有不等式约束,则取A=[ ],b=[ ]; Aeq、beq满足等式约束Aeq?x?beq,若没有,则取Aeq=[ ],beq=[ ]; lb、ub满足lb?x?ub,若没有界,可设lb=[ ],ub=[ ]; nonlcon的作用是通过接受的向量x来计算非线性不等约束C(x)?0和等式约束Ceq(x)?0。如: function [C,Ceq] = mycon(x) C = ? % 计算x处的非线性不等约束C(x)?0的函数值,C可以为 向量,每个分量代表一个不等式方程约束。 Ceq = ? % 计算x处的非线性等式约束Ceq(x)?0的函数值,Ceq可 以为向量,每个分量代表一个等式方程约束。 lambda是Lagrange乘子,它体现哪一个约束有效。 output输出优化信息; grad表示目标函数在x处的梯度; hessian表示目标函数在x处的Hessiab值。 例: 求下面问题在初始点(0,1)处的最优解 2min x1?x22?x1x2?2x1?5x2 sub.to ?(x1?1)2?x2?0 2x1?3x2?6?0 解:约束条件的标准形式为 (x1?1)2?x2?0 ?2x1?3x2?6 先在MATLAB编辑器中建立非线性约束函数文件: function [c, ceq]=mycon (x) c=(x(1)-1)^2-x(2); ceq=[ ]; %无等式约束 然后,在命令窗口键入如下命令或建立M文件: fun='x(1)^2+x(2)^2-x(1)*x(2)-2*x(1)-5*x(2)'; %目标函数 x0=[0 1];%初值 A=[-2 3]; %线性不等式约束 b=6; Aeq=[ ]; %无线性等式约束 beq=[ ]; lb=[ ]; %x没有下、上界 ub=[ ]; [x,fval,exitflag,output,lambda,grad,hessian] =fmincon(fun,x0,A,b,Aeq,beq,lb,ub,@mycon) 则结果为 x = 3 4 fval = -13 exitflag = %解收敛 1 output = iterations: 2 funcCount: 9 stepsize: 1 algorithm: 'medium-scale: SQP, Quasi-Newton, line-search' firstorderopt: [ ] cgiterations: [ ] lambda = lower: [2x1 double] %x下界有效情况,通过lambda.lower可查看。 upper: [2x1 double] %x上界有效情况,为0表示约束无效。 eqlin: [0x1 double] %线性等式约束有效情况,不为0表示约束有效。 eqnonlin: [0x1 double] %非线性等式约束有效情况。 ineqlin: 2.5081e-008 %线性不等式约束有效情况。 ineqnonlin: 6.1938e-008 %非线性不等式约束有效情况。 grad = %目标函数在最小值点的梯度 1.0e-006 * -0.1776 0 hessian = %目标函数在最小值点的Hessian值 1.0000 -0.0000 -0.0000 1.0000 例: 求下面问题在初始点x=(10, 10, 10)处的最优解。 Min f(x)??x1x2x3 Sub.to 0?x1?2x2?2x3?72 解:约束条件的标准形式为 sub.to ?x1?2x2?2x3?0 x1?2x2?2x3?72 fun= '-x(1)*x(2)*x(3)'; x0=[10,10,10]; A=[-1 -2 -2;1 2 2]; b=[0;72]; [x,fval]=fmincon(fun,x0,A,b) 结果为: x = 24.0000 12.0000 12.0000 fval = -3456 3.4 二次规划问题 二次规划问题(quadratic programming)的标准形式为: min1x?Hx?f?x 2s.t A?x?b Aeq?x?beq lb?x?ub 其中,H、A、Aeq为矩阵,f、b、beq、lb、ub、x为向量 其它形式的二次规划问题都可转化为标准形式。 MATLAB5.x版中的qp函数已被6.0版中的函数quadprog取代。 函数 quadprog 格式1: x = quadprog(H,f,A,b) %其中H,f,A,b为标准形中的参 数,x为目标函数的最小值。 格式2: x = quadprog(H,f,A,b,Aeq,beq) ?q,beq满足等约束 条件Aeq?x?beq。 格式3: x=quadprog(H,f,A,b,Aeq,beq,lb,ub) % lb,ub分别为解 x的下界与上界。 格式4: x=quadprog(H,f,A,b,Aeq,beq,lb,ub,x0) %x0为设置的 初值 格式5: x = quadprog(H,f,A,b,Aeq,beq,lb,ub,x0,options) % options为指定的优化参数 格式6: [x,fval] = quadprog(?) %fval为目标函数最优值 格式7: [x,fval,exitflag] = quadprog(?) % exitflag与线性 规划中参数意义相同 格式8: [x,fval,exitflag,output] = quadprog(?) % output与 线性规划中参数意义相同 格式9:[x,fval,exitflag,output,lambda] = quadprog(?) % lambda与线性规划中参数意义相同 例: 求解下面二次规划问题 min2f(x)?1x1?x22?x1x2?2x1?6x2 2x1?x2?2 ?x1?2x2?2 2x1?x2?3 0?x1,0?x2 x?Hx?f?x 解:f(x)?12则H????1??x1???2?f?x?,,???6??x? ?12???2???1在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) 结果为: 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.ineqlin ans = 3.1111 0.4444 0 >> lambda.lower ans = 0 0 说明第1、2个约束条件有效,其余无效。 例: 求二次规划的最优解 max f (x1, x2)=x1x2+3 sub.to x1+x2-2=0 解:化成标准形式: ?0?1??x1??x1?minf(x1x2)??x1x2?3?1(x1x2)?????(0,0)???3 2??10??x2??x2?sub.to x1+x2=2 在Matlab中实现如下: H=[0,-1;-1,0]; f=[0;0]; Aeq=[1 1]; b=2; [x,fval,exitflag,output,lambda]=quadprog(H,f,[ ],[ ],Aeq,b) 结果为: x = 1.0000 1.0000 fval = -1.0000 exitflag = 1 output = firstorderopt: 0 iterations: 1 cgiterations: 1 algorithm: [1x58 char] lambda = eqlin: 1.0000 ineqlin: [ ] lower: [ ] upper: [ ] 3.5极小化极大(Minmax)问题 极小化极大问题的标准形式为 minmaxx{F}i{Fi(x)} sub.to C(x)?0 Ceq(x)?0 A?x?b Aeq?x?beq lb?x?ub 其中:x、b、beq、lb、ub是向量,A、Aeq为矩阵,C(x)、Ceq(x)和F(x)是返回向量的函数,F(x)、C(x)、Ceq(x)可以是非线性函数。 在MATLAB5.x中,它的求解由函数minmax实现。 函数 fminimax 格式:(1) x = fminimax(fun,x0) (2)x=fminimax(fun,x0,A,b) (3)x=fminimax(fun,x0,A,b,Aeq,beq) (4)x=fminimax(fun,x0,A,b,Aeq,beq,lb,ub) (5)x=fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon) (6)x=fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options) (7)[x,fval,maxfval] = fminimax(?) (8)[x,fval,maxfval,exitflag] = fminimax(?) (9)[x,fval,maxfval,exitflag,output] = fminimax(?) (10)[x,fval,maxfval,exitflag,output,lambda] = fminimax(?) 参数说明: fun为目标函数; x0为初始值; A、b满足线性不等约束A?x?b,若没有不等约束,则取A=[ ],b=[ ]; Aeq、beq满足等式约束Aeq?x?beq,若没有,则取Aeq=[ ],beq=[ ]; lb、ub满足lb?x?ub,若没有界,可设lb=[ ],ub=[ ]; nonlcon的作用是通过接受的向量x来计算非线性不等约束C(x)?0和等式约束Ceq(x)?0分别在x处的值C和Ceq。如: function [C,Ceq] = mycon(x) C = ? % 计算x处的非线性不等约束C(x)?0的函数值。 Ceq = ? % 计算x处的非线性等式约束Ceq(x)?0的函数值。 options为指定的优化参数; fval为最优点处的目标函数值; maxfval为目标函数在x处的最大值; exitflag为终止迭代的条件; lambda是Lagrange乘子,它体现哪一个约束有效。 output输出优化信息。 例: 求下列函数最大值的最小化问题 [f1(x), f2(x), f3(x), f4(x), f5(x)] 2其中:f1(x)?2x1?x22?48x1?40x2?304 2f2(x)??x22?3x2 f3(x)?x1?3x2?18 f4(x)??x1?x2 f5(x)?x1?x2?8 解:先建立目标函数文件,并保存为myfun.m:function f = myfun(x) f(1)= 2*x(1)^2+x(2)^2-48*x(1)-40*x(2)+304; f(2)= -x(1)^2 - 3*x(2)^2; f(3)= x(1) + 3*x(2) -18; f(4)= -x(1)- x(2); f(5)= x(1) + x(2) - 8; 然后,在命令窗口键入命令: x0 = [0.1; 0.1]; % 初始值 [x,fval] = fminimax(@myfun,x0) 结果为: x = 4.0000 4.0000 fval = 0.0000 -64.0000 -2.0000 -8.0000 -0.0000 例: 求上述问题的绝对值的最大值最小化问题。 目标函数为:[|f1(x)|, |f2(x)|, |f3(x)|, |f4(x)|, |f5(x)|] 解:先建立目标函数文件(与上例相同) 然后,在命令窗口或编辑器中建立M文件: >>x0 = [0.1; 0.1]; % 初始点 >>options = optimset('MinAbsMax',5); % 指定绝对值的最小化 >>[x,fval] fminimax(@myfun,x0,[ ],[ ],[ ],[ ],[ ],[ ],[ ],options) 则结果为 x = 4.9256 2.0796 fval = 37.2356 -37.2356 -6.8357 -7.0052 -0.9948 3.6多目标规划问题 多目标规划是指在一组约束下,对多个不同目标函数进行优化。它的一般形式为: min[f1(x),f2(x),?,fm(x)] = sub.to gj(x)?0j?1,2,?,p 其中:x?(x1,x2,?,xn)。 多目标规划问题的几种常用解法: (1)主要目标法 其基本思想是:在多目标问题中,根据问题的实际情况,确定一个目标为主要目标,而把其余目标作为次要目标,并且根据经验,选取一定的界限值。这样就可以把次要目标作为约束来处理,于是就将原来的多目标问题转化为一个在新的约束下的单目标最优化问题。 (2) 线性加权和法 其基本思想是:按照多目标fi(x) (i=1, 2, ? ,m)的重要程度,分别乘以一组权系数λj(j=1, 2, ? ,m)然后相加作为目标函数而构成单目标规划问题。 例1:某钢铁厂准备用5000万用于A、B两个项目的技术改造投资。设x1、x2分别表示分配给项目A、B的投资。据专家预估计,投资项目A、B的年收益分别为70%和66%。同时,投资后总的风险损失将随着总投资和单项投资的增加而增加,已知总的风险损失为0.02x12+0.01x22+0.04(x1+x2)2,问应如何分配资金才能使期望的收益最大,同时使风险损失为最小。 建立数学模型 max f1(x)=70x1+66x2 min f2(x)= 0.02x12+0.01x22+0.04(x1+x2)2 s.t x1+x2≤5000 0≤x1, 0≤x2 线性加权构造目标函数: max f=0.5f1(x) -0.5f2(x) 化最小值问题: min (-f)=- 0.5f1(x) +0.5f2(x) 首先编辑目标函数M文件ff11.m Function f=ff11(x) f=-0.5*(70*x(1)+66*x(2))+0.5*(0.02*x(1)^2+0.01*x(2)^2+0.04*(x(1)+x(2))^2); 调用单目标规划求最小值问题的函数 x0=[1000,1000] A=[1 1]; b=5000; lb=zeros(2,1); [x,fval, exitflag]=fmincon(@ff11,x0, A,b,[],[],lb,[]) f1=70*x(1)+66*x(2) f2=0.02*x(1)^2+0.01*x(2)^2+0.04*(x(1)+x(2))^2 结果: x=307.1428 414.2857 fval=-1.2211e+004 exitflag =1 f1 = 4.8843e+004 f2 = 2.4421e+004 (3) 极大极小法 其基本思想是:对于极小化的多目标规划,让其中最大的目标函数值尽可能地小。为此,对每个 x∈R,我们先求诸目标函数值fi(x)的最大值,然后再求这些最大值中的最小值。 (4) 目标达到法 在MATLAB中,多目标问题的标准形式为 minimize? x,?sub.to : F(x)?weight???goal C(x)?0 Ceq(x)?0 A?x?b Aeq?x?beq lb?x?ub 其中:x、b、beq、lb、ub是向量;A、Aeq为矩阵;C(x)、Ceq(x)和F(x)是返回向量的函数;F(x)、C(x)、Ceq(x)可以是非线性函数;weight为权值系数向量,用于控制对应的目标函数与用户定义的目标函数值的接近程度;goal为用户设计的与目标函数相应的目标函数值向量;?为一个松弛因子标量;F(x)为多目标规划中的目标函数向量。 在MATLAB5.x中,它的最优解由attgoal函数实现。 函数 fgoalattain 格式: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= goalattain(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,fval] = fgoalattain(?) [x,fval,attainfactor] = fgoalattain(?) [x,fval,attainfactor,exitflag] = fgoalattain(?) [x,fval,attainfactor,exitflag,output] = fgoalattain(?) [x,fval,attainfactor,exitflag,output,lambda] fgoalattain(?) 参数说明: x0为初始解向量; fun为多目标函数的文件名字符串,其定义方式与前面fun的定义方式相同; goal为用户设计的目标函数值向量; weight为权值系数向量,用于控制目标函数与用户自定义目标值的接近程度; A、b满足线性不等式约束A?x?b,没有时取A=[ ],b=[ ]; Aeq、beq满足线性等式约束Aeq?x?beq,没有时取Aeq=[ ],beq=[ ]; lb、ub为变量的下界和上界:lb?x?ub; nonlcon的作用是通过接受的向量x来计算非线性不等C(x)?0和等式约束Ceq(x)?0分别在x处的值C和Ceq。 options为指定的优化参数; fval为多目标函数在x处的值; attainfactor为解x处的目标规划因子; exitflag为终止迭代的条件; output为输出的优化信息; lambda为解x处的Lagrange乘子 = 例:某工厂因生产需要,欲采购一种原料,市场上这种原材料有两个等级,甲级单价2元/kg,乙级单价1元/kg,现要求总费用不超过200元,购得原料总量不少于100kg,其中甲级原料不少于50kg,问如何确定最好的采购方案。 解:列出方程 x1>=50 x1*2+x2*1<=200 x1+x2>=100 x1,x2>=0 从而 min f1=x1*2+x2*1 min f2=-x1-x2 min f3=x1 使得: x1*2+x2*1<=200 -x1-x2<=-100 -x1<=-50 x1,x2>=0 该问题的matlab程序如下: fun='[2*x(1)+x(2),-x(1)-x(2),-x(1)]'; a=[2 1;-1 -1;-1 0]; b=[200 -100 20]'; goal=[200,-100,-50]; weight=goal; x0=[55,55]; lb=[0,0]'; [x,fval,attainfactor,exitflag]=fgoalattain(fun,x0,goal,weight,a,b,[],[],lb,[]) 结果如下: [x,fval,attainfactor,exitflag]=fgoalattain(fun,x0,goal,weight,a,b,[],[],lb,[]) Optimization terminated: magnitude of search direction less than 2*options.TolX and maximum constraint violation is less than options.TolCon. Active inequalities (to within options.TolCon = 1e-006): lower upper ineqlin ineqnonlin 2 2 3 x = 50 50 fval = 150 -100 -50 attainfactor = 5.1699e-026 exitflag = 4 3.7最小二乘最优问题 (1)约束线性最小二乘 有约束线性最小二乘的标准形式为 min1Cx?dx222 sub.to A?x?b Aeq?x?beq lb?x?ub 其中:C、A、Aeq为矩阵;d、b、beq、lb、ub、x是向量。 在MATLAB5.x中,约束线性最小二乘用函数conls求解。 函数 lsqlin 格式:(1)x = lsqlin(C,d,A,b) %求在约束条件A?x?b下,方程 Cx = d的最小二乘解x。 (2)x = lsqlin(C,d,A,b,Aeq,beq) ?q、beq满足等式约束Aeq?x?beq,若没有不等式约束,则设A=[ ],b=[ ]。 (3)x = lsqlin(C,d,A,b,Aeq,beq,lb,ub) %lb、ub满足 lb?x?ub,若没有等式约束,则 Aeq=[ ],beq=[ ]。 (4)x = lsqlin(C,d,A,b,Aeq,beq,lb,ub,x0) % x0为初始解向量,若x没有界,则lb=[ ],ub=[ ]。 (5)x = lsqlin(C,d,A,b,Aeq,beq,lb,ub,x0,options) % options为指定优化参数。 (6)[x,resnorm]=lsqlin(?) % resnorm=norm(C*x-d)^2, 即2-范数。 (7)[x,resnorm,residual]=lsqlin(?) % residual=C*x-d,即残差。 ( 8 ) [x,resnorm,residual,exitflag] = lsqlin(?) %exitflag为终止迭代的条件。 ( 9 ) [x,resnorm,residual,exitflag,output] = lsqlin(?) % output表示输出优化信息 (10)[x,resnorm,residual,exitflag,output,lambda]= lsqlin(?) % lambda为解x的Lagrange乘子 例: 求解下面系统的最小二乘解 系统:Cx=d 约束:A?x?b;lb?x?ub 先输入系统系数和x的上下界: C = [0.9501 0.7620 0.6153 0.4057;? 0.2311 0.4564 0.7919 0.9354;? 0.6068 0.0185 0.9218 0.9169;? 0.4859 0.8214 0.7382 0.4102;? 0.8912 0.4447 0.1762 0.8936]; d = [ 0.0578; 0.3528; 0.8131; 0.0098; 0.1388]; A =[ 0.2027 0.2721 0.7467 0.4659;? 0.1987 0.1988 0.4450 0.4186;? 0.6037 0.0152 0.9318 0.8462]; b =[ 0.5251; 0.2026; 0.6721]; lb = -0.1*ones(4,1); ub = 2*ones(4,1); 然后调用最小二乘命令: [x,resnorm,residual,exitflag,output,lambda] lsqlin(C,d,A,b,[ ],[ ],lb,ub); 结果为: x = -0.1000 -0.1000 0.2152 0.3502 resnorm = 0.1672 residual = 0.0455 0.0764 -0.3562 0.1620 0.0784 exitflag = 1 %说明解x是收敛的 output = iterations: 4 algorithm: 'medium-scale: active-set' firstorderopt: [] cgiterations: [] lambda = lower: [4x1 double] upper: [4x1 double] eqlin: [0x1 double] ineqlin: [3x1 double] 通过lambda.ineqlin可查看非线性不等式约束是否有效。 (2) 非线性数据(曲线)拟合 非线性曲线拟合是已知输入向量xdata和输出向量ydata,并且知道输入与输出的函数关系为ydata=F(x, xdata),但不知道系数向量x。今进行曲线拟合,求x使得下式成立: min1F(x,xdata)?ydatax222= ?1?(F(x,xdatai)?ydatai)2 2i在MATLAB5.x中,使用函数curvefit解决这类问题。 函数 lsqcurvefit 格式 x = lsqcurvefit(fun,x0,xdata,ydata) x = lsqcurvefit(fun,x0,xdata,ydata,lb,ub) x = lsqcurvefit(fun,x0,xdata,ydata,lb,ub,options) [x,resnorm] = lsqcurvefit(?) [x,resnorm,residual] = lsqcurvefit(?) [x,resnorm,residual,exitflag] = lsqcurvefit(?) [x,resnorm,residual,exitflag,output] = lsqcurvefit(?) [x,resnorm,residual,exitflag,output,lambda]=lsqcurvefit(?) [x,resnorm,residual,exitflag,output,lambda,jacobian]=lsqcurvefit(?) 参数说明: x0为初始解向量;xdata,ydata为满足关系ydata=F(x, xdata)的数据; lb、ub为解向量的下界和上界lb?x?ub,若没有指定界,则lb=[ ],ub=[ ]; options为指定的优化参数; fun为拟合函数,其定义方式为: x = lsqcurvefit(@myfun,x0,xdata,ydata), 其中myfun已定义为: function F = myfun(x,xdata) F = ? % 计算x处拟合函数值fun的用法与 前面相同; resnorm=sum ((fun(x,xdata)-ydata).^2),即在x处残差的平方和; residual=fun(x,xdata)-ydata,即在x处的残差; exitflag为终止迭代的条件; output为输出的优化信息; lambda为解x处的Lagrange乘子; jacobian为解x处拟合函数fun的jacobian矩阵。 例: 求解如下最小二乘非线性拟合问题 已知输入向量xdata和输出向量ydata,且长度都是n,拟合函数为 ydata(i)?x(1)?xdata(i)2?x(2)?sin(xdata(i))?x(3)?xdata(i)3 即目标函数为minx1(F(x,xdata)?ydata)2 ii2?i?1n其中:F(x,xdata)?x(1)?xdata2?x(2)?sin(xdata)?x(3)?xdata3 初始解向量为x0=[0.3, 0.4, 0.1]。 解:先建立拟合函数文件,并保存为myfun.m function F = myfun(x,xdata) F = x(1)*xdata.^2 + x(2)*sin(xdata) + x(3)*xdata.^3; 然后给出数据xdata和ydata >>xdata = [3.6 7.7 9.3 4.1 8.6 2.8 1.3 7.9 10.0 5.4]; >>ydata = [16.5 150.6 263.1 24.7 208.5 9.9 2.7 163.9 325.0 54.3]; >>x0 = [10, 10, 10]; %初始估计值 >>[x,resnorm] = lsqcurvefit(@myfun,x0,xdata,ydata) 结果为: Optimization terminated successfully: Relative function value changing by less than OPTIONS.TolFun x = 0.2269 0.3385 0.3021 resnorm = 6.2950 (3) 非线性最小二乘 非线性最小二乘(非线性数据拟合)的标准形式为 minf(x)?f1(x)2?f2(x)2???fm(x)2?L x其中:L为常数 在MATLAB5.x中,用函数leastsq解决这类问题,在6.0版中使用函数lsqnonlin。 ?f1(x)??f(x)?设F(x)??2? ??????fm(x)?则目标函数可表达为minx1F(x)222?1?fi(x)2 2i其中:x为向量,F(x)为函数向量。 函数 lsqnonlin 格式: x = lsqnonlin(fun,x0) %x0为初始解向量;fun为fi(x), i=1,2,?,m,fun返回向量值F,而不是平方和值,平方和隐含在算法中,fun的定义与前面相同。 x=lsqnonlin(fun,x0,lb,ub) %lb、ub定义x的下界和上界: x=lsqnonlin(fun,x0,lb,ub,options) %options为指定优化参数,若x没有界,则lb=[ ],ub=[ ]。 [x,resnorm]= lsqnonlin(?) % resnorm=sum(fun(x).^2),即解x处目标函数值。 [x,resnorm,residual] = lsqnonlin(?) % residual=fun(x),即解x处fun的值。 [x,resnorm,residual,exitflag]=lsqnonlin(?) %exitflag为终止迭代条件。 [x,resnorm,residual,exitflag,output]=lsqnonlin(?) %output输出优化信息。 [x,resnorm,residual,exitflag,output,lambda] lsqnonlin(?) %lambda为Lagrage乘子。 [x,resnorm,residual,exitflag,output,lambda,jacobian]=lsqnonlin(?) %fun在解x处的Jacobian矩阵。 例:求下面非线性最小二乘问题?(2?2k?ekxk?1101= ?ekx2)2,初始解向量为 x0=[0.3, 0.4]。 解:先建立函数文件,并保存为myfun.m,由于lsqnonlin中的fun为向量形式而不是平方和形式,因此,myfun函数应由fi(x)建立: fk(x)?2?2k?ekx?ekx k=1,2,?,10 12function F = myfun(x) k = 1:10; F = 2 + 2*k-exp(k*x(1))-exp(k*x(2)); 然后调用优化程序: x0 = [0.3 0.4]; [x,resnorm] = lsqnonlin(@myfun,x0) 结果为: Optimization terminated successfully: Norm of the current step is less than OPTIONS.TolX x = 0.2578 0.2578 resnorm = %求目标函数值 124.3622 (4) 非负线性最小二乘 非负线性最小二乘的标准形式为: min1Cx?dx222 sub.to x?0 其中:矩阵C和向量d为目标函数的系数,向量x为非负独立变量。 在MATLAB5.x中,用函数nnls求解这类问题,在6.0版中则用函数lsqnonneg。 函数: lsqnonneg 格式:x = lsqnonneg(C,d) %C为实矩阵,d为实向量 x = lsqnonneg(C,d,x0) % x0为初始值且大于0 x = lsqnonneg(C,d,x0,options) % options为指定优化参数 [x,resnorm] = lsqnonneg(?) % resnorm=norm (C*x-d)^2 [x,resnorm,residual] = lsqnonneg(?) %residual=C*x-d [x,resnorm,residual,exitflag] = lsqnonneg(?) [x,resnorm,residual,exitflag,output] = lsqnonneg(?) [x,resnorm,residual,exitflag,output,lambda] = lsqnonneg(?) 例: 一个最小二乘问题的无约束与非负约束解法的比较。 先输入数据: >>C = [ 0.0372 0.2869; 0.6861 0.7071; 0.6233 0.6245; 0.6344 0.6170]; >>d = [0.8587; 0.1781; 0.0747; 0.8405]; >> [C\\d, lsqnonneg(C,d)] ans = -2.5627 0 3.1108 0.6929 注意:1。当问题为无约束线性最小二乘问题时,使用MATLAB下的“\\”运算即可以解决。2.对于非负最小二乘问题,调用lsqnonneg(C,d)求解。 三实验内容 1.某厂生产甲乙两种口味的饮料,每百箱甲饮料需用原料6千克,工人10名,可获利10万元;每百箱乙饮料需用原料5千克,工人20名,可获利9万元.今工厂共有原料60千克,工人150名,又由于其他条件所限甲饮料产量不超过8百箱.问如何安排生产计划,即两种饮料各生产多少使获利最大 2.假设某厂计划生产甲、乙两种产品,现库存主要材料有A类3600公斤,B类2000公斤,C类3000公斤。每件甲产品需用材料A类9公斤,B类4公斤,C类3公斤。每件乙产品,需用材料A类4公斤, B类5公斤,C类10公斤。甲单位产品的利润70元,乙单位产品的利润120元。问如何安排生产,才能使该厂所获的利润最大。 3.某厂每日8小时的产量不低于1800件。为了进行质量控制,计划聘请两种不同水平的检验员。一级检验员的标准为:速度25件/小时,正确率98%,计时工资4元/小时;二级检验员的标准为:速度15小时/件,正确率95%,计时工资3元/小时。检验员每错检一次,工厂要损失2元。为使总检验费用最省,该工厂应聘一级、二级检验员各几名? 4.有A、B、C三个食品加工厂,负责供给甲、乙、丙、丁四个市场。三个厂每天生产食品箱数上限如下表: 工厂 生产数 A 60 B 40 C 50 四个市场每天的需求量如下表: 市场 甲 乙 35 丙 33 丁 34 需求量 20 从各厂运到各市场的运输费(元/每箱)由下表给出: 收 点 发 市 场 甲 乙 丙 丁 点 工 A 厂 B C 2 1 3 1 3 4 3 2 1 2 1 1 求在基本满足供需平衡的约束条件下使总运输费用最小。 5.试绘出下面所给函数图形,并分别使用fminunc和fminsearch求解如下函数的极小值 f(x)=(4x12+2x22+4x1x2+2x2+1)*exp(x1)6.Rosenbrock 函数 f(x1,x2)=100(x2-x12)2+(1-x1)2 的最优解(极小)为x*=(1,1),极小值为f(x*)=0.绘出该函数图形,并分别使用fminunc和fminsearch求解如下函数的极小值,初值选为x0=(-1.2 , 2) 7.求函数z?(x1?1)2?(x2?2)2?2在点极小值点和极小值(要求达到10?10的数值精度) 8求下列函数的极小点: 22 1) f?X??x12?4x2?9x3?2x1?18x2; 22) f?X??x12?3x2?2x1x2?x1?2x2; 23) f?X???x1?1?4?222. 第1),2)题的初始点可任意选取, 第3)题的初始点取为X0??0,1?T. 9.求解如下二次优化问题。 minf(x)?x1?x2?8x1?10x2 s.t.3x1?2x2?6 22x1,x2?0 10.设有400万元资金, 要求4年内使用完, 若在一年内使用资金x万元, 则可得效益x万元(效益不能再使用),当年不用的资金可存入银行, 年利率为10%. 试制定出资金的使用计划, 以使4年效益之和为最大. 11.求下列方程组的最小二乘解 ?x1?7x1x2?3x2?0.5?0?22?x1?2x1x2?x2?1?0 ?x1?x2?1?0?22 12.设某城市有某种物品的10个需求点,第i个需求点Pi的坐标为(ai,bi),道路网与坐标轴平行,彼此正交。现打算建一个该物品的供应中心,且由于受到城市某些条件的限制,该供应中心只能设在x界于[5,8],y界于[5.8]的范围之内。问该中心应建在何处为好? P点的坐标为: ai 1 4 3 5 9 12 6 20 17 8 bi 2 10 8 18 1 4 5 10 8 9 设供应中心的位置为(x,y),要求它到最远需求点的距离尽可能小,以此建立数学模型并求解。 13.求解最大最小问题 MinMax{fi(x)}xfi?0?x1?1S.T. ??0?x2?3 ?f1(x)??x12?3x22?其中?f2(x)??x1?x2 14.某化工厂拟生产两种新产品A和B,其生产设备费用分别为2万元/吨和5万元/吨。这两种产品均将造成环境污染,设由公害所造成的损失可折算为A为4万元/吨,B为1万元/吨。由于条件限制,工厂生产产品A和B的最大生产能力各为每月5吨和6吨,而市场需要这两种产品的总量每月不少于7吨。试问工厂如何安排生产计划,在满足市场需要的前提下,使设备投资和公害损失均达最小。该工厂决策认为,这两个目标中环境污染应优先考虑,设备投资的目标值为20万元,公害损失的目标为12万元。 15.某工厂生产两种产品甲和乙,已知生产甲产品100公斤需6个工时,生产乙产品100公斤需8个工时。假定每日可用的工时数为48工时。这两种产品每100公斤均可获利500元。乙产品较受欢迎,且若有个老顾客要求每日供应他乙种产品500公斤,问应如何安排生产计划? 16.市场上有n种资产si(i=1,2??n)可以选择,现用数额为M的相当大的资金作一个 时期的投资。这n种资产在这一时期内购买si的平均收益率为ri,风险损失率为qi,投资越分散,总的风险越小,总体风险可用投资的si中最大的一个风险来度量。 购买si时要付交易费,(费率 pi),当购买额不超过给定值ui时,交易费按购买ui计算。 另外,假定同期银行存款利率是r0,既无交易费又无风险。(r0=5%) 已知n=4时相关数据如下: sS 1 %) r(28 21 23 25 (%) q2.5 1.5 5.5 2.6 %) p(1 2 4.5 6.5 u(元)103 198 52 40 S2 S3 S4 试给该公司设计一种投资组合方案,即用给定达到资金M,有选择地购买若干种资产或存银行生息,使净收益尽可能大,使总体风险尽可能小。 基本假设: 1. 投资数额M相当大,为了便于计算,假设M=1; 2.投资越分散,总的风险越小; 3.总体风险用投资项目si中最大的一个风险来度量; 4.n种资产Si之间是相互独立的; 5.在投资的这一时期内, ri,pi,qi,r0为定值,不受意外因素影响; 6.净收益和总体风险只受 ri,pi,qi影响,不受其他因素干扰。 符号规定: Si ——第i种投资项目,如股票,债券 ri,pi,qi ----分别为Si的平均收益率,风险损失率,交易费率 ui ----Si的交易定额 r0 -------同期银行利率 xi -------投资项目Si的资金 a -----投资风险度 Q ----总体收益 ΔQ ----总体收益的增量 模型的建立与分析 1.总体风险用所投资的Si中最大的一个风险来衡量,即max{ qixi|i=1,2,?n} 2.购买Si所付交易费是一个分段函数,即 pixi xi>ui 交易费 = piui xi≤ui 而题目所给定的定值ui(单位:元)相对总投资M很小, piui更小, 可以忽略不计,这样购买Si的净收益为(ri-pi)xi 3.要使净收益尽可能大,总体风险尽可能小,这是一个多目标规划模型: 目标函数 MAX?(r?p)x iiii?0n MINmax{ qixi} 约束条件 ?(1?p)x=M iii?0n xi≥0 i=0,1,?n 模型简化: a. 在实际投资中,投资者承受风险的程度不一样,若给定风险一个界限a,使最大的一个 风险qixi/M≤a,可找到相应的投资方案。这样把多目标规划变成一个目标的线性规划。 模型1 固定风险水平,优化收益 目标函数: Q=MAX ?(r?p)xiii?1n?1i 约束条件: qixiM≤a ?(1?p)xii?M, xi≥ 0 i=0,1,?n b.若投资者希望总盈利至少达到水平k以上,在风险最小的情况下寻找相应的投资组合。 模型2 固定盈利水平,极小化风险 目标函数: R= min{max{ qixi}} 约束条件:?(ri?0ni?pi)xi≥k, ?(1?pi)xi?M , xi≥ 0 i=0,1,?n c.投资者在权衡资产风险和预期收益两方面时,希望选择一个令自己满意的投资组合。 因此对风险、收益赋予权重s(0<s≤1),s称为投资偏好系数. 模型3 目标函数:min s{max{qixi}} -(1-s) n?(r?p)xiii?0ni 约束条件 ?(1?p)x=M, x≥0 i=0,1,2,?n iii i?0试分别针对以上三个模型使用所学知识进行求解
正在阅读:
实验七最优化问题04-02
浅谈如何提高低段学生的口算能力12-29
专题三:高考数列综合与立体几何客观题举例(完整版)01-25
邓恩 圣十四行诗之1007-28
预制空心板开工报告(首件)07-06
合欢花开02-14
高中物理竞赛辅导资料三:运动的合成与分解 抛物运动08-11
情感稿子02-19
油气初加工基础知识06-14
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 最优化
- 实验
- 问题