小编Tha*_*nes的帖子

根据多个条件查找所有组合以获得较大的列表

我正在尝试为幻想自行车比赛计算最佳团队。我有一个csv文件,其中包含176个自行车手,他们的球队,所获得的积分以及将其放入我的球队的价格。我试图找到得分最高的16个自行车队。

适用于任何团队组成的规则是:

  • 团队的总费用不能超过100。
  • 同一支队伍中的幻想自行车参赛者不得超过4名。

我的csv文件的简短摘录可以在下面找到。

THOMAS Geraint,Team INEOS,142,13
SAGAN Peter,BORA - hansgrohe,522,11.5
GROENEWEGEN Dylan,Team Jumbo-Visma,205,11
FUGLSANG Jakob,Astana Pro Team,46,10
BERNAL Egan,Team INEOS,110,10
BARDET Romain,AG2R La Mondiale,21,9.5
QUINTANA Nairo,Movistar Team,58,9.5
YATES Adam,Mitchelton-Scott,40,9.5
VIVIANI Elia,Deceuninck - Quick Step,273,9.5
YATES Simon,Mitchelton-Scott,13,9
EWAN Caleb,Lotto Soudal,13,9
Run Code Online (Sandbox Code Playgroud)

解决此问题的最简单方法是生成团队所有可能组合的列表,然后应用规则排除不符合上述规则的团队。此后,很容易计算每个团队的总得分并选择得分最高的团队。从理论上讲,可以通过以下代码生成可用团队列表。

database_csv = pd.read_csv('renner_db_example.csv')
renners = database_csv.to_dict(orient='records')

budget = 100
max_same_team = 4
team_total = 16

combos = itertools.combinations(renners,team_total)
usable_combos = []

for i in combos:
    if sum(persoon["Waarde"] for persoon in i)  < budget and all(z <= max_same_team for …
Run Code Online (Sandbox Code Playgroud)

python mathematical-optimization linear-programming python-itertools

15
推荐指数
1
解决办法
481
查看次数