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 的时间或之后的时间。

采用 RFC 3339 标准,生成的输出将始终进行 Z 规范化(即转换为 UTC 零时区格式并在末尾附加 Z),并使用 0、3、6 或 9 个小数位。不带“Z”的偏差时间也是可以接受的。示例:"2014-10-02T15:01:23Z""2014-10-02T15:01:23.045123456Z""2014-10-02T15:01:23+05:30"

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 相同,但车辆也处于宽松状态:在阈值时间或之后,访问完全免费,并且可能会变为未执行。