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'
'active-set'
Использовать 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'
'active-set'
Использовать optimoptions для установки Algorithm в командной строке.
| Рекомендации |
|---|
Для получения справки, если минимизация завершается неуспешно, см. раздел Когда решатель завершается неуспешно или Когда решатель может быть успешно выполнен. См. раздел Потенциальная неточность алгоритмов внутренних точек. |
Описание алгоритмов см. в разделе Алгоритмы квадратичного программирования.
Алгоритм оптимизации имеет большой масштаб, когда он использует линейную алгебру, которая не нуждается ни в хранении, ни в работе с полными матрицами. Это может быть сделано внутри путем сохранения разреженных матриц и использования разреженной линейной алгебры для вычислений, когда это возможно. Кроме того, внутренние алгоритмы либо сохраняют разреженность, такую как разреженное разложение Холески, либо не генерируют матрицы, такие как метод сопряженного градиента.
Напротив, методы среднего масштаба внутренне создают полные матрицы и используют плотную линейную алгебру. Если проблема достаточно велика, полные матрицы занимают значительное количество памяти, и плотная линейная алгебра может потребовать длительного времени для выполнения.
Не позволяйте названию «крупномасштабный» вводить вас в заблуждение; можно использовать масштабный алгоритм для небольшой задачи. Кроме того, нет необходимости указывать скудные матрицы для использования масштабного алгоритма. Выберите алгоритм среднего масштаба для доступа к дополнительным функциям, таким как дополнительные типы ограничений, или, возможно, для повышения производительности.
Алгоритмы внутренних точек в 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В этих случаях алгоритмы внутренних точек менее точны, но ответы довольно близки к правильному ответу.