Агентное моделирование в Java - вопрос об анимации - PullRequest
2 голосов
/ 11 сентября 2011

Я создаю агентную программу моделирования на Java.

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

Я ищу что-то более гладкое, чтобы агенты могли "перетекать" через окно во все стороны.

Есть предложения?

Спасибо!

Edit:

Среда будет простой и двухмерной. Будет от одного агента до нескольких сотен агентов.

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

Второе редактирование:

Я сейчас читаю этот урок: http://www.giosoft.net/Development/Java-Asteroids-Tutorial.html

Похоже, это поможет мне с тем, чего я пытаюсь достичь.

Ответы [ 3 ]

2 голосов
/ 12 сентября 2011

Возможно, вы захотите взглянуть на MASON . Это платформа Java с открытым исходным кодом для мультиагентного моделирования. Некоторые из демонстраций (например, MAV) показывают, как сделать именно то, что вы описываете.

RePast - это еще одна платформа Java, которая может быть вариантом.

Наконец, NetLogo делает то, что вы описываете, чрезвычайно просто. Хотя можно интегрировать NetLogo с другим кодом Java, у него есть собственный маленький язык, который позволяет очень быстро разрабатывать.

2 голосов
/ 11 сентября 2011

С 2000 по 2006 год я работал в Tryllian, голландской компании, специализирующейся на мультиагентных системах. Компания сейчас не активна.

Первой идеей в Tryllian было создание поискового устройства на основе агентов (называемого Сплетней). Это было графическое клиентское приложение с несколькими яркими круглыми агентами с милыми глазами. У каждого агента был зазор в спине, в который можно было перетащить «рюкзак». Рюкзак может содержать поисковый запрос и ряд результатов поиска (URL, документы, изображения и т. Д.). Чтобы выполнить поиск, пользователь должен был перетащить агента с подготовленным рюкзаком на «портал в Интернет», который был своего рода дверью пристани с звездным фоном, как вы видите в научно-фантастических фильмах. Затем агент будет «телепортирован» на триллиановый сервер, где он будет направлен в «тематическую комнату» «агентом-дворецким», который живет на сервере. В комнате он мог взаимодействовать с другими агентами и обмениваться поисковыми интересами и результатами. Похоже, что вы все еще можете скачать Gossip здесь .

Here's what the Gossip client looked like

Позже Tryllian решил разработать Agent Development Kit (ADK), с помощью которого можно было бы легче создавать приложения-агенты, такие как Gossip. Он предложил основанную на задачах модель поведения агента программирования. Ваш агент получит много событий (agentStarted и т. Д.), А в обработчики событий может добавить задачи, которые, в свою очередь, также получат события (taskStarted и т. Д.) И могут запланировать более сложные действия (возможно, в форме подзадач). API был действительно довольно хорошо сделан.

Ключевой особенностью ADK была, на мой взгляд, мобильность кода, которую он предлагал; агенты могут не только перемещаться между виртуальными комнатами в своей локальной среде ARE (Agent Runtime Environment), но также могут перемещаться на другой сервер. Это включало сериализацию классов и решение для нескольких загрузчиков, которое было довольно революционным в то время (нам нравилось думать). Эта функция позволила создавать проекты, в которых вы вносите код в данные, а не обмениваетесь данными (накачка данных по-прежнему является основной характеристикой большинства корпоративных систем, о которых я знаю). Например, Tryllian разработал приложение для удаленного аудита, которое позволило аналитикам из аудиторской компании кодировать правила аудита в агент и безопасно отправлять их на сервер своего клиента для мониторинга процессов.

Я остановлюсь, прежде чем этот ответ начнет получать действительно long (-;

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

Какова будет цель вашей мультиагентной системы? Что бы сделал агент? Будет ли он работать на одной машине или распространяться? Будут ли агенты жестко заданы, конфигурируемы или полностью динамичны в своем поведении / правилах?

Последнее предложение: разумной отправной точкой для размышлений о моделировании простых агентов является чувство-план-действие , которое обычно ассоциируется с роботами.

РЕДАКТИРОВАТЬ: ответ на ваш комментарий

Модель агента Триллиана больше ориентирована на обмен сообщениями, чем на тесное взаимодействие с моделируемой физической средой. Глядя на пример сайта, который вы разместили, кажется, что производительность очень важна, особенно когда число агентов увеличивается. Вы не будете использовать сильные стороны агента Триллиана: мобильность кода, программирование на основе задач, универсальность, поэтому я думаю, что это не лучший инструмент для моделирования, подобного этому.

Вы упоминаете «сетка» против «гладкого» подхода. Я думаю, что при компьютерном моделировании вам всегда нужно будет представлять размер, координаты, скорость и направление агентов в какой-то дискретной системе координат. Таким образом, всегда будет какая-то сетка, но вы можете уменьшить ячейки, чтобы они казались более гладкими.

Может быть, есть какие-то полезные ресурсы в игровом домене? (спрайты, обнаружение столкновений и т. д.)

Удачи и веселья!

1 голос
/ 13 сентября 2011

Я не могу сказать, что вы на самом деле спрашиваете. Возможно, вы задаете (или хотели задать) эти три вопроса?

  1. «Для моей модели, основанной на агентах, как я должен представлять своих агентов в космосе?»

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

    Вы можете использовать 2 или 3-мерную визуализацию. Возможно, вы захотите использовать тороидальное пространство. Вы можете наложить сетку (например, дискретные размеры x и y) или разрешить непрерывное пространство. У вас могут быть определенные правила о близости (например, только один агент может занимать одно пространство сетки одновременно). Возможно, вы захотите пойти с другим набором правил.

    Опять же, ключ в том, чтобы найти набор правил, который имеет смысл для вашего домена. Я бы порекомендовал найти простейший набор правил, которые по-прежнему создают виды поведения, необходимые для вашей модели.

  2. «Какие библиотеки анимации на основе Java следует учитывать?»

    Как только вы определились с пространственными аспектами своей агентной модели, , тогда вы будете готовы решить, какие технологии использовать для ее отображения. Это широкая тема, но я бы порекомендовал вам взглянуть на Processing, Piccolo2D, JavaFX, Java 2D и Java 3D.

    На самом деле, этот вопрос немного шире, чем я изложил выше. Вы, вероятно, будете заботиться не только о анимации. Основанные на агентах модели могут управляться GUI и / или интерфейсами командной строки. Если вам нужен графический интерфейс, вам понадобятся различные элементы управления вводом, чтобы можно было настраивать параметры модели. Вы захотите рассмотреть, по крайней мере, Swing и JavaFX.

  3. «Какие наборы инструментов или библиотеки мне следует использовать, чтобы помочь мне построить мою агентную модель?»

    Сравнение Википедии инструментов моделирования на основе агентов - это наиболее полный список, который я видел до сих пор, но он может ошеломить вас. По моему опыту, коллеги и коллеги склонны к одному или нескольким из следующих факторов: NetLogo, RePast Simphony, AnyLogic или MASON. Некоторые люди (в том числе и я) часто находят, что это быстрее. Если вы пойдете по этому пути, я настоятельно рекомендую вам взглянуть на языки высокого уровня, такие как Ruby, Scala или Python, чтобы позволить себе сосредоточиться на доменной логике, а не на низкоуровневых деталях языка.

...