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"
}
}
}
我们正在尝试使用 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"
}
}
}