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