Постановка задачи линейного программирования - PullRequest
0 голосов
/ 12 апреля 2011


Это может быть довольно простой вопрос для тех, кто знает линейное программирование.
В большинстве проблем, которые я видел на LP, есть что-то похожее на следующий формат

max            3x+4y  
subject to     4x-5y = -34
               3x-5y = 10      (and similar other constraints)

Другими словами, у нас одинаковое количество неизвестных в целевых и ограничительных функциях.

Моя проблема в том, что у меня есть одна неизвестная переменная в целевой функции и 3 неизвестных в функциях ограничения.
Проблема в следующем

Objective function:  min w1
subject to:
w1 + 0.1676x + 0.1692y >= 0.1666 
w1 - 0.1676x - 0.1692y >= -0.1666 
w1 + 0.3039x + 0.3058y >= 0.3  
w1 - 0.3039x - 0.3058y >= -0.3  
x + y = 1
x >= 0
y >= 0

Как видно, у целевой функции есть только одно неизвестное, т. Е. w1 , а у функций ограничения 3 (или, скажем, 2) неизвестных, т. Е. w1, x и y. .
Может кто-нибудь, пожалуйста, подскажите мне, как решить эту проблему, особенно с помощью инструментов линейного программирования R или MATLAB.

Ответы [ 2 ]

4 голосов
/ 12 апреля 2011

Ваша цель включает только w1, но вы все равно можете просмотреть ее как функцию w1,x,y, где коэффициент w1 равен 1, а коэффициенты x,y равны нулю:

min w1*1 + x*0 + y*0

Как только вы увидите это, вы можете сформулировать его обычным образом как «стандартный» LP.

2 голосов
/ 15 сентября 2011

Прасад правильный.Количество неизвестных в целевой функции не имеет значения.Вы можете просмотреть неизвестные, которые отсутствуют как имеющие нулевой коэффициент.

Этот LP легко решается с помощью функции Matlab linprog.Подробнее о linprog см. Документацию здесь .

% We lay out the variables as X = [w1; x; y]
c = [1; 0; 0]; % The objective is w1 = c'*X
% Construct the constraint matrix
% Inequality constraints will be written as Ain*X <= bin
%       w1      x        y
Ain = [ -1 -0.1676 -0.1692;
        -1  0.1676  0.1692;
        -1 -0.3039 -0.3058;  
        -1  0.3039  0.3058; 
      ];
bin =  [ -0.166; 0.166; -0.3; 0.3];

% Construct equality constraints Aeq*X == beq
Aeq = [ 0 1 1];
beq = 1;

%Construct lower and upper bounds l <= X <= u
l = [ -inf; 0; 0];
u = inf(3,1);

% Solve the LP using linprog
[X, optval] = linprog(c,Ain,bin,Aeq,beq,l,u);

% Extract the solution
w1 = X(1);
x  = X(2);
y  = X(3); 
...