pytorch使用Arnold通过DOOM代理玩毁灭战士(获得ViZDoom AI比赛冠军)

Song • 95 次浏览 • 0 个回复 • 2018年02月08日

Arnold

Arnold是一个PyTorchFPS游戏与深化强化学习的代理(https://arxiv.org/abs/1609.05521),并赢得了`2017`年版的[ViZDoom AI比赛](http://vizdoom.cs.put.edu.pl/competition-cig-2017)。

Arnold - DOOM Agent

这个仓库包含:

  • 训练DOOM代理的源代码
  • 包含17个选定地图的软件包,可用于训练和评估
  • 5个预训练模型,你可以形成思维图像和生成对抗,包括赢得了ViZDoom比赛的模型

安装

依赖

ArnoldMac OSLinux上发行测试成功。要使用它,你会需要:

  • Python 2/3NumPyOpenCV
  • PyTorch
  • ViZDoom 按照https://github.com/mwydmuch/ViZDoom上的说明安装ViZDoom。确保你可以在从Python任何目录下运行import vizdoom。为此,您可以使用pip安装该库或编译它,然后将其移动到你Pythonsite-packages安装目录中,如下所述:https://github.com/mwydmuch/ViZDoom/blob/master/doc/Quickstart.md

代码结构

.
├── pretrained                    # Examples of pretrained models
├── resources
    ├── freedoom2.wad             # DOOM resources file (containing all textures)
    └── scenarios                 # Folder containing all scenarios
        ├── full_deathmatch.wad   # Scenario containing all deathmatch maps
        ├── health_gathering.wad  # Simple test scenario
        └── ...
├── src                           # Source files
    ├── doom                      # Game interaction / API / scenarios
    ├── model                     # DQN / DRQN implementations
    └── trainer                   # Folder containing training scripts
├── arnold.py                     # Main file
└── README.md

情景/地图

训练一个模型

你可以调整许多参数来训练一个模型。

python arnold.py

## General parameters about the game
--freedoom "true"                # use freedoom resources
--height 60                      # screen height
--width 108                      # screen width
--gray "false"                   # use grayscale screen
--use_screen_buffer "true"       # use the screen buffer (what the player sees)
--use_depth_buffer "false"       # use the depth buffer
--labels_mapping ""              # use extra feature maps for specific objects
--game_features "target,enemy"   # game features prediction (auxiliary tasks)
--render_hud "false"             # render the HUD (status bar in the bottom of the screen)
--render_crosshair "true"        # render crosshair (targeting aid in the center of the screen)
--render_weapon "true"           # render weapon
--hist_size 4                    # history size
--frame_skip 4                   # frame skip (1 = keep every frame)

## Agent allowed actions
--action_combinations "attack+move_lr;turn_lr;move_fb"  # agent allowed actions
--freelook "false"               # allow the agent to look up and down
--speed "on"                     # make the agent run
--crouch "off"                   # make the agent crouch

## Training parameters
--batch_size 32                  # batch size
--replay_memory_size 1000000     # maximum number of frames in the replay memory
--start_decay 0                  # epsilon decay iteration start
--stop_decay 1000000             # epsilon decay iteration end
--final_decay 0.1                # final epsilon value
--gamma 0.99                     # discount factor gamma
--dueling_network "false"        # use a dueling architecture
--clip_delta 1.0                 # clip the delta loss
--update_frequency 4             # DQN update frequency
--dropout 0.5                    # dropout on CNN output layer
--optimizer "rmsprop,lr=0.0002"  # network optimizer

## Network architecture
--network_type "dqn_rnn"         # network type (dqn_ff / dqn_rnn)
--recurrence "lstm"              # recurrent network type (rnn / gru / lstm)
--n_rec_layers 1                 # number of layers in the recurrent network
--n_rec_updates 5                # number of updates by sample
--remember 1                     # remember all frames during evaluation
--use_bn "off"                   # use BatchNorm when processing the screen
--variable_dim "32"              # game variables embeddings dimension
--bucket_size "[10, 1]"          # bucket game variables (typically health / ammo)
--hidden_dim 512                 # hidden layers dimension

## Scenario parameters (these parameters will differ based on the scenario)
--scenario "deathmatch"          # scenario
--wad "full_deathmatch"          # WAD file (scenario file)
--map_ids_train "2,3,4,5"        # maps to train the model
--map_ids_test "6,7,8"           # maps to test the model
--n_bots 8                       # number of enemy bots
--randomize_textures "true"      # randomize walls / floors / ceils textures during training
--init_bots_health 20            # reduce initial life of enemy bots (helps a lot when using pistol)

## Various
--exp_name new_train             # experiment name
--dump_freq 200000               # periodically dump the model
--gpu_id -1                      # GPU ID (-1 to run on CPU)

一旦你的agent被培训,您可以通过运行相同的命令并使用以下额外参数来对其进行可视化:

--visualize 1                    # visualize the model (render the screen)
--evaluate 1                     # evaluate the agent
--manual_control 1               # manually make the agent turn about when it gets stuck
--reload PATH                    # path where the trained agent was saved

以下是针对3种不同场景的训练命令的一些示例:

保卫中心

在这种情况下,代理处于循环地图的中间。怪物经常出现在身边,正在向agent走去。agent被给予一把手枪和有限的弹药,并且必须在到达之前转身杀死怪物。下面的命令训练一个标准的DQN,它应该以大约400万的步长达到56个碎片(手枪中的子弹数量)的最佳性能:

python arnold.py --scenario defend_the_center --action_combinations "turn_lr+attack" --frame_skip 2
Health gathering

在这种情况下,agent正在熔岩上行走,并在每个时间步骤都失去健康点。代理商必须移动和收集尽可能多的健康包以生存。目标是在最长的时间内生存。

python arnold.py --scenario health_gathering --action_combinations “ move_fb; turn_lr ”-- frame_skip 5

这个场景非常简单,模型很快就达到了2分钟的最大生存时间(35 * 120 = 4200帧)。这个场景还提供了一个supreme模式,在这个模式中,地图更加复杂,并且健康包更难以收集:

python arnold.py --scenario health_gathering --action_combinations "move_fb;turn_lr" --frame_skip 5 --supreme 1

在这种情况下,agent需要大约150万步才能达到最大的生存时间(但通常在结束之前死亡)。

Deathmatch

在这种情况下,agent被训练来对抗内置的游戏机器人。这是一个使用游戏特征预测(如[1]中所述)训练代理的命令,以及DRQN

python arnold.py --scenario deathmatch --wad deathmatch_rockets --n_bots 8 \
--action_combinations "move_fb;move_lr;turn_lr;attack" --frame_skip 4 \
--game_features "enemy" --network_type dqn_rnn --recurrence lstm --n_rec_updates 5

预训练模型

Defend the center / Health gathering

我们为每种情况提供预训练模型。你可以通过运行如下命令可视化:

./run.sh defend_the_center

或者

./run.sh health_gathering
2017年Visual Doom AI比赛

我们发布了提交给ViZDoom AI 2017比赛第一和第二首歌曲的两个agents。您可以使用以下命令将它们可视化为与内置的机器人对战:

第1场 - Arnoldvs 10个内置的AI机器人

./run.sh track1 --n_bots 10

第2场 - Arnoldvs 10个内置AI机器人 - 地图2

./run.sh track2 --n_bots 10 --map_id 2

Track 2 - 4 Arnold互相对抗 - 地图3

./run.sh track2 --n_bots 0 --map_id 3 --n_agents 4

我们还使用相同的武器(SuperShotgun)在单个地图上训练了一名特工。这个agent是非常难以击败。

Shotgun - 4个Arnold互相对抗

./run.sh shotgun --n_bots 0 --n_agents 4

Shotgun - 3个Arnold互相对抗+ 1人类玩家(与agent对抗)

./run.sh shotgun --n_bots 0 --n_agents 3 --human_player 1

项目地址

glample/Arnold


原创文章,转载请注明 :pytorch使用Arnold通过DOOM代理玩毁灭战士(获得ViZDoom AI比赛冠军) - pytorch中文网
原文出处: https://ptorch.com/news/126.html
问题交流群 :168117787
提交评论
要回复文章请先登录注册
用户评论
  • 没有评论
Pytorch是什么?关于Pytorch! 将MatConvNet模型转换为pytorch模型(pytorch-mcn)