所以,这与标准的梦幻足球有点不同。我所拥有的是球员名单,他们的平均“每场比赛得分”(PPG)和他们的薪水。我想在我的球队没有超过工资帽的限制下最大化每场比赛得分。一个团队由1个QB,1个TE,3个WR和2个RB组成。因此,如果我们有15个每个位置,我们有15X15 X(15 c 3)X(15 c 2)= 10749375个可能的团队。
计算复杂。我可以使用一些分支和绑定,即一旦团队超过工资帽我可以修剪树,但即使这样算法仍然很慢。我尝试了另一个选项,我使用了一个“遗传算法”,即制作了10个随机团队,选择了最好的一个团队并“突变”它(随机改变一些玩家)进入另外10个团队,然后选择那些然后通过一堆循环直到“最佳阵容”的每场比赛停止变得更好的时间。
必须有更好的方法来做到这一点。我不是计算机科学家,我只参加过算法学的入门课程。程序员 - 你有什么想法?我觉得动态编程的某种应用可以提供帮助。
由于
答案 0 :(得分:2)
我认为智能实施的遗传算法会为您产生可接受的结果。您可能希望使用一个指标,如每工资美元点数,而不是直接PPG来决定最佳团队。这样你就可以测量增值。此外,您应该考虑将完整的算法/突变运行多次以令人满意地完成,以便您可以识别玩家在最终结果中始终如一地显示的内容。那么这些球员应该高于其他球员。
当然,genetc方法存在的问题是你需要一个好的变异算法,并且对于你想要实现它的方式非常个性化。
答案 1 :(得分:0)
将i作为n个玩家中当前的玩家数量,将j作为当前剩余的剩余工资。以m [i,j]为动态解集。
Then m[i, 0] = 0, m[0, j] = 0
and
m[i, j] = m[i - 1, j] if salary for player i is greater than j
else
m[i, j] = max ( m[i - 1, j], m[i - 1, j - salary of player i] + PPG of player i)
很抱歉,我不知道R,但我对算法很好,所以我希望这会有所帮助。
你可以做的进一步优化是你真的只需要2行m [i,j]因为DP解决方案只使用当前行和最后一行(你可以用这种方式节省内存)
答案 2 :(得分:0)
首先,您提供的变体不应该是正确的。建立团队的最佳方式是通过限制加上限制位置,绝对没有感觉在他们之间移动3个类似位置的玩家。
克里斯蒂安·罗纳尔多,苏亚雷斯和梅西将在任何阵容中给你平等的幻想点,例如: 克里斯蒂安罗纳尔多,苏亚雷斯和梅西 要么 苏亚雷斯,克里斯蒂安罗纳尔多和梅西 要么 梅西,苏亚雷斯,罗纳尔多
第一步 - 简化变异可能性。 下一步 - 计算平均价格,并通过添加薪水较低但价格较高的玩家逐一建立团队。当达到工资限制时,删除昂贵的工资限制并添加更便宜但具有相同的幻想点 - 依此类推。不要建立变化,通过工资和幻想点的组合来衡量每个玩家的重量。
答案 3 :(得分:0)
这有帮助吗?它设置约束并最大化点。
您可以适应从excel中获取数据
http://pena.lt/y/2014/07/24/mathematically-optimising-fantasy-football-teams 14/07/24 /数学优化的幻想-足球队