The Board Ultimatum
First things first, this project is finished and completely usable!
See our finished product here! (may take a minute to load)
The Board Ultimatum is an interactive site where a user can enter their preferences in the form of either game attributes that they like/dislike, or by inputting a game they already enjoy, and start receiving board game recommendations based on their input. In addition, if the user is an expert in the area of board games, he or she may rate the quality of recommendations between games and the system will incorporate this knowledge into future recommendations.
Motivation & Goals
The motivation behind the project was simple: we want to eliminate guesswork from board game selection. Often times board game players, experienced and inexperienced alike, struggle to determine the next game to play when confronted with a huge selection. We wanted to play the role of a knowledgeable player who could ask them questions about games or aspects of games they preferred in order to give relevant results.
We built this system with the intention that it would give recommendations that were as good as recommendations from board game experts and enthusiasts. All aspects of approach and design move towards this goal.
Some more specific goals include:
- Build a web interface using the recommendation engine to allow users to decide what to play next. A user can search for types of games based on a variety of attributes.
- Create a system behind the website to act as a recommendation engine. The system will take as input attributes of board games and return an ordered list of games that match this input.
- Create a second system that takes as input a single game and presents an ordered list of games that are similar to the game. The input/output system changes over time as users rate and select different games.
See our post, Problem Domain and Motivation.
Because our goal was to emulate a board game expert, our approach to the system was to capture knowledge from experts through interviews and incorporate this = knowledge in the system.
You may wonder why we took the approach of using two separate systems to make recommendations. As credit to the usefulness of interviews, it’s because we realized that experts will make recommendations based on games that a person likes just as much as aspects of games that a person likes.
The overall design of the system is summed up nicely by this flowchart:
To read more about our system design, see all of our design posts.
Here’s a couple of the most significant design posts:
The web application itself is mostly a front-end to the engine. It takes data input from a user, uses the engine to derive a list of games the user might want, and delivers the list back to the user. The front-end is split into the following parts:
- A web server – Capture and format HTTP requests and responses on our host.
- A routing to view framework – Using Noir to declartivly create pages.
- An API built on top of that framework – Handle AJAX requests for interactive user experience.
- An HTML generation scheme
Facts and rules
In general, our experts provide us with rules and decisions as well as helped specify what types of facts we should gather and use in our system.
Our facts concerning games were the attributes of games pulled off of BGG (see Database of games under Key Components below). In the similar games engine, extra facts on expert recommendations were gathered through our expert game-rating interface.
Rules differed between the systems. In the similar games engine, rules were innate to the neural network recommendations generated based on the expert’s rules. In the attribute recommendation engine, rules were based on scoring mechanics. Scores were applied by comparing user preferences to each game and adding or deducting points based on how their preferences matched up to the game. These values change depending on the attribute, but are summed to represent the quality of the recommendation of that game as a whole.
See some posts on the key components of the system:
Database of games
Data was used from our non-human expert on board games, BoardGameGeek (BGG). BGG has a massive collection of information on games and an API we used to pull down this information. We imported data on the top 1000 games off of BGG into a MongoDB database.
Neural network of game recommendations
Game preference scoring
Front end design and implementation
Source Code and Documentation
All of our source and documentation is available on github. For direct links to our repositories see the sidebar.
A quick introduction to our setup instructions is also available.