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

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

রুট অপ্টিমাইজেশন 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 হল VisitRequest from Shipment.pickups অথবা Shipment.deliveries এর শূন্য-ভিত্তিক সূচক যা 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 খরচ হবে তা নির্দিষ্ট করে না। নির্দিষ্ট সীমাবদ্ধতার অধীনে যদি তাদের কর্মক্ষমতা সম্ভব না হয় তবে বাধ্যতামূলক শিপমেন্ট এখনও বাদ দেওয়া যেতে পারে। খরচ সম্পর্কে আরও পড়ুন Cost Model Parameters -এ।

অতিরিক্ত মেট্রিক্স AggregatedMetrics বার্তা ( REST , gRPC ) হিসাবে রিপোর্ট করা হয়। AggregatedMetrics বার্তার ধরণটি Metrics.aggregatedRouteMetrics সম্পত্তির জন্য এবং ShipmentRoute.metrics সম্পত্তির জন্য Metrics.aggregatedRouteMetricsOptimizeToursResponse এ সমস্ত 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
    }
  }
}