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 יחולו על כל הרכבים שלא צוינו בrelaxations אחרים.constraintRelaxations יכולה להיות ברירת מחדל אחת לכל היותר, כלומר, מותר להשאיר ריק שדה אחד לכל היותר של הקלה במגבלות vehicleIndices. אי אפשר לציין אינדקס של רכב יותר מפעם אחת, גם אם הוא מופיע בכמה constraintRelaxations.

מיפוי של אינדקס רכב מתבצע כמו ShipmentRoute.vehicle_index, אם interpretInjectedSolutionsUsingLabels הוא true (ראו הערה fields).

הירגעות

אם relaxations ריק, שעת ההתחלה והרצף של כל הביקורים ב-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 או אחרי השעה הזו.

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