Risolve un problema di generazione dei turni da un dato SolveShiftGenerationRequest
generando dei turni da determinati modelli di turni per coprire la domanda dei dipendenti.
Richiesta HTTP
POST https://optimization.googleapis.com/v1/scheduling:solveShiftGeneration
L'URL utilizza la sintassi di transcodifica gRPC.
Corpo della richiesta
Il corpo della richiesta contiene dati con la seguente struttura:
Rappresentazione JSON |
---|
{ "solverConfig": { object ( |
Campi | |
---|---|
solverConfig |
(Facoltativo) Parametri del risolutore. |
shiftTemplates[] |
Obbligatorio. Insieme di modelli di turni che specificano le regole per generare i turni. |
employeeDemands[] |
Obbligatorio. Domanda totale dei dipendenti che devono essere coperti dai turni generati da |
Corpo della risposta
Risposta per il problema relativo alla generazione di turni. Se il valore solutionStatus
restituito è SOLVED
, viene restituito un insieme di variazioni valide generate dal risolutore in employeeSchedules
. Per una pianificazione dei turni valida, vengono mantenute le seguenti proprietà:
- Ogni variazione generata in
employeeSchedules
è conforme alle regole specificate neiShiftTemplate
corrispondenti. - Ogni evento selezionato in ogni turno rispetta le regole specificate nei
ShiftTemplate.Event
corrispondenti. - Il numero totale di dipendenti assegnati all'insieme di turni generati dallo stesso modello ShiftTemplate non è superiore a
maximumEmployeeCount
di quel modello. - L'insieme di dipendenti assegnati copre la domanda a intervalli specifici.
In caso di esito positivo, il corpo della risposta contiene dati con la seguente struttura:
Rappresentazione JSON |
---|
{ "solutionStatus": enum ( |
Campi | |
---|---|
solutionStatus |
Stato della soluzione restituita. Se |
employeeSchedules[] |
Insieme di turni generati dal risolutore insieme al numero di dipendenti assegnati a ciascun programma. |
demandCoverageViolations[] |
Violazioni della copertura della domanda in base al valore |
SolverConfig
Specifica parametri aggiuntivi per risolvere il problema relativo alla generazione di adattamenti.
Rappresentazione JSON |
---|
{ "timeLimit": string, "multiDaySchedule": boolean, "shiftEventsCanChange": boolean } |
Campi | |
---|---|
timeLimit |
Tempo massimo che il risolutore dovrebbe dedicare al problema. Se non viene configurato, il valore predefinito è 1 minuto. La scelta di un limite di tempo deve dipendere dalla portata del problema. Per fare un esempio, quando si risolve un'istanza di 7 giorni con 2 Questo valore non rappresenta un limite rigido e non tiene conto dell'overhead di comunicazione. La latenza prevista per risolvere il problema potrebbe superare leggermente questo valore. Durata in secondi con un massimo di nove cifre frazionarie e termina con " |
multiDaySchedule |
Se true, il risolutore genera |
shiftEventsCanChange |
Se true, i |
ShiftTemplate
Modello che specifica le regole per generare le variazioni. Un turno è un'unità di lavoro che specifica un'ora di inizio e di fine e può contenere eventi (ad esempio pranzo, pause e così via). A una data specifica verrà assegnato uno spostamento nella risposta.
Rappresentazione JSON |
---|
{ "id": string, "earliestStartTime": { object ( |
Campi | |
---|---|
id |
ID univoco di questo modello. |
earliestStartTime |
La prima ora del giorno in cui può iniziare un turno. Questo valore è specificato con ore e minuti; secondi e nano vengono ignorati. |
latestStartTime |
L'ultima ora della giornata in cui può iniziare un turno. Questo valore è specificato con ore e minuti; secondi e nano vengono ignorati. Se questo valore è inferiore a |
durationMinutes |
Durata fissa di una variazione generata da questo modello. |
startTimeIncrementMinutes |
L'incremento di tempo (in minuti) utilizzato per generare l'insieme di possibili ore di inizio comprese tra |
daysOffCountPerWeek |
Numero fisso di giorni liberi a settimana. Un dipendente ha un determinato giorno libero se non è assegnato a un turno che inizia in quella data. Una settimana dura 7 giorni e inizia la domenica. |
eventTemplates[] |
Regole per la generazione di eventi per ogni turno. Verrà incluso esattamente un evento in ogni turno per ogni evento specificato. |
minimumIntereventGapMinutes |
Numero minimo di minuti tra la fine di un evento e l'inizio di quello successivo. |
maximumEmployeeCount |
Numero massimo di dipendenti che può essere assegnato a tutti i turni generati da questo modello. |
TimeOfDay
Rappresenta un'ora del giorno. La data e il fuso orario non sono significativi o sono specificati altrove. Un'API può scegliere di consentire i secondi intercalari. I tipi correlati sono google.type.Date
e google.protobuf.Timestamp
.
Rappresentazione JSON |
---|
{ "hours": integer, "minutes": integer, "seconds": integer, "nanos": integer } |
Campi | |
---|---|
hours |
Le ore del giorno nel formato 24 ore. Deve essere compreso tra 0 e 23. Un'API può scegliere di consentire il valore "24:00:00" per scenari come l'orario di chiusura dell'attività. |
minutes |
Minuti dell'ora del giorno. Il valore deve essere compreso tra 0 e 59. |
seconds |
Secondi di minuti del tempo. Normalmente deve essere compreso tra 0 e 59. Un'API potrebbe consentire il valore 60 se consente i secondi intercalari. |
nanos |
Frazioni di secondi in nanosecondi. Deve essere compreso tra 0 e 999.999.999. |
EventTemplate
Modello che specifica le regole per la generazione di un singolo evento che si verifica durante un turno. Un evento può rappresentare una riunione, una pausa, un pranzo e così via.
Rappresentazione JSON |
---|
{ "id": string, "minimumMinutesAfterShiftStart": integer, "maximumMinutesAfterShiftStart": integer, "durationMinutes": integer, "startTimeIncrementMinutes": integer } |
Campi | |
---|---|
id |
ID univoco di questo modello. |
minimumMinutesAfterShiftStart |
Numero minimo di minuti dopo l'inizio di un turno in cui può iniziare questo evento. |
maximumMinutesAfterShiftStart |
Numero massimo di minuti dopo l'inizio di un turno in cui questo evento può iniziare. |
durationMinutes |
Durata fissa in minuti di questo evento. |
startTimeIncrementMinutes |
L'incremento di tempo (in minuti) utilizzato per generare l'insieme di possibili ore di inizio degli eventi tra il giorno |
EmployeeDemand
Specifica il numero di dipendenti necessari per coprire la domanda in un intervallo DateTime specificato.
Rappresentazione JSON |
---|
{ "startDateTime": { object ( |
Campi | |
---|---|
startDateTime |
Inizio dell'intervallo di tempo per la domanda specificata (inclusa). Questi valori vengono letti al minuto; secondi e tutte le unità più piccole vengono ignorate. |
endDateTime |
Fine dell'intervallo di tempo per la domanda specificata (esclusa). Questi valori vengono letti al minuto; secondi e tutte le unità più piccole vengono ignorate. |
employeeCount |
Numero di dipendenti necessari per coprire la domanda per questo intervallo. |
ShiftGenerationSolutionStatus
Stato della soluzione fornito nella risposta di un risolutore.
Enum | |
---|---|
SHIFT_GENERATION_SOLUTION_STATUS_UNSPECIFIED |
Stato non specificato per la risposta. |
SHIFT_GENERATION_SOLVED |
Il risolutore ha trovato una soluzione nel limite di tempo indicato. |
SHIFT_GENERATION_NOT_SOLVED |
Un problema ha impedito al risolutore di generare cambiamenti. |
SHIFT_GENERATION_NOT_SOLVED_DEADLINE_EXCEEDED |
Non è stato possibile generare adattamenti per coprire la domanda entro il limite di tempo specificato. |
EmployeeSchedule
Un elenco ordinato di turni corrispondente a un singolo ShiftTemplate
da assegnare a più dipendenti.
Rappresentazione JSON |
---|
{
"shiftTemplateId": string,
"shifts": [
{
object ( |
Campi | |
---|---|
shiftTemplateId |
ID del modello utilizzato per generare questo insieme di variazioni. |
shifts[] |
Elenco dei turni a cui è assegnato il numero di dipendenti |
employeeCount |
Numero di dipendenti da assegnare a questo insieme di turni per coprire la domanda. |
ShiftWithEvents
Specifica le date di inizio e di fine insieme a un elenco di eventi fissi di una variazione generata dal risolutore.
Rappresentazione JSON |
---|
{ "startDateTime": { object ( |
Campi | |
---|---|
startDateTime |
Data e ora di inizio del turno. Questo valore viene specificato fino al minuto; secondi e unità più piccole. |
endDateTime |
Data e ora di fine del turno. Questo valore viene specificato fino al minuto; secondi e unità più piccole. |
events[] |
Elenco degli eventi inclusi in questa modifica, mappati esattamente e nello stesso ordine dei |
Evento
Specifica la data e l'ora di inizio e di fine di un evento specifico in una variazione generata dal risolutore.
Rappresentazione JSON |
---|
{ "eventTemplateId": string, "startDateTime": { object ( |
Campi | |
---|---|
eventTemplateId |
ID del modello utilizzato per generare l'evento. |
startDateTime |
Data e ora di inizio dell'evento. Questo valore viene specificato fino al minuto; secondi e unità più piccole. |
endDateTime |
Data e ora di fine dell'evento. Questo valore viene specificato fino al minuto; secondi e unità più piccole. |
DemandCoverageViolation
Specifica la violazione della copertura della domanda per l'intervallo specificato. La domanda dei dipendenti è la stessa per tutto l'intervallo specificato.
Rappresentazione JSON |
---|
{ "startDateTime": { object ( |
Campi | |
---|---|
startDateTime |
Data e ora di inizio dell'intervallo di domanda (incluse). Questo valore viene specificato fino al minuto. |
endDateTime |
Data e ora di fine dell'intervallo di domanda (esclusa). Questo valore viene specificato fino al minuto. |
coverageViolation |
Violazione della copertura durante l'intervallo specificato. Un valore positivo indica che la domanda è coperta da un limite di copertura, mentre un valore negativo indica che la domanda è coperta. |