Cấu trúc cơ sở (ShipmentModel, Shipment và Vehicle)

ShipmentModel có một đối tượng `shipments` với loại thông báo `Shipment` và một đối tượng `vehicles` với loại thông báo `Vehicle`.

Mục tiêu của API Tối ưu hoá tuyến đường là lập kế hoạch tuyến đường cho một đội xe để đến một nhóm vị trí. Đối tượng OptimizeToursRequest mô tả các thuộc tính của các vị trí và xe này, đồng thời là cấu trúc chính của phần nội dung yêu cầu của mọi điểm cuối.

Cấu trúc cơ sở của đối tượng OptimizeToursRequest như sau:

Tài liệu này mô tả các loại thông báo sau:

  • ShipmentModel: Chứa danh sách các lô hàng, xe có sẵn và các đối tượng khác mô tả mối quan hệ của chúng.
  • Shipment: Mô tả các vị trí mà xe sẽ ghé thăm. Các điểm này có thể đại diện cho các gói thực tế cần lấy và giao hoặc các địa điểm mà người lái xe thực hiện dịch vụ.
  • Vehicle: Mô tả phương tiện vận chuyển giữa các vị trí gửi hàng. Mỗi phương tiện tương ứng với một phương tiện thực tế hoặc một người di chuyển bằng cách đi bộ.

ShipmentModel

ShipmentModel chứa các phần tử của vấn đề tối ưu hoá tuyến đường. Lịch trình này chứa một nhóm các chuyến hàng có thể do một nhóm xe thực hiện, đồng thời xem xét các quy tắc ràng buộc và giảm thiểu tổng chi phí.

Bảng dưới đây mô tả một số thuộc tính liên quan của ShipmentModel:

Thuộc tính Mô tả
shipmentsvehicles Các đối tượng bắt buộc chứa thông tin chi tiết về một hoặc nhiều lượt vận chuyển và xe.
globalStartTimeglobalEndTime Cho biết thời điểm bắt đầu và kết thúc của khoảng thời gian mà tất cả xe phải hoàn tất tất cả các chuyến hàng. Mặc dù không bắt buộc, nhưng bạn nên thêm các thuộc tính này vì trình tối ưu hoá hoạt động hiệu quả nhất khi tuân thủ các quy tắc ràng buộc về thời gian.

Hãy xem tài liệu tham khảo để biết danh sách đầy đủ các thuộc tính trong ShipmentModel.

Ví dụ về ShipmentModel

Trong ví dụ này, bạn có một dịch vụ trông giữ thú cưng và bạn đang bắt đầu tạo yêu cầu. Bạn sẽ xác định các chuyến hàng và xe sau, nhưng bạn nên bắt đầu bằng cách đặt giờ hoạt động và chi phí hoạt động theo giờ.

Đối với ví dụ này, các giá trị thuộc tính ShipmentModel trong yêu cầu của bạn sẽ là:

Thuộc tính Giá trị Mô tả
globalStartTime 2024-02-13T00:00:00.000Z Ngày và giờ bắt đầu giờ làm việc.
globalEndTime 2024-02-14T06:00:00.000Z Ngày và giờ kết thúc giờ làm việc.

Sau đây là mã mẫu của thông báo ShipmentModel kết hợp các giá trị tình huống mẫu.

{
  "model": {
    "shipments": [
      ...
    ],
    "vehicles": [
      ...
    ],
   "globalStartTime": "2024-02-13T00:00:00.000Z",
   "globalEndTime": "2024-02-14T06:00:00.000Z"
  }
}

Shipment

Loại thông báo Shipment xác định cấu trúc thuộc tính của một lô hàng có thể được giao hoặc dịch vụ có thể được thực hiện trên một tuyến.

Một lô hàng thực tế tương đương với một thông báo "Lô hàng", nằm trong đối tượng "lô hàng"

Như minh hoạ trong sơ đồ:

  • Thông báo Shipment có tất cả thông tin về một lô hàng hoặc dịch vụ thực tế.
  • Tất cả thông báo Shipment đều được chỉ định trong trường shipments.
  • Trường shipments chứa một hoặc nhiều thông báo Shipment.

Thông báo Shipment yêu cầu ít nhất một đối tượng pickups hoặc deliveries. Định nghĩa của các đối tượng này như sau:

  • pickups xác định vị trí lấy hàng của một lô hàng.
  • deliveries xác định vị trí giao hàng của một lô hàng.
  • Cả pickupsdeliveries đều chứa một loại thông báo VisitRequest xác định vị trí và các thông tin chi tiết khác.

Bảng sau đây mô tả các trường hợp khác nhau dựa trên cấu hình của pickupsdeliveries trong thông báo Shipment.

Trường hợp Mô tả
Chỉ pickups Giả sử bạn chỉ đến lấy hàng.
Chỉ deliveries Giả sử bạn đã tải trước lô hàng hoặc đang cung cấp dịch vụ.
Cả pickupsdeliveries Xe được chỉ định phải hoàn tất yêu cầu đến lấy hàng trước, sau đó mới đến giao hàng. Chỉ xe đã thực hiện việc lấy hàng mới có thể thực hiện việc giao hàng.
Nhiều pickups hoặc deliveries Nếu một lô hàng liệt kê nhiều khả năng cho pickups hoặc deliveries, thì trình tối ưu hoá sẽ chọn một phương thức lấy hàng và một phương thức giao hàng để sử dụng, dựa trên việc giảm thiểu chi phí và đáp ứng các quy tắc ràng buộc.

Hãy xem tài liệu tham khảo để biết danh sách đầy đủ các thuộc tính trong Shipment.

Ví dụ về Shipment

Trong ví dụ này, bạn có một dịch vụ trông giữ chó, trong đó bạn sẽ đến nhà của chủ sở hữu chó để đón chó và đưa chó đến nơi trông giữ. Bạn muốn đặt vị trí đến lấy hàng của hai chú chó và đặt vị trí giao hàng là doanh nghiệp của bạn:

  • Ngôi nhà đầu tiên dành cho chó nằm trong Tháp Coit, San Francisco. Toạ độ của vị trí này là vĩ độ 37,8024 và kinh độ -122,4058.
  • Ngôi nhà thứ hai của chú chó nằm trong Công viên South Sunset Playground, San Francisco. Toạ độ của vị trí này là vĩ độ 37,7359 và kinh độ -122,5011.
  • Trường giữ trẻ cho chó của bạn nằm trong Công viên Mission Dolores, San Francisco. Toạ độ của vị trí này là vĩ độ 37,759773 và kinh độ -122,427063.

Sau đây là mã mẫu của thông báo Shipment, trong đó đối tượng shipments chứa hai loại thông báo Shipment có toạ độ mẫu.

{
  "model": {
    "shipments": [
      {
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.8024,
              "longitude": -122.4058
            }
          }
        ],
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.759773,
              "longitude": -122.427063
            }
          }
        ]
      },
      {
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.7359,
              "longitude": -122.5011
            }
          }
        ],
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.759773,
              "longitude": -122.427063
            }
          }
        ]
      }
    ],
    "vehicles": [
    ...
    ]
  }
}

Vehicle

Loại thông báo Vehicle xác định cấu trúc thuộc tính của một xe có thể thực hiện một lô hàng trong một tuyến đường.

Một chiếc xe thực tế tương đương với một thông báo "Xe", nằm trong đối tượng "vehicles"

Như minh hoạ trong sơ đồ:

  • Thông báo Vehicle có tất cả thông tin về một chiếc xe thực tế.
  • Tất cả thông báo Vehicle đều được chỉ định trong trường vehicles.
  • Trường vehicles chứa nhiều thông báo Vehicle.

Bảng sau đây mô tả một số thuộc tính liên quan của Vehicle.

Thuộc tính Mô tả
startLocationendLocation Vị trí bắt đầu và kết thúc của xe, là một phần của tuyến đường được tối ưu hoá cuối cùng. Nếu không được xác định, các vị trí này sẽ mặc định là vị trí lấy hàng của lô hàng đầu tiên và vị trí giao hàng của lô hàng cuối cùng.
costPerHour, costPerKilometer, costPerTraveledHour Thông số chi phí dành riêng cho xe. Bạn nên có ít nhất một tham số chi phí trong yêu cầu để API trả về một tuyến đường được tối ưu hoá. Hãy xem khái niệm chính về Mô hình chi phí để tìm hiểu thêm về chi phí.
startTimeWindowsendTimeWindows Xác định khoảng thời gian mà một xe có thể hoạt động trên một tuyến đường. Các giá trị này phải nằm trong khoảng thời gian globalStartTimeglobalEndTime được đặt trong ShipmentModel. Mặc dù không bắt buộc, nhưng bạn nên thêm thuộc tính này vì trình tối ưu hoá hoạt động hiệu quả nhất khi tuân thủ các quy tắc ràng buộc về thời gian.

Ví dụ về Vehicle

Trong ví dụ này, bạn có một dịch vụ trông giữ thú cưng và muốn xác định vị trí của xe vào đầu và cuối ngày cũng như lượng xăng xe tiêu thụ. Bạn không cần chỉ định giờ làm việc của xe vì giờ làm việc khớp với giờ bạn đã xác định trong thuộc tính globalStartTimeglobalEndTime trong đối tượng ShipmentModel.

Đối với ví dụ này, các giá trị thuộc tính Vehicle trong yêu cầu của bạn sẽ là:

Thuộc tính Giá trị Mô tả
startLocation latitude: 37.759773, longitude: -122.427063 Toạ độ bắt đầu của tuyến đường cho xe của bạn. Những thông tin này khớp với vị trí của dịch vụ trông giữ thú cưng của bạn tại Công viên Mission Dolores, San Francisco.
endLocation latitude: 37.759773, longitude: -122.427063 Toạ độ kết thúc của tuyến đường cho xe của bạn. Những thông tin này khớp với vị trí của dịch vụ trông giữ thú cưng của bạn tại Công viên Mission Dolores, San Francisco.
costPerHour 27 Số tiền bạn trả cho người lái xe để lái xe đưa đón chó đến trường mẫu giáo. Bạn trả cho tài xế 27 đô la mỗi giờ.

Sau đây là mã mẫu của thông báo Vehicle kết hợp các giá trị tình huống mẫu.

{
  "model": {
    "shipments": [
    ...
    ],
    "vehicles": [
      {
        "startLocation": {
          "latitude": 37.759773,
          "longitude": -122.427063
        },
        "endLocation": {
          "latitude": 37.759773,
          "longitude": -122.427063
        },
        "costPerHour": 27
      }
    ]
  }
}

Hãy xem tài liệu tham khảo để biết danh sách đầy đủ các thuộc tính trong Vehicle.

Ví dụ về yêu cầu hoàn chỉnh

Mã mẫu sau đây cung cấp một ví dụ về yêu cầu hoàn chỉnh, kết hợp các ví dụ về ShipmentModel, ShipmentVehicle trong tài liệu này.

{
  "model": {
    "shipments": [
      {
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.8024,
              "longitude": -122.4058
            }
          }
        ],
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.759773,
              "longitude": -122.427063
            }
          }
        ]
      },
      {
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.7359,
              "longitude": -122.5011
            }
          }
        ],
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.759773,
              "longitude": -122.427063
            }
          }
        ]
      }
    ],
    "vehicles": [
      {
        "startLocation": {
          "latitude": 37.759773,
          "longitude": -122.427063
        },
        "endLocation": {
          "latitude": 37.759773,
          "longitude": -122.427063
        },
        "costPerHour": 27
      }
    ],
    "globalStartTime": "2024-02-13T00:00:00.000Z",
    "globalEndTime": "2024-02-14T06:00:00.000Z"
  }
}