我在R中有一个关于LpSolve的问题。我有一个包含以下数据的小组:足球运动员ID(大约500名玩家),他们每人已经玩了多少场比赛,进球数和球员费用。我想从这些数据中创建一个矩阵,但我不知道这对于如此大量的数据是如何工作的(我有大约500个足球运动员,因此有500行)。
目标是为1,000,000的预算选择最佳玩家数量。每位玩家只能选择一次,并根据得分目标的数量进行优化。
最后,我希望得到最佳目标选手,并且预算必须(几乎)用完。
由于我对R比较新,我不知道如何用LpSolve解决这个问题,而且我在矩阵生成和约束中失败了。
我非常感谢你的帮助!
我的面板看起来像这样(示例):
footballplayerID |游戏玩法avggoals | costsperplayer
答案 0 :(得分:0)
首先我创建一个像这样的df: df< - read.table(text = “footballplayerID | gamesplayed | avggoals | costperplayer 233276 | 120 | 80 | 50000 474823 | 200 | 140 | 34000 192834 | 150 | 90 | 14000 192833 | 30 | 50 | 90000 129834 | 204 | 129 | 70000 347594 | 123 | 19 | 10000 203845 | 129 | 57 | 43000 128747 | 98 | 124 | 1400001" , header = TRUE, stringsAsFactors = FALSE, sep =“|” )
library(lpSolve)
目标函数的系数为avggoals
:
obj_fun <- df$avggoals
约束是costperplayer
的总和,需要小于或等于100.000.000
constraints <- matrix(df$costsperplayer, nrow = 1)
c_dir <- "<="
c_rhs <- 1000000
然后,您可以使用lp()
解决该问题。参数all.bin = TRUE
确保您选择一次或根本没有选择。
lp <- lp("max",
obj_fun,
constraints,
c_dir,
c_rhs,
all.bin = TRUE)
你可以看看所选的球员:
df[lp$solution == 1, ]