প্রতিক্রিয়া ব্যাখ্যা

রুট অপ্টিমাইজেশান API সংশ্লিষ্ট অনুরোধে যানবাহনের জন্য রুট ফেরত দেয়। শিপমেন্টগুলি যানবাহনের জন্য বরাদ্দ করা হয়, বা অনুরোধের বৈশিষ্ট্যের উপর নির্ভর করে এড়িয়ে যেতে পারে।

একটি OptimizeToursResponse মেসেজ ( REST , gRPC ) এর দুটি প্রধান শীর্ষ-স্তরের বৈশিষ্ট্য রয়েছে:

  • routes[] হল প্রতিটি গাড়ির জন্য নির্ধারিত শিপমেন্টের রুট। প্রতিটি Route সেই স্বতন্ত্র রুটের বৈশিষ্ট্যগুলি প্রতিফলিত করে এমন মেট্রিক রয়েছে৷
  • metrics হল সমস্ত যানবাহন এবং রুট প্ল্যান জুড়ে সমগ্র প্রতিক্রিয়ার জন্য একত্রিত মেট্রিক। শীর্ষ-স্তরের মেট্রিক্সে সমস্ত রুট জুড়ে একত্রিত মান সহ, প্রতি-রুট মেট্রিক্সের মতো একই বৈশিষ্ট্য রয়েছে।

কিছু বৈশিষ্ট্য সর্বদা অপ্টিমাইজেশান ফলাফলের উপর নির্ভর করে জনবহুল নাও হতে পারে:

  1. skippedShipments[] কোনো যানবাহন দ্বারা সঞ্চালিত হয় না যে চালান তালিকা. একটি চালান বাদ দেওয়া যেতে পারে যদি এটি নির্দিষ্ট সীমাবদ্ধতার মধ্যে সঞ্চালিত না হয় বা চালানটি সম্পাদনের খরচ তার জরিমানা খরচ অতিক্রম করে। উদাহরণস্বরূপ, যদি একটি শিপমেন্টের পিকআপ বা ডেলিভারির timeWindow খুব সংকীর্ণ হয় তবে এটি সম্ভব নাও হতে পারে বা প্রয়োজনীয় সময় উইন্ডোতে একটি যানবাহনের জন্য পরিদর্শন করা সাশ্রয়ী হতে পারে।
  2. validationErrors[] এমন ত্রুটিগুলি নির্দিষ্ট করে যা অনুরোধটিকে অবৈধ বা সমাধান করা অসম্ভব করে তোলে যখন অনুরোধের solvingMode VALIDATE_ONLY এ সেট করা হয়। সাধারণ DEFAULT_SOLVE মোডে, বৈধতা ত্রুটিগুলি প্রতিক্রিয়া বডির পরিবর্তে একটি ত্রুটি বার্তায় প্রদর্শিত হবে৷ মনে রাখবেন যে VALIDATE_ONLY সমাধান মোড একবারে একাধিক ত্রুটি রিপোর্ট করতে পারে, যা অনুরোধগুলি দ্রুত ডিবাগ করার জন্য দরকারী৷

রুট বৈশিষ্ট্য

প্রতিটি routes[] এন্ট্রি একটি ShipmentRoute বার্তা ( REST , gRPC )। প্রতিটি ShipmentRoute অনুরোধ থেকে একটি নির্দিষ্ট গাড়ির জন্য রুট অ্যাসাইনমেন্ট প্রতিনিধিত্ব করে। এর সংশ্লিষ্ট Vehicle সাথে সম্পর্কিত গুরুত্বপূর্ণ ShipmentRoute বৈশিষ্ট্যগুলির মধ্যে রয়েছে:

  • vehicleIndex হল সংশ্লিষ্ট অনুরোধ বার্তায় Vehicle শূন্য-ভিত্তিক সূচক। মান শূন্য হলে REST প্রতিক্রিয়াগুলি এই বৈশিষ্ট্যটি বাদ দেয়।
  • vehicleStartTime হল সেই সময় যখন গাড়িটিকে তার রুট শুরু করতে হবে।
  • vehicleEndTime হল সেই সময় যখন গাড়িটি তার রুট শেষ করবে বলে আশা করা হয়।

একটি প্রতিক্রিয়াতে, routes এর মতো দেখাবে:

{
  "routes": [
    {
      "vehicleStartTime": "2024-02-13T00:00:00Z",
      "vehicleEndTime": "2024-02-13T00:38:42Z",
      "visits": [
        ...
      ],
      "transitions": [
        ...
      ],
      "metrics": {
        ...
      },
      ...
    }
  ],
  ...
}

প্রতিটি ShipmentRoute visits একটি অর্ডার করা তালিকা রয়েছে যা গাড়িটি সম্পূর্ণ করবে। প্রতিটি Visit ( REST , gRPC ) সংশ্লিষ্ট অনুরোধ থেকে একটি VisitRequest ( REST , gRPC ) প্রতিনিধিত্ব করে। গুরুত্বপূর্ণ Visit বৈশিষ্ট্য অন্তর্ভুক্ত:

  • shipmentIndex হল শিপমেন্টের শূন্য-ভিত্তিক সূচক যা এই ভিজিটটি সংশ্লিষ্ট অনুরোধের অন্তর্গত।
  • isPickup সত্য হয় যখন একটি ভিজিট একটি পিকআপ হয় এবং মিথ্যা হয় যখন একটি ভিজিট একটি ডেলিভারি হয়। REST প্রতিক্রিয়া এই সম্পত্তি বাদ দেয় যখন মান মিথ্যা হয়।
  • visitRequestIndex হল Shipment.pickups বা Shipment.deliveries থেকে VisitRequest এর শূন্য-ভিত্তিক সূচক যা Visit প্রতিনিধিত্ব করে। মান শূন্য হলে REST প্রতিক্রিয়াগুলি এই বৈশিষ্ট্যটি বাদ দেয়।
  • startTime হল সেই সময় যা ভিজিট শুরু হবে বলে আশা করা হচ্ছে।
  • loadDemands ম্যাপ লোড টাইপ লোড পরিমাণ Visit সম্পূর্ণ করার জন্য দাবি করা হয়েছে। ডেলিভারি ভিজিটের জন্য লোডের পরিমাণ নেতিবাচক, যা গাড়ি থেকে লোড সরিয়ে ফেলার প্রতিনিধিত্ব করে।

একটি উদাহরণ Visit এর মত দেখাচ্ছে:

{
  "routes": [
    {
      ...
      "visits": [
        {
          "isPickup": true,
          "startTime": "2024-02-13T00:00:00Z",
          "detour": "0s"
        },
        ...
      ],
    },
    ...
  ],
  ...
}

প্রতিটি ShipmentRoute transitions একটি অর্ডার করা তালিকা অন্তর্ভুক্ত থাকে যা একটি প্রদত্ত গাড়ির visits মধ্যে ভ্রমণের প্রতিনিধিত্ব করে। গুরুত্বপূর্ণ Transition বার্তা ( REST , gRPC ) বৈশিষ্ট্যগুলির মধ্যে রয়েছে:

  • startTime হল সেই সময় যেখানে গাড়িটি ট্রানজিশন করতে শুরু করবে।
  • travelDuration হল সেই সময়কাল যার জন্য গাড়িটিকে ট্রানজিশন সম্পূর্ণ করতে যেতে হবে।
  • travelDistanceMeters হল মিটারে সেই দূরত্ব যা যানবাহনকে স্থানান্তর সম্পূর্ণ করতে যেতে হবে।
  • trafficInfoUnavailable নির্দেশ করে যে ট্রাফিক ডেটা স্থানান্তরের জন্য উপলব্ধ কিনা।
  • waitDuration অলস সময়কে প্রতিনিধিত্ব করে যা গাড়িটি তার পরবর্তী Visit শুরু করার আগে অপেক্ষা করে। নিম্নলিখিত Visit start_time কারণে এটি খরচ হতে পারে।
  • totalDuration হল স্থানান্তরের মোট সময়কাল, যার মধ্যে ভ্রমণ, অপেক্ষা, বিরতি এবং বিলম্বের সময় রয়েছে।
  • vehicleLoads লোড ম্যাপ লোড টাইপ থেকে লোড পরিমাণ এই ট্রানজিশনের সময় গাড়ির দ্বারা বহন করা হয়।

একটি উদাহরণ Transition এর মত দেখাচ্ছে:

{
  "routes": [
    {
      ...
      "transitions": [
        ...
        {
          "travelDuration": "1171s",
          "travelDistanceMeters": 9004,
          "waitDuration": "0s",
          "totalDuration": "1171s",
          "startTime": "2024-02-13T00:00:00Z"
        },
        ...
      ],
      ...
    }
  ],
  ...
}

vists এবং transitions মধ্যে সম্পর্ক সম্পর্কে আরও তথ্যের জন্য, পিকআপ এবং ডেলিভারি স্টপ অর্ডার অপ্টিমাইজেশান এবং ShipmentRoute রেফারেন্স ডকুমেন্টেশন ( REST , gRPC ) দেখুন। একটি Transition বার্তার routePolyline এবং routeToken বৈশিষ্ট্য সম্পর্কে আরও তথ্যের জন্য, ট্রানজিশন পলিলাইন এবং রুট টোকেনগুলি দেখুন।

মেট্রিক্স বৈশিষ্ট্য

Metrics বার্তা ( REST , gRPC ) সমগ্র সমাধানের সংক্ষিপ্ত বিবরণ দেয়। কিছু গুরুত্বপূর্ণ Metrics বৈশিষ্ট্য অন্তর্ভুক্ত:

  • totalCost হল রুটগুলি সম্পূর্ণ করার জন্য মোট খরচ। খরচ মডেল প্যারামিটারে খরচ সম্পর্কে আরও পড়ুন।
  • usedVehicleCount হল সমাধানে ব্যবহৃত মোট যানবাহনের সংখ্যা। যানবাহনগুলির খালি রুট থাকতে পারে যখন অপ্টিমাইজার নির্ধারণ করে যে তাদের ব্যবহার অপ্রয়োজনীয়৷
  • skippedMandatoryShipmentCount হল এড়িয়ে যাওয়া শিপমেন্টের সংখ্যা যা "বাধ্যতামূলক"। একটি বাধ্যতামূলক চালান একটি penaltyCost নির্দিষ্ট করে না যে চালানটি এড়িয়ে গেলে খরচ হয়৷ যদি নির্দিষ্ট সীমাবদ্ধতার অধীনে তাদের কর্মক্ষমতা সম্ভব না হয় তবে বাধ্যতামূলক চালানগুলি এখনও এড়ানো যেতে পারে। খরচ মডেল প্যারামিটারে খরচ সম্পর্কে আরও পড়ুন।

অতিরিক্ত মেট্রিক্স AggregatedMetrics বার্তা ( REST , gRPC ) হিসাবে রিপোর্ট করা হয়। AggregatedMetrics বার্তার ধরনটি Metrics.aggregatedRouteMetrics প্রপার্টির জন্য এবং ShipmentRoute.metrics প্রপার্টির জন্য ব্যবহৃত হয় Metrics.aggregatedRouteMetrics OptimizeToursResponse এ সমস্ত ShipmentRoute গুলি জুড়ে একত্রিত মেট্রিক রয়েছে। প্রতিটি ShipmentRoute.metrics প্রপার্টিতে সেই নির্দিষ্ট ShipmentRoute এর মেট্রিক্স থাকে।

গুরুত্বপূর্ণ AggregatedMetrics বৈশিষ্ট্য অন্তর্ভুক্ত:

  • performedShipmentCount হল তাদের সমগ্র রুটে যানবাহন দ্বারা সম্পাদিত চালানের সংখ্যা।
  • travelDuration হল যানবাহনগুলি তাদের রুটগুলি সম্পূর্ণ করার সময় ট্রানজিটে ব্যয় করা মোট সময়।
  • waitDuration হল মোট সময় যা যানবাহন তাদের রুট সম্পূর্ণ করার সময় অপেক্ষা করে।
  • delayDuration হল যানবাহনের মোট বিলম্বের সময়। এটি সাধারণত শূন্য হয় যদি না অনুরোধে TransitionAttributes ব্যবহার করা হয়।
  • breakDuration হল মোট সময় যা যানবাহন তাদের রুট সম্পূর্ণ করার সময় বিরতিতে ব্যয় করে।
  • visitDuration হল মোট সময় যা যানবাহনগুলি তাদের রুটগুলি সম্পূর্ণ করার সময় পরিদর্শন করতে ব্যয় করে৷ এটি কার্যকরভাবে সমস্ত VisitRequest.duration মানগুলির যোগফল যা VisitRequest এর জন্য প্রযোজ্য গাড়ির জন্য নির্ধারিত Visit সাথে সম্পর্কিত।
  • totalDuration হল যানবাহনের রুট সম্পূর্ণ করতে মোট সময়কাল।
  • travelDistanceMeters হল মোট দূরত্ব যা যানবাহন তাদের রুট সম্পূর্ণ করার সময় ভ্রমণ করে।
  • maxLoads ম্যাপ লোডের ধরনগুলিকে তাদের রুটে যেকোন সময়ে যানবাহনের দ্বারা বাহিত সর্বাধিক লোড পরিমাণে।

একটি উদাহরণ Metrics বার্তা এর মত দেখাচ্ছে:

{
  "routes": [
    ...
  ],
  "metrics": {
    "aggregatedRouteMetrics": {
      "performedShipmentCount": 1,
      "travelDuration": "2322s",
      "waitDuration": "0s",
      "delayDuration": "0s",
      "breakDuration": "0s",
      "visitDuration": "0s",
      "totalDuration": "2322s",
      "travelDistanceMeters": 18603
    },
    "usedVehicleCount": 1,
    "earliestVehicleStartTime": "2024-02-13T00:00:00Z",
    "latestVehicleEndTime": "2024-02-13T00:38:42Z",
    "totalCost": 18.603,
    "costs": {
      "model.vehicles.cost_per_kilometer": 18.603
    }
  }
}

সম্পূর্ণ উদাহরণ

কনস্ট্রাক্ট এ রিকোয়েস্ট থেকে অনুরোধের জন্য একটি সম্পূর্ণ উদাহরণের প্রতিক্রিয়া দেখতে এরকম দেখাচ্ছে:

{
  "routes": [
    {
      "vehicleStartTime": "2024-02-13T00:00:00Z",
      "vehicleEndTime": "2024-02-13T00:38:42Z",
      "visits": [
        {
          "isPickup": true,
          "startTime": "2024-02-13T00:00:00Z",
          "detour": "0s"
        },
        {
          "startTime": "2024-02-13T00:19:31Z",
          "detour": "0s"
        }
      ],
      "transitions": [
        {
          "travelDuration": "0s",
          "waitDuration": "0s",
          "totalDuration": "0s",
          "startTime": "2024-02-13T00:00:00Z"
        },
        {
          "travelDuration": "1171s",
          "travelDistanceMeters": 9004,
          "waitDuration": "0s",
          "totalDuration": "1171s",
          "startTime": "2024-02-13T00:00:00Z"
        },
        {
          "travelDuration": "1151s",
          "travelDistanceMeters": 9599,
          "waitDuration": "0s",
          "totalDuration": "1151s",
          "startTime": "2024-02-13T00:19:31Z"
        }
      ],
      "metrics": {
        "performedShipmentCount": 1,
        "travelDuration": "2322s",
        "waitDuration": "0s",
        "delayDuration": "0s",
        "breakDuration": "0s",
        "visitDuration": "0s",
        "totalDuration": "2322s",
        "travelDistanceMeters": 18603
      },
      "routeCosts": {
        "model.vehicles.cost_per_kilometer": 18.603
      },
      "routeTotalCost": 18.603
    }
  ],
  "metrics": {
    "aggregatedRouteMetrics": {
      "performedShipmentCount": 1,
      "travelDuration": "2322s",
      "waitDuration": "0s",
      "delayDuration": "0s",
      "breakDuration": "0s",
      "visitDuration": "0s",
      "totalDuration": "2322s",
      "travelDistanceMeters": 18603
    },
    "usedVehicleCount": 1,
    "earliestVehicleStartTime": "2024-02-13T00:00:00Z",
    "latestVehicleEndTime": "2024-02-13T00:38:42Z",
    "totalCost": 18.603,
    "costs": {
      "model.vehicles.cost_per_kilometer": 18.603
    }
  }
}