আপনার Route Optimization API রেসপন্স ব্যাখ্যা করুন... কুকুরের সাথে

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

প্রোডাকশনের জন্য নোট

সহজ করার জন্য, এই গাইড REST এবং JSON ব্যবহার করে। তবে, আপনার প্রোডাকশন এনভায়রনমেন্টের জন্য, সামগ্রিক সাজেশন হল, আরও ভাল পারফর্ম্যান্সের জন্য gRPC এবং ক্লায়েন্ট লাইব্রেরি ব্যবহার করা। আরও তথ্যের জন্য, Route Optimization API ক্লায়েন্ট লাইব্রেরি দেখুন।

আপনার প্রথম অনুরোধ করুন বিকল্পে গিয়ে অনুরোধ পাঠানোর পরে, অপ্টিমাইজার OptimizeToursResponse রিটার্ন করে। এই উত্তরটি হল আপনার ড্রাইভারের অনুসরণ করার জন্য রুটের প্ল্যান। এই নির্দেশিকা থেকে আপনি জানতে পারবেন যে কীভাবে এটি পড়তে হয়।

রুট প্ল্যানের সারসংক্ষেপ

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

  • ডে-কেয়ার সেন্টারে সকাল ৭:৫৫-এ শিফ্ট শুরু করুন।
  • সকাল ৮:২০-তে Coit Tower-এর কাছে বার্নিস মাউন্টেন ডগ পিক-আপ করো।
  • সকাল ৮:৫৮-এ সাউথ সানসেট প্লেগ্রাউন্ড পার্ক থেকে চিহুয়াহুয়াকে তুলে নিন।
  • সকাল ৯:২৪-এ ডে-কেয়ার সেন্টারে ফিরে আসুন এবং সকাল ৯:৩০-এ ড্রপ-অফ উইন্ডো খোলা পর্যন্ত অপেক্ষা করুন।
  • সকাল ৯টা ৩০ মিনিটে বার্নিজ মাউন্টেন কুকুরকে নামিয়ে দিতে হবে।
  • সকাল ৯:৩৫-এ চিহুয়াহুয়াকে নামিয়ে দাও।
  • সকাল ৯:৪০-এ শিফ্ট শেষ করুন।

রুট প্ল্যানের খরচ $১৪৭.২২, যার মধ্যে জার্মান শেফার্ডকে এড়িয়ে যাওয়ার জন্য $১০০ জরিমানা অন্তর্ভুক্ত।

আপনার ফলাফল চেক করতে, সম্পূর্ণ উদাহরণের উত্তরের সাথে আপনার উত্তর তুলনা করুন। আপনার ফলাফল কিছুটা আলাদা হতে পারে কারণ ভ্রমণের সময় ও দূরত্ব বর্তমান রাস্তার ডেটার উপর নির্ভর করে।

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

{
  "routes": [
    {
      "vehicleStartTime": "2024-02-13T15:55:04Z",
      "vehicleEndTime": "2024-02-13T17:40:00Z",
      "visits": [
        {
          "isPickup": true,
          "startTime": "2024-02-13T16:20:00Z",
          "detour": "0s",
          "shipmentLabel": "Bernese mountain dog",
          "visitType": "PICKUP_SHIPMENT"
        },
        {
          "shipmentIndex": 1,
          "isPickup": true,
          "startTime": "2024-02-13T16:58:12Z",
          "detour": "2600s",
          "shipmentLabel": "Chihuahua",
          "visitType": "PICKUP_SHIPMENT"
        },
        {
          "startTime": "2024-02-13T17:30:00Z",
          "detour": "2297s",
          "shipmentLabel": "Bernese mountain dog",
          "visitType": "DELIVER_SHIPMENT"
        },
        {
          "shipmentIndex": 1,
          "startTime": "2024-02-13T17:35:00Z",
          "detour": "656s",
          "shipmentLabel": "Chihuahua",
          "visitType": "DELIVER_SHIPMENT"
        }
      ],
      "transitions": [
        {
          "travelDuration": "1496s",
          "travelDistanceMeters": 7082,
          "waitDuration": "0s",
          "totalDuration": "1496s",
          "startTime": "2024-02-13T15:55:04Z"
        },
        {
          "travelDuration": "1992s",
          "travelDistanceMeters": 16589,
          "waitDuration": "0s",
          "totalDuration": "1992s",
          "startTime": "2024-02-13T16:25:00Z"
        },
        {
          "travelDuration": "1252s",
          "travelDistanceMeters": 7860,
          "waitDuration": "356s",
          "totalDuration": "1608s",
          "startTime": "2024-02-13T17:03:12Z"
        },
        {
          "travelDuration": "0s",
          "waitDuration": "0s",
          "totalDuration": "0s",
          "startTime": "2024-02-13T17:35:00Z"
        },
        {
          "travelDuration": "0s",
          "waitDuration": "0s",
          "totalDuration": "0s",
          "startTime": "2024-02-13T17:40:00Z"
        }
      ],
      "metrics": {
        "performedShipmentCount": 2,
        "travelDuration": "4740s",
        "waitDuration": "356s",
        "delayDuration": "0s",
        "breakDuration": "0s",
        "visitDuration": "1200s",
        "totalDuration": "6296s",
        "travelDistanceMeters": 31531,
        "performedShipmentPenaltyCostSum": 2000
      },
      "routeCosts": {
        "model.vehicles.cost_per_hour": 47.22
      },
      "routeTotalCost": 47.22,
      "vehicleFullness": {
        "maxFullness": 0.3497777777777778,
        "activeSpan": 0.3497777777777778
      }
    }
  ],
  "skippedShipments": [
    {
      "index": 2,
      "label": "German shepherd",
      "penaltyCost": 100
    }
  ],
  "metrics": {
    "aggregatedRouteMetrics": {
      "performedShipmentCount": 2,
      "travelDuration": "4740s",
      "waitDuration": "356s",
      "delayDuration": "0s",
      "breakDuration": "0s",
      "visitDuration": "1200s",
      "totalDuration": "6296s",
      "travelDistanceMeters": 31531,
      "performedShipmentPenaltyCostSum": 2000
    },
    "usedVehicleCount": 1,
    "earliestVehicleStartTime": "2024-02-13T15:55:04Z",
    "latestVehicleEndTime": "2024-02-13T17:40:00Z",
    "totalCost": 147.22,
    "costs": {
      "model.vehicles.cost_per_hour": 47.22,
      "model.shipments.penalty_cost": 100
    }
  }
}
    

উত্তরের স্ট্রাকচার

OptimizeToursResponse-এ একটি ShipmentRoute অবজেক্ট আছে যার সাথে একটি ভিজিট মেসেজ টাইপ এবং একটি Metrics অবজেক্ট আছে যার সাথে aggregatedRouteMetrics এবং totalCost আছে।

OptimizeToursResponse-এ দুটি প্রধান কম্পোনেন্ট আছে:

  • routes: আপনার ফ্লিটের প্রতিটি গাড়ির রুট প্ল্যান, যার মধ্যে প্রতিটি পিক-আপ ও ডেলিভারির ক্রম ও সময় অন্তর্ভুক্ত। আপনার একটি ভ্যান আছে, তাই একটি রুট প্ল্যান আছে।
  • metrics: মোট খরচ, সময় ও দূরত্ব সহ সম্পূর্ণ রুট প্ল্যানের সারসংক্ষেপ।

যেহেতু অপ্টিমাইজার জার্মান শেফার্ডকে এড়িয়ে যায়, তাই উত্তরে skippedShipments-ও অন্তর্ভুক্ত থাকে।

নিম্নলিখিত বিভাগগুলি আপনাকে দেখায় যে উত্তরে রুট প্ল্যান সারসংক্ষেপের প্রতিটি বিবরণ কোথায় পাবেন।

কোন গাড়ি কোন রুটে চলে?

অপ্টিমাইজার একটি রুট প্ল্যান (routes অ্যারে) তৈরি করে যা আপনার অনুরোধে vehicles-এর ক্রমের সাথে সম্পর্কিত।

vehicleIndex ফিল্ডটি প্রতিটি গাড়িকে তার জিরো-বেসড পজিশনের উপর ভিত্তি করে শনাক্ত করে, যা আপনার ভ্যানের জন্য 0। vehicleStartTime এবং vehicleEndTime ফিল্ড থেকে ড্রাইভার জানতে পারেন যে কখন তার শিফ্ট শুরু ও শেষ করতে হবে।

Route Optimization API, UTC-তে টাইমস্ট্যাম্প রিটার্ন করে, যা Z প্রত্যয় দ্বারা চিহ্নিত করা হয়, আপনার অনুরোধে অফসেট যাই হোক না কেন। সান ফ্রান্সিসকোর সময় জানতে, ৮ ঘণ্টা বিয়োগ করুন। আপনার ভ্যানের জন্য, শিফ্ট সকাল ৭টা ৫৫ মিনিট থেকে সকাল ৯টা ৪০ মিনিট পর্যন্ত চলে, যেমনটি নিম্নলিখিত কোড স্যাম্পেলে দেখানো হয়েছে।

{
"routes": [
    {
    // "vehicleIndex": 0, // Omitted in actual JSON response because it's 0
    "vehicleStartTime": "2024-02-13T15:55:04Z",
    "vehicleEndTime": "2024-02-13T17:40:00Z",
    ...
    }
  ]
  ...
}

পিক-আপ ও ড্রপ-অফ অর্ডার কী?

প্রতিটি রুটের মধ্যে, visits অ্যারেতে অ্যাসাইন করা গাড়ির জন্য প্রতিটি পিক-আপ এবং ডেলিভারি কালানুক্রমিক ক্রমে থাকে।

প্রতিটি ভিজিটের shipmentIndex হল আপনার অনুরোধে শিপমেন্টের জিরো-বেসড পজিশন: 0 হল বার্নিজ মাউন্টেন ডগ এবং 1 হল চিহুয়াহুয়া। shipmentLabel ফিল্ডে প্রতিটি শিপমেন্টের জন্য আপনার সেট করা লেবেল দেখানো হয়।

পিক-আপ ও ড্রপ-অফ (বা ডেলিভারি)-এর মধ্যে পার্থক্য করতে, আপনি visitType অথবা isPickup ফিল্ড চেক করতে পারেন:

  • visitType: ভিজিট অ্যাকশন স্পষ্টভাবে সংজ্ঞায়িত করে।
    • পিক-আপ: visitType = "PICKUP_SHIPMENT"
    • ডেলিভারি: visitType = "DELIVER_SHIPMENT"
  • isPickup: একটি বুলিয়ান হেল্পার ফিল্ড।
    • পিক-আপ: isPickup = true
    • ডেলিভারি: isPickup = false (JSON-এ বাদ দেওয়া হয়েছে)

ইভেন্টের সঠিক ক্রম এবং প্রতিটি লোকেশনে পৌঁছানোর প্রত্যাশিত সময় নির্ধারণ করতে, visits অ্যারে ক্রমানুসারে পড়ুন। নিম্নলিখিত সারণীতে shipmentIndex, isPickup বা visitType এবং startTime ফিল্ডের ক্রম ও ভ্যালুর উপর ভিত্তি করে রুট প্ল্যান অ্যাকশন দেখানো হয়েছে।

ক্রম shipmentIndexটি isPickup বা visitType ভ্যালু startTime ভ্যালু (UTC) অ্যাকশন
প্রথম বার ভিজিট করা ০ (JSON-এ বাদ দেওয়া হয়েছে) সত্য অথবা PICKUP_SHIPMENT 2024-02-13T16:20:00Z সকাল ৮টা ২০ মিনিটে বার্নিজ মাউন্টেন ডগকে নিয়ে এসো।
দ্বিতীয় ভিজিট 1 সত্য অথবা PICKUP_SHIPMENT 2024-02-13T16:58:12Z সকাল ৮:৫৮-এ চিহুয়াহুয়াকে নিয়ে এসো।
তৃতীয় ভিজিট ০ (JSON-এ বাদ দেওয়া হয়েছে) False (বাদ দেওয়া হয়েছে) অথবা DELIVER_SHIPMENT 2024-02-13T17:30:00Z সকাল ৯টা ৩০ মিনিটে বার্নিজ মাউন্টেন ডগকে ডগি ডে কেয়ার সেন্টারে ছেড়ে দিয়ে এসো।
চতুর্থ ভিজিট 1 False (বাদ দেওয়া হয়েছে) অথবা DELIVER_SHIPMENT 2024-02-13T17:35:00Z সকাল ৯টা ৩৫ মিনিটে চিহুয়াহুয়াকে ডগি ডে-কেয়ার সেন্টারে ছেড়ে দিয়ে এসো।

নিম্নলিখিত কোডের নমুনা থেকে বোঝা যায় যে কীভাবে উত্তর এই ক্রম প্রদান করে:

{
  "routes": [
    {
      "visits": [
        {
          // "shipmentIndex": 0, // Omitted in actual JSON response because it's 0
          "isPickup": true,
          "startTime": "2024-02-13T16:20:00Z",
          "shipmentLabel": "Bernese mountain dog",
          "visitType": "PICKUP_SHIPMENT"
        },
        {
          "shipmentIndex": 1,
          "isPickup": true,
          "startTime": "2024-02-13T16:58:12Z",
          "shipmentLabel": "Chihuahua",
          "visitType": "PICKUP_SHIPMENT"
        },
        {
          // "shipmentIndex": 0, // Omitted in actual JSON response because it's 0
          // "isPickup": false, // Omitted in actual JSON response because it's false
          "startTime": "2024-02-13T17:30:00Z",
          "shipmentLabel": "Bernese mountain dog",
          "visitType": "DELIVER_SHIPMENT"
        },
        {
          "shipmentIndex": 1,
          // "isPickup": false, // Omitted in actual JSON response because it's false
          "startTime": "2024-02-13T17:35:00Z",
          "shipmentLabel": "Chihuahua",
          "visitType": "DELIVER_SHIPMENT"
        }
      ]
    }
  ]
}

এছাড়াও, প্রতিটি ভিজিটে একটি visitRequestIndex থাকে, যা হল পিক-আপ বা ড্রপ-অফ বিকল্পের জিরো-বেসড পজিশন যা অপ্টিমাইজার শিপমেন্টের জন্য বেছে নিয়েছে। এই পরিস্থিতিতে প্রতিটি কুকুরের জন্য শুধুমাত্র একটি পিক-আপ বিকল্প এবং একটি ড্রপ-অফ বিকল্প রয়েছে, তাই visitRequestIndex সর্বদা 0 এবং উত্তরে এটি বাদ দেওয়া হয়েছে।

ভিজিটের মধ্যবর্তী সময়ে কী হয়?

প্রতিটি রুটের মধ্যে, transitions অ্যারে, ভিজিটের মধ্যে ভ্রমণের বিবরণ তালিকাভুক্ত করে। যদিও visits এবং transitions আলাদা তালিকা, সেগুলি সময়ের সাথে সাথে ইন্টারলিভ করে, যেমন:

  1. transitions[0] (শুরু থেকে প্রথম ভিজিট পর্যন্ত ড্রাইভ করুন)
  2. visits[0] (প্রথম ভিজিট)
  3. transitions[1] (প্রথম ভিজিট থেকে দ্বিতীয় ভিজিটে ড্রাইভ করে যাওয়া)
  4. visits[1] (দ্বিতীয়বার ভিজিট)
  5. ...
  6. visits[N-1] (শেষবার ভিজিট, যেখানে N হল মোট ভিজিটের সংখ্যা)
  7. transitions[N] (শেষবার ভিজিট করা থেকে শেষ পর্যন্ত ড্রাইভ করুন)

আপনি দুটি অ্যারেতেই startTime ফিল্ড দেখে রুটের টাইমলাইন ফলো করতে পারবেন। ড্রাইভার যখন যাত্রা শুরু করেন তখন ট্রানজিশনের startTime হয় এবং ড্রাইভার যখন পিক-আপ বা ড্রপ-অফ শুরু করেন তখন ভিজিটের startTime হয়।

প্রতিটি ট্রানজিশন লোকেশনগুলির মধ্যে প্রত্যাশিত ড্রাইভিং সময় এবং দূরত্ব দেখায়। নিম্নলিখিত সারণীটি transitions এবং visits উভয় ফিল্ডকে ডগি ডে-কেয়ারের দৃশ্যের জন্য কালানুক্রমিক রুট অ্যাকশনে ম্যাপ করে।

ক্রম ফিল্ডের নাম startTime ভ্যালু (UTC) বিবরণ অ্যাকশন
প্রথম ট্রানজিশন transitions[0] 2024-02-13T15:55:04Z travelDuration: 1496s
travelDistanceMeters: 7082
বার্নিজ মাউন্টেন ডগটিকে নিয়ে আসার জন্য ডে-কেয়ার সেন্টার থেকে ২৫ মিনিট ধরে ৭ কিমি ড্রাইভ করুন। শিফ্ট সকাল ৭:৫৫-এ শুরু হয়।
প্রথমবার ভিজিট visits[0] 2024-02-13T16:20:00Z shipmentIndex: ০ (JSON-এ বাদ দেওয়া হয়েছে)
isPickup: সত্য
সকাল ৮:২০ থেকে বার্নিজ মাউন্টেন ডগ পিক-আপ করুন। ভিজিট করতে ৫ মিনিট সময় লাগবে।
দ্বিতীয় ট্রানজিশন transitions[1] 2024-02-13T16:25:00Z travelDuration: 1992s
travelDistanceMeters: 16589
সকাল ৮:২৫ মিনিটে শুরু করে চিহুয়াহুয়াকে তুলতে কোইট টাওয়ার থেকে ১৭ কিমি ড্রাইভ করে ৩৩ মিনিটে পৌঁছান।
দ্বিতীয়বার ভিজিট visits[1] 2024-02-13T16:58:12Z shipmentIndex: ১
isPickup: সত্য
সকাল ৮:৫৮ থেকে চিহুয়াহুয়াকে নিয়ে আসুন। ৫ মিনিট সময় লাগবে।
তৃতীয় ট্রানজিশন transitions[2] 2024-02-13T17:03:12Z travelDuration: ১২৫২s
travelDistanceMeters: ৭৮৬০
waitDuration: ৩৫৬s
সকাল ৯:০৩ মিনিটে সাউথ সানসেট খেলার মাঠ থেকে ডে-কেয়ার সেন্টারে ফিরে আসার জন্য ২১ মিনিট ধরে ৮ কিমি ড্রাইভ করুন। সকাল ৯:২৪ মিনিটে পৌঁছান এবং ড্রপ-অফ উইন্ডো খোলার জন্য ৬ মিনিট অপেক্ষা করুন।
তৃতীয় ভিজিট visits[2] 2024-02-13T17:30:00Z shipmentIndex: ০ (JSON-এ বাদ দেওয়া হয়েছে)
isPickup: মিথ্যা (JSON-এ বাদ দেওয়া হয়েছে)
সকাল ৯:৩০ থেকে শুরু করে বার্নিজ মাউন্টেন ডগকে ডগি ডে-কেয়ার সেন্টারে ছেড়ে দিয়ে এসো। যেতে ৫ মিনিট সময় লাগবে।
চতুর্থ ট্রানজিশন transitions[3] 2024-02-13T17:35:00Z travelDuration: 0s
travelDistanceMeters: 0 (JSON-এ বাদ দেওয়া হয়েছে)
ড্রাইভিং নয়। সকাল ৯টা ৩৫ মিনিটে চিহুয়াহুয়াকে ডে-কেয়ার সেন্টারে নামিয়ে দেওয়ার জন্য প্রস্তুত।
চতুর্থ ভিজিট visits[3] 2024-02-13T17:35:00Z shipmentIndex: 1
isPickup: False (JSON-এ বাদ দেওয়া হয়েছে)
সকাল ৯:৩৫ থেকে শুরু করে চিহুয়াহুয়াকে ডগি ডে-কেয়ার সেন্টারে ছেড়ে দিন। যেতে ৫ মিনিট সময় লাগবে।
পঞ্চম ট্রানজিশন transitions[4] 2024-02-13T17:40:00Z travelDuration: 0s
travelDistanceMeters: 0 (JSON-এ বাদ দেওয়া হয়েছে)
ড্রাইভিং নয়। ড্রাইভার সকাল ৯:৪০-এ শিফ্ট শেষ করেন।

নিচে দেওয়া কোডের স্যাম্পেল থেকে বোঝা যায় যে কীভাবে উত্তর transitions[0] এবং transitions[1]-এর জন্য এই সিকোয়েন্স প্রদান করে:

{
  "routes": [
    {
      "transitions": [
        {
          "travelDuration": "1496s",
          "travelDistanceMeters": 7082,
          "waitDuration": "0s",
          "totalDuration": "1496s",
          "startTime": "2024-02-13T15:55:04Z"
        },
        {
          "travelDuration": "1992s",
          "travelDistanceMeters": 16589,
          "waitDuration": "0s",
          "totalDuration": "1992s",
          "startTime": "2024-02-13T16:25:00Z"
        },
        ...
      ]
    }
  ]
}

রুটের জন্য কত খরচ হবে?

আপনার নির্দিষ্ট কোনও গাড়ির জন্য খরচ নাকি পুরো ফ্লিটের জন্য মোট খরচ প্রয়োজন তার উপর নির্ভর করে আপনি উত্তরে বেশ কয়েকটি ফিল্ড দেখতে পারেন।

নিচের সারণীতে এমন সব উপায়ের তালিকা দেওয়া হয়েছে যার মাধ্যমে আপনি রেসপন্সে খরচের তথ্য খুঁজে পেতে পারেন:

মা বাবা প্যারামিটার সুযোগ বিবরণ
ShipmentRoute routeCosts প্রতিটি রুট সেই নির্দিষ্ট রুটের জন্য নির্দিষ্ট খরচের উপাদানের (যেমন ঘণ্টা প্রতি খরচ) একটি ব্রেকডাউন।
routeTotalCost রুট প্রতি সেই নির্দিষ্ট রুটের জন্য হিসেব করা মোট খরচ।
Metrics totalCost মোট (সব রুট) সমাধানে সব রুটের জন্য এগ্রিগেট করা মোট খরচ।
costs মোট (সব রুট) সমাধানে সব রুট জুড়ে মোট খরচের উপাদানের ব্রেকডাউন।

routeCosts এবং costs-এ উল্লেখ করা খরচ আপনার অনুরোধে উল্লেখ করা খরচের সীমাবদ্ধতা দেখায়। আরও তথ্যের জন্য, কস্ট মডেলের মূল ধারণা ডকুমেন্ট দেখুন।

কুকুরের ডে-কেয়ারের এই পরিস্থিতিতে, আপনি একটি শিপমেন্ট এড়িয়ে গেছেন বলে, প্রতিটি রুটের খরচ এবং মোট খরচ আলাদা। রুটের খরচে শুধুমাত্র সেই নির্দিষ্ট রুটের সাথে সম্পর্কিত খরচ (ড্রাইভারের মজুরি) অন্তর্ভুক্ত থাকে, যদিও মোট খরচে বাদ দেওয়া শিপমেন্টের জন্য জরিমানাও অন্তর্ভুক্ত থাকে। নিম্নলিখিত কোডের স্যাম্পেল থেকে জানতে পারবেন যে রেসপন্সে কোথায় এই ভ্যালুগুলি খুঁজে পাবেন:

{
  "routes": [
    {
      "vehicleStartTime": "2024-02-13T15:55:04Z",
      "vehicleEndTime": "2024-02-13T17:40:00Z",
      ...
      "routeCosts": {
        "model.vehicles.cost_per_hour": 47.22
      },
      "routeTotalCost": 47.22
    }
  ],
  "metrics": {
    "totalCost": 147.22,
    "costs": {
      "model.shipments.penalty_cost": 100,
      "model.vehicles.cost_per_hour": 47.22
    },
    ...
  }
}

রুটের প্ল্যান অনুযায়ী, ড্রাইভার সকাল ৭:৫৫ থেকে সকাল ৯:৪০ পর্যন্ত ভ্যান চালান, যা প্রায় ১ ঘণ্টা ৪৫ মিনিট (৬২৯৬ সেকেন্ড)। আপনার নির্ধারিত রেট $২৭ প্রতি ঘণ্টা হিসেবে, রুটের খরচ হল $৪৭.২২। কারণ অপ্টিমাইজার জার্মান শেফার্ডের শিপমেন্ট এড়িয়ে গেছে, এটি $১০০ পেনাল্টি খরচ যোগ করে, মোট খরচ $১৪৭.২২ করে।

কেন কোনও শিপমেন্ট এড়িয়ে যাওয়া হয়েছে?

অপ্টিমাইজার এমন যেকোনও শিপমেন্টের তালিকা তৈরি করে যা skippedShipments অ্যারেতে পারফর্ম করে না। এটি কেন কোনও শিপমেন্ট এড়িয়ে যায় তা নির্ভর করে আপনি penaltyCost সেট করেছেন কিনা তার উপর:

  • বাধ্যতামূলক শিপমেন্ট (penaltyCostটি): অপ্টিমাইজার কখনই এগুলি এড়িয়ে যায় না কারণ এগুলি করতে অনেক খরচ হয়। এটি শুধুমাত্র তখনই একটি শিপমেন্ট এড়িয়ে যায় যখন এটি কোনও রুটে শিপমেন্ট ফিট করতে পারে না, উদাহরণস্বরূপ, কারণ এর টাইম উইন্ডো অন্যান্য শিপমেন্টের সাথে কনফ্লিক্ট করে।
  • ঐচ্ছিক শিপমেন্ট (penaltyCost সহ): অপ্টিমাইজার এগুলিও এড়িয়ে যেতে পারে যখন এগুলি করার খরচ জরিমানার চেয়ে বেশি হয়। আপনি কিছু শিপমেন্টকে অন্যদের চেয়ে অগ্রাধিকার দিতে বিভিন্ন পেনাল্টি খরচ সেট করতে পারেন।

এই পরিস্থিতিতে, জার্মান শেফার্ডের পিক-আপ উইন্ডো বার্নিজ মাউন্টেন ডগের উইন্ডোর সাথে ওভারল্যাপ করছে। কয়েট টাওয়ার ও ল্যান্ডস এন্ডের মধ্যে দূরত্ব ২৫ মিনিটের, তাই ড্রাইভার ২০ মিনিটের মধ্যে দুটি পিক-আপ করতে পারবেন না। অপ্টিমাইজারকে অবশ্যই একটি এড়িয়ে যেতে হবে। যেহেতু জার্মান শেফার্ডের ক্ষেত্রে পেনাল্টি খরচ কম (নিয়মিত ক্লায়েন্টের $১,০০০-এর তুলনায় $১০০), তাই অপ্টিমাইজার এটি এড়িয়ে যায় এবং $১০০ পেনাল্টি খরচ বহন করে।

নিম্নলিখিত কোডের নমুনা উত্তরে skippedShipments অবজেক্ট দেখায়:

{
  ...
  "skippedShipments": [
    {
      "index": 2,
      "label": "German shepherd",
      "penaltyCost": 100
    }
  ],
  ...
}

উত্তরে skippedShipments অবজেক্টে নিম্নলিখিত ফিল্ডগুলি থাকে:

  • index: আপনার অনুরোধে শিপমেন্টের জিরো-বেসড ইন্ডেক্স (তৃতীয় শিপমেন্টের জন্য ২)।
  • label: অনুরোধে আপনার উল্লেখ করা লেবেল ("জার্মান শেফার্ড")।
  • penaltyCost: অনুরোধে আপনার উল্লেখ করা পেনাল্টি খরচ, যা API মোট খরচের সাথে যোগ করে।

অপ্টিমাইজার যাতে কোনও শিপমেন্ট এড়িয়ে না যায়, তার জন্য যে সীমাবদ্ধতার কারণে সমস্যা হচ্ছে সেটি শিথিল করুন। যেমন, জার্মান শেফার্ডের মালিককে আরও নমনীয় পিক-আপ উইন্ডোর জন্য জিজ্ঞাসা করুন এবং তারপরে আপনার অনুরোধে সেই পিক-আপের জন্য timeWindows আপডেট করুন।

উদা্হরণে উত্তর যোগ করার ফিল্ড

নিম্নলিখিত সারণীতে উদাহরণস্বরূপ পরিস্থিতিতে OptimizeToursResponse-এ ফেরত আসা সমস্ত উত্তর ফিল্ডের বর্ণনা দেওয়া হয়েছে। রুট প্ল্যান বোঝার জন্য আপনাকে প্রতিটি ফিল্ড ব্যবহার করতে হবে না, তবে আপনার ব্যবসার প্রয়োজন অনুসারে OptimizeToursRequest কীভাবে অ্যাডজাস্ট করবেন তা নির্ধারণ করতে আপনি এই ফিল্ডগুলি বিশ্লেষণ করতে পারেন। আরও তথ্যের জন্য, রুট প্ল্যান লাইফসাইকেল দেখুন।

আপনি পেরেন্ট বা টেক্সট সার্চের মাধ্যমে কন্টেন্ট ফিল্টার করতে পারবেন।

মা বাবা প্যারামিটার প্রপার্টির ধরন বিবরণ
OptimizeToursResponse routes অবজেক্টের অ্যারে (ShipmentRoute) এতে প্রতিটি গাড়ির জন্য গণনা করা রুটের তালিকা রয়েছে (প্রতিটি গাড়ির জন্য একটি)। এই ডগি ডে-কেয়ারের ক্ষেত্রে, এতে আপনার একটি ভ্যানের জন্য বিস্তারিত রুট প্ল্যান রয়েছে।
metrics অবজেক্ট (Metrics) এতে সমাধানের সামগ্রিক মেট্রিক রয়েছে, যা সব রুটের ডেটা একত্রিত করে তৈরি করা হয়েছে। এই ডগি ডে-কেয়ারের ক্ষেত্রে, এটি হল খরচ এবং দিনের অপারেশনাল সময়কালের সারসংক্ষেপ।
skippedShipments অবজেক্টের অ্যারে (SkippedShipment) এতে সমাধানের সময় এড়িয়ে যাওয়া শিপমেন্টের তালিকা রয়েছে। এই পরিস্থিতিতে, তৃতীয় কুকুর (জার্মান শেফার্ড) বাদ দেওয়া হয়েছে।
ShipmentRoute vehicleStartTime টাইমস্ট্যাম্প এই সময় গাড়িটি তার রুটে যাত্রা শুরু করে। এই কুকুরের ডে-কেয়ারের পরিস্থিতিতে, ড্রাইভার সকাল ৭টা ৫৫ মিনিটে ভ্যান চালানো শুরু করেন।
vehicleEndTime টাইমস্ট্যাম্প এই সময় গাড়িটি তার রুট শেষ করে। এই ডগি ডে-কেয়ারের পরিস্থিতিতে, ড্রাইভার সকাল ৯টা ৪০ মিনিটে ভ্যান চালানো শেষ করেন।
visits অবজেক্টের অ্যারে (Visit) এটি রুটে পিক-আপ ও ডেলিভারির ক্রমানুসারে সাজানো তালিকা। এই কুকুরের ডে-কেয়ারের ক্ষেত্রে, দুটি কুকুরকে পিক-আপ ও ড্রপ-অফ করার ক্রম এটি।
transitions অবজেক্টের অ্যারে (Transition) এটি হল দূরত্ব, ভ্রমণ এবং ভিজিটের মধ্যে অপেক্ষার সময়ের ক্রমানুসারে সাজানো তালিকা। এই ডগি ডে-কেয়ারের ক্ষেত্রে, এটি Coit Tower, South Sunset Playground Park এবং ডে-কেয়ারের মধ্যে ড্রাইভিং দূরত্ব এবং সময় সম্পর্কে বিস্তারিত তথ্য দেয়।
metrics অবজেক্ট (AggregatedMetrics) এইসব মেট্রিক এই নির্দিষ্ট রুটের জন্য প্রযোজ্য। এই ডগি ডে-কেয়ারের ক্ষেত্রে, এই নির্দিষ্ট ভ্যানের পরিসংখ্যান এখানে দেওয়া হল। আপনার অনুরোধে উল্লেখ করা খরচের ভিত্তিতে এইসব মেট্রিক দেখানো হয়। আরও জানতে, কস্ট মডেলের মূল ধারণা ডকুমেন্ট দেখুন।
routeCosts অবজেক্ট (ম্যাপ) এই রুটের জন্য নির্দিষ্ট খরচের ব্রেকডাউন এখানে দেওয়া হল। এই ডগি ডে-কেয়ারের ক্ষেত্রে, ড্রাইভারের প্রতি ঘণ্টায় $২৭ মজুরি থেকে খরচ গণনা করা হয়েছে।
routeTotalCost নম্বর এই নির্দিষ্ট রুটের জন্য এটিই মোট খরচ। এই ডগি ডে-কেয়ারের ক্ষেত্রে, এই ভ্যানের রুটের জন্য মোট খরচ হল 47.22।
vehicleFullness অবজেক্ট (VehicleFullness) গাড়িটি তার অপারেশনাল সীমার কতটা কাছাকাছি আসে, যেমন সময়, দূরত্ব এবং লোড, তার একটি ব্রেকডাউন এখানে দেওয়া হল। এই ডগি ডে-কেয়ারের ক্ষেত্রে, শুধুমাত্র শিফটের শুরু ও শেষের সময় ড্রাইভারকে সীমাবদ্ধ করে, তাই অপ্টিমাইজার vehicleFullness-কে প্রকৃত রুটের সময়সীমা এবং ড্রাইভারের শিফটের জন্য উপলভ্য সর্বাধিক সময়ের ভগ্নাংশ হিসেবে গণনা করে।
Visit shipmentIndex পূর্ণসংখ্যা এটি হল আসল অনুরোধে শিপমেন্টের জিরো-বেসড ইনডেক্স। এই ডগি ডে-কেয়ারের ক্ষেত্রে, 0 হল বার্নিজ মাউন্টেন ডগ এবং 1 হল চিহুয়াহুয়া।
isPickup বুলিয়ান এই ভিজিটটি পিক-আপ হলে এই ফিল্ডটি ট্রু হয়। এই ডগি ডে-কেয়ারের ক্ষেত্রে, কুকুরকে নিয়ে আসার সময় এটি ট্রু এবং ডে-কেয়ারে কুকুরকে রেখে আসার সময় এটি ফলস (বা অনুপস্থিত) হিসেবে বিবেচিত হয়।
startTime টাইমস্ট্যাম্প এটি হল ভিজিট শুরু হওয়ার আনুমানিক সময়। এই ডগি ডে-কেয়ারের ক্ষেত্রে, ড্রাইভার দরজায় নক করলে তবেই এই ইভেন্ট শুরু হয়।
detour সময়সীমা এই নির্দিষ্ট শিপমেন্টের যাত্রায় অপ্টিমাইজার যে অতিরিক্ত সময় যোগ করে, এটি হল সেই সময়। ড্রাইভারের কাছে সম্পূর্ণ করার জন্য অন্য কোনও শিপমেন্ট বা টাস্ক না থাকলে, আসল রুট প্ল্যান এবং আদর্শ ডাইরেক্ট ট্রিপের মধ্যে পার্থক্যকে ডিট্যুর বলা হয়।

এই ডগি ডে-কেয়ারের ক্ষেত্রে, প্রথম ভিজিট, যা বার্নিজ মাউন্টেন ডগ পিক-আপ করার জন্য, সেটির ডিট্যুর হল ০ কারণ ড্রাইভার ডে-কেয়ার সেন্টার থেকে সরাসরি এই পিক-আপের জন্য যান। চিহুয়াহুয়া পিক-আপের জন্য, ডিট্যুর হল ৪৩ মিনিট কারণ ড্রাইভার প্রথমে বার্নিজ মাউন্টেন ডগ পিক-আপ করে (এবং লোড করতে ৫ মিনিট সময় নেয়)।
shipmentLabel স্ট্রিং প্রতিটি শিপমেন্টের জন্য অনুরোধ থেকে এটি হল লেবেল। এই ডগি ডে-কেয়ারের ক্ষেত্রে, লেবেলগুলি হল "চিহুয়াহুয়া" বা "বার্নিজ মাউন্টেন ডগ"।
visitType স্ট্রিং (Enum) এটি ভিজিটের ধরন নির্দেশ করে, যা পিক-আপের জন্য PICKUP_SHIPMENT বা ডেলিভারির জন্য DELIVER_SHIPMENT হতে পারে। এই পরিস্থিতির জন্য, এটি হয় PICKUP_SHIPMENT অথবা DELIVER_SHIPMENT।
Transition travelDuration সময়সীমা এটি হল এক জায়গা থেকে অন্য জায়গায় যাওয়ার সময় ট্রানজিটে কাটানো সময়। যেমন, এই ডগি ডে-কেয়ারের ক্ষেত্রে, ড্রাইভার ডে-কেয়ার থেকে বার্নিজ মাউন্টেন ডগটিকে নিয়ে আসার জন্য কোইট টাওয়ার পর্যন্ত গাড়ি চালিয়ে যেতে প্রায় ২৫ মিনিট সময় ব্যয় করেন।
travelDistanceMeters পূর্ণসংখ্যা এই ট্রানজিশন চলাকালীন মিটারে অতিক্রান্ত দূরত্ব। যেমন, এই ডগি ডে-কেয়ারের ক্ষেত্রে, ডে-কেয়ার থেকে বার্নিজ মাউন্টেন ডগকে পিক-আপ করার জন্য ড্রাইভার ৭ কিলোমিটার দূরে কোয়েট টাওয়ারে যান।
waitDuration সময়সীমা পরবর্তী পিক-আপ বা ডেলিভারির আগে অপেক্ষা করার সময়। কুকুরের ডে-কেয়ারের এই পরিস্থিতিতে, তৃতীয় ট্রানজিশনের জন্য এটি হল ৬ মিনিট (৩৫৬ সেকেন্ড), কারণ সকাল ৯:৩০-এ ড্রপ-অফ উইন্ডো খোলার আগেই ড্রাইভার ডে-কেয়ার সেন্টারে পৌঁছে যান। অন্যান্য ট্রানজিশনের জন্য এই ভ্যালু হল ০।
totalDuration সময়সীমা এটি হল ট্রানজিশনের মোট সময়কাল, যার মধ্যে ড্রাইভিং ও অপেক্ষা করার সময় অন্তর্ভুক্ত। যেমন, প্রথম ট্রানজিশনে ড্রাইভার ২৫ মিনিট (২৫ মিনিট ড্রাইভিং এবং ০ মিনিট অপেক্ষা) এবং ডে-কেয়ারে ফিরে আসার তৃতীয় ট্রানজিশনে ২৭ মিনিট (২১ মিনিট ড্রাইভিং এবং ৬ মিনিট অপেক্ষা) সময় ব্যয় করেন।
startTime টাইমস্ট্যাম্প এই সময় থেকে যাত্রা শুরু হয়। এটি আগের ভিজিট সম্পূর্ণ হওয়ার সময়ের সাথে (অথবা, প্রথম ট্রানজিশনের জন্য, গাড়ির শুরুর সময়) ম্যাচ করে। ডগি ডে-কেয়ারের ক্ষেত্রে, প্রথম ট্রানজিশন শুরু হয় সকাল ৭:৫৫-এ, যখন ড্রাইভার ডে-কেয়ার থেকে বের হন এবং দ্বিতীয় ট্রানজিশন শুরু হয় সকাল ৮:২৫-এ, যখন ড্রাইভার কোইট টাওয়ার থেকে বের হন।
Metrics aggregatedRouteMetrics অবজেক্ট (AggregatedMetrics) এটি সব রুটের মেট্রিকের যোগফল। এই ডগি ডে-কেয়ারের ক্ষেত্রে, এগুলি হল আপনার একটি ভ্যানের মোট মেট্রিক।
usedVehicleCount পূর্ণসংখ্যা এটি হল সমাধানে ব্যবহৃত গাড়ির সংখ্যা। এই ডগি ডে-কেয়ারের পরিস্থিতিতে, আপনি শুধু একটি ভ্যান ব্যবহার করেন।
earliestVehicleStartTime টাইমস্ট্যাম্প সব গাড়ির মধ্যে এটিই সবচেয়ে আগে শুরু করার সময়। এই ডগি ডে-কেয়ারের ক্ষেত্রে, ভ্যানের রুট সকাল ৭:৫৫-এ শুরু হয়।
latestVehicleEndTime টাইমস্ট্যাম্প সব গাড়ির মধ্যে এটি হল শেষ হওয়ার লেটেস্ট সময়। এই ডগি ডে-কেয়ারের পরিস্থিতির জন্য, ভ্যানের রুট সকাল ৯টা ৪০ মিনিটে শেষ হয়।
totalCost নম্বর এটি হল সমাধানের মোট খরচ। এই ডগি ডে-কেয়ার পরিস্থিতির জন্য, পুরো রুট প্ল্যানের খরচ হল 147.22 (যার মধ্যে 47.22 ড্রাইভারের মজুরি এবং 100 শিপমেন্ট এড়িয়ে যাওয়ার জরিমানা অন্তর্ভুক্ত)।
costs অবজেক্ট (ম্যাপ) এটি বিভাগ অনুযায়ী মোট খরচের ব্রেকডাউন। এই ডগি ডে-কেয়ারের ক্ষেত্রে, অপ্টিমাইজার ঘণ্টা প্রতি খরচ এবং জার্মান শেফার্ডকে বাদ দেওয়ার জন্য পেনাল্টি খরচের ভিত্তিতে রুটের খরচ হিসেব করেছে।
AggregatedMetrics performedShipmentCount পূর্ণসংখ্যা এটি হল সফলভাবে রুট করা শিপমেন্টের সংখ্যা। এই ডগি ডে-কেয়ারের ক্ষেত্রে, ড্রাইভার দুটি কুকুরকে নিয়ে যাচ্ছেন।
travelDuration সময়সীমা এটি হল ভ্রমণের জন্য ব্যয় করা মোট সময়। এই ডগি ডে-কেয়ার পরিস্থিতির জন্য, ড্রাইভার ৭৯ মিনিট ভ্রমণ করেন।
waitDuration সময়সীমা এটি হল অপেক্ষা করার জন্য ব্যয় করা মোট সময়। এই ডগি ডে-কেয়ারের ক্ষেত্রে, ডে-কেয়ার সেন্টারে ড্রপ-অফ উইন্ডো খোলার জন্য ড্রাইভার ৬ মিনিট (৩৫৬ সেকেন্ড) অপেক্ষা করেন।
delayDuration সময়সীমা এটি হল অতিরিক্ত সময় যা আপনি ট্রানজিশন অ্যাট্রিবিউট ব্যবহার করে নির্ধারণ করেন, যেমন পার্কিংয়ের জন্য রিজার্ভ করা সময়। এই ডগি ডে-কেয়ারের ক্ষেত্রে, আপনি অনুরোধে কোনও ট্রানজিশন অ্যাট্রিবিউট উল্লেখ করেননি, তাই এই ভ্যালু শূন্য।
breakDuration সময়সীমা এটি হল বিরতিতে কাটানো মোট সময়। এই ডগি ডে-কেয়ার পরিস্থিতির জন্য কোনও বিরতি নেই।
visitDuration সময়সীমা ভিজিটের সময় পরিষেবা প্রদান করতে মোট যতটা সময় ব্যয় করা হয়েছে। এই কুকুরের ডে-কেয়ারের ক্ষেত্রে, এটি হল ২০ মিনিট (৪ বার ভিজিটের জন্য প্রতিবার ৫ মিনিট করে)।
totalDuration সময়সীমা এটি হল সব ডিউরেশন কম্পোনেন্টের যোগফল। এই ডগি ডে-কেয়ারের ক্ষেত্রে, মোট সময়সীমা হল ১০৫ মিনিট (৬২৯৬ সেকেন্ড)।
travelDistanceMeters পূর্ণসংখ্যা এটি হল মিটারে মোট ভ্রমণের দূরত্ব। এই ডগি ডে-কেয়ার পরিস্থিতির জন্য, ড্রাইভার মোট ৩১.৫ কিমি দূরত্ব ভ্রমণ করেন।
performedShipmentPenaltyCostSum ডবল এটি হল সম্পূর্ণ করা সব শিপমেন্টের পেনাল্টি খরচের যোগফল। এই পরিস্থিতিতে, এটি হল 2000 কারণ ড্রাইভার বার্নিজ মাউন্টেন ডগ এবং চিহুয়াহুয়াকে (প্রতিটির জন্য পেনাল্টি খরচ হল 1000) পিক-আপ করেছেন।
VehicleFullness maxFullness নম্বর এটি হল সব VehicleFullness ফিল্ড জুড়ে সর্বোচ্চ ব্যবহারের অনুপাত। কুকুরের ডে-কেয়ারের এই পরিস্থিতিতে, এটি হল ০.৩৫ কারণ ড্রাইভার পুরো সকালের শিফটের মাত্র ১০৫ মিনিট ভ্যান চালান, যা আপনি অনুরোধে ৫ ঘণ্টা হিসেবে উল্লেখ করেছেন।
activeSpan নম্বর এটি হল রুট প্ল্যানের কর্মসময়ের তুলনায় ড্রাইভারের মোট শিফটের দৈর্ঘ্যের অনুপাত। কম সংখ্যা মানে ড্রাইভার কর্মদিবসের কম সময় গাড়ি চালানোর জন্য ব্যয় করেন। এই ডগি ডে-কেয়ারের ক্ষেত্রে, এটি হল ০.৩৫ কারণ ড্রাইভার ৫ ঘণ্টার শিফটে ১০৫ মিনিটের জন্য ভ্যানটি চালান।
SkippedShipment index পূর্ণসংখ্যা এটি হল আসল অনুরোধে শিপমেন্টের জিরো-বেসড ইনডেক্স। এই পরিস্থিতিতে, ২ হল জার্মান শেফার্ড।
label স্ট্রিং অনুরোধে শিপমেন্টের জন্য আপনি এই লেবেল উল্লেখ করেছেন।
penaltyCost নম্বর অপ্টিমাইজার এই শিপমেন্ট এড়িয়ে গেলে আপনাকে এই জরিমানা দিতে হবে। এটি অনুরোধে আপনার উল্লেখ করা penaltyCost-এর সাথে মেলে।