Przedziały czasu

Okna czasowe są obecne w `ShipmentModel`, w `Shipment` w obiektach odbioru i dostawy oraz w `Vehicle`.

Okna czasowe określają czas zdarzeń na trasie. Zdarzenia te mogą obejmować początek i koniec trasy kierowcy, zaplanowane godziny odbioru i dostawy lub czas trwania całej trasy.

Okna czasowe mogą pomóc w osiągnięciu takich celów jak:

  • Skup się na realizacji odbiorów i dostaw w określonych terminach.
  • Planuj trasy tak, aby były realizowane w godzinach otwarcia.
  • Upewnij się, że pojazdy rozpoczynają i kończą trasy w określonych przedziałach czasowych.

Struktura

Jak widać na diagramie, przedziały czasu mają następującą strukturę:

Lista kontrolna Essentials

Poniższa lista kontrolna zawiera najważniejsze informacje, które pomogą Ci uniknąć potencjalnych błędów związanych z oknami czasowymi. Ta lista może pomóc Ci sprawdzić żądanie i rozwiązać problemy z odpowiedzią.

Właściwości

W tabeli poniżej opisano właściwości globalnego okna czasowego.

Właściwość Format Opis
globalStartTime Timestamp Najwcześniejsza godzina dowolnego wydarzenia.
globalEndTime Timestamp Najpóźniejszy czas dowolnego zdarzenia.

W tabeli poniżej opisano właściwości okna czasowego w przesyłkach i pojazdach.

Ma dzieci Właściwość Format Opis
Shipment.pickups timeWindows Tablica typów wiadomości TimeWindow. Określa przedziały czasowe odbioru przesyłki.
Shipment.deliveries timeWindows Określa przedziały czasowe dostawy przesyłki.
Vehicle startTimeWindows Określa czas rozpoczęcia harmonogramu działania pojazdu.
endTimeWindows Określa czas zakończenia harmonogramu działania pojazdu.

W tabeli poniżej opisano właściwości typu wiadomości TimeWindow.

Właściwość Format Opis
startTime Ciąg znaków (format RFC3339 UTC „Zulu”) Początek przedziału czasu.
endTime Ciąg znaków (format RFC3339 UTC „Zulu”) Koniec przedziału czasu.

Przykłady

W tej sekcji znajdziesz 3 rodzaje przykładów:

Przykładowe fragmenty kodu

W sekcjach poniżej znajdziesz przykładowe kody różnych typów okien czasowych.

Globalne przedziały czasu

Poniższy przykładowy kod pokazuje strukturę globalnych okien czasowych:

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

Przedziały czasowe odbiorów i dostaw

Poniższy przykładowy kod pokazuje strukturę okien czasowych w odbiorach i dostawach przesyłki:

{
  "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": [ ... ]
  }
}

Przedziały czasu pojazdów

Poniższy przykładowy kod pokazuje strukturę okien czasowych pojazdu:

{
  "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"
          }
        ]
      }
    ]
  }
}

Przykład

W tej sekcji używamy scenariusza biznesowego dotyczącego hotelu dla psów. W tym przykładzie optymalizujemy trasy odbioru i odwożenia psów z 2 różnych domów, a właściciele mają takie same przedziały czasowe odbioru i odwożenia. Optymalizator powinien uwzględniać godziny otwarcia żłobka, konkretne okna odbioru i odwożenia dzieci oraz godziny pracy kierowcy.

W tym przykładzie wartości właściwości w żądaniu są następujące:

Ma dzieci Właściwość Wartość Scenariusz
ShipmentModel globalStartTime 2023-01-13T07:00:00Z Reprezentuje godzinę otwarcia świetlicy dla psów. Przed tym terminem nie można odbierać ani dostarczać przesyłek.
ShipmentModel globalEndTime 2023-01-13T19:00:00Z Reprezentuje godzinę zamknięcia świetlicy dla psów. Wszystkie odbiory i dostawy muszą zostać zrealizowane do tego czasu.
Shipment.pickups timeWindows startTime:
2023-01-13T07:30:00Z
Określa akceptowalny przedział czasowy na odebranie psa z domu klienta. W tym przykładzie obaj klienci zostali poinformowani, że odbiór nastąpi między 7:30 a 9:00.
endTime:
2023-01-13T09:00:00Z
Shipment.deliveries timeWindows startTime:
2023-01-13T17:00:00Z
Określa akceptowalny przedział czasowy na dostarczenie psa do domu klienta. W tym przykładzie obaj klienci otrzymali informację, że ich psy zostaną odwiezione między 17:00 a 18:30.
endTime:
2023-01-13T18:30:00Z
Vehicle startTimeWindows startTime:
2023-01-13T07:00:00Z
endTime:
2023-01-13T07:15:00Z
Określa akceptowalny przedział czasu, w którym pojazd może rozpocząć (7:00–7:15) i zakończyć (17:00–17:15) pracę.
endTimeWindows startTime:
2023-01-13T18:45:00Z
endTime:
2023-01-13T19:00:00Z

Poniższy diagram przedstawia przedziały czasowe, które mają wpływ na tę trasę.

Kilka osi czasu reprezentuje globalne okno czasowe, okna czasowe odbioru i czasu dostawy, okna czasowe rozpoczęcia i zakończenia pracy pojazdu oraz godziny pracy pojazdu.

W tym scenariuszu, jak pokazano na diagramie, przedziały czasowe działają w następujący sposób:

  • Globalne okno czasowe reprezentuje godziny otwarcia hotelu dla psów, a wszystkie inne okna czasowe muszą mieścić się w tym oknie czasowym.
  • Odbiory i dostawy mają własne timeWindows odpowiednio na początku i na końcu dnia.
  • startTimeWindows pojazdu określają przedział czasu, w którym operator pojazdu musi rozpocząć pracę, a endTimeWindows określają przedział czasu, w którym musi zakończyć pracę.
  • Czas rozpoczęcia pierwszej startTimeWindow i czas zakończenia ostatniej endTimeWindow określają godziny pracy pojazdu, które w tym przypadku są takie same jak globalne okno czasowe.

Przykładowe żądanie

Poniższy przykład pokazuje strukturę żądania optimizeTours, które zawiera przykładowe wartości okien czasowych.

{
  "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"
          }
        ]
      }
    ]
  }
}

Elastyczne przedziały czasu

Okna czasowe mogą być używane jako ograniczenia miękkie przez zdefiniowanie softStartTime i softEndTime w typie wiadomości TimeWindow. Dzięki temu optymalizator może odbiegać od określonego przedziału czasu przy określonym koszcie, dając priorytet ogólnej optymalizacji nad ścisłym przestrzeganiem przedziałów czasu, gdy jest to korzystne.

Elastyczne okna czasowe mają te ograniczenia:

Właściwości

W tabeli poniżej opisano właściwości ograniczeń miękkich dotyczących okien czasowych.

Nazwa usługi Format Opis miejsca zakwaterowania
softStartTime Sygnatura czasowa Określa początek elastycznego przedziału czasu. Jeśli zdarzenie wystąpi przed tym czasem, zostanie naliczony koszt.
softEndTime Sygnatura czasowa Określa koniec miękkiego przedziału czasu. Jeśli zdarzenie wystąpi po tym czasie, zostanie naliczony koszt.
costPerHourBeforeSoftStartTime liczba Koszt za godzinę naliczany, gdy wydarzenie rozpoczyna się przed softStartTime. Ta właściwość jest wymagana, gdy używasz softStartTime. Więcej informacji o implementowaniu kosztów znajdziesz w artykule o modelu kosztów.
costPerHourAfterSoftEndTime liczba Koszt za godzinę naliczany, gdy wydarzenie kończy się po softEndTime. Ta właściwość jest wymagana, gdy używasz softEndTime. Więcej informacji o implementowaniu kosztów znajdziesz w artykule o modelu kosztów.

Przykładowy kod

Poniższy przykład pokazuje strukturę właściwości ograniczenia miękkiego typu wiadomości TimeWindow:

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