Fantasy football linear programming in R with RGLPK

a time listener for the first time for SO .. I ask a question that was asked very similar before, but I don’t think I'm smart enough to decipher how to implement the solution because I apologize. Here is the link to the question I found: Limitations in R multipurpose linear programming

I maximize my predicted fantasy points (FPTS_PREDICT_RF), with 50,000 salary points, minimizing the β€œrisk” calculations that I came up with.

Now the problem lies in the "flex" position. The team should consist of 9 positions, 1 QB 2 RB 3 WR 1 TE 1 DEF 1 FLEX

Flexion may be RB, WR or TE.
So we can: 1 QB 2-3 RB 3-4 WR 1-2 TE 1 DEF

I am trying to implement a constraint that is #RB + #WR + #TE == 7.

Here is the relevant 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 == "WR"), # num WR as.numeric(final$position == "TE"), # num TE as.numeric(final$position == "DEF"),# num DEF diag(final$riskNormalized), # player risk final$Salary) # total cost direction <- c("==", "<=", "<=", "<=", "==", rep("<=", num.players), "<=") rhs <- c(1, # Quartbacks 3, # Running Backs 2, # Wide Receivers 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 

Can someone help me implement this limitation? Any help is really, really appreciated!

EDIT: The reference to the "final" dataset is the csv format: https://www.dropbox.com/s/qp35wc4d380hep1/final.csv?dl=0

CONSTANT QUESTION: For any of you fantasy football players, I calculate my risk factor directly from the SD player of historical fantasy points, and normalize this number over support [0.10]. Can you think of a better way to calculate player risk?

+8
r constraints mathematical-optimization linear-programming
source share
1 answer

You can do this by adding the following restrictions:

  • RB number> = 2
  • The number of RBs <= 3
  • The number WR> = 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 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, a subset of final :

 final[sol$solution==1,] # X PLAYER FPTS_PREDICT_LIN FPTS_PREDICT_RF Salary position # 1 1 AJ 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, you have chosen a wide receiver in a flexible position.

+8
source share

All Articles