Method: projects.optimizeTours

একটি ShipmentModel সম্বলিত একটি OptimizeToursRequest পাঠায় এবং ShipmentRoute s সম্বলিত একটি OptimizeToursResponse ফেরত দেয়, যা সামগ্রিক খরচ কমিয়ে যানবাহনের দ্বারা সম্পাদিত রুটের একটি সেট।

একটি ShipmentModel মডেল প্রধানত Shipment নিয়ে গঠিত যা চালাতে হবে এবং Vehicle যা Shipment পরিবহনের জন্য ব্যবহার করা যেতে পারে৷ ShipmentRoute Vehicle Shipment বরাদ্দ করে৷ আরও নির্দিষ্টভাবে, তারা প্রতিটি গাড়ির জন্য একটি সিরিজ Visit নির্ধারণ করে, যেখানে একটি Visit একটি VisitRequest সাথে মিলে যায়, যা একটি Shipment জন্য একটি পিকআপ বা ডেলিভারি।

লক্ষ্য হল Vehicle ShipmentRoute একটি অ্যাসাইনমেন্ট প্রদান করা যা মোট খরচ কমিয়ে দেয় যেখানে খরচের অনেকগুলি উপাদান ShipmentModel সংজ্ঞায়িত করা হয়েছে৷

HTTP অনুরোধ

POST https://routeoptimization.googleapis.com/v1/{parent=projects/*}:optimizeTours

URL gRPC ট্রান্সকোডিং সিনট্যাক্স ব্যবহার করে।

পাথ প্যারামিটার

পরামিতি
parent

string

প্রয়োজন। একটি কল করতে লক্ষ্য প্রকল্প বা অবস্থান.

বিন্যাস: * projects/{project-id} * projects/{project-id}/locations/{location-id}

কোনো অবস্থান নির্দিষ্ট না থাকলে, একটি অঞ্চল স্বয়ংক্রিয়ভাবে বেছে নেওয়া হবে।

শরীরের অনুরোধ

অনুরোধের অংশে নিম্নলিখিত কাঠামো সহ ডেটা রয়েছে:

JSON প্রতিনিধিত্ব
{
  "timeout": string,
  "model": {
    object (ShipmentModel)
  },
  "solvingMode": enum (SolvingMode),
  "searchMode": enum (SearchMode),
  "injectedFirstSolutionRoutes": [
    {
      object (ShipmentRoute)
    }
  ],
  "injectedSolutionConstraint": {
    object (InjectedSolutionConstraint)
  },
  "refreshDetailsRoutes": [
    {
      object (ShipmentRoute)
    }
  ],
  "interpretInjectedSolutionsUsingLabels": boolean,
  "considerRoadTraffic": boolean,
  "populatePolylines": boolean,
  "populateTransitionPolylines": boolean,
  "allowLargeDeadlineDespiteInterruptionRisk": boolean,
  "useGeodesicDistances": boolean,
  "label": string,
  "geodesicMetersPerSecond": number,
  "maxValidationErrors": integer
}
ক্ষেত্র
timeout

string ( Duration format)

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

অ্যাসিঙ্ক্রোনাস অনুরোধের জন্য, সময় শেষ হওয়ার আগে সার্ভার একটি সমাধান (যদি সম্ভব হয়) তৈরি করবে।

নয়টি পর্যন্ত ভগ্নাংশের সংখ্যা সহ সেকেন্ডে একটি সময়কাল, ' s ' দিয়ে শেষ হয়৷ উদাহরণ: "3.5s"

model

object ( ShipmentModel )

সমাধানের জন্য চালানের মডেল।

solvingMode

enum ( SolvingMode )

ডিফল্টরূপে, সমাধানের মোড হল DEFAULT_SOLVE (0)।

searchMode

enum ( SearchMode )

অনুসন্ধান মোড অনুরোধ সমাধান করতে ব্যবহৃত.

injectedFirstSolutionRoutes[]

object ( ShipmentRoute )

পূর্ববর্তী সমাধানের অনুরূপ একটি প্রথম সমাধান খুঁজে পেতে অপ্টিমাইজেশান অ্যালগরিদমকে গাইড করুন।

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

সমাধানটি অবশ্যই কিছু মৌলিক বৈধতা অনুমান পূরণ করবে:

  • সমস্ত রুটের জন্য, vehicleIndex অবশ্যই পরিসরে থাকতে হবে এবং নকল করা যাবে না।
  • সমস্ত ভিজিটের জন্য, shipmentIndex এবং visitRequestIndex অবশ্যই পরিসরে থাকতে হবে।
  • একটি চালান শুধুমাত্র একটি রুটে উল্লেখ করা যেতে পারে.
  • একটি পিকআপ-ডেলিভারি চালানের পিকআপ ডেলিভারির আগে সঞ্চালিত করা আবশ্যক।
  • একটি চালানের একাধিক পিকআপ বিকল্প বা বিতরণ বিকল্প সঞ্চালিত হতে পারে না।
  • সব রুটের জন্য, সময় বাড়ছে (যেমন, vehicleStartTime <= visits[0].start_time <= visits[1].start_time ... <= vehicleEndTime )।
  • একটি চালান শুধুমাত্র অনুমোদিত যানবাহনে সঞ্চালিত হতে পারে। Shipment.allowed_vehicle_indices খালি থাকলে বা এর vehicleIndex Shipment.allowed_vehicle_indices এ অন্তর্ভুক্ত থাকলে একটি গাড়ির অনুমতি দেওয়া হয়।

যদি ইনজেকশন দেওয়া দ্রবণটি সম্ভব না হয়, তবে একটি বৈধতা ত্রুটি অগত্যা ফেরত দেওয়া হয় না এবং এর পরিবর্তে অসম্ভাব্যতা নির্দেশ করে একটি ত্রুটি ফেরত দেওয়া হতে পারে।

injectedSolutionConstraint

object ( InjectedSolutionConstraint )

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

যদি ইনজেকশন দেওয়া দ্রবণটি সম্ভব না হয়, তবে একটি বৈধতা ত্রুটি অগত্যা ফেরত দেওয়া হয় না এবং এর পরিবর্তে অসম্ভাব্যতা নির্দেশ করে একটি ত্রুটি ফেরত দেওয়া হতে পারে।

refreshDetailsRoutes[]

object ( ShipmentRoute )

যদি খালি না হয়, প্রদত্ত রুটগুলি রিফ্রেশ করা হবে, তাদের ভিজিট বা ভ্রমণের সময়গুলির অন্তর্নিহিত ক্রম পরিবর্তন না করে: শুধুমাত্র অন্যান্য বিবরণ আপডেট করা হবে। এটি মডেলের সমাধান করে না।

2020/11 অনুসারে, এটি শুধুমাত্র খালি নয় এমন রুটের পলিলাইনগুলিকে পপুলেট করে এবং populatePolylines সত্য হওয়া প্রয়োজন৷

পাস করা রুটের routePolyline ক্ষেত্রগুলি রুট transitions সাথে অসামঞ্জস্যপূর্ণ হতে পারে।

এই ক্ষেত্রটি অবশ্যই injectedFirstSolutionRoutes বা injectedSolutionConstraint এর সাথে ব্যবহার করা উচিত নয়।

Shipment.ignore এবং Vehicle.ignore আচরণের উপর কোন প্রভাব ফেলে না। সংশ্লিষ্ট চালান বা যানবাহন উপেক্ষা করা হোক না কেন, সমস্ত অ-খালি রুটে সমস্ত ভিজিটের মধ্যে পলিলাইনগুলি এখনও জনবহুল।

interpretInjectedSolutionsUsingLabels

boolean

যদি সত্য:

  • অনুরোধে যানবাহনগুলির সাথে একটি ইনজেকশনযুক্ত দ্রবণে রুটগুলিকে মেলানোর জন্য vehicleIndex এর পরিবর্তে ShipmentRoute.vehicle_label ব্যবহার করে; খালি না থাকলে ConstraintRelaxation.vehicle_indices আপডেট করতে আসল ShipmentRoute.vehicle_index এর ম্যাপিং নতুন ShipmentRoute.vehicle_index এ পুনরায় ব্যবহার করে, কিন্তু ম্যাপিংটি অবশ্যই দ্ব্যর্থহীন হতে হবে (অর্থাৎ, একাধিক ShipmentRoute s একই আসল vehicleIndex শেয়ার করা উচিত নয়)।
  • অনুরোধে শিপমেন্টের সাথে একটি ইনজেকশনযুক্ত সমাধানে ভিজিট মেলাতে shipmentIndex এর পরিবর্তে ShipmentRoute.Visit.shipment_label ব্যবহার করে;
  • অনুরোধ শিপমেন্টের সাথে ইনজেকশন করা দ্রবণে এড়িয়ে যাওয়া শিপমেন্টের সাথে মেলাতে SkippedShipment.index এর পরিবর্তে SkippedShipment.label ব্যবহার করে।

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

সত্য হলে, নিম্নলিখিত বিভাগের লেবেলগুলি অবশ্যই তাদের বিভাগে একবারে উপস্থিত হতে হবে:

যদি ইনজেকশনের দ্রবণে একটি vehicleLabel অনুরোধের গাড়ির সাথে মিল না থাকে, তাহলে সংশ্লিষ্ট রুটটি তার পরিদর্শন সহ সমাধান থেকে সরানো হয়। যদি ইনজেকশনের দ্রবণে একটি shipmentLabel একটি অনুরোধ চালানের সাথে সঙ্গতিপূর্ণ না হয়, তাহলে সংশ্লিষ্ট ভিজিটটি সমাধান থেকে সরানো হয়। যদি ইনজেকশন করা দ্রবণে একটি SkippedShipment.label অনুরোধ চালানের সাথে সামঞ্জস্যপূর্ণ না হয়, SkippedShipment সমাধান থেকে সরানো হয়।

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

দ্রষ্টব্য: কলকারীকে অবশ্যই নিশ্চিত করতে হবে যে প্রতিটি Vehicle.label (resp. Shipment.label ) দুটি প্রাসঙ্গিক অনুরোধ জুড়ে ব্যবহৃত একটি যানবাহন (resp. শিপমেন্ট) সত্তাকে স্বতন্ত্রভাবে সনাক্ত করে: অতীতের অনুরোধ যা ইনজেকশনের সমাধানে ব্যবহৃত OptimizeToursResponse তৈরি করেছিল এবং বর্তমান অনুরোধ যাতে ইনজেকশনের সমাধান অন্তর্ভুক্ত থাকে। উপরে বর্ণিত স্বতন্ত্রতা পরীক্ষাগুলি এই প্রয়োজনীয়তার গ্যারান্টি দেওয়ার জন্য যথেষ্ট নয়।

considerRoadTraffic

boolean

ShipmentRoute ক্ষেত্র Transition.travel_duration , Visit.start_time , এবং vehicleEndTime গণনা করার ক্ষেত্রে ট্রাফিক অনুমান বিবেচনা করুন; ShipmentRoute.has_traffic_infeasibilities ক্ষেত্র সেট করতে এবং OptimizeToursResponse.total_cost ফিল্ড গণনা করতে।

populatePolylines

boolean

সত্য হলে, ShipmentRoute s এর প্রতিক্রিয়ায় পলিলাইনগুলি পপুলেট করা হবে।

populateTransitionPolylines

boolean

সত্য হলে, ShipmentRoute.transitions এ পলিলাইনগুলি পপুলেট করা হবে।

allowLargeDeadlineDespiteInterruptionRisk

boolean

যদি এটি সেট করা থাকে, তাহলে অনুরোধের একটি সময়সীমা থাকতে পারে ( https://grpc.io/blog/deadlines দেখুন) 60 মিনিট পর্যন্ত। অন্যথায়, সর্বোচ্চ সময়সীমা মাত্র 30 মিনিট। মনে রাখবেন যে দীর্ঘস্থায়ী অনুরোধগুলির একটি উল্লেখযোগ্যভাবে বড় (কিন্তু এখনও ছোট) বাধার ঝুঁকি রয়েছে।

useGeodesicDistances

boolean

যদি সত্য হয়, ভ্রমণের দূরত্বগুলি Google মানচিত্রের দূরত্বের পরিবর্তে জিওডেসিক দূরত্ব ব্যবহার করে গণনা করা হবে, এবং ভ্রমণের সময়গুলি geodesicMetersPerSecond দ্বারা সংজ্ঞায়িত গতির সাথে জিওডেসিক দূরত্ব ব্যবহার করে গণনা করা হবে।

label

string

এই অনুরোধ শনাক্ত করতে ব্যবহার করা হতে পারে এমন লেবেল, OptimizeToursResponse.request_label এ আবার রিপোর্ট করা হয়েছে।

geodesicMetersPerSecond

number

যখন useGeodesicDistances সত্য হয়, এই ক্ষেত্রটি অবশ্যই সেট করতে হবে এবং ভ্রমণের সময় গণনা করার জন্য প্রয়োগ করা গতি সংজ্ঞায়িত করতে হবে। এর মান কমপক্ষে 1.0 মিটার/সেকেন্ড হতে হবে।

maxValidationErrors

integer

প্রত্যাবর্তিত বৈধতা ত্রুটির সংখ্যা ছেঁটে ফেলে৷ এই ত্রুটিগুলি সাধারণত একটি INVALID_ARGUMENT ত্রুটির পেলোডের সাথে একটি BadRequest ত্রুটি বিবরণ ( https://cloud.google.com/apis/design/errors#error_details ) হিসাবে সংযুক্ত থাকে, যদি না solvingMode=VALIDATE_ONLY: OptimizeToursResponse.validation_errors ক্ষেত্রটি দেখুন৷ এটি ডিফল্ট 100 এবং 10,000 এ সীমাবদ্ধ।

প্রতিক্রিয়া শরীর

সফল হলে, প্রতিক্রিয়া বডিতে OptimizeToursResponse এর একটি উদাহরণ থাকে।

অনুমোদনের সুযোগ

নিম্নলিখিত OAuth সুযোগ প্রয়োজন:

  • https://www.googleapis.com/auth/cloud-platform