Method: scheduling.solveShiftGeneration

Giải quyết vấn đề tạo ca làm việc từ SolveShiftGenerationRequest đã cho bằng cách tạo các ca làm việc từ các mẫu ca làm việc nhất định để đáp ứng nhu cầu của nhân viên.

Yêu cầu HTTP

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

URL sử dụng cú pháp Chuyển mã gRPC.

Nội dung yêu cầu

Nội dung yêu cầu chứa dữ liệu có cấu trúc sau:

Biểu diễn dưới dạng JSON
{
  "solverConfig": {
    object (SolverConfig)
  },
  "shiftTemplates": [
    {
      object (ShiftTemplate)
    }
  ],
  "employeeDemands": [
    {
      object (EmployeeDemand)
    }
  ]
}
Trường
solverConfig

object (SolverConfig)

Không bắt buộc. Các tham số cho trình giải toán.

shiftTemplates[]

object (ShiftTemplate)

Bắt buộc. Tập hợp các mẫu ca làm việc chỉ định quy tắc tạo ca làm việc.

employeeDemands[]

object (EmployeeDemand)

Bắt buộc. Tổng nhu cầu của nhân viên mà shiftTemplates tạo ra cần đáp ứng nhu cầu của các ca làm việc. Các khoảng thời gian DateTime được chỉ định trong mỗi EmployeeDemand phải rời nhau và có thể không liền kề.

Nội dung phản hồi

Phản hồi cho sự cố Tạo ca làm việc. Nếu solutionStatus được trả về là SOLVED, thì một tập hợp các ca chuyển hợp lệ do trình giải quyết tạo sẽ được trả về trong employeeSchedules. Để có lịch ca làm việc hợp lệ, những tài sản sau đây có trạng thái là:

  1. Mỗi ca làm việc được tạo trong employeeSchedules đều tuân thủ các quy tắc được chỉ định trong ShiftTemplate tương ứng.
  2. Mỗi sự kiện được chọn trong mỗi lượt chuyển đều tuân thủ các quy tắc được chỉ định trong ShiftTemplate.Event tương ứng.
  3. Tổng số nhân viên được chỉ định cho nhóm ca làm việc được tạo từ cùng một ShiftTemplate không vượt quá maximumEmployeeCount mẫu đó.
  4. Nhóm nhân viên được chỉ định sẽ đáp ứng nhu cầu tại mỗi khoảng thời gian nhất định.

Nếu thành công, phần nội dung phản hồi sẽ chứa dữ liệu có cấu trúc sau:

Biểu diễn dưới dạng JSON
{
  "solutionStatus": enum (ShiftGenerationSolutionStatus),
  "employeeSchedules": [
    {
      object (EmployeeSchedule)
    }
  ]
}
Trường
solutionStatus

enum (ShiftGenerationSolutionStatus)

Trạng thái của giải pháp được trả về. Nếu solutionStatus không phải là SOLVED, employeeSchedules sẽ trống.

employeeSchedules[]

object (EmployeeSchedule)

Tập hợp các ca làm việc do trình giải quyết tạo ra cùng với số lượng nhân viên được chỉ định cho mỗi lịch biểu.

SolverConfig

Chỉ định các tham số bổ sung để giải bài tập Tạo ca.

Biểu diễn dưới dạng JSON
{
  "timeLimit": string,
  "multiDaySchedule": boolean,
  "shiftEventsCanChange": boolean
}
Trường
timeLimit

string (Duration format)

Thời gian tối đa mà trình giải toán cần dành cho bài toán. Nếu bạn không đặt chính sách này, chế độ cài đặt mặc định sẽ là 1 phút. Lựa chọn giới hạn thời gian sẽ phụ thuộc vào quy mô của sự cố. Để đưa ra ví dụ, khi giải quyết một thực thể 7 ngày với 2 ShiftTemplates, mỗi thực thể có ~20 thời gian bắt đầu có thể và tổ chức 2 sự kiện với ~30 lần bắt đầu có thể và hai ngày nghỉ mỗi tuần, các giá trị được đề xuất là: <10 giây cho các giải pháp nhanh (và có khả năng dưới mức tối ưu), (10 giây, 300 giây) cho các giải pháp chất lượng tốt và > 300 giây cho một tìm kiếm toàn diện. Các phiên bản lớn hơn có thể yêu cầu giới hạn thời gian dài hơn.

Giá trị này không phải là giới hạn cố định và không tính đến chi phí truyền thông. Độ trễ dự kiến để giải quyết vấn đề có thể vượt quá giá trị này một chút.

Thời lượng tính bằng giây với tối đa 9 chữ số thập phân, kết thúc bằng "s". Ví dụ: "3.5s".

multiDaySchedule

boolean

Nếu đúng, trình giải quyết sẽ tạo các EmployeeSchedule gồm nhiều ca làm việc (ví dụ: để tạo lịch biểu kéo dài một tuần). Nếu không, mỗi EmployeeSchedule chỉ bao gồm đúng một ca làm việc. Lịch biểu nhiều ngày giả định thời gian bắt đầu ca làm việc là như nhau giữa các ngày và số ngày nghỉ trong lịch biểu như vậy được xác định theo các mẫu ca làm việc. Mặc định là sai.

shiftEventsCanChange

boolean

Nếu đúng, các EmployeeSchedule kéo dài nhiều ngày có thể bao gồm các ca làm việc có thời gian bắt đầu và kết thúc của sự kiện thay đổi vào tất cả các ngày. Nếu không, tất cả các lượt chuyển của một EmployeeSchedule cụ thể phải có thời gian bắt đầu và thời gian kết thúc của cùng một sự kiện. Trong cả hai trường hợp, tất cả các ca làm việc của lịch biểu nhiều ngày đều có cùng thời gian bắt đầu và kết thúc. Do đó, tham số này sẽ bị bỏ qua nếu multiDaySchedule là false. Việc đặt tham số này thành true có thể dẫn đến thời gian giải quyết lâu hơn. Mặc định là sai.

ShiftTemplate

Mẫu chỉ định quy tắc tạo ca làm việc. Ca làm việc là một đơn vị công việc cho biết thời gian bắt đầu, thời gian kết thúc và có thể chứa các sự kiện (ví dụ: bữa trưa, nghỉ giải lao, v.v.). Một lượt chuyển đổi sẽ được chỉ định cho một ngày cụ thể trong câu trả lời.

Biểu diễn dưới dạng JSON
{
  "id": string,
  "earliestStartTime": {
    object (TimeOfDay)
  },
  "latestStartTime": {
    object (TimeOfDay)
  },
  "durationMinutes": integer,
  "startTimeIncrementMinutes": integer,
  "daysOffCountPerWeek": integer,
  "eventTemplates": [
    {
      object (EventTemplate)
    }
  ],
  "minimumIntereventGapMinutes": integer,
  "maximumEmployeeCount": integer
}
Trường
id

string

Mã nhận dạng duy nhất của mẫu này.

earliestStartTime

object (TimeOfDay)

Thời gian sớm nhất trong ngày mà một ca làm việc có thể bắt đầu. Giá trị này được chỉ định bằng giờ và phút; giây và nano sẽ bị bỏ qua.

latestStartTime

object (TimeOfDay)

Thời điểm gần nhất trong ngày mà một ca làm việc có thể bắt đầu. Giá trị này được chỉ định bằng giờ và phút; giây và nano sẽ bị bỏ qua. Nếu giá trị này nhỏ hơn earliestStartTime, thì một ca làm việc do mẫu này tạo có thể bắt đầu trước hoặc sau nửa đêm.

durationMinutes

integer

Cố định khoảng thời gian của một lượt chuyển do mẫu này tạo.

startTimeIncrementMinutes

integer

Mức tăng thời gian (tính bằng phút) dùng để tạo tập hợp thời gian bắt đầu có thể từ earliestStartTime đến latestStartTime. Ví dụ: nếu thời gian bắt đầu sớm nhất là 8:00, thời gian bắt đầu muộn nhất là 8:30 và mức tăng thời gian bắt đầu là 10 phút, thì tất cả thời gian bắt đầu có thể cho mẫu ca làm việc này là: 8:00, 8:10, 8:20 và 8:30.

daysOffCountPerWeek

integer

Số ngày nghỉ cố định mỗi tuần. Một nhân viên sẽ được nghỉ một ngày nhất định nếu họ không được chỉ định ca làm việc bắt đầu vào ngày đó. Một tuần gồm 7 ngày và bắt đầu vào Chủ Nhật.

eventTemplates[]

object (EventTemplate)

Quy tắc tạo sự kiện cho mỗi ca làm việc. Sẽ có đúng một sự kiện được đưa vào mỗi ca làm việc cho từng Sự kiện được chỉ định.

minimumIntereventGapMinutes

integer

Số phút tối thiểu giữa thời điểm kết thúc một sự kiện đến thời điểm bắt đầu sự kiện tiếp theo.

maximumEmployeeCount

integer

Số lượng nhân viên tối đa có thể được chỉ định cho tất cả các ca làm việc do mẫu này tạo.

TimeOfDay

Đại diện cho thời gian trong ngày. Ngày và múi giờ không quan trọng hoặc được chỉ định ở nơi khác. API có thể chọn cho phép giây nhuận. Các loại liên quan là google.type.Dategoogle.protobuf.Timestamp.

Biểu diễn dưới dạng JSON
{
  "hours": integer,
  "minutes": integer,
  "seconds": integer,
  "nanos": integer
}
Trường
hours

integer

Giờ trong ngày ở định dạng 24 giờ. Nên nằm trong khoảng từ 0 đến 23. API có thể chọn cho phép giá trị "24:00:00" cho các tình huống như thời gian đóng cửa doanh nghiệp.

minutes

integer

Phút trong giờ trong ngày. Giá trị phải nằm trong khoảng từ 0 đến 59.

seconds

integer

Số giây trong phút của thời gian. Thông thường phải từ 0 đến 59. API có thể cho phép giá trị 60 nếu cho phép giây nhuận.

nanos

integer

Phân số giây tính bằng nano giây. Giá trị phải nằm trong khoảng từ 0 đến 999.999.999.

EventTemplate

Mẫu chỉ định các quy tắc tạo một sự kiện đơn lẻ xảy ra trong một lượt chuyển. Một sự kiện có thể là một cuộc họp, giờ nghỉ, ăn trưa, v.v.

Biểu diễn dưới dạng JSON
{
  "id": string,
  "minimumMinutesAfterShiftStart": integer,
  "maximumMinutesAfterShiftStart": integer,
  "durationMinutes": integer,
  "startTimeIncrementMinutes": integer
}
Trường
id

string

Mã nhận dạng duy nhất của mẫu này.

minimumMinutesAfterShiftStart

integer

Số phút tối thiểu sau khi bắt đầu ca làm việc mà sự kiện này có thể bắt đầu.

maximumMinutesAfterShiftStart

integer

Số phút tối đa sau khi bắt đầu ca làm việc mà sự kiện này có thể bắt đầu.

durationMinutes

integer

Đã cố định thời lượng tính bằng phút của sự kiện này.

startTimeIncrementMinutes

integer

Mức tăng thời gian (tính bằng phút) dùng để tạo tập hợp thời gian bắt đầu sự kiện có thể từ minimumMinutesAfterShiftStart đến maximumMinutesAfterShiftStart. Ví dụ: nếu số phút tối thiểu sau khi bắt đầu ca làm việc là 30, số phút tối đa sau khi bắt đầu ca làm việc là 45 phút và mức tăng thời gian bắt đầu là 5 phút, thì sự kiện có thể diễn ra sau 30, 35, 40 hoặc 45 phút sau khi bắt đầu ca làm việc.

EmployeeDemand

Xác định số lượng nhân viên cần thiết để đáp ứng nhu cầu trong khoảng thời gian DateTime nhất định.

Biểu diễn dưới dạng JSON
{
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "employeeCount": integer
}
Trường
startDateTime

object (DateTime)

Bắt đầu khoảng thời gian của nhu cầu cụ thể (bao gồm). Các giá trị này được đọc xuống từng phút; giây và tất cả các đơn vị nhỏ hơn sẽ bị bỏ qua.

endDateTime

object (DateTime)

Kết thúc khoảng thời gian của một nhu cầu cụ thể (không bao gồm). Các giá trị này được đọc xuống từng phút; giây và tất cả các đơn vị nhỏ hơn sẽ bị bỏ qua.

employeeCount

integer

Số lượng nhân viên cần thiết để đáp ứng nhu cầu cho khoảng thời gian này.

ShiftGenerationSolutionStatus

Trạng thái giải pháp được cung cấp trong phản hồi của một trình giải toán.

Enum
SHIFT_GENERATION_SOLUTION_STATUS_UNSPECIFIED Trạng thái phản hồi chưa xác định.
SHIFT_GENERATION_SOLVED Trình giải toán đã tìm thấy lời giải trong khoảng thời gian có hạn.
SHIFT_GENERATION_NOT_SOLVED Một vấn đề đã ngăn trình giải toán tạo ra các lượt thay đổi.
SHIFT_GENERATION_NOT_SOLVED_DEADLINE_EXCEEDED Không thể tạo ca làm việc để đáp ứng nhu cầu trong giới hạn thời gian đã cho.

EmployeeSchedule

Danh sách ca làm việc được sắp xếp theo thứ tự tương ứng với một ShiftTemplate được chỉ định cho một số nhân viên.

Biểu diễn dưới dạng JSON
{
  "shiftTemplateId": string,
  "shifts": [
    {
      object (ShiftWithEvents)
    }
  ],
  "employeeCount": integer
}
Trường
shiftTemplateId

string

Mã của mẫu được dùng để tạo tập hợp các thay đổi này.

shifts[]

object (ShiftWithEvents)

Danh sách ca làm việc mà employeeCount nhân viên được chỉ định. Các lượt chuyển đổi và sự kiện được chọn cho lịch biểu được tạo qua một mẫu duy nhất. Các lượt chuyển được sắp xếp theo trình tự thời gian và không trùng lặp. Nếu SolverConfig.multi_day_schedule đúng, thì ngày nghỉ được biểu thị ngầm bằng việc không có ca làm việc bắt đầu từ ngày đó.

employeeCount

integer

Số lượng nhân viên cần được phân công vào nhóm ca làm việc này để đáp ứng nhu cầu.

ShiftWithEvents

Nêu rõ ngày bắt đầu và ngày kết thúc cùng với danh sách các sự kiện cố định của một ca làm việc do trình giải toán tạo ra.

Biểu diễn dưới dạng JSON
{
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "events": [
    {
      object (Event)
    }
  ]
}
Trường
startDateTime

object (DateTime)

Ngày và giờ bắt đầu ca chuyển. Giá trị này được chỉ định xuống đến phút; không cho đơn vị giây và nhỏ hơn.

endDateTime

object (DateTime)

Ngày và giờ kết thúc ca làm việc. Giá trị này được chỉ định xuống đến phút; không cho đơn vị giây và nhỏ hơn.

events[]

object (Event)

Danh sách các sự kiện có trong lần thay đổi này, được ánh xạ chính xác đến và theo cùng thứ tự với ShiftTemplate.Event. Nếu SolverConfig.shift_events_can_change đúng, thời gian bắt đầu và kết thúc của các sự kiện có thể khác nhau trên tất cả các ShiftWithEvents của lịch biểu này.

Sự kiện

Chỉ định ngày bắt đầu và kết thúc DateTime của một sự kiện cụ thể trong một ca làm việc do trình giải quyết tạo ra.

Biểu diễn dưới dạng JSON
{
  "eventTemplateId": string,
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  }
}
Trường
eventTemplateId

string

Mã của mẫu được dùng để tạo sự kiện này.

startDateTime

object (DateTime)

Ngày và giờ bắt đầu của sự kiện. Giá trị này được chỉ định xuống đến phút; không cho đơn vị giây và nhỏ hơn.

endDateTime

object (DateTime)

Ngày và giờ kết thúc của sự kiện. Giá trị này được chỉ định xuống đến phút; không cho đơn vị giây và nhỏ hơn.