Эффективные методы для симуляции жизни

Прочитав довольно много статей об искусственной жизни (предмет, который я нахожу очень интересным) вместе с несколькими вопросами прямо здесь, на SO, я начал играть с идеей создания (Очень, очень, очень) простого симулятора. Даже графика не требуется. Если я пропустил вопрос, пожалуйста, не стесняйтесь указать мне.

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

Мой первый вопрос касается ассоциаций. Что SO рекомендует как эффективный способ справиться с такими вещами? Я думал о мультикарте, с относительно простой настройкой ключа: что он хочет (еда, еда, отдых и так далее), а другой (извините, мой разум потерял сознание) - это то, что он связывает с этой потребностью.

Например, скажем, у нас есть холодильник. В холодильнике есть еда (просто базовый базовый объект). Первоначально человек не связывает холодильник с едой, но он связывает еду с голодом. Поэтому, когда его голод растет, он начинает произвольно искать еду. Если в пределах досягаемости нет еды, она "использует" предметы, чтобы найти еду. Поскольку у него нет известных ассоциаций с едой, он использует вещи волей-неволей (вероятно, ищет ближайший объект и расширяется). Как только он использует / открывает холодильник, он видит еду, устанавливая связь (читай: вставляя пару "еда, холодильник"), что холодильник содержит еду.

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

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

В любом случае, любые комментарии приветствуются.

4 ответа

Решение

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

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

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

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

Выше приведен лишь набросок, но, возможно, он может дать вам несколько интересных идей для игры. Повеселись!;-)

Некоторое время назад я слышал подкаст с разработчиком The Noble Ape Simulation, который может быть вам интересен - концептуально и, возможно, кодуально, поскольку вы можете получить доступ к исходному коду, а также загрузить двоичные файлы.

Подкаст был FLOSS Weekly 31 с Рэндалом Шварцем и Лео Лапортом.

К первому вопросу:

Насколько я понимаю, у вас есть отношения один ко многим. Так что да, мультикарта мне подходит.

На второй вопрос:

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

Жизнь с лиспом (sbcl):)

Другие вопросы по тегам