Существует два различных подхода Optimization Toolbox™ для решения одно-объективных задач оптимизации. В этом разделе описываются основанный на проблеме подход. Основанный на решателе Setup Задачи оптимизации описывает основанный на решателе подход.
Чтобы решить задачу оптимизации, выполните следующие шаги.
Создайте проблемный объект при помощи optimproblem
. Проблемный объект является контейнером, который вы заполняете с ограничительными выражениями и целью. Эти выражения задают проблему, наряду с границами, которые существуют в проблемных переменных.
Например, создайте проблему максимизации.
prob = optimproblem('ObjectiveSense','maximize');
Создайте названные переменные при помощи optimvar
. Переменная оптимизации является символьной переменной, которую вы используете, чтобы описать проблемную цель и ограничения. Включайте любые границы в определения переменной.
Например, создайте 15 3 массив бинарных переменных под названием 'x'
.
x = optimvar('x',15,3,'Type','integer','LowerBound',0,'UpperBound',1);
Задайте целевую функцию в проблемном объекте как выражение в именованных переменных.
Если у вас есть нелинейная функция, которая не является многочленным или рациональным выражением, преобразуйте его в выражение оптимизации при помощи fcn2optimexpr
. Смотрите Преобразовывают Нелинейную Функцию в Выражение Оптимизации.
Например, примите, что у вас есть действительный матричный f
, одного размера как матрица переменных x
, и цель является суммой записей во времена f
соответствующие переменные x
.
prob.Objective = sum(sum(f.*x));
Задайте ограничения в проблемном объекте как выражения в именованных переменных.
Если у вас есть нелинейная функция, которая не является многочленным или рациональным выражением, преобразуйте его в выражение оптимизации при помощи fcn2optimexpr
. Смотрите Преобразовывают Нелинейную Функцию в Выражение Оптимизации.
Например, примите, что сумма переменных в каждой строке x
должна быть один, и сумма переменных в каждом столбце должна быть не больше, чем один.
onesum = sum(x,2) == 1; vertsum = sum(x,1) <= 1; prob.Constraints.onesum = onesum; prob.Constraints.vertsum = vertsum;
Решите задачу оптимизации при помощи solve
.
sol = solve(prob);
В дополнение к этим основным шагам можно рассмотреть проблемное определение прежде, чем решить проблему при помощи showproblem
и связанных функций. Установите опции для solve
при помощи optimoptions
, как объяснено в Решателе Значения по умолчанию Изменения или Опциях.
Для основного смешано-целочисленного линейного примера программирования смотрите Смешано-целочисленные Линейные Основы Программирования: основанный на проблеме или видео версия Решают Смешано-целочисленную Линейную Проблему программирования с помощью Моделирования Оптимизации. Для нелинейного примера смотрите, Решают Ограниченную Нелинейную проблему, Основанную на проблеме. Для более обширных примеров смотрите Основанную на проблеме Нелинейную Оптимизацию, Линейное Программирование и Смешано-целочисленное Линейное Программирование или Квадратичное программирование.
fcn2optimexpr
| optimproblem
| optimvar
| solve