Package google.research.optimization.v1.workforce

Indice

Pausa

Un periodo di tempo in cui un dipendente interrompe il proprio lavoro durante un turno.

Campi
start_date_time

DateTime

L'ora di inizio di una pausa.

duration_minutes

int32

Durata dell'interruzione in minuti.

BreakRule

Una regola che determina quando può iniziare una pausa all'interno di un turno e la sua durata. L'elenco di tutte le possibili interruzioni prese in considerazione viene determinato in incrementi di rule_increment_minutes. Ad esempio, se una regola di interruzione modella un'interruzione di 30 minuti che può iniziare tra le 10:00 e le 11:00 e l'incremento della regola è di 20 minuti, le interruzioni considerate sono: [10:00, 10:30], [10:20, 10:50], [10:40, 11:1].

Campi
earliest_start_time

DateTime

La prima ora di inizio della pausa (inclusa). È possibile impostare solo hours e minutes.

latest_start_time

DateTime

L'ultima ora di inizio della pausa (inclusa). È possibile impostare solo hours e minutes.

duration_minutes

int32

Durata dell'interruzione in minuti.

rule_increment_minutes

int32

[Facoltativo] Incremento del tempo in minuti per tutte le interruzioni che possono essere considerate in questa regola per le interruzioni. Se non viene configurato, il valore predefinito è duration_minutes.

BudgetRequirement

Requisiti di budget per un determinato intervallo.

Campi
total_budget

double

Budget totale per l'intervallo specificato. È necessario specificare un budget totale se la priorità è PRIORITY_MANDATORY.

Se il criterio total_budget non viene impostato, il costo totale della pianificazione viene ridotto al minimo in base al valore priority specificato. Ad esempio, se il priority per il budget è PRIORITY_MEDIUM, il risolutore ridurrà al minimo il costo prima di ridurre qualsiasi violazione dei vincoli con priorità PRIORITY_LOW.

start_date_time

DateTime

Ora di inizio durante il quale si applica il budget. Se l'ora di inizio non è specificata, viene impostata come la prima ora di inizio di tutti i turni specificati.

end_date_time

DateTime

Ora di fine per l'applicazione del budget. Se l'ora di fine non è specificata, viene impostata come l'ultima ora di fine di tutti i turni.

priority

Priority

Livello di priorità per soddisfare il requisito di budget durante l'intervallo di tempo specificato. La priorità predefinita è PRIORITY_LOW. Se la priorità è impostata su PRIORITY_MANDATORY, è necessario impostare total_budget.

Tieni presente che se questa priorità è superiore ad altre priorità di vincolo e se total_budget è stretto, la programmazione risultante potrebbe violare in modo significativo i vincoli o i requisiti di copertura dei dipendenti.

CoverageRequirement

Un requisito di copertura specifica il numero di dipendenti necessari per un insieme di ruoli e/o competenze durante una particolare finestra temporale e in una determinata località. Gli intervalli DateTime in una determinata località non possono sovrapporsi. In alternativa, è possibile fornire un elenco di ID turni al posto di una finestra temporale e di una località. Solo i dipendenti che possono essere assegnati a un ruolo specifico (o che possiedono una competenza specifica) possono soddisfare questo requisito.

Per un determinato ruolo e/o competenza, il requisito di copertura viene soddisfatto quando almeno target_employee_count di dipendenti lavora in ogni momento della finestra temporale (o per ogni turno in shift_ids). Al contrario, il requisito di copertura viene violato se in qualsiasi momento della finestra temporale (o per uno qualsiasi dei turni in shift_ids), ci sono meno di target_employee_count di dipendenti che lavorano durante l'intervallo di tempo. Un numero maggiore di dipendenti che lavorano rispetto a target_employee_count soddisfa comunque il requisito, ma il risolutore riduce al minimo l'impiego eccessivo di personale.

Campi
start_date_time

DateTime

L'ora di inizio del requisito di copertura (incluso). Se impostato, il campo shift_ids deve essere vuoto.

end_date_time

DateTime

L'ora di fine del requisito di copertura (esclusa). Se impostato, il campo shift_ids deve essere vuoto.

location_id

string

Località in cui sono necessari i dipendenti. Il campo shift_ids non è vuoto.

shift_ids[]

string

Se impostato, i requisiti di ruolo e competenza vengono applicati singolarmente a ogni ID turno in questo elenco. Se il valore di shift_id non è vuoto, i campi start_date_time, end_date_time e location_id devono essere vuoti.

role_requirements[]

RoleRequirement

Numero richiesto di dipendenti da assegnare ai ruoli specificati durante l'intervallo di tempo. È necessario specificare al massimo un role_requirement per ogni ID ruolo. Il livello di priorità predefinito per ciascuno dei requisiti è PRIORITY_MANDATORY. Questi vincoli vengono violati se in qualsiasi momento durante l'intervallo di tempo viene assegnato un numero di dipendenti inferiore a target_employee_count.

skill_requirements[]

SkillRequirement

Numero richiesto di dipendenti con le competenze specificate assegnate ai turni durante l'intervallo di tempo. È necessario specificare al massimo un skill_requirement per ogni ID competenza. Il livello di priorità predefinito per ciascuno dei requisiti è PRIORITY_LOW. Questi vincoli vengono violati se meno di target_employee_count dipendenti possiedono le competenze richieste in un dato momento durante l'intervallo di tempo.

RoleRequirement

Numero obbligatorio di dipendenti da assegnare al ruolo specificato durante l'intervallo di tempo.

Campi
role_id

string

ID ruolo per il requisito.

target_employee_count

int32

Numero desiderato di dipendenti assegnati al ruolo durante la finestra temporale.

priority

Priority

Livello di priorità per questo vincolo di requisito. La priorità predefinita per tutti i vincoli delle risorse è PRIORITY_MANDATORY.

SkillRequirement

Numero richiesto di dipendenti che lavorano nell'intervallo di tempo e possiedono la competenza specificata.

Campi
skill_id

string

ID competenza per il requisito.

target_employee_count

int32

Numero desiderato di dipendenti con le competenze specifiche che lavorano nell'intervallo di tempo.

priority

Priority

Livello di priorità per questo vincolo di requisito. La priorità predefinita per tutti i vincoli delle risorse è PRIORITY_LOW.

DemandCoverageViolation

Specifica la violazione della copertura della domanda per l'intervallo specificato. La domanda dei dipendenti è la stessa per tutto l'intervallo specificato.

Campi
start_date_time

DateTime

Data e ora di inizio dell'intervallo di domanda (incluse). Questo valore viene specificato fino al minuto.

end_date_time

DateTime

Data e ora di fine dell'intervallo di domanda (esclusa). Questo valore viene specificato fino al minuto.

coverage_violation

int32

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.

Dipendente

Un dipendente della forza lavoro da pianificare.

Campi
id

string

ID univoco assegnato a questo dipendente.

role_ids[]

string

ID ruolo eseguibili da questo dipendente. Deve essere specificato almeno un ruolo. Quando un dipendente è assegnato a un turno, viene anche assegnato a un singolo ruolo di questo elenco. Al dipendente potrebbero essere assegnati ruoli diversi durante la finestra di pianificazione.

skill_ids[]

string

ID delle competenze posseduti dal dipendente. Questo elenco può essere vuoto. Quando un dipendente è assegnato a un turno, utilizza qualsiasi sottoinsieme delle competenze elencate qui per coprire i requisiti di competenza per tutta la durata del turno assegnato.

shift_preferences[]

ShiftPreference

Sposta le preferenze di questo dipendente. I turni specificati qui rappresentano i turni a cui il dipendente preferirebbe essere assegnato durante la finestra di programmazione. Gli ID spostamento specificati in shift_preferences devono essere univoci. Il risolutore cercherà di massimizzare la somma dei valori di ShiftPreference.preference su tutti i shift_preferences soddisfatti.

scheduling_constraints[]

SchedulingConstraint

Elenco dei vincoli di pianificazione per questo dipendente. Il livello di priorità predefinito per ciascuno di questi vincoli è PRIORITY_MEDIUM. Per ulteriori dettagli, consulta l'enum Priority.

resource_constraints[]

ResourceConstraint

Eventuali vincoli di pianificazione aggiuntivi non specificati in scheduling_constraints possono essere aggiunti qui a resource_constraints. Un ResourceConstraint è una rappresentazione più astratta per limitare le risorse per un dipendente. Il livello di priorità predefinito per ciascuno di questi vincoli è PRIORITY_MEDIUM. Per ulteriori dettagli, consulta l'enum Priority.

shift_requests[]

ShiftRequest

Elenco di richieste di turni per il dipendente. La richiesta può fare in modo che un dipendente venga assegnato o meno a turni specifici. Qualsiasi assegnazione di pianificazione fissa per il dipendente può essere rappresentata con un elemento ShiftRequest con priorità PRIORITY_MANDATORY. Un ID turno può essere visualizzato al massimo in una richiesta di pianificazione per questo dipendente. Il livello di priorità predefinito per ciascuna di queste richieste è PRIORITY_LOW. Per ulteriori dettagli, consulta l'enum Priority.

hourly_contract

HourlyContract

Contratto che specifica le tariffe orarie regolari e di straordinario del dipendente.

EmployeeDemand

Specifica il numero di dipendenti necessari per coprire la domanda in un intervallo DateTime specificato.

Campi
start_date_time

DateTime

Inizio dell'intervallo di tempo per la domanda specificata (inclusa). Questi valori vengono letti per difetto al minuto; i secondi e tutte le unità più piccole vengono ignorati.

end_date_time

DateTime

Fine dell'intervallo di tempo per la domanda specificata (esclusa). Questi valori vengono letti per difetto al minuto; i secondi e tutte le unità più piccole vengono ignorati.

employee_count

int32

Numero di dipendenti necessari per coprire la domanda per questo intervallo.

EmployeeSchedule

Un elenco ordinato di turni corrispondente a un singolo ShiftTemplate da assegnare a più dipendenti.

Campi
shift_template_id

string

ID del modello utilizzato per generare questo insieme di variazioni.

shifts[]

ShiftWithEvents

Elenco dei turni a cui è assegnato il numero di dipendenti employee_count. I cambiamenti e gli eventi selezionati per la pianificazione sono stati generati da un singolo modello. Le variazioni vengono ordinate in ordine cronologico e non si sovrappongono. Se il valore SolverConfig.multi_day_schedule è true, un giorno libero è rappresentato implicitamente dall'assenza di un turno a partire da quel giorno.

employee_count

int32

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.

Campi
start_date_time

DateTime

Data e ora di inizio del turno. Questo valore viene specificato fino al minuto; non vengono indicati i secondi e le unità più piccole.

end_date_time

DateTime

Data e ora di fine del turno. Questo valore viene specificato fino al minuto; non vengono indicati i secondi e le unità più piccole.

events[]

Event

Elenco degli eventi inclusi in questa modifica, mappati esattamente e nello stesso ordine dei ShiftTemplate.Event. Se SolverConfig.shift_events_can_change è impostato su true, gli orari di inizio e di fine degli eventi potrebbero variare in tutti i ShiftWithEvents di questa programmazione.

Evento

Specifica la data e l'ora di inizio e di fine di un evento specifico in una variazione generata dal risolutore.

Campi
event_template_id

string

ID del modello utilizzato per generare l'evento.

start_date_time

DateTime

Data e ora di inizio dell'evento. Questo valore viene specificato fino al minuto; non vengono indicati i secondi e le unità più piccole.

end_date_time

DateTime

Data e ora di fine dell'evento. Questo valore viene specificato fino al minuto; non vengono indicati i secondi e le unità più piccole.

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.

Campi
id

string

ID univoco di questo modello.

minimum_minutes_after_shift_start

int32

Numero minimo di minuti dopo l'inizio di un turno in cui può iniziare questo evento.

maximum_minutes_after_shift_start

int32

Numero massimo di minuti dopo l'inizio di un turno in cui questo evento può iniziare.

duration_minutes

int32

Durata fissa in minuti di questo evento.

start_time_increment_minutes

int32

L'incremento di tempo (in minuti) utilizzato per generare l'insieme di possibili ore di inizio degli eventi tra il giorno minimum_minutes_after_shift_start e il giorno maximum_minutes_after_shift_start. Ad esempio, se il numero minimo di minuti dopo l'inizio del turno è 30, il numero massimo di minuti dopo l'inizio del turno è 45 e l'incremento dell'ora di inizio è 5 minuti, l'evento può svolgersi 30, 35, 40 o 45 minuti dopo l'inizio del turno.

HourlyContract

Specifica una tariffa oraria di base, differenziali di tariffa e moltiplicatori di straordinari per determinare la retribuzione per un dipendente. Tieni presente che le normative vigenti in luoghi diversi potrebbero richiedere un calcolo diverso dell'indennità per gli straordinari. Il risolutore approssima la retribuzione degli straordinari per ridurre al minimo un proxy del costo totale o soddisfare un budget (vedi BudgetRequirement). Non è inteso come uno strumento per calcolare le buste paga.

Campi
base_hourly_rate

double

Il compenso per il lavoro di un'ora non straordinaria. Se al dipendente si applicano più tariffe, vengono applicate differenze di tariffa rispetto a questa tariffa oraria di base. Inoltre, se sono presenti più tariffe, la tariffa oraria di base deve essere quella minima tra queste.

hourly_rate_shift_differentials

map<string, double>

Il differenziale della tariffa oraria, pagato in aggiunta al base_hourly_rate. Ad esempio, se la tariffa oraria di base è di 30 $/ora, "shift_1" viene pagato a una tariffa di 40 $/ora e "shift_2" viene pagata a una tariffa di 45 $/ora, la rappresentazione del protocollo è: base_hourly_rate: 30 hourly_rate_shift_differentials {key: "shift_1" value: 10} hourly_rate_shift_differentials {key: "shift_2" value: 15}.

overtime_periods[]

OvertimePeriod

Un elenco di tutti i periodi per i quali è necessario calcolare il tempo straordinario. Questi periodi non devono sovrapporsi.

OvertimePeriod

Periodo fisso e ricorrente (in genere 168 ore o sette periodi consecutivi di 24 ore) utilizzato per determinare l'importo della compensazione per gli straordinari. Ogni periodo ha un moltiplicatore degli straordinari (ad es. 1.5) rispetto al base_hourly_rate e a un limite al numero di ore considerate lavorative regolari (non straordinari). Qualsiasi turno che si sovrappone alla finestra di tempo start_date_time (incluso) e end_date_time (escluso) viene conteggiato nel numero totale di ore lavorate nel periodo. Se la sovrapposizione è parziale, vengono conteggiate solo le ore che si sovrappongono.

Campi
overtime_multiplier

double

Moltiplicatore per calcolare la tariffa oraria straordinaria (deve essere maggiore o uguale a 1,0). In genere, la tariffa oraria relativa agli straordinari viene calcolata come base_hourly_rate * overtime_multiplier. Se sono previste più tariffe tramite hourly_rate_shift_differentials, il risolutore approssima la tariffa oraria degli straordinari con una media semplice delle tariffe applicabili durante il periodo di straordinari. Nota: le normative di paesi diversi potrebbero richiedere un calcolo diverso dell'indennità per gli straordinari. Il risolutore approssima la retribuzione degli straordinari per ridurre al minimo un indiretto del costo totale o per soddisfare un budget, ma non è inteso come uno strumento per calcolare le buste paga.

start_date_time

DateTime

Ora di inizio del periodo di tempo straordinario. Se un turno si sovrappone in questo orario, le ore di questo spostamento vengono conteggiate a partire da start_date_time.

end_date_time

DateTime

Ora di fine del periodo di tempo straordinario. Se un turno si sovrappone a questo orario, le ore di questo turno vengono conteggiate fino a end_date_time.

maximum_regular_hours

double

Numero massimo di ore di lavoro pagate con una tariffa regolare (non straordinario). Questa quantità deve essere positiva.

Priorità

Il livello di priorità per qualsiasi vincolo nella pianificazione di un dipendente o nei requisiti di copertura. Sono inclusi SchedulingConstraint, ResourceConstraint, ShiftRequest e CoverageRequirement. Poiché potrebbero esserci vincoli in conflitto, non è sempre possibile soddisfare tutti i vincoli. Di conseguenza, ogni tipo di vincolo ha una priorità (dall'utente o predefinita) che informa il risolutore dell'importanza relativa di tutti i vincoli assegnati a una pianificazione completa.

Enum
PRIORITY_UNSPECIFIED Livello di priorità sconosciuto.
PRIORITY_LOW Il livello di priorità più basso. I vincoli con questa priorità sono meno importanti degli altri. Sono i primi a essere presi in considerazione per violazione se non è possibile trovare una soluzione fattibile.
PRIORITY_MEDIUM Livello di priorità medio. I vincoli con questa priorità sono più importanti dei vincoli con priorità PRIORITY_LOW, ma meno importanti dei vincoli con priorità PRIORITY_HIGH. Se non è possibile trovare una soluzione fattibile dopo aver allentato tutti i vincoli con priorità PRIORITY_LOW, i vincoli con priorità PRIORITY_MEDIUM vengono considerati i successivi per la violazione.
PRIORITY_HIGH Il livello di priorità più alto. I vincoli con questo livello di priorità sono i più importanti. Sono gli ultimi a essere considerati per violazione se non è possibile trovare una soluzione fattibile dopo aver allentato i vincoli dei livelli di priorità inferiori.
PRIORITY_MANDATORY Livello di priorità che rappresenta qualcosa che non può essere violato dal risolutore. Se il risolutore restituisce SolutionStatus.INFEASIBLE, la causa potrebbe essere un numero eccessivo di vincoli PRIORITY_MANDATORY.

ResourceConstraint

Un vincolo generale che limita la quantità di una determinata "risorsa" utilizzata da un dipendente. Si tratta di una versione astratta dello standard SchedulingConstraint più specifico e più flessibile per l'utente. Questo messaggio consente di specificare molti vincoli di pianificazione che non possono essere specificati in SchedulingConstraint.type.

Campi
priority

Priority

Livello di priorità di questo vincolo della risorsa. La priorità predefinita per tutti i vincoli delle risorse è PRIORITY_MEDIUM.

resource_usages

map<string, double>

Quantità di risorse utilizzata dai turni. Ad esempio, se questo vincolo si applica alle ore minime e massime lavorate da un dipendente in una determinata settimana, questa mappa conterrà i turni che si verificano in quella settimana e la durata di ogni turno in ore.

minimum_resource_usage

double

Utilizzo minimo delle risorse per soddisfare un vincolo delle risorse.

maximum_resource_usage

double

Utilizzo massimo delle risorse per soddisfare un vincolo delle risorse.

SchedulingConstraint

Vincolo di pianificazione specifico per un determinato dipendente. Il vincolo specificato viene applicato solo durante l'intervallo [start_date_time, end_date_time) specificato.

Campi
priority

Priority

Livello di priorità per questo vincolo di pianificazione. La priorità predefinita per tutti i vincoli di pianificazione è PRIORITY_MEDIUM.

start_date_time

DateTime

L'ora di inizio in cui viene applicato questo vincolo di pianificazione (inclusa).

end_date_time

DateTime

L'ora di fine in cui viene applicato questo vincolo di pianificazione (esclusa).

Campo unione type. Il tipo di vincolo specificato. Ogni vincolo viene applicato solo entro l'intervallo di tempo specificato sopra. type può essere solo uno dei seguenti:
minimum_minutes

int32

Numero minimo di minuti in cui il dipendente può lavorare. Se al dipendente è assegnato un turno che si sovrappone (totalmente o parzialmente) all'intervallo di tempo, il numero di minuti in cui il turno si sovrappone alla finestra temporale è incluso in questo conteggio.

maximum_minutes

int32

Numero massimo di minuti in cui il dipendente può lavorare nella finestra temporale. Se al dipendente è assegnato un turno che si sovrappone (totalmente o parzialmente) all'intervallo di tempo, il numero di minuti in cui il turno si sovrappone alla finestra temporale è incluso in questo conteggio.

minimum_consecutive_work_days

int32

Numero minimo di giorni consecutivi in cui il dipendente può lavorare. Un dipendente lavora in un giorno specifico se è assegnato a un turno che inizia durante quella giornata. Nel conteggio è incluso qualsiasi turno assegnato al dipendente che inizia nella finestra temporale.

maximum_consecutive_work_days

int32

Numero massimo di giorni consecutivi in cui il dipendente può lavorare. Un dipendente lavora in un giorno specifico se è assegnato a un turno che inizia durante quella giornata. Nel conteggio è incluso qualsiasi turno assegnato al dipendente che inizia nella finestra temporale.

minimum_shift_count

int32

Numero minimo di turni che il dipendente può lavorare. Nel conteggio viene incluso qualsiasi turno assegnato al dipendente che si sovrappone completamente alla finestra temporale.

maximum_shift_count

int32

Numero massimo di turni che il dipendente può lavorare. Nel conteggio viene incluso qualsiasi turno assegnato al dipendente che si sovrappone completamente alla finestra temporale.

minimum_rest_minutes

int32

Numero minimo di minuti in cui il dipendente deve riposare dopo la fine di un turno prima di essere assegnato a un altro turno. Questo vincolo si applica a ogni coppia di adattamenti completamente inclusi in [start_date_time, end_date_time].

Maiusc

Un turno specifica una finestra temporale fissa in cui i dipendenti possono lavorare.

Campi
id

string

ID univoco assegnato a questo spostamento.

location_id

string

ID località in cui è stato applicato questo turno. Può essere vuoto.

start_date_time

DateTime

L'ora di inizio del turno (inclusa).

end_date_time

DateTime

L'ora di fine del turno (esclusa). Attualmente, il risolutore ammette solo turni di durata inferiore a 24 ore.

break_rules[]

BreakRule

Un elenco di regole di interruzione che si verificano durante il turno. Ai dipendenti che svolgono questo turno viene assegnata una pausa ogni break_rule, durante la quale non coprono la domanda per il ruolo che stanno svolgendo. Ogni finestra temporale di BreakRule deve essere completamente inclusa nel periodo di questo turno.

ShiftAssignment

Un dipendente a cui assegnare il ruolo di turno.

Campi
employee_id

string

L'ID dipendente assegnato.

shift_id

string

ID spostamento assegnato al dipendente.

role_id

string

ID ruolo a cui è assegnato il dipendente per il turno.

breaks[]

Break

Elenco delle pause per questo compito di turno.

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.

ShiftPreference

Una preferenza numerica per un determinato ID variazione.

Campi
shift_id

string

ID spostamento per il quale è specificata la preferenza.

preference

int32

Valori di preferenza più alti indicano un cambiamento più desiderabile.

ShiftRequest

La richiesta di un dipendente di essere assegnata o meno a turni specifici.

Campi
priority

Priority

Livello di priorità di questa richiesta di pianificazione. La priorità predefinita per tutte le richieste di pianificazione è PRIORITY_LOW.

shift_ids[]

string

Gli ID delle variazioni della richiesta di pianificazione.

type

WorkStatus

Tipo di richiesta, ad esempio se la richiesta è assegnata o meno all'insieme di turni.

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.

Campi
id

string

ID univoco di questo modello.

earliest_start_time

TimeOfDay

La prima ora del giorno in cui può iniziare un turno. Questo valore viene specificato con le ore e i minuti; i secondi e i nano vengono ignorati.

latest_start_time

TimeOfDay

L'ultima ora della giornata in cui può iniziare un turno. Questo valore viene specificato con le ore e i minuti; i secondi e i nano vengono ignorati. Se questo valore è inferiore a earliest_start_time, la variazione generata da questo modello potrebbe iniziare prima o dopo la mezzanotte.

duration_minutes

int32

Durata fissa di una variazione generata da questo modello.

start_time_increment_minutes

int32

L'incremento di tempo (in minuti) utilizzato per generare l'insieme di possibili ore di inizio comprese tra earliest_start_time e latest_start_time. Ad esempio, se la prima ora di inizio è 8:00, l'ora di inizio più recente è 8:30 e l'incremento dell'ora di inizio è 10 minuti, tutti gli orari di inizio possibili per questo modello di spostamento sono: 8:00, 8:10, 8:20 e 8:30.

days_off_count_per_week

int32

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.

event_templates[]

EventTemplate

Regole per la generazione di eventi per ogni turno. Verrà incluso esattamente un evento in ogni turno per ogni evento specificato.

minimum_interevent_gap_minutes

int32

Numero minimo di minuti tra la fine di un evento e l'inizio di quello successivo.

maximum_employee_count

int32

Numero massimo di dipendenti che può essere assegnato a tutti i turni generati da questo modello.

SolutionStatus

Stato della soluzione (ovvero una pianificazione) fornito nella risposta di un risolutore.

Enum
SOLUTION_STATUS_UNSPECIFIED Stato non specificato per la risposta.
FEASIBLE La pianificazione restituita è fattibile, ma potrebbe non essere ottimale.
OPTIMAL La pianificazione restituita è ottimale.
INFEASIBLE Non esiste alcuna pianificazione fattibile per i vincoli specificati. Il risolutore potrebbe restituire questo valore se non è possibile soddisfare un sottoinsieme dei vincoli con livello di priorità PRIORITY_MANDATORY.
NOT_SOLVED Nessuna pianificazione trovata.
NOT_SOLVED_DEADLINE_EXCEEDED Nessuna pianificazione trovata entro il limite di tempo specificato.

SolveParameters

Parametri che controllano una singola soluzione del problema di pianificazione dei turni.

Campi
time_limit

Duration

Tempo massimo che il risolutore dovrebbe dedicare al problema. Se non viene configurato, il valore predefinito è 1 minuto.

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.

SolverConfig

Specifica parametri aggiuntivi per risolvere il problema relativo alla generazione di adattamenti.

Campi
time_limit

Duration

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 ShiftTemplates, ognuno con circa 20 ore di inizio possibili e si organizzano 2 eventi con circa 30 ore di inizio possibili e due giorni liberi alla settimana, i valori consigliati sono: <10 s per soluzioni rapide (e probabilmente non ottimali), (10, 300 s) per soluzioni di buona qualità e > 300 s per una ricerca esaustiva. Le istanze di grandi dimensioni potrebbero richiedere limiti di tempo più lunghi.

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.

multi_day_schedule

bool

Se true, il risolutore genera EmployeeSchedule che includono diversi turni (ad esempio, per generare una programmazione di una settimana). In caso contrario, ogni EmployeeSchedule include esattamente un turno. Le pianificazioni di più giorni presuppongono che l'ora di inizio del turno sia la stessa nei vari giorni e il numero di giorni liberi in una pianificazione di questo tipo è determinato dai modelli di turno. Il valore predefinito è false.

shift_events_can_change

bool

Se true, i EmployeeSchedule di più giorni possono includere turni in cui l'ora di inizio e di fine degli eventi variano da un giorno all'altro. In caso contrario, tutti i turni di un determinato EmployeeSchedule devono avere l'ora di inizio e di fine dello stesso evento. In entrambi i casi, tutti i turni di una programmazione di più giorni hanno la stessa ora di inizio e di fine. Di conseguenza, questo parametro viene ignorato se multi_day_schedule è falso. L'impostazione di questo parametro su true potrebbe comportare tempi di risoluzione più lunghi. Il valore predefinito è false.

WorkStatus

Che un dipendente lavori o meno.

Enum
WORK_STATUS_UNSPECIFIED Stato del lavoro sconosciuto.
STATUS_WORK Stato che rappresenta un dipendente che lavora.
STATUS_NOT_WORK Stato che rappresenta un dipendente non lavoratore.