根据变化率计算敌人的生命值(推断)?

时间:2014-12-07 19:59:19

标签: algorithm actionscript-3 extrapolation

在我们的游戏中,我们有一个老板(NPC),他的生命正在按时间间隔进行检查,比如1​​分钟。 我需要找到一种方法来推断已知点(生命,时间),并大致预测一分钟后的生命(将再次检查生命1分钟后,将被放入数据集) 此外,外推需要考虑最近的变化(例如,如果我们有10个点,最后两个变化很快,它应该能够预测下一点更快速的变化)。 我找到了多个示例this onethis one,但似乎我无法在as3代码中翻译所有这些内容。基本上我所寻找的是 2D外推

P.S。关键是任何计算出的值都不应高于任何先前的值,这是因为老板'生命值不能增加,也不能保持不变;他们只会减少。我想这意味着外推不会。所以我正在寻找另一种算法。

1 个答案:

答案 0 :(得分:1)

考虑一种基于微积分的方法。如果我们在过去d[i]有一个损失列表i且当前时间为n,那么我们可以使用列表中的先前值估算d[n+1]d[n] - d[n-1]根据最近的值提供从d[n]d[n+1]的变化估算值,(d[n] - d[n-1]) - (d[n-1] - d[n-2])提供对该变化变化的估算,依此类推。我们的想法是使用差分来估计变化。如果您有时间序列数据列表d[i] = [a,b,c,...]和其他列表d2[i] = d[i] - d[i-1],那么d2[]d[]所有时间的变化i> 1.由于d2[]也是一个时间序列,您可以使用它来创建d3[],将这些术语链接起来以提供估算值:

d[n+1] ~ d[n]    +    ( (d[n] - d[n-1]) )  +  ( (d[n] - d[n-1]) - (d[n-1] - d[n-2]) )  +  ...
         ^last value    ^ est. change           ^est. change of change
         d[n]           d2[n]                   d3[n]

假设这对输入数据进行了批次假设。我能想到的两个最重要的问题:

  • 这假设最近的变化完全代表未来的价值 - 如果变更项是非线性的,这会导致估算落后于实际数据
  • "滞后"随着更多术语的增加而变得更强 - 更好的估计(更多术语)必须与更好的敏捷性(更少的术语)相平衡
  • 输入数据中的异常值直接计入等式,因此直接影响估算结果