gpt4 book ai didi

algorithm - 飞船推进AI : control the force to land a ship at x=0 and v=0

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:08:53 25 4
gpt4 key购买 nike

我必须编写 AI 代码来控制游戏中一艘宇宙飞船的许多推进喷气机。

为简单起见:-
让空间是一维的。
宇宙飞船是一个点,只有一架飞机。

规律与问题

xva分别为飞船的位置、速度、加速度。
F 是施加在船上的射流力。

我知道宇宙飞船的质量 m,假设 m=1。

这是一个总结:-

acceleration = F/m;
v = vOld + acceleration*timestep;
x = xOld + v*timestep;

目标是以 0 速度将飞船降落在某个位置:- x=0 和 v=0。

AI 可以“加速”或“减速”喷气式飞机:-

F+=flexibility;
or
F-=flexibility;

AI 可以访问当前的xvF。 AI 也可以缓存它。

我应该如何对 AI 进行编程?

我糟糕的解决方案

想法 1:最后,x 应该 = 0。

假设 a 是常量:-

(current x) + (current v) * t + 1/2 * a * t * t = 0

t 是一个神奇的数字 - 使飞船的 x=0 需要多少时间。

想法 2:最后,v 应该 = 0。

(current v) + a*t = 0

我混合了两种想法:-

if |x|>=thresholdX --> 使用思路 1
if |x|~0 --> 使用思路 2
在两者之间 --> 2 个想法的平均权重

这里,thresholdX 是另一个神奇的数字。
我使用等式中的 a 来找到合适的 F。 (F=ma)

这是一个结果:-

enter image description here
该图有噪声,因为质量是由另一个 AI 近似得出的,并且存在一些小的随机外力。

如果有人问,我可以发布我的 C++ 代码(~100 行)。

最佳答案

首先 - 您是计划降落在一个物体(有质量)上,还是只是在太空中的某个任意点停下来?你的问题是“土地”,所以我假设是前者,在这种情况下你还需要考虑重力。这应该很容易做到:F_actual = F_engine - F_gravity

其次 - 在现实生活中你会怎么做?现实生活中的飞行员希望将他们的飞机“建立”在“下滑道”上(远在到达跑道之前),并“调整”飞机,以便在理想条件下(无风等)飞机可以在没有控制的情况下自行降落输入(我简化了一点,忽略了耀斑等)

对于火箭,我可能想让自己处于这样一种情况,即在地面以上的某个安全高度,我的下降率是这样的,即在发动机以恒定功率运行的情况下,火箭将以本身,除了在着陆点关闭引擎外,没有我的额外输入。 (实际上,我希望飞行系统能让我在着陆时进行自动杀伤。)

要了解这是如何工作的,只需反向运行该问题即可。从 x=0,v=0 开始,a=发动机可以产生的一些恒定且合理的加速度,随着火箭上升绘制 x 和 v 随着时间的变化。显然,v=at(一条线)和 x 是这些值的总和(一条抛物线)。

那条抛物线就是你的“下滑道”。现在,与其尝试同时获取 x=0v=0(x 不会变为负数),您的问题已变为“我如何滑行在安全高度倾斜?”。所以你的逻辑是这样的:

  1. 如果 x=0,则关闭引擎。
  2. 否则,如果您在下滑道上,请将发动机功率设置为所需的(恒定)减速。坐下来等待物理学为您完成所有艰苦的工作。
  3. 否则,如果 x < min_approach_height 并且您不在下滑道上,请燃烧到足以爬升。
  4. 否则,调整发动机功率以达到下滑道。

一些注意事项:

  1. 我所说的“下滑坡度”并不是指水平运动。我只是通过类比固定翼飞机来使用该术语。我的意思是 vx 的绘图,它允许常数 a 产生温和的触地而无需额外的控制输入。
  2. 你着陆的物体有大气层吗?如果是这样,你的火箭将有一个终端速度,在这种情况下,逻辑简化为:以足够快的速度进入大气层,以达到下滑道以上的终端速度。等待下滑道。当你爬上斜坡时,以恒定的功率发动引擎。亲吻地面时关闭引擎。
  3. 到目前为止,我一直忽略“近似”质量和“随机外力”。只要这些不会让你离下滑道太远,对力量的小调整应该会让你回到斜坡。下降时不断进行这些修正。如果您偏离斜坡太远,请使用 MAX BURN 并重试。
  4. 顺便说一下,如果不是因为那些随机效应,这种下滑道方法使得使用只有两个设置(恒定减速功率和关闭)的发动机轻轻着陆变得相当简单。
  5. 我没有解决你的问题,只是把它变成了一个不同的问题 - 但是,解决这个新问题应该会让你的游戏更逼真一点(希望提高沉浸感)。此外,这个问题最终可能比原来的问题更简单(见上面的注释 2 和 4)。最后,尽早设置下滑道,然后仅进行小幅校正调整意味着您的 AI 无需处理极端情况,或提供极端控制输入。

嗯——即使经过编辑,这篇文章还是很长。我想我现在应该停下来了。

关于algorithm - 飞船推进AI : control the force to land a ship at x=0 and v=0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40358214/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com