公式/类根据工资帽/点找到最佳阵容

时间:2014-09-11 12:10:18

标签: php mysql algorithm pear

随着所有日常奇幻游戏的出现,我希望看看我能否轻松实现一个平台,帮助确定幻想联盟的最佳阵容,基于工资上限和每位玩家的预计积分。

如果有大约500名球员,你需要找到最高工资帽限制内的最高得分阵容。 1季度返回 2跑回来 3宽接收器 1紧结束 1踢球者 1防御

每位玩家都被分配了一份工资(每周更换一次),我将为这些球员分配预计分数。我在MySQL数据库中有这些信息,如果这是计算它的最佳选择,我宁愿使用PHP / Pear或JQuery。

表格看起来像这样

player_id name         position salary ranking projected_points
1         Joe Smith    QB       1000   2       21.7
2         Jake Plummer QB       2500   6       11.9  

我尝试按预计积分排序并填写名单,但显然会提供得分最高的球队,但也超过了工资帽。我想不出一种方法可以让它智能地移除玩家并继续循环并找到基于工资限制的最高得分阵容。

那么,您知道的任何PHP或Pear课程是否有帮助" Solve"这类问题?您可以指点我的任何文章供参考吗?我没有要求有人这样做,但我已经谷歌了一段时间,而我目前拥有的最佳解决方案就是这个。 http://office.microsoft.com/en-us/excel-help/pick-your-fantasy-football-team-with-solver-HA001124603.aspx并使用Excel并限制为200个对象。

1 个答案:

答案 0 :(得分:1)

我会建议两种解决这个问题的方法。

首先是动态编程。对于暴力,我们可以初始化包含空部分团队的列表,然后,对于每个连续的玩家,对于当前在列表中的每个部分团队,添加该部分团队与新玩家的副本,假设这个新的部分团队尊重位置和预算限制。这是一个指数时间算法,但我们可以减少相当多的运行时间(对于O(#partial position breakdowns * budget * #players),假设所有货币值都是整数)如果我们扔掉除了最好的以外对于部分位置细分和预算的每种组合,到目前为止的可能性。

第二个是找到一个可以从PHP调用的整数编程库,它像Excel的求解器一样工作。它看起来像(例如)lpsolve带有PHP接口。然后我们可以像这样制定一个整数程序。

maximize sum_{player p} value_p x_p
subject to
sum_{quarterback player p} x_p <= 1
sum_{running back player p} x_p <= 2
...
sum_{defense player p} x_p <= 1
sum_{player p} cost_p <= budget
for each player p, x_p in {0, 1} (i.e., x_p is binary)