schrum2 / MM-NEATv2

MM-NEAT version 2.0 is no longer supported. Please get MM-NEAT 3+ from https://github.com/schrum2/MM-NEAT
Other
11 stars 5 forks source link

Sophisticated Checkers Fitness function #357

Open schrum2 opened 7 years ago

schrum2 commented 7 years ago

It is always useful to recreate previous results before moving on to something more complex: I noticed that in the Checkers HyperNEAT paper (http://eplex.cs.ucf.edu/papers/gauci_aaai08.pdf) a fairly sophisticated fitness function specific to Checkers is used. Therefore, this GitHub issues was two parts.

First, create a facility to allow general fitness functions for board game evolution. Specifically, create a BoardGameFitnessFunction interface. This interface will have a method that takes a board game state and a designated player index, and returns the corresponding fitness score.

This is very similar to something that Alice did in the microRTS task, so ask her for help analyzing her code examples. You will need to change code in several places throughout the static and coevolution board game tasks, so that the fitness function(s) that are "registered" depend on the fitness function you are using.

The existing fitness calculation should be stored in a class that implements the new BoardGameFitnessFunction interface. Call the class SimpleWinLoseDrawBoardGameFitness.

Once this general fitness function facility exists, implement the specific Checkers fitness function described on page 4 of the paper linked to above. Then make batch files that will evolve agents using this fitness function.

This issue is sort of an extension of #315

DarwinJohnson commented 7 years ago

Created a Checkers Batch File that uses the AdvancedCheckersFitnessFunction. Will run and document the results.

DarwinJohnson commented 7 years ago

Ran the AdvancedCheckers Batch File, but it would be difficult to compare the results to the Simple FitnessFuntion Checkers due to the sheer difference in numbers. Here were the AdvancedCheckers final results: Generations: 73 Max: 230.4 Avg: 222.2 Min: 219.2

Other than the difficulty in comparing the two FitnessFunctions, I think that the AdvancedCheckersFitnessFunction fully works.

schrum2 commented 7 years ago

I was reading the paper again, and came across this quote about the fitness function:

"This function rewards incremental progress and provides a smoother learning gradient than simply awarding fitness based on the final score. Fitness is always awarded over 100 turns, even if the game ends earlier. That way, winning early is not penalized. If the candidate wins against the training opponent, an additional 30,000 is added to the total fitness."

These aspects of the fitness function were not taken into account in our implementation, thus this issue is re-opened.