PTV 序列优化:路线中客户的特殊排序

PTV Sequence Optimization: Special ordering of customers in a route

我们正在尝试使用 PTV 的序列优化服务来计划运输。 我们有某些“类型”的客户:类型 1、类型 2 和类型 3。 必须在路线开始时拜访第 1 类客户。然后必须拜访第 2 类客户。第三类客户必须最后拜访。每种类型可能有多个客户。

我们尝试使用传输的“优先级”字段,但似乎没有达到我们想要的效果。

我们有一个示例请求。在计算出的路线中,运输没有按我们希望的方式排序:

{
   "locations":[
      {
         "id":"Depot",
         "type":"Depot",
         "latitude":47.3834738721015,
         "longitude":0.703125
      },
      {
         "id":"Customer 1",
         "type":"Customer",
         "latitude":47.387193097780425,
         "longitude":0.76080322265625
      },
      {
         "id":"Customer 2",
         "type":"Customer",
         "latitude":47.3625715946783,
         "longitude":0.7446670532226564
      },
      {
         "id":"Customer 3",
         "type":"Customer",
         "latitude":47.35143118114693,
         "longitude":0.7175445556640625
      },
      {
         "id":"Customer 4",
         "type":"Customer",
         "latitude":47.36071114618885,
         "longitude":0.7371139526367188
      }
   ],
   "transports":[
      {
         "id":"Transport 1 (type 1)",
         "pickupLocationId":"Depot",
         "deliveryLocationId":"Customer 1"
      },
      {
         "id":"Transport 2 (type 2)",
         "pickupLocationId":"Depot",
         "deliveryLocationId":"Customer 2"
      },
      {
         "id":"Transport 3 (type 2)",
         "pickupLocationId":"Depot",
         "deliveryLocationId":"Customer 3"
      },
      {
         "id":"Transport 4 (type 3)",
         "pickupLocationId":"Depot",
         "deliveryLocationId":"Customer 4"
      }
   ],
   "driver":{
      "availability":{
         "start":"2022-02-01T08:00:00.000+00:00",
         "end":"2022-02-01T18:00:00.000+00:00"
      }
   }
}

您提到了交通优先事项。这些仅用于决定是否计划了订单。它不用于决定它计划在路线中的位置。

要实现您的目标,您可以使用 routeSectionNumber。它指定客户位置在路线中的相对位置。 请注意,这是位置上的字段,而不是传输中的字段。 使用这个字段你会得到想要的结果:

{
   "locations":[
      {
         "id":"Depot",
         "type":"Depot",
         "latitude":47.3834738721015,
         "longitude":0.703125
      },
      {
         "id":"Customer 1",
         "type":"Customer",
         "latitude":47.387193097780425,
         "longitude":0.76080322265625,
         "customerLocationAttributes":{
            "routeSectionNumber":1
         }
      },
      {
         "id":"Customer 2",
         "type":"Customer",
         "latitude":47.3625715946783,
         "longitude":0.7446670532226564,
         "customerLocationAttributes":{
            "routeSectionNumber":2
         }
      },
      {
         "id":"Customer 3",
         "type":"Customer",
         "latitude":47.35143118114693,
         "longitude":0.7175445556640625,
         "customerLocationAttributes":{
            "routeSectionNumber":2
         }
      },
      {
         "id":"Customer 4",
         "type":"Customer",
         "latitude":47.36071114618885,
         "longitude":0.7371139526367188,
         "customerLocationAttributes":{
            "routeSectionNumber":3
         }
      }
   ],
   "transports":[
      {
         "id":"Transport 1 (type 1)",
         "pickupLocationId":"Depot",
         "deliveryLocationId":"Customer 1"
      },
      {
         "id":"Transport 2 (type 2)",
         "pickupLocationId":"Depot",
         "deliveryLocationId":"Customer 2"
      },
      {
         "id":"Transport 3 (type 2)",
         "pickupLocationId":"Depot",
         "deliveryLocationId":"Customer 3"
      },
      {
         "id":"Transport 4 (type 3)",
         "pickupLocationId":"Depot",
         "deliveryLocationId":"Customer 4"
      }
   ],
   "driver":{
      "availability":{
         "start":"2022-02-01T08:00:00.000+00:00",
         "end":"2022-02-01T18:00:00.000+00:00"
      }
   }
}