Как можно выразить потребности персонажа (NPC) в числовом виде, учитывая его требования и имеющийся инвентарь?

Каким образом можно разработать подход/логику/алгоритм для оптимизации заработка и ухода за NPC в мире, где NPC нужно поддерживать уровень еды и воды, а также работать для заработка денег? Может быть уже существует методика для оценки потребностей в числовом выражении для каждой из этих потребностей, которая позволила бы определять приоритеты задач, такие как продолжение работы, поход к торговцу и покупка продуктов в зависимости от уровня этих потребностей. Как можно подойти к этой задаче?
  • 11 января 2024 г. 5:49
Ответы на вопрос 3
Для выражения потребностей персонажей в числовом виде можно использовать систему ресурсов и интервалов времени. Примером может послужить следующий подход:

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

2. Установить начальные уровни и максимальные значения для каждого ресурса (например, голод и жажда могут иметь максимум 100 единиц).

3. Определить скорости расхода данных ресурсов в зависимости от различных факторов (например, голод может увеличиваться на 1 единицу каждые 10 минут игрового времени).

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

5. Установить эффекты предметов инвентаря на потребности NPC (например, 1 единица еды уменьшает голод на 20 единиц).

Теперь перейдем к разработке алгоритма для оптимизации заработка и ухода за NPC:

### Моделирование потребностей и обновление статуса NPC

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

### Определение приоритетов

- Создать систему приоритетов для действий NPC, которая будет зависеть от текущего уровня потребностей.
- Оценить критичность состояния (например, если уровень голода выше 80 и у рядом нет еды, то приоритет на поиск или покупку еды будет самым высоким).

### Оптимизация заработка и ухода

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

### Алгоритмическое решение

1. Создайте функции для оценки каждой потребности и присвойте ей числовое значение удовлетворения.
2. Определите функции для воздействия инвентарных предметов на потребности.
3. Создайте функцию обновления состояния NPC, которая будет вызываться в определенные моменты времени.
4. Реализуйте систему принятия решений, которая будет выбирать оптимальные действия на основе текущих потребностей и
Работать, потребляя еду и воду, пока запаса сытости не останется только на поход к торговцу и обратно. 
Сходить к торговцу, закупить на все деньги еду.
Вернуться, начать всё сначала.
В общем случае это задача комбинаторики, по простому оптимальный вариант можно найти перебором (что само собой не оптимально по затратам процессора/памяти). 

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

Почти наверняка это будет функция с какими то граничными условиями и коэффициентами... твоя задача подобрать эти значения таким образом чтобы например максимизировать время его жизни (или у тебя там другие целевые критерии). Обычно пишут оценочную функцию, так же на основе состояния, которую и максимизируют. Например собирай оценку счастья NPC на основе событий в его жизни, как часто испытывает сытость, как долго живет, с каким количеством других сущностей он контактировал, умножаешь каждый параметр на коэффициент, складываешь и полученную функцию максимизируешь. Есть алгоритмы многомерной (по многим параметрам) оптимизации минимизации (если тебе нужно максимизировать f(x) а алгоритм умеет только минимизировать, то работай с 1/(f(x)+1)). Эти алгоритмы хороши если параметров мало и функция имеет мало ловушек (локальных минимумов).

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

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