Основанные на проблеме алгоритмы оптимизации

Внутренне, solve функция решает задачи оптимизации путем вызова решателя. Для решателя по умолчанию для проблемы и поддерживаемых решателей для проблемы, смотрите 'solver' аргумент.

Перед solve может вызвать решатель, проблемы должны быть преобразованы в форму решателя, любого solve или некоторые другие присоединенные функции или объекты. Это преобразование влечет за собой, например, линейные ограничения, имеющие матричное представление, а не переменное выражение оптимизации.

Первый шаг в алгоритме происходит, когда вы помещаете выражения оптимизации в проблему. OptimizationProblem объект имеет внутренний список переменных, используемых в его выражениях. Каждая переменная имеет линейный индекс в выражении и размер. Поэтому переменные задачи имеют подразумеваемую матричную форму. prob2struct функция выполняет преобразование от проблемной формы до формы решателя. Для примера смотрите, Преобразуют проблему в Структуру.

Для нелинейных задач оптимизации, solve использование automatic differentiation, чтобы вычислить градиенты целевой функции и нелинейных ограничительных функций. Эти производные применяются, когда цель и ограничительные функции состоят из Поддерживаемых Операций для Переменных и выражений Оптимизации и не используют fcn2optimexpr функция. Когда автоматическое дифференцирование не применяется, решатели оценивают производные с помощью конечных разностей. Для получения дополнительной информации автоматического дифференцирования, смотрите Автоматический Фон Дифференцирования.

Для значения по умолчанию и позволенных решателей, что solve вызовы, в зависимости от проблемной цели и ограничений, смотрите 'solver'. Можно заменить значение по умолчанию при помощи 'solver' аргумент пары "имя-значение" при вызове solve.

Для алгоритма, что intlinprog использование, чтобы решить задачи MILP, см. intlinprog Алгоритм. Для алгоритмов, что linprog использование, чтобы решить задачи линейного программирования, см. Линейные Алгоритмы Программирования. Для алгоритмов, что quadprog использование, чтобы решить задачи квадратичного программирования, см. Алгоритмы Квадратичного программирования. Для линейного или алгоритмов решателя нелинейного метода наименьших квадратов, смотрите Наименьшие квадраты (Подбор кривой Модели) Алгоритмы. Для нелинейных алгоритмов решателя см. Неограниченные Нелинейные Алгоритмы Оптимизации и Ограниченные Нелинейные Алгоритмы Оптимизации.

Для нелинейного решения уравнения, solve внутренне представляет каждое уравнение как различие между левыми и правыми сторонами. То solve попытки минимизировать сумму квадратов компонентов уравнения. Для алгоритмов для решения нелинейных систем уравнений смотрите, что уравнение Решает Алгоритмы. Когда проблема также имеет границы, solve вызовы lsqnonlin минимизировать сумму квадратов компонентов уравнения. Смотрите Наименьшие квадраты (Подбор кривой Модели) Алгоритмы.

Примечание

Если ваша целевая функция является суммой квадратов, и вы хотите solve чтобы распознать его как таковой, запишите его как любой norm(expr)^2 или sum(expr.^2), и не как expr'*expr или любая другая форма. Внутренний синтаксический анализатор распознает сумму квадратов только, когда представлено квадратом нормы или явные суммы квадратов. Для получения дополнительной информации смотрите Целевую функцию Записи для Основанных на проблеме Наименьших квадратов. Для примера смотрите Неотрицательную линейную задачу для метода наименьших квадратов, Основанную на проблеме.

Смотрите также

| |

Похожие темы