Method: shipping.designShippingNetwork

Damit wird das Design and Scheduling Problem (LSNDSP) für das Linienversandnetzwerk aus der gegebenen DesignShippingNetworkRequest gelöst.

Bei der LSNDSP handelt es sich um ein komplexes Optimierungsproblem, bei dem der optimale Entwurf und die optimale Planung eines Linienversandnetzwerks ermittelt werden soll. Ziel ist es, die Gesamtkosten für den Netzbetrieb zu minimieren und gleichzeitig einen möglichst hohen Frachtbedarf zwischen den Häfen zu decken.

Der LSNDSP lässt sich in zwei Hauptunterprobleme unterteilen: Netzwerkdesign und Planung. Das Teilproblem bezüglich des Netzwerkdesigns bestimmt die Gruppe der Ports, die vom Netzwerk bedient werden, die Anzahl der Schiffe, die auf jeder Route eingesetzt werden sollen, und die Routen, die die Schiffe nehmen werden. Das Teilproblem „Planung“ bestimmt die Fahrpläne für die Schiffe und berücksichtigt dabei die Zeit, die für das Booten zwischen den Häfen benötigt wird, die Zeit für das Be- und Entladen der Fracht und die Nachfrage nach Frachttransport zwischen Häfen.

Einfach ausgedrückt ist die LSNDSP das Problem der Entscheidung, welche Ports bedient und wie viele Schiffe verwendet und wie die Schiffe geplant werden sollen, damit die Betriebskosten des Netzwerks minimiert und gleichzeitig der Umsatz für die Befriedigung der Frachtnachfrage maximiert wird. Eine schwierige Teilkomponente der LSNDSP ist die Routenplanung, die bestimmt, welche Anforderungen erfüllt und welche Routen der Fracht zugewiesen werden, 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 Häfen, die bei Schiffsservices aufgerufen werden können. Die Anfrage darf nur Port-IDs enthalten, die in dieser Liste enthalten sind.

legCandidates[]

object (LegCandidate)

Liste möglicher Abschnittskandidaten, die in die Schiffsabfertigung aufgenommen werden sollen. Die Anfrage darf nur Streckenkandidat-IDs enthalten, die in dieser Liste enthalten sind.

vesselClasses[]

object (VesselClass)

Liste der Schiffsklassen für Dienstleistungen von Schiffen. Beachte, dass alle Gefäße derselben Klasse vollständig austauschbar sind. Der Antrag darf nur Schiffsklassen-IDs enthalten, die in dieser Liste enthalten sind.

commodityDemands[]

object (CommodityDemand)

Liste der potenziellen Waren- (z.B. Container-)Anforderungen, die mit Schiffsservices erfüllt werden sollen.

vesselServices[]

object (VesselService)

Als Ausgangspunkt für die Optimierung kann ein Netz gültiger Schiffsabfertigungen (normalerweise der aktuelle Zustand des Netzwerks) bereitgestellt werden.

Antworttext

Die Antwort enthält die Lösung für die LSNDSP-Instanz, die in der Anfrage übergeben wurde. Sie umfasst ein gültiges Netz von Schiffsservices und Warennachfragepfaden. Der gesamte Warenbedarf für einen Abschnitt darf die Kapazität der Schiffsklasse für diesen Streckenabschnitt nicht überschreiten. Es ist immer eine praktikable Lösung für das Design- und Planungsproblem des Linienversandnetzwerks, keine Schiffe ohne gefüllte Nachfrage zu haben.

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, mit der diese Antwort verknüpft ist.

vesselServices[]

object (VesselService)

Netz von Schiffstransfers. Die Gesamtzahl der verwendeten Schiffe pro Schiffsklasse darf die verfügbare Anzahl von Schiffen in dieser Klasse nicht überschreiten.

commodityDemandPaths[]

object (CommodityDemandPath)

Liste aller Warennachfragepfade, über die positive Warennachfrage generiert wird. Beachten Sie, dass einige Nachfrage-IDs nicht angegeben werden, wenn keine Nachfrage versendet wird. Alternativ kann die Nachfrage nach Gütern teilweise gedeckt werden. Für jede Warennachfrage darf die insgesamt erfüllte Menge die Gesamtnachfrage nicht überschreiten. Schließlich hängen commodityDemandPaths von vesselServices ab (siehe Definition für CommodityDemandPath).

SolverParameters

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

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

string (Duration format)

Die maximale Zeit, die der Matherechner für das Problem aufwenden sollte. Dieser Wert ist kein festes Limit und berücksichtigt nicht den Kommunikationsaufwand. Die erwartete Latenz zur Lösung des Problems kann diesen Wert leicht überschreiten.

Eine Dauer in Sekunden mit bis zu neun Nachkommastellen, die auf „s“ endet. Beispiel: "3.5s".

Port

Port, z.B. ein Terminal oder alle Terminals 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 davon ausgegangen, dass sie konstant sind, da größere Schiffe mit hoher Bewegungszahl in der Regel mehr Krane mit mehr Platz in Anspruch nehmen.

minimumTransshipmentDuration

object (Duration)

Die Mindestdauer einer Umladung an einem bestimmten Hafen, einschließlich der Dauer für das Entladen eines Containers und das Umladen auf ein anderes Schiff.

transshipmentCost

number

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

vesselClassCosts

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

Kosten, die beim Aufrufen dieses nach Schiffsklassen-ID kartierten Hafens anfallen. Eine Schiffsklasse kann diesen Hafen nur aufrufen, wenn er in dieser Karte einen Eintrag hat.

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

Dauer

Die Dauer (Hafenaufenthalt/Umladung, Nachfrageverkehr) wird stündlich definiert.

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

string (int64 format)

Anzahl der Stunden, für die die Dauer definiert wird.

VesselCost

Die Kosten für Fahrten und Aufenthalte an diesem Hafen sind als lineare Funktion der Aufenthaltsdauer definiert (fixedCost + hourlyCost × Stunden).

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

number

Feste Kosten für den Aufruf dieses Ports.

hourlyCost

number

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

LegCandidate

Kandidat für Schiffsabfertigungsebene. Zwischen den beiden Häfen können mehrere Streckenabschnitte bestehen, die zum Beispiel unterschiedliche Routen und/oder Schiffsgeschwindigkeiten darstellen.

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

string

Eindeutige ID, die diesem Beinkandidaten zugewiesen ist.

departurePortId

string

ID des Abflughafens.

arrivalPortId

string

ID des Ankunftsports.

duration

object (Duration)

Dauer des Streckenabschnitts.

vesselClassCosts

map (key: string, value: number)

Kosten für die Zuweisung dieses Streckenkandidats zu einer bestimmten Schiffsklasse. Dazu gehören Betriebskosten für Schiffe, Bunkerkosten und Charterkosten. Eine Schiffsklasse kann nur dann durch diesen Streckenkandidat segeln, wenn er 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" }.

VesselClass

Klasse, d.h. eine Gruppe von Schiffen mit identischen Eigenschaften. Es gibt keine Möglichkeit, zwischen zwei Gefäßen aus 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 Gefäßklasse.

CommodityDemand

Warennachfrage, d.h. eine potenzielle Nachfrage, die von einem Transportunternehmen erfüllt werden muss.

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 der Container, die erfüllt werden sollen.

freightRate

number

Frachtpreis pro Container (kann zu Strafen für nicht erfüllte Nachfrage führen) Dadurch sollten keine Kosten für das Be- und Entladen pro Container am Ausgangs- und Zielort anfallen.

maximumTransitDuration

object (Duration)

Maximale Laufzeit (falls festgelegt, sollte der Wert strisch positiv sein). Die Laufzeit ist von dem Zeitpunkt definiert, an dem das erste Schiff, mit dem diese Nachfrage bedient wird, den Starthafen verlässt, bis das letzte Schiff, das diese Nachfrage bedient, den Zielhafen erreicht.

VesselService

Schiffsservice zur Belieferung von Gütern. WICHTIG: Derzeit wird davon ausgegangen, dass die Dienste wöchentlich stattfinden und die Portaufenthaltezeit eine Woche nicht überschreiten darf. Betrachten Sie die folgende Abfolge der Streckenabschnitte des Schiffsverkehrs: vesselServiceLegs { legCandidateId: "0->1" originDepartureTime {}destinationArrivalTime { day: 3 hourOfDay: 12 } } vesselServiceLegs { legCandidateId: "1->0" origin 1->0" abseits: 1-> 0" origine 1 - 1 Abfahrtszeit {day: 4 hour } "destinationArrivalTime" {day: 4 hour } port 1

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 Schiffsservice gelten folgende Eigenschaften: 1. Es darf nicht leer sein. 2. Die aufeinanderfolgenden Abschnitte "destinationPortId" und "originPortId" müssen übereinstimmen (auch für den letzten und ersten Abschnitt).

VesselServiceLeg

Ein einzelner Streckenabschnitt eines Schiffs.

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

string

Zugewiesene Etappenkandidaten-ID.

originDepartureTime

object (ScheduleTime)

Abfahrtszeit am Starthafen im Wochenfahrplan.

destinationArrivalTime

object (ScheduleTime)

Ankunftszeit am Zielhafen im Wochenplan.

ScheduleTime

Eine Fahrplanzeit (Abflug/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 (jeweils einschließlich) sein.

CommodityDemandPath

Die verschiedenen Dienste und Ports, die ein Bruchteil einer bestimmten Güternachfrage nutzt. Die unten verwendeten Indizes basieren auf der Reihenfolge der Fahrten in der Antwort und den Streckenabschnitten der einzelnen Schiffe.

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

string

Nachfrage-ID der Waren erfüllt.

containerCount

string (int64 format)

Anzahl der Container, die diesen Pfad durchlaufen. Für jede Warennachfrage darf die insgesamt erfüllte Menge die Gesamtnachfrage nicht überschreiten.

vesselServiceLegIds[]

object (VesselServiceLegId)

Liste der Teilstrecken-IDs für Schiffe, die über diesen Pfad verwendet werden. Für einen gültigen Pfad für die Warennachfrage sind folgende Properties verfügbar: 1. Die AbfahrtPortId des ersten Abschnitts muss mit der originPortId der Warennachfrage übereinstimmen. 2. „destinationPortId“ des letzten Abschnitts muss mit „destinationPortId“ der Warennachfrage übereinstimmen. 3. Die aufeinanderfolgenden Streckenabschnitte müssen übereinstimmen. 4. Wenn für diese Warennachfrage angegeben wird, muss die maximale Laufzeit größer oder gleich der Gesamtdauer des Pfads sein.

VesselServiceLegId

Serviceabschnitt eines einzelnen Schiffs, der in einem Waren-Nachfragepfad verwendet wird. Ein Beispiel: Es gibt zwei Anlegestellen für Wasserfahrzeuge. Das erste besteht aus drei Abschnitten (indexiert 0, 1 und 2) und den zweiten beiden (indexiert 0 und 1). Außerdem kommt der erste Abschnitt der ersten Strecke am Abflughafen des zweiten Abschnitts an. Ein Warenpfad bestehend aus den drei folgenden Streckenabschnitt-IDs für Schiffe: {vesselServiceIndex: 0, vesselServiceLegIndex: 2} {vesselServiceIndex: 0, vesselServiceLegIndex: 0} {vesselServiceIndex: 1, vesselServiceLegIndex: 1} bedeutet, dass Container für 2 aufeinanderfolgende Schiffe vom ersten Schiff zu einem einzelnen Schiff fahren.

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

integer

Index des Schiffsverkehrs.

vesselServiceLegIndex

integer

Index des Streckenabschnitts des Schiffsdienstes, indexiert durch vesselServiceIndex.