gpt4 book ai didi

R 团队花名册优化 w/lpSolve

转载 作者:行者123 更新时间:2023-12-03 16:54:43 25 4
gpt4 key购买 nike

我是 R 的新手,有一个我想解决的特定梦幻运动队优化问题。我已经看到其他帖子使用 lpSolve 来解决类似的问题,但我似乎无法理解代码。下面的示例数据表。每个球员都在一个团队中,扮演着特定的角色,有薪水,并且每场比赛都有平均得分。我需要的限制是我需要 8 个玩家。任何一支球队不得超过 3 名球员。每个角色必须至少有一名玩家(共 5 名)。并且累计工资不得超过 $10,000。

Team    Player   Role      Avgpts    Salary
Bears A T 22 930
Bears B M 19 900
Bears C B 30 1300
Bears D J 25 970
Bears E S 20 910
Jets F T 21 920
Jets G M 26 980
[...]

在R中,我写在下面

> obj = DF$AVGPTS
> con = rbind(t(model.matrix(~ Role + 0, DF)), rep(1,nrow(DF)), DF$Salary)
> dir = c(">=",">=",">=",">=",">=","==","<=")
> rhs = c(1,1,1,1,1,8,10000)
> result = lp("max", obj, con, dir, rhs, all.bin = TRUE)

此代码可以很好地生成最佳梦幻团队没有来自任何一个团队的玩家不超过 3 人的限制。这是我被卡住的地方,我怀疑它与 con 论点有关。任何帮助表示赞赏。

最佳答案

如果您添加类似于您为 con 设置角色的方式会怎样?

如果您添加 t(model.matrix(~ Team + 0, DF)),您将在约束中为每个团队提供指标。对于您给出的示例:

> con <- rbind(t(model.matrix(~ Role + 0,DF)), t(model.matrix(~ Team + 0, DF)), rep(1,nrow(DF)), DF$Salary)
> con
1 2 3 4 5 6 7
RoleB 0 0 1 0 0 0 0
RoleJ 0 0 0 1 0 0 0
RoleM 0 1 0 0 0 0 1
RoleS 0 0 0 0 1 0 0
RoleT 1 0 0 0 0 1 0
TeamBears 1 1 1 1 1 0 0
TeamJets 0 0 0 0 0 1 1
1 1 1 1 1 1 1
930 900 1300 970 910 920 980

我们现在需要更新 dirrhs 来解决这个问题:

dir <- c(">=",">=",">=",">=",">=",rep('<=',n_teams),"<=","<=")
rhs <- c(1,1,1,1,1,rep(3,n_teams),8,10000)

适当设置n_teams

关于R 团队花名册优化 w/lpSolve,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30182557/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com