Doom枪战游戏ai制作 深度强化学习项目(1)环境、建立对象及随机动作展示

DOOM游戏强化学习训练项目

本文开一个新坑,讲一个很火的强化学习训练游戏的训练环境游戏DOOM。

其他强化学习项目:超级马里奥ai


文章目录

  • DOOM游戏强化学习训练项目
  • 前言
  • 一、环境安装
    • 1.库安装
    • 2.镜像文件安装
    • 二、设置对象和初始化
      • 1.部分镜像信息介绍
      • 2.库导入和初始代码
        • 1)基本环境设置
        • 2)解决1中的error问题
        • 3)初始化设置与随机操作展示
            • a)镜像导入
            • b)设置动作矩阵
            • c)完整代码

              前言

              本文将讲述DOOM库的安装和镜像文件的安装,以及项目实体对象的建立和初始化操作。


              一、环境安装

              1.库安装

              pip install vizdoom
              

              注意,也需要pytorch、gym等常用库,不清楚可以查看库安装参考1和库安装参考2

              2.镜像文件安装

              要使用doom,我们需要安装镜像包ViZDoom。

              打开网址doom安装链接

              按照图示方法下载ZIP并解压,注意,请记住路径。

              二、设置对象和初始化

              1.部分镜像信息介绍

              代码如下(示例):

              打开镜像文件scenarios中的basic.cfg,可以看到如下代码

              available_buttons =
              	{MOVE_LEFT
              		MOVE_RIGHT
              		ATTACK
              	}
              

              这实际上就是用矩阵来控制人物动作,比如:0 0 1攻击 1 0 0 向左移动,后续的代码需要有这个理解基础。

              2.库导入和初始代码

              1)基本环境设置

              from vizdoom import *
              import time
              game = vizdoom.DoomGame()
              game.init()
              time.sleep(100)
              

              有error,但不妨碍运行,运行结果如下

              2)解决1中的error问题

              如果你是强迫症,你就会知道为什么能跑我还想把这个error去掉。我们发现error为未解析的引用 'vizdoom',这是为什么呢?

              我们去vizdoom官网找,官方文档是这么写的

              import vizdoom as vzd
              game = vzd.DoomGame()
              

              那么我们按以下这么写就没问题了。

              import vizdoom
              game = vizdoom.DoomGame()
              

              3)初始化设置与随机操作展示

              a)镜像导入

              我们先要载入之前展示过的basic文件

              请自己输入自己的镜像文件地址

              VizDoom_basic_cfg = r"C:/Users/tttiger/Desktop/ViZDoom-master/ViZDoom-master/scenarios/basic.cfg"
              game = vizdoom.DoomGame()
              game.load_config(VizDoom_basic_cfg)
              game.init()
              

              这样可以加载我们的场景和动作。

              b)设置动作矩阵

              我们上面说到,在Doom中,动作是用0001这样的矩阵控制的,我们可以这样初始化。

              actions = numpy.identity(3,dtype=numpy.uint8)
              

              numpy的identity函数是用于创建对角矩阵,dtype是指矩阵中元素的类型。

              因此我们有了矩阵

              1 0 0

              0 1 0

              0 0 1

              然后我们就可以使用random.choice(actions)实现随机动作了。

              c)完整代码
              from vizdoom import *
              import vizdoom
              import random
              import time
              import numpy
              VizDoom_basic_cfg = r"C:/Users/tttiger/Desktop/ViZDoom-master/ViZDoom-master/scenarios/basic.cfg"
              game = vizdoom.DoomGame()
              game.load_config(VizDoom_basic_cfg)
              game.init()
              actions = numpy.identity(3,dtype=numpy.uint8)
              episodes = 10
              for episode in range(episodes):
                  game.new_episode()
                  while not game.is_episode_finished():
                      reward = game.make_action(random.choice(actions),4)
                      time.sleep(0.02)
                  time.sleep(2)
              game.close() 

              就能有如上的效果。下一篇将讲述如何训练强化学习ai进行游戏。