В AnyLogic встроен ведущий оптимизатор OptQuest от компании OptTek. В его основе – сложные аналитические алгоритмы, которые позволяют находить оптимальные значения параметров при решении задач с помощью моделирования и помогают пользователям принимать обоснованные решения.
В AnyLogic 8.5 используется новая версия OptQuest. В этом посте рассказываем, как эффективно применять оптимизатор при работе с имитационными моделями. О том, как работает OptQuest в AnyLogic, мы также написали в документации AnyLogic.
В оптимизационном эксперименте оптимальное решение можно найти только перебрав все возможные комбинации параметров. Но если параметров и их возможных значений очень много, полный перебор часто невозможен. В таких ситуациях OptQuest позволяет сэкономить время: он находит оптимальное решение быстрее, используя специальные алгоритмы и минимальное количество запусков.
Часто пользователи OptQuest задают вопрос: “Сколько раз нужно запустить модель, чтобы найти оптимальные значения параметров?”. Простого ответа нет, потому что ответ зависит от нескольких факторов. Вот список тех, которые напрямую влияют на скорость поиска оптимального значения. Объяснения каждого фактора – ниже.
- Количество варьируемых параметров
- Использование начальных значений
- Границы изменения параметров
- Сложность и количество целевых функций
- Наличие ограничений для оптимизационных параметров
- Количество репликаций на запуск модели
- Точность результатов эксперимента
Количество варьируемых параметров
Этот фактор сильно влияет на то, сколько запусков модели должен сделать OptQuest, чтобы найти оптимальное решение. У OptQuest нет физического ограничения на количество варьируемых параметров, которые могут использоваться в оптимизационной задаче. Однако, чем больше число таких параметров в задаче, тем больше запусков необходимо, чтобы найти оптимальное решение. Вот общие рекомендации по минимальному количеству запусков, необходимых для данного количества варьируемых параметров в задаче:
Использование начальных значений
Если известны начальные значения параметров, которые помогут сузить область поиска, их можно задать для OptQuest перед началом его работы. В этом случае OptQuest оценит их и будет искать решение в области этих значений, сократив время оптимизации. Этот подход может ускорить оптимизацию больших задач.Границы изменения параметров
Производительность можно значительно улучшить, если выбрать значимые границы для варьируемых параметров. Вот пример: границы для трёх варьируемых параметров (X, Y и Z) заданы как:
- 0 <= X <= 100
- 0 <= Y <= 100
- 0 <= Z <= 100
Если эти границы верны, но аналитик знает, что для текущего исследования интересен меньший диапазон значений, то нужно изменить диапазоны, например:
- 15 <= X <= 65
- 0 <= Y <= 16.667
- 10 <= Z <= 80
Сужение диапазонов позволяет быстрее найти оптимальные значения варьируемых параметров, так как это снижает количество значений, которые перебирает оптимизатор.
Сложность целевой функций
У сложной целевой функции нелинейная поверхность со множеством локальных точек минимума и максимума, или же она прерывиста в одной или нескольких точках.
OptQuest создан для поиска оптимальных решений любых целевых функций. Однако для решения более сложных задач, как правило, требуется проводить больше запусков модели, чтобы найти оптимальное решение.
Количество целевых функций
Часто в задаче нужно найти максимум и минимум нескольких целевых функций. Обычно одна из функций – это показатель стоимости, а вторая – показатель эффективности. Они почти всегда находятся в обратной зависимости или конкурируют друг с другом, и для их оценки нужно балансировать между стоимостью и производительностью.
OptQuest сначала ищет решение для каждой целевой функции, а затем фокусируется на заполнении пробелов на границе Парето. Чем больше целевых функций, тем больше запусков модели понадобится. Чтобы найти их примерное число, умножьте количество запусков из таблицы выше на 5. Например, если число варьируемых параметров меньше 10, количество запусков модели должно быть не менее 500.
OptQuest допускает любое количество целевых функций, но часто сначала лучше экспериментировать с двумя: так проще объяснить результаты эксперимента. Если функций больше, мы рекомендуем выбрать две наиболее важные и оптимизировать их в первую очередь, а затем добавить их как ограничения и повторить оптимизацию для другой функции.
Ограничения и требования для оптимизационных параметров
Ограничения позволяют задать более узкий диапазон допустимых значений параметров. Перед запуском оптимизации с определенной комбинацией значений параметров AnyLogic проверяет, удовлетворяют ли данные значения заданным ограничениям. Можно также задать требования – дополнительные ограничения – к решению. Оно проверяется в конце прогона и может быть задано любым арифметическим выражением или функцией.
Если линейное ограничение задано только с помощью варьируемых параметров, перед запуском оптимизации OptQuest может исключить те значения параметров, которые входят в ограничение. Этот подход обычно ускоряет поиск оптимального решения.
Количество репликаций на запуск модели
Когда OptQuest запускает оптимизацию, в модели проверяются наборы значений варьируемых параметров. Поэтому результат оптимизации зависит от количества запусков и количества репликаций на каждый запуск.
Чем больше запусков выполнит OptQuest, тем больше наборов значений он сможет перебрать, и тем более вероятно, что найдётся решение, близкое к оптимальному. Поэтому нужно находить компромисс между статистической точностью за счёт большего количества репликаций и качества решения при большом количестве запусков модели.
Точность результатов эксперимента
На точность результатов эксперимента влияют 2 фактора:
- количество репликаций на один запуск модели;
- гладкость целевой функции.
Чтобы увеличить точность результатов, количество репликаций на запуск должно быть минимально необходимым, чтобы получить достоверную оценку оптимизируемой целевой функции. Это число обычно определяется с помощью эмпирического тестирования.
Шум также может повлиять на точность оптимизации.
Функция слева на картинке негладкая из-за распределения вероятностей, используемого для моделирования неопределённости. Поскольку в таких функциях разброс значений на графике за один запуск слишком большой, у OptQuest могут возникнуть проблемы с определением минимального или максимального значения. Чтобы помочь решить эту проблему, увеличьте количество репликаций на запуск. В таком случае оптимизатор будет выбирать среднее значение из результатов всех репликаций в запуске. Таким образом, функция получится более гладкой и OptQuest должен быстрее найти лучшее решение.
На этом всё. Подробнее об оптимизационном эксперименте в AnyLogic мы рассказываем в нашем коротком обучающем видео (на англ.):
Больше примеров применения OptQuest в моделировании и не только: