У меня проблемы с определением моей проблемы оптимизации в MATLAB.

Я пытаюсь выразить 7 двоичных переменных решения. но сумма первых 3 переменных двоичного разложения не может быть больше 1, а сумма последних 4 переменных двоичного решения не может быть больше 1.

A = [1,1,1,0,0,0,0;...
    0,0,0,1,1,1,1];
b = [1;1];

% objective function 
f = [0.1, 0.5, 0.2, 0.2, -2.0, 0.2, 0.6];

lb = zeros(7,1);
ub = ones(7,1); % Enforce all of the decision variables to be binary
intcon = [];  % all of my variables are binary, so I assume this should be blank.

x = intlinprog(f,intcon,A,b,lb,ub);

Я хочу, чтобы все переменные решения были двоичными, поэтому я включил эти строки:

lb = zeros(7,1);
ub = ones(7,1); % Enforce all of the decision variables to be binary 
intcon = [];  % all of my variables are binary, so I assume this should be blank.

Кроме того, у меня нет ограничений на равенство, поэтому я не включил Aeq и beq в приведенную выше задачу. но когда я пытаюсь запустить решатель без таких параметров, как x = intlinprog(f,intcon,A,b,lb,ub);, он сообщает мне

Error using intlinprog (line 123)
The number of columns in Aeq must be the same as the number of elements of f.

Но если у меня нет ограничений на равенство, как я могу это определить?

Вот документация: https://www.mathworks.com /help/optim/ug/intlinprog.html#bts3gkc-2 Пример вверху страницы показывает, что он может вызывать x = intlinprog(f,intcon,A,b) без использования Aeq и beq, поэтому я знаю, что это возможно.

Спасибо.

0
makansij 12 Мар 2018 в 04:36

1 ответ

Лучший ответ

Вы не можете опустить Aeq и Beq, если вы указываете ограничения нижней и верхней границы, потому что эта функция использует позиционные параметры.

Однако вы можете передавать пустые матрицы, что приводит к нулевым ограничениям равенства:

x = intlinprog(f,intcon,A,b,[],[],lb,ub);
1
Ben Voigt 12 Мар 2018 в 05:16