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 একে অপরের থেকে 31536000 সেকেন্ডের মধ্যে হতে হবে।

cost_per_*hour ক্ষেত্র ব্যবহার করার সময়, কর্মক্ষমতা বাড়ানোর জন্য আপনি এই উইন্ডোটিকে একটি ছোট ব্যবধানে সেট করতে চাইতে পারেন (যেমন, যদি আপনি একটি একক দিনের মডেল করেন, তাহলে আপনার সেই দিনের জন্য বিশ্বব্যাপী সময় সীমা সেট করা উচিত)। যদি সেট না করা হয়, তাহলে 00:00:00 UTC, 1 জানুয়ারী, 1970 (অর্থাৎ সেকেন্ড: 0, ন্যানো: 0) ডিফল্ট হিসাবে ব্যবহৃত হয়।

RFC 3339 ব্যবহার করে, যেখানে উৎপন্ন আউটপুট সর্বদা Z-স্বাভাবিক হবে এবং 0, 3, 6 অথবা 9 ভগ্নাংশ সংখ্যা ব্যবহার করবে। "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, 1 জানুয়ারী, 1971 (অর্থাৎ সেকেন্ড: 31536000, ন্যানো: 0) ডিফল্ট হিসেবে ব্যবহৃত হবে।

RFC 3339 ব্যবহার করে, যেখানে উৎপন্ন আউটপুট সর্বদা Z-স্বাভাবিক হবে এবং 0, 3, 6 অথবা 9 ভগ্নাংশ সংখ্যা ব্যবহার করবে। "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।
  • ১টি গাড়ি স্থানীয় স্থান থেকে শুরু করে স্থানীয় স্থানে শেষ করছে।
  • 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 তে শেষ করছে।
  • "দ্রুত" ম্যাট্রিক্স ব্যবহার করে, ১টি গাড়ি 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) durationDistanceMatrixSrcTags(j) ট্যাগ সহ ভিজিট থেকে ম্যাট্রিক্স i-এর অন্যান্য ভিজিট পর্যন্ত সময়কাল এবং দূরত্ব নির্ধারণ করে।

ট্যাগগুলি 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) ট্যাগ সহ ভিজিট পর্যন্ত ভ্রমণের সময়কাল (resp. দূরত্ব) নির্ধারণ করে।

ট্যাগগুলি 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 ))

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

allowedVehicleIndices[]

integer

এই চালানটি সম্পাদন করতে পারে এমন যানবাহনের সেট। খালি থাকলে, সমস্ত যানবাহন এটি সম্পাদন করতে পারে। ShipmentModel এর vehicles তালিকায় যানবাহনগুলি তাদের সূচক অনুসারে দেওয়া হয়।

costsPerVehicle[]

number

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

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

এই খরচগুলি অবশ্যই penaltyCost মতো একই ইউনিটে হতে হবে এবং ঋণাত্মক হওয়া উচিত নয়। যদি এই ধরনের কোন খরচ না থাকে তবে এই ক্ষেত্রটি খালি রাখুন।

costsPerVehicleIndices[]

integer

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

pickupToDeliveryAbsoluteDetourLimit

string ( Duration format)

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

উদাহরণস্বরূপ, নির্বাচিত পিকআপ বিকল্প থেকে সরাসরি নির্বাচিত ডেলিভারি বিকল্পে যেতে এটি সবচেয়ে কম সময়। তারপর 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

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

উদাহরণস্বরূপ, নির্বাচিত পিকআপ বিকল্প থেকে সরাসরি নির্বাচিত ডেলিভারি বিকল্পে যেতে এটি সবচেয়ে কম সময়। তারপর 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 দেখুন।

অক্ষাংশ

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

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

number

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

longitude

number

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

ওয়েপয়েন্ট

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

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

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

vehicleStopover

boolean

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

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

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

object ( Location )

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

placeId

string

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

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

স্থান

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

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

object ( LatLng )

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

heading

integer

কম্পাস হেডিং ট্র্যাফিক প্রবাহের দিকের সাথে সম্পর্কিত। এই মানটি পিকআপ এবং ড্রপ-অফের জন্য ব্যবহার করা রাস্তার পাশ নির্দিষ্ট করতে ব্যবহৃত হয়। হেডিং মান 0 থেকে 360 পর্যন্ত হতে পারে, যেখানে 0 উত্তরের হেডিং নির্দেশ করে, 90 পূর্বের হেডিং নির্দেশ করে, ইত্যাদি।

টাইমউইন্ডো

সময়সূচী কোনও ইভেন্টের সময়কে সীমাবদ্ধ করে, যেমন কোনও পরিদর্শনে আগমনের সময়, অথবা কোনও গাড়ির শুরু এবং শেষের সময়।

হার্ড টাইম উইন্ডো বাউন্ড, 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-স্বাভাবিক হবে এবং 0, 3, 6 অথবা 9 ভগ্নাংশ সংখ্যা ব্যবহার করবে। "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-স্বাভাবিক হবে এবং 0, 3, 6 অথবা 9 ভগ্নাংশ সংখ্যা ব্যবহার করবে। "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-স্বাভাবিক হবে এবং 0, 3, 6 অথবা 9 ভগ্নাংশ সংখ্যা ব্যবহার করবে। "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-স্বাভাবিক হবে এবং 0, 3, 6 অথবা 9 ভগ্নাংশ সংখ্যা ব্যবহার করবে। "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 সম্পন্ন করার পর গাড়িটি যেখানে শেষ হয় VisitRequest ভৌগোলিক অবস্থান। যদি নির্দিষ্ট না করা থাকে, তাহলে গাড়ির ShipmentRoute শেষ হওয়ার সাথে সাথেই শেষ হয়ে যায়। যদি চালানের মডেলে সময়কাল এবং দূরত্বের ম্যাট্রিক্স থাকে, তাহলে 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 যোগফল। travel_distance_meters।

extraVisitDurationForVisitType

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

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

যদি কোনও ভিজিট রিকোয়েস্ট একাধিক ধরণের হয়, তাহলে মানচিত্রে প্রতিটি ধরণের জন্য একটি সময়কাল যোগ করা হবে।

breakRule

object ( BreakRule )

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

label

string

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

ignore

boolean

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

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

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

travelDurationMultiple

number

এই গাড়ির ভ্রমণের সময় বাড়াতে বা কমাতে ব্যবহার করা যেতে পারে এমন একটি গুণনীয়ক নির্দিষ্ট করে। উদাহরণস্বরূপ, এটি 2.0 তে সেট করার অর্থ হল এই গাড়িটি ধীর গতির এবং এতে ভ্রমণের সময় স্ট্যান্ডার্ড যানবাহনের দ্বিগুণ। এই গুণিতকটি ভ্রমণের সময়কালকে প্রভাবিত করে না। যদি costPerHour বা costPerTraveledHour নির্দিষ্ট করা থাকে তবে এটি খরচকে প্রভাবিত করে। এটি অবশ্যই [0.001, 1000.0] পরিসরের মধ্যে হতে হবে। যদি সেট না করা থাকে, তাহলে গাড়িটি স্ট্যান্ডার্ড এবং এই গুণিতকটিকে 1.0 হিসাবে বিবেচনা করা হবে।

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

নিচে extraVisitDurationForVisitType দেখুন।

ভ্রমণ মোড

যানবাহন ব্যবহার করতে পারে এমন ভ্রমণের ধরণ।

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

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

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

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

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

লোডলিমিট

একটি যানবাহনের জন্য প্রযোজ্য লোড সীমা নির্ধারণ করে, যেমন "এই ট্রাকটি কেবল 3500 কেজি পর্যন্ত বহন করতে পারে"। 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 ছাড়িয়ে যায়, তাহলে নিম্নলিখিত খরচ জরিমানা প্রযোজ্য হবে (প্রতি গাড়িতে শুধুমাত্র একবার): (load - 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)

সর্বনিম্ন গ্রহণযোগ্য লোড। ≥ 0 হতে হবে। যদি উভয়ই নির্দিষ্ট করা থাকে, তাহলে min অবশ্যই ≤ max হতে হবে।

max

string ( int64 format)

সর্বোচ্চ গ্রহণযোগ্য লোড। অবশ্যই ≥ 0 হতে হবে। যদি নির্দিষ্ট না করা থাকে, তাহলে এই বার্তা দ্বারা সর্বোচ্চ লোড অবাধ। যদি উভয়ই নির্দিষ্ট করা থাকে, তাহলে min অবশ্যই ≤ max হতে হবে।

লোড খরচ

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

  • সর্বনিম্ন (লোড, 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 খরচ হল

  • রূপান্তর ০: ০.০
  • transition 1: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
  • transition 2: 0.0
  • transition 3: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
  • transition 4: 0.0

Here the LoadCost over the route is 40.0.

LoadCost makes solutions with heavy-loaded transitions more expensive.

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

JSON representation
{
  "loadThreshold": string,
  "costPerUnitBelowThreshold": number,
  "costPerUnitAboveThreshold": number
}
ক্ষেত্র
loadThreshold

string ( int64 format)

Amount of load above which the cost of moving a unit of load changes from costPerUnitBelowThreshold to costPerUnitAboveThreshold. Must be >= 0.

costPerUnitBelowThreshold

number

Cost of moving a unit of load, for each unit between 0 and threshold. Must be a finite value, and >= 0.

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 representation
{
  "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 defined, quadraticSoftMaxDuration must be nonnegative. If maxDuration is also defined, quadraticSoftMaxDuration must be less than maxDuration , and the difference must be no larger 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 representation
{
  "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 representation
{
  "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 representation
{
  "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 representation
{
  "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 representation
{
  "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.

Enums
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 representation
{
  "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 representation
{
  "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 representation
{
  "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 representation
{
  "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.

Enums
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 representation
{
  "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.

Enums
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 representation
{
  "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.