Fantasy football linear programming in R with RGLPK

后端 未结 1 1177
感动是毒
感动是毒 2021-02-14 22:18

long time listener first time caller to S.O... I am asking a question that has been asked very similarly before, however I don\'t believe I am smart enough to decipher how to im

相关标签:
1条回答
  • 2021-02-14 23:04

    You can do this by adding the following constraints:

    • The number of RBs >= 2
    • The number of RBs <= 3
    • The number of WRs >= 3
    • The number of WRs <= 4
    • The number of TEs >= 1
    • The number of TEs <= 2
    • The number of RBs + WRs + TEs == 7

    Here's the updated code:

    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)
    

    Finally, you can evaluate your solution by subsetting final:

    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
    

    For this problem data you have selected a wide receiver to the flex position.

    0 讨论(0)
提交回复
热议问题