ตีความคำตอบ

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)

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

ข้อความ 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
    }
  }
}