gpt4 book ai didi

R - 数据框与约束的组合

转载 作者:行者123 更新时间:2023-12-04 11:46:09 25 4
gpt4 key购买 nike

我正在尝试为梦幻足球制作一个 R 脚本(真正的英国足球,而不是手蛋 :-)),我可以在其中输入 csv 中的球员列表,它会吐出每 11 名球员的组合,这满足各种约束。

这是我的示例数据框:

df <- read.csv("Filename.csv",
header = TRUE)
> print(df)
Name Positon Team Salary
1 Eric Dier D TOT 9300000
2 Erik Pieters D STO 9200000
3 Christian Fuchs D LEI 9100000
4 Héctor Bellerín D ARS 9000000
5 Charlie Daniels D BOU 9000000
6 Ben Davies D TOT 8900000
7 Federico Fernández D SWA 8800000
8 Per Mertesacker D ARS 8800000
9 Alberto Moreno D LIV 8700000
10 Chris Smalling D MUN 8700000
11 Seamus Coleman D EVE 8700000
12 Jan Vertonghen D TOT 8700000
13 Romelu Lukaku F EVE 12700000
14 Harry Kane F TOT 12500000
15 Max Gradel F BOU 11900000
16 Alexis Sánchez F ARS 11300000
17 Jamie Vardy F LEI 11200000
18 Theo Walcott F ARS 10700000
19 Olivier Giroud F ARS 10700000
20 Wilfried Bony F MCI 10000000
21 Kristoffer Nordfeldt G SWA 7000000
22 Joe Hart G MCI 6800000
23 Jack Rose G WBA 6600000
24 Asmir Begovic G CHE 6600000
25 Mesut Özil M ARS 15600000
26 Riyad Mahrez M LEI 15200000
27 Ross Barkley M EVE 13300000
28 Dimitri Payet M WHM 12800000
29 Willian M CHE 12500000
30 Bertrand Traore M CHE 12500000
31 Kevin De Bruyne M MCI 12400000

约束条件如下:

1)每个11人阵容总薪水不能超过1亿

2) 一支队伍最多只能有四名选手。例如。来自“CHE”(切尔西)的四名球员。

3) 每个 11 人阵容中每个位置的球员数量是有限制的。可以有:

1 G(守门员)、3 到 4 D(后卫)、3 到 5 M(中场)、1 到 3 F(前锋)

我希望返回满足上述限制条件的所有 11 个玩家组合。顺序并不重要(例如,1、2、3 被认为与 2、1、3 相同,不应重复)并且一名球员可以出现在多个阵容中。

我已经做了相当多的研究并尝试了一下,但似乎无法解决这个问题。我是 R 的新手。我不希望有人为我解决这个问题,但如果有人能为像我这样的新手指出正确的方向,我将不胜感激。

谢谢。

最佳答案

这可以使用库 LPSolve 求解为线性整数规划。这种问题很容易解决——与之前写的相反——因为解决方案的数量通常比域大小小得多。

您可以为每个球员添加一个零一变量,无论该球员是否在球队中。

可以使用安装包

 install.packages("lpSolve")
install.packages("lpSolveAPI")

文档可在以下位置找到:https://cran.r-project.org/web/packages/lpSolve/lpSolve.pdf

玩家11的第一个约束和

薪水基本上是所有球员变量乘以薪水列等的总和....

要获得正确的解决方案,您需要在

中指定
lp.solve(all.bin=TRUE

所有涉及玩家的变量不是零就是一。

(我知道你在努力学习,这就是为什么我不提供完整的解决方案)

编辑因为我可能因为没有提供完整的解决方案而被否决。有点难过,因为原作者明确写道他不希望有一个完整的解决方案

library(lpSolve)

df <- read.csv("/tmp/football.csv",header = TRUE,sep=";")

f.obj <- rep(1,nrow(df))

f.con <-
matrix(c(f.obj <- rep(1,nrow(df)),
as.vector(df$Salary),
(df$Positon=="G") *1.0,
(df$Positon=="D") *1.0,
(df$Positon=="D") *1.0,
(df$Positon=="M") *1.0,
(df$Positon=="M") *1.0,
(df$Positon=="F") *1.0,
(df$Positon=="F") *1.0),nrow=9,byrow= TRUE)

f.dir <- c("==", "<=","==",">=","<=",">=","<=",">=","<=")

f.rhs<- c(11, #number players
100000000, #salary
1 , #Goalkeeper
3 , # def min
4 , # def max
3 , # mdef min
5, # mdef max
1, # for, min
3 # wor, max
)



solutions <- lp ("max", f.obj, f.con, f.dir, f.rhs,all.bin=TRUE)

我没有添加团队约束,因为它不会在这里提供任何额外的见解....

** 编辑2 **如果您更改数据集,这可能会派上用场 R lpsolve binary find all possible solutions

关于R - 数据框与约束的组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34480151/

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