簡體   English   中英

紙漿限制:至少一個團隊滿足最低標准

[英]PULP Constraint: At least one team to meet meet minimum criteria

我有一個陣容生成器,我試圖在其中添加一個約束,我生成的每個陣容至少有 3 名屬於同一支球隊的球員。

例如:生成器共有 60 名球員可供選擇(來自 6 個不同球隊的 10 個人),我不希望它建立的陣容(每個陣容有 9 名球員)有效,除非其中一支球隊被代表在 9 個位置中的至少 3 個。

我目前能夠確保它不允許任何一支球隊超過 5 名球員,但我不確定如何強制至少一支球隊的最低限度。

我目前每個團隊的最大限制如下:

    used_team = [pulp.LpVariable("u{}".format(i + 1), cat="Binary") for i in range(self.num_teams)]
    for i in range(self.num_teams):
        prob += (used_team[i] <= pulp.lpSum(
            self.players_teams[k][i] * players_lineup[k] for k in range(self.num_players)))
        prob += (pulp.lpSum(self.players_teams[k][i] * players_lineup[k] for k in range(self.num_players)) <= max_per_team *
                    used_team[i])

您給出的約束是在有活躍玩家時成功強制used_team變量處於活躍狀態,將這些活躍玩家限制在上限,並在沒有活躍玩家時強制used_team關閉。

為確保您的其他約束,您需要為每支球隊添加一個額外的二進制變量used_3_in_team ,指示是否達到該球隊的 3 名球員。 然后,您需要執行以下操作來添加約束。

for i in range(self.num_teams):
        prob += (3*used_3_in_team[i] <= pulp.lpSum(
            self.players_teams[k][i] * players_lineup[k] for k in range(self.num_players)))
prob += pulp.lpSum(self.used_3_in_team) >= 1

第一組不等式強制used_3_in_team僅在選擇了至少 3 名玩家時才有效。 最后一個不等式確保至少有一支球隊至少有 3 名球員活躍。

我希望這能解決你的問題。

由於您沒有提供最低限度的工作示例,我沒有檢查我的代碼,但我希望這個想法很清楚。

暫無
暫無

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

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