簡體   English   中英

如何使用 Cplex Python 從大列表中添加限制以在解決方案中選擇故事(或任務),該列表總計給定團隊容量?

[英]How to add constrain to pick stories (or tasks) in a solution from large list which sum up to given Team capacity using Cplex Python?

我正在使用 IBM cplex Python API 並解決問題以從數千個故事列表中查找故事,這些故事總結為不同沖刺的給定團隊容量(此處為 2 周沖刺)。 每個故事都分配了故事點和屬於特定團隊。 有一些約束,如 end_before_start(一些故事應該在其他一些故事之前實施)和 workUsage = 給定團隊容量(需要 select 故事,其總和與給定容量完全一致)。

但這里的問題是,如果我將所有區間變量(對於故事)設為可選,並讓 model 決定選擇哪些故事,那么它不會為任何故事提供解決方案。 當我將所有故事都設為非可選時,Model 會失敗,我相信這是因為 model 認為所有故事都是強制性的,需要適合所有故事。 所以請讓我知道如何做到這一點的任何想法或方法? 這是我到目前為止所嘗試的。

 # Create dictionary of interval variables (for Stories)
 dictIntrvalVars = {}
 for idx, row in dfAnalyzerOrg.iterrows():
    isOptional = row['Stories'] not in dfAnalyzer['Stories'].values
    dictIntrvalVars[row['Stories']] = mdl0.interval_var(name = row['Stories'], size = 
 int(row['Story Points']), optional=isOptional)

 # Constrain capacity of resources

 #Making team wise dictionary list of interval vars
 dictTeamWise = {team:[] for team in dfTeamCapacity['Team'].values}
 print(dictTeamWise)
 for itm in dictIntrvalVars.items():
    dictTeamWise[dfAnalyzerOrg.loc[dfAnalyzerOrg['Stories']==itm[0], 'Team'].iloc[0]].append(itm)

 NB_SPRINTS = 2
 SPRINT_INTERVAL = 20
 for t, lstTeam in dictTeamWise.items():
    sCapacity = 0
    sCapacity = sum(step_at(SPRINT_INTERVAL * s, dfTeamCapacity.loc[dfTeamCapacity['Team'] == t, 
 s+1].iloc[0]) for s in range(NB_SPRINTS))
    
    sCapacity -= sum(step_at_start(tpl[1], int(dfAnalyzerOrg.loc[dfAnalyzerOrg['Stories']==tpl[0], 'Story Points'].iloc[0])) 
                     for tpl in lstTeam)
    mdl0.add(sCapacity.equals(0))  

我將 model 作為二進制變量的標准賦值問題的變體:

  i : tasks
  j : teams

  max sum((i,j), points[i,j]*x[i,j])
      sum(i, x[i,j]*usage[i]) <= capacity[j]   ∀j
      sum(j, x[i,j]) <= 1                      ∀i  (in case a task can only be done by one single team)
      x[i,j] ∈ {0,1}

(我在這里發明了一些東西,因為我不明白你的代碼)。 更接近數學將有助於使事情更容易理解和更容易記錄。 此外,現在可以輕松地將其轉錄為任何語言和建模工具。

添加優先約束很容易:

 x[i2,j] <= x[i1,j]    ∀j

意味着 i2 只能在 i1 也被選擇時使用。

關於分配問題的更多信息可以在幾乎所有關於線性優化的書中找到。

暫無
暫無

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

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