ตีความคำตอบ

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
    }
  }
}