一、

TSP问题数学模型

编辑

TSP,即Traveling Salesman Problem,也就是旅行商问题,又译为旅行推销员问题、货郎担问题,简称为TSP问题,是最基本的路线问题,该问题是在寻求单一旅行者由起点出发,通过所有给定的需求点之后,最后再回到原点的最小路径成本。最早的旅行商问题的数学规划是由Dantzig(1959)等人提出。
 
二、

有时间窗车辆路径问题

编辑

有时间窗车辆路径问题(vehicle routing problems with time windows,VRPTW)车辆路线问题(VRP)最早是由Dantzig和Ramser于1959年首次提出,它是指一定数量的客户,各自有不同数量的货物需求,配送中心向客户提供货物,由一个车队负责分送货物,组织适当的行车路线,目标是使得客户的需求得到满足,并能在一定的约束下,达到诸如路程最短、成本最小、耗费时间最少等目的。
 
三、以下内容from:http://wiki.mbalib.com/wiki/%E8%BD%A6%E8%BE%86%E8%B7%AF%E5%BE%84%E9%97%AE%E9%A2%98

车辆路径问题

 

车辆路径问题(Vehicle Routing Problem,VRP)



什么是车辆路径问题

  车辆路线问题(VRP)最早是由DantzigRamser于1959年首次提出,它是指一定数量的客户,各自有不同数量的货物需求,配送中心向客户提供货物,由一个车队负责分送货物,组织适当的行车路线,目标是使得客户的需求得到满足,并能在一定的约束下,达到诸如路程最短、成本最小、耗费时间最少等目的[1]

  由此定义不难看出,旅行商问题Traveling Saleman Problem,TSP)是VRP的特例,由于Gaery[2]已证明TSP问题NP难题,因此,VRP也属于NP难题。

  车辆路线问题自1959年提出以来,一直是网络优化问题中最基本的问题之一,由于其应用的广泛性和经济上的重大价值,一直受到国内外学者的广泛关注。车辆路线问题可以描述如下(如图1):

  

  设有一场站(depot),共有M 辆货车,车辆容量为Q,有N位顾客(customer),每位顾客有其需求量D。车辆从场站出发对客户进行配送服务最后返回场站,要求所有顾客都被配送,每位顾客一次配送完成,且不能违反车辆容量的限制,目的是所有车辆路线的总距离最小。车辆路线的实际问题包括配送中心配送、公共汽车路线制定、信件和报纸投递、航空和铁路时间表安排、工业废品收集等。

车辆路径问题的类型[3]

  一般而言车辆路线问题大致可以分为以下三种类型(Ballou,1992):

  1、相异的单一起点和单一终点。

  2、相同的单一起点和终点。

  3、多个起点和终点。

车辆路径问题的方法[3]

  关于车辆路线问题之学术研究文献众多,也提出了相当多的求解策略与方法,Bodin and Golden(1981)将众多之求解方法归纳成以下七种:

车辆路线问题研究现状[4]

  经过几十年的研究发展,车辆路线问题研究取得了大量成果。下面从车辆路线问题的现有研究型态和求解方法两个方面介绍车辆路线问题的研究现状。

车辆路线问题型态

  在基本车辆路线问题(VRP)的基础上,车辆路线问题在学术研究和实际应用上产生了许多不同的延伸和变化型态,包括时窗限制车辆路线问题(vehicle routing problems with time windows,VRPTW)、追求最佳服务时间的车辆路线问题(VRPDT)、多车种车辆路线问题(fleet size and mix vehicle routing problems,FSVRP)、车辆多次使用的车辆路线问题(vehicle routingproblems with multiple use of vehicle,VRPM)、考虑收集的车辆路线问题(vehicle routingproblems with backhauls,VRPB)、随机需求车辆路线问题(vehicle routing problem with stochastic demand,VRPSD)等。

求解方法

  1、求解方法演进

  综合过去有关车辆路线问题的求解方法,可以分为精确算法(exact algorithm)与启发式解法(heuristics),其中精密算法有分支界限法分支切割法集合涵盖法等;启发式解法有节约法模拟退火法确定性退火法禁忌搜寻法基因算法神经网络蚂蚁殖民算法等。1995年,Fisher[5]曾将求解车辆路线问题的算法分成三个阶段。第一阶段是从1960年到1970年,属于简单启发式方式,包括有各种局部改善启发式算法和贪婪法(Greedy)等;第二阶段是从1970年到1980年,属于一种以数学规划为主的启发式解法,包括指派法、集合分割法和集合涵盖法;第三阶段是从1990开始至今,属于较新的方法,包括利用严谨启发式方法、人工智能方法等。

  2、启发式算法

  由于VRP是NP-hard问题,难以用精确算发求解,启发式算法是求解车辆运输问题的主要方法,多年来许多学者对车辆运输问题进行了研究,提出了各种各样的启发式方法。车辆运输问题的启发式方法可以分为简单启发式算法、两阶段启发式算法、人工智能方法建立的启发式方法。

  简单启发式方法包括节省法或插入法、路线内/间节点交换法、贪婪法和局部搜索法等方法。节省法或插入法(savings or insertion)是在求解过程中使用节省成本最大的可行方式构造路线,直到无法节省为止。交换法则是依赖其他方法产生一个起始路线,然后以迭代的方式利用交换改善法减少路线距离,直到不能改善为止。1960年,Clarke和Wright[6]首先提出一种启发式节省法(savings methods)来建立车队配送路线。简单启发式方法简单易懂、求解速度快,但只适合求解小型、简单的VRP问题。

  两阶段方法包括先分组后定路线(clusterfirst-route second)和先定路线后分组(routefirst-cluster second)两种启发式策略。前者是先将所有需求点大略分为几个组,然后再对各个组分别进行路线排序;后者则是先将所有的需求点建构成一条路线,再根据车辆的容量将这一路线分割成许多适合的单独路线。

  1990年以来,人工智能方法在解决组合优化问题上显示出强大功能,在各个领域得到充分应用,很多学者也将人工智能引入车辆路线问题的求解中,并构造了大量的基于人工智能的启发式算法。禁忌搜索法(TS)基本上是属于一种人工智能型(AI)的局部搜寻方法,Willard首先将此算法用来求解VRP ,随后亦有许多位学者也发表了求解VRP的TS 算法。西南交通大学的袁庆达[7]等设计了考虑时间窗口和不同车辆类型的禁忌算法,这种算法主要采用GENIUS方法产生初始解,然后禁忌算法对初始解优化。模拟退火方法具有收敛速度快,全局搜索的特点,Osman[8]对VRP的模拟退火算法进行了研究,他提出的模拟退火方法主要适合于解决路线分组。遗传算法具有求解组合优化问题的良好特性,Holland首先采用遗传算法(GA)编码解决VRPTW 问题。现在多数学者采用混合策略,分别采用两种人工智能方法进行路线分组和路线优化。Ombuki[9]提出了用遗传算法进行路线分组,然后用禁忌搜索方法进行路线优化的混合算法。Bent和Van Hentenryck[10]则首先用模拟退火算法将车辆路线的数量最小化,然后用大邻域搜索法(largneighborhood search)将运输费用降到最低。

  总结几种人工智能方法可以看出,TS算法所得到的解最接近最优解,但其运算时间也最长,是GA算法的2~3倍,SA算法的近20倍;由于GA算法也能较好的逼近最优解,同时使运算时间大大缩短,所以GA算法能兼顾运算时间和效率两方面,是具有较好的发展前途的方法;SA算法求解速度非常快,也能提供一定程度上的优化方案在求解较小规模问题上具有较好效果。

【一】TSP、VRP、VRP模型介绍的更多相关文章

  1. IO模型介绍

    先理解几个问题: (1)为什么读取文件的时候,需要用户进程通过系统调用内核完成(系统不能自己调用内核)什么是用户态和内核态?为什么要区分内核态和用户态呢? 在 CPU 的所有指令中,有些指令是非常危险 ...

  2. 模型介绍之FastText

    模型介绍一: 1. FastText原理及实践 前言----来源&特点 fastText是Facebook于2016年开源的一个词向量计算和文本分类工具,在学术上并没有太大创新.但是它的优点也 ...

  3. python 全栈开发,Day44(IO模型介绍,阻塞IO,非阻塞IO,多路复用IO,异步IO,IO模型比较分析,selectors模块,垃圾回收机制)

    昨日内容回顾 协程实际上是一个线程,执行了多个任务,遇到IO就切换 切换,可以使用yield,greenlet 遇到IO gevent: 检测到IO,能够使用greenlet实现自动切换,规避了IO阻 ...

  4. {python之IO多路复用} IO模型介绍 阻塞IO(blocking IO) 非阻塞IO(non-blocking IO) 多路复用IO(IO multiplexing) 异步IO(Asynchronous I/O) IO模型比较分析 selectors模块

    python之IO多路复用 阅读目录 一 IO模型介绍 二 阻塞IO(blocking IO) 三 非阻塞IO(non-blocking IO) 四 多路复用IO(IO multiplexing) 五 ...

  5. (zhuan) 深度学习全网最全学习资料汇总之模型介绍篇

    This blog from : http://weibo.com/ttarticle/p/show?id=2309351000224077630868614681&u=5070353058& ...

  6. 深入理解 Java 内存模型(一)- 内存模型介绍

    深入理解 Java 内存模型(一)- 内存模型介绍 深入理解 Java 内存模型(二)- happens-before 规则 深入理解 Java 内存模型(三)- volatile 语义 深入理解 J ...

  7. OSI七层网络模型与TCP/IP四层模型介绍

    目录 OSI七层网络模型与TCP/IP四层模型介绍 1.OSI七层网络模型介绍 2.TCP/IP四层网络模型介绍 3.各层对应的协议 4.OSI七层和TCP/IP四层的区别 5.交换机工作在OSI的哪 ...

  8. IO模型《一》IO模型介绍

    IO模型介绍 为了更好地了解IO模型,我们需要事先回顾下:同步.异步.阻塞.非阻塞 同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞 ...

  9. Python socket编程之IO模型介绍(多路复用*)

    1.I/O基础知识 1.1 什么是文件描述符? 在网络中,一个socket对象就是1个文件描述符,在文件中,1个文件句柄(即file对象)就是1个文件描述符.其实可以理解为就是一个“指针”或“句柄”, ...

  10. Qt样式表之一:Qt样式表和盒子模型介绍

    一.Qt样式表介绍 Qt样式表是一个可以自定义部件外观的十分强大的机制,可以用来美化部件.Qt样式表的概念.术语和语法都受到了HTML的层叠样式表(Cascading Style Sheets, CS ...

随机推荐

  1. NumPy 教程目录

    NumPy 教程目录 1 Lesson1--NumPy NumPy 安装 2 Lesson2--NumPy Ndarray 对象 3 Lesson3--NumPy 数据类型 4 Lesson4--Nu ...

  2. 原生js获取子元素

    感谢原文作者:归一山人 原文链接:https://www.cnblogs.com/guiyishanren/p/12214757.html 获取子元素的方法有 //获取第一个demo类 dom = d ...

  3. Spring学习七:ComponentScan注解

    今天主要从以下几个方面来介绍一下@ComponentScan注解: @ComponentScan注解是什么 @ComponentScan注解的详细使用 1.ComponentScan注解是什么 其实很 ...

  4. JAVA多线程学习六-守护线程

    java中的守护程序线程是一个服务提供程序线程,它为用户线程提供服务. 它的生命依赖于用户线程,即当所有用户线程都死掉时,JVM会自动终止该线程. 有许多java守护程序线程自动运行,例如 gc,fi ...

  5. Html设置文本换行与不按行操作

    图片来源:W3C 部分引自大佬:https://zhidao.baidu.com/question/424920602093167052.html 强制不换行 div{ white-space:now ...

  6. Eclipse不能启动,提示:The Eclipse executable launcher was unable to locate its companion launcher jar

    原因分析:JDK版本与eclipse不匹配 如jdk和eclipse版本号必须统一,64位都是64位,32位都是32位. jdk版本可以用命令,cmd进入命令窗口,然后输入java -version, ...

  7. uni showLoading 还有注意关闭 闭包, .finally

    uni.showLoading({ title:'正在提交...' }); let data = JSON.parse(JSON.stringify($this.sendData)); const r ...

  8. markdown常见问题

    图片的引用问题: ![image](./images/git命令.png) 为啥不显示图片?????? 解答:图片路径不支持中文 斜体跟加粗 *强调* 或者 _强调_ (示例:斜体) **加重强调** ...

  9. FileInputStream 类与 FileReader 类的区别

    FileInputStream 类与 FileReader 类的区别: 两个类的构造函数的形式和参数都是相同的,参数为 File 对象或者表示路径的 String ,它们到底有何区别呢? FileIn ...

  10. docker | jenkins 实现自动化部署项目,后端躺着把运维的钱挣了!(上)

    前言 背景 最近在帮学校导师写项目,团队有4个人,项目前后端分离.如果是选择瀑布式开发:(在约定好接口的情况下)A.B同学写前端,C.D同学写后端,然后约定一个时间统一联调,最后将项目交付安装到客户机 ...