בדוגמה הזו מוסבר איך להשתמש בפרמטרים של עלות כדי לקבל מסלול חסכוני.
לסקירה כללית מלאה של המושגים, קראו את המאמר מושג המפתח של מודל העלות.
דוגמה לבקשה
בדוגמה הבאה מוצג תרחיש שבו רכב אחד צריך להעביר שלושה משלוחים. לרכב יש עלויות שמשויכות לזמן ולמרחק, ולכל משלוח יש penaltyCost שנגרם אם המשלוח מדלג.
בקשת הדוגמה הזו מכילה את הפרמטרים הבאים שקשורים לעלות:
-
shipments[0]עםpenaltyCostשל 100.0. -
shipments[1]עםpenaltyCostשל 5.0. shipments[2]עםpenaltyCostשל 50.0.-
vehicles[0]עםcostPerHourשל 40.0 ו-costPerKilometerשל 10.0.
דוגמה לבקשה עם עלויות
{ "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 } ] } }
דוגמה לתשובה
התשובה מראה שהאופטימיזציה יוצרת מסלול שמבצע שניים מתוך שלושת המשלוחים. המשלוח השלישי לא נכלל כי ערך ה-penaltyCost שלו נמוך מעלויות הרכב שחושבו לאיסוף ולמסירה.
תגובה לבקשה לדוגמה עם עלויות
{ "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 } } }
השדות הבאים מראים איך העלויות מחושבות בתגובה:
routeCostsמפרט את עלויות התפעול של מסלול ספציפי, שבמקרה הזה הן:model.vehicles.cost_per_kilometer: 33.53.model.vehicles.cost_per_hour: 18.91.
- הערך
routeTotalCost(52.44) הוא סכום העלויות שמפורטות ב-routeCosts. - ברמה העליונה של התגובה, האובייקט
costsמסכם את כל העלויות שנוצרו בפתרון. העלות הזו כוללת את העלויות התפעוליות של כל מסלולי הרכבים, בתוספת קנסות, כמוmodel.shipments.penalty_cost(5.0) על המשלוח שדילגו עליו. - הערך הסופי של
totalCost(57.44) מייצג את הסכום הכולל של הפתרון, שהוא הסכום שלrouteTotalCostמכל כלי הרכב וכל עלויות הקנסות. במקרה הזה, 52.44 + 5.0.