Смешано-целочисленное линейное программирование (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 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