【发布时间】:2017-06-27 03:56:32
【问题描述】:
几个月前我尝试提问失败后(不够详细) - 我会再试一次。
基本上我正在尝试为游戏(RuneScape)开发一个计算器,这将确定使用能力的最佳顺序,每个能力可能有自己独特的变量,一些例子(这些是实际能力):
顺序:技能名称、平均(技能)伤害、技能冷却时间(可以再次使用之前的时间)、可以使用的肾上腺素(介于 0 到 100 之间的条,某些技能可以在任何时候使用,并且添加 8 到条,其他需要,使用 50 甚至 100 并将删除 15/将条重置为零),使用能力所需的时间,最后我包括任何其他特殊细节。
Sever:平均伤害 112.8,冷却时间:15 秒,用于任何“肾上腺素”,给予 +8,执行需要 1.8 秒
突击:525.6 平均伤害,冷却时间:30 秒,在 50(或更高)肾上腺素时使用,带走 -15,执行需要 4.2 秒。
驳船:平均伤害 75,冷却时间 20.4 秒,用于任何给予 +8 的“肾上腺素”,执行需要 1.8 秒,将绑定目标 6.6 秒。
切片:平均伤害 70,冷却时间 3 秒,用于任何肾上腺素 +8,执行需要 1.8 秒,如果目标被束缚,将造成(假设为 1.5 - 为简单起见)额外伤害。
现在,假设我只想要一个 6 秒的轮换(为简单起见),并在 50 岁时开始“肾上腺素”,将有多种方式来执行这些能力(例如):
- 攻击,然后是服务器
- 驳船,然后是切片,然后是切断,然后是小型攻击。
等等……
在这种情况下,算法可以使用蛮力算法轻松计算出最佳方法并存储最佳解决方案。但是,鉴于这是一个简单的示例,如果我想要在 18 秒内使用 10 种能力,那么蛮力只会花费太长时间(除非有人有备用的 Quantum 计算机)。除了检查随机场景之外,还有人知道一种“启发式”解决方案,它可能并不总是给出最好的结果,但给出的结果接近最好?
- 感谢所有真正阅读并理解我的文章的人。
【问题讨论】:
-
您尝试过暴力破解方法吗?我不认为这是不可行的,你展示的技能至少有 3 秒的冷却时间,例如置换 6 件东西并不昂贵。如果结果太多,您可以使用蒙特卡洛方法,在您尝试随机组合一段时间后停止。
-
另一个注意事项,你应该寻找一个“稳定状态”的伤害输出,我猜你会找到的序列总是以
assault开头,但是由于其他限制,你不能链接这样的序列。您想要一些可以轻松重复的周期性内容。 -
我上面提到过,这是一个可以使用蛮力的小例子,但是当能力和时间的输入变大时,蛮力就太长了。
-
能力是用户输入,它们的范围可以从 1 到 10/11(最常见)到最大略高于 20 编辑:是的,我已经尝试过了 :)
-
您能否添加相关代码,我想这将是从该站点获得新想法的最佳选择。启发式方法高度依赖于问题空间,如果您在数月的工作中没有找到可以很好地组合的东西,我怀疑其他人会随便弹指并找到它。但是这里有专家可以显着加快速度,至少您可以暴力破解更多技能。
标签: python algorithm heuristics