首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >太空船推进的人工智能:控制力量在x=0和v=0登陆一艘飞船

太空船推进的人工智能:控制力量在x=0和v=0登陆一艘飞船
EN

Stack Overflow用户
提问于 2016-11-01 10:27:44
回答 2查看 276关注 0票数 3

在游戏中,我必须编码AI来控制宇宙飞船的许多推进喷射器。

简单性的 :-

把空间设为一维。

宇宙飞船是一个点,只有一架喷气式飞机。

规则与问题

假设xva是飞船的位置、速度、加速度。

F成为适用于飞船的喷气力。

我知道宇宙飞船的质量m,比方说m=1。

以下是一个总结:-

代码语言:javascript
运行
复制
acceleration = F/m;
v = vOld + acceleration*timestep;
x = xOld + v*timestep;

目的是以0的速度在某一位置着陆:- x=0和v=0。

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

代码语言:javascript
运行
复制
F+=flexibility;
or 
F-=flexibility;

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

我应该如何编程人工智能?

我可怜的解决方案

思想1:最后,x 应该= 0.

假设a是常数:-

代码语言:javascript
运行
复制
(current x) + (current v) * t + 1/2 * a * t * t = 0

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

v 2:最后, 应该= 0.

代码语言:javascript
运行
复制
(current v) + a*t = 0

I混合了这两种想法:-

如果|x|>=thresholdX ->使用主意1

如果|x|~0 ->使用概念2

在->重量平均2种观念中

在这里,thresholdX是另一个神奇的数字。

我使用方程中的a来找到合适的F。(F=ma)

这里是一个结果:-

由于质量被另一个AI近似,所以图是有噪声的,并且存在一些小的随机外力。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-01 11:39:18

首先,你是打算降落在一个有质量的物体上,还是在太空中的某个仲裁点停下来?你的问题是“陆地”,所以我假设前者,在这种情况下,你也需要考虑地心引力。这应该很容易做到: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. 到目前为止,我已经忽略了“近似”质量和“随机外力”。只要这些都不会让你远离滑翔的斜坡,小小的力量调整就会让你回到斜坡上。当你下降的时候,不断地做这些修正。如果你偏离斜坡太远,麦克斯烧掉,然后再试一次。
  4. 顺便说一句,如果不是因为这些随机效应,这种滑动坡度方法使得它很容易用一个只有两个设置的发动机轻轻着陆,持续的减速功率和关闭。
  5. 我没有解决你的问题,只是把它变成了一个不同的问题-但是,解决这个新的问题应该使你的游戏更现实一点(希望改进沉浸)。而且,这个问题最终可能比原来的更简单(见上文注2和注4)。最后,尽早在滑行坡度上设置,然后只做小的修正调整,这意味着你的AI不必处理极端情况,或者提供极端控制输入。

嗯--即使经过编辑,这篇文章也很长。我想我应该停下来.现在。

票数 5
EN

Stack Overflow用户

发布于 2016-11-01 17:35:39

第一步是用手动控制实现游戏。建立一个物理模拟,并为飞行员做一些按钮。如果太空船的人工着陆比它的第一个人工智能原型的时间更有效的话.这通常被实现为一个单兵强盗,这意味着随机发电机计算加速度。用户除了观看和希望之外,没有其他的可能。下一个人工智能原型,也将通过手工实现使用伪随机生成器。这意味着,爆炸在一定范围内,但仍然是随机的。问题不是,如果AI能够登陆,问题是:需要AI 10项试验或100项试验。降低故障率的最佳做法是使用类似于OP的规则。这些启发式方法并不适用于每一种情况,它们只能改进伪随机生成器。这有点像程序生成。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40358214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档