我必须编写AI代码才能在游戏中找到宇宙飞船的质量
我的AI可以向宇宙飞船施加一点力c
,通过速度的变化来测量质量。
但是,我的AI只能在每个时间步中访问宇宙飞船的当前位置x
。
质量不是常数,但可以安全地假设它不会变化太快。
为简单起见: -
让空间为1D,没有重力
时间步长总是1秒。
目前有许多力量施加在宇宙飞船上,例如重力,由未知AI控制的自动推进系统,碰撞冲击等。
这些力的总和为b
,取决于t
(时间)。
特定时间步的加速a
是通过一个不受我控制的游戏公式来计算的: -
a = (b+c)/m
.................(1)
速度v
更新为: -
v = vOld + a
.................(2)
位置x
更新为: -
x = xOld + v
.................(3)
执行顺序(1) - (3)也是未知的,即AI不应该依赖这样的命令。
我将施加c0=0.001
几秒钟,并将结果与我施加c1=-0.001
时的结果进行比较。
我认为b
和m
在这段时间内是不变的。
我通过以下方式计算加速度: -
t 0 1 2 3 (Exert force `c0` at `t1`, `c1` at `t2`)
x 0 1 2 3 (The number are points in timeline that I sampling x.)
v 0 1 2 (v0=x1-x0, v1=x2-x1, ... )
a 0 1 (a0=v1-v0, ... )
现在我知道2点时间线的加速,我可以缓存c
,因为我是发挥它的人。
使用a = (b+c)/m
,未知b
和m
以及已知a0
,a1
,c0
和c1
: -
a0 = (b+c0)/m
a1 = (b+c1)/m
我可以解决这些问题,找到b
和m
。
然而,我的假设在开始时是错误的
b
和m
实际上不是常量。
可以通过更随意的方式查看此问题:
许多人正试图举起沉重的岩石
我就是其中之一
如何在不中断过度的情况下测量岩石的质量(用我的手感觉)?