InjectedSolutionConstraint

פתרון שיוזן בבקשה, כולל מידע על אילו ביקורים יש להגביל ועל האופן שבו יש להגביל אותם.

ייצוג JSON
{
  "routes": [
    {
      object (ShipmentRoute)
    }
  ],
  "skippedShipments": [
    {
      object (SkippedShipment)
    }
  ],
  "constraintRelaxations": [
    {
      object (ConstraintRelaxation)
    }
  ]
}
שדות
routes[]

object (ShipmentRoute)

מסלולים של התמיסה שיש להחדיר. ייתכן שחלק מהמסלולים יושמטו מהפתרון המקורי. המסלולים והמשלוחים שעליהם דילגו חייבים לעמוד בהנחות התקינות הבסיסיות שמפורטות עבור injectedFirstSolutionRoutes.

skippedShipments[]

object (SkippedShipment)

דילגת על משלוחים של התמיסה שיש להחדיר. ייתכן שחלק מהם יושמטו מהפתרון המקורי. פרטים נוספים זמינים בשדה routes.

constraintRelaxations[]

object (ConstraintRelaxation)

לגבי אפס קבוצות של כלי רכב או יותר, יש לציין מתי ובכמה יש להנמיך את האילוצים. אם השדה הזה ריק, כל המסלולים לכלי רכב שאינם ריקים מוגבלים לחלוטין.

ConstraintRelaxation

כשמדובר בקבוצה של רכבים, ההגדרה קובעת באילו סכומי סף הביקורים יחולו על הביקורים ובאיזו רמה. ניתן לדלג על משלוחים שמצוינים בשדה skipped_shipment. כלומר, לא ניתן לבצע אותם.

ייצוג JSON
{
  "relaxations": [
    {
      object (Relaxation)
    }
  ],
  "vehicleIndices": [
    integer
  ]
}
שדות
relaxations[]

object (Relaxation)

כל ההקלות במגבלות הביקורים שיחולו על ביקורים במסלולים עם כלי רכב בvehicleIndices.

vehicleIndices[]

integer

מציין את האינדקסים של הרכבים שעליהם חל אילוץ הביקור relaxations. אם השדה הזה ריק, הוא נחשב כברירת המחדל והמאפיין relaxations חל על כל כלי הרכב שלא צוינו בconstraintRelaxations אחרות. יכולה להיות לכל היותר ברירת מחדל אחת. כלומר, לכל היותר שדה אחד של הטלת אילוצים יכול להיות ריק vehicleIndices. אפשר לרשום אינדקס רכב פעם אחת בלבד, גם בתוך מספר constraintRelaxations.

אינדקס רכב ממופה באופן זהה ל-ShipmentRoute.vehicle_index, אם interpretInjectedSolutionsUsingLabels הוא True (יש לעיין בהערה 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 עם אותו 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, עם רזולוציה של ננו-שנייה ועד תשע ספרות עשרוניות. דוגמאות: "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 לא מיושם בכלל במסלול הזה.

רמה

מבטא את רמות ההקלות השונות באילוץ, שחלות על ביקור ועל אלה שיתרחשו לאחר עמידה בתנאי הסף.

המספור למטה הוא לפי הסדר של הגברת הרגיעה.

טיפוסים בני מנייה (enums)
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, אבל הרכב גם רגוע: הביקורים בחינם לחלוטין או לאחר מכן בזמן הסף וייתכן שהם לא יובילו לביצוע.