עלויות העמסה מציינות את העלויות או הקנסות שרכב סופג על סמך המטען שהוא נושא בין איסוף המשלוחים למסירתם. אתם יכולים להגדיר את העלויות האלה על סמך מרחק הנסיעה עם costPerKilometer, משך הנסיעה עם costPerTraveledHour, או להשתמש בשני הגורמים בו-זמנית.
אפשר להגדיר עלויות טעינה כדי לתמוך ביעדים כמו:
- צריך לקחת בחשבון את עלויות הדלק שעולות ככל שמשקל המטען עולה.
- מומלץ להימנע מניתוב כלי רכב עמוסים למרחקים ארוכים.
- קחו בחשבון את הבלאי של הרכב כתוצאה ממטען כבד.
מאפיינים
מציינים את עלויות הטעינה במאפיין loadLimits של Vehicle.
בדומה לכל פרמטרי העלות האחרים, העלויות של העומס מבוססות על יחידות עלות יחסיות חסרות ממד.
אפשר להגדיר עלויות טעינה באמצעות המאפיינים הבאים:
| נכס | סוג | תיאור |
|---|---|---|
costPerKilometer |
אובייקט | כולל אובייקט מסוג LoadCost לחישוב עלויות נסיעה על סמך קילומטרים שנסעו. |
costPerTraveledHour |
אובייקט | מכיל אובייקט מסוג LoadCost לחישוב עלויות נסיעה על סמך שעות הנסיעה, לא כולל זמני המתנה, ביקורים והפסקות. |
LoadCost
סוג ההודעה LoadCost מגדיר את עלות ההובלה של מטען מסוים. אפשר להגדיר סף עומס, ואז לציין תעריפי עלות שונים לכל יחידת עומס, גם מתחת לסף וגם מעליו.
אובייקט LoadCost מכיל את פרמטרים ההגדרה הבאים:
| פרמטר | סוג | תיאור |
|---|---|---|
loadThreshold |
מחרוזת (פורמט int64) | רמת העומס שבה משתנה קצב חישוב העלות. ברירת המחדל היא 0. |
costPerUnitAboveThreshold |
מספר | העלות שחלה על כל יחידת עומס מעל loadThreshold. ברירת המחדל היא 0. |
costPerUnitBelowThreshold |
מספר | העלות שחלה על כל יחידת עומס שקטנה או שווה ל-loadThreshold. ברירת המחדל היא 0. |
התאמה בין עלויות טעינה למשלוחים
עלויות העמסה חלות כשהמטען שמועמס על כלי רכב תואם לסוג המשלוחים במסלול שלו loadDemands. סוגי העומסים הם מחרוזות שרירותיות, כמו משקל או נפח. לפרטים נוספים על הגדרת סוגי טעינה, אפשר לעיין במאמר סוגי טעינה.
דוגמאות
בקטע הזה מופיעות שלוש דוגמאות:
- דוגמאות קוד שממחישות את המבנה של עלויות הטעינה.
- תרחיש לדוגמה שמראה דרך אחת להשתמש בעלויות העומס כדי להשיג יעד עסקי.
- דוגמה לבקשה שכוללת את הערכים שהוגדרו בתרחיש לדוגמה.
דוגמאות קוד
בדוגמה הבאה אפשר לראות איך להגדיר עלות טעינה עם כל פרמטרי ההגדרה הזמינים. בדוגמה הזו נעשה שימוש ב-costPerKilometer, אבל אפשר להחליף אותו ב-costPerTraveledHour כדי לחשב את העלויות על סמך משך הנסיעה במקום המרחק.
{
"model": {
"vehicles": [{
"loadLimits": {
"LOAD_TYPE": {
"maxLoad": "MAX_LOAD",
"costPerKilometer": {
"loadThreshold": "LOAD_THRESHOLD",
"costPerUnitAboveThreshold": COST_ABOVE,
"costPerUnitBelowThreshold": COST_BELOW
}
}
}
}]
}
}
תרחיש לדוגמה
בקטע הזה מתואר תרחיש שבו רוצים לבצע אופטימיזציה של צריכת הדלק, וצריכת הדלק פרופורציונלית למרחק ולמשקל המטען. כלי רכב צורכים יותר דלק כשהם נושאים מטענים כבדים יותר, ולכן כדאי לתכנן מסלולים שבהם מספקים קודם חבילות כבדות יותר.
כדי להגדיר את ההתנהגות הזו, אפשר להגדיר את הבקשה כך שיוטלו קנסות על כלי רכב שנוסעים למרחקים ארוכים עם מטען כבד. בדוגמה הזו, משתמשים בערכי הנכס הבאים בבקשה:
| הורה | נכס | סוג | ערך | תרחיש |
|---|---|---|---|---|
loadLimits |
סוג העמסה | מחרוזת | weightKg |
הגדרה של סוג הקיבולת למעקב. בדוגמה הזו, הערך weightKg מייצג את משקל המטען בקילוגרמים. |
loadLimits |
maxLoad |
מחרוזת | 100 |
משקל המטען המקסימלי שהרכב יכול לשאת. |
costPerKilometer |
loadThreshold |
מחרוזת | 15 |
ההגדרה קובעת את סף עומס הבסיס. על כל משקל מטען מעל 15 ק"ג חלה קנס על עלות הדלק שמבוסס על העומס. |
costPerKilometer |
costPerUnitAboveThreshold |
number | 1 |
הערך הזה משמש כמקדם של עלות הדלק. על כל קילומטר נסיעה, כל קילוגרם של מטען מעל סף 15 ק"ג מחויב ביחידת עלות אחת. |
loadDemands |
amount |
מחרוזת | משלוח 1: 50משלוח 2: 10משלוח 3: 80 |
מציינים את משקל המטען לכל אחת משלוש המשלוחים. |
בתרחיש הזה, לערכים שהגדרתם יש את ההשפעות הבאות:
- הכלי לאופטימיזציה מסדר את המסלולים כך שהחבילות הכבדות ביותר יסופקו ראשונות. הפתרון שמתקבל מתזמן את המשלוחים של 80 ק"ג ו-50 ק"ג בתחילת המסלול כדי למזער את המרחק שנוסעים עם משקל כבד.
- הכלי לאופטימיזציה מסדר את המסלולים כדי לצמצם את המרחק שנוסעים עם מטען כבד. כדי לראות איך ההגדרות האלה משפיעות על המסלולים, אפשר להגדיל את
costPerUnitAboveThresholdמ-1ל-5. אם מגדילים את קנס המשקל, המערכת תפעל עוד יותר כדי למזער את המרחק שיידרש לנסיעה עם מטען כבד יותר. יכול להיות שהיא תסדר מחדש את רשימת המשלוחים או שתפצל את המשלוחים בין כמה כלי רכב.
דוגמה לבקשה
בדוגמה הבאה מוצג המבנה של בקשת optimizeTours בסיסית שכוללת את ערכי עלות הטעינה מהתרחיש לדוגמה:
{ "model": { "shipments": [ { "deliveries": [ { "arrivalLocation": { "latitude": 37.789456, "longitude": -122.390192 }, "duration": "250s" } ], "penaltyCost": 100.0, "loadDemands": { "weightKg": { "amount": "50" } } }, { "deliveries": [ { "arrivalLocation": { "latitude": 37.789116, "longitude": -122.395080 }, "duration": "250s" } ], "penaltyCost": 30.0, "loadDemands": { "weightKg": { "amount": "10" } } }, { "deliveries": [ { "arrivalLocation": { "latitude": 37.795242, "longitude": -122.399347 }, "duration": "250s" } ], "penaltyCost": 50.0, "loadDemands": { "weightKg": { "amount": "80" } } } ], "vehicles": [ { "endLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "startLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "costPerHour": 40.0, "costPerKilometer": 10.0, "loadLimits": { "weightKg": { "maxLoad": "100", "costPerKilometer": { "loadThreshold": "15", "costPerUnitAboveThreshold": 1 } } } } ] } }
נוסחאות חישוב
הכלי לאופטימיזציה מחשב את עלויות הטעינה באמצעות הנוסחאות הבאות.
חישוב מלא של סכום הסף
אם מציינים גם costPerUnitAboveThreshold וגם costPerUnitBelowThreshold, העלויות של המשלוחים יהיו שונות בהתאם לסכום המטען, אם הוא גבוה מ-loadThreshold או נמוך ממנו. הנוסחה היא:
cost = max(carried_load - load_threshold, 0) * distance_or_time * cost_per_unit_above_threshold
+ min(carried_load, load_threshold) * distance_or_time * cost_per_unit_below_threshold
לדוגמה, אם משתמשים בערכים מדוגמת הבקשה, שבהם הערך של costPerUnitBelowThreshold הוא 2, ואם הרכב נוסע 10 קילומטרים עם מטען של 50, החישוב הוא:
max(50 - 15, 0) * 10 * 1 + min(50, 15) * 10 * 2 = 650 cost units
חישוב מעל הסף
אם מציינים רק costPerUnitAboveThreshold, החישוב הוא מקרה מיוחד של נוסחת הסף המלאה. העלות מתחת לסף היא אפס, ולכן החלק השני של הנוסחה המלאה שווה לאפס. הנוסחה היא:
cost = max(carried_load - load_threshold, 0) * distance_or_time * cost_per_unit_above_threshold
לדוגמה, אם משתמשים בערכים מבקשה לדוגמה שבהם loadThreshold הוא 15 ו-costPerUnitAboveThreshold הוא 1, והרכב נוסע 10 קילומטרים עם מטען של 50, החישוב הוא:
max(50 - 15, 0) * 10 * 1 = 350 cost units
חישוב מתחת לסף
באופן סימטרי, אם מציינים רק costPerUnitBelowThreshold, החישוב הוא מקרה מיוחד נוסף של נוסחת הסף המלאה, שבו העלות מעל הסף היא אפס. הנוסחה היא:
cost = min(carried_load, load_threshold) * distance_or_time * cost_per_unit_below_threshold