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」格式的時間戳記,採用奈秒解析度和最多九個小數位數。範例:"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 相同,但車輛也相當放鬆:在達到閾值時間上限或之後,乘客可能就無法充電,而且有可能無法提升效能。