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