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 เป็น false ในโมเดล)

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

ใช้ RFC 3339 โดยเอาต์พุตที่สร้างขึ้นจะได้รับการแปลงเป็นรูปแบบ Z เสมอ และใช้ตัวเลขเศษส่วน 0, 3, 6 หรือ 9 หลัก นอกจากนี้ ระบบยังยอมรับออฟเซ็ตอื่นๆ นอกเหนือจาก "Z" ด้วย เช่น "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" หรือ "2014-10-02T15:01:23+05:30"

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 เวลาเริ่มต้นการเข้าชมและเวลาเริ่มต้น/สิ้นสุดของยานพาหนะจะมีความยืดหยุ่นมากขึ้น แต่การเข้าชมแต่ละครั้งจะยังคงเชื่อมโยงกับยานพาหนะคันเดียวกัน และต้องสังเกตลำดับการเข้าชม โดยจะแทรกการเข้าชมระหว่างการเข้าชมหรือก่อนการเข้าชมไม่ได้
RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD เหมือนกับ RELAX_VISIT_TIMES_AFTER_THRESHOLD แต่ลำดับการเข้าชมจะมีความยืดหยุ่นมากขึ้นด้วย กล่าวคือ การเข้าชมจะดำเนินการได้โดยยานพาหนะนี้เท่านั้น แต่ก็อาจกลายเป็นการเข้าชมที่ไม่ได้ดำเนินการได้เช่นกัน
RELAX_ALL_AFTER_THRESHOLD เช่นเดียวกับ RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD แต่ยานพาหนะจะผ่อนปรนด้วย กล่าวคือ การเข้าชมจะไม่มีค่าใช้จ่ายใดๆ ทั้งสิ้นเมื่อถึงหรือหลังจากเวลาที่กำหนด และอาจกลายเป็นการเข้าชมที่ไม่ได้ดำเนินการ