Skip to main content

A Deep Reinforcement Learning study package. With game environment.

Project description

Deep Reinforcement Learning 深度强化学习贪吃蛇游戏 DRL_Snakey

深度强化学习贪吃蛇AI与游戏环境。

Build Status GitHub

PyPI - Downloads GitHub last commit

PyPI GitHub release

Readme Readme

游戏开始界面

环境

Python版本: Python3.6或以上

外部依赖

  • pygame
  • tensorflow / tensorflow-gpu
  • h5py
  • numpy
  • matplotlib

游戏说明

演示文件: Snakey_play.py

此文件与DRL_Snakey包无关联,不含有任何AI部分,作为一个人类可以游玩的游戏进行演示。

在使用包之前可以先运行该脚本查看游戏效果。

规则

人类玩家游玩时,游戏内容设有等级划分,随着获取食物的数量上升,蛇前进的速度会变快。

同时每增加一个难度会多出现一个触碰到便会游戏结束的炸弹。(默认为无炸弹)

游戏在一个200×200像素的平面中运行,每10×10个像素作为一个单元。

游戏右侧是一个100×200像素的信息面板。主要用到的信息会在右侧给出。

使用方向键控制移动方向,任何时候都可以使用Q键退出。游戏结束画面按R重新开始,S则会跳出计分板。游戏中按P键可以暂停游戏,暂停中N键可以让游戏单步进行,F键切换可视化模式。

除单独存在的演示脚本外,游戏主体主要由游戏逻辑图形引擎智能体三部分组成,运行时可以根据需要选择是否加载图形引擎显示游戏界面。

AI部分说明

AI没有游戏的速度区别与等级区分,暂时无视炸弹,并且在使用界面时默认使用最快的刷新速度。

本项目内拥有数个AI脚本,详细见下文的各脚本说明。

游戏中按F键可切换可视化部分,P键暂停,N键在暂停时单步进行游戏。

使用方法

首先import

import DRL_Snakey as Snakey

创建游戏对象,此游戏类仅包含游戏规则(DRL_Snakey.Game)。

game = Snakey.Game()

游戏控制agent对象。这里以简单逻辑算法AI举例。

agent = Snakey.agent.Logic()

游戏界面对象,通过pygame模块创建可视的游戏界面。

ui = Snakey.UI()

通过UI类的show(game, agent)函数创建游戏窗口。

ui.show(game, agent)

需要训练agent模型或其他等不需要游戏UI界面时,使用以下脚本控制游戏流程。

import DRL_Snakey as Snakey


game = Snakey.Game()
agent = Snakey.agent.Logic()

while True:
    game.next_step(agent.get_next_direction(game))
    if game.deathflag:
        print("Gameover. score:", game.ate)
        game.reset()

DRL_Snakey说明

DRL_Snakey主要分为游戏环境DRL_Snakey.core,智能体DRL_Snakey.agentDRL_Snakey.utlis组件三部分组成。

其中DRL_Snakey.core.Game为贪吃蛇游戏的基本行动规则,死亡判定以及地图查看等功能。可以视为游戏的本体。 DRL_Snakey.core.UI为游戏界面显示相关。通过pygame包来创建可视化的游戏界面。

DRL_Snakey.agent为智能体部分,其中拥有众多AI类。智能体会读取游戏中每步的状态,应用相对的决策方法 进行决策,并给出反应。

Agent类的结构:

class Agent(object):
def get_next_direction(self, Game):
	"""
	根据智能体对当前环境的判断选择下一步前进的方向。
	:return: 方向["W", "S", "A", "D"]
	"""
	pass

def button_K_e_pressed(self, Game):
    """
    给不同的agnet预留的自定义函数,用来调试或数据可视化。
    """
    pass

def custom_function(self, Game):
	"""
	给不同的agnet预留的自定义函数,用来调试或数据可视化。
	"""
	pass

DRL_Snakey.core.snake中还有一个Snake类来表示游戏中的每条蛇。

ps. 请多多编写自己的agent然后pull request

DRL_Snakey.agent.Logic_AI.Logic

一个简单的演示用逻辑AI,完全无视炸弹,只吃食物。具有十分简单的自身躲避算法。

通过计算蛇头位置与食物的水平竖直差,以之字形接近食物。并且在决策方向前,会通过Logic.next()预测 下一步的位置,并调用Logic.elude()依次尝试各个方向来避免与自己相撞。但是因为只能预测下一步的危险情况, 所以此AI并不具有很高智能,只是作为演示使用。

此AI在20次尝试中最好成绩为68,平均值为49.6。

简易AI演示

DRL_Snakey.agent.DP_AI.DP

DP(Dynamic Programming)动态规划-马尔科夫决策法。

每一步都通过迭代贝尔曼方程计算当前各点的价值,创建价值矩阵。并且朝周围价值最高的点前进。

构造函数参数说明:

  • discount: 衰减率,贝尔曼方程中对于非即时回报的衰减率。
  • iteration: 推算价值矩阵的迭代次数。
  • walk_reward: 每走一步的回报
  • eat_self_reward: 吃到自己的回报
  • food_reward: 吃到食物的回报

按F打开可视化模式后,可观察每一步动作所基于的各点价值图像。

实际操作中会发现,AI可以根据价值的判断避开自身,并且在食物环境恶劣的情况下选择在安全地带迂回等待。

此AI在20次尝试中最好成绩为119,平均值为69.2。

DP演示

DRL_Snakey.agent.MC_AI.MC

MC(Monte-Calo)蒙特卡洛法。

每步分别基于某个策略循环计算三个可行方向的平均动作价值,选择平均动作价值最高的一个动 作。本AI采取的基础策略是DRL_Snakey.agent.Logic_AI.Logic

构造函数参数说明:

  • discount: 衰减率
  • iteration: 迭代次数
  • max_step: 预测最大步数
  • epsilon: 探索率
  • walk_reward: 每步的回报
  • eat_self_reward: 吃到自己的回报
  • food_reward: 吃到食物的回报

此AI在20次尝试中最好成绩为89,平均值为50.5。

MC演示

深度强化学习 DRL AI

作为深度强化学习很好的一个例子,贪吃蛇游戏有着很明显的数据结构。Environment就是地图整体,Action是上下左右 四种可以采取的行动,无需再通过卷积神经网络读取游戏画面。

本项目提供了一个游戏环境,供他人自行编写新的agent或拓展游戏功能。

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

DRL_Snakey-1.2.tar.gz (51.3 kB view details)

Uploaded Source

Built Distribution

DRL_Snakey-1.2-py3-none-any.whl (65.3 kB view details)

Uploaded Python 3

File details

Details for the file DRL_Snakey-1.2.tar.gz.

File metadata

  • Download URL: DRL_Snakey-1.2.tar.gz
  • Upload date:
  • Size: 51.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.6.5

File hashes

Hashes for DRL_Snakey-1.2.tar.gz
Algorithm Hash digest
SHA256 77e16c97c70628b2fcdce92539b8f9371a6195af14b5136830ca1a9cad10781a
MD5 6cf2e5b4cfee8396f03249e1e4f2bf7a
BLAKE2b-256 3cc176074e73f712f365cb9ccc54463eacb2010a52e874ed09ceb15a5c69b3ee

See more details on using hashes here.

File details

Details for the file DRL_Snakey-1.2-py3-none-any.whl.

File metadata

  • Download URL: DRL_Snakey-1.2-py3-none-any.whl
  • Upload date:
  • Size: 65.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.6.5

File hashes

Hashes for DRL_Snakey-1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 cb936c1f1ae9b97faa5b60c0df9f50db3759601c8df0061aba4b44291f5e4c6f
MD5 478398dda7f7f4e12b551b29665f0835
BLAKE2b-256 02b3c46f0b01337c87b0fc6d17f6a7f77ab8d0497feac6117cdcd63050ce997f

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page