ShipmentModel

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

  • ค่าใช้จ่ายในการจัดเส้นทางพาหนะ (ผลรวมของค่าใช้จ่ายต่อเวลาทั้งหมด ค่าใช้จ่ายต่อการเดินทาง และค่าใช้จ่ายคงที่ของยานพาหนะทุกคัน)
  • บทลงโทษการจัดส่งที่ไม่ได้ดำเนินการ
  • ต้นทุนสำหรับระยะเวลาการจัดส่งทั่วโลก
การแสดง JSON
{
  "shipments": [
    {
      object (Shipment)
    }
  ],
  "vehicles": [
    {
      object (Vehicle)
    }
  ],
  "globalStartTime": string,
  "globalEndTime": string,
  "globalDurationCostPerHour": number,
  "durationDistanceMatrices": [
    {
      object (DurationDistanceMatrix)
    }
  ],
  "durationDistanceMatrixSrcTags": [
    string
  ],
  "durationDistanceMatrixDstTags": [
    string
  ],
  "transitionAttributes": [
    {
      object (TransitionAttributes)
    }
  ],
  "shipmentTypeIncompatibilities": [
    {
      object (ShipmentTypeIncompatibility)
    }
  ],
  "shipmentTypeRequirements": [
    {
      object (ShipmentTypeRequirement)
    }
  ],
  "precedenceRules": [
    {
      object (PrecedenceRule)
    }
  ],
  "maxActiveVehicles": integer
}
ช่อง
shipments[]

object (Shipment)

ชุดการจัดส่งที่ต้องดำเนินการในโมเดล

vehicles[]

object (Vehicle)

ชุดยานพาหนะที่ใช้เดินทางไปได้

globalStartTime

string (Timestamp format)

เวลาเริ่มต้นและสิ้นสุดทั่วโลกของโมเดล: ไม่มีเวลานอกช่วงนี้ที่จะถือว่าถูกต้อง

ช่วงเวลาของโมเดลต้องน้อยกว่า 1 ปี นั่นคือ globalEndTime และ globalStartTime ต้องอยู่ห่างกันไม่เกิน 31536000 วินาที

เมื่อใช้ฟิลด์ cost_per_*hour คุณอาจต้องการตั้งค่ากรอบเวลานี้ให้มีระยะเวลาที่น้อยลงเพื่อเพิ่มประสิทธิภาพ (เช่น หากคุณจำลองแบบวันเดียว คุณควรตั้งขีดจำกัดเวลาทั่วโลกเป็นวันนั้น) หากไม่ได้ตั้งค่า ระบบจะใช้เวลา 00:00:00 น. UTC ของวันที่ 1 มกราคม 1970 (เช่น วินาที: 0, นาโน: 0) เป็นค่าเริ่มต้น

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

globalEndTime

string (Timestamp format)

หากไม่ได้ตั้งค่า ระบบจะใช้เวลา 00:00:00 UTC ของวันที่ 1 มกราคม 1971 (เช่น วินาที: 31536000, nanos: 0) เป็นค่าเริ่มต้น

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

globalDurationCostPerHour

number

"ระยะเวลาทั่วโลก" ของแผนโดยรวมคือความแตกต่างระหว่างเวลาเริ่มต้นแรกที่มีผลเร็วที่สุดกับเวลาสิ้นสุดที่มีผลล่าสุดของยานพาหนะทุกคัน เช่น ผู้ใช้สามารถกำหนดค่าใช้จ่ายต่อชั่วโมงให้กับจำนวนดังกล่าวเพื่อพยายามเพิ่มประสิทธิภาพเพื่อให้งานเสร็จเร็วที่สุด เป็นต้น ค่าใช้จ่ายนี้ต้องอยู่ในหน่วยเดียวกับ Shipment.penalty_cost

durationDistanceMatrices[]

object (DurationDistanceMatrix)

ระบุระยะเวลาและเมทริกซ์ระยะทางที่ใช้ในโมเดล หากฟิลด์นี้ว่างเปล่า ระบบจะใช้ Google Maps หรือระยะทางตามเรขาคณิตแทน ทั้งนี้ขึ้นอยู่กับค่าในฟิลด์ useGeodesicDistances หากเว้นว่างไว้ useGeodesicDistances จะเป็น "จริง" ไม่ได้ และทั้ง durationDistanceMatrixSrcTags และ durationDistanceMatrixDstTags จะเว้นว่างไม่ได้

ตัวอย่างการใช้:

  • สถานที่ตั้งมี 2 แห่ง ได้แก่ locA และ locB
  • ยานพาหนะ 1 คันเริ่มออกเดินทางที่ LoA และสิ้นสุดที่ locA
  • คำขอเข้าชมการรับสินค้า 1 รายการที่ locB
model {
  vehicles { startTags: "locA"  endTags: "locA" }
  shipments { pickups { tags: "locB" } }
  durationDistanceMatrixSrcTags: "locA"
  durationDistanceMatrixSrcTags: "locB"
  durationDistanceMatrixDstTags: "locA"
  durationDistanceMatrixDstTags: "locB"
  durationDistanceMatrices {
    rows {  # from: locA
      durations { seconds: 0 }   meters: 0    # to: locA
      durations { seconds: 100 } meters: 1000 # to: locB
    }
    rows {  # from: locB
      durations { seconds: 102 } meters: 990 # to: locA
      durations { seconds: 0 }   meters: 0   # to: locB
    }
  }
}
  • มีสถานที่ตั้ง 3 แห่ง ได้แก่ locA, locB และ locC
  • ยานพาหนะ 1 คันเริ่มต้นเส้นทางที่ LoA และสิ้นสุดที่ locB โดยใช้เมทริกซ์ "เร็ว"
  • ยานพาหนะ 1 คันเริ่มต้นเส้นทางที่ locB และสิ้นสุดที่ locB โดยใช้เมทริกซ์ "ช้า"
  • ยานพาหนะ 1 คันเริ่มต้นเส้นทางที่ locB และสิ้นสุดที่ locB โดยใช้เมทริกซ์ "เร็ว"
  • คำขอเข้าชมการรับสินค้า 1 รายการที่ locC
model {
  vehicles { startTags: "locA" endTags: "locB" startTags: "fast" }
  vehicles { startTags: "locB" endTags: "locB" startTags: "slow" }
  vehicles { startTags: "locB" endTags: "locB" startTags: "fast" }
  shipments { pickups { tags: "locC" } }
  durationDistanceMatrixSrcTags: "locA"
  durationDistanceMatrixSrcTags: "locB"
  durationDistanceMatrixSrcTags: "locC"
  durationDistanceMatrixDstTags: "locB"
  durationDistanceMatrixDstTags: "locC"
  durationDistanceMatrices {
    vehicleStartTag: "fast"
    rows {  # from: locA
      durations { seconds: 1000 } meters: 2000 # to: locB
      durations { seconds: 600 }  meters: 1000 # to: locC
    }
    rows {  # from: locB
      durations { seconds: 0 }   meters: 0    # to: locB
      durations { seconds: 700 } meters: 1200 # to: locC
    }
    rows {  # from: locC
      durations { seconds: 702 } meters: 1190 # to: locB
      durations { seconds: 0 }   meters: 0    # to: locC
    }
  }
  durationDistanceMatrices {
    vehicleStartTag: "slow"
    rows {  # from: locA
      durations { seconds: 1800 } meters: 2001 # to: locB
      durations { seconds: 900 }  meters: 1002 # to: locC
    }
    rows {  # from: locB
      durations { seconds: 0 }    meters: 0    # to: locB
      durations { seconds: 1000 } meters: 1202 # to: locC
    }
    rows {  # from: locC
      durations { seconds: 1001 } meters: 1195 # to: locB
      durations { seconds: 0 }    meters: 0    # to: locC
    }
  }
}
durationDistanceMatrixSrcTags[]

string

แท็กที่กำหนดแหล่งที่มาของเมทริกซ์ระยะทางและระยะเวลา durationDistanceMatrices(i).rows(j) จะกำหนดระยะเวลาและระยะทางจากการเข้าชมด้วยแท็ก durationDistanceMatrixSrcTags(j) ถึงการเข้าชมอื่นๆ ในเมทริกซ์ 1

แท็กจะสอดคล้องกับ VisitRequest.tags หรือ Vehicle.start_tags VisitRequest หรือ Vehicle ที่ระบุต้องตรงกับแท็กเพียง 1 รายการในช่องนี้ โปรดทราบว่าแท็กต้นทาง ปลายทาง และแท็กเมทริกซ์ของ Vehicle อาจเหมือนกัน ในทำนองเดียวกัน แท็กต้นทางและปลายทางของ VisitRequest อาจเหมือนกัน แท็กทั้งหมดต้องไม่ซ้ำกันและไม่สามารถเป็นสตริงว่างเปล่าได้ หากช่องนี้ไม่ว่าง ต้องระบุ durationDistanceMatrices

durationDistanceMatrixDstTags[]

string

แท็กที่ระบุปลายทางของเมทริกซ์ระยะเวลาและระยะทาง durationDistanceMatrices(i).rows(j).durations(k) (การตอบกลับ durationDistanceMatrices(i).rows(j).meters(k)) กำหนดระยะเวลา (ระยะทางตอบกลับ) ของการเดินทางจากการเข้าชมด้วยแท็ก durationDistanceMatrixSrcTags(j) ไปจนถึงการเข้าชมด้วยแท็ก durationDistanceMatrixDstTags(k) ในเมทริกซ์ i

แท็กจะสอดคล้องกับ VisitRequest.tags หรือ Vehicle.start_tags VisitRequest หรือ Vehicle ที่ระบุต้องตรงกับแท็กเพียง 1 รายการในช่องนี้ โปรดทราบว่าแท็กต้นทาง ปลายทาง และแท็กเมทริกซ์ของ Vehicle อาจเหมือนกัน ในทำนองเดียวกัน แท็กต้นทางและปลายทางของ VisitRequest อาจเหมือนกัน แท็กทั้งหมดต้องไม่ซ้ำกันและไม่สามารถเป็นสตริงว่างเปล่าได้ หากช่องนี้ไม่ว่าง ต้องระบุ durationDistanceMatrices

transitionAttributes[]

object (TransitionAttributes)

เพิ่มแอตทริบิวต์การเปลี่ยนไปยังโมเดล

shipmentTypeIncompatibilities[]

object (ShipmentTypeIncompatibility)

ชุด delivery_types ที่ใช้ร่วมกันไม่ได้ (ดู ShipmentTypeIncompatibility)

shipmentTypeRequirements[]

object (ShipmentTypeRequirement)

ชุดข้อกำหนด shipmentType รายการ (ดู ShipmentTypeRequirement)

precedenceRules[]

object (PrecedenceRule)

ชุดของกฎลำดับความสำคัญที่ต้องบังคับใช้ในโมเดล

maxActiveVehicles

integer

จำกัดจำนวนยานพาหนะที่ใช้งานอยู่สูงสุด ยานพาหนะยังใช้งานอยู่หากเส้นทางมีการจัดส่งอย่างน้อย 1 ครั้ง ซึ่งอาจใช้จำกัดจำนวนเส้นทางในกรณีที่มีจำนวนผู้ขับขี่น้อยกว่ายานพาหนะและยานพาหนะทั้งหมดอยู่คนละที่ จากนั้นการเพิ่มประสิทธิภาพจะเลือกยานพาหนะที่ดีที่สุดที่จะใช้ ต้องเป็นเชิงบวกเท่านั้น

การจัดส่ง

การจัดส่งสินค้า 1 รายการ ตั้งแต่การไปรับที่ร้าน 1 ครั้งไปจนถึงการจัดส่งสินค้า 1 รายการ ในการทำให้ถือว่าพัสดุได้รับการดำเนินการแล้ว ยานพาหนะที่ไม่ซ้ำกันต้องไปที่จุดรับรถ 1 แห่ง (และลดความจุอะไหล่ตามความเหมาะสม) จากนั้นไปที่สถานที่นำส่งในภายหลัง (และเพิ่มความจุสำรองตามนั้น)

การแสดง JSON
{
  "displayName": string,
  "pickups": [
    {
      object (VisitRequest)
    }
  ],
  "deliveries": [
    {
      object (VisitRequest)
    }
  ],
  "loadDemands": {
    string: {
      object (Load)
    },
    ...
  },
  "allowedVehicleIndices": [
    integer
  ],
  "costsPerVehicle": [
    number
  ],
  "costsPerVehicleIndices": [
    integer
  ],
  "pickupToDeliveryAbsoluteDetourLimit": string,
  "pickupToDeliveryTimeLimit": string,
  "shipmentType": string,
  "label": string,
  "ignore": boolean,
  "penaltyCost": number,
  "pickupToDeliveryRelativeDetourLimit": number
}
ช่อง
displayName

string

ชื่อที่แสดงที่ผู้ใช้กำหนดของการจัดส่ง โดยมีความยาวได้สูงสุด 63 อักขระและ UTF-8 ได้

pickups[]

object (VisitRequest)

ชุดตัวเลือกการรับสินค้าที่เกี่ยวข้องกับการจัดส่ง หากไม่ได้ระบุ ยานพาหนะจะต้องไปที่สถานที่ตั้งที่เกี่ยวข้องกับการนำส่งเท่านั้น

deliveries[]

object (VisitRequest)

ชุดตัวเลือกการนำส่งที่เกี่ยวข้องกับการจัดส่ง หากไม่ได้ระบุ ยานพาหนะจะต้องไปยังสถานที่ตั้งที่เกี่ยวข้องกับบริการไปรับเท่านั้น

loadDemands

map (key: string, value: object (Load))

โหลดความต้องการในการจัดส่ง (เช่น น้ำหนัก ปริมาตร จำนวนพาเลต เป็นต้น) คีย์ในแผนที่ควรเป็นตัวระบุที่อธิบายประเภทของโหลดที่เกี่ยวข้อง และโดยหลักการแล้ว อาจรวมถึงหน่วยต่างๆ ด้วย เช่น "weight_kg", "volume_gallons", "pallet_count" ฯลฯ หากคีย์ที่ระบุไม่ปรากฏในแผนที่ โหลดที่เกี่ยวข้องจะถือว่าเป็น Null

ออบเจ็กต์ที่มีรายการคู่ "key": value ตัวอย่างเช่น { "name": "wrench", "mass": "1.3kg", "count": "3" }

allowedVehicleIndices[]

integer

ชุดยานพาหนะที่อาจดำเนินการจัดส่งนี้ หากเว้นว่างไว้ รถทุกคันอาจทำงาน ดัชนีระบุยานพาหนะในรายการ vehicles ของ ShipmentModel

costsPerVehicle[]

number

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

  • จำนวนองค์ประกอบเท่ากับ costsPerVehicleIndices costsPerVehicle[i] สอดคล้องกับยานพาหนะ costsPerVehicleIndices[i] ของรุ่น
  • จำนวนองค์ประกอบเท่ากับยานพาหนะในโมเดล องค์ประกอบ i-th สอดคล้องกับพาหนะ #i ของโมเดล

ค่าใช้จ่ายเหล่านี้ต้องอยู่ในหน่วยเดียวกับ penaltyCost และต้องไม่เป็นค่าลบ ปล่อยช่องนี้ว่างไว้ หากไม่มีค่าใช้จ่ายดังกล่าว

costsPerVehicleIndices[]

integer

ตัวบอกยานพาหนะที่ใช้ costsPerVehicle หากไม่ว่างเปล่า จะต้องมีจำนวนองค์ประกอบเท่ากับ costsPerVehicle ระบุดัชนียานพาหนะมากกว่า 1 ครั้งไม่ได้ หากยานพาหนะไม่รวมอยู่ใน costsPerVehicleIndices ค่าใช้จ่ายจะเป็น 0

pickupToDeliveryAbsoluteDetourLimit

string (Duration format)

ระบุเวลาสูงสุดสัมบูรณ์ของทางอ้อมเทียบกับเส้นทางที่สั้นที่สุดตั้งแต่การรับสินค้าจนถึงการจัดส่ง หากระบุ จะต้องไม่ใช่มูลค่าติดลบ และการจัดส่งต้องมีบริการรับสินค้าและการจัดส่งเป็นอย่างน้อย

เช่น ระบุระยะเวลาที่สั้นที่สุดในการเดินทางจากจุดรับสินค้าที่เลือกไปยังตัวเลือกการจัดส่งที่เลือกโดยตรง จากนั้นการตั้งค่า pickupToDeliveryAbsoluteDetourLimit จะบังคับใช้ดังนี้

startTime(delivery) - startTime(pickup) <=
t + pickupToDeliveryAbsoluteDetourLimit

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

ระยะเวลาเป็นวินาทีโดยมีเลขเศษส่วนไม่เกิน 9 หลัก ลงท้ายด้วย "s" ตัวอย่างเช่น "3.5s"

pickupToDeliveryTimeLimit

string (Duration format)

ระบุระยะเวลาสูงสุดตั้งแต่เริ่มรับสินค้าจนถึงเริ่มนำส่งการจัดส่ง หากระบุ จะต้องไม่ใช่มูลค่าติดลบ และการจัดส่งต้องมีบริการรับสินค้าและการจัดส่งเป็นอย่างน้อย ข้อมูลนี้ไม่ได้ขึ้นอยู่กับทางเลือกอื่นที่เลือกไว้สำหรับการมารับที่ร้านและการจัดส่ง หรือความเร็วของยานพาหนะ ซึ่งสามารถระบุควบคู่กับข้อจำกัดการเปลี่ยนเส้นทางสูงสุด: โซลูชันจะเป็นไปตามข้อกำหนดทั้ง 2 ข้อ

ระยะเวลาเป็นวินาทีโดยมีเลขเศษส่วนไม่เกิน 9 หลัก ลงท้ายด้วย "s" ตัวอย่างเช่น "3.5s"

shipmentType

string

สตริงที่ไม่ว่างเปล่าซึ่งระบุ "type" สำหรับการจัดส่งนี้ ฟีเจอร์นี้สามารถใช้เพื่อนิยามความไม่เข้ากันหรือข้อกำหนดระหว่าง shipment_types (ดู shipmentTypeIncompatibilities ถึง shipmentTypeRequirements ใน ShipmentModel)

สิ่งที่แตกต่างจาก visitTypes ซึ่งระบุไว้สำหรับการเข้าชมครั้งเดียวคือ การรับสินค้า/การนำส่งทั้งหมดที่อยู่ในการจัดส่งเดียวกันจะใช้ shipmentType เดียวกัน

label

string

ระบุป้ายกำกับสำหรับการจัดส่งนี้ ระบบจะรายงานป้ายกำกับนี้ในการตอบสนองใน shipmentLabel ของ ShipmentRoute.Visit ที่เกี่ยวข้อง

ignore

boolean

หากจริง ให้ข้ามการจัดส่งนี้ แต่อย่าใช้ penaltyCost

การละเว้นการจัดส่งจะทำให้เกิดข้อผิดพลาดในการตรวจสอบความถูกต้องเมื่อมี shipmentTypeRequirements ในโมเดล

การละเว้นการจัดส่งที่ดำเนินการใน injectedFirstSolutionRoutes หรือ injectedSolutionConstraint นั้นได้รับอนุญาต เครื่องมือแก้โจทย์จะนำการเข้าชมการรับสินค้า/การจัดส่งที่เกี่ยวข้องออกจากเส้นทางที่ดำเนินการอยู่ precedenceRules ที่อ้างถึงการจัดส่งที่ละเว้นก็จะไม่มีผลเช่นกัน

penaltyCost

number

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

สำคัญ: หากไม่ได้ระบุบทลงโทษนี้ ระบบจะถือว่าเป็นอนันต์ กล่าวคือ การจัดส่งจะต้องเสร็จสมบูรณ์

pickupToDeliveryRelativeDetourLimit

number

ระบุเวลาสูงสุดของทางอ้อมที่เกี่ยวข้องเมื่อเทียบกับเส้นทางที่สั้นที่สุดตั้งแต่การรับสินค้าไปจนถึงการนำส่ง หากระบุ จะต้องไม่ใช่มูลค่าติดลบ และการจัดส่งต้องมีบริการรับสินค้าและการจัดส่งเป็นอย่างน้อย

เช่น ระบุระยะเวลาที่สั้นที่สุดในการเดินทางจากจุดรับสินค้าที่เลือกไปยังตัวเลือกการจัดส่งที่เลือกโดยตรง จากนั้นการตั้งค่า pickupToDeliveryRelativeDetourLimit จะบังคับใช้ดังนี้

startTime(delivery) - startTime(pickup) <=
std::ceil(t * (1.0 + pickupToDeliveryRelativeDetourLimit))

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

VisitRequest

คำขอการเข้าชมซึ่งทำได้โดยยานพาหนะ: ยานพาหนะมีตำแหน่งทางภูมิศาสตร์ (หรือ 2 ดูด้านล่าง) เวลาเปิดและปิดซึ่งแสดงเป็นกรอบเวลา และระยะเวลาการให้บริการ (เวลาที่ยานพาหนะใช้เพื่อไปรับหรือส่งสินค้า)

การแสดง JSON
{
  "arrivalLocation": {
    object (LatLng)
  },
  "arrivalWaypoint": {
    object (Waypoint)
  },
  "departureLocation": {
    object (LatLng)
  },
  "departureWaypoint": {
    object (Waypoint)
  },
  "tags": [
    string
  ],
  "timeWindows": [
    {
      object (TimeWindow)
    }
  ],
  "duration": string,
  "cost": number,
  "loadDemands": {
    string: {
      object (Load)
    },
    ...
  },
  "visitTypes": [
    string
  ],
  "label": string
}
ช่อง
arrivalLocation

object (LatLng)

ตำแหน่งทางภูมิศาสตร์ที่ยานพาหนะจะมาถึงเมื่อดำเนินการVisitRequestนี้ หากรูปแบบการจัดส่งมีเมทริกซ์ระยะทางของระยะเวลา คุณต้องไม่ระบุ arrivalLocation

arrivalWaypoint

object (Waypoint)

เส้นทางที่ยานพาหนะจะมาถึงเมื่อดำเนินการ VisitRequest นี้ หากรูปแบบการจัดส่งมีเมทริกซ์ระยะทางของระยะเวลา คุณต้องไม่ระบุ arrivalWaypoint

departureLocation

object (LatLng)

ตำแหน่งทางภูมิศาสตร์ที่รถจะออกเดินทางหลังจากเสร็จสิ้นVisitRequestนี้ สามารถละเว้นได้หากเหมือนกับ arrivalLocation หากรูปแบบการจัดส่งมีเมทริกซ์ระยะทางของระยะเวลา คุณต้องไม่ระบุ departureLocation

departureWaypoint

object (Waypoint)

เส้นทางที่รถจะออกหลังจากเสร็จสิ้น VisitRequest นี้ สามารถละเว้นได้หากเหมือนกับ arrivalWaypoint หากรูปแบบการจัดส่งมีเมทริกซ์ระยะทางของระยะเวลา คุณต้องไม่ระบุ departureWaypoint

tags[]

string

ระบุแท็กที่แนบมากับคำขอเข้าชม ไม่อนุญาตสตริงว่างหรือสตริงที่ซ้ำกัน

timeWindows[]

object (TimeWindow)

กรอบเวลาที่จำกัดเวลาถึงในการเยี่ยมชม โปรดทราบว่ายานพาหนะอาจออกเดินทางนอกกรอบเวลาเวลาถึง เช่น เวลาถึงและระยะเวลาไม่จำเป็นต้องอยู่ในกรอบเวลา ซึ่งอาจทำให้ต้องรอหากยานพาหนะมาถึงก่อนวันที่ TimeWindow.start_time

การที่ไม่มี TimeWindow หมายความว่ายานพาหนะดังกล่าวสามารถเดินทางไปนี้ได้ทุกเมื่อ

กรอบเวลาต้องไม่ต่อเนื่องกัน กล่าวคือ ไม่มีกรอบเวลาใดซ้อนทับกันหรืออยู่ติดกัน และกรอบเวลาดังกล่าวต้องเรียงตามลำดับมากขึ้น

คุณจะตั้งค่า costPerHourAfterSoftEndTime และ softEndTime ได้เมื่อมีกรอบเวลาเดียวเท่านั้น

duration

string (Duration format)

ระยะเวลาการเยี่ยมชม ซึ่งก็คือเวลาที่ยานพาหนะใช้ระหว่างมาถึงและออกเดินทาง (เพิ่มลงในเวลาที่ต้องรอได้ โปรดดู timeWindows)

ระยะเวลาเป็นวินาทีโดยมีเลขเศษส่วนไม่เกิน 9 หลัก ลงท้ายด้วย "s" ตัวอย่างเช่น "3.5s"

cost

number

ค่าใช้จ่ายในการให้บริการคำขอเข้าชมนี้บนเส้นทางของยานพาหนะ ซึ่งอาจใช้ในการชำระค่าใช้จ่ายที่แตกต่างกันสำหรับการรับสินค้าหรือการนำส่งแต่ละครั้ง ค่าใช้จ่ายนี้ต้องอยู่ในหน่วยเดียวกับ Shipment.penalty_cost และต้องไม่เป็นค่าลบ

loadDemands

map (key: string, value: object (Load))

โหลดความต้องการของคำขอเข้าชมนี้ ค่านี้เหมือนกับช่อง Shipment.load_demands เว้นแต่ว่าจะมีผลเฉพาะกับ VisitRequest นี้ ไม่ใช่ Shipment ทั้งหมด คำขอที่ระบุไว้ที่นี่ได้เพิ่มลงในข้อกำหนดที่ระบุไว้ในShipment.load_demandsแล้ว

ออบเจ็กต์ที่มีรายการคู่ "key": value ตัวอย่างเช่น { "name": "wrench", "mass": "1.3kg", "count": "3" }

visitTypes[]

string

ระบุประเภทการเข้าชม ซึ่งอาจใช้เพื่อจัดสรรเวลาเพิ่มเติมที่ต้องใช้สำหรับยานพาหนะในการเดินทางครั้งนี้ (ดู Vehicle.extra_visit_duration_for_visit_type)

ประเภทจะปรากฏได้เพียงครั้งเดียว

label

string

ระบุป้ายกำกับสำหรับ VisitRequest นี้ ระบบจะรายงานป้ายกำกับนี้ในการตอบสนองเป็น visitLabel ใน ShipmentRoute.Visit ที่เกี่ยวข้อง

LatLng

วัตถุที่แสดงคู่ละติจูด/ลองจิจูด ค่านี้จะแสดงเป็นคู่ของค่าคู่เพื่อแสดงองศาละติจูดและลองจิจูด ออบเจ็กต์นี้ต้องเป็นไปตาม มาตรฐาน WGS84 เว้นแต่จะระบุไว้เป็นอย่างอื่น ค่าต้องอยู่ในช่วงมาตรฐาน

การแสดง JSON
{
  "latitude": number,
  "longitude": number
}
ช่อง
latitude

number

ละติจูด หน่วยเป็นองศา โดยต้องอยู่ในช่วง [-90.0, +90.0]

longitude

number

ลองจิจูด หน่วยเป็นองศา โดยต้องอยู่ในช่วง [-180.0, +180.0]

จุดบอกทาง

ห่อหุ้มจุดอ้างอิง จุดอ้างอิงจะระบุตำแหน่งขาเข้าและขาออกของ VisitRequests รวมถึงตำแหน่งเริ่มต้นและตำแหน่งของยานพาหนะ

การแสดง JSON
{
  "sideOfRoad": boolean,

  // Union field location_type can be only one of the following:
  "location": {
    object (Location)
  },
  "placeId": string
  // End of list of possible types for union field location_type.
}
ช่อง
sideOfRoad

boolean

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

ช่องการรวม location_type วิธีต่างๆ ในการแสดงสถานที่ location_type ต้องเป็นค่าใดค่าหนึ่งต่อไปนี้
location

object (Location)

จุดที่ระบุโดยใช้พิกัดทางภูมิศาสตร์ ซึ่งรวมถึงส่วนหัวซึ่งไม่บังคับ

placeId

string

รหัสสถานที่ของจุดที่น่าสนใจที่เกี่ยวข้องกับการชี้ทาง

ตำแหน่ง

สรุปสถานที่ตั้ง (จุดทางภูมิศาสตร์และส่วนหัวที่ไม่บังคับ)

การแสดง JSON
{
  "latLng": {
    object (LatLng)
  },
  "heading": integer
}
ช่อง
latLng

object (LatLng)

พิกัดทางภูมิศาสตร์ของจุดอ้างอิง

heading

integer

ทิศทางทิศทางของเข็มทิศ ค่านี้จะใช้เพื่อระบุฝั่งของถนนที่จะใช้สำหรับรับส่ง ค่าของส่วนหัวอาจเป็นตั้งแต่ 0 ถึง 360 โดย 0 ระบุส่วนหัวของทิศเหนือที่ครบกำหนด 90 ระบุส่วนหัวของทิศตะวันออกที่ครบกำหนด ฯลฯ

TimeWindow

กรอบเวลาจะจํากัดเวลาของกิจกรรม เช่น เวลามาถึงในการเข้าชม หรือเวลาเริ่มต้นและสิ้นสุดของยานพาหนะ

ขอบเขตของกรอบเวลาจริง startTime และ endTime บังคับใช้เวลาเร็วที่สุดและล่าสุดของกิจกรรม เช่น startTime <= event_time <= endTime ขอบเขตล่างของกรอบเวลาชั่วคราว softStartTime แสดงค่ากำหนดให้กิจกรรมเกิดขึ้นในหรือหลัง softStartTime โดยระบุต้นทุนตามสัดส่วนของระยะเวลาก่อน softStartTime กิจกรรมจะเกิดขึ้น ขอบเขตบนของกรอบเวลาชั่วคราว softEndTime แสดงค่ากำหนดให้กิจกรรมเกิดขึ้น ณ หรือก่อน softEndTime โดยระบุค่าใช้จ่ายตามสัดส่วนของระยะเวลาหลังจากที่ softEndTime เกิดเหตุการณ์ startTime, endTime, softStartTime และ softEndTime ควรอยู่ภายในขีดจำกัดเวลาทั่วโลก (ดู ShipmentModel.global_start_time และ ShipmentModel.global_end_time) และควรเป็นไปตามข้อกำหนดต่อไปนี้

  0 <= `startTime` <= `softStartTime` <= `endTime` and
  0 <= `startTime` <= `softEndTime` <= `endTime`.
การแสดง JSON
{
  "startTime": string,
  "endTime": string,
  "softStartTime": string,
  "softEndTime": string,
  "costPerHourBeforeSoftStartTime": number,
  "costPerHourAfterSoftEndTime": number
}
ช่อง
startTime

string (Timestamp format)

เวลาเริ่มต้นของกรอบเวลาที่ยากลำบาก หากไม่ระบุ ระบบจะตั้งค่าเป็น ShipmentModel.global_start_time

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

endTime

string (Timestamp format)

เวลาสิ้นสุดของกรอบเวลาที่ยากลำบาก หากไม่ระบุ ระบบจะตั้งค่าเป็น ShipmentModel.global_end_time

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

softStartTime

string (Timestamp format)

Soft Start ของกรอบเวลา

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

softEndTime

string (Timestamp format)

เวลาสิ้นสุดของกรอบเวลา

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

costPerHourBeforeSoftStartTime

number

ต้นทุนต่อชั่วโมงที่เพิ่มลงในค่าใช้จ่ายอื่นๆ ในโมเดลหากเหตุการณ์เกิดขึ้นก่อน softStartTime ซึ่งคํานวณดังนี้

   max(0, softStartTime - t.seconds)
                          * costPerHourBeforeSoftStartTime / 3600,
t being the time of the event.

ค่าใช้จ่ายนี้ต้องเป็นค่าบวก และจะตั้งค่าช่องนี้ได้ก็ต่อเมื่อตั้งค่า softStartTime ไว้

costPerHourAfterSoftEndTime

number

ค่าใช้จ่ายต่อชั่วโมงที่เพิ่มลงในค่าใช้จ่ายอื่นๆ ในโมเดลหากเหตุการณ์เกิดขึ้นหลังจากวันที่ softEndTime โดยคำนวณดังนี้

   max(0, t.seconds - softEndTime.seconds)
                    * costPerHourAfterSoftEndTime / 3600,
t being the time of the event.

ค่าใช้จ่ายนี้ต้องเป็นค่าบวก และจะตั้งค่าช่องนี้ได้ก็ต่อเมื่อตั้งค่า softEndTime ไว้เท่านั้น

ยานพาหนะ

จำลองยานพาหนะที่มีปัญหาการจัดส่ง การแก้ไขปัญหาการจัดส่งจะสร้างเส้นทางเริ่มต้นที่ startLocation และสิ้นสุดที่ endLocation สำหรับยานพาหนะคันนี้ เส้นทางเป็นลำดับการเข้าชม (ดู ShipmentRoute)

การแสดง JSON
{
  "displayName": string,
  "travelMode": enum (TravelMode),
  "startLocation": {
    object (LatLng)
  },
  "startWaypoint": {
    object (Waypoint)
  },
  "endLocation": {
    object (LatLng)
  },
  "endWaypoint": {
    object (Waypoint)
  },
  "startTags": [
    string
  ],
  "endTags": [
    string
  ],
  "startTimeWindows": [
    {
      object (TimeWindow)
    }
  ],
  "endTimeWindows": [
    {
      object (TimeWindow)
    }
  ],
  "unloadingPolicy": enum (UnloadingPolicy),
  "loadLimits": {
    string: {
      object (LoadLimit)
    },
    ...
  },
  "costPerHour": number,
  "costPerTraveledHour": number,
  "costPerKilometer": number,
  "fixedCost": number,
  "usedIfRouteIsEmpty": boolean,
  "routeDurationLimit": {
    object (DurationLimit)
  },
  "travelDurationLimit": {
    object (DurationLimit)
  },
  "routeDistanceLimit": {
    object (DistanceLimit)
  },
  "extraVisitDurationForVisitType": {
    string: string,
    ...
  },
  "breakRule": {
    object (BreakRule)
  },
  "label": string,
  "ignore": boolean,
  "travelDurationMultiple": number
}
ช่อง
displayName

string

ชื่อที่แสดงของยานพาหนะที่ผู้ใช้กำหนด โดยมีความยาวได้สูงสุด 63 อักขระและ UTF-8 ได้

travelMode

enum (TravelMode)

รูปแบบการเดินทางซึ่งส่งผลต่อถนนที่ยานพาหนะใช้และความเร็วของรถได้ ดู travelDurationMultiple เพิ่มเติม

startLocation

object (LatLng)

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

startWaypoint

object (Waypoint)

จุดบอกทางที่แสดงสถานที่ตั้งทางภูมิศาสตร์ที่ยานพาหนะเริ่มต้นก่อนที่จะรับการจัดส่ง หากไม่ได้ระบุ startWaypoint และ startLocation ไว้ ยานพาหนะจะเริ่มต้นเมื่อมารับเองครั้งแรก หากรูปแบบการจัดส่งมีระยะเวลาและเมทริกซ์ระยะทาง ก็จะต้องระบุ startWaypoint

endLocation

object (LatLng)

สถานที่ตั้งทางภูมิศาสตร์ที่ยานพาหนะสิ้นสุดหลังจากเสร็จสิ้น VisitRequest ที่ผ่านมา หากไม่ได้ระบุไว้ ShipmentRoute ของยานพาหนะจะสิ้นสุดลงทันทีเมื่อเสร็จสิ้น VisitRequest ครั้งล่าสุด หากรูปแบบการจัดส่งมีระยะเวลาและเมทริกซ์ระยะทาง ก็จะต้องระบุ endLocation

endWaypoint

object (Waypoint)

จุดบนเส้นทางที่แสดงสถานที่ตั้งทางภูมิศาสตร์ที่ยานพาหนะสิ้นสุดหลังจากขับขี่รถยนต์เสร็จสิ้นเมื่อ VisitRequest ที่ผ่านมา หากไม่ได้ระบุ endWaypoint และ endLocation ไว้ ShipmentRoute ของยานพาหนะจะสิ้นสุดลงทันทีเมื่อครบ VisitRequest สุดท้าย หากรูปแบบการจัดส่งมีระยะเวลาและเมทริกซ์ระยะทาง ก็จะต้องระบุ endWaypoint

startTags[]

string

ระบุแท็กที่แนบกับจุดเริ่มต้นของเส้นทางของยานพาหนะ

ไม่อนุญาตสตริงว่างหรือสตริงที่ซ้ำกัน

endTags[]

string

ระบุแท็กที่แนบกับจุดสิ้นสุดของเส้นทางของพาหนะ

ไม่อนุญาตสตริงว่างหรือสตริงที่ซ้ำกัน

startTimeWindows[]

object (TimeWindow)

กรอบเวลาที่ยานพาหนะอาจออกจากตำแหน่งเริ่มต้น โดยต้องอยู่ภายในขีดจำกัดเวลารวม (ดูช่อง ShipmentModel.global_*) หากไม่ระบุ จะไม่มีข้อจำกัดใดๆ นอกเหนือจากขีดจำกัดเวลาทั่วโลก

กรอบเวลาที่อยู่ในช่องเดียวกันต้องไม่ต่อเนื่องกัน กล่าวคือ ไม่มีกรอบเวลาใดทับซ้อนกันหรืออยู่ติดกันได้ และกรอบเวลาดังกล่าวต้องอยู่ตามลำดับเวลา

คุณจะตั้งค่า costPerHourAfterSoftEndTime และ softEndTime ได้เมื่อมีกรอบเวลาเดียวเท่านั้น

endTimeWindows[]

object (TimeWindow)

กรอบเวลาที่ยานพาหนะอาจมาถึงตำแหน่งปลายทาง โดยต้องอยู่ภายในขีดจำกัดเวลารวม (ดูช่อง ShipmentModel.global_*) หากไม่ระบุ จะไม่มีข้อจำกัดใดๆ นอกเหนือจากขีดจำกัดเวลาทั่วโลก

กรอบเวลาที่อยู่ในช่องเดียวกันต้องไม่ต่อเนื่องกัน กล่าวคือ ไม่มีกรอบเวลาใดทับซ้อนกันหรืออยู่ติดกันได้ และกรอบเวลาดังกล่าวต้องอยู่ตามลำดับเวลา

คุณจะตั้งค่า costPerHourAfterSoftEndTime และ softEndTime ได้เมื่อมีกรอบเวลาเดียวเท่านั้น

unloadingPolicy

enum (UnloadingPolicy)

นโยบายการขนย้ายที่บังคับใช้กับรถ

loadLimits

map (key: string, value: object (LoadLimit))

ความจุของยานพาหนะ (น้ำหนัก ปริมาตร จำนวนพาเลต เป็นต้น) คีย์ในแผนที่เป็นตัวระบุประเภทของการโหลด ซึ่งสอดคล้องกับคีย์ของช่อง Shipment.load_demands หากไม่มีคีย์ที่ระบุจากแผนที่นี้ ความจุที่เกี่ยวข้องจะถือว่าไม่มีขีดจำกัด

ออบเจ็กต์ที่มีรายการคู่ "key": value ตัวอย่างเช่น { "name": "wrench", "mass": "1.3kg", "count": "3" }

costPerHour

number

ค่ายานพาหนะ: ค่าใช้จ่ายทั้งหมดจะรวมกันและต้องอยู่ในหน่วยเดียวกับ Shipment.penalty_cost

ค่าใช้จ่ายต่อชั่วโมงของเส้นทางยานพาหนะ ค่าใช้จ่ายนี้มีผลกับเวลาทั้งหมดที่ใช้ในเส้นทาง รวมถึงเวลาที่ใช้ในการเดินทาง เวลาที่ใช้ในการรอ และเวลาเข้าชม การใช้ costPerHour แทนเพียง costPerTraveledHour อาจทำให้เวลาในการตอบสนองเพิ่มขึ้น

costPerTraveledHour

number

ค่าใช้จ่ายต่อชั่วโมงในการเดินทางของยานพาหนะ ค่าใช้จ่ายนี้จะใช้ได้เฉพาะกับเวลาเดินทางของเส้นทางนั้นๆ (ซึ่งรายงานใน ShipmentRoute.transitions) โดยไม่รวมเวลารอและเวลาในการเยี่ยมชม

costPerKilometer

number

ต้นทุนต่อหนึ่งกิโลเมตรของเส้นทางยานพาหนะ ค่าใช้จ่ายนี้มีผลกับระยะทางที่รายงานใน ShipmentRoute.transitions และจะไม่มีผลกับระยะทางที่เดินทางโดยปริยายจาก arrivalLocation ไปยัง departureLocation ของ VisitRequest เดียว

fixedCost

number

ค่าใช้จ่ายคงที่จะมีผลหากใช้ยานพาหนะคันนี้ในการจัดการการจัดส่ง

usedIfRouteIsEmpty

boolean

ช่องนี้ใช้กับยานพาหนะในกรณีที่เส้นทางไม่ได้ให้บริการจัดส่งเท่านั้น ซึ่งจะระบุว่ายานพาหนะควรได้รับการพิจารณาว่ามีการใช้งานหรือไม่ในกรณีนี้

หากเป็นจริง ยานพาหนะจะเดินทางจากจุดเริ่มต้นไปยังตำแหน่งปลายทางแม้ว่าจะไม่ได้ให้บริการจัดส่งใดๆ รวมถึงค่าใช้จ่ายด้านเวลาและระยะทางที่เกิดจากจุดเริ่มต้น --> การเดินทางสิ้นสุดจะได้รับการพิจารณาด้วย

มิเช่นนั้น รถจะไม่เดินทางจากจุดเริ่มต้นไปยังตำแหน่งปลายทาง และไม่มีการกำหนดเวลา breakRule หรือความล่าช้า (จาก TransitionAttributes) สำหรับยานพาหนะคันนี้ ในกรณีนี้ ShipmentRoute ของยานพาหนะจะไม่มีข้อมูลใดๆ ยกเว้นดัชนีและป้ายกำกับยานพาหนะ

routeDurationLimit

object (DurationLimit)

ขีดจำกัดมีผลกับระยะเวลารวมของเส้นทางของยานพาหนะ ใน OptimizeToursResponse หนึ่งๆ ระยะเวลาของเส้นทางของยานพาหนะคือความแตกต่างระหว่าง vehicleEndTime และ vehicleStartTime

travelDurationLimit

object (DurationLimit)

ขีดจำกัดมีผลกับระยะเวลาเดินทางในเส้นทางของยานพาหนะ ใน OptimizeToursResponse ที่ระบุ ระยะเวลาการเดินทางของเส้นทางคือผลรวมของ transitions.travel_duration ทั้งหมด

routeDistanceLimit

object (DistanceLimit)

ขีดจำกัดมีผลกับระยะทางรวมในเส้นทางของยานพาหนะ ใน OptimizeToursResponse ที่ระบุ ระยะทางของเส้นทางคือผลรวมของ transitions.travel_distance_meters ทั้งหมดของเส้นทางนั้น

extraVisitDurationForVisitType

map (key: string, value: string (Duration format))

ระบุแผนที่จากสตริง trafficTypes ไปจนถึงระยะเวลา ระยะเวลาคือเวลานอกเหนือจาก VisitRequest.duration ที่จะนำมาใช้ในการเข้าชมที่มี visitTypes ที่ระบุ ระยะเวลาการเข้าชมเพิ่มเติมนี้จะมีค่าใช้จ่ายหากระบุ costPerHour คีย์ (เช่น visitTypes) จะเป็นสตริงว่างไม่ได้

หากคำขอการเยี่ยมชมมีหลายประเภท ระบบจะเพิ่มระยะเวลาสำหรับแต่ละประเภทในแผนที่

ออบเจ็กต์ที่มีรายการคู่ "key": value ตัวอย่างเช่น { "name": "wrench", "mass": "1.3kg", "count": "3" }

breakRule

object (BreakRule)

อธิบายกำหนดช่วงพักที่จะบังคับใช้กับยานพาหนะนี้ หากรถคันนี้ว่างเปล่า ระบบจะไม่กำหนดเวลาพักสำหรับยานพาหนะนี้

label

string

ระบุป้ายกำกับสำหรับยานพาหนะนี้ ระบบจะรายงานป้ายกำกับนี้ในการตอบสนองเป็น vehicleLabel ของ ShipmentRoute ที่เกี่ยวข้อง

ignore

boolean

หากเป็น "จริง" usedIfRouteIsEmpty ต้องเป็น "เท็จ" และรถยนต์คันนี้จะยังคงไม่มีการใช้งาน

หากการจัดส่งดำเนินการโดยยานพาหนะที่ละเว้นใน injectedFirstSolutionRoutes ระบบจะข้ามการจัดส่งดังกล่าวในโซลูชันแรก แต่จะดำเนินการได้ในคำตอบโดยไม่มีค่าใช้จ่าย

หากดำเนินการจัดส่งโดยยานพาหนะที่ละเว้นใน injectedSolutionConstraint และมีบริการรับสินค้า/ไปรับที่เกี่ยวข้องซึ่งถูกจำกัดให้ยังคงอยู่บนรถได้ (ไม่ได้ผ่อนปรนจนถึงระดับ RELAX_ALL_AFTER_THRESHOLD) ระบบจะข้ามการตอบกลับ หากการจัดส่งมีช่อง allowedVehicleIndices ที่ไม่ว่างเปล่าและละเว้นยานพาหนะทั้งหมดที่อนุญาตแล้ว ระบบจะข้ามการจัดส่งในการตอบกลับ

travelDurationMultiple

number

ระบุตัวคูณที่ใช้เพื่อเพิ่มหรือลดเวลาเดินทางของยานพาหนะคันนี้ ตัวอย่างเช่น หากตั้งค่าเป็น 2.0 หมายความว่ารถคันนี้ทำงานช้ากว่าและมีเวลาเดินทางมากกว่ายานพาหนะมาตรฐานถึง 2 เท่า จำนวนนี้ไม่มีผลต่อระยะเวลาการเข้าชม และจะส่งผลต่อต้นทุนหากระบุ costPerHour หรือ costPerTraveledHour ต้องอยู่ในช่วง [0.001, 1000.0] หากไม่ได้ตั้งค่า ยานพาหนะจะเป็นแบบมาตรฐาน และค่าหลายค่านี้จะถือว่าเป็น 1.0

คำเตือน: เวลาเดินทางจะปัดเศษไปยังวินาทีที่ใกล้ที่สุดหลังจากใช้ตัวคูณนี้ แต่ก่อนที่จะดำเนินการกับตัวเลข ดังนั้นจำนวนที่น้อยอาจทำให้สูญเสียความแม่นยำ

ดูextraVisitDurationForVisitTypeด้านล่างด้วย

TravelMode

รูปแบบการเดินทางที่ยานพาหนะสามารถใช้ได้

ซึ่งควรเป็นส่วนหนึ่งของโหมดการเดินทางของ Routes Preferred API ของ Google Maps Platform โปรดดู https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/RouteTravelMode

Enum
TRAVEL_MODE_UNSPECIFIED โหมดการเดินทางที่ไม่ระบุ เทียบเท่ากับ DRIVING
DRIVING รูปแบบการเดินทางที่สอดคล้องกับเส้นทางการขับขี่ (รถยนต์ ...)
WALKING รูปแบบการเดินทางที่สอดคล้องกับเส้นทางเดินเท้า

UnloadingPolicy

นโยบายเกี่ยวกับวิธียกเลิกการโหลดยานพาหนะ ใช้กับการจัดส่งที่มีทั้งการมารับที่ร้านและการจัดส่งเท่านั้น

การจัดส่งอื่นๆ ไม่เสียค่าใช้จ่ายเกิดขึ้นที่ใดก็ได้ในเส้นทางโดยไม่ขึ้นต่อ unloadingPolicy

Enum
UNLOADING_POLICY_UNSPECIFIED นโยบายการยกเลิกการโหลดที่ไม่ระบุ การนำส่งต้องเกิดขึ้นหลังจากการรับสินค้าที่เกี่ยวข้องเท่านั้น
LAST_IN_FIRST_OUT การนำส่งต้องเรียงลำดับแบบย้อนกลับกันของการรับสินค้า
FIRST_IN_FIRST_OUT การนำส่งต้องอยู่ในคำสั่งซื้อเดียวกันกับการรับสินค้า

LoadLimit

กำหนดขีดจำกัดการโหลดที่มีผลกับยานพาหนะ เช่น "รถบรรทุกคันนี้รับน้ำหนักได้สูงสุด 3,500 กก. เท่านั้น" ดูloadLimits

การแสดง JSON
{
  "softMaxLoad": string,
  "costPerUnitAboveSoftMax": number,
  "startLoadInterval": {
    object (Interval)
  },
  "endLoadInterval": {
    object (Interval)
  },
  "maxLoad": string
}
ช่อง
softMaxLoad

string (int64 format)

ขีดจำกัดชั่วคราวของการโหลด ดูcostPerUnitAboveSoftMax

costPerUnitAboveSoftMax

number

หากน้ำหนักบรรทุกเกิน softMaxLoad ในเส้นทางของรถคันนี้ จะมีบทลงโทษด้านค่าใช้จ่ายต่อไปนี้ (1 ครั้งต่อยานพาหนะเท่านั้น): (โหลด - softMaxLoad) * costPerUnitAboveSoftMax ค่าใช้จ่ายทั้งหมดรวมกันและต้องอยู่ในหน่วยเดียวกับ Shipment.penalty_cost

startLoadInterval

object (Interval)

ช่วงโหลดที่ยอมรับได้ของยานพาหนะที่จุดเริ่มต้นของเส้นทาง

endLoadInterval

object (Interval)

ช่วงโหลดที่ยอมรับได้ของยานพาหนะที่ส่วนท้ายของเส้นทาง

maxLoad

string (int64 format)

จำนวนการโหลดสูงสุดที่ยอมรับได้

ช่วงเวลา

ช่วงเวลาของจำนวนการโหลดที่ยอมรับได้

การแสดง JSON
{
  "min": string,
  "max": string
}
ช่อง
min

string (int64 format)

โหลดต่ำสุดที่ยอมรับได้ ต้องมากกว่า 0 หากระบุไว้ทั้ง 2 อย่าง min ต้อง ≤ max

max

string (int64 format)

โหลดสูงสุดที่ยอมรับได้ ต้องมากกว่า 0 หากไม่ระบุ ข้อความนี้จะไม่จำกัดโหลดสูงสุด หากระบุไว้ทั้ง 2 อย่าง min ต้อง ≤ max

DurationLimit

ขีดจำกัดที่กำหนดระยะเวลาสูงสุดของเส้นทางของยานพาหนะ โดยจะเป็นแบบแข็งหรือเบา

เมื่อกำหนดช่องขีดจำกัดชั่วคราว ทั้งเกณฑ์ Soft Max และค่าใช้จ่ายที่เกี่ยวข้องจะต้องกำหนดร่วมกัน

การแสดง JSON
{
  "maxDuration": string,
  "softMaxDuration": string,
  "quadraticSoftMaxDuration": string,
  "costPerHourAfterSoftMax": number,
  "costPerSquareHourAfterQuadraticSoftMax": number
}
ช่อง
maxDuration

string (Duration format)

ขีดจำกัดแบบเข้มงวดซึ่งจำกัดระยะเวลาให้อยู่ใน maxDuration

ระยะเวลาเป็นวินาทีโดยมีเลขเศษส่วนไม่เกิน 9 หลัก ลงท้ายด้วย "s" ตัวอย่างเช่น "3.5s"

softMaxDuration

string (Duration format)

ขีดจำกัดชั่วคราวไม่ได้บังคับใช้ขีดจำกัดระยะเวลาสูงสุด แต่หากมีการละเมิดจะทำให้เส้นทางมีค่าใช้จ่าย ค่าใช้จ่ายนี้จะบวกกับต้นทุนอื่นๆ ที่กำหนดไว้ในโมเดลด้วยหน่วยเดียวกัน

หากกำหนดไว้ softMaxDuration ต้องไม่เป็นค่าลบ หากกำหนด maxDuration ด้วย softMaxDuration ต้องน้อยกว่า maxDuration

ระยะเวลาเป็นวินาทีโดยมีเลขเศษส่วนไม่เกิน 9 หลัก ลงท้ายด้วย "s" ตัวอย่างเช่น "3.5s"

quadraticSoftMaxDuration

string (Duration format)

ขีดจำกัดชั่วคราวไม่ได้บังคับใช้ขีดจำกัดระยะเวลาสูงสุด แต่หากมีการละเมิดจะทำให้เส้นทางมีค่าใช้จ่าย เป็นกำลังสองในระยะเวลา ค่าใช้จ่ายนี้จะบวกกับต้นทุนอื่นๆ ที่กำหนดไว้ในโมเดลด้วยหน่วยเดียวกัน

หากกำหนดไว้ quadraticSoftMaxDuration ต้องไม่เป็นค่าลบ หากมีการกำหนด maxDuration ด้วย quadraticSoftMaxDuration ต้องน้อยกว่า maxDuration และผลต่างต้องไม่เกิน 1 วัน

maxDuration - quadraticSoftMaxDuration <= 86400 seconds

ระยะเวลาเป็นวินาทีโดยมีเลขเศษส่วนไม่เกิน 9 หลัก ลงท้ายด้วย "s" ตัวอย่างเช่น "3.5s"

costPerHourAfterSoftMax

number

ค่าใช้จ่ายต่อชั่วโมงที่เกิดขึ้นหากละเมิดเกณฑ์ softMaxDuration ค่าใช้จ่ายเพิ่มเติมจะเป็น 0 หากระยะเวลาต่ำกว่าเกณฑ์ มิเช่นนั้น ค่าใช้จ่ายจะขึ้นอยู่กับระยะเวลาดังต่อไปนี้

  costPerHourAfterSoftMax * (duration - softMaxDuration)

ค่าใช้จ่ายต้องไม่ติดลบ

costPerSquareHourAfterQuadraticSoftMax

number

ค่าใช้จ่ายต่อตารางชั่วโมงที่เกิดขึ้นหากละเมิดเกณฑ์ quadraticSoftMaxDuration

ค่าใช้จ่ายเพิ่มเติมจะเป็น 0 หากระยะเวลาต่ำกว่าเกณฑ์ มิเช่นนั้น ค่าใช้จ่ายจะขึ้นอยู่กับระยะเวลาดังต่อไปนี้

  costPerSquareHourAfterQuadraticSoftMax *
  (duration - quadraticSoftMaxDuration)^2

ค่าใช้จ่ายต้องไม่ติดลบ

DistanceLimit

ขีดจำกัดที่กำหนดระยะทางสูงสุดที่สามารถเดินทางได้ โดยจะเป็นแบบแข็งหรือเบา

หากกำหนดขีดจำกัดชั่วคราว จะต้องกำหนดทั้ง softMaxMeters และ costPerKilometerAboveSoftMax และไม่เป็นค่าลบ

การแสดง JSON
{
  "maxMeters": string,
  "softMaxMeters": string,
  "costPerKilometerAboveSoftMax": number
}
ช่อง
maxMeters

string (int64 format)

ขีดจำกัดแบบบังคับจะจำกัดระยะทางไว้ที่ maxMeters ขีดจำกัดต้องไม่ติดลบ

softMaxMeters

string (int64 format)

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

หากกำหนด softMaxMeters ต้องน้อยกว่า maxMeters และต้องไม่ติดลบ

costPerKilometerAboveSoftMax

number

ต้นทุนต่อกิโลเมตรที่เกิดขึ้นหากระยะทางเกินขีดจํากัด softMaxMeters ค่าใช้จ่ายเพิ่มเติมจะเป็น 0 หากระยะทางน้อยกว่าขีดจํากัด หรือสูตรที่ใช้คํานวณต้นทุนจะเป็นดังนี้

  (distanceMeters - softMaxMeters) / 1000.0 *
  costPerKilometerAboveSoftMax.

ค่าใช้จ่ายต้องไม่ติดลบ

BreakRule

กฎในการสร้างช่วงพักสำหรับยานพาหนะ (เช่น ช่วงพักกลางวัน) ช่วงพักคือช่วงเวลาต่อเนื่องกันระหว่างที่รถไม่มีความเคลื่อนไหว ณ ตำแหน่งปัจจุบัน และไม่สามารถออกตัวได้ อาจจะมีช่วงพักในกรณีต่อไปนี้

  • ระหว่างการเดินทางระหว่างการเข้าชมสองครั้ง (ซึ่งรวมถึงเวลาก่อนหรือหลังการเข้าชมทันที แต่ไม่ได้ในระหว่างการเข้าชม) ในกรณีนี้ ระบบจะขยายเวลาขนส่งที่สอดคล้องกันระหว่างการเข้าชมเหล่านั้น
  • หรือก่อนที่รถจะสตาร์ท (รถอาจไม่สตาร์ทขณะพัก) ซึ่งในกรณีนี้จะไม่ส่งผลต่อสตาร์ทรถ
  • หรือหลังจากท้ายรถ (ตามด้วยเวลาสิ้นสุดของยานพาหนะ)
การแสดง JSON
{
  "breakRequests": [
    {
      object (BreakRequest)
    }
  ],
  "frequencyConstraints": [
    {
      object (FrequencyConstraint)
    }
  ]
}
ช่อง
breakRequests[]

object (BreakRequest)

ลำดับการพัก ดูข้อความ BreakRequest

frequencyConstraints[]

object (FrequencyConstraint)

อาจมีFrequencyConstraintหลายรายการ ทุกคนต้องพึงพอใจกับBreakRequestของBreakRuleเครื่องนี้ โปรดดูFrequencyConstraint

BreakRequest

คุณจะต้องทราบลำดับการพัก (เช่น หมายเลขและลำดับการพัก) ที่มีผลกับยานพาหนะแต่ละคันล่วงหน้า BreakRequest ที่ซ้ำกันจะกำหนดลำดับนั้นตามลำดับที่ต้องเกิดขึ้น กรอบเวลา (earliestStartTime / latestStartTime) อาจทับซ้อนกัน แต่จะต้องเข้ากันได้กับลำดับ (เลือกไว้)

การแสดง JSON
{
  "earliestStartTime": string,
  "latestStartTime": string,
  "minDuration": string
}
ช่อง
earliestStartTime

string (Timestamp format)

ต้องระบุ ขอบเขตล่าง (รวม) เมื่อเริ่มช่วงพัก

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

latestStartTime

string (Timestamp format)

ต้องระบุ ขอบเขตบน (รวม) ที่จุดเริ่มต้นของช่วงพัก

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

minDuration

string (Duration format)

ต้องระบุ ระยะเวลาขั้นต่ำของช่วงพัก ต้องเป็นค่าบวก

ระยะเวลาเป็นวินาทีโดยมีเลขเศษส่วนไม่เกิน 9 หลัก ลงท้ายด้วย "s" ตัวอย่างเช่น "3.5s"

FrequencyConstraint

นอกจากนี้อาจมีการจำกัดความถี่และระยะเวลาของช่วงพักตามที่ระบุไว้ข้างต้นอีก โดยการบังคับใช้ความถี่ของช่วงพักขั้นต่ำ เช่น "ต้องมีช่วงพักอย่างน้อย 1 ชั่วโมงทุก 12 ชั่วโมง" สมมติว่าสามารถแปลค่าเป็น "ภายในกรอบเวลาการเลื่อนเวลา 12 ชม. จะต้องมีช่วงพักอย่างน้อย 1 ชั่วโมง" ตัวอย่างดังกล่าวจะแปลเป็น FrequencyConstraint ต่อไปนี้

{
   minBreakDuration { seconds: 3600 }         # 1 hour.
   maxInterBreakDuration { seconds: 39600 }  # 11 hours (12 - 1 = 11).
}

ช่วงเวลาและระยะเวลาของช่วงพักในโซลูชันจะเป็นไปตามข้อจำกัดดังกล่าวทั้งหมด นอกเหนือจากกรอบเวลาและระยะเวลาขั้นต่ำที่ระบุไว้ใน BreakRequest แล้ว

ในทางปฏิบัติ FrequencyConstraint อาจมีผลกับช่วงพักที่ไม่ต่อเนื่องกัน ตัวอย่างเช่น กำหนดการต่อไปนี้เป็นไปตามเงื่อนไข "1 ชม. ทุก 12 ชม." ตัวอย่าง:

  04:00 vehicle start
   .. performing travel and visits ..
  09:00 1 hour break
  10:00 end of the break
   .. performing travel and visits ..
  12:00 20-min lunch break
  12:20 end of the break
   .. performing travel and visits ..
  21:00 1 hour break
  22:00 end of the break
   .. performing travel and visits ..
  23:59 vehicle end
การแสดง JSON
{
  "minBreakDuration": string,
  "maxInterBreakDuration": string
}
ช่อง
minBreakDuration

string (Duration format)

ต้องระบุ ระยะเวลาพักขั้นต่ำสำหรับข้อจำกัดนี้ ไม่ใช่ค่าลบ ดูคำอธิบายของ FrequencyConstraint

ระยะเวลาเป็นวินาทีโดยมีเลขเศษส่วนไม่เกิน 9 หลัก ลงท้ายด้วย "s" ตัวอย่างเช่น "3.5s"

maxInterBreakDuration

string (Duration format)

ต้องระบุ ช่วงที่อนุญาตสูงสุดของช่วงเวลาในเส้นทางที่ไม่รวมช่วงพักอย่างน้อย duration >= minBreakDuration บางส่วน ต้องเป็นค่าบวก

ระยะเวลาเป็นวินาทีโดยมีเลขเศษส่วนไม่เกิน 9 หลัก ลงท้ายด้วย "s" ตัวอย่างเช่น "3.5s"

DurationDistanceMatrix

ระบุระยะเวลาและเมทริกซ์ระยะทางจากการเข้าชมและสถานที่เริ่มต้นของยานพาหนะที่จะเข้าชมและตำแหน่งปลายทางของยานพาหนะ

การแสดง JSON
{
  "rows": [
    {
      object (Row)
    }
  ],
  "vehicleStartTag": string
}
ช่อง
rows[]

object (Row)

ระบุแถวของเมทริกซ์ระยะเวลาและระยะทาง ต้องมีองค์ประกอบมากที่สุดเท่า ShipmentModel.duration_distance_matrix_src_tags

vehicleStartTag

string

แท็กที่กำหนดยานพาหนะที่เมทริกซ์ระยะทางและระยะเวลานี้ใช้ หากเว้นว่างไว้ ตัวเลือกนี้จะใช้กับยานพาหนะทุกคัน และจะมีเมทริกซ์เพียงรายการเดียวเท่านั้น

จุดเริ่มต้นของยานพาหนะแต่ละคันต้องตรงกับเมทริกซ์ 1 รายการ นั่นคือ ฟิลด์ startTags ของช่องใดฟิลด์หนึ่งต้องตรงกับ vehicleStartTag ของเมทริกซ์ (และของเมทริกซ์ดังกล่าวเท่านั้น)

เมทริกซ์ทั้งหมดต้องมี vehicleStartTag ที่แตกต่างกัน

แถว

ระบุแถวของเมทริกซ์ระยะเวลาและระยะทาง

การแสดง JSON
{
  "durations": [
    string
  ],
  "meters": [
    number
  ]
}
ช่อง
durations[]

string (Duration format)

ค่าระยะเวลาของแถวที่กำหนด ต้องมีองค์ประกอบมากที่สุดเท่า ShipmentModel.duration_distance_matrix_dst_tags

ระยะเวลาเป็นวินาทีโดยมีเลขเศษส่วนไม่เกิน 9 หลัก ลงท้ายด้วย "s" ตัวอย่างเช่น "3.5s"

meters[]

number

ค่าระยะทางสำหรับแถวที่กำหนด หากไม่มีค่าใช้จ่ายหรือข้อจำกัดที่อ้างถึงระยะทางในโมเดล ก็เว้นว่างได้ ไม่เช่นนั้นจะต้องมีองค์ประกอบมากถึง durations

TransitionAttributes

ระบุแอตทริบิวต์ของการเปลี่ยนระหว่างการเข้าชม 2 ครั้งติดต่อกันบนเส้นทาง TransitionAttributes หลายตัวอาจใช้กับการเปลี่ยนแบบเดียวกัน ซึ่งในกรณีนี้ ค่าใช้จ่ายเพิ่มเติมทั้งหมดจะรวมกัน และจะมีการใช้ข้อจำกัดหรือขีดจำกัดที่เข้มงวดที่สุด (ตามความหมายของ "AND" ตามปกติ)

การแสดง JSON
{
  "srcTag": string,
  "excludedSrcTag": string,
  "dstTag": string,
  "excludedDstTag": string,
  "cost": number,
  "costPerKilometer": number,
  "distanceLimit": {
    object (DistanceLimit)
  },
  "delay": string
}
ช่อง
srcTag

string

แท็กที่กำหนดชุดการเปลี่ยน (src->dst) แอตทริบิวต์เหล่านี้จะมีผล

การเข้าชมแหล่งที่มาหรือการสตาร์ทยานพาหนะตรงกับ VisitRequest.tags หรือ Vehicle.start_tags มี srcTag หรือไม่มี excludedSrcTag (ขึ้นอยู่กับว่าฟิลด์ใดใน 2 ช่องนี้มีข้อมูล)

excludedSrcTag

string

ดูsrcTag ต้องระบุ srcTag และ excludedSrcTag ที่แน่นอน 1 รายการ

dstTag

string

การเข้าชมปลายทางหรือจุดสิ้นสุดของยานพาหนะตรงกับ VisitRequest.tags หรือ Vehicle.end_tags มี dstTag หรือไม่มี excludedDstTag (ขึ้นอยู่กับว่าฟิลด์ใดใน 2 ฟิลด์นี้ไม่ว่างเปล่า)

excludedDstTag

string

ดูdstTag ต้องระบุ dstTag และ excludedDstTag ที่แน่นอน 1 รายการ

cost

number

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

costPerKilometer

number

ระบุต้นทุนต่อกิโลเมตรที่ใช้กับระยะทางที่เดินทางในระหว่างการเปลี่ยนผ่านนี้ โดยจะเพิ่ม Vehicle.cost_per_kilometer ตามที่ระบุไว้ในยานพาหนะ

distanceLimit

object (DistanceLimit)

ระบุขีดจำกัดของระยะทางในการเดินทางในขณะทำการเปลี่ยนนี้

ตั้งแต่ปี 2021/06 เป็นต้นไป ระบบจะรองรับเฉพาะขีดจำกัดชั่วคราวเท่านั้น

delay

string (Duration format)

ระบุความล่าช้าที่เกิดขึ้นเมื่อดำเนินการเปลี่ยนนี้

การหน่วงเวลานี้จะเกิดขึ้นหลังจากการเข้าชมต้นทางเสร็จสิ้นและก่อนเริ่มต้นการเข้าชมปลายทาง

ระยะเวลาเป็นวินาทีโดยมีเลขเศษส่วนไม่เกิน 9 หลัก ลงท้ายด้วย "s" ตัวอย่างเช่น "3.5s"

ShipmentTypeIncompatibility

ระบุความไม่เข้ากันระหว่างการจัดส่งโดยขึ้นอยู่กับประเภทการจัดส่ง ลักษณะที่ปรากฏของการจัดส่งที่เข้ากันไม่ได้ในเส้นทางเดียวกันจะถูกจำกัดโดยอิงตามโหมดความเข้ากันไม่ได้

การแสดง JSON
{
  "types": [
    string
  ],
  "incompatibilityMode": enum (IncompatibilityMode)
}
ช่อง
types[]

string

รายการประเภทที่ใช้ร่วมกันไม่ได้ การจัดส่ง 2 รายการมี shipment_types ต่างกันในแต่ละรายการที่แสดง "ใช้ร่วมกันไม่ได้"

incompatibilityMode

enum (IncompatibilityMode)

ใช้โหมดกับความไม่เข้ากัน

IncompatibilityMode

รูปแบบที่กำหนดลักษณะการจัดส่งที่เข้ากันไม่ได้ในเส้นทางเดียวกัน

Enum
INCOMPATIBILITY_MODE_UNSPECIFIED โหมดเข้ากันไม่ได้ที่ไม่ระบุ ไม่ควรใช้ค่านี้
NOT_PERFORMED_BY_SAME_VEHICLE ในโหมดนี้ การจัดส่ง 2 รายการที่มีประเภทที่ใช้ร่วมกันไม่ได้จะใช้รถคันเดียวกันไม่ได้
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY

สำหรับการจัดส่ง 2 รายการที่มีประเภทที่เข้ากันไม่ได้กับโหมดเข้ากันไม่ได้ของ NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY ให้ทำดังนี้

  • หากทั้ง 2 แบบเป็นแบบไปรับเองเท่านั้น (ไม่มีบริการจัดส่ง) หรือแบบนำส่งเท่านั้น (ไม่ไปรับเอง) ลูกค้าจะใช้รถร่วมกันไม่ได้เลย
  • หากการจัดส่งรายการหนึ่งมีการนำส่งและอีกรายการมีการรับสินค้า การจัดส่งทั้ง 2 รายการอาจใช้ยานพาหนะเดียวกันและจัดส่งรายการเดิมก่อนที่จะมารับรายการหลังได้

ShipmentTypeRequirement

ระบุข้อกำหนดระหว่างการจัดส่งตามประเภทการจัดส่ง โหมดข้อกำหนดจะเป็นตัวกำหนดรายการเฉพาะ

การแสดง JSON
{
  "requiredShipmentTypeAlternatives": [
    string
  ],
  "dependentShipmentTypes": [
    string
  ],
  "requirementMode": enum (RequirementMode)
}
ช่อง
requiredShipmentTypeAlternatives[]

string

รายการประเภทการจัดส่งอื่นๆ ที่ dependentShipmentTypes กำหนด

dependentShipmentTypes[]

string

การจัดส่งทั้งหมดที่มีประเภทในช่อง dependentShipmentTypes ต้องมีการจัดส่งประเภท requiredShipmentTypeAlternatives อย่างน้อย 1 รายการในเส้นทางเดียวกัน

หมายเหตุ: ไม่อนุญาตให้ใช้เชนของข้อกำหนดที่ shipmentType ต้องพึ่งพาตัวเอง

requirementMode

enum (RequirementMode)

ใช้โหมดกับข้อกำหนดแล้ว

RequirementMode

รูปแบบที่กำหนดลักษณะของการจัดส่งแบบพึ่งพาบนเส้นทาง

Enum
REQUIREMENT_MODE_UNSPECIFIED โหมดข้อกำหนดที่ไม่ได้ระบุ ไม่ควรใช้ค่านี้
PERFORMED_BY_SAME_VEHICLE ในโหมดนี้ การทำงานแบบ "ขึ้นอยู่กับ" ทั้งหมด การจัดส่งต้องใช้ยานพาหนะเดียวกับที่ "ต้องระบุ" อย่างน้อย 1 อย่าง การจัดส่ง
IN_SAME_VEHICLE_AT_PICKUP_TIME

เมื่อใช้โหมด IN_SAME_VEHICLE_AT_PICKUP_TIME การทำงานจะ "ขึ้นอยู่กับ" ทั้งหมด การจัดส่งต้องมี "ต้องระบุ" อย่างน้อย 1 รายการ ในยานพาหนะของตน ณ เวลาไปรับ

"ผู้พึ่งพา" จุดรับพัสดุจึงต้องมีอย่างใดอย่างหนึ่งต่อไปนี้

  • "ต้องระบุ" สำหรับการนำส่งเท่านั้น การจัดส่งในระหว่างการจัดส่ง หรือ
  • A "ต้องระบุ" เส้นทางการจัดส่งสินค้าครั้งแรกก่อน หากเส้นทางการจัดส่ง "จำเป็น" การจัดส่งมีการนำส่ง การนำส่งนี้ต้องดำเนินการหลังจาก "ขึ้นต่อกัน" การมารับสินค้าที่ร้าน
IN_SAME_VEHICLE_AT_DELIVERY_TIME เหมือนก่อนหน้านี้ ยกเว้น "การอ้างอิง" การจัดส่งต้องมีข้อมูล "ต้องระบุ" การจัดส่งบนยานพาหนะของตน ณ เวลาที่นำส่ง

PrecedenceRule

กฎที่มีความสำคัญระหว่าง 2 เหตุการณ์ (แต่ละเหตุการณ์คือการรับสินค้าหรือการนำส่งการจัดส่ง) ซึ่งก็คือ "วินาที" เหตุการณ์ต้องเริ่มอย่างน้อย offsetDuration หลัง "แรก" ได้เริ่มขึ้นแล้ว

ลำดับความสำคัญหลายรายการอาจหมายถึงเหตุการณ์เดียวกัน (หรือเกี่ยวข้องกัน) เช่น "การรับสินค้าของ B เกิดขึ้นหลังจากการนำส่ง A" และ "การรับสินค้าของ C เกิดขึ้นหลังจากรับสินค้า B"

นอกจากนี้ ลำดับความสำคัญจะยังคงมีผลเฉพาะเมื่อดำเนินการจัดส่งทั้ง 2 รายการแล้วและจะไม่มีผล

การแสดง JSON
{
  "firstIsDelivery": boolean,
  "secondIsDelivery": boolean,
  "offsetDuration": string,
  "firstIndex": integer,
  "secondIndex": integer
}
ช่อง
firstIsDelivery

boolean

ระบุว่าตัวเลือก "รายการแรก" กิจกรรมคือการส่ง

secondIsDelivery

boolean

ระบุว่า "วินาที" กิจกรรมคือการส่ง

offsetDuration

string (Duration format)

ระยะห่างระหว่าง "ตำแหน่งแรก" และ "วินาที" กิจกรรม อาจเป็นค่าลบก็ได้

ระยะเวลาเป็นวินาทีโดยมีเลขเศษส่วนไม่เกิน 9 หลัก ลงท้ายด้วย "s" ตัวอย่างเช่น "3.5s"

firstIndex

integer

ดัชนีการจัดส่งของ "รายการแรก" กิจกรรม ต้องระบุฟิลด์นี้

secondIndex

integer

ดัชนีการจัดส่ง "วินาที" กิจกรรม ต้องระบุฟิลด์นี้