А как давно он был создан? Я видел там Q-learning уже внедрен. Правда я разбирался с крестиками-ноликами не просто так, а хочу постепенно дополнять и усложнять свои знания. Моя ИКР - это захостить игру тут www.computerpokercompetition.org и потом смоделировать игру против 5 оппонентов, предварительно создав профили реальных игроков.
Вот пытаюсь определиться какой тип Machine learning лучше подойдет. Кодить естественно буду не я, а настоящие профи, но нужно грамотно сформулировать для них задачу, а для этого понять наиболее подходящие для такой задачи алгоритмы.
Допустим для игры с астероидами очевидно, что мы проигрываем при столкновении с астероидом. Поэтому нужно написать функцию, которая будет максимизировать удаление от всех астероидов.
Но вот, чтобы программа поняла сама что именно эту функцию нужно максимизировать, а не какую-нибудь другую -вот это уже более интересный вопрос. Ведь мы тоже копим информацию после проигрышей и затем находим причины и из них уже составляем целевую функцию.
Понятно, что для крестиков-ноликов можно подобрать алгоритм, но тут скорее вопрос в том, чтобы разобраться, что лучше, чтобы применить его для более сложных игр, например для покера, который в десятки тысяч раз сложнее шахмат, так как это игра с неполной информацией, в отличие от старых компьютерных игр, где поведение строго запрограммировано и задача программы просто подстроиться под алгоритм.
Кстати я сделал любопытное открытие.
В том же Github есть реализация другой игры Asteroid на том же алгоритме.
В результате там даже за 200 итераций алгоритм ничему не может научиться и постоянно проигрывает.
Так вот интересный факт.
Игру Flappy bird поставили 3459 звезд и 401 fork, за то, что алгоритм так быстро научился играть в эту игру. Хотя по факту - это просто подстройка под существующий простой механизм генерации препятствий. Усложни игру и алгоритм программы уже будет бессилен.
А к игре https://github.com/xviniette/AsteroidsLearning всего 35 звезд и 17 fork, так как алгоритм ее не осилил. А по факту причина в большом количестве одновременных препятствий, под которые не подстроиться из-за бесчисленного числа сочетаний.
Это называется human result oriented. =)
Просто в симуляции данной игры уже 60е поколение NeuroEvolution набирает безумное количество очков в этой игре. Только опять тот же вопрос для Flappy bird. Как там сохранить успешную популяцию, чтобы сохранить успешный опыт для новой такой же игры на другом компьютере?
ivodopyanov, Тогда возникает вопрос есть ли реализация генетического алгоритма для крестиков ноликов на том же Python?
Было бы интересно сравнить эффективность. Например, чтобы программа, обученная Qlearning сыграла против программы на генетических алгоритмах. Ясное дело, что при игре 3x3 там всегда должна быть ничья, но можно ведь увеличить размеры полей.
Но что будет, если игра будет более сложная, чем эта. Там ведь список вариантов ходов будет просто огромен.
Например шахматы. Получается для шахмат невозможно будет применить Qlearning? А ведь есть еще на порядок более сложные игры, например покер. На сохранение всех сочетаний карт уйдут годы. Или все-таки есть метод как сохранить подобные решения для более сложных игр?
Но сходства в том, что результаты первого и второго алгоритма записываются в таблицу типа.
Идентификация хода (положение всех крестиков и ноликов До нашего хода) - Значение функции Q(ожидаемая полезность)
И при игре программа просто берет из этой базы готовое решение.
Но что будет, если игра будет более сложная, чем эта. Там ведь список вариантов ходов будет просто огромен.
Например шахматы. Получается для шахмат невозможно будет применить Qlearning?
Кстати интересно почему считаете второй код правильнее? Более грамотно описан Q-learning? Я попробовал сыграть против противника, обученного по первому коду в крестики-нолики, реально невозможно обыграть.
Спасибо Вам большое за презентацию и код, презентация с разбором кода отличная, все разберу, но даже в презентации нет информации в каком все-таки виде сохраняется решение? Там везде идет упор на сам принцип работы алгоритма, в целом он мне ясен, кроме некоторых деталей. Но вот в каком виде сохраняется решение после тренировок агента для его последующего использования я в этих материалах не нашел. =(