AnyLogic
Развернуть
Размер шрифта

Воспроизводимые прогоны модели

Как сделать прогоны модели воспроизводимыми

  1. Выберите эксперимент в панели Проекты.
  2. Откройте секцию Случайность в панели Свойства.
  3. Выберите опцию Фиксированное начальное число (воспроизводимые прогоны).
  4. Укажите начальное число генератора случайных чисел в поле Начальное число, расположенном справа.
Демо-модель: Reproducible Experiment with Stochastic Process Model Открыть страницу модели в AnyLogic Cloud. Там можно запустить модель или скачать ее по ссылке Исходные файлы модели.

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

Если вы ничего не меняли в модели, а в эксперименте вашей модели выбрана опция Фиксированное начальное число (воспроизводимые прогоны), но ее результаты не воспроизводятся, проверьте в вашей модели следующее:

Для всех экспериментов
  • Если в модели есть транспортеры с произвольной навигацией или пешеходы, то для повышения производительности модели AnyLogic производит многопоточные вычисления на нескольких ядрах процессора, что приводит к невоспроизводимым прогонам модели. Вам нужно будет выключить многопоточность, выбрав 1 в настройке выполнения модели Количество процессоров для параллельных вычислений.
  • В модели не должно быть коллекций класса HashMap или HashSet. Используйте LinkedHashMap.
  • Не используйте System.currentTimeMillis(), new Date() и им подобные функции, которые возвращают текущую дату компьютера.
  • Если результаты воспроизводятся только после закрытия окна модели и повторного запуска, но не воспроизводятся после комбинации «запуск->остановка», это может говорить о том, что каждый прогон модели оставляет лишние записи в пользовательских данных эксперимента. Частным случаем являются статические переменные, которые могут быть записаны первым прогоном и считаны вторым.
  • В случае с внешними источниками данных, следует убедиться, что вводные данные не изменились во время прогона модели, так как следующий прогон будет использовать измененные данные.
  • В модели не должны использоваться методы с неконтролируемым значением класса Random (например: Collections.shuffle() или Math.random()). Используйте функцию getDefaultRandomNumberGenerator() для получения доступа к потоку случайных чисел модели.
  • Если используется конвертирование из текущей даты компьютера в модельное время, необходимо, чтобы в модели были заданы фиксированные начальная и конечная даты моделирования.
  • Не используйте оператор == для сравнения текстовых строк (переменных и параметров типа String), вместо этого используйте функцию equals(), доступную у всех переменных типа String.
  • Динамические свойства фигур не должны содержать функций, которые изменяют что-либо в модели.
  • Логика модели не должна зависеть от свойств фигур анимации (размер, местоположение, цвет и т.д.).
  • Другие параллельные потоки (если есть) должны быть корректно синхронизованы и упорядочены.
  • В модели не должно быть вызовов методов object.hashCode() и System.identityHashCode().
  • Если вы хотите добиться воспроизводимых результатов при запуске модели на различных компьютерах, убедитесь, что на этих компьютерах установлены одни и те же региональные настройки (локали). Иначе, например, если в модели есть элемент расписание, и в одной из локалей производится переход на зимнее время, а в другой нет, то результаты прогонов модели могут быть разными.
Для экспериментов с множественными прогонами
  • Эксперимент не должен содержать статических переменных или полей, которые могли бы быть изменены во время прогона.
  • Генератор случайных чисел в нестандартном эксперименте должен сбрасываться или перезапускаться перед каждым новым прогоном модели.
  • Эксперимент оптимизации с параллельным выполнением итераций может выдавать разные результаты каждый раз. Новые значения параметров основаны на предыдущих результатах моделирования системы. Количество результатов моделирования в определенный момент времени может отличаться ввиду различной скорости выполнения каждого отдельно взятого прогона. Отключите параллельное выполнение итераций (в секции Специфических свойств эксперимента), чтобы каждый раз получать одинаковый результат.
  • Если результаты экспериментов с множественными прогонами не соответствуют результатам простого эксперимента, следует проверить начальное/конечное время модели, случайное начальное число и другие настройки исполняющего модуля.
Как мы можем улучшить эту статью?