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

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

Mục tiêu của Route Optimization API là lập kế hoạch tuyến đường cho một đội xe để ghé thăm một nhóm địa điểm. Đối tượng OptimizeToursRequest mô tả các thuộc tính của những phương tiện và vị trí này, đồng thời là cấu trúc chính của 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ả những vị trí mà xe sẽ ghé thăm. Chúng có thể đại diện cho các gói hàng thực tế cần lấy và giao hoặc những nơi 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 địa điểm vận chuyển. 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 đang di chuyển bằng chân.

ShipmentModel

ShipmentModel chứa các phần tử của vấn đề tối ưu hoá tuyến đường. Nó chứa một nhóm lô hàng có thể được thực hiện bởi một nhóm xe, đồng thời xem xét cá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ô hàng và xe.
globalStartTimeglobalEndTime Cho biết thời gian bắt đầu và kết thúc của khung thời gian mà tất cả các xe phải hoàn tất mọi chuyến vận chuyển. 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 giới hạn 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.

ShipmentModel Ví dụ

Trong ví dụ này, bạn có một dịch vụ trông trẻ và bạn đang bắt đầu tạo yêu cầu. Bạn sẽ xác định các lô hàng và xe sau, nhưng bạn muốn bắt đầu bằng cách đặt giờ hoạt động và chi phí hoạt động theo giờ của doanh nghiệp.

Trong ví dụ này, các giá trị thuộc tính ShipmentModel trong yêu cầu của bạn 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ột đoạn mã mẫu của thông báo ShipmentModel kết hợp các giá trị của tình huống ví dụ.

{
  "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 đường.

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 một đối tượng "lô hàng"

Như minh hoạ trong sơ đồ:

  • Thông báo Shipment có tất cả thông tin của 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 cần í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 địa điểm đến 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 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 Chúng tôi giả định rằng bạn chỉ thu thập lô 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 thành việc lấy hàng trước, sau đó mới giao hàng. Chỉ chiếc xe đã thực hiện việc đến lấy 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 lựa chọn nhận hàng và một lựa chọn giao hàng để sử dụng, dựa trên việc giảm thiểu chi phí và đáp ứng cá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.

Shipment Ví dụ

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

  • Ngôi nhà đầu tiên của chú chó là ở 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 ở Công viên Sân chơi South Sunset, San Francisco. Toạ độ của vị trí này là vĩ độ 37.7359 và kinh độ -122.5011.
  • Trường mầm non cho thú cưng của bạn nằm ở 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ột đoạn mã mẫu của thông báo Shipment, trong đó đối tượng shipments chứa 2 loại thông báo Shipment với cá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 chiếc xe có thể thực hiện chuyến vận chuyển trên một tuyến đường.

Một phương tiện trong đời thực tương đương với một thông báo "Vehicle" (Phương tiện), nằm trong đối tượng "vehicles" (phương tiện)

Như minh hoạ trong sơ đồ:

  • Thông báo Vehicle chứa tất cả thông tin của một chiếc xe ngoài đời thực.
  • 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 các 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 giá 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 Tham 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 Mô hình chi phí để tìm hiểu thêm về chi phí.
startTimeWindowsendTimeWindows Xác định khoảng thời gian mà xe có thể hoạt động trên một tuyến đường. Các khung giờ này phải nằm trong khung 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 giới hạn về thời gian.

Vehicle Ví dụ

Trong ví dụ này, bạn có dịch vụ trông giữ thú cưng và bạn 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 mà xe tiêu thụ. Bạn không cần chỉ định giờ hoạt động của xe vì giờ hoạt động này trùng khớp với giờ bạn đã xác định trong các thuộc tính globalStartTimeglobalEndTime trong đối tượng ShipmentModel.

Trong ví dụ này, các giá trị thuộc tính Vehicle trong yêu cầu của bạn 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 ở Công viên Mission Dolores, San Francisco.
endLocation latitude: 37.759773, longitude: -122.427063 Toạ độ điểm cuối 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 ở 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ó. Bạn trả cho người lái xe 27 đô la mỗi giờ.

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

{
  "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ụ đầy đủ về yêu cầu

Mẫu mã sau đây cung cấp một ví dụ hoàn chỉnh về yêu cầu, kết hợp các ví dụ về ShipmentModel, ShipmentVehicle được trình bày 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"
  }
}