InjectedSolutionConstraint

โซลูชันที่แทรกในคำขอ ซึ่งรวมถึงข้อมูลเกี่ยวกับการเข้าชมที่ต้องจำกัดและวิธีจำกัดการเข้าชม

การแสดง JSON
{
  "routes": [
    {
      object (ShipmentRoute)
    }
  ],
  "skippedShipments": [
    {
      object (SkippedShipment)
    }
  ],
  "constraintRelaxations": [
    {
      object (ConstraintRelaxation)
    }
  ]
}
ช่อง
routes[]

object (ShipmentRoute)

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

skippedShipments[]

object (SkippedShipment)

ข้ามการจัดส่งโซลูชันที่จะแทรกแล้ว อาจละเว้นข้อมูลบางส่วนจากโซลูชันเดิม ดูช่อง routes

constraintRelaxations[]

object (ConstraintRelaxation)

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

ConstraintRelaxation

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

การแสดง JSON
{
  "relaxations": [
    {
      object (Relaxation)
    }
  ],
  "vehicleIndices": [
    integer
  ]
}
ช่อง
relaxations[]

object (Relaxation)

การผ่อนปรนข้อจำกัดในการเยี่ยมชมทั้งหมดซึ่งจะใช้กับการเดินทางบนเส้นทางที่มียานพาหนะใน vehicleIndices

vehicleIndices[]

integer

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

ดัชนียานพาหนะจะแมปเหมือนกับ ShipmentRoute.vehicle_index หาก interpretInjectedSolutionsUsingLabels เป็นจริง (ดูความคิดเห็น fields)

การพักผ่อน

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

relaxations(i).level ระบุระดับการผ่อนปรนข้อจำกัดที่ใช้กับการเข้าชม #j ที่เป็นไปตามสิ่งต่อไปนี้

  • route.visits(j).start_time >= relaxations(i).threshold_time และ
  • j + 1 >= relaxations(i).threshold_visit_count

ในทำนองเดียวกัน การสตาร์ทรถจะผ่อนปรนถึง relaxations(i).level หากเป็นไปตามเงื่อนไขต่อไปนี้

  • vehicleStartTime >= relaxations(i).threshold_time และ
  • relaxations(i).threshold_visit_count == 0 และจุดสิ้นสุดของยานพาหนะจะได้รับการผ่อนปรนถึง relaxations(i).level หากเป็นไปตามเงื่อนไขต่อไปนี้
  • vehicleEndTime >= relaxations(i).threshold_time และ
  • route.visits_size() + 1 >= relaxations(i).threshold_visit_count

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

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

การแสดง JSON
{
  "level": enum (Level),
  "thresholdTime": string,
  "thresholdVisitCount": integer
}
ช่อง
level

enum (Level)

ระดับการผ่อนปรนข้อจำกัดที่ใช้เมื่อเป็นไปตามเงื่อนไขที่ thresholdTime และ thresholdVisitCount เป็นอย่างน้อย

thresholdTime

string (Timestamp format)

เวลาหรือหลังจากนั้นอาจใช้การผ่อนปรน level

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

thresholdVisitCount

integer

จำนวนการเข้าชมที่หรือหลังจากนั้นอาจมีการผ่อนปรน level หาก thresholdVisitCount เป็น 0 (หรือไม่ได้ตั้งค่า) ระบบอาจใช้ level โดยตรงที่สตาร์ทรถ

หากเป็น route.visits_size() + 1 สามารถใช้ level กับส่วนท้ายของยานพาหนะเท่านั้น หากมากกว่า route.visits_size() + 1 จะไม่มีการใช้ level สำหรับเส้นทางนั้นเลย

ระดับ

แสดงระดับการผ่อนปรนข้อจำกัดต่างๆ ซึ่งใช้สำหรับการเข้าชมและที่ตามมาเมื่อเป็นไปตามเงื่อนไขของเกณฑ์

การแจกแจงด้านล่างเป็นลำดับการเพิ่มการผ่อนคลาย

Enum
LEVEL_UNSPECIFIED

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

ต้องไม่ใช้ค่านี้อย่างชัดเจนใน level

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