ההודעה OptimizeToursRequest
(REST, gRPC) מכילה מספר
נכסים שקשורים אל
עלויות. יחד, פרמטרים אלה של העלויות מייצגים את
מודל עלות. מודל העלות מתייחס לסוגים רבים של בקשות
יעדי אופטימיזציה, כמו:
- מתן עדיפות למסלולים מהירים יותר מסוג
Vehicle
על פני מסלולים קצרים יותר או האפשרות השנייה בסביבות - ההחלטה אם העלות של אספקת
Shipment
שווה את הערך של ההשלמה שלShipment
- איסוף עצמי ומשלוחים מתבצעים בחלונות זמן שונים רק במקרים כאלה משתלם
הצגת בקשה לדוגמה עם עלויות
{ "model": { "globalStartTime": "2023-01-13T16:00:00-08:00", "globalEndTime": "2023-01-14T16:00:00-08:00", "shipments": [ { "deliveries": [ { "arrivalLocation": { "latitude": 37.789456, "longitude": -122.390192 }, "duration": "250s" } ], "pickups": [ { "arrivalLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "duration": "150s" } ], "penaltyCost": 100.0 }, { "deliveries": [ { "arrivalLocation": { "latitude": 37.789116, "longitude": -122.395080 }, "duration": "250s" } ], "pickups": [ { "arrivalLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "duration": "150s" } ], "penaltyCost": 5.0 }, { "deliveries": [ { "arrivalLocation": { "latitude": 37.795242, "longitude": -122.399347 }, "duration": "250s" } ], "pickups": [ { "arrivalLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "duration": "150s" } ], "penaltyCost": 50.0 } ], "vehicles": [ { "endLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "startLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "costPerHour": 40.0, "costPerKilometer": 10.0 } ] } }
Vehicle
מאפייני עלות
להודעה Vehicle
(REST, gRPC) יש כמה מאפייני עלות:
Vehicle.cost_per_hour
: מייצג את עלות השימוש ברכב לשעה כולל זמני תחבורה ציבורית, המתנה, ביקור והפסקה.Vehicle.cost_per_kilometer
: מייצג את עלות הקילומטראז' של הנסיעה את הרכב.Vehicle.cost_per_traveled_hour
: מייצג את עלות ההפעלה של רכב רק בזמן המעבר, לא כולל זמני המתנה, ביקור והפסקה.
הפרמטרים האלה של העלויות מאפשרים לכלי האופטימיזציה לבצע הפרשי זמן בין נסיעות
החסרונות. העלויות שנצברו במסלול שעבר אופטימיזציה מופיעות בתשובה
הודעה בתור metrics.costs
:
ככל שהמדד costPerHour
גדל, כלי האופטימיזציה מנסה למצוא מסלולים מהירים יותר
אלה אולי לא המסלולים הקצרים ביותר. בדוגמה הזו, המסלול המהיר ביותר
להיות הקצרים ביותר, כך שלשינויים בפרמטרים של העלות אין השפעה רבה.
Shipment
מאפייני עלות
גם להודעה Shipment
(REST, gRPC) יש כמה עלויות
:
Shipment.penalty_cost
מייצג את העלות כתוצאה לדילוג על משלוח.Shipment.VisitRequest.cost
מייצג את העלות של איסוף ספציפי או משלוח, משמש בעיקר כדי לאפשר התפשרות על עלות בין מספר איסוף אפשרויות משלוח למשלוח בודד.
Shipment
פרמטרים של עלות משתמשים באותן יחידות ללא מימדים כמו העלות של Vehicle
. העלות שהצטברה Shipment
גבוהה יותר מהקנס.
Shipment
לא כלולה במסלול של Vehicle
, ובמקום זאת מופיעה בנתיב
הרשימה skipped_shipments
בהודעת התשובה.
ShipmentModel
מאפייני עלות
הודעת ShipmentModel
(REST, gRPC) כוללת עלות אחת
לנכס, globalDurationCostPerHour
. העלות הזו מחושבת על סמך העלות הכוללת
הזמן שנדרש לכל כלי הרכב כדי להשלים את הטיפול בShipmentRoute
. במגמת עלייה
ב-globalDurationCostPerHour
ניתנת עדיפות להשלמה מוקדמת יותר של כל המשלוחים.
מאפייני עלות של תגובה לאופטימיזציה של מסלול
ההודעה OptimizeToursResponse
(REST, gRPC) כוללת מאפייני עלות
שמייצגות את העלויות שנצברו בתהליך ההשלמה של ShipmentRoute
.
המאפיינים metrics.costs
ו-metrics.totalCost
מייצגים את מספר
יחידות העלות שנצברו בכל המסלולים בתגובה. לכל רשומה של routes
יש
הנכסים routeCosts
ו-routeTotalCosts
שמייצגים עלויות
מסלול ספציפי.
הצגת תשובה לבקשה לדוגמה עם העלויות
{ "routes": [ { "vehicleStartTime": "2023-01-14T00:00:00Z", "vehicleEndTime": "2023-01-14T00:28:22Z", "visits": [ { "isPickup": true, "startTime": "2023-01-14T00:00:00Z", "detour": "0s" }, { "shipmentIndex": 2, "isPickup": true, "startTime": "2023-01-14T00:02:30Z", "detour": "150s" }, { "startTime": "2023-01-14T00:08:55Z", "detour": "150s" }, { "shipmentIndex": 2, "startTime": "2023-01-14T00:21:21Z", "detour": "572s" } ], "transitions": [ { "travelDuration": "0s", "waitDuration": "0s", "totalDuration": "0s", "startTime": "2023-01-14T00:00:00Z" }, { "travelDuration": "0s", "waitDuration": "0s", "totalDuration": "0s", "startTime": "2023-01-14T00:02:30Z" }, { "travelDuration": "235s", "travelDistanceMeters": 795, "waitDuration": "0s", "totalDuration": "235s", "startTime": "2023-01-14T00:05:00Z" }, { "travelDuration": "496s", "travelDistanceMeters": 1893, "waitDuration": "0s", "totalDuration": "496s", "startTime": "2023-01-14T00:13:05Z" }, { "travelDuration": "171s", "travelDistanceMeters": 665, "waitDuration": "0s", "totalDuration": "171s", "startTime": "2023-01-14T00:25:31Z" } ], "metrics": { "performedShipmentCount": 2, "travelDuration": "902s", "waitDuration": "0s", "delayDuration": "0s", "breakDuration": "0s", "visitDuration": "800s", "totalDuration": "1702s", "travelDistanceMeters": 3353 }, "routeCosts": { "model.vehicles.cost_per_kilometer": 33.53, "model.vehicles.cost_per_hour": 18.911111111111111 }, "routeTotalCost": 52.441111111111113 } ], "skippedShipments": [ { "index": 1 } ], "metrics": { "aggregatedRouteMetrics": { "performedShipmentCount": 2, "travelDuration": "902s", "waitDuration": "0s", "delayDuration": "0s", "breakDuration": "0s", "visitDuration": "800s", "totalDuration": "1702s", "travelDistanceMeters": 3353 }, "usedVehicleCount": 1, "earliestVehicleStartTime": "2023-01-14T00:00:00Z", "latestVehicleEndTime": "2023-01-14T00:28:22Z", "totalCost": 57.441111111111113, "costs": { "model.vehicles.cost_per_kilometer": 33.53, "model.vehicles.cost_per_hour": 18.911111111111111, "model.shipments.penalty_cost": 5 } } }
בתשובה לדוגמה, metrics.costs
ברמה העליונה הם:
{
"metrics": {
...
"costs": {
"model.vehicles.cost_per_hour": 18.911111111111111,
"model.vehicles.cost_per_kilometer": 33.53,
"model.shipments.penalty_cost": 5
}
}
}
הערך model.shipments.penalty_cost
מייצג את העלות שנצברו עקב
דילגת על המשלוחים. בנכס skippedShipments
מפורטים המשלוחים
בוצע דילוג.
בדוגמה הזו, המערכת תדלג רק על model.shipments[1]
בבקשה לדוגמה.
על model.shipments[1]
יש עלות קנס של 5 יחידות, שזהה לסה"כ
model.shipments.penalty_cost
בתשובה לדוגמה. רמת המשלוח נמוכה
penaltyCost
בהשוואה ל-costPerHour
ול-10.0 של Vehicle
costPerKilometer
משתלם יותר לדלג על המשלוח מאשר
להשלים אותו.
נושא מתקדם: עלויות ומגבלות רכות
מספר מאפייני OptimizeToursRequest
של הודעות (REST, gRPC)
שמייצגים מגבלות רכות, שהן מגבלות שכרוכים בתשלום
לא יכול להיות מרוצה.
לדוגמה, אילוצים של רכב LoadLimit
(REST, gRPC) יש
softMaxLoad
ו-costPerUnitAboveSoftMax
נכסים. ביחד,
העלות פרופורציונלית ליחידות העומסים מעבר ל-softMaxLoad
, דבר שמאפשר
תחרוג מהמגבלה רק אם הדבר הגיוני מבחינת העלות.
באופן דומה, מגבלות של TimeWindow
(REST, gRPC)
soft_start_time
ו-soft_end_time
, עם נכסים תואמים
cost_per_hour_before_soft_start_time
וגם cost_per_hour_after_soft_end_time
שמצטברות בהתאם לשלב מוקדם או מאוחר שבו מתרחש האירוע המוגבל
ביחס לTimeWindow
.
כמו בכל הפרמטרים של מודל העלות, עלויות עם מגבלות רכות באות לידי ביטוי יחידות ללא מאפיינים כמו פרמטרים אחרים של עלות.
יש התייחסות מפורטת למגבלות של LoadLimit
עומס ביקוש ומגבלות. התייחסות מפורטת למגבלות על TimeWindow
בקטע מגבלות של חלון זמן איסוף ואספקה.