InjectedSolutionConstraint

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

JSON উপস্থাপনা
{
  "routes": [
    {
      object (ShipmentRoute)
    }
  ],
  "skippedShipments": [
    {
      object (SkippedShipment)
    }
  ],
  "constraintRelaxations": [
    {
      object (ConstraintRelaxation)
    }
  ]
}
ক্ষেত্র
routes[]

object ( ShipmentRoute )

ইনজেকশনের জন্য দ্রবণের রুট। মূল দ্রবণ থেকে কিছু রুট বাদ দেওয়া হতে পারে। রুট এবং বাদ দেওয়া শিপমেন্টগুলিকে injectedFirstSolutionRoutes এর জন্য তালিকাভুক্ত মৌলিক বৈধতা অনুমান পূরণ করতে হবে।

skippedShipments[]

object ( SkippedShipment )

ইনজেকশনের জন্য দ্রবণের শিপমেন্ট বাদ দেওয়া হয়েছে। মূল দ্রবণ থেকে কিছু বাদ দেওয়া হতে পারে। routes ক্ষেত্রটি দেখুন।

constraintRelaxations[]

object ( ConstraintRelaxation )

শূন্য বা তার বেশি যানবাহনের জন্য, কখন এবং কতটা সীমাবদ্ধতা শিথিল করতে হবে তা নির্দিষ্ট করে। যদি এই ক্ষেত্রটি খালি থাকে, তাহলে সমস্ত অ-খালি যানবাহনের রুট সম্পূর্ণরূপে সীমাবদ্ধ।

সীমাবদ্ধতা শিথিলকরণ

একদল যানবাহনের জন্য, পরিদর্শনের ক্ষেত্রে কোন সীমা (সীমা) শিথিল করা হবে এবং কোন স্তরে তা নির্দিষ্ট করে। skipped_shipment ক্ষেত্রে তালিকাভুক্ত চালানগুলি এড়িয়ে যেতে বাধ্য; অর্থাৎ, সেগুলি সম্পাদন করা যাবে না।

JSON উপস্থাপনা
{
  "relaxations": [
    {
      object (Relaxation)
    }
  ],
  "vehicleIndices": [
    integer
  ]
}
ক্ষেত্র
relaxations[]

object ( Relaxation )

vehicleIndices যানবাহন সহ রুটে পরিদর্শনের ক্ষেত্রে প্রযোজ্য সমস্ত পরিদর্শন সীমাবদ্ধতা শিথিলকরণ।

vehicleIndices[]

integer

যেসব যানবাহনের সূচকে ভিজিট সীমাবদ্ধতা relaxations প্রযোজ্য হয় তা নির্দিষ্ট করে। যদি খালি থাকে, তাহলে এটি ডিফল্ট হিসাবে বিবেচিত হবে এবং অন্যান্য constraintRelaxations নির্দিষ্ট নয় এমন সমস্ত যানবাহনের ক্ষেত্রে relaxations প্রযোজ্য হবে। সর্বাধিক একটি ডিফল্ট থাকতে পারে, অর্থাৎ, সর্বাধিক একটি সীমাবদ্ধতা শিথিলকরণ ক্ষেত্র খালি vehicleIndices অনুমোদিত। একটি যানবাহন সূচক শুধুমাত্র একবার তালিকাভুক্ত করা যেতে পারে, এমনকি বেশ কয়েকটি constraintRelaxations মধ্যেও।

যদি interpretInjectedSolutionsUsingLabels সত্য হয় ( fields মন্তব্য দেখুন) তাহলে একটি যানবাহন সূচক ShipmentRoute.vehicle_index এর মতোই ম্যাপ করা হয়।

শিথিলতা

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

relaxations(i).level একটি ভিজিট #j-এ প্রয়োগ করা সীমাবদ্ধতা শিথিলকরণ স্তর নির্দিষ্ট করে যা সন্তুষ্ট করে:

  • route.visits(j).start_time >= relaxations(i).threshold_time এবং
  • j + 1 >= relaxations(i).threshold_visit_count

একইভাবে, গাড়ির স্টার্টটি relaxations(i).level লেভেলে রিল্যাক্সেশন করা হয় যদি এটি পূরণ করে:

  • vehicleStartTime >= relaxations(i).threshold_time এবং
  • relaxations(i).threshold_visit_count == 0 এবং গাড়ির প্রান্ত relaxations(i).level এ relaxed হয় যদি এটি পূরণ করে:
  • vehicleEndTime >= relaxations(i).threshold_time এবং
  • route.visits_size() + 1 >= relaxations(i).threshold_visit_count

যদি কোনও ভিজিট thresholdVisitCount বা thresholdTime পূরণ করে তবে একটি রিল্যাক্সেশন লেভেল প্রয়োগ করতে একই level দুটি relaxations যোগ করুন: একটিতে শুধুমাত্র thresholdVisitCount সেট এবং অন্যটিতে শুধুমাত্র thresholdTime সেট। যদি কোনও ভিজিট একাধিক relaxations শর্ত পূরণ করে, তাহলে সবচেয়ে রিল্যাক্সেশন লেভেল প্রযোজ্য। ফলস্বরূপ, গাড়ির শুরু থেকে রুট ভিজিট থেকে গাড়ির শেষ পর্যন্ত, রিল্যাক্সেশন লেভেল আরও রিল্যাক্সেশন হয়ে ওঠে: অর্থাৎ, রুট এগিয়ে যাওয়ার সাথে সাথে রিল্যাক্সেশন লেভেল কমছে না।

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

JSON উপস্থাপনা
{
  "level": enum (Level),
  "thresholdTime": string,
  "thresholdVisitCount": integer
}
ক্ষেত্র
level

enum ( Level )

thresholdTime এবং কমপক্ষে thresholdVisitCount পরে বা তার পরে শর্তগুলি পূরণ হলে প্রযোজ্য সীমাবদ্ধতা শিথিলকরণ স্তর।

thresholdTime

string ( Timestamp format)

যে সময়ে বা তার পরে শিথিলকরণ level প্রয়োগ করা যেতে পারে।

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"

thresholdVisitCount

integer

শিথিলকরণ level প্রয়োগ করা যেতে পারে এমন সময়ে বা তার পরে কতবার ভিজিট করা যেতে পারে। যদি thresholdVisitCount 0 হয় (অথবা সেট না করা থাকে), তাহলে গাড়ির স্টার্টের সময় সরাসরি level প্রয়োগ করা যেতে পারে।

যদি এটি route.visits_size() + 1 হয়, তাহলে level শুধুমাত্র গাড়ির প্রান্তে প্রয়োগ করা যেতে পারে। যদি এটি route.visits_size() + 1 এর চেয়ে বেশি হয়, তাহলে সেই রুটের জন্য level মোটেও প্রয়োগ করা হয় না।

স্তর

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

নীচের গণনাটি ক্রমবর্ধমান শিথিলকরণের ক্রম অনুসারে।

এনামস
LEVEL_UNSPECIFIED

অন্তর্নিহিত ডিফল্ট শিথিলকরণ স্তর: কোনও সীমাবদ্ধতা শিথিল করা হয়নি, অর্থাৎ, সমস্ত পরিদর্শন সম্পূর্ণরূপে সীমাবদ্ধ।

এই মানটি স্পষ্টভাবে level এ ব্যবহার করা উচিত নয়।

RELAX_VISIT_TIMES_AFTER_THRESHOLD পরিদর্শন শুরুর সময় এবং যানবাহন শুরু/শেষের সময় শিথিল করা হবে, তবে প্রতিটি পরিদর্শন একই যানবাহনের সাথে আবদ্ধ থাকবে এবং পরিদর্শন ক্রম অবশ্যই পালন করতে হবে: তাদের মধ্যে বা তাদের আগে কোনও পরিদর্শন সন্নিবেশ করা যাবে না।
RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD RELAX_VISIT_TIMES_AFTER_THRESHOLD এর মতোই, কিন্তু ভিজিট ক্রমটিও শিথিল: ভিজিটগুলি কেবল এই যান দ্বারাই করা যেতে পারে, তবে সম্ভাব্যভাবে অকার্যকর হতে পারে।
RELAX_ALL_AFTER_THRESHOLD RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD এর মতোই, তবে গাড়িটিও শিথিল: থ্রেশহোল্ড সময়ে বা তার পরে ভিজিট সম্পূর্ণ বিনামূল্যে এবং সম্ভাব্যভাবে অকার্যকর হতে পারে।