根据https://www.heroescounters.com/teampicker的说法,英雄与另一个英雄有协同价值,风暴英雄有60+英雄,例如:
HeroID Synergy.With.HeroID Synergy.Points
1 2 97
1 3 95
1 4 94
45 1 2
45 2 11
一个团队在风暴的英雄中有5个英雄,一个团队的全部协同作用是由公式计算的:
Team_total_synergy = Synergy_Points(Hero1 with Hero2) +
mean(Synergy_Points(Hero3 + Hero1) + Synergy_Points(Hero3 + Hero2)) +
mean(Synergy_Points(Hero4 + Hero1) + Synergy_Points(Hero4 + Hero2) + Synergy_Points(Hero4 + Hero3)
[And so on... till Hero5]
解释公式: Hero 1和Hero 2协同后的每一个协同值都是由该英雄与团队其他成员的平均值计算的,当Hero5加起来时,我得到了团队的协同效应,并将所有值相加。
我的答案是,我如何(用Python或R)找到具有最大协同作用的团队,如果有64名英雄(大约),我如何编写代码来找到它。
发布于 2017-06-09 04:43:15
最简单的方法是通过计算英雄的所有64^5
组合并计算他们的总协同得分来强迫它。然而,在大多数计算机上,这需要几分钟到一小时。
更有效的方法是首先将Synergy.Points列排序为最高到最低。然后,问题变成了找到一条由五位英雄组成的“道路”,这样路径中的最高位置就会尽可能低(即与最大的协同作用相关联)。
一条道路是一个英雄列表,这样你就可以从一个英雄跳到另一个英雄,直到你有了五个独特的英雄。在下表中,路径为1 -> 2 -> 5 -> 6 -> 7。与此路径关联的表中的位置为1、4、5、2,其中最高点为5。
这将保证总的协同作用是最高的。
HeroID Synergy.With.HeroID Synergy.Points
1 2 97
6 7 95
1 4 94
2 5 11
5 6 2
至于python代码,这有点棘手..。我试着解决了大约20分钟,但我意识到有很多复杂的。例如,一个路径可能有一个循环,如果您的程序不小心,它可能会创建一个无限循环。
如果你想做这个过程一次,为这个游戏寻找最有效的团队,我会尝试蛮力的方法。如果您想要一遍又一遍地运行这段代码,我将向计算机科学堆栈溢出()提出这一点,并在python中使用get和算法来实现这一点。
我希望这有帮助:)
https://stackoverflow.com/questions/44449013
复制相似问题