2020.1.7(配送问题:路径优化 算法的学习)

问题介绍

车辆路径问题(Vehicle Routing Problem, VRP):它是指一定数量的客户(或配送点),各自有不同数量的货物需求,配送中心向客户提供货物,由一个车队负责分送货物,组织适当的行车路线,目标是使得客户的需求得到满足,并能在一定的约束下,达到诸如路程最短成本最小耗费时间最少等目的。

VRP属于组合优化问题,在有限个可行解集合中找出最优解,这类问题称为组合优化问题,是指在离散的、有限的数学结构上,求满足给定约束条件的目标函数最优值(最大值或最小值)的问题,也称离散优化问题,该类问题都与顺序有关。

VRP属于NP问题,Nondeterministic Polynomial即 非决定性多项式算法能够解决的问题。解决这类问题的方法有很多,主要的是启发式算法
按照判定问题的复杂性对最优化问题进行分类。问题复杂性的形式定义可用图灵机(Turing Machine)计算模型给出。

【如果一个问题有解它的多项式时间DTM(确定型图灵机)程序,则称该问题属于P类。P类问题表示多项式算法所能解决的判定问题类。

如果一个问题有解它的多项式时间NTM(非确定型图灵机)程序,则称该问题属于NP类。NP类问题是指可在多项式时间内检测的问题类,至今尚未找到多项式时间算法。】

对于一个NP类问题,并不要求它的每个实例都能用某个算法在多项式的时间内得到回答,只要求,如果x是问题的答案为“是”的实例,在存在对x的一个简短(即起长度以x的长度的多项式为界)证明,使得能在多项式时间内检验这个证明的真实性。

最短路问题

最短路问题(short-path problem)是网络理论解决的典型问题之一。基本内容是:若网络中的每条边都有一个数值(长度、成本、时间等),则找出两节点(通常是源节点和阱节点)之间总权和最小的路径就是最短路问题。

问题分类

  • 指定点间的最短路问题:又分为所有有向边的权大于零的情形和具有负权的最短路问题
  • 任意点对间的最短路问题

问题求解

  • 优化矩阵算法
  • Floyd算法

旅行商问题

旅行商问题(Traveling Salesman Problem, TSP)是一个典型的NP问题,一般描述为:旅行商从驻地出发,经过所要去的城市至少一次返回原地,应该如何安排起旅行线路,才能使总的旅行距离(时间、费用等)最短。

问题求解

线路构造法

  • 节约算法
  • 最邻近法
  • 最小生成树法
  • 几何启发式算法
  • 最近插入法
  • 最节约插入算法
  • 凸集插入算法
  • 非对称距离的TSP构造算法

线路改进法

  • 2 - 交换
  • 3 - 交换
  • or - 交换

VRP问题分类

  • Basic VRP, 基本VRP
  • CVRP: Capacitated Vehicle Routing Problem, 能力约束的VRP
  • VRPTW: VRP with Time Window, 有时间窗的VRP
  • VehicleRouting Problem with precedence Constraints,优先约束的VRP
  • VRP with Backhauls (Deliveries first), 带回程的VRP(投递优先)
  • VRP with Backhauls (mixed Pickups and Deliveries),带回程的VRP(捡获和送货结合)
  • Multiple Depot VRP, 多仓储的VRP
  • VRP with Heterogeneous Fleet: 多车辆车型VRP
  • VehicleRouting Problem with Compatibility Constraints,相容性约束VRP
  • Open VRP: 开放回路VRP
  • Time Dependent VRP: 基于时序变化的VRP
  • Dynamic VRP: 动态VRP

基本方法

  1. 精确算法

分枝界限法(Branch and Bound Approach)

“分枝界限法”把问题的可行解展开如树的分枝,再经由各个分枝中寻找最佳解。

分枝界限法也能够使用在混合整数规划问题上,其为一种系统化的解法,以一般线性规划之单形法解得最佳解后,将非整数值之决策变量分割成为最接近的两个整数,分列条件,加入原问题中,形成两个子问题(或分枝)分别求解,如此便可求得目标函数值的上限(上界)或下限(下界),从其中寻得最佳解。

割平面法(Cutting Planes Approach)
割平面法是求解 全整数规划 的一种比较简单的方法。其基本思想和分枝定界法大致相同,即先不考虑变量的取整约束,用单纯形法求解相应的线性规划。如果所得的最优解为整数解,那么它也是原整数规划问题的最优解。

如果最优解不是整数解,那么分枝定界法是任取一个取分数值的变量Xk = bk将原整数规划分成两枝,其实质是用两个垂直于坐标轴的平行平面Xk = [bk]和Xk = [bk] + 1将原可行域R分成两个可行域R1和R2,并将两个平行平面之间的不含有整数解的那一部分可行域去掉,以缩小可行域。

网络流算法(Network Flow Approach)
图论中的一种理论与方法,研究网络上的一类最优化问题 。所谓网络或容量网络指的是一个连通的赋权有向图 D= (V、E、C),其中V 是该图的顶点集,E是有向边(即弧)集,C是弧上的容量。此外顶点集中包括一个起点和一个终点。

网络上的流就是由起点流向终点的可行流,这是定义在网络上的非负函数,它一方面受到容量的限制,另一方面除去起点和终点以外,在所有中途点要求保持流入量和流出量是平衡的。

动态规划算法(Dynamic Programming Approach)
动态规划算法的基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解。依次解决各子问题,最后一个子问题就是初始问题的解。
由于动态规划解决的问题多数有重叠子问题这个特点,为减少重复计算,对每一个子问题只解一次,将其不同阶段的不同状态保存在一个二维数组中。

总的说来,精确性算法基于严格的数学手段,在可以求解的情况下,其解通常要优于人工智能算法。但由于引入严格的数学方法,计算量一般随问题规模的增大呈指数增长,因而无法避开指数爆炸问题,从而使该类算法只能有效求解中小规模的确定性VRP,并且通常这些算法都是针对某一特定问题设计的,适用能力较差,因此在实际中其应用范围很有限。

  1. 启发式算法求解

启发式算法(heuristic algorithm)是相对于最优化算法提出的,是通过对过去经验的归纳推理以及实验分析来解决问题的方法。用启发式算法解决问题时强调的是“满意”,常常是得到满意解,决策者就认为可以了,而不去追求最优性和探索最优解。所以启发式算法能够比较快的得到满意解,这对解决NP难题来说有个不可估量的作用。

元启发式算法

元启发式算法是对启发式算法的改进,增加了随机干扰算法以防止算法进入局部陷阱或早熟。

C-W节约启发式算法

节约里程法是用来解决运输车辆数目不确定的问题的最有名的启发式算法。又称节约算法或节约法,可以用并行方式和串行方式来优化行车距离。

节约里程法核心思想是依次将运输问题中的两个回路合并为一个回路,每次使合并后的总运输距离减小的幅度最大,直到达到一辆车的装载限制时,再进行下一辆车的优化。优化过程分为并行方式和串行方式两种。

遗传算法

遗传算法的工作原理是从达尔文的进化论中得到灵感和启迪,借鉴自然选择和自然进化的原理,模拟生物在自然界中的进化过程所形成的一种优化求解方法。尽管这种自适应寻优技术可以用来处理复杂的线形、非线性问题,但它的工作原理却十分简单。

模拟退火

模拟退火算法(Simulate Anneal,SA)是一种通用概率演算法,用来在一个大的搜寻空间内找寻命题的最优解。模拟退火算法是解决TSP问题的有效方法之一。

模拟退火的出发点是基于物理中固体物质的退火过程与一般组合优化问题之间的相似性。模拟退火算法是一种通用的优化算法,其物理退火过程由加温过程、等温过程、冷却过程这三部分组成。

蚁群算法

蚁群算法是一种用来寻找优化路径的概率型算法。
蚁群系统(Ant System或Ant Colony System):在研究蚂蚁觅食的过程中,单个蚂蚁的行为比较简单,但是蚁群整体却可以体现一些智能的行为。

例如蚁群可以在不同的环境下,寻找最短到达食物源的路径。这是因为蚁群内的蚂蚁可以通过某种信息机制实现信息的传递。后又经进一步研究发现,蚂蚁会在其经过的路径上释放一种可以称之为“信息素”的物质,蚁群内的蚂蚁对“信息素”具有感知能力,它们会沿着“信息素”浓度较高路径行走,而每只路过的蚂蚁都会在路上留下“信息素”,这就形成一种类似正反馈的机制,这样经过一段时间后,整个蚁群就会沿着最短路径到达食物源了。

超启发式算法
超启发式算法是一种启发式搜索方法,旨在实现自动化,常常与机器学习技术,选择、组合、生成过程,或调整几个简单的启发式算法(或启发式组件)有效地解决计算搜索类问题。研究超启发式的动机之一是建立能够处理一类问题的系统,而不是只解决一个问题。很明显超启发式算法的解决问题的范围更广,跨领域的应用能力更强大。

可能有多种启发式方法来解决一个问题,每个启发式都有自己的优点和缺点。其思想是通过结合已知启发式算法的强项和补偿算法的弱项来实现算法。在一个典型的超启发式框架中,有一个高层次的方法论和一组低级启发式算法(无论是构造性的还是微扰的启发式方法)。给定一个问题实例,高级方法根据当前的问题状态或搜索阶段选择在任何给定时间点应用哪种低级启发式。

你可能感兴趣的:(算法)