73

Нейронные сети в геймдеве

Привет, пикабу. Сегодня я хотел бы вам рассказать о реализации небольшой нейросети для нашей игры и какую пользу или вред она нам принесла.



Сейчас мы пилим одну игру, в которой вы как в hearthstone/Gwent должны выкладывать существ с разными способностями и противостоять своему врагу. Это краткий экскурс по базовой механики игры, более я пока рассказывать не буду, т.к. тема пойдет не об этому. Так вот,одним пятничным вечером, а в дальнейшем и выходными, мне захотелось попробовать написать бота для нашей игры, т.к. все базовые версии игры мы тестировали в ПвП, а игра пока-что является исключительно ПвЕ. Ну рано или поздно мне бы пришлось это делать,но вместо заскриптованного ИИ, мне захотелось попробовать в роли оппонента самописную нейронную сетку.


Итак, с чего я начал. Я создал некое хранилище нейронов, у которого есть функции по записи/чтению нейронов. Каждый нейрон имеет запись действия и ценность/вес, кому как удобней.  Бот может обратиться к хранилищу, указать действие и получить его ценность, если оно было записано ранее, или 0 в случае, если такого еще не происходило. Далее я рассказал боту, что у него есть его мана, есть существа, у них есть способности, напр. убить вражеское существо, Т.е. буквально, как нового игрока, я провел бота по всем механикам игры, и рассказал что каждое действие означает. И немного помог ему с ориентированием в этом. Т.е. при начале хода бота, он анализирует свою руку, а точнее карточки в ней. Пробегаясь по каждой карточке, бот смотрит, может ли он ее сыграть, если да, то как и к чему это приведет. Подробнее это выглядит так - если бот может сыграть карту, то он создает действие "Разыграть X карту, за N маны, сейчас у меня M маны". У каждого действия есть своя ценность, т.е. при создании его бот смотрит своё хранилище, если там уже совершалось подобное действие, то его ценность присваевается только-что созданному. Далее, бот смотрит на таланты этой карты, если, допустим, у карты свойство "Убить цель", тогда бот просматривает варианты, кого он может убить, выбирает самое ценное убийство, опять же перебирая варианты через свое хранилище, и добавляет ценность убийства к стартовой цене текущего действия. На пример на 3 ход, у бота 3 маны, у него есть карта за 2 маны, со своими статами и эффектом убийства он видит действие, ценность которого равна 3("Разыграть эту карту, за 2 маны, когда у меня 3") + 6("Убить супер-мутанта") = 9. Далее это действие заносится в пул из которого, после всех расчетов, бот будет выбирать что же ему сделать.


Далее бот выбирает из всего списка самое лучшее действие, а в случае, если их несколько(Я добавил погрешность, чтобы бот не совершал постоянно "идеальные" ходы, а иногда и экспериментировал), то берет случайное из лучших(то действие, у которого ценность выше) и совершает его. И если после хода, осталась мана, то смотрит, может ли он сделать еще что нибудь(в действиях так же есть "ничего не делать", на что бот уже поставил свою ценность). В дальнейшем у меня храниться список всех действий и нейронов, задействованных в данной партии, и в зависимости от нанесенного урона врагу и исцеленного здоровья своему герою, ценность этих нейронов повышается на модификатор, в моем случае я поставил, что за 1 ед. нанесенного врагу или исцеленного себе урона повышает ценность всех сыгранных нейронов на 0.1, в то же время при получении урона или же позволению врагу себя лечить "вес" нейронов так же падает на 0.1 за 1 ед. В конце партии, если бот побеждает, он добавляет 10 ценности каждому нейрону, задействованному в этой партии или же отнимает 10, если проиграл.


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


По окончанию выходных я имел на руках противника для игры(которого мы решили немного все же заскриптовав, оставить в игре) и одну очень интересную стратегию, которую мы, !кожаные ублюдки!, даже не заметили(благодаря которой бот успешно выигрывал другого "себя" и меня), ну а так же бот "указал" на некоторые слабые места в балансе и геймплее.


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


Ну и в конце хотелось бы написать такие заметки, как бы для меня, но и для вас. Что бы я хотел улучшить? Сейчас бот просматривает каждую карту отдельно, потом разыгрывает лучшую и снова просматривает карты. Т.е. у бота отсутствует понимание механики "комбо-хода". На пример, у бота есть карта за 5 маны с ценностью в 50 и 3 карты за 1, 2, 2 маны и ценностями 15, 30, 20, соответственно, и бот конечно же сходит картой за 5, т.к. разовая ценность этого действия будет больше остальных. По сути, бот может прийти к решению на 5 маны разыграть комбинацию из карт, но дорога к этому решению займет на много больше времени и погрешности все же будут.  Ну и в целом его можно развивать и развивать, просто пока не ясно, сколько пользы это нам принесет и сколько времени будет затрачено.


Всем удачи!

Правила сообщества

ОБЩИЕ ПРАВИЛА:

- Уважайте чужой труд и используйте конструктивную критику

- Не занимайтесь саморекламой, пишите качественные и интересные посты

- Никакой политики


СТОИТ ПУБЛИКОВАТЬ:

- Посты о Вашей игре с историей её разработки и описанием полученного опыта

- Обучающие материалы, туториалы

- Интервью с опытными разработчиками

- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе

НЕ СТОИТ ПУБЛИКОВАТЬ:

- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры

- Посты, единственная цель которых - набор команды для разработки игры

- Посты, не относящиеся к тематике сообщества

Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.

ЗАПРЕЩЕНО:

- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции

- Выдавать чужой труд за свой

Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.


О РАЗМЕЩЕНИИ ССЫЛОК:

Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:

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

- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз

- Cсылка размещается в формате: "Страница игры в Steam: URL"

0
Автор поста оценил этот комментарий
можно сотворить нейронного бота, который расшифровывает врачебные каракули?
раскрыть ветку (1)
5
Автор поста оценил этот комментарий

Это однозначно интересная идея, но думаю легче создать сеть, которая сама диагнозы ставить будет и выписывать эти самые лекарства, что в принципе уже есть. Результатом сеанса будет распечатанные каракули с QR-кодом в углу листка, чтобы при показе в аптеке можно было просто считывать информацию :D

показать ответы
0
Автор поста оценил этот комментарий

На Сях игруля?

раскрыть ветку (1)
2
Автор поста оценил этот комментарий

Не понял вопроса. Но вот если бы этот вопрос звучал бы "на чем?", я бы ответил на Unity, а яп C# :D

показать ответы
4
Автор поста оценил этот комментарий

Можно больше технических подробностей?
В каком виде скармливал данные боту, например?

раскрыть ветку (1)
2
Автор поста оценил этот комментарий

Конечно, в ближайшее время постараюсь расписать подробней, как это реализовано.

показать ответы
2
Автор поста оценил этот комментарий
До-диез - не интересно) думал, Вы мл и нейронки на сях пишете) Было бы хардкорно
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

а, теперь понял :D Да чет студенческие годы прошли, где я пытался писать игры на скриптовых языках, типа AutoIT, тот еще хардкор, учитывая что окна внутриигровые, это были обычные виндовые. Сейчас как-то результат важен и скорость его "достигания" :D

PS я не сравниваю С со скриптовыми, я просто привел пример хардкора )

показать ответы
0
Автор поста оценил этот комментарий

мы все еще ждем 😁

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

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

https://pikabu.ru/story/podrobnyiy_razbor_neyroseti_dlya_nas...


И еще был пост, где я использовал данную "сеть" для тренировки игры в Tower Deffense - https://pikabu.ru/story/neyronnaya_set_teper_i_dlya_tower_de...

показать ответы
1
Автор поста оценил этот комментарий

Сейчас занимаюсь активно дата сайенсом, и ахуеваю от того, насколько решения через приложения, написанные на сях, быстрее нативного кода на том же питоне. Например: Sed, Awk, XARGS, башевые команды в юниксовом КЛИ... Отсюда и интересно, насколько профитнее было бы нативно на сях писать машин лёрнинг и нейронки.

Тем не менее, успехов Вам)

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Тут скорее от поставленной задачи зависит, я то сделал некое подобие нейросети, модифицировав по своему и мне вполне хватает шарповых скоростей. Шарп на короткой дистанции выигрывает, а вот на длинных всегда считалось что С по круче будет.

0
Автор поста оценил этот комментарий

Наверняка в игре есть комбинации, которые играются чаще остальных(человеком, в плане выгоды действия), надо чтобы бот их запоминал и реагировал.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

ну, пока что прям оп комбинаций нет, есть мелочные, которые бот, будучи в текущем состоянии понял.  На пример, у нас бой происходит в 3 линиях и у карты есть способность "убить противника напротив себя" и вот бот часто ставит сильно существо и прикрывает его слабым, меня это слегка удивило )

0
ОП Нибиру на Пкб
Автор поста оценил этот комментарий

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

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

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

0
Автор поста оценил этот комментарий

Тут проблема в том, что если ты делаешь нейросеть бота для ККИ, то ты или должен обладать большим количество тестеров, которые будут обучать бота, или полностью разбиратся в ньюансах ККИ.

Основываясь на указанной выше ситуации, можно еще такой вариантец, что есть карта существа, а есть всем нанести по 3 урона, при этом у существа меньше или равно 3 хп и есть абилка, что при смерти он наносит 3 урона случайному существу врага. У вот тут выбор сначала скастовать заклинание, а потом выложить существо, т.е. оставить существо на столе,или наоборот и наснести больше урона противнику, но при этом имеется возможность на ближайшие ходы остаться без существ вообще.

Да и вообще, как по мне, так ККИ в подобном плане намного сложнее современных стратегий и возможно даже логических игр, ибо вариативность действий и их последовательностей зашкаливает.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

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

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

показать ответы
0
Автор поста оценил этот комментарий

ну это звучит оочень простенько, хотя, думаю стоит посмотреть)

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

Вообще интересно, насколько реально одну нейросеть обучить так, чтобы получились разные характеры, есть ли примеры. Те же идеи можно было бы применить в глобальных играх.

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

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

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

показать ответы
3
Автор поста оценил этот комментарий

Когда уже для npc в играх с открытым миром начнут применять нейросети))

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Есть мод к Skyrim, где npc думают используя вроде бы нейросеть. Т.е. один NPC может перестать разговаривать с игроком, если тот заведет положительные отношения с врагом этого NPC, ну и так далее.

показать ответы
0
Автор поста оценил этот комментарий

Такая уже есть. IBM watson называется.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Да, я же написал, что такое уже есть, просто название не помнил.

показать ответы
3
Автор поста оценил этот комментарий

Довольно странно.

По логике он должен смотреть все комбинации с учётом имеющихся карт, а не с одной карты.

К примеру будет карта урон 3 всем существам (включая своих), и ещё на руке карта существа. Допустим, что выложить существо ценнее, чем разыграть карту урона. Тогда он выложит существо, а потом к примеру разыграет карту урона и ударит своё существо, а мог бы начать с карты урона и т.д.

Тут много вариантов, но по логике бот должен смотреть все.

Для упрощения надо разделять карты на типы: существо, способность и т.д.

Для карт поздней игры надо искусственно снижать стоимость эффективности действия.

К примеру превращение любого существа в овцу с 1 ХП будет куда лучше на позднем этапе, а если слить на старте, то это будет не очень хорошо.

раскрыть ветку (1)
Автор поста оценил этот комментарий

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

показать ответы

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества