Смешано-целочисленное линейное программирование (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
не позволяет компоненты проблемы, такие как коэффициенты в f
A
, или 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 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)
linprog
| mpsread
| optimoptions
| prob2struct