Спасибо, как раз то, что я искал. Но есть одно но, по первому пункту.
Представьте, что это такая сложная игра как покер, и количество срезов огромно.
Например я играю против оппонента. Обычно он сбрасывает карты в 50% случаев, но:
Если пришла определенная карта или несколько карт от [2 До Туза], то он сбросит чаще или реже
Если до нашего действие было определенное действие или набор действий от [1 до 10] то он сбросит чаще или реже
Если он думал x секунд от [0 До 10] то он сбросит чаще или реже
И другие факторы.
Так вот если мы пробуем перебрать все возможные факторы или сочетания факторов, то получаем годы перебора. =)
Я взял библиотеку genetic_evolution для Python и настроил ее так, чтобы fintes-функцией было например вероятность сброса карт более 85% и получил неплохие срезы, но как быть, если нам нужно получить матрицу срезов.
Например, оппонент сбросил карты:
0-30% - Наборы факторов k,l,m...
30-70% - Наборы факторов n,o,p
70-10% -Наборы факторов r,s,t
Может есть способ лучше и удобней для этих задач?
xmoonlight, Да верно, под профи я имел ввиду людей с навыками абстракции выше моих, с хорошей дисциплиной и без мании гениальности. Для Вас это возможно будет нормальный кодер. =)
Идея в том, чтобы дать кому-то задание, нужно написать подробное ТЗ, а чтобы написать подробное ТЗ , нужно подробно знать, как работает тот или иной метод, а чтобы узнать как он работает нужно хотя бы что-то закодить, даже совсем простое. Вот такая у меня логика.
xmoonlight, Ну, когда я делал в прошлом проекты, то я понял, что делаю некоторые вещи непозволительно долго, а другие наоборот довольно быстро. Поэтому проще делегировать сложные куски кода с адекватную плату, и тогда проект реализуется намного быстрее.
А как давно он был создан? Я видел там 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? А ведь есть еще на порядок более сложные игры, например покер. На сохранение всех сочетаний карт уйдут годы. Или все-таки есть метод как сохранить подобные решения для более сложных игр?