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 上的所有到访的开始时间和顺序都受到完全约束,并且无法向这些路线插入或添加新的到访。此外,除非车辆为空(即没有光顾记录,并且在模型中将 usedIfRouteIsEmpty 设置为 false),否则 routes 中的车辆开始时间和结束时间是完全受限的。

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 相同,但对车辆的要求也更为宽松:在阈值时间或之后,访问完全免费,并且可能会不执行。