指定された DesignShippingNetworkRequest
の船舶のネットワーク設計とスケジュールに関する問題(LSNDSP)を解きます。
LSNDSP は、ライナー船会社の最適な設計とスケジュールを見つけるための複雑な最適化問題です。目標は、ポート間の貨物需要を可能な限り多く満たしながら、ネットワーク運用の総コストを最小限に抑えることです。
LSNDSP は、ネットワーク設計とスケジューリングという 2 つの主要なサブ問題に分けることができます。ネットワーク設計のサブ問題では、ネットワークによってサービスを提供するポートのセット、各ルートに展開する船舶の数、船が通るルートを決定します。スケジューリング サブ問題では、港間の出航にかかる時間、貨物の積み下ろしにかかる時間、港間の貨物輸送の需要を考慮して、船舶の出航スケジュールを決定します。
簡単に言えば、LSNDSP は、貨物需要を満たすために収益を最大化しながらネットワークの運用コストを最小限に抑えるために、サービスを提供するポート、使用する船の数、船のスケジュールを決定する方法を決定する問題です。LSNDSP の難しいサブコンポーネントは、貨物のルーティングです。収益を最大化するために、どの需要を満たすべきか、どのルートを貨物に割り当てるかを決定します。
HTTP リクエスト
POST https://optimization.googleapis.com/v1/shipping:designShippingNetwork
この URL は gRPC Transcoding 構文を使用します。
リクエストの本文
リクエストの本文には、次の構造のデータが含まれます。
JSON 表現 |
---|
{ "requestId": string, "solverParameters": { object ( |
フィールド | |
---|---|
requestId |
問題またはリクエスト ID。 |
solverParameters |
ソルバーのパラメータ。 |
ports[] |
船舶サービスで呼び出すことができるポートのリスト。リクエストには、このリストにあるポート ID のみを含める必要があります。 |
legCandidates[] |
船舶サービスに追加する区間の候補リスト。リクエストには、このリストにある区間候補 ID のみを含める必要があります。 |
vesselClasses[] |
船舶サービスを提供する船舶クラスのリスト。同じクラスの船はすべて完全に交換可能です。リクエストには、このリストにある船クラス ID のみを含める必要があります。 |
commodityDemands[] |
船舶サービスによって満たされる可能性のあるコモディティ(コンテナ)の需要のリスト。 |
vesselServices[] |
有効な船舶サービスのネットワーク(通常はネットワークの現在の状態)を提供して、最適化の出発点として使用できます。 |
レスポンスの本文
レスポンスには、リクエストで渡された LSNDSP インスタンスに解答が保持されます。船舶サービスとコモディティ需要経路の有効なネットワークが含まれています。各区間を通る商品需要の総額は、この区間を通る船舶クラスの容量を超えてはなりません。船舶のネットワーク設計とスケジュールに関する問題は、需要を満たしていない船舶サービスを提供しないことが、常に現実的な解決策となります。
成功した場合、レスポンスの本文には次の構造のデータが含まれます。
JSON 表現 |
---|
{ "requestId": string, "vesselServices": [ { object ( |
フィールド | |
---|---|
requestId |
このレスポンスが関連付けられているリクエストの ID。 |
vesselServices[] |
船舶サービスのネットワーク。各船舶クラスにおいて、使用される船舶の総数は、このクラスで利用可能な船舶の数を超えてはいけません。 |
commodityDemandPaths[] |
プラスのコモディティ需要が出荷されるすべてのコモディティ需要パスのリスト。需要が発送されない場合、一部の商品需要 ID は含まれない場合があります。あるいは、商品需要を部分的に満たすこともできます。各商品の需要について、履行された数量の合計が需要の合計を超えることはできません。最後に、commodityDemandPaths は vesselServices に依存します(CommodityDemandPath の定義を参照)。 |
SolverParameters
LSNDSP の単一の解決を制御するパラメータ。
JSON 表現 |
---|
{ "timeLimit": string } |
フィールド | |
---|---|
timeLimit |
解法が問題に費やす最大時間。この値はハードリミットではなく、通信のオーバーヘッドを考慮していません。問題を解決するために予想されるレイテンシは、この値をわずかに超えることがあります。
|
ポート
ポート、例:端子またはポートのすべての端子です。
JSON 表現 |
---|
{ "id": string, "minimumPortStayDuration": { object ( |
フィールド | |
---|---|
id |
このポートに割り当てられた一意の ID。 |
minimumPortStayDuration |
ポートコールの最短滞在期間。ほとんどの研究では、港がより多くのスペースを占めるため、移動回数の多い大型の船舶により多くのクレーンを割り当てるため、一定していると仮定しています。 |
minimumTransshipmentDuration |
特定のポートでの積み替えの最小時間(コンテナを降ろし、別の船に再装荷する時間を含む)。 |
transshipmentCost |
コンテナのトランスシッピングのコスト。トランスシッピングではポートでの税関手続きが必要ないため、通常、積み降ろしと排出の合計よりも少なくなります。 |
vesselClassCosts |
船舶クラス ID によってマッピングされたこのポートを呼び出すときに発生するコスト。vessel クラスは、このマップにエントリがある場合にのみ、このポートを呼び出すことができます。
|
所要時間
期間(ポートの滞在/輸送、需要のトランジット)は時間単位で定義されます。
JSON 表現 |
---|
{ "hours": string } |
フィールド | |
---|---|
hours |
期間を定義する時間数。 |
VesselCost
この港に電話をかけて滞在するための船舶の料金は、滞在期間(fixedCost
+ hourlyCost
× 時間)の線形関数として定義されます。
JSON 表現 |
---|
{ "fixedCost": number, "hourlyCost": number } |
フィールド | |
---|---|
fixedCost |
このポートの呼び出しにかかる固定料金。 |
hourlyCost |
この港での滞在にかかる 1 時間あたりの費用。 |
LegCandidate
船舶のサービス提供区間の候補。同じ 2 つのポート間に複数のレッグ候補が存在する場合あり(例:さまざまな海洋ルートや船速を表す画像。
JSON 表現 |
---|
{
"id": string,
"departurePortId": string,
"arrivalPortId": string,
"duration": {
object ( |
フィールド | |
---|---|
id |
この区間の候補に割り当てられた一意の ID。 |
departurePortId |
出発ポートの ID。 |
arrivalPortId |
到着港の ID。 |
duration |
脚の長さ。 |
vesselClassCosts |
この区間の候補を特定の船級に割り当てるコスト。これには、船舶の運航費用、バンカー費用、チャーター費用が含まれます。船舶クラスは、このマップにエントリがある場合にのみ、この区間の候補を通ることができます。
|
VesselClass
船のクラス(同じプロパティを共有する船の集合)。同じクラスの 2 つの船を区別する方法はありません。
JSON 表現 |
---|
{ "id": string, "containerCapacity": string, "vesselCount": string } |
フィールド | |
---|---|
id |
この船舶クラスに割り当てられた一意の ID。 |
containerCapacity |
船級容量(コンテナ単位)。 |
vesselCount |
この船舶クラスの船舶の数。 |
CommodityDemand
コモディティ需要、つまり配送業者が履行する潜在的な需要。
JSON 表現 |
---|
{
"id": string,
"originPortId": string,
"destinationPortId": string,
"containerCount": string,
"freightRate": number,
"maximumTransitDuration": {
object ( |
フィールド | |
---|---|
id |
この商品需要に割り当てられた一意の ID。 |
originPortId |
送信元ポートの ID。 |
destinationPortId |
宛先ポートの ID。 |
containerCount |
処理するコンテナの最大数。 |
freightRate |
コンテナあたりの貨物料金(未処理の需要に対するペナルティが含まれる可能性がある)。出発地と目的地でコンテナごとに積み下ろしの費用を削減できる必要があります。 |
maximumTransitDuration |
最長お届け日数(設定する場合は、常に正の値にする必要があります)。通過時間は、この需要に対応する最初の船舶が出発地の港を出港してから、この需要に対応する最後の船舶が目的地の港に到着するまでの時間として定義されます。 |
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 ( |
フィールド | |
---|---|
vesselClassId |
サービスを提供する船舶クラス ID。 |
vesselServiceLegs[] |
有効な船舶サービスの場合は、次のプロパティが保持されます。1.空白にすることはできません。2. 連続する脚destinationPortId と originPortId を一致させる必要があります(最後の区間と最初の区間も含む)。 |
VesselServiceLeg
1 区間の船舶運行。
JSON 表現 |
---|
{ "legCandidateId": string, "originDepartureTime": { object ( |
フィールド | |
---|---|
legCandidateId |
割り当てられた区間候補 ID。 |
originDepartureTime |
週次スケジュールの出発地ポートでの出発時刻。 |
destinationArrivalTime |
週次スケジュールでの宛先ポートへの到着時刻。 |
ScheduleTime
時刻表(船舶 / 需要発着時刻)は、週 1 回、所定の時刻に定義されます。
JSON 表現 |
---|
{ "day": string, "hourOfDay": integer } |
フィールド | |
---|---|
day |
スケジュールの曜日。[0 日] は、処理できる最初の日です。 |
hourOfDay |
スケジュール時刻の「時」には 0 ~ 23 の整数を指定してください。 |
CommodityDemandPath
特定のコモディティ需要のごく一部が利用しているさまざまなサービスやポート。以下で使用した指数は、該当する船舶の運行順と、個々の船舶の運航区間に基づくものです。
JSON 表現 |
---|
{
"commodityDemandId": string,
"containerCount": string,
"vesselServiceLegIds": [
{
object ( |
フィールド | |
---|---|
commodityDemandId |
商品需要 ID が履行されました。 |
containerCount |
このパスを通過するコンテナの数。各商品の需要について、履行された数量の合計が需要の合計を超えることはできません。 |
vesselServiceLegIds[] |
この経路を通過した船舶のサービス提供区間 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 |
船舶サービスのインデックス。 |
vesselServiceLegIndex |
|