OptimizeToursResponse

การตอบกลับหลังจากแก้ปัญหาการเพิ่มประสิทธิภาพการทัวร์ชมซึ่งมีเส้นทางที่ยานพาหนะแต่ละคันใช้ การจัดส่งที่ข้ามไป และต้นทุนโดยรวมของโซลูชัน

การแสดง JSON
{
  "routes": [
    {
      object (ShipmentRoute)
    }
  ],
  "requestLabel": string,
  "skippedShipments": [
    {
      object (SkippedShipment)
    }
  ],
  "validationErrors": [
    {
      object (OptimizeToursValidationError)
    }
  ],
  "metrics": {
    object (Metrics)
  }
}
ช่อง
routes[]

object (ShipmentRoute)

เส้นทางที่คำนวณสำหรับยานพาหนะแต่ละคัน โดยเส้นทางที่ i จะสอดคล้องกับยานพาหนะลำดับที่ i ในโมเดล

requestLabel

string

สําเนาของ OptimizeToursRequest.label หากมีการระบุป้ายกํากับในคําขอ

skippedShipments[]

object (SkippedShipment)

รายการการจัดส่งทั้งหมดที่ข้าม

validationErrors[]

object (OptimizeToursValidationError)

รายการข้อผิดพลาดทั้งหมดในการตรวจสอบที่เราตรวจพบได้ ดูคำอธิบาย "ข้อผิดพลาดหลายรายการ" สำหรับข้อความ OptimizeToursValidationError ในกรณีนี้ solvingMode จะแสดงคำเตือนแทนข้อผิดพลาดDEFAULT_SOLVE

metrics

object (Metrics)

เมตริกระยะเวลา ระยะทาง และการใช้งานสําหรับโซลูชันนี้

OptimizeToursValidationError

อธิบายข้อผิดพลาดหรือคำเตือนที่พบเมื่อตรวจสอบ OptimizeToursRequest

การแสดง JSON
{
  "code": integer,
  "displayName": string,
  "fields": [
    {
      object (FieldReference)
    }
  ],
  "errorMessage": string,
  "offendingValues": string
}
ช่อง
code

integer

ข้อผิดพลาดในการตรวจสอบจะกำหนดโดยคู่ (code, displayName) ซึ่งจะปรากฏอยู่เสมอ

ช่องต่างๆ ที่อยู่ถัดจากส่วนนี้จะให้บริบทเพิ่มเติมเกี่ยวกับข้อผิดพลาด

ข้อผิดพลาดหลายรายการ: เมื่อมีข้อผิดพลาดหลายรายการ กระบวนการตรวจสอบจะพยายามแสดงข้อผิดพลาดหลายรายการ กระบวนการนี้ไม่สมบูรณ์แบบเช่นเดียวกับคอมไพเลอร์ ข้อผิดพลาดในการตรวจสอบบางอย่างจะเป็น "ข้อผิดพลาดร้ายแรง" ซึ่งหมายความว่าจะหยุดกระบวนการตรวจสอบทั้งหมด กรณีนี้รวมถึงข้อผิดพลาด displayName="UNSPECIFIED" และอื่นๆ ข้อผิดพลาดบางรายการอาจทําให้กระบวนการตรวจสอบข้ามข้อผิดพลาดอื่นๆ

ความเสถียร: code และ displayName ควรมีความเสถียรมาก แต่รหัสและชื่อที่แสดงใหม่อาจปรากฏขึ้นเมื่อเวลาผ่านไป ซึ่งอาจทําให้คําขอ (ไม่ถูกต้อง) หนึ่งๆ ให้คู่ (code, displayName) อื่น เนื่องจากข้อผิดพลาดใหม่ซ่อนข้อผิดพลาดเก่าไว้ เช่น ดู "ข้อผิดพลาดหลายรายการ"

displayName

string

ชื่อที่แสดงของข้อผิดพลาด

fields[]

object (FieldReference)

บริบทของข้อผิดพลาดอาจเกี่ยวข้องกับฟิลด์ 0, 1 (ส่วนใหญ่) หรือมากกว่า ตัวอย่างเช่น การอ้างอิงถึงการไปรับรถคันที่ 4 และการจัดส่งที่ 2 ครั้งแรกทำได้ดังนี้

fields { name: "vehicles" index: 4}
fields { name: "shipments" index: 2 subField {name: "pickups" index: 0} }

อย่างไรก็ตาม โปรดทราบว่า Cardinality ของ fields ไม่ควรเปลี่ยนแปลงสำหรับรหัสข้อผิดพลาดหนึ่งๆ

errorMessage

string

สตริงที่มนุษย์อ่านได้ซึ่งอธิบายข้อผิดพลาด มีการแมป 1:1 ระหว่าง code กับ errorMessage (เมื่อรหัส != "UNSPECIFIED")

ความเสถียร: ไม่เสถียร: ข้อความแสดงข้อผิดพลาดที่เชื่อมโยงกับ code หนึ่งๆ อาจเปลี่ยนแปลงได้ (หวังว่าจะเพื่อชี้แจงให้ชัดเจนขึ้น) เมื่อเวลาผ่านไป โปรดใช้ displayName และ code แทน

offendingValues

string

อาจมีค่าของช่อง แต่ฟีเจอร์นี้อาจไม่พร้อมใช้งานเสมอไป คุณไม่ควรใช้ฟีเจอร์นี้และควรใช้เพื่อแก้ไขข้อบกพร่องของโมเดลด้วยตนเองเท่านั้น

FieldReference

ระบุบริบทสําหรับข้อผิดพลาดในการตรวจสอบ FieldReference จะอ้างอิงถึงฟิลด์หนึ่งๆ ในไฟล์นี้เสมอและเป็นไปตามโครงสร้างตามลําดับชั้นเดียวกัน ตัวอย่างเช่น เราอาจระบุองค์ประกอบ #2 ของ startTimeWindows ในยานพาหนะ #5 โดยใช้

name: "vehicles" index: 5 subField { name: "endTimeWindows" index: 2 }

อย่างไรก็ตาม เราจะไม่ใส่เอนทิตีระดับบนสุด เช่น OptimizeToursRequest หรือ ShipmentModel เพื่อไม่ให้ข้อความดูรก

การแสดง JSON
{
  "name": string,
  "subField": {
    object (FieldReference)
  },

  // Union field index_or_key can be only one of the following:
  "index": integer,
  "key": string
  // End of list of possible types for union field index_or_key.
}
ช่อง
name

string

ชื่อฟิลด์ เช่น "vehicles"

subField

object (FieldReference)

ช่องย่อยที่ฝังแบบซ้ำซ้อน หากจำเป็น

ฟิลด์สหภาพ index_or_key

index_or_key ต้องเป็นค่าใดค่าหนึ่งต่อไปนี้เท่านั้น

index

integer

ดัชนีของช่องหากซ้ำ

key

string

คีย์หากช่องเป็นแผนที่

เมตริก

เมตริกโดยรวมที่รวบรวมจากทุกเส้นทาง

การแสดง JSON
{
  "aggregatedRouteMetrics": {
    object (AggregatedMetrics)
  },
  "skippedMandatoryShipmentCount": integer,
  "usedVehicleCount": integer,
  "earliestVehicleStartTime": string,
  "latestVehicleEndTime": string,
  "costs": {
    string: number,
    ...
  },
  "totalCost": number
}
ช่อง
aggregatedRouteMetrics

object (AggregatedMetrics)

รวบรวมจากเส้นทางต่างๆ เมตริกแต่ละรายการคือผลรวม (หรือค่าสูงสุดสําหรับการโหลด) ของช่อง ShipmentRoute.metrics ทั้งหมดที่มีชื่อเดียวกัน

skippedMandatoryShipmentCount

integer

จำนวนการจัดส่งที่ต้องข้าม

usedVehicleCount

integer

จํานวนยานพาหนะที่ใช้งาน หมายเหตุ: หากเส้นทางของยานพาหนะว่างเปล่าและ Vehicle.used_if_route_is_empty เป็น "จริง" ระบบจะถือว่ายานพาหนะดังกล่าวเป็นยานพาหนะที่ใช้แล้ว

earliestVehicleStartTime

string (Timestamp format)

เวลาเริ่มต้นเร็วที่สุดของยานพาหนะมือสอง ซึ่งคํานวณจากค่าต่ำสุดของ ShipmentRoute.vehicle_start_time สำหรับยานพาหนะมือสองทั้งหมด

การประทับเวลาจะอยู่ในรูปแบบ RFC3339 UTC "Zulu" ที่มีความละเอียดระดับนาโนวินาทีและทศนิยมสูงสุด 9 หลัก ตัวอย่างเช่น "2014-10-02T15:01:23Z" และ "2014-10-02T15:01:23.045123456Z"

latestVehicleEndTime

string (Timestamp format)

เวลาสิ้นสุดล่าสุดของยานพาหนะมือสอง ซึ่งคํานวณเป็นค่าสูงสุดของ ShipmentRoute.vehicle_end_time ในยานพาหนะมือสองทั้งหมด

การประทับเวลาจะอยู่ในรูปแบบ RFC3339 UTC "Zulu" ที่มีความละเอียดระดับนาโนวินาทีและทศนิยมสูงสุด 9 หลัก ตัวอย่างเช่น "2014-10-02T15:01:23Z" และ "2014-10-02T15:01:23.045123456Z"

costs

map (key: string, value: number)

ค่าใช้จ่ายของโซลูชันที่แจกแจงตามช่องคำขอที่เกี่ยวข้องกับค่าใช้จ่าย คีย์คือเส้นทางโปรโตคอลซึ่งสัมพันธ์กับอินพุต OptimizeToursRequest เช่น "model.shipments.pickups.cost" และค่าคือต้นทุนทั้งหมดที่สร้างขึ้นจากช่องต้นทุนที่เกี่ยวข้อง ซึ่งรวบรวมจากโซลูชันทั้งหมด กล่าวคือ costs["model.shipments.pickups.cost"] คือผลรวมของค่าใช้จ่ายในการรับสินค้าทั้งหมดในโซลูชัน ระบบจะรายงานต้นทุนทั้งหมดที่กําหนดไว้ในรูปแบบโดยละเอียดที่นี่ ยกเว้นต้นทุนที่เกี่ยวข้องกับ TransitionAttributes ซึ่งจะรายงานแบบรวมเท่านั้น ณ วันที่ 01/2022

totalCost

number

ต้นทุนรวมของโซลูชัน ผลรวมของค่าทั้งหมดในแผนที่ต้นทุน