【发布时间】:2020-06-05 15:11:08
【问题描述】:
数据集的样子:
我正在尝试为梦幻足球构建优化工具,但我很难强制模型使用来自同一支球队的球员。
9 名玩家组成一个阵容,需要低于 50k,我们正在最大化“proj”投影点
self.salary_cap = 50000
self.Minsalary_cap = 0
self.header = ['QB', 'RB', 'RB','WR', 'WR', 'WR', 'TE','FLEX', 'Def']
#define the pulp object problem
prob = pulp.LpProblem('NFL', pulp.LpMaximize)
#define the player variabless
players_lineup = [pulp.LpVariable("player_{}".format(i+1), cat="Binary") for i in range(self.num_players)]
QBs_lineup = [pulp.LpVariable("QB_{}".format(i+1), cat="Binary") for i in range(self.num_QBs)]
RBs_lineup = [pulp.LpVariable("RB_{}".format(i+1), cat="Binary") for i in range(self.num_RBs)]
WRs_lineup = [pulp.LpVariable("WR_{}".format(i+1), cat="Binary") for i in range(self.num_WRs)]
TEs_lineup = [pulp.LpVariable("TE_{}".format(i+1), cat="Binary") for i in range(self.num_TEs)]
FLEXs_lineup = [pulp.LpVariable("FLEX_{}".format(i+1), cat="Binary") for i in range(self.num_FLEXs)]
Defs_lineup = [pulp.LpVariable("Def_{}".format(i+1), cat="Binary") for i in range(self.num_Defs)]
#add the max player constraints
#prob += (pulp.lpSum(players_lineup[i] for i in range(self.num_players)) == 9)
prob += (pulp.lpSum(QBs_lineup[i] for i in range(self.num_QBs)) == 1)
prob += (pulp.lpSum(RBs_lineup[i] for i in range(self.num_RBs)) == 2)
prob += (pulp.lpSum(WRs_lineup[i] for i in range(self.num_WRs)) == 3)
prob += (pulp.lpSum(TEs_lineup[i] for i in range(self.num_TEs)) == 1)
prob += (pulp.lpSum(FLEXs_lineup[i] for i in range(self.num_FLEXs)) == 1)
prob += (pulp.lpSum(Defs_lineup[i] for i in range(self.num_Defs)) == 1)
#add the salary constraint
prob += (self.Minsalary_cap <= (pulp.lpSum(self.QBs.loc[i, 'sal']*QBs_lineup[i] for i in range(self.num_QBs))
+ pulp.lpSum(self.RBs.loc[i, 'sal']*RBs_lineup[i] for i in range(self.num_RBs))
+ pulp.lpSum(self.WRs.loc[i, 'sal']*WRs_lineup[i] for i in range(self.num_WRs))
+ pulp.lpSum(self.TEs.loc[i, 'sal']*TEs_lineup[i] for i in range(self.num_TEs))
+ pulp.lpSum(self.FLEXs.loc[i, 'sal']*FLEXs_lineup[i] for i in range(self.num_FLEXs))
+ pulp.lpSum(self.Defs.loc[i, 'sal']*Defs_lineup[i] for i in range(self.num_Defs))))
prob += ((pulp.lpSum(self.QBs.loc[i, 'sal']*QBs_lineup[i] for i in range(self.num_QBs))
+ pulp.lpSum(self.RBs.loc[i, 'sal']*RBs_lineup[i] for i in range(self.num_RBs))
+ pulp.lpSum(self.WRs.loc[i, 'sal']*WRs_lineup[i] for i in range(self.num_WRs))
+ pulp.lpSum(self.TEs.loc[i, 'sal']*TEs_lineup[i] for i in range(self.num_TEs))
+ pulp.lpSum(self.FLEXs.loc[i, 'sal']*FLEXs_lineup[i] for i in range(self.num_FLEXs))
+ pulp.lpSum(self.Defs.loc[i, 'sal']*Defs_lineup[i] for i in range(self.num_Defs))) <= self.salary_cap)
我面临的问题是我将如何强制它让 QB 和 WR 在同一个团队中?
【问题讨论】:
标签: python optimization dynamic-programming knapsack-problem pulp