Решатели могут занять время по различным причинам. Чтобы диагностировать причину или включить более быстрое решение, используйте один или несколько следующих методов.
Установите 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
средние значения там не являются никаким ограничением, таким образом, существует меньше памяти в использовании, потому что ограничительный Гессиан имеет более низкую размерность.
Можно получить подробную информацию об итерациях решателя с помощью выходной функции. Решатели вызывают выходные функции при каждой итерации. Вы пишете выходные функции с помощью синтаксиса, описанного в Синтаксисе Выходной функции и Функции построения графика.
Для примера использования выходной функции смотрите Выходные функции для Optimization Toolbox™.
Много решателей имеют опции, которые могут изменить время решения, но не легко предсказуемыми способами. Как правило, Algorithm
опция может оказать большое влияние на время решения.
Некоторые другие опции могут оказать значительное влияние на время решения:
fmincon
'interior-point'
алгоритм — установка Try BarrierParamUpdate
опция к 'predictor-corrector'
.
'SubproblemAlgorithm'
опция 'trust-region'
или 'trust-region-reflective'
алгоритм многих решателей — установка Try 'SubproblemAlgorithm'
к 'factorization'
вместо 'cg'
по умолчанию.
coneprog
— Для большой разреженной проблемы попытайтесь установить LinearSolver
опция к 'prodchol'
Шур
, или 'normal'
. Поскольку плотная проблема пытается установить LinearSolver
опция к 'augmented'
.
quadprog
'interior-point-convex'
алгоритм или lsqlin
'interior-point'
алгоритм — установка Try 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™, ваш решатель может запустить более быстрые параллельные вычисления использования. Для получения дополнительной информации смотрите Параллельные вычисления.