Algorithm 宇宙飞船的人工智能&x27;s推进:控制船舶在x=0和v=0时着陆的力
在游戏中,我必须对AI进行编码,以控制宇宙飞船的许多推进喷气机 为简单起见:-Algorithm 宇宙飞船的人工智能&x27;s推进:控制船舶在x=0和v=0时着陆的力,algorithm,artificial-intelligence,physics,Algorithm,Artificial Intelligence,Physics,在游戏中,我必须对AI进行编码,以控制宇宙飞船的许多推进喷气机 为简单起见:- 将空间设为1D。 宇宙飞船是一个点,只有一架喷气式飞机 规则与问题 假设x、v和a是宇宙飞船的位置、速度和加速度。 设F为施加在船舶上的喷射力 我知道宇宙飞船的质量m,比方说m=1 以下是总结:- acceleration = F/m; v = vOld + acceleration*timestep; x = xOld + v*timestep; 目标是以0速度将船舶降落在特定位置:-x=0和v=0 AI可以“加
将空间设为1D。
宇宙飞船是一个点,只有一架喷气式飞机 规则与问题 假设
x
、v
和a
是宇宙飞船的位置、速度和加速度。设
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可以访问当前的x
、v
和F
。AI也可以缓存它
我应该如何编程人工智能
我拙劣的解决方案
想法1:最后,x
应该=0。
(current v) + a*t = 0
假设a
为常数:-
(current x) + (current v) * t + 1/2 * a * t * t = 0
t
是一个神奇的数字——制造宇宙飞船的x
=0需要多少时间
想法2:最后,v
应该=0。
(current v) + a*t = 0
我混合了两种想法:-
如果|x |>=thresholdX
-->使用idea 1如果
|x | ~0
-->使用idea 2介于-->两个想法的平均权重之间 这里,
thresholdX
是另一个神奇的数字。我使用等式中的
a
找到合适的F
。(F=ma
)
结果如下:-
该图是有噪声的,因为质量由另一个AI近似,并且存在一些小的随机外力
如果有人问我,我可以发布我的C++代码(~ 100行)。
首先,你是计划登陆一个物体(有质量),还是只是在空间某个仲裁点停下来?你的问题是“陆地”,所以我假设前者,在这种情况下,你也需要考虑重力。这应该很容易做到:F_实际=F_发动机-F_重力
第二,在现实生活中你会怎么做?现实生活中的飞行员希望将飞机“建立”在“滑翔坡”(在到达跑道之前)上,并对飞机进行“修整”,以便在理想条件下(无风等),飞机可以在没有控制输入的情况下自行着陆(我简化了一点,忽略了耀斑等)
对于火箭,我可能想让自己处于这样一种情况:在离地的某个安全高度上,我的下降率是这样的:当发动机以某个恒定功率运行时,火箭会自行降落到地面上,除了在着陆点关闭发动机外,没有任何额外的输入。(事实上,我希望飞行系统能让我在着陆时自动杀伤。)
要了解这将如何工作,只需反向运行问题。从x=0,v=0开始,以a=发动机可以产生的某个恒定且合理的加速度
,绘制火箭上升过程中x和v随时间的变化曲线。显然,v=at
(一条线),x是这些值的总和(一条抛物线)
这条抛物线就是你的“下滑坡度”。现在,您的问题不是试图同时获得x=0
和v=0
(x永远不会变为负值),而是“我如何在安全高度击中下滑道?”。所以你的逻辑是这样的:
如果x=0,关闭发动机
否则,如果您在下滑道上,将发动机功率设置为所需(恒定)减速。当物理为你做所有艰苦的工作时,坐下来等着
否则,如果x
否则,调整发动机功率以达到下滑坡度
一些注意事项:
我所说的“下滑道”,并不是指水平运动。我只是用这个术语来比喻固定翼飞机。我的意思是v
与x
的对比图,它允许常数a
在没有额外控制输入的情况下产生柔和的触地
你降落的身体有大气吗?如果是这样的话,你的火箭将有一个终端速度,在这种情况下,逻辑简化为:进入大气层的速度足够快,以达到下滑道上方的终端速度。等待下滑道。当你爬上斜坡时,以恒定功率发动引擎。亲吻地面时熄火
到目前为止,我忽略了“近似”质量和“随机外力”。只要这些不会让你离滑翔坡太远,对力量的小调整就会让你回到滑翔坡。下降时不断进行这些修正。如果您偏离斜坡太远,请MAX BURN再试一次
顺便说一句,如果不是因为这些随机效应,这种下滑道方法使得在发动机只有两种设置(恒定减速功率和关闭)的情况下轻轻着陆变得相当简单
我没有解决你的问题,只是把它变成了一个不同的问题——但是,解决这个新问题应该会让你的游戏更现实一些(希望能提高沉浸感)。此外,这个问题可能会比原来的问题更简单(参见上面的注释2和注释4)。最后,提前在下滑道上设置,然后只进行小的修正调整,这意味着您的AI不必处理极端情况,或提供极端控制输入
嗯,即使在编辑之后,这篇文章也相当长。我想我应该马上停下来。。。。。现在。第一步是实现手动控制的游戏。建立一个物理模拟,并为飞行员制作一些按钮。如果飞船的手动着陆比第一个人工智能原型的时间有效。这通常被实现为单臂土匪,这意味着随机生成器计算加速度。