InjectedSolutionConstraint

已注入到请求中的解决方案,包括有关必须限制哪些访问以及如何限制访问的信息。

JSON 表示法
{
  "routes": [
    {
      object (ShipmentRoute)
    }
  ],
  "skippedShipments": [
    {
      object (SkippedShipment)
    }
  ],
  "constraintRelaxations": [
    {
      object (ConstraintRelaxation)
    }
  ]
}
字段
routes[]

object (ShipmentRoute)

要注入的解决方案的路由。原始解决方案中可能会省略某些路由。航线和跳过的运单必须满足针对 injectedFirstSolutionRoutes 列出的基本有效性假设。

skippedShipments[]

object (SkippedShipment)

跳过了要注入的解决方案的发货步骤。原始解决方案中可能会省略一些内容。请参阅 routes 字段。

constraintRelaxations[]

object (ConstraintRelaxation)

对于零组或多组车辆,指定放宽约束的时间和程度。如果此字段为空,则所有非空车辆路线将完全限制。

ConstraintRelaxation

对于一组车辆,指定在哪些阈值下放宽到访地点限制以及将放宽到哪个级别。skipped_shipment 字段列出的发运只能跳过,也就是说,无法执行这些运单。

JSON 表示法
{
  "relaxations": [
    {
      object (Relaxation)
    }
  ],
  "vehicleIndices": [
    integer
  ]
}
字段
relaxations[]

object (Relaxation)

所有访问限制条件放宽限制,适用于vehicleIndices境内含车辆的路线的游览。

vehicleIndices[]

integer

指定访问限制条件 relaxations 适用的车辆索引。如果为空,则被视为默认值,并且 relaxations 会应用于未在其他 constraintRelaxations 中指定的所有车辆。最多只能有一个默认值,即最多只允许有一个约束条件放宽字段为空 vehicleIndices。一个车辆索引只能列出一次,即使是在多个 constraintRelaxations 中也是如此。

如果 interpretInjectedSolutionsUsingLabels 为 true,则车辆索引的映射方式与 ShipmentRoute.vehicle_index 相同(请参阅 fields 注释)。

娱乐

如果 relaxations 为空,则 routes 上所有访问的开始时间和顺序均受完全约束,无法向这些路线插入或添加新的访问。此外,车辆在 routes 中的开始和结束时间完全约束,除非车辆是空的(即没有到访记录并将模型中的 usedIfRouteIsEmpty 设置为 false)。

relaxations(i).level 指定对访问 #j 应用的限制条件放宽级别,其满足条件:

  • route.visits(j).start_time >= relaxations(i).threshold_time
  • j + 1 >= relaxations(i).threshold_visit_count

同样,如果满足以下条件,车辆启动可放宽到 relaxations(i).level

  • vehicleStartTime >= relaxations(i).threshold_time
  • relaxations(i).threshold_visit_count == 0,如果满足以下各项,车辆端会放宽为 relaxations(i).level
  • vehicleEndTime >= relaxations(i).threshold_time
  • route.visits_size() + 1 >= relaxations(i).threshold_visit_count

如需在访问满足 thresholdVisitCountthresholdTime 时应用放宽级别,请添加两个具有相同 levelrelaxations:一个仅设置了 thresholdVisitCount,另一个仅设置了 thresholdTime。如果一次访问满足多个 relaxations 的条件,则应用最宽松的级别。因此,从车辆开始直至到达车辆终点,放松级别会变得更加宽松,即,放松级别不会随着路线的推进而降低。

不符合任何 relaxations 阈值条件的访问路线的时间和顺序均受完全约束,不得在这些序列中插入访问。此外,如果车辆的开始时间或结束时间不符合任何放松条件,则时间是固定的,除非车辆是空的。

JSON 表示法
{
  "level": enum (Level),
  "thresholdTime": string,
  "thresholdVisitCount": integer
}
字段
level

enum (Level)

在满足 thresholdTime 或之后且至少 thresholdVisitCount 的条件时应用的约束放宽级别。

thresholdTime

string (Timestamp format)

可应用放宽 level 的时间或之后的时间。

采用 RFC3339 世界协调时间 (UTC)(即“祖鲁时”)格式的时间戳,采用纳秒级精度,最多包含九个小数位。示例:"2014-10-02T15:01:23Z""2014-10-02T15:01:23.045123456Z"

thresholdVisitCount

integer

达到或达到此上限后,可应用放宽 level 的访问次数。如果 thresholdVisitCount 为 0(或未设置),可以在车辆启动时直接应用 level

如果为 route.visits_size() + 1,则 level 可能仅应用于车辆端。如果该值超过 route.visits_size() + 1,则系统不会对该路由应用 level

级别

表示不同的约束放宽级别,适用于访问,以及满足阈值条件后的访问。

以下枚举是按照放宽程度从高到低的顺序列举的。

枚举
LEVEL_UNSPECIFIED

隐式默认放宽级别:没有放宽限制,即所有访问都受到完全约束。

此值不得在 level 中明确使用。

RELAX_VISIT_TIMES_AFTER_THRESHOLD 造访开始时间和车辆开始/结束时间将会放宽,但每次造访都与同一辆车保持绑定,并且必须遵守访问顺序:不得在两者之间或之前插入造访。
RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD RELAX_VISIT_TIMES_AFTER_THRESHOLD 相同,但访问顺序也放宽了:到访客户仍然只与车辆绑定。
RELAX_ALL_AFTER_THRESHOLD RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD 相同,但车辆也放宽了限制:在阈值时间或之后,访问完全免费,且可能会无法执行。