Смешанное целочисленное линейное программирование (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)Задача «Оптимизировать интерактивный редактор» обеспечивает визуальный интерфейс для intlinprog.
linprog | mpsread | Оптимизировать | optimoptions | prob2struct