Прочитав довольно много статей об искусственной жизни (тема, которую я считаю очень интересной), а также несколько вопросов прямо здесь, по SO, я начал экспериментировать с идеей создания (очень, очень, очень) простого симулятора. Даже графика не требуется. Если я упустил из виду вопрос, не стесняйтесь указать мне на него.
Как я уже сказал, вряд ли это будет симуляция уровня Sims. Я считаю, что он едва достигнет уровня «приемлемого бесплатного программного обеспечения», это просто обучающее упражнение и что-то, что поможет мне улучшить свои навыки во время перерыва. Основная предпосылка состоит в том, что создается типичный человек. Никакого имени, роста или чего-то подобного (как я уже сказал, просто), единственное, что он получит, это список «ассоциаций» и общих способностей «использовать», «подбирать» и «смотреть».
Мой первый вопрос относится к ассоциациям. Что SO рекомендует как эффективный способ справиться с такими вещами? Я думал о мульти-карте с относительно простой настройкой ключа, который он хочет (еда, еда, отдых и т. д.), А другой бит (извините, мой разум потерял), который он связывает с этой потребностью.
Например, у нас есть холодильник. В холодильнике есть еда (обычный базовый объект). Изначально у человека холодильник не ассоциируется с едой, но он ассоциирует еду с голодом. Поэтому, когда его голод нарастает, он начинает произвольно искать пищу. Если поблизости нет еды, он «использует» предметы для поиска пищи. Поскольку у него нет известных ассоциаций с едой, он волей-неволей использует вещи (вероятно, ищет ближайший объект и расширяется). Как только он использует / открывает холодильник, он видит еду, устанавливая связь (читайте: вставляя пару «еда, холодильник»), что в холодильнике есть еда.
Теперь я понимаю, что это будет намного сложнее, чем кажется, и готов это исправить. Вопрос в том, подойдет ли мульти-карта для (возможно) экспоненциально расширяющегося списка ассоциаций? Если нет, то что было бы?
Второй вопрос У меня, наверное, намного проще. Проще говоря, подойдет ли универсальный интерфейс объекта / элемента для большинства элементов? Другими словами, будет ли универсальный интерфейс «использовать» для моих целей? Не думаю, что хорошо это объясняю.
В любом случае, любые комментарии приветствуются.





К первому вопросу:
Насколько я понимаю, у вас отношения «один ко многим». Так что да, мне кажется подходящим мультикарта.
На второй вопрос:
Да, я считаю, что универсальный интерфейс для объектов уместен. Возможно, используйте что-то похожее на ОТДЫХ для управления состоянием объекта.
Жизнь с лиспом (sbcl) :)
Если бы вы делали это как серьезный проект разработки, я бы предложил использовать эквивалент отражения Java (замените там язык по вашему выбору). Если вы хотите сделать игрушечный проект в качестве начального усилия, я бы посоветовал хотя бы развернуть вашу собственную простую версию отражения в соответствии со следующим обоснованием.
Каждый артефакт в вашей среде предлагает определенные возможности. Простая модель этого факта - спросить, какие «глаголы» применимы к каждому объекту, с которым сталкивается ваш виртуальный персонаж (включая возможную зависимость от текущего состояния этого объекта). Например, ваш персонаж может «открыть» холодильник, коробку с хлопьями или книгу, при условии, что каждый из них находится в «закрытом» состоянии. Как только книга открыта, ваш персонаж может прочитать или закрыть ее. Как только холодильник открыт, ваш персонаж может «заглянуть внутрь», чтобы получить список видимого содержимого, может вынуть из него объект, положить в него объект и т. д.
Дело в том, что в типичной ситуации ваш персонаж может оглядываться вокруг, чтобы увидеть, что видно, запрашивая объект, чтобы определить его текущее состояние или что с ним можно сделать (например, «что-состояние» и «что-могу-я-сделать»). "являются общими глаголами, применимыми ко всем объектам), а затем используйте информацию о его текущем состоянии, состоянии объекта и список глаголов для этого объекта, чтобы попытаться делать различные вещи.
Применяя набор положительных и отрицательных отзывов, со временем ваш персонаж может «узнать», при каких обстоятельствах он должен или не должен вести себя по-разному. (Очевидно, вы могли бы сделать эту симуляцию интерактивной, попросив пользователя участвовать в предоставлении обратной связи.)
Это всего лишь набросок, но, возможно, он может дать вам несколько интересных идей, с которыми можно поиграть. Повеселись! ;-)
Некоторое время назад я слышал подкаст с разработчиком Моделирование благородной обезьяны, который может быть вам интересен - концептуально и, возможно, кодовым, как вы можете получить доступ к исходному коду, а также скачать двоичные файлы.
Подкаст был FLOSS еженедельно 31 с Рэндалом Шварцем и Лео Лапортом.
О, большое спасибо. Я даже не подумал об отражении, хотя теперь я думаю об этом, это идеально подошло бы.