Cửa sổ thời gian

Khung thời gian có trong "ShipmentModel", trong "Shipment" trong các đối tượng nhận 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 giao và nhận hàng theo lịch 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 nhận và giao hàng trong khung thời gian đã chỉ định.
  • Lập kế hoạch 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ư minh hoạ trong sơ đồ, khung thời gian được cấu trúc như sau:

Danh sách kiểm tra các yếu tố cần thiết

Danh sách kiểm tra sau đây mô tả những kiến thức cần thiết giúp ngăn ngừa các lỗi tiềm ẩn liên quan đến khung 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ố trong câu trả lời.

Thuộc tính

Bảng sau đây mô tả các thuộc tính khung 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 khung thời gian trong lô hàng và xe.

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 nhận lô hàng.
Shipment.deliveries timeWindows Chỉ định khoảng thời gian giao lô hàng.
Vehicle startTimeWindows Chỉ định thời gian bắt đầu cho lịch 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 TimeWindowmessage type.

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 khung thời gian.
endTime Chuỗi (định dạng RFC3339 UTC "Zulu") Thời điểm kết thúc của khung thời gian.

Ví dụ

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

  • Mã mẫu minh hoạ cấu trúc của khung thời gian.
  • Một tình huống ví dụ cho thấy một cách sử dụng khung thời gian để đạt được mục tiêu kinh doanh.
  • Một ví dụ về yêu cầu bao gồm các giá trị được đặt trong tình huống ví dụ.

Mã mẫu

Các phần sau đây cho thấy mã mẫu của nhiều loại khung 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 nhận và giao hàng

Mã mẫu sau đây cho thấy cấu trúc của khung thời gian trong việc nhận 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 tình huống kinh doanh dịch vụ giữ chó. Ví dụ này tối ưu hoá các tuyến đường để nhận và trả chó tại 2 nhà khác nhau, đồng thời chủ sở hữu có cùng khung thời gian nhận và trả chó. Trình tối ưu hoá phải tuân thủ giờ hoạt động của dịch vụ giữ chó, khung thời gian nhận và trả chó cụ thể cho khách hàng và 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 Đại diện cho giờ mở cửa của dịch vụ giữ chó. Không thể nhận hoặc giao hàng trước thời gian này.
ShipmentModel globalEndTime 2023-01-13T19:00:00Z Đại diện cho giờ đóng cửa của dịch vụ giữ chó. Tất cả việc nhận 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 được phép nhận chó tại nhà khách hàng. Trong ví dụ này, bạn đã yêu cầu cả 2 khách hàng có mặt để nhận chó trong khoảng thời gian từ 7:30 đến 9:00.
endTime:
2023-01-13T09:00:00Z
Shipment.deliveries timeWindows startTime:
2023-01-13T17:00:00Z
Xác định khung thời gian được phép trả chó tại nhà khách hàng. Trong ví dụ này, bạn đã thông báo cho cả 2 khách hàng rằng chó của họ sẽ được trả trong khoảng thời gian từ 17:00 đến 18:30.
endTime:
2023-01-13T18:30:00Z
Vehicle startTimeWindows startTime:
2023-01-13T07:00:00Z
endTime:
2023-01-13T07:15:00Z
Xác định khung thời gian được phép để xe bắt đầu (7:00 đến 7:15) và kết thúc (17:00 đến 17:15).
endTimeWindows startTime:
2023-01-13T18:45:00Z
endTime:
2023-01-13T19:00:00Z

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

Một số dòng thời gian biểu thị khung thời gian toàn cầu, khung thời gian nhận 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 tình huống này, như minh hoạ trong sơ đồ, khung thời gian hoạt động như sau:

  • Khung thời gian chung đại diện cho giờ hoạt động của dịch vụ giữ chó và tất cả các khung thời gian khác phải nằm trong khung thời gian này.
  • Việc nhận và giao hàng có timeWindows riêng vào thời điểm bắt đầu và kết thúc ngày.
  • startTimeWindows của xe cung cấp cho người điều khiển xe một khung thời gian mà họ phải bắt đầu làm việc và endTimeWindows cung cấp một khung thời gian khác mà họ phải kết thúc ngày làm việc.
  • Thời gian bắt đầu của startTimeWindow và thời gian kết thúc của cuối cùng endTimeWindow xác định giờ hoạt động của xe, trong trường hợp này, 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 optimizeTours yêu cầu kết hợp các giá trị khung thời gian của tình huống 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 khung thời gian làm các ràng buộc linh hoạt 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á đi lệch khỏi khung 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 các 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:

  • Bạn không thể áp dụng các khung thời gian này cho globalStartTime và globalEndTime vì các khung thời gian này không sử dụng loại thông báo TimeWindow.
  • Các khung thời gian này chỉ áp dụng khi có một TimeWindow trong danh sách.

Thuộc tính

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

Tên thuộc tính Định dạng Mô tả thuộc tính
softStartTime Dấu thời gian Chỉ định thời điểm bắt đầu của khung thời gian linh hoạt. Nếu một sự kiện xảy ra trước thời gian này, bạn sẽ phải chịu chi phí.
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 gian này, bạn sẽ phải chịu chi phí.
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 linh hoạt 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
    }