Method: scheduling.solveShiftGeneration

Çalışan talebini karşılamak için verilen vardiya şablonlarında değişiklikler oluşturarak, belirtilen SolveShiftGenerationRequest ile ilişkili bir 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

İstek gövdesi, aşağıdaki yapıya sahip verileri 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. Kaydırma oluşturma kurallarını belirten vardiya şablonları kümesi.

employeeDemands[]

object (EmployeeDemand)

Zorunlu. shiftTemplates nedeniyle oluşan değişimlerin karşılaması gereken toplam çalışan talebi.

Yanıt gövdesi

Üst Karakter Oluşturma sorunu için yanıt. Döndürülen solutionStatus değeri SOLVED ise çözücü tarafından oluşturulan geçerli kaymalar grubu employeeSchedules içinde döndürülür. Geçerli bir vardiya programı için aşağıdaki mülklerde bulunur:

  1. employeeSchedules uygulamasında oluşturulan her bir değişiklik, ilgili ShiftTemplate politikasında belirtilen kurallara uyar.
  2. Her vardiyada seçilen her etkinlik, ilgili ShiftTemplate.Event içinde belirtilen kurallara uyar.
  3. Aynı ShiftTemplate'ten oluşturulan vardiya kümelerine atanan toplam çalışan sayısı söz konusu şablonun maximumEmployeeCount kadarını aşmaz.
  4. Atanan çalışan grubu, belirtilen her aralıktaki talebi 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)
    }
  ],
  "demandCoverageViolations": [
    {
      object (DemandCoverageViolation)
    }
  ]
}
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 ve her bir zaman çizelgesine atanan çalışan sayısı.

demandCoverageViolations[]

object (DemandCoverageViolation)

Belirtilen employeeSchedules içindeki atanmış employee_counts öğesine dayalı talep kapsamı ihlalleri. İstekte belirtilen employeeDemands toplanır. İki employee_demand aralığı çakışırsa talep, aralığın çakışan kısmı üzerinde toplanır.

SolverConfig

Üst Karakter Oluşturma sorununu çözmek için ek parametreleri belirtir.

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

string (Duration format)

Çözme aracının problem ü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. Örneğin, 2 ShiftTemplates ile 7 günlük bir örneği çözerken her biri yaklaşık 20 olası başlangıç zamanı olan ve yaklaşık 30 olası başlangıç zamanıyla 2 etkinlik düzenleyen ve haftada iki gün kapalı olan 7 günlük bir örneği çözerken önerilen değerler şunlardır: Hızlı çözümler için 10 sn'den (ve muhtemelen optimum düzeyin altında), iyi kaliteli çözümler için (10 sn, 300 sn) ve kapsamlı arama için 300'den fazla sn. Daha büyük örnekler için daha uzun süre sınırları gerekebilir.

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

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

multiDaySchedule

boolean

Doğru ise çözücü, birkaç vardiya içeren (ör. haftalık bir program oluşturmak için) EmployeeSchedule'ler oluşturur. Aksi takdirde, her EmployeeSchedule tam olarak bir vardiya içerir. Birden çok günü kapsayan programlar, vardiyanın başlangıç zamanının tüm günler arasında aynı olduğunu ve böyle bir programdaki izin günlerinin sayısı vardiya şablonları tarafından belirlenir. Varsayılan değer, false'tur.

shiftEventsCanChange

boolean

Doğru değerine ayarlanırsa birden çok gün içeren EmployeeSchedule'ler, etkinliklerinin başlangıç ve bitiş zamanının tüm günler arasında farklılık gösterdiği kaymaları içerebilir. Aksi takdirde, belirli bir EmployeeSchedule içindeki tüm vardiyaların, aynı etkinliğin başlangıç ve bitiş zamanlarına sahip olması gerekir. Her iki durumda da, birden çok gün içeren bir programdaki tüm değişimlerin başlangıç ve bitiş zamanı aynıdır. Dolayısıyla, multiDaySchedule yanlış değerine ayarlanırsa bu parametre yoksayılır. Bu parametreyi doğru değerine ayarlamak, çözme sürelerinin uzamasına neden olabilir. Varsayılan değer, false'tur.

ShiftTemplate

Vardiya oluşturma kurallarını belirten şablon. Vardiya, başlangıç ve bitiş zamanının belirtildiği ve etkinliklerin (ör.öğle yemeği, mola vb.) yer alabileceği bir çalışma birimidir. Yanıtta belirli bir tarihe bir kaydırma atanacak.

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)

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

latestStartTime

object (TimeOfDay)

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

durationMinutes

integer

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

startTimeIncrementMinutes

integer

earliestStartTime ile latestStartTime arasındaki olası başlangıç zamanlarını oluşturmak için kullanılan zaman artımı (dakika cinsinden). Örneğin, en erken başlangıç saati 8:00, en geç başlangıç saati 8:30 ve başlangıç zamanı artışı 10 dakikaysa 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 belirlenen sabit gün sayısı. Bir çalışan, o gün başlayan bir vardiyaya atanmamışsa belirli bir izin günü vardır. Bir hafta 7 gündür ve Pazar günü başlar.

eventTemplates[]

object (EventTemplate)

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

minimumIntereventGapMinutes

integer

Bir etkinliğin sonu ile bir 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ş. Bir API, artık saniyeye izin vermeyi seçebilir. İ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. Bir API, "24:00:00" değerine izin vermeyi seçebilir. gibi senaryolar için oldukça yararlı olabilir.

minutes

integer

Günün saatindeki dakikalar. 0 ile 59 arasında olmalıdır.

seconds

integer

Saniye cinsinden dakika. Normalde 0 ile 59 arasında olmalıdır. Bir API, artık saniyeye izin veriyorsa 60 değerine izin verebilir.

nanos

integer

Nanosaniye cinsinden saniyenin kesirleri. 0 ile 999.999.999 arasında olmalıdır.

EventTemplate

Kaydırma 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şlangıcından sonra bu etkinliğin başlayabileceği minimum dakika sayısı.

maximumMinutesAfterShiftStart

integer

Bir vardiya başlangıcından 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ındaki olası etkinlik başlangıç zamanlarını oluşturmak için kullanılan zaman artımı (dakika cinsinden). Örneğin, vardiya başlangıcından sonraki minimum dakika 30, vardiya başlangıcından sonraki maksimum dakika 45 ve başlangıç zamanı artımı 5 dakikaysa 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ı (dahil). Bu değerler dakikaya kadar okunur. saniye ve tüm küçük birimler yoksayılır.

endDateTime

object (DateTime)

Belirli bir talep için zaman aralığının sonu (hariç). Bu değerler dakikaya kadar okunur. saniye ve tüm küçük birimler yoksayılır.

employeeCount

integer

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

ShiftGenerationSolutionStatus

Bir çözücünün yanıtında sağlanan çözüm durumu.

Sıralamalar
SHIFT_GENERATION_SOLUTION_STATUS_UNSPECIFIED Yanıt için belirtilmemiş durum.
SHIFT_GENERATION_SOLVED Çözme aracı, belirtilen süre sınırında bir çözüm buldu.
SHIFT_GENERATION_NOT_SOLVED Bir sorun, çözücünün değişim oluşturmasını engelledi.
SHIFT_GENERATION_NOT_SOLVED_DEADLINE_EXCEEDED Belirtilen zaman sınırı dahilinde talebi karşılamak için değişiklikler oluşturulamadı.

EmployeeSchedule

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

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

string

Bu vardiya grubunu 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şturulmuştur. Değişimler kronolojik olarak sıralanır ve çakışmaz. SolverConfig.multi_day_schedule doğruysa, kapalı gün içinde o gün başlayan bir değişimin olmadığı anlamına gelir.

employeeCount

integer

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

ShiftWithEvents

Çözücü tarafından oluşturulan bir kaymanın sabit etkinliklerinin bir 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 verilmez.

endDateTime

object (DateTime)

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

events[]

object (Event)

Bu vardiyaya dahil edilen, ShiftTemplate.Event öğeleri ile tam olarak eşlenen ve bunlarla aynı sırada etkinliklerin listesi. SolverConfig.shift_events_can_change doğru ise etkinliklerin başlangıç ve bitiş zamanları bu programın ShiftWithEvents boyunca değişiklik gösterebilir.

Etkinlik

Çözücü tarafından oluşturulan bir vardiyadaki belirli bir etkinliğin başlangıç ve bitiş tarihini 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 verilmez.

endDateTime

object (DateTime)

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

DemandCoverageViolation

Belirtilen aralıktaki talep kapsamı ihlalini belirtir. Çalışan talebi, belirtilen aralığın tamamında aynıdır.

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

object (DateTime)

Talep aralığının başlangıç tarihi ve saati (dahil). Bu değer dakikaya kadar belirtilir.

endDateTime

object (DateTime)

Talep aralığının bitiş tarihi ve saati (hariç). Bu değer dakikaya kadar belirtilir.

coverageViolation

integer

Belirtilen aralıktaki kapsam ihlali. Pozitif değer talebin gereğinden fazla karşılandığını, negatif değer ise talebin karşılanmadığını gösterir.