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

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

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

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

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

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

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

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

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

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

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

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

Примечание

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

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

| |

Похожие темы