ตีความคำตอบ

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 คือดัชนีแบบนับจาก 0 ของ 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 คือดัชนีฐาน 0 ของการจัดส่งที่การเข้าชมนี้อยู่ในการร้องขอที่เกี่ยวข้อง
  • 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
    }
  }
}