在游戏中,我必须编码AI来控制宇宙飞船的许多推进喷射器。
简单性的 :-
把空间设为一维。
宇宙飞船是一个点,只有一架喷气式飞机。
规则与问题
假设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.
假设a是常数:-
(current x) + (current v) * t + 1/2 * a * t * t = 0t是一个神奇的数字--使飞船的x=0所需的时间。
v 2:最后, 应该= 0.
(current v) + a*t = 0I混合了这两种想法:-
如果|x|>=thresholdX ->使用主意1
如果|x|~0 ->使用概念2
在->重量平均2种观念中
在这里,thresholdX是另一个神奇的数字。
我使用方程中的a来找到合适的F。(F=ma)
这里是一个结果:-

由于质量被另一个AI近似,所以图是有噪声的,并且存在一些小的随机外力。
如果有人问,我可以张贴我的C++代码(~100行)。
发布于 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=0和v=0 (而不是x变为负值),而是“我如何在安全的高度上撞上滑坡体?”所以你的逻辑应该是:
一些注意事项:
v的对抗x的阴谋,它允许一个恒定的a产生一个不需要额外的控制输入的温柔的触摸。嗯--即使经过编辑,这篇文章也很长。我想我应该停下来.现在。
发布于 2016-11-01 17:35:39
第一步是用手动控制实现游戏。建立一个物理模拟,并为飞行员做一些按钮。如果太空船的人工着陆比它的第一个人工智能原型的时间更有效的话.这通常被实现为一个单兵强盗,这意味着随机发电机计算加速度。用户除了观看和希望之外,没有其他的可能。下一个人工智能原型,也将通过手工实现使用伪随机生成器。这意味着,爆炸在一定范围内,但仍然是随机的。问题不是,如果AI能够登陆,问题是:需要AI 10项试验或100项试验。降低故障率的最佳做法是使用类似于OP的规则。这些启发式方法并不适用于每一种情况,它们只能改进伪随机生成器。这有点像程序生成。
https://stackoverflow.com/questions/40358214
复制相似问题