Method: scheduling.solveShiftGeneration

یک مشکل تولید شیفت را از SolveShiftGenerationRequest با ایجاد شیفت هایی از الگوهای شیفت داده شده به منظور پوشش تقاضای کارمندان حل می کند.

درخواست HTTP

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

URL از دستور GRPC Transcoding استفاده می کند.

درخواست بدن

بدنه درخواست حاوی داده هایی با ساختار زیر است:

نمایندگی JSON
{
  "solverConfig": {
    object (SolverConfig)
  },
  "shiftTemplates": [
    {
      object (ShiftTemplate)
    }
  ],
  "employeeDemands": [
    {
      object (EmployeeDemand)
    }
  ]
}
زمینه های
solverConfig

object ( SolverConfig )

اختیاری. پارامترهای حل کننده

shiftTemplates[]

object ( ShiftTemplate )

ضروری. مجموعه ای از الگوهای شیفت که قوانینی را برای ایجاد شیفت ها مشخص می کند.

employeeDemands[]

object ( EmployeeDemand )

ضروری. کل تقاضای کارکنان که شیفت های ایجاد شده توسط shiftTemplates باید پوشش داده شود.

بدن پاسخگو

پاسخ به مشکل Shift Generation. اگر 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 )

نقض پوشش تقاضا بر اساس employee_counts اختصاص داده شده در employeeSchedules داده شده. employeeDemands داده شده در درخواست تجمیع می شوند -- اگر دو بازه employee_demand همپوشانی داشته باشند، تقاضا در قسمت همپوشانی بازه جمع می شود.

SolverConfig

پارامترهای اضافی را برای حل مشکل Shift Generation مشخص می کند.

نمایندگی JSON
{
  "timeLimit": string,
  "multiDaySchedule": boolean,
  "shiftEventsCanChange": boolean
}
زمینه های
timeLimit

string ( Duration format)

حداکثر زمانی که حل کننده باید برای مشکل صرف کند. اگر تنظیم نشده باشد، به طور پیش فرض روی 1 دقیقه تنظیم می شود. انتخاب محدودیت زمانی باید به اندازه مشکل بستگی داشته باشد. برای مثال، هنگام حل یک نمونه 7 روزه با 2 ShiftTemplates ، هر کدام با 20 زمان شروع ممکن و برگزاری 2 رویداد با 30 زمان شروع احتمالی، و دو روز تعطیل در هفته، مقادیر توصیه شده عبارتند از: <10s برای راه حل های سریع (و احتمالاً کمتر از حد مطلوب)، (10s، 300s) برای راه حل های با کیفیت خوب، و > 300s برای یک جستجوی جامع. نمونه های بزرگتر ممکن است به محدودیت های زمانی طولانی تری نیاز داشته باشند.

این مقدار یک محدودیت سخت نیست و برای سربار ارتباط حساب نمی کند. تاخیر مورد انتظار برای حل مشکل ممکن است کمی بیشتر از این مقدار باشد.

مدت زمان در ثانیه با حداکثر نه رقم کسری که با ' s ' ختم می شود. مثال: "3.5s" .

multiDaySchedule

boolean

اگر درست باشد، حل‌کننده برنامه‌های EmployeeSchedule را ایجاد می‌کند که شامل چندین شیفت (مثلاً برای ایجاد یک برنامه یک هفته‌ای) است. در غیر این صورت، هر EmployeeSchedule دقیقاً شامل یک شیفت است. برنامه های چند روزه فرض می کنند که زمان شروع شیفت در بین روزها یکسان است و تعداد روزهای تعطیل در چنین برنامه ای با الگوهای شیفت تعیین می شود. پیش فرض نادرست است.

shiftEventsCanChange

boolean

اگر درست باشد، برنامه های چند روزه EmployeeSchedule ممکن است شامل شیفت هایی باشد که زمان شروع و پایان رویدادهای آنها در همه روزها متفاوت است. در غیر این صورت، تمام شیفت های یک EmployeeSchedule خاص باید زمان شروع و پایان رویداد یکسانی داشته باشند. در هر صورت، تمام شیفت های یک برنامه چند روزه زمان شروع و پایان یکسانی دارند. بنابراین اگر multiDaySchedule نادرست باشد، این پارامتر نادیده گرفته می شود. تنظیم این پارامتر روی true ممکن است منجر به زمان حل طولانی تر شود. پیش فرض نادرست است.

ShiftTemplate

الگوی مشخص کننده قوانین برای ایجاد شیفت. شیفت واحدی از کار است که زمان شروع، زمان پایان را مشخص می‌کند و ممکن است شامل رویدادهایی (مانند ناهار، استراحت و غیره) باشد. یک شیفت به تاریخ خاصی در پاسخ اختصاص داده می شود.

نمایندگی 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 دقیقه پس از شروع شیفت انجام شود. .

EmployeeDemand

تعداد کارکنان مورد نیاز برای پوشش تقاضا در بازه زمانی داده شده را مشخص می کند.

نمایندگی JSON
{
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "employeeCount": integer
}
زمینه های
startDateTime

object ( DateTime )

شروع بازه زمانی برای تقاضای داده شده (شامل). این مقادیر تا دقیقه خوانده می شوند. ثانیه و تمام واحدهای کوچکتر نادیده گرفته می شوند.

endDateTime

object ( DateTime )

پایان بازه زمانی برای تقاضای داده شده (انحصاری). این مقادیر تا دقیقه خوانده می شوند. ثانیه و تمام واحدهای کوچکتر نادیده گرفته می شوند.

employeeCount

integer

تعداد کارکنان مورد نیاز برای پوشش تقاضا برای این فاصله.

ShiftGenerationSolutionStatus

وضعیت راه حل ارائه شده در پاسخ یک حل کننده.

Enums
SHIFT_GENERATION_SOLUTION_STATUS_UNSPECIFIED وضعیت نامشخص برای پاسخ.
SHIFT_GENERATION_SOLVED حل کننده یک راه حل در محدودیت زمانی ارائه شده پیدا کرد.
SHIFT_GENERATION_NOT_SOLVED مشکلی مانع از ایجاد شیفت توسط حل کننده شد.
SHIFT_GENERATION_NOT_SOLVED_DEADLINE_EXCEEDED شیفت هایی برای پوشش تقاضا در مدت زمان مشخص شده ایجاد نشد.

EmployeeSchedule

لیستی از شیفت های مرتب شده مربوط به یک 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

نقض پوشش در بازه زمانی مشخص شده. مقدار مثبت نشان می دهد که تقاضا بیش از حد پوشش داده شده است و مقدار منفی نشان می دهد که تقاضا تحت پوشش است.