Method: shipping.designShippingNetwork

解决给定 DesignShippingNetworkRequest 的客运网络设计和调度问题 (LSNDSP)。

LSNDSP 是一个复杂的优化问题,旨在为客运网络找到最佳的设计和调度。目的是尽可能降低运营网络的总费用,同时尽可能多地满足港口之间的货运需求。

LSNDSP 可分为两个主要子问题:网络设计和调度。网络设计子问题决定了网络要处理的端口集、要在每条路线上部署的船只数量,以及船将经过的航线。时间安排子问题决定了船舶的航行时间表,并考虑了在港口之间航行所需的时间、装卸货物所需的时间以及港口之间的货物运输需求。

简而言之,LSNDSP 就是决定要提供服务的港口、使用多少艘船以及如何安排船舶安排,以便在最大程度地满足货物需求的同时,将运营网络的成本降至最低。LSNDSP 的一项具有挑战性的子组件是货运路线,它决定了要满足哪些需求以及将哪些航线分配给货物,从而最大限度地提高收入。

HTTP 请求

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

网址采用 gRPC 转码语法。

请求正文

请求正文中包含结构如下的数据:

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”结尾。示例:"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 映射的此港口时产生的费用。船舶类只有在此映射中具有条目时才能调用此港口。

包含一系列 "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

在此港口停留的每小时费用。

LegCandidate

船只服务航段候选。在相同的两个端口之间可以有多个候选路程,例如,代表不同的海洋航线和/或船速。

JSON 表示法
{
  "id": string,
  "departurePortId": string,
  "arrivalPortId": string,
  "duration": {
    object (Duration)
  },
  "vesselClassCosts": {
    string: number,
    ...
  }
}
字段
id

string

分配给此路段候选 ID 的唯一 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

船只类别,即具有相同属性的一组船舶。没有办法区分同一类别的两艘船。

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

可满足商品需求的船舶服务。重要提示:当前假设服务按周频率运行,且端口停留时间不得超过一周。请考虑以下船只服务航段的顺序:vesselServiceLegs { legCandidateId: "0->1" originLeaveTime {} destinationArrivalTime { day: 3 hourOfDay: 12 } } vesselServiceLegs { legCandidateId: "Day1->0{/7} March of the 地理位置定位目标} “Day1->0"destinations of the 地理位置定位目标}

JSON 表示法
{
  "vesselClassId": string,
  "vesselServiceLegs": [
    {
      object (VesselServiceLeg)
    }
  ]
}
字段
vesselClassId

string

提供服务的船类 ID。

vesselServiceLegs[]

object (VesselServiceLeg)

对于有效的船舶服务,以下属性适用:1. 此字段不能为空。2. 连续路程的 destinationPortId 和 originPortId 必须匹配(包括最后路程和第一个路程)。

VesselServiceLeg

船只服务的一段。

JSON 表示法
{
  "legCandidateId": string,
  "originDepartureTime": {
    object (ScheduleTime)
  },
  "destinationArrivalTime": {
    object (ScheduleTime)
  }
}
字段
legCandidateId

string

已分配的路程候选 ID。

originDepartureTime

object (ScheduleTime)

每周时间表在始发港口的出发时间。

destinationArrivalTime

object (ScheduleTime)

每周时间表的抵达目的地港口时间。

ScheduleTime

排班时间(船只/需求出发/到达)是按每周特定时间的频率定义的。

JSON 表示法
{
  "day": string,
  "hourOfDay": integer
}
字段
day

string (int64 format)

日程表。第 0 天是可能的第一天。

hourOfDay

integer

时间表时间中的时段应为 0 到 23(含 0 和 23)之间的整数。

CommodityDemandPath

一小部分给定商品需求采用的不同服务和端口。下面使用的索引基于响应中船只服务的顺序以及各个船只服务的顺序。

JSON 表示法
{
  "commodityDemandId": string,
  "containerCount": string,
  "vesselServiceLegIds": [
    {
      object (VesselServiceLegId)
    }
  ]
}
字段
commodityDemandId

string

已提供商品需求 ID。

containerCount

string (int64 format)

通过此路径的容器数量。对于每项商品需求,履单总量不能超过总需求。

vesselServiceLegIds[]

object (VesselServiceLegId)

通过此路径获取的船舶服务航段 ID 的列表。对于有效的商品需求路径,您需要具备以下属性:1. 首段路程的 ExitPortId 必须与商品需求的 originPortId 一致。2. 最后一段的 destinationPortId 必须与商品需求的 destinationPortId 一致。3. 连续航段的 arrivalPortId 和 exitPortId 必须匹配。4. 如果为这种商品需求提供了运送时间,则最长运送时间应大于或等于路径的总时长。

VesselServiceLegId

商品需求路径中使用的单船服务航段。例如,假设有两项船舶服务。第一段由三段(索引为 0、1 和 2)组成,第二段由两段(索引为 0 和 1)组成。此外,第一趟服务的第一段抵达第二段航程的出发港口。商品路径由以下三条船只服务航段 ID 组成:{vesselServiceIndex: 0, vesselServiceLegIndex: 2} {vesselServiceIndex: 0, vesselServiceLegIndex: 0} {vesselServiceIndex: 1, vesselServiceLegIndex take 2} ,表示 vesselServiceIndex: 0, vesselServiceLegIndex: 2} {vesselServiceIndex: 1, vesselServiceLegIndex take 2} 表示

JSON 表示法
{
  "vesselServiceIndex": integer,
  "vesselServiceLegIndex": integer
}
字段
vesselServiceIndex

integer

船舶服务的索引。

vesselServiceLegIndex

integer

船运服务路程的索引(按 vesselServiceIndex 编入索引)。