我想模拟suicide burn来学习和理解火箭着陆。OpenAI健身房已经有了一个LunarLander环境,用于训练强化学习代理。我正在使用这个环境来模拟python中的自杀式燃烧。我已经从这个环境的状态向量的前两个值中提取了坐标。根据这些数值,以y
坐标为高度,我用这些方程计算了坠落着陆器的速度和加速度
velocity(v) = delta_y/ delta_t
acceleartion(a) = delta_v/delta_t
由于模拟是逐步递增的,时间差delta_t
取1。找不到LunarLander的重力参数,我给了它一个默认值g=1
。然后使用下面这个reddit comment的公式
altitude to start suicide burn = [ (current altitude)(acceleration of gravity) + (1/2)(current velocity)2 ] / (acceleration of engines)
我试着计算开始自杀性燃烧的高度。这是我完整的python代码。我只计划使用四个可能的操作中的两个操作0(不执行任何操作)和2(启动主机)。你知道吗
import gym
env = gym.make('LunarLander-v2')
env.seed(0)
g = 1
delta_t = 1
action = 0
state = env.reset()
# x0 = state[0]
y0 = state[1]
v0 = 0
for t in range(3000):
state, reward, done, _ = env.step(action)
y = state[1]
if done or y <0:
break
v = (y-y0)/delta_t # velocity
a = (v - v0)/delta_t # acceleration
# (altitude to start suicide burn) = [ (current altitude)(acceleration of gravity) + (1/2)(current velocity)2 ] / (acceleration of engines)
alt_burn = [y*g+0.5*v*v]/a
v0 = v
y0 = y
print(" y",round(y,5)," v",round(v,5)," a",round(a,5)," Alt_burn",round(alt_burn[0],5))
输出结果如下所示
y 1.41542 v 0.00196 a 0.00196 Alt_burn 722.35767
y 1.41678 v 0.00136 a -0.0006 Alt_burn -2362.78166
y 1.41754 v 0.00076 a -0.0006 Alt_burn -2362.63867
y 1.4177 v 0.00016 a -0.0006 Alt_burn -2362.43506
y 1.41726 v -0.00044 a -0.0006 Alt_burn -2362.64046
y 1.41622 v -0.00104 a -0.0006 Alt_burn -2359.03148
y 1.41458 v -0.00164 a -0.0006 Alt_burn -2358.17355
y 1.41233 v -0.00224 a -0.0006 Alt_burn -2353.50518
y 1.40949 v -0.00284 a -0.0006 Alt_burn -2349.24118
y 1.40605 v -0.00344 a -0.0006 Alt_burn -2343.51016
y 1.40201 v -0.00404 a -0.0006 Alt_burn -2336.31535
y 1.39737 v -0.00464 a -0.0006 Alt_burn -2329.04954
如果我们看海拔高度(y),它是一个非常小的值小于1.5,而计算出的开始自杀燃烧的海拔高度是非常高的。我怎样才能解决这个问题?你知道吗
在reddit的评论中,他们只提到了启动引擎,而不是结束引擎。有人知道动态关闭引擎的数学吗?你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐