Lunar lander 环境构建代码阅读笔记

初始设置: FPS , 重力大小,各个方向的power大小,初始随机性, 初始策略(一个六维数组)lander_poly[(-14,+17),(-17,0),(-17,-10),(+17,-10),(+17,0),(+14,+17)]. leg的初始设置,发动机的初始设置。

    第一个类定义为ContactDetector(),这个类主要包含了一个检测是否有碰撞的函数,begincontact以及endcontact

    第二个类为LunarLander类,这个类首先定义一个字典项metadata,包含render.modes(内含有两个键human和rgb_array),以及FPS,同时还有一个对于continuous的判断(个人感觉没什么大用,连续版本的在下面就有)

这个类初始化的时候设置了一些环境变量,例如self.World,self,moon,self.lander,self.particles.其实主要是用来构建action_space的,不管是对于连续还是离散环境来说,其动作空间都是两个浮子(主引擎和左右引擎),其中主引擎和左右引擎都是在-1--0.5,0.5-+1期间会对整体造成影响。  

随后定义了一个seed子函数,用来初始化过程中获取某个定值随机数,

一个_destroy函数,用来销毁当前窗口,aa

一个reset函数,先从self.world=2dbox以及ContactDetector这个类中获得是否碰撞的判断,随后重新恢复地图长宽,地形等,其中地形构建通过self.lander构建,在场景中构图的过程中需要用到world.CreateDynamicBody,   接下来就是依次构建leg,revoluteJoint等等身体零件,以及创建飞船喷射粒子等等。

最关键的step函数来了,在step函数中,首先是将当前action所选择的动作进行归类,小于0的直接等于-1,大于0的直接等于1,接着加入angle角,以便于检查落地时落地角度大小。期间加入类似于pos vel(速度),state space参数中包含有[x方向的坐标位置 -1,y方向的坐标位置-((H/4+18/30)/400/60), x方向的速度,y方向的速度,当前旋转角度,20*角速度/FPS,左腿是否和地面接触,右腿是否和地面接触] 因此一个state中包含有8个变量, 再根据shaping权重得到一个shaping数值,reward便是shaping-prev_shaping, 有关shaping的计算公式 shaping

shaping = \
    - 100*np.sqrt(state[0]*state[0] + state[1]*state[1]) \
    - 100*np.sqrt(state[2]*state[2] + state[3]*state[3]) \
    - 100*abs(state[4]) + 10*state[6] + 10*state[7]

Reward的数值同时受到这八种以及m_power和s_power的影响, 最终当game over时,若state[0] 即x>=1.0,将会获得负数reward,若lander位于两个棋子之间,则获得+100reward

下一个是render子函数,首先先把viewer重构,viewer重构有长宽,设置长度节点,接着是对粒子颜色赋值,画天空(黑色),接着是对lander本身进行设置,对于其中的每一项,进行建图,其中用到的draw_polygon和draw_polyline都是跨越鼠标点击不到的区域进行构图。对于地形,在上面设置旗子

最后是close函数,直接关闭viewer即可

 

对于lunarlanderContinuous来说,其实单纯只是多家了一个demo进来,在demo中,首先限制角度angle_targ,angle_targ则是通过 s[0](水平坐标)*0.5+s[2](速度),对于所有得分>0.4,按0.4算,<-0.4的,按-0.4算

这里有个计算公式 angle_todo=(angle_todo-angle)*0.5-angularSpeed

hover_todo=(hover_targ-x_coordinate)*0.5-v

根据角速度和线速度来判断采取哪一种行动

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值