我需要指导,如果这在Python中是可能的,以及如何才能做到。我在尝试优化游戏中的玩家阵容。根据对手的技能,每个玩家都有一个与之相关的整数值。我想找到一种方法来为2v2游戏中的玩家找到两个不同的最优匹配,使他们的价值最大化。例如:
这代表了玩家对不同对手水平的价值。
Opponent Level Elite Middle Low
Player Name
A 4.2 -3.7 2.6
B -5.8 -4.3 1.2
C 0.6 2.8 9.2
D -7.0 2.3 1.2
E 8.0 5.5 -0.6
F 3.3 4.4 6.6我希望实现的东西是这样的:
Match Ups Version 1:
Round 1
Elite Player A and Player B
Middle Player C and Player D
Low Player E and Player F
Round 2:
Elite Player F and Player C
Middle Player E and Player B
Low Player A and Player D其中匹配ups最大化它们的值的总和。唯一的限制是每个玩家每轮只能使用一次,并且不能在下一轮针对相同的对手级别使用。
从理论上讲,我正在为如何在Python中做到这一点而苦苦挣扎,所以任何指导都将非常感谢!
发布于 2019-08-17 03:59:30
我不太明白
匹配ups最大化其值之和的
。
但我会先开始组合,然后对每个排列进行数学运算,得出每一轮。
from itertools import combinations
df = read_clipboard()
dfOut65
Elite Middle Low
0
A 4.2 -3.7 2.6
B -5.8 -4.3 1.2
C 0.6 2.8 9.2
D -7.0 2.3 1.2
E 8.0 5.5 -0.6
F 3.3 4.4 6.6设置后
# Get all the combinations of the players (limit it to two players)
matches = combinations(df.index, 2) 然后遍历元组,计算值。(这是不清楚sum of values是如何最大化的,所以我猜你的意思是将匹配中的所有6个值加在一起,然后按最大到最小排序)。是的,这可以作为一种理解,但我试图明确。
match = {}
for team1, team2 in matchups:
match[f'{team1}_{team2}'] = [df.loc[team1].sum() + df.loc[team2].sum()]
df_matches = pd.DataFrame(match).T
df_matches
Out[93]:
0
A_B -5.8
A_C 15.7
A_D -0.4
A_E 16.0
A_F 17.4
B_C 3.7
B_D -12.4
B_E 4.0
B_F 5.4
C_D 9.1
C_E 25.5
C_F 26.9
D_E 9.4
D_F 10.8
E_F 27.2这能让你入门吗?
https://stackoverflow.com/questions/57530114
复制相似问题