Смешано-целочисленное линейное программирование (MILP)
Смешано-целочисленный решатель линейного программирования.
Находит минимум задачи, заданной в
f, x, intcon, b, beq, lb и ub являются векторами, а A и Aeq являются матрицами.
Можно задать f, intcon, lb и ub как векторы или массивы. См. матричные аргументы.
Примечание
intlinprog
применяется только к основанному на решателе подходу. Для обсуждения двух подходов оптимизации смотрите Первый выбор Основанного на проблеме или Основанный на решателе подход.
использует x
= intlinprog(problem
)problem
структура для инкапсуляции всех входов решателя. Можно импортировать problem
структура из файла MPS с использованием mpsread
. Можно также создать problem
структура из OptimizationProblem
объект при помощи prob2struct
.
Часто некоторые якобы целочисленные компоненты решения x(intCon)
не являются точно целыми числами. intlinprog
рассматривает как целые числа все значения решения в IntegerTolerance
целого числа.
Чтобы округлить все предполагаемые целые числа, чтобы быть в точности целыми, используйте round
функция.
x(intcon) = round(x(intcon));
Внимание
Округление решений может привести к тому, что решение станет недопустимым. Проверяйте допустимость после округления:
max(A*x - b) % See if entries are not too positive, so have small infeasibility max(abs(Aeq*x - beq)) % See if entries are near enough to zero max(x - ub) % Positive entries are violated bounds max(lb - x) % Positive entries are violated bounds
intlinprog
не требует, чтобы компоненты решения были целочисленными, когда их абсолютные значения превышают 2.1e9
. Когда ваше решение имеет такие компоненты, intlinprog
предупреждает вас. Если вы получили это предупреждение, проверьте решение, чтобы увидеть, являются ли якобы целочисленные компоненты решения близкими к целым числам.
intlinprog
не допускает компоненты задачи, такие как коэффициенты в f
, A
, или ub
, чтобы превысить 1e25
в абсолютном значении. Если вы пытаетесь запустить intlinprog
с такой проблемой, intlinprog
выдает ошибку.
Чтобы задать двоичные переменные, установите переменные в целых числах intcon
, и дать им более низкие границы 0
и верхние границы 1
.
Сохраните память, задав разреженные линейные матрицы ограничений A
и Aeq
. Однако вы не можете использовать разреженные матрицы для b
и beq
.
Если вы включаете x0
аргумент, intlinprog
использует это значение в 'rins'
и управляемую эвристику погружения, пока она не найдет лучшую целочисленно-допустимую точку. Так что, когда вы предоставляете x0
, вы можете получить хорошие результаты путем установки 'Heuristics'
опция для 'rins-diving'
или другой параметр, который использует 'rins'
.
Чтобы предоставить логические индексы для целочисленных компонентов, то есть двоичный вектор с 1
обозначая целое число, преобразуйте в intcon
форма использование find
. Для примера,
logicalindices = [1,0,0,1,1,0,0]; intcon = find(logicalindices)
intcon = 1 4 5
intlinprog
заменяет bintprog
. Как обновить старые bintprog
код для использования intlinprog
, внести следующие изменения:
Задайте intcon
на 1:numVars
, где numVars
- количество переменных в вашей задаче.
Задайте lb
на zeros(numVars,1)
.
Задайте ub
на ones(numVars,1)
.
Обновляйте все соответствующие опции. Использовать optimoptions
чтобы создать опции для intlinprog
.
Измените свой вызов на bintprog
следующим образом:
[x,fval,exitflag,output] = bintprog(f,A,b,Aeq,Beq,x0,options)
% Change your call to:
[x,fval,exitflag,output] = intlinprog(f,intcon,A,b,Aeq,Beq,lb,ub,x0,options)
Задача Optimize Live Editor обеспечивает визуальный интерфейс для intlinprog
.
linprog
| mpsread
| Оптимизировать | optimoptions
| prob2struct