Zeitfenster

Zeitfenster sind in `ShipmentModel`, in `Shipment` in den Objekten für Abholungen und Lieferungen sowie in `Vehicle` vorhanden.

Zeitfenster geben den Zeitpunkt für Ereignisse auf einer Route an. Diese Ereignisse können den Start und das Ende einer Fahrerroute, geplante Abhol- und Lieferzeiten oder die Dauer einer gesamten Route umfassen.

Zeitfenster können Ziele wie die folgenden unterstützen:

  • Abholungen und Lieferungen innerhalb des angegebenen Zeitrahmens durchführen.
  • Routen planen, um innerhalb der allgemeinen Geschäftszeiten zu arbeiten.
  • Fahrzeuge müssen Routen innerhalb bestimmter Zeiträume beginnen und beenden.

Struktur

Wie im Diagramm dargestellt, sind Zeiträume so strukturiert:

  • globalStartTime und globalEndTime sind Attribute von ShipmentModel.
  • timeWindows sind Attribute von:
    • pickups in Shipment.
    • deliveries in Shipment.
  • startTimeWindows und endTimeWindows sind Attribute von Vehicle.

Checkliste für Essentials

Attribute

In der folgenden Tabelle werden die globalen Eigenschaften für Zeiträume beschrieben.

Attribut Format Beschreibung
globalStartTime Timestamp Die früheste Zeit für ein beliebiges Ereignis.
globalEndTime Timestamp Die späteste Uhrzeit für ein beliebiges Ereignis.

In der folgenden Tabelle werden die Attribute des Zeitfensters für Sendungen und Fahrzeuge beschrieben.

Hat Kinder Attribut Format Beschreibung
Shipment.pickups timeWindows Array von TimeWindow-Nachrichtentypen. Gibt Zeitintervalle für die Abholung einer Sendung an.
Shipment.deliveries timeWindows Gibt Zeitintervalle für die Lieferung einer Sendung an.
Vehicle startTimeWindows Gibt die Startzeit für den Betriebsplan eines Fahrzeugs an.
endTimeWindows Gibt die Endzeit für den Betriebsplan eines Fahrzeugs an.

In der folgenden Tabelle werden die Attribute eines TimeWindow-Nachrichtentyps beschrieben.

Attribut Format Beschreibung
startTime String (RFC3339 UTC-Format „Zulu“) Der Beginn eines Zeitfensters.
endTime String (RFC3339 UTC-Format „Zulu“) Das Ende eines Zeitfensters.

Beispiele

In diesem Abschnitt werden drei Arten von Beispielen behandelt:

Codebeispiele

In den folgenden Abschnitten finden Sie Codebeispiele für verschiedene Arten von Zeiträumen.

Globale Zeitfenster

Das folgende Codebeispiel zeigt die Struktur der globalen Zeiträume:

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

Zeitfenster für Abholungen und Lieferungen

Das folgende Codebeispiel zeigt die Struktur der Zeitfenster für die Abholungen und Zustellungen einer Sendung:

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

Zeitfenster für Fahrzeuge

Das folgende Codebeispiel zeigt die Struktur der Zeitfenster eines Fahrzeugs:

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

Beispielszenario

In diesem Abschnitt wird ein Szenario mit einer Hundetagesstätte verwendet. In diesem Beispiel werden Routen für das Abholen und Absetzen von Hunden aus zwei verschiedenen Haushalten optimiert. Die Besitzer haben dieselben Zeitfenster für das Abholen und Absetzen. Der Optimierer sollte die Öffnungszeiten der Kindertagesstätte, die spezifischen Abhol- und Bringzeiträume für Kunden sowie die Arbeitszeiten des Fahrers berücksichtigen.

In diesem Beispiel sind die Attributwerte in der Anfrage folgende:

Hat Kinder Attribut Wert Szenario
ShipmentModel globalStartTime 2023-01-13T07:00:00Z Gibt die Öffnungszeit Ihrer Hundetagesstätte an. Vor diesem Zeitpunkt können keine Abholungen oder Lieferungen erfolgen.
ShipmentModel globalEndTime 2023-01-13T19:00:00Z Stellt die Schließzeit Ihrer Hundetagesstätte dar. Alle Abholungen und Zustellungen müssen bis zu diesem Zeitpunkt abgeschlossen sein.
Shipment.pickups timeWindows startTime:
2023-01-13T07:30:00Z
Definiert das zulässige Zeitfenster für das Abholen eines Hundes vom Zuhause eines Kunden. In diesem Beispiel haben Sie beiden Kunden mitgeteilt, dass die Abholung zwischen 7:30 und 9:00 Uhr erfolgen soll.
endTime:
2023-01-13T09:00:00Z
Shipment.deliveries timeWindows startTime:
2023-01-13T17:00:00Z
Definiert das zulässige Zeitfenster für das Absetzen eines Hundes am Zuhause eines Kunden. In diesem Beispiel haben Sie beiden Kunden mitgeteilt, dass ihre Hunde zwischen 17:00 und 18:30 Uhr abgeholt werden.
endTime:
2023-01-13T18:30:00Z
Vehicle startTimeWindows startTime:
2023-01-13T07:00:00Z
endTime:
2023-01-13T07:15:00Z
Definiert das zulässige Zeitfenster für den Start (7:00 Uhr bis 7:15 Uhr) und das Ende (17:00 Uhr bis 17:15 Uhr) des Fahrzeugs.
endTimeWindows startTime:
2023-01-13T18:45:00Z
endTime:
2023-01-13T19:00:00Z

Das folgende Diagramm veranschaulicht die Zeitfenster, die sich auf diese Route auswirken.

Mehrere Zeitachsen stellen das globale Zeitfenster, die Zeitfenster für die Abholung und Zustellung, die Zeitfenster für die Start- und Endzeit des Fahrzeugs sowie die Arbeitszeiten des Fahrzeugs dar.

In diesem Szenario funktionieren die Zeiträume wie im Diagramm dargestellt:

  • Das globale Zeitfenster entspricht den Öffnungszeiten der Hundetagesstätte. Alle anderen Zeitfenster müssen in dieses Zeitfenster fallen.
  • Abholungen und Lieferungen haben jeweils eigene timeWindows am Anfang und Ende des Tages.
  • Die startTimeWindows des Fahrzeugs geben dem Fahrer einen Zeitraum vor, in dem er mit der Arbeit beginnen muss, und die endTimeWindows einen weiteren Zeitraum, in dem er seinen Arbeitstag beenden muss.
  • Die Startzeit des ersten startTimeWindow und die Endzeit des letzten endTimeWindow definieren die Betriebszeiten des Fahrzeugs, die in diesem Fall mit dem globalen Zeitfenster übereinstimmen.

Beispielanfrage

Das folgende Beispiel zeigt die Struktur einer optimizeTours-Anfrage mit den Zeitfensterwerten des Beispielszenarios.

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

Weiche Zeitfenster

Zeitfenster können als weiche Einschränkungen verwendet werden, indem softStartTime und softEndTime in einem TimeWindow-Nachrichtentyp definiert werden. So kann der Optimizer bei bestimmten Kosten vom angegebenen Zeitfenster abweichen und die Gesamtoptimierung gegenüber der strikten Einhaltung der Zeitrahmen priorisieren, wenn dies von Vorteil ist.

Für weiche Zeitfenster gelten die folgenden Nutzungseinschränkungen:

  • Sie können nicht auf globalStartTime und globalEndTime angewendet werden, da diese nicht den Nachrichtentyp TimeWindow verwenden.
  • Sie gelten nur, wenn in einer Liste ein einzelnes TimeWindow vorhanden ist.

Attribute

In der folgenden Tabelle werden die Eigenschaften von weichen Einschränkungen für Zeiträume beschrieben.

Property-Name Format Beschreibung des Attributs
softStartTime Zeitstempel Gibt den Beginn des weichen Zeitfensters an. Wenn ein Ereignis vor diesem Zeitpunkt eintritt, fallen Kosten an.
softEndTime Zeitstempel Gibt das Ende des weichen Zeitfensters an. Wenn nach diesem Zeitpunkt ein Ereignis eintritt, fallen Kosten an.
costPerHourBeforeSoftStartTime Zahl Die Kosten pro Stunde, die anfallen, wenn ein Termin vor dem softStartTime beginnt. Diese Property ist erforderlich, wenn Sie softStartTime verwenden. Weitere Informationen zur Implementierung von Kosten finden Sie unter Kostenmodell.
costPerHourAfterSoftEndTime Zahl Die Kosten pro Stunde, die anfallen, wenn ein Ereignis nach dem softEndTime endet. Diese Property ist erforderlich, wenn Sie softEndTime verwenden. Weitere Informationen zur Implementierung von Kosten finden Sie unter Kostenmodell.

Codebeispiel

Das folgende Beispiel zeigt die Struktur der Eigenschaften für weiche Einschränkungen eines TimeWindow-Nachrichtentyps:

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