กรอบเวลา

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

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

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

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

โครงสร้าง

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

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

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

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

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

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

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

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