R多重整数线性规划中的约束

时间:2014-10-01 20:41:04

标签: r optimization constraints linear-programming

我正在研究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]

1 个答案:

答案 0 :(得分: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