数学建模运输问题doc数学建模运输问题华东交通大学数学建模2012年第一次模拟训练题所属学校:华东交通大学(ECJTU)参赛队员:胡志远、周少华半岛官网、蔡汉林、段亚光、李斌、邱小秧、周邓副、孙燕青指导老师:朱旭生(博士)摘要:本文的运输问题是一个比较复杂的问题,大多数问题都集中在最短路径的求解问题上,问题特点是随机性比较强。根据不同建模类型针对问题一,我们直接采用Dijkstra算法(包括lingo程序和手算验证),将问题转化为线性规划模型求解得出当运送员在给第二个客户卸货完成的时,若要他先给客户10送货,此时尽可能短的行使路线公里。针对问题二,我们首先利用prim算法求解得到一棵最小生成树:再采用Dijkstra算法求得客户2返回提货点的最短线路为故可得到一条理想的回路是:后来考虑到模型的推广性,将问题看作是哈密顿回路的问题,建立相应的线性规划模型求解,最终找到一条满足条件的较理想的的货车送货的行车路线:。针对问题三,我们首先直接利用问题二得一辆车的最优回路,以货车容量为限定条件,建立相应的规划模型并设计一个简单的寻路算法,最终可为公司确定合理的一号运输方案:两辆车全程总和为295公里(见正文);然后建立线性规划模型得出二号运输方案:两辆车全程总和为290公里(见正文);针对问题四,一、问题分析对问题(一)的分析就是求指定两点间的最短路径问题,对此我们可以采用dijkstra算法可以很简单的算出答案,由此延伸一下我们可以推广到可找出第二个客户到任何一个客户的的最短路径,为此我们也将找出此类题目的一般lingo算法。对问题(二)的分析,由提货点出发再返回到提货点,而且这条路径必须是相对而言最短的,显然这个问题是在模型中找出一条最短的哈密尔顿回路的问题,建立相应的线性规划模型就能最终找到一条满足条件的较理想的的结果对问题(三)的分析,这个问题主要是要把9个客户(1好客户为提货点)分成两个集合,然后依次构建出两个完整的最短的汉密尔顿回路。对问题(四)的分析关键字:Dijkstra算法,prim算法,哈密顿回路二、模型假设1、任何两个客户之间的路径长度都是固定的,不存在临时出发状况例如绕道,改道的情况。2、不考虑任何现实状况中的实际情况,一切按照题目的数据进行求解。三、符号说明表示从第i个客户到第j个客户的路线距离表示第i个客户到第j个客户的0-1变量(注:其他变量在模型中定义)四、模型的建立与求解问题一、模型一:直接求解:为了简化问题我们用dijistra算法直接求解,然后用表格法简化其操作步骤:**********A5030*infi3550infi60infiInfiB504535*508055infi90C5045*50455590D505045*558590F50*50558590G50*558590H55*8590I65*90J85*由上表我们显然可以得到一条最短路径:238910(且最短路径为85)同样从上表格中我们不但可以找出客户2到客户10的最短路径同样可以找出客户到其他任何客户位置的最短路径列表如下:21(最短路径为50)23(最短路径为30)234(最短路径为45)25(最短路径为35)26(最短路径为50)257(最短路径为45)238(最短路径为552389(最短路径为65)模型二:编写出lingo的算法求解:定义是由点出发至终点的最短路程,由最优化原理可得这是一个函数方程,用LINGO可以很方便的解决。model:data:n=10;enddatasets:points/1..n/:F;!10个客户点;roads(points,points)/1,22,32,52,62,83,43,63,73,83,104,54,64,74,84,94,105,65,75,85,106,76,86,97,87,97,108,99,10/:D,P;endsetsdata:D=;enddataF(n)=0;***@for(points(i)i#lt#n:F(i)=***@min(roads(i,j):D(i,j)+F(j)););!显然,如果P(i,j)=1,则点i到点n的最短路径的第一步是i--j,否则就不是。由此,我们就可方便的确定出最短路径;***@for(roads(i,j):P(i,j)=***@if(F(i)#eq#D(i,j)+F(j),1,0));End摘入Lingo的部分显示结果:P(1,2)(2,3)(2,5)(2,6)(2,8)(3,4)(3,6)(3,7)