กรอบเวลา

ช่วงเวลาจะอยู่ใน `ShipmentModel` ใน `Shipment` ในออบเจ็กต์การรับสินค้าและการนำส่ง และใน `Vehicle`

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

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

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

โครงสร้าง

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

รายการตรวจสอบที่สำคัญ

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

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

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

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

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

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

ตารางต่อไปนี้อธิบายพร็อพเพอร์ตี้ของ TimeWindow message type

พร็อพเพอร์ตี้ รูปแบบ คำอธิบาย
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
    }