文档描述
1q学习目标q工业原料的合理利用问题q0-1线性规划q多目标规划q重点与难点q0-1线性规划q多目标规划23q以使用的原料钢筋数目最少为目标以使用的原料钢筋数目最少为目标,列出以下目标函数,列出以下目标函数1和约束条件和约束条件1.c=ones(8,1);A=-2-1-1-1 0 0 0 0;0-2-1 0-3-2-1 0;-1 0-1-3 0-2-3-4;b=-100;-100;-100;Aeq=;beq=;lb=zeros(8,1);ub=;x0=;%结果为整数的关键设置options=optimset(LargeScale,off,Simplex,on);x,fval,v=linprog(c,A,b,Aeq,beq,lb,ub,x0,options)left=sum(x.*0.1;0.3;0.9;0;1.1;0.2;0.8;1)x=10;50;0;30;0;0;0;0;fval=90left=16该工厂需使用10份A方案(将7.4米钢筋切 成2根2.9米钢筋与1根1.5米钢筋)、50份B方案(将7.4米钢筋切 成1根2.9米钢筋与2根2.1米钢筋)、30份D方案(将7.4米钢筋切 成1根2.9米钢筋与3根1.5米钢筋)可在资源限定条件下(生产三种钢筋至少各100根且每根原材料为7.4米),使用最少的7.4米钢筋数量,即90根,剩余钢筋长度16米。4q以使用的原料钢筋所剩料头最少为目标,以使用的原料钢筋所剩料头最少为目标,列出以下目标函数列出以下目标函数2和约束条件和约束条件2.c=0.1;0.3;0.9;0;1.1;0.2;0.8;1.4;A=;b=;Aeq=2 1 1 1 0 0 0 0;0 2 1 0 3 2 1 0;1 0 1 3 0 2 3 4;beq=100;100;100;lb=zeros(8,1);ub=;x0=;options=optimset(LargeScale,off,Simplex,on);x,fval,v=linprog(c,A,b,Aeq,beq,lb,ub,x0,options)NumOfX=sum(x)x=10;50;0;30;0;0;0;0;fval=16NumOfX=90该工厂需使用10份A方案、50份B方案、30份D方案可在资源限定条件下(生产三种钢筋至少各100根且每根原材料为7.4米),剩下料头长度最少即16米,这样需要原料7.4米钢筋90根。5q以使用的原料钢筋最少为目标,以使用的原料钢筋最少为目标,列出以下目标函数列出以下目标函数3和约束条件和约束条件3.c=ones(8,1);A=;b=;Aeq=2 1 1 1 0 0 0 0;0 2 1 0 3 2 1 0;1 0 1 3 0 2 3 4;beq=100;100;100;lb=zeros(8,1);ub=;x0=;options=optimset(LargeScale,off,Simplex,on);x,fval,v=linprog(c,A,b,Aeq,beq,lb,ub,x0,options)left=sum(x.*0.1;0.3;0.9;0;1.1;0.2;0.8;1)x=40;20;0;0;0;30;0;0;fval=90left=16该工厂需使用40份A方案、20份B方案、30份F方案可在资源限定条件下(生产三种钢筋至少各100根且每根原材料为7.4米),使用最少的7.4米钢筋数量,即90根,剩余钢筋长度16米。q每个决策变量的取值只能为0或1的规划问题称为0-1规划。qMATLAB2010中有bintprog函数。q函数调用:x,fval,exitflag,output=bintprog(c,A,b,Aeq,beq,x0,options)qMATLAB2014中有intlinprog函数,可以解决待求未知量中包含整数的线性规划问题,也可以解决0-1线性规划问题。q调用形式:x,fval,exitflag,output=intlinprog(c,intcon,A,b,Aeq,beq,lb,ub,options)qintcon可以是整数,也可以是向量,用于定义x中哪些位置上的元素是整数。其余参数与bintprog函数的参数含义一致。q输入参数:qc:目标函数系数向量,不可缺省输入变量qA:不等式约束系数矩阵qb:不等式约束限制向量qAeq:等式约束系数矩阵qbeq:等式约束限制向量qx0:决策变量初始值。单纯形法不需要初始点。qoptions:优化参数设置项,其调用格式是(其设置格式见8.2节)qoptions=optimset(param1,value1,param2,value2,)qoptions=optimset(LargeScale,off,Simple,on)表示关闭大规模,选择单纯形法。如果需要决策变量是整数,需要这样设置。6q输出参数:qx:最优方案(或者迭代结束时的方案),不可缺省输出变量qfval:最优值(或者迭代结束时的目标值),不可缺省输出变量qexitflag:迭代停止标识q1:算法收敛于解:算法收敛于解x,x是线性规划的最优解;是线性规划的最优解;q0:算法达到最大迭代次数,:算法达到最大迭代次数,x不一定是线性规划最优解;不一定是线性规划最优解;q-2:算法没有找到可行解,即算法求解失败,问题可行解集合为空;q-3:原问题无解,即最优解可能为正(负)无穷大;q-4:在算法中出现除0问题或其他问题导致变量中出现非数值;q-5:线性规划原问题与对偶解都不可解;q-7:可行搜索方向向量太小,无法再提高最优解质量。qoutput:算法计算信息输出qAlgorithm:计算时使用的优化算法qCgiterations:共轭梯度迭代次数(仅在大规模算法时有)qInterations:迭代次数;qExit message:返回结束信息。7q求公式的最优解,程序见sample9_2_1.m。%sample9_2_1.mc=-3,-2,-4;intcon=3;A=1,1,1;b=7;Aeq=4,2,1;beq=15;lb=0,0,0;ub=Inf,Inf,Infx f=intlinprog(c,intcon,A,b,Aeq,beq,lb,ub)程序sample9_2_1.m的运行结果如下:LP:Optimal objective value is-25.333333.Optimal solution found.x=2.5000 0.5000 4.0000 f=-24.5000q如果不追求整数解,本题目标函数的最优解是-25.333333。如果要求 一定是整数,则可以找到一个满足约束的解,即x=2.5000 0.5000 4.0000,最优解f=-24.5000。8q求公式(9.6)的最优解,程序见sample9_2_2.m。sample9_2_2.mc=-3,-2,-1;intcon=3;A=1,1,1;b=7;Aeq=4,2,1;beq=12;lb=0,0,0;ub1=Inf,Inf,Infx1 f1=intlinprog(c,intcon,A,b,Aeq,beq,lb,ub1)ub2=Inf,Inf,1x2 f2=intlinprog(c,intcon,A,b,Aeq,beq,lb,ub2)程序sample9_2_2.m的运行结果如下:LP:Optimal objective value is-12.Optimal solution found.x1=0 5.0000 2.0000 f1=-12x2=0 5.5000 1.0000 f2=-12q如果不追求第3个未知量是0或1的整数,本题目标函数的最优解是x1=0 5.0000 2.0000,f1=-12。如果要求第3个未知量是0或1的整数,本题目标函数的最优解是x2=0 5.5000 1.0000,f2=-12。910q某企业有5个投资项目可供选择,并且至少要对其中一个项目进行投资。已知该企业可用于投资的总资金1000万元,每个项目的投资额及其预计收益见下表。请问如何选择投资方案,可使总收益最大。11c=-1200;-1500;-700;-1000;-800A=500 600 300 700 400;-500-600-300-700-400b=1000;0 x f v=bintprog(c,A,b)Optimization terminated.x=0 1 0 0 1f=-2300应选择项目B和E,才能获得最大收益2300q具有多个目标函数的优化问题就是多目标规划,如:q在证券投资时既要收益高,又要风险低。q工厂的经营者希望所生产的产品能够获得高额利润的同时又希望生产成本最低或者能耗少,环境污染小。q多目标决策主要方法 q化多为少法:将多目标问题转化为1-2个目标问题,然后用线形加权法求解。q分层序列法:将所有目标按重要程度依次排序,先求出第1个最重要目标的最优解,然后在保证前一目标的前提下依次求下一目标的最优解,一直求到最后一个目标为止。1213q某公司生产和销售两种产品,两种产品各生产一个单位需要3工时和7工时,用电量4千瓦和5千瓦,需要原材料9公斤和4公斤。公司可提供的工时为300,可提供的用电量为250千瓦,可提供的原材料为420公斤。两种产品的单位利润分别为12元和15元。试用线性规划求解工具求解两种产品的最优生产量,使总利润最大,总工时最少。q分析:q首先,将所有目标按重要程度依次排序:q最重要目标:利润最大q次要目标:工时最小q先求,出第1个最重要目标的最优解;q然后,在保证前一目标的前提下依次求下一目标的最优解;q把前一目标的结果作为规划的约束条件q一直求到最后一个目标为止。14q第二步,以总工时最小进行规划求解,将上一步所获得的最大利润作为约束条件,建立目标函数和约束条件如下:15q第一步保证利润最大的规划求解程序和结果。q第二步在利润最大时总工时最小的规划求解程序和结果。c=-12;-15A=3 7;4 5;9 4;b=300;250;420Aeq=;beq=lb=0;0;ub=x f=linprog(c,A,b,Aeq,beq,lb,ub)Optimization terminated.x=34.0457;22.7635f=-750.0000这说明最大利润是这说明最大利润是750c=3;7A=4 5;9 4;b=250;420Aeq=12 15;beq=750lb=0;0;ub=x f=linprog(c,A,b,Aeq,beq,lb,ub)Optimization terminated.x=37.9310;19.6552f=251.3793这说明生产这说明生产37个产品个产品1,19个产品个产品2,可得最大利润是可得最大利润是750,并使总工时最,并使总工时最少,为少,为251。
展开阅读全文