Я хочу решить смешанную целочисленно-квадратичную программу с линейными ограничениями, используя набор инструментов OPTI в MATLAB. Я хочу, чтобы некоторые из моих переменных решения были непрерывными, а некоторые переменные решения были бинарными. Как это указать?
Смешанное целочисленное квадратичное программирование с использованием Opti Toolbox в MATLAB
Ответы (1)
Я хочу, чтобы некоторые из моих переменных решения были непрерывными, а некоторые переменные решения были бинарными. Как это указать?
Способ указать, какие переменные относятся к какому типу, показан на внизу этой страницы.
Цитата:
Пример 5. Указание длинных строк целочисленных переменных
Распространенный вопрос, который мы получаем, заключается в том, как указать xtype, когда у вас много целочисленных переменных. Предполагая, что ваши переменные упорядочены (т. е. непрерывные, целые и двоичные переменные находятся в последовательных группах), в следующем примере показан способ их ввода.
% Objective nC = 10; %Number of Continuous Variables nI = 10; %Number of Integer Variables nB = 10; %Number of Binary Variables % Build xtype vector xtype = [repmat('C',1,nC),repmat('I',1,nI),repmat('B',1,nB)]
Таким образом, xtype
— это вектор с таким же количеством компонентов, как и переменных, и каждый компонент определяет тип каждой переменной, который может быть
- Непрерывный (
'C'
) - Целое число (
'I'
) - Двоичный (
'B'
)
После указания xtype
вам необходимо передать его объекту OPTI, как показано в этот пример:
% Objective H = [1 -1; -1 2]; %Objective Function (min 0.5x'Hx + f'x) f = -[2 6]'; % Constraints A = [1,1; -1,2; 2, 1]; %Linear Inequality Constraints (Ax <= b) b = [2;2;3]; lb = [0;0]; %Bounds on x (lb <= x) % Integer Constraints - We do it as above (using repmat) in your case xtype = 'IC'; % Create OPTI Object Opt = opti('qp',H,f,'ineq',A,b,'lb',lb,'xtype',xtype) % Solve the MIQP problem [x,fval,exitflag,info] = solve(Opt)
Надеюсь, это поможет!