Наконец придумал, чем занять нейросеть. Научить её играть в игры.
Но для того, чтобы научить нейросеть чему угодно, для начала надо сделать набор данных для обучения. В случае с играми, соответственно, это будут партии различных игр. Для начала я выбрал что-нибудь попроще: крестики-нолики. Благо ПОЛНОЕ дерево решений для этой игры очень небольшое. Чисто теоретически там 9! игр (около 360 000), в реальности намного меньше: не все игры идут 9 шагов, многие являются отражениями других игр, развёрнутых на 90, 180, и 270 градусов. И так далее.
Написал программу на Питоне, которая генерирует все возможные игры, играет в них, и записывает результаты. Таким образом, у меня получилась программа, которая играет в игры традиционным способом — через построение игрового дерева.
Но будучи полным новичком в написании игр, я сделал фатальную ошибку. Вот как именно программа решает, каким ходом ответить на ход противника? Вопрос не такой простой, как кажется. Вроде бы очевидно — берём ход, который скорее всего приведёт нас к победе, и ходим так, да? Так думал и я. И неверно думал. То, что ход может привести нас к победе, совершенно не означает того, что он не приведёт нас к поражению. Поэтому сказав программе выбирать ход с наибольшей вероятностью победы, я сделал её довольно дурной — даже такой плохой игрок как я (я очень хреново играю в крестики-нолики, шашки, шахматы, и прочие подобные вещи), её легко обыгрывал.
Программа должна выбирать не ход, который приводит к победе. А ход, который не приводит к поражению. Вот такая логическая загогулина. Ничего, завтра переделаю программу и попробую заново. Может быть, даже до нейросети — изначального места назначения — дело дойдёт.
Программы, которые играют в шахматы тоже работают таким же образом — через построение игрового дерева. Только полное игровое дерево для шахмат… эээ несколько больше, чем количество атомов в наблюдаемой вселенной, так что дерево строят только частичное, и определают перспективность той или иной ветви через минимакс.
Вообще, если есть возможность строить игровое дерево — лучше строить игровое дерево. Такие программы будут играть в игру лучше, чем нейросети (которые по сути только распознают паттерны и реагируют на них). Но игровое дерево строить возможно далеко не всегда. Скажем, Го не поддавалось, поэтому нормально играть компьютер в Го наконец-то научились именно, что через нейросети. Потому что игровое дерево для шахмат — 10E120 (число Шеннона), а игровое дерево для Го — 1.74E172! Но даже Го меркнет перед огроменным деревом крайне (на первый взгляд) простой игры Стратего, чей размер составляет 10E535!!! Неудивительно, что компьютер играет в Стратего крайне слабо. Может быть, именно что нейросети научатся. В лоб, через построение дерева — путь тупиковый.