2014-10-01 137 views
1

我正在研究R中的一些代码来优化我的幻想足球阵容,但是我遇到了一些限制。我基本上有一个球员名单,他们的位置,预期的点数和成本。R多重整数线性规划中的约束

名册必须包括:

1 QB 2 RB 2 WR 1 TE 1 FLEX(无论是RB,WR,或TE) 总在$ 200

我的问题的成本是我的代码希望选择FLEX位置作为WR,RB或TE已选择的播放器。这里是我正在使用的代码,我有一张表,我输入了用于播放器,位置,点数和成本的列。在表中,任何RB,WR或TE都与FLEX一样位置重复。我试图改变将pos ==“FLEX”设置为pos ==“WR”|| pos ==“RB”|| pos ==“TE”的那一行,但那不起作用,我唯一的想法是运行代码,如果它复制了FLEX播放器,我将它从源表中删除。虽然这有点痛苦。

任何想法,不胜感激。

name <- mydata$name 
pos <- mydata$pos 
pts <- mydata$pts 
cost <- mydata$cost 

num.players <- length(name) 

f <- pts 

var.types <- rep("B", num.players) 

A <- rbind(as.numeric(pos=="QB") 
     , as.numeric(pos=="RB") 
     , as.numeric(pos=="WR") 
     , as.numeric(pos=="TE") 
     , as.numeric(pos=="FLEX") 
     ,cost) 

dir <- c("==" 
     ,"==" 
     ,"==" 
     ,"==" 
     ,"==" 
     ,"<=") 

b <- c(1 
    , 2 
    , 2 
    , 1 
    , 1 
    , 200) 

library(Rglpk) 

sol <- Rglpk_solve_LP(obj = f 
       , mat = A 
       , dir = dir 
       , rhs = b 
       , types = var.types 
       , max=TRUE) 
sol 

name[sol$solution == 1] 

回答

4

可以重写:

1 QB 2 RB 2 WR 1 TE 1 FLEX (either a RB, WR, or TE) 

由于

num(QB) == 1 
2 <= num(RB) <= 3 
2 <= num(WR) <= 3 
1 <= num(TE) <= 2 
num(RB) + num(WR) + num(TE) == 6 
+0

咄,那是很容易的。感谢您的帮助,我知道我正在推翻它。 – user1723699 2014-10-01 21:14:08