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

Внутренне, solve функция решает задачи оптимизации путем вызова решателя:

  • linprog для линейных объективных и линейных ограничений

  • intlinprog для линейных объективных и линейных ограничений и целочисленных ограничений

  • quadprog для квадратичных объективных и линейных ограничений

  • lsqlin или lsqnonneg для линейного метода наименьших квадратов с линейными ограничениями

  • lsqcurvefit или lsqnonlin для нелинейного метода наименьших квадратов со связанными ограничениями

  • fminunc для проблем без любых ограничений (даже переменные границы) и с общей нелинейной целевой функцией

  • fmincon для проблем с нелинейным ограничением, или с общей нелинейной целью и по крайней мере одним ограничением

  • fzero для скалярного нелинейного уравнения

  • lsqlin для систем линейных уравнений, с или без границ

  • fsolve для систем нелинейных уравнений без ограничений

  • lsqnonlin для систем нелинейных уравнений с границами

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

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

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

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

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

Примечание

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

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

| |

Похожие темы