Комментарии 15
Спасибо за публикацию — интересно посмотреть на ваши результаты и на то, как прогрессирует ваш алгоритм от статьи к статье.
Есть только один комментарий: если я правильно понимаю, то, что вы называете деревом решений, на самом деле является деревом поиска в пространстве событий, а дерево решений — это другой алгоритм из machine learning.
Есть только один комментарий: если я правильно понимаю, то, что вы называете деревом решений, на самом деле является деревом поиска в пространстве событий, а дерево решений — это другой алгоритм из machine learning.
Зачем в заголовок выносить "Al", если ниже по тексту написано, что бот не обучается?
Как то if else на Al не тянут. Имхо, конечно.
Почему вы пишете в «AI» вторую букву как L?
Ну в первой части статьи была использована нейронная сеть, это просто продолжение истории. И если глянуть определение метода, который (как выяснилось :)) я использовал:
По́иск в простра́нстве состоя́ний (англ. state space search) — группа математических методов, предназначенных для решения задач искусственного интеллекта.
По́иск в простра́нстве состоя́ний (англ. state space search) — группа математических методов, предназначенных для решения задач искусственного интеллекта.
Просто искусственный интеллект — это не только машинное обучение. В данной статье имелся в виду игровой ИИ, а сейчас игровые ИИ почти все rule-based, насколько мне известно.
Насчёт обучаемости, то вы можете сделать как в AlphaGo.
Если не ошибаюсь, они там использовали нейронную сеть для оценки ситуации.
Если не ошибаюсь, они там использовали нейронную сеть для оценки ситуации.
Игра в го — детерминирована, там нет элемента случайности. Да и до Google Deep Mind мне далеко)
В обзоре про AlphaGo говорили, что там 3 сети. Одну сеть «попроще» они тренировали чтобы предсказывать ход противника для более быстрого прохода по пространству состояний.
github.com/Apache02/node-yann/tree/master/examples/ttt
Посмотрите мой эксперимент на эту тему на Node.js. Сеть используется как оценочная функция. Без обхода пространства состояний (в этой игре можно без этого).
Тренировка проходит через игру против другого бота. Оппонент генератор случайных чисел, вместо оценки ситуации Math.random(), но всегда делает победный ход если это доступно (оценка 1 если это победа). Сеть заставляю увеличить оценку для победного состояния на всех исходах и уменьшить оценку для 2 состояний, когда она проиграла. Лучший результат достигается за 3000 итераций (300000 игр).
Я проверял и другой метод. Противник спрашивает у обучаемой сети оценку своих состояний, добавляет случайное число и 1 если это победа. Как бы имитация того, что сеть играет против себя же, но с шансом выбора альтернативного хода и победным ходом. Улучшений это не дало. (Эти наработки я не выкладывал).
Мои выводы: это работает, сеть учится, но качество игры немного лучше качества игры оппонента, на котором учится. Если оппонент играет хорошо, то сеть может подстроиться играть против него. Если ходы оппонента недостаточно разнообразны, то сеть может плохо играть против ходов, которых не видела. Для выработки идеальной стратегии оппонент должен играть идеально.
Посмотрите мой эксперимент на эту тему на Node.js. Сеть используется как оценочная функция. Без обхода пространства состояний (в этой игре можно без этого).
Тренировка проходит через игру против другого бота. Оппонент генератор случайных чисел, вместо оценки ситуации Math.random(), но всегда делает победный ход если это доступно (оценка 1 если это победа). Сеть заставляю увеличить оценку для победного состояния на всех исходах и уменьшить оценку для 2 состояний, когда она проиграла. Лучший результат достигается за 3000 итераций (300000 игр).
Я проверял и другой метод. Противник спрашивает у обучаемой сети оценку своих состояний, добавляет случайное число и 1 если это победа. Как бы имитация того, что сеть играет против себя же, но с шансом выбора альтернативного хода и победным ходом. Улучшений это не дало. (Эти наработки я не выкладывал).
Мои выводы: это работает, сеть учится, но качество игры немного лучше качества игры оппонента, на котором учится. Если оппонент играет хорошо, то сеть может подстроиться играть против него. Если ходы оппонента недостаточно разнообразны, то сеть может плохо играть против ходов, которых не видела. Для выработки идеальной стратегии оппонент должен играть идеально.
А не пробовали использовать child_process для распаралеливания построения дерева?
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Разработка AI для пошаговой игры на Node.js (часть 2)