Method: scheduling.solveShiftGeneration

প্রদত্ত SolveShiftGenerationRequest থেকে একটি শিফট জেনারেশন সমস্যা সমাধান করে কর্মচারীর চাহিদা পূরণ করার জন্য প্রদত্ত শিফট টেমপ্লেট থেকে শিফট জেনারেট করে।

HTTP অনুরোধ

POST https://optimization.googleapis.com/v1/scheduling:solveShiftGeneration

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

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

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

JSON প্রতিনিধিত্ব
{
  "solverConfig": {
    object (SolverConfig)
  },
  "shiftTemplates": [
    {
      object (ShiftTemplate)
    }
  ],
  "employeeDemands": [
    {
      object (EmployeeDemand)
    }
  ]
}
ক্ষেত্র
solverConfig

object ( SolverConfig )

ঐচ্ছিক। সমাধানকারীর জন্য পরামিতি।

shiftTemplates[]

object ( ShiftTemplate )

প্রয়োজন। শিফট জেনারেট করার নিয়ম উল্লেখ করে শিফট টেমপ্লেটের সেট।

employeeDemands[]

object ( EmployeeDemand )

প্রয়োজন। মোট কর্মচারীদের দাবি যে shiftTemplates দ্বারা উত্পন্ন শিফটগুলিকে কভার করতে হবে।

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

শিফট জেনারেশন সমস্যার জন্য প্রতিক্রিয়া। যদি solutionStatus SOLVED করা হয়, তাহলে সমাধানকারীর দ্বারা উত্পন্ন বৈধ শিফটের একটি সেট employeeSchedules ফেরত দেওয়া হয়। একটি বৈধ শিফট সময়সূচীর জন্য, নিম্নলিখিত বৈশিষ্ট্যগুলি ধারণ করে:

  1. employeeSchedules শিডিউলে উত্পন্ন প্রতিটি শিফট সংশ্লিষ্ট ShiftTemplate এ উল্লেখিত নিয়ম মেনে চলে।
  2. প্রতিটি শিফটে নির্বাচিত প্রতিটি ইভেন্ট সংশ্লিষ্ট ShiftTemplate.Event এ উল্লেখিত নিয়ম মেনে চলে।
  3. একই ShiftTemplate থেকে উত্পন্ন শিফটের সেটে নিয়োগকৃত মোট কর্মচারীর সংখ্যা সেই টেমপ্লেটের maximumEmployeeCount বেশি নয়।
  4. নির্ধারিত কর্মচারীদের সেট প্রতিটি নির্দিষ্ট ব্যবধানে চাহিদা কভার করে।

সফল হলে, প্রতিক্রিয়া বডিতে নিম্নলিখিত কাঠামোর সাথে ডেটা থাকে:

JSON প্রতিনিধিত্ব
{
  "solutionStatus": enum (ShiftGenerationSolutionStatus),
  "employeeSchedules": [
    {
      object (EmployeeSchedule)
    }
  ],
  "demandCoverageViolations": [
    {
      object (DemandCoverageViolation)
    }
  ]
}
ক্ষেত্র
solutionStatus

enum ( ShiftGenerationSolutionStatus )

ফিরে আসা সমাধানের অবস্থা। solutionStatus SOLVED না হলে, employeeSchedules খালি থাকবে।

employeeSchedules[]

object ( EmployeeSchedule )

প্রতিটি সময়সূচীতে নির্ধারিত কর্মচারীর সংখ্যা সহ সমাধানকারী দ্বারা উত্পন্ন শিফটের সেট।

demandCoverageViolations[]

object ( DemandCoverageViolation )

প্রদত্ত employeeSchedules নির্ধারিত employee_counts উপর ভিত্তি করে চাহিদা কভারেজ লঙ্ঘন। অনুরোধে প্রদত্ত employeeDemands একত্রিত করা হয় -- যদি দুটি employee_demand ব্যবধান ওভারল্যাপ হয়, তাহলে চাহিদাটি ব্যবধানের ওভারল্যাপিং অংশের সাথে যোগ করা হয়।

SolverConfig

শিফট জেনারেশন সমস্যা সমাধানের জন্য অতিরিক্ত প্যারামিটার নির্দিষ্ট করে।

JSON প্রতিনিধিত্ব
{
  "timeLimit": string,
  "multiDaySchedule": boolean,
  "shiftEventsCanChange": boolean
}
ক্ষেত্র
timeLimit

string ( Duration format)

সমস্যার সমাধানকারীর সর্বোচ্চ সময় ব্যয় করা উচিত। সেট না থাকলে, ডিফল্ট 1 মিনিট। একটি সময়সীমার পছন্দ সমস্যার আকারের উপর নির্ভর করে। একটি উদাহরণ দেওয়ার জন্য, 2টি ShiftTemplates দিয়ে 7-দিনের উদাহরণ সমাধান করার সময়, প্রতিটিতে ~20 সম্ভাব্য শুরুর সময় এবং ~30 সম্ভাব্য শুরুর সময় সহ 2টি ইভেন্ট রাখা এবং প্রতি সপ্তাহে দুই দিন ছুটি, প্রস্তাবিত মানগুলি হল: দ্রুত সমাধানের জন্য <10s (এবং সম্ভবত সাবঅপ্টিমাল), ভাল মানের সমাধানের জন্য (10s, 300s), এবং একটি সম্পূর্ণ অনুসন্ধানের জন্য >300s। বড় দৃষ্টান্তগুলির জন্য দীর্ঘ সময়ের সীমার প্রয়োজন হতে পারে।

এই মানটি একটি কঠিন সীমা নয় এবং এটি যোগাযোগের ওভারহেডের জন্য অ্যাকাউন্ট করে না। সমস্যা সমাধানের প্রত্যাশিত বিলম্ব এই মানটিকে সামান্য অতিক্রম করতে পারে।

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

multiDaySchedule

boolean

সত্য হলে, সমাধানকারী EmployeeSchedule তৈরি করে যার মধ্যে বেশ কিছু শিফট অন্তর্ভুক্ত থাকে (যেমন, সপ্তাহব্যাপী সময়সূচী তৈরি করতে)। অন্যথায়, প্রতিটি EmployeeSchedule ঠিক একটি শিফট অন্তর্ভুক্ত থাকে। বহু-দিনের সময়সূচী অনুমান করে যে শিফটের শুরুর সময় দিন জুড়ে একই, এবং এই ধরনের সময়সূচীতে কত দিন ছুটি থাকে তা শিফট টেমপ্লেট দ্বারা নির্ধারিত হয়। ডিফল্ট মিথ্যা.

shiftEventsCanChange

boolean

সত্য হলে, বহু-দিনের EmployeeSchedule এমন শিফট অন্তর্ভুক্ত থাকতে পারে যার জন্য তাদের ইভেন্টের শুরু এবং শেষের সময় সমস্ত দিন জুড়ে পরিবর্তিত হয়। অন্যথায়, একটি নির্দিষ্ট EmployeeSchedule সমস্ত শিফটে একই ইভেন্টের শুরু এবং শেষের সময় থাকতে হবে। উভয় ক্ষেত্রেই, বহু-দিনের সময়সূচীর সমস্ত শিফটের শুরু এবং শেষের সময় একই থাকে। যেমন এই পরামিতি উপেক্ষা করা হয় যদি multiDaySchedule মিথ্যা হয়। এই প্যারামিটারটিকে সত্য হিসাবে সেট করার ফলে সমাধানের সময় দীর্ঘ হতে পারে। ডিফল্ট মিথ্যা.

শিফট টেমপ্লেট

টেমপ্লেট শিফট জেনারেট করার নিয়ম উল্লেখ করে। একটি শিফট হল কাজের একটি ইউনিট যা একটি শুরুর সময়, শেষ সময় নির্দিষ্ট করে এবং এতে ইভেন্ট থাকতে পারে (যেমন লাঞ্চ, বিরতি, ইত্যাদি)। প্রতিক্রিয়ায় একটি নির্দিষ্ট তারিখে একটি স্থানান্তর বরাদ্দ করা হবে।

JSON প্রতিনিধিত্ব
{
  "id": string,
  "earliestStartTime": {
    object (TimeOfDay)
  },
  "latestStartTime": {
    object (TimeOfDay)
  },
  "durationMinutes": integer,
  "startTimeIncrementMinutes": integer,
  "daysOffCountPerWeek": integer,
  "eventTemplates": [
    {
      object (EventTemplate)
    }
  ],
  "minimumIntereventGapMinutes": integer,
  "maximumEmployeeCount": integer
}
ক্ষেত্র
id

string

এই টেমপ্লেটের অনন্য আইডি।

earliestStartTime

object ( TimeOfDay )

দিনের প্রথমতম সময় যেখানে একটি শিফট শুরু হতে পারে। এই মান ঘন্টা এবং মিনিটের সাথে নির্দিষ্ট করা হয়; সেকেন্ড এবং ন্যানো উপেক্ষা করা হয়।

latestStartTime

object ( TimeOfDay )

দিনের সর্বশেষ সময় যেখানে একটি শিফট শুরু হতে পারে। এই মান ঘন্টা এবং মিনিটের সাথে নির্দিষ্ট করা হয়; সেকেন্ড এবং ন্যানো উপেক্ষা করা হয়। যদি এই মানটি earliestStartTime এর থেকে কম হয়, তাহলে এই টেমপ্লেট দ্বারা উত্পন্ন একটি শিফট মধ্যরাতের আগে বা পরে শুরু হতে পারে।

durationMinutes

integer

এই টেমপ্লেট দ্বারা উত্পন্ন একটি স্থানান্তরের নির্দিষ্ট সময়কাল।

startTimeIncrementMinutes

integer

earliestStartTime এবং latestStartTime মধ্যে সম্ভাব্য শুরুর সময়ের সেট তৈরি করতে ব্যবহৃত সময়ের বৃদ্ধি (মিনিটের মধ্যে)। উদাহরণস্বরূপ, যদি প্রথম শুরুর সময় 8:00 হয়, সর্বশেষ শুরুর সময় 8:30 হয় এবং শুরুর সময় বৃদ্ধি 10 মিনিট হয়, তাহলে এই শিফট টেমপ্লেটের জন্য সমস্ত সম্ভাব্য শুরুর সময় হল: 8:00, 8:10, 8:20, এবং 8:30।

daysOffCountPerWeek

integer

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

eventTemplates[]

object ( EventTemplate )

প্রতিটি শিফটের জন্য ইভেন্ট তৈরি করার নিয়ম। নির্দিষ্ট করা প্রতিটি ইভেন্টের জন্য প্রতিটি শিফটে ঠিক একটি ইভেন্ট অন্তর্ভুক্ত করা হবে।

minimumIntereventGapMinutes

integer

একটি ইভেন্টের শেষ এবং পরবর্তী শুরুর মধ্যে ন্যূনতম মিনিট।

maximumEmployeeCount

integer

এই টেমপ্লেট দ্বারা উত্পন্ন সমস্ত শিফটে সর্বাধিক সংখ্যক কর্মচারী নিয়োগ করা যেতে পারে৷

TimeOfDay

দিনের একটি সময় প্রতিনিধিত্ব করে। তারিখ এবং সময় অঞ্চল হয় উল্লেখযোগ্য নয় বা অন্য কোথাও নির্দিষ্ট করা হয়েছে৷ একটি API লিপ সেকেন্ডের অনুমতি দিতে বেছে নিতে পারে। সম্পর্কিত প্রকারগুলি হল google.type.Date এবং google.protobuf.Timestamp

JSON প্রতিনিধিত্ব
{
  "hours": integer,
  "minutes": integer,
  "seconds": integer,
  "nanos": integer
}
ক্ষেত্র
hours

integer

24 ঘন্টা বিন্যাসে দিনের ঘন্টা. 0 থেকে 23 পর্যন্ত হওয়া উচিত। ব্যবসা বন্ধ হওয়ার সময় মত পরিস্থিতির জন্য একটি API "24:00:00" মানকে অনুমতি দিতে পারে।

minutes

integer

দিনের ঘন্টার মিনিট। 0 থেকে 59 এর মধ্যে হতে হবে।

seconds

integer

সময়ের মিনিটের সেকেন্ড। সাধারণত 0 থেকে 59 এর মধ্যে হতে হবে। একটি API 60 মান অনুমোদন করতে পারে যদি এটি লিপ-সেকেন্ডের অনুমতি দেয়।

nanos

integer

ন্যানোসেকেন্ডে সেকেন্ডের ভগ্নাংশ। 0 থেকে 999,999,999 পর্যন্ত হতে হবে।

ইভেন্ট টেমপ্লেট

একটি শিফটের সময় ঘটে এমন একটি একক ইভেন্ট তৈরি করার নিয়ম নির্দিষ্ট করে টেমপ্লেট৷ একটি ইভেন্ট একটি মিটিং, বিরতি, মধ্যাহ্নভোজ ইত্যাদি প্রতিনিধিত্ব করতে পারে।

JSON প্রতিনিধিত্ব
{
  "id": string,
  "minimumMinutesAfterShiftStart": integer,
  "maximumMinutesAfterShiftStart": integer,
  "durationMinutes": integer,
  "startTimeIncrementMinutes": integer
}
ক্ষেত্র
id

string

এই টেমপ্লেটের অনন্য আইডি।

minimumMinutesAfterShiftStart

integer

এই ইভেন্টটি শুরু হতে পারে এমন একটি শিফট শুরু হওয়ার পর ন্যূনতম সংখ্যক মিনিট।

maximumMinutesAfterShiftStart

integer

এই ইভেন্টটি শুরু হতে পারে এমন একটি শিফট শুরু হওয়ার পর সর্বাধিক সংখ্যক মিনিট৷

durationMinutes

integer

এই ইভেন্টের মিনিটের মধ্যে নির্দিষ্ট সময়কাল।

startTimeIncrementMinutes

integer

minimumMinutesAfterShiftStart এবং maximumMinutesAfterShiftStart এর মধ্যে সম্ভাব্য ইভেন্ট শুরুর সময়ের সেট তৈরি করতে ব্যবহৃত সময়ের বৃদ্ধি (মিনিটের মধ্যে)। উদাহরণ স্বরূপ, শিফট শুরু হওয়ার পর ন্যূনতম মিনিট 30 হলে, শিফট শুরু হওয়ার পর সর্বোচ্চ মিনিট 45 হয় এবং শুরুর সময় বৃদ্ধি 5 মিনিট হয়, ইভেন্টটি শিফট শুরু হওয়ার 30, 35, 40 বা 45 মিনিট পরে ঘটতে পারে .

কর্মচারীর চাহিদা

প্রদত্ত তারিখ সময়ের ব্যবধানে চাহিদা পূরণের জন্য প্রয়োজনীয় কর্মচারীর সংখ্যা নির্দিষ্ট করে৷

JSON প্রতিনিধিত্ব
{
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "employeeCount": integer
}
ক্ষেত্র
startDateTime

object ( DateTime )

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

endDateTime

object ( DateTime )

প্রদত্ত চাহিদার জন্য সময়ের ব্যবধানের সমাপ্তি (একচেটিয়া)। এই মানগুলি মিনিটে পড়া হয়; সেকেন্ড এবং সমস্ত ছোট ইউনিট উপেক্ষা করা হয়।

employeeCount

integer

এই ব্যবধানের চাহিদা পূরণের জন্য প্রয়োজনীয় কর্মচারীর সংখ্যা।

শিফট জেনারেশনসলিউশন স্ট্যাটাস

সমাধানকারীর প্রতিক্রিয়ায় দেওয়া সমাধানের স্থিতি।

Enums
SHIFT_GENERATION_SOLUTION_STATUS_UNSPECIFIED প্রতিক্রিয়া জন্য অনির্দিষ্ট অবস্থা.
SHIFT_GENERATION_SOLVED সমাধানকারী প্রদত্ত সময়সীমার মধ্যে একটি সমাধান খুঁজে পেয়েছে।
SHIFT_GENERATION_NOT_SOLVED একটি সমস্যা সমাধানকারীকে শিফট জেনারেট করতে বাধা দেয়।
SHIFT_GENERATION_NOT_SOLVED_DEADLINE_EXCEEDED প্রদত্ত সময়ের মধ্যে চাহিদা মেটাতে শিফট তৈরি করা যায়নি।

কর্মচারী শিডিউল

একটি একক ShiftTemplate সাথে সম্পর্কিত শিফটের একটি আদেশকৃত তালিকা যা অনেক সংখ্যক কর্মচারীকে বরাদ্দ করা হবে।

JSON প্রতিনিধিত্ব
{
  "shiftTemplateId": string,
  "shifts": [
    {
      object (ShiftWithEvents)
    }
  ],
  "employeeCount": integer
}
ক্ষেত্র
shiftTemplateId

string

টেমপ্লেটের আইডি যা শিফটের এই সেট তৈরি করতে ব্যবহৃত হয়েছিল।

shifts[]

object ( ShiftWithEvents )

শিফটের তালিকা কোন employeeCount নিয়োগ করা হয়েছে কর্মচারীর সংখ্যা। সময়সূচীর জন্য নির্বাচিত স্থানান্তর এবং ইভেন্টগুলি একটি একক টেমপ্লেট থেকে তৈরি করা হয়েছিল৷ স্থানান্তরগুলি কালানুক্রমিকভাবে সাজানো হয় এবং ওভারল্যাপ হয় না। যদি SolverConfig.multi_day_schedule সত্য হয়, একটি দিনের ছুটি সেই দিন থেকে শুরু হওয়া একটি শিফটের অনুপস্থিতি দ্বারা নিহিতভাবে উপস্থাপন করা হয়।

employeeCount

integer

চাহিদা পূরণের জন্য শিফটের এই সেটে নিয়োগ করা উচিত এমন কর্মচারীর সংখ্যা।

ShiftWithEvents

সমাধানকারীর দ্বারা উত্পন্ন একটি স্থানান্তরের নির্দিষ্ট ইভেন্টের তালিকা সহ শুরু এবং শেষের তারিখ নির্দিষ্ট করে৷

JSON প্রতিনিধিত্ব
{
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "events": [
    {
      object (Event)
    }
  ]
}
ক্ষেত্র
startDateTime

object ( DateTime )

শিফট শুরুর তারিখ এবং সময়। এই মানটি মিনিটে নির্দিষ্ট করা হয়েছে; সেকেন্ড এবং ছোট ইউনিট দেওয়া হয় না।

endDateTime

object ( DateTime )

শিফটের শেষ তারিখ এবং সময়। এই মানটি মিনিটে নির্দিষ্ট করা হয়েছে; সেকেন্ড এবং ছোট ইউনিট দেওয়া হয় না।

events[]

object ( Event )

এই শিফটে অন্তর্ভুক্ত ইভেন্টের তালিকা, ঠিক ম্যাপ করা হয়েছে, এবং একই ক্রমে, ShiftTemplate.Event s. SolverConfig.shift_events_can_change সত্য হলে, এই সময়সূচীর সমস্ত ShiftWithEvents জুড়ে ইভেন্টের শুরু এবং শেষের সময় পরিবর্তিত হতে পারে।

ঘটনা

সমাধানকারী দ্বারা উত্পন্ন একটি শিফটে একটি নির্দিষ্ট ইভেন্টের শুরু এবং শেষের তারিখ নির্দিষ্ট করে৷

JSON প্রতিনিধিত্ব
{
  "eventTemplateId": string,
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  }
}
ক্ষেত্র
eventTemplateId

string

এই ইভেন্ট তৈরি করতে ব্যবহৃত টেমপ্লেটের আইডি।

startDateTime

object ( DateTime )

অনুষ্ঠান শুরুর তারিখ এবং সময়। এই মানটি মিনিটে নির্দিষ্ট করা হয়েছে; সেকেন্ড এবং ছোট ইউনিট দেওয়া হয় না।

endDateTime

object ( DateTime )

ইভেন্টের শেষ তারিখ এবং সময়। এই মানটি মিনিটে নির্দিষ্ট করা হয়েছে; সেকেন্ড এবং ছোট ইউনিট দেওয়া হয় না।

চাহিদা কভারেজ লঙ্ঘন

প্রদত্ত ব্যবধানের জন্য চাহিদা কভারেজ লঙ্ঘন নির্দিষ্ট করে। পুরো নির্দিষ্ট ব্যবধানে কর্মচারীর চাহিদা একই থাকে।

JSON প্রতিনিধিত্ব
{
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "coverageViolation": integer
}
ক্ষেত্র
startDateTime

object ( DateTime )

চাহিদা ব্যবধানের শুরুর তারিখ এবং সময় (অন্তর্ভুক্ত)। এই মানটি মিনিট পর্যন্ত নির্দিষ্ট করা হয়েছে।

endDateTime

object ( DateTime )

চাহিদা ব্যবধানের শেষ তারিখ এবং সময় (একচেটিয়া)। এই মানটি মিনিট পর্যন্ত নির্দিষ্ট করা হয়েছে।

coverageViolation

integer

নির্দিষ্ট ব্যবধানে কভারেজ লঙ্ঘন। একটি ইতিবাচক মান নির্দেশ করে যে চাহিদা ওভারকভার করা হয়েছে, এবং একটি নেতিবাচক মান নির্দেশ করে যে চাহিদা আড়াল করা হয়েছে।