1
我有一个优化问题,提供了一些问题。RGLPK约束问题
当我运行下面的代码时,我得到了一个最佳解决方案。
objective <- DK$DK.proj
objective.variable.types <- rep("B", length(DK$player))
constraint.matrix <- rbind(as.numeric(DK$pos == "SP"),
as.numeric(DK$pos == "C"),
as.numeric(DK$pos == "1B"),
as.numeric(DK$pos == "2B"),
as.numeric(DK$pos == "SS"),
as.numeric(DK$pos == "3B"),
as.numeric(DK$pos == "OF"),
DK$salary)
constraint.directions <- c(
"==", # SP
"==", # C
"==", # 1B
"==", # 2B
"==", # SS
"==", # 3B
"==", # OF,
"<=") # max salary
rhs <- c(
2, # SP
1, # C
1, # 1B
1, # 2B
1, # SS
1, # 3B
3, # OF
50000) # max salary
Rglpk_solve_LP(obj = objective, mat = constraint.matrix, dir = constraint.directions, rhs = rhs,
types = objective.variable.types, max = TRUE)
但问题是一些球员在数据框架中被重复,因为他们有多个职位。有两行同一个玩家,只有一个不同的位置列,但我只能使用每个玩家一次。所以我加了下面的约束。
objective <- DK$DK.proj
objective.variable.types <- rep("B", length(DK$player))
constraint.matrix <- rbind(as.numeric(DK$pos == "SP"),
as.numeric(DK$pos == "C"),
as.numeric(DK$pos == "1B"),
as.numeric(DK$pos == "2B"),
as.numeric(DK$pos == "SS"),
as.numeric(DK$pos == "3B"),
as.numeric(DK$pos == "OF"),
DK$salary,
n_distinct(DK$player))
constraint.directions <- c(
"==", # SP
"==", # C
"==", # 1B
"==", # 2B
"==", # SS
"==", # 3B
"==", # OF,
"<=", # max salary
"==") # max players
rhs <- c(
2, # SP
1, # C
1, # 1B
1, # 2B
1, # SS
1, # 3B
3, # OF
50000, # max salary
10) # max players
Rglpk_solve_LP(obj = objective, mat = constraint.matrix, dir = constraint.directions, rhs = rhs,
types = objective.variable.types, max = TRUE)
现在我无法得到一个可行的解决方案。关于我应该改变约束的任何建议,以便我可以始终拥有10个独特的,非重复的球员,同时遵循其他约束条件?
太棒了,谢谢你的工作很棒! – NateN