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 ফিল্ড ব্যবহার করার সময়, পারফরম্যান্স বাড়ানোর জন্য আপনি এই উইন্ডোটিকে একটি ছোট ব্যবধানে সেট করতে চাইতে পারেন (যেমন, যদি আপনি একটি নির্দিষ্ট দিনের মডেল তৈরি করেন, তবে আপনার গ্লোবাল টাইম লিমিট সেই দিনেই সেট করা উচিত)। সেট করা না থাকলে, ডিফল্ট হিসেবে ০০:০০:০০ 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)

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

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 ফিল্ডের মানের উপর নির্ভর করে এর পরিবর্তে গুগল ম্যাপস বা জিওডেসিক দূরত্ব ব্যবহার করা হবে। যদি এটি খালি না থাকে, তাহলে useGeodesicDistances এর মান true হতে পারবে না এবং 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-তে শেষ করছে।
  • একটি যানবাহন locB থেকে তার যাত্রা শুরু করে locB-তেই শেষ করছে এবং এটি 'slow' ম্যাট্রিক্স ব্যবহার করছে।
  • একটি যানবাহন 'fast' ম্যাট্রিক্স ব্যবহার করে locB থেকে তার যাত্রা শুরু করে locB-তেই শেষ করছে।
  • 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) (যথাক্রমে durationDistanceMatrices(i).rows(j).meters(k)) ম্যাট্রিক্স i-তে durationDistanceMatrixSrcTags(j) ট্যাগযুক্ত ভিজিট থেকে durationDistanceMatrixDstTags durationDistanceMatrixDstTags(k) ট্যাগযুক্ত ভিজিট পর্যন্ত ভ্রমণের সময়কাল (যথাক্রমে দূরত্ব) নির্ধারণ করে।

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

transitionAttributes[]

object ( TransitionAttributes )

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

shipmentTypeIncompatibilities[]

object ( ShipmentTypeIncompatibility )

অসামঞ্জস্যপূর্ণ চালান প্রকারের সেট (দেখুন 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 ))

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

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

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

সেকেন্ডে পরিমাপকৃত সময়কাল, যা সর্বোচ্চ নয়টি ভগ্নাংশ অঙ্ক পর্যন্ত হতে পারে এবং শেষে ' s ' থাকে। উদাহরণ: "3.5s"

pickupToDeliveryTimeLimit

string ( Duration format)

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

সেকেন্ডে পরিমাপকৃত সময়কাল, যা সর্বোচ্চ নয়টি ভগ্নাংশ অঙ্ক পর্যন্ত হতে পারে এবং শেষে ' s ' থাকে। উদাহরণ: "3.5s"

shipmentType

string

এই চালানের জন্য একটি 'ধরন' নির্দিষ্টকারী একটি অ-খালি স্ট্রিং। এই বৈশিষ্ট্যটি shipment_types মধ্যে অসামঞ্জস্যতা বা প্রয়োজনীয়তা সংজ্ঞায়িত করতে ব্যবহার করা যেতে পারে ( ShipmentModelshipmentTypeIncompatibilities এবং 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))

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

পরিদর্শনের অনুরোধ

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

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 দেখুন)।

সেকেন্ডে পরিমাপকৃত সময়কাল, যা সর্বোচ্চ নয়টি ভগ্নাংশ অঙ্ক পর্যন্ত হতে পারে এবং শেষে ' s ' থাকে। উদাহরণ: "3.5s"

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 জন্য একটি লেবেল নির্দিষ্ট করে। এই লেবেলটি রেসপন্সে সংশ্লিষ্ট ShipmentRoute.Visit এর visitLabel হিসেবে রিপোর্ট করা হয়।

avoidUTurns

boolean

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

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

অক্ষাংশ দ্রাঘিমাংশ

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

JSON উপস্থাপনা
{
  "latitude": number,
  "longitude": number
}
ক্ষেত্র
latitude

number

অক্ষাংশ ডিগ্রিতে। এটি অবশ্যই [-90.0, +90.0] সীমার মধ্যে হতে হবে।

longitude

number

দ্রাঘিমাংশ ডিগ্রিতে। এটি অবশ্যই [-180.0, +180.0] সীমার মধ্যে হতে হবে।

ওয়েপয়েন্ট

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

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

  // Union field location_type can be only one of the following:
  "location": {
    object (Location)
  },
  "placeId": string
  // End of list of possible types for union field location_type.
}
ক্ষেত্র
sideOfRoad

boolean

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

vehicleStopover

boolean

এটি নির্দেশ করে যে ওয়েপয়েন্টটি যানবাহন থামার জন্য নির্ধারিত, যেখানে যাত্রী ওঠানো বা নামানোর উদ্দেশ্য রয়েছে। এই বিকল্পটি শুধুমাত্র 'ড্রাইভিং' ট্র্যাভেল মোডের জন্য এবং যখন 'লোকেশনটাইপ' 'লোকেশন' হয়, তখনই কাজ করে।

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

ইউনিয়ন ফিল্ড location_type । একটি অবস্থানকে উপস্থাপন করার বিভিন্ন উপায়। location_type নিম্নলিখিতগুলির মধ্যে কেবল একটি হতে পারে:
location

object ( Location )

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

placeId

string

ওয়েপয়েন্টটির সাথে সংশ্লিষ্ট POI স্থান আইডি।

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

অবস্থান

একটি অবস্থানকে অন্তর্ভুক্ত করে (একটি ভৌগোলিক বিন্দু এবং একটি ঐচ্ছিক শিরোনাম)।

JSON উপস্থাপনা
{
  "latLng": {
    object (LatLng)
  },
  "heading": integer
}
ক্ষেত্র
latLng

object ( LatLng )

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

heading

integer

যানবাহন চলাচলের দিকের সাথে সম্পর্কিত কম্পাস হেডিং। যাত্রী ওঠানো এবং নামানোর জন্য রাস্তার কোন পাশ ব্যবহার করতে হবে, তা নির্দিষ্ট করতে এই মানটি ব্যবহৃত হয়। হেডিং-এর মান ০ থেকে ৩৬০ পর্যন্ত হতে পারে, যেখানে ০ সরাসরি উত্তর দিক, ৯০ সরাসরি পূর্ব দিক ইত্যাদি নির্দেশ করে।

টাইমউইন্ডো

টাইম উইন্ডো কোনো ঘটনার সময়কে সীমাবদ্ধ করে, যেমন কোনো পরিদর্শনে পৌঁছানোর সময়, বা কোনো যানবাহনের শুরু এবং শেষের সময়।

হার্ড টাইম উইন্ডো বাউন্ড, 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.

This cost must be positive, and the field can only be set if softEndTime has been set.

যানবাহন

একটি চালান সমস্যার জন্য একটি যানবাহনের মডেল তৈরি করে। একটি চালান সমস্যা সমাধান করলে এই যানবাহনটির জন্য 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 বা delay ( 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 স্ট্রিং থেকে সময়কাল পর্যন্ত একটি ম্যাপ নির্দিষ্ট করে। এই সময়কাল হলো VisitRequest.duration এর অতিরিক্ত সময়, যা নির্দিষ্ট visitTypes যুক্ত ভিজিটগুলোতে গণনা করা হয়। যদি costPerHour নির্দিষ্ট করা থাকে, তবে এই অতিরিক্ত ভিজিট সময়কালের জন্য খরচ যুক্ত হয়। কী (অর্থাৎ visitTypes ) খালি স্ট্রিং হতে পারে না।

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

breakRule

object ( BreakRule )

এই যানবাহনের জন্য প্রযোজ্য বিরতির সময়সূচী বর্ণনা করা হলো। যানবাহনটি খালি থাকলে, এর জন্য কোনো বিরতি নির্ধারিত থাকবে না।

label

string

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

ignore

boolean

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

যদি injectedFirstSolutionRoutes এ উপেক্ষিত কোনো যানবাহন দ্বারা কোনো চালান সম্পন্ন করা হয়, তবে তা প্রথম সমাধানে বাদ দেওয়া হয় কিন্তু প্রতিক্রিয়ায় তা সম্পন্ন করার জন্য উন্মুক্ত থাকে।

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

travelDurationMultiple

number

Specifies a multiplicative factor that can be used to increase or decrease travel times of this vehicle. For example, setting this to 2.0 means that this vehicle is slower and has travel times that are twice what they are for standard vehicles. This multiple does not affect visit durations. It does affect cost if costPerHour or costPerTraveledHour are specified. This must be in the range [0.001, 1000.0]. If unset, the vehicle is standard, and this multiple is considered 1.0.

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

নিচে extraVisitDurationForVisitType ও দেখুন।

ভ্রমণ মোড

যানবাহন দ্বারা ব্যবহারযোগ্য ভ্রমণ পদ্ধতিসমূহ

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

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

এনাম
TRAVEL_MODE_UNSPECIFIED অনির্দিষ্ট ভ্রমণ মোড, যা DRIVING এর সমতুল্য।
DRIVING চালনার নির্দেশনা অনুযায়ী ভ্রমণের ধরণ (গাড়ি, ...)।
WALKING হাঁটার দিকনির্দেশনা অনুযায়ী ভ্রমণ পদ্ধতি।

রুট মডিফায়ার

গাড়ির রুট গণনা করার সময় পূরণ করতে হবে এমন কিছু ঐচ্ছিক শর্তের একটি সেটকে এটি অন্তর্ভুক্ত করে। এটি গুগল ম্যাপস প্ল্যাটফর্মের রুটস প্রিফার্ড এপিআই (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 নির্বিশেষে, অন্যান্য চালানগুলো রুটের যেকোনো স্থানে অবাধে সম্পন্ন হতে পারে।

এনাম
UNLOADING_POLICY_UNSPECIFIED অনির্দিষ্ট আনলোডিং নীতি; ডেলিভারি অবশ্যই সংশ্লিষ্ট পিকআপের ঠিক পরেই করতে হবে।
LAST_IN_FIRST_OUT পিকআপের বিপরীত ক্রমে ডেলিভারি করতে হবে।
FIRST_IN_FIRST_OUT ডেলিভারি অবশ্যই পিকআপের একই ক্রমে সম্পন্ন করতে হবে।

লোডলিমিট

কোনো যানবাহনের জন্য প্রযোজ্য ভারবহন সীমা নির্ধারণ করে, যেমন "এই ট্রাকটি সর্বোচ্চ ৩৫০০ কেজি পর্যন্ত বহন করতে পারবে"। 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)

A maximum acceptable load. Must be ≥ 0. If unspecified, the maximum load is unrestricted by this message. If they're both specified, min must be ≤ max .

লোডকস্ট

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

  • সর্বনিম্ন(লোড, loadThreshold ) * costPerUnitBelowThreshold
  • সর্বোচ্চ(0, লোড - 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 হলো ১২০.০।

তবে, যদি রুটটি start,pickup,delivery,pickup,delivery,end হয় এবং এর মধ্যে ট্রানজিশন থাকে:

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)

ভারের সেই পরিমাণ, যার উপরে প্রতি ইউনিট ভার সরানোর খরচ 'threshold-এর নিচের প্রতি ইউনিটের খরচ' থেকে 'threshold-এর উপরের প্রতি ইউনিটের খরচ'-এ পরিবর্তিত হয়। এর মান অবশ্যই >= ০ হতে হবে।

costPerUnitBelowThreshold

number

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

costPerUnitAboveThreshold

number

Cost of moving a unit of load, for each unit above threshold. In the special case threshold = 0, this is a fixed cost per unit. Must be a finite value, and >= 0.

DurationLimit

A limit defining a maximum duration of the route of a vehicle. It can be either hard or soft.

When a soft limit field is defined, both the soft max threshold and its associated cost must be defined together.

JSON উপস্থাপনা
{
  "maxDuration": string,
  "softMaxDuration": string,
  "quadraticSoftMaxDuration": string,
  "costPerHourAfterSoftMax": number,
  "costPerSquareHourAfterQuadraticSoftMax": number
}
ক্ষেত্র
maxDuration

string ( Duration format)

A hard limit constraining the duration to be at most maxDuration.

A duration in seconds with up to nine fractional digits, ending with ' s '. Example: "3.5s" .

softMaxDuration

string ( Duration format)

A soft limit not enforcing a maximum duration limit, but when violated makes the route incur a cost. This cost adds up to other costs defined in the model, with the same unit.

If defined, softMaxDuration must be nonnegative. If maxDuration is also defined, softMaxDuration must be less than maxDuration.

A duration in seconds with up to nine fractional digits, ending with ' s '. Example: "3.5s" .

quadraticSoftMaxDuration

string ( Duration format)

A soft limit not enforcing a maximum duration limit, but when violated makes the route incur a cost, quadratic in the duration. This cost adds up to other costs defined in the model, with the same unit.

If quadraticSoftMaxDuration is set, the following conditions must be met:

  • It must be non-negative.
  • maxDuration must be defined.
  • quadraticSoftMaxDuration must be less than maxDuration .
  • The difference must be no more than one day: maxDuration - quadraticSoftMaxDuration <= 86400 seconds

A duration in seconds with up to nine fractional digits, ending with ' s '. Example: "3.5s" .

costPerHourAfterSoftMax

number

Cost per hour incurred if the softMaxDuration threshold is violated. The additional cost is 0 if the duration is under the threshold, otherwise the cost depends on the duration as follows:

  costPerHourAfterSoftMax * (duration - softMaxDuration)

The cost must be nonnegative.

costPerSquareHourAfterQuadraticSoftMax

number

Cost per square hour incurred if the quadraticSoftMaxDuration threshold is violated.

The additional cost is 0 if the duration is under the threshold, otherwise the cost depends on the duration as follows:

  costPerSquareHourAfterQuadraticSoftMax *
  (duration - quadraticSoftMaxDuration)^2

The cost must be nonnegative.

DistanceLimit

A limit defining a maximum distance which can be traveled. It can be either hard or soft.

If a soft limit is defined, both softMaxMeters and costPerKilometerAboveSoftMax must be defined and be nonnegative.

JSON উপস্থাপনা
{
  "maxMeters": string,
  "softMaxMeters": string,
  "costPerKilometerBelowSoftMax": number,
  "costPerKilometerAboveSoftMax": number
}
ক্ষেত্র
maxMeters

string ( int64 format)

A hard limit constraining the distance to be at most maxMeters. The limit must be nonnegative.

softMaxMeters

string ( int64 format)

A soft limit not enforcing a maximum distance limit, but when violated results in a cost which adds up to other costs defined in the model, with the same unit.

If defined softMaxMeters must be less than maxMeters and must be nonnegative.

costPerKilometerBelowSoftMax

number

Cost per kilometer incurred, increasing up to softMaxMeters , with formula:

  min(distanceMeters, softMaxMeters) / 1000.0 *
  costPerKilometerBelowSoftMax.

This cost is not supported in routeDistanceLimit .

costPerKilometerAboveSoftMax

number

Cost per kilometer incurred if distance is above softMaxMeters limit. The additional cost is 0 if the distance is under the limit, otherwise the formula used to compute the cost is the following:

  (distanceMeters - softMaxMeters) / 1000.0 *
  costPerKilometerAboveSoftMax.

The cost must be nonnegative.

BreakRule

Rules to generate time breaks for a vehicle (eg lunch breaks). A break is a contiguous period of time during which the vehicle remains idle at its current position and cannot perform any visit. A break may occur:

  • during the travel between two visits (which includes the time right before or right after a visit, but not in the middle of a visit), in which case it extends the corresponding transit time between the visits,
  • or before the vehicle start (the vehicle may not start in the middle of a break), in which case it does not affect the vehicle start time.
  • or after the vehicle end (ditto, with the vehicle end time).
JSON উপস্থাপনা
{
  "breakRequests": [
    {
      object (BreakRequest)
    }
  ],
  "frequencyConstraints": [
    {
      object (FrequencyConstraint)
    }
  ]
}
ক্ষেত্র
breakRequests[]

object ( BreakRequest )

Sequence of breaks. See the BreakRequest message.

frequencyConstraints[]

object ( FrequencyConstraint )

Several FrequencyConstraint may apply. They must all be satisfied by the BreakRequest s of this BreakRule . See FrequencyConstraint .

BreakRequest

The sequence of breaks (ie their number and order) that apply to each vehicle must be known beforehand. The repeated BreakRequest s define that sequence, in the order in which they must occur. Their time windows ( earliestStartTime / latestStartTime ) may overlap, but they must be compatible with the order (this is checked).

JSON উপস্থাপনা
{
  "earliestStartTime": string,
  "latestStartTime": string,
  "minDuration": string
}
ক্ষেত্র
earliestStartTime

string ( Timestamp format)

Required. Lower bound (inclusive) on the start of the break.

Uses RFC 3339, where generated output will always be Z-normalized and use 0, 3, 6 or 9 fractional digits. Offsets other than "Z" are also accepted. Examples: "2014-10-02T15:01:23Z" , "2014-10-02T15:01:23.045123456Z" or "2014-10-02T15:01:23+05:30" .

latestStartTime

string ( Timestamp format)

Required. Upper bound (inclusive) on the start of the break.

Uses RFC 3339, where generated output will always be Z-normalized and use 0, 3, 6 or 9 fractional digits. Offsets other than "Z" are also accepted. Examples: "2014-10-02T15:01:23Z" , "2014-10-02T15:01:23.045123456Z" or "2014-10-02T15:01:23+05:30" .

minDuration

string ( Duration format)

Required. Minimum duration of the break. Must be positive.

A duration in seconds with up to nine fractional digits, ending with ' s '. Example: "3.5s" .

FrequencyConstraint

One may further constrain the frequency and duration of the breaks specified above, by enforcing a minimum break frequency, such as "There must be a break of at least 1 hour every 12 hours". Assuming that this can be interpreted as "Within any sliding time window of 12h, there must be at least one break of at least one hour", that example would translate to the following FrequencyConstraint :

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

The timing and duration of the breaks in the solution will respect all such constraints, in addition to the time windows and minimum durations already specified in the BreakRequest .

A FrequencyConstraint may in practice apply to non-consecutive breaks. For example, the following schedule honors the "1h every 12h" example:

  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)

Required. Minimum break duration for this constraint. Nonnegative. See description of FrequencyConstraint .

A duration in seconds with up to nine fractional digits, ending with ' s '. Example: "3.5s" .

maxInterBreakDuration

string ( Duration format)

Required. Maximum allowed span of any interval of time in the route that does not include at least partially a break of duration >= minBreakDuration . Must be positive.

A duration in seconds with up to nine fractional digits, ending with ' s '. Example: "3.5s" .

উদ্দেশ্য

Objectives replace the cost model completely, and are therefore incompatible with pre-existing costs. Each objective maps to a number of pre-defined costs for, eg, vehicles, shipments or transition attributes.

Experimental: See https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request for more details.

JSON উপস্থাপনা
{
  "type": enum (Type),
  "weight": number
}
ক্ষেত্র
type

enum ( Type )

The type of the objective.

weight

number

How much this objective should count relatively to the others. This can be any non-negative number, weights do not have to sum to 1. Weights default to 1.0.

প্রকার

The objective type that will be mapped to a set of costs.

এনাম
DEFAULT A default set of costs will be used, to ensure a reasonable solution. Note: this objective can be used on its own, but will also always be added with weight 1.0, as a baseline, to the objectives specified by the user, if it's not already present.
MIN_DISTANCE "MIN" objectives. Minimize the total distance traveled.
MIN_WORKING_TIME Minimize the total working time, summed over all vehicles.
MIN_TRAVEL_TIME Same as above but focusing on travel time only.
MIN_NUM_VEHICLES Minimize the number of vehicles used.

DurationDistanceMatrix

Specifies a duration and distance matrix from visit and vehicle start locations to visit and vehicle end locations.

JSON উপস্থাপনা
{
  "rows": [
    {
      object (Row)
    }
  ],
  "vehicleStartTag": string
}
ক্ষেত্র
rows[]

object ( Row )

Specifies the rows of the duration and distance matrix. It must have as many elements as ShipmentModel.duration_distance_matrix_src_tags .

vehicleStartTag

string

Tag defining to which vehicles this duration and distance matrix applies. If empty, this applies to all vehicles, and there can only be a single matrix.

Each vehicle start must match exactly one matrix, ie exactly one of their startTags field must match the vehicleStartTag of a matrix (and of that matrix only).

All matrices must have a different vehicleStartTag .

সারি

Specifies a row of the duration and distance matrix.

JSON উপস্থাপনা
{
  "durations": [
    string
  ],
  "meters": [
    number
  ]
}
ক্ষেত্র
durations[]

string ( Duration format)

Duration values for a given row. It must have as many elements as ShipmentModel.duration_distance_matrix_dst_tags .

A duration in seconds with up to nine fractional digits, ending with ' s '. Example: "3.5s" .

meters[]

number

Distance values for a given row. If no costs or constraints refer to distances in the model, this can be left empty; otherwise it must have as many elements as durations .

TransitionAttributes

Specifies attributes of transitions between two consecutive visits on a route. Several TransitionAttributes may apply to the same transition: in that case, all extra costs add up and the strictest constraint or limit applies (following natural "AND" semantics).

JSON উপস্থাপনা
{
  "srcTag": string,
  "excludedSrcTag": string,
  "dstTag": string,
  "excludedDstTag": string,
  "cost": number,
  "costPerKilometer": number,
  "distanceLimit": {
    object (DistanceLimit)
  },
  "delay": string
}
ক্ষেত্র
srcTag

string

Tags defining the set of (src->dst) transitions these attributes apply to.

A source visit or vehicle start matches iff its VisitRequest.tags or Vehicle.start_tags either contains srcTag or does not contain excludedSrcTag (depending on which of these two fields is non-empty).

excludedSrcTag

string

See srcTag . Exactly one of srcTag and excludedSrcTag must be non-empty.

dstTag

string

A destination visit or vehicle end matches iff its VisitRequest.tags or Vehicle.end_tags either contains dstTag or does not contain excludedDstTag (depending on which of these two fields is non-empty).

excludedDstTag

string

See dstTag . Exactly one of dstTag and excludedDstTag must be non-empty.

cost

number

Specifies a cost for performing this transition. This is in the same unit as all other costs in the model and must not be negative. It is applied on top of all other existing costs.

costPerKilometer

number

Specifies a cost per kilometer applied to the distance traveled while performing this transition. It adds up to any Vehicle.cost_per_kilometer specified on vehicles.

distanceLimit

object ( DistanceLimit )

Specifies a limit on the distance traveled while performing this transition.

As of 2021/06, only soft limits are supported.

delay

string ( Duration format)

Specifies a delay incurred when performing this transition.

This delay always occurs after finishing the source visit and before starting the destination visit.

A duration in seconds with up to nine fractional digits, ending with ' s '. Example: "3.5s" .

ShipmentTypeIncompatibility

Specifies incompatibilties between shipments depending on their shipmentType. The appearance of incompatible shipments on the same route is restricted based on the incompatibility mode.

JSON উপস্থাপনা
{
  "types": [
    string
  ],
  "incompatibilityMode": enum (IncompatibilityMode)
}
ক্ষেত্র
types[]

string

List of incompatible types. Two shipments having different shipment_types among those listed are "incompatible".

incompatibilityMode

enum ( IncompatibilityMode )

Mode applied to the incompatibility.

IncompatibilityMode

Modes defining how the appearance of incompatible shipments are restricted on the same route.

এনাম
INCOMPATIBILITY_MODE_UNSPECIFIED Unspecified incompatibility mode. This value should never be used.
NOT_PERFORMED_BY_SAME_VEHICLE In this mode, two shipments with incompatible types can never share the same vehicle.
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY

In this mode, two shipments with incompatible types can never be on the same vehicle at the same time:

  • They can share the same vehicle only if one is delivered before the other is picked up.
  • When both shipments are pickups-only (no deliveries) or deliveries-only (no pickups), they can't share the same vehicle at all.

ShipmentTypeRequirement

Specifies requirements between shipments based on their shipmentType. The specifics of the requirement are defined by the requirement mode.

JSON উপস্থাপনা
{
  "requiredShipmentTypeAlternatives": [
    string
  ],
  "dependentShipmentTypes": [
    string
  ],
  "requirementMode": enum (RequirementMode)
}
ক্ষেত্র
requiredShipmentTypeAlternatives[]

string

List of alternative shipment types required by the dependentShipmentTypes .

dependentShipmentTypes[]

string

All shipments with a type in the dependentShipmentTypes field require at least one shipment of type requiredShipmentTypeAlternatives to be visited on the same route.

NOTE: Chains of requirements such that a shipmentType depends on itself are not allowed.

requirementMode

enum ( RequirementMode )

Mode applied to the requirement.

RequirementMode

Modes defining the appearance of dependent shipments on a route.

এনাম
REQUIREMENT_MODE_UNSPECIFIED Unspecified requirement mode. This value should never be used.
PERFORMED_BY_SAME_VEHICLE In this mode, all "dependent" shipments must share the same vehicle as at least one of their "required" shipments.
IN_SAME_VEHICLE_AT_PICKUP_TIME

With the IN_SAME_VEHICLE_AT_PICKUP_TIME mode, all "dependent" shipments need to have at least one "required" shipment on their vehicle at the time of their pickup.

A "dependent" shipment pickup must therefore have either:

  • A delivery-only "required" shipment delivered on the route after, or
  • A "required" shipment picked up on the route before it, and if the "required" shipment has a delivery, this delivery must be performed after the "dependent" shipment's pickup.
IN_SAME_VEHICLE_AT_DELIVERY_TIME Same as before, except the "dependent" shipments need to have a "required" shipment on their vehicle at the time of their delivery .

PrecedenceRule

A precedence rule between two events (each event is the pickup or the delivery of a shipment): the "second" event has to start at least offsetDuration after "first" has started.

Several precedences can refer to the same (or related) events, eg, "pickup of B happens after delivery of A" and "pickup of C happens after pickup of B".

Furthermore, precedences only apply when both shipments are performed and are otherwise ignored.

JSON উপস্থাপনা
{
  "firstIsDelivery": boolean,
  "secondIsDelivery": boolean,
  "offsetDuration": string,
  "firstIndex": integer,
  "secondIndex": integer
}
ক্ষেত্র
firstIsDelivery

boolean

Indicates if the "first" event is a delivery.

secondIsDelivery

boolean

Indicates if the "second" event is a delivery.

offsetDuration

string ( Duration format)

The offset between the "first" and "second" event. It can be negative.

A duration in seconds with up to nine fractional digits, ending with ' s '. Example: "3.5s" .

firstIndex

integer

Shipment index of the "first" event. This field must be specified.

secondIndex

integer

Shipment index of the "second" event. This field must be specified.