এই উদাহরণে দেখানো হয়েছে যে কীভাবে timeWindows ব্যবহার করে শিপমেন্টের জন্য পিক-আপ ও ডেলিভারি
সময় সেট করতে হয়।
সম্পূর্ণ ধারণাগত ওভারভিউ এবং timeWindows ব্যবহার করার আরও উপায় জানতে,
টাইম উইন্ডো কী
কনসেপ্ট
ডকুমেন্ট দেখুন।
পরিস্থিতি ১: নির্দিষ্ট সময়সীমার মধ্যে ডেলিভারি করা
নিচের উদাহরণে এমন একটি পরিস্থিতি দেখানো হয়েছে যেখানে একটি গাড়িকে নির্দিষ্ট timeWindows-এর মধ্যে
তিনটি শিপমেন্ট ডেলিভার করতে হবে।
অনুরোধের উদাহরণ
এই অনুরোধে তিনটি শিপমেন্ট অন্তর্ভুক্ত আছে, যার প্রত্যেকটির ডেলিভারি
TimeWindow আলাদা:
shipments[0]ডেলিভারি উইন্ডো: ১৮:০০ - ১৯:০০shipments[1]ডেলিভারি উইন্ডো: ১৮:০০ - ১৮:৩০shipments[2]ডেলিভারি উইন্ডো: ১৭:৩০ - ১৮:০০
টাইম উইন্ডো সহ অনুরোধের একটি উদাহরণ দেখুন
{ "populatePolylines": false, "populateTransitionPolylines": false, "model": { "globalStartTime": "2023-01-13T16:00:00Z", "globalEndTime": "2023-01-14T16:00:00Z", "shipments": [ { "deliveries": [ { "arrivalLocation": { "latitude": 37.789456, "longitude": -122.390192 }, "duration": "250s", "timeWindows": [ { "startTime": "2023-01-13T18:00:00Z", "endTime": "2023-01-13T19:00:00Z" } ] } ], "pickups": [ { "arrivalLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "duration": "150s" } ], "penaltyCost": 100.0 }, { "deliveries": [ { "arrivalLocation": { "latitude": 37.789116, "longitude": -122.395080 }, "duration": "250s", "timeWindows": [ { "startTime": "2023-01-13T18:00:00Z", "endTime": "2023-01-13T18:30:00Z" } ] } ], "pickups": [ { "arrivalLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "duration": "150s" } ], "penaltyCost": 20.0 }, { "deliveries": [ { "arrivalLocation": { "latitude": 37.795242, "longitude": -122.399347 }, "duration": "250s", "timeWindows": [ { "startTime": "2023-01-13T17:30:00Z", "endTime": "2023-01-13T18:00:00Z" } ] } ], "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 } ] } }
উত্তরের উদাহরণ
উত্তরে দেখানো হয়েছে যে অপ্টিমাইজার প্রতিটি visits-কে
টাইম উইন্ডো মেনে চলার জন্য শিডিউল করে, আগে থাকা উইন্ডো সহ শিপমেন্ট প্রথমে ডেলিভার করে।
টাইম উইন্ডো সহ উদাহরণ অনুরোধের উত্তর দেখুন
{ "routes": [ { "vehicleStartTime": "2023-01-13T17:35:50Z", "vehicleEndTime": "2023-01-13T18:17:24Z", "visits": [ { "isPickup": true, "startTime": "2023-01-13T17:35:50Z", "detour": "0s" }, { "shipmentIndex": 1, "isPickup": true, "startTime": "2023-01-13T17:38:20Z", "detour": "150s" }, { "shipmentIndex": 2, "isPickup": true, "startTime": "2023-01-13T17:40:50Z", "detour": "300s" }, { "shipmentIndex": 2, "startTime": "2023-01-13T17:50:09Z", "detour": "0s" }, { "shipmentIndex": 1, "startTime": "2023-01-13T18:00:00Z", "detour": "796s" }, { "startTime": "2023-01-13T18:07:35Z", "detour": "1520s" } ], "transitions": [ { "travelDuration": "0s", "waitDuration": "0s", "totalDuration": "0s", "startTime": "2023-01-13T17:35:50Z" }, { "travelDuration": "0s", "waitDuration": "0s", "totalDuration": "0s", "startTime": "2023-01-13T17:38:20Z" }, { "travelDuration": "0s", "waitDuration": "0s", "totalDuration": "0s", "startTime": "2023-01-13T17:40:50Z" }, { "travelDuration": "409s", "travelDistanceMeters": 1371, "waitDuration": "0s", "totalDuration": "409s", "startTime": "2023-01-13T17:43:20Z" }, { "travelDuration": "341s", "travelDistanceMeters": 1312, "waitDuration": "0s", "totalDuration": "341s", "startTime": "2023-01-13T17:54:19Z" }, { "travelDuration": "205s", "travelDistanceMeters": 636, "waitDuration": "0s", "totalDuration": "205s", "startTime": "2023-01-13T18:04:10Z" }, { "travelDuration": "339s", "travelDistanceMeters": 1276, "waitDuration": "0s", "totalDuration": "339s", "startTime": "2023-01-13T18:11:45Z" } ], "metrics": { "performedShipmentCount": 3, "travelDuration": "1294s", "waitDuration": "0s", "delayDuration": "0s", "breakDuration": "0s", "visitDuration": "1200s", "totalDuration": "2494s", "travelDistanceMeters": 4595 }, "routeCosts": { "model.vehicles.cost_per_hour": 27.711111111111112, "model.vehicles.cost_per_kilometer": 45.95 }, "routeTotalCost": 73.661111111111111 } ], "metrics": { "aggregatedRouteMetrics": { "performedShipmentCount": 3, "travelDuration": "1294s", "waitDuration": "0s", "delayDuration": "0s", "breakDuration": "0s", "visitDuration": "1200s", "totalDuration": "2494s", "travelDistanceMeters": 4595 }, "usedVehicleCount": 1, "earliestVehicleStartTime": "2023-01-13T17:35:50Z", "latestVehicleEndTime": "2023-01-13T18:17:24Z", "totalCost": 73.661111111111111, "costs": { "model.vehicles.cost_per_hour": 27.711111111111112, "model.vehicles.cost_per_kilometer": 45.95 } } }
প্রতিটি শিপমেন্টের ডেলিভারি startTime তার অনুরোধ করা উইন্ডোর মধ্যে
পড়ে:
shipments[2]১৭:৫০-এ ডেলিভার করা হয়েছে (১৭:৩০ - ১৮:০০ উইন্ডোর মধ্যে)।shipments[1]১৮:০০-এ ডেলিভার করা হয়েছে (১৮:০০ - ১৮:৩০-এর মধ্যে)।shipments[0]১৮:০৭-এ ডেলিভার করা হয়েছে (১৮:০০ - ১৯:০০ উইন্ডোর মধ্যে)।
পরিস্থিতি ২: টাইম উইন্ডোর কারণে কোনও শিপমেন্ট এড়িয়ে যাওয়া
নিচের উদাহরণে এমন একটি পরিস্থিতি দেখানো হয়েছে যেখানে একটি শিপমেন্টের টাইম উইন্ডো
অন্যগুলির থেকে অনেক দূরে, যার ফলে অপ্টিমাইজারের পক্ষে শিপমেন্টটি বাদ দিয়ে penaltyCost পেমেন্ট করা
বেশি সাশ্রয়ী।
অনুরোধের উদাহরণ
এই অনুরোধটি প্রথম পরিস্থিতির মতোই, তবে একটি শিপমেন্টের ডেলিভারি উইন্ডো অন্য সময়ে, দিনের অনেক পরে।
shipments[1]ডেলিভারি উইন্ডো এখন: ২১:০০ - ২১:৩০
সময়সীমা সহ অনুরোধের একটি উদাহরণ দেখুন যা পূরণ করা যাবে না
{ "populatePolylines": false, "populateTransitionPolylines": false, "model": { "globalStartTime": "2023-01-13T16:00:00Z", "globalEndTime": "2023-01-14T16:00:00Z", "shipments": [ { "deliveries": [ { "arrivalLocation": { "latitude": 37.789456, "longitude": -122.390192 }, "duration": "250s", "timeWindows": [ { "startTime": "2023-01-13T18:00:00Z", "endTime": "2023-01-13T19:00:00Z" } ] } ], "pickups": [ { "arrivalLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "duration": "150s" } ], "penaltyCost": 100.0 }, { "deliveries": [ { "arrivalLocation": { "latitude": 37.789116, "longitude": -122.395080 }, "duration": "250s", "timeWindows": [ { "startTime": "2023-01-13T21:00:00Z", "endTime": "2023-01-13T21:30:00Z" } ] } ], "pickups": [ { "arrivalLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "duration": "150s" } ], "penaltyCost": 20.0 }, { "deliveries": [ { "arrivalLocation": { "latitude": 37.795242, "longitude": -122.399347 }, "duration": "250s", "timeWindows": [ { "startTime": "2023-01-13T17:30:00Z", "endTime": "2023-01-13T18:00:00Z" } ] } ], "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 } ] } }
উত্তরের উদাহরণ
উত্তরে দেখা যাচ্ছে যে অপ্টিমাইজার shipment[1] এড়িয়ে গেছে। এটি হওয়ার কারণ হল,
ওই শিপমেন্ট ডেলিভার করার জন্য, গাড়িটিকে আরও বেশ কয়েক ঘণ্টা
অতিরিক্ত চলতে হবে এবং সেই সময়ের জন্য হিসেব করা খরচ, শিপমেন্টের
penaltyCost ২০.০-এর চেয়ে বেশি।
শিপমেন্ট এড়িয়ে যাওয়া হয়েছে এমন টাইম উইন্ডো সহ উদাহরণস্বরূপ অনুরোধের উত্তর দেখুন
{ "routes": [ { "vehicleStartTime": "2023-01-13T17:37:49Z", "vehicleEndTime": "2023-01-13T18:09:49Z", "visits": [ { "isPickup": true, "startTime": "2023-01-13T17:37:49Z", "detour": "0s" }, { "shipmentIndex": 2, "isPickup": true, "startTime": "2023-01-13T17:40:19Z", "detour": "150s" }, { "shipmentIndex": 2, "startTime": "2023-01-13T17:49:38Z", "detour": "0s" }, { "startTime": "2023-01-13T18:00:00Z", "detour": "946s" } ], "transitions": [ { "travelDuration": "0s", "waitDuration": "0s", "totalDuration": "0s", "startTime": "2023-01-13T17:37:49Z" }, { "travelDuration": "0s", "waitDuration": "0s", "totalDuration": "0s", "startTime": "2023-01-13T17:40:19Z" }, { "travelDuration": "409s", "travelDistanceMeters": 1371, "waitDuration": "0s", "totalDuration": "409s", "startTime": "2023-01-13T17:42:49Z" }, { "travelDuration": "372s", "travelDistanceMeters": 1348, "waitDuration": "0s", "totalDuration": "372s", "startTime": "2023-01-13T17:53:48Z" }, { "travelDuration": "339s", "travelDistanceMeters": 1276, "waitDuration": "0s", "totalDuration": "339s", "startTime": "2023-01-13T18:04:10Z" } ], "metrics": { "performedShipmentCount": 2, "travelDuration": "1120s", "waitDuration": "0s", "delayDuration": "0s", "breakDuration": "0s", "visitDuration": "800s", "totalDuration": "1920s", "travelDistanceMeters": 3995 }, "routeCosts": { "model.vehicles.cost_per_kilometer": 39.95, "model.vehicles.cost_per_hour": 21.333333333333332 }, "routeTotalCost": 61.283333333333331 } ], "skippedShipments": [ { "index": 1 } ], "metrics": { "aggregatedRouteMetrics": { "performedShipmentCount": 2, "travelDuration": "1120s", "waitDuration": "0s", "delayDuration": "0s", "breakDuration": "0s", "visitDuration": "800s", "totalDuration": "1920s", "travelDistanceMeters": 3995 }, "usedVehicleCount": 1, "earliestVehicleStartTime": "2023-01-13T17:37:49Z", "latestVehicleEndTime": "2023-01-13T18:09:49Z", "totalCost": 81.283333333333331, "costs": { "model.shipments.penalty_cost": 20, "model.vehicles.cost_per_hour": 21.333333333333332, "model.vehicles.cost_per_kilometer": 39.95 } } }
উত্তরের skippedShipments অ্যারে থেকে বোঝা যাচ্ছে যে
index: 1 সহ শিপমেন্টটি করা হয়নি। এর ফলে নিম্নলিখিত খরচ সংক্রান্ত প্যারামিটার প্রভাবিত হয়েছে:
- সেই শিপমেন্টের ২০.০-এর
penaltyCostmetrics.costs-এ অন্তর্ভুক্ত করা হয়েছে। totalCost(৮১.২৮) হলrouteTotalCost(৬১.২৮) এবংpenalty_cost(২০.০)-এর যোগফল।
পরিস্থিতি ৩: সফট টাইম উইন্ডো ব্যবহার করা
নিচের উদাহরণে দেখানো হয়েছে যে কীভাবে সফট টাইম উইন্ডো ব্যবহার করতে হয়, যা অপ্টিমাইজারকে নির্দিষ্ট সময়সীমার বাইরে ডেলিভারি শিডিউল করার অনুমতি দেয়, তবে এর জন্য খরচ করতে হয়।
এই ফিচারের ধারণাগত ওভারভিউয়ের জন্য, টাইম উইন্ডো মূল ধারণা ডকুমেন্টের সফ্ট টাইম উইন্ডো বিভাগ দেখুন।
অনুরোধের উদাহরণ
এই অনুরোধটি আগের পরিস্থিতিকে পরিবর্তন করে
shipment[1]-এর জন্য হার্ড টাইম উইন্ডোকে সফট টাইম উইন্ডোতে পরিবর্তন করে। এটি softStartTime ব্যবহার করে এবং
costPerHourBeforeSoftStartTime প্রদান করে করা হয়।
shipment[1]-এর এখন softStartTime ২১:০০ এবং
costPerHourBeforeSoftStartTime ২.০। এর অর্থ হল, ২১:০০-এর আগে
ডেলিভারি করা প্রতি ঘণ্টার জন্য জরিমানা করা হবে।
হার্ড ও সফট টাইম উইন্ডো সহ অনুরোধের উদাহরণ দেখুন
{ "populatePolylines": false, "populateTransitionPolylines": false, "model": { "globalStartTime": "2023-01-13T16:00:00Z", "globalEndTime": "2023-01-14T16:00:00Z", "shipments": [ { "deliveries": [ { "arrivalLocation": { "latitude": 37.789456, "longitude": -122.390192 }, "duration": "250s", "timeWindows": [ { "startTime": "2023-01-13T18:00:00Z", "softEndTime": "2023-01-13T19:00:00Z", "costPerHourAfterSoftEndTime": 2.0 } ] } ], "pickups": [ { "arrivalLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "duration": "150s" } ], "penaltyCost": 100.0 }, { "deliveries": [ { "arrivalLocation": { "latitude": 37.789116, "longitude": -122.395080 }, "duration": "250s", "timeWindows": [ { "softStartTime": "2023-01-13T21:00:00Z", "endTime": "2023-01-13T21:30:00Z", "costPerHourBeforeSoftStartTime": 2.0 } ] } ], "pickups": [ { "arrivalLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "duration": "150s" } ], "penaltyCost": 20.0 }, { "deliveries": [ { "arrivalLocation": { "latitude": 37.795242, "longitude": -122.399347 }, "duration": "250s", "timeWindows": [ { "startTime": "2023-01-13T17:30:00Z", "softEndTime": "2023-01-13T18:00:00Z", "costPerHourAfterSoftEndTime": 2.0 } ] } ], "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 } ] } }
উত্তরের উদাহরণ
উত্তরে দেখানো হয়েছে যে অপ্টিমাইজার এখন তিনটি শিপমেন্টই শিডিউল করে। এটি shipment[1]-এর ডেলিভারি ২১:০০
softStartTime-এর থেকে অনেক আগে
শিডিউল করে। এটি সবচেয়ে সাশ্রয়ী সমাধান কারণ সফট টাইম উইন্ডো লঙ্ঘন করার খরচ
শিপমেন্ট বাদ দেওয়ার penaltyCost-এর চেয়ে কম এবং
টাইম উইন্ডো চলাকালীন ডেলিভারি করার জন্য কোনও গাড়িকে অপেক্ষা করানোর খরচের চেয়েও কম।
হার্ড ও সফট টাইম উইন্ডো সহ উদাহরণ অনুরোধের উত্তর দেখুন
{ "routes": [ { "vehicleStartTime": "2023-01-13T17:48:35Z", "vehicleEndTime": "2023-01-13T18:24:28Z", "visits": [ { "isPickup": true, "startTime": "2023-01-13T17:48:35Z", "detour": "0s" }, { "shipmentIndex": 1, "isPickup": true, "startTime": "2023-01-13T17:51:05Z", "detour": "150s" }, { "shipmentIndex": 2, "isPickup": true, "startTime": "2023-01-13T17:53:35Z", "detour": "300s" }, { "startTime": "2023-01-13T18:00:00Z", "detour": "300s" }, { "shipmentIndex": 1, "startTime": "2023-01-13T18:07:42Z", "detour": "493s" }, { "shipmentIndex": 2, "startTime": "2023-01-13T18:17:27Z", "detour": "873s" } ], "transitions": [ { "travelDuration": "0s", "waitDuration": "0s", "totalDuration": "0s", "startTime": "2023-01-13T17:48:35Z" }, { "travelDuration": "0s", "waitDuration": "0s", "totalDuration": "0s", "startTime": "2023-01-13T17:51:05Z" }, { "travelDuration": "0s", "waitDuration": "0s", "totalDuration": "0s", "startTime": "2023-01-13T17:53:35Z" }, { "travelDuration": "235s", "travelDistanceMeters": 795, "waitDuration": "0s", "totalDuration": "235s", "startTime": "2023-01-13T17:56:05Z" }, { "travelDuration": "212s", "travelDistanceMeters": 791, "waitDuration": "0s", "totalDuration": "212s", "startTime": "2023-01-13T18:04:10Z" }, { "travelDuration": "335s", "travelDistanceMeters": 1204, "waitDuration": "0s", "totalDuration": "335s", "startTime": "2023-01-13T18:11:52Z" }, { "travelDuration": "171s", "travelDistanceMeters": 665, "waitDuration": "0s", "totalDuration": "171s", "startTime": "2023-01-13T18:21:37Z" } ], "metrics": { "performedShipmentCount": 3, "travelDuration": "953s", "waitDuration": "0s", "delayDuration": "0s", "breakDuration": "0s", "visitDuration": "1200s", "totalDuration": "2153s", "travelDistanceMeters": 3455 }, "routeCosts": { "model.shipments.deliveries.time_windows.cost_per_hour_after_soft_end_time": 0.58166666666666667, "model.shipments.deliveries.time_windows.cost_per_hour_before_soft_start_time": 5.7433333333333332, "model.vehicles.cost_per_hour": 23.922222222222221, "model.vehicles.cost_per_kilometer": 34.55 }, "routeTotalCost": 64.797222222222217 } ], "metrics": { "aggregatedRouteMetrics": { "performedShipmentCount": 3, "travelDuration": "953s", "waitDuration": "0s", "delayDuration": "0s", "breakDuration": "0s", "visitDuration": "1200s", "totalDuration": "2153s", "travelDistanceMeters": 3455 }, "usedVehicleCount": 1, "earliestVehicleStartTime": "2023-01-13T17:48:35Z", "latestVehicleEndTime": "2023-01-13T18:24:28Z", "totalCost": 64.797222222222217, "costs": { "model.vehicles.cost_per_kilometer": 34.55, "model.shipments.deliveries.time_windows.cost_per_hour_before_soft_start_time": 5.7433333333333332, "model.shipments.deliveries.time_windows.cost_per_hour_after_soft_end_time": 0.58166666666666667, "model.vehicles.cost_per_hour": 23.922222222222221 } } }
সফ্ট টাইম উইন্ডো আরও ভালো সমাধান প্রদান করে, যা নিম্নলিখিত উন্নতিতে প্রতিফলিত হয়:
- কোনওটি বাদ না দিয়ে ৩টি শিপমেন্টই শিডিউল করা হয়েছে।
totalCostএখন ৬৪.৭৯, যা আগের সমাধানের খরচ ৮১.২৮-এর থেকে কম।routeCostsঅবজেক্টেshipment[1]-এর ডেলিভারির জন্য ৫.৭৪ খরচ অন্তর্ভুক্ত আছে যা এরsoftStartTime-এর প্রায় ৩ ঘণ্টা আগে। এই খরচ ২০.০-এরpenaltyCost-এর থেকে কম, তাই এটি সবচেয়ে সাশ্রয়ী বিকল্প।