Indice
Optimization
(interfaccia)DesignShippingNetworkRequest
(messaggio)DesignShippingNetworkResponse
(messaggio)SolveMathOptModelRequest
(messaggio)SolveMathOptModelResponse
(messaggio)SolveShiftGenerationRequest
(messaggio)SolveShiftGenerationResponse
(messaggio)SolveShiftSchedulingRequest
(messaggio)SolveShiftSchedulingResponse
(messaggio)
Ottimizzazione
Un'API One Platform che espone una serie di risolutori di ottimizzazione per problemi di ricerca operativa di alto livello. MOE:striscia_di_inizio
DesignShippingNetwork |
---|
Risolve il problema di progettazione e pianificazione della rete di spedizione di linea (LSNDSP) dal L'LSNDSP è un complesso problema di ottimizzazione che cerca di trovare la progettazione e la pianificazione ottimali di una rete di spedizione di linea. L'obiettivo è ridurre al minimo il costo totale di gestione della rete e soddisfare il più possibile la domanda di merci tra i porti. L'LSNDSP può essere suddiviso in due sottoproblemi principali: progettazione della rete e pianificazione. Il sottoproblema di progettazione della rete determina l'insieme di porte servite dalla rete, il numero di navi da impiegare su ciascuna rotta e le rotte che dovranno seguire. Il sottoproblema di pianificazione determina gli orari delle navi, tenendo conto del tempo necessario per navigare tra i porti, del tempo necessario per caricare e scaricare le merci e la richiesta di trasporto di merci tra i porti. In parole semplici, l'LSNDSP è il problema di decidere quali porti servire, quante navi usare e come pianificare le navi in modo da ridurre al minimo il costo di gestione della rete e massimizzare al contempo le entrate per soddisfare la domanda di carico. Un sottocomponente complesso dell'LSNDSP è il routing delle merci, che determina quali richieste soddisfare e quali percorsi assegnare alle merci per massimizzare le entrate. |
SolveMathOptModel |
---|
Risolvi il modello di input e restituisce il risultato immediatamente. Da utilizzare quando non hai bisogno di callback, di incrementalità e di monitorare l'avanzamento di una risoluzione. |
SolveShiftGeneration |
---|
Risolve un problema di generazione dei turni da un dato |
SolveShiftScheduling |
---|
Risolve un problema di pianificazione dei turni fisso da un determinato |
DesignShippingNetworkRequest
La richiesta contiene un'istanza dell'LSNDSP e deve contenere un insieme di porte, una serie di candidati per le gambe, una serie di classi di navi e una serie di richieste di prodotti da soddisfare.
Campi | |
---|---|
request_id |
ID problema o richiesta. |
solver_parameters |
Parametri del risolutore. |
ports[] |
Elenco di possibili porte da chiamare nei servizi navale. La richiesta deve contenere solo gli ID delle porte presenti in questo elenco. |
leg_candidates[] |
Elenco di potenziali candidati alla tappa da aggiungere ai servizi navale. La richiesta deve contenere solo gli ID dei candidati alle gambe presenti in questo elenco. |
vessel_classes[] |
Elenco di classi di imbarcazioni per eseguire servizi su imbarcazioni. Nota che tutte le navi della stessa classe sono completamente intercambiabili. La richiesta deve contenere solo gli ID delle classi delle imbarcazioni presenti in questo elenco. |
commodity_demands[] |
Elenco delle potenziali richieste di materie prime (ad es. container) che devono essere soddisfatte dai servizi navale. |
vessel_services[] |
È possibile fornire una rete di servizi navale validi (in genere lo stato attuale della rete) da utilizzare come punto di partenza per l'ottimizzazione. |
DesignShippingNetworkResponse
La risposta contiene la soluzione dell'istanza LSNDSP passata nella richiesta. Contiene una rete valida di servizi navale e percorsi di domanda delle materie prime. La domanda totale di materie prime attraversando ogni tratto non può superare la capacità della classe della nave che gestisce questa tratta. Tieni presente che non disporre di servizi per navi senza domanda soddisfatta è sempre una soluzione fattibile al problema di progettazione e pianificazione della rete di spedizione di linea.
Campi | |
---|---|
request_id |
L'ID della richiesta a cui è associata questa risposta. |
vessel_services[] |
Rete di servizi navale. Per ciascuna classe di navi, il numero totale di navi utilizzate non può superare il numero disponibile di navi per questa classe. |
commodity_demand_paths[] |
Elenco di tutti i percorsi di domanda delle materie prime attraverso cui viene evasa la domanda positiva delle materie prime. Tieni presente che alcuni ID domanda di materie prime potrebbero non essere inclusi se non viene evasa nessuna domanda. In alternativa, la domanda di materie prime può essere parzialmente soddisfatta. Per ogni domanda di materie prime, la quantità totale soddisfatta non può superare la domanda totale. Infine, i percorsi commodity_demand_path dipendono da vessel_services (vedi la definizione di CommodityDemandPath). |
SolveMathOptModelRequest
Richiesta di una risoluzione remota unaria in MathOpt.
Campi | |
---|---|
solver_type |
Campo facoltativo. Tipo di risolutore per risolvere numericamente il problema. Tieni presente che se un risolutore non supporta una funzionalità specifica del modello, la procedura di ottimizzazione non avrà esito positivo. |
model |
Obbligatoria. Una rappresentazione matematica del problema di ottimizzazione da risolvere. |
parameters |
Campo facoltativo. Parametri per controllare una singola risoluzione. Il parametro allow_output viene gestito in modo specifico. Per i risolutori che supportano i callback dei messaggi, se il criterio viene impostato su true, il server registra un callback dei messaggi. I messaggi risultanti verranno restituiti in SolveMathOptModelResponse.messages. Per altri risolutori, impostare abilita_output su true genererà un errore. |
model_parameters |
Campo facoltativo. Parametri per controllare una singola risoluzione specifici del modello di input (consulta SolveParametersProto per i parametri indipendenti dal modello). |
SolveMathOptModelResponse
Risposta per una risoluzione remota unaria in MathOpt.
Campi | |
---|---|
result |
Descrizione dell'output della risoluzione del modello nella richiesta. |
messages[] |
Se è stato utilizzato SolveParametersProto.enable_output, questo conterrà messaggi di log per i risolutori che supportano i callback dei messaggi. |
SolveShiftGenerationRequest
Richiesta per risolvere il problema della generazione dei turni. Le regole per la generazione delle variazioni sono descritte in ogni ShiftTemplate. È possibile generare più variazioni nella risposta da un singolo modello ShiftTemplate. I cambiamenti generati e selezionati dal risolutore devono rispettare le regole delineate in ShiftTemplate e coprire la domanda specificata dei dipendenti.
Campi | |
---|---|
solver_config |
Campo facoltativo. Parametri del risolutore. |
shift_templates[] |
Obbligatoria. Insieme di modelli di turni che specificano le regole per generare i turni. |
employee_demands[] |
Obbligatoria. Domanda totale dei dipendenti che i turni generati da |
SolveShiftGenerationResponse
Risposta per il problema relativo alla generazione di turni. Se il valore solution_status
restituito è SOLVED
, viene restituito un insieme di variazioni valide generate dal risolutore in employee_schedules
. Per una pianificazione dei turni valida, vengono mantenute le seguenti proprietà:
- Ogni variazione generata in
employee_schedules
è 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
maximum_employee_count
di quel modello. - L'insieme di dipendenti assegnati copre la domanda a intervalli specifici.
Campi | |
---|---|
solution_status |
Stato della soluzione restituita. Se |
employee_schedules[] |
Insieme di turni generati dal risolutore insieme al numero di dipendenti assegnati a ciascun programma. |
demand_coverage_violations[] |
Violazioni della copertura della domanda in base al valore |
SolveShiftSchedulingRequest
Richiesta per l'API Workload Programming. La richiesta specifica almeno un insieme di dipendenti, un insieme di turni, un insieme di possibili ruoli che un dipendente può svolgere e una serie di requisiti di copertura. I requisiti di copertura specificano, in un arco di tempo, il numero di dipendenti necessari per ricoprire ciascun ruolo. Ai dipendenti assegnati a un turno viene anche assegnato un (e solo uno) ruolo per quel turno e i dipendenti non possono essere assegnati a due turni sovrapposti. Consulta la SolveShiftSchedulingResponse
di seguito per ulteriori dettagli su ciò che rende valida un'assegnazione basata su turni.
È possibile specificare ulteriori vincoli di pianificazione per ciascun dipendente per limitare ulteriormente il problema. A tutti i vincoli di pianificazione e ai requisiti di copertura viene assegnato un livello di priorità (OBBLIGATORIO, ALTO, MEDIO, BASSO). Tutti i vincoli con livello di priorità PRIORITY_MANDATORY
devono essere soddisfatti dal risolutore. Il risolutore può violare i vincoli con qualsiasi altra priorità, ma queste violazioni vengono ridotte al minimo in ordine di priorità. Consulta l'enumerazione Priority
per ulteriori dettagli su come vengono gestiti i livelli di priorità per ogni vincolo.
Il risolutore cercherà di massimizzare i valori di ShiftPreference.preference
per ogni dipendente rispetto ai vincoli specificati. Il risolutore non violerà un vincolo per soddisfare più preferenze; violerà un vincolo solo se l'assegnazione di pianificazione non è fattibile con i vincoli specificati.
Nota sull'ora: tutti gli orari del problema vengono specificati utilizzando il messaggio DateTime. Questo messaggio include un campo TimeZone. Se non diversamente specificato dall'utente, il fuso orario è UTC. I messaggi DateTime devono essere specificati solo fino ai minuti; tutti i secondi e i nano vengono ignorati.
Campi | |
---|---|
request_id |
ID problema o richiesta. |
solve_parameters |
Parametri per controllare una singola soluzione del problema. |
employees[] |
Tutti i dipendenti disponibili da pianificare. |
shifts[] |
Tutti i turni formano il programma. |
coverage_requirements[] |
Requisiti di copertura per l'intero orizzonte di pianificazione. Queste norme specificano il numero di dipendenti che devono svolgere ciascun ruolo o possedere una competenza, durante una finestra temporale o un elenco di ID turni. Tutti i requisiti di copertura devono essere specificati con finestre temporali o un elenco di ID turni (ma non entrambi). Le finestre temporali (se presenti) per i requisiti di copertura non possono sovrapporsi per ogni località specifica. Il livello di priorità predefinito per ciascuno di questi vincoli è |
role_ids[] |
Elenco di tutti i ruoli possibili nella forza lavoro. Ogni dipendente deve avere almeno un ruolo che può essere assegnato per un turno. Un ruolo si riferisce a uno specifico incarico durante un turno (ad es. infermiere iscritto, dirigente chef, cameriere e così via). Quando un dipendente è assegnato a un turno, viene anche assegnato a un singolo ruolo specifico. |
skill_ids[] |
Elenco di tutte le possibili competenze nella forza lavoro. Una competenza si riferisce a qualifiche aggiuntive che un dipendente può avere e che non riguardano un lavoro specifico assegnabile (ad esempio, certificazioni, lingue parlate e così via). Questo elenco può essere vuoto. Quando un dipendente viene assegnato a un turno, deve soddisfare tutte le competenze necessarie per quel turno. |
location_ids[] |
Elenco di tutte le posizioni possibili per l'insieme di turni nella programmazione. Questo elenco può essere vuoto. Specificare luoghi diversi può essere utile quando, ad esempio, un direttore infermieristico vuole pianificare molti infermieri in unità diverse dell'ospedale o, per un altro esempio, un direttore di hotel vuole programmare dipendenti in più hotel. |
budget_requirements[] |
Specifica del budget per il problema di pianificazione. Il livello di priorità predefinito per ciascuno di questi requisiti è |
assignments_hint[] |
Sposta le assegnazioni da usare come soluzione provvisoria (ovvero suggerimento per soluzione) al problema di pianificazione. I suggerimenti per i compiti vengono ignorati se il compito è in contraddizione con un turno non assegnabile o una richiesta di pianificazione. |
SolveShiftSchedulingResponse
Risposta per l'API forza lavoro di pianificazione. Per ogni risposta, shift_assignments
sarà vuoto se il valore solution_status
restituito è NOT_SOLVED_DEADLINE_EXCEEDED
o INFEASIBLE
. Se il valore solution_status
restituito è OPTIMAL
o FEASIBLE
, viene restituito un compito valido in shift_assignments
. Per un'assegnazione di turni valida, vengono mantenute le seguenti proprietà:
- Ogni ID dipendente è contenuto nell'insieme di dipendenti indicato nella richiesta.
- Ogni ID ruolo assegnato al dipendente è contenuto nella serie di ID ruolo del dipendente specificato.
- Ogni ID variazione è contenuto nell'insieme di variazioni specificato nella richiesta.
- Ogni ID turno non è uno degli ID turno non assegnabili per un determinato dipendente.
- A un dipendente non verranno mai assegnati due turni che si sovrappongono.
- Per la pianificazione specificata, non viene violata nessuna delle limitazioni o delle richieste con livello di priorità
PRIORITY_MANDATORY
.
Campi | |
---|---|
request_id |
L'ID della richiesta a cui è associata questa risposta. |
solution_status |
Stato della soluzione restituita. Se la soluzione non è FATTIBILE o OTTIMA, gli altri campi di questo protocollo potrebbero essere vuoti. Se lo stato è NOT_SOLVED_DEADLINE_EXCEEDED, il limite di tempo è stato raggiunto senza trovare una soluzione fattibile o senza determinare se esiste una soluzione fattibile. Le richieste potrebbero non essere fattibili se i vincoli del livello di priorità OBBLIGATORIO non possono essere soddisfatti. |
shift_assignments[] |
Elenco di tutti i compiti. Ogni |
status_message |
Se |