The first term assignment at university was to program a computer player for the game “Reversi”. Reversi, also known as Othello, is a board game too complex to solve with brute force.

Students had 14 weeks time to write their AI player in teams of two. The player had to be written in Java and was not allowed to do any remote calls to a server (where the client could offload some calculations). The assignment was given in the course “Informatics 2“, taught by Professor Mattern. I worked together with Jonas Huber on our Reversi player.

At first, we tried common implementations to better understand the game itself. The natural start was to write a Random Player, that choose the next move randomly (but followed the rules). After, we implemented minimum and maximum strategies where the player always choose the move that would minimize respectively maximize the number of disks of his color.

Based on the concepts we learned in the “Informatics 2″ course, we implemented another player with the MiniMax/AlphaBeta strategy. That player outperformed all our previous implementations. The key in MiniMax is to have a good understanding of the value of different situations in the game. With MiniMax, the player would compute different possible moves and evaluate the quality of this move based on a valuation function.

As we had some time left before the assignment was due, we decided to try yet another implementation using a neuronal network. Inspired by a seminar from the first semester in Natural Computing by Professor Zitzler, we wanted to adopt a neuronal network to play Reversi.

It quickly turned out to be too time consuming to properly train the network. Hence we decided to rely on values found in literature. We based our neuronal network on the following paper:

Manning, Edward P., (2007), “Temporal Difference Learning of an Othello Evaluation Function for a Small Neural Network with Shared Weights,” Proceedings of the 2007 IEEE Symposium on Computational Intelligence and Games (CIG 2007).

Jonas Huber’s and my source code can be found at https://github.com/bekoeppel/Lynx-Reversi-Player.