优化组合组合

时间:2019-08-16 19:27:16

标签: python-3.x combinations mathematical-optimization

我需要有关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中执行此操作,因此任何指导将不胜感激!

1 个答案:

答案 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

这会让您入门吗?