פתרון שהוזרק לבקשה, כולל מידע על הביקורים שצריך להגביל ועל האופן שבו צריך להגביל אותם.
| ייצוג ב-JSON |
|---|
{ "routes": [ { object ( |
| שדות | |
|---|---|
routes[] |
המסלולים של הפתרון להזרקה. יכול להיות שחלק מהמסלולים יוסרו מהפתרון המקורי. המסלולים והמשלוחים שהושמטו חייבים לעמוד בהנחות הבסיסיות לגבי תקינות שמפורטות עבור |
skippedShipments[] |
משלוחים של הפתרון להזרקה שקודמו. יכול להיות שחלק מהם לא ייכללו בפתרון המקורי. מידע נוסף מפורט בשדה |
constraintRelaxations[] |
בקבוצות אפס או יותר של כלי רכב, מציין מתי ואיך להקל על האילוצים. אם השדה הזה ריק, כל מסלולי הרכבים שאינם ריקים מוגבלים לחלוטין. |
ConstraintRelaxation
בקבוצה של כלי רכב, מציינים את ערכי הסף שבהם ההגבלות על הביקורים יתרופפו ואת רמת ההרפיה. משלוחים שמפורטים בשדה skipped_shipment מוגבלים לדילוג, כלומר אי אפשר לבצע אותם.
| ייצוג ב-JSON |
|---|
{
"relaxations": [
{
object ( |
| שדות | |
|---|---|
relaxations[] |
כל ההקלות על אילוצים של ביקורים שחלות על ביקורים במסלולים עם רכבים ב- |
vehicleIndices[] |
מציין את אינדקסי כלי הרכב שאליהם חל האילוץ אינדקס של רכב ממופה באותו אופן כמו |
הירגעות
אם השדה 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 |
המועד שבו ניתן להחיל את ההקלה הפורמט הזה משתמש ב-RFC 3339, שבו הפלט שנוצר תמיד יהיה מנורמלי לפי Z וישמש בספרות עשרוניות של 0, 3, 6 או 9. אפשר להשתמש גם בשינויים (offsets) אחרים מלבד 'Z'. דוגמאות: |
thresholdVisitCount |
מספר הביקורים שבהם ניתן להחיל את ההקלה אם הערך הוא |
רמה
מייצג את רמות ההרפיה השונות של האילוצים, שחלות על ביקור ועל הביקורים הבאים אחריו אם הוא עומד בתנאי הסף.
הרשימה הבאה מסודרת לפי רמת הרפיה הולכת וגוברת.
| טיפוסים בני מנייה (enum) | |
|---|---|
LEVEL_UNSPECIFIED |
רמת ההרפיה המשתמעת שמוגדרת כברירת מחדל: לא מתבצעת הרפיה של אף אחת מהמגבלות, כלומר כל הביקורים מוגבלים באופן מלא. אסור להשתמש בערך הזה באופן מפורש ב- |
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, אבל הרכב גם משוחרר: הביקורים הם בחינם לחלוטין אחרי מועד הסף או במועד הסף, ויכול להיות שהם לא יבוצעו. |