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