Решатели могут занять время по различным причинам. Чтобы диагностировать причину или включить более быстрое решение, используйте один или несколько следующих методов.
Установите опцию Display
на 'iter'
. Эта установка показывает результаты итераций решателя.
Включить итеративное отображение:
Используя приложение Оптимизации, выберите Level of display, чтобы быть iterative
или iterative with detailed message
.
В командной строке MATLAB® войти
options = optimoptions('solvername','Display','iter');
Вызовите решатель с помощью структуры options
.
Для примера итеративного отображения смотрите, Интерпретируют Результат. Для получения дополнительной информации смотрите, Что Искать в Итеративном Отображении.
Решатели могут не сходиться, если допуски являются слишком маленькими, особенно OptimalityTolerance
и StepTolerance
.
Чтобы изменить допуски с помощью приложения Оптимизации, используйте список Stopping criteria наверху панели Options.
Чтобы изменить допуски в командной строке, используйте optimoptions
, как описано в Опциях Набора и Изменения.
Можно получить больше визуальной или подробной информации об итерациях решателя с помощью функции построения графика. Для списка предопределенных функций построения графика смотрите Options > Plot functions в приложении Оптимизации. Раздел Options страниц ссылки на функцию вашего решателя также перечисляет функции построения графика.
Использовать функцию построения графика:
Используя приложение Оптимизации, установите флажки рядом с каждой функцией построения графика, которую вы хотите использовать.
В командной строке MATLAB войти
options = optimoptions('solvername','PlotFcn',{@plotfcn1,@plotfcn2,...});
Вызовите решатель с помощью структуры options
.
Для примера использования функции построения графика смотрите Используя Функцию построения графика.
'lbfgs' HessianApproximation
Для решателя fmincon
, если у вас есть проблема со многими переменными (сотни или больше), затем часто, можно сэкономить время и память путем установки опции HessianApproximation
на 'lbfgs'
. Это заставляет
алгоритм 'interior-point'
fmincon
использовать приближение Гессиана низкой памяти.
Если вы предоставили производные (градиенты или Якобианы) к вашему решателю, решатель может не сходиться, если производные неточны. Для получения дополнительной информации об использовании опции CheckGradients
смотрите Валидность Проверки Градиентов или Якобианов.
Если вы используете большое, связанное произвольное (верхний или ниже), решатель может занять время, или даже может не сходиться. Однако, если вы устанавливаете Inf
или -Inf
как связанное, решатель может занять меньше времени и может сходиться лучше.
Почему? Алгоритм внутренней точки может установить начальную точку на среднюю точку конечных границ. Или алгоритм внутренней точки может попытаться найти “центральный путь” на полпути между конечными границами. Поэтому большое, связанное произвольное могут изменить размер тех компонентов неуместно. Напротив, бесконечные границы проигнорированы в этих целях.
Деталь: Некоторые решатели используют память для каждого ограничения, в основном, через ограничительный Гессиан. Ограничивание к Inf
или -Inf
означает, что нет никакого ограничения, таким образом, существует меньше памяти в использовании, потому что ограничительный Гессиан имеет более низкую размерность.
Можно получить подробную информацию об итерациях решателя с помощью выходной функции. Решатели вызывают выходные функции при каждой итерации. Вы пишете выходные функции с помощью синтаксиса, описанного в Синтаксисе Выходной функции.
Для примера использования выходной функции смотрите Пример: Используя Выходные функции.
Большие проблемы могут заставить в MATLAB заканчиваться память или время. Вот некоторые предложения для использования меньшей памяти:
Используйте крупномасштабный алгоритм если возможный (см. Крупномасштабный по сравнению с Алгоритмами Средней шкалы). Эти алгоритмы включают trust-region-reflective
, interior-point
, алгоритм trust-region
fminunc
, алгоритм trust-region-dogleg
fsolve
и алгоритм Levenberg-Marquardt
. Напротив, active-set
, quasi-newton
и алгоритмы sqp
не являются крупномасштабными.
Если вы используете крупномасштабный алгоритм, то используйте разреженные матрицы для своих линейных ограничений.
Использование якобиан умножает функцию или Гессиан, умножает функцию. Для примеров смотрите, что якобиан Умножает Функцию с Линейным методом наименьших квадратов, Квадратичную Минимизацию с Плотным, Структурированным Гессианом и Минимизацию с Плотным Структурированным Гессианом, Линейными Равенствами.
Если у вас есть лицензия Parallel Computing Toolbox™, ваш решатель может запустить более быстрые параллельные вычисления использования. Для получения дополнительной информации смотрите Параллельные вычисления.