在我们的游戏中,我们有一个老板(NPC(,他的生命正在被检查一个时间间隔,比如1分钟。我需要找到一种方法来推断已知点(生命,时间(,并大致预测一分钟后的生命(1分钟后生命将再次检查,并将放入数据集(此外,外推主要需要考虑最近的变化(例如,如果我们有10个点,而最后两个点变化迅速,它应该能够在下一个点预测更快速的变化(。我找到了多个示例,这个和这个,但似乎我无法在 as3 代码中翻译所有这些。基本上我正在寻找的是2D外推。
附言关键是任何计算值都不能超过之前的任何值,那是因为boss的生命值不能增加,也不能保持不变;他们只能减少。我想这意味着外推是行不通的。所以我正在寻找另一种可以做到的算法。
考虑一种受微积分启发的方法。如果我们有一个列表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[]
是 i> 1 的所有时间d[]
的变化。由于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]
当然,这对传入的数据做出了很多假设。我能想到的两个最重要的问题:
- 这假设最近的变化完全代表未来的值 - 在变化项是非线性的情况下,这会导致估计滞后于实际数据
- 随着添加更多项,"滞后"变得更强 - 更好的估计(更多项(必须与更好的敏捷性(更少的项(相平衡
- 传入数据中的异常值直接反映在等式中,从而直接影响生成的估计值