- JSON 表示法
- 发货
- VisitRequest
- LatLng
- Waypoint
- 位置
- TimeWindow
- 车辆
- TravelMode
- RouteModifiers
- UnloadingPolicy
- LoadLimit
- Interval
- LoadCost
- DurationLimit
- DistanceLimit
- BreakRule
- BreakRequest
- FrequencyConstraint
- 目标
- 类型
- DurationDistanceMatrix
- 行
- TransitionAttributes
- ShipmentTypeIncompatibility
- IncompatibilityMode
- ShipmentTypeRequirement
- RequirementMode
- PrecedenceRule
配送模型包含一组必须由一组车辆执行的配送任务,同时尽可能减少总费用,即以下各项的总和:
- 车辆的路线规划费用(所有车辆的总时间费用、出行时间费用和固定费用之和)。
- 未履行的配送违规处置。
- 全球货运时长的成本
| JSON 表示法 |
|---|
{ "shipments": [ { object ( |
| 字段 | |
|---|---|
shipments[] |
必须在模型中执行的一组货件。 |
vehicles[] |
可用于执行拜访的一组车辆。 |
objectives[] |
此模型的目标集,我们将将其转换为费用。如果非空,则输入模型必须是无成本的。如需获取修改后的请求,请使用 实验性功能:如需了解详情,请参阅 https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request。 |
globalStartTime |
模型的全局开始时间和结束时间:超出此范围的时间均视为无效。 模型的跨度必须小于一年,即 使用 采用 RFC 3339 标准,生成的输出将始终进行 Z 规范化(即转换为 UTC 零时区格式并在末尾附加 Z),并使用 0、3、6 或 9 个小数位。不带“Z”的偏差时间也是可以接受的。示例: |
globalEndTime |
如果未设置,则使用 1971 年 1 月 1 日 00:00:00 UTC(即秒数:31536000,纳秒数:0)作为默认值。 采用 RFC 3339 标准,生成的输出将始终进行 Z 规范化(即转换为 UTC 零时区格式并在末尾附加 Z),并使用 0、3、6 或 9 个小数位。不带“Z”的偏差时间也是可以接受的。示例: |
globalDurationCostPerHour |
整个方案的“全局时长”是指所有车辆的最早有效开始时间与最晚有效结束时间之间的差值。用户可以为该数量分配每小时费用,以尝试优化最早完成作业的时间。此费用必须与 |
durationDistanceMatrices[] |
指定模型中使用的时长和距离矩阵。如果此字段为空,系统会改用 Google 地图或测地线距离,具体取决于 用法示例:
|
durationDistanceMatrixSrcTags[] |
用于定义时长矩阵和距离矩阵来源的标记; 标记对应于 |
durationDistanceMatrixDstTags[] |
用于定义时长和距离矩阵的目的地的标记; 标记对应于 |
transitionAttributes[] |
向模型添加了过渡属性。 |
shipmentTypeIncompatibilities[] |
一组不兼容的 shipment_types(请参阅 |
shipmentTypeRequirements[] |
一组 |
precedenceRules[] |
必须在模型中强制执行的一组优先级规则。 重要提示:使用优先级规则会限制可优化的问题的规模。使用包含大量货件的优先规则的请求可能会被拒绝。 |
maxActiveVehicles |
限制有效车辆的最大数量。如果车辆的路线至少执行一次运输,则该车辆处于有效状态。如果司机数量少于车辆数量,且车辆类型各不相同,则可以使用此参数来限制路线数量。然后,优化功能会选择要使用的最佳车辆子集。必须严格为正。 |
发货
单个商品的运输,从取货点到送货点。只有当一辆唯一的车辆访问过某个取货地点(并相应地减少其剩余运力),然后稍后访问过某个送货地点(并相应地重新增加其剩余运力)后,相应货件才会被视为已完成。
| JSON 表示法 |
|---|
{ "displayName": string, "pickups": [ { object ( |
| 字段 | |
|---|---|
displayName |
用户定义的货件显示名称。不得超过 63 个字符,可以使用 UTF-8 字符。 |
pickups[] |
与相应配送相关联的一组自提替代方案。如果未指定,车辆只需前往与配送对应的位置。 |
deliveries[] |
与相应货件相关的一组配送替代方案。如果未指定,车辆只需前往与上车点对应的位置。 |
loadDemands |
货件的装载需求(例如重量、体积、托盘数量等)。映射中的键应是描述相应负载类型的标识符,最好还包含单位。例如:“weight_kg”“volume_gallons”“pallet_count”等。如果给定键未出现在映射中,则相应载荷将被视为 null。 |
allowedVehicleIndices[] |
可能执行相应配送的一组车辆。如果为空,则所有车辆都可以执行该操作。车辆由其在 |
costsPerVehicle[] |
指定每辆车在运送相应货物时产生的费用。如果指定,则必须具有以下任一值:
这些费用必须与 |
costsPerVehicleIndices[] |
|
pickupToDeliveryAbsoluteDetourLimit |
指定与从上车点到送达点的最短路径相比,最长的绝对绕行时间。如果指定,则必须为非负值,并且相应配送必须至少包含取货和送货。 例如,假设 t 是从所选取货替代方案直接前往所选送货替代方案所需的最短时间。然后,设置 如果同一批货件同时指定了相对限制和绝对限制,则对于每个可能的取货/送货对,系统会使用限制更严格的那个。截至 2017 年 10 月,仅当出行时长不取决于车辆时,系统才支持绕行。 该时长以秒为单位,最多包含九个小数位,以“ |
pickupToDeliveryTimeLimit |
指定从取件开始到送达开始的货件最长时长。如果指定,则必须为非负值,并且相应货件必须至少包含取货和送货。这并不取决于为取货和送货选择的替代方案,也不取决于车辆速度。此参数可与绕行距离上限约束条件一起指定:解决方案将同时满足这两项规范。 该时长以秒为单位,最多包含九个小数位,以“ |
shipmentType |
非空字符串,用于指定相应货件的“类型”。此功能可用于定义 与为单次访问指定的 |
label |
为相应配送指定标签。此标签会在相应 |
ignore |
如果为 true,则跳过相应配送,但不应用 如果模型中存在任何 允许忽略在 |
penaltyCost |
如果未完成配送,此罚款将添加到路线的总费用中。如果某个配送方案的取货和送货替代方案之一被访问,则该配送方案被视为已完成。费用可以采用模型中所有其他费用相关字段所用的相同单位表示,并且必须为正值。 重要提示:如果未指定此罚款,则视为无限期,即必须完成配送。 |
pickupToDeliveryRelativeDetourLimit |
指定与从上车点到送达点的最短路径相比,最长的相对绕行时间。如果指定,则必须为非负值,并且相应配送必须至少包含取货和送货。 例如,假设 t 是从所选取货替代方案直接前往所选送货替代方案所需的最短时间。然后,设置 如果同一批货件同时指定了相对限制和绝对限制,则对于每个可能的取货/送货对,系统会使用限制更严格的那个。截至 2017 年 10 月,仅当出行时长不取决于车辆时,系统才支持绕行。 |
VisitRequest
车辆可完成的访问请求:具有地理位置(或两个,见下文)、以时间窗口表示的营业时间和结束时间,以及服务时长(车辆到达取货或送货地点后所花费的时间)。
| JSON 表示法 |
|---|
{ "arrivalLocation": { object ( |
| 字段 | |
|---|---|
arrivalLocation |
执行此 |
arrivalWaypoint |
执行此 |
departureLocation |
车辆在完成此 |
departureWaypoint |
车辆在完成此 |
tags[] |
指定附加到访问请求的标记。不允许使用空字符串或重复的字符串。 |
timeWindows[] |
限制访问到达时间的时间窗口。请注意,车辆可能会在到达时间窗口之外出发,也就是说,到达时间 + 时长不必在时间窗口内。如果车辆在 缺少 时间窗口必须是不相交的,也就是说,任何时间窗口都不得与其他时间窗口重叠或相邻,并且必须按递增顺序排列。 只有在单个时间窗口的情况下才能设置 |
duration |
访问时长,即车辆从到达到离开所花费的时间(将添加到可能的等待时间;请参阅 该时长以秒为单位,最多包含九个小数位,以“ |
cost |
在车辆路线中服务此访问请求的费用。此属性可用于为货件的每种替代自提或送货方式支付不同的费用。此费用必须与 |
loadDemands |
加载相应访问请求的需求。此字段与 |
visitTypes[] |
指定访问类型。这可用于分配车辆完成此访问所需的额外时间(请参阅 一种类型只能出现一次。 |
label |
为此 |
avoidUTurns |
指定是否应避免在此位置的驾车路线中出现掉头。系统会尽力避免掉头,但无法保证完全避免。这是一项实验性功能,其行为可能会发生变化。 实验性功能:如需了解详情,请参阅 https://developers.google.com/maps/tt/route-optimization/experimental/u-turn-avoidance/make-request。 |
LatLng
表示纬度/经度对的对象。该对象以一对双精度数表示,分别代表纬度度数和经度度数。除非另有说明,否则该对象必须符合 WGS84 标准。值必须介于标准化范围内。
| JSON 表示法 |
|---|
{ "latitude": number, "longitude": number } |
| 字段 | |
|---|---|
latitude |
纬度(以度为单位)。它必须在 [-90.0, +90.0] 范围内。 |
longitude |
经度(以度为单位)。它必须在 [-180.0, +180.0] 范围内。 |
航点
封装了途经点。途经点用于标记 VisitRequest 的到达和出发位置,以及车辆的起始和结束位置。
| JSON 表示法 |
|---|
{ "sideOfRoad": boolean, "vehicleStopover": boolean, // Union field |
| 字段 | |
|---|---|
sideOfRoad |
可选。表示此航点的位置旨在让车辆优先停靠在道路的特定一侧。设置此值后,路线将经过相应位置,以便车辆停靠在道路中心偏向该位置的一侧。此选项不适用于“步行”出行方式。 |
vehicleStopover |
表示该航点供车辆停靠,目的是接载或送达乘客。此选项仅适用于“DRIVING”出行模式,且“locationType”为“location”时。 实验性:此字段的行为或存在状态将来可能会发生变化。 |
联合字段 location_type。表示位置的不同方式。location_type 只能是下列其中一项: |
|
location |
使用地理坐标指定的点,包括可选的航向。 |
placeId |
与途经点关联的 POI 地点 ID。 使用地点 ID 指定 VisitRequest 的到达或出发地点时,请使用足够具体的地点 ID 来确定前往该地点的导航 LatLng 位置。例如,表示建筑物的地点 ID 适合,但表示道路的地点 ID 不建议使用。 |
位置
封装位置信息(地理点和可选的航向)。
| JSON 表示法 |
|---|
{
"latLng": {
object ( |
| 字段 | |
|---|---|
latLng |
途经点的地理坐标。 |
heading |
与交通流量方向相关的罗盘方向。此值用于指定上下车时要使用的道路一侧。航向值可以介于 0 到 360 之间,其中 0 表示正北航向,90 表示正东航向,依此类推。 |
TimeWindow
时间窗口用于限制事件的时间,例如访问的到达时间或车辆的开始时间和结束时间。
硬时间窗口边界 startTime 和 endTime 会强制执行事件的最早时间和最晚时间,使得 startTime <= event_time <=
endTime。软时间窗口下限 softStartTime 表示希望事件发生在 softStartTime 或之后,但如果事件发生在 softStartTime 之前,则会产生与发生时间早于 softStartTime 的时长成正比的费用。软时间窗口上限 softEndTime 表示希望事件在 softEndTime 或之前发生,如果事件在 softEndTime 之后发生,则会产生与发生时间成正比的费用。startTime、endTime、softStartTime 和 softEndTime 应在全局时间限制内(请参阅 ShipmentModel.global_start_time 和 ShipmentModel.global_end_time),并应遵守以下规则:
0 <= `startTime` <= `endTime` and
0 <= `startTime` <= `softStartTime` and
0 <= `softEndTime` <= `endTime`.
| JSON 表示法 |
|---|
{ "startTime": string, "endTime": string, "softStartTime": string, "softEndTime": string, "costPerHourBeforeSoftStartTime": number, "costPerHourAfterSoftEndTime": number } |
| 字段 | |
|---|---|
startTime |
硬性时间段的开始时间。如果未指定,则会设置为 采用 RFC 3339 标准,生成的输出将始终进行 Z 规范化(即转换为 UTC 零时区格式并在末尾附加 Z),并使用 0、3、6 或 9 个小数位。不带“Z”的偏差时间也是可以接受的。示例: |
endTime |
硬性时间段的结束时间。如果未指定,则会设置为 采用 RFC 3339 标准,生成的输出将始终进行 Z 规范化(即转换为 UTC 零时区格式并在末尾附加 Z),并使用 0、3、6 或 9 个小数位。不带“Z”的偏差时间也是可以接受的。示例: |
softStartTime |
时间窗口的软开始时间。 采用 RFC 3339 标准,生成的输出将始终进行 Z 规范化(即转换为 UTC 零时区格式并在末尾附加 Z),并使用 0、3、6 或 9 个小数位。不带“Z”的偏差时间也是可以接受的。示例: |
softEndTime |
时间窗口的软结束时间。 采用 RFC 3339 标准,生成的输出将始终进行 Z 规范化(即转换为 UTC 零时区格式并在末尾附加 Z),并使用 0、3、6 或 9 个小数位。不带“Z”的偏差时间也是可以接受的。示例: |
costPerHourBeforeSoftStartTime |
如果活动发生在 softStartTime 之前,则添加到模型中其他费用的每小时费用,计算方式如下: 此费用必须为正数,并且只有在设置了 softStartTime 的情况下才能设置此字段。 |
costPerHourAfterSoftEndTime |
如果事件发生在 此费用必须为正数,并且只有在已设置 |
交通工具
用于表示运送问题中的车辆。解决配送问题将为相应车辆构建一条从 startLocation 开始到 endLocation 结束的路线。路线是一系列访问(请参阅 ShipmentRoute)。
| JSON 表示法 |
|---|
{ "displayName": string, "travelMode": enum ( |
| 字段 | |
|---|---|
displayName |
用户定义的车辆显示名称。不得超过 63 个字符,可以使用 UTF-8 字符。 |
travelMode |
出行模式,会影响车辆可行驶的道路及其行驶速度。另请参阅 |
routeModifiers |
一组需要满足的条件,这些条件会影响指定车辆的路线计算方式。 |
startLocation |
车辆在取货前开始行驶的地理位置。如果未指定,车辆将从第一个上车点开始。如果配送模型具有时长和距离矩阵,则不得指定 |
startWaypoint |
表示车辆在取货前开始行驶的地理位置的途经点。如果未指定 |
endLocation |
车辆在完成最后一次 |
endWaypoint |
航点,表示车辆在完成最后一次 |
startTags[] |
指定附加到车辆路线起点的标记。 不允许使用空字符串或重复的字符串。 |
endTags[] |
指定附加到车辆路线末尾的标记。 不允许使用空字符串或重复的字符串。 |
startTimeWindows[] |
车辆可以从起始地点出发的时间段。它们必须在全局时间限制内(请参阅 属于同一重复字段的时间窗口必须是不相交的,即任何时间窗口都不能与另一个时间窗口重叠或相邻,并且它们必须按时间顺序排列。 只有在单个时间窗口的情况下才能设置 |
endTimeWindows[] |
车辆可能到达最终位置的时间窗口。它们必须在全局时间限制内(请参阅 属于同一重复字段的时间窗口必须是不相交的,即任何时间窗口都不能与另一个时间窗口重叠或相邻,并且它们必须按时间顺序排列。 只有在单个时间窗口的情况下才能设置 |
unloadingPolicy |
在车辆上强制执行的卸货政策。 |
loadLimits |
车辆的载重能力(例如重量、体积、托盘数量)。映射中的键是负载类型的标识符,与 |
costPerHour |
车辆费用:所有费用加起来必须与 车辆路线每小时的费用。此费用适用于路线的总耗时,包括出行时间、等待时间和游览时间。使用 |
costPerTraveledHour |
车辆路线每行驶小时的费用。此费用仅适用于路线所用的出行时间(即 |
costPerKilometer |
车辆路线的每公里费用。此费用适用于 |
fixedCost |
如果使用相应车辆处理货件,则应用固定费用。 |
usedIfRouteIsEmpty |
此字段仅适用于路线不包含任何货件的车辆。它用于指明在这种情况下是否应将车辆视为已使用。 如果为 true,车辆会从起点前往终点,即使它不运送任何货物,并且系统会考虑从起点到终点的行驶所产生的时间和距离成本。 否则,它不会从起始位置行驶到结束位置,并且不会为该车辆安排 |
routeDurationLimit |
应用于车辆路线总时长的限制。在给定的 |
travelDurationLimit |
应用于车辆路线的行驶时长的限制。在给定的 |
routeDistanceLimit |
应用于车辆路线总距离的限制。在给定的 |
extraVisitDurationForVisitType |
指定从 visitTypes 字符串到时长的映射。时长是指在具有指定 如果访问请求具有多种类型,则系统会为地图中的每种类型添加时长。 |
breakRule |
描述要在此车辆上强制执行的休息时间表。如果为空,则不会为相应车辆安排休息时间。 |
label |
指定相应车辆的标签。此标签会在响应中报告为相应 |
ignore |
如果为 true,则 如果某项配送任务由 如果某次配送由 |
travelDurationMultiple |
指定可用于增加或减少相应车辆的出行时间的乘数。例如,如果将此值设置为 2.0,则表示相应车辆速度较慢,行程时间是标准车辆的两倍。此倍数不会影响访问时长。如果指定了 警告:应用此倍数后,但在执行任何数值运算之前,出行时间将四舍五入到最接近的秒数,因此,较小的倍数可能会导致精度损失。 另请参阅下文中的 |
TravelMode
车辆可使用的出行方式。
这些应是 Google Maps Platform Routes API 出行模式的子集,请参阅:https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteTravelMode
注意:WALKING 路线目前处于 Beta 版阶段,有时可能没有明确的人行道或步道。您必须向用户显示此警告,以告知用户您在应用中显示的所有步行路线。
| 枚举 | |
|---|---|
TRAVEL_MODE_UNSPECIFIED |
未指定的出行方式,相当于 DRIVING。 |
DRIVING |
与行车路线(驾车等)对应的出行模式。 |
WALKING |
与步行路线对应的出行方式。 |
RouteModifiers
封装了一组在计算车辆路线时要满足的可选条件。这与 Google Maps Platform Routes Preferred API 中的 RouteModifiers 类似;请参阅:https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteModifiers。
| JSON 表示法 |
|---|
{ "avoidTolls": boolean, "avoidHighways": boolean, "avoidFerries": boolean, "avoidIndoor": boolean } |
| 字段 | |
|---|---|
avoidTolls |
指定是否在合理的情况下避开收费公路。系统会优先选择不包含收费公路的路线。仅适用于机动出行方式。 |
avoidHighways |
指定是否在合理的情况下避开高速公路。系统会优先选择不包含高速公路的路线。仅适用于机动出行方式。 |
avoidFerries |
指定是否在合理的情况下避开轮渡。系统会优先选择不包含轮渡行程的路线。仅适用于机动出行方式。 |
avoidIndoor |
可选。指定是否在合理的情况下避免室内导航。系统会优先选择不包含室内导航的路线。仅适用于 |
UnloadingPolicy
有关如何卸载车辆的政策。仅适用于同时包含取件和送达的货件。
其他货件可以免费在路线上的任何位置发生,不受 unloadingPolicy 的限制。
| 枚举 | |
|---|---|
UNLOADING_POLICY_UNSPECIFIED |
未指定卸货政策;送货必须在相应的取货之后进行。 |
LAST_IN_FIRST_OUT |
送货必须按取货的相反顺序进行 |
FIRST_IN_FIRST_OUT |
送货顺序必须与取货顺序相同 |
LoadLimit
定义适用于车辆的载重限制,例如“此卡车最多只能载重 3, 500 公斤”。请参阅 loadLimits。
| JSON 表示法 |
|---|
{ "softMaxLoad": string, "costPerUnitAboveSoftMax": number, "startLoadInterval": { object ( |
| 字段 | |
|---|---|
softMaxLoad |
负载的软性限制。请参阅 |
costPerUnitAboveSoftMax |
如果车辆在行驶路线上的任何时间点负载超过 |
startLoadInterval |
车辆在路线开始时的可接受载荷区间。 |
endLoadInterval |
路线结束时车辆的可接受装载间隔。 |
maxLoad |
可接受的最大负载量。 |
costPerKilometer |
此车辆每移动 1 个单位的负荷 1 公里的费用。这可用作燃料消耗量的代理变量:如果负荷是重量(以牛顿为单位),则负荷*公里具有能量的维度。 实验性功能:如需了解详情,请参阅 https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request。 |
costPerTraveledHour |
此车辆在 1 小时内运输一个单位的负载所需的费用。 实验性功能:如需了解详情,请参阅 https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request。 |
间隔
可接受的负载量区间。
| JSON 表示法 |
|---|
{ "min": string, "max": string } |
| 字段 | |
|---|---|
min |
|
max |
可接受的最大负荷。必须大于等于 0。如果未指定,则此消息不会限制最大负载。如果同时指定了这两个参数,则 |
LoadCost
在 Transition 期间移动一个单位的负载所需的费用。对于给定的负载,费用是以下两部分的总和:
- min(load,
loadThreshold) *costPerUnitBelowThreshold - max(0, load -
loadThreshold) *costPerUnitAboveThreshold
在这种费用下,解决方案会优先满足高需求,或者等效地最后满足高需求。例如,如果车辆有
load_limit {
key: "weight"
value {
costPerKilometer {
loadThreshold: 15
costPerUnitBelowThreshold: 2.0
costPerUnitAboveThreshold: 10.0
}
}
}
其路线为:起点、取货点、取货点、送货点、送货点、终点,并包含以下过渡:
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 20 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
那么,此 LoadCost 产生的费用为(低于成本 * 低于的负荷 * 公里数 + 高于成本 * 高于的负荷 * 公里数)
- 过渡 0:0.0
- 过渡 1:2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
- 过渡 2:2.0 * 15 * 1.0 + 10.0 * (20 - 15) * 1.0 = 80.0
- 过渡 3:2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
- 过渡 4:0.0
因此,该路线上的 LoadCost 为 120.0。
不过,如果路线是“起点、取货点、送货点、取货点、送货点、终点”,且包含以下过渡:
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
那么此 LoadCost 产生的费用为
- 过渡 0:0.0
- 过渡 1:2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
- 过渡 2:0.0
- 过渡 3:2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
- 过渡 4:0.0
这里,路线的 LoadCost 为 40.0。
LoadCost 会使具有繁重过渡的解决方案更加昂贵。
实验性功能:如需了解详情,请参阅 https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request。
| JSON 表示法 |
|---|
{ "loadThreshold": string, "costPerUnitBelowThreshold": number, "costPerUnitAboveThreshold": number } |
| 字段 | |
|---|---|
loadThreshold |
负载量,当负载量超过此值时,移动单位负载的费用将从 costPerUnitBelowThreshold 变为 costPerUnitAboveThreshold。必须大于等于 0。 |
costPerUnitBelowThreshold |
移动一个单位的负载的费用,适用于 0 到阈值之间的每个单位。必须是有限值,且大于等于 0。 |
costPerUnitAboveThreshold |
移动一个单位的负载(对于超出阈值的每个单位)的费用。如果阈值为 0,则表示每单位固定费用。必须是有限值,且大于等于 0。 |
DurationLimit
用于定义车辆路线的最长时长的限制。可以是硬性或软性。
定义软限制字段时,必须同时定义软上限阈值及其关联的费用。
| JSON 表示法 |
|---|
{ "maxDuration": string, "softMaxDuration": string, "quadraticSoftMaxDuration": string, "costPerHourAfterSoftMax": number, "costPerSquareHourAfterQuadraticSoftMax": number } |
| 字段 | |
|---|---|
maxDuration |
将时长限制为最多 maxDuration 的硬性限制。 该时长以秒为单位,最多包含九个小数位,以“ |
softMaxDuration |
一种不强制执行最长时长限制的软性限制,但违反此限制会导致路线产生费用。此费用会与模型中定义的其他费用相加,单位相同。 如果已定义, 该时长以秒为单位,最多包含九个小数位,以“ |
quadraticSoftMaxDuration |
一种不强制执行最长时长限制的软性限制,但如果违反此限制,路线的费用将按时长的二次方计算。此费用会与模型中定义的其他费用相加,单位相同。 如果已定义,
该时长以秒为单位,最多包含九个小数位,以“ |
costPerHourAfterSoftMax |
如果违反 费用必须为非负数。 |
costPerSquareHourAfterQuadraticSoftMax |
如果违反 如果时长低于阈值,则额外费用为 0;否则,费用取决于时长,如下所示: 费用必须为非负数。 |
DistanceLimit
用于定义可行驶的最大距离的限制。可以是硬性或软性。
如果定义了软限制,则必须定义 softMaxMeters 和 costPerKilometerAboveSoftMax,且这两个值必须为非负数。
| JSON 表示法 |
|---|
{ "maxMeters": string, "softMaxMeters": string, "costPerKilometerBelowSoftMax": number, "costPerKilometerAboveSoftMax": number } |
| 字段 | |
|---|---|
maxMeters |
一种硬性限制,用于将距离限制为最多 maxMeters。限值必须是非负数。 |
softMaxMeters |
一种不强制执行最大距离限制的软限制,但如果违反该限制,则会产生费用,该费用会与模型中定义的其他费用相加,单位相同。 如果定义了 softMaxMeters,则该值必须小于 maxMeters,并且必须为非负数。 |
costPerKilometerBelowSoftMax |
每公里产生的费用,最高可增加至
|
costPerKilometerAboveSoftMax |
如果距离超过 费用必须为非负数。 |
BreakRule
用于为车辆生成时间中断(例如午休时间)的规则。休息是指车辆在当前位置保持空闲状态且无法执行任何访问的连续时间段。可能会出现中断的情况:
- 在两次访问之间的行程期间(包括访问之前或之后的这段时间,但不包括访问期间),在这种情况下,它会延长两次访问之间的相应行程时间,
- 或在车辆启动之前(车辆可能不会在休息期间启动),在这种情况下,它不会影响车辆启动时间。
- 或车辆结束时间之后(同样,使用车辆结束时间)。
| JSON 表示法 |
|---|
{ "breakRequests": [ { object ( |
| 字段 | |
|---|---|
breakRequests[] |
休息顺序。看到 |
frequencyConstraints[] |
可能适用多个 |
BreakRequest
必须预先知道适用于每辆车的休息序列(即休息次数和顺序)。重复的 BreakRequest 定义了该序列,并指明了它们必须发生的顺序。它们的时间窗口(earliestStartTime / latestStartTime)可能会重叠,但必须与顺序兼容(系统会检查这一点)。
| JSON 表示法 |
|---|
{ "earliestStartTime": string, "latestStartTime": string, "minDuration": string } |
| 字段 | |
|---|---|
earliestStartTime |
必需。中断开始时间的下限(含)。 采用 RFC 3339 标准,生成的输出将始终进行 Z 规范化(即转换为 UTC 零时区格式并在末尾附加 Z),并使用 0、3、6 或 9 个小数位。不带“Z”的偏差时间也是可以接受的。示例: |
latestStartTime |
必需。休止开始时间的上限(含)。 采用 RFC 3339 标准,生成的输出将始终进行 Z 规范化(即转换为 UTC 零时区格式并在末尾附加 Z),并使用 0、3、6 或 9 个小数位。不带“Z”的偏差时间也是可以接受的。示例: |
minDuration |
必需。休息时长的下限。必须为正值。 该时长以秒为单位,最多包含九个小数位,以“ |
FrequencyConstraint
还可以通过强制执行最小中断频率来进一步限制上述指定的中断频率和时长,例如“每 12 小时必须至少中断 1 小时”。假设这可以解读为“在任何 12 小时的滑动时间窗口内,必须至少有一次时长至少为 1 小时的休息”,那么该示例将转换为以下 FrequencyConstraint:
{
minBreakDuration { seconds: 3600 } # 1 hour.
maxInterBreakDuration { seconds: 39600 } # 11 hours (12 - 1 = 11).
}
解决方案中休息的时间和时长将遵守所有此类限制,以及 BreakRequest 中已指定的时间窗口和最短时长。
实际上,FrequencyConstraint 可能适用于非连续中断。例如,以下时间表符合“每 12 小时 1 小时”的示例:
04:00 vehicle start
.. performing travel and visits ..
09:00 1 hour break
10:00 end of the break
.. performing travel and visits ..
12:00 20-min lunch break
12:20 end of the break
.. performing travel and visits ..
21:00 1 hour break
22:00 end of the break
.. performing travel and visits ..
23:59 vehicle end
| JSON 表示法 |
|---|
{ "minBreakDuration": string, "maxInterBreakDuration": string } |
| 字段 | |
|---|---|
minBreakDuration |
必需。相应限制的广告插播时长下限。非负。请参阅 该时长以秒为单位,最多包含九个小数位,以“ |
maxInterBreakDuration |
必需。路线中任何时间区间的最大允许跨度,该时间区间不包含至少部分 该时长以秒为单位,最多包含九个小数位,以“ |
目标
目标会完全取代费用模型,因此与预先存在的费用不兼容。每个目标都会映射到一些预定义的费用,例如车辆、货件或过渡属性的费用。
实验性功能:如需了解详情,请参阅 https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request。
| JSON 表示法 |
|---|
{
"type": enum ( |
| 字段 | |
|---|---|
type |
目标的类型。 |
weight |
相应目标相对于其他目标的权重。可以是任何非负数,权重不必总和为 1。权重默认为 1.0。 |
类型
将映射到一组费用的目标类型。
| 枚举 | |
|---|---|
DEFAULT |
系统将使用一组默认费用,以确保提供合理的解决方案。注意:此目标可以单独使用,但如果用户指定的目标中尚无此目标,系统也会始终以 1.0 的权重将其添加为基准目标。 |
MIN_DISTANCE |
“MIN”目标。最大限度地缩短总行驶距离。 |
MIN_WORKING_TIME |
最大限度地缩短所有车辆的总工作时间。 |
MIN_TRAVEL_TIME |
与上述相同,但仅关注出行时间。 |
MIN_NUM_VEHICLES |
尽量减少所用车辆的数量。 |
DurationDistanceMatrix
指定从访问和车辆起始位置到访问和车辆结束位置的时长和距离矩阵。
| JSON 表示法 |
|---|
{
"rows": [
{
object ( |
| 字段 | |
|---|---|
rows[] |
指定时长和距离矩阵的行。它必须具有与 |
vehicleStartTag |
用于定义相应时长和距离矩阵适用于哪些车辆的标记。如果为空,则表示适用于所有车辆,并且只能有一个矩阵。 每次车辆启动都必须与一个矩阵完全匹配,也就是说,车辆启动的 所有矩阵都必须具有不同的 |
行
指定时长和距离矩阵的一行。
| JSON 表示法 |
|---|
{ "durations": [ string ], "meters": [ number ] } |
| 字段 | |
|---|---|
durations[] |
指定行的时长值。它必须具有与 该时长以秒为单位,最多包含九个小数位,以“ |
meters[] |
指定行的距离值。如果模型中没有任何费用或限制条件涉及距离,则可将此参数留空;否则,此参数的元素数量必须与 |
TransitionAttributes
指定路线中两次连续访问之间的过渡属性。同一过渡可能适用多个 TransitionAttributes:在这种情况下,所有额外费用都会累加,并应用最严格的限制(遵循自然的“AND”语义)。
| JSON 表示法 |
|---|
{
"srcTag": string,
"excludedSrcTag": string,
"dstTag": string,
"excludedDstTag": string,
"cost": number,
"costPerKilometer": number,
"distanceLimit": {
object ( |
| 字段 | |
|---|---|
srcTag |
用于定义这些属性所适用的 (src->dst) 过渡的标记。 当来源访问或车辆启动的 |
excludedSrcTag |
请参阅 |
dstTag |
当目的地访问或车辆结束的 |
excludedDstTag |
请参阅 |
cost |
指定执行此过渡的费用。此值与模型中的所有其他费用采用相同的单位,且不得为负值。此费用是在所有其他现有费用的基础上收取的。 |
costPerKilometer |
指定在执行此过渡时,按行驶距离计算的每公里费用。它会累加车辆上指定的所有 |
distanceLimit |
指定在执行此过渡时行驶的距离限制。 截至 2021 年 6 月,仅支持软限制。 |
delay |
指定执行此过渡时产生的延迟。 此延迟始终发生在完成来源访问之后和开始目标访问之前。 该时长以秒为单位,最多包含九个小数位,以“ |
ShipmentTypeIncompatibility
根据货件的 shipmentType 指定货件之间的不兼容性。系统会根据不兼容模式限制同一路线中不兼容货件的显示。
| JSON 表示法 |
|---|
{
"types": [
string
],
"incompatibilityMode": enum ( |
| 字段 | |
|---|---|
types[] |
不兼容的类型列表。如果两批货件的 |
incompatibilityMode |
应用于不兼容性的模式。 |
IncompatibilityMode
用于定义如何限制同一路线上的不兼容货件的外观的模式。
| 枚举 | |
|---|---|
INCOMPATIBILITY_MODE_UNSPECIFIED |
未指定不兼容模式。不应使用此值。 |
NOT_PERFORMED_BY_SAME_VEHICLE |
在此模式下,类型不兼容的两批货物永远无法共用同一辆车。 |
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY |
在此模式下,两种不兼容类型的货物绝不能同时装在同一辆车上:
|
ShipmentTypeRequirement
根据货件的 shipmentType 指定货件之间的要求。要求的具体内容由要求模式定义。
| JSON 表示法 |
|---|
{
"requiredShipmentTypeAlternatives": [
string
],
"dependentShipmentTypes": [
string
],
"requirementMode": enum ( |
| 字段 | |
|---|---|
requiredShipmentTypeAlternatives[] |
|
dependentShipmentTypes[] |
如果配送的类型在 注意:不允许出现 |
requirementMode |
应用于要求的模式。 |
RequirementMode
用于定义路线上的相关货件外观的模式。
| 枚举 | |
|---|---|
REQUIREMENT_MODE_UNSPECIFIED |
未指定要求模式。不应使用此值。 |
PERFORMED_BY_SAME_VEHICLE |
在此模式下,所有“相关”货件都必须与至少一个“必需”货件共用同一辆车。 |
IN_SAME_VEHICLE_AT_PICKUP_TIME |
在 因此,“相关”取件必须满足以下条件之一:
|
IN_SAME_VEHICLE_AT_DELIVERY_TIME |
与之前相同,但“相关”货件在送达时需要随车携带“必需”货件。 |
PrecedenceRule
两个事件(每个事件都是货件的取件或送货)之间的优先规则:“第二个”事件必须在“第一个”事件开始后至少 offsetDuration 开始。
多个优先关系可以指代同一(或相关)事件,例如,“B 的取件时间在 A 的送达时间之后”以及“C 的取件时间在 B 的取件时间之后”。
此外,优先级仅在执行这两项运输时适用,否则会被忽略。
| JSON 表示法 |
|---|
{ "firstIsDelivery": boolean, "secondIsDelivery": boolean, "offsetDuration": string, "firstIndex": integer, "secondIndex": integer } |
| 字段 | |
|---|---|
firstIsDelivery |
表示“第一个”事件是否为送达事件。 |
secondIsDelivery |
指示“第二个”事件是否为交付。 |
offsetDuration |
“第一个”事件与“第二个”事件之间的偏移量。可以为负数。 该时长以秒为单位,最多包含九个小数位,以“ |
firstIndex |
“第一个”事件的货件指数。必须指定此字段。 |
secondIndex |
“第二个”事件的货件指数。必须指定此字段。 |