簡體   English   中英

OR-tools:在累積約束中建立時間相關的能力

[英]OR-tools: Build time-dependent capacity in cumulative constraint

在作業車間調度問題中,我一直在嘗試對以下約束進行編碼,以捕捉存在一些資源稀缺性約束的事實,這些約束與時間有關(例如:可用的工人數量,基於日期或班次)

for all t:
  sum(workers_required[i]
    if (start(intervals[i]) <= t < end(intervals[i])) and
    (intervals[i] is present)) <= workers_available[t]

為了捕捉這個約束,我想到了兩種方法:

  1. 利用內置的 AddCumulative

我還沒有找到一種很好且簡單的方法來利用此功能來實現與時間相關的容量。

  • 我應該為每個班次創建更多的間隔變量:間隔[任務,班次],然后添加 2 個約束? (增加了太多的復雜性)
    1. 對於每個班次: model.AddCumulative(shift_intervals, workers_required, workers_available)
    2. 對於每個任務 - 連續間隔約束:說對於單個任務,我想最小化間隔的數量(即間隔存在轉換的數量),並讓它們彼此連續

但是,1+2 似乎相當復雜。是否沒有其他方法可以為每個任務僅創建 1 個間隔並將此間隔限制在不同的時間域上? 例如,一種告訴模型 AddCumulative 約束僅在特定時間域內有效的方法?

  1. 通過時間分解建立我自己的累積約束:它有效,但模型復雜性和運行時間增加了 10 倍。基於 Hakan 工作的方法: http ://www.hakank.org/or_tools/cp_sat_utils.py

如果可能的話,我寧願選擇一個簡化的選項 1。

只是在可用容量和最大容量之間填充固定需求的固定間隔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM