# RGLPK 中的梦幻足球线性规划(Fantasy football linear programming in R with RGLPK)

flex 可以是 RB、WR 或 TE。

``````library(Rglpk)

# number of variables
num.players <- length(final\$PLAYER)
# objective:
obj <- final\$FPTS_PREDICT_RF
# the vars are represented as booleans
var.types <- rep("B", num.players)
# the constraints
matrix <- rbind(as.numeric(final\$position == "QB"), # num QB
as.numeric(final\$position == "RB"), # num RB
as.numeric(final\$position == "WR"), # num WR
as.numeric(final\$position == "TE"), # num TE
as.numeric(final\$position == "DEF"),# num DEF
diag(final\$riskNormalized),         # player's risk
final\$Salary)                       # total cost

direction <- c("==",
"<=",
"<=",
"<=",
"==",
rep("<=", num.players),
"<=")

rhs <- c(1, # Quartbacks
3, # Running Backs
1, # Tight Ends
1, # Defense
rep(10, num.players), #HERE, you need to enter a number that indicates how
#risk you are willing to be, 1 being low risk,
# 10 being high risk.  10 is max.
50000)                # By default, you get 50K to spend, so leave this number alone.

sol <- Rglpk_solve_LP(obj = obj, mat = matrix, dir = direction, rhs = rhs,
types = var.types, max = TRUE)
sol #Projected Fantasy Points
``````

• RB数>=2
• RB数<= 3
• WR 的数量 >= 3
• WR 的数量 <= 4
• TE 的数量 >= 1
• TE 的数量 <= 2
• RBs + WRs + TEs == 7 的数量

``````library(Rglpk)

# number of variables
num.players <- length(final\$PLAYER)
# objective:
obj <- final\$FPTS_PREDICT_RF
# the vars are represented as booleans
var.types <- rep("B", num.players)
# the constraints
matrix <- rbind(as.numeric(final\$position == "QB"), # num QB
as.numeric(final\$position == "RB"), # num RB
as.numeric(final\$position == "RB"), # num RB
as.numeric(final\$position == "WR"), # num WR
as.numeric(final\$position == "WR"), # num WR
as.numeric(final\$position == "TE"), # num TE
as.numeric(final\$position == "TE"), # num TE
as.numeric(final\$position %in% c("RB", "WR", "TE")),  # Num RB/WR/TE
as.numeric(final\$position == "DEF"),# num DEF
diag(final\$riskNormalized),         # player's risk
final\$Salary)                       # total cost
direction <- c("==",
">=",
"<=",
">=",
"<=",
">=",
"<=",
"==",
"==",
rep("<=", num.players),
"<=")
rhs <- c(1, # Quartbacks
2, # RB Min
3, # RB Max
3, # WR Min
4, # WR Max
1, # TE Min
2, # TE Max
7, # RB/WR/TE
1, # Defense
rep(10, num.players), #HERE, you need to enter a number that indicates how
#risk you are willing to be, 1 being low risk,
# 10 being high risk.  10 is max.
50000)                # By default, you get 50K to spend, so leave this number alone.

sol <- Rglpk_solve_LP(obj = obj, mat = matrix, dir = direction, rhs = rhs,
types = var.types, max = TRUE)
``````

``````final[sol\$solution==1,]
#        X          PLAYER FPTS_PREDICT_LIN FPTS_PREDICT_RF Salary position
# 1      1      A.J. Green         20.30647       20.885558   5900       WR
# 17    18    Andre Holmes         13.26369       15.460503   4100       WR
# 145  156 Giovani Bernard         17.05857       19.521157   6100       RB
# 148  160      Greg Olsen         17.08808       17.831687   5500       TE
# 199  222    Jordy Nelson         22.12326       24.077787   7800       WR
# 215  239 Kelvin Benjamin         16.12116       17.132573   5000       WR
# 233  262    Le'Veon Bell         20.51564       18.565763   6300       RB
# 303  340  Ryan Tannehill         17.92518       19.134305   6700       QB
# 362 3641              SD          5.00000        6.388666   2600      DEF
#         risk riskNormalized
# 1   5.131601       3.447990
# 17  9.859006       6.624396
# 145 9.338094       6.274388
# 148 6.517376       4.379111
# 199 9.651055       6.484670
# 215 7.081162       4.757926
# 233 6.900656       4.636641
# 303 4.857983       3.264143
# 362 2.309401       0.000000
``````