Снижение сложности агентных моделей

Я разрабатываю агентную модель, имитирующую рост клеточной культуры in vitro.

Я использую библиотеку MASON (Java), но полагаю, что вопрос может быть применим к различным реализациям.

По сути, мои агенты запрограммированы на деление каждые 12 +/- 2 временных шагов после их создания. Каждый раз, когда агент разделяется, к моделированию добавляется новый.

Это приводит к очень быстрому росту сложности проблемы, что быстро делает моделирование особенно медленным.

Чтобы решить эту проблему, я решил, что агенты должны «умереть» по прошествии t временных шагов от создания.

Однако расписание MASON построено на BinaryHeap, который не позволяет легко удалять объекты (агенты) после того, как они были добавлены. Мое решение заключалось в установке логического флага:

dead = false;

Для которого устанавливается значение true после t временных шагов.

So

if(t == 50)
    dead = true;

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

if(dead)
    return;

Однако я понимаю, что простого доступа к объекту в расписании достаточно, чтобы замедлить моделирование.

Есть ли у кого-нибудь предложения относительно того, как я могу отключить агента или предотвратить его вызов?

Спасибо, Дарио


person MrD    schedule 20.03.2015    source источник
comment
Согласно документации вы сможете удалить агент: But you can also add and remove agents, or replace all the agents while the simulation is running   -  person Vyncent    schedule 20.03.2015


Ответы (1)


Взято со страницы документации MASON, стр. 94

Если ваш агент запланировал повторение, метод scheduleRepeating (...) вернул объект sim.engine.Stoppable. Чтобы предотвратить повторный вызов метода step (...) агента, просто вызовите stop () для Stoppable. Это также сделает возможным сборку мусора для агента.

person Vyncent    schedule 20.03.2015