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

ইউরোপীয় অর্থনৈতিক অঞ্চল (EEA) ডেভেলপাররা

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

একটি 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 মান true হয় এবং যখন কোনো ভিজিট ডেলিভারি হয় তখন এর মান false হয়। REST রেসপন্সগুলো এই প্রপার্টির মান false হলে তা বাদ দিয়ে দেয়।
  • 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 হলো রুটগুলো সম্পন্ন করতে হওয়া মোট খরচ। খরচ সম্পর্কে আরও জানতে Cost Model Parameters পড়ুন।
  • usedVehicleCount হলো সলিউশনে ব্যবহৃত মোট গাড়ির সংখ্যা। অপটিমাইজার যখন নির্ধারণ করে যে কোনো গাড়ির ব্যবহার অপ্রয়োজনীয়, তখন সেটির রুট খালি থাকতে পারে।
  • skippedMandatoryShipmentCount হলো সেইসব বাতিলকৃত চালানের সংখ্যা যেগুলো "বাধ্যতামূলক"। একটি বাধ্যতামূলক চালান বাতিল করা হলে যে penaltyCost হয়, তা বাধ্যতামূলক চালানের ক্ষেত্রে নির্দিষ্ট করা থাকে না। নির্দিষ্ট সীমাবদ্ধতার অধীনে কোনো বাধ্যতামূলক চালান সম্পাদন করা সম্ভব না হলে, সেটিও বাতিল করা যেতে পারে। খরচ সম্পর্কে আরও জানতে Cost Model Parameters পড়ুন।

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

গুরুত্বপূর্ণ AggregatedMetrics বৈশিষ্ট্যগুলির মধ্যে রয়েছে:

  • performedShipmentCount হলো যানবাহনগুলো দ্বারা তাদের সম্পূর্ণ রুট জুড়ে সম্পন্ন করা চালানের সংখ্যা।
  • travelDuration হলো যানবাহনগুলোর তাদের নির্ধারিত পথ সম্পন্ন করতে যাতায়াতে ব্যয়িত মোট সময়।
  • waitDuration হলো যানবাহনগুলোর তাদের রুট সম্পন্ন করার সময় অপেক্ষারত মোট সময়।
  • delayDuration হলো যানবাহনগুলোর জন্য মোট বিলম্বের সময়। অনুরোধে TransitionAttributes ব্যবহার করা না হলে এর মান সাধারণত শূন্য হয়।
  • breakDuration হলো যানবাহনগুলো তাদের পথ সম্পূর্ণ করার সময় বিরতিতে যে মোট সময় ব্যয় করে।
  • visitDuration হলো যানবাহনগুলো তাদের রুট সম্পন্ন করার সময় পরিদর্শনে যে মোট সময় ব্যয় করে। এটি মূলত প্রযোজ্য যানবাহনের জন্য নির্ধারিত Visit সাথে সম্পর্কিত VisitRequest গুলোর সমস্ত VisitRequest.duration মানের সমষ্টি।
  • 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
    }
  }
}

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

Construct a Request থেকে করা অনুরোধের একটি সম্পূর্ণ নমুনা প্রতিক্রিয়া দেখতে এইরকম:

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