PavelZ
Сен. 25, 2008 08:13:45
Нужен ли свой собственный ИИ каждому персонажу?
Для каждого компьютерного персонажа отдельно будет генерироваться маска, накладываемая на общую базу знаний, этим будет имитироваться индивидуальность. В тоже время опыт каждого персонажа будет храниться в общей базе UEF.
К примеру фермеру прожившему всю жизнь на не большой ферме много ли надо? Он может чисто профессионально хорошо разбираться в биологии и механике, но врядли что ему может быть известно об морской навигации. В тоже время удастся ему вывести новую породу скота или придумать более эффективный способ собирания апельсинов, глядишь через некоторое время это уже станет известно многим его коллегам.
Каждое последующее поколение компьютерных персонажей за счёт накопления знаний (и удачных решений типичных задач) будет намного более продвинутые, благодаря взаимодействию между собой, персонажами игроков и другими объектами виртуальной вселенной.
Обычный последовательный алгоритм сравнивающий текущую задачу с базой задач и решений по принципу похожести, с использованием весовых коэффициентов плюс рэндом, когда есть решения с близкими коэффициентами. С последующей коррекцией этих коэффициентов в базе по результату.
Если весомого решения нет, производится случайное действие, а результат оценивается, с созданием новых записей в базе, далее анализ начинается с начала.
Пишутся программные модули управления персонажем на трёх уровнях.
Низший уровень – действие, возможно лучше будет реализовать по принципу конечного автомата, к примеру двигаясь из одной точки в другую персонаж натыкается на пассивные не чем не примечательные преграды, обходит валуны и деревья спускается в низину, поднимается на холм. По аналогии с человеком элементы действия выбираются автоматически на уровне спинного мозга.
Основной уровень – занятие, как раз то что описано выше. Анализируются имеющиеся цели, формируются списки задач на основании этих целей (возможно наиболее алгоритмически сложный модуль) и на основе задач выбираются решения представляющие список конкретных действий.
Высший уровень – формирование целей на основе глобальных целей жизнедеятельности, предпочитаемых методов их достижения, психологических особенностей персонажа, его профессиональных навыков и знаний, с учётом известности и богатства, в зависимости от результатов множества неизбежных контактов с другими персонажами.
Соответственно в зависимости от нагрузки на аппаратную часть, один модуль определённого уровня может последовательно обслуживать несколько персонажей.
shiza
Сен. 25, 2008 21:07:25
PavelZ
Сен. 29, 2008 06:47:48
shiza
Как насчет эволюционнных алгоритмов?
На самом деле схожесть с генетическими алгоритмами в моей идее есть.
Суть в том, что сами по себе названия генетический алгоритм или нейронная сеть – в них больше популизма, чем реального смысла.
К примеру по настоящему с имитировать нейронную сеть можно только на основе комплекса аппаратных и программных средств.
По этому разбрасываться громкими фразами, не вникнув глубоко в суть которую предполагают авторы думаю не стоит.
ZAN
Сен. 29, 2008 11:02:12
Суть в том, что сами по себе названия генетический алгоритм или нейронная сеть – в них больше популизма, чем реального смысла.
Генетический алогоритм - это никакой не популизм. Это очень мощная штука для нахождения экстремумов функций. В физике применяется постоянно. Как правило, для оптимизации параметров системы (особенно в случаях, когда система зависит от их большого числа).
shiza
Сен. 29, 2008 11:41:14
PavelZ ИМХО. Это вы зря так думаете. =)
Но в данном случае я совсем не про нейросетку.
Вот эта фраза:
PavelZ
Каждое последующее поколение компьютерных персонажей за счёт накопления знаний (и удачных решений типичных задач) будет намного более продвинутые, благодаря взаимодействию между собой, персонажами игроков и другими объектами виртуальной вселенной.
прям очень похожа на фразу из статьи по генетическим алоритмам из Журнала Программист за 199x лохматый год (тока там все на паскале было).
PavelZ
Окт. 2, 2008 03:24:08
Честно говоря мне просто не нравится когда в названиях алгоритмов используют биологические термины, как бы подчёркивая заимствование из живой природы, а с другой с претензией на оптимальность мол лучше чем сделала природа всё равно не получится.
Если пользоваться подобной терминологией, то конечный автомат надо называть условным рефлексом.
Статей и лохматых и неоперившихся (тоже биологические термины, блин) сам перечитал не мало, возможно некоторые мои мысли перекликаются с их авторами.
По эволюционным алгоритмам есть работы ещё с 70х годов прошлого столетия.
Суть то в другом, не важно какие алгоритмы (по названию) будут использоваться и на чём будет написан код, хоть на “Ассемблере”, хоть на “Норме”, главное сделать некий полигон, где их можно было проверять.
shiza
Окт. 2, 2008 03:52:18
другого названия не знаю, чтоб всем было понтяно о чем речь. приходится пользоваться общепринятыми.
Вообще не представляю как можно выразить настолько общее взаимодействие объектов и среды.
PavelZ
Окт. 2, 2008 05:16:23
Так и назвать виртуальная вселенная :)
Пишутся на Питоне (можно и С/С++) модули трёх уровней, для каждого персонажа запускается по своему комплекту. При чём в процессе работы в ОЗУ сервера на каждый комплект создаётся кэш запросов-ответов к базе, для ускорения работы. Какой-то модуль должен периодически либо чистить кэш, либо проверять актуальность данных там, первое будет тормозить персонаж, второе прийдётся выделять много ресурсов этому модулю. Соответственно больной вопрос сколько памяти выделить под кэш, на VDS её почти нет.
Что касается выше перечисленной троицы, сделать несколько вариантов таких программ ввести в систему какой-то механизм контроля работы разных версий модулей. К примеру пишется модуль с минимальной функциональностью, потом другой посложнее, далее для вновь появившихся в виртуальной вселенной персонажей используется новая версия и их работа сравнивается, на вопрос устойчивости, быстродействия программы и прогресса самого персонажа. (Далее прямой аналог с генетическими алгоритмами.) Сделать бы ещё механизм генерации таких программ из более простых блоков, с возможностью их варьировать между собой. Но это скорее всего в ближайшее время не мне ни кому другому вряд ли удастся.
shiza
Окт. 2, 2008 05:20:34
Я имел ввиду, как по другому называть генетические алгоритмы и прочее.
Технические подробности - ладно.
Мне пока не ясно, как можно запрограммировать взаимодействие объектов, сотней разных способов.
PavelZ
Окт. 2, 2008 06:57:50
Если попытаться описать взаимодействие по методу конечного автомата для всевозможных случаев, то это просто не реально.
А так есть к примеру набор базовых действий, в ответ на агресию: драться, бежать, вырываться и звать на помощь – они описываются простыми алгоритмами.
Возможные правила поведения, для всевозможных объектов записываются в базе данных, если рецепта не найдено используется рэндом, а результаты сравниваются с базой если результат совпал с предыдущим его вес увеличивается. Если решения такого не было, оно создаётся заново.