Hello everyone!
I'm making a game where players build walls and move their pieces to try to be the first player to reach their target square. Essentially, it's a checkerboard, and players can build walls on the segments between adjacent squares to impede their opponents' movement. The one catch is that you are never allowed to place a wall in such a place as to permanently prevent a player from reaching his target square (ie. there must always be a legal path from each player's current location to his target square).
Now, I've played around with ANNs before, for class projects and such, but this is the first time I've ever tried applying it to a real-world situation, and I need some advice. The ANN's job is to check every time a player attempts to place a wall, to ensure that the new wall doesn't violate the "legal path" rule. Previously, I applied a Genetic Algorithm, the idea of which was taken from Mat Buckland's "AI Techniques for Game Programming" (copyright 2002) and encoded movement instructions into genomes and bred them to find solutions. This worked well enough, until the mazes started to get really complicated, with lots of backtracking and winding around. Now, I want to try an ANN, to see if it might provide better results. My questions relate more to the design of the network as opposed to the construction of it.
Primarily, I'm having trouble determining what the network inputs, outputs, and weights should represent. Should the inputs be the current state of the checkerboard (ie. which walls have been placed and which haven't, and the current location of the player in question), and should the weights represent the proposed movement instructions that will lead the player to his target? If so, the input layer would be very large. What would a hidden layer contribute to this setup? What would the output represent? This leads me to the question of how many outputs I would need, and what they would represent. If I assign each genome 40 movement instructions to try to find a solution, would I want 40 outputs instead, or would I want 40 weights? What would the inputs in either of these setups need to be?
In addition to those questions, can you offer any advice as to what activation functions would be best to use? Is there a "right answer" when it comes to picking activation functions, or is it just a matter of trial-and-error?
As you can see, I have many questions, and more. I would try it out, but each time I come up with a theory on how to design the network, I find some flaw in the idea that seems to make it an unreasonable theory. Any help or insight you can offer would be greatly appreciated.
Thank you.