Смешано-целочисленное линейное программирование (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 5intlinprog заменяет 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