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