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

R LpSolve How to optimize picks with Budget Restriction

我对 R 中的 LpSolve 有疑问。我有一个包含以下数据的面板:足球运动员 ID(大约 500 名球员),他们每人已经踢了多少场比赛,进球数和成本播放器。我想根据这些数据创建一个矩阵,但我不知道它如何处理如此大量的数据(我有大约 500 名足球运动员,因此有 500 行)。

目标是 select 1,000,000 预算的最佳玩家数量。每个球员只能 selected 一次,根据进球数进行优化。

最终我想要获得最佳 select 进球最多的球员,预算必须(几乎)用完。

由于我对 R 比较陌生,所以我还不知道如何使用 LpSolve 解决这个问题,而且我在矩阵产生式和约束方面失败了。

非常感谢您的帮助!

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

footballplayerID |玩过的游戏 |平均目标 |每位玩家的成本

  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

首先我像这样创建一个 df: df <- read.table(文字= "footballplayerID | 上场次数 | 平均进球数 | 每位球员的成本 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 = 正确, stringsAsFactors = FALSE, 九月=“|” )

library(lpSolve)

objective函数的系数是avggoals:

obj_fun <- df$avggoals

约束是costperplayer的总和需要小于等于100.000.000

constraints <- matrix(df$costsperplayer, nrow = 1)
c_dir <- "<="
c_rhs <- 1000000

然后您可以使用 lp() 解决 lp 问题。参数 all.bin = TRUE 确保您选择一次玩家或根本不选择玩家。

lp <- lp("max",
         obj_fun,
         constraints,
         c_dir,
         c_rhs, 
         all.bin = TRUE)

您可以查看所选球员:

df[lp$solution == 1, ]