Форум

Уважаемые разработчики! Почему могут не работать секции Before replication и After replication вкладки Code корневого объекта Model (версия 5.5), в которых указываются действия, выполняемые между прогонами модели? Записанные в эти секции действия игнорируются ... С уважением, Алексей.
Причины могут быть совершенно различными. Я рекомендую Вам отправить модель Группе Технической поддержки, используя форму на сайте: http://www.xjtek.ru/support/ask_question/
А по моему не в модели дело. У меня тоже самое. (Версия 5.4.1) Компилятор вообще не обращает внимания на заполнение этих полей: "Действие перед/после прогона". Хоть что там пиши. Баг налицо.
Обойти этот баг можно следующим образом. Создайте таймер, а в "Действие при срабатывание" напишите тот код, который должен выполниться при старте (завершении) модели. Соответственно условием срабатывания таймера будет либо старт модели, либо ее завершение. В AnyLogic 6 этот баг исправлен.
Создал статический Таймер с однократным срабатыванием и таймаутом = 2.0 - все равно всё обнуляется (и набор данных и все переменные, хотя заявленно, что корневой объект выживает при рестарте). Из предыдущего сообщения я не понял, как(или где) задать условие срабатывания таймера при старте/финише модели. Создал и динамический таймер с тем же таймаутом. Результат тотже. Вот это вся модель (упростил так): P = uniform(0,1) Нужно сделать 100 прогонов и запомнить 100 случайных величин в DataSet. Посоветуйте как быть именно в версии 5.4.1
Способ реализации данной задачи следующий. В корневом активном объекте необходимо создать таймер, таймаут которого чуть меньше (например, на 0.01) времени выполнения эксперимента. В поле "Действие при срабатывании" добавьте код, который добавляет значение в DataSet, и метод "Engine.nextReplication();". Затем, в "Дополнительном коде класса" корневого объекта переопределите метод "needRepeat()" следующим образом: public boolean needRepeat() { if(dataset.count()<100) return true; else return false; } В результате модель будет перезапускаться пока размер DataSet не станет равным 100.

Ваше сообщение