בדוגמה הזו מוסבר איך להשתמש בפרמטרים של עלות כדי לקבל מסלול חסכוני.
במאמר הזה מוסבר על המושג המרכזי של מודל העלויות.
דוגמה לבקשה
בדוגמה הבאה מוצג תרחיש שבו רכב אחד צריך לספק שלושה משלוחים. לרכב יש עלויות שמשויכות לזמן ולמרחק, ולכל משלוח יש 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.