jav*_*ver 3 algorithm physics artificial-intelligence
我必须编写AI来控制游戏中太空船的许多推进喷气机.
为简单起见: -
让空间为1D.
宇宙飞船是一个点,只有一架喷气机.
让x,v并且a是太空船的位置,速度,加速度.
让我们F成为适用于船舶的喷气式飞机的力量.
我知道m宇宙飞船的质量,让我们说m= 1.
以下是摘要: -
acceleration = F/m;
v = vOld + acceleration*timestep;
x = xOld + v*timestep;
Run Code Online (Sandbox Code Playgroud)
目标是使船舶以0速度降落在某个位置: - x= 0且v= 0.
AI可以"加速"或"减速"喷气机: -
F+=flexibility;
or
F-=flexibility;
Run Code Online (Sandbox Code Playgroud)
AI可以访问电流x,v和F.AI也可以缓存它.
我该如何编程AI?
想法1:最后,x应该= 0.
假设这a是不变的: -
(current x) + (current v) * t + 1/2 * a * t * t = 0
Run Code Online (Sandbox Code Playgroud)
t是一个神奇的数字 - 它需要多长时间才能使宇宙飞船的数量x为0.
想法2:最后,v应该= 0.
(current v) + a*t = 0
Run Code Online (Sandbox Code Playgroud)
我混合了两个想法: -
如果|x|>=thresholdX - >使用想法1
如果|x|~0 - >
在两者之间使用想法2 - > 2个想法的重量平均值
在这里,thresholdX是另一个神奇的数字.
我用a等式来找到合适的F.(F=ma)
结果如下: -

图表是有噪声的,因为质量近似于另一个AI,并且存在一些小的随机外力.
如果有人问,我可以发布我的C++代码(~100行).
首先 - 你是计划登陆身体(有质量),还是只是在太空中的某个仲裁点停下来?你的问题是"土地",所以我假设前者,在这种情况下你也需要考虑引力.这应该很容易做到:F_actual = F_engine - F_gravity.
其次 - 你会如何在现实生活中做到这一点?现实生活中的飞行员希望在"滑行坡道"(在到达跑道之前)"建立"他们的飞机,飞机"修剪",以便在理想条件下(没有风等),飞机可以自行着陆而无法控制输入(我简化了一点,忽略了耀斑等)
对于火箭,我可能想要让自己进入一种情况,即在地面以上的某个安全高度,我的下降速度是这样的,当发动机以一定的恒定功率运转时,火箭将自己稳定在地面上,没有额外的输入,除了在触地时杀死引擎.(实际上,我希望飞行系统允许我在触地得分时自动杀死.)
要了解这将如何工作,只需反向运行问题.开始x=0, v=0,用a=some constant and reasonable acceleration that the engine can produce,绘制X和V的随时间而火箭上升.显然,v=at(一条线)和x是这些值(抛物线)的总和.
抛物线是你的"滑坡".现在,而不是试图获得x=0并v=0在同一时间(不带X永远也不可能成为负),你的问题就成了"我怎么打的下滑坡度在安全高度?".所以你的逻辑是这样的:
一些说明:
v反对的情节x允许常数a产生轻柔的触地,没有额外的控制输入.嗯 - 即使在编辑之后,这个帖子也很长.我想我现在应该停止.....