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

如要在造訪符合 thresholdVisitCount 時套用放寬層級,或是 thresholdTime 新增兩個具有相同 levelrelaxations:一個只設定 thresholdVisitCount,另一個只設定 thresholdTime。如果造訪符合多個 relaxations 的條件,系統會套用最放鬆的層級。因此,從車輛開始行駛到行經路線,到車輛結束,放鬆等級就會變得更加放鬆:也就是說,隨著路線進展,放鬆等級不會下降。

如果路線造訪的時間和順序不符合任何 relaxations 的門檻條件,就會完全受限,沒有任何造訪記錄。此外,如果車輛開始或結束不符合任何放鬆條件,則系統會固定進行該時間,除非車輛無內容。

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

enum (Level)

限制條件的放寬層級:適用於 thresholdTime 或之後,且至少符合 thresholdVisitCount 的條件。

thresholdTime

string (Timestamp format)

可套用 level 放鬆的時間或之後的時間。

RFC3339 世界標準時間「Zulu」的時間戳記格式,解析度為奈秒,且最多 9 個小數位數。範例:"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 相同,但車輛同樣令人放鬆:在門檻時間當天或之後享有完全免付費的乘車服務,而且可能會無法跑車。