fmincon
имеет пять опций алгоритма:
'interior-point'
(значение по умолчанию)
'trust-region-reflective'
'sqp'
'sqp-legacy'
'active-set'
Используйте optimoptions
установить Algorithm
опция в командной строке.
Рекомендации |
---|
Смотрите потенциальную погрешность с алгоритмами внутренней точки. |
'interior-point'
решает большие, разреженные проблемы, а также небольшие плотные проблемы. Алгоритм удовлетворяет границам во всех итерациях и может восстановиться с NaN
или Inf
результаты. Это - крупномасштабный алгоритм; смотрите Крупномасштабный по сравнению с Алгоритмами Средней шкалы. Алгоритм может использовать специальные методы в крупномасштабных проблемах. Для получения дополнительной информации см. Алгоритм Внутренней точки в fmincon
options
.
'sqp'
удовлетворяет границам во всех итерациях. Алгоритм может восстановиться с NaN
или Inf
результаты. Это не крупномасштабный алгоритм; смотрите Крупномасштабный по сравнению с Алгоритмами Средней шкалы.
'sqp-legacy'
похоже на 'sqp'
, но обычно медленнее и использует больше памяти.
'active-set'
может сделать большие шаги, который добавляет скорость. Алгоритм является эффективным на некоторых проблемах с несглаженными ограничениями. Это не крупномасштабный алгоритм; смотрите Крупномасштабный по сравнению с Алгоритмами Средней шкалы.
'trust-region-reflective'
требует, чтобы вы обеспечили градиент и позволяет только границы или линейные ограничения равенства, но не обоих. В рамках этих ограничений алгоритм решает и большие разреженные проблемы и небольшие плотные проблемы эффективно. Это - крупномасштабный алгоритм; смотрите Крупномасштабный по сравнению с Алгоритмами Средней шкалы. Алгоритм может использовать специальные методы, чтобы сохранить использование памяти, такое как Гессиан умножают функцию. Для получения дополнительной информации смотрите Доверительную область Отражающий Алгоритм в fmincon
options
.
Для описаний алгоритмов см. Ограниченные Нелинейные Алгоритмы Оптимизации.
fsolve
имеет три алгоритма:
'trust-region-dogleg'
(значение по умолчанию)
'trust-region'
'levenberg-marquardt'
Используйте optimoptions
установить Algorithm
опция в командной строке.
Рекомендации |
---|
|
'trust-region-dogleg'
единственный алгоритм, который особенно спроектирован, чтобы решить нелинейные уравнения. Другие пытаются минимизировать сумму квадратов функции.
'trust-region'
алгоритм является эффективным на разреженных проблемах. Это может использовать специальные методы, такие как якобиан, умножают функцию для крупномасштабных проблем.
Для описаний алгоритмов смотрите, что уравнение Решает Алгоритмы.
fminunc
имеет два алгоритма:
'quasi-newton'
(значение по умолчанию)
'trust-region'
Используйте optimoptions
установить Algorithm
опция в командной строке.
Рекомендации |
---|
Для справки, если минимизация перестала работать, смотрите, Когда Сбои Решателя или Когда Решатель Может Успешно выполниться. |
Для описаний алгоритмов см. Неограниченные Нелинейные Алгоритмы Оптимизации.
lsqlin
имеет два алгоритма:
'interior-point'
, значение по умолчанию
'trust-region-reflective'
Используйте optimoptions
установить Algorithm
опция в командной строке.
Рекомендации |
---|
Для справки, если минимизация перестала работать, смотрите, Когда Сбои Решателя или Когда Решатель Может Успешно выполниться. Смотрите потенциальную погрешность с алгоритмами внутренней точки. |
Для описаний алгоритмов смотрите Наименьшие квадраты (Подбор кривой Модели) Алгоритмы.
lsqcurvefit
и lsqnonlin
имейте два алгоритма:
'trust-region-reflective'
(значение по умолчанию)
'levenberg-marquardt'
Используйте optimoptions
установить Algorithm
опция в командной строке.
Рекомендации |
---|
Для справки, если минимизация перестала работать, смотрите, Когда Сбои Решателя или Когда Решатель Может Успешно выполниться. |
Для описаний алгоритмов смотрите Наименьшие квадраты (Подбор кривой Модели) Алгоритмы.
linprog
имеет три алгоритма:
'dual-simplex'
, значение по умолчанию
'interior-point-legacy'
'interior-point'
Используйте optimoptions
установить Algorithm
опция в командной строке.
Рекомендации |
---|
Используйте Для справки, если минимизация перестала работать, смотрите, Когда Сбои Решателя или Когда Решатель Может Успешно выполниться. Смотрите потенциальную погрешность с алгоритмами внутренней точки. |
Часто, 'dual-simplex'
и 'interior-point'
алгоритмы быстры, и используют наименьшее количество памяти.
'interior-point-legacy'
алгоритм похож на 'interior-point'
, но 'interior-point-legacy'
может быть медленнее, менее устойчивым, или использовать больше памяти.
Для описаний алгоритмов см. Линейные Алгоритмы Программирования.
quadprog
имеет два алгоритма:
'interior-point-convex'
(значение по умолчанию)
'trust-region-reflective'
Используйте optimoptions
установить Algorithm
опция в командной строке.
Рекомендации |
---|
Для справки, если минимизация перестала работать, смотрите, Когда Сбои Решателя или Когда Решатель Может Успешно выполниться. Смотрите потенциальную погрешность с алгоритмами внутренней точки. |
Для описаний алгоритмов см. Алгоритмы Квадратичного программирования.
Алгоритмом оптимизации является large scale, когда это использует линейную алгебру, которая не должна хранить, ни работать с, полные матрицы. Это может быть сделано внутренне путем хранения разреженных матриц, и при помощи линейной алгебры для разреженных матриц для расчетов, когда это возможно. Кроме того, внутренние алгоритмы или сохраняют разреженность, такую как разреженное разложение Холесского, или не генерируют матрицы, такие как метод сопряженных градиентов.
В отличие от этого методы medium-scale внутренне создают полные матрицы и используют плотную линейную алгебру. Если проблема является достаточно большой, полные матрицы поднимают существенное количество памяти, и плотная линейная алгебра может потребовать, чтобы долгое время выполнилось.
Не позволяйте имени “крупный масштаб”, вводят в заблуждение вас; можно использовать крупномасштабный алгоритм на небольшой проблеме. Кроме того, вы не должны задавать разреженные матрицы, чтобы использовать крупномасштабный алгоритм. Выберите алгоритм средней шкалы, чтобы получить доступ к дополнительной функциональности, такой как дополнительные типы ограничения, или возможно для лучшей производительности.
Алгоритмы внутренней точки в fmincon
, quadprog
, lsqlin
, и linprog
имейте много хороших характеристик, таких как низкое использование памяти и способность решить большие задачи быстро. Однако их решения могут быть немного менее точными, чем те из других алгоритмов. Причина этой потенциальной погрешности состоит в том, что (внутренне расчетный) барьерная функция сохраняет, выполняет итерации далеко от контуров ограничения неравенства.
В наиболее практических целях обычно вполне мала эта погрешность.
Чтобы уменьшать погрешность, попытайтесь:
Повторно выполните решатель с меньшим StepTolerance
, OptimalityTolerance
, и возможно ConstraintTolerance
допуски (но сохраняют допуски разумными.) Смотрите Допуски и Критерий остановки).
Запустите различный алгоритм, начинающий с решения внутренней точки. Это может перестать работать, потому что некоторые алгоритмы могут использовать чрезмерную память или время и весь linprog
и некоторый quadprog
алгоритмы не принимают начальную точку.
Например, попытайтесь минимизировать функциональный x, когда ограничено ниже 0. Используя fmincon
interior-point
по умолчанию алгоритм:
options = optimoptions(@fmincon,'Algorithm','interior-point','Display','off'); x = fmincon(@(x)x,1,[],[],[],[],0,[],[],options)
x = 2.0000e-08
Используя fmincon
sqp
алгоритм:
options.Algorithm = 'sqp';
x2 = fmincon(@(x)x,1,[],[],[],[],0,[],[],options)
x2 = 0
Точно так же решите ту же задачу с помощью linprog
interior-point-legacy
алгоритм:
opts = optimoptions(@linprog,'Display','off','Algorithm','interior-point-legacy'); x = linprog(1,[],[],[],[],0,[],1,opts)
x = 2.0833e-13
Используя linprog
dual-simplex
алгоритм:
opts.Algorithm = 'dual-simplex';
x2 = linprog(1,[],[],[],[],0,[],1,opts)
x2 = 0
В этих случаях алгоритмы внутренней точки менее точны, но ответы вполне близко к правильному ответу.