Matlab中的matlab中fmincon函数数中的目标函数为什么会有输出变量太多的提示呢?

matlab fmincon最优化问题 怎么写条件使目标函数的输出值在实数范围?在nonlcon 里
-f=_作业帮
拍照搜题,秒出答案
matlab fmincon最优化问题 怎么写条件使目标函数的输出值在实数范围?在nonlcon 里
matlab fmincon最优化问题 怎么写条件使目标函数的输出值在实数范围?在nonlcon 里
不可以,应改写成f=-。。。MATLAB 优化应用§1 线性规划模型一、线性规划课题:实例 1:生产计划问题 假设某厂计划生产甲、乙两种产品,现库存主要材料有 A 类 3600 公斤,B 类 2000 公斤,C 类 3000 公斤。每件甲产品需用材料 A 类 9 公斤,B 类 4 公斤,C 类 3 公斤。每件乙产品,需用材料 A 类 4 公 斤,B 类 5 公斤,C 类 10 公斤。
甲单位产品的利润 70 元,乙单位产品的利润 120 元。问如何安排生产, 才能使该厂所获的利润最大。 建立数学模型: 设 x1、x2 分别为生产甲、乙产品的件数。f 为该厂所获总润。 max f=70x1+120x2 s.t 9x1+4x2≤+5x2≤+10x2≤≥0 实例 2:投资问题 某公司有一批资金用于 4 个工程项目的投资,其投资各项目时所得的净收益(投入资金锪百分比)如 下表: 工程项目收益表 工程项目 收益(%) A 15 B 10 C 8 D 12由于某种原因,决定用于项目 A 的投资不大于其他各项投资之和而用于项目 B 和 C 的投资要大于 项目 D 的投资。试确定全文该公司收益最大的投资分配方案。 建立数学模型: 设 x1、 x2 、x3 、x4 分别代表用于项目 A、B、C、D 的投资百分数。 max f=0.15x1+0.1x2+0.08 x3+0.12 x4 s.t x1-x2- x3- x4≤0 x2+ x3- x4≥0 x1+x2+x3+ x4=1 xj≥0 j=1,2,3,4 实例 3:运输问题 有 A、B、C 三个食品加工厂,负责供给甲、乙、丙、丁四个市场。三个厂每天生产食品箱数上限 如下表: 工厂 生产数 四个市场每天的需求量如下表: A 60 B 40 C 50 市场 需求量甲 20乙 35丙 33 市 场丁 34从各厂运到各市场的运输费(元/每箱)由下表给出: 甲 工 厂 A B C 2 1 3 乙 1 3 4 丙 3 2 1 丁 2 1 1求在基本满足供需平衡的约束条件下使总运输费用最小。 建立数学模型: 设 ai j 为由工厂 i 运到市场 j 的费用,xi j 是由工厂 i 运到市场 j 的箱数。bi 是工厂 i 的产量,dj 是市 场 j 的需求量。b= ( 60 40 50 ) d= ( 20 35 33 34 )s.tx i j≥0 当我们用 MATLAB 软件作优化问题时,所有求 maxf 的问题化为求 min(-f )来作。约束 g i (x)≥0, 化为 Cg i≤0 来作。 上述实例去掉实际背景,归结出规划问题:目标函数和约束条件都是变量 x 的线性函数。 形如: (1) min f T X s.t A X≤b Aeq X =beq lb≤X≤ub 其中 X 为 n 维未知向量,f T=[f1,f2,…fn]为目标函数系数向量,小于等于约束系数矩阵 A 为 m×n 矩 阵,b 为其右端 m 维列向量,Aeq 为等式约束系数矩阵,beq 为等式约束右端常数列向量。lb,ub 为自变 量取值上界与下界约束的 n 维常数向量。二.线性规划问题求最优解函数:调用格式: 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) 作有等式约束的问题。若没有不等式约束,则令 A=[ ]、b=[ ] 。 x=linprog(f,A,b,Aeq,beq,lb,ub,x0,options) 中 lb ,ub 为变量 x 的下界和上界,x0 为初值点,options 为 指定优化参数进行最小化。 Options 的参数描述: Display 显示水平。 选择’off’ 不显示输出;选择’iter’显示每一 步迭代过程的输出;选择’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 的线性等式。三. 举例例 1:求解线性规划问题: max f=2x1+5x2s.t 先将目标函数转化成最小值问题:min(-f)=- 2x1-5x2 程序: f=[-2 -5]; A=[1 0;0 1;1 2]; b=[4;3;8]; [x,fval]=linprog(f,A,b) f=fval*(-1) 结果: x = 2 3 fval = -19.0000 maxf = 19 例 2:minf=5x1-x2+2x3+3x4-8x5 s.t C2x1+x2-x3+x4-3x5≤6 2x1+x2-x3+4x4+x5≤7 0≤xj≤15 j=1,2,3,4,5 程序: f=[5 -1 2 3 -8]; A=[-2 1 -1 1 -3;2 1 -1 4 1]; b=[6;7]; lb=[0 0 0 0 0]; ub=[15 15 15 15 15]; [x,fval]=linprog(f,A,b,[],[],lb,ub) 结果:x = 0.0 8.0 15.0000 minf = -104 例 3:求解线性规划问题: minf=5x1+x2+2x3+3x4+x5 s.t C2x1+x2-x3+x4-3x5≤1 2x1+3x2-x3+2x4+x5≤-2 0≤xj≤1 j=1,2,3,4,5 程序: f=[5 1 2 3 1]; A=[-2 1 -1 1 -3;2 3 -1 2 1]; b=[1;-2]; lb=[0 0 0 0 0]; ub=[1 1 1 1 1]; [x,fval,exitflag,output,lambda]=linprog(f,A,b,[],[],lb,ub) Exiting: One or more of the residuals, duality gap, or total relative error has grown 100000 times greater than its minimum value so far: the primal appears to be infeasible (and the dual unbounded). (The dual residual & TolFun=1.00e-008.) x = 0.0 1.0 0.0000运行结果: fval = 2.3975 exitflag = -1 output = iterations: 7 cgiterations: 0 algorithm: 'lipsol' lambda = ineqlin: [2x1 double] eqlin: [0x1 double] upper: [5x1 double] lower: [5x1 double] 显示的信息表明该问题无可行解。所给出的是对约束破坏最小的解。 例 4:求解实例 1 的生产计划问题 建立数学模型: 设 x1、x2 分别为生产甲、乙产品的件数。f 为该厂所获总润。 max f=70x1+120x2 s.t 9x1+4x2≤+5x2≤+10x2≤≥0 将其转换为标准形式: min f=-70x1-120x2 s.t 9x1+4x2≤+5x2≤+10x2≤≥0 程序: f=[-70 -120]; A=[9 4 ;4 5;3 10 ]; b=[00]; lb=[0 0]; ub=[]; [x,fval,exitflag]=linprog(f,A,b,[],[],lb,ub) maxf=-fval 结果: x = 200.0 fval = -4. exitflag = 1 maxf = 4. 例 5:求解实例 2 建立数学模型: max f=0.15x1+0.1x2+0.08 x3+0.12 x4 s.t x1-x2- x3- x4≤0 x2+ x3- x4≥0 x1+x2+x3+ x4=1 xj≥0 j=1,2,3,4 将其转换为标准形式: min z=-0.15x1-0.1x2-0.08 x3-0.12 x4 s.t x1-x2- x3- x4≤0 -x2- x3+ x4≤0 x1+x2+x3+ x4=1 xj≥0 j=1,2,3,4 程序: f = [-0.15;-0.1;-0.08;-0.12]; A = [1 -1 -1 -1 0 -1 -1 1]; b = [0; 0]; Aeq=[1 1 1 1]; beq=[1]; lb = zeros(4,1); [x,fval,exitflag] = linprog(f,A,b,Aeq,beq,lb) f=-fval 结果:x = 0.0 0.0 fval = -0.1300 exitflag = 1 f= 0.1300 即 4 个项目的投资百分数分别为 50%,25%,0, 25%时可使该公司获得最大的收益,其最大收益可 到达 13%。过程正常收敛。 例 6:求解实例 3 建立数学模型: 设 ai j 为由工厂 i 运到市场 j 的费用,xi j 是由工厂 i 运到市场 j 的箱数。bi 是工厂 i 的产量,dj 是市 场 j 的需求量。 b= ( 60 40 50 )T d= ( 20 35 33 34 )Ts.tx i j≥0 程序: A=[2 1 3 2;1 3 2 1;3 4 1 1]; f=A(:); B=[ 1 0 0 1 0 0 1 0 0 1 0 0
0 0 1 0 0 1 0 0 1 0 0 1]; D=[1 1 1 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1 1 1]; b=[60;40;50]; d=[20;35;33;34]; lb=zeros(12,1); [x,fval,exitflag]=linprog(f,B,b,D,d,lb) 结果: x = 0.0 0.0 0.0 0.0 33.0 18.8 fval = 122.0000 exitflag = 1 即运输方案为:甲市场的货由 B 厂送 20 箱;乙市场的货由 A 厂送 35 箱;丙商场的货由 C 厂送 33 箱;丁市场的货由 B 厂送 18 箱,再由 C 厂送 16 箱。 最低总运费为:122 元。 §2 非线性规划模型一.非线性规划课题实例 1 表面积为 36 平方米的最大长方体体积。 建立数学模型: 设 x、y、z 分别为长方体的三个棱长,f 为长方体体积。 max f = x y (36-2 x y)/2 (x+y) 实例 2 投资决策问题 某公司准备用 5000 万元用于 A、B 两个项目的投资,设 x1、x2 分别表示配给项目 A、B 的投资。 预计项目 A、B 的年收益分别为 20%和 16%。同时,投资后总的风险损失将随着总投资和单位投资的增 加而增加,已知总的风险损失为 2x12+x22+(x1+x2)2.问应如何分配资金,才能使期望的收益最大,同时使 风险损失为最小。 建立数学模型: max f=20x1+16x2-λ [2x12+x22+(x1+x2)2] s.t x1+x2≤5000 x 1≥0,x2≥0 目标函数中的λ ≥0 是权重系数。 由以上实例去掉实际背景,其目标函数与约束条件至少有一处是非线性的,称其为非线性问题。 非线性规划问题可分为无约束问题和有约束问题。实例 1 为无约束问题,实例 2 为有约束问题。二.无约束非线性规划问题:求解无约束最优化问题的方法主要有两类:直接搜索法(Search method)和梯度法(Gradient method). 1.fminunc 函数 调用格式: 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(…) 说明:fun 为需最小化的目标函数,x0 为给定的搜索的初始点。options 指定优化参数。 返回的 x 为最优解向量;fval 为 x 处的目标函数值;exitflag 描述函数的输出条件;output 返回优化 信息;grad 返回目标函数在 x 处的梯度。Hessian 返回在 x 处目标函数的 Hessian 矩阵信息。 例1:求 程序:编辑 ff1.m 文件 function f=ff1(x) f=8*x(1)-4*x(2) +x(1)^2+3*x(2)^2; 通过绘图确定一个初始点: [x,y]=meshgrid(-10:.5:10); z= 8*x-4*y +x.^2+3*y.^2; surf(x,y,z)选初始点:x0=(0,0) x0=[0,0]; [x,fval,exitflag]=fminunc(@ff1,x0) 结果:x = -4.7 fval = -17.3333 exitflag = 1 例 2: 程序:编辑 ff2.m 文件: function f=ff2(x) f=4*x(1)^2+5*x(1)*x(2)+2*x(2)^2; 取初始点:x0=(1,1) x0=[1,1]; [x,fval,exitflag]=fminunc(@ff2,x0) 结果: x = 1.0e-007 * -0.6 fval = 2. exitflag = 1 例 3:将上例用提供的梯度 g 最小化函数进行优化计算。 修改 M 文件为: function [f,g]=ff3(x) f=4*x(1)^2+5*x(1)*x(2)+2*x(2)^2; if nargut &1 g(1)=8*x(1)+5*x(2); g(2)=5*x(1)+4*x(2); end 通过下面将优化选项结构 options.GradObj 设置为’on’来得到梯度值。 options=optimset(‘Gradobj’,’on’); x0=[1,1]; [x,fval,exitflag]=fminunc(@ff3,x0,options) 结果: x = 1.0e-015 * -0.0 fval = 5. exitflag = 1 2. minsearch 函数 调用格式: 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(…) [x,fval, exitflag,output,grad]=fminsearch(…) [x,fval, exitflag,output,grad,hessian]=fminsearch(…) 说明: 参数及返回变量同上一函数。 对求解二次以上的问题, fminsearch 函数比 fminunc 函数有效。 3. 多元非线性最小二乘问题: 非线线性最小二乘问题的数学模型为:其中 L 为常数。 调用格式: x=lsqnonlin(fun,x0) x=lsqnonlin(fun,x0,lb,ub) x=lsqnonlin(fun,x0,options) x=lsqnonlin(fun,x0,options,P1,P2) [x,resnorm]=lsqnonlin(…) [x,resnorm, residual,exitflag]=lsqnonlin(…) [x,resnorm, residual , exitflag,output]=lsqnonlin(…) [x,resnorm, residual,exitflag, output,lambda]=lsqnonlin(…) [x,resnorm, r esidual,exitflag, output,lambda,jacobian]=lsqnonlin(…) 说明:x 返回解向量;resnorm 返回 x 处残差的平方范数值:sum(fun(x).^2);residual 返回 x 处的残 差值 fun(x);lambda 返回包含 x 处拉格朗日乘子的结构参数;jacobian 返回解 x 处的 fun 函数的雅可比 矩阵。 lsqnonlin 默认时选择大型优化算法。 Lsqnonlin 通过将 options.LargeScale 设置为’off’来作中型优化 算法。其采用一维搜索法。 例 4.求 minf=4(x2-x1)2+(x2-4)2 ,选择初始点 x0(1,1) 程序: f ='4*(x(2)-x(1))^2+(x(2)-4)^2' [x,reshorm]=lsqnonlin(f,[1,1]) 结果: x = 3.2 reshorm = 5.例 5:求 求解:先编辑 ff5.m 文件: function f=ff5(x) k=1:10; f=2+2*k-exp(k*x(1))-exp(k*x(2)); 然后作程序:x0=[0.2,0.3]; [x,resnorm]=lsqnonlin(@ff5,x0) 结果 : x = 0.8 resnorm = 124.3622,选择初始点 x0(0.2,0.3)二. 有约束非线性规划问题:数学模型: min F(x) s.t Gi (x) ≤0 i=1,…,m Gj (x) =0 j=m+1,…,n xl≤x≤xu 其中:F(x)为多元实值函数,G(x)为向量值函数, 在有约束非线性规划问题中, 通常要将该问题转换为更简单的子问题, 这些子问题可以求并作为迭 代过程的基础。其基于 K-T 方程解的方法。它的 K-T 方程可表达为:方程第一行描述了目标函数和约束条件在解处梯度的取消。由于梯度取消,需要用拉格朗日乘子λ i 来平衡目标函数与约束梯度间大小的差异。 调用格式: x=fmincon(f,x0,A,b) x=fmincon(f,x0,A,b,Aeq,beq) x=fmincon(f,x0,A,b,Aeq,beq,lb,ub) x=fmincon(f,x0,A,b,Aeq,beq,lb,ub,nonlcon) x=fmincon(f,x0,A,b,Aeq,beq,lb,ub,nonlcon,options) [x,fval]=fmincon(…) [x, fval, exitflag]=fmincon(…) [x, fval, exitflag, output]=fmincon(…) [x, fval, exitflag, output, lambda]=fmincon(…) 说明:x=fmincon(f,x0,A,b)返回值 x 为最优解向量。其中:x0 为初始点。A,b 为不等式约束的系数 矩阵和右端列向量。 x=fmincon(f,x0,A,b,Aeq,beq) 作有等式约束的问题。若没有不等式约束,则令 A=[ ]、b=[ ] 。 x=fmincon(f, x0,A,b,Aeq,beq,lb,ub, nonlcon ,options) 中 lb ,ub 为变量 x 的下界和上界; nonlcon=@fun, 由 M 文件 fun.m 给定非线性不等式约束 c (x) ≤0 和等式约束 g(x)=0; options 为指定优化参数进行最小 化。 例 6:求解:min 100(x2-x12 )2+(1-x1)2 s.t x1≤2; x2≤2 程序:首先建立 ff6.m 文件: function f=ff6(x) f=100*(x(2)-x(2)^2)^2+(1-x(1))^2; 然后在工作空间键入程序: x0=[1.1,1.1]; A=[1 0;0 1]; b=[2;2]; [x,fval]=fmincon(@ff6,x0,A,b) 结果: x = 1.0 fval = 3. 例 7:求解:首先建立目标函数文件 ff7.m 文件: function f=ff7(x) f=-x(1)*x(2)*x(3) 然后将约束条件改写成如下不等式: -x1-2x2-2x3≤0 x1+2x2+2x3≤72 在工作空间键入程序: A=[-1 C2 C2;1 2 2]; b=[0;72]; x0=[10;10;10]; [x,fval]=fmincon(@ff71,x0,A,b) 结果: x = 24.0 12.0000 fval = -3456 例 8 求解:minf=ex1(6x12+3x22+2x1x2+4x2+1) s.t x1x2-x1-x2+1≤0 -2x1x2-5≤0 程序:首先建立目标函数文件 ff8.m 文件: function f=ff8(x) f=exp(x(1))*(6*x(1)^2+3*x(2)^2+2*x(1)*x(2)+4*x(2)+1); 再建立非线性的约束条件文件:ff8g.m function [c,g]=ff8g(x) c(1)=x(1)*x(2)-x(1)-x(2)+1; c(2)=-2*x(1)*x(2)-5; g=[]; 然后在工作空间键入程序: x0=[1,1]; nonlcon=@ff8g [x, fval] =fmincon(@ff8,x0,[],[],[],[],[],[], nonlcon) 结果: x = -2.0 fval = 3.3244 exitflag = 1 当有等式约束时,要放在矩阵 g 的位置,如上例中加等式约束: x(1)+2*x(1)=0 程序:首先建立 fun1.m 文件: function[c,g]=ff8g1(x) c(1)=x(1)*x(2)-x(1)-x(2)+1; c(2)=-2*x(1)*x(2)-5; g(1)=x(1)+2*x(2); 然后在工作空间键入程序: x0=[-1,1]; nonlcon=@ff8g1; [x, fval,exitflag] =fmincon(@ff8,x0,[],[],[],[],[],[], nonlcon) 结果: x = -2.0 fval = 3.6576 exitflag = 1 §3 二次规划模型数学模型:其中 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,fval]= quadprog(…) [x,fval,exitflag]= quadprog(…) [x,fval,exitflag,output]= quadprog(…) [x,fval,exitflag,output,lambda]= quadprog(…) 说明:输入参数中,x0 为初始点;若无等式约束或无不等式约束,就将相应的矩阵和向量设置为 空;options 为指定优化参数。输出 参数中,x 是返回最优解;fval 是返回解所对应的目标函数值; exitflag 是描述搜索是否收敛;output 是返回包含优化信息的结构。Lambda 是返回解 x 入包含拉格朗 日乘子的参数。 例 1:求解:二次规划问题 2 2 min f(x)= x1-3x2+3x1 +4x2 -2x1x2 s.t 2x1+x2≤2 -x1+4x2≤3 程序: f=[1;-3] H=[6 -2;-2 8] A=[2 1;-1 4] b=[2;3] [X,fval,exitflag]=quadprog(H,f,A,b) 结果: X = -0.6 fval = -0.5682 exitflag = 1 例 2:求解:二次规划问题 2 2 min +x1 +2x2 -2x1x2-4x1-12x2 s.t x1+x2≤2 -x1+2x2≤2 2x1+x2≤3 0≤x1, 0≤x2 程序: H=[2 -2;-2 4]; f=[-4;-12]; A=[1 1;-1 2;2 1]; b=[2;2;3]; lb=zeros(2,1); [x,fval,exitflag]=quadprog(H,f,A,b,[],[],lb) 结果: x = 0.3 fval = -16.4444 exitflag = 1§4 多目标规划模型多目标规划定义为在一组约束下,多个不同的目标函数进行优化设计。 数学模型:s.t gj (x) ≤0 j=1, 2, … ,k 其中 x=(x1 ,x2 , … ,xn)为一个 n 维向量;fi(x)为目标函数,i=1, 2, … ,m; gj (x)为系统约束, j=1, 2, … ,k。 当目标函数处于冲突状态时, 不存在最优解使所有目标函数同时达到最优。 于是我们寻求有效解(又 称非劣解或非支配解或帕累托解) 定义:若 ( ∈Ω )的邻域内不存在Δ x,使得( +Δ x∈Ω ),且则称为有效解。多目标规划问题的几种常用解法: (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) C0.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=[] 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.7 fval = -1. exitflag = 1 f1 = 4. f2 = 2. (3) 极大极小法 其基本思想是:对于极小化的多目标规划,让其中最大的目标函数值尽可能地小为此,对每个 x ∈R,我们先求诸目标函数值 fi(x)的最大值,然后再求这些最大值中的最小值。即构造单目标规划:(4) 目标达到法 对于多目标规划: s.t gj (x) ≤0 j=1, 2, … ,n , 为权值系数向量。先设计与目标函数相应的一组目标值理想化向量 再设γ 为一松弛因子标量。设 于是多目标规划问题化为:在 Matlab 的优化工具箱中,fgoalattain 函数用于解决此类问题。 其数学模型形式为: min γ 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)为函数, 调用格式: x=fgoalattain(F,x0,goal,weight) x=fgoalattain(F,x0,goal,weight,A,b) x=fgoalattain(F,x0,goal,weight,A,b,Aeq,beq) x=fgoalattain(F,x0,goal,weight,A,b,Aeq,beq,lb,ub) x=fgoalattain(F,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon) x=fgoalattain(F,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon,options) x=fgoalattain(F,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon,options,P1,P2) [x,fval]=fgoalattain(…) [x,fval,attainfactor]=fgoalattain(…) [x,fval,attainfactor,exitflag,output]=fgoalattain(…) [x,fval,attainfactor,exitflag,output,lambda]=fgoalattain(…) 说明:F 为目标函数;x0 为初值;goal 为 F 达到的指定目标;weight 为参数指定权重;A、b 为线 性不等式约束的矩阵与向量;Aeq、beq 为等式约束的矩阵与向量;lb、ub 为变量 x 的上、下界向量; nonlcon 为定义非线性不等式约束函数 c(x)和等式约束函数 ceq(x);options 中设置优化参数。 x 返回最优解;fval 返回解 x 处的目标函数值;attainfactor 返回解 x 处的目标达到因子;exitflag 描 述计算的退出条件;output 返回包含优化信息的输出参数;lambda 返回包含拉格朗日乘子的参数。 例 2:某化工厂拟生产两种新产品 A 和 B,其生产设备费用分别为 2 万元/吨和 5 万元/吨。这两种 产品均将造成环境污染,设由公害所造成的损失可折算为 A 为 4 万元/吨,B 为 1 万元/吨。由于条件限 制, 工厂生产产品 A 和 B 的最大生产能力各为每月 5 吨和 6 吨, 而市场需要这两种产品的总量每月不少 于 7 吨。试问工厂如何安排生产计划,在满足市场需要的前提下,使设备投资和公害损失均达最小。该 工厂决策认为,这两个目标中环境污染应优先考虑,设备投资的目标值为 20 万元,公害损失的目标为 12 万元。 建立数学模型: 设工厂每月生产产品 A 为 x1 吨, 为 x2 吨, B 设备投资费为 f(x1),公害损失费为 f(x2),则问题表达为 多目标优化问题: min f1(x)=2x1+5x2 min f2(x)=4x1+x2 s.t x1≤5 x2≤6 x1+x2≥7 x1 ,x2≥0 程序:首先编辑目标函数 M 文件 ff12.m function f=ff12(x) f(1)=2*x(1)+5*x(2); f(2)= 4*x(1) +x(2); 按给定目标取: goal=[20,12]; weight=[20,12]; x0=[2,2] A=[1 0; 0 1;-1 -1]; b=[5 6 -7]; lb=zeros(2,1); [x,fval,attainfactor,exitflag]=fgoalattain(@ff12,x0,goal,weight,A,b,[],[],lb,[]) 结果: x = 2.3 fval = 26.0 attainfactor = 0.3125 exitflag = 1 例 3:某工厂生产两种产品甲和乙,已知生产甲产品 100 公斤需 6 个工时,生产乙产品 100 公斤需 8 个工时。假定每日可用的工时数为 48 工时。这两种产品每 100 公斤均可获利 500 元。乙产品较受欢 迎,且若有个老顾客要求每日供应他乙种产品 500 公斤,问应如何安排生产计划? 建立数学模型: 设生产甲、乙两种产品的数量分别为 x 和 x(以公斤计),要使生产计划比较合理,应考虑用工时尽 量少,获利尽量大, 其用多目标规划描述这: min f1=6x1+8x2 max f2=100(x1+x2) max f3=x2 s.t 6x1+8x2≤48 x2≥5 x1 ,x2≥0 将其标准化为: min f1=6x1+8x2 min - f2=-100(x1+x2) min - f3=-x2 s.t 6x1+8x2≤48 -x2≤-5 x1 ,x2≥0 程序:首先编辑目标函数 M 文件 ff13.m function f=ff13(x) f(1)=6*x(1)+8*x(2); f(2)= -100*(x(1) +x(2)); f(3)=-x(2); 按给定目标取: goal=[48 -1000 -5]; weight=[48 -1000 -5]; x0=[2 2]; A=[6 8; 0 -1]; b=[48 -5]; lb=zeros(2,1); [x,fval,attainfactor,exitflag]=fgoalattain(@ff13,x0,goal,weight,A,b,[],[],lb,[]) 结果: x = 1.0 fval = 48.33 -5.0000 attainfactor = 1. exitflag = 1 即生产计划为每日生产甲产品 133.33 公斤,生产乙产品 500 公斤。§5最大最小化模型基本思想:在对策论中,我们常遇到这样的问题:在最不利的条件下,寻求最有利的策略。在实际 问题中也有许多求最大值的最小化问题。 例如急救中心选址问题就是要规划其到所有地点最大距离的最 小值。在投资规划中要确定最大风险的最低限度等等。为此,对每个 x∈R,我们先求诸目标值 fi(x)的 最大值,然后再求这些最大值中的最小值。 最大最小化问题的数学模型: 求解最大最小化问题的函数为 fmininax 调用格式: x=fminimax(F,x0,) x=fminimax(F,x0,,A,b) x=fminimax(F,x0,,A,b,Aeq,beq) x=fminimax(F,x0,,A,b,Aeq,beq,lb,ub) x=fminimax(F,x0,,A,b,Aeq,beq,lb,ub,nonlcon) x=fminimax(F,x0,,A,b,Aeq,beq,lb,ub,nonlcon,options) x=fminimax(F,x0,,A,b,Aeq,beq,lb,ub,nonlcon,options,P1,P2) [x,fval]=fminimax(…) [x,fval,maxfval]=fminimax(…) [x,fval,maxfval,exitflag,output]=fminimax(…) [x,fval,maxfval,exitflag,output,lambda]=fminimax(…) 说明:F 为目标函数;x0 为初值; A、b 为线性不等式约束的矩阵与向量;Aeq、beq 为等式约束 的矩阵与向量;lb、ub 为变量 x 的上、下界向量;nonlcon 为定义非线性不等式约束函数 c(x)和等式约 束函数 ceq(x);options 中设置优化参数。 x 返回最优解;fval 返回解 x 处的目标函数值;maxfval 返回解 x 处的最大函数值;exitflag 描述计 算的退出条件;output 返回包含优化信息的输出参数;lambda 返回包含拉格朗日乘子的参数。 例 1 求解下列最大最小值问题:首先编辑 M 文件 ff14.m function f=ff14(x) f(1)=3*x(1)^2+2*x(2)^2-12*x(1)+35; f(2)=5*x(1)*x(2)-4*x(2)+7; f(3)=x(1)^2+6*x(2); f(4)=4*x(1)^2+9*x(2)^2-12*x(1)*x(2)+20; 取初值 x0=(1,1)调用优化函数 x0=[1 1]; [x,fval]=fminimax(@ff14,x0) 结果:x = 1.7 fval = 23.1 6.1 例 2:选址问题 设某城市有某种物品的 10 个需求点,第 i 个需求点 Pi 的坐标为(ai,bi),道路网与坐标轴平行,彼此正 交。现打算建一个该物品的供应中心,且由于受到城市某些条件的限制,该供应中心只能设在 x 界于 [5,8],y 界于[5.8]的范围之内。问该中心应建在何处为好? P 点的坐标为: ai bi 1 2 4 10 3 8 5 18 9 1 12 4 6 5 20 10 17 8 8 9建立数学模型: 设供应中心的位置为(x,y),要求它到最远需求点的距离尽可能小,此处采用沿道路行走计算距离, 可知每个用户点 Pi 到该中心的距离为 |x-ai|+|y-bi|,于是有:编程:首先编辑 M 文件:ff15.m function f = ff15(x) a=[1 4 3 5 9 12 6 20 17 8]; b=[2 10 8 18 1 4 5 10 8 9]; f(1) = abs(x(1)-a(1))+abs(x(2)-b(1)); f(2) = abs(x(1)-a(2))+abs(x(2)-b(2)); f(3) = abs(x(1)-a(3))+abs(x(2)-b(3)); f(4) = abs(x(1)-a(4))+abs(x(2)-b(4)); f(5) = abs(x(1)-a(5))+abs(x(2)-b(5)); f(6) = abs(x(1)-a(6))+abs(x(2)-b(6)); f(7) = abs(x(1)-a(7))+abs(x(2)-b(7)); f(8) = abs(x(1)-a(8))+abs(x(2)-b(8)); f(9) = abs(x(1)-a(9))+abs(x(2)-b(9)); f(10) = abs(x(1)-a(10))+abs(x(2)-b(10)); 然后 用以下程序计算 : x0 = [6; 6]; AA=[-1 0 1 0 0 -1 0 1]; bb=[-5;8;-5;8]; [x,fval] = fminimax(@ff15,x0,AA,bb) 结果: x = 8 8 fval = 13 6 5 13 8 8 5 14 9 1 即:在坐标为(8,8)处设置供应中心可以使该点到各需求点的最大距离最小,最小的最大距离为 14 单位。
Matlab中求函数的最小值―汇集和整理大量word文档,专业文献,应用文书,考试资料,教学教材,办公文档,教程攻略,文档搜索下载下载,拥有海量中文文档库,关注高价值的实用信息,我们一直在努力,争取提供更多下载资源。}

我要回帖

更多关于 matlab 函数 全局变量 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信