因此,我正在为我玩的游戏开发一些计算器 - 为了好玩,它具有不同的冷却时间,使用时间,可以在其他地方使用的百分比等各种能力......
到目前为止,我通过分析基础中的数字来做到这一点,但我有很多能力,所以例如假设我在4秒内使用了5个技能:
<00> 0000:60伤害(使用异能0,试图再次使用但失败 - 所以返回能力伤害为0)0001:60点伤害
略过几句......
0101:200伤害
再次......
伤害4444:70。流程终止。 - 希望这是有道理的。
问题是,在暴力中这样做很好地适用于很短的时间(如上)和数量或能力,但是在更高的时间和数量的能力下它分析数万亿的模拟,这意味着蛮力不再成为一种选择。
问题是,考虑到数据大多是随机的,是否有任何启发式算法(所有思想可能不会返回最优)将返回相对较好的结果。
感谢您的回复:)
答案 0 :(得分:0)
让我重新确认一下,以确保我理解正确:你想找到最好的技能排序,考虑到他们的个人伤害和冷却时间,这样每次只使用一种技能,并且没有比使用技能更频繁地使用技能冷却允许。如果是这样,这是一种调度问题,一种方法是通过linear programming。
粗略的想法是引入n_skills * simulation_length
个变量x[skill][time]
,每个变量约束在0和1之间,并在skill
时解释“使用技能time
if {{ 1}},不要使用if x[skill][time] == 1
“。现在,您可以在其他线性约束(通过== 0
解释 - 类似伪代码)下优化由其技能造成的损害加权的所有变量的总和sum(x[skill][:] * damage[skill] for skill in skills)
:
numpy
,t
(每次最多只能使用一项能力)sum(x[:][t]) <= 1
和时间a
t0
(在冷却期间,您最多只能使用一次能力)现在最棘手的部分是,虽然这会给你一个在某种意义上最优的解决方案,但它很可能不是物理,那就是你会得到小数sum(x[a][t0-cooldown(a):t0+cooldown(a)] <= 1
秒。这是启发式部分开始的地方,你必须找到一些方法将解决方案“整合”到整数,在过程中失去客观价值,使其在物理上(游戏合法)有意义。一种方法是仅保留x
,并将所有其他数字舍入为零。它将提供一个有意义的解决方案,但它可能不会令人满意(即你的角色几乎什么都不做)。鉴于我的问题模型非常简单,我希望有一些关于如何进行良好舍入的理论结果。
虽然我可以建议scipy package解决线性程序,但是构建约束矩阵和舍入结果(甚至是简单的)的整个问题不是初学者级编程任务。