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 AND
  • j + 1 >= relaxations(i).threshold_visit_count

ในทำนองเดียวกัน ระบบจะผ่อนปรนการสตาร์ทยานพาหนะเป็น relaxations(i).level หากมีคุณสมบัติตรงตามข้อกำหนดต่อไปนี้

  • vehicleStartTime >= relaxations(i).threshold_time AND
  • relaxations(i).threshold_visit_count == 0 และปลายรถจะผ่อนปรนเป็น relaxations(i).level หากเป็นไปตามข้อกำหนดต่อไปนี้
  • vehicleEndTime >= relaxations(i).threshold_time AND
  • 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 ขึ้นไป AND 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 ระบบจะผ่อนปรนเวลาเริ่มต้นของการเข้าชมและเวลาเริ่มต้น/สิ้นสุดของยานพาหนะ แต่การเข้าชมแต่ละครั้งจะยังคงเชื่อมโยงกับยานพาหนะคันเดียวกันและต้องเป็นไปตามลําดับการเข้าชม โดยจะต้องไม่มีการแทรกการเข้าชมระหว่างหรือก่อนการเข้าชม
RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD เหมือนกับ RELAX_VISIT_TIMES_AFTER_THRESHOLD แต่ลำดับการเข้าชมจะผ่อนปรนด้วย โดยการเข้าชมจะดำเนินการโดยยานพาหนะคันนี้เท่านั้น แต่อาจไม่ดำเนินการ
RELAX_ALL_AFTER_THRESHOLD เหมือนกับ RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD แต่ยานพาหนะจะผ่อนปรนด้วยเช่นกัน นั่นคือการเข้าชมจะฟรีโดยสมบูรณ์เมื่อถึงหรือหลังจากเวลาที่กำหนด และอาจไม่มีการเรียกใช้