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 |玩过的游戏 |平均目标 |每位玩家的成本
- 233276 | 120 | 80 | 50.000
- 474823 | 200 | 140 | 34.000
- 192834 | 150 | 90 | 14.000
- 192833 | 30 | 50 | 90.000
- 129834 | 204 | 129 | 70.000
- 347594 | 123 | 19 | 10.000
- 203845 | 129 | 57 | 43.000
- 128747 | 98 | 124 | 140.000
.
.
- 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, ]
我对 R 中的 LpSolve 有疑问。我有一个包含以下数据的面板:足球运动员 ID(大约 500 名球员),他们每人已经踢了多少场比赛,进球数和成本播放器。我想根据这些数据创建一个矩阵,但我不知道它如何处理如此大量的数据(我有大约 500 名足球运动员,因此有 500 行)。
目标是 select 1,000,000 预算的最佳玩家数量。每个球员只能 selected 一次,根据进球数进行优化。
最终我想要获得最佳 select 进球最多的球员,预算必须(几乎)用完。
由于我对 R 比较陌生,所以我还不知道如何使用 LpSolve 解决这个问题,而且我在矩阵产生式和约束方面失败了。
非常感谢您的帮助!
我的面板看起来像这样(示例):
footballplayerID |玩过的游戏 |平均目标 |每位玩家的成本
- 233276 | 120 | 80 | 50.000
- 474823 | 200 | 140 | 34.000
- 192834 | 150 | 90 | 14.000
- 192833 | 30 | 50 | 90.000
- 129834 | 204 | 129 | 70.000
- 347594 | 123 | 19 | 10.000
- 203845 | 129 | 57 | 43.000
- 128747 | 98 | 124 | 140.000
.
.
- 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, ]