Method: shipping.designShippingNetwork

Résout le problème de conception et de planification du réseau d'expédition linéaire (LSNDSP) pour le DesignShippingNetworkRequest donné.

Le LSNDSP est un problème d'optimisation complexe qui vise à optimiser la conception et la planification d'un réseau de transport de lignes. L'objectif est de réduire le coût total d'exploitation du réseau, tout en répondant autant que possible à la demande de fret entre les ports.

Le LSNDSP peut être divisé en deux sous-problèmes principaux: la conception du réseau et la planification. Le sous-problème de conception du réseau détermine l'ensemble des ports que le réseau doit desservir, le nombre de navires à déployer sur chaque route et les routes qu'ils emprunteront. Le sous-problème de planification détermine les horaires de navigation des navires, en tenant compte du temps nécessaire pour naviguer entre les ports, du temps nécessaire pour charger et décharger le fret, et de la demande en transport de fret entre les ports.

En d'autres termes, la tâche du LSNDSP concerne les ports à desservir, le nombre de navires à emprunter et la planification des navires pour minimiser les coûts d'exploitation du réseau tout en optimisant les revenus pour répondre à la demande de fret. Le routage des marchandises est un sous-composant complexe du LSNDSP. Il détermine les demandes à satisfaire et les itinéraires à attribuer au fret afin d'optimiser les revenus.

Requête HTTP

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

L'URL utilise la syntaxe de transcodage gRPC.

Corps de la requête

Le corps de la requête contient des données présentant la structure suivante :

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

string

Identifiant du problème ou de la demande.

solverParameters

object (SolverParameters)

Paramètres du résolveur.

ports[]

object (Port)

Liste des ports pouvant être appelés dans les services de navire. La requête ne doit contenir que des ID de port figurant dans cette liste.

legCandidates[]

object (LegCandidate)

Liste des étapes potentiellement candidates à ajouter aux services du navire. La demande ne doit contenir que des ID de candidats d'étape figurant dans cette liste.

vesselClasses[]

object (VesselClass)

Liste des classes de navires pour exécuter les services des navires. Notez que tous les récipients d'une même classe sont complètement interchangeables. La requête ne doit contenir que les ID de classe de bateau figurant dans cette liste.

commodityDemands[]

object (CommodityDemand)

Liste des demandes potentielles en produits (conteneurs) que les services de navire doivent satisfaire.

vesselServices[]

object (VesselService)

Un réseau de services de navire valides (généralement l'état actuel du réseau) peut être fourni comme point de départ de l'optimisation.

Corps de la réponse

La réponse contient la solution dans l'instance LSNDSP transmise dans la requête. Il contient un réseau valide de services de navire et de chemins de demande de marchandises. La demande totale de produits pour chaque étape ne peut pas dépasser la capacité de la classe de navire desservant cette section. Notez que l'absence de services de navire sans réponse à la demande constitue toujours une solution réalisable au problème de conception et de planification du réseau d'expédition des lignes.

Si la requête aboutit, le corps de la réponse contient des données qui ont la structure suivante :

Représentation JSON
{
  "requestId": string,
  "vesselServices": [
    {
      object (VesselService)
    }
  ],
  "commodityDemandPaths": [
    {
      object (CommodityDemandPath)
    }
  ]
}
Champs
requestId

string

ID de la requête à laquelle cette réponse est associée.

vesselServices[]

object (VesselService)

Réseau de services de navires. Pour chaque classe de navire, le nombre total de navires utilisés ne peut pas dépasser le nombre disponible de navires de cette classe.

commodityDemandPaths[]

object (CommodityDemandPath)

Liste de tous les chemins de demande de marchandises par lesquels une demande positive en produits est acheminée. Notez que certains ID de demande de produits peuvent ne pas être inclus si aucune demande n'est expédiée. Il est également possible de satisfaire partiellement une demande de produits. Pour chaque demande de produits, la quantité totale traitée ne peut pas dépasser la demande totale. Enfin, commodityDemandPaths dépend de vesselServices (voir la définition de CommodityDemandPath).

SolverParameters

Paramètres qui contrôlent une seule résolution du LSNDSP.

Représentation JSON
{
  "timeLimit": string
}
Champs
timeLimit

string (Duration format)

Temps maximal que le résolveur doit consacrer au problème. Cette valeur n'est pas une limite stricte et ne tient pas compte de la surcharge de communication. La latence attendue pour résoudre le problème peut légèrement dépasser cette valeur.

Durée en secondes avec un maximum de neuf chiffres après la virgule, se terminant par "s". Exemple: "3.5s".

Port

Port (par exemple, un terminal ou tous les terminaux d'un port).

Représentation JSON
{
  "id": string,
  "minimumPortStayDuration": {
    object (Duration)
  },
  "minimumTransshipmentDuration": {
    object (Duration)
  },
  "transshipmentCost": number,
  "vesselClassCosts": {
    string: {
      object (VesselCost)
    },
    ...
  }
}
Champs
id

string

Identifiant unique attribué à ce port.

minimumPortStayDuration

object (Duration)

Durée minimale du séjour pour un appel de port. La plupart des études supposent une constante, car les ports assignent généralement plus de grues à des navires plus grands avec un grand nombre de mouvements, car ils prennent plus de place.

minimumTransshipmentDuration

object (Duration)

Durée minimale d'un transfert sur un port donné, y compris la durée nécessaire pour décharger un conteneur et le recharger sur un autre navire.

transshipmentCost

number

Coût du transport d'un conteneur. Le montant est généralement inférieur au chargement et à la déchargement, car le transport ne nécessite pas de formalités douanières au port.

vesselClassCosts

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

Frais encourus lors de l'appel de ce port, mappés selon l'ID de classe du navire. Une classe de navire ne peut appeler ce port que s'il possède une entrée sur cette carte.

Objet contenant une liste de paires "key": value. Exemple : { "name": "wrench", "mass": "1.3kg", "count": "3" }.

Durée

Une durée (séjour dans un port/transport, transit à la demande) est définie sur une base horaire.

Représentation JSON
{
  "hours": string
}
Champs
hours

string (int64 format)

Nombre d'heures définissant la durée.

VesselCost

Le coût des appels et du séjour dans ce port est défini comme une fonction linéaire de la durée du séjour (fixedCost + hourlyCost * heures).

Représentation JSON
{
  "fixedCost": number,
  "hourlyCost": number
}
Champs
fixedCost

number

Coût fixe pour l'appel de ce port.

hourlyCost

number

Coût horaire de la séjour dans ce port.

LegCandidate

Candidature pour une étape de service du navire. Il peut y avoir plusieurs étapes candidates entre les mêmes ports, par exemple pour différentes routes océaniques et/ou vitesses des navires.

Représentation JSON
{
  "id": string,
  "departurePortId": string,
  "arrivalPortId": string,
  "duration": {
    object (Duration)
  },
  "vesselClassCosts": {
    string: number,
    ...
  }
}
Champs
id

string

Identifiant unique attribué à ce candidat pour l'étape.

departurePortId

string

Identifiant du port de départ.

arrivalPortId

string

Identifiant du port d'arrivée.

duration

object (Duration)

Durée de l'étape.

vesselClassCosts

map (key: string, value: number)

Coût pour attribuer cette étape candidate à une certaine classe de navire. Cela peut inclure les coûts d'exploitation des navires, du bunker et de l'affrètement. Une classe de navire ne peut passer cette étape que s'il possède une entrée sur cette carte.

Objet contenant une liste de paires "key": value. Exemple : { "name": "wrench", "mass": "1.3kg", "count": "3" }.

VesselClass

Classe du bateau, c'est-à-dire un groupe de navires partageant les mêmes propriétés. Il n'existe aucun moyen de différencier deux vaisseaux de la même classe.

Représentation JSON
{
  "id": string,
  "containerCapacity": string,
  "vesselCount": string
}
Champs
id

string

Identifiant unique attribué à cette classe de navire.

containerCapacity

string (int64 format)

Capacité de la classe du bateau (en conteneurs).

vesselCount

string (int64 format)

Nombre de navires dans cette classe de navire.

CommodityDemand

La demande de produits, c'est-à-dire une demande potentielle à satisfaire par un transporteur.

Représentation JSON
{
  "id": string,
  "originPortId": string,
  "destinationPortId": string,
  "containerCount": string,
  "freightRate": number,
  "maximumTransitDuration": {
    object (Duration)
  }
}
Champs
id

string

ID unique attribué à cette demande de produits.

originPortId

string

ID du port d'origine.

destinationPortId

string

ID du port de destination.

containerCount

string (int64 format)

Nombre maximal de conteneurs à traiter.

freightRate

number

Taux de fret par conteneur (qui peut inclure une pénalité en cas de demande non satisfaite) Cela devrait supprimer les coûts de chargement et de décharge par conteneur à l'origine et à la destination.

maximumTransitDuration

object (Duration)

Durée maximale de transit (si elle est définie, elle doit être strictement positive). Le délai d'acheminement est défini entre le moment où le premier navire qui répond à la demande quitte le port d'origine et le moment où le dernier navire desservant cette demande arrive au port de destination.

VesselService

Service Vessel qui peut être utilisé pour répondre à la demande en marchandises. IMPORTANT: Selon l'hypothèse actuelle, les services utilisent une fréquence hebdomadaire et la durée de séjour sur le port ne peut pas dépasser une semaine. Prenons l'exemple suivant de tronçons de service du navire: vesselServiceLegs { legCandidateId: "0->1" originureTime {} destinationArrivalTime { day: 3 hourOfDay: 12 } } vesselServiceLegs { legServiceLegs { legCandidateId: "1->0" origin DepartureTime { day: 4 } destination CandidateTime { day: 4 } destinationArrivalTime { day: 4 } destination arrivée

Représentation JSON
{
  "vesselClassId": string,
  "vesselServiceLegs": [
    {
      object (VesselServiceLeg)
    }
  ]
}
Champs
vesselClassId

string

ID de la classe du navire effectuant le service.

vesselServiceLegs[]

object (VesselServiceLeg)

Pour un service de navire valide, les propriétés suivantes sont acceptées: 1. Ce champ est obligatoire. 2. L'ID de destination (destinationPortId) et l'ID de départ (originPortId) pour les étapes suivantes doivent correspondre (y compris pour la dernière étape et la première).

VesselServiceLeg

Un seul tronçon d'un service de navire.

Représentation JSON
{
  "legCandidateId": string,
  "originDepartureTime": {
    object (ScheduleTime)
  },
  "destinationArrivalTime": {
    object (ScheduleTime)
  }
}
Champs
legCandidateId

string

ID de candidat pour l'étape attribué.

originDepartureTime

object (ScheduleTime)

Heure de départ au port d'origine, aux horaires hebdomadaires.

destinationArrivalTime

object (ScheduleTime)

Heure d'arrivée au port de destination selon la programmation hebdomadaire.

ScheduleTime

Une heure de planification (empart du navire/à la demande/arrivées) est définie sur une fréquence hebdomadaire à une heure donnée.

Représentation JSON
{
  "day": string,
  "hourOfDay": integer
}
Champs
day

string (int64 format)

Jour dans le planning. Le jour 0 est le premier jour possible.

hourOfDay

integer

L'heure de la journée doit être un nombre entier compris entre 0 et 23 inclus.

CommodityDemandPath

les différents services et ports utilisés par une fraction d'une demande donnée. Les indices utilisés ci-dessous sont basés sur l'ordre des services du navire dans la réponse et l'ordre des tronçons de service dans chaque service.

Représentation JSON
{
  "commodityDemandId": string,
  "containerCount": string,
  "vesselServiceLegIds": [
    {
      object (VesselServiceLegId)
    }
  ]
}
Champs
commodityDemandId

string

ID de la demande de produits traité.

containerCount

string (int64 format)

Nombre de conteneurs empruntant ce chemin. Pour chaque demande de produits, la quantité totale traitée ne peut pas dépasser la demande totale.

vesselServiceLegIds[]

object (VesselServiceLegId)

Liste des ID des sections de service des navires empruntés par ce chemin. Pour un chemin de demande de marchandises valide, les propriétés suivantes sont acceptées: 1. L'identifiant departurePortId de la première étape doit correspondre à l'identifiant originPortId de la demande de produits. 2. L'ID de destination de la dernière étape doit correspondre à l'ID de destination (PortId) de la demande de produits. 3. Les valeurs arrivalPortId et departurePortId des tronçons consécutifs doivent correspondre. 4. Si cette valeur est fournie pour cette demande de produits, le délai d'acheminement maximum doit être supérieur ou égal à la durée totale du chemin.

VesselServiceLegId

Section de service à navire unique utilisée dans le chemin de demande de marchandises. Par exemple, imaginons qu'il existe deux services de navire. Le premier se compose de trois pieds (indexés 0, 1 et 2) et des deux autres (indexés 0 et 1). En outre, la première section du premier service arrive au port de départ de la deuxième section du second. Un chemin d'accès aux produits composé des trois identifiants d'étape du service des navires suivants: {vesselServiceIndex: 0, vesselServiceLegIndex: 2} {vesselServiceIndex: 0, vesselServiceLegIndex: 0} {vesselServiceIndex: 1, vesselServiceIndex: 1} signifie que les conteneurs prennent chacune deux étapes consécutives (un service de deux étapes consécutives et le premier service à un

Représentation JSON
{
  "vesselServiceIndex": integer,
  "vesselServiceLegIndex": integer
}
Champs
vesselServiceIndex

integer

Index du service du navire.

vesselServiceLegIndex

integer

Index de la section du service du navire indexé par vesselServiceIndex.