目录前言一、MATLAB实现二、1三、LINDO在线性规划中的应用四、优化模型与LINGO五、课外习题
目 录 一、 前言 二、 MATLAB 实现 三、LINDO 在线性规划中的应用 四、优化模型与 LINGO 五、课外习题
一. 前言运筹学是近代应用数学的一个分支,主要是将生产、管理等事件中出现的一些带有普遍性的运筹问题加以提炼,然后利用数学方法进行解决。前者提供模型,后者提供理论和方法。通过实际问题加强学生建立运筹学模型能力的训练,培养学生运用运筹学分析问题及解决实际管理问题的能力,组织学生熟练掌握LinDo、LinGo、Matlab、等运筹学计算软件,并能对所得的结果进行分析及决策。实际问题中的优化模型:Min/Maxz-f(x), x-(x1,..,X.)s.g ;(x)≤0,i=1,2.,mXi,Xn≥0其中x~决策变量,Jx)~目标函数,gi(x)≤0~约束条件数学规划分类:线性规划(LP)二次规划(QP)非线性规划(NLP)连续规划整数规划(IP):0-1整数规划、一般整数规划、纯整数规划(PIP)、混合整数规划(MIIP)二、MATLAB实现2.1线性规划问题线性规划问题是目标函数和约束条件均为线性函数的问题,MATLAB解决的线性规划问题的标准形式为:min f'xXeR"sub.to:A-x<bAeq·x=beqlb≤x≤ub其中f、x、b、beq、lb、ub为向量,A、Aeq为矩阵。其它形式的线性规划问题都可经过适当变换化为此标准形式
一. 前言 运筹学是近代应用数学的一个分支,主要是将生产、管理等事件中出现的一些带 有普遍性的运筹问题加以提炼,然后利用数学方法进行解决。前者提供模型,后者提 供理论和方法。通过实际问题加强学生建立运筹学模型能力的训练,培养学生运用运筹学 分析问题及解决实际管理问题的能力,组织学生熟练掌握 LinDo、LinGo、Matlab、等运筹 学计算软件,并能对所得的结果进行分析及决策。 实际问题中的优化模型: Min/Max z=f(x), x=(x1,.,xn) T s.t. g i(x)≤0,i=1,2,.,m x1,.,xn≥0 其中 x~决策变量, f(x)~目标函数, gi(x) ≤0~约束条件 数学规划分类: 线性规划(LP) 二次规划(QP) 非线性规划(NLP) 连续规划 整数规划(IP):0-1 整数规划、一般整数规划、 纯整数规划(PIP)、混合整数规划(MIP) 二、MATLAB 实现 2.1 线性规划问题 线性规划问题是目标函数和约束条件均为线性函数的问题,MATLAB 解决的线性规划 问题的标准形式为: min n f′ x x ∈R sub.to: A ⋅ x ≤ b Aeq ⋅ x = beq lb ≤ x ≤ ub 其中 f、x、b、beq、lb、ub 为向量,A、Aeq 为矩阵。 其它形式的线性规划问题都可经过适当变换化为此标准形式
函数linprog格式x=linprog(f,A,b)%求minf*xsub.toA·x≤b线性规划的最优解。x=linprog(f,A,b,Aeq,beq)%等式约束Aeq·x=beq,若没有不等式约束A·x≤b,则A-[],b=[]。x=linprog(f,A,b,Aeq,beq,lb,ub)%指定x的范围lb≤x≤ub,若没有等式约束Aeq·x=beq,则Aeq=[],beq=[]x=linprog(f,A,b,Aeq,beq,lb,ub,x0)%设置初值xo%options为指定的优化参数x=linprog(f,A,b,Aeq,beq,lb,ub,x0,options)[x,fval]=linprog()%返回目标函数最优值,即fval=f*x。[xlambda,exitflag]=linprog()%lambda为解x的Lagrange乘子。[x,lambda,fval,exitflag]=linprog()%exitflag为终止选代的错误条件。[x,fval,lambda,exitlag,output]=linprog()%output为关于优化的一些信息说明若exitflag>0表示函数收敛于解x,exitflag=0表示超过函数估值或迭代的最大数字,exitflag<0表示函数不收敛于解x;若lambda=lower表示下界Ib,lambda=upper表示上界ub,lambda=ineqlin表示不等式约束,lambda=eqlin表示等式约束,lambda中的非0元素表示对应的约束是有效约束;output=iterations表示迭代次数,output=algorithm表示使用的运算规则,output=cgiterations表示PCG选代次数。例2.1求下面的优化问题min-5xl-4x2-6x3sub.toXI X2 + X3 ≤ 203x1 + 2x2 + 4x3 ≤423xj+2x2≤300≤xi,0≤x2,0≤x3解:>>f= [-5; -4; -6];>>A= [1-1 1;324;3 2 0];>>b =[20; 42; 30];>>Ib = zeros(3,1);
函数 linprog 格式 x = linprog(f,A,b) %求 min f ' *x sub.to A ⋅ x ≤ b 线性规划的最优解。 x = linprog(f,A,b,Aeq,beq) %等式约束 Aeq ⋅ x = beq ,若没有不等式约束 A ⋅ x ≤ b ,则 A=[ ],b=[ ]。 x = linprog(f,A,b,Aeq,beq,lb,ub) %指定 x 的范围lb ≤ x ≤ ub ,若没有等式约束 Aeq ⋅ x = beq ,则 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(.) % 返回目标函数最优值,即 fval= f ' *x。 [x,lambda,exitflag] = linprog(.) % lambda 为解 x 的 Lagrange 乘子。 [x, lambda,fval,exitflag] = linprog(.) % exitflag 为终止迭代的错误条件。 [x,fval, lambda,exitflag,output] = linprog(.) % output 为关于优化的一些信息 说明 若 exitflag>0 表示函数收敛于解 x,exitflag=0 表示超过函数估值或迭代的最大数 字,exitflag<0 表示函数不收敛于解 x;若 lambda=lower 表示下界 lb,lambda=upper 表示上 界 ub,lambda=ineqlin 表示不等式约束,lambda=eqlin 表示等式约束,lambda 中的非 0 元素 表示对应的约束是有效约束;output=iterations 表示迭代次数,output=algorithm 表示使用的 运算规则,output=cgiterations 表示 PCG 迭代次数。 例 2.1 求下面的优化问题 min − 5x1 − 4x2 − 6x3 sub.to 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,,[l,Ib)结果为:X=%最优解0.000015.00003.0000fval =%最优值-78.0000%收敛exitflag=1output =%选代次数iterations: 6cgiterations: 0%所使用规则algorithm:'lipsol'lambda =ineqlin: [3x1 double]eqlin: [Ox1 double]upper: [3x1 double]lower: [3x1 double]>> lambda.ineqlinans =0.00001.50000.5000>>lambda.lowerans =1.00000.00000.0000表明:不等约束条件2和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: '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 表明:不等约束条件 2 和 3 以及第 1 个下界是有效的
2.2非线性规划问题2.2.1有约束的一元函数的最小值单变量函数求最小值的标准形式为minf(x)sub.toXi<X<X2在MATLAB5.x中使用fimin函数求其最小值。函数fminbnd格式x=fminbnd(fun,x1,x2)%返回自变量x在区间xi<x<x2上函数fun取最小值时x值,fun为目标函数的表达式字符串或MATLAB自定义函数的函数柄。%options为指定优化参数选项x=fminbnd(fun,xl,x2,options)[x,fval]=fiminbnd()%fval为目标函数的最小值[x,fval,exitflag]=fiminbnd()%xitflag为终止选代的条件[xfval,exitlag,output]=fiminbnd()%output为优化信息说明若参数exitflag>0,表示函数收敛于x,若exitflag=0,表示超过函数估计值或迭代的最大数字,exitflag<0表示函数不收敛于x;若参数output=iterations表示迭代次数,output=funccount表示函数赋值次数,output=algorithm表示所使用的算法。例2.2计算下面函数在区间(0,1)内的最小值。x+cosx+xlogxf(x)=e解:>>[x,fval,exitflag,output)=fiminbnd((x^3+cos(x)+x*log(x)/exp(x),0,1)x=0.5223fval =0.3974exitflag=1output =iterations: 9funcCount:9algorithm:'golden section search,parabolic interpolation
2.2 非线性规划问题 2.2.1 有约束的一元函数的最小值 单变量函数求最小值的标准形式为 min f(x) x sub.to x1 < x < x2 在 MATLAB5.x 中使用 fmin 函数求其最小值。 函数 fminbnd 格式 x = fminbnd(fun,x1,x2) %返回自变量 x 在区间 x1 < x < x2 上函数 fun 取最小值 时 x 值,fun 为目标函数的表达式字符串或 MATLAB 自定义函数的函数柄。 x = fminbnd(fun,x1,x2,options) % options 为指定优化参数选项 [x,fval] = fminbnd(.) % fval 为目标函数的最小值 [x,fval,exitflag] = fminbnd(.) %xitflag 为终止迭代的条件 [x,fval,exitflag,output] = fminbnd(.) % output 为优化信息 说明 若参数 exitflag>0,表示函数收敛于 x,若 exitflag=0,表示超过函数估计值或迭 代的最大数字,exitflag<0 表示函数不收敛于 x;若参数 output=iterations 表示迭代次数, output=funccount 表示函数赋值次数,output=algorithm 表示所使用的算法。 例 2.2 计算下面函数在区间(0,1)内的最小值。 x 3 e x cos x x log x f(x) + + = 解:>> [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 section search, parabolic interpolation