Крестики-нолики пилота Пиркса

12
keepersheet
На сайте с 21.06.2016
Offline
55
1732

К НГ написал прикольный скрипт, представляющий из себя некоего виртуального игрока в крестики-нолики. Artificial Intelligence работает на основе рубиновой обертки FANN - open source библиотеки, предназначенной для построения нейронных сетей. Этапы процесса, посредством которого "искусственный интеллект" на основе Neural Network приходит к тому или иному ходу - выведены в консоль, что видно в ходе просмотра короткого скринкаста (программа находится в активной фазе развития и видео уже устарело: сейчас интерактивной инфы в консоли несколько больше).

Заценить код или скачать и поиграть можно на гитхабе. Разработка шла на ruby 2.6.4p104 (2019-08-28 revision 67798) [x86_64-linux], а впрочем, версия ruby или ось практически без разницы. Для работы скрипт требует джемы csv и ruby-fann.

По ходу кодинга сознательно не смотрел иные решения аналогичных компьютерных игроков на любых ЯП, чтобы не отклоняться от первоначальной идеи... которая не скажу что блещет новизной и вообще крайне проста: при первом запуске скрипт рандомно проигрывает сам с собой несколько десятков тысяч партий в крестики-нолики (занимает минуту - две, в зависимости от ресурсов компьютера), записывая ход игры плюс некоторую дополнительную информацию в csv-файл; и задача виртуального игрока затем - из огромного числа случайных ходов выудить оптимальные, в чем и заключена функция нейронной сети. Получилось, в общем, забавно: аналогов AI такого рода пока что на гитхабе не вижу, несмотря на несметное число самых разнообразных TicTacToe.

Т.е. логику работы приложения возможно описать так: на каждый ход человека-игрока формируются два массива: массив не противоречащих правилам игры ходов, возможных при данном положении на доске, и массив коэффициентов, "приоритетов", каждому из этих ходов, возможно (способны разниться), свойственных. Программа как бы балансирует на огромном числе вероятностей, формируя - в ход идет все, начиная с коэффициентов и заканчивая сравнением количества однообразных ходов с различными коэффициентами - наивысшую; именно такова здесь роль нейронной сети. Итог работы - ход, с наибольшей (по "мнению" NN) вероятностью приводящий в итоге к успеху... все очень несложно, хотя и представляет из себя пищу для вполне себе интересных размышлений.

На данный момент скрипт играет только ноликами, т.е. вторым номером (постараюсь дописать функционал в самое ближайшее время). Как правило, программа вполне успешно сведет вашу с ней партию к ничьей, а если где-либо лоханетесь (насколько помню, вторым номером в крестики-нолики заведомо возможно выиграть только вследствие ошибки противника, если же ошибок нет, ничья - максимум того, что возможно) - моментально этим воспользуется. Словом, совсем не зловредный андроид из "Дознания пилота Пиркса"...

Отмечу интересный момент: несмотря на то, что данные на входе - положение на доске, лог-файл csv, логика присвоения коэффициентов и, как следствие, x_data и y_data массивы, передаваемые в нейронку, неизменны - ответы нейронной сети способны разниться. Такое нечасто, но случается. Автор совершенно не мнит себя спецом в деле построения топологии нейронных сетей и, таким образом, с удовольствием выслушает любые комментарии в контексте сказанного.

Если коменты будут. Если нет - попросту всех с наступающим Новым Годом.

Веб-разработка на ruby и php (https://masterpro.ws/)
VoV@
На сайте с 22.09.2007
Offline
196
#1

Как программист программисту, какой же вы нудный целеустремлённый.

⭐ Разработка Андроид-приложений (Xamarin C#). ⭐ Разработка ASP.NET (WebForms, MVC, WebAPI, Core). ⭐ Цой жив!
W
На сайте с 08.02.2017
Offline
156
#2

мода, куда только не суют нейронки. ладно бы хоть шахматы были, в крестиках-ноликах на ифах все можно сделать. и даже незатратно по времени

Комплексный аудит ИМ. Формирование УТП, анализ юзабилити, каналов продвижения. Контекстная реклама, настройка систем аналитики. Консультация - бесплатно, в ЛС
keepersheet
На сайте с 21.06.2016
Offline
55
#3
VoV@:
Как программист программисту, какой же вы нудный целеустремлённый.

болтун программист, кинь ссылку на свой код посмотреть для начала.

А то, смотрю, один флейм в профиле и ни байта кода.

VoV@
На сайте с 22.09.2007
Offline
196
#4

И причём тут код?

Ну ладно, пусть будет код:


void get_tomorrow_date( struct timeval *date )
{
sleep( 86400 ); // 60 * 60 * 24
gettimeofday( date, 0 );
}
keepersheet
На сайте с 21.06.2016
Offline
55
#5
VoV@:
И причём тут код?

Да при том, что ты не программист.

Никогда им не был и никогда уже не будешь. Может быть, что-то где-то слышал, когда-то что-то попробовал. И это "что-то" у тебя не пошло.

На серче прям беда: туча ламеров в силу какого-то недоразумения считает, что если накидать в подписи пару-тройку никому здесь непонятных спецификаций, то сойдешь за "программиста"; типа под ником не поймут, кто я есть на самом деле. Полная фигня.

Не впервые наблюдаю здесь такое. Предложишь предъявить github или там heroku - совершенно обычное дело в среде кодеров - быстрехонько сливаются. Клоуны. Форумчане, берите на вооружение этот способ: вы неслабо бы удивились, если б узнали, сколь мало на самом деле на серче число программистов (даже джунов или миддлов) среди тех, кто с тупыми понтами таковыми представляется.

Ты что ж думал, лапоть, оно все вот так просто? Ментальность программиста легко узнаваема, особенно, если в активе перманентное общение в профессиональной среде;

среде, к которой ты никогда не принадлежал.

Dirty_Sanchez
На сайте с 14.01.2015
Offline
69
#6

Просто изумительно, как самая безобидная и изначально позитивная тема на Сёрче может моментально скатиться в бессмысленный и беспощадный срач

keepersheet
На сайте с 21.06.2016
Offline
55
#7

Dirty_Sanchez, в чем-то я согласен, насчет серча.

Но не в данном случае.

Ругани не было. Следовательно, ваше определение не вполне последовательно.

Вы не согласны со мной в том, что под разнообразными никами этот форум зачастую скрывает самозванцев, т.е. тех, чьи определения самих себя ни в коей мере не соотвествуют реальности? - я готов привести аргументацию сказанному.

Причем, опять же, без ругани и любых эпитетов.

Хотите?

Dirty_Sanchez
На сайте с 14.01.2015
Offline
69
#8

Не заморачивайтесь, это я так, мысли вслух :) Просто грустная тенденция, когда хорошие темы превращаются в нечто не столь позитивное. С Новым Годом вас :)

keepersheet
На сайте с 21.06.2016
Offline
55
#9

Dirty_Sanchez, ок, не буду.

С наступившим вас.

Но, коль скоро вы затронули тему, вполне заслуживающую, на мой взгляд, того, чтобы быть затронутой... приведу здесь один лишь отзыв о форуме, в некоторой степени созвучный вашей реплике.

Нет, это совершенно не та аргументация, которую я предлагал.

Не надо так не надо, проехали. Тем более в НГ.

Но один из форумчан серча в данный момент не имеет сюда доступа, и в моем блоге он оставил ссылку на свой рассказ об этом. Именно эту ссылку - на его веб-ресурс, не на мой - я и приглашаю всех желающих заценить, что называется, по достоинству.

Забаненным быть не боюсь, скорее мне это польстит, в электронную "репутацию" серча не играю; кого подобное развлекает - упражняйтесь на здоровье.

А ссылка на форум Сергея Нижегородцева - вот, вместо звездочек (эка его здесь боятся) подставьте s e o p r a v d a . r u

*************/novosti-mira-seo/forum-serch-otkrytoe-pismo-vladelcam-searchengines-guru/

кот Бегемот
На сайте с 07.12.2009
Offline
276
#10

Все программисты кроме милторга гавно. Они ничего не умеют и кодят всякую хрень

Яндекс Директ, Гугд адворс, не дорого и ответственно. Телеграмм @H_Ilin
12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий