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