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 相同,但车辆也很放松:在阈值时间当天或之后访问完全免费,并且可能无法正常运行。