#anylogic
Вопрос:
Как я могу динамически изменять представление агента? Например, у меня есть коллекция в основном типе HashMaplt;String, ArrayListgt;, при запуске модели коллекция заполняется; ArrayList представляет индекс агента «Объект».
Я хочу анимировать объект агента на основе хэш-картыlt;String, ArrayListgt;, к которой он принадлежит (предполагается, что это будет изменяться динамически, например, при запуске модели или при запуске нового события)
пока что я могу установить статическую анимацию, указав следующий код в агенте объекта
main.deliveryData.get("0").contains(this.getIndex());
Как я мог бы выполнить итерацию по коллекции, чтобы динамически настроить цвет представления агента?
какие-нибудь советы/помощь?
Спасибо!
Ответ №1:
Во-первых, несколько заметок:
getIndex()
это очень неэффективно, как вы увидите из документа java, и особенно если вы планируете использовать его в какой-либо части анимации, это будет очень дорого для производительности вашей модели.
Лучше сохранить индекс агента в качестве параметра или переменной при создании, а затем использовать его.
- Всегда используйте связанную хэш-карту вместо хэш-карты, так как последняя не гарантирует порядок элементов, если вы действительно не знаете, что делаете. Поскольку порядок не гарантируется, если вы используете хэш-карту в логике модели, результаты модели не будут воспроизводимы. В вашем конкретном случае это может не быть проблемой.
- Вызов
.contains()
ArrayList неэффективен, я бы предложил использовать набор, который очень эффективен при проверке того, находится ли элемент внутри коллекции.
Таким образом, ваша переменная может быть deliveryData = new LinkedHashMaplt;String, LinkedHashSetlt;Facilitygt;gt;()
Но более простой способ изменить цвет агента-просто изменить его, когда он должен измениться с помощью
или изменять цвет только динамически — но это потребует небольших затрат на производительность, так как она будет оцениваться каждый раз, когда холст перерисовывается или обновляется. Вы можете использовать тернарный оператор в соответствии с приведенным ниже примером