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". يجب أن تكون فواصل DateTime المحدّدة في كل EmployeeDemand منفصلة وقد تكون غير متجاورة.

نص الاستجابة

الردّ على مشكلة "إنشاء نوبات العمل" إذا كانت قيمة solutionStatus هي SOLVED، سيتم عرض مجموعة من التحولات الصالحة التي أنشأتها أداة الحلّ في employeeSchedules. بالنسبة إلى جدول نوبات العمل الصالح، تحتفظ السمات التالية بما يلي:

  1. تتقيّد كل عملية تبديل يتم إنشاؤها في employeeSchedules بالقواعد المحدّدة في ShiftTemplate المقابلة.
  2. يتقيّد كل حدث يتم اختياره في كل وردية بالقواعد المحدّدة في ShiftTemplate.Event المقابلة.
  3. لا يتجاوز إجمالي عدد الموظفين المعينين لمجموعة الورديات الناتجة من ShiftTemplate نفسه maximumEmployeeCount من هذا النموذج.
  4. تقوم مجموعة الموظفين المعينين بتغطية الطلب في كل فترة زمنية محددة.

إذا كانت الاستجابة ناجحة، سيحتوي نص الاستجابة على بيانات بالبنية التالية:

تمثيل JSON
{
  "solutionStatus": enum (ShiftGenerationSolutionStatus),
  "employeeSchedules": [
    {
      object (EmployeeSchedule)
    }
  ]
}
الحقول
solutionStatus

enum (ShiftGenerationSolutionStatus)

حالة الحلّ الذي تم إرجاعه وإذا لم يكن الحقل solutionStatus SOLVED، سيكون employeeSchedules فارغًا.

employeeSchedules[]

object (EmployeeSchedule)

مجموعة من نوبات العمل التي تم إنشاؤها بواسطة أداة الحلّ بالإضافة إلى عدد الموظفين المعيَّنين لكل جدول زمني

SolverConfig

تحدد هذه السمة معلَمات إضافية لحل مشكلة "إنشاء التحول".

تمثيل JSON
{
  "timeLimit": string,
  "multiDaySchedule": boolean,
  "shiftEventsCanChange": boolean
}
الحقول
timeLimit

string (Duration format)

الحدّ الأقصى للوقت الذي يجب أن يقضيه الحلّ في حلّ المسألة. وفي حال ترك هذه السياسة بدون ضبط، ستكون القيمة التلقائية دقيقة واحدة. يجب أن يعتمد اختيار الحد الزمني على حجم المشكلة. على سبيل المثال، عند حل مثيل مدته 7 أيام مع ShiftTemplates ومرّة 20 مرة بدء محتملة لكلّ منها وعقد حدثَين خلال 30 مرّة بدء ممكنة تقريبًا، مع إجازة لمدة يومَين في الأسبوع، تكون القيم المقترَحة هي: أقل من 10 ثوانٍ للحلول السريعة (ومن المحتمل أن تكون دون المستوى الأمثل)، و(10 ثوانٍ أو 300 ثانية) للحصول على حلول جيدة الجودة، وأكثر من 300 ثانية لإجراء بحث شامل. وقد تتطلب النُسخ الأكبر حجمًا حدودًا زمنية أطول.

هذه القيمة ليست حدًا صارمًا ولا تأخذ في الحسبان النفقات العامة للاتصال. قد يتجاوز وقت الاستجابة المتوقع لحل المشكلة هذه القيمة قليلاً.

مدة بالثواني يصل عددها إلى تسعة أرقام كسرية وتنتهي بـ "s". مثال: "3.5s".

multiDaySchedule

boolean

إذا كانت الإجابة "صحيح"، تنشئ أداة الحلّ EmployeeSchedule نوبات تتضمّن عدة نوبات (على سبيل المثال، لإنشاء جدول زمني مدته أسبوع). وبخلاف ذلك، تتضمّن كل EmployeeSchedule وردية واحدة بالضبط. تفترض الجداول الزمنية لعدة أيام أن وقت بدء الوردية هو نفسه على مدار الأيام، ويتم تحديد عدد أيام الإجازة في مثل هذا الجدول الزمني من خلال نماذج الورديات. والقيمة التلقائية هي "خطأ".

shiftEventsCanChange

boolean

في حال كانت القيمة صحيحة، قد تتضمّن أحداث EmployeeSchedule المتعدِّدة الأيام نوبات عمل تختلف من خلالها عن وقت بدء الأحداث ووقت انتهائها على مستوى جميع الأيام. وبخلاف ذلك، يجب أن تتضمن جميع عمليات تبديل EmployeeSchedule وقت بدء وانتهاء نفس الحدث. وفي كلتا الحالتين، تكون جميع عمليات تبديل جدول زمني لعدة أيام لها نفس وقت البدء والانتهاء. وبناءً على ذلك، يتم تجاهل هذه المَعلمة إذا كانت قيمة multiDaySchedule خطأ. قد يؤدي ضبط هذه المَعلمة على "صحيح" إلى استغراق وقت أطول في حلّ المشكلة. والقيمة التلقائية هي "خطأ".

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

تمثل وقتًا من اليوم. قد يكون التاريخ والمنطقة الزمنية غير مهمَّين أو تم تحديدهما في مكان آخر. وقد تختار واجهة برمجة التطبيقات السماح بالثواني الكبيسة. النوعان ذوا الصلة هما google.type.Date وgoogle.protobuf.Timestamp.

تمثيل JSON
{
  "hours": integer,
  "minutes": integer,
  "seconds": integer,
  "nanos": integer
}
الحقول
hours

integer

ساعات اليوم بتنسيق 24 ساعة يجب أن يتراوح الرقم بين 0 و23. قد تسمح واجهة برمجة التطبيقات بالقيمة "24:00:00" في سيناريوهات مثل وقت إغلاق النشاط التجاري.

minutes

integer

دقائق من الساعة من اليوم. يجب أن تتراوح القيمة بين 0 و59.

seconds

integer

ثواني من الدقائق من الوقت. يجب أن يتراوح الرقم عادةً من 0 إلى 59. قد تسمح واجهة برمجة التطبيقات بالقيمة 60 إذا كانت تتيح الثواني الكبيسة.

nanos

integer

كسور الثواني بالنانوثانية. يجب أن تتراوح القيمة بين 0 و999,999,999.

EventTemplate

نموذج يحدِّد قواعد إنشاء حدث واحد يقع أثناء وردية قد يمثل الحدث اجتماعًا أو استراحة أو غداء أو ما إلى ذلك.

تمثيل 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

يتم توفير حالة الحلّ في ردّ أداة الحلّ.

عمليات التعداد
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، وبالترتيب نفسه. إذا كانت قيمة SolverConfig.shift_events_can_change صحيحة، قد يختلف وقت بدء الأحداث وانتهائها على مستوى ShiftWithEvents في هذا الجدول الزمني.

حدث

تحدِّد هذه السمة التاريخ والوقت لبدء حدث معيّن وانتهائه في وردية تم إنشاؤها من خلال أداة الحلّ.

تمثيل JSON
{
  "eventTemplateId": string,
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  }
}
الحقول
eventTemplateId

string

رقم تعريف النموذج الذي تمّ استخدامه لإنشاء هذا الحدث

startDateTime

object (DateTime)

تاريخ ووقت بدء الحدث. ويتم تحديد هذه القيمة حتى الدقيقة، ولا يتم تحديد الثواني والوحدات الأصغر.

endDateTime

object (DateTime)

تاريخ ووقت انتهاء الحدث ويتم تحديد هذه القيمة حتى الدقيقة، ولا يتم تحديد الثواني والوحدات الأصغر.