蔬菜运输问题数建模
- 格式:doc
- 大小:255.50 KB
- 文档页数:21
蔬菜运输问题数学建模
蔬菜运输问题可以通过数学建模来解决。
以下是一种可能的数学建模方法:
1. 定义变量:
- X[i][j]:表示从地点i运送蔬菜到地点j的数量,其中i和j 是地点的编号。
- D[i][j]:表示从地点i到地点j的运输距离。
2. 目标函数:
由于蔬菜运输的目标通常是最小化总运输成本或最短运输时间,可以设置目标函数为最小化运输成本或最小化运输时间。
具体的目标函数可以根据具体情况来定。
3. 约束条件:
- 每个地点的进出蔬菜数量必须平衡:对于每个地点i,进出的蔬菜数量之和要等于该地点的需求或产出量。
即∑X[i][j] - ∑X[j][i] = 0。
- 运输量不能超过运输能力限制:对于每个地点i到地点j的运输量X[i][j],必须满足X[i][j] <= C[i][j],其中C[i][j]表示地点i到地点j的运输能力限制。
- 运输量必须是非负数:X[i][j] >= 0。
4. 其他要求和限制:
- 可以考虑添加其他特殊要求和限制,如运输时间窗限制、调度顺序要求等。
5. 求解方法:
运用数学规划方法,如线性规划或整数规划,求解目标函数和约束条件得到最优的蔬菜运输方案。
数学建模--运输问题(总22页) --本页仅作预览文档封面,使用时请删除本页--运输问题摘要本文主要研究的是货物运输的最短路径问题,利用图论中的Floyd算法、Kruskal算法,以及整数规划的方法建立相关问题的模型,通过matlab,lingo编程求解出最终结果。
关于问题一,是一个两客户间最短路程的问题,因此本文利用Floyd算法对其进行分析。
考虑到计算的方便性,首先,我们将两客户之间的距离输入到网络权矩阵中;然后,逐步分析出两客户间的最短距离;最后,利用Matlab软件对其进行编程求解,运行得到结果:2-3-8-9-10总路程为85公里。
关于问题二,运输公司分别要对10个客户供货,必须访问每个客户,实际上是一个旅行商问题。
首先,不考虑送货员返回提货点的情形,本文利用最小生成树问题中的Kruskal算法,结合题中所给的邻接矩阵,很快可以得到回路的最短路线:-9-10-2;然后利用问题一的Floyd算法编程,能求得从客户2到客户1(提货点)的最短路线是:2-1,路程为50公里。
即最短路线为:-9-10-2-1。
但考虑到最小生成树法局限于顶点数较少的情形,不宜进一步推广,因此本文建立以路程最短为目标函数的整数规划模型;最后,利用LINGO软件对其进行编程求解,求解出的回路与Kruskal算法求出的回路一致。
关于问题三,是在每个客户所需固定货物量的情况下,使得行程之和最短。
这样只要找出两条尽可能短的回路,并保证每条线路客户总需求量在50个单位以内即可。
因此我们在问题二模型的基础上进行改进,以货车容量为限定条件,建立相应的规划模型并设计一个简单的寻路算法,对于模型求解出来的结果,本文利用Kruskal算法结合题中所给的邻接矩阵进行优化。
得到优化结果为:第一辆车:-1,第二辆车:,总路程为280公里。
关于问题四,在问题一的基础上我们首先用Matlab软件编程确定提货点到每个客户点间的最短路线,然后结合一些限定条件建立一个目标模型,设计一个较好的解决方案进行求解可得到一种很理想的运输方案。
蔬菜运输问题数学建模目录一、引言二、蔬菜运输问题的背景和意义三、数学建模的基本概念和方法四、蔬菜运输问题的数学模型建立五、模型求解与分析六、结论正文一、引言随着我国经济的快速发展,物流行业发挥着日益重要的作用。
其中,蔬菜运输是物流领域的一个重要环节,关系到民生保障和社会稳定。
然而,在蔬菜运输过程中,如何合理安排运输路线、降低运输成本、保证蔬菜新鲜度等问题亟待解决。
为此,数学建模方法被广泛应用于蔬菜运输问题的研究,以提高运输效率和降低运输成本。
二、蔬菜运输问题的背景和意义蔬菜运输问题是指在保证蔬菜新鲜度和质量的前提下,如何合理安排运输路线、运输工具、运输时间等问题。
蔬菜运输问题的研究具有以下背景和意义:1.保障民生需求:蔬菜是居民日常生活中必不可少的食品,合理解决蔬菜运输问题,有利于保障民生需求和提高居民生活水平。
2.降低运输成本:通过数学建模方法优化运输方案,可以降低运输成本,提高运输效益。
3.提高运输效率:合理安排运输路线和运输工具,可以提高运输效率,保证蔬菜新鲜度。
4.促进物流行业发展:解决蔬菜运输问题,有利于促进物流行业的发展和创新。
三、数学建模的基本概念和方法数学建模是将实际问题抽象为数学问题,建立数学模型,并通过求解数学模型得到实际问题的解决方案。
数学建模的基本方法包括:1.确定目标函数:根据实际问题中的优化目标,确定数学模型的目标函数。
2.建立约束条件:根据实际问题的限制条件,建立数学模型的约束条件。
3.选择合适的数学模型:根据实际问题的特点,选择合适的数学模型,如线性规划模型、整数规划模型等。
4.求解数学模型:通过数学方法和计算工具,求解数学模型,得到最优解。
四、蔬菜运输问题的数学模型建立在解决蔬菜运输问题时,我们可以采用整数线性规划模型。
首先,我们需要确定目标函数和约束条件。
目标函数:最小化总运输成本,即运输费用和运输时间之和。
约束条件:1.各种蔬菜的总运输量应等于需求量。
2.每种蔬菜的运输量应大于等于 0。
蔬菜运输问题摘要本文运用floyd算法求出各蔬菜采购点到每个菜市场的最短运输距离,然后用lingo软件计算蔬菜调运费用及预期短缺损失最小的调运方案,紧接着根据题目要求对算法加以修改得出每个市场短缺率都小于20%的最优调运方案,并求出了最佳的供应改进方案。
求解各采购点到菜市场的最短距离,在图论里面关于最短路问题比较常用的是Dijkstra算法,Dijkstra算法提供了从网络图中某一点到其他点的最短距离。
关键词最短路问题floyd算法运输问题一、问题重述F市是一个人口不到15万人的小城市。
根据该市的蔬菜种植情况,分别在花市(A),城乡路口(B)和下塘街(C)设三个收购点,再由各收购点分送到全市的8个菜市场,该市道路情况,各路段距离(单位:100m)及各收购点,菜市场①⑧的具体位置见图1,按常年情况,A,B,C三个收购点每天收购量分别为200,170和160(单位:100 kg),各菜市场的每天需求量及发生供应短缺时带来的损失(元/100kg)见表 1.设从收购点至各菜市场蔬菜调运费为1元/(100kg.100m).①7 ②5 4 8 3 7A 7 ⑼ 6 B⑥ 6 8 55 4 7 117 ⑾ 4 ③7 5 66 ⑤ 3 ⑿ 5 ④⑽8 6 610 C 10 ⑧5 11⑦图1(a)为该市设计一个从收购点至个菜市场的定点供应方案,使用于蔬菜调运及预期的短缺损失为最小;(b)若规定各菜市场短缺量一律不超过需求量的20%,重新设计定点供应方案(c)为满足城市居民的蔬菜供应,光明市的领导规划增加蔬菜种植面积,试问增产的蔬菜每天应分别向A,B,C三个采购点供应多少最经济合理。
二、问题分析求总的运费最低,可以先求出各采购点到菜市场的最小运费,由于单位重量运费与距离成正比,题目所给的图1里包含了部分菜市场、中转点以及收购点之间的距离,(a)题可以用求最短路的方法求出各采购点到菜市场的最短路径,乘上单位重量单位距离费用就是单位重量各运输线路的费用,然后用线性方法即可解得相应的最小调运费用及预期短缺损失。
货物配送问题数学建模一、问题描述在物流配送中,如何合理地安排货物的配送路线,使得货物能够最快地到达目的地,同时保证配送成本最小化,是一个重要的问题。
本文将以某物流公司为例,探讨如何利用数学建模的方法解决货物配送问题。
二、问题分析该物流公司需要将货物从A地配送到B地,其中A地有n个发货点,B地有m个收货点。
每个发货点的货物重量不同,每个收货点的需求量也不同。
为了保证配送效率,该物流公司需要在每个发货点选择最优的配送路线,使得货物能够最快地到达目的地,同时保证配送成本最小化。
具体而言,该问题需要考虑以下因素:1.货物重量:每个发货点的货物重量不同,需要考虑不同重量的货物在配送过程中的影响。
2. 配送路线:如何选择最优的配送路线,使得货物能够最快地到达目的地,同时保证配送成本最小化。
3. 配送成本:配送成本包括人工成本、车辆成本、油费等,需要考虑如何在保证配送效率的同时最小化配送成本。
三、数学建模为了解决上述问题,我们可以采用数学建模的方法。
具体而言,我们可以将该问题建模为一个最小费用最大流问题。
最小费用最大流问题是图论中的一个经典问题,其主要思想是在网络流的基础上,引入费用这一概念,使得在满足流量限制的同时,最小化总费用。
在本问题中,我们可以将发货点看作源点,收货点看作汇点,货物的重量看作每个边的流量限制,配送成本看作每个边的费用。
具体而言,我们可以将该问题建模为以下几个步骤:1. 建立网络模型:将发货点和收货点看作网络中的节点,将货物的配送路线看作网络中的边,建立网络模型。
2. 确定流量限制:将每个发货点的货物重量看作每个边的流量限制。
3. 确定费用:将配送成本看作每个边的费用。
4. 求解最小费用最大流:利用最小费用最大流算法,求解最小费用最大流,得到最优的配送路线。
四、实际案例为了验证上述方法的有效性,我们在某物流公司的实际配送中进行了测试。
具体而言,我们将该问题建模为一个最小费用最大流问题,并利用最小费用最大流算法求解最优的配送路线。
运筹学运输问题例题数学建模运筹学是一门研究如何在有限的资源和多种约束条件下,寻求最优或近似最优解的科学。
运输问题是运筹学中的一个重要分支,它主要研究如何把某种商品从若干个产地运至若干个销地,使总的运费或总的运输时间最小。
本文将介绍运输问题的数学建模方法,以及用表上作业法求解运输问题的步骤和技巧。
同时,本文还将给出几个典型的运输问题的例题,帮助读者理解和掌握运输问题的求解过程。
运输问题的数学建模运输问题可以用以下的数学模型来描述:设有m 个产地(或供应地),分别记为A 1,A 2,…,A m ,每个产地i 的产量(或供应量)为a i ;有n 个销地(或需求地),分别记为B 1,B 2,…,B n ,每个销地j 的需求量为b j ;从产地i 到销地j 的单位运费(或单位运输时间)为c ij ;用x ij 表示从产地i 到销地j 的运量,则运输问题可以归结为以下的线性规划问题:其中,目标函数表示总的运费或总的运输时间,约束条件表示每个产地的供应量必须等于其产量,每个销地的需求量必须等于其销量,以及每条运输路线的运量不能为负数。
在实际问题中,可能出现以下几种情况:产销平衡:即∑m i =1a i =∑n j =1b j ,也就是说总的供应量等于总的需求量。
这种情况下,上述数学模型可以直接应用。
产大于销:即∑m i =1a i >∑n j =1b j ,也就是说总的供应量大于总的需求量。
这种情况下,可以增加一个虚拟的销地,其需求量等于供需差额,且其与各个产地的单位运费为零。
这样就可以把问题转化为一个产销平衡的问题。
产小于销:即∑m i =1a i <∑n j =1b j ,也就是说总的供应量小于总的需求量。
这种情况下,可以增加一个虚拟的产地,其产量等于供需差额,且其与各个销地的单位运费为零。
这样也可以把问题转化为一个产销平衡的问题。
弹性需求:即某些销地对商品的需求量不是固定不变的,而是随着商品价格或其他因素而变化。
菜篮⼦⼯程数学建模期末题⽬菜篮⼦⼯程中的蔬菜种植问题关键词最短路径问题,线性规划,Froyd算法队员姓名谢涛远,贺志诚,王晶宇摘要:为解决郊区到市中⼼蔬菜供给问题和最短路径,最优的配运⽅案,使运输成本降低和解决“菜篮⼦⼯程”这⼀问题。
本⽂研究了针对蔬菜市场为满⾜不同条件下的最优调配⽅案问题和最低费⽤,最⼩短缺补偿问题等,采⽤⽤了线性规划、Froyd算法建⽴了⼀系列数学规划模型,并⽤MATLAB软件编程实现,⽤EXCEL实现对数据的初步处理。
针对问题⼀的(1)问,⽤Froyd算法结合MATLAB编程求出蔬菜种植点到各销售点的最短距离,从⽽解决了蔬菜运送过程中的短缺损失最⼩,并建⽴了合理的数学模型。
针对问题⼀的(1)问,在(1)问模型的基础上增加各菜市场短缺量⼀律不超过需求量的30%的约束条件,⽤线性规划⽅程和MATLAB编程求得最⼩短缺补偿,以及最优的蔬菜配送供给⽅案。
对于问题2的求解,在上述模型的基础上,为使蔬菜供给达到满⾜市场需求,从⽽进⼀步扩⼤蔬菜种植⾯积,因此以短缺补偿最⼩和运送费⽤最⼩的⽬标函数,建⽴了线性规划模型进⾏求解。
本⽂解决的问题是如何通过考虑市场供需关系的平衡,运送⽅案最优,路径最短等问题,使“菜篮⼦⼯程”政府短缺达到最优和时间效益达到最优,对此建⽴合理的数学模型进⾏分析,使所得到的模型⽅案能够解决上述问题。
英⽂摘要(选填)To solve the problem of vegetable supply suburb to city centre and the shortest path, the optimal distribution scheme, reduce transportation costs and to solve the question of "vegetable basket project".Were studied for vegetable market to meet the different conditions of the optimal allocation problem and the lowest cost, the shortage of minimum compensation, etc., by using the linear programming, Froyd algorithm established a series of mathematical programming model, and use MATLAB software programming, using EXCEL realize preliminary processing of the data.In view of the questions of one (1), using Froyd algorithm combined with MATLAB programming and vegetable growing point to the shortest distance of each point of sale so as to solve the shortage in the process of transporting vegetables loss minimum, and reasonable mathematical model is established.Aimed at the question of one (1), (1) ask model on the basis of increase the shortage amount shall not exceed 30% of the demand of market constraints, using linear programming equations and shortage of minimum compensation obtained by MATLAB programming, and the optimal supply of vegetables distribution plan.For solving the problem 2, on the basis of the above model, to make vegetable supply to meet the market demand, further expand the vegetable planting area, therefore in shortage, and shipping cost minimum objective function is minimum compensation, to solve linear programming model is established.This paper to solve the problem is how to by considering the equilibrium of market supply and demand, transport scheme optimal, shortest path problem, shortage of "vegetable basket project" government to achieve optimal and time efficiency to achieve optimal, to establish a reasonable mathematical model were analyzed, and make the resulting model scheme can solve the above problem⼀、问题重述该市在郊区和农区建⽴了8个蔬菜种植基地,承担全市居民的蔬菜供应任务,每天将蔬菜运送到市区的35个蔬菜销售点。
2015年吉林省大学生数学建模竞赛承诺书我们仔细阅读了《全国大学生数学建模竞赛章程》和《全国大学生数学建模竞赛参赛规则》(以下简称为“竞赛章程和参赛规则”,可从全国大学生数学建模竞赛网站下载)。
我们完全明白,在竞赛开始后参赛队员不能以任何方式(包括电话、电子邮件、网上咨询等)与队外的任何人(包括指导教师)研究、讨论与赛题有关的问题。
我们知道,抄袭别人的成果是违反竞赛章程和参赛规则的,如果引用别人的成果或其他公开的资料(包括网上查到的资料),必须按照规定的参考文献的表述方式在正文引用处和参考文献中明确列出。
我们郑重承诺,严格遵守竞赛章程和参赛规则,以保证竞赛的公正、公平性。
如有违反竞赛章程和参赛规则的行为,我们将受到严肃处理。
我们授权全国大学生数学建模竞赛组委会,可将我们的论文以任何形式进行公开展示(包括进行网上公示,在书籍、期刊和其他媒体进行正式或非正式发表等)。
我们参赛选择的题号是(从A/B/C/D/E中选择一项填写):我们的报名参赛队号为(8位数字组成的编号):所属学校(请填写完整的全名):参赛队员(打印并签名) :1.2.3.指导教师或指导教师组负责人(打印并签名):(论文纸质版与电子版中的以上信息必须一致,只是电子版中无需签名。
以上内容请仔细核对,提交后将不再允许做任何修改。
如填写错误,论文可能被取消评奖资格。
)日期:年月日赛区评阅编号(由赛区组委会评阅前进行编号):2015年吉林省大学生数学建模竞赛编号专用页赛区评阅编号(由赛区组委会评阅前进行编号):菜篮子工程中的蔬菜种植问题摘要菜篮子工程中的蔬菜种植问题研究了如何利用现有的交通运输条件制定出一套调运方案,使得政府的短缺补偿和运费补贴最少。
本文首先介绍了什么是最短路问题,设计最短路问题的基本思路等。
然后介绍了运输问题的线性规划模型以及线性规划问题的解法。
最后提出了菜篮子工程中的蔬菜种植问题,进行了问题分析、模型建立、模型求解以及结果分析等一系列过程。
2009年第9期(总第317期)湘潮(下半月)2009年9月城市蔬菜配送车辆调度模型与启发式算法研究肖和山(湖南现代物流职业技术学院物流管理系湖南长沙摘410131)要:根据城市蔬菜配送公司的实际情况,创新性地同时考虑了的车辆路径问题中人力参与较多、多车型、不同车型的固定费用和行驶费用不同且带硬时间窗等问题,并同时考虑车型与任务的相容性。
对人力参与的、带时间窗约束的多车型多费用非满载车辆路径问题,以最小化总费用为目标建立了数学模型。
由于该模型的NP-hard性质,基于城市钟点工费用比车辆长时间等待费用低,同时钟点工可以替代车辆等待;且高费用车型的固定费用和单位行驶费用比低费用车型的相应费用都要高以及低费用车型的固定费用远大于高费用车型的单位行驶费用的思想,对该模型设计了一个启发式算法。
关键词:蔬菜配送;车辆路径问题;人力资源;启发式算法中图分类号:F562 文献标识码:A文章编号:1003-949X(2009)-09-0056-03那么,人力参与的、带硬时间窗的多车型多费用非满载配送是指在经济合理区域范围内,根据客户要求,对物品进行分拣、加工、包装、分割、组配等作业,并按时送达指定地点的物流活动。
主要是指配送中心到顾客之间的物品空间移动。
配送以“送”为主,辅以其他多种增值服务,所以配送属于运输范畴,是运输在功能上的延伸。
[1]蔬菜配送主要包括城市内配送、城乡间配送和区域间配送。
由于蔬菜属生鲜产品,城乡间和区域间的蔬菜配送实际上都是点到点的运输,其车辆运输路径往往是单一的;而城市内的蔬菜配送因点多路杂、有送货时间段要求(带时间窗)、关系民生且受交通禁行限止,对其车辆运输路径问题的研究意义重大。
目前我国内地城市蔬菜配送业的主要客户还是学校、工厂、宾馆饭店以及公司食堂。
市内蔬菜配送公司的主要作业环节是蔬菜运输,运输成本是主营业务成本主要组成部分(占下:VRP可描述为:一个配送公司为完成配送任务需租用K种车型的车,车型和车辆数可以保证完成配送任务,其中K(k=1,…,K)型车数目为uk,车容量为qk。
数学建模大赛-货物运输问题问题重述:某港口需要将三种原材料A、B、C分别运往8个公司,运输车有三种型号:4吨、6吨、8吨。
每辆车有固定成本,每次出车也有固定成本。
运输车平均速度为60公里/小时,每日工作不超过8小时。
设计一个方案,使得耗时最少、费用最省。
方案设计:针对问题一,我们首先考虑最小化运输次数,然后根据卸载顺序和载重费用尽量小的原则,提出了较为合理的优化模型。
我们采用顺时针送货(①~④公司)和逆时针送货(⑤~⑧公司)的方案,并将方案分为两步:第一步是使每个车次满载并运往同一个公司;第二步是采用分批次运输的方案,即在第一批次运输中,我们使A材料有优先运输权;在第二批次运输中,我们使B材料有优先运输权;在第三批次中运输剩下所需的货物。
最后得出耗时为40.5007小时,费用为4685.6元的方案。
针对问题二,我们加上两个定理及其推论,设计的数学模型与问题一几乎相同,只是空载路径不同。
我们采用与问题一相同的算法,得出耗时为26.063小时,费用为4374.4元的方案。
针对问题三的第一小问,我们排除了4吨货车的使用,并仍旧采用顺时针送货(①~④公司)和逆时针送货(⑤~⑧公司)的方案。
最后在满足公司需求量的条件下,采用不同吨位满载运输方案,分为三步:第一,使8吨车次满载并运往同一公司;第二,6吨位车次满载并运往同一公司;第三,剩下的货物若在1~6吨内,则用6吨货车运输,若在7~8吨内用8吨货车运输。
最后得出耗时为19.6844小时,费用为4403.2元的方案。
建立模型时,需要注意以下几个问题:目标层:在建立模型时,如果将调度车数、车次以及每车次的载重和卸货点都设为变量,会导致模型中变量过多,不易求解。
因此,可以将目标转化为两个阶段的求解过程。
第一阶段是规划车次阶段,求解车次总数和每车次的装卸方案;第二阶段是车辆调度阶段,安排尽量少的车辆数,每车次尽量满载,使总的运费最小。
约束层:1)运输车可以从顺时针或者逆时针方向送货,需要考虑不同方向时的载重用;(2)大小件的卸车顺序要求不同原料搭配运输时,沿途必须有序卸货;(3)每车次的送货量不能超过运输车的最大载重量;(4)满足各公司当日需求。
题目菜篮子工程中的蔬菜种植问题关键词最短路径问题,线性规划,Froyd算法队员姓名谢涛远,贺志诚,王晶宇摘要:为解决郊区到市中心蔬菜供给问题和最短路径,最优的配运方案,使运输成本降低和解决“菜篮子工程”这一问题。
本文研究了针对蔬菜市场为满足不同条件下的最优调配方案问题和最低费用,最小短缺补偿问题等,采用用了线性规划、Froyd算法建立了一系列数学规划模型,并用MATLAB软件编程实现,用EXCEL实现对数据的初步处理。
针对问题一的(1)问,用Froyd算法结合MATLAB编程求出蔬菜种植点到各销售点的最短距离,从而解决了蔬菜运送过程中的短缺损失最小,并建立了合理的数学模型。
针对问题一的(1)问,在(1)问模型的基础上增加各菜市场短缺量一律不超过需求量的30%的约束条件,用线性规划方程和MATLAB编程求得最小短缺补偿,以及最优的蔬菜配送供给方案。
对于问题2的求解,在上述模型的基础上,为使蔬菜供给达到满足市场需求,从而进一步扩大蔬菜种植面积,因此以短缺补偿最小和运送费用最小的目标函数,建立了线性规划模型进行求解。
本文解决的问题是如何通过考虑市场供需关系的平衡,运送方案最优,路径最短等问题,使“菜篮子工程”政府短缺达到最优和时间效益达到最优,对此建立合理的数学模型进行分析,使所得到的模型方案能够解决上述问题。
英文摘要(选填)To solve the problem of vegetable supply suburb to city centre and the shortest path, the optimal distribution scheme, reduce transportation costs and to solve the question of "vegetable basket project".Were studied for vegetable market to meet the different conditions of the optimal allocation problem and the lowest cost, the shortage of minimum compensation, etc., by using the linear programming, Froyd algorithm established a series of mathematical programming model, and use MATLAB software programming, using EXCEL realize preliminary processing of the data.In view of the questions of one (1), using Froyd algorithm combined with MATLAB programming and vegetable growing point to the shortest distance of each point of sale so as to solve the shortage in the process of transporting vegetables loss minimum, and reasonable mathematical model is established.Aimed at the question of one (1), (1) ask model on the basis of increase the shortage amount shall not exceed 30% of the demand of market constraints, using linear programming equations and shortage of minimum compensation obtained by MATLAB programming, and the optimal supply of vegetables distribution plan.For solving the problem 2, on the basis of the above model, to make vegetable supply to meet the market demand, further expand the vegetable planting area, therefore in shortage, and shipping cost minimum objective function is minimum compensation, to solve linear programming model is established.This paper to solve the problem is how to by considering the equilibrium of market supply and demand, transport scheme optimal, shortest path problem, shortage of "vegetable basket project" government to achieve optimal and time efficiency to achieve optimal, to establish a reasonable mathematical model were analyzed, and make the resulting model scheme can solve the above problem一、问题重述该市在郊区和农区建立了8个蔬菜种植基地,承担全市居民的蔬菜供应任务,每天将蔬菜运送到市区的35个蔬菜销售点。
2003高教社杯全国大学生数学建模竞赛B 题参考答案注意:以下答案是命题人给出的,仅供参考。
各评阅组应根据对题目的理解及学生的解答,自主地进行评阅。
问题分析:本题目与典型的运输问题明显有以下不同: 1. 运输矿石与岩石两种物资; 2. 产量大于销量的不平衡运输; 3. 在品位约束下矿石要搭配运输; 4. 产地、销地均有单位时间的流量限制; 5. 运输车辆每次都是满载,154吨/车次; 6. 铲位数多于铲车数意味着最优的选择不多于7个产地; 7. 最后求出各条路线上的派出车辆数及安排。
运输问题对应着线性规划,以上第1、2、3、4条可通过变量设计、调整约束条件实现;第5条使其变为整数线性规划;第6条用线性模型实现的一种办法,是从120710 C 个整数规划中取最优的即得到最佳物流;对第7条由最佳物流算出各条路线上的最少派出车辆数(整数),再给出具体安排即完成全部计算。
对于这个实际问题,要求快速算法,计算含50个变量的整数规划比较困难。
另外,这是一个二层规划,第二层是组合优化,如果求最优解计算量较大,现成的各种算法都无能为力。
于是问题变为找一个寻求近优解的近似解法,例如可用启发式方法求解。
调用120次整数规划可用三种方法避免:(1)先不考虑电铲数量约束运行整数线性规划,再对解中运量最少的几个铲位进行筛选;(2)在整数线性规划的铲车约束中调用sign 函数来实现;(3)增加10个0-1变量来标志各个铲位是否有产量。
这是一个多目标规划,第一问的目标有两层:第一层是总运量(吨公里)最小,第二层是出动卡车数最少,从而实现运输成本最小。
第二问的目标有:岩石产量最大;矿石产量最大;运量最小,三者的重要性应按此序。
合理的假设主要有:1. 卡车在一个班次中不应发生等待或熄火后再启动的情况;2. 在铲位或卸点处因两条路线(及以上)造成的冲突时,只要平均时间能完成任务即可,不进行排时讨论;3. 空载与重载的速度都是28km/h ,耗油相差却很大,因此总运量只考虑重载运量;4. 卡车可提前退出系统。
蔬菜运输问题2012年8月22日摘要本文运用floyd算法求出各蔬菜采购点到每个菜市场的最短运输距离,然后用lingo软件计算蔬菜调运费用及预期短缺损失最小的调运方案,紧接着根据题目要求对算法加以修改得出每个市场短缺率都小于20%的最优调运方案,并求出了最佳的供应改进方案。
关键词最短路问题floyd算法运输问题一、问题重述光明市是一个人口不到15万人的小城市。
根据该市的蔬菜种植情况,分别在花市(A),城乡路口(B)和下塘街(C)设三个收购点,再由各收购点分送到全市的8个菜市场,该市道路情况,各路段距离(单位:100m)及各收购点,菜市场①⑧的具体位置见图1,按常年情况,A,B,C三个收购点每天收购量分别为200,170和160(单位:100 kg),各菜市场的每天需求量及发生供应短缺时带来的损失(元/100kg)见表 1.设从收购点至各菜市场蔬菜调运费为1元/(100kg.100m).①7 ②5 4 8 3 7A 7 ⑼ 6 B⑥ 6 8 55 4 7 117 ⑾ 4 ③7 5 66 ⑤ 3 ⑿ 5 ④⑽8 6 610 C 10 ⑧5 11⑦图1(a)为该市设计一个从收购点至个菜市场的定点供应方案,使用于蔬菜调运及预期的短缺损失为最小;(b)若规定各菜市场短缺量一律不超过需求量的20%,重新设计定点供应方案(c)为满足城市居民的蔬菜供应,光明市的领导规划增加蔬菜种植面积,试问增产的蔬菜每天应分别向A,B,C三个采购点供应多少最经济合理。
二、问题分析求总的运费最低,可以先求出各采购点到菜市场的最小运费,由于单位重量运费与距离成正比,题目所给的图1里包含了部分菜市场、中转点以及收购点之间的距离,(a)题可以用求最短路的方法求出各采购点到菜市场的最短路径,乘上单位重量单位距离费用就是单位重量各运输线路的费用,然后用线性方法即可解得相应的最小调运费用及预期短缺损失。
第二问规定各菜市场短缺量一律不超过需求量的20%,只需要在上题基础上加上新的限制条件,即可得出新的调运方案。
第三问可以在第二问的基础上用灵敏度分析进行求解,也可以建立新的线性问题进行求解。
三、模型假设1、各个菜市场、中转点以及收购点都可以作为中转点;2、各个菜市场、中转点以及收购点都可以的最大容纳量为610吨;3、假设只考虑运输费用和短缺费用,不考虑装卸等其它费用;4、假设运输的蔬菜路途中没有损耗;5、忽略从种菜场地到收购点的运输费用。
四、符号说明A收购点分送到全市的8个菜市场的供应量分别为a1,b1,c1,d1,e1,f1,g1,h1, B收购点分送到全市的8个菜市场的供应量分别为a2,b2,c2,d2,e2,f2,g2,h2, C收购点分送到全市的8个菜市场的供应量分别为a3,b3,c3,d3,e3,f3,g3,h3, 8个菜市场的短缺损失量分别为a,b,c,d,e,f,g,h(单位均为100kg)。
五、模型的建立与求解按照问题的分析,首先就要求解各采购点到菜市场的最短距离,在图论里面关于最短路问题比较常用的是Dijkstra算法,Dijkstra算法提供了从网络图中某一点到其他点的最短距离。
主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。
但由于它遍历计算的节点很多,所以效率较低,实际问题中往往要求网络中任意两点之间的最短路距离。
如果仍然采用Dijkstra算法对各点分别计算,就显得很麻烦。
所以就可以使用网络各点之间的矩阵计算法,即Floyd 算法。
Floyd算法的基本是:从任意节点i到任意节点j的最短路径不外乎2种可能,1是直接从i到j,2是从i经过若干个节点k到j。
i到j的最短距离不外乎存在经过i与j之间的k和不经过k两种可能,所以可以令k=1,2,3,...,n(n是城市的数目),在检查d(i,j)与d(i,k)+d(k,j)的值;在此d(i,k)与d(k,j)分别是目前为止所知道的i到k与k到j的最短距离。
因此d(i,k)+d(k,j)就是i到j经过k的最短距离。
所以,若有d(i,j)>d(i,k)+d(k,j),就表示从i出发经过k再到j的距离要比原来的i到j距离短,自然把i到j的d(i,j)重写为d(i,k)+d(k,j),每当一个k查完了,d(i,j)就是目前的i到j的最短距离。
重复这一过程,最后当查完所有的k时,d(i,j)里面存放的就是i到j之间的最短距离了。
对于上面的问题,只要能列出它的距离的邻接矩阵,如表2所示。
便能用floyd法进行计算了。
表2 各点的邻接矩阵图首先对图1中的4个纯中转点进行编号,为(9)~(12),并标注在图1中,A、B、C的编号分别为1、14、15,其余点在矩阵中的编号如表1第一行所示。
由于数据比较复杂,用普通的计算很困难,所以我们可以用MATLAB软件来编程求解。
算法思路:采用标号作业法,每次迭代产生一个永久标号, 从而生长一颗以V0为根的最短路树,在这颗树上每个顶点与根节点之间的路径皆为最短路径。
当然此问题也需要表2的各点邻接矩阵。
接下来可以得到Dijkstra法的MATLAB语言。
M程序如下:function [min,path]=dijkstra(w,start,terminal)n=size(w,1); label(start)=0; f(start)=start;for i=1:nif i~=startlabel(i)=inf;end, ends(1)=start; u=start;while length(s)<nfor i=1:nins=0;for j=1:length(s)if i==s(j)ins=1;end, endif ins==0v=i;if label(v)>(label(u)+w(u,v))label(v)=(label(u)+w(u,v)); f(v)=u;end, end, endv1=0;k=inf;for i=1:nins=0;for j=1:length(s)if i==s(j)ins=1;end, endif ins==0v=i;if k>label(v)k=label(v); v1=v;end, end, ends(length(s)+1)=v1;u=v1;endmin=label(terminal); path(1)=terminal;i=1;while path(i)~=startpath(i+1)=f(path(i));i=i+1 ;endpath(i)=start;L=length(path);path=path(L:-1:1);图2 Dijkstra算法的MATLAB运行图如图2,红色框内的是Dijkstra算法的脚本程序,蓝色框内的试运行结果,根据程序显示s点到j点的最短路就是4百米。
在程序中显示所走的路线为path=1 2,对应点即为直接从A点到达①点。
但是由于运用dijkstra编程每次都要修改起始点和终点,所以在大部分情况下效率都不高。
由于dijkstra算法较为复杂,所以可用Floyd算法用于求最短路径。
Floyd 算法思路本质很简单,即用三个for循环的嵌套,代码思路如下:for ( int i = 0; i < 节点个数; ++i ){for ( int j = 0; j < 节点个数; ++j ){for ( int k = 0; k < 节点个数; ++k ){if ( Dis[i][k] + Dis[k][j] < Dis[i][j] ){// 找到更短路径Dis[i][j] = Dis[i][k] + Dis[k][j];}}}}但是这里我们要注意循环的嵌套顺序,如果把检查所有节点X放在最内层,那么结果将是不正确的,因为这样便过早的把i到j的最短路径确定下来了,所以正确的应该是这样的:for ( k = 0; k < 节点个数; ++k ){for ( i = 0; i < 节点个数; ++i ){for ( j = 0; j < 节点个数; ++j ){if ( Dis[i][k] + Dis[k][j] < Dis[i][j] ){%找到更短路径Dis[i][j] = Dis[i][k] + Dis[k][j];}}}.}那么接下来的问题就是,我们如何找出最短路径.这里需要借助一个辅助数组Path,它是这样使用的:Path(AB)的值如果为P,则表示A节点到B节点的最短路径是A->...->P->B。
这样一来,假设我们要找A->B的最短路径,那么就依次查找,假设Path(AB)的值为P,那么接着查找Path(AP),假设Path(AP)的值为L,那么接着查找Path(AL),假设Path(AL)的值为A,则查找结束,最短路径为A->L->P->B。
那么,如何填充Path的值呢?很简单,当我们发现Dis(AX) + Dis(XB) < Dis(AB)成立时,就要把最短路径改为A->...->X->...->B,而此时,Path(XB)的值是已知的,所以,Path(AB) = Path(XB)。
Floyd算法直接在图的带权邻接矩阵中用插入顶点的方法依次递推地构造出n个矩阵D(1), D(2), …, D(n), D(n)是图的距离矩阵, 同时引入一个后继点矩阵记录两点间的最短路径。
d(i,j) : i到j的距离; path(i,j): i到j的路径上i的后继点;输入带权邻接矩阵a(i,j)。
赋初值,对所有i,j, d(i,j)a(i,j) , path(i,j)j,k=l。
然后更新d(i,j) , path(i,j)对所有i,j,若d(i,k)+d(k,j)<d(i,j)则d(i,j)=d(i,k)+d(k,j) , path(i,j)path(i,k) , k =k+1。
重复上述步骤直到k=n+1。
接下来就是代入具体的数据了,这里的图以及邻接矩阵依旧是修改后的图1及表2。
Floyd算法的MATLAB代码如下:M程序function [D,path,min1,path1]=floyd(a,start,terminal)D=a;n=size(D,1);path=zeros(n,n);for i=1:nfor j=1:nif D(i,j)~=infpath(i,j)=j;end, end, endfor k=1:nfor i=1:nfor j=1:nif D(i,k)+D(k,j)<D(i,j)D(i,j)=D(i,k)+D(k,j);path(i,j)=path(i,k);end, end, end,endif nargin==3min1=D(start,terminal);m(1)=start;i=1;path1=[ ];while path(m(i),terminal)~=terminalk=i+1;m(k)=path(m(i),terminal);i=i+1;endm(i+1)=terminal;path1=m;end脚本程序的代码如下:a=[0 4 8 8 inf inf 6 inf inf 7 inf 4 inf inf inf4 0 7 inf inf inf5 inf inf inf inf inf inf inf inf8 7 0 inf inf inf inf inf inf 3 inf inf inf 7 inf8 inf inf 0 inf 5 inf inf inf 5 inf 4 6 7 infinf inf inf inf 0 inf inf inf inf inf inf inf 5 inf inf inf inf inf 5 inf 0 inf inf inf inf 6 7 3 inf 66 5 inf inf inf inf 0 inf inf inf7 5 inf inf infinf inf inf inf inf inf inf 0 11 inf 10 inf inf inf 5 inf inf inf inf inf inf inf 11 0 inf inf inf 6 inf 10 7 inf 3 5 inf inf inf inf inf 0 inf inf inf 6 infinf inf inf inf inf 6 7 10 inf inf 0 inf inf inf 84 inf inf 4 inf 75 inf inf inf inf 0 inf inf infinf inf inf 6 5 3 inf inf 6 inf inf inf 0 11 inf inf inf 7 7 inf inf inf inf inf 6 inf inf 11 0 inf inf inf inf inf inf 6 inf 5 10 inf 8 inf inf inf 0];[D, path]=floyd(a)运行结果如下:图3 返回矩阵D图4 返回矩阵pathD(i,j)表示i到j的最短距离; path(i,j)表示i与j之间的最短路径上顶点i的后继点。