Оптимизация сложных систем

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

Постановка

Нужно определить:

  • переменные, которыми можно управлять;
  • целевые показатели;
  • жёсткие ограничения;
  • неопределённые параметры;
  • горизонт времени;
  • базовый вариант.

Методы

  • аналитическая оптимизация — когда модель достаточно проста;
  • математическое программирование — для явной цели и ограничений;
  • имитация — если поведение задаётся событиями и распределениями;
  • поиск по экспериментам — если есть безопасный стенд;
  • эвристика — если точный поиск непрактичен, а границы риска известны;
  • декомпозиция — оптимизация подсистем с последующей координацией.

Подробная карта методов: Математические методы оптимизации задач в исследовании операций.

Многокритериальная оптимизация

При целях единственного «лучшего по всему» решения обычно нет.

Парето-оптимальное решение нельзя улучшить по одному критерию, не ухудшив хотя бы другой. Набор таких решений образует фронт Парето.

дешевле <--------- компромисс ---------> надёжнее

Способы выбрать точку:

  • свёртка критериев с заранее согласованными весами;
  • основной критерий плюс ограничения по остальным;
  • лексикографический порядок;
  • выбор из фронта Парето владельцем решения.

Локальная и системная цель

Если каждая команда минимизирует загрузку своего компонента, она может увеличить сетевые вызовы и общую задержку. Поэтому локальные критерии должны выводиться из системного результата.

Надёжность результата

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

Самопроверка

  • Что означает Парето-оптимальность?
  • Почему оптимум модели может быть плохим решением?
  • В каких случаях лучше основной критерий с ограничениями, чем сумма весов?