Как стать автором
Обновить

Нейросетевой интеллект для NPC: Крафтовый интеллект

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров2.9K
Всего голосов 6: ↑6 и ↓0+6
Комментарии12

Комментарии 12

Есть уже разработка симов в симсе которые живут с помощью нейросетей. И ответы npc в скайриме сделали тоже нейросетевыми через мод. Скоро обычный npc будет интереснее чем живой человек.
Как личное исследование выглядит прикольно.

И ответы npc в скайриме сделали тоже нейросетевыми через мод

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

Второе, все эти языковые модели очень большие и ладно, если игра локальная, всё ляжет на плечи пользователя - купить там видяшку помощнее и т.д. А мне надо обрабатывать сотни NPC и чтобы работало даже на простеньком провайдерском железе, без аренды фермы GPU. Поэтому нейроночки у меня маленькие и узкоспециализированные...

Как личное исследование выглядит прикольно.

Спасибо!

Вроде есть специальные, но можно просить и обычных чатботов "напиши мне простенькую сверточную сеть для классификации изображений". Они накидают архитектуру из пары сверток, пулингов и полносвязки, которая на МНИСТе даст 90 и выше % точности

В некоторых, типа cloude sonnet запрет стоит на создание кода для нейросетей. Но я все же имел в виду специализированные нейросети, что созданы для генерации нейросетей.

Мне кажется, что для игр с интеллектуальным npc такой генератор будет необходим.

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

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

Но у него есть "потребности". Например, чтобы делать такие кинжалы, нужны деньги и ресурсы (железо, минералы и т.п.).

Поэтому, если придти к такому кузнецу и попросить у него меч - он откажется (или попросит позже придти), если у него все ресурсы есть. Или согласится, если у него нет ресурсов/денег.

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

Получается не очень сложная нейронка (я диалоги не учитываю).

И генератор нейронок тут нужен, чтобы создавать "характеры" для разных npc при создании персонажей/объектов. Чтобы для монстра одну нейронку создать, для кузнеца или швеи другую.

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

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

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

Причем почти все нейронки тут получаются достаточно простыми. Но мир получится живым. За счет эмерджентности.

Самое сложное - это генератор нейронок создать (или библиотеку из простых предобученных нейронок создать для этого генератора)

Спасибо за развернутый комментарий.

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

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

Полагаю, для этого у npc должен быть определенный "характер" и потребности. Характер - это предобученная нейронка.

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

Тут даже цена у задания может быть в итоге плавающей

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

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

Вот этого точно не надо, всё должно регулироваться само. Если оружия много - то его просто никто не будет покупать и оно обесценится. Будут переделывать на кирки. Или наоборот, если дефицит - цены взлетают.

Вот этого точно не надо, всё должно регулироваться само.

В рыночной экономике нет нормального саморегулирования. Даже в самых развитых капиталистических странах есть сильное регулирование. Этим занимается государство. Министерства медицины, промышленности, образования и т.д.

Без регулирования игроки вам сломают баланс.

Да и в целом, вам и игрокам может не понравится результат этого саморегулирования. В природе целые виды вымирают, в результате такого саморегулирования. Аналогично в игре могут исчезнуть, например, воины с топорами. Будут только с мечами.

Думаю, что "характер" - это скорее эмбеддинг, не зачем для этого какую-то отдельную нейронку.

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

но регуляторы не даны нам свыше, они тоже естественным образом появились.

у монстров одного вида своя

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

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

Я, возможно, невнимательно читал, но хотелось бы видеть, что вызов сетки - действительно вычислительно дешевле, чем явный алгоритм.

Кроме того,

Как вам? Хотите написать алгоритм под такую задачу?

Писать самому - глупо. Кроме того, оно вообще делается не совсем так так.

Тут 24 узла. Определение чего и сколько нужно делать (сейчас уже точно не помню) - сводится к нахождению оптимума системы линейных уравнений из тех же 24 переменных. Для чего готовых библиотек, оптимизированных почти до максимума - небольшая кучка.

действительно вычислительно дешевле

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

нахождению оптимума

оптимум чего?

Тут 24 узла .... тех же 24 переменных

не уверен, что стоит за переменную брать узел

Писать самому - глупо. Кроме того, оно вообще делается не совсем так так.

Вот, например, поведенческие деревья - https://habr.com/ru/articles/774506/. Прямо редактор, где создается граф из условий и действий. Раз есть редактор, то очевидно это вручную вводится пользователем. Там, правда, пример из разряда "если видишь врага - стреляй", но если ту методологию перенести на эту задачу придется писать что-то вроде "проверь есть ли у тебя древесина", "проверь, есть ли у тебя наконечник копья", если нет, то "сделай его". Если не из чего делать - пойди пособирай что на полу.

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

оптимум чего?

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

А так - можно оптимизировать количество шагов крафта, стоимость использованный материалов (если оно в игре есть), количество (разнообразие) использованных материалов, время (что не то же, что количество шагов) производства.

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

тут нет задачи планирования производства, схема лишь указывает какие предметы из каких могут быть получены. Делать их или не делать зависит от текущих возможностей и желаний. Может какой-то компонет вообще быть недоступным. НПС должен отталкиваться от текущей ситуации. И здесь важно быстро сказать: "что можно сделать". А потом на это наложить условие "что хотим сделать". И первая часть, действительно, быстро находится, если взять удачные эмбеддинги

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации