Files
easy-rl/docs/chapter3/project1.md
2020-09-23 22:29:10 +08:00

43 lines
2.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 贪吃蛇
贪吃蛇是一个起源于1976年的街机游戏 Blockade玩家控制蛇上下左右吃到食物并将身体增长吃到食物后移动速度逐渐加快直到碰到墙体或者蛇的身体算游戏结束。
![image-20200901202636603](img/image-20200901202636603.png)
如图本次任务整个游戏版面大小为560X560绿色部分就是我们的智能体贪吃蛇红色方块就是食物墙位于四周一旦食物被吃掉会在下一个随机位置刷出新的食物。蛇的每一节以及食物的大小为40X40除开墙体(厚度也为40)蛇可以活动的范围为480X480也就是12X12的栅格。环境的状态等信息如下
* state为一个元组包含(adjoining_wall_x, adjoining_wall_y, food_dir_x, food_dir_y, adjoining_body_top, adjoining_body_bottom, adjoining_body_left, adjoining_body_right).
* [adjoining_wall_x, adjoining_wall_y]提供蛇头是否与墙体相邻的信息具体包含9个状态
adjoining_wall_x0表示x轴方向蛇头无墙体相邻1表示有墙在蛇头左边2表示有墙在右边adjoining_wall_y0表示y轴方向蛇头无墙体相邻1表示有墙在蛇头上边2表示有墙在下边
注意[0,0]也包括蛇跑出480X480范围的情况
* [food_dir_x, food_dir_y]:表示食物与蛇头的位置关系
food_dir_x0表示食物与蛇头同在x轴上1表示食物在蛇头左侧(不一定相邻)2表示在右边
food_dir_y0表示食物与蛇头同在y轴上1表示食物在蛇头上面2表示在下面
* [adjoining_body_top, adjoining_body_bottom, adjoining_body_left, adjoining_body_right]:用以检查蛇的身体是否在蛇头的附近
adjoining_body_top1表示蛇头上边有蛇的身体0表示没有
adjoining_body_bottom1表示蛇头下边有蛇的身体0表示没有
adjoining_body_left1表示蛇头左边有蛇的身体0表示没有
adjoining_body_right1表示蛇头右边有蛇的身体0表示没有
* action即上下左右
* reward如果吃到食物给一个+1的reward如果蛇没了就-1其他情况给-0.1的reward
## 任务要求
设计一个Q网络用于学习snake游戏并绘制reward以及滑动平均后的reward随epiosde的变化曲线图并记录超参数写成报告。
[参考代码](https://github.com/datawhalechina/leedeeprl-notes/tree/master/codes/snake)