R LpSolve如何通过预算限制来优化选择

时间:2017-10-22 14:01:54

标签: r optimization restriction lpsolve

我在R中有一个关于LpSolve的问题。我有一个包含以下数据的小组:足球运动员ID(大约500名玩家),他们每人已经玩了多少场比赛,进球数和球员费用。我想从这些数据中创建一个矩阵,但我不知道这对于如此大量的数据是如何工作的(我有大约500个足球运动员,因此有500行)。

目标是为1,000,000的预算选择最佳玩家数量。每位玩家只能选择一次,并根据得分目标的数量进行优化。

最后,我希望得到最佳目标选手,并且预算必须(几乎)用完。

由于我对R比较新,我不知道如何用LpSolve解决这个问题,而且我在矩阵生成和约束中失败了。

我非常感谢你的帮助!

我的面板看起来像这样(示例):

footballplayerID |游戏玩法avggoals | costsperplayer

  1. 233276 | 120 | 80 | 50.000
  2. 474823 | 200 | 140 | 34.000
  3. 192834 | 150 | 90 | 14.000
  4. 192833 | 30 | 50 | 90.000
  5. 129834 | 204 | 129 | 70.000
  6. 347594 | 123 | 19 | 10.000
  7. 203845 | 129 | 57 | 43.000
  8. 128747 | 98 | 124 | 140.000
    1. 123749 | 128 | 182 | 100.000

1 个答案:

答案 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, ]