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 時新增兩個 relaxations,並設定相同的 level,一個只設定 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 標準化,並使用 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() + 1level 只能套用至車輛端。如果超過 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 相同,但車輛也會放寬:在門檻時間或之後的拜訪完全免費,且可能不會執行。