Алексей Патрашов
и объекты начинают взаимодействовать по имеющимся функциям взаимодействия (поздороваться, поругаться, обозвать, похвалить и так далее).
из всей задачи меня интересуют именно эти функции.
Набор стаканов
Так все-таки обсуждается душа или величина ИИ? Для того чтобы быть мобом с душой вовсе необязательно быть "умным" мобом. Главное - добавить им алгоритм "душевных терзаний", чтоб повинуясь воле чувств мобы и совершали свои поступки.
согласен. Только где найти такой алгоритм? Пока что нашел только: http://ru.wikipedia.org/wiki/Формальные_модели_эмоций Но этого недостаточно.
Алексей Патрашов
в той книге, что вы написали (тут её пдф бесплатно: http://f3.tiera.ru/2/G_Economics/GV_Behavioral/Naldi%20G.,%20et%20al.%20(eds.)%20Mathematical%20modeling%20of%20collective%20behavior%20in%20socio-economic%20and%20life%20sciences%20(Birkhauser,%202010)(ISBN%20081764945X)(O)(446s)_GV_.pdf ) нет ни слова про мушкетеров. Может я ошибаюсь, но неплохо было бы пожалеть людей и написать страницу хотя бы.
Ryhor1, если мобы будут слишком похожи на человека, то сам человек будет воспринимать их негативно. Тут главное не пересечь эту границу.
Если возьмешься, буду следить. С удовольствием посмотрю что получится.
Попалась ценная ссылка, но не помню, по какой теме http://www.mathpages.com/home/kmath124/kmath124.htm
Ryhor1
> Может я ошибаюсь, но неплохо было бы пожалеть людей и написать страницу хотя бы.
Что же Вы творите! Это же почти профессиональный сленг вроде винда, кресты, линух, дельфины, жаба, люстра и прочие. Только используется в нескольких десятках ВУЗов на кафедрах, моя тётка филологом была. Задачка то может и есть, но гугл её задвигает на 10000+ место и попробуй найди. Хорошо, если кто в журнал типа такого http://unesdoc.unesco.org/images/0001/000186/018699eo.pdf тиснет и то большая удача. Я и ту диссертацию нашёл с большим трудом, а мушкетёров искать в книгах тех не надо, там есть строгие названия, просто мушкетёров понятно и легко запомнить, а "Моделирование взаимодействия и формирования устойчивых связей в просторной среде проживания с ограниченным по времени периодом..." и так далее или "Моделирование формирования личности под воздействием внешних социологических факторов на основе периодического взаимодействия в..." Это умереть можно, пока запомнишь.
Ryhor1
> из всей задачи меня интересуют именно эти функции.
Это самое интересное. Если упростить, то имеется матрица перевода вектора состояния в такой же вектор действия через умножение. Выглядит примерно так, если вычислять шансы, а потом по ним вероятности.
настроение поздороваться |a11 a12 a13 a14 a15| сытость промолчать = |a21 a22 a23 a24 a25| cross богатство послать |a31 a32 a33 a34 a35| отношение усталость
Пример очень упрощённый и взят для наглядности. Тут даже характеристики второго объекта не учтены. И вот встречаются два объекта и каждый производит действие с вероятностью в соответствии с полученными шансами. Голодный, злой и без денег встретил первого встречного и с большой вероятностью его послал. Для другой матрицы возможен вариант надменного поведения, когда идёт весь такой с полными карманами денег и посылает всех, кто его беднее. Даже на таком простейшем уровне уже можно моделировать поведение системы, например в тему зашёл тролль и всех разозлил, после чего все начали кидаться друг на друга. Эти матрицы конкурируют с нейронными сетями, хорошо изучены и описаны. Главный минус это прожорливость по ресурсам в отличие от сетей (но сети знает Alprog), но не для современных компьютеров. Пятьдесят лет назад такие задачи могли решать полторы машины в мире и одна стояла в Пентагоне. Сейчас требуемые вычислительные мощности на все эти матричные вычисления в тех задачах выглядят смешно. Так объект после взаимодействия с 10000 другими запомнит 10000 ячеек своей памяти, а таких объектов 10000 и в итоге минимум 100 мегов памяти улетели. Много лет такие цифры губили все задачи этой области, но сейчас все ограничения давно пройдены.
Алексей Патрашов
спасибо, за конкретные советы, но прогноз состояния системы и вероятностные оценки действия не так уж и нужны. Главное научить бота "чувствовать" )))
Матрица выглядит очень интересно. Я думал сделать немного по-другому. Хотя сейчас думаю, что этого бы не хватало. Т.е. как я понимаю, есть вектор состояния (настроение, сытость, богатство, отношение, усталость). Он умножается на эту матрицу. Получается вектор из трёх элементов, где наибольший соответствует большей вероятности выбора этого действия. Например, второй элемент самый большой, тогда бот промолчит.
Я правильно понял?
Ryhor1
> Я правильно понял?
Да, причём зависимость может быть нелинейной, то есть некая функция может обрабатывать каждый элемент вектора результата и достаточно сильно его ограничивать. Обычно это функции atan, tanh, sign(x)*sqrt(sign(x)*x), sign(x+1)*ln(sign(x+1)*(x+1)) и многие прочие. Дальше уже происходит случайный выбор по отрезку. Для взаимоисключающих действий требуется ещё и дополнительное нормирование. Для большей понятности пример множественного действия.
поздороваться 183 100,0% 27,2% рассказать новость 85 98,6% 26,9% похвалить = 19 => {P=1/(1+exp(-x/80))} => 72,1% => 19,7% обругать -59 5,0% 1,4% покритиковать 47 91,3% 24,9%
То есть бот обязательно поздоровается почти наверняка расскажет новости, весьма вероятно, что похвалит, почти обязательно покритикует и маловероятно, что ещё и обругает. Это вариант для исполнения сразу множества действий при встрече. Если действие требуется только одно, то надо произвести перерасчёт, например через деление каждой вероятности на их сумму, как это сделано в последнем столбце.
Бот может самообучаться после взаимодействия с другими ботами. например побитый за грубость бот может резко снизить значения в строках грубости или критики, а также повысить значения строк положительных реакций. Соответственно боту можно приделать и внешние проявления через простейшие генераторы предложений наподобие http://s00.yaplakal.com/pics/pics_original/5/0/0/321005.jpg или другие.
Алексей Патрашов
Это очень круто. Мне кажется, что ещё немного додумать систему и можно будет браться за программирование.
Ryhor1, дерзай, очень интересно. :)
MixeYa
Спасибо за поддержку.
Я вот немного подумал над проблемой. Матрица Патрашева - это как удобная реализация линейной функции с множеством переменных. Нормировать результирующий вектор и находить действие в соответствии с её вероятностью думаю не так важно. Лучше просто выбирать действие с наибольшим значением соответствующего элемента. Игрок вряд ли заметит подмену ))) Зато намного меньше вычислений.
Далее, по поводу вектора состояния для матрицы Патрашева. Состояния которые использовались в примере (см. сообщение #33) не имеют никакой последовательности. Не хочется делать много элементов состояния, т.к. сложно будет выставлять коэффициенты для каждой пары действия и состояния. С другой стороны, чтобы полностью моб действовал разумно надо всё же учитывать их все. Поэтому, для упрощения, я решил немного разделить различные элементы состояния. В первую очередь все элементы состояния можно поделить на те, что влияют на принятие активных действий и на те, что влияют на пассивные действия. К первым относятся различные потребности (вспоминается пирамида Маслоу...). Тут уже всё понятно.
Во второй группе имеется три элемента состояния: характер , оценка и настроение.
Особенностью элементов вектора характера является то, что они практически никогда не меняются. Можно вообще не учитывать это изменение или ввести особые ситуации, при которых может поменяться характер моба, чтобы игрок видел какое-то саморазвитие персонажа.
Элементы вектора оценок меняются в случае решения сделать это самим мобом. Т.е. этот вектор должен передавать воспитание ИИ, его культуру.
Настроение, может быть хорошим или плохим. Различия лишь в степени "хорошести" и "плохости". Реализация такая: имеется вектор элементов выбора того или иного действия в зависимости от настроения. Т.е. если действие будет выполнено скорее с хорошим настроением, то коэффициент положителен, если с похим - отрицателен. Этот вектор одинаков для всех мобов. Далее имеется показатель настроения. Это всего лишь одно число, которое может быть положительным (хорошее настроение) и отрицательным(плохое настроение). Он умножается на вектор. Положительным элементы вектора будут больше при хорошем настроении, отрицательные элементы будут больше при плохом настроении(минус на минус дает плюс).
Также думаю отдельно ввести данные формальных отношений. Т.е. чтобы передать связи между мобами (отец-сын, кузнец-подмастерье, господин-раб и т.д.) и отношение к предметам (собственность и всё такое) и другие отношения.
Итак, как это будет работать? Попробую представить какой-нибудь пример...
У нас есть купец. У него есть какой-то набор потребностей: поесть, поспать и заработать побольше денег. И сценарии как эти потребности удовлетворить: в случае еды, взять еду и съесть, если нет еды, то пойти купить. В случае денег: заняться купеческой деятельностью )) (см. пост #21). Если его кто-нибудь обидит, то у него может появится новая потребность - отомстить обидчику. Надеюсь, смысл ясен. Реализация очень простая: каждая потребность имеет какое-то количество баллов и моб пытается реализовать ту потребность, которая имеет наибольшее количество баллов. В случае физических потребностей (поесть, поспать), количество их баллов увеличивается в зависимости от времени. Например в 10:00 резко увеличивается потребность во сне. В случае удовлетворения потребности, количество баллов уменьшается.
Далее, этот купец реагирует на различные события. В первую очередь проверяются формальные отношения. Например наш купец встречает своего друга, тоже купца. Тут разработчик задает возможные действия при таких формальных отношениях: расспросить про последние новости на рынке, рассказать про свои удачи, поругаться, просто поболтать и т.д.
А на выбор решений влияют уже характер, оценка и настроение.
Ой, написал я много... Ладно, говорите, что не так.
Охх... Я, конечно, знал, что я сижу на дне, но чтоб настолько... Это я про свои знания в области геймдиза. Почти нифига не понял. Ну да не важно.
Ryhor1
Все хорошо, но на деле мы получим те самые заученные мобами фразы/действия, а этого не хотелось бы. Либо надо расширять спектр действий/фраз купца, либо одно из двух.
Реализация идеи топика имхо неплоха в линейке The Sims, думается мне, что разрабатываемым здесь методом или очень на него похожим можно добиться схожего и столь желанного нами результата.
Кстати, фактор "души" будет присутствовать в мобе, если он начнет обсуждать какие-то события, на которые повлиял игрок. Причем не сюжетные события. Ну, и сюжетные можно, но не сюжетные в нашем случае обязательны.
Как я понимаю это: игровой мир так и так статичен (если делать его динамичным, может получиться история, описанная в посте #18), а в основном все изменения происходят из-за деятельности игрока. И ты, допустим, вне сюжета пошел и грабанул деревню, как результат - прошел слушок и НПС начали на тебя коситься подозрительно. Потопал, нашел где-то дракона, завалил - люди здороваются, улыбаются, благодарны. И тот самый наш любимый купец в разговорах с коллегой тебя упоминает. Ну что-то такое.
atAdept
Все хорошо, но на деле мы получим те самые заученные мобами фразы/действия, а этого не хотелось бы.
Это будет набор различных действий, а на выбор того, какие действия предпринять, уже будут влиять формальные отношения, потребности, настроение, характер и оценки. Думаю таким образом можно реализовать почти все тонкости человеческого поведения.
Либо надо расширять спектр действий/фраз купца, либо одно из двух.
да, чем больше будет возможных действий, тем разнообразнее станет игровой мир.
Реализация идеи топика имхо неплоха в линейке The Sims, думается мне, что разрабатываемым здесь методом или очень на него похожим можно добиться схожего и столь желанного нами результата.
ИМХО, симы уж больно кукольны и примитивны.
Как я понимаю это: игровой мир так и так статичен (если делать его динамичным, может получиться история, описанная в посте #18)
ничего плохого в этой истории не вижу. Власти добился тот моб, который оказался к этому больше приспособлен.
И ты, допустим, вне сюжета пошел и грабанул деревню, как результат - прошел слушок и НПС начали на тебя коситься подозрительно. Потопал, нашел где-то дракона, завалил - люди здороваются, улыбаются, благодарны. И тот самый наш любимый купец в разговорах с коллегой тебя упоминает. Ну что-то такое.
Это почти во всех рпг есть.
Ryhor1
> ИМХО, симы уж больно кукольны и примитивны.
Ну, я имел ввиду именно и только реализацию свободы воли персонажа
> ничего плохого в этой истории не вижу. Власти добился тот моб, который оказался
> к этому больше приспособлен.
А вот здесь я с вами буду в корне не согласен, если это приведет к доминированию одного вида над другим, особенно над игроком. Всего в меру, как говорится. Но, думаю, до этого не дойдет.
> Это будет набор различных действий, а на выбор того, какие действия
> предпринять, уже будут влиять формальные отношения, потребности, настроение,
> характер и оценки
То есть грубо говоря результат будет зависеть от количества и сложности переменных, коих будет столь много, сколь широк взор разработчика. Тогда
> Думаю таким образом можно реализовать почти все тонкости человеческого
> поведения.
я с вами соглашусь.
Хотя все равно как-то все кажется не так, как ожидается. Наверное, надо увидеть что из этого получится, там будет видно.
Ryhor1
> Нормировать результирующий вектор и находить действие в соответствии с её вероятностью думаю не так важно. Лучше просто выбирать действие с наибольшим значением соответствующего элемента. Игрок вряд ли заметит подмену ))) Зато намного меньше вычислений.
Большие матрицы плохо живут без преобразующих функций для результатов. некоторые результаты вызываются очень многими исходными, поэтому часто могут глушить всех соседей. Вообще полученный вектор показывает только порядок вероятностей. То есть если Am > An, то Pm > Pn, а всё остальное надо уже рассматривать и обрабатывать функцией.
Сейчас уже все крупные проекты потихоньку переходят не на индивидуальные черты мобов а на случайные ивенты. Рандомные события, на которые вы можете натолкнутся по пути. К примеру TES Online, Black Desеrt.
Бегло ознакомился с темой, и в некоторых постах заметил, на сколько близки авторы к сути решения задачи «Живого Мира». Хоть и каждый видит свой элемент мозаики, но все же безошибочно:
Kaper
> Как заставить игрока относиться к мобам не только как к источнику экспы и
> ресурсов?
Можешь не поверить, но по этому вопросу тут работали основательно уже как 4-5 лет назад:)
skypo
> скайрим тоже ничего. ИИ им дать, так они все разбегутся, фиг квест пройдешь.
> кстати, это основная причина почему его не делают
Взгляни на проблему шире: "почему квест нужно проходить только тебе (твоему персонажу)?"
Kaper
> Просто надо предусмотреть развитие сюжета при провале квеста и дело в шляпе.
Хорошое решение для сингла, но для ММО его будет явно недостаточно.
Посмотрите как с этой задачей хитро выкрутился Д-Принс в своем концепте "Фантарг" (у меня есть предположение, что изначальный посыл у него там был в сторону сюжета как раз, и копал он в ту же сторону)
ryzed
> Если делать умных мобов с социализацией и прочими плюхами, тогда игрока уже на
> старте нахлобучит банда гопоты в 100500 убермонстров вооруженных лучшими
> игровыми шмотками.
А что мешает по результатам беты настроить константы AI?
К тому же ГМ-а еще никто не отменял (для настройки того же AI, в ходе жизненного цикла ММО)
Ryhor1
> Квесты в игровой индустрии сейчас никак не развиваются, скорее даже
> деградируют. Как не было никакой свободы, так и нет. Очень хорошо, если есть
> выбор больше чем из двух вариантов. Лично я против таких скриптанутых квестов.
Полностью согласен - в 90% существующих MMORPG квестоввые составляющие, кроме как извращениями никак не назовешь. Недавно проработал свой вариант (концепцию) квестовой составляющей, ознакомиться можно ТУТ.
Ryhor1
> Надеюсь, что нам удастся придумать такой ИИ, который смог бы сам генерировать
> приключения, историю, эмоции. И каждый поход в такой мир был бы немного
> уникальным. Пока я не знаю как это сделать. Но, надеюсь, что это возможно.
Считаю что ненужно этого делать, будет только лишняя нагрузка на AI (т. е. на программно-вычислительные ресурсы), который в нашем случае будет далеко не примитивным. Как альтернативный вариант: создание обширной базы квестов "на все случаи жизни", с постепенным открытием их персонажими (не только игровыми!), а так же создать что-то в виде динамической доступность для квестов (как по выполнению, тоак и по выдаче).
Набор стаканов
> Так все-таки обсуждается душа или величина ИИ?
Наверное, ключевой вопрос за всю историю данной темы:)
Ответ, для вас друзья, будет несколько неожиданным.
Применительно, к отдельновзятому мобу (как к активному объекту) - без сомнений это AI.
Но вот если взглянуть на данное "явление", предмет обсуждения данной темы, как на некий социум всех мобов в игре (как на систему взаимодействий) - то тогда все становится на места:) Вот вам ключевые понятия: "иерархия", "моральные нормы", "расовые обычия".
Алексей Патрашов
> Ryhor1
> > из всей задачи меня интересуют именно эти функции.
> Это самое интересное. Если упростить, то имеется матрица перевода вектора
> состояния в такой же вектор действия через умножение.
Самое интересное тут, это то, что будет определять эту матрицу перевода вектора состояния;)
Алексей Патрашов
> Да, причём зависимость может быть нелинейной, то есть некая функция может
> обрабатывать каждый элемент вектора результата и достаточно сильно его
> ограничивать. Обычно это функции atan, tanh, sign(x)*sqrt(sign(x)*x),
> sign(x+1)*ln(sign(x+1)*(x+1)) и многие прочие. Дальше уже происходит случайный
> выбор по отрезку. Для взаимоисключающих действий требуется ещё и дополнительное
> нормирование.
Тут я что-то не понял: в случае, если элементы матрицы в посте #33 будут функциями (например, от векторов действий и векторов состояний) от N предыдущих состояний, какой смысл тогда вводить эту доп. зависимость?
Не буду останавливаться на комментариях к вышеизложенным постам, а перейду сразу к концепции, в том виде, в котором ее вижу я.
ПРОДОЛЖЕНИЕ В СЛЕДУЮЩЕМ ПОСТЕ...
Тема в архиве.