Смешано-целочисленное линейное программирование (MILP)
Смешано-целочисленный линейный решатель программирования.
Находит минимум проблемы заданным
f, x, intcon, b, beq, lb и ub являются векторами, и A и Aeq являются матрицами.
Можно задать f, intcon, lb и ub как векторы или массивы. Смотрите Матричные аргументы.
intlinprog
применяется только к основанному на решателе подходу. Для обсуждения двух подходов оптимизации смотрите, Сначала Выбирают Problem-Based or Solver-Based Approach.
x = intlinprog(f,intcon,A,b)
x = intlinprog(f,intcon,A,b,Aeq,beq)
x = intlinprog(f,intcon,A,b,Aeq,beq,lb,ub)
x = intlinprog(f,intcon,A,b,Aeq,beq,lb,ub,x0)
x = intlinprog(f,intcon,A,b,Aeq,beq,lb,ub,x0,options)
x = intlinprog(problem)
[x,fval,exitflag,output]
= 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
выдает ошибку.
В настоящее время вы не можете запустить 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