【发布时间】:2015-12-27 21:34:08
【问题描述】:
我正在尝试为梦幻足球(正确的英国足球,而不是手蛋 :-))制作一个 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人阵容的总工资不能超过100,000,000
2) 一支球队最多只能有四名球员。例如。来自“CHE”(切尔西)的四名球员。
3) 每个 11 人阵容中每个位置的球员人数都有限制。可以有:
1 G(守门员),3 到 4 D(后卫),3 到 5 M(中场),1 到 3 F(前锋)
我希望退回符合上述限制的每 11 个玩家组合。顺序并不重要(例如,1,2,3 被认为与 2,1,3 相同,不应重复),一名球员可以出现在多个阵容中。
我已经进行了相当多的研究并玩过,但似乎对此一无所知。我是 R 的新手。我不希望有人为我解决这个问题,但如果有人可以为像我这样的新手指出正确的方向,我将不胜感激。
谢谢。
【问题讨论】:
-
您为每个约束尝试了什么?代码在哪里?
-
我不知道您的 csv 文件中有多少玩家,但希望您意识到从 31 件事情中选择 所有可能 11 件套,不管顺序,让你84,672,315 个组合进行测试。这里没有简单的出路。您必须根据您的规范构建构建团队的算法,我认为任何库在这里都没有特别的帮助。
-
@kliron:作者描述的问题是一个经典的约束满足问题。这些问题在人工智能中很常见。您答案的第一部分假设问题是使用对接技术解决的。第二部分指向正确的方向。事实上,这些都可以使用任何 CSP 求解器来解决,它们会进行某种巧妙的解决方案构建。幸运的是,有很多算法和库。第一:基于搜索的算法,我不会在 R 中实现/期望。第二算法将问题转化为优化问题,基本上是一组线性方程。
-
在下面查看我的评论。感谢 LPSolve 的提示,我不知道那个库。
标签: r