Смешано-целочисленное линейное программирование (MILP)
Смешано-целочисленный линейный решатель программирования.
Находит минимум проблемы заданным
f, x, intcon, b, beq, lb и ub являются векторами, и A и Aeq являются матрицами.
Можно задать f, intcon, lb и ub как векторы или массивы. Смотрите Матричные аргументы.
intlinprog применяется только к основанному на решателе подходу. Для обсуждения двух подходов оптимизации смотрите, Сначала Выбирают Problem-Based or Solver-Based Approach.
использует 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 не позволяет компоненты проблемы, такие как коэффициенты в fA, или ub, превысить 1e25 в абсолютном значении. При попытке запустить intlinprog с такой проблемой, 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)linprog | mpsread | optimoptions | prob2struct