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