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