Чтобы решить нелинейную задачу оптимизации с целочисленными ограничениями с помощью подхода, основанного на проблеме, следуйте за одним из этих процессов:
Используйте решатель Global Optimization Toolbox, который обрабатывает целочисленные ограничения, ga
(Global Optimization Toolbox) или surrogateopt
(Global Optimization Toolbox).
Преобразуйте проблему в использование структуры prob2struct
, и затем используйте внешний решатель.
Иногда, можно итеративно аппроксимировать нелинейное использование целочисленной задачи intlinprog
. Для примера этого подхода смотрите Смешано-целочисленную Оптимизацию Портфеля Квадратичного программирования: основанный на проблеме.
Решатель по умолчанию для нелинейных проблем с целочисленными ограничениями ga
(Global Optimization Toolbox). У вас должна быть лицензия Global Optimization Toolbox на solve
функция, чтобы решить задачу с помощью также ga
или surrogateopt
.
Когда вы используете внешний решатель и вызов prob2struct
, вы можете должны быть задать Solver
аргумент значения имени.
Примечание
Для нелинейной проблемы с целочисленными ограничениями, если у вас нет лицензии Global Optimization Toolbox, необходимо включать Solver
аргумент.
Даже если у вас есть лицензия Global Optimization Toolbox, вы все еще можете должны быть задать Solver
аргумент значения имени. Внешний решатель может ожидать, что структура задачи будет в форме, которая соответствует конкретному решателю. Например, для проблемы с линейными и целочисленными ограничениями и квадратичной целевой функцией, внешний решатель может потребовать, чтобы целевая функция была описана как матрицы H и f в выражении ½xTHx + fTx. Чтобы получить эти матрицы, задайте 'quadprog'
решатель при помощи Solver
аргумент значения имени.
problem = prob2struct(prob,"Solver","quadprog");
Если вы не задаете quadprog
решатель, получившаяся структура задачи может содержать указатель на функцию для целевой функции, а не матриц. В любом случае получившаяся структура задачи содержит целочисленные переменные в intcon
поле .
Примечание
Для нелинейной проблемы с целочисленными ограничениями, когда вы задаете решатель, который не обрабатывает целочисленные ограничения, prob2struct
выдает предупреждение, что решатель не может решить получившуюся структуру. Если вы затем пытаетесь решить задачу путем вызова решателя на структуре задачи, решатель игнорирует целочисленные ограничения. В этом случае решение не является решением исходной проблемы, но является вместо этого решением проблемы без целочисленных ограничений.