我需要有关Python是否可行以及如何完成的指南。我正在尝试优化游戏中的玩家阵容。每个玩家都有一个基于其对手技能的整数值。我想找到一种方法来为2v2游戏中的玩家找到2种不同的最佳比赛对局,以最大化他们的价值。例如:
这代表玩家针对不同对手等级的价值观。
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
其中比赛的价值最大化。唯一的限制是,一个玩家每轮只能使用一次,而在下一轮中不能与相同的对手等级对战。
从理论上讲,我真的很努力地在Python中执行此操作,因此任何指导将不胜感激!
答案 0 :(得分:1)
我不太了解
匹配最多时,它们的值之和。
但是我会开始组合,然后对每个排列进行数学运算以得出每一轮。
from itertools import combinations
df = read_clipboard()
df
出[65]:
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
这会让您入门吗?