【发布时间】:2016-07-26 20:04:11
【问题描述】:
我有一个优化问题,它提供了一些问题。
当我运行以下代码时,我得到了一个最佳解决方案。
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)
但问题是数据框中的一些球员是重复的,因为他们有多个位置。同一个玩家有2行,只是位置列不同,但我每个玩家只能使用一次。所以我在里面添加了以下约束。
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 个唯一的、非重复的玩家,同时遵循其他约束的任何建议?
【问题讨论】:
标签: r mathematical-optimization glpk