Method: shipping.designShippingNetwork

指定された DesignShippingNetworkRequest の船舶のネットワーク設計とスケジュールに関する問題(LSNDSP)を解きます。

LSNDSP は、ライナー船会社の最適な設計とスケジュールを見つけるための複雑な最適化問題です。目標は、ポート間の貨物需要を可能な限り多く満たしながら、ネットワーク運用の総コストを最小限に抑えることです。

LSNDSP は、ネットワーク設計とスケジューリングという 2 つの主要なサブ問題に分けることができます。ネットワーク設計のサブ問題では、ネットワークによってサービスを提供するポートのセット、各ルートに展開する船舶の数、船が通るルートを決定します。スケジューリング サブ問題では、港間の出航にかかる時間、貨物の積み下ろしにかかる時間、港間の貨物輸送の需要を考慮して、船舶の出航スケジュールを決定します。

簡単に言えば、LSNDSP は、貨物需要を満たすために収益を最大化しながらネットワークの運用コストを最小限に抑えるために、サービスを提供するポート、使用する船の数、船のスケジュールを決定する方法を決定する問題です。LSNDSP の難しいサブコンポーネントは、貨物のルーティングです。収益を最大化するために、どの需要を満たすべきか、どのルートを貨物に割り当てるかを決定します。

HTTP リクエスト

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

この URL は gRPC Transcoding 構文を使用します。

リクエストの本文

リクエストの本文には、次の構造のデータが含まれます。

JSON 表現
{
  "requestId": string,
  "solverParameters": {
    object (SolverParameters)
  },
  "ports": [
    {
      object (Port)
    }
  ],
  "legCandidates": [
    {
      object (LegCandidate)
    }
  ],
  "vesselClasses": [
    {
      object (VesselClass)
    }
  ],
  "commodityDemands": [
    {
      object (CommodityDemand)
    }
  ],
  "vesselServices": [
    {
      object (VesselService)
    }
  ]
}
フィールド
requestId

string

問題またはリクエスト ID。

solverParameters

object (SolverParameters)

ソルバーのパラメータ。

ports[]

object (Port)

船舶サービスで呼び出すことができるポートのリスト。リクエストには、このリストにあるポート ID のみを含める必要があります。

legCandidates[]

object (LegCandidate)

船舶サービスに追加する区間の候補リスト。リクエストには、このリストにある区間候補 ID のみを含める必要があります。

vesselClasses[]

object (VesselClass)

船舶サービスを提供する船舶クラスのリスト。同じクラスの船はすべて完全に交換可能です。リクエストには、このリストにある船クラス ID のみを含める必要があります。

commodityDemands[]

object (CommodityDemand)

船舶サービスによって満たされる可能性のあるコモディティ(コンテナ)の需要のリスト。

vesselServices[]

object (VesselService)

有効な船舶サービスのネットワーク(通常はネットワークの現在の状態)を提供して、最適化の出発点として使用できます。

レスポンスの本文

レスポンスには、リクエストで渡された LSNDSP インスタンスに解答が保持されます。船舶サービスとコモディティ需要経路の有効なネットワークが含まれています。各区間を通る商品需要の総額は、この区間を通る船舶クラスの容量を超えてはなりません。船舶のネットワーク設計とスケジュールに関する問題は、需要を満たしていない船舶サービスを提供しないことが、常に現実的な解決策となります。

成功した場合、レスポンスの本文には次の構造のデータが含まれます。

JSON 表現
{
  "requestId": string,
  "vesselServices": [
    {
      object (VesselService)
    }
  ],
  "commodityDemandPaths": [
    {
      object (CommodityDemandPath)
    }
  ]
}
フィールド
requestId

string

このレスポンスが関連付けられているリクエストの ID。

vesselServices[]

object (VesselService)

船舶サービスのネットワーク。各船舶クラスにおいて、使用される船舶の総数は、このクラスで利用可能な船舶の数を超えてはいけません。

commodityDemandPaths[]

object (CommodityDemandPath)

プラスのコモディティ需要が出荷されるすべてのコモディティ需要パスのリスト。需要が発送されない場合、一部の商品需要 ID は含まれない場合があります。あるいは、商品需要を部分的に満たすこともできます。各商品の需要について、履行された数量の合計が需要の合計を超えることはできません。最後に、commodityDemandPaths は vesselServices に依存します(CommodityDemandPath の定義を参照)。

SolverParameters

LSNDSP の単一の解決を制御するパラメータ。

JSON 表現
{
  "timeLimit": string
}
フィールド
timeLimit

string (Duration format)

解法が問題に費やす最大時間。この値はハードリミットではなく、通信のオーバーヘッドを考慮していません。問題を解決するために予想されるレイテンシは、この値をわずかに超えることがあります。

s で終わる小数 9 桁までの秒単位の期間。例: "3.5s"

ポート

ポート、例:端子またはポートのすべての端子です。

JSON 表現
{
  "id": string,
  "minimumPortStayDuration": {
    object (Duration)
  },
  "minimumTransshipmentDuration": {
    object (Duration)
  },
  "transshipmentCost": number,
  "vesselClassCosts": {
    string: {
      object (VesselCost)
    },
    ...
  }
}
フィールド
id

string

このポートに割り当てられた一意の ID。

minimumPortStayDuration

object (Duration)

ポートコールの最短滞在期間。ほとんどの研究では、港がより多くのスペースを占めるため、移動回数の多い大型の船舶により多くのクレーンを割り当てるため、一定していると仮定しています。

minimumTransshipmentDuration

object (Duration)

特定のポートでの積み替えの最小時間(コンテナを降ろし、別の船に再装荷する時間を含む)。

transshipmentCost

number

コンテナのトランスシッピングのコスト。トランスシッピングではポートでの税関手続きが必要ないため、通常、積み降ろしと排出の合計よりも少なくなります。

vesselClassCosts

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

船舶クラス ID によってマッピングされたこのポートを呼び出すときに発生するコスト。vessel クラスは、このマップにエントリがある場合にのみ、このポートを呼び出すことができます。

"key": value ペアのリストを含むオブジェクト。例: { "name": "wrench", "mass": "1.3kg", "count": "3" }

所要時間

期間(ポートの滞在/輸送、需要のトランジット)は時間単位で定義されます。

JSON 表現
{
  "hours": string
}
フィールド
hours

string (int64 format)

期間を定義する時間数。

VesselCost

この港に電話をかけて滞在するための船舶の料金は、滞在期間(fixedCost + hourlyCost × 時間)の線形関数として定義されます。

JSON 表現
{
  "fixedCost": number,
  "hourlyCost": number
}
フィールド
fixedCost

number

このポートの呼び出しにかかる固定料金。

hourlyCost

number

この港での滞在にかかる 1 時間あたりの費用。

LegCandidate

船舶のサービス提供区間の候補。同じ 2 つのポート間に複数のレッグ候補が存在する場合あり(例:さまざまな海洋ルートや船速を表す画像。

JSON 表現
{
  "id": string,
  "departurePortId": string,
  "arrivalPortId": string,
  "duration": {
    object (Duration)
  },
  "vesselClassCosts": {
    string: number,
    ...
  }
}
フィールド
id

string

この区間の候補に割り当てられた一意の ID。

departurePortId

string

出発ポートの ID。

arrivalPortId

string

到着港の ID。

duration

object (Duration)

脚の長さ。

vesselClassCosts

map (key: string, value: number)

この区間の候補を特定の船級に割り当てるコスト。これには、船舶の運航費用、バンカー費用、チャーター費用が含まれます。船舶クラスは、このマップにエントリがある場合にのみ、この区間の候補を通ることができます。

"key": value ペアのリストを含むオブジェクト。例: { "name": "wrench", "mass": "1.3kg", "count": "3" }

VesselClass

船のクラス(同じプロパティを共有する船の集合)。同じクラスの 2 つの船を区別する方法はありません。

JSON 表現
{
  "id": string,
  "containerCapacity": string,
  "vesselCount": string
}
フィールド
id

string

この船舶クラスに割り当てられた一意の ID。

containerCapacity

string (int64 format)

船級容量(コンテナ単位)。

vesselCount

string (int64 format)

この船舶クラスの船舶の数。

CommodityDemand

コモディティ需要、つまり配送業者が履行する潜在的な需要。

JSON 表現
{
  "id": string,
  "originPortId": string,
  "destinationPortId": string,
  "containerCount": string,
  "freightRate": number,
  "maximumTransitDuration": {
    object (Duration)
  }
}
フィールド
id

string

この商品需要に割り当てられた一意の ID。

originPortId

string

送信元ポートの ID。

destinationPortId

string

宛先ポートの ID。

containerCount

string (int64 format)

処理するコンテナの最大数。

freightRate

number

コンテナあたりの貨物料金(未処理の需要に対するペナルティが含まれる可能性がある)。出発地と目的地でコンテナごとに積み下ろしの費用を削減できる必要があります。

maximumTransitDuration

object (Duration)

最長お届け日数(設定する場合は、常に正の値にする必要があります)。通過時間は、この需要に対応する最初の船舶が出発地の港を出港してから、この需要に対応する最後の船舶が目的地の港に到着するまでの時間として定義されます。

VesselService

日用品の需要に対応するために利用できる船舶サービス。重要: 現時点での運行頻度は週 1 回とし、移行時間は 1 週間を超えてはならないとされています。船舶の運航区間は次の順序とします: vesselServiceLegs { legCandidateId: "0->1"originDepartureTime {} destinationArrivalTime { day: 3 hourOfDay: 12 } } vesselServiceLegs { legCandidateId: "1->0"originDepartureTime { day: 4 } destinationArrivalTime { day: 7 hourOfDay: 12 } } これらの区間は、2 つのポートを通過する 1 週間の運行ラインを定義し、両方のポート滞在時間が 12 時間です。

JSON 表現
{
  "vesselClassId": string,
  "vesselServiceLegs": [
    {
      object (VesselServiceLeg)
    }
  ]
}
フィールド
vesselClassId

string

サービスを提供する船舶クラス ID。

vesselServiceLegs[]

object (VesselServiceLeg)

有効な船舶サービスの場合は、次のプロパティが保持されます。1.空白にすることはできません。2. 連続する脚destinationPortId と originPortId を一致させる必要があります(最後の区間と最初の区間も含む)。

VesselServiceLeg

1 区間の船舶運行。

JSON 表現
{
  "legCandidateId": string,
  "originDepartureTime": {
    object (ScheduleTime)
  },
  "destinationArrivalTime": {
    object (ScheduleTime)
  }
}
フィールド
legCandidateId

string

割り当てられた区間候補 ID。

originDepartureTime

object (ScheduleTime)

週次スケジュールの出発地ポートでの出発時刻。

destinationArrivalTime

object (ScheduleTime)

週次スケジュールでの宛先ポートへの到着時刻。

ScheduleTime

時刻表(船舶 / 需要発着時刻)は、週 1 回、所定の時刻に定義されます。

JSON 表現
{
  "day": string,
  "hourOfDay": integer
}
フィールド
day

string (int64 format)

スケジュールの曜日。[0 日] は、処理できる最初の日です。

hourOfDay

integer

スケジュール時刻の「時」には 0 ~ 23 の整数を指定してください。

CommodityDemandPath

特定のコモディティ需要のごく一部が利用しているさまざまなサービスやポート。以下で使用した指数は、該当する船舶の運行順と、個々の船舶の運航区間に基づくものです。

JSON 表現
{
  "commodityDemandId": string,
  "containerCount": string,
  "vesselServiceLegIds": [
    {
      object (VesselServiceLegId)
    }
  ]
}
フィールド
commodityDemandId

string

商品需要 ID が履行されました。

containerCount

string (int64 format)

このパスを通過するコンテナの数。各商品の需要について、履行された数量の合計が需要の合計を超えることはできません。

vesselServiceLegIds[]

object (VesselServiceLegId)

この経路を通過した船舶のサービス提供区間 ID のリスト。有効なコモディティ需要パスの場合、次のプロパティが成り立ちます。1.第 1 区間の departurePortId が商品需要の originPortId と一致する必要がある。2. 最後の区間の destinationPortId は、商品需要の destinationPortId と一致する必要があります。3. 連続する脚arrivalPortId と departurePortId が一致する必要があります。4. この商品需要に対して指定する場合、最長お届け日数は、経路の総所要時間以上である必要があります。

VesselServiceLegId

コモディティ需要経路で使用される単一の船舶のサービス提供区間。たとえば、2 つの船舶運行があるとします。1 本目は 3 本の脚(インデックス 0、1、2)と 2 本(インデックス 0 と 1)で構成されています。また、第 1 便の第 1 区間は第 2 便の第 2 区間の出発港に到着します。{vesselServiceIndex: 0, vesselServiceLegIndex: 2} {vesselServiceIndex: 0, vesselServiceLegIndex: 0} {vesselServiceIndex: 1, vesselServiceLegIndex: 1} は、コンテナが 2 つの連続船サービスから 1 つの連続したサービス レグから vesselServiceLegIndex: 1 に連続

JSON 表現
{
  "vesselServiceIndex": integer,
  "vesselServiceLegIndex": integer
}
フィールド
vesselServiceIndex

integer

船舶サービスのインデックス。

vesselServiceLegIndex

integer

vesselServiceIndex でインデックス付けされた船舶運行区間のインデックス。