Решатели могут занимать слишком много времени по разным причинам. Для диагностики причины или ускорения решения воспользуйтесь одним или несколькими из следующих способов.
Установите Display опция для 'iter'. Этот параметр показывает результаты итераций решателя.
Для включения итеративного отображения в командной строке MATLAB ® введите
options = optimoptions('solvername','Display','iter');Вызовите решатель с помощью options структура.
Пример итеративного отображения см. в разделе Интерпретация результата. Дополнительные сведения см. в разделе Поиск в итеративном отображении.
Решатели могут не сходиться, если допуски слишком малы, особенно OptimalityTolerance и StepTolerance.
Для изменения допусков в командной строке используйте команду optimoptions как описано в разделе Настройка и изменение опций.
Можно получить более визуальную или подробную информацию об итерациях решателя с помощью функции печати. В разделе Опции (Options) страниц ссылок на функции решателя перечислены функции печати.
Для использования функции печати в командной строке MATLAB введите
options = optimoptions('solvername','PlotFcn',{@plotfcn1,@plotfcn2,...});Вызовите решатель с помощью options структура.
Пример использования функции печати см. в разделе Использование функции печати.
'lbfgs' HessianApproximation ВыборДля fmincon решатель, если у вас есть проблема со многими переменными (сотни или более), то часто вы можете сэкономить время и память, установив HessianApproximation опция для 'lbfgs'. Это приводит к fmincon
'interior-point' алгоритм использования малопамятного гессенского приближения.
Если в решатель введены производные (градиенты или якобианы), решатель может не сойтись, если производные неточны. Для получения дополнительной информации об использовании CheckGradients см. раздел Проверка достоверности градиентов или якобианцев.
Если используется большое произвольное ограничение (верхнее или нижнее), решатель может занять слишком много времени или даже не сойтись. Однако, если задать Inf или -Inf в качестве границы решатель может занимать меньше времени и может лучше сходиться.
Почему? Алгоритм внутренней точки может установить начальную точку в середину конечных границ. Или алгоритм внутренней точки может попытаться найти «центральный путь» на полпути между конечными границами. Поэтому большая произвольная граница может неправильно изменять размер этих компонентов. Напротив, бесконечные границы игнорируются для этих целей.
Второстепенная точка: некоторые решатели используют память для каждого ограничения, в основном через ограничение Гессен. Установка привязки к Inf или -Inf означает, что ограничения отсутствуют, поэтому используется меньше памяти, поскольку ограничение Гессена имеет меньшую размерность.
Подробную информацию об итерациях решателя можно получить с помощью функции вывода. Решатели вызывают функции вывода на каждой итерации. Функции вывода записываются с использованием синтаксиса, описанного в разделах Функция вывода и Синтаксис функции печати.
Пример использования функции вывода см. в разделе Функции вывода для Toolbox™ оптимизации.
Многие решатели имеют опции, которые могут изменить время решения, но не легко предсказуемыми способами. Как правило, Algorithm опция может оказать большое влияние на время решения.
Некоторые другие варианты могут оказать значительное влияние на время решения:
fmincon
'interior-point' алгоритм - Попробуйте установить BarrierParamUpdate опция для 'predictor-corrector'.
'SubproblemAlgorithm' вариант 'trust-region' или 'trust-region-reflective' алгоритм многих решателей - попробуйте установить 'SubproblemAlgorithm' кому 'factorization' вместо значения по умолчанию 'cg'.
coneprog - Для большой разреженной проблемы попробуйте установить LinearSolver опция для 'prodchol', 'schur', или 'normal'. Для плотной проблемы попробуйте установить LinearSolver опция для 'augmented'.
quadprog
'interior-point-convex' алгоритм или lsqlin
'interior-point' алгоритм - Попробуйте установить LinearSolver опция для 'sparse' или 'dense'.
Большие проблемы могут привести к исчерпанию памяти или времени MATLAB. Ниже приведены некоторые рекомендации по использованию меньшего объема памяти:
По возможности используйте масштабный алгоритм (см. «Масштабные и среднемасштабные алгоритмы»). Эти алгоритмы включают trust-region-reflective, interior-point, fminunc trust-region алгоритм, fsolve trust-region-dogleg алгоритм и Levenberg-Marquardt алгоритм. Напротив, active-set, quasi-newton, и sqp алгоритмы не масштабны.
Совет
Если используется масштабный алгоритм, используйте разреженные матрицы для линейных ограничений.
Используйте якобинскую функцию умножения или гессенскую функцию умножения. Примеры см. в разделах Функция умножения Якобиана с линейными наименьшими квадратами, Квадратичная минимизация с плотной, Структурированная гессенская и Минимизация с плотной структурированной гессенской, Линейные равенства.
Если у вас есть лицензия Parallel Computing Toolbox™, ваш решатель может работать быстрее, используя параллельные вычисления. Дополнительные сведения см. в разделе Параллельные вычисления.