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.

אם הערך של interpretInjectedSolutionsUsingLabels הוא true, מערכי הרכב ממופה באופן זהה ל-ShipmentRoute.vehicle_index (ראו הערה 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 או אחריו.

חותמת זמן בפורמט UTC 'Zulu' של RFC3339, עם רזולוציה של ננו-שנייה ועד תשע ספרות עשרוניות. דוגמאות: "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, אבל הרכב גם משוחרר: הביקורים הם בחינם לחלוטין אחרי מועד הסף או במועד הסף, ויכול להיות שהם לא יבוצעו.