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

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

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

উদাহরণের প্রতিক্রিয়ায়, গাড়ির শুরু এবং শেষ সময় যথাক্রমে ১৭:৩৫:৫০ এবং ১৮:১৭:২৪। এই সময়গুলি অপ্টিমাইজারকে প্রতি ঘন্টায় costPerHour হিসাবে অনুরোধে উল্লেখিত গাড়িটি চালানোর জন্য প্রয়োজনীয় সময় কমিয়ে আনার প্রতিফলন করে এবং সর্বকালের সীমাবদ্ধতা পূরণ করে। ১৭:৩৫:৫০ কে শুরুর সময় হিসাবে ব্যবহার করলে গাড়িটিকে পরিদর্শনের সময় উইন্ডো শুরু না হওয়া পর্যন্ত কোনও পরিদর্শন স্থানে অপেক্ষা করার প্রয়োজন হয় না। প্রতিক্রিয়ায় এটি শূন্য 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] ১৭:৫০ এ বিতরণ করা হয়
  2. shipments[1] ১৮:০০ এ বিতরণ করা হয়
  3. shipments[0] ১৮:০৭ এ ডেলিভারি করা হয়

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

যদি আপনি shipment[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
      }
    ]
  }
}
    

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

{
  "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 সেট করে নরম করা হয়।

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

  • কঠিন সময়: গ্রাহকের ব্যবসার সময় নির্দেশ করে, যেমন সকাল ৯টা থেকে বিকাল ৫টা পর্যন্ত।
  • সফট টাইম উইন্ডো: গ্রাহকের কাছে পাঠানো বিজ্ঞপ্তির সাথে মেলে এমন ডেলিভারি বা পিকআপের সময়সীমা নির্দেশ করে, যেমন সকাল ৯টা থেকে দুপুর ১টা।

এই উদাহরণে, যে চালানটি আগে এড়িয়ে গিয়েছিল কারণ এর সময়সীমা অনেক দেরিতে শুরু হয়েছিল, তার শুরুর সময়ের সীমাবদ্ধতা নরম করা হয়েছে। অন্যান্য চালানের সময়সীমাও নরম করা হয়েছে।

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

{
  "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 : ৮১.২৮৩ থেকে কমে ৬৪.৭৯৭ হয়েছে
  • মোট সম্পন্ন চালান: ২ থেকে ৩ এ বৃদ্ধি পেয়েছে

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

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

  • costPerHourBeforeSoftStartTime 2.0 এবং
  • প্রকৃত ডেলিভারি এবং সময়সীমা শুরু হওয়ার মধ্যে সময়: ২.৮৩৫৮৩ ঘন্টা

ফলাফল:

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

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