Method: scheduling.solveShiftScheduling

یک مشکل زمان‌بندی شیفت ثابت از SolveShiftSchedulingRequest داده شده را با انتساب کارکنان به شیفت‌ها حل می‌کند، به گونه‌ای که اولویت‌های زمان‌بندی کارمندان به حداکثر برسد و نقض محدودیت‌های زمان‌بندی به حداقل برسد.

درخواست HTTP

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

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

درخواست بدن

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

نمایندگی JSON
{
  "requestId": string,
  "solveParameters": {
    object (SolveParameters)
  },
  "employees": [
    {
      object (Employee)
    }
  ],
  "shifts": [
    {
      object (Shift)
    }
  ],
  "coverageRequirements": [
    {
      object (CoverageRequirement)
    }
  ],
  "roleIds": [
    string
  ],
  "skillIds": [
    string
  ],
  "locationIds": [
    string
  ],
  "budgetRequirements": [
    {
      object (BudgetRequirement)
    }
  ],
  "assignmentsHint": [
    {
      object (ShiftAssignment)
    }
  ]
}
فیلدها
requestId

string

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

solveParameters

object ( SolveParameters )

پارامترهایی برای کنترل یک حل مشکل.

employees[]

object ( Employee )

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

shifts[]

object ( Shift )

همه شیفت ها برای تشکیل برنامه.

coverageRequirements[]

object ( CoverageRequirement )

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

roleIds[]

string

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

skillIds[]

string

فهرستی از تمام مهارت های ممکن در سراسر نیروی کار. یک مهارت به هر نوع صلاحیت اضافی که یک کارمند ممکن است داشته باشد اشاره دارد که به شغل قابل واگذاری خاصی مربوط نمی شود (مثلاً گواهینامه ها، زبان های صحبت شده و غیره). این لیست می تواند خالی باشد. هنگامی که یک کارمند به یک شیفت منصوب می شود، باید تمام مهارت های مورد نیاز برای آن شیفت را برآورده کند.

locationIds[]

string

فهرست تمام مکان‌های ممکن برای مجموعه شیفت‌ها در برنامه. این لیست می تواند خالی باشد. تعیین مکان‌های مختلف زمانی می‌تواند مفید باشد، برای مثال، یک مدیر پرستار می‌خواهد پرستاران زیادی را در واحدهای مختلف در یک بیمارستان برنامه‌ریزی کند یا برای مثال، یک مدیر هتل می‌خواهد کارمندان را در چندین هتل برنامه‌ریزی کند.

budgetRequirements[]

object ( BudgetRequirement )

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

assignmentsHint[]

object ( ShiftAssignment )

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

بدن پاسخگو

پاسخ به API برنامه ریزی نیروی کار. برای هر پاسخ، shiftAssignments خالی خواهد بود اگر solutionStatus بازگشتی NOT_SOLVED_DEADLINE_EXCEEDED یا INFEASIBLE باشد. اگر solutionStatus که برگردانده شده OPTIMAL یا FEASIBLE ، یک تخصیص شیفت معتبر در shiftAssignments برگردانده می شود. برای یک انتساب شیفت معتبر، ویژگی های زیر برقرار است:

  1. شناسه هر کارمند در مجموعه کارمندانی که در درخواست ارائه شده است موجود است.
  2. هر شناسه نقشی که به کارمند اختصاص داده می‌شود، در مجموعه شناسه‌های نقش برای کارمند مشخص می‌شود.
  3. شناسه هر شیفت در مجموعه شیفت های ارائه شده در درخواست موجود است.
  4. هر شناسه شیفت یکی از شناسه های شیفت غیرقابل تخصیص برای کارمند معین نیست.
  5. یک کارمند هرگز به دو شیفت همپوشانی منصوب نمی شود.
  6. برای زمان بندی داده شده، هیچ یک از محدودیت ها یا درخواست های دارای اولویت PRIORITY_MANDATORY نقض نمی شود.

در صورت موفقیت آمیز بودن، بدنه پاسخ حاوی داده هایی با ساختار زیر است:

نمایندگی JSON
{
  "requestId": string,
  "solutionStatus": enum (SolutionStatus),
  "shiftAssignments": [
    {
      object (ShiftAssignment)
    }
  ],
  "statusMessage": string
}
فیلدها
requestId

string

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

solutionStatus

enum ( SolutionStatus )

وضعیت راه حل برگشتی اگر راه حل امکان پذیر یا بهینه نباشد، سایر فیلدهای این پروتو ممکن است خالی باشند. اگر وضعیت NOT_SOLVED_DEADLINE_EXCEEDED باشد، محدودیت زمانی بدون یافتن راه‌حل امکان‌پذیر یا تعیین وجود راه‌حل امکان‌پذیر به پایان رسیده است. اگر محدودیت‌های سطح اولویت اجباری نتوانند همه برآورده شوند، ممکن است درخواست‌ها غیرممکن باشد.

shiftAssignments[]

object ( ShiftAssignment )

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

statusMessage

string

اگر solutionStatus بهینه نباشد، این قسمت ممکن است حاوی اطلاعات اضافی در مورد حل کننده باشد.

SolveParameters

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

نمایندگی JSON
{
  "timeLimit": string
}
فیلدها
timeLimit

string ( Duration format)

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

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

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

کارمند

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

نمایندگی JSON
{
  "id": string,
  "roleIds": [
    string
  ],
  "skillIds": [
    string
  ],
  "shiftPreferences": [
    {
      object (ShiftPreference)
    }
  ],
  "schedulingConstraints": [
    {
      object (SchedulingConstraint)
    }
  ],
  "resourceConstraints": [
    {
      object (ResourceConstraint)
    }
  ],
  "shiftRequests": [
    {
      object (ShiftRequest)
    }
  ],
  "hourlyContract": {
    object (HourlyContract)
  }
}
فیلدها
id

string

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

roleIds[]

string

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

skillIds[]

string

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

shiftPreferences[]

object ( ShiftPreference )

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

schedulingConstraints[]

object ( SchedulingConstraint )

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

resourceConstraints[]

object ( ResourceConstraint )

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

shiftRequests[]

object ( ShiftRequest )

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

hourlyContract

object ( HourlyContract )

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

ShiftPreference

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

نمایندگی JSON
{
  "shiftId": string,
  "preference": integer
}
فیلدها
shiftId

string

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

preference

integer

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

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

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

نمایندگی JSON
{
  "priority": enum (Priority),
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },

  // Union field type can be only one of the following:
  "minimumMinutes": integer,
  "maximumMinutes": integer,
  "minimumConsecutiveWorkDays": integer,
  "maximumConsecutiveWorkDays": integer,
  "minimumShiftCount": integer,
  "maximumShiftCount": integer,
  "minimumRestMinutes": integer
  // End of list of possible types for union field type.
}
فیلدها
priority

enum ( Priority )

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

startDateTime

object ( DateTime )

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

endDateTime

object ( DateTime )

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

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

integer

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

maximumMinutes

integer

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

minimumConsecutiveWorkDays

integer

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

maximumConsecutiveWorkDays

integer

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

minimumShiftCount

integer

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

maximumShiftCount

integer

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

minimumRestMinutes

integer

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

اولویت

سطح اولویت برای هر گونه محدودیت در برنامه کارمند یا الزامات پوشش. اینها عبارتند از 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 مشخص شوند، می‌توانند با استفاده از این پیام به جای آن مشخص شوند.

نمایندگی JSON
{
  "priority": enum (Priority),
  "resourceUsages": {
    string: number,
    ...
  },
  "minimumResourceUsage": number,
  "maximumResourceUsage": number
}
فیلدها
priority

enum ( Priority )

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

resourceUsages

map (key: string, value: number)

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

یک شی حاوی لیستی از "key": value . مثال: { "name": "wrench", "mass": "1.3kg", "count": "3" } .

minimumResourceUsage

number

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

maximumResourceUsage

number

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

ShiftRequest

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

نمایندگی JSON
{
  "priority": enum (Priority),
  "shiftIds": [
    string
  ],
  "type": enum (WorkStatus)
}
فیلدها
priority

enum ( Priority )

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

shiftIds[]

string

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

type

enum ( WorkStatus )

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

وضعیت کاری

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

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

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

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

نمایندگی JSON
{
  "baseHourlyRate": number,
  "hourlyRateShiftDifferentials": {
    string: number,
    ...
  },
  "overtimePeriods": [
    {
      object (OvertimePeriod)
    }
  ]
}
فیلدها
baseHourlyRate

number

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

hourlyRateShiftDifferentials

map (key: string, value: number)

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

یک شی حاوی لیستی از "key": value . مثال: { "name": "wrench", "mass": "1.3kg", "count": "3" } .

overtimePeriods[]

object ( OvertimePeriod )

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

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

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

نمایندگی JSON
{
  "overtimeMultiplier": number,
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "maximumRegularHours": number
}
فیلدها
overtimeMultiplier

number

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

startDateTime

object ( DateTime )

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

endDateTime

object ( DateTime )

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

maximumRegularHours

number

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

شیفت

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

نمایندگی JSON
{
  "id": string,
  "locationId": string,
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "breakRules": [
    {
      object (BreakRule)
    }
  ]
}
فیلدها
id

string

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

locationId

string

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

startDateTime

object ( DateTime )

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

endDateTime

object ( DateTime )

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

breakRules[]

object ( BreakRule )

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

BreakRule

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

نمایندگی JSON
{
  "earliestStartTime": {
    object (DateTime)
  },
  "latestStartTime": {
    object (DateTime)
  },
  "durationMinutes": integer,
  "ruleIncrementMinutes": integer
}
فیلدها
earliestStartTime

object ( DateTime )

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

latestStartTime

object ( DateTime )

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

durationMinutes

integer

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

ruleIncrementMinutes

integer

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

نیاز پوشش

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

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

نمایندگی JSON
{
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "locationId": string,
  "shiftIds": [
    string
  ],
  "roleRequirements": [
    {
      object (RoleRequirement)
    }
  ],
  "skillRequirements": [
    {
      object (SkillRequirement)
    }
  ]
}
فیلدها
startDateTime

object ( DateTime )

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

endDateTime

object ( DateTime )

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

locationId

string

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

shiftIds[]

string

در صورت تنظیم، نقش و الزامات مهارت به صورت جداگانه برای هر شناسه شیفت در این لیست اعمال می شود. اگر shiftIds خالی نیستند، startDateTime ، endDateTime و locationId باید خالی باشند.

roleRequirements[]

object ( RoleRequirement )

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

skillRequirements[]

object ( SkillRequirement )

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

RoleRequirement

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

نمایندگی JSON
{
  "roleId": string,
  "targetEmployeeCount": integer,
  "priority": enum (Priority)
}
فیلدها
roleId

string

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

targetEmployeeCount

integer

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

priority

enum ( Priority )

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

نیاز به مهارت

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

نمایندگی JSON
{
  "skillId": string,
  "targetEmployeeCount": integer,
  "priority": enum (Priority)
}
فیلدها
skillId

string

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

targetEmployeeCount

integer

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

priority

enum ( Priority )

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

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

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

نمایندگی JSON
{
  "totalBudget": number,
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "priority": enum (Priority)
}
فیلدها
totalBudget

number

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

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

startDateTime

object ( DateTime )

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

endDateTime

object ( DateTime )

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

priority

enum ( Priority )

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

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

ShiftAssignment

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

نمایندگی JSON
{
  "employeeId": string,
  "shiftId": string,
  "roleId": string,
  "breaks": [
    {
      object (Break)
    }
  ]
}
فیلدها
employeeId

string

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

shiftId

string

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

roleId

string

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

breaks[]

object ( Break )

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

شکستن

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

نمایندگی JSON
{
  "startDateTime": {
    object (DateTime)
  },
  "durationMinutes": integer
}
فیلدها
startDateTime

object ( DateTime )

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

durationMinutes

integer

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

وضعیت راه حل

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

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