【发布时间】:2019-08-23 19:06:38
【问题描述】:
我正在尝试根据比赛水平优化球员阵容,基于最大化单个统计数据(在下面的示例中为积分)。对于给定的阵容,有 2 名球员与一个比赛级别进行匹配。这是我的 DataFrame 的一个示例(这只是一个示例,我的实际 DataFrame 的播放器比这多得多):
Comp Level Points Minutes Played
Player A Elite 10.1 22
Player A Middle -5 22
Player A Low 7.2 22
Player B Elite 0.8 20
Player B Middle 5.6 20
Player B Low 2.2 20
Player C Elite -7.2 18
Player C Middle 3.3 21
Player C Low 6.6 23
Player D Elite -7.2 18
Player D Middle 3.3 21
Player D Low 6.6 23
Player E Elite -7.2 18
Player E Middle 3.3 21
Player E Low 6.6 23
Player F Elite -7.2 18
Player F Middle 3.3 21
Player F Low 6.6 23
优化后的阵容将最大化整个阵容的总分(每个球员的总分)。约束是: 1. 同一个选手不能在多个比赛级别上使用(例如选手A与精英级别配对,则不能与中低级别对战)。 2. 每个阵容对的出场时间值必须在 10% 以内(例如,球员 A 可以与精英级别的球员 B 配对,但不能与球员 C 配对)。
我希望我的输出看起来像这样:
Line up:
Elite: Player A and B
Middle: Player C and Player D
Low: Player E and Player F
Team Total Points: X
我从创建 DataFrame 开始,并考虑使用 PuLP 进行此优化。我正在努力解决的部分是添加我的目标函数和问题的适当约束。
这是我目前的代码:
prob = LpProblem('LineUp Optimization', LpMaximize)
players = list(data['Name'])
# print('The Players under consideration are \n' + '-'*100)
# for x in players:
# print(x, end=',\n ')
costs = dict(zip(players, data['Points']))
comp_levels = dict(zip(players, data['Competition Level']))
Minutes = dict(zip(players, data['Minutes Played']))
ozs = dict(zip(players, data['OZS%']))
player_var = LpVariable.dicts('Players', players, 0, cat='Integer')
任何关于我的约束在此 PuLP 优化中的样子的帮助/指导将不胜感激!
【问题讨论】:
标签: python-3.x combinations mathematical-optimization pulp