/Griddly

A grid-world game engine for game AI research

Primary LanguageC++MIT LicenseMIT

Griddly

Discord Chat PyPI version

A heavily optimized and flexible grid-world game engine for Game AI research.

BOOM Some features

  • Design and build game mechanics using a simple YAML-based language: GDY

  • Fast execution speed environments can run up to 70k FPS on a single thread.

  • Don't worry about complex efficient rendering code, just define the images for each game object and Griddly passes this to the GPU.

  • Supports Single Agent, Multi Agent and RTS environment interfaces.

  • Multiple observervation modes:

    • Vectorized
      • Configurable one-hot encodings for each x,y coordinate
    • Rendered
      • Isometric, sprites and simple shapes
      • We also let you use custom shaders to render however you want!
    • State Maps
      • Description of the entire environment including objects, locations and variables.
    • Event History
      • Descriptions of actions that have happened in each step.
    • Configurable partial observability
  • Copyable Forward Models

    • Game state can be cloned at any point in time. This is super useful for many Algorithms. For example Mont-Carlo Tree Search.
  • Procedural Content Generation Interfaces

  • Reinforcement Learning with RLLib

WHOOSH!! Some Environments

Check out the full list of pre-built environments here

Community Community

Join the Discord community for help and to talk about what you are doing with Griddly!

Documentation Documentation

Full documentation can be found here: griddly.readthedocs.org

Tutorials Tutorials Tutorials Tutorials

The most awesome part of Griddly is the ability to easily customize and build your own research environments. To make this extra easy we've written lots of tutorials:

  • This tutorial takes you through how to create a simple game environment using GDY.

Game Mechanics

  • Proximity Triggers
    • Configure interactions between objects based on their distance.
  • Projectiles
    • Objects that move under their own power.
  • Level Design
    • How to design levels for single and multi-agent environments.
  • Stochasticity
    • How to make environments with stochastic mechanics.
  • A* Search
    • Use A* pathfinding for mobs in Griddly
  • Customize rendering for environments using SPIR-V shaders.

Installing Installing

pip install griddly

Build Status

OS Status
Linux Build Status
Windows Build Status
MacOS Build Status

Installing Building locally

Firstly sync up the git submodules:

git submodule init
git submodule update
cmake . -DCMAKE_BUILD_TYPE={Debug|Release}
cmake --build .

Artifacts can then be found in {Debug|Release}/bin

Tests

Test can be run with:

ctest .

Python Installer

To install the built libraries with python you need to do one of the following (depending if your built the binaries with Debug or Release)

The installer should copy the following files into the python/griddly directory:

  • resources/* -> python/griddly/resources
  • {Release|Debug}/python_griddly.cpython* -> python/griddly/libs

Debug

cd python
python setup.py develop

OR

cd python
pip install -e .

Release

cd python
python setup.py install

Prerequisites

Ubuntu

wget -qO - http://packages.lunarg.com/lunarg-signing-key-pub.asc | sudo apt-key add -
sudo wget -qO /etc/apt/sources.list.d/lunarg-vulkan-bionic.list http://packages.lunarg.com/vulkan/lunarg-vulkan-bionic.list
sudo apt update
sudo apt install vulkan-sdk

Windows

  1. Install cmake
  2. Install MinGW (posix 8.1.0) or MSVC
  3. Install Vulkan

MacOS

  1. Install xcode CLI tools
xcode-select --install
  1. Install Brew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
  1. Install cmake
brew install cmake
  1. Install Vulkan