Method: scheduling.solveShiftGeneration

Menyelesaikan masalah pembuatan shift dari SolveShiftGenerationRequest yang ditentukan dengan menghasilkan pergeseran dari template shift tertentu untuk memenuhi permintaan karyawan.

Permintaan HTTP

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

URL menggunakan sintaksis gRPC Transcoding.

Isi permintaan

Isi permintaan memuat data dengan struktur berikut:

Representasi JSON
{
  "solverConfig": {
    object (SolverConfig)
  },
  "shiftTemplates": [
    {
      object (ShiftTemplate)
    }
  ],
  "employeeDemands": [
    {
      object (EmployeeDemand)
    }
  ]
}
Kolom
solverConfig

object (SolverConfig)

Opsional. Parameter untuk pemecah.

shiftTemplates[]

object (ShiftTemplate)

Wajib. Kumpulan template shift yang menentukan aturan untuk menghasilkan shift.

employeeDemands[]

object (EmployeeDemand)

Wajib. Total karyawan meminta agar shift yang dihasilkan shiftTemplates harus ditanggung

Isi respons

Respons untuk masalah Pembuatan Shift. Jika solutionStatus yang ditampilkan adalah SOLVED, kumpulan pergeseran valid yang dihasilkan oleh pemecah masalah akan ditampilkan di employeeSchedules. Untuk jadwal shift yang valid, properti berikut akan berlaku:

  1. Setiap shift yang dihasilkan di employeeSchedules mematuhi aturan yang ditentukan dalam ShiftTemplate yang sesuai.
  2. Setiap peristiwa yang dipilih di setiap shift akan mematuhi aturan yang ditentukan dalam ShiftTemplate.Event terkait.
  3. Jumlah total karyawan yang ditetapkan ke serangkaian shift yang dihasilkan dari ShiftTemplate yang sama tidak melebihi maximumEmployeeCount template tersebut.
  4. Sekumpulan karyawan yang ditugaskan mencakup permintaan pada setiap interval tertentu.

Jika berhasil, isi respons memuat data dengan struktur berikut:

Representasi JSON
{
  "solutionStatus": enum (ShiftGenerationSolutionStatus),
  "employeeSchedules": [
    {
      object (EmployeeSchedule)
    }
  ],
  "demandCoverageViolations": [
    {
      object (DemandCoverageViolation)
    }
  ]
}
Kolom
solutionStatus

enum (ShiftGenerationSolutionStatus)

Status solusi yang ditampilkan. Jika solutionStatus bukan SOLVED, employeeSchedules akan kosong.

employeeSchedules[]

object (EmployeeSchedule)

Kumpulan shift yang dihasilkan oleh pemecah masalah beserta jumlah karyawan yang ditugaskan untuk setiap jadwal.

demandCoverageViolations[]

object (DemandCoverageViolation)

Pelanggaran cakupan permintaan berdasarkan employee_counts yang ditetapkan dalam employeeSchedules yang ditentukan. employeeDemands yang diberikan dalam permintaan digabungkan -- jika dua interval employee_demand tumpang-tindih, permintaan dijumlahkan di bagian interval yang tumpang-tindih.

SolverConfig

Menetapkan parameter tambahan untuk menyelesaikan masalah Pembuatan Shift.

Representasi JSON
{
  "timeLimit": string,
  "multiDaySchedule": boolean,
  "shiftEventsCanChange": boolean
}
Kolom
timeLimit

string (Duration format)

Waktu maksimum yang harus dihabiskan oleh pemecah masalah untuk menyelesaikan soal. Jika tidak disetel, setelan defaultnya adalah 1 menit. Pilihan batas waktu harus bergantung pada ukuran masalah. Sebagai contoh, saat menyelesaikan instance 7 hari dengan 2 ShiftTemplates, masing-masing dengan ~20 kemungkinan waktu mulai dan mengadakan 2 acara dengan ~30 kemungkinan waktu mulai, dan dua hari libur per minggu, nilai yang direkomendasikan adalah: <10 detik untuk solusi cepat (dan kemungkinan kurang optimal), (10 detik, 300 detik) untuk solusi berkualitas baik, dan >300 detik untuk penelusuran yang menyeluruh. Instance yang lebih besar mungkin memerlukan batas waktu yang lebih lama.

Nilai ini bukan batas pasti dan tidak memperhitungkan overhead komunikasi. Latensi yang diharapkan untuk menyelesaikan masalah mungkin sedikit lebih besar daripada nilai ini.

Durasi dalam detik dengan maksimal sembilan digit pecahan, yang diakhiri dengan 's'. Contoh: "3.5s".

multiDaySchedule

boolean

Jika benar, pemecah masalah akan menghasilkan EmployeeSchedule yang menyertakan beberapa shift (mis., untuk membuat jadwal selama seminggu). Jika tidak, setiap EmployeeSchedule akan menyertakan tepat satu shift. Jadwal multi-hari mengasumsikan bahwa waktu mulai shift adalah sama di seluruh hari, dan jumlah hari libur dalam jadwal tersebut ditentukan oleh template shift. Defaultnya adalah false.

shiftEventsCanChange

boolean

Jika benar, EmployeeSchedule selama beberapa hari dapat mencakup shift yang waktu mulai dan berakhir acaranya bervariasi di semua hari. Jika tidak, semua shift EmployeeSchedule tertentu harus memiliki waktu mulai dan waktu berakhir peristiwa yang sama. Dalam kedua kasus tersebut, semua shift pada jadwal yang berlangsung lebih dari satu hari memiliki waktu mulai dan waktu berakhir yang sama. Oleh karena itu, parameter ini diabaikan jika multiDaySchedule bernilai salah (false). Menetapkan parameter ini ke benar (true) dapat menyebabkan waktu penyelesaian yang lebih lama. Defaultnya adalah false.

ShiftTemplate

Template yang menetapkan aturan untuk menghasilkan shift. Shift adalah unit kerja yang menentukan waktu mulai, waktu berakhir, dan dapat berisi peristiwa (mis.makan siang, istirahat, dll.). Shift akan ditetapkan ke tanggal tertentu dalam respons.

Representasi JSON
{
  "id": string,
  "earliestStartTime": {
    object (TimeOfDay)
  },
  "latestStartTime": {
    object (TimeOfDay)
  },
  "durationMinutes": integer,
  "startTimeIncrementMinutes": integer,
  "daysOffCountPerWeek": integer,
  "eventTemplates": [
    {
      object (EventTemplate)
    }
  ],
  "minimumIntereventGapMinutes": integer,
  "maximumEmployeeCount": integer
}
Kolom
id

string

ID unik template ini.

earliestStartTime

object (TimeOfDay)

Waktu paling awal dalam sehari saat shift dapat dimulai. Nilai ini ditentukan dengan jam dan menit; detik dan nanos diabaikan.

latestStartTime

object (TimeOfDay)

Waktu terakhir pada hari saat shift dapat dimulai. Nilai ini ditentukan dengan jam dan menit; detik dan nanos diabaikan. Jika nilai ini kurang dari earliestStartTime, pergeseran yang dihasilkan oleh template ini dapat dimulai sebelum atau setelah tengah malam.

durationMinutes

integer

Durasi tetap untuk pergeseran yang dihasilkan oleh template ini.

startTimeIncrementMinutes

integer

Penambahan waktu (dalam menit) yang digunakan untuk menghasilkan kumpulan kemungkinan waktu mulai antara earliestStartTime dan latestStartTime. Misalnya, jika waktu mulai paling awal adalah 8.00, waktu mulai terbaru adalah 8.30, dan penambahan waktu mulai adalah 10 menit, maka semua kemungkinan waktu mulai untuk template shift ini adalah: 8:00, 8:10, 8:20, dan 8:30.

daysOffCountPerWeek

integer

Jumlah hari libur tetap per minggu. Seorang karyawan memiliki hari libur jika mereka tidak ditugaskan ke shift yang dimulai pada hari itu. Seminggu adalah 7 hari dan dimulai pada hari Minggu.

eventTemplates[]

object (EventTemplate)

Aturan untuk menghasilkan peristiwa untuk setiap shift. Tepat satu peristiwa akan disertakan dalam setiap shift untuk setiap Peristiwa yang ditentukan.

minimumIntereventGapMinutes

integer

Menit minimum antara akhir satu peristiwa dan awal peristiwa berikutnya.

maximumEmployeeCount

integer

Jumlah maksimum karyawan yang dapat ditetapkan ke semua shift yang dihasilkan oleh template ini.

TimeOfDay

Mewakili waktu. Tanggal dan zona waktu tidak signifikan atau ditentukan di tempat lain. API dapat memilih untuk memungkinkan detik kabisat. Jenis terkait adalah google.type.Date dan google.protobuf.Timestamp.

Representasi JSON
{
  "hours": integer,
  "minutes": integer,
  "seconds": integer,
  "nanos": integer
}
Kolom
hours

integer

Jam dalam format 24 jam. Harus dari 0 hingga 23. API dapat memilih untuk mengizinkan nilai "24:00:00" untuk skenario seperti waktu tutup bisnis.

minutes

integer

Menit dalam jam. Harus dari 0 hingga 59.

seconds

integer

Detik dalam waktu. Biasanya harus dari 0 hingga 59. API dapat mengizinkan nilai 60 jika memungkinkan lompatan-detik.

nanos

integer

Pecahan detik dalam nanodetik. Harus dari 0 hingga 999.999.999.

EventTemplate

Template yang menentukan aturan untuk menghasilkan satu peristiwa yang terjadi selama shift. Acara dapat mewakili pertemuan, istirahat, makan siang, dll.

Representasi JSON
{
  "id": string,
  "minimumMinutesAfterShiftStart": integer,
  "maximumMinutesAfterShiftStart": integer,
  "durationMinutes": integer,
  "startTimeIncrementMinutes": integer
}
Kolom
id

string

ID unik template ini.

minimumMinutesAfterShiftStart

integer

Jumlah menit minimum setelah awal shift agar peristiwa ini dapat dimulai.

maximumMinutesAfterShiftStart

integer

Jumlah menit maksimum setelah awal shift untuk memulai peristiwa ini.

durationMinutes

integer

Durasi tetap dalam menit peristiwa ini.

startTimeIncrementMinutes

integer

Penambahan waktu (dalam menit) yang digunakan untuk menghasilkan kumpulan kemungkinan waktu mulai peristiwa antara minimumMinutesAfterShiftStart dan maximumMinutesAfterShiftStart. Misalnya, jika menit minimum setelah shift dimulai adalah 30, menit maksimum setelah shift dimulai adalah 45, dan penambahan waktu mulai adalah 5 menit, peristiwa dapat berlangsung 30, 35, 40, atau 45 menit setelah pergeseran dimulai.

EmployeeDemand

Menentukan jumlah karyawan yang diperlukan untuk memenuhi permintaan dalam interval DateTime yang ditentukan.

Representasi JSON
{
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "employeeCount": integer
}
Kolom
startDateTime

object (DateTime)

Awal interval waktu untuk permintaan tertentu (inklusif). Nilai-nilai ini dibaca hingga menit; detik dan semua satuan yang lebih kecil akan diabaikan.

endDateTime

object (DateTime)

Akhir interval waktu untuk permintaan tertentu (eksklusif). Nilai-nilai ini dibaca hingga menit; detik dan semua satuan yang lebih kecil akan diabaikan.

employeeCount

integer

Jumlah karyawan yang diperlukan untuk memenuhi permintaan untuk interval ini.

ShiftGenerationSolutionStatus

Status solusi yang diberikan sebagai respons pemecah masalah.

Enum
SHIFT_GENERATION_SOLUTION_STATUS_UNSPECIFIED Status respons belum ditentukan.
SHIFT_GENERATION_SOLVED Pemecah masalah menemukan solusi dalam batas waktu yang diberikan.
SHIFT_GENERATION_NOT_SOLVED Masalah mencegah pemecah masalah membuat shift.
SHIFT_GENERATION_NOT_SOLVED_DEADLINE_EXCEEDED Penyesuaian tidak dapat dilakukan untuk mencakup permintaan dalam batas waktu yang ditentukan.

EmployeeSchedule

Daftar shift yang diurutkan sesuai dengan satu ShiftTemplate yang akan ditetapkan ke sejumlah karyawan.

Representasi JSON
{
  "shiftTemplateId": string,
  "shifts": [
    {
      object (ShiftWithEvents)
    }
  ],
  "employeeCount": integer
}
Kolom
shiftTemplateId

string

ID template yang digunakan untuk membuat kumpulan shift ini.

shifts[]

object (ShiftWithEvents)

Daftar shift dengan employeeCount karyawan yang ditugaskan. Pergeseran dan acara yang dipilih untuk jadwal dibuat dari satu template. Pergeseran diurutkan secara kronologis dan tidak tumpang tindih. Jika SolverConfig.multi_day_schedule bernilai benar, hari libur direpresentasikan secara implisit dengan tidak adanya shift yang dimulai pada hari itu.

employeeCount

integer

Jumlah karyawan yang harus ditugaskan pada serangkaian shift ini untuk memenuhi permintaan.

ShiftWithEvents

Menentukan tanggal mulai dan akhir beserta daftar peristiwa tetap dari pergeseran yang dihasilkan oleh pemecah masalah.

Representasi JSON
{
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "events": [
    {
      object (Event)
    }
  ]
}
Kolom
startDateTime

object (DateTime)

Tanggal dan waktu mulai shift. Nilai ini ditentukan hingga menit; detik dan satuan yang lebih kecil tidak diberikan.

endDateTime

object (DateTime)

Tanggal dan waktu berakhir shift. Nilai ini ditentukan hingga menit; detik dan satuan yang lebih kecil tidak diberikan.

events[]

object (Event)

Daftar peristiwa yang disertakan dalam pergeseran ini, dipetakan persis ke, dan dalam urutan yang sama dengan, ShiftTemplate.Event. Jika SolverConfig.shift_events_can_change bernilai benar, waktu mulai dan berakhir acara dapat bervariasi di seluruh ShiftWithEvents dalam jadwal ini.

Acara

Menentukan DateTime mulai dan berakhir dari peristiwa tertentu dalam pergeseran yang dihasilkan oleh pemecah.

Representasi JSON
{
  "eventTemplateId": string,
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  }
}
Kolom
eventTemplateId

string

ID template yang digunakan untuk membuat peristiwa ini.

startDateTime

object (DateTime)

Tanggal dan waktu mulai acara. Nilai ini ditentukan hingga menit; detik dan satuan yang lebih kecil tidak diberikan.

endDateTime

object (DateTime)

Tanggal dan waktu berakhir acara. Nilai ini ditentukan hingga menit; detik dan satuan yang lebih kecil tidak diberikan.

DemandCoverageViolation

Menentukan pelanggaran cakupan permintaan untuk interval yang ditentukan. Permintaan karyawan sama di seluruh interval yang ditentukan.

Representasi JSON
{
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "coverageViolation": integer
}
Kolom
startDateTime

object (DateTime)

Tanggal dan waktu mulai interval permintaan (inklusif). Nilai ini ditentukan hingga menit.

endDateTime

object (DateTime)

Tanggal dan waktu berakhir interval permintaan (eksklusif). Nilai ini ditentukan hingga menit.

coverageViolation

integer

Pelanggaran cakupan selama interval yang ditentukan. Nilai positif menunjukkan bahwa permintaan terlampau banyak, dan nilai negatif menunjukkan bahwa permintaan terselubung.