ortools解决tsp_ortools系列:路由问题1

ortools系列:路由问题1

1. 路由问题

运筹学中最有趣的领域之一是路由,其目标是找到通过复杂网络传输物品的有效路径。网络通常用如下图所示的图来表示。

每个节点表示一个位置,路由是通过一组节点的路径。大多数实际的路由问题都涉及到为车辆(汽车、火车、飞机等等)寻找有效的路径,因此它们通常被称为车辆路由问题。

路由问题可以分为两种主要类型:节点路由问题和弧线路由问题,这取决于目标是以访问节点(位置)还是弧线(连接它们的边)的形式表示的。我们将给出每个例子。

首先,这里有一个弧线路由问题,如果你看过谷歌地图街景,你可能想知道谷歌是如何在全世界数百万个地址获得街道级别的图像的。答案很简单:谷歌的一个团队驾驶着一队装备有自动拍摄每个地址照片的摄像头的车队,持续行驶在世界各地的道路上。谷歌的问题是为每辆在指定区域内穿越每条街道的车辆构造最短的路线。如果你用一个图来表示这个问题,其中弧线代表街道,而节点是街道的交叉点,那么弧线路由问题就是找出穿过图中每个弧线的最短路径。谷歌每天使用ortools中提供的技术来解决这个问题。

节点路由问题的一个例子是车辆路由。假设一个公司需要使用车队将包裹运送到不同的地点。在这个问题的图中,节点表示位置,弧线表示它们之间的路由。每条弧线都有一个重量,对应于该路线的运行成本。问题:在图中找到一组路径(对应于每辆车的送货路线),其中包含每个目的地,同时最小化总成本。这与弧路由问题不同,因为路径不必遍历每个弧,只需包含每个节点。

OR-Tools包括一个专门的路由库来解决许多类型的节点路由问题:Traveling Salesman Problems (TSP),旅行商问题,这个问题非常著名,也是编程中一个基本问题,在编程领域通常用动态规划解决,现在很多用智能算法比如遗传算法等求解。当然如果你把它看成是一个运筹学的路由问题,就用运筹学的思路解决。

Vehicle Routing Problems (VRP), 这个问题类似收快递或送快递,比如说,有100个快递需要送到100个客户手中,但是一辆车只能送30个快递,需要怎么安排成本最小或最快的问题。

Capacitated Vehicle Routing Problems (CVRP),有约束的VRP问题,比如每辆车都有载重限制等。

Vehicle Routing Problems with Time Windows (VRPTW), 时间限制,车辆必须在一定时间内开始或完成任务。

Vehicle Routing Problems with Resource Constraints, 仓库可能有车辆限制,或车辆需要补充燃料。

Vehicle Routing Problems with Pickup and Delivery (VRPPD),车辆在交付客户前必须先取货。

我们看到,这些都是同一类问题,但是有不同的约束条件,比如车辆载重限制,时间限制,或者仓库限制等,针对不同的场景分别建模,效果会好得多,ortools也是这样做的。

注意:需要说明的是,还有其他的解决方案,如Concorde,致力于解决非常大的tsp优化,这已经超过了ortools的能力范围。然而,ortools提供了一个更好的平台来解决包含纯TSP之外的约束的更一般的路由问题。

2. TSP问题1

旅行商问题是计算机科学中最著名的问题之一。在下面的内容中,我们讲解如何解决TSP问题。

在推销员挨家挨户兜售真空吸尘器和百科全书的年代,他们不得不计划自己的路线,从一家到另一家,从一个城市到另一个城市。路线越短越好。查找访问一组地点的最短路径是一个指数难度的问题:查找20个城市的最短路径的难度是查找10个城市的两倍多。

对所有可能的路径进行彻底的搜索将确保找到最短的路径,但是对于除小的位置集之外的所有路径,这在计算上都是棘手的。对于较大的问题,需要使用优化技术来智能搜索解空间,找到近似最优解。

在数学上,旅行商问题可以表示为一个图,其中的位置是节点,而边(或弧)表示节点之间的直接路由。每条边的权值是节点之间的距离。目标是找到权值之和最短的路径。下面,我们看到一个简单的四节点图,以及访问每个节点的最短周期:

OR-Tools除了为经典的旅行商问题寻找解决方案外,还提供了针对更一般类型的tsp的方法,包括:传统的TSP是对称的:不对称成本问题从A点到B点的距离等于从A点B点的距离不过,航运物品的成本从A点到B点的成本可能不等于把A点B点或工具也可以处理成本不对称的问题。

Prize-collecting TSP:从访问节点中获益。

带有时间窗口的TSP。

我们来看这么一个例子,在美国的13个城市,不同城市之间的距离已经知道,现在需要找到一条路径,每个城市只访问一次,需要访问所有城市,该怎么走,才能使这条路径最短呢?<

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值