In this project, you will, among other things:
For this project, you will write a program that plays Gomoku. However, the point is not to do search (as we might have done in CS116), but rather for the program to learn an evaluation function that will select the best move without search. Chapter 1 of your text describes the design of an adaptive checkers-playing program. You should use that as a guide and implement LMS as your learning method.
In this course, I usually allow students to use whatever programming language they prefer. On Eureka, I will be providing a Racket starter package that includes a game server and a sample client that plays random moves. You are welcome to build on that if you want to use Racket. However, if you choose to use another language for your learner, it must connect and coordinate with the Racket-based game server. In any event, the protocol is operationally defined by the Racket server.
Your implementation should play games against itself (or another version of itself), improving it's performance based on the games that have been played. Thus, you will have to create training instances from the games played, and then modify your program's model based on these training instances. For this assignment, I want you to implement the LMS learning method that we discussed in class.
This is an individual assignment. Appropriate expectations on working together apply. If you search for them, you can find many implementations of Gomoku in many different programming languages. It is not the goal of this exercise to end up with an adaptive Gomoku player; the goal is for you to learn about machine learning through the process of implementing an apdaptive Gomoku player. Do not short-change your own learning experience by grabbing an implementation from the web and then making a few changes.
Submit a README file together with your program file(s) in either .tgz or .zip format. Your README should describe what features you used and what you did to get the program to learn. Describe any significant discoveries or learning experiences you encountered during the process. Be sure to document your code and to include everything I will need to compile and run your program.