Method: scheduling.solveShiftGeneration

Çalışan talebini karşılamak amacıyla belirli vardiya şablonlarından değişiklikler oluşturarak belirtilen SolveShiftGenerationRequest için vardiya oluşturma problemini çözer.

HTTP isteği

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

URL, gRPC Kod Dönüştürme söz dizimini kullanır.

İstek içeriği

İsteğin gövdesi, aşağıdaki yapıya sahip veriler içerir:

JSON gösterimi
{
  "solverConfig": {
    object (SolverConfig)
  },
  "shiftTemplates": [
    {
      object (ShiftTemplate)
    }
  ],
  "employeeDemands": [
    {
      object (EmployeeDemand)
    }
  ]
}
Alanlar
solverConfig

object (SolverConfig)

İsteğe bağlı. Çözücü parametreleri.

shiftTemplates[]

object (ShiftTemplate)

Zorunlu. Vardiya oluşturma kurallarını belirten üst karakter şablonları grubu.

employeeDemands[]

object (EmployeeDemand)

Zorunlu. shiftTemplates kaynaklı vardiyaların kapsaması gereken toplam çalışan talebi. Her bir EmployeeDemand için belirtilen DateTime aralıkları ayrı olmalıdır ve bitişik olmayabilir.

Yanıt gövdesi

Değişiklik Oluşturma sorununun yanıtı. Döndürülen solutionStatus, SOLVED ise çözücü tarafından oluşturulan geçerli kayma kümesi employeeSchedules işlevinde döndürülür. Geçerli bir vardiya programı için aşağıdaki özellikler şunları içerir:

  1. employeeSchedules politikasında oluşturulan her vardiya, karşılık gelen ShiftTemplate politikasında belirtilen kurallara uyar.
  2. Her vardiyada seçilen her etkinlik, karşılık gelen ShiftTemplate.Event bölümünde belirtilen kurallara uyar.
  3. Aynı ShiftTemplate'ten oluşturulan vardiya grubuna atanan toplam çalışan sayısı, söz konusu şablonun maximumEmployeeCount kadarını aşmıyor.
  4. Atanan çalışanlar grubu, talebi her zaman aralığında karşılar.

Başarılı olursa yanıt metni aşağıdaki yapıyla birlikte verileri içerir:

JSON gösterimi
{
  "solutionStatus": enum (ShiftGenerationSolutionStatus),
  "employeeSchedules": [
    {
      object (EmployeeSchedule)
    }
  ]
}
Alanlar
solutionStatus

enum (ShiftGenerationSolutionStatus)

Döndürülen çözümün durumu. solutionStatus, SOLVED değilse employeeSchedules boş olur.

employeeSchedules[]

object (EmployeeSchedule)

Çözücü tarafından oluşturulan vardiyalar kümesi ve her bir zaman çizelgesine atanan çalışan sayısı.

SolverConfig

Kaydırma Oluşturma problemini çözmek için ek parametreleri belirtir.

JSON gösterimi
{
  "timeLimit": string,
  "multiDaySchedule": boolean,
  "shiftEventsCanChange": boolean
}
Alanlar
timeLimit

string (Duration format)

Çözme aracının sorun üzerinde harcaması gereken maksimum süre. Ayarlanmazsa varsayılan olarak 1 dakika olur. Zaman sınırı seçimi, sorunun boyutuna bağlı olmalıdır. Örnek vermek gerekirse, her biri yaklaşık 20 başlangıç zamanı olan, her biri yaklaşık 30 olası başlangıç zamanı olan ve haftada iki gün izinli 2 etkinlik tutan 2 ShiftTemplates ile 7 günlük bir örneği çözerken önerilen değerler hızlı çözümler için 10 saniyeden az (ve muhtemelen optimum düzeyin altında), iyi kaliteli çözümler için 10 sn ve 300 sn ve kapsamlı arama için 300 sn'den büyüktür. Daha büyük örnekler için daha uzun süre sınırları gerekebilir.

Bu değer kesin bir sınır değildir ve iletişim ek yükünü hesaba katmaz. Sorunun çözülmesi için beklenen gecikme bu değeri biraz aşabilir.

"s" ile biten ve en fazla dokuz kesir basamağı olan, saniye cinsinden bir süre. Örnek: "3.5s".

multiDaySchedule

boolean

Doğruysa çözücü, birkaç vardiya içeren EmployeeSchedule'ler oluşturur (ör. bir haftalık bir program oluşturmak için). Aksi takdirde her EmployeeSchedule tam olarak bir vardiya içerir. Birden çok gün içeren programlar, vardiyanın başlangıç saatinin tüm günlerde aynı olduğunu ve böyle bir programdaki izin gün sayısının vardiya şablonları tarafından belirlendiğini varsayar. Varsayılan değer, false (yanlış) değeridir.

shiftEventsCanChange

boolean

Doğruysa birden fazla günü kapsayan EmployeeSchedule, etkinliklerinin başlangıç ve bitiş zamanının tüm günler arasında değiştiği değişimleri içerebilir. Aksi takdirde, belirli bir EmployeeSchedule öğesinin tüm vardiyalarının aynı etkinliğin başlangıç ve bitiş zamanlarına sahip olması gerekir. Her iki durumda da, birden fazla gün içeren bir programdaki tüm vardiyaların başlangıç ve bitiş zamanı aynı olur. Bu nedenle, multiDaySchedule false ise bu parametre yok sayılır. Bu parametrenin doğru değerine ayarlanması, çözme sürelerinin uzamasına neden olabilir. Varsayılan değer, false (yanlış) değeridir.

ShiftTemplate

Vardiya oluşturma kurallarını belirten şablon. Vardiya, başlangıç ve bitiş zamanını belirten ve etkinlikler (ör.öğle yemeği, molalar vb.) içerebilen bir çalışma birimidir. Yanıtta belirli bir tarihe bir vardiya atanır.

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

string

Bu şablonun benzersiz kimliği.

earliestStartTime

object (TimeOfDay)

Gün içinde vardiyanın başlayabileceği en erken saat. Bu değer, saat ve dakika ile belirtilir; saniye ve nanos göz ardı edilir.

latestStartTime

object (TimeOfDay)

Gün içinde vardiyanın başlayabileceği en geç saattir. Bu değer, saat ve dakika ile belirtilir; saniye ve nanos göz ardı edilir. Bu değer earliestStartTime değerinden küçükse bu şablon tarafından oluşturulan kayma, gece yarısından önce veya sonra başlayabilir.

durationMinutes

integer

Bu şablon tarafından oluşturulan kaymanın süresi sabittir.

startTimeIncrementMinutes

integer

earliestStartTime ile latestStartTime arasındaki olası başlangıç zamanları grubunu oluşturmak için kullanılan süre artımı (dakika cinsinden). Örneğin, en erken başlangıç saati 8:00, en geç başlangıç zamanı 8:30 ve başlangıç zamanı artışı 10 dakika ise, bu vardiya şablonu için olası tüm başlangıç zamanları şu şekildedir: 8:00, 8:10, 8:20 ve 8:30.

daysOffCountPerWeek

integer

Haftalık olarak sabit izin günü sayısı. Çalışanın o gün başlayacak bir vardiyaya atanmaması için belirli bir gün izni olmalıdır. Hafta 7 gündür ve pazar günü başlar.

eventTemplates[]

object (EventTemplate)

Her vardiya için etkinlik oluşturma kuralları. Belirtilen her bir Etkinlik için her vardiyaya tam olarak bir etkinlik dahil edilir.

minimumIntereventGapMinutes

integer

Bir etkinliğin bitişi ile sonraki etkinliğin başlangıcı arasındaki minimum dakika sayısı.

maximumEmployeeCount

integer

Bu şablon tarafından oluşturulan tüm vardiyalara atanabilecek maksimum çalışan sayısı.

TimeOfDay

Günün saatini temsil eder. Tarih ve saat dilimi önemli değil veya başka bir yerde belirtilmiş. API'ler artık saniyeler eklemeye izin verebilir. İlgili türler: google.type.Date ve google.protobuf.Timestamp.

JSON gösterimi
{
  "hours": integer,
  "minutes": integer,
  "seconds": integer,
  "nanos": integer
}
Alanlar
hours

integer

24 saat biçiminde günün saatleri. 0 ile 23 arasında olmalıdır. API'ler, işletmenin kapanış saati gibi senaryolar için "24:00:00" değerine izin vermeyi tercih edebilir.

minutes

integer

Günün saati dakika cinsinden ifade edilir. 0 ile 59 arasında olmalıdır.

seconds

integer

Dakika cinsinden saniye sayısı. Normalde 0 ile 59 arasında olmalıdır. API'ler artık saniyelere izin veriyorsa 60 değerine izin verebilir.

nanos

integer

Saniyenin nanosaniye cinsinden kesirleri. 0 ile 999.999.999 arasında olmalıdır.

EventTemplate

Vardiya sırasında gerçekleşen tek bir etkinlik oluşturma kurallarını belirten şablon. Etkinlik bir toplantıyı, molayı, öğle yemeğini vb. temsil edebilir.

JSON gösterimi
{
  "id": string,
  "minimumMinutesAfterShiftStart": integer,
  "maximumMinutesAfterShiftStart": integer,
  "durationMinutes": integer,
  "startTimeIncrementMinutes": integer
}
Alanlar
id

string

Bu şablonun benzersiz kimliği.

minimumMinutesAfterShiftStart

integer

Bir vardiya başladıktan sonra bu etkinliğin başlayabileceği minimum dakika sayısı.

maximumMinutesAfterShiftStart

integer

Bir vardiya başladıktan sonra bu etkinliğin başlayabileceği maksimum dakika sayısı.

durationMinutes

integer

Bu etkinliğin dakika cinsinden süresi sabitlendi.

startTimeIncrementMinutes

integer

minimumMinutesAfterShiftStart ile maximumMinutesAfterShiftStart arasında olası etkinlik başlangıç zamanları grubunu oluşturmak için kullanılan süre artışı (dakika cinsinden). Örneğin, vardiya başlangıcından sonraki minimum dakika sayısı 30, vardiya başlangıcından sonraki maksimum dakika sayısı 45 ve başlangıç zamanı artışı 5 dakika ise etkinlik, vardiya başladıktan 30, 35, 40 veya 45 dakika sonra gerçekleşebilir.

EmployeeDemand

Belirtilen DateTime aralığında talebi karşılamak için gereken çalışan sayısını belirtir.

JSON gösterimi
{
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "employeeCount": integer
}
Alanlar
startDateTime

object (DateTime)

Belirli bir talep için zaman aralığının başlangıcı (bu tarih dahil). Bu değerler dakikaya kadar okunur; saniyeler ve daha küçük olan tüm birimler yoksayılır.

endDateTime

object (DateTime)

Belirtilen talep için zaman aralığının sonu (hariç). Bu değerler dakikaya kadar okunur; saniyeler ve daha küçük olan tüm birimler yoksayılır.

employeeCount

integer

Bu aralıktaki talebi karşılamak için gereken çalışan sayısı.

ShiftGenerationSolutionStatus

Bir çözücü yanıtında çözüm durumu.

Sıralamalar
SHIFT_GENERATION_SOLUTION_STATUS_UNSPECIFIED Yanıt için belirtilmemiş durum.
SHIFT_GENERATION_SOLVED Çözücü, verilen süre sınırı içinde bir çözüm buldu.
SHIFT_GENERATION_NOT_SOLVED Çözücü, bir sorun nedeniyle değişimler gerçekleştiremedi.
SHIFT_GENERATION_NOT_SOLVED_DEADLINE_EXCEEDED Verilen süre sınırı içinde talebi karşılamak için değişiklikler oluşturulamadı.

EmployeeSchedule

Birkaç çalışana atanacak tek bir ShiftTemplate'e karşılık gelen sıralı vardiya listesi.

JSON gösterimi
{
  "shiftTemplateId": string,
  "shifts": [
    {
      object (ShiftWithEvents)
    }
  ],
  "employeeCount": integer
}
Alanlar
shiftTemplateId

string

Bu kaydırma kümesini oluşturmak için kullanılan şablonun kimliği.

shifts[]

object (ShiftWithEvents)

employeeCount çalışanın atandığı vardiyaların listesi. Program için seçilen değişiklikler ve etkinlikler tek bir şablondan oluşturuldu. Değişiklikler kronolojik olarak sıralanır ve çakışmaz. SolverConfig.multi_day_schedule true (doğru) değerine ayarlanırsa izin günü, örtülü bir şekilde o günden başlayan bir değişimin olmamasıyla gösterilir.

employeeCount

integer

Talebi karşılamak için bu vardiya grubuna atanması gereken çalışan sayısı.

ShiftWithEvents

Çözücü tarafından oluşturulan bir vardiyanın sabit etkinlikleri listesiyle birlikte başlangıç ve bitiş tarihini belirtir.

JSON gösterimi
{
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "events": [
    {
      object (Event)
    }
  ]
}
Alanlar
startDateTime

object (DateTime)

Vardiyanın başlangıç tarihi ve saati. Bu değer dakikaya kadar belirtilir; saniye ve daha küçük birimler belirtilmez.

endDateTime

object (DateTime)

Vardiyanın bitiş tarihi ve saati. Bu değer dakikaya kadar belirtilir; saniye ve daha küçük birimler belirtilmez.

events[]

object (Event)

Bu vardiyaya dahil edilen etkinliklerin listesi, ShiftTemplate.Event işaretleriyle tam olarak eşlenir ve bunlarla aynı sıradadır. SolverConfig.shift_events_can_change doğruysa etkinliklerin başlangıç ve bitiş zamanları bu programın ShiftWithEvents genelinde değişiklik gösterebilir.

Etkinlik

Çözücü tarafından oluşturulan bir kaydırmadaki belirli bir etkinliğin başlangıç ve bitiş DateTime değerini belirtir.

JSON gösterimi
{
  "eventTemplateId": string,
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  }
}
Alanlar
eventTemplateId

string

Bu etkinliği oluşturmak için kullanılan şablonun kimliği.

startDateTime

object (DateTime)

Etkinliğin başlangıç tarihi ve saati. Bu değer dakikaya kadar belirtilir; saniye ve daha küçük birimler belirtilmez.

endDateTime

object (DateTime)

Etkinliğin bitiş tarihi ve saati. Bu değer dakikaya kadar belirtilir; saniye ve daha küçük birimler belirtilmez.