VDAIC 2016 @ CIG

Visual Doom AI Competition (VDAIC) 2016 @ IEEE Computational Intelligence and Games (CIG'18)

The competition is over. The results can be found here .

Sponsored by Billiger.de that hires complete Python-Expert-Teams - no relocation needed - apply NOW

Visual Doom AI


Doom has been considered one of the most influential titles in the game industry since it popularized the first-person shooter (FPS) genre and pioneered immersive 3D graphics. Even though more than 20 years have passed since Doom’s release, the methods for developing AI bots have not improved significantly in newer FPS productions. In particular, bots have still to “cheat” by accessing game’s internal data such as maps, locations of objects and positions of (player or non-player) characters. In contrast, a human can play FPS games using a computer screen as the only source of information. Can AI effectively play Doom using only raw visual input?


The participants of the Visual Doom AI competition are supposed to submit a controller (C++, Python, or Java) that plays Doom. The provided software gives a real-time access to the screen buffer as the only information the agent can base its decision on. The winner of the competition will be chosen in a deathmatch tournament.

Machine Learning

Although the participants are allowed to use any technique to develop a controller, the design and efficiency of the Visual Doom AI environment allows and encourages participants to use machine learning methods such as reinforcement deep learning.

Competition Tracks

1. Limited deathmatch on a known map.

The only available weapon is the Rocket Launcher, with which the agents start. The agents can also gather Medikits and ammo (map01 in cig.wad).

2. Full deathmatch on an unknown map.

Different weapons and items are available. Two maps are provided for training. The final evaluation will take place on three maps unknown to the participants beforehand.

What will the Deathmatch Look Like?

Your controller will fight against all other controllers for 10 minutes on a single map. Each game will be repeated 12 times for track 1 and 4 times for track 2, which involves three maps. The controllers will be ranked by the number of frags.

In case of lots of submissions, we will introduce some eliminations.

Rules of Engagement

During the contest ViZDoom will have somewhat limited capabilities. It will be enforced by loading _vizdoom.cfg and +vizdoom_nocheat flag but anyway here is the list of settings and methods your agents aren't allowed to use during the showdown:


  • loading your config file,
  • using ANY resolution,
  • using ANY available button,
  • using ANY available game variable,
  • using ANY available screen format (depth buffer won't work, however),
  • chaning render options (render_crosshair/weapon/decals/particles),
  • setting agent's name and color via add_game_args("+name AI +colorset 0") (or in a config file),
  • using doom2.wad or freedoom2.wad - it is your choice,

All paths and configs are set so that running the programs from the team directory is required so run the agent from their directory and do not change it during runtime.


  • tinkering with the file system outside your agent's root directory,
  • network communication (unless you need localhost for something),
  • using send_game_command (e.g. adding bots),
  • using new_episode


  • using depth buffer (it will be filled with random noise),
  • changing mode, scenario path, vizdoom path,
  • using USERX variables,

For more information about how the code will be run and how to prepare agents please refer to the submission page.


  1. Limited deathmatch: €1000, €300, €200 for the 1st, 2nd, and the 3rd place, respectively.
  2. Full deathmatch: €2000, €1000, €500 for the 1st, 2nd, and the 3rd place, respectively.

We reserve the right to disqualify bots that behave random-like or/and are unintelligent in an evident way.

Important Dates

  • 31.05.2016 Warm-up deathmatch submission deadline
  • 15.06.2016: Warm-up deathmatch submission deadline (extension!)
  • 25.07.2016: 2nd Warm-up deathmatch submission deadline
  • 15.08.2016: 3rd Warm-up deathmatch submission deadline
  • 10.09.2016: Final deathmatch submission deadline
  • 20-23.09.2016: Results announcement (CIG)


Getting started

  1. Download (or compile) the ViZDoom environment.
  2. Preferably read the tutorial
  3. Follow the how-to-start instructions and read the submission instructions as well.


To make a submission for the competition follow the submission page guidelines.

In the spirit of open science, all submissions will be published on this website after the competition is finished.

Technical Information

  1. Each controller will be executed on a separate machine having a single CPU and GPU at its only disposal.
  2. The machine specification: Intel(R) Core(TM) i7-4790 CPU @ 3.60GHz, 16GB RAM + GTX 960 4GB
  3. OS: Windows 10 or Ubuntu Linux 15.04

    Software on Linux

    $ python -V
    Python 2.7.9
    $ python -V
    Python 2.7.9
    gcc version 4.9.2 (Ubuntu 4.9.2-10ubuntu13)
    $ python -c import numpy; print(numpy.__version__)
    $ python -c import scipy; print(scipy.__version__)
    $ python -c import theano; print(theano.__version__)
    Using gpu device 0: GeForce GTX 960 (CNMeM is disabled, cuDNN 5004)
    $ python -c import lasagne; print(lasagne.__version__)
    Using gpu device 0: GeForce GTX 960 (CNMeM is disabled, cuDNN 5004)
    $ python -c import cv2; print(cv2.__version__)
    $ python -c import skimage; print(skimage.__version__)
    $ python -c import keras; print(keras.__version__)
    Using Theano backend.
    Using gpu device 0: GeForce GTX 960 (CNMeM is disabled, cuDNN 5004)
    $ python -c import tensorflow; print(tensorflow.__version__)
    I tensorflow/stream_executor/dso_loader.cc:108] successfully opened CUDA library libcublas.so locally
    I tensorflow/stream_executor/dso_loader.cc:108] successfully opened CUDA library libcudnn.so locally
    I tensorflow/stream_executor/dso_loader.cc:108] successfully opened CUDA library libcufft.so locally
    I tensorflow/stream_executor/dso_loader.cc:108] successfully opened CUDA library libcuda.so locally
    I tensorflow/stream_executor/dso_loader.cc:108] successfully opened CUDA library libcurand.so locally
    $ java -version
    java version "1.8.0_91"
    Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
    Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)

    More on demand

    Software on Windows

    On demand