Matlab在目标规划问题中的应用(共6页).doc
精选优质文档-倾情为你奉上 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,即边界条件,用来约束自变量的求解域,以lbxub的形式给出。当C.E.为空时,此优化问题称为自由优化或无约束优化问题;当C.E.不空时,称为有约束优化或强约束优化问题。在优化问题中,根据变量、目标函数和约束函数的不同,可以将问题大致分为:·线性优化 目标函数和约束函数均为线性函数。·二次优化 目标函数为二次函数,而约束条件为线性方程。线性优化和二次优化统称为简单优化。·非线性优化 目标函数为非二次的非线性函数,或约束条件为非线性方程。·多目标优化 目标函数并非一个时,称为多目标优化问题。线性规划等最优化方法只有一个目标函数,是单目标最优化方法。但是,在许多实际工程问题中,往往希望多个指标都达到最优值,所以它有多个目标函数。这种问题称为多目标最优化问题。在运筹学中,这类问题分析较难,而计算最为繁琐。多目标最优化问题的数学模型为 其中为目标函数向量。此优化问题在Matlab中主要由函数fgoalattain来实现。数学模型: 其中,weight,goal,b,beq,lb和ub为向量,A和Aeq为矩阵,c (x),ceq (x)和F (x)为函数,返回向量。F (x),c (x) 和ceq (x)可以是非线性函数。Matlab方法: fgoalattain 求解多目标达到问题x = fgoalattain(fun,x0,goal,weight) 试图通过变化x来使目标函数fun达到goal指定的目标。初值为x0,weight参数指定权重。x = fgoalattain(fun,x0,goal,weight,A,b) 求解目标达到问题,约束条件为线性不等式A*x <= b。x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq) 求解目标达到问题,除提供上面的线性不等式外,还提供线性等式Aeq*x = beq。当没有不等式存在时,设置A= 和b= 。x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub) 为设计变量x定义下界lb和上界ub集合,这样始终有lb <= x <= ub。x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon) 将目标达到问题归结为nonlcon参数定义的非线性不等式c (x)或非线性等式ceq (x)。fgoalattain优化的约束条件为c(x) <= 0 和ceq(x) = 0。若不存在边界,设置lb= 和(或)ub= 。x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon,options) 用options中设置的优化参数进行最小化。x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon,options,P1,P2,.) 将问题参数P1,P2等直接传递给函数fun和nonlcon。若不需要参数A,b,Aeq,beq,lb,ub,nonlcon和options,将它们设置为空矩阵。x,fval = fgoalattain(.) 返回解x处的目标函数值。x,fval,attainfactor = fgoalattain(.) 返回解x处的目标达到因子。x,fval,attainfactor,exitflag = fgoalattain(.) 返回exitflag参数,描述计算的退出条件。x,fval,attainfactor,exitflag,output = fgoalattain(.) 返回包含优化信息的结构输出output。x,fval,attainfactor,exitflag,output,lambda = fgoalattain(.) 返回解x处包含Lagrange乘子的lambda参数。·goal变量目标希望达到的向量值。向量的长度与fun函数返回的目标数F相等。fgoalattain函数试图通过最小化向量F中的值来达到goal参数给定的目标。·options变量优化参数选项。可以用optimset函数设置或改变这些参数的值。·weight变量为权重向量,可以控制低于或超过fgoalattain函数指定目标的相对程度。当goal的值都是非零值时,为了保证活动对象超过或低于的比例相当,将权重函数设置为abs (goal)(活动对象为阻止解处目标改善的对象集合)。·attainfactor变量attainfactor变量是超过或低于目标的个数。若attainfactor为负,则目标已经溢出;若attainfactor为正,则目标个数还未达到。实例1 某化工厂拟生产两种新产品A和B,其生产设备费用分别为:A,2万元/吨;B,5万元/吨。这两种产品均将造成环境污染,设由公害所造成的损失可折算为:A,4万元/吨;B,1万元/吨。由于条件限制,工厂生产产品A和B的最大生产能力各为每月5吨和6吨,而市场需要这两种产品的总量每月不少于7吨。试问工厂如何安排生产计划,在满足市场需要的前提下,使设备投资和公害损失均达到最小。该工厂决策认为,这两个目标中环境污染应优先考虑,设备投资的目标值为20万元,公害损失的目标为12万元。解:设工厂每月生产产品A为x1吨,B为x2吨,设备投资费为f1(x),公害损失费为f2(x),则这个问题可表达为多目标优化问题: min f1 (x) = 2x1+5x2 min f2 (x) = 4x1+x2 x15 x26 x1+x27 x1,x20需要编写目标函数的M文件Ex1.m,返回目标计算值:function f=Ex1(x)f(1)=2*x(1)+5*x(2);f(2)=4*x(1)+x(2);给定目标,权重按目标比例确定,给出初值,在Matlab中实现为:>> goal=20 12;>> weight=20 12;>> x0=2 5;>> A=1 0;0 1; -1 -1;>> b=5 6 7;>> b=5 6 -7;>> lb=zeros(2,1);>> x,fval,attainfactor,exitflag=fgoalattain(Ex1,x0,goal,weight,A,b, , ,lb, )Optimization terminated successfully: Search direction less than 2*options.TolX and maximum constraint violation is less than options.TolConActive Constraints: 5 6 7x = 2.9167 4.0833fval = 26.2500 15.7500attainfactor = 0.3125exitflag = 1实例2 某工厂因生产需要欲采购一种原材料,市场上的这种原料有两个等级,甲级单价2元/kg,乙级单价1元/kg。要求所花总费用不超过200元,购得原料总量不少于100kg,其中甲级原料不少于50kg,问如何确定最好的采购方案。解:设x1和x2分别为采购甲级和乙级原料的数量(kg),要求采购总费用尽量少,采购总量尽量多,采购甲级原料尽量多。由题意建立下面的数学模型: min z1 = 2x1+x2 max z2 = x1+x2 max z3 = x1 2x1+x2200 x1+x2100 x150 x1,x20需要编写目标函数的M文件Ex2.m,返回目标计算值:function f=Ex2(x)f(1)=2*x(1)+x(2);f(2)=-x(1)-x(2);f(3)=-x(1);给定目标,权重按目标比例确定,给出初值,在Matlab中实现:>> goal=200 -100 -50;>> weight=200 -100 -50;>> x0=50 50;>> A=2 1;-1 -1;-1 0;>> b=200 -100 -50;>> lb=zeros(2,1);>> x,fval,attainfactor,exitflag=fgoalattain(Ex2,x0,goal,weight,A,b, , ,lb, )Optimization terminated successfully: Search direction less than 2*options.TolX and maximum constraint violation is less than options.TolConActive Constraints: 4 7x = 50 50fval = 150 -100 -50attainfactor = 0exitflag = 1所以,最好的采购方案是采购甲级原料和乙级原料各50kg。此时采购总费用为150元,总重量为100kg,甲级原料总重量为50kg。后记:Matlab具有强大的数值计算、数值处理和图形处理能力。高效便捷,大大提高了数学建模的效率,丰富了数学建模的方法和手段。在运筹学线性规划问题的计算中,得到了很好的应用,通过运用Matlab很方便地解决在课堂上需要手工复杂计算的问题,提高了我学习专业课和计算机的兴趣和信心。专心-专注-专业