具有多个仓库,作业类型和目的地的路径优化

时间:2014-11-25 12:50:20

标签: routing resource-scheduling jsprit

我是路由优化的新手,非常感谢您使用jsprit解决以下业务需求。我收到了StefanSchröder的一些反馈,他帮助我学习了一些关于jsprit的基础知识。我先解释一下业务需求,然后再问几个问题。

目标是安排一个月内需要完成的维护工作清单。需要为整个月准备每日时间表。这里的目标是每天执行最多的工作。

  • 区域内每个都有4个仓库
  • 每个地区有大约70个仓库,共计300个仓库
  • 该区域内每个仓库和仓库之间的距离是已知的
  • 每个地区共有3-4辆不同类型的车辆,总共12辆车
  • 区域内的车辆只能为该地区内的仓库提供服务
  • 区域内的车辆具有相同的起点,恰好是终点
  • 车辆没有任何容量,皮卡或交付要求
  • 车辆仅用于运送将执行维护工作的工人
  • 每辆车的平均速度已知
  • 大约有80种维护工作类型
  • 每种作业类型需要花费已知的时间(分钟)
  • 维护作业不必在特定时间开始
  • 每月需要执行大约200个维护工作
  • 这些工作可以在任何仓库
  • 同一天或同一天,同一仓库可以办理多份工作
  • 一天内有3个8小时的班次。上午6点至下午2点,下午2点至10点,晚上10点至早上6点
  • 车辆将在班次开始时离开仓库仓库,并在八小时轮班内访问多个仓库
  • 在搬到下一个仓库或返回仓库仓库之前,车辆必须在仓库等待,然后才能进入仓库。

我的基本理解是可以将维护作业定义为jsprit中的服务,并且可以为每个车辆设置启动/返回时间。此外,成本矩阵可用于增加车辆与仓库之间关系的时间和距离。我的问题是:

  1. 每个维护作业都需要定义为服务,因此会有200个服务对象传递给VRP解算器,对吗?
  2. VehicleTypeImpl具有addCapacityDimension(),setCostPerDistance()和setCostPerTime()方法。具体是什么以及它们如何应用上述情况?
  3. Service.Builder具有addSizeDimension()方法。它做了什么?
  4. costMatrixBuilder具有添加TransportDistance和TransportTime的方法。这些方法使用哪些单位以及如何使用它们?
  5. 对于每个库,需要定义一个Coordinate并将其传递给每个VehicleImpl的setStartLocationCoordinate()方法。这是对的吗?
  6. vehicleBuilder有setLatestArrival(double maxDuration);在这里使用哪个单位?
  7. 我非常感谢您解决上述问题的任何帮助。

    谢谢, 亚当

    EDIT1:

    几个问题

    一个。 setEarliestStart()和setLatestArrival()方法接受double值,如何将最早的出发和最新到达指定为这些方法的实际日期?例如,开始时间是2014年11月28日下午2点,结束时间是同一天的晚上10点。

    B中。有没有办法以分钟为单位指定服务时间?

    ℃。 VehicleTypeImpl.Builder.setMaxVelocity(double inMeterPerSeconds)方法需要最大速度,有没有办法指定车辆的平均速度?

    d。所有车辆都必须在三班倒车上工作;这是否意味着我将需要定义相同的车辆三次,每次换班一次,具有最早的出发时间和最近的到达时间?

    电子。由于可以在月份的任何时间执行作业,每个作业的时间窗口是否会作为开始和月末传递给Service.Builder.setTimeWindow()方法?

1 个答案:

答案 0 :(得分:1)

ad1)正确

ad2)如果容量不起作用,则不需要addCapacityDimension(..)。如果是,您可以使用此方法定义任意数量的容量尺寸,例如重量,体积,托盘数量(然后是三个尺寸)。使用.setCostPerDistance(..),您可以设置 - 顾名思义 - 每个距离单位的成本(例如1欧元/公里)。因此,使用.setCostPerTime(..)可以设置每个时间单位的成本,例如20€/小时。因此,如果您的车辆/司机在1小时内行驶100公里,则需要100公里* 1欧元/公里+ 20欧元/小时* 1小时。

ad3)服务可能会消耗您车辆的容量。服务可能被称为客户/服务站点的运费提取。它可能有一定的体积,重量,它可以加载到某个没有。托盘。这是您使用.addCapacityDimension(..)

定义的内容

ad4)您可以定义单位。当您设置成本参数时,它应该是相同的单位。

ad5)正确。但你不一定需要坐标。您需要locationId或坐标,但您可以设置两者。 locationId应与将时间和距离关系添加到costMatrix时使用的相同。

ad6)同样,你确定单位。