InjectedSolutionConstraint

কোন ভিজিটগুলিকে সীমাবদ্ধ করা উচিত এবং কীভাবে সেগুলিকে সীমাবদ্ধ করা উচিত সে সম্পর্কে তথ্য সহ অনুরোধে সমাধান ইনজেকশন করা হয়েছে৷

JSON প্রতিনিধিত্ব
{
  "routes": [
    {
      object (ShipmentRoute)
    }
  ],
  "skippedShipments": [
    {
      object (SkippedShipment)
    }
  ],
  "constraintRelaxations": [
    {
      object (ConstraintRelaxation)
    }
  ]
}
ক্ষেত্র
routes[]

object ( ShipmentRoute )

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

skipped Shipments[]

object ( SkippedShipment )

ইনজেকশনের সমাধানের চালান এড়িয়ে গেছে। মূল সমাধান থেকে কিছু বাদ দেওয়া যেতে পারে। routes ক্ষেত্র দেখুন.

constraint Relaxations[]

object ( ConstraintRelaxation )

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

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

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

JSON প্রতিনিধিত্ব
{
  "relaxations": [
    {
      object (Relaxation)
    }
  ],
  "vehicleIndices": [
    integer
  ]
}
ক্ষেত্র
relaxations[]

object ( Relaxation )

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

vehicle Indices[]

integer

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

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

শিথিলতা

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

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

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

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

  • vehicleStartTime >= relaxations(i).threshold_time AND
  • relaxations(i).threshold_visit_count == 0 এবং গাড়ির শেষ relaxations(i).level শিথিল করা হয় যদি এটি সন্তুষ্ট হয়:
  • vehicleEndTime >= relaxations(i).threshold_time AND
  • 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 সন্তুষ্ট হয়।

threshold Time

string ( Timestamp format)

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

RFC3339 UTC "জুলু" ফর্ম্যাটে একটি টাইমস্ট্যাম্প, ন্যানোসেকেন্ড রেজোলিউশন এবং নয়টি পর্যন্ত ভগ্নাংশের সংখ্যা। উদাহরণ: "2014-10-02T15:01:23Z" এবং "2014-10-02T15:01:23.045123456Z"

threshold Visit Count

integer

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

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

স্তর

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

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

Enums
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 এর মতোই, তবে গাড়িটিও শিথিল: থ্রেশহোল্ডের সময় বা তার পরে পরিদর্শন সম্পূর্ণ বিনামূল্যে এবং সম্ভাব্যভাবে অকার্যকর হয়ে যেতে পারে।