【发布时间】:2019-08-24 21:05:14
【问题描述】:
我有一份足球运动员名单。每个球员都有三个属性:位置(G、D、M、A)、姓名和薪水。
Position Name Salary
P Buffon 6
D Maldini 23
D Baresi 15
D Bergomi 7
C Kakà 33
C Gomez 18
A Ronaldo 52
A Vieri 44
...
我想创建一个恰好包含 11 名球员的足球队的所有可能组合。这些是约束:
- 玩家限制:元素总数 = 11
- 位置约束:P = 1,D = 4,C = 4,A = 2
- 薪资约束:总薪资
我已经开始研究,在我看来,itertools 可以帮助我在给定限制的情况下生成所有可能的团队。但我不清楚如何编写约束代码。
subset = df[['position', 'name', 'salary']]
tuples = [tuple(x) for x in subset.values]
all_permutations = itertools.permutations(tuples)
for perm in all_permutations:
# constrains
【问题讨论】:
-
这是一个复杂的问题,是否需要从算法的角度“优化”解决?
-
不,我只需要列出所有可能的排列给定上述约束。对于恰好 11 名玩家的每个组合,我检查所有约束是否正常。如果是,我存储解决方案,否则我丢弃。
-
我很确定您的意思是组合,而不是排列,因为您将球员放在球队中的顺序无关紧要
-
你说得对,让我编辑问题
-
名册规模的范围是什么?还请包括一些您计划用来验证的样本名册。所有球员都是单位置球员吗?
标签: python combinations permutation itertools