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