目前是我第一次在 python 中使用 PuLP 库。潜入这个库的目的是用python制作一个梦幻足球解算器。我已经成功地制作了求解器,但不知道如何添加我需要的一些约束。
我有一张包含 400 名球员的 Excel 表格,以及我如何预测他们的比赛方式,我想在给定特定限制的情况下找到 9 名球员的最佳组合。excel表格包含球员姓名、球员投影、球队球员在场、对手球员面对和位置。下面是熊猫数据框的头部的样子。
Name Projection Position Team Salary Opponent
0 Jets 3.528576 DST NYJ 2000 IND
1 Texans 7.936528 DST HOU 2100 PIT
2 Panthers 4.219883 DST CAR 2200 LAC
3 Raiders 0.904948 DST LVR 2300 NE
我成功完成的限制:限制最多选择 9 名球员,QB 位置只有 1 人,WR 位置 3-4 人,TE 位置 1-2 人,DST 位置 1 人,RB 位置 2-3 人。
raw_data = pd.read_csv(file_name,engine="python",index_col=False, header=0, delimiter=",", quoting = 3)
#create new columns that has binary numbers if player == a specific position
raw_data["RB"] = (raw_data["Position"] == 'RB').astype(float)
raw_data["WR"] = (raw_data["Position"] == 'WR').astype(float)
raw_data["QB"] = (raw_data["Position"] == 'QB').astype(float)
raw_data["TE"] = (raw_data["Position"] == 'TE').astype(float)
raw_data["DST"] = (raw_data["Position"] == 'DST').astype(float)
raw_data["Salary"] = raw_data["Salary"].astype(float)
total_points = {}
cost = {}
QBs = {}
RBs = {}
WRs = {}
TEs = {}
DST = {}
number_of_players = {}
# i = row index, player = player attributes
for i, player in raw_data.iterrows():
var_name = 'x' + str(i) # Create variable name
decision_var = pulp.LpVariable(var_name, cat='Binary') # Initialize Variables
total_points[decision_var] = player["Projection"] # Create Projection Dictionary
cost[decision_var] = player["Salary"] # Create Cost Dictionary
# Create Dictionary for Player Types
QBs[decision_var] = player["QB"]
RBs[decision_var] = player["RB"]
WRs[decision_var] = player["WR"]
TEs[decision_var] = player["TE"]
DST[decision_var] = player["DST"]
number_of_players[decision_var] = 1.0
QB_constraint = pulp.LpAffineExpression(QBs)
RB_constraint = pulp.LpAffineExpression(RBs)
WR_constraint = pulp.LpAffineExpression(WRs)
TE_constraint = pulp.LpAffineExpression(TEs)
DST_constraint = pulp.LpAffineExpression(DST)
total_players = pulp.LpAffineExpression(number_of_players)
model += (QB_constraint == 1)
model += (RB_constraint <= 3)
model += (RB_constraint >= 2)
model += (WR_constraint <= 4)
model += (WR_constraint >= 3)
model += (TE_constraint <= 2)
model += (TE_constraint >= 1)
model += (DST_constraint == 1)
model += (total_players == 9)
我试图添加的限制条件并且无法弄清楚如何:让 9 名球员中的 2 名球员与 QB 在同一支球队中,DST 的对手不能是 9 队的任何人,有 1 名球员的对手是 QB 队的球队. 知道我会怎么做吗?此数据在我的 excel 文件中,但我不确定如何将这些约束添加到模型中?
我一直在查看文档中的案例,但我找不到任何根据模型选择来更改最佳输出的示例。示例:如果选择四分卫,它会影响其余 8 名被选中的球员。
感谢任何人可以为我提供的任何帮助