Презентация агента(Цвет) Динамично Изменяться

#anylogic

Вопрос:

Как я могу динамически изменять представление агента? Например, у меня есть коллекция в основном типе HashMaplt;String, ArrayListgt;, при запуске модели коллекция заполняется; ArrayList представляет индекс агента «Объект».

Я хочу анимировать объект агента на основе хэш-картыlt;String, ArrayListgt;, к которой он принадлежит (предполагается, что это будет изменяться динамически, например, при запуске модели или при запуске нового события)

пока что я могу установить статическую анимацию, указав следующий код в агенте объекта

 main.deliveryData.get("0").contains(this.getIndex());  

смотрите modelsnapshot Как я мог бы выполнить итерацию по коллекции, чтобы динамически настроить цвет представления агента?

какие-нибудь советы/помощь?

Спасибо!

Ответ №1:

Во-первых, несколько заметок:

  1. getIndex() это очень неэффективно, как вы увидите из документа java, и особенно если вы планируете использовать его в какой-либо части анимации, это будет очень дорого для производительности вашей модели.

введите описание изображения здесь

Лучше сохранить индекс агента в качестве параметра или переменной при создании, а затем использовать его.

  1. Всегда используйте связанную хэш-карту вместо хэш-карты, так как последняя не гарантирует порядок элементов, если вы действительно не знаете, что делаете. Поскольку порядок не гарантируется, если вы используете хэш-карту в логике модели, результаты модели не будут воспроизводимы. В вашем конкретном случае это может не быть проблемой.
  2. Вызов .contains() ArrayList неэффективен, я бы предложил использовать набор, который очень эффективен при проверке того, находится ли элемент внутри коллекции.

Таким образом, ваша переменная может быть deliveryData = new LinkedHashMaplt;String, LinkedHashSetlt;Facilitygt;gt;()

Но более простой способ изменить цвет агента-просто изменить его, когда он должен измениться с помощью

введите описание изображения здесь

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

введите описание изображения здесь