首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在这里,旅游规划API所面临的问题是同一班次的多个接送和多个送货。

在这里,旅游规划API所面临的问题是同一班次的多个接送和多个送货。
EN

Stack Overflow用户
提问于 2022-08-17 05:37:49
回答 1查看 87关注 0票数 -1

我用的是舰队管理系统。我有一个场景,司机必须去多个地方,以拾取和交付皮卡产品在多个交付地点。

我有一个这样的场景,

订单1-收件(P1时间范围从上午10 :00到上午11:00 )10产品。它有三个交货点在不同的地点,在任何时间都可以用在班次(D1,D2,D3),所有挑选的产品都将在交付地点交付。

订单2-收件(P2时间范围为上午11:00至下午12:00 ) 10产品。它有三个交货点在不同的地点,在任何时间都可以用在班次(D4,D5,D6),所有挑选的产品都将在交付地点交付。

订单3-收件(P3时间范围为上午10 :30至晚上11:30 )10产品。它有三个交货点在不同的地点,在任何时间都可以用在班次(D7,D8,D9),所有挑选的产品都将在交付地点交付。

在上面的场景中,我们有一个限制,如果收件不完整,那么我们就不能使这个订单交付,就像如果P1不完成,那么我们就不能完成D1、D2或D3。

因此,我们的优化列表应该按优先顺序设置。我们得到了优化的停止,但有一段时间,我们得到的交货停下来之前,皮卡停。所以我们要防止这件事发生。

是否有任何指示来使用这里的旅游规划API来做这件事。

EN

回答 1

Stack Overflow用户

发布于 2022-08-17 10:35:10

多任务VRP

一个多任务,而不是一个简单的工作,是一个由多个接送和交付组成的工作。这类作业的具体特点是,只有当作业中的所有任务都已完成时,它们才能被视为已执行,否则,它们都不会被执行。此外,托运和送货的需求之和必须相等。多任务问题的一个非常常见的场景可能是在不同的位置执行多个拾取,然后发送到单个位置。

我们可以想象现实生活中的多任务VRP,例如,一辆校车的日常工作,它必须在不同的地址接几个孩子并送他们到学校。我们可以猜到,用同一辆校车把孩子们从学校带回家也是一种多任务的VRP。

在现实生活中使用多任务VRP的另一个例子是垃圾收集公司的工作,当一辆车不得不在工作中执行几次拾取和一次传递时(从城市的几个地点收集垃圾并将其送到垃圾场位置)。

因此,让我们考虑一下,我们有一个多任务,有几个皮卡和一个送货。假设我们需要通过校车把3个孩子从他们的具体地址送到当地学校。关于车辆,我们需要它开始和结束在一个部门,即在同一地点的换档。我们指定了常规的车辆约束,如成本、距离、换挡时间、位置、容量和数量。请注意,例如,在校车的情况下,您可以假设您的容量单位是人员/儿童。

代码语言:javascript
复制
{
  "fleet": {
    "types": [
      {
        "id": "b0130d2f754d",
        "profile": "car_1",
        "costs": {
          "fixed": 5.0,
          "distance": 0.007,
          "time": 0.002
        },
        "shifts": [
          {
            "start": {
              "time": "2021-08-27T08:03:00Z",
              "location": {
                "lat": 52.530971,
                "lng": 13.384915
              }
            },
            "end": {
              "time": "2021-08-27T16:03:00Z",
              "location": {
                "lat": 52.48693181589403,
                "lng": 13.308748991045801
              }
            }
          }
        ],
        "capacity": [
          20
        ],
        "amount": 1
      }
    ],
    "profiles": [
      {
        "type": "car",
        "name": "car_1"
      }
    ]
  },

关于工作,在这种情况下,您可以根据需要设置它们。一种方法是将所有拾取作为单独的作业添加,然后添加一个送货作业。另一种方法是使用多任务。以这种方式,您可以添加一个多任务与所有的拾取和一个交付在最后。让我们建立一个问题,我们将有一个多任务与3个皮卡和1个交付,以交付所有这些皮卡在一个地点。问题

代码语言:javascript
复制
{
  "fleet": {
    "types": [
      {
        "id": "b0130d2f754d",
        "profile": "car_1",
        "costs": {
          "fixed": 5.0,
          "distance": 0.007,
          "time": 0.002
        },
        "shifts": [
          {
            "start": {
              "time": "2021-08-27T08:03:00Z",
              "location": {
                "lat": 52.530971,
                "lng": 13.384915
              }
            },
            "end": {
              "time": "2021-08-27T16:03:00Z",
              "location": {
                "lat": 52.530971,
                "lng": 13.384915
              }
            }
          }
        ],
        "capacity": [
          30
        ],
        "amount": 1
      }
    ],
    "profiles": [
      {
        "type": "car",
        "name": "car_1"
      }
    ]
  },
  "plan": {
    "jobs": [
      {
        "id": "job_1",
        "tasks": {
          "pickups": [
            {
              "places": [
                {
                  "location": {
                    "lat": 52.47706593757918,
                    "lng": 13.390815701172201
                  },
                  "duration": 660,
                  "tag": "Address_1"
                }
              ],
              "demand": [
                1
              ]
            },
            {
              "places": [
                {
                  "location": {
                    "lat": 52.473571009931106,
                    "lng": 13.389035169086807
                  },
                  "duration": 1140,
                  "tag": "Address_2"
                }
              ],
              "demand": [
                1
              ]
            },
            {
              "places": [
                {
                  "location": {
                    "lat": 52.53090538774364,
                    "lng": 13.384692097156309
                  },
                  "duration": 840,
                  "tag": "Address_3"
                }
              ],
              "demand": [
                1
              ]
            }
          ],
          "deliveries": [
            {
              "places": [
                {
                  "location": {
                    "lat": 52.58919138279804,
                    "lng": 13.462161100698735
                  },
                  "duration": 1020,
                  "tag": "Address_4"
                }
              ],
              "demand": [
                3
              ]
            }
          ]
        }
      }
    ]
  }
}

解决方案

这个问题的解决办法如下:

代码语言:javascript
复制
{
    "statistic": {
        "cost": 273.77500000000003,
        "distance": 36041,
        "duration": 8244,
        "times": {
            "driving": 4584,
            "serving": 3660,
            "waiting": 0,
            "break": 0
        }
    },
    "tours": [
        {
            "vehicleId": "b0130d2f754d_1",
            "typeId": "b0130d2f754d",
            "stops": [
                {
                    "location": {
                        "lat": 52.530971,
                        "lng": 13.384915
                    },
                    "time": {
                        "arrival": "2021-08-27T08:03:00Z",
                        "departure": "2021-08-27T08:03:00Z"
                    },
                    "load": [
                        0
                    ],
                    "activities": [
                        {
                            "jobId": "departure",
                            "type": "departure"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 52.53090538774364,
                        "lng": 13.384692097156307
                    },
                    "time": {
                        "arrival": "2021-08-27T08:03:02Z",
                        "departure": "2021-08-27T08:17:02Z"
                    },
                    "load": [
                        1
                    ],
                    "activities": [
                        {
                            "jobId": "job_1",
                            "type": "pickup",
                            "jobTag": "Address_3"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 52.473571009931106,
                        "lng": 13.389035169086808
                    },
                    "time": {
                        "arrival": "2021-08-27T08:34:57Z",
                        "departure": "2021-08-27T08:53:57Z"
                    },
                    "load": [
                        2
                    ],
                    "activities": [
                        {
                            "jobId": "job_1",
                            "type": "pickup",
                            "jobTag": "Address_2"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 52.47706593757918,
                        "lng": 13.3908157011722
                    },
                    "time": {
                        "arrival": "2021-08-27T08:54:51Z",
                        "departure": "2021-08-27T09:05:51Z"
                    },
                    "load": [
                        3
                    ],
                    "activities": [
                        {
                            "jobId": "job_1",
                            "type": "pickup",
                            "jobTag": "Address_1"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 52.58919138279804,
                        "lng": 13.462161100698737
                    },
                    "time": {
                        "arrival": "2021-08-27T09:40:21Z",
                        "departure": "2021-08-27T09:57:21Z"
                    },
                    "load": [
                        0
                    ],
                    "activities": [
                        {
                            "jobId": "job_1",
                            "type": "delivery",
                            "jobTag": "Address_4"
                        }
                    ]
                },
                {
                    "location": {
                        "lat": 52.530971,
                        "lng": 13.384915
                    },
                    "time": {
                        "arrival": "2021-08-27T10:20:24Z",
                        "departure": "2021-08-27T10:20:24Z"
                    },
                    "load": [
                        0
                    ],
                    "activities": [
                        {
                            "jobId": "arrival",
                            "type": "arrival"
                        }
                    ]
                }
            ],
            "statistic": {
                "cost": 273.77500000000003,
                "distance": 36041,
                "duration": 8244,
                "times": {
                    "driving": 4584,
                    "serving": 3660,
                    "waiting": 0,
                    "break": 0
                }
            }
        }
    ]
}

从这个解决方案我们可以看到,车辆开始从一个仓库,然后它执行3皮卡和1交付多项任务,并返回到仓库。

还请参阅文档这里

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73383335

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档