กรอบเวลา

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

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

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

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

โครงสร้าง

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

  • globalStartTime และ globalEndTime เป็นพร็อพเพอร์ตี้ของ ShipmentModel
  • timeWindows เป็นพร็อพเพอร์ตี้ของ
    • pickups ภายใน Shipment
    • deliveries ภายใน Shipment
  • startTimeWindows และ endTimeWindows เป็นพร็อพเพอร์ตี้ของ Vehicle

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

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

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

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

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

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