Quiero crear una IA que pueda jugar cinco en raya / gomoku. Como mencioné en el título, quiero usar el aprendizaje de refuerzo para esto.
Utilizo el método de gradiente de políticas , a saber, REINFORCE, con línea de base. Para el valor y la aproximación de la función política, utilizo una red neuronal . Tiene capas convolucionales y totalmente conectadas. Todas las capas, excepto la salida, se comparten. La capa de salida de la política tiene (el tamaño de la placa) unidad de salida y softmax en ellas. Entonces es estocástico. Pero, ¿qué pasa si la red produce una probabilidad muy alta de un movimiento no válido? Un movimiento no válido es cuando el agente quiere marcar un cuadrado que tiene una "X" u "O" en él. Creo que puede atascarse en ese estado del juego.
¿Podría recomendar alguna solución para este problema?
Mi conjetura es utilizar el método actor-crítico . Para un movimiento no válido, debemos dar una recompensa negativa y pasar el turno al oponente.
fuente
Por lo general, los métodos softmax en los métodos de gradiente de políticas que usan aproximación de función lineal usan la siguiente fórmula para calcular la probabilidad de elegir la accióna . Aquí, los pesos son θ , y las características ϕ es una función del estado actual s y una acción en el conjunto de acciones A .
To eliminate illegal moves, one would limit the set of actions to only those that were legal, henceLegal(A) .
In pseudocode the formula may look like this:
Whether using linear or non-linear function approximation (your neural network), the idea is to only use the legal moves when computing your softmax. This method means that only valid moves will be given by the agent, which is good if you wanted to change your game later on, and that the difference in value between the limited choice in actions will be easier to discriminate by the agent. It will also be faster as the number of possible actions decreases.
fuente
IMHO the idea of invalid moves is itself invalid. Imagine placing an "X" at coordinates
(9, 9)
. You could consider it to be an invalid move and give it a negative reward. Absurd? Sure!But in fact your invalid moves are just a relic of the representation (which itself is straightforward and fine). The best treatment of them is to exclude them completely from any computation.
This gets more apparent in chess:
In a positional representation, you might consider the move
a1-a8
, which only belongs in the game if there's a Rook or a Queen ata1
(and some other conditions hold).In a different representation, you might consider the move
Qb2
. Again, this may or may not belong to the game. When the current player has no Queen, then it surely does not.As the invalid moves are related to the representation rather than to the game, they should not be considered at all.
fuente
I faced a similar issue recently with Minesweeper.
The way I solved it was by ignoring the illegal/invalid moves entirely.
Hope this helps.
fuente