Method: shipping.designShippingNetwork

Risolve il problema LSNDSP (Liner shipping Network Design andScheduleing) per DesignShippingNetworkRequest specificato.

L'LSNDSP è un complesso problema di ottimizzazione che cerca di trovare la progettazione e la pianificazione ottimali per una rete di spedizioni di linea. L'obiettivo è ridurre al minimo il costo totale di gestione della rete, soddisfacendo al contempo il maggior numero possibile di carichi di lavoro tra i porti.

L'LSNDSP può essere suddivisa in due principali sottoproblemi: progettazione e pianificazione della rete. Il sottoproblema di progettazione della rete determina l'insieme di porte servite dalla rete, il numero di navi impiegate su ciascuna rotta e le rotte che le navi seguiranno. Il sottoproblema di pianificazione determina gli orari di navigazione delle navi, tenendo conto del tempo necessario per navigare tra i porti, il tempo necessario per caricare e scaricare le merci e la domanda di trasporto merci tra i porti.

In parole semplici, l'LSNDSP si occupa di decidere quali porte servire, quante navi utilizzare e come pianificare le navi in modo che il costo di gestione della rete sia ridotto al minimo, massimizzando al contempo le entrate per soddisfare la domanda di merci. Un sottocomponente impegnativo dell'LSNDSP è il percorso delle merci, che determina quali richieste soddisfare e quali rotte assegnare alle merci per massimizzare le entrate.

Richiesta HTTP

POST https://optimization.googleapis.com/v1/shipping:designShippingNetwork

L'URL utilizza la sintassi di transcodifica gRPC.

Corpo della richiesta

Il corpo della richiesta contiene dati con la seguente struttura:

Rappresentazione JSON
{
  "requestId": string,
  "solverParameters": {
    object (SolverParameters)
  },
  "ports": [
    {
      object (Port)
    }
  ],
  "legCandidates": [
    {
      object (LegCandidate)
    }
  ],
  "vesselClasses": [
    {
      object (VesselClass)
    }
  ],
  "commodityDemands": [
    {
      object (CommodityDemand)
    }
  ],
  "vesselServices": [
    {
      object (VesselService)
    }
  ]
}
Campi
requestId

string

Problema o ID richiesta.

solverParameters

object (SolverParameters)

Parametri per il risolutore.

ports[]

object (Port)

Elenco di possibili porte da chiamare nei servizi navi. La richiesta deve contenere solo gli ID porta presenti in questo elenco.

legCandidates[]

object (LegCandidate)

Elenco di potenziali candidati gambe da aggiungere ai servizi imbarcazioni. La richiesta deve contenere solo gli ID candidati gamba presenti in questo elenco.

vesselClasses[]

object (VesselClass)

Elenco di classi di imbarcazioni per fornire servizi di imbarcazioni. Tieni presente che tutte le navi della stessa classe sono completamente intercambiabili. La richiesta deve contenere solo gli ID classe nave presenti in questo elenco.

commodityDemands[]

object (CommodityDemand)

Elenco delle richieste di potenziali materie prime (ad es. container) che i servizi navi devono soddisfare.

vesselServices[]

object (VesselService)

È possibile fornire una rete di servizi navale validi (in genere, lo stato attuale della rete) da utilizzare come punto di partenza per l'ottimizzazione.

Corpo della risposta

La risposta contiene la soluzione all'istanza LSNDSP passata nella richiesta. Contiene una rete valida di servizi navali e percorsi di domanda delle materie prime. La domanda totale di materie prime per ogni tratto non può superare la capacità della classe di imbarcazioni che serve questo tratto. Tieni presente che non avere servizi navali senza domanda soddisfatta è sempre una soluzione fattibile al problema di progettazione e pianificazione della rete di spedizione di linea.

In caso di esito positivo, il corpo della risposta contiene dati con la seguente struttura:

Rappresentazione JSON
{
  "requestId": string,
  "vesselServices": [
    {
      object (VesselService)
    }
  ],
  "commodityDemandPaths": [
    {
      object (CommodityDemandPath)
    }
  ]
}
Campi
requestId

string

L'ID della richiesta a cui è associata questa risposta.

vesselServices[]

object (VesselService)

Rete di servizi navali. Per ciascuna classe di imbarcazioni, il numero totale di imbarcazioni utilizzate non può superare il numero disponibile di imbarcazioni per questa classe.

commodityDemandPaths[]

object (CommodityDemandPath)

Elenco di tutti i percorsi di domanda di materie prime attraverso cui viene distribuita la domanda di materie prime positiva. Tieni presente che alcuni ID domanda delle materie prime potrebbero non essere inclusi se non viene spedita alcuna domanda. In alternativa, la domanda di prodotti può essere parzialmente soddisfatta. Per ogni domanda di merci, la quantità totale soddisfatta non può superare la domanda totale. Infine, commodityDemandPaths dipende da vesselServices (consulta la definizione di CommodityDemandPath).

SolverParameters

Parametri che controllano una singola risoluzione dell'LSNDSP.

Rappresentazione JSON
{
  "timeLimit": string
}
Campi
timeLimit

string (Duration format)

Tempo massimo che il risolutore deve dedicare al problema. Questo valore non è un limite fisso e non tiene conto del sovraccarico di comunicazione. La latenza prevista per risolvere il problema potrebbe superare leggermente questo valore.

Una durata in secondi con un massimo di nove cifre frazionarie, che termina con "s". Esempio: "3.5s".

Porta

Porta, ad esempio un terminale o tutti i terminali di una porta.

Rappresentazione JSON
{
  "id": string,
  "minimumPortStayDuration": {
    object (Duration)
  },
  "minimumTransshipmentDuration": {
    object (Duration)
  },
  "transshipmentCost": number,
  "vesselClassCosts": {
    string: {
      object (VesselCost)
    },
    ...
  }
}
Campi
id

string

ID univoco assegnato a questa porta.

minimumPortStayDuration

object (Duration)

Durata minima del soggiorno per una chiamata di trasferimento. La maggior parte degli studi presuppone che sia costante, poiché i porti assegnano in genere più gru alle imbarcazioni più grandi con un numero di movimentazione elevato, poiché occupano più spazio.

minimumTransshipmentDuration

object (Duration)

Durata minima di un trasbordo in un determinato porto, compresa la durata dello scarico di un container e del ricaricamento su un'altra nave.

transshipmentCost

number

Costo della transcodifica di un container. Di solito è inferiore alla somma delle operazioni di carico e scarico poiché la spedizione non richiede le pratiche doganali in porto.

vesselClassCosts

map (key: string, value: object (VesselCost))

Costi sostenuti per le chiamate a questa porta mappati dall'ID classe nave. Una classe imbarcazione può chiamare questa porta solo se dispone di una voce in questa mappa.

Un oggetto contenente un elenco di "key": value coppie. Esempio: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

Durata

Una durata (soggiorno/trasporto, domanda di transito) è definita con granularità oraria.

Rappresentazione JSON
{
  "hours": string
}
Campi
hours

string (int64 format)

Numero di ore che definiscono la durata.

VesselCost

Il costo della nave per fare chiamate e soggiornare in questo porto è definito come una funzione lineare della durata del soggiorno (fixedCost + hourlyCost * ore).

Rappresentazione JSON
{
  "fixedCost": number,
  "hourlyCost": number
}
Campi
fixedCost

number

Costo fisso delle chiamate a questa porta.

hourlyCost

number

Costo orario per soggiornare in questo porto.

LegCandidate

Candidato tratto di servizio nave. Possono esserci diversi tratti di percorso tra le stesse due porte, ad esempio per rappresentare diverse rotte oceaniche e/o velocità delle imbarcazioni.

Rappresentazione JSON
{
  "id": string,
  "departurePortId": string,
  "arrivalPortId": string,
  "duration": {
    object (Duration)
  },
  "vesselClassCosts": {
    string: number,
    ...
  }
}
Campi
id

string

ID univoco assegnato a questo candidato della gamba.

departurePortId

string

ID della porta di partenza.

arrivalPortId

string

ID della porta di arrivo.

duration

object (Duration)

Durata della gamba.

vesselClassCosts

map (key: string, value: number)

Costo per l'assegnazione di questo candidato della gamba a una determinata classe di imbarcazioni. Possono essere inclusi i costi di gestione delle imbarcazioni, i costi del bunker e il costo del noleggio. Una classe di imbarcazioni può salpare per questo candidato della tratta solo se dispone di una voce in questa mappa.

Un oggetto contenente un elenco di "key": value coppie. Esempio: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

VesselClass

Classe dei imbarcazioni, ovvero un gruppo di imbarcazioni che condividono le stesse proprietà. Non è possibile distinguere due imbarcazioni dalla stessa classe.

Rappresentazione JSON
{
  "id": string,
  "containerCapacity": string,
  "vesselCount": string
}
Campi
id

string

ID univoco assegnato a questa classe imbarcazione.

containerCapacity

string (int64 format)

Capacità della classe della nave (in container).

vesselCount

string (int64 format)

Numero di imbarcazioni in questa classe.

CommodityDemand

Domanda di materie prime, ovvero una potenziale domanda che un corriere deve soddisfare.

Rappresentazione JSON
{
  "id": string,
  "originPortId": string,
  "destinationPortId": string,
  "containerCount": string,
  "freightRate": number,
  "maximumTransitDuration": {
    object (Duration)
  }
}
Campi
id

string

ID univoco assegnato a questa domanda dei prodotti.

originPortId

string

ID della porta di origine.

destinationPortId

string

ID della porta di destinazione.

containerCount

string (int64 format)

Numero massimo di container da soddisfare.

freightRate

number

Tariffa di trasporto per container (che potrebbe includere una penalità per la domanda non soddisfatta). Deve rimuovere il costo di caricamento e scarico per container all'origine e a destinazione.

maximumTransitDuration

object (Duration)

Durata di transito massima (se impostata, deve essere strettamente positiva). Il tempo di transito è definito dal momento in cui la prima nave che soddisfa questa domanda lascia il porto di origine al momento in cui l'ultima nave che serve questa domanda arriva al porto di destinazione.

VesselService

Servizio navale che può essere utilizzato per soddisfare la domanda delle materie prime. IMPORTANTE: attualmente si presume che i servizi abbiano una frequenza settimanale e che i tempi di soggiorno non possano superare una settimana. Prendi in considerazione la seguente sequenza di tratti di servizio delle imbarcazioni: vesselServiceLegs { legCandidateId: "0->1" originDepartureTime {} destinationArrivalTime { day: 3 hourOfDay: 12 } } vesselServiceLegs { legCandidateId: "1->0" originDepartureTime { day: 4 }destinationlTimeOf { day: ArrivalTimeOf andando a port.

Rappresentazione JSON
{
  "vesselClassId": string,
  "vesselServiceLegs": [
    {
      object (VesselServiceLeg)
    }
  ]
}
Campi
vesselClassId

string

ID classe nave che esegue il servizio.

vesselServiceLegs[]

object (VesselServiceLeg)

Per un servizio navale valido, valgono le seguenti proprietà: 1. Non può essere vuoto. 2. Il valore destinationPortId e originPortId di tratti consecutivi devono corrispondere (compresi l'ultimo e il primo elemento).

VesselServiceLeg

Un'unica tratta di un servizio navale.

Rappresentazione JSON
{
  "legCandidateId": string,
  "originDepartureTime": {
    object (ScheduleTime)
  },
  "destinationArrivalTime": {
    object (ScheduleTime)
  }
}
Campi
legCandidateId

string

ID candidato gamba assegnata.

originDepartureTime

object (ScheduleTime)

L'orario di partenza al porto di origine secondo l'orario settimanale.

destinationArrivalTime

object (ScheduleTime)

Ora di arrivo al porto di destinazione nell'orario settimanale.

ScheduleTime

Un orario di arrivo (natante/partenza/arrivi della domanda) viene definito con una frequenza settimanale di una determinata ora.

Rappresentazione JSON
{
  "day": string,
  "hourOfDay": integer
}
Campi
day

string (int64 format)

Il giorno in programma. Il giorno 0 è il primo giorno possibile.

hourOfDay

integer

L'ora del giorno dell'ora pianificata deve essere un numero intero compreso tra 0 e 23 inclusi.

CommodityDemandPath

I diversi servizi e porte utilizzati da una frazione di una determinata domanda di merci. Gli indici utilizzati di seguito si basano sull'ordine dei servizi imbarcazioni nella risposta e su quello dei rami di servizio nei singoli servizi imbarcazioni.

Rappresentazione JSON
{
  "commodityDemandId": string,
  "containerCount": string,
  "vesselServiceLegIds": [
    {
      object (VesselServiceLegId)
    }
  ]
}
Campi
commodityDemandId

string

ID domanda delle merci soddisfatto.

containerCount

string (int64 format)

Numero di container che attraversano questo percorso. Per ogni domanda di merci, la quantità totale soddisfatta non può superare la domanda totale.

vesselServiceLegIds[]

object (VesselServiceLegId)

Elenco degli ID parte del servizio navale seguiti da questo percorso. Per un percorso di domanda delle merci valido, valgono le seguenti proprietà: 1. Il valore destinationPortId della prima tappa deve corrispondere a originPortId della domanda delle merci. 2. Il valore destinationPortId dell'ultimo tratto deve corrispondere a destinationPortId della domanda delle merci. 3. revenuePortId e holidayPortId di tratti consecutivi devono corrispondere. 4. Se previsto per questa domanda di merci, il tempo di transito massimo deve essere maggiore o uguale alla durata totale del percorso.

VesselServiceLegId

Tratto di servizio con imbarcazione singola utilizzato in un percorso di domanda delle merci. Ad esempio, considera che ci sono due servizi imbarcazioni. La prima è composta da tre zampe (valore indicizzato con 0, 1 e 2) e la seconda da due gambe (valore indicizzato 0 e 1). Inoltre, la prima tratta del primo servizio arriva al porto di partenza della seconda tratta del secondo servizio. Un percorso delle merci composto dai tre seguenti ID tratto di servizio navale: {vesselServiceIndex: 0, vesselServiceLegIndex: 2} {vesselServiceLegIndex: 2} {vesselServiceIndex: 0, vesselServiceLegIndex: 0} {vesselServiceIndex: 1, vesselServiceLegIndex: 1} indica che i container prendono un servizio di prima linea consecutiva

Rappresentazione JSON
{
  "vesselServiceIndex": integer,
  "vesselServiceLegIndex": integer
}
Campi
vesselServiceIndex

integer

Indice del servizio navale.

vesselServiceLegIndex

integer

Indice del tratto del servizio navale indicizzato da vesselServiceIndex.