Method: shipping.designShippingNetwork

Löst das Problem bezüglich des Entwurfs und der Planung des Liner Shipping Network (LSNDSP) anhand der angegebenen DesignShippingNetworkRequest.

Das LSNDSP ist ein komplexes Optimierungsproblem, das darauf abzielt, das optimale Design und die optimale Planung für ein Linienschiffnetzwerk zu finden. Ziel ist es, die Gesamtkosten für den Betrieb des Netzes zu minimieren und gleichzeitig den Frachtbedarf zwischen den Häfen so weit wie möglich zu decken.

Das LSNDSP kann in zwei Hauptunterprobleme unterteilt werden: Netzwerkdesign und Planung. Das Teilproblem beim Netzwerkdesign bestimmt die Gruppe der Ports, die vom Netzwerk bedient werden, die Anzahl der auf jeder Route zu setzenden Schiffe und die Routen, die die Schiffe nehmen werden. Durch das Teilproblem werden die Fahrpläne für die Schiffe festgelegt. Dabei werden die Fahrtzeit zwischen den Häfen, die Zeit zum Be- und Entladen der Fracht sowie die Nachfrage nach Gütertransport zwischen den Häfen berücksichtigt.

Mit einfachen Worten: Bei der LSNDSP geht es darum, zu entscheiden, welche Ports bedient werden, wie viele Schiffe zu nutzen sind und wie die Schiffe geplant werden, damit die Betriebskosten minimiert und gleichzeitig der Umsatz für die Befriedigung der Frachtnachfrage maximiert wird. Eine schwierige Unterkomponente des LSNDSP ist die Frachtroute. Sie bestimmt, welche Anforderungen erfüllt und welche Routen der Fracht zugewiesen werden müssen, um den Umsatz zu maximieren.

HTTP-Anfrage

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

Die URL verwendet die Syntax der gRPC-Transcodierung.

Anfragetext

Der Anfragetext enthält Daten mit folgender Struktur:

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

string

Problem- oder Anfrage-ID.

solverParameters

object (SolverParameters)

Parameter für den Solver.

ports[]

object (Port)

Liste der möglichen Ports, die in Schiffsdiensten aufgerufen werden können. Die Anfrage darf nur Port-IDs aus dieser Liste enthalten.

legCandidates[]

object (LegCandidate)

Liste der möglichen Streckenabschnitte, die in den Schiffsverkehr aufgenommen werden können. Die Anfrage darf nur Streckenkandidat-IDs enthalten, die in dieser Liste enthalten sind.

vesselClasses[]

object (VesselClass)

Liste der Schiffsklassen, die Dienstleistungen für Schiffe ausführen Beachte, dass alle Schiffe derselben Klasse vollständig austauschbar sind. Die Anfrage darf nur Schiffsklassen-IDs enthalten, die in dieser Liste enthalten sind.

commodityDemands[]

object (CommodityDemand)

Liste der potenziellen Güteranforderungen (z.B. Containeranforderungen), die von Schiffsdiensten gedeckt werden müssen.

vesselServices[]

object (VesselService)

Es kann ein Netzwerk gültiger Schiffsdienste (in der Regel der aktuelle Status des Netzwerks) als Ausgangspunkt für die Optimierung bereitgestellt werden.

Antworttext

Die Antwort enthält die Lösung für die in der Anfrage übergebene LSNDSP-Instanz. Sie umfasst ein gültiges Netz aus Schiffsdiensten und Güternachfragepfaden. Die gesamte Güternachfrage durch die einzelnen Streckenabschnitte darf die Kapazität der Schiffsklasse, die diesen Streckenabschnitt bedient, nicht überschreiten. Es ist immer eine praktikable Lösung für das Design und die Planung von Linienversandnetzen, wenn keine Schiffsdienste ohne gedeckte Nachfrage verfügbar sind.

Bei Erfolg enthält der Antworttext Daten mit der folgenden Struktur:

JSON-Darstellung
{
  "requestId": string,
  "vesselServices": [
    {
      object (VesselService)
    }
  ],
  "commodityDemandPaths": [
    {
      object (CommodityDemandPath)
    }
  ]
}
Felder
requestId

string

Die ID der Anfrage, der diese Antwort zugeordnet ist.

vesselServices[]

object (VesselService)

Netzwerk von Schiffsdiensten Die Gesamtzahl der verwendeten Schiffe darf die für diese Klasse verfügbare Anzahl nicht überschreiten.

commodityDemandPaths[]

object (CommodityDemandPath)

Liste aller Warennachfragepfade, über die die positive Warennachfrage versendet wird. Beachten Sie, dass einige Nachfrage-IDs für Waren möglicherweise nicht enthalten sind, wenn keine Nachfrage versendet wird. Alternativ kann eine Warennachfrage teilweise gedeckt werden. Für jede Warenachfrage darf die gesamte erfüllte Menge die Gesamtnachfrage nicht übersteigen. Schließlich hängen commodityDemandPaths von vesselServices ab (siehe CommodityDemandPath-Definition).

SolverParameters

Parameter, die eine einzelne Lösung des LSNDSP steuern.

JSON-Darstellung
{
  "timeLimit": string
}
Felder
timeLimit

string (Duration format)

Maximale Zeit, die der Rechner mit der Aufgabe verbringen sollte. Dieser Wert ist kein fester Grenzwert und berücksichtigt nicht den Kommunikationsaufwand. Die erwartete Latenz zur Behebung des Problems kann diesen Wert geringfügig überschreiten.

Die Dauer in Sekunden mit bis zu neun Nachkommastellen und am Ende mit "s". Beispiel: "3.5s".

Port

Port, z.B. oder alle Anschlüsse eines Ports.

JSON-Darstellung
{
  "id": string,
  "minimumPortStayDuration": {
    object (Duration)
  },
  "minimumTransshipmentDuration": {
    object (Duration)
  },
  "transshipmentCost": number,
  "vesselClassCosts": {
    string: {
      object (VesselCost)
    },
    ...
  }
}
Felder
id

string

Eindeutige ID, die diesem Anschluss zugewiesen ist.

minimumPortStayDuration

object (Duration)

Mindestaufenthaltsdauer für einen Portaufruf. In den meisten Studien wird von einem konstanten Wert ausgegangen, da in den Häfen größeren Schiffen mit hoher Bewegungsanzahl in der Regel mehr Kräne zugewiesen werden, da diese mehr Platz beanspruchen.

minimumTransshipmentDuration

object (Duration)

Mindestdauer eines Umschlags an einem bestimmten Hafen, einschließlich der Dauer, um einen Container zu entladen und in ein anderes Schiff aufzuladen.

transshipmentCost

number

Kosten für das Transshipping eines Containers. Dieser ist in der Regel niedriger als die Summe von Be- und Entladung, da für den Transportvorgang keine Zolldokumente am Hafen erforderlich sind.

vesselClassCosts

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

Kosten, die beim Aufrufen dieses Ports anfallen, der nach der Schiffsklassen-ID zugeordnet ist. Eine Schiffsklasse kann diesen Port nur aufrufen, wenn sie einen Eintrag in dieser Karte hat.

Ein Objekt, das eine Liste von "key": value-Paaren enthält. Beispiel: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

Dauer

Eine Dauer (Portaufenthalt/Transport, Nachfrageverkehr) wird auf stündlicher Ebene definiert.

JSON-Darstellung
{
  "hours": string
}
Felder
hours

string (int64 format)

Anzahl der Stunden, durch die die Dauer definiert wird.

VesselCost

Die Schiffskosten für den Aufruf und den Aufenthalt an diesem Anschluss sind als lineare Funktion der Aufenthaltsdauer (fixedCost + hourlyCost * Stunden) definiert.

JSON-Darstellung
{
  "fixedCost": number,
  "hourlyCost": number
}
Felder
fixedCost

number

Feste Kosten für das Aufrufen dieses Anschlusses.

hourlyCost

number

Kosten pro Stunde für den Aufenthalt an diesem Anschluss.

LegCandidate

Kandidaten für Serviceabschnitte. Zwischen denselben Ports können mehrere Etappenkandidaten vorhanden sein, z.B. für verschiedene Meeresrouten und/oder Schiffsgeschwindigkeiten.

JSON-Darstellung
{
  "id": string,
  "departurePortId": string,
  "arrivalPortId": string,
  "duration": {
    object (Duration)
  },
  "vesselClassCosts": {
    string: number,
    ...
  }
}
Felder
id

string

Eindeutige ID, die diesem Streckenabschnitt zugewiesen ist.

departurePortId

string

ID des Abreisehafens.

arrivalPortId

string

ID des Ankunftshafens.

duration

object (Duration)

Dauer des Abschnitts.

vesselClassCosts

map (key: string, value: number)

Kosten für die Zuweisung dieses Streckenkandidats zu einer bestimmten Schiffsklasse. Dazu können die Betriebskosten der Schiffe, die Bunkerkosten und die Charterkosten gehören. Eine Schiffsklasse kann nur dann durch diesen Streckenabschnitt segeln, wenn es einen Eintrag in dieser Karte gibt.

Ein Objekt, das eine Liste von "key": value-Paaren enthält. Beispiel: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

VesselClass

Schiffsklasse, d.h. eine Gruppe von Schiffen mit denselben Eigenschaften. Es gibt keine Möglichkeit, zwischen zwei Gefäßen derselben Klasse zu unterscheiden.

JSON-Darstellung
{
  "id": string,
  "containerCapacity": string,
  "vesselCount": string
}
Felder
id

string

Eindeutige ID, die dieser Schiffsklasse zugewiesen ist.

containerCapacity

string (int64 format)

Kapazität der Schiffsklasse (in Containern).

vesselCount

string (int64 format)

Anzahl der Schiffe in dieser Schiffsklasse.

CommodityDemand

Warennachfrage, d.h. eine potenzielle Nachfrage, die von einem Versandunternehmen gedeckt werden soll.

JSON-Darstellung
{
  "id": string,
  "originPortId": string,
  "destinationPortId": string,
  "containerCount": string,
  "freightRate": number,
  "maximumTransitDuration": {
    object (Duration)
  }
}
Felder
id

string

Eindeutige ID, die dieser Warennachfrage zugewiesen ist.

originPortId

string

ID des Ursprungsports.

destinationPortId

string

ID des Zielports.

containerCount

string (int64 format)

Maximale Anzahl von Containern, die erfüllt werden sollen.

freightRate

number

Frachtpreis pro Container (kann eine Strafe für nicht erfüllte Nachfrage enthalten). Die Kosten für das Verladen und Entladen pro Container am Start- und Zielort sollten entfallen.

maximumTransitDuration

object (Duration)

Maximale Transitdauer (falls festgelegt, sollte stark positiv sein). Die Laufzeit wird definiert von dem Zeitpunkt, an dem das erste für diese Anforderung bediente Boot den Starthafen verlässt, bis zu dem Zeitpunkt, an dem das letzte Schiff, das diese Anforderung bedient, am Zielhafen ankommt.

VesselService

Schiffsverkehr, der zur Befriedigung der Ware genutzt werden kann. WICHTIG: Derzeit wird davon ausgegangen, dass die Dienste wöchentlich stattfinden und die Portaufenthaltszeiten eine Woche nicht überschreiten. Sehen Sie sich die folgende Abfolge von Serviceabschnitten an: vesselServiceLegs { legCandidateId: "0->1" originDepartureTime {} destinationArrivalTime { day: 3 hourOfDay: 12 } } vesselServiceLegs { legCandidateId: "1->0" originDepartureTime { day: 4 } destinationArrivalTime { day: 7 hourOfDay: 12 } } Diese Streckenabschnitte definieren eine einwöchige Linien, die durch zwei Häfen verlaufen, wobei beide Ports jeweils 12 Stunden halten.

JSON-Darstellung
{
  "vesselClassId": string,
  "vesselServiceLegs": [
    {
      object (VesselServiceLeg)
    }
  ]
}
Felder
vesselClassId

string

ID der Schiffsklasse, die den Dienst ausführt.

vesselServiceLegs[]

object (VesselServiceLeg)

Für einen gültigen Schiffsverkehr gelten folgende Eigenschaften: 1. Das Feld darf nicht leer sein. 2. Aufeinanderfolgende Beine „destinationPortId“ und „originPortId“ müssen übereinstimmen (auch für den letzten und den ersten Abschnitt).

VesselServiceLeg

Ein einzelner Abschnitt eines Schiffsverkehrs.

JSON-Darstellung
{
  "legCandidateId": string,
  "originDepartureTime": {
    object (ScheduleTime)
  },
  "destinationArrivalTime": {
    object (ScheduleTime)
  }
}
Felder
legCandidateId

string

Zugewiesene Streckenkandidaten-ID.

originDepartureTime

object (ScheduleTime)

Abfahrtszeit am Starthafen im Wochenfahrplan.

destinationArrivalTime

object (ScheduleTime)

Zeitpunkt der Ankunft am Zielhafen im Wochenfahrplan.

ScheduleTime

Eine Fahrplanzeit (Abfahrt/Ankunft des Schiffes/Nachfrage/Ankunft) wird wöchentlich zu einer bestimmten Stunde definiert.

JSON-Darstellung
{
  "day": string,
  "hourOfDay": integer
}
Felder
day

string (int64 format)

Tag im Zeitplan. Tag 0 ist der erste mögliche Tag.

hourOfDay

integer

Die Tageszeit der geplanten Zeit muss eine Ganzzahl zwischen 0 und 23 sein.

CommodityDemandPath

Die verschiedenen Dienste und Ports, die ein Bruchteil einer bestimmten Rohstoffnachfrage beansprucht. Die unten verwendeten Indizes basieren auf der Reihenfolge der Dienstabschnitte in der Antwort und der einzelnen Serviceabschnitte auf den einzelnen Schiffen.

JSON-Darstellung
{
  "commodityDemandId": string,
  "containerCount": string,
  "vesselServiceLegIds": [
    {
      object (VesselServiceLegId)
    }
  ]
}
Felder
commodityDemandId

string

Warennachfrage-ID erfüllt.

containerCount

string (int64 format)

Anzahl der Container, die diesen Pfad durchlaufen. Für jede Warenachfrage darf die gesamte erfüllte Menge die Gesamtnachfrage nicht übersteigen.

vesselServiceLegIds[]

object (VesselServiceLegId)

Liste der Routen-IDs für Schiffsdienste, die über diesen Pfad genommen wurden. Für einen gültigen Pfad für die Rohstoffnachfrage gelten folgende Properties: 1. Die departurePortId des ersten Abschnitts muss mit der originPortId der Warennachfrage übereinstimmen. 2. Die "destinationPortId" des letzten Abschnitts muss mit der "destinationPortId" der Warennachfrage übereinstimmen. 3. Aufeinanderfolgende Beine „AnkunftPortID“ und „AbflugportID“ müssen übereinstimmen. 4. Wenn für diese Warennachfrage angegeben, sollte die maximale Laufzeit größer oder gleich der Gesamtdauer des Pfads sein.

VesselServiceLegId

Serviceabschnitt eines einzelnen Schiffs, der in einem Warennachfragepfad verwendet wird. Angenommen, es gibt zwei Schiffsdienste. Der erste besteht aus drei Beinen (indexiert 0, 1 und 2) und den zweiten beiden (indexiert 0 und 1). Außerdem kommt der erste Abschnitt des ersten Streckenabschnitts am Starthafen des zweiten Abschnitts an. Ein Warenkorbpfad besteht aus den drei folgenden Service-Strecken-IDs von Schiffen: {vesselServiceIndex: 0, vesselServiceLegIndex: 2} {vesselServiceIndex: 0, vesselServiceLegIndex: 0} {vesselServiceIndex: 1, vesselServiceLegIndex: 1} bedeutet, dass zwischen zwei aufeinanderfolgenden Schiffen zwischen einem Schiff und einem Schiff vom ersten Schiff und jeweils einem Schiff ein Zwischenschiff und jeweils ein Schiff von einem Schiff zu einem Schiff besteht

JSON-Darstellung
{
  "vesselServiceIndex": integer,
  "vesselServiceLegIndex": integer
}
Felder
vesselServiceIndex

integer

Index des Schiffsverkehrs.

vesselServiceLegIndex

integer

Index des Abschnitts des Schiffsverkehrs, indexiert durch vesselServiceIndex.