পিকআপ এবং ডেলিভারি সময় উইন্ডো সীমাবদ্ধতা

OptimizeToursRequest নিম্নলিখিত জুড়ে সীমাবদ্ধতা প্রয়োগ করে:

  • চালান, কিভাবে চালান সঞ্চালিত হয় প্রভাবিত করে
  • যানবাহন, কিভাবে যানবাহনের রুট গণনা করা হয় তা প্রভাবিত করে
  • বিশ্বব্যাপী, যানবাহন এবং চালান উভয়কেই প্রভাবিত করে।

এই নির্দেশিকা একটি অপরিহার্য চালানের সীমাবদ্ধতার উপর দৃষ্টি নিবদ্ধ করে: সময় উইন্ডোজ

টাইম উইন্ডো হল এক ধরনের সীমাবদ্ধতা যা আপনি OptimizeToursRequest মেসেজে ( REST , gRPC ) সরবরাহ করেন যাতে শিপমেন্ট কার্যক্রমের সময়-ভিত্তিক সীমা নির্দিষ্ট করা যায়। এই ধরনের সীমাবদ্ধতা কখন এবং কীভাবে চালান সঞ্চালিত হতে পারে সেইসাথে চালানের জন্য গাড়ির নিয়োগ উভয়কেই প্রভাবিত করে। এই সীমাবদ্ধতার সাথে, অপ্টিমাইজার সেই যানবাহনগুলিকে অগ্রাধিকার দেয় যেগুলি চালানের সময়ের সীমাবদ্ধতাগুলিকে সর্বোত্তমভাবে সন্তুষ্ট করতে পারে৷

চালানের সীমাবদ্ধতা: সময় জানালা

আপনি Shipment.VisitRequest কখন পিকআপ বা ডেলিভারি ঘটতে পারে তা উল্লেখ করুন। ভিজিটরিকোয়েস্ট বার্তাটি নিম্নরূপ:

  • বার্তায় timeWindows প্রপার্টি ব্যবহার করুন ( REST , gRPC )
  • TimeWindow বার্তায় শুরু এবং শেষের সময় উল্লেখ করুন ( REST , gRPC )।

সময় উইন্ডো সীমাবদ্ধতা সহ উদাহরণ অনুরোধ

এখানে উদাহরণটি তিনটি ভিন্ন চালানকে চিত্রিত করে, প্রতিটি তাদের নিজস্ব ডেলিভারি উইন্ডো সহ। সরলতার জন্য, এই উদাহরণটি শুধুমাত্র deliveries সময় উইন্ডো সেট করে, কিন্তু পিকআপের ক্ষেত্রেও টাইম উইন্ডো প্রয়োগ করা যেতে পারে। একাধিক সময়ের উইন্ডো নির্দিষ্ট করা যেতে পারে, যদিও এই উদাহরণটি শুধুমাত্র প্রতি ডেলিভারি VisitRequest ব্যবহার করে।

সময় উইন্ডো সহ একটি উদাহরণ অনুরোধ দেখুন

{
  "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
      }
    ]
  }
}
    

সময় উইন্ডো সীমাবদ্ধতা সহ উদাহরণ প্রতিক্রিয়া

উদাহরণের প্রতিক্রিয়াতে, গাড়ির শুরু এবং শেষের সময় যথাক্রমে 17:35:50 এবং 18:17:24। এই সময়গুলি অপ্টিমাইজারকে প্রতিফলিত করে যা অনুরোধে নির্দিষ্ট গাড়ি চালানোর জন্য প্রয়োজনীয় সময়কে কম করে costPerHour হিসাবে সন্তুষ্ট করে এবং সর্বকালের উইন্ডোর সীমাবদ্ধতাগুলিকে সন্তুষ্ট করে। স্টার্ট টাইম হিসাবে 17:35:50 ব্যবহার করলে ভিজিট লোকেশনে ভিজিট করার সময় উইন্ডো শুরু না হওয়া পর্যন্ত গাড়ির অপেক্ষা করার প্রয়োজনীয়তা দূর হয়। এটি প্রতিক্রিয়াতে শূন্য waitDuration মান হিসাবে উপস্থিত হয়।

সময় উইন্ডোর সাথে উদাহরণ অনুরোধের একটি প্রতিক্রিয়া দেখুন

{
  "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
    }
  }
}
    

টাইম উইন্ডোজ গাড়ির visits অর্ডার করেছে যাতে প্রথম দিকের জানালা সহ চালানগুলি প্রথমে বিতরণ করা হয়।

  1. shipments[2] 17:50 এ বিতরণ করা হয়
  2. shipments[1] 18:00 এ বিতরণ করা হয়
  3. shipments[0] 18:07 এ বিতরণ করা হয়

উদাহরণ অনুরোধটি কঠিন সময় উইন্ডো সীমাবদ্ধতা নির্দিষ্ট করে, সেই উইন্ডোগুলির মধ্যে ডেলিভারিগুলি সম্পন্ন করা প্রয়োজন। যদি কোনো শিপমেন্টের VisitRequests তার যেকোনো সময়ের মধ্যে সম্পন্ন করা সম্ভবপর না হয় বা সাশ্রয়ী না হয়, তাহলে অপ্টিমাইজার চালানটি এড়িয়ে যায়। যদি চালানের একটি penaltyCost থাকে, অপ্টিমাইজার এটি প্রতিক্রিয়া metrics রিপোর্ট করা খরচের সাথে যোগ করে। অন্যথায়, OptimizeToursResponse মেসেজের ( REST , gRPC ) skippedMandatoryShipmentCount প্রপার্টি বেড়ে যায়।

আপনি যদি shipment[1] -এর উইন্ডোকে বেশ কয়েক ঘণ্টা পরে (18:00 থেকে 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",
                "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
      }
    ]
  }
}
    

সময় উইন্ডোর সাথে দ্বিতীয় উদাহরণের অনুরোধের একটি প্রতিক্রিয়া দেখুন, যেখানে একটি চালান বাদ দেওয়া হয়েছে৷

{
  "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
    }
  }
}
    

এই উদাহরণে, পরবর্তী সময়ের উইন্ডো shipment[1] এড়িয়ে যাওয়ার কারণ করেছে, কারণ অতিরিক্ত যানবাহন পরিচালনার সময় শিপমেন্টের ডেলিভারিটি তার নির্দিষ্ট সময়ের মধ্যে সম্পন্ন করার জন্য চালানের পেনাল্টি খরচকে অতিক্রম করেছে। shipment[1] metrics.costs এ প্রদর্শিত হয় এবং এর সূচকটি skippedShipments প্রদর্শিত হয়।

নরম সময় উইন্ডো সীমাবদ্ধতা

কস্ট মডেল প্যারামিটারে সংক্ষেপে উল্লেখ করা হয়েছে, টাইম উইন্ডো নরম সীমাবদ্ধতা হিসাবে প্রয়োগ করা যেতে পারে। নরম সীমাবদ্ধতাগুলি নিম্নরূপ কঠোর সীমাবদ্ধতা থেকে পৃথক:

  • কঠিন সীমাবদ্ধতা : লঙ্ঘন করা যাবে না, এবং অপ্টিমাইজার এমন একটি সমাধান অফার করে না যা সীমাবদ্ধতা লঙ্ঘন করে, এমনকি যদি এর অর্থ একটি চালান এড়িয়ে যাওয়া হয়।
  • নরম সীমাবদ্ধতা : লঙ্ঘন হতে পারে, যার অর্থ হল অপ্টিমাইজার এমন একটি সমাধান প্রদান করতে পারে যা একটি নরম সীমাবদ্ধতা লঙ্ঘন করে৷ যাইহোক, অপ্টিমাইজার যেকোন লঙ্ঘনের জন্যও একটি খরচ প্রয়োগ করে। আপনি এই খরচটি টাইম উইন্ডোতে একটি অতিরিক্ত সম্পত্তি হিসাবে সরবরাহ করেন, সাধারণত ক্রিয়াকলাপটি ঘটে এমন সময় উইন্ডোর আগে বা পরে প্রতি ঘন্টার জন্য প্রতি ঘন্টার খরচ হিসাবে।

যথাক্রমে startTime বা endTime এর পরিবর্তে softStartTime বা softEndTime ব্যবহার করে এবং costPerHourBeforeSoftStartTime বা costPerHourAfterSoftEndTime সেট করে টাইম উইন্ডো নরম করা হয়।

একটি নির্দিষ্ট সময় উইন্ডোর মধ্যে পিকআপ বা ডেলিভারি হওয়া উচিত তখন নরম সময় উইন্ডো সীমাবদ্ধতা ব্যবহার করুন, কিন্তু সেই উইন্ডোর মধ্যে পিকআপ বা ডেলিভারি একেবারে প্রয়োজন হয় না। ব্যবসার উদ্দেশ্য প্রকাশ করতে আপনি হার্ড এবং নরম সময় উইন্ডো সীমাবদ্ধতা একসাথে ব্যবহার করতে পারেন। যেমন:

  • হার্ড টাইম উইন্ডো: একজন গ্রাহকের ব্যবসার সময় নির্দেশ করে, যেমন সকাল 9টা থেকে বিকাল 5টা পর্যন্ত।
  • সফ্ট টাইম উইন্ডো: ডেলিভারি বা পিকআপের সময়সীমা নির্দেশ করে যা গ্রাহককে পাঠানো বিজ্ঞপ্তির সাথে মেলে, যেমন সকাল 9 টা থেকে 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",
                "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
      }
    ]
  }
}
    

হার্ড এবং নরম সময় উইন্ডো সহ উদাহরণ অনুরোধের একটি প্রতিক্রিয়া দেখুন

{
  "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
    }
  }
}
    

যেখানে শুধুমাত্র হার্ড টাইম উইন্ডোর সীমাবদ্ধতার উদাহরণটি সম্পূর্ণভাবে shipment[1] , এর ডেলিভারি টাইম উইন্ডো নরম করার ফলে এটির টাইম উইন্ডো শুরু হওয়ার আগে ডেলিভারি করা হয়। একইভাবে, অন্যান্য চালানের শেষ সময় নরম করার ফলে shipment[2] এর টাইম উইন্ডো শেষ হওয়ার পরে ডেলিভারি করা যায়।

একই সময়ে, খরচ এবং মোট চালান উভয়ই পরিবর্তিত হয়েছে:

  • totalCost : 81.283 থেকে কমে 64.797 হয়েছে
  • মোট সম্পন্ন করা চালান: 2 থেকে 3 বৃদ্ধি পেয়েছে

অপ্টিমাইজার একটি কম ব্যয়বহুল সমাধান খুঁজে পেয়েছে কারণ পূর্ববর্তী উদাহরণের তুলনায় সময় উইন্ডোর সীমাবদ্ধতা শিথিল করা হয়েছে।

অবশেষে, metrics.costs প্রপার্টিতে সীমাবদ্ধতার পণ্যের উপর ভিত্তি করে এবং ডেলিভারি উইন্ডোটি মিস করা সময়ের দৈর্ঘ্যের উপর ভিত্তি করে প্রকৃত খরচ নির্দেশ করার জন্য একটি নতুন কী অন্তর্ভুক্ত রয়েছে। অর্থাৎ:

  • costPerHourBeforeSoftStartTime এর 2.0 এবং
  • প্রকৃত ডেলিভারি এবং টাইম উইন্ডোর শুরুর মধ্যে সময়: 2.83583 ঘন্টা

ফলাফল:

model.shipments.deliveries.time_windows.cost_per_hour_before_soft_start_time : 5.6716666666666669.

এই মেট্রিকগুলি আপনাকে কঠোর সীমাবদ্ধতা এবং নরম সীমাবদ্ধতার মধ্যে ট্রেডঅফ দেখতে খরচ বিশ্লেষণ করার অনুমতি দেয়, যা আপনি আপনার নির্দিষ্ট ব্যবসার নিয়মগুলিকে আরও ভালভাবে মানানসই করার জন্য আপনার সীমাবদ্ধতাগুলিকে সুর করতে ব্যবহার করতে পারেন। এই ক্ষেত্রে, মোট খরচ চালানের চেয়ে কম shipment[1].penalty_cost । অপ্টিমাইজার শনাক্ত করেছে যে চালানটি এড়িয়ে যাওয়ার চেয়ে তাড়াতাড়ি চালানটি সরবরাহ করা আরও সাশ্রয়ী