กรอบเวลา

กรอบเวลาจะแสดงใน `ShipmentModel`, ใน `Shipment` ในออบเจ็กต์การรับและการนำส่ง และใน `Vehicle`

กรอบเวลาจะระบุเวลาสำหรับเหตุการณ์ในเส้นทาง เหตุการณ์เหล่านี้อาจรวมถึงจุดเริ่มต้นและจุดสิ้นสุดของเส้นทางของคนขับ เวลาที่กำหนดไว้สำหรับการรับและเวลานำส่ง หรือระยะเวลาของเส้นทางทั้งหมด

กรอบเวลาช่วยสนับสนุนวัตถุประสงค์ต่างๆ ได้ เช่น

  • ให้ความสำคัญกับการรับและการนำส่งให้เสร็จสิ้นภายในกรอบเวลาที่กำหนด
  • วางแผนเส้นทางเพื่อดำเนินการภายในเวลาทำการโดยรวม
  • ตรวจสอบว่ายานพาหนะเริ่มต้นและสิ้นสุดเส้นทางภายในกรอบเวลาที่ระบุ

โครงสร้าง

ดังที่แสดงในแผนภาพ กรอบเวลาจะมีโครงสร้างดังนี้

รายการตรวจสอบ Essentials

รายการตรวจสอบต่อไปนี้อธิบายความรู้ที่จำเป็นซึ่งจะช่วยป้องกันข้อผิดพลาดที่อาจเกิดขึ้นเกี่ยวกับกรอบเวลา รายการนี้จะช่วยคุณตรวจสอบคำขอและแก้ปัญหาการตอบกลับ

พร็อพเพอร์ตี้

ตารางต่อไปนี้อธิบายพร็อพเพอร์ตี้กรอบเวลาส่วนกลาง

พร็อพเพอร์ตี้ รูปแบบ คำอธิบาย
globalStartTime Timestamp เวลาที่เร็วที่สุดสำหรับกิจกรรมใดๆ
globalEndTime Timestamp เวลาล่าสุดสำหรับกิจกรรมใดๆ

ตารางต่อไปนี้อธิบายพร็อพเพอร์ตี้กรอบเวลาในการจัดส่งและยานพาหนะ

ผู้ปกครอง พร็อพเพอร์ตี้ รูปแบบ คำอธิบาย
Shipmentpickups timeWindows อาร์เรย์ของประเภทข้อความ TimeWindow ระบุช่วงเวลาสำหรับการรับพัสดุเพื่อจัดส่ง
Shipmentdeliveries timeWindows ระบุช่วงเวลาสำหรับการนำส่งพัสดุ
Vehicle startTimeWindows ระบุเวลาเริ่มต้นสำหรับกำหนดการทำงานของยานพาหนะ
endTimeWindows ระบุเวลาสิ้นสุดสำหรับกำหนดการทำงานของยานพาหนะ

ตารางต่อไปนี้อธิบายพร็อพเพอร์ตี้ของประเภทข้อความ TimeWindow

พร็อพเพอร์ตี้ รูปแบบ คำอธิบาย
startTime สตริง (รูปแบบ RFC3339 UTC "Zulu") จุดเริ่มต้นของกรอบเวลา
endTime สตริง (รูปแบบ RFC3339 UTC "Zulu") จุดสิ้นสุดของกรอบเวลา

ตัวอย่าง

ส่วนนี้จะครอบคลุมตัวอย่าง 3 ประเภท ได้แก่

ตัวอย่างโค้ด

ส่วนต่อไปนี้แสดงตัวอย่างโค้ดของกรอบเวลาประเภทต่างๆ

กรอบเวลาทั่วโลก

ตัวอย่างโค้ดต่อไปนี้แสดงโครงสร้างของกรอบเวลาส่วนกลาง

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

กรอบเวลาการรับสินค้าและการนำส่ง

ตัวอย่างโค้ดต่อไปนี้แสดงโครงสร้างของกรอบเวลาในการรับและการนำส่งของการจัดส่ง

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

กรอบเวลาของยานพาหนะ

ตัวอย่างโค้ดต่อไปนี้แสดงโครงสร้างของกรอบเวลาของยานพาหนะ

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

สถานการณ์ตัวอย่าง

ส่วนนี้จะใช้สถานการณ์ทางธุรกิจของศูนย์รับฝากสุนัข ตัวอย่างนี้จะเพิ่มประสิทธิภาพเส้นทางสำหรับการรับและส่งสุนัขจากบ้าน 2 หลังที่แตกต่างกัน และเจ้าของมีกรอบเวลาการรับและส่งสุนัขเหมือนกัน เครื่องมือเพิ่มประสิทธิภาพควรคำนึงถึงเวลาทำการของสถานรับเลี้ยงเด็ก ช่วงเวลาที่ลูกค้ามารับและส่งสัตว์เลี้ยง และเวลาทำงานของคนขับรถ

สำหรับตัวอย่างนี้ ค่าพร็อพเพอร์ตี้ในคำขอมีดังนี้

ผู้ปกครอง พร็อพเพอร์ตี้ ค่า สถานการณ์
ShipmentModel globalStartTime 2023-01-13T07:00:00Z แสดงเวลาเปิดทำการของบริการรับฝากสุนัข ไม่สามารถรับหรือนำส่งก่อนเวลานี้ได้
ShipmentModel globalEndTime 2023-01-13T19:00:00Z แสดงเวลาปิดของบริการรับฝากสุนัข การรับและการนำส่งทั้งหมดต้องเสร็จสิ้นภายในเวลานี้
Shipment.pickups timeWindows startTime:
2023-01-13T07:30:00Z
กำหนดกรอบเวลาที่ยอมรับได้สำหรับการรับสุนัขจากบ้านของลูกค้า ในตัวอย่างนี้ คุณแจ้งให้ลูกค้าทั้ง 2 รายพร้อมรับพัสดุระหว่างเวลา 07:30 น. - 09:00 น.
endTime:
2023-01-13T09:00:00Z
Shipment.deliveries timeWindows startTime:
2023-01-13T17:00:00Z
กำหนดกรอบเวลาที่ยอมรับได้สำหรับการส่งสุนัขที่บ้านของลูกค้า ในตัวอย่างนี้ คุณบอกลูกค้าทั้ง 2 รายว่าสุนัขจะถูกส่งกลับระหว่างเวลา 17:00 น. ถึง 18:30 น.
endTime:
2023-01-13T18:30:00Z
Vehicle startTimeWindows startTime:
2023-01-13T07:00:00Z
endTime:
2023-01-13T07:15:00Z
กำหนดกรอบเวลาที่ยอมรับได้สำหรับการเริ่ม (07:00 น. ถึง 07:15 น.) และสิ้นสุด (17:00 น. ถึง 17:15 น.) ของยานพาหนะ
endTimeWindows startTime:
2023-01-13T18:45:00Z
endTime:
2023-01-13T19:00:00Z

แผนภาพต่อไปนี้แสดงกรอบเวลาที่ส่งผลต่อเส้นทางนี้

ไทม์ไลน์หลายรายการแสดงกรอบเวลาทั่วโลก กรอบเวลารับและเวลานำส่ง กรอบเวลาเริ่มต้นและเวลาสิ้นสุดของยานพาหนะ และเวลาทำงานของยานพาหนะ

ในสถานการณ์นี้ ดังที่แสดงในแผนภาพ กรอบเวลาจะทำงานดังนี้

  • กรอบเวลาส่วนกลางแสดงถึงเวลาทำการของศูนย์รับฝากสุนัข และกรอบเวลาอื่นๆ ทั้งหมดต้องอยู่ภายในกรอบเวลานี้
  • การรับและการนำส่งจะมี timeWindows ของตนเองในช่วงเริ่มต้นและสิ้นสุดของวันตามลำดับ
  • startTimeWindows ของยานพาหนะจะระบุกรอบเวลาที่ผู้ควบคุมยานพาหนะต้องเริ่มทำงาน และ endTimeWindows จะระบุกรอบเวลาที่ผู้ควบคุมยานพาหนะต้องทำงานให้เสร็จสิ้นในวันนั้น
  • เวลาเริ่มต้นของ startTimeWindow แรกและเวลาสิ้นสุดของ endTimeWindow สุดท้ายจะกำหนดเวลาทำการของยานพาหนะ ซึ่งในกรณีนี้จะเหมือนกับกรอบเวลาทั่วโลก

ตัวอย่างคำขอ

ตัวอย่างต่อไปนี้แสดงโครงสร้างของคำขอ optimizeTours ที่รวมค่ากรอบเวลาของสถานการณ์ตัวอย่าง

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

กรอบเวลาแบบยืดหยุ่น

คุณสามารถใช้กรอบเวลาเป็นข้อจำกัดแบบยืดหยุ่นได้โดยกำหนด softStartTime และ softEndTime ในประเภทข้อความ TimeWindow ซึ่งจะช่วยให้เครื่องมือเพิ่มประสิทธิภาพเบี่ยงเบนจากกรอบเวลาที่ระบุได้โดยมีค่าใช้จ่ายที่ระบุ โดยให้ความสำคัญกับการเพิ่มประสิทธิภาพโดยรวมมากกว่าการปฏิบัติตามกรอบเวลาอย่างเคร่งครัดเมื่อเป็นประโยชน์

กรอบเวลาแบบยืดหยุ่นมีข้อจำกัดการใช้งานดังต่อไปนี้

  • แต่จะใช้กับ globalStartTime และ globalEndTime ไม่ได้เนื่องจากไม่ได้ใช้ข้อความประเภท TimeWindow
  • โดยจะใช้ได้ก็ต่อเมื่อมี TimeWindow รายการเดียวในลิสต์

พร็อพเพอร์ตี้

ตารางต่อไปนี้อธิบายพร็อพเพอร์ตี้ข้อจำกัดแบบยืดหยุ่นสำหรับกรอบเวลา

ชื่อพร็อพเพอร์ตี้ รูปแบบ คำอธิบายที่พัก
softStartTime การประทับเวลา ระบุจุดเริ่มต้นของกรอบเวลาแบบยืดหยุ่น หากเหตุการณ์เกิดขึ้นก่อนเวลานี้ จะมีค่าใช้จ่ายเกิดขึ้น
softEndTime การประทับเวลา ระบุจุดสิ้นสุดของกรอบเวลาแบบยืดหยุ่น หากเหตุการณ์เกิดขึ้นหลังจากเวลานี้ จะมีค่าใช้จ่ายเกิดขึ้น
costPerHourBeforeSoftStartTime ตัวเลข ค่าใช้จ่ายต่อชั่วโมงที่เกิดขึ้นเมื่อกิจกรรมเริ่มต้นก่อน softStartTime ต้องระบุพร็อพเพอร์ตี้นี้เมื่อใช้ softStartTime ดูแนวคิดหลักเกี่ยวกับรูปแบบต้นทุนเพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีใช้ต้นทุน
costPerHourAfterSoftEndTime ตัวเลข ค่าใช้จ่ายต่อชั่วโมงที่เกิดขึ้นเมื่อกิจกรรมสิ้นสุดหลังวันที่ softEndTime ต้องระบุพร็อพเพอร์ตี้นี้เมื่อใช้ softEndTime ดูแนวคิดหลักเกี่ยวกับรูปแบบต้นทุนเพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีใช้ต้นทุน

ตัวอย่างโค้ด

ตัวอย่างต่อไปนี้แสดงโครงสร้างของพร็อพเพอร์ตี้ข้อจำกัดแบบยืดหยุ่นของประเภทข้อความ TimeWindow

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