ตีความคำตอบ

นักพัฒนาซอฟต์แวร์ในเขตเศรษฐกิจยุโรป (EEA)

Route Optimization API จะแสดงผลเส้นทางสำหรับยานพาหนะในคำขอที่เกี่ยวข้อง ระบบจะกำหนดการจัดส่งให้กับยานพาหนะ หรืออาจข้ามไป ทั้งนี้ขึ้นอยู่กับพร็อพเพอร์ตี้ของคำขอ

ข้อความ OptimizeToursResponse (REST, gRPC) มีพร็อพเพอร์ตี้ระดับบนสุด 2 รายการ ได้แก่

  • routes[] คือเส้นทางของยานพาหนะแต่ละคันพร้อมการจัดส่งที่กำหนด Route แต่ละรายการจะมีเมตริกที่แสดงพร็อพเพอร์ตี้ของเส้นทางนั้นๆ
  • metrics คือเมตริกที่รวบรวมไว้สำหรับการตอบกลับทั้งหมดในยานพาหนะและแผนเส้นทางทั้งหมด เมตริกระดับบนสุดมีพร็อพเพอร์ตี้เดียวกันกับเมตริกต่อเส้นทาง โดยมีค่าที่รวบรวมไว้ในเส้นทางทั้งหมด

ระบบอาจไม่ป้อนข้อมูลพร็อพเพอร์ตี้บางรายการเสมอไป ทั้งนี้ขึ้นอยู่กับผลการเพิ่มประสิทธิภาพ

  1. skippedShipments[] แสดงการจัดส่งที่ไม่ได้ดำเนินการโดยยานพาหนะ คุณข้ามการจัดส่งได้หากดำเนินการภายในข้อจำกัดที่ระบุไม่ได้ หรือหากต้นทุนในการดำเนินการจัดส่งสูงกว่าค่าปรับ เช่น หากการรับหรือนำส่งสินค้ามีtimeWindowที่แคบมาก รถอาจไม่สามารถเข้า รับสินค้าในช่วงเวลาที่กำหนด หรืออาจไม่คุ้มค่า
  2. validationErrors[] ระบุข้อผิดพลาดที่ทำให้คำขอไม่ถูกต้องหรือ แก้ไขไม่ได้เมื่อตั้งค่า solvingMode ของคำขอเป็น VALIDATE_ONLY ในโหมด DEFAULT_SOLVE ปกติ ข้อผิดพลาดในการตรวจสอบจะ ปรากฏในข้อความแสดงข้อผิดพลาดแทนเนื้อหาการตอบกลับ โปรดทราบว่าโหมดการแก้ปัญหาของ VALIDATE_ONLY สามารถรายงานข้อผิดพลาดหลายรายการพร้อมกันได้ ซึ่งเป็นประโยชน์สำหรับการแก้ไขข้อบกพร่องของคำขออย่างรวดเร็ว

คุณสมบัติของเส้นทาง

แต่ละรายการ routes[] คือข้อความ ShipmentRoute (REST, gRPC) แต่ละ ShipmentRouteแสดงถึงการกำหนดเส้นทางสำหรับยานพาหนะหนึ่งๆ จาก คำขอ ShipmentRouteพร็อพเพอร์ตี้ที่สำคัญซึ่งเกี่ยวข้องกับVehicleมีดังนี้

  • vehicleIndex คือดัชนีแบบอิงฐานศูนย์ของ Vehicle ในข้อความคำขอที่เกี่ยวข้อง การตอบกลับของ REST จะละเว้นพร็อพเพอร์ตี้นี้เมื่อค่าเป็น 0
  • vehicleStartTime คือเวลาที่ยานพาหนะต้องเริ่มเส้นทาง
  • vehicleEndTime คือเวลาที่คาดว่ายานพาหนะจะวิ่ง เส้นทางเสร็จ

ในคำตอบ routes จะมีลักษณะดังนี้

{
  "routes": [
    {
      "vehicleStartTime": "2024-02-13T00:00:00Z",
      "vehicleEndTime": "2024-02-13T00:38:42Z",
      "visits": [
        ...
      ],
      "transitions": [
        ...
      ],
      "metrics": {
        ...
      },
      ...
    }
  ],
  ...
}

แต่ละ ShipmentRoute จะมีรายการตามลำดับของ visits ที่ยานพาหนะจะ ดำเนินการให้เสร็จสมบูรณ์ แต่ละ Visit (REST, gRPC) แสดงถึง VisitRequest (REST, gRPC) จากคำขอที่เกี่ยวข้อง พร็อพเพอร์ตี้ Visit ที่สำคัญมีดังนี้

  • shipmentIndex คือดัชนีแบบ Zero-Based ของการจัดส่งที่การเข้าชมนี้เป็นส่วนหนึ่งในคำขอที่เกี่ยวข้อง
  • isPickup จะเป็นจริงเมื่อการเข้าชมเป็นการรับสินค้า และเป็นเท็จเมื่อการเข้าชมเป็นการนำส่ง การตอบกลับของ REST จะละเว้นพร็อพเพอร์ตี้นี้เมื่อค่าเป็นเท็จ
  • visitRequestIndex คือดัชนีที่อิงตาม 0 ของ VisitRequest จาก Shipment.pickups หรือ Shipment.deliveries ในคำขอที่เกี่ยวข้อง ซึ่ง Visit แสดง การตอบกลับของ REST จะละเว้นพร็อพเพอร์ตี้นี้เมื่อค่าเป็น 0
  • startTime คือเวลาที่คาดว่าการเข้าชมจะเริ่มต้นขึ้น
  • loadDemands จะแมปประเภทการโหลดกับจำนวนการโหลดที่ต้องการเพื่อดำเนินการVisitให้เสร็จสมบูรณ์ จำนวนการโหลดจะเป็นค่าลบสำหรับการเข้าชมการนำส่ง ซึ่งแสดงถึงการนำโหลด ออกจากยานพาหนะ

ตัวอย่าง Visit มีลักษณะดังนี้

{
  "routes": [
    {
      ...
      "visits": [
        {
          "isPickup": true,
          "startTime": "2024-02-13T00:00:00Z",
          "detour": "0s"
        },
        ...
      ],
    },
    ...
  ],
  ...
}

แต่ละ ShipmentRoute จะมีรายการที่เรียงตามลำดับของ transitions ซึ่งแสดงถึง การเดินทางระหว่าง visits สำหรับยานพาหนะที่กำหนด พร็อพเพอร์ตี้ข้อความ Transition ที่สำคัญ (REST, gRPC) มีดังนี้

  • startTime คือเวลาที่ยานพาหนะจะเริ่มทำการเปลี่ยนสถานะ
  • travelDuration คือระยะเวลาที่ยานพาหนะต้องเดินทางเพื่อ ทำการเปลี่ยนผ่านให้เสร็จสมบูรณ์
  • travelDistanceMeters คือระยะทางเป็นเมตรที่รถต้อง เคลื่อนที่เพื่อเปลี่ยนผ่านให้เสร็จสมบูรณ์
  • trafficInfoUnavailable ระบุว่ามีข้อมูลการจราจรสำหรับการเปลี่ยนเส้นทางหรือไม่
  • waitDuration แสดงเวลาที่รถหยุดรอเพื่อเริ่มVisitครั้งถัดไป ซึ่งอาจเกิดขึ้นเนื่องจากstart_timeของVisitต่อไปนี้
  • totalDuration คือระยะเวลาทั้งหมดของการเปลี่ยนผ่าน ซึ่งรวมถึงเวลาเดินทาง เวลารอ เวลาพัก และเวลาล่าช้า
  • vehicleLoads แมปประเภทการโหลดกับปริมาณการโหลดที่ยานพาหนะบรรทุกระหว่าง การเปลี่ยนผ่านนี้

ตัวอย่าง Transition มีลักษณะดังนี้

{
  "routes": [
    {
      ...
      "transitions": [
        ...
        {
          "travelDuration": "1171s",
          "travelDistanceMeters": 9004,
          "waitDuration": "0s",
          "totalDuration": "1171s",
          "startTime": "2024-02-13T00:00:00Z"
        },
        ...
      ],
      ...
    }
  ],
  ...
}

ดูข้อมูลเพิ่มเติมเกี่ยวกับความสัมพันธ์ระหว่าง vists และ transitions ได้ที่การเพิ่มประสิทธิภาพลำดับการหยุดรับและนำส่งพัสดุและเอกสารอ้างอิง ShipmentRoute (REST, gRPC) ดูข้อมูลเพิ่มเติมเกี่ยวกับพร็อพเพอร์ตี้ routePolylineและrouteTokenของข้อความ Transition ได้ที่ เส้นประกอบการเปลี่ยนผ่านและโทเค็นเส้นทาง

พร็อพเพอร์ตี้เมตริก

Metricsข้อความ (REST, gRPC) จะสรุปโซลูชันทั้งหมด พร็อพเพอร์ตี้ Metrics ที่สำคัญบางอย่างมีดังนี้

  • totalCost คือต้นทุนรวมที่เกิดขึ้นในการเดินทางตามเส้นทางจนเสร็จสมบูรณ์ อ่านเพิ่มเติม เกี่ยวกับต้นทุนในพารามิเตอร์รูปแบบต้นทุน
  • usedVehicleCount คือจำนวนยานพาหนะทั้งหมดที่ใช้ในโซลูชัน ยานพาหนะอาจมีเส้นทางว่างเปล่าเมื่อเครื่องมือเพิ่มประสิทธิภาพพิจารณาว่าการใช้งานยานพาหนะ ไม่จำเป็น
  • skippedMandatoryShipmentCount คือจำนวนการจัดส่งที่ข้ามซึ่งมีสถานะเป็น "ต้องระบุ" การจัดส่งที่จำเป็นไม่ได้ระบุ penaltyCost ที่เกิดขึ้นหากข้ามการจัดส่ง คุณยังคงข้ามการจัดส่งที่จำเป็นได้หากการจัดส่งดังกล่าวไม่สามารถดำเนินการได้ภายใต้ข้อจำกัดที่ระบุ อ่านข้อมูลเพิ่มเติมเกี่ยวกับต้นทุนในพารามิเตอร์รูปแบบต้นทุน

ระบบจะรายงานเมตริกเพิ่มเติมเป็นข้อความ AggregatedMetrics (REST, gRPC) ระบบจะใช้ประเภทข้อความ AggregatedMetrics สำหรับพร็อพเพอร์ตี้ Metrics.aggregatedRouteMetrics และสำหรับพร็อพเพอร์ตี้ ShipmentRoute.metrics Metrics.aggregatedRouteMetrics ที่มีเมตริกที่รวบรวมจาก ShipmentRoute ทั้งหมดใน OptimizeToursResponse พร็อพเพอร์ตี้ ShipmentRoute.metrics แต่ละรายการจะมีเมตริกสำหรับ ShipmentRoute นั้นๆ

พร็อพเพอร์ตี้ที่สำคัญAggregatedMetrics ได้แก่

  • performedShipmentCount คือจำนวนการจัดส่งที่ยานพาหนะดำเนินการ ตลอดเส้นทาง
  • travelDuration คือเวลารวมที่ยานพาหนะใช้ในการขนส่งขณะเดินทางตามเส้นทางจนเสร็จสมบูรณ์
  • waitDuration คือเวลาทั้งหมดที่ยานพาหนะใช้ในการรอขณะเดินทางตามเส้นทาง
  • delayDuration คือเวลาที่ล่าช้าทั้งหมดสำหรับยานพาหนะ โดยปกติแล้วค่านี้จะเป็น 0 เว้นแต่จะใช้ TransitionAttributes ในคำขอ
  • breakDuration คือเวลารวมที่ยานพาหนะใช้ในการหยุดพักขณะ ทำเส้นทางให้เสร็จ
  • visitDuration คือระยะเวลาทั้งหมดที่ยานพาหนะใช้ในการเข้าชมขณะ ทำเส้นทางให้เสร็จสมบูรณ์ ซึ่งก็คือผลรวมของค่า VisitRequest.duration ทั้งหมดสำหรับ VisitRequest ที่สอดคล้องกับ Visit ที่กำหนดให้กับยานพาหนะที่เกี่ยวข้อง
  • totalDuration คือระยะเวลาทั้งหมดที่ต้องใช้ในการเดินทางตามเส้นทางของยานพาหนะ
  • travelDistanceMeters คือระยะทางรวมที่ยานพาหนะเดินทางขณะวิ่งตามเส้นทางจนเสร็จสมบูรณ์
  • maxLoads จะแมปประเภทน้ำหนักบรรทุกกับปริมาณน้ำหนักบรรทุกสูงสุดที่ยานพาหนะบรรทุก ณ จุดใดก็ได้ในเส้นทาง

ตัวอย่างข้อความ Metrics มีลักษณะดังนี้

{
  "routes": [
    ...
  ],
  "metrics": {
    "aggregatedRouteMetrics": {
      "performedShipmentCount": 1,
      "travelDuration": "2322s",
      "waitDuration": "0s",
      "delayDuration": "0s",
      "breakDuration": "0s",
      "visitDuration": "0s",
      "totalDuration": "2322s",
      "travelDistanceMeters": 18603
    },
    "usedVehicleCount": 1,
    "earliestVehicleStartTime": "2024-02-13T00:00:00Z",
    "latestVehicleEndTime": "2024-02-13T00:38:42Z",
    "totalCost": 18.603,
    "costs": {
      "model.vehicles.cost_per_kilometer": 18.603
    }
  }
}

ตัวอย่างที่เสร็จสมบูรณ์

ตัวอย่างการตอบกลับที่สมบูรณ์สำหรับคำขอจากสร้างคำขอมีลักษณะดังนี้

{
  "routes": [
    {
      "vehicleStartTime": "2024-02-13T00:00:00Z",
      "vehicleEndTime": "2024-02-13T00:38:42Z",
      "visits": [
        {
          "isPickup": true,
          "startTime": "2024-02-13T00:00:00Z",
          "detour": "0s"
        },
        {
          "startTime": "2024-02-13T00:19:31Z",
          "detour": "0s"
        }
      ],
      "transitions": [
        {
          "travelDuration": "0s",
          "waitDuration": "0s",
          "totalDuration": "0s",
          "startTime": "2024-02-13T00:00:00Z"
        },
        {
          "travelDuration": "1171s",
          "travelDistanceMeters": 9004,
          "waitDuration": "0s",
          "totalDuration": "1171s",
          "startTime": "2024-02-13T00:00:00Z"
        },
        {
          "travelDuration": "1151s",
          "travelDistanceMeters": 9599,
          "waitDuration": "0s",
          "totalDuration": "1151s",
          "startTime": "2024-02-13T00:19:31Z"
        }
      ],
      "metrics": {
        "performedShipmentCount": 1,
        "travelDuration": "2322s",
        "waitDuration": "0s",
        "delayDuration": "0s",
        "breakDuration": "0s",
        "visitDuration": "0s",
        "totalDuration": "2322s",
        "travelDistanceMeters": 18603
      },
      "routeCosts": {
        "model.vehicles.cost_per_kilometer": 18.603
      },
      "routeTotalCost": 18.603
    }
  ],
  "metrics": {
    "aggregatedRouteMetrics": {
      "performedShipmentCount": 1,
      "travelDuration": "2322s",
      "waitDuration": "0s",
      "delayDuration": "0s",
      "breakDuration": "0s",
      "visitDuration": "0s",
      "totalDuration": "2322s",
      "travelDistanceMeters": 18603
    },
    "usedVehicleCount": 1,
    "earliestVehicleStartTime": "2024-02-13T00:00:00Z",
    "latestVehicleEndTime": "2024-02-13T00:38:42Z",
    "totalCost": 18.603,
    "costs": {
      "model.vehicles.cost_per_kilometer": 18.603
    }
  }
}