Method: shipping.designShippingNetwork

Soluciona el problema de diseño y programación de la red de envío de transporte (LSNDSP) a partir de un DesignShippingNetworkRequest determinado.

El LSNDSP es un problema de optimización complejo que busca encontrar el diseño y la programación óptimos de una red de transporte de transporte. El objetivo es minimizar el costo total de operación de la red, al mismo tiempo que se satisface la mayor cantidad de demanda de carga entre puertos como sea posible.

El LSNDSP puede dividirse en dos subproblemas principales: diseño y programación de la red. El subproblema de diseño de la red determina el conjunto de puertos a los que debe prestar servicio la red, la cantidad de embarcaciones que deben desplegarse en cada ruta y las rutas que tomarán las embarcaciones. El subproblema de programación determina los horarios de navegación de las embarcaciones, teniendo en cuenta el tiempo que se tarda en navegar entre los puertos, el tiempo que se tarda en cargar y descargar la carga, y la demanda de transporte de carga entre los puertos.

En palabras simples, el LSNDSP es el problema de decidir qué puertos atender, cuántos barcos usar y cómo programar los barcos para que se minimice el costo de operación de la red y se maximicen los ingresos para satisfacer la demanda de carga. Un subcomponente desafiante del LSNDSP es el enrutamiento de cargas, que determina qué demandas satisfacer y qué rutas asignar a la carga para maximizar los ingresos.

Solicitud HTTP

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

La URL usa la sintaxis de la transcodificación gRPC.

Cuerpo de la solicitud

El cuerpo de la solicitud contiene datos con la siguiente estructura:

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

string

ID de solicitud o problema.

solverParameters

object (SolverParameters)

Parámetros para la resolución

ports[]

object (Port)

Lista de posibles puertos a los que se llamará en los servicios de embarcaciones. La solicitud solo debe contener los IDs de puerto que figuran en esta lista.

legCandidates[]

object (LegCandidate)

Lista de posibles candidatos para la etapa correspondiente a los servicios de embarcaciones. La solicitud solo debe contener los IDs de candidatos de etapa que se encuentren en esta lista.

vesselClasses[]

object (VesselClass)

Lista de clases de embarcaciones para realizar servicios de embarcaciones. Ten en cuenta que todas las embarcaciones de la misma clase son completamente intercambiables. La solicitud solo debe contener los IDs de clase de embarcación que se encuentran en esta lista.

commodityDemands[]

object (CommodityDemand)

Lista de posibles demandas de productos básicos (es decir, contenedores) que los servicios de embarcaciones deben satisfacer.

vesselServices[]

object (VesselService)

Se puede proporcionar una red de servicios de embarcaciones válidos (por lo general, el estado actual de la red) para utilizarla como punto de partida para la optimización.

Cuerpo de la respuesta

La respuesta contiene la solución a la instancia LSNDSP que se pasó en la solicitud. Contiene una red válida de servicios de embarcaciones y rutas de demanda de materias primas. La demanda total de productos básicos que atraviesa cada segmento no puede exceder la capacidad de la clase de embarcación que sirve para este segmento. Ten en cuenta que no tener servicios de embarcaciones ni satisfacer la demanda es siempre una solución factible al problema de diseño y programación de la red de envío de transporte de transporte.

Si se ejecuta correctamente, el cuerpo de la respuesta contendrá datos con la siguiente estructura:

Representación JSON
{
  "requestId": string,
  "vesselServices": [
    {
      object (VesselService)
    }
  ],
  "commodityDemandPaths": [
    {
      object (CommodityDemandPath)
    }
  ]
}
Campos
requestId

string

El ID de la solicitud con la que se asocia esta respuesta.

vesselServices[]

object (VesselService)

Red de servicios marítimos. Para cada clase, la cantidad total de embarcaciones utilizadas no puede superar la cantidad disponible de embarcaciones para esta clase.

commodityDemandPaths[]

object (CommodityDemandPath)

Lista de todas las rutas de demanda de productos básicos a través de las cuales se envía una demanda positiva de productos básicos. Ten en cuenta que es posible que algunos IDs de demanda de productos básicos no se incluyan si no se envía demanda. Como alternativa, la demanda de materias primas puede satisfacerse parcialmente. Para cada demanda de materias primas, la cantidad total entregada no puede superar la demanda total. Por último, commodityDemandPaths depende de barcoServices (consulte la definición de CommodityDemandPath).

SolverParameters

Son parámetros que controlan una resolución única de LSNDSP.

Representación JSON
{
  "timeLimit": string
}
Campos
timeLimit

string (Duration format)

Tiempo máximo que el agente de resolución debería dedicar al problema. Este valor no es un límite estricto y no tiene en cuenta la sobrecarga de comunicación. Es posible que la latencia esperada para resolver el problema exceda un poco este valor.

Una duración en segundos con hasta nueve dígitos decimales, que terminan en “s”. Ejemplo: "3.5s".

Puerto

Puerto, p.ej., una terminal o todas las terminales de un puerto.

Representación JSON
{
  "id": string,
  "minimumPortStayDuration": {
    object (Duration)
  },
  "minimumTransshipmentDuration": {
    object (Duration)
  },
  "transshipmentCost": number,
  "vesselClassCosts": {
    string: {
      object (VesselCost)
    },
    ...
  }
}
Campos
id

string

Es el ID único asignado a este puerto.

minimumPortStayDuration

object (Duration)

Es la duración mínima de la estadía para una llamada de puerto. La mayoría de los estudios se mantienen constantes, ya que suelen asignar más grúas a las embarcaciones más grandes con una alta cantidad de movimientos, ya que ocupan más espacio.

minimumTransshipmentDuration

object (Duration)

Duración mínima de un transbordo en un puerto determinado, incluida la duración de la descarga de un contenedor y su carga en otra embarcación.

transshipmentCost

number

Costo del transenvío de un contenedor. Por lo general, será inferior a la suma de carga y descarga, ya que el transbordo no requiere papeleo de aduana en el puerto.

vesselClassCosts

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

Costos generados al llamar a este puerto asignados por el ID de clase de la embarcación. Una clase de embarcación solo puede llamar a este puerto si tiene una entrada en este mapa.

Es un objeto que contiene una lista de pares "key": value. Ejemplo: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

Duración

La duración (estadía o transporte desde el puerto, o transporte público en función de la demanda) se define en un nivel de detalle por hora.

Representación JSON
{
  "hours": string
}
Campos
hours

string (int64 format)

Cantidad de horas que definen la duración.

VesselCost

El costo del buque por llamar y permanecer en este puerto se define como una función lineal de la duración de la estadía (fixedCost + hourlyCost * horas).

Representación JSON
{
  "fixedCost": number,
  "hourlyCost": number
}
Campos
fixedCost

number

Costo fijo para llamar a este puerto.

hourlyCost

number

Costo por hora de estadía en este puerto.

LegCandidate

Candidato para el tramo de servicio en buques. Puede haber varios candidatos de etapa entre los mismos dos puertos, p.ej., que representen diferentes rutas oceánicas o velocidades de las embarcaciones.

Representación JSON
{
  "id": string,
  "departurePortId": string,
  "arrivalPortId": string,
  "duration": {
    object (Duration)
  },
  "vesselClassCosts": {
    string: number,
    ...
  }
}
Campos
id

string

ID único asignado a este candidato del segmento.

departurePortId

string

ID del puerto de salida.

arrivalPortId

string

ID del puerto de llegada.

duration

object (Duration)

Duración de la pierna.

vesselClassCosts

map (key: string, value: number)

Costo por asignar esta variante de tramo a una clase determinada de embarcación. Esto puede incluir el costo operativo de la embarcación, el costo del búnker y el costo del chárter. Una clase de embarcación solo puede navegar por este tramo candidato si tiene una entrada en este mapa.

Es un objeto que contiene una lista de pares "key": value. Ejemplo: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

VesselClass

Clase del buque, es decir, un grupo de embarcaciones que comparten las mismas propiedades. No hay forma de diferenciar entre dos embarcaciones de la misma clase.

Representación JSON
{
  "id": string,
  "containerCapacity": string,
  "vesselCount": string
}
Campos
id

string

Es un ID único asignado a esta clase de embarcación.

containerCapacity

string (int64 format)

Capacidad de la clase del depósito (en contenedores).

vesselCount

string (int64 format)

Cantidad de embarcaciones en esta clase de embarcaciones.

CommodityDemand

Demanda de productos básicos, es decir, una demanda potencial que debe satisfacer un transportista.

Representación JSON
{
  "id": string,
  "originPortId": string,
  "destinationPortId": string,
  "containerCount": string,
  "freightRate": number,
  "maximumTransitDuration": {
    object (Duration)
  }
}
Campos
id

string

Es el ID único asignado a esta demanda de productos básicos.

originPortId

string

ID del puerto de origen.

destinationPortId

string

Es el ID del puerto de destino.

containerCount

string (int64 format)

Cantidad máxima de contenedores que se entregarán.

freightRate

number

Es la tarifa de flete por contenedor (que podría incluir una sanción por la demanda no satisfecha). Debería quitar el costo de carga y descarga por contenedor en el origen y el destino.

maximumTransitDuration

object (Duration)

Duración máxima en tránsito (si se establece, debe ser estrictamente positiva). El tiempo en tránsito se define desde el momento en que la primera embarcación que entrega esta demanda sale del puerto de origen hasta el momento en que la última embarcación que entrega esta demanda llega al puerto de destino.

VesselService

Servicio de embarcaciones que puede usarse para atender la demanda de materias primas. IMPORTANTE: Actualmente, se supone que los servicios tienen una frecuencia semanal y que los tiempos de estadía del puerto no pueden exceder una semana. Considera la siguiente secuencia de tramos de servicio de la embarcación: barcoServiceLegs { legCandidateId: "0->1" originDepartureTime {} destinationArrivalTime { day: 3 hourOfDay: 12 } } vesselServiceLegs { legCandidateId: "1->0" originDepartureTime { day: 4 } destinationArrivalTime { day: 7 hourOfDay: 12 } } Estos tramos definen líneas de servicio de una semana que pasan por dos puertos con tiempos de estadía del puerto de 12 horas.

Representación JSON
{
  "vesselClassId": string,
  "vesselServiceLegs": [
    {
      object (VesselServiceLeg)
    }
  ]
}
Campos
vesselClassId

string

Es el ID de la clase del buque que realiza el servicio.

vesselServiceLegs[]

object (VesselServiceLeg)

Para un servicio de transporte marítimo válido, se cumplen las siguientes propiedades: 1. No puede estar vacío. 2. Etapas consecutivos destinationPortId y originPortId deben coincidir (incluso para el último segmento y el primer segmento).

VesselServiceLeg

Una sola etapa de un servicio de embarcaciones.

Representación JSON
{
  "legCandidateId": string,
  "originDepartureTime": {
    object (ScheduleTime)
  },
  "destinationArrivalTime": {
    object (ScheduleTime)
  }
}
Campos
legCandidateId

string

Se asignó el ID de candidato de etapa.

originDepartureTime

object (ScheduleTime)

Hora de salida en el puerto de origen según el horario semanal.

destinationArrivalTime

object (ScheduleTime)

Hora de llegada al puerto de destino en el horario semanal.

ScheduleTime

Un horario programado (salida/llegadas de buques/demandas) se define en una frecuencia semanal en una hora determinada.

Representación JSON
{
  "day": string,
  "hourOfDay": integer
}
Campos
day

string (int64 format)

Día programado. El día 0 es el primer día posible.

hourOfDay

integer

La hora del día de la hora programada debe ser un número entero entre 0 y 23, ambos incluidos.

CommodityDemandPath

Son los diferentes servicios y puertos que recibe una fracción de la demanda de un producto básico. Los índices que se utilizan a continuación se basan en el orden de los servicios de embarcaciones en la respuesta y el orden de los tramos de servicio en los servicios de embarcaciones individuales.

Representación JSON
{
  "commodityDemandId": string,
  "containerCount": string,
  "vesselServiceLegIds": [
    {
      object (VesselServiceLegId)
    }
  ]
}
Campos
commodityDemandId

string

ID de demanda de productos básicos completado.

containerCount

string (int64 format)

Cantidad de contenedores que pasan por esta ruta. Para cada demanda de materias primas, la cantidad total entregada no puede superar la demanda total.

vesselServiceLegIds[]

object (VesselServiceLegId)

Lista de los IDs de los tramos de servicio de la embarcación que se toman por esta ruta. Para una ruta válida de demanda de materias primas, las siguientes propiedades cumplen con lo siguiente: 1. El valor de departurePortId del primer segmento debe coincidir con originPortId de la demanda de productos básicos. 2. El destinationPortId del último segmento debe coincidir con el valor destinationPortId de la demanda de productos básicos. 3. Etapas consecutivos Los valores de startPortId y departurePortId deben coincidir. 4. Si se proporciona para esta demanda de productos básicos, el tiempo máximo en tránsito debe ser mayor o igual que la duración total de la ruta.

VesselServiceLegId

Tramo de servicio de una sola embarcación usado en una ruta de demanda de materias primas. Por ejemplo, considera que existen dos servicios de embarcaciones. El primero está compuesto por tres segmentos (0, 1 y 2 indexados) y los dos segundos (0 y 1 indexados). Además, la primera etapa del primer servicio llega al puerto de salida de la segunda etapa del segundo servicio. Una ruta de productos básicos que consta de los tres siguientes IDs de tramos de servicio de embarcaciones: {vesselServiceIndex: 0, recipientServiceLegIndex: 2} {vesselServiceIndex: 0, recipientServiceLegIndex: 0} {vesselServiceIndex: 1, recipientServiceLegIndex: 1} significa que los contenedores de servicio de embarcaciones toman 2 tramos de servicio consecutivo 1 a cada buque 0 en el ciclo de 1 de cada servicio.

Representación JSON
{
  "vesselServiceIndex": integer,
  "vesselServiceLegIndex": integer
}
Campos
vesselServiceIndex

integer

Índice del servicio de embarcaciones.

vesselServiceLegIndex

integer

Índice del tramo del servicio de embarcaciones indexado por vesselServiceIndex.