Я делаю программу, которая учит 2 игроков играть в обычную настольную игру, используя Укрепление обучения и метод обучения временным различиям (TD (λ)) на основе последействия. Обучение происходит путем обучения нейронной сети. Я использую Sutton's NonLinear TD/Backprop neural network) Мне очень понравилось бы ваше мнение о моей следующей дилемме. Основного алгоритма/псевдокод для воспроизведения поворота между двумя противниками этоУкрепление обучения-ТД обучения от последействия
WHITE.CHOOSE_ACTION(GAME_STATE); //White player decides on its next move by evaluating the current game state (TD(λ) learning)
GAME_STATE = WORLD.APPLY(WHITE_PLAYERS_ACTION); //We apply the chosen action of the player to the environment and a new game state emerges
IF (GAME STATE != FINAL){ // If the new state is not final (not a winning state for white player), do the same for the Black player
BLACK.CHOOSE_ACTION(GAME_STATE)
GAME_STATE = WORLD.APPLY(BLACK_PLAYERS_ACTION) // We apply the chosen action of the black player to the environment and a new game state emerges.
}
Когда каждый игрок должен вызвать его метод обучения PLAYER.LEARN (GAME_STATE). Вот диллема.
ВАРИАНТ A. Сразу после переезда каждого игрока, после того, как новый afterstate возникает следующим образом:
WHITE.CHOOSE_ACTION(GAME_STATE);
GAME_STATE = WORLD.APPLY(WHITE_PLAYERS_ACTION);
WHITE.LEARN(GAME_STATE) // White learns from the afterstate that emerged right after his action
IF (GAME STATE != FINAL){
BLACK.CHOOSE_ACTION(GAME_STATE)
GAME_STATE = WORLD.APPLY(BLACK_PLAYERS_ACTION)
BLACK.LEARN(GAME_STATE) // Black learns from the afterstate that emerged right after his action
OPTION B. Сразу после переезда каждого игрока, после того, как новый afterstate появляется, но после того, как противники двигаются, если противник совершает победный ход.
WHITE.CHOOSE_ACTION(GAME_STATE);
GAME_STATE = WORLD.APPLY(WHITE_PLAYERS_ACTION);
WHITE.LEARN(GAME_STATE)
IF (GAME_STATE == FINAL) //If white player won
BLACK.LEARN(GAME_STATE) // Make the Black player learn from the White player's winning afterstate
IF (GAME STATE != FINAL){ //If white player's move did not produce a winning/final afterstate
BLACK.CHOOSE_ACTION(GAME_STATE)
GAME_STATE = WORLD.APPLY(BLACK_PLAYERS_ACTION)
BLACK.LEARN(GAME_STATE)
IF (GAME_STATE == FINAL) //If Black player won
WHITE.LEARN(GAME_STATE) //Make the White player learn from the Black player's winning afterstate
Я считаю, что вариант B является более разумным.