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