Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 宇宙飞船的人工智能&x27;s推进:控制船舶在x=0和v=0时着陆的力_Algorithm_Artificial Intelligence_Physics - Fatal编程技术网

Algorithm 宇宙飞船的人工智能&x27;s推进:控制船舶在x=0和v=0时着陆的力

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可以“加

在游戏中,我必须对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不必处理极端情况,或提供极端控制输入

  • 嗯,即使在编辑之后,这篇文章也相当长。我想我应该马上停下来。。。。。现在。

    第一步是实现手动控制的游戏。建立一个物理模拟,并为飞行员制作一些按钮。如果飞船的手动着陆比第一个人工智能原型的时间有效。这通常被实现为单臂土匪,这意味着随机生成器计算加速度。