exponenta event banner

Когда решатель может быть успешно выполнен

Конечная точка равна начальной точке

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

Если вы не уверены, что начальная точка действительно является локальным минимумом, попробуйте:

  1. Начиная с разных точек - см. раздел Изменение начальной точки.

  2. Проверка правильности определения цели и ограничений (например, возвращают ли они правильные значения в некоторых точках?) - см. раздел Проверка целей и функций ограничений. Убедитесь, что неосуществимая точка не вызывает ошибки в функциях; см. раздел Итерации могут нарушать ограничения.

  3. Изменение допусков, таких как OptimalityTolerance, ConstraintTolerance, и StepTolerance - см. раздел Использование соответствующих допусков.

  4. Масштабирование задачи таким образом, чтобы каждая координата имела примерно один и тот же эффект - см. раздел Изменение масштаба проблемы.

  5. Предоставление градиентной и гессенской информации - см. раздел Предоставление аналитических градиентов или якобиана и предоставление гессенского.

Возможно локальное минимально

Решатель, возможно, достиг локального минимума, но не может быть уверен, потому что мера оптимальности первого порядка не меньше, чем OptimalityTolerance толерантность. (Дополнительные сведения об измерении оптимальности первого порядка см. в разделе Измерение оптимальности первого порядка.) Чтобы узнать, является ли решение, о котором сообщается, надежным, рассмотрим следующие предложения.

1. Неконтактные функции
2. Повторный запуск, начинающийся в конечной точке
3. Попробуйте другой алгоритм
4. Изменение допусков
5. Масштабировать проблему
6. Проверить ближайшие точки
7. Изменить параметры конечных разностей
8. Предоставьте аналитические градиенты или Jacobian
9. Предоставить гессенца

1. Неконтактные функции

Если вы пытаетесь свернуть неконтактную функцию или имеете неконтактные ограничения, «Local Minimum Possible» может быть лучшим сообщением выхода. Это происходит потому, что условия оптимальности первого порядка не применяются в любой точке.

Чтобы убедиться, что решение адекватно, попробуйте проверить ближайшие точки.

2. Повторный запуск, начинающийся в конечной точке

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

Например, рассмотрите следующую проблему минимизации, взятую от примера Используя Символическую Математику с Оптимизацией Решающие устройства Toolbox™:

options = optimoptions('fminunc','Algorithm','quasi-newton');
funh = @(x)log(1 + (x(1) - 4/3)^2 + 3*(x(2) - (x(1)^3 - x(1)))^2);
[xfinal fval exitflag] = fminunc(funh,[-1;2],options)

Local minimum possible.

fminunc stopped because it cannot decrease the 
objective function along the current search direction.

xfinal =
    1.3333
    1.0370

fval =
  8.5265e-014

exitflag =
     5

Значение флага выхода 5 указывает, что показатель оптимальности первого порядка превышал допуск функции. Снова запустите минимизацию, начиная с xfinal:

[xfinal2 fval2 exitflag2] = fminunc(funh,xfinal,options)

Local minimum found.

Optimization completed because the size of the gradient is 
less than the default value of the function tolerance.

xfinal2 =
    1.3333
    1.0370

fval2 =
  6.5281e-014

exitflag2 =
     1

Локальный минимум - «найден», не «возможен», а exitflag - 1, не 5. Эти два решения практически идентичны. Тем не менее, второй прогон имеет более удовлетворительное сообщение выхода, поскольку мера оптимальности первого порядка была достаточно низкой: 7.5996e-007, вместо 3.9674e-006.

3. Попробуйте другой алгоритм

Многие решатели дают вам выбор алгоритма. Различные алгоритмы могут привести к использованию различных критериев остановки.

Например, при повторном запуске в конечной точке возвращается exitflag 5 с первого прогона. В этом прогоне используется quasi-newton алгоритм.

Для алгоритма доверительной области требуется заданный пользователем градиент. betopt.m содержит вычисление целевой функции и градиента:

function [f gradf] = betopt(x)

g = 1 + (x(1)-4/3)^2 + 3*(x(2) - (x(1)^3-x(1)))^2;
f = log(g);
gradf(1) = 2*(x(1)-4/3) + 6*(x(2) - (x(1)^3-x(1)))*(1-3*x(1)^2);
gradf(1) = gradf(1)/g;
gradf(2) = 6*(x(2) - (x(1)^3 -x(1)))/g;

Запуск оптимизации с помощью trust-region алгоритм приводит к другому exitflag:

options = optimoptions('fminunc','Algorithm','trust-region','SpecifyObjectiveGradient',true);
[xfinal3 fval3 exitflag3] = fminunc(@betopt,[-1;2],options)

Local minimum possible.

fminunc stopped because the final change in function value 
relative to its initial value is less than the default value 
of the function tolerance.

xfinal3 =
    1.3333
    1.0370

fval3 =
  7.6659e-012

exitflag3 =
     3

Условие выхода лучше, чем quasi-newton состояние, хотя оно все еще не лучшее. Повторный запуск алгоритма из конечной точки дает лучшую точку с чрезвычайно малой мерой оптимальности первого порядка:

[xfinal4 fval4 eflag4 output4] = fminunc(@betopt,xfinal3,options)

Local minimum found.

Optimization completed because the size of the gradient is 
less than the default value of the function tolerance.

xfinal4 =

    1.3333
    1.0370

fval4 =
     0

eflag4 =
     1

output4 = 
         iterations: 1
          funcCount: 2
       cgiterations: 1
      firstorderopt: 7.5497e-11
          algorithm: 'trust-region'
            message: 'Local minimum found.

Optimization completed because the size o...'
    constrviolation: []

4. Изменение допусков

Иногда допуски затяжки или ослабления приводят к более удовлетворительному результату. Например, выберите меньшее значение OptimalityTolerance в разделе «Попробуйте другой алгоритм»:

options = optimoptions('fminunc','Algorithm','trust-region',...
    'OptimalityTolerance',1e-8,'SpecifyObjectiveGradient',true); % default=1e-6
[xfinal3 fval3 eflag3 output3] = fminunc(@betopt,[-1;2],options)

Local minimum found.

Optimization completed because the size of the gradient is 
less than the selected value of the function tolerance.

xfinal3 =
    1.3333
    1.0370

fval3 =
     0

eflag3 =
     1

output3 = 
         iterations: 15
          funcCount: 16
       cgiterations: 12
      firstorderopt: 7.5497e-11
          algorithm: 'trust-region'
            message: 'Local minimum found.

Optimization completed because the size...'
    constrviolation: []

fminunc потребовалось еще одна итерация, чем раньше, для достижения лучшего решения.

5. Масштабировать проблему

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

6. Проверить ближайшие точки

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

Если у вас есть лицензия Global Optimization Toolbox, попробуйте запустить patternsearch(Панель инструментов глобальной оптимизации) решатель от конечной точки. patternsearch проверяет близлежащие точки и принимает все типы ограничений.

7. Изменить параметры конечных разностей

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

Для выбора центральных различий в командной строке используйте optimoptions установить 'FiniteDifferenceType' кому 'central', вместо значения по умолчанию 'forward'.

8. Предоставьте аналитические градиенты или Jacobian

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

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

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

Чтобы проверить правильность градиента или функции якобиана, используйте CheckGradients , как описано в разделе Проверка достоверности градиентов или якобианцев.

При наличии лицензии Symbolic Math Toolbox™ можно программно вычислить градиенты и гессен. Пример см. в разделе Расчет градиентов и гессенов с помощью символьных математических Toolbox™.

Примеры использования градиентов и якобианов см. в разделах Минимизация с градиентом и гессеном, Нелинейные зависимости с градиентами, Расчет градиентов и гессенов с использованием символьных математических Toolbox™, Решение нелинейной системы без и с включением якобиана и Большая разреженная система нелинейных уравнений с якобианом. Для получения информации об автоматическом дифференцировании в подходе, основанном на проблемах, см. Эффект автоматического дифференцирования в оптимизации, основанной на проблемах.

9. Предоставить гессенца

Решатели часто работают более надежно и с меньшим количеством итераций, когда вы поставляете гессен.

Следующие решатели и алгоритмы принимают гессенов:

При наличии лицензии Symbolic Math Toolbox можно программно вычислять градиенты и гессен. Пример см. в разделе Расчет градиентов и гессенов с помощью символьных математических Toolbox™. Для получения информации о гессенском подходе на основе проблем см. раздел Деривативы поставки в потоке операций на основе проблем.

Пример в разделе «Расчет градиентов и гессенов с помощью символьных математических Toolbox™» показывает fmincon взятие 77 итераций без гессенского, но только 19 итераций с гессенским.