ShipmentModel

একটি শিপমেন্ট মডেলে শিপমেন্টের একটি সেট থাকে যা অবশ্যই গাড়ির একটি সেট দ্বারা সম্পন্ন করতে হবে, পাশাপাশি সামগ্রিক খরচ কমিয়ে আনতে হবে, যা হল:

  • গাড়ির রুট নির্ধারণের খরচ (মোট সময় প্রতি খরচের যোগফল, ভ্রমণের সময় প্রতি খরচ এবং সমস্ত গাড়ির নির্দিষ্ট খরচ)।
  • শিপমেন্ট না করার জন্য জরিমানা।
  • শিপমেন্টের গ্লোবাল ডিউরেশনের খরচ
JSON উপস্থাপনা
{
  "shipments": [
    {
      object (Shipment)
    }
  ],
  "vehicles": [
    {
      object (Vehicle)
    }
  ],
  "objectives": [
    {
      object (Objective)
    }
  ],
  "globalStartTime": string,
  "globalEndTime": string,
  "globalDurationCostPerHour": number,
  "durationDistanceMatrices": [
    {
      object (DurationDistanceMatrix)
    }
  ],
  "durationDistanceMatrixSrcTags": [
    string
  ],
  "durationDistanceMatrixDstTags": [
    string
  ],
  "transitionAttributes": [
    {
      object (TransitionAttributes)
    }
  ],
  "shipmentTypeIncompatibilities": [
    {
      object (ShipmentTypeIncompatibility)
    }
  ],
  "shipmentTypeRequirements": [
    {
      object (ShipmentTypeRequirement)
    }
  ],
  "precedenceRules": [
    {
      object (PrecedenceRule)
    }
  ],
  "maxActiveVehicles": integer
}
ফিল্ড
shipments[]

object (Shipment)

শিপমেন্টের সেট যা মডেলে অবশ্যই পারফর্ম করতে হবে।

vehicles[]

object (Vehicle)

ভিজিট করার জন্য ব্যবহার করা যেতে পারে এমন গাড়ির সেট।

objectives[]

object (Objective)

এই মডেলের জন্য উদ্দেশ্যের সেট, যা আমরা খরচে রূপান্তর করব। খালি না থাকলে, ইনপুট মডেলটি খরচহীন হতে হবে। পরিবর্তিত অনুরোধ পেতে, solvingMode = TRANSFORM_AND_RETURN_REQUEST ব্যবহার করুন। মনে রাখবেন যে এই ক্ষেত্রে অনুরোধের সমাধান করা হবে না। সংশ্লিষ্ট ডকুমেন্টেশন দেখুন।

এক্সপেরিমেন্টাল: আরও বিবরণের জন্য https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request দেখুন।

globalStartTime

string (Timestamp format)

মডেলের গ্লোবাল শুরু ও শেষের সময়: এই রেঞ্জের বাইরে কোনও সময় সঠিক হিসেবে বিবেচনা করা যাবে না।

মডেলের সময়সীমা এক বছরের কম হতে হবে, অর্থাৎ globalEndTime এবং globalStartTime-এর মধ্যেকার সময়সীমা ৩১,৫৩৬,০০০ সেকেন্ডের কম হতে হবে।

cost_per_*hour ফিল্ড ব্যবহার করার সময়, পারফর্ম্যান্স বাড়াতে আপনি এই উইন্ডোকে আরও ছোট ইন্টারভেলে সেট করতে চাইতে পারেন (যেমন, আপনি যদি একটি দিনের মডেল তৈরি করেন, তাহলে আপনাকে গ্লোবাল সময়সীমা সেই দিনের জন্য সেট করতে হবে)। আনসেট করা থাকলে, ডিফল্ট হিসেবে 00:00:00 UTC, ১ জানুয়ারি, ১৯৭০ (অর্থাৎ, সেকেন্ড: ০, ন্যানো: ০) ব্যবহার করা হয়।

RFC 3339 ব্যবহার করে, যেখানে জেনারেট করা আউটপুট সবসময় Z-নরমালাইজড হবে এবং ০, ৩, ৬ বা ৯টি ভগ্নাংশ সংখ্যা ব্যবহার করবে। "Z" ছাড়া অন্যান্য অফসেটও গ্রহণ করা হয়। যেমন: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" বা "2014-10-02T15:01:23+05:30"।

globalEndTime

string (Timestamp format)

সেট করা না থাকলে, ডিফল্ট হিসেবে ১ জানুয়ারি, ১৯৭১, 00:00:00 UTC (অর্থাৎ, সেকেন্ড: ৩১৫৩৬০০০, ন্যানো: ০) ব্যবহার করা হয়।

RFC 3339 ব্যবহার করে, যেখানে জেনারেট করা আউটপুট সবসময় Z-নরমালাইজড হবে এবং ০, ৩, ৬ বা ৯টি ভগ্নাংশ সংখ্যা ব্যবহার করবে। "Z" ছাড়া অন্যান্য অফসেটও গ্রহণ করা হয়। যেমন: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" বা "2014-10-02T15:01:23+05:30"।

globalDurationCostPerHour

number

সামগ্রিক প্ল্যানের "গ্লোবাল ডিউরেশন" হল সব গাড়ির সবচেয়ে আগে কার্যকর হওয়ার শুরুর সময় এবং সবচেয়ে পরে কার্যকর হওয়ার শেষ সময়ের মধ্যে পার্থক্য। উদাহরণস্বরূপ, ব্যবহারকারীরা সেই পরিমাণের জন্য ঘণ্টা-প্রতি-মূল্য অ্যাসাইন করতে পারেন যাতে যত তাড়াতাড়ি সম্ভব কাজ শেষ করার জন্য অপ্টিমাইজ করা যায়। এই খরচ Shipment.penalty_cost-এর মতো একই ইউনিটে হতে হবে।

durationDistanceMatrices[]

object (DurationDistanceMatrix)

মডেলে ব্যবহৃত সময়সীমা ও দূরত্বের ম্যাট্রিক্স নির্দিষ্ট করে। এই ফিল্ড খালি থাকলে, useGeodesicDistances ফিল্ডের ভ্যালুর উপর নির্ভর করে, পরিবর্তে Google Maps বা জিওডেসিক দূরত্ব ব্যবহার করা হবে। এটি খালি না থাকলে, useGeodesicDistances সত্য হতে পারে না এবং durationDistanceMatrixSrcTags বা durationDistanceMatrixDstTags খালি হতে পারে না।

ব্যবহারের উদাহরণ:

  • দুটি লোকেশন আছে: locA এবং locB।
  • ১টি গাড়ি locA থেকে যাত্রা শুরু করে locA-তে শেষ করছে।
  • locB-তে ১টি পিক-আপ ভিজিটের অনুরোধ।
model {
  vehicles { startTags: "locA"  endTags: "locA" }
  shipments { pickups { tags: "locB" } }
  durationDistanceMatrixSrcTags: "locA"
  durationDistanceMatrixSrcTags: "locB"
  durationDistanceMatrixDstTags: "locA"
  durationDistanceMatrixDstTags: "locB"
  durationDistanceMatrices {
    rows {  # from: locA
      durations { seconds: 0 }   meters: 0    # to: locA
      durations { seconds: 100 } meters: 1000 # to: locB
    }
    rows {  # from: locB
      durations { seconds: 102 } meters: 990 # to: locA
      durations { seconds: 0 }   meters: 0   # to: locB
    }
  }
}
  • তিনটি লোকেশন আছে: locA, locB এবং locC।
  • ১টি গাড়ি locA থেকে যাত্রা শুরু করে locB-তে শেষ করছে, "fast" ম্যাট্রিক্স ব্যবহার করে।
  • ১টি গাড়ি locB থেকে যাত্রা শুরু করে locB-তে শেষ করছে, "slow" ম্যাট্রিক্স ব্যবহার করে।
  • ১টি গাড়ি locB থেকে যাত্রা শুরু করে locB-তে শেষ করছে, "fast" ম্যাট্রিক্স ব্যবহার করে।
  • locC-তে ১টি পিক-আপ ভিজিটের অনুরোধ।
model {
  vehicles { startTags: "locA" endTags: "locB" startTags: "fast" }
  vehicles { startTags: "locB" endTags: "locB" startTags: "slow" }
  vehicles { startTags: "locB" endTags: "locB" startTags: "fast" }
  shipments { pickups { tags: "locC" } }
  durationDistanceMatrixSrcTags: "locA"
  durationDistanceMatrixSrcTags: "locB"
  durationDistanceMatrixSrcTags: "locC"
  durationDistanceMatrixDstTags: "locB"
  durationDistanceMatrixDstTags: "locC"
  durationDistanceMatrices {
    vehicleStartTag: "fast"
    rows {  # from: locA
      durations { seconds: 1000 } meters: 2000 # to: locB
      durations { seconds: 600 }  meters: 1000 # to: locC
    }
    rows {  # from: locB
      durations { seconds: 0 }   meters: 0    # to: locB
      durations { seconds: 700 } meters: 1200 # to: locC
    }
    rows {  # from: locC
      durations { seconds: 702 } meters: 1190 # to: locB
      durations { seconds: 0 }   meters: 0    # to: locC
    }
  }
  durationDistanceMatrices {
    vehicleStartTag: "slow"
    rows {  # from: locA
      durations { seconds: 1800 } meters: 2001 # to: locB
      durations { seconds: 900 }  meters: 1002 # to: locC
    }
    rows {  # from: locB
      durations { seconds: 0 }    meters: 0    # to: locB
      durations { seconds: 1000 } meters: 1202 # to: locC
    }
    rows {  # from: locC
      durations { seconds: 1001 } meters: 1195 # to: locB
      durations { seconds: 0 }    meters: 0    # to: locC
    }
  }
}
durationDistanceMatrixSrcTags[]

string

সময়সীমা ও দূরত্বের ম্যাট্রিক্সের সোর্স নির্ধারণকারী ট্যাগ; durationDistanceMatrices(i).rows(j) ম্যাট্রিক্স i-তে durationDistanceMatrixSrcTags(j) ট্যাগ সহ ভিজিট থেকে অন্যান্য ভিজিটের সময়সীমা ও দূরত্ব নির্ধারণ করে।

ট্যাগ VisitRequest.tags বা Vehicle.start_tags-এর সাথে সম্পর্কিত। প্রদত্ত VisitRequest বা Vehicle এই ফিল্ডের ঠিক একটি ট্যাগের সাথে ম্যাচ করতে হবে। মনে রাখবেন, Vehicle-এর সোর্স, ডেস্টিনেশন ও ম্যাট্রিক্স ট্যাগ একই হতে পারে; একইভাবে VisitRequest-এর সোর্স ও ডেস্টিনেশন ট্যাগ একই হতে পারে। সব ট্যাগ আলাদা হতে হবে এবং খালি স্ট্রিং হলে চলবে না। এই ফিল্ড খালি না থাকলে, durationDistanceMatrices খালি থাকলে চলবে না।

durationDistanceMatrixDstTags[]

string

সময়সীমা ও দূরত্বের ম্যাট্রিক্সের গন্তব্য নির্ধারণকারী ট্যাগ; durationDistanceMatrices(i).rows(j).durations(k) (resp. durationDistanceMatrices(i).rows(j).meters(k)) ম্যাট্রিক্স i-এ durationDistanceMatrixSrcTags(j) ট্যাগ সহ ভিজিট থেকে durationDistanceMatrixDstTags(k) ট্যাগ সহ ভিজিটের ভ্রমণের সময়সীমা (বা দূরত্ব) নির্ধারণ করে।

ট্যাগ VisitRequest.tags বা Vehicle.start_tags-এর সাথে সম্পর্কিত। প্রদত্ত VisitRequest বা Vehicle এই ফিল্ডের ঠিক একটি ট্যাগের সাথে ম্যাচ করতে হবে। মনে রাখবেন, Vehicle-এর সোর্স, ডেস্টিনেশন ও ম্যাট্রিক্স ট্যাগ একই হতে পারে; একইভাবে VisitRequest-এর সোর্স ও ডেস্টিনেশন ট্যাগ একই হতে পারে। সব ট্যাগ আলাদা হতে হবে এবং খালি স্ট্রিং হলে চলবে না। এই ফিল্ড খালি না থাকলে, durationDistanceMatrices খালি থাকলে চলবে না।

transitionAttributes[]

object (TransitionAttributes)

মডেলে ট্রানজিশন অ্যাট্রিবিউট যোগ করা হয়েছে।

shipmentTypeIncompatibilities[]

object (ShipmentTypeIncompatibility)

মানানসই নয় এমন shipment_types-এর সেট (ShipmentTypeIncompatibility দেখুন)।

shipmentTypeRequirements[]

object (ShipmentTypeRequirement)

shipmentTypeটি প্রয়োজনীয়তার সেট (ShipmentTypeRequirement দেখুন)।

precedenceRules[]

object (PrecedenceRule)

অগ্রাধিকার সংক্রান্ত নিয়মের সেট যা মডেলে অবশ্যই এনফোর্স করতে হবে।

গুরুত্বপূর্ণ: অগ্রাধিকারের নিয়ম ব্যবহার করলে, অপ্টিমাইজ করা যেতে পারে এমন সমস্যার সাইজ সীমিত হয়ে যায়। অগ্রাধিকার সংক্রান্ত নিয়ম ব্যবহার করে করা অনুরোধে অনেক শিপমেন্ট থাকলে তা বাতিল করা হতে পারে।

maxActiveVehicles

integer

অ্যাক্টিভ গাড়ির সর্বাধিক সংখ্যা সীমিত করে। কোনও গাড়ির রুট অন্তত একটি শিপমেন্ট সম্পূর্ণ করলে, সেই গাড়িটি অ্যাক্টিভ হিসেবে বিবেচিত হয়। গাড়ির সংখ্যার তুলনায় ড্রাইভারের সংখ্যা কম হলে এবং গাড়ির বহর বৈচিত্র্যময় হলে, রুটের সংখ্যা সীমিত করতে এটি ব্যবহার করা যেতে পারে। অপ্টিমাইজেশন তখন ব্যবহারের জন্য গাড়ির সেরা সাবসেট বেছে নেবে। অবশ্যই পজিটিভ হতে হবে।

শিপমেন্ট

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

JSON উপস্থাপনা
{
  "displayName": string,
  "pickups": [
    {
      object (VisitRequest)
    }
  ],
  "deliveries": [
    {
      object (VisitRequest)
    }
  ],
  "loadDemands": {
    string: {
      object (Load)
    },
    ...
  },
  "allowedVehicleIndices": [
    integer
  ],
  "costsPerVehicle": [
    number
  ],
  "costsPerVehicleIndices": [
    integer
  ],
  "pickupToDeliveryAbsoluteDetourLimit": string,
  "pickupToDeliveryTimeLimit": string,
  "shipmentType": string,
  "label": string,
  "ignore": boolean,
  "penaltyCost": number,
  "pickupToDeliveryRelativeDetourLimit": number
}
ফিল্ড
displayName

string

শিপমেন্টের জন্য ব্যবহারকারীর সেট করা ডিসপ্লে নাম। এটি সর্বাধিক ৬৩ অক্ষরের হতে পারে এবং UTF-8 অক্ষর ব্যবহার করতে পারে।

pickups[]

object (VisitRequest)

শিপমেন্টের সাথে যুক্ত পিক-আপের বিকল্পের সেট। উল্লেখ করা না থাকলে, ডেলিভারির জন্য গাড়িকে শুধু সংশ্লিষ্ট লোকেশনে যেতে হবে।

deliveries[]

object (VisitRequest)

শিপমেন্টের সাথে যুক্ত ডেলিভারির বিকল্পের সেট। নির্দিষ্ট করা না থাকলে, গাড়িটিকে শুধুমাত্র পিক-আপের সাথে সম্পর্কিত লোকেশনে যেতে হবে।

loadDemands

map (key: string, value: object (Load))

শিপমেন্টের লোড সংক্রান্ত চাহিদা (যেমন ওজন, ভলিউম, প্যালেটের সংখ্যা ইত্যাদি)। ম্যাপের কীগুলি সংশ্লিষ্ট লোডের ধরন বর্ণনা করে শনাক্তকারী হওয়া উচিত, আদর্শভাবে ইউনিটগুলিও অন্তর্ভুক্ত করা উচিত। যেমন: "weight_kg", "volume_gallons", "pallet_count" ইত্যাদি। প্রদত্ত কী ম্যাপে না থাকলে, সংশ্লিষ্ট লোডকে ফাঁকা হিসেবে বিবেচনা করা হয়।

allowedVehicleIndices[]

integer

এই শিপমেন্ট করতে পারে এমন গাড়ির সেট। খালি থাকলে, সব গাড়ি এটি করতে পারে। ShipmentModel-এর vehicles তালিকায় ইন্ডেক্স অনুযায়ী গাড়ি দেখানো হয়।

costsPerVehicle[]

number

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

  • costsPerVehicleIndices-এর মতো একই সংখ্যক এলিমেন্ট। costsPerVehicle[i], মডেলের costsPerVehicleIndices[i] নম্বর গাড়ির সাথে সম্পর্কিত।
  • মডেলে যতগুলি গাড়ি আছে ঠিক ততগুলি এলিমেন্ট। i-তম এলিমেন্ট মডেলের #i নম্বর গাড়ির সাথে সম্পর্কিত।

এই খরচগুলি অবশ্যই penaltyCost-এর মতো একই ইউনিটে হতে হবে এবং নেতিবাচক হওয়া উচিত নয়। এই ধরনের কোনও খরচ না থাকলে, এই ফিল্ডটি ফাঁকা রাখুন।

costsPerVehicleIndices[]

integer

গাড়ির সূচক যেখানে costsPerVehicle প্রযোজ্য। খালি না থাকলে, এতে অবশ্যই costsPerVehicle-এর মতো একই সংখ্যক এলিমেন্ট থাকতে হবে। গাড়ির ইন্ডেক্স একাধিকবার উল্লেখ করা যাবে না। costsPerVehicleIndices থেকে কোনও গাড়ি বাদ দেওয়া হলে, সেটির খরচ শূন্য হয়।

pickupToDeliveryAbsoluteDetourLimit

string (Duration format)

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

যেমন, ধরা যাক, বেছে নেওয়া পিক-আপ বিকল্প থেকে সরাসরি বেছে নেওয়া ডেলিভারি বিকল্পে যেতে সবচেয়ে কম সময় t লাগে। তারপর pickupToDeliveryAbsoluteDetourLimit সেটিং এনফোর্স করে:

startTime(delivery) - startTime(pickup) <=
t + pickupToDeliveryAbsoluteDetourLimit

একই শিপমেন্টে আপেক্ষিক এবং পরম সীমা উভয়ই নির্দিষ্ট করা থাকলে, প্রতিটি সম্ভাব্য পিকআপ/ডেলিভারি পেয়ারের জন্য আরও সীমাবদ্ধ সীমা ব্যবহার করা হয়। ২০১৭/১০ থেকে, ভ্রমণের সময়সীমা গাড়ির উপর নির্ভর না করলে তবেই ডিট্যুর কাজ করে।

pickupToDeliveryTimeLimit

string (Duration format)

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

shipmentType

string

এই শিপমেন্টের "ধরন" উল্লেখ করে এমন খালি নয় এমন স্ট্রিং। এই ফিচারটি shipment_types-এর মধ্যে অসঙ্গতি বা প্রয়োজনীয়তা নির্ধারণ করতে ব্যবহার করা যেতে পারে (ShipmentModel-এ shipmentTypeIncompatibilities এবং shipmentTypeRequirements দেখুন)।

visitTypes-এর থেকে আলাদা যা একটি ভিজিটের জন্য নির্দিষ্ট করা হয়েছে: একই শিপমেন্টের অন্তর্গত সব পিক-আপ/ডেলিভারি একই shipmentType শেয়ার করে।

label

string

এই শিপমেন্টের জন্য একটি লেবেল নির্দিষ্ট করে। এই লেবেলটি সংশ্লিষ্ট ShipmentRoute.Visit-এর shipmentLabel-এ উত্তরে রিপোর্ট করা হয়েছে।

ignore

boolean

যদি সত্য হয়, তাহলে এই শিপমেন্ট এড়িয়ে যান, তবে penaltyCost প্রয়োগ করবেন না।

মডেলে কোনও shipmentTypeRequirements থাকলে, শিপমেন্ট উপেক্ষা করার ফলে যাচাইকরণ সংক্রান্ত সমস্যা হয়।

injectedFirstSolutionRoutes বা injectedSolutionConstraint-এ করা শিপমেন্ট উপেক্ষা করার অনুমতি দেওয়া হয়; সলভার পারফর্ম করা রুট থেকে সংশ্লিষ্ট পিক-আপ/ডেলিভারি ভিজিট সরিয়ে দেয়। precedenceRules যে রেফারেন্স উপেক্ষা করা শিপমেন্টও উপেক্ষা করা হবে।

penaltyCost

number

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

গুরুত্বপূর্ণ: এই জরিমানা নির্দিষ্ট করা না থাকলে, এটি অসীম বলে বিবেচিত হয়, অর্থাৎ শিপমেন্ট সম্পূর্ণ করতেই হবে।

pickupToDeliveryRelativeDetourLimit

number

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

যেমন, ধরা যাক, বেছে নেওয়া পিক-আপ বিকল্প থেকে সরাসরি বেছে নেওয়া ডেলিভারি বিকল্পে যেতে সবচেয়ে কম সময় t লাগে। তারপর pickupToDeliveryRelativeDetourLimit সেটিং এনফোর্স করে:

startTime(delivery) - startTime(pickup) <=
std::ceil(t * (1.0 + pickupToDeliveryRelativeDetourLimit))

একই শিপমেন্টে আপেক্ষিক এবং পরম সীমা উভয়ই নির্দিষ্ট করা থাকলে, প্রতিটি সম্ভাব্য পিকআপ/ডেলিভারি পেয়ারের জন্য আরও সীমাবদ্ধ সীমা ব্যবহার করা হয়। ২০১৭/১০ থেকে, ভ্রমণের সময়সীমা গাড়ির উপর নির্ভর না করলে তবেই ডিট্যুর কাজ করে।

VisitRequest

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

JSON উপস্থাপনা
{
  "arrivalLocation": {
    object (LatLng)
  },
  "arrivalWaypoint": {
    object (Waypoint)
  },
  "departureLocation": {
    object (LatLng)
  },
  "departureWaypoint": {
    object (Waypoint)
  },
  "tags": [
    string
  ],
  "timeWindows": [
    {
      object (TimeWindow)
    }
  ],
  "duration": string,
  "cost": number,
  "loadDemands": {
    string: {
      object (Load)
    },
    ...
  },
  "visitTypes": [
    string
  ],
  "label": string,
  "avoidUTurns": boolean
}
ফিল্ড
arrivalLocation

object (LatLng)

এই VisitRequest করার সময় গাড়িটি যে ভৌগোলিক লোকেশনে পৌঁছায়। শিপমেন্ট মডেলে সময়সীমা ও দূরত্বের ম্যাট্রিক্স থাকলে, arrivalLocation উল্লেখ করা যাবে না।

arrivalWaypoint

object (Waypoint)

এই VisitRequest করার সময় গাড়িটি যে ওয়েপয়েন্টে পৌঁছায়। শিপমেন্ট মডেলে সময়সীমা ও দূরত্বের ম্যাট্রিক্স থাকলে, arrivalWaypoint উল্লেখ করা যাবে না।

departureLocation

object (LatLng)

এই VisitRequest সম্পূর্ণ করার পরে গাড়িটি যে ভৌগোলিক লোকেশন থেকে রওনা হয়। arrivalLocation-এর মতো একই হলে বাদ দেওয়া যেতে পারে। শিপমেন্ট মডেলে সময়সীমা ও দূরত্বের ম্যাট্রিক্স থাকলে, departureLocation উল্লেখ করা যাবে না।

departureWaypoint

object (Waypoint)

এই VisitRequest সম্পূর্ণ করার পরে গাড়িটি যে ওয়েপয়েন্ট থেকে রওনা হয়। arrivalWaypoint-এর মতো একই হলে বাদ দেওয়া যেতে পারে। শিপমেন্ট মডেলে সময়সীমা ও দূরত্বের ম্যাট্রিক্স থাকলে, departureWaypoint উল্লেখ করা যাবে না।

tags[]

string

ভিজিট অনুরোধের সাথে অ্যাটাচ করা ট্যাগ উল্লেখ করে। খালি বা ডুপ্লিকেট স্ট্রিং ব্যবহার করা যাবে না।

timeWindows[]

object (TimeWindow)

ভিজিটের সময় পৌঁছানোর সময়কে সীমাবদ্ধ করে এমন সময়সীমা। মনে রাখবেন, কোনও গাড়ি পৌঁছানোর সময়সীমার বাইরেও ছাড়তে পারে, অর্থাৎ পৌঁছানোর সময় + সময়সীমা কোনও নির্দিষ্ট সময়সীমার মধ্যে থাকতে হবে এমন নয়। গাড়ি TimeWindow.start_time-এর আগে এসে গেলে, আপনাকে অপেক্ষা করতে হতে পারে।

TimeWindow না থাকার অর্থ হল, গাড়িটি যেকোনও সময় এই ভিজিট করতে পারে।

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

শুধুমাত্র একটি টাইম উইন্ডো থাকলে তবেই costPerHourAfterSoftEndTime এবং softEndTime সেট করা যাবে।

duration

string (Duration format)

ভিজিটের সময়সীমা, অর্থাৎ গাড়িটি আসার পর থেকে চলে যাওয়া পর্যন্ত সময় (সম্ভাব্য অপেক্ষার সময়ের সাথে যোগ করা হবে; timeWindows দেখুন)।

cost

number

গাড়ির রুটে এই ভিজিটের অনুরোধের পরিষেবা দেওয়ার খরচ। শিপমেন্টের প্রতিটি বিকল্প পিক-আপ বা ডেলিভারির জন্য আলাদা খরচ পেমেন্ট করতে এটি ব্যবহার করা যেতে পারে। এই খরচ অবশ্যই Shipment.penalty_cost-এর মতো একই ইউনিটে হতে হবে এবং ঋণাত্মক হতে পারবে না।

loadDemands

map (key: string, value: object (Load))

এই ভিজিটের অনুরোধের লোড ডিমান্ড। এটি Shipment.load_demands ফিল্ডের মতোই, তবে এটি সম্পূর্ণ Shipment-এর পরিবর্তে শুধুমাত্র এই VisitRequest-এর ক্ষেত্রে প্রযোজ্য। এখানে তালিকাভুক্ত চাহিদাগুলি Shipment.load_demands-এ তালিকাভুক্ত চাহিদার সাথে যোগ করা হয়েছে।

visitTypes[]

string

ভিজিটের ধরন নির্দিষ্ট করে। এই ভিজিট সম্পূর্ণ করার জন্য কোনও গাড়ির অতিরিক্ত সময় প্রয়োজন হলে তা বরাদ্দ করতে এটি ব্যবহার করা হতে পারে (Vehicle.extra_visit_duration_for_visit_type দেখুন)।

একটি ধরন শুধুমাত্র একবারই দেখা যেতে পারে।

label

string

এই VisitRequest-এর জন্য একটি লেবেল নির্দিষ্ট করে। এই লেবেলটি উত্তরে visitLabel হিসেবে সংশ্লিষ্ট ShipmentRoute.Visit-এ রিপোর্ট করা হয়েছে।

avoidUTurns

boolean

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

এক্সপেরিমেন্টাল: আরও জানতে https://developers.google.com/maps/tt/route-optimization/experimental/u-turn-avoidance/make-request দেখুন।

LatLng

এমন একটি অবজেক্ট যা অক্ষাংশ/দ্রাঘিমাংশ পেয়ারকে দেখায়। এটি অক্ষাংশ ও দ্রাঘিমাংশের ডিগ্রি দেখানোর জন্য ডাবলসের একটি জোড়া হিসেবে প্রকাশ করা হয়। অন্যভাবে উল্লেখ করা না থাকলে, এই অবজেক্টকে অবশ্যই WGS84 স্ট্যান্ডার্ড মেনে চলতে হবে। মান অবশ্যই স্বাভাবিক রেঞ্জের মধ্যে হতে হবে।

JSON উপস্থাপনা
{
  "latitude": number,
  "longitude": number
}
ফিল্ড
latitude

number

অক্ষাংশ ডিগ্রিতে। এটি অবশ্যই [-৯০.০, +৯০.০] রেঞ্জের মধ্যে হতে হবে।

longitude

number

ডিগ্রিতে দ্রাঘিমাংশ। এটি অবশ্যই [-১৮০.০, +১৮০.০] রেঞ্জের মধ্যে হতে হবে।

Waypoint

একটি ওয়েপয়েন্ট এনক্যাপসুলেট করে। ওয়েপয়েন্ট VisitRequests-এর পৌঁছানো ও রওনা হওয়ার লোকেশন এবং গাড়ির শুরু ও শেষের লোকেশন চিহ্নিত করে।

JSON উপস্থাপনা
{
  "sideOfRoad": boolean,
  "vehicleStopover": boolean,

  // The following is a list of mutually exclusive fields. At most one of the
  // fields will be set in a response:
  "location": {
    object (Location)
  },
  "placeId": string
  // End of mutually exclusive fields.
}
ফিল্ড
sideOfRoad

boolean

ঐচ্ছিক। এটি দেখায় যে এই ওয়েপয়েন্টের লোকেশন রাস্তার একটি নির্দিষ্ট দিকে গাড়ি থামানোর জন্য পছন্দ করা হয়েছে। আপনি এই ভ্যালু সেট করলে, রুটটি লোকেশনের মধ্যে দিয়ে যাবে যাতে রাস্তার যেদিকে লোকেশনটি রয়েছে, রাস্তার সেই দিকে গাড়িটি থামতে পারে। 'হাঁটা' ভ্রমণ মোডের জন্য এই বিকল্প কাজ করে না।

vehicleStopover

boolean

এটি ইঙ্গিত করে যে ওয়েপয়েন্টটি গাড়ি থামানোর জন্য, যেখানে উদ্দেশ্য হল পিক-আপ বা ড্রপ-অফ করা। এই বিকল্পটি শুধুমাত্র 'ড্রাইভিং' ট্রাভেল মোডের জন্য এবং 'locationType' 'location' হলে কাজ করে।

পরীক্ষামূলক: এই ফিল্ডের আচরণ বা অস্তিত্ব ভবিষ্যতে পরিবর্তিত হতে পারে।

কোনও লোকেশন দেখানোর বিভিন্ন উপায়। নিচে পারস্পরিকভাবে এক্সক্লুসিভ ফিল্ডের তালিকা দেওয়া হল। উত্তরে সর্বাধিক একটি ফিল্ড সেট করা হবে:
location

object (Location)

ভৌগোলিক স্থানাঙ্ক ব্যবহার করে নির্দিষ্ট করা একটি পয়েন্ট, যার মধ্যে ঐচ্ছিক হেডিং অন্তর্ভুক্ত।

placeId

string

ওয়েপয়েন্টের সাথে যুক্ত POI প্লেস আইডি।

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

মিউচুয়ালি এক্সক্লুসিভ ফিল্ডের শেষ।

লোকেশন

একটি লোকেশন (একটি ভৌগোলিক পয়েন্ট এবং একটি ঐচ্ছিক শিরোনাম) এনক্যাপসুলেট করে।

JSON উপস্থাপনা
{
  "latLng": {
    object (LatLng)
  },
  "heading": integer
}
ফিল্ড
latLng

object (LatLng)

ওয়েপয়েন্টের ভৌগোলিক স্থানাঙ্ক।

heading

integer

ট্রাফিকের গতির দিকনির্দেশের সাথে সম্পর্কিত কম্পাস হেডিং। পিক-আপ ও ড্রপ-অফের জন্য রাস্তার কোন দিক ব্যবহার করা হবে তা এই ভ্যালু থেকে বোঝা যায়। হেডিং ভ্যালু ০ থেকে ৩৬০ পর্যন্ত হতে পারে, যেখানে ০ হল উত্তর দিক, ৯০ হল পূর্ব দিক ইত্যাদি।

TimeWindow

টাইম উইন্ডো কোনও ইভেন্টের সময়কে সীমাবদ্ধ করে, যেমন কোনও ভিজিটে পৌঁছানোর সময় অথবা কোনও গাড়ির শুরু ও শেষ হওয়ার সময়।

হার্ড টাইম উইন্ডো বাউন্ড, startTime এবং endTime, ইভেন্টের সবচেয়ে আগে এবং সবচেয়ে পরে হওয়ার সময় এনফোর্স করে, যেমন startTime <= event_time <= endTime। সফ্ট টাইম উইন্ডোর নিম্ন সীমা, softStartTime, softStartTime-এ বা তার পরে ইভেন্টটি হওয়ার জন্য একটি পছন্দ প্রকাশ করে, যা softStartTime-এর কত আগে ইভেন্টটি ঘটে তার সমানুপাতিক খরচ বহন করে। সফ্ট টাইম উইন্ডোর ঊর্ধ্বসীমা, softEndTime, softEndTime-এ বা তার আগে ইভেন্টটি হওয়ার জন্য একটি পছন্দ প্রকাশ করে, softEndTime-এর কতক্ষণ পরে ইভেন্টটি ঘটে তার অনুপাতে খরচ বহন করে। startTime, endTime, softStartTime এবং softEndTime গ্লোবাল সময়সীমার মধ্যে হতে হবে (ShipmentModel.global_start_time এবং ShipmentModel.global_end_time দেখুন) এবং এগুলি মেনে চলতে হবে:

  0 <= `startTime` <= `endTime` and
  0 <= `startTime` <= `softStartTime` and
  0 <= `softEndTime` <= `endTime`.
JSON উপস্থাপনা
{
  "startTime": string,
  "endTime": string,
  "softStartTime": string,
  "softEndTime": string,
  "costPerHourBeforeSoftStartTime": number,
  "costPerHourAfterSoftEndTime": number
}
ফিল্ড
startTime

string (Timestamp format)

হার্ড টাইম উইন্ডো শুরুর সময়। উল্লেখ করা না থাকলে, এটি ShipmentModel.global_start_time-এ সেট করা হবে।

RFC 3339 ব্যবহার করে, যেখানে জেনারেট করা আউটপুট সবসময় Z-নরমালাইজড হবে এবং ০, ৩, ৬ বা ৯টি ভগ্নাংশ সংখ্যা ব্যবহার করবে। "Z" ছাড়া অন্যান্য অফসেটও গ্রহণ করা হয়। যেমন: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" বা "2014-10-02T15:01:23+05:30"।

endTime

string (Timestamp format)

হার্ড টাইম উইন্ডো শেষ হওয়ার সময়। উল্লেখ করা না থাকলে, এটি ShipmentModel.global_end_time-এ সেট করা হবে।

RFC 3339 ব্যবহার করে, যেখানে জেনারেট করা আউটপুট সবসময় Z-নরমালাইজড হবে এবং ০, ৩, ৬ বা ৯টি ভগ্নাংশ সংখ্যা ব্যবহার করবে। "Z" ছাড়া অন্যান্য অফসেটও গ্রহণ করা হয়। যেমন: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" বা "2014-10-02T15:01:23+05:30"।

softStartTime

string (Timestamp format)

টাইম উইন্ডোর সফ্ট স্টার্ট টাইম।

RFC 3339 ব্যবহার করে, যেখানে জেনারেট করা আউটপুট সবসময় Z-নরমালাইজড হবে এবং ০, ৩, ৬ বা ৯টি ভগ্নাংশ সংখ্যা ব্যবহার করবে। "Z" ছাড়া অন্যান্য অফসেটও গ্রহণ করা হয়। যেমন: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" বা "2014-10-02T15:01:23+05:30"।

softEndTime

string (Timestamp format)

টাইম উইন্ডোর সফট শেষ হওয়ার সময়।

RFC 3339 ব্যবহার করে, যেখানে জেনারেট করা আউটপুট সবসময় Z-নরমালাইজড হবে এবং ০, ৩, ৬ বা ৯টি ভগ্নাংশ সংখ্যা ব্যবহার করবে। "Z" ছাড়া অন্যান্য অফসেটও গ্রহণ করা হয়। যেমন: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" বা "2014-10-02T15:01:23+05:30"।

costPerHourBeforeSoftStartTime

number

ইভেন্টটি softStartTime-এর আগে ঘটলে, মডেলের অন্যান্য খরচের সাথে ঘণ্টা-প্রতি-মূল্য যোগ করা হয়, যা এইভাবে গণনা করা হয়:

   max(0, softStartTime - t.seconds)
                          * costPerHourBeforeSoftStartTime / 3600,
t being the time of the event.

এই খরচ অবশ্যই ধনাত্মক হতে হবে এবং softStartTime সেট করা থাকলে তবেই ফিল্ডটি সেট করা যাবে।

costPerHourAfterSoftEndTime

number

softEndTime-এর পরে ইভেন্ট ঘটলে, মডেলে অন্যান্য খরচের সাথে ঘণ্টা-প্রতি-মূল্য যোগ করা হয়, যা এইভাবে গণনা করা হয়:

   max(0, t.seconds - softEndTime.seconds)
                    * costPerHourAfterSoftEndTime / 3600,
t being the time of the event.

এই খরচ অবশ্যই ধনাত্মক হতে হবে এবং softEndTime সেট করা থাকলে তবেই ফিল্ড সেট করা যাবে।

গাড়ি

শিপমেন্ট সংক্রান্ত সমস্যার ক্ষেত্রে কোনও গাড়ির মডেল। শিপমেন্ট সংক্রান্ত সমস্যার সমাধান করলে, এই গাড়ির জন্য startLocation থেকে শুরু করে endLocation পর্যন্ত একটি রুট তৈরি হবে। রুট হল পরপর ঘুরে দেখা জায়গার ক্রম (ShipmentRoute দেখুন)।

JSON উপস্থাপনা
{
  "displayName": string,
  "travelMode": enum (TravelMode),
  "routeModifiers": {
    object (RouteModifiers)
  },
  "startLocation": {
    object (LatLng)
  },
  "startWaypoint": {
    object (Waypoint)
  },
  "endLocation": {
    object (LatLng)
  },
  "endWaypoint": {
    object (Waypoint)
  },
  "startTags": [
    string
  ],
  "endTags": [
    string
  ],
  "startTimeWindows": [
    {
      object (TimeWindow)
    }
  ],
  "endTimeWindows": [
    {
      object (TimeWindow)
    }
  ],
  "unloadingPolicy": enum (UnloadingPolicy),
  "loadLimits": {
    string: {
      object (LoadLimit)
    },
    ...
  },
  "costPerHour": number,
  "costPerTraveledHour": number,
  "costPerKilometer": number,
  "fixedCost": number,
  "usedIfRouteIsEmpty": boolean,
  "routeDurationLimit": {
    object (DurationLimit)
  },
  "travelDurationLimit": {
    object (DurationLimit)
  },
  "routeDistanceLimit": {
    object (DistanceLimit)
  },
  "extraVisitDurationForVisitType": {
    string: string,
    ...
  },
  "breakRule": {
    object (BreakRule)
  },
  "label": string,
  "ignore": boolean,
  "travelDurationMultiple": number
}
ফিল্ড
displayName

string

ব্যবহারকারীর দ্বারা নির্ধারিত গাড়ির ডিসপ্লে নাম। এটি সর্বাধিক ৬৩ অক্ষরের হতে পারে এবং UTF-8 অক্ষর ব্যবহার করতে পারে।

travelMode

enum (TravelMode)

ভ্রমণ মোড, যা গাড়ির ব্যবহারযোগ্য রাস্তা এবং এর গতিকে প্রভাবিত করে। এছাড়াও travelDurationMultiple দেখুন।

routeModifiers

object (RouteModifiers)

প্রদত্ত গাড়ির জন্য রুট গণনা করার পদ্ধতিকে প্রভাবিত করে এমন শর্তের একটি সেট।

startLocation

object (LatLng)

কোনও শিপমেন্ট তোলার আগে যে ভৌগোলিক লোকেশন থেকে গাড়িটি যাত্রা শুরু করে। উল্লেখ করা না থাকলে, গাড়িটি তার প্রথম পিক-আপ থেকে শুরু হয়। শিপমেন্ট মডেলে সময়সীমা ও দূরত্বের ম্যাট্রিক্স থাকলে, startLocation উল্লেখ করা যাবে না।

startWaypoint

object (Waypoint)

ওয়েপয়েন্ট একটি ভৌগোলিক লোকেশনকে বোঝায় যেখানে কোনও শিপমেন্ট তোলার আগে গাড়িটি শুরু হয়। startWaypoint বা startLocation-এর মধ্যে কোনওটিই নির্দিষ্ট করা না থাকলে, গাড়িটি তার প্রথম পিক-আপ থেকে শুরু হয়। শিপমেন্ট মডেলে সময়সীমা ও দূরত্বের ম্যাট্রিক্স থাকলে, startWaypoint উল্লেখ করা যাবে না।

endLocation

object (LatLng)

গাড়িটি শেষ VisitRequest সম্পূর্ণ করার পরে যে ভৌগোলিক লোকেশনে এসে থামে। উল্লেখ করা না থাকলে, গাড়ির ShipmentRoute শেষ VisitRequest সম্পূর্ণ করার সাথে সাথেই শেষ হয়ে যায়। শিপমেন্ট মডেলে সময়সীমা ও দূরত্বের ম্যাট্রিক্স থাকলে, endLocation উল্লেখ করা যাবে না।

endWaypoint

object (Waypoint)

ওয়েপয়েন্ট একটি ভৌগোলিক লোকেশনকে দেখায় যেখানে গাড়িটি তার শেষ VisitRequest সম্পূর্ণ করার পরে থামে। endWaypoint বা endLocation-এর কোনওটিই উল্লেখ করা না থাকলে, গাড়ির ShipmentRoute শেষ VisitRequest সম্পূর্ণ করার সাথে সাথেই শেষ হয়ে যায়। শিপমেন্ট মডেলে সময়সীমা ও দূরত্বের ম্যাট্রিক্স থাকলে, endWaypoint উল্লেখ করা যাবে না।

startTags[]

string

গাড়ির রুটের শুরুতে অ্যাটাচ করা ট্যাগ নির্দিষ্ট করে।

খালি বা ডুপ্লিকেট স্ট্রিং ব্যবহার করা যাবে না।

endTags[]

string

গাড়ির রুটের শেষে অ্যাটাচ করা ট্যাগ নির্দিষ্ট করে।

খালি বা ডুপ্লিকেট স্ট্রিং ব্যবহার করা যাবে না।

startTimeWindows[]

object (TimeWindow)

গাড়িটি যে সময়সীমার মধ্যে তার শুরুর লোকেশন থেকে রওনা হতে পারে। সেগুলি অবশ্যই গ্লোবাল সময়সীমার মধ্যে হতে হবে (ShipmentModel.global_* ফিল্ড দেখুন)। উল্লেখ করা না থাকলে, গ্লোবাল সময়সীমা ছাড়া আর কোনও সীমাবদ্ধতা নেই।

একই পুনরাবৃত্ত ফিল্ডের অন্তর্গত টাইম উইন্ডো অবশ্যই ডিসজয়েন্ট হতে হবে, অর্থাৎ, কোনও টাইম উইন্ডো অন্যটির সাথে ওভারল্যাপ করতে বা সংলগ্ন হতে পারবে না এবং সেগুলি অবশ্যই কালানুক্রমিক ক্রমে হতে হবে।

শুধুমাত্র একটি টাইম উইন্ডো থাকলে তবেই costPerHourAfterSoftEndTime এবং softEndTime সেট করা যাবে।

endTimeWindows[]

object (TimeWindow)

গাড়িটি তার গন্তব্যে পৌঁছাতে পারে এমন সময়সীমা। সেগুলি অবশ্যই গ্লোবাল সময়সীমার মধ্যে হতে হবে (ShipmentModel.global_* ফিল্ড দেখুন)। উল্লেখ করা না থাকলে, গ্লোবাল সময়সীমা ছাড়া আর কোনও সীমাবদ্ধতা নেই।

একই পুনরাবৃত্ত ফিল্ডের অন্তর্গত টাইম উইন্ডো অবশ্যই ডিসজয়েন্ট হতে হবে, অর্থাৎ, কোনও টাইম উইন্ডো অন্যটির সাথে ওভারল্যাপ করতে বা সংলগ্ন হতে পারবে না এবং সেগুলি অবশ্যই কালানুক্রমিক ক্রমে হতে হবে।

শুধুমাত্র একটি টাইম উইন্ডো থাকলে তবেই costPerHourAfterSoftEndTime এবং softEndTime সেট করা যাবে।

unloadingPolicy

enum (UnloadingPolicy)

গাড়িতে আনলোডিং সংক্রান্ত নীতি এনফোর্স করা হয়েছে।

loadLimits

map (key: string, value: object (LoadLimit))

গাড়ির ধারণ ক্ষমতা (যেমন, ওজন, ভলিউম, প্যালেটের সংখ্যা)। ম্যাপের কীগুলি হল লোডের প্রকারের শনাক্তকারী, যা Shipment.load_demands ফিল্ডের কীগুলির সাথে সামঞ্জস্যপূর্ণ। এই ম্যাপে কোনও নির্দিষ্ট কী না থাকলে, সংশ্লিষ্ট ক্যাপাসিটি সীমাহীন বলে বিবেচনা করা হয়।

costPerHour

number

গাড়ির খরচ: সব খরচ যোগ করা হয় এবং তা অবশ্যই Shipment.penalty_cost-এর মতো একই ইউনিটে হতে হবে।

গাড়ির রুটের প্রতি ঘণ্টার খরচ। এই খরচ রুটের জন্য নেওয়া মোট সময়ের উপর প্রয়োগ করা হয় এবং এর মধ্যে ভ্রমণের সময়, অপেক্ষা করার সময় ও ভিজিটের সময় অন্তর্ভুক্ত। শুধু costPerTraveledHour-এর পরিবর্তে costPerHour ব্যবহার করলে অতিরিক্ত লেটেন্সি হতে পারে।

costPerTraveledHour

number

গাড়ির রুটে প্রতি ঘণ্টা ভ্রমণের খরচ। এই খরচ শুধুমাত্র রুটে ভ্রমণের সময় (অর্থাৎ, ShipmentRoute.transitions-এ যা রিপোর্ট করা হয়েছে) এবং অপেক্ষার সময় ও ভিজিটের সময় বাদ দিয়ে প্রযোজ্য হয়।

costPerKilometer

number

গাড়ির রুটের প্রতি কিলোমিটারের খরচ। এই খরচ ShipmentRoute.transitions-এ উল্লেখ করা দূরত্বের উপর প্রযোজ্য হয় এবং একটি VisitRequest-এর arrivalLocation থেকে departureLocation পর্যন্ত অন্তর্নিহিতভাবে ভ্রমণ করা দূরত্বের উপর প্রযোজ্য হয় না।

fixedCost

number

এই গাড়িটি কোনও শিপমেন্ট হ্যান্ডেল করার জন্য ব্যবহার করা হলে নির্দিষ্ট খরচ প্রযোজ্য হবে।

usedIfRouteIsEmpty

boolean

এই ফিল্ডটি শুধুমাত্র সেইসব গাড়ির ক্ষেত্রে প্রযোজ্য হয় যেগুলির রুট কোনও শিপমেন্টের জন্য ব্যবহার করা হয় না। এটি ইঙ্গিত করে যে এই ক্ষেত্রে গাড়িটি ব্যবহার করা হয়েছে বলে বিবেচনা করা উচিত কিনা।

সত্য হলে, কোনও শিপমেন্ট না থাকলেও, গাড়িটি তার শুরু থেকে শেষ লোকেশন পর্যন্ত যায় এবং এর শুরু --> শেষ ভ্রমণের ফলে সময় এবং দূরত্বের খরচ বিবেচনা করা হয়।

অন্যথায়, এটি শুরু থেকে শেষ লোকেশন পর্যন্ত যায় না এবং এই গাড়ির জন্য কোনও breakRule বা দেরি (TransitionAttributes থেকে) শিডিউল করা নেই। এই ক্ষেত্রে, গাড়ির ShipmentRoute-এ গাড়ির ইন্ডেক্স ও লেবেল ছাড়া আর কোনও তথ্য থাকে না।

routeDurationLimit

object (DurationLimit)

গাড়ির রুটের মোট সময়সীমার উপর সীমা প্রযোজ্য। কোনও নির্দিষ্ট OptimizeToursResponse-এ, কোনও গাড়ির রুটের সময়কাল হল তার vehicleEndTime এবং vehicleStartTime-এর মধ্যে পার্থক্য।

travelDurationLimit

object (DurationLimit)

গাড়ির রুটের ভ্রমণের সময়সীমার উপর সীমাবদ্ধতা প্রয়োগ করা হয়েছে। কোনও নির্দিষ্ট OptimizeToursResponse-এ, রুটে ভ্রমণের সময়কাল হল এর সব transitions.travel_duration-এর যোগফল।

routeDistanceLimit

object (DistanceLimit)

গাড়ির রুটের মোট দূরত্বের উপর সীমা প্রযোজ্য। প্রদত্ত OptimizeToursResponse-এর ক্ষেত্রে, রুটের দূরত্ব হল এর সব transitions.travel_distance_meters-এর যোগফল।

extraVisitDurationForVisitType

map (key: string, value: string (Duration format))

visitTypes স্ট্রিং থেকে সময়সীমা পর্যন্ত ম্যাপ নির্দিষ্ট করে। নির্দিষ্ট visitTypes-এর সাথে ভিজিটের জন্য VisitRequest.duration-এর সাথে অতিরিক্ত সময় যোগ করা হয়। costPerHour উল্লেখ করা থাকলে, এই অতিরিক্ত ভিজিটের সময়সীমার জন্য খরচ যোগ করা হয়। কী (যেমন, visitTypes) ফাঁকা স্ট্রিং হতে পারবে না।

ভিজিট অনুরোধে একাধিক ধরন থাকলে, ম্যাপে প্রতিটি ধরনের জন্য একটি সময়সীমা যোগ করা হবে।

breakRule

object (BreakRule)

এই গাড়িতে যে বিরতির শিডিউল এনফোর্স করা হবে তার বিবরণ দেয়। খালি থাকলে, এই গাড়ির জন্য কোনও বিরতি শিডিউল করা হবে না।

label

string

এই গাড়ির জন্য একটি লেবেল নির্দিষ্ট করে। এই লেবেলটি উত্তরে সংশ্লিষ্ট ShipmentRoute-এর vehicleLabel হিসেবে রিপোর্ট করা হয়েছে।

ignore

boolean

এটি সত্য হলে, usedIfRouteIsEmpty অবশ্যই মিথ্যা হতে হবে এবং এই গাড়িটি অব্যবহৃত থাকবে।

injectedFirstSolutionRoutes-এ কোনও শিপমেন্ট যদি উপেক্ষা করা কোনও গাড়ির মাধ্যমে করা হয়, তাহলে প্রথম সমাধানে সেটি এড়িয়ে যাওয়া হয়, তবে উত্তরে সেটি করার স্বাধীনতা থাকে।

injectedSolutionConstraint-এ কোনও ইগনোর করা গাড়ি যদি শিপমেন্ট করে এবং কোনও সম্পর্কিত পিক-আপ/ডেলিভারি যদি গাড়িতেই রাখতে হয় (অর্থাৎ, RELAX_ALL_AFTER_THRESHOLD লেভেলে রিল্যাক্স করা না হয়), তাহলে উত্তরে এটি এড়িয়ে যাওয়া হয়। কোনও শিপমেন্টে খালি নয় এমন allowedVehicleIndices ফিল্ড থাকলে এবং অনুমোদিত সবকটি গাড়ি উপেক্ষা করা হলে, উত্তরে এটি এড়িয়ে যাওয়া হয়।

travelDurationMultiple

number

একটি মাল্টিপ্লিকেটিভ ফ্যাক্টর নির্দিষ্ট করে যা এই গাড়ির ভ্রমণের সময় বাড়াতে বা কমাতে ব্যবহার করা যেতে পারে। যেমন, এটি ২.০-এ সেট করার অর্থ হল, এই গাড়িটি ধীরগতির এবং স্ট্যান্ডার্ড গাড়ির তুলনায় এর ভ্রমণের সময় দ্বিগুণ। এই মাল্টিপল ভিজিটের সময়সীমাকে প্রভাবিত করে না। costPerHour বা costPerTraveledHour উল্লেখ করা থাকলে, এটি খরচের উপর প্রভাব ফেলে। এটি অবশ্যই [0.001, 1000.0] রেঞ্জের মধ্যে হতে হবে। আনসেট করা থাকলে, গাড়িটি স্ট্যান্ডার্ড এবং এই গুণিতকটি ১.০ হিসেবে বিবেচনা করা হয়।

সতর্কতা: এই গুণক প্রয়োগ করার পরে কিন্তু কোনও সংখ্যাগত অপারেশন করার আগে ভ্রমণের সময় নিকটতম সেকেন্ডে রাউন্ড অফ করা হবে, তাই ছোট গুণকের ফলে নির্ভুলতা কমে যেতে পারে।

এছাড়াও, নিচে extraVisitDurationForVisitType দেখুন।

TravelMode

গাড়ির মাধ্যমে ব্যবহার করা যায় এমন ভ্রমণ মোড।

এগুলি Google Maps Platform Routes API-এর ভ্রমণ মোডের সাবসেট হওয়া উচিত, দেখুন: https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteTravelMode

মনে রাখবেন: WALKING রুট বিটা ভার্সনে আছে এবং কখনও কখনও পরিষ্কার ফুটপাথ বা পথচারীদের জন্য রাস্তা নাও থাকতে পারে। আপনার অ্যাপে দেখানো সব হাঁটার রুটের জন্য ব্যবহারকারীকে এই সতর্কতা দেখাতে হবে।

Enums
TRAVEL_MODE_UNSPECIFIED অনুল্লিখিত ভ্রমণ মোড, DRIVING-এর সমতুল্য।
DRIVING গাড়ি চালানোর দিকনির্দেশ (গাড়ি, ...) অনুযায়ী ভ্রমণের মোড।
WALKING হাঁটার দিকনির্দেশ অনুযায়ী ভ্রমণ মোড।
TWO_WHEELER মোটরচালিত দুই চাকার গাড়ি। যেমন, মোটরসাইকেল। মনে রাখবেন, এটি সাইকেল চালিয়ে ভ্রমণ মোডের থেকে আলাদা, কারণ সাইকেল চালিয়ে ভ্রমণ মোডে মানুষের শারীরিক শক্তি ব্যবহার করে চালানো হয় এমন বাহন অন্তর্ভুক্ত। এই ট্রাভেল মোড শুধুমাত্র মোটরসাইকেলের জন্য কাজ করে এমন দেশ ও অঞ্চল-এর তালিকায় উল্লেখ করা দেশগুলিতে কাজ করে।

RouteModifiers

গাড়ির রুট গণনা করার সময় পূরণ করার জন্য ঐচ্ছিক শর্তের একটি সেট এনক্যাপসুলেট করে। এটি Google Maps Platform Routes Preferred API-তে RouteModifiers-এর মতো; দেখুন: https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteModifiers।

JSON উপস্থাপনা
{
  "avoidTolls": boolean,
  "avoidHighways": boolean,
  "avoidFerries": boolean,
  "avoidIndoor": boolean
}
ফিল্ড
avoidTolls

boolean

টোল রাস্তা এড়িয়ে চলা সম্ভব কিনা তা উল্লেখ করে। টোল রাস্তা নেই এমন রুটকে অগ্রাধিকার দেওয়া হবে। শুধুমাত্র মোটরচালিত ভ্রমণ মোডের ক্ষেত্রে প্রযোজ্য।

avoidHighways

boolean

সম্ভব হলে হাইওয়ে এড়িয়ে যেতে হবে কিনা তা উল্লেখ করে। হাইওয়ে নেই এমন রুটকে অগ্রাধিকার দেওয়া হবে। শুধুমাত্র মোটরচালিত ভ্রমণ মোডের ক্ষেত্রে প্রযোজ্য।

avoidFerries

boolean

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

avoidIndoor

boolean

ঐচ্ছিক। সম্ভব হলে ইনডোর নেভিগেশন এড়িয়ে যেতে হবে কিনা তা নির্দিষ্ট করে। ইনডোর নেভিগেশন নেই এমন রুটকে অগ্রাধিকার দেওয়া হবে। শুধুমাত্র WALKING ট্রাভেল মোডের ক্ষেত্রে প্রযোজ্য।

UnloadingPolicy

গাড়ি থেকে কীভাবে মালপত্র নামানো যাবে সেই সংক্রান্ত নীতি। শুধুমাত্র সেইসব শিপমেন্টের ক্ষেত্রে প্রযোজ্য যেগুলিতে পিক-আপ ও ডেলিভারি, দুটিই আছে।

অন্যান্য শিপমেন্ট unloadingPolicy-এর উপর নির্ভর না করে রুটের যেকোনও জায়গায় হতে পারে।

Enums
UNLOADING_POLICY_UNSPECIFIED আনলোডিং নীতি উল্লেখ করা নেই; ডেলিভারি অবশ্যই সংশ্লিষ্ট পিকআপের পরে হতে হবে।
LAST_IN_FIRST_OUT পিক-আপের বিপরীত ক্রমে ডেলিভারি করতে হবে
FIRST_IN_FIRST_OUT পিক-আপের ক্রম অনুযায়ী ডেলিভারি করতে হবে

LoadLimit

গাড়ির ক্ষেত্রে প্রযোজ্য লোড সীমা নির্ধারণ করে, যেমন "এই ট্রাকে শুধুমাত্র ৩৫০০ কেজি পর্যন্ত বহন করা যেতে পারে"। loadLimits দেখুন।

JSON উপস্থাপনা
{
  "softMaxLoad": string,
  "costPerUnitAboveSoftMax": number,
  "startLoadInterval": {
    object (Interval)
  },
  "endLoadInterval": {
    object (Interval)
  },
  "maxLoad": string,
  "costPerKilometer": {
    object (LoadCost)
  },
  "costPerTraveledHour": {
    object (LoadCost)
  }
}
ফিল্ড
softMaxLoad

string (int64 format)

লোডের সফট সীমা। costPerUnitAboveSoftMax দেখুন।

costPerUnitAboveSoftMax

number

এই গাড়ির রুটে লোড যদি কখনও softMaxLoad-এর বেশি হয়, তাহলে নিম্নলিখিত জরিমানা প্রযোজ্য হবে (গাড়ি প্রতি একবারই): (লোড - softMaxLoad) * costPerUnitAboveSoftMax. সব খরচ যোগ করা হয় এবং Shipment.penalty_cost-এর মতো একই ইউনিটে থাকতে হবে। সফ্ট লিমিট শুধুমাত্র সেই ধরনের ক্ষেত্রে নির্ধারণ করা যেতে পারে যা মডেল জুড়ে শুধুমাত্র পিক-আপ বা শুধুমাত্র ডেলিভারির ক্ষেত্রে প্রযোজ্য।

startLoadInterval

object (Interval)

রুটের শুরুতে গাড়ির গ্রহণযোগ্য লোড ইন্টারভাল।

endLoadInterval

object (Interval)

রুটের শেষে গাড়ির গ্রহণযোগ্য লোড ইন্টারভাল।

maxLoad

string (int64 format)

লোড করার সর্বাধিক গ্রহণযোগ্য পরিমাণ।

costPerKilometer

object (LoadCost)

এই গাড়ির জন্য এক কিলোমিটার দূরত্বে এক ইউনিট লোড সরানোর খরচ। এটি জ্বালানি খরচের প্রক্সি হিসেবে ব্যবহার করা যেতে পারে: লোড যদি ওজন (নিউটন এককে) হয়, তাহলে লোড*কিলোমিটারের মাত্রা শক্তির মাত্রার সমান হয়।

এক্সপেরিমেন্টাল: আরও বিবরণের জন্য https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request দেখুন।

costPerTraveledHour

object (LoadCost)

এই গাড়ির জন্য এক ঘণ্টা ধরে এক ইউনিট লোড নিয়ে যাতায়াত করার খরচ।

এক্সপেরিমেন্টাল: আরও বিবরণের জন্য https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request দেখুন।

বিরতি

গ্রহণযোগ্য লোডের পরিমাণের ব্যবধান।

JSON উপস্থাপনা
{
  "min": string,
  "max": string
}
ফিল্ড
min

string (int64 format)

ন্যূনতম গ্রহণযোগ্য লোড। ≥ ০ হতে হবে। দুটিই নির্দিষ্ট করা থাকলে, min অবশ্যই ≤ max হতে হবে।

max

string (int64 format)

সর্বাধিক গ্রহণযোগ্য লোড। ≥ ০ হতে হবে। অনির্দিষ্ট থাকলে, এই মেসেজের মাধ্যমে সর্বাধিক লোড সীমাবদ্ধ করা হয় না। দুটিই নির্দিষ্ট করা থাকলে, min অবশ্যই ≤ max হতে হবে।

LoadCost

Transition-এর সময় এক ইউনিট লোড সরানোর খরচ। কোনও নির্দিষ্ট লোডের জন্য, খরচ দুটি অংশের যোগফল:

  • min(load, loadThreshold) * costPerUnitBelowThreshold
  • সর্বাধিক(০, লোড - loadThreshold) * costPerUnitAboveThreshold

এই খরচের সাথে, সমাধানগুলি প্রথমে উচ্চ চাহিদাগুলি সরবরাহ করতে পছন্দ করে, বা সমতুল্যভাবে উচ্চ চাহিদাগুলি শেষ পর্যন্ত পিকআপ করে। যেমন, কোনও গাড়িতে যদি

load_limit {
  key: "weight"
  value {
    costPerKilometer {
      loadThreshold: 15
      costPerUnitBelowThreshold: 2.0
      costPerUnitAboveThreshold: 10.0
    }
  }
}

এবং এর রুট হল শুরু,পিক-আপ,পিক-আপ,ডেলিভারি,ডেলিভারি,ট্রানজিশন সহ শেষ:

transition { vehicle_load['weight'] { amount: 0 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 20 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
             travelDistanceMeters: 1000.0 }

তাহলে এই LoadCost-এর জন্য খরচ হল (cost_below * load_below * kilometers + cost_above * load_above * kms)

  • ট্রানজিশন ০: ০.০
  • ট্রানজিশন ১: ২.০ * ১০ * ১.০ + ১০.০ * ০ * ১.০ = ২০.০
  • ট্রানজিশন ২: ২.০ * ১৫ * ১.০ + ১০.০ * (২০ - ১৫) * ১.০ = ৮০.০
  • ট্রানজিশন ৩: ২.০ * ১০ * ১.০ + ১০.০ * ০ * ১.০ = ২০.০
  • ট্রানজিশন ৪: ০.০

তাই, রুট জুড়ে LoadCost হল ১২০.০।

তবে, রুট যদি শুরু,পিক-আপ,ডেলিভারি,পিক-আপ,ডেলিভারি,শেষ হয় এবং ট্রানজিশন থাকে:

transition { vehicle_load['weight'] { amount: 0 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
             travelDistanceMeters: 1000.0 }

তাহলে এই LoadCost-এর জন্য খরচ হল

  • ট্রানজিশন ০: ০.০
  • ট্রানজিশন ১: ২.০ * ১০ * ১.০ + ১০.০ * ০ * ১.০ = ২০.০
  • ট্রানজিশন ২: ০.০
  • ট্রানজিশন ৩: ২.০ * ১০ * ১.০ + ১০.০ * ০ * ১.০ = ২০.০
  • ট্রানজিশন ৪: ০.০

এখানে রুটের উপর LoadCost হল ৪০.০।

LoadCost-এর জন্য ভারী-লোড ট্রানজিশন সহ সমাধান আরও ব্যয়বহুল হয়ে যায়।

এক্সপেরিমেন্টাল: আরও বিবরণের জন্য https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request দেখুন।

JSON উপস্থাপনা
{
  "loadThreshold": string,
  "costPerUnitBelowThreshold": number,
  "costPerUnitAboveThreshold": number
}
ফিল্ড
loadThreshold

string (int64 format)

লোডের পরিমাণ যার উপরে লোডের একটি ইউনিট সরানোর খরচ costPerUnitBelowThreshold থেকে costPerUnitAboveThreshold-এ পরিবর্তিত হয়। >= ০ হতে হবে।

costPerUnitBelowThreshold

number

০ থেকে থ্রেশহোল্ডের মধ্যে প্রতিটি ইউনিটের জন্য, লোডের একটি ইউনিট সরানোর খরচ। অবশ্যই একটি সসীম মান হতে হবে এবং >= ০।

costPerUnitAboveThreshold

number

থ্রেশহোল্ডের উপরে প্রতিটি ইউনিটের জন্য, লোডের একটি ইউনিট সরানোর খরচ। বিশেষ ক্ষেত্রে থ্রেশহোল্ড = ০, এটি ইউনিট প্রতি একটি নির্দিষ্ট খরচ। অবশ্যই একটি সসীম মান হতে হবে এবং >= ০।

DurationLimit

কোনও গাড়ির রুটের সর্বাধিক সময়সীমা নির্ধারণকারী সীমা। এটি শক্ত বা নরম হতে পারে।

সফ্ট লিমিট ফিল্ড সংজ্ঞায়িত করা হলে, সফ্ট ম্যাক্স থ্রেশহোল্ড এবং এর সাথে সম্পর্কিত খরচ একসাথে সংজ্ঞায়িত করতে হবে।

JSON উপস্থাপনা
{
  "maxDuration": string,
  "softMaxDuration": string,
  "quadraticSoftMaxDuration": string,
  "costPerHourAfterSoftMax": number,
  "costPerSquareHourAfterQuadraticSoftMax": number
}
ফিল্ড
maxDuration

string (Duration format)

একটি হার্ড সীমা যা সর্বাধিক সময়সীমা পর্যন্ত সময়কালকে সীমাবদ্ধ করে।

softMaxDuration

string (Duration format)

একটি সফট সীমা যা সর্বাধিক সময়সীমা এনফোর্স করে না, তবে লঙ্ঘন করা হলে রুটের জন্য খরচ হয়। এই খরচটি একই ইউনিটের সাথে মডেলে সংজ্ঞায়িত অন্যান্য খরচের সাথে যোগ করে।

নির্দিষ্ট করা থাকলে, softMaxDuration অবশ্যই নেগেটিভ নয় এমন সংখ্যা হতে হবে। maxDuration-ও উল্লেখ করা থাকলে, softMaxDuration-এর ভ্যালু maxDuration-এর থেকে কম হতে হবে।

quadraticSoftMaxDuration

string (Duration format)

একটি সফট সীমা যা সর্বাধিক সময়সীমা প্রয়োগ করে না, তবে লঙ্ঘন করা হলে রুটটি একটি খরচ বহন করে, যা সময়কালের দ্বিঘাত। এই খরচটি একই ইউনিটের সাথে মডেলে সংজ্ঞায়িত অন্যান্য খরচের সাথে যোগ করে।

quadraticSoftMaxDuration সেট করা থাকলে, নিম্নলিখিত শর্তগুলি পূরণ করতে হবে:

  • এটি অবশ্যই নেগেটিভ নয় এমন সংখ্যা হতে হবে।
  • maxDuration অবশ্যই নির্দিষ্ট করতে হবে।
  • quadraticSoftMaxDuration অবশ্যই maxDuration-এর থেকে কম হতে হবে।
  • পার্থক্য অবশ্যই এক দিনের বেশি হবে না: maxDuration - quadraticSoftMaxDuration <= 86400 seconds
costPerHourAfterSoftMax

number

softMaxDuration থ্রেশহোল্ড লঙ্ঘন করা হলে প্রতি ঘণ্টায় খরচ। সময়সীমা থ্রেশহোল্ডের নিচে থাকলে অতিরিক্ত খরচ ০ হয়, অন্যথায় খরচ সময়সীমার উপর নির্ভর করে, যেমন:

  costPerHourAfterSoftMax * (duration - softMaxDuration)

খরচ অবশ্যই অঋণাত্মক হতে হবে।

costPerSquareHourAfterQuadraticSoftMax

number

quadraticSoftMaxDuration থ্রেশহোল্ড লঙ্ঘন করা হলে প্রতি স্কোয়ার আওয়ারে খরচ।

সময়সীমা থ্রেশহোল্ডের নিচে থাকলে অতিরিক্ত খরচ ০ হয়, অন্যথায় খরচ সময়সীমার উপর নির্ভর করে, যেমন:

  costPerSquareHourAfterQuadraticSoftMax *
  (duration - quadraticSoftMaxDuration)^2

খরচ অবশ্যই অঋণাত্মক হতে হবে।

DistanceLimit

সর্বাধিক কত দূরত্ব ভ্রমণ করা যাবে তা নির্ধারণকারী সীমা। এটি শক্ত বা নরম হতে পারে।

সফ্ট লিমিট সংজ্ঞায়িত করা হলে, softMaxMeters এবং costPerKilometerAboveSoftMax দুটিকেই সংজ্ঞায়িত করতে হবে এবং তা অঋণাত্মক হতে হবে।

JSON উপস্থাপনা
{
  "maxMeters": string,
  "softMaxMeters": string,
  "costPerKilometerBelowSoftMax": number,
  "costPerKilometerAboveSoftMax": number
}
ফিল্ড
maxMeters

string (int64 format)

দূরত্বকে সর্বাধিক maxMeters-এ সীমাবদ্ধ করার জন্য একটি হার্ড লিমিট। সীমা অবশ্যই অঋণাত্মক হতে হবে।

softMaxMeters

string (int64 format)

সফ্ট লিমিট সর্বাধিক দূরত্বের সীমা এনফোর্স করে না, তবে লঙ্ঘন করা হলে এমন একটি খরচ হয় যা মডেলে সংজ্ঞায়িত অন্যান্য খরচের সাথে একই ইউনিটে যোগ হয়।

softMaxMeters উল্লেখ করা থাকলে, তা অবশ্যই maxMeters-এর থেকে কম এবং নন-নেগেটিভ হতে হবে।

costPerKilometerBelowSoftMax

number

কিলোমিটার প্রতি খরচ, softMaxMeters পর্যন্ত বৃদ্ধি, এই ফর্মুলা সহ:

  min(distanceMeters, softMaxMeters) / 1000.0 *
  costPerKilometerBelowSoftMax.

এই খরচ routeDistanceLimit-এ কাজ করে না।

costPerKilometerAboveSoftMax

number

দূরত্ব softMaxMeters-এর বেশি হলে প্রতি কিলোমিটারের জন্য খরচ। দূরত্ব সীমার মধ্যে থাকলে অতিরিক্ত খরচ ০ হয়, অন্যথায় খরচ গণনা করার জন্য নিম্নলিখিত ফর্মুলা ব্যবহার করা হয়:

  (distanceMeters - softMaxMeters) / 1000.0 *
  costPerKilometerAboveSoftMax.

খরচ অবশ্যই অঋণাত্মক হতে হবে।

BreakRule

গাড়ির জন্য টাইম ব্রেক জেনারেট করার নিয়ম (যেমন, লাঞ্চ ব্রেক)। বিরতি হল এমন একটি সময়সীমা যার মধ্যে গাড়িটি তার বর্তমান অবস্থানে অলস থাকে এবং কোনও ভিজিট করতে পারে না। এইসব ক্ষেত্রে বিরতি হতে পারে:

  • দুটি ভিজিটের মধ্যে যাতায়াতের সময় (যার মধ্যে ভিজিটের ঠিক আগে বা ঠিক পরের সময় অন্তর্ভুক্ত, তবে ভিজিটের মাঝের সময় নয়), যেক্ষেত্রে এটি ভিজিটের মধ্যে সংশ্লিষ্ট ট্রানজিট সময়কে বাড়িয়ে দেয়,
  • অথবা গাড়ি চালু করার আগে (বিরতির মাঝে গাড়ি চালু নাও হতে পারে), এই ক্ষেত্রে এটি গাড়ি চালু করার সময়কে প্রভাবিত করে না।
  • অথবা গাড়ির শেষ (একইভাবে, গাড়ির শেষ সময়ের সাথে)।
JSON উপস্থাপনা
{
  "breakRequests": [
    {
      object (BreakRequest)
    }
  ],
  "frequencyConstraints": [
    {
      object (FrequencyConstraint)
    }
  ]
}
ফিল্ড
breakRequests[]

object (BreakRequest)

বিরতির ক্রম। BreakRequest মেসেজ দেখুন।

frequencyConstraints[]

object (FrequencyConstraint)

একাধিক FrequencyConstraint প্রযোজ্য হতে পারে। এই BreakRule-এর BreakRequest-এর মাধ্যমে এগুলি সব পূরণ করতে হবে। FrequencyConstraint দেখুন।

BreakRequest

প্রতিটি গাড়ির ক্ষেত্রে প্রযোজ্য বিরতির ক্রম (অর্থাৎ, তাদের সংখ্যা এবং ক্রম) আগে থেকেই জানা থাকতে হবে। বারবার আসা BreakRequest সেই ক্রমকে সংজ্ঞায়িত করে, যে ক্রমে সেগুলি অবশ্যই ঘটবে। তাদের টাইম উইন্ডো (earliestStartTime / latestStartTime) ওভারল্যাপ করতে পারে, তবে সেগুলি অবশ্যই অর্ডারের সাথে মানানসই হতে হবে (এটি চেক করা হয়েছে)।

JSON উপস্থাপনা
{
  "earliestStartTime": string,
  "latestStartTime": string,
  "minDuration": string
}
ফিল্ড
earliestStartTime

string (Timestamp format)

প্রয়োজনীয়। বিরতি শুরুর নিম্ন সীমা (অন্তর্ভুক্ত)।

RFC 3339 ব্যবহার করে, যেখানে জেনারেট করা আউটপুট সবসময় Z-নরমালাইজড হবে এবং ০, ৩, ৬ বা ৯টি ভগ্নাংশ সংখ্যা ব্যবহার করবে। "Z" ছাড়া অন্যান্য অফসেটও গ্রহণ করা হয়। যেমন: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" বা "2014-10-02T15:01:23+05:30"।

latestStartTime

string (Timestamp format)

প্রয়োজনীয়। বিরতি শুরুর উচ্চ সীমা (অন্তর্ভুক্ত)।

RFC 3339 ব্যবহার করে, যেখানে জেনারেট করা আউটপুট সবসময় Z-নরমালাইজড হবে এবং ০, ৩, ৬ বা ৯টি ভগ্নাংশ সংখ্যা ব্যবহার করবে। "Z" ছাড়া অন্যান্য অফসেটও গ্রহণ করা হয়। যেমন: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" বা "2014-10-02T15:01:23+05:30"।

minDuration

string (Duration format)

প্রয়োজনীয়। বিরতির ন্যূনতম সময়সীমা। পজিটিভ হতে হবে।

FrequencyConstraint

উপরে উল্লেখ করা বিরতির ফ্রিকোয়েন্সি ও সময়সীমা আরও সীমাবদ্ধ করা যেতে পারে, যেমন "প্রতি ১২ ঘণ্টায় অন্তত ১ ঘণ্টার বিরতি নিতেই হবে"। ধরে নেওয়া যাক যে, এটিকে "১২ ঘণ্টার যেকোনও স্লাইডিং টাইম উইন্ডোর মধ্যে, কমপক্ষে এক ঘণ্টার অন্তত একটি বিরতি থাকতে হবে" হিসেবে ব্যাখ্যা করা যেতে পারে, সেই উদাহরণটি নিম্নলিখিত FrequencyConstraint-এ অনুবাদ করা হবে:

{
   minBreakDuration { seconds: 3600 }         # 1 hour.
   maxInterBreakDuration { seconds: 39600 }  # 11 hours (12 - 1 = 11).
}

সমাধানে বিরতির সময় এবং সময়কাল এই ধরনের সমস্ত সীমাবদ্ধতা মেনে চলবে, এর সাথে BreakRequest-এ আগে থেকে নির্দিষ্ট করা সময়সীমা এবং ন্যূনতম সময়কালও মেনে চলবে।

FrequencyConstraint-এর ক্ষেত্রে পরপর নয় এমন বিরতি প্রযোজ্য হতে পারে। যেমন, নিম্নলিখিত শিডিউল "প্রতি ১২ ঘণ্টায় ১ ঘণ্টা" উদাহরণ মেনে চলে:

  04:00 vehicle start
   .. performing travel and visits ..
  09:00 1 hour break
  10:00 end of the break
   .. performing travel and visits ..
  12:00 20-min lunch break
  12:20 end of the break
   .. performing travel and visits ..
  21:00 1 hour break
  22:00 end of the break
   .. performing travel and visits ..
  23:59 vehicle end
JSON উপস্থাপনা
{
  "minBreakDuration": string,
  "maxInterBreakDuration": string
}
ফিল্ড
minBreakDuration

string (Duration format)

প্রয়োজনীয়। এই সীমাবদ্ধতার জন্য বিরতির ন্যূনতম সময়সীমা। ঋণাত্মক নয়। FrequencyConstraint-এর বিবরণ দেখুন।

maxInterBreakDuration

string (Duration format)

প্রয়োজনীয়। রুটের যেকোনও সময়ের ব্যবধানের সর্বাধিক অনুমোদিত স্প্যান যাতে অন্তত আংশিকভাবে duration >= minBreakDuration-এর বিরতি অন্তর্ভুক্ত থাকে না। পজিটিভ হতে হবে।

উদ্দেশ্য

উদ্দেশ্য খরচ মডেলকে সম্পূর্ণভাবে প্রতিস্থাপন করে এবং তাই আগে থেকে থাকা খরচের সাথে মানানসই নয়। প্রতিটি উদ্দেশ্য, যেমন, গাড়ি, শিপমেন্ট বা ট্রানজিশন অ্যাট্রিবিউটের জন্য পূর্ব-নির্ধারিত খরচের সাথে ম্যাপ করা হয়।

এক্সপেরিমেন্টাল: আরও বিবরণের জন্য https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request দেখুন।

JSON উপস্থাপনা
{
  "type": enum (Type),
  "weight": number
}
ফিল্ড
type

enum (Type)

উদ্দেশ্যের ধরন।

weight

number

অন্যান্য উদ্দেশ্যের তুলনায় এই উদ্দেশ্য কতটা গুরুত্বপূর্ণ। এটি যেকোনও ধনাত্মক সংখ্যা হতে পারে, ওয়েটের যোগফল ১ হতে হবে এমন কোনও বাধ্যবাধকতা নেই। ডিফল্ট ওয়েট হল ১.০।

ধরন

উদ্দেশ্যের ধরন যা খরচের সেটে ম্যাপ করা হবে।

Enums
DEFAULT একটি যুক্তিসঙ্গত সমাধান নিশ্চিত করতে, খরচের একটি ডিফল্ট সেট ব্যবহার করা হবে। মনে রাখবেন: এই উদ্দেশ্যটি নিজে থেকেই ব্যবহার করা যেতে পারে, তবে ব্যবহারকারীর নির্দিষ্ট করা উদ্দেশ্যগুলিতে বেসলাইন হিসাবে সর্বদা ১.০ ওয়েট সহ যোগ করা হবে, যদি এটি আগে থেকে উপস্থিত না থাকে।
MIN_DISTANCE "MIN" উদ্দেশ্য। ভ্রমণের মোট দূরত্ব কমান।
MIN_WORKING_TIME সব গাড়ির মোট কাজের সময় কম করুন।
MIN_TRAVEL_TIME উপরের মতোই, তবে শুধু ভ্রমণের সময়ের উপর ফোকাস করা।
MIN_NUM_VEHICLES ব্যবহৃত গাড়ির সংখ্যা কম করুন।

DurationDistanceMatrix

ভিজিট ও গাড়ির শুরুর লোকেশন থেকে ভিজিট ও গাড়ির শেষ লোকেশন পর্যন্ত সময় ও দূরত্বের ম্যাট্রিক্স নির্দিষ্ট করে।

JSON উপস্থাপনা
{
  "rows": [
    {
      object (Row)
    }
  ],
  "vehicleStartTag": string
}
ফিল্ড
rows[]

object (Row)

সময়সীমা ও দূরত্বের ম্যাট্রিক্সের সারি নির্দিষ্ট করে। এতে অবশ্যই ShipmentModel.duration_distance_matrix_src_tags-এর মতো অনেক এলিমেন্ট থাকতে হবে।

vehicleStartTag

string

এই সময়সীমা ও দূরত্বের ম্যাট্রিক্স কোন কোন গাড়ির ক্ষেত্রে প্রযোজ্য তা নির্ধারণকারী ট্যাগ। খালি থাকলে, এটি সব গাড়ির ক্ষেত্রে প্রযোজ্য এবং শুধুমাত্র একটি ম্যাট্রিক্স থাকতে পারে।

প্রতিটি গাড়ির স্টার্ট অবশ্যই একটি ম্যাট্রিক্সের সাথে মিলতে হবে, অর্থাৎ তাদের startTags ফিল্ডের মধ্যে একটি অবশ্যই একটি ম্যাট্রিক্সের vehicleStartTag-এর সাথে মিলতে হবে (এবং শুধুমাত্র সেই ম্যাট্রিক্সের)।

সব ম্যাট্রিক্সের আলাদা vehicleStartTag থাকতে হবে।

সারি

সময়সীমা ও দূরত্বের ম্যাট্রিক্সের একটি সারি নির্দিষ্ট করে।

JSON উপস্থাপনা
{
  "durations": [
    string
  ],
  "meters": [
    number
  ]
}
ফিল্ড
durations[]

string (Duration format)

কোনও সারির জন্য সময়সীমার ভ্যালু। এতে অবশ্যই ShipmentModel.duration_distance_matrix_dst_tags-এর মতো অনেক এলিমেন্ট থাকতে হবে।

meters[]

number

প্রদত্ত সারির জন্য দূরত্বের মান। মডেলে দূরত্বের সাথে সম্পর্কিত কোনও খরচ বা সীমাবদ্ধতা না থাকলে, এটি খালি রাখা যেতে পারে; অন্যথায় এতে অবশ্যই durations-এর মতো অনেক এলিমেন্ট থাকতে হবে।

TransitionAttributes

একটি রুটে পরপর দুটি ভিজিটের মধ্যে ট্রানজিশনের অ্যাট্রিবিউট নির্দিষ্ট করে। একই ট্রানজিশনে একাধিক TransitionAttributes প্রযোজ্য হতে পারে: সেক্ষেত্রে, সব অতিরিক্ত খরচ যোগ করা হয় এবং সবচেয়ে কঠোর সীমাবদ্ধতা বা সীমা প্রযোজ্য হয় (স্বাভাবিক "AND" শব্দার্থবিদ্যা অনুসরণ করে)।

JSON উপস্থাপনা
{
  "srcTag": string,
  "excludedSrcTag": string,
  "dstTag": string,
  "excludedDstTag": string,
  "cost": number,
  "costPerKilometer": number,
  "distanceLimit": {
    object (DistanceLimit)
  },
  "delay": string
}
ফিল্ড
srcTag

string

এইসব অ্যাট্রিবিউট প্রযোজ্য হয় এমন (src->dst) ট্রানজিশনের সেটকে সংজ্ঞায়িত করা ট্যাগ।

কোনও সোর্স ভিজিট বা গাড়ি স্টার্ট করার ঘটনা তখনই ম্যাচ করে যখন এর VisitRequest.tags বা Vehicle.start_tags-এ হয় srcTag থাকে অথবা excludedSrcTag থাকে না (এই দুটি ফিল্ডের মধ্যে যেটি খালি নয় তার উপর নির্ভর করে)।

excludedSrcTag

string

srcTag দেখুন। srcTag এবং excludedSrcTag-এর মধ্যে যেকোনও একটি খালি রাখা যাবে না।

dstTag

string

গন্তব্য ভিজিট বা গাড়ির যাত্রা শেষ হওয়ার তথ্য তখনই মেলে যখন এর VisitRequest.tags বা Vehicle.end_tags-এ হয় dstTag থাকে অথবা excludedDstTag থাকে না (এই দুটি ফিল্ডের মধ্যে কোনটি খালি নেই তার উপর নির্ভর করে)।

excludedDstTag

string

dstTag দেখুন। dstTag এবং excludedDstTag-এর মধ্যে যেকোনও একটি খালি রাখা যাবে না।

cost

number

এই ট্রানজিশন পারফর্ম করার জন্য খরচ নির্দিষ্ট করে। এটি মডেলের অন্যান্য সমস্ত খরচের মতো একই ইউনিটে রয়েছে এবং অবশ্যই নেতিবাচক হবে না। এটি আগে থেকে থাকা অন্যান্য সব খরচের উপরে প্রযোজ্য হয়।

costPerKilometer

number

এই ট্রানজিশন করার সময় ভ্রমণ করা দূরত্বের জন্য প্রতি কিলোমিটারে খরচ নির্দিষ্ট করে। এটি গাড়িতে উল্লেখ করা যেকোনও Vehicle.cost_per_kilometer-এর সাথে যোগ করা হয়।

distanceLimit

object (DistanceLimit)

এই ট্রানজিশন করার সময় ভ্রমণ করা দূরত্বের উপর একটি সীমা নির্দিষ্ট করে।

২০২১/০৬ থেকে, শুধুমাত্র সফট লিমিট কাজ করে।

delay

string (Duration format)

এই ট্রানজিশন পারফর্ম করার সময় হওয়া বিলম্ব নির্দিষ্ট করে।

এই বিলম্ব সবসময় সোর্স ভিজিট শেষ করার পরে এবং গন্তব্য ভিজিট শুরু করার আগে ঘটে।

ShipmentTypeIncompatibility

shipmentType-এর উপর নির্ভর করে শিপমেন্টের মধ্যে অসঙ্গতি নির্দিষ্ট করে। একই রুটে বেমানান শিপমেন্টের উপস্থিতি বেমানান মোডের উপর ভিত্তি করে সীমাবদ্ধ করা হয়।

JSON উপস্থাপনা
{
  "types": [
    string
  ],
  "incompatibilityMode": enum (IncompatibilityMode)
}
ফিল্ড
types[]

string

মানানসই নয় এমন ধরনের তালিকা। তালিকাভুক্ত শিপমেন্টের মধ্যে দুটি শিপমেন্টের shipment_types আলাদা হলে সেগুলি "অসঙ্গতিপূর্ণ" হিসেবে বিবেচিত হয়।

incompatibilityMode

enum (IncompatibilityMode)

মানানসই না হওয়ার ক্ষেত্রে মোড প্রয়োগ করা হয়েছে।

IncompatibilityMode

একই রুটে বেমানান শিপমেন্টের উপস্থিতি কীভাবে সীমাবদ্ধ করা হয় তা নির্ধারণকারী মোড।

Enums
INCOMPATIBILITY_MODE_UNSPECIFIED অনুল্লিখিত 'ইনকমপ্যাটিবিলিটি' মোড। এই ভ্যালু কখনও ব্যবহার করা উচিত নয়।
NOT_PERFORMED_BY_SAME_VEHICLE এই মোডে, বেমানান ধরনের দুটি শিপমেন্ট কখনও একই গাড়ি শেয়ার করতে পারে না।
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY

এই মোডে, বেমানান ধরনের দুটি শিপমেন্ট একই সময়ে একই গাড়িতে কখনও থাকতে পারে না:

  • তারা একই গাড়ি তখনই শেয়ার করতে পারবেন যখন একটি ডেলিভারি করার পরে অন্যটি পিক-আপ করা হবে।
  • দুটি শিপমেন্টই যদি শুধু-পিকআপ (কোনও ডেলিভারি নেই) বা শুধু-ডেলিভারি (কোনও পিকআপ নেই) হয়, তাহলে সেগুলি কোনওভাবেই একই গাড়ি শেয়ার করতে পারবে না।

ShipmentTypeRequirement

shipmentType-এর উপর ভিত্তি করে শিপমেন্টের মধ্যে প্রয়োজনীয়তা নির্দিষ্ট করে। প্রয়োজনীয়তার মোড অনুযায়ী প্রয়োজনীয়তার নির্দিষ্ট বিবরণ সংজ্ঞায়িত করা হয়।

JSON উপস্থাপনা
{
  "requiredShipmentTypeAlternatives": [
    string
  ],
  "dependentShipmentTypes": [
    string
  ],
  "requirementMode": enum (RequirementMode)
}
ফিল্ড
requiredShipmentTypeAlternatives[]

string

dependentShipmentTypes-এর জন্য প্রয়োজনীয় বিকল্প শিপমেন্টের ধরনের তালিকা।

dependentShipmentTypes[]

string

dependentShipmentTypes ফিল্ডে উল্লেখ করা ধরনের সব শিপমেন্টের জন্য একই রুটে অন্তত একটি requiredShipmentTypeAlternatives ধরনের শিপমেন্ট ভিজিট করতে হবে।

মনে রাখবেন: প্রয়োজনীয়তার এমন চেইন যেখানে shipmentType নিজের উপর নির্ভর করে, তা অনুমোদিত নয়।

requirementMode

enum (RequirementMode)

প্রয়োজনীয়তার ক্ষেত্রে মোড প্রয়োগ করা হয়েছে।

RequirementMode

একটি রুটে নির্ভরশীল শিপমেন্টের উপস্থিতি নির্ধারণকারী মোড।

Enums
REQUIREMENT_MODE_UNSPECIFIED অনির্দিষ্ট প্রয়োজনীয় মোড। এই ভ্যালু কখনও ব্যবহার করা উচিত নয়।
PERFORMED_BY_SAME_VEHICLE এই মোডে, সব "নির্ভরশীল" শিপমেন্টকে অবশ্যই তাদের অন্তত একটি "প্রয়োজনীয়" শিপমেন্টের মতো একই গাড়ি শেয়ার করতে হবে।
IN_SAME_VEHICLE_AT_PICKUP_TIME

IN_SAME_VEHICLE_AT_PICKUP_TIME মোডের ক্ষেত্রে, সব "নির্ভরশীল" শিপমেন্টের জন্য পিক-আপের সময় তাদের গাড়িতে অন্তত একটি "প্রয়োজনীয়" শিপমেন্ট থাকতে হবে।

তাই "নির্ভরশীল" শিপমেন্ট পিক-আপে অবশ্যই এগুলির মধ্যে কোনও একটি থাকতে হবে:

  • শুধুমাত্র ডেলিভারি করার জন্য "প্রয়োজনীয়" শিপমেন্ট রুটে পরে ডেলিভারি করা হয়েছে, অথবা
  • "প্রয়োজনীয়" শিপমেন্টটি রুটে এর আগে পিক-আপ করা হয় এবং "প্রয়োজনীয়" শিপমেন্টের ডেলিভারি থাকলে, "নির্ভরশীল" শিপমেন্ট পিক-আপ করার পরে এই ডেলিভারিটি অবশ্যই করতে হবে।
IN_SAME_VEHICLE_AT_DELIVERY_TIME আগের মতোই, তবে "নির্ভরশীল" শিপমেন্টের ক্ষেত্রে ডেলিভারি করার সময় তাদের গাড়িতে একটি "প্রয়োজনীয়" শিপমেন্ট থাকতে হবে।

PrecedenceRule

দুটি ইভেন্টের মধ্যে অগ্রাধিকারের নিয়ম (প্রতিটি ইভেন্ট হল শিপমেন্ট পিক-আপ বা ডেলিভারি করা): "প্রথম" ইভেন্ট শুরু হওয়ার অন্তত offsetDuration পরে "দ্বিতীয়" ইভেন্ট শুরু করতে হবে।

একাধিক পূর্ববর্তী ঘটনা একই (বা সম্পর্কিত) ইভেন্টকে উল্লেখ করতে পারে, যেমন, "A ডেলিভারি করার পরে B পিক-আপ করা হয়" এবং "B পিক-আপ করার পরে C পিক-আপ করা হয়"।

এছাড়াও, দুটি শিপমেন্টই করা হলে তবেই অগ্রাধিকার প্রযোজ্য হয়, অন্যথায় তা উপেক্ষা করা হয়।

JSON উপস্থাপনা
{
  "firstIsDelivery": boolean,
  "secondIsDelivery": boolean,
  "offsetDuration": string,
  "firstIndex": integer,
  "secondIndex": integer
}
ফিল্ড
firstIsDelivery

boolean

"প্রথম" ইভেন্টটি ডেলিভারি কিনা তা নির্দেশ করে।

secondIsDelivery

boolean

"দ্বিতীয়" ইভেন্টটি ডেলিভারি কিনা তা নির্দেশ করে।

offsetDuration

string (Duration format)

"প্রথম" এবং "দ্বিতীয়" ইভেন্টের মধ্যে অফসেট। এটি নেগেটিভ হতে পারে।

firstIndex

integer

"প্রথম" ইভেন্টের শিপমেন্ট ইনডেক্স। এই ফিল্ডটি নির্দিষ্ট করতে হবে।

secondIndex

integer

"দ্বিতীয়" ইভেন্টের শিপমেন্ট ইনডেক্স। এই ফিল্ডটি নির্দিষ্ট করতে হবে।