Inspiration

Video Games often feature epic bad guys and boss fights but, with preprogrammed attack patterns they can often suffer from feeling predictable. We believe that reinforcement learning could alleviate this issue and create a variety of strategically complex enemies for players to fight.

What it does/How we built it

Our project is a training pipeline for reinforcement learning models. Its YAML-based configuration system makes it extremely easy to tune parameters and create new scenarios to train the AI on. The logging and checkpointing systems keep you informed on how the training process is going and automatically save snapshots of the model at set intervals.

The training uses our PyTorch implementation of Q-Learning a popular and effective algorithm for reinforcement learning. The game is highly extendible allowing the training pipeline to easily be applied to new games.

Challenges we ran into

One of the biggest challenges what working asynchronously. Most of us had not worked in a group before this project but we overcame this challenge with our asynchronous development cycle. Together, we broke down the project into standalone components and developed them asynchronously communicating often to ensure interdependencies were met. We then tested everything in isolation and brought it all together when it was ready.

Extensions

Upgrading the Game:

  • Terrains, obstacles
  • Melee weapon, shields, grenades, magazines, reloading
  • Distinct characters, abilities, power-ups

Experimenting with optimizations:

  • Effect of different loss functions
  • Effect of different reward functions
  • Using model optimizations algorithms like NEAT

Built With

Share this project:

Updates

Submission history