Package google.research.optimization.v1.workforce

فهرست مطالب

زنگ تفريح

دوره زمانی که در آن یک کارمند کار خود را در یک شیفت قطع می کند.

زمینه های
start_date_time

DateTime

زمان شروع استراحت

duration_minutes

int32

مدت زمان استراحت بر حسب دقیقه

BreakRule

قاعده‌ای که تعیین می‌کند چه زمانی یک وقفه می‌تواند در یک شیفت شروع شود و مدت آن. فهرست تمام وقفه‌های احتمالی که در نظر گرفته می‌شوند با افزایش rule_increment_minutes تعیین می‌شوند. به عنوان مثال، اگر یک قانون استراحت مدل سازی یک استراحت 30 دقیقه ای است که می تواند بین ساعت 10:00 تا 11:00 شروع شود، و افزایش قانون 20 دقیقه است، لیست وقفه هایی که در نظر گرفته می شوند عبارتند از: [10:00, 10 :30]، [10:20، 10:50]، [10:40، 11:10]، [11:00، 11:30].

زمینه های
earliest_start_time

DateTime

زودترین زمان شروع استراحت (شامل). فقط hours و minutes را می توان تنظیم کرد.

latest_start_time

DateTime

آخرین زمان شروع استراحت (شامل). فقط hours و minutes را می توان تنظیم کرد.

duration_minutes

int32

مدت زمان استراحت بر حسب دقیقه

rule_increment_minutes

int32

[اختیاری] افزایش زمان بر حسب دقیقه برای همه وقفه هایی که می توان در این قانون استراحت در نظر گرفت. اگر تنظیم نشده باشد، به طور پیش‌فرض روی duration_minutes تنظیم می‌شود.

بودجه مورد نیاز

بودجه مورد نیاز برای یک بازه زمانی مشخص

زمینه های
total_budget

double

بودجه کل برای بازه زمانی داده شده اگر اولویت PRIORITY_MANDATORY است، باید بودجه کل داده شود.

اگر total_budget تنظیم نشده باشد، هزینه کل برنامه بر اساس priority مشخص شده به حداقل می رسد. برای مثال، اگر priority بودجه PRIORITY_MEDIUM باشد، حل‌کننده قبل از کاهش هرگونه نقض محدودیت با اولویت PRIORITY_LOW ، هزینه را به حداقل می‌رساند.

start_date_time

DateTime

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

end_date_time

DateTime

زمان پایان برای زمانی که این بودجه اعمال می شود. اگر زمان پایان مشخص نشده باشد، تنظیم می شود که آخرین زمان پایان تمام شیفت های داده شده باشد.

priority

Priority

سطح اولویت برای برآوردن نیاز بودجه در پنجره زمانی مشخص شده. اولویت پیش‌فرض PRIORITY_LOW است. اگر اولویت روی PRIORITY_MANDATORY تنظیم شده باشد، باید total_budget تنظیم شود.

توجه داشته باشید که اگر این اولویت بالاتر از سایر اولویت‌های محدودیت باشد و اگر total_budget محدود باشد، برنامه زمانی حاصل می‌تواند به طور قابل توجهی محدودیت‌های کارکنان یا الزامات پوشش را نقض کند.

نیاز پوشش

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

برای یک نقش و/یا مهارت معین، الزامات پوشش زمانی برآورده می‌شود که حداقل تعداد target_employee_count از کارمندان در هر لحظه در پنجره زمانی کار می‌کنند (یا برای هر شیفت در shift_ids ). در مقابل، اگر در هر نقطه از پنجره زمانی (یا برای هر یک از شیفت‌ها در shift_ids )، تعداد کارکنان کمتر از target_employee_count در طول پنجره زمانی کار کنند، الزامات پوشش نقض می‌شود. تعداد کارکنان شاغل بیشتر از target_employee_count همچنان این نیاز را برآورده می کند، اما کارمندان بیش از حد توسط حل کننده به حداقل می رسد.

زمینه های
start_date_time

DateTime

زمان شروع برای پوشش مورد نیاز (شامل). در صورت تنظیم، shift_ids باید خالی باشد.

end_date_time

DateTime

زمان پایان برای پوشش مورد نیاز (انحصاری). در صورت تنظیم، shift_ids باید خالی باشد.

location_id

string

مکانی که در آن کارمندان مورد نیاز هستند. shift_ids خالی نیست، این فیلد باید خالی باشد.

shift_ids[]

string

در صورت تنظیم، نقش و الزامات مهارت به صورت جداگانه برای هر شناسه شیفت در این لیست اعمال می شود. اگر shift_ids خالی نیستند، پس start_date_time ، end_date_time و location_id باید خالی باشند.

role_requirements[]

RoleRequirement

تعداد کارکنان مورد نیاز برای تخصیص به نقش های مشخص شده در پنجره زمانی. حداکثر یک role_requirement باید برای هر شناسه نقش داده شود. سطح اولویت پیش‌فرض برای هر یک از الزامات PRIORITY_MANDATORY است. اگر کمتر از target_employee_count تعداد کارمندان به نقش های مشخص شده در هر نقطه از پنجره زمانی اختصاص داده شوند، این محدودیت ها نقض می شوند.

skill_requirements[]

SkillRequirement

تعداد مورد نیاز کارمندان با مهارت های مشخص شده که در طول پنجره زمانی به شیفت ها اختصاص داده می شوند. حداکثر یک skill_requirement برای هر شناسه مهارت باید داده شود. سطح اولویت پیش‌فرض برای هر یک از الزامات PRIORITY_LOW است. اگر تعداد کارکنان کمتر از target_employee_count مهارت های داده شده را در هر نقطه از پنجره زمانی داشته باشند، این محدودیت ها نقض می شوند.

RoleRequirement

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

زمینه های
role_id

string

شناسه نقش برای مورد نیاز.

target_employee_count

int32

تعداد مورد نظر کارمندانی که در طول پنجره زمانی به این نقش اختصاص داده شده اند.

priority

Priority

سطح اولویت برای این محدودیت نیاز. اولویت پیش‌فرض برای همه محدودیت‌های منبع PRIORITY_MANDATORY است.

نیاز به مهارت

تعداد مورد نیاز کارمندانی که در بازه زمانی مشغول به کار بوده و دارای مهارت مشخص شده باشند.

زمینه های
skill_id

string

شناسه مهارت برای مورد نیاز.

target_employee_count

int32

تعداد مورد نظر کارمندان با مهارت داده شده که در طول پنجره زمانی کار می کنند.

priority

Priority

سطح اولویت برای این محدودیت نیاز. اولویت پیش‌فرض برای همه محدودیت‌های منبع PRIORITY_LOW است.

نقض پوشش تقاضا

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

زمینه های
start_date_time

DateTime

تاریخ شروع و زمان بازه تقاضا (شامل). این مقدار تا دقیقه مشخص می شود.

end_date_time

DateTime

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

coverage_violation

int32

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

کارمند

یک کارمند از نیروی کار برنامه ریزی شود.

زمینه های
id

string

شناسه منحصر به فرد به این کارمند اختصاص داده شده است.

role_ids[]

string

شناسه های نقشی که این کارمند می تواند انجام دهد. حداقل یک نقش باید مشخص شود. هنگامی که یک کارمند به یک شیفت منصوب می شود، آنها نیز به یک نقش واحد از این لیست منصوب می شوند. کارمند ممکن است در طول پنجره برنامه ریزی به نقش های مختلفی اختصاص یابد.

skill_ids[]

string

شناسه های مهارتی که این کارمند دارد. این لیست می تواند خالی باشد. هنگامی که یک کارمند به یک شیفت منصوب می شود، از هر زیرمجموعه ای از مهارت های ذکر شده در اینجا برای پوشش مهارت های مورد نیاز در طول مدت شیفت تعیین شده استفاده می کند.

shift_preferences[]

ShiftPreference

ترجیحات شیفت این کارمند. شیفت های مشخص شده در اینجا نشان دهنده شیفت هایی است که کارمند ترجیح می دهد در طول پنجره برنامه ریزی به آنها اختصاص داده شود. شناسه‌های shift مشخص‌شده در shift_preferences باید منحصربه‌فرد باشند. حل کننده سعی می کند مجموع مقادیر ShiftPreference.preference را بر روی همه shift_preferences که برآورده شده اند، به حداکثر برساند.

scheduling_constraints[]

SchedulingConstraint

لیست محدودیت های برنامه ریزی برای این کارمند. سطح اولویت پیش‌فرض برای هر یک از این محدودیت‌ها PRIORITY_MEDIUM است. برای جزئیات بیشتر به شماره Priority مراجعه کنید.

resource_constraints[]

ResourceConstraint

هر گونه محدودیت زمانبندی اضافی که در scheduling_constraints مشخص نشده است را می توان در اینجا به resource_constraints اضافه کرد. ResourceConstraint یک نمایش انتزاعی تر برای محدود کردن منابع برای یک کارمند است. سطح اولویت پیش‌فرض برای هر یک از این محدودیت‌ها PRIORITY_MEDIUM است. برای جزئیات بیشتر به شماره Priority مراجعه کنید.

shift_requests[]

ShiftRequest

لیست درخواست های شیفت برای کارمند. درخواست می تواند برای کارمندی باشد که در شیفت های خاص منصوب شود یا نه. هر تکالیف زمان‌بندی ثابت برای کارمند را می‌توان با ShiftRequest با اولویت PRIORITY_MANDATORY نشان داد. شناسه شیفت ممکن است حداکثر در یک درخواست زمان‌بندی برای این کارمند ظاهر شود. سطح اولویت پیش‌فرض برای هر یک از این درخواست‌ها PRIORITY_LOW است. برای جزئیات بیشتر به شماره Priority مراجعه کنید.

hourly_contract

HourlyContract

قراردادی که نرخ های منظم و اضافه کاری ساعتی را برای کارمند مشخص می کند.

EmployeeDemand

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

زمینه های
start_date_time

DateTime

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

end_date_time

DateTime

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

employee_count

int32

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

EmployeeSchedule

لیستی از شیفت های مرتب شده مربوط به یک ShiftTemplate که قرار است به تعدادی از کارمندان اختصاص داده شود.

زمینه های
shift_template_id

string

شناسه الگوی مورد استفاده برای ایجاد این مجموعه شیفت‌ها.

shifts[]

ShiftWithEvents

فهرست شیفت هایی که تعداد employee_count به آنها اختصاص داده شده است. تغییرات و رویدادهای انتخاب شده برای برنامه از یک الگوی واحد تولید شده اند. تغییرات به ترتیب زمانی مرتب شده اند و با هم تداخل ندارند. اگر SolverConfig.multi_day_schedule درست باشد، یک روز تعطیل به طور ضمنی با عدم وجود تغییری که از آن روز شروع می شود نشان داده می شود.

employee_count

int32

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

ShiftWithEvents

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

زمینه های
start_date_time

DateTime

تاریخ و زمان شروع شیفت. این مقدار تا دقیقه مشخص می شود. ثانیه و واحدهای کوچکتر داده نمی شود.

end_date_time

DateTime

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

events[]

Event

فهرست رویدادهای گنجانده شده در این تغییر، دقیقاً به ترتیب و به ترتیب ShiftTemplate.Event s نگاشت شده است. اگر SolverConfig.shift_events_can_change درست باشد، زمان شروع و پایان رویدادها ممکن است در همه ShiftWithEvents این برنامه زمانی متفاوت باشد.

رویداد

تاریخ شروع و پایان یک رویداد خاص را در یک شیفت ایجاد شده توسط حل کننده مشخص می کند.

زمینه های
event_template_id

string

شناسه الگوی مورد استفاده برای ایجاد این رویداد.

start_date_time

DateTime

تاریخ و زمان شروع رویداد. این مقدار تا دقیقه مشخص می شود. ثانیه و واحدهای کوچکتر داده نمی شود.

end_date_time

DateTime

تاریخ و زمان پایان رویداد. این مقدار تا دقیقه مشخص می شود. ثانیه و واحدهای کوچکتر داده نمی شود.

قالب رویداد

الگوی مشخص کننده قوانین برای ایجاد یک رویداد واحد که در طول یک شیفت رخ می دهد. یک رویداد ممکن است نمایانگر یک جلسه، استراحت، ناهار و غیره باشد.

زمینه های
id

string

شناسه منحصر به فرد این الگو.

minimum_minutes_after_shift_start

int32

حداقل تعداد دقیقه پس از شروع یک شیفت که این رویداد می تواند شروع شود.

maximum_minutes_after_shift_start

int32

حداکثر تعداد دقیقه پس از شروع یک شیفت که این رویداد می تواند شروع شود.

duration_minutes

int32

مدت زمان ثابت در دقیقه از این رویداد.

start_time_increment_minutes

int32

افزایش زمان (بر حسب دقیقه) مورد استفاده برای ایجاد مجموعه زمان‌های شروع رویداد ممکن بین minimum_minutes_after_shift_start و maximum_minutes_after_shift_start . به عنوان مثال، اگر حداقل دقیقه پس از شروع شیفت 30 دقیقه، حداکثر دقیقه پس از شروع شیفت 45 دقیقه و افزایش زمان شروع 5 دقیقه باشد، رویداد می تواند 30، 35، 40 یا 45 دقیقه پس از شروع شیفت انجام شود. .

قرارداد ساعتی

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

زمینه های
base_hourly_rate

double

غرامت یک ساعت کار غیر اضافه کاری. اگر چند نرخ برای کارمند اعمال شود، تفاوت نرخ نسبت به این نرخ پایه ساعتی اعمال می شود. علاوه بر این، اگر چند نرخ وجود دارد، نرخ پایه ساعتی باید حداقل این نرخ ها باشد.

hourly_rate_shift_differentials

map<string, double>

تفاوت نرخ ساعتی، که بالاتر از base_hourly_rate پرداخت می شود. به عنوان مثال، اگر نرخ پایه ساعتی 30 دلار در ساعت باشد، "shift_1" با نرخ 40 دلار در ساعت و "shift_2" با نرخ 45 دلار در ساعت پرداخت می شود، آنگاه نمایش اولیه این است: base_hourly_rate: 30 hourly_rate_shift_differentials {key: "shift_1" value: 10} hourly_rate_shift_differentials {key: "shift_2" value: 15} .

overtime_periods[]

OvertimePeriod

فهرستی از تمام دوره هایی که اضافه کاری برای آنها باید محاسبه شود. این دوره ها نباید با هم تداخل داشته باشند.

دوره اضافه کاری

یک دوره ثابت و به طور منظم تکرار شونده (معمولا 168 ساعت یا هفت دوره 24 ساعته متوالی) که برای تعیین میزان جبران اضافه کاری استفاده می شود. هر دوره دارای یک ضریب اضافه کاری (مثلاً 1.5) نسبت به base_hourly_rate و محدودیتی در تعداد ساعاتی است که کار معمولی (غیر اضافه کاری) در نظر گرفته می شود. هر تغییری که با پنجره زمانی start_date_time (شامل) و end_date_time (انحصاری) همپوشانی داشته باشد در تعداد کل ساعات کار در دوره محاسبه می شود. اگر همپوشانی جزئی باشد، فقط ساعات همپوشانی شمارش می‌شود.

زمینه های
overtime_multiplier

double

ضریب برای محاسبه نرخ ساعتی اضافه کاری (باید بزرگتر یا مساوی 1.0 باشد). نرخ ساعتی اضافه کاری معمولاً به صورت base_hourly_rate * overtime_multiplier محاسبه می شود. اگر چندین نرخ از طریق hourly_rate_shift_differentials داده شده باشد، حل کننده نرخ ساعتی اضافه کاری را با میانگین ساده نرخ هایی که در طول دوره اضافه کاری قابل اعمال است، تقریب می زند. توجه: مقررات در مکان های مختلف ممکن است نیاز به محاسبه متفاوتی برای جبران اضافه کاری داشته باشند. حل کننده غرامت اضافه کاری را برای به حداقل رساندن یک پروکسی از کل هزینه یا تامین بودجه تقریبی می کند، اما به عنوان ابزاری برای محاسبه حقوق و دستمزد در نظر گرفته نشده است.

start_date_time

DateTime

زمان شروع برای دوره اضافه کاری. اگر یک شیفت با این زمان همپوشانی داشته باشد، ساعت‌های چنین تغییری از start_date_time شمارش می‌شود.

end_date_time

DateTime

زمان پایان برای دوره اضافه کاری. اگر یک شیفت با این زمان همپوشانی داشته باشد، ساعت‌های چنین شیفتی تا end_date_time شمارش می‌شود.

maximum_regular_hours

double

حداکثر تعداد ساعات کاری که با نرخ معمولی (غیر اضافه کاری) پرداخت می شود. این مقدار باید مثبت باشد.

اولویت

سطح اولویت برای هر گونه محدودیت در برنامه کارمند یا الزامات پوشش. اینها عبارتند از SchedulingConstraint ، ResourceConstraint ، ShiftRequest و CoverageRequirement . از آنجا که ممکن است محدودیت های متناقضی وجود داشته باشد، همیشه نمی توان هر محدودیتی را برآورده کرد. به این ترتیب، هر نوع محدودیت دارای یک اولویت (داده شده توسط کاربر یا یک پیش فرض) است که به حل کننده در مورد اهمیت نسبی تمام محدودیت های داده شده به یک برنامه کامل اطلاع می دهد.

Enums
PRIORITY_UNSPECIFIED سطح اولویت نامشخص
PRIORITY_LOW پایین ترین سطح اولویت محدودیت های با این اولویت نسبت به سایر محدودیت ها اهمیت کمتری دارند. آنها اولین کسانی هستند که در صورت عدم یافتن راه حل عملی، برای نقض در نظر گرفته می شوند.
PRIORITY_MEDIUM سطح اولویت متوسط. محدودیت‌های با این اولویت مهم‌تر از محدودیت‌های با اولویت PRIORITY_LOW هستند، اما اهمیت کمتری نسبت به محدودیت‌های با اولویت PRIORITY_HIGH دارند. اگر پس از رفع همه محدودیت‌ها با اولویت PRIORITY_LOW ، راه‌حلی امکان‌پذیر یافت نشد، محدودیت‌های اولویت PRIORITY_MEDIUM در مرحله بعدی برای نقض در نظر گرفته می‌شوند.
PRIORITY_HIGH بالاترین سطح اولویت. محدودیت ها با این سطح اولویت مهم ترین هستند. اگر پس از رفع محدودیت‌های سطوح اولویت پایین‌تر، راه‌حلی امکان‌پذیر یافت نشد، آنها آخرین مواردی هستند که برای نقض در نظر گرفته می‌شوند.
PRIORITY_MANDATORY سطح اولویت که نشان دهنده چیزی است که توسط حل کننده قابل نقض نیست. اگر حل‌کننده SolutionStatus.INFEASIBLE برمی‌گرداند، ممکن است به دلیل محدودیت‌های بیش از حد PRIORITY_MANDATORY باشد.

محدودیت منابع

یک محدودیت کلی که میزان استفاده از یک "منبع" خاص توسط یک کارمند را محدود می کند. این یک نسخه انتزاعی از SchedulingConstraint خاص تر است که برای کاربر انعطاف پذیرتر است. بسیاری از محدودیت‌های زمان‌بندی که نمی‌توانند در SchedulingConstraint.type مشخص شوند، می‌توانند با استفاده از این پیام به جای آن مشخص شوند.

زمینه های
priority

Priority

سطح اولویت این محدودیت منبع. اولویت پیش‌فرض برای همه محدودیت‌های منبع PRIORITY_MEDIUM است.

resource_usages

map<string, double>

مقدار منابع استفاده شده توسط شیفت. به عنوان مثال، اگر این محدودیت برای حداقل و حداکثر ساعات کار یک کارمند در یک هفته خاص اعمال شود، این نقشه شامل شیفت هایی است که در آن هفته رخ می دهد و طول هر شیفت بر حسب ساعت.

minimum_resource_usage

double

حداقل استفاده از منابع برای ارضای یک محدودیت منبع.

maximum_resource_usage

double

حداکثر استفاده از منابع برای برآورده شدن یک محدودیت منبع.

محدودیت زمانبندی

محدودیت برنامه ریزی خاص برای یک کارمند خاص. محدودیت مشخص شده فقط در بازه زمانی داده شده [start_date_time, end_date_time) اعمال می شود.

زمینه های
priority

Priority

سطح اولویت برای این محدودیت زمان‌بندی. اولویت پیش‌فرض برای همه محدودیت‌های زمان‌بندی PRIORITY_MEDIUM است.

start_date_time

DateTime

زمان شروع برای زمانی که این محدودیت زمان بندی اعمال می شود (شامل).

end_date_time

DateTime

زمان پایان برای زمانی که این محدودیت زمان‌بندی اعمال می‌شود (انحصاری).

type فیلد اتحادیه نوع محدودیت مشخص شده هر محدودیت فقط در پنجره زمانی مشخص شده در بالا اعمال می شود. type می تواند تنها یکی از موارد زیر باشد:
minimum_minutes

int32

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

maximum_minutes

int32

حداکثر دقیقه ای که کارمند می تواند در پنجره زمانی کار کند. اگر کارمند به شیفتی منصوب شود که (به طور کامل یا جزئی) با پنجره زمانی همپوشانی داشته باشد، تعداد دقیقه هایی که شیفت با پنجره زمانی همپوشانی دارد در این شمارش لحاظ می شود.

minimum_consecutive_work_days

int32

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

maximum_consecutive_work_days

int32

حداکثر تعداد روزهای متوالی که کارمند می تواند کار کند. اگر یک کارمند به شیفتی که در آن روز شروع می شود منصوب شود، در یک روز خاص کار می کند. هر شیفتی که کارمند به آن منصوب می شود و در پنجره زمانی شروع می شود، در این شمارش گنجانده می شود.

minimum_shift_count

int32

حداقل تعداد شیفت هایی که کارمند می تواند کار کند. هر شیفتی که کارمند به آن منصوب می شود و کاملاً با پنجره زمانی همپوشانی دارد در این شمارش گنجانده می شود.

maximum_shift_count

int32

حداکثر تعداد شیفت هایی که کارمند می تواند کار کند. هر شیفتی که کارمند به آن منصوب می شود و کاملاً با پنجره زمانی همپوشانی دارد در این شمارش گنجانده می شود.

minimum_rest_minutes

int32

حداقل دقایقی که کارمند باید بعد از پایان یک شیفت قبل از انتساب به شیفت دیگر استراحت کند. این محدودیت برای هر جفت شیفتی که به طور کامل در [ start_date_time ، end_date_time ] گنجانده شده اند اعمال می شود.

تغییر مکان

یک شیفت یک پنجره زمانی ثابت را مشخص می کند که کارکنان می توانند در آن کار کنند.

زمینه های
id

string

شناسه منحصر به فرد به این شیفت اختصاص داده شده است.

location_id

string

شناسه مکان که این شیفت در آن کار می کند. این می تواند خالی باشد.

start_date_time

DateTime

زمان شروع شیفت (شامل).

end_date_time

DateTime

زمان پایان نوبت (اختصاصی). در حال حاضر، حل کننده فقط برای جابجایی هایی که کمتر از 24 ساعت طول دارند اجازه می دهد.

break_rules[]

BreakRule

فهرستی از قوانین شکست که در طول شیفت رخ می دهد. به کارمندانی که این شیفت را انجام می دهند، به ازای هر break_rule یک استراحت اختصاص داده می شود، که در طی آن، تقاضا برای نقشی که در حال انجام آن هستند را پوشش نمی دهند. هر پنجره زمانی BreakRule باید به طور کامل در پنجره زمانی این شیفت گنجانده شود.

ShiftAssignment

یک کارمند برای تغییر نقش.

زمینه های
employee_id

string

شناسه کارمند در حال تخصیص

shift_id

string

شناسه شیفت به کارمند اختصاص داده شده است.

role_id

string

شناسه نقشی که کارمند برای شیفت به آن اختصاص داده شده است.

breaks[]

Break

فهرست وقفه‌ها برای این تکلیف شیفت.

ShiftGenerationSolutionStatus

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

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

تغییر الویت

یک اولویت عددی برای یک شناسه شیفت خاص.

زمینه های
shift_id

string

شناسه Shift که اولویت برای آن مشخص شده است.

preference

int32

مقادیر بزرگتر اولویت نشان دهنده تغییر مطلوب تر است.

ShiftRequest

درخواست یک کارمند برای تعیین تکلیف یا عدم منصوب شدن در شیفت های خاص.

زمینه های
priority

Priority

سطح اولویت این درخواست زمان‌بندی. اولویت پیش‌فرض برای همه درخواست‌های زمان‌بندی PRIORITY_LOW است.

shift_ids[]

string

شناسه‌های شیفت درخواست زمان‌بندی.

type

WorkStatus

نوع درخواست، به عنوان مثال، اینکه آیا درخواست به مجموعه شیفت ها اختصاص داده می شود یا خیر.

ShiftTemplate

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

زمینه های
id

string

شناسه منحصر به فرد این الگو.

earliest_start_time

TimeOfDay

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

latest_start_time

TimeOfDay

آخرین زمان در روز که یک شیفت می تواند شروع شود. این مقدار با ساعت و دقیقه مشخص می شود. ثانیه ها و نانو ها نادیده گرفته می شوند. اگر این مقدار کمتر از earliest_start_time باشد، ممکن است تغییر ایجاد شده توسط این الگو قبل یا بعد از نیمه شب شروع شود.

duration_minutes

int32

مدت زمان ثابت یک شیفت ایجاد شده توسط این الگو.

start_time_increment_minutes

int32

افزایش زمان (بر حسب دقیقه) مورد استفاده برای تولید مجموعه زمان‌های شروع ممکن بین earliest_start_time و latest_start_time . به عنوان مثال، اگر زودترین زمان شروع 8:00، آخرین زمان شروع 8:30، و افزایش زمان شروع 10 دقیقه باشد، تمام زمان‌های شروع ممکن برای این الگوی شیفت عبارتند از: 8:00، 8:10، 8:20 و 8:30.

days_off_count_per_week

int32

تعداد ثابت روزهای تعطیل در هفته اگر یک کارمند به شیفتی که از آن روز شروع می شود اختصاص داده نشود، یک روز مرخصی دارد. یک هفته 7 روز است و از یکشنبه شروع می شود.

event_templates[]

EventTemplate

قوانینی برای ایجاد رویدادها برای هر شیفت. دقیقاً یک رویداد در هر شیفت برای هر رویداد مشخص شده گنجانده خواهد شد.

minimum_interevent_gap_minutes

int32

حداقل دقیقه بین پایان یک رویداد و شروع رویداد بعدی.

maximum_employee_count

int32

حداکثر تعداد کارمندانی که می توان به تمام شیفت های ایجاد شده توسط این الگو اختصاص داد.

وضعیت راه حل

وضعیت راه حل (یعنی یک برنامه زمانی) در پاسخ یک حل کننده ارائه شده است.

Enums
SOLUTION_STATUS_UNSPECIFIED وضعیت نامشخص برای پاسخ.
FEASIBLE برنامه برگشتی امکان پذیر است، اما ممکن است بهینه نباشد.
OPTIMAL برنامه برگشتی بهینه است.
INFEASIBLE هیچ برنامه زمانی قابل اجرا برای محدودیت های داده شده وجود ندارد. اگر زیرمجموعه‌ای از محدودیت‌ها با سطح اولویت PRIORITY_MANDATORY برآورده نشود، حل‌کننده ممکن است این مقدار را برگرداند.
NOT_SOLVED هیچ برنامه زمانی پیدا نشد
NOT_SOLVED_DEADLINE_EXCEEDED هیچ برنامه زمانی در محدوده زمانی داده شده یافت نشد.

SolveParameters

پارامترهایی که یک حل مشکل زمان‌بندی شیفت را کنترل می‌کنند.

زمینه های
time_limit

Duration

حداکثر زمانی که حل کننده باید برای مشکل صرف کند. اگر تنظیم نشده باشد، به طور پیش فرض روی 1 دقیقه تنظیم می شود.

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

SolverConfig

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

زمینه های
time_limit

Duration

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

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

multi_day_schedule

bool

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

shift_events_can_change

bool

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

وضعیت اشتغال

این که آیا یک کارمند کار می کند یا نه.

Enums
WORK_STATUS_UNSPECIFIED وضعیت کار نامشخص
STATUS_WORK وضعیت نشان دهنده یک کارمند شاغل
STATUS_NOT_WORK وضعیت نشان دهنده یک کارمند غیر شاغل.