2012年数学建模培训第二次测试论文题目运输优化模型姓名马鹏系(院)数学系专业信息与计算科学、应用数学2012 年8 月27 日运输优化模型[摘要]在社会的经济生产活动中,产地(厂家)与客户都会想方设法合理调拨资源、降低运输费用,实现利益最大化,完成资源优化配置。
本文在运输费单价恒定,各产地发量一定,各客户的需求量也一定的条件下,努力解决多个特定目标实现问题。
力求最优的运输方案。
在确定问题为不平衡的运输问题时,先虚设一个产地,将问题装华为平衡运输问题,将问题转化为目标规划问题,按照目标规划问题的建模思想逐步建立模型。
本文的主要特点在于,将不平衡的线性规划问题合理地转化为目标规划问题,在求解时充分利用LINGO软件求解。
关键词: lingo 目标规划线性规划运输优化问题运费最少一.问题重述运输功能是整个现代物流七大基本功能之一,占有很重要的地位,运输成本在整个物流系统中所占的比重也很大,运输成本的有效控制对物流总成本的节约具有举足轻重的作用。
通过物流流程的改善能降低物流成本,能给企业带来难以预料的效益,影响运输成本的因素是多样化、综合性的,这就要求对运输成本的分析要采用系统的观点,进行综合分析。
由于影响物流运输成本的因素很多,控制措施既涉及运输环节本身,也涉及供应链的整个物流流程。
要想降低物流运输成本,就必须运用系统的观点和方法,进行综合分析,发现问题,解决问题,使物流运输活动更加优化、物流运输成本更加合理化。
本文已知把一种产品从产地一、二运到客户1、2、3处,产地的发量、客户的收量及各产地到各客户的运输单价已知。
本文要解决问题是:客户1为重要部门,必须全部满足需求量;满足客户2、3至少75%的的需求量;使总运费尽量少;从产地2到客户1的运量至少有1000个单位。
二.问题分析根据题目中所给出的条件知:有现成的两个产地和需要产品的三个客户。
且两个产地的产量不同,运送到各个客户的运费单价不同。
三个客户所需的货物量不同。
而三个客户对两个产地的总需求为2000+1500+5000=8500(单位),而两个产地总的发量为3000+4000=7000(单位),故需求量大于发量,属于需求量和发量不平衡问题。
且提出四个不同的目标。
故使用目标规划实现建模。
首先设置目标约束的优先级,建立目标约束按目标的优先级,写出相应的目标规划模型 。
再接着使用LINGO 软件实现模型的求解,并作出相应结果的分析。
三.模型假设(1) 产品的运输过程不存在任何的导致产品发量和产品收量不相符的问题。
产品安全送到客户处。
即有:产品的发量就等于产品的收量。
(2) 产品的运输单价始终恒定,不存在中途因为某种原因而导致产品的单价变化问题。
即运费只取决于所运输的产品的数量。
(3) 产地的生产量(即发量)有极限值,不可能超出本产地正常的生产范围。
(4) 客户需求量在一定的范围内或或是特定的具体值。
四.符号说明基于题目及所要建立的模型所要用到的变量及参数,作如下符号说明: (1)产地用i A (2,1i =其中)表示,表示第产地i ;)2,1(=i a i 表示其发量; (2)客户用j B (其中j=1,2,3)表示,表示客户j;)3,2,1(=j b j 表示其需求量; (3)用ij c 1,2,3j 2;,1i ==其中表示产地i A (2,1i =其中)往客户j B (其中j=1,2,3)处运输产品的单位费用;(4)用z 表示总的运输费用;(5)用ij x 1,2,3j 2;,1i ==其中表示产地i A (2,1i =其中)运往客户j B (其中j=1,2,3)处的物品数量;五.模型建立由发量和需求量可知,发量小于需求量,故我们需要添加一个虚拟产地(产地3),使各产地的总产量之和等于各客户的需求量之和。
使问题为平衡的运输问至此,基于问题的分析与假设,将问题转化为目标规划问题。
故分以下步骤进行模型的建立。
5.1设置目标约束的优先级P1:客户1为重要部门,需求量必须全部满足; P2:满足其他两个客户至少75%的需要量; P3:使运费尽量少;P4:从产地2到客户1的运量至少有1000个单位。
5.2建立目标约束:1-d 达不到客户1的需求量 :1+d 超过客户1的需求量 :2-d 达不到客户2的需求量 :2+d 超过客户2的需求量 +3d :超过客户3的需求量 的需求量达不到客户3:3-d -4d :达不到33000的运输费用 :4+d 超过33000的运输费用 :5-d 产地二达不到客户1的需求量 :5+d 超过客户1的需求量 5.3求最少费用 LINGO 程序: model :sets:supply/1,2,3/:a;demand/1,2,3/:b;link(supply,demand):c,x;endsetsmin=@sum(link(i,j):c(i,j)*x(i,j););@for(demand(j):@sum(supply(i):x(i,j))=b(j););@for(supply(i):@sum(demand(j):x(i,j))<=a(i););data:a=3000,4000,1500;b=2000,1500,5000;c=10,4,128,10,30,0,0;enddataEndLINGO求解结果:Global optimal solution found.Objective value: 33000.00Infeasibilities: 0.000000Total solver iterations: 6Variable Value Reduced Cost A( 1) 3000.000 0.000000 A( 2) 4000.000 0.000000 A( 3) 1500.000 0.000000 B( 1) 2000.000 0.000000 B( 2) 1500.000 0.000000 B( 3) 5000.000 0.000000 C( 1, 1) 10.00000 0.000000 C( 1, 2) 4.000000 0.000000 C( 1, 3) 12.00000 0.000000 C( 2, 1) 8.000000 0.000000 C( 2, 2) 10.00000 0.000000 C( 2, 3) 3.000000 0.000000 C( 3, 1) 0.000000 0.000000 C( 3, 2) 0.000000 0.000000C( 3, 3) 0.000000 0.000000 X( 1, 1) 1500.000 0.000000 X( 1, 2) 1500.000 0.000000 X( 1, 3) 0.000000 2.000000 X( 2, 1) 0.000000 5.000000 X( 2, 2) 0.000000 13.00000 X( 2, 3) 4000.000 0.000000 X( 3, 1) 500.0000 0.000000 X( 3, 2) 0.000000 6.000000 X( 3, 3) 1000.000 0.000000Row Slack or Surplus Dual Price 1 33000.00 -1.000000 2 0.000000 -10.00000 3 0.000000 -4.000000 4 0.000000 -10.00000 5 0.000000 0.000000 6 0.000000 7.000000 7 0.000000 10.00000由上表可看出,最少的运输费用为33000,但第一个目标就不满足,用户1的需求的不到满足。
5.4按目标的优先级,写出相应的目标规划模型客户1为重要部门,需求量必须全部满足;则目标可表示为:}{⎩⎨⎧=++++-+-+2000min 11221111d d x x d d 满足其他两个客户至少75%的需要量;则目标可表示为:}{⎩⎨⎧=-++--+2222212min 75.0*1500d d d x x }{⎩⎨⎧=-++-+-75.0*5000min 3323123d d x x d 从产地2到客户1的运量至少有1000个单位;则目标可表示为:}{⎩⎨⎧=-++-+-1000min 55215d d x d 由最少费用,可建立目标约束为:}{⎪⎩⎪⎨⎧=-+∑∑==-++213144433000min i j ij ij d d x c d 故模型建立为:min z=-+---++++544332211)(d p d p d d p d p40003000232221131211<=++<=++x x x x x x%75*5000%75*1500222313112212=+++=-+++-+-d d x x d d x x3000*313321=-+∑∑=+-=j ij iji d d x c10004421=-++-d d x六.模型求解使用LINDO 软件将模型求解如下:LINGO 程序: model : sets :Level/1,2,3,4/:P,z,Goal;s_Con_Nun/1,2,3,4,5/:dplus,dminus; supply/1,2/:a; customer/1,2,3/:b;Routes(supply,customer):c,x; endsets data :p=?,?,?,?; Goal=?,?,?,0; a=3000,4000;b=2000,1500,5000; c=14,4,12 8,10,3; enddatamin =@sum (Level:P*z);z(1)=dminus(1)z(2)= dminus(2)+dminus(3);z(3)=dplus(4);z(4)=dminus(5);@for(supply(i):@sum(customer(j):x(i,j))<=a(i););x(1,1)+x(2,1)+dminus(1)-dplus(1)=2000;@for(customer(j):@sum(supply(i):x(i,2))+dminus(2)-dplus(2)=1500*0.75;@sum(supply(i):x(i,3))+dminus(3)-dplus(3)=1500*0.75;@sum(Routes:c*x)+dminus(4)-dplus(4)=33000;x(2,1)+dminus(5)-dplus(5)=1000;@for(Level(i)|i#lt#@size(Level):@bnd(0,z(i),Goal(i)););EndLINGO求解结果:No feasible solution found.Infeasibilities: 1500.000Total solver iterations: 5Variable Value Reduced CostP( 1) 0.1000000+308 0.000000P( 2) 0.1000000+308 0.000000P( 3) 0.1000000+308 0.000000P( 4) 0.1000000+308 0.000000Z( 1) 0.000000 0.000000Z( 2) 0.000000 0.000000Z( 3) 13000.00 0.000000Z( 4) 500.0000 0.000000GOAL( 1) 0.1000000+308 0.000000GOAL( 2) 0.1000000+308 0.000000GOAL( 3) 0.1000000+308 0.000000GOAL( 4) 0.000000 0.000000DPLUS( 1) 0.000000 0.000000DPLUS( 2) 375.0000 0.000000DPLUS( 3) 3875.000 0.000000DPLUS( 4) 13000.00 0.000000DPLUS( 5) 0.000000 0.1000000+308DMINUS( 1) 0.000000 0.1000000+308DMINUS( 2) 0.0000000.1000000+308DMINUS( 3) 0.000000 0.1000000+308DMINUS( 4) 0.000000 0.1000000+308DMINUS( 5) 500.0000 0.000000A( 1) 3000.000 0.000000A( 2) 4000.000 0.000000B( 1) 2000.000 0.000000B( 2) 1500.000 0.000000B( 3) 5000.000 0.000000C( 1, 1) 14.00000 0.000000C( 1, 2) 4.000000 0.000000C( 1, 3) 12.00000 0.000000C( 2, 1) 8.000000 0.000000C( 2, 2) 10.00000 0.000000C( 2, 3) 3.000000 0.000000X( 1, 1) 1500.000 0.000000X( 1, 2) 1500.000 0.000000X( 1, 3) 0.000000 0.2000000+308X( 2, 1) 500.0000 -0.1146654+297X( 2, 2) 0.000000 0.1300000+309X( 2, 3) 5000.000 0.000000Row Slack or Surplus Dual Price1 3000.000 -1.0000002 0.000000 -0.1000000+3083 0.000000 -0.1000000+3084 0.000000 -0.1000000+3085 0.000000 -0.1000000+3086 0.000000 Infinity7 -1500.000 Infinity8 0.000000 -Infinity9 0.000000 -Infinity10 0.000000 -Infinity11 0.000000 0.00000012 0.000000 0.00000013 0.000000 0.000000 14 0.000000 0.000000 15 0.000000 0.000000 16 0.000000 0.000000 17 0.000000 0.000000 18 0.000000 0.00000019 0.000000 -0.1000000+30820 0.000000 0.000000 21 0.000000 0.00000022 0.000000 0.1000000+30823 0.000000 0.000000 即:150011=x ,150012=x ,013=x ,50021=x ,022=x ,500023=x 。