Вторая итерация разработки самообучающейся нейронной сети для игры в Tic Tac Toe (на основе рубиновой обертки библиотеки FANN), которую и хочу сегодня представить вашему вниманию.
Круто прозвучало, аж самому понравилось. Но, помнится, в бытность первого релиза были на Хабре и иронические реплики, типа хаха, из пушки по воробьям. Сходу предупреждая подобного рода - «можно было и на if-ах склепать» - аффекты: можно-то оно, знамо дело, многое, в том числе Яндекс открыть и поиграть, но практического опыта разработки игровой логики у вас не будет, да и к пониманию основ нейронных сетей не приблизитесь никоим образом. А, самое главное - вай нот, почему нет? - практика моей когда-то офисной карьеры ехидно напоминает, увы, что значительно большие, нежели в контексте данной разработки, человеческие ресурсы сплошь и рядом у нас тратятся на достижение гораздо менее значимых целей, чем написание программы, призванной проиллюстрировать не только опыт разработчика, создающего полностью эксклюзивный (#аналаговнет) алгоритм Artificial Intelligence, но и некоторую его склонность к юмору.
ОК, с этим разобрались. Теперь - коротко по сабжу. И да, если заинтересовал, позвольте адресовать к подробным докам на тему, здесь же - ремарка короткой строкой и ссылка на гитхаб для тех, кто пожелает попробовать обучить и обыграть нейронку (вам понадобится установить Ruby, далее ровно никаких технических проблем и плясок с бубнами). Итак:
gem install csv ruby-fann progress_bar tty-pie
git clone https://github.com/cmirnow/Tic-Tac-Toe-AI-with-Neural-Network-Resurrections.git
cd Tic-Tac-Toe-AI-with-Neural-Network-Resurrections
ruby start.rb
После первого запуска программа, не знающая правил и абсолютно не умеющая играть в Tic Tac Toe - проигрывает рандомно несколько десяткой тысяч партий (определено в настройках, меняйте и экспериментируйте, при желании), что занимает, в зависимости от ресурсов вашего рабочего компьютера, одну-две минуты. В качестве итога будет создан расширенный лог-файл в формате csv, о чем приложение известит соответствующим мессаджем консоли, пригласив к игре.
Следующий запуск (также все последующие, пока в директории приложения находится единожды сформированный лог) начнется так же, как в обиходе у большинства современных компьютерных игрушек - с загрузки данных (здесь все значительно быстрее) в оперативную память, что визуально сопровождено бегущей строкой терминала. В скобках: логика программки исправно отрабатывает в консолях Linux и Windows, но в винде процесс игры визуально способен выглядеть несколько хуже (пробовал пару раз на виртуалке, я очень не любитель поделий M$; отпишитесь, please, если заметите иные проблемы). По окончании чего Artificial Intelligence готов играть: после окончания каждой партии тут же начинается новая, очередность ходов (нейронка умеет играть как первым, так и вторым номером) выбирается случайным образом.
Алгоритм был несколько изменен по сравнению с предыдущим релизом, что позволило ощутимо улучшить уровень игры виртуального оппонента. На самом деле, мне практически теперь не удается обыграть своего маленького франкенштейна, который всегда сводит игру как минимум к ничьей, если не всегда к выигрышу. Если сумеете хотя бы раз выиграть, либо же программка откажется продолжить игру - это явно нештатная ситуация (не забываем, ваш виртуальный игрок вполне успешно обучает сам себя и полностью с нуля, что не очень просто и неким образом иллюстрирует историю Мюнхгаузена, сумевшего вытащить самого себя из болота за волосы), вам необходимо выйти из приложения (q + Enter), удалить лог и запустить процесс обучения заново.