宇宙飞船推进力的AI:控制在x = 0和v = 0时降落的力量

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,vF.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行).

Gav*_*ock 5

首先 - 你是计划登陆身体(有质量),还是只是在太空中的某个仲裁点停下来?你的问题是"土地",所以我假设前者,在这种情况下你也需要考虑引力.这应该很容易做到: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=0v=0在同一时间(不带X永远也不可能成为负),你的问题就成了"我怎么打的下滑坡度在安全高度?".所以你的逻辑是这样的:

  1. 如果x = 0,则杀死引擎.
  2. 否则,如果您在滑行斜坡上,请将发动机功率设置为所需(恒定)减速.坐下来等待物理学为你完成所有艰苦的工作.
  3. 否则,如果x <min_approach_height并且你没有在滑行斜坡上,那就足够燃烧以便攀爬.
  4. 否则,调整发动机功率以达到下滑斜率.

一些说明:

  1. 通过"滑行坡度",我并不是指暗示水平运动.我只是将这个术语用于固定翼飞机.我的意思是v反对的情节x允许常数a产生轻柔的触地,没有额外的控制输入.
  2. 您登陆的身体是否有气氛?如果是这样,你的火箭会有一个终端速度,在这种情况下,逻辑简化为:以足够快的速度进入大气层以达到滑翔斜率以上的终端速度.等待滑坡.当你撞到斜坡时,以恒定功率发动引擎.在亲吻地面时杀死发动机.
  3. 直到现在,我都忽略了"近似"质量和"随机外力".只要这些不会导致您离滑行斜坡太远,对功率的小幅调整应该会让您回到坡度.下降时连续进行这些修正.如果你偏离斜坡太远,MAX BURN再试一次.
  4. 顺便提一下,如果不是那些随机效应,这种滑行斜率方法使得使用仅具有两个设置,恒定减速功率和关闭的发动机轻轻着陆相当简单.
  5. 我没有解决你的问题,只是把它变成了一个不同的问题 - 但是,解决这个新问题应该让你的游戏更加真实(希望改善沉浸感).此外,这个问题可能最终比原始问题更简单(见上面的注释2和4).最后,提前设置滑行斜率,然后只进行小的校正调整意味着您的AI不必处理极端情况,或提供极端控制输入.

嗯 - 即使在编辑之后,这个帖子也很长.我想我现在应该停止.....