Cửa sổ thời gian

Khung thời gian có trong `ShipmentModel`, trong `Shipment` trong các đối tượng đến lấy hàng và giao hàng, cũng như trong `Vehicle`.

Khung thời gian chỉ định thời gian cho các sự kiện trên một tuyến đường. Các sự kiện này có thể bao gồm thời điểm bắt đầu và kết thúc tuyến đường của tài xế, thời gian đến lấy hàng và thời gian giao hàng theo lịch trình hoặc thời lượng của toàn bộ tuyến đường.

Khung thời gian có thể hỗ trợ các mục tiêu như:

  • Ưu tiên hoàn tất việc lấy hàng và giao hàng trong khung thời gian đã chỉ định.
  • Lên kế hoạch cho các tuyến đường để hoạt động trong giờ hoạt động chung.
  • Đảm bảo xe bắt đầu và kết thúc tuyến đường trong khung thời gian đã chỉ định.

Cấu trúc

Như trong biểu đồ, các khoảng thời gian được cấu trúc như sau:

Danh sách kiểm tra về các yếu tố thiết yếu

Danh sách kiểm tra sau đây mô tả kiến thức cần thiết để ngăn ngừa các lỗi tiềm ẩn liên quan đến khoảng thời gian. Danh sách này có thể giúp bạn xác thực yêu cầu và khắc phục sự cố về phản hồi.

Thuộc tính

Bảng sau đây mô tả các thuộc tính của khoảng thời gian chung.

Thuộc tính Định dạng Mô tả
globalStartTime Timestamp Thời gian sớm nhất cho mọi sự kiện.
globalEndTime Timestamp Thời gian muộn nhất cho mọi sự kiện.

Bảng sau đây mô tả các thuộc tính của khung thời gian trong lô hàng và phương tiện.

Cha mẹ Thuộc tính Định dạng Mô tả
Shipment.pickups timeWindows Mảng các loại thông báo TimeWindow. Chỉ định khoảng thời gian để lấy hàng.
Shipment.deliveries timeWindows Chỉ định khoảng thời gian giao hàng.
Vehicle startTimeWindows Chỉ định thời gian bắt đầu cho lịch trình hoạt động của xe.
endTimeWindows Chỉ định thời gian kết thúc cho lịch hoạt động của xe.

Bảng sau đây mô tả các thuộc tính của loại thông báo TimeWindow.

Thuộc tính Định dạng Mô tả
startTime Chuỗi (định dạng RFC3339 UTC "Zulu") Thời điểm bắt đầu của một khoảng thời gian.
endTime Chuỗi (định dạng RFC3339 UTC "Zulu") Thời điểm kết thúc của khoảng thời gian.

Ví dụ

Phần này trình bày 3 loại ví dụ:

Mã mẫu

Các phần sau đây trình bày mã mẫu của nhiều loại khoảng thời gian.

Khung thời gian chung

Mã mẫu sau đây cho thấy cấu trúc của khung thời gian chung:

{
  "model": {
    "globalStartTime": "YYYY-MM-DDTHH:MM:SSZ",
    "globalEndTime": "YYYY-MM-DDTHH:MM:SSZ",
    "shipments": [ ... ],
    "vehicles": [ ... ]
  }
}

Khung thời gian đến lấy hàng và giao hàng

Mã mẫu sau đây cho thấy cấu trúc của các khung thời gian trong hoạt động đến lấy hàng và giao hàng của một lô hàng:

{
  "model": {
    "shipments": [
      {
        "pickups": [
          {
            "timeWindows": [
              {
                "startTime": "YYYY-MM-DDTHH:MM:SSZ",
                "endTime": "YYYY-MM-DDTHH:MM:SSZ"
              }
            ]
          }
        ],
        "deliveries": [
          {
            "timeWindows": [
              {
                "startTime": "YYYY-MM-DDTHH:MM:SSZ",
                "endTime": "YYYY-MM-DDTHH:MM:SSZ"
              }
            ]
          }
        ]
      }
    ],
    "vehicles": [ ... ]
  }
}

Khung thời gian của xe

Mã mẫu sau đây cho thấy cấu trúc của khung thời gian của một xe:

{
  "model": {
    "shipments": [ ... ],
    "vehicles": [
      {
        "startTimeWindows": [
          {
            "startTime": "YYYY-MM-DDTHH:MM:SSZ",
            "endTime": "YYYY-MM-DDTHH:MM:SSZ"
          }
        ],
        "endTimeWindows": [
          {
            "startTime": "YYYY-MM-DDTHH:MM:SSZ",
            "endTime": "YYYY-MM-DDTHH:MM:SSZ"
          }
        ]
      }
    ]
  }
}

Tình huống ví dụ

Phần này sử dụng một tình huống kinh doanh dịch vụ chăm sóc chó. Ví dụ này tối ưu hoá tuyến đường đón và trả chó từ hai ngôi nhà khác nhau, đồng thời chủ sở hữu có cùng khung giờ đón và trả chó. Trình tối ưu hoá phải tuân thủ giờ hoạt động của nhà trẻ, khung giờ đón và trả khách cụ thể cho khách hàng, cũng như giờ làm việc của tài xế.

Trong ví dụ này, các giá trị thuộc tính trong yêu cầu như sau:

Cha mẹ Thuộc tính Giá trị Trường hợp
ShipmentModel globalStartTime 2023-01-13T07:00:00Z Cho biết giờ mở cửa của dịch vụ chăm sóc chó ban ngày. Không thể đến lấy hoặc giao hàng trước thời gian này.
ShipmentModel globalEndTime 2023-01-13T19:00:00Z Giờ đóng cửa của dịch vụ chăm sóc chó ban ngày. Tất cả các đơn hàng lấy và giao hàng phải được hoàn tất trước thời gian này.
Shipment.pickups timeWindows startTime:
2023-01-13T07:30:00Z
Xác định khung thời gian chấp nhận được để đón chó từ nhà của khách hàng. Trong ví dụ này, bạn đã thông báo cho cả hai khách hàng rằng họ có thể đến lấy hàng trong khoảng thời gian từ 7:30 sáng đến 9:00 sáng.
endTime:
2023-01-13T09:00:00Z
Shipment.deliveries timeWindows startTime:
2023-01-13T17:00:00Z
Xác định khoảng thời gian có thể chấp nhận để trả chó tại nhà của khách hàng. Trong ví dụ này, bạn đã thông báo cho cả hai khách hàng rằng chó của họ sẽ được trả về trong khoảng thời gian từ 5 giờ chiều đến 6 giờ 30 phút chiều.
endTime:
2023-01-13T18:30:00Z
Vehicle startTimeWindows startTime:
2023-01-13T07:00:00Z
endTime:
2023-01-13T07:15:00Z
Xác định khoảng thời gian chấp nhận được để xe bắt đầu (7:00 sáng đến 7:15 sáng) và kết thúc (5:00 chiều đến 5:15 chiều).
endTimeWindows startTime:
2023-01-13T18:45:00Z
endTime:
2023-01-13T19:00:00Z

Sơ đồ sau đây minh hoạ các khoảng thời gian ảnh hưởng đến tuyến đường này.

Một số dòng thời gian thể hiện khung thời gian chung, khung thời gian lấy hàng và thời gian giao hàng, khung thời gian bắt đầu và thời gian kết thúc của xe, cũng như giờ làm việc của xe.

Trong trường hợp này, như minh hoạ trong biểu đồ, các khoảng thời gian hoạt động như sau:

  • Khung thời gian chung thể hiện giờ hoạt động của dịch vụ chăm sóc chó ban ngày và tất cả các khung thời gian khác phải nằm trong khung thời gian này.
  • Các hoạt động lấy hàng và giao hàng có timeWindows riêng, tương ứng vào đầu và cuối ngày.
  • startTimeWindows của xe cho người điều khiển xe biết khung thời gian mà họ phải bắt đầu làm việc, còn endTimeWindows cung cấp một khung thời gian khác mà họ phải hoàn thành công việc trong ngày.
  • Thời gian bắt đầu của startTimeWindow đầu tiên và thời gian kết thúc của endTimeWindow cuối cùng xác định giờ hoạt động của xe, trong trường hợp này, giờ hoạt động giống với khung thời gian chung.

Ví dụ về yêu cầu

Ví dụ sau đây cho thấy cấu trúc của một yêu cầu optimizeTours kết hợp các giá trị khung thời gian của tình huống trong ví dụ.

{
  "model": {
    "globalStartTime": "2023-01-13T07:00:00Z",
    "globalEndTime": "2023-01-13T19:00:00Z",
    "shipments": [
      {
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.8024,
              "longitude": -122.4058
            },
            "timeWindows": [
              {
                "startTime": "2023-01-13T07:30:00Z",
                "endTime": "2023-01-13T09:00:00Z"
              }
            ]
          }
        ],
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.759773,
              "longitude": -122.427063
            },
            "timeWindows": [
              {
                "startTime": "2023-01-13T17:00:00Z",
                "endTime": "2023-01-13T18:30:00Z"
              }
            ]
          }
        ]
      },
      {
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.7359,
              "longitude": -122.5011
            },
            "timeWindows": [
              {
                "startTime": "2023-01-13T07:30:00Z",
                "endTime": "2023-01-13T09:00:00Z"
              }
            ]
          }
        ],
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.759773,
              "longitude": -122.427063
            },
            "timeWindows": [
              {
                "startTime": "2023-01-13T17:00:00Z",
                "endTime": "2023-01-13T18:30:00Z"
              }
            ]
          }
        ]
      }
    ],
    "vehicles": [
      {
        "startLocation": {
          "latitude": 37.759773,
          "longitude": -122.427063
        },
        "endLocation": {
          "latitude": 37.759773,
          "longitude": -122.427063
        },
        "costPerHour": 27,
        "startTimeWindows": [
          {
            "startTime": "2023-01-13T07:00:00Z",
            "endTime": "2023-01-13T07:15:00Z"
          }
        ],
        "endTimeWindows": [
          {
            "startTime": "2023-01-13T18:45:00Z",
            "endTime": "2023-01-13T19:00:00Z"
          }
        ]
      }
    ]
  }
}

Khung thời gian linh hoạt

Bạn có thể sử dụng khoảng thời gian làm các quy tắc ràng buộc mềm bằng cách xác định softStartTime và softEndTime trong loại thông báo TimeWindow. Điều này cho phép trình tối ưu hoá lệch khỏi khoảng thời gian đã chỉ định với một chi phí cụ thể, ưu tiên tối ưu hoá tổng thể hơn là tuân thủ nghiêm ngặt khung thời gian khi có lợi.

Khung thời gian linh hoạt có các giới hạn sử dụng sau:

  • Không thể áp dụng các quy tắc này cho globalStartTime và globalEndTime vì các quy tắc này không sử dụng loại thông báo TimeWindow.
  • Các thuộc tính này chỉ áp dụng khi có một TimeWindow duy nhất trong danh sách.

Thuộc tính

Bảng sau đây mô tả các thuộc tính ràng buộc mềm cho khung thời gian.

Tên tài sản Định dạng Nội dung mô tả về cơ sở lưu trú
softStartTime Dấu thời gian Chỉ định thời điểm bắt đầu của khoảng thời gian linh hoạt. Nếu một sự kiện xảy ra trước thời điểm này, thì chi phí sẽ phát sinh.
softEndTime Dấu thời gian Chỉ định thời điểm kết thúc của khung thời gian linh hoạt. Nếu một sự kiện xảy ra sau thời điểm này, thì chi phí sẽ phát sinh.
costPerHourBeforeSoftStartTime số Chi phí mỗi giờ phát sinh khi một sự kiện bắt đầu trước softStartTime. Bạn phải cung cấp thuộc tính này khi sử dụng softStartTime. Hãy xem khái niệm chính về Mô hình chi phí để tìm hiểu thêm về cách triển khai chi phí.
costPerHourAfterSoftEndTime số Chi phí mỗi giờ phát sinh khi một sự kiện kết thúc sau softEndTime. Bạn phải cung cấp thuộc tính này khi sử dụng softEndTime. Hãy xem khái niệm chính về Mô hình chi phí để tìm hiểu thêm về cách triển khai chi phí.

Mã mẫu

Ví dụ sau đây cho thấy cấu trúc của các thuộc tính ràng buộc mềm của loại thông báo TimeWindow:

    {
      "softStartTime": "SOFT_START_TIME",
      "softEndTime": "SOFT_END_TIME",
      "costPerHourBeforeSoftStartTime": COST_BEFORE_START_TIME,
      "costPerHourAfterSoftEndTime": COST_AFTER_END_TIME
    }