Войти
Уголок творчестваСтатьиrigidLight Engine

Теория новой системы ИИ для rlEngine

Автор:

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

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

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

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

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

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

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

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

11 июля 2012

Комментарии [1]