এই উদাহরণে দেখানো হয়েছে, কীভাবে timeWindows ব্যবহার করে চালানের জন্য পিকআপ ও ডেলিভারির সময় নির্ধারণ করতে হয়।
একটি সম্পূর্ণ ধারণাগত রূপরেখা পেতে এবং timeWindows ব্যবহারের আরও উপায় জানতে, Time windows মূল ধারণা সংক্রান্ত নথিটি দেখুন।
দৃশ্যকল্প ১: নির্দিষ্ট সময়সীমার মধ্যে সরবরাহ করা
নিম্নলিখিত উদাহরণটি এমন একটি পরিস্থিতি তুলে ধরে যেখানে একটিমাত্র যানবাহনকে তার নির্দিষ্ট timeWindows মধ্যে তিনটি চালান সরবরাহ করতে হবে।
উদাহরণ অনুরোধ
এই অনুরোধটিতে তিনটি চালান অন্তর্ভুক্ত রয়েছে, যার প্রতিটির ডেলিভারির TimeWindow ভিন্ন।
-
shipments[0]ডেলিভারির সময়সীমা: ১৮:০০ - ১৯:০০ -
shipments[1]বিতরণের সময়সীমা: 18:00 - 18:30 -
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]ডেলিভারির বর্তমান সময়সীমা: 21:00 - 21:30
এমন একটি অনুরোধের উদাহরণ দেখুন যেখানে সময়সীমাগুলো পূরণ করা সম্ভব নয়।
{ "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 20.0 এর চেয়ে বেশি।
উদাহরণ অনুরোধের প্রতিক্রিয়া দেখুন যেখানে সময়সীমার মধ্যে একটি চালান বাদ দেওয়া হয়।
{ "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 যুক্ত শিপমেন্টটি সম্পন্ন করা হয়নি, যা নিম্নলিখিত কস্ট প্যারামিটারগুলোকে প্রভাবিত করে:
- ঐ চালানটির
penaltyCost) ২০.০metrics.costsএর মধ্যে অন্তর্ভুক্ত করা হয়েছে। -
totalCost(81.28) হলrouteTotalCostমোট খরচ (61.28) এবংpenalty_cost(20.0) এর যোগফল।
দৃশ্যকল্প ৩: সফট টাইম উইন্ডো ব্যবহার করা
নিম্নলিখিত উদাহরণটি দেখায় কিভাবে একটি সফট টাইম উইন্ডো ব্যবহার করতে হয়, যা অপটিমাইজারকে নির্দিষ্ট সময়সীমার বাইরে ডেলিভারি নির্ধারণ করার সুযোগ দেয়, তবে তার জন্য মূল্য পরিশোধ করতে হয়।
এই বৈশিষ্ট্যটির একটি ধারণাগত রূপরেখার জন্য, 'Time Windows key concepts' ডকুমেন্টের ' soft time windows' অংশটি দেখুন।
উদাহরণ অনুরোধ
এই অনুরোধটি shipment[1] কে একটি নমনীয় সময়সীমায় পরিবর্তন করে পূর্ববর্তী দৃশ্যকল্পকে সংশোধন করে। এটি softStartTime ব্যবহার করে এবং costPerHourBeforeSoftStartTime প্রদান করে করা হয়।
shipment[1] এখন softStartTime হল 21:00 এবং costPerHourBeforeSoftStartTime হল 2.0। এর মানে হল 21:00 এর আগে ডেলিভারি করা হলে প্রতি ঘন্টার জন্য জরিমানা আরোপ করা হবে।
হার্ড এবং সফট টাইম উইন্ডো সহ একটি অনুরোধের উদাহরণ দেখুন
{ "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] -এর ডেলিভারি তার 21:00 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অবজেক্টে `softStartTimeএর প্রায় 3 ঘন্টা আগেshipment[1]ডেলিভারি করার জন্য 5.74 খরচ অন্তর্ভুক্ত রয়েছে। এই খরচটিpenaltyCost20.0-এর চেয়ে কম, যা এটিকে সবচেয়ে সাশ্রয়ী বিকল্প করে তোলে।