Почему linprog дает только одно значение x1 или x2, а не их комбинацию?

Привет, у меня есть следующий код, использующий linprog

for K = 1:3;
   for M = 1:3; 

      PV_output(:,:,K) = real(PV_power_output(:,:,K));
      PV =reshape(PV_output(:,:,1),8760,1); 
      WT_output(:,:,M) =  WT_power_output(:,:,M);
      WT = reshape(WT_output(:,:,1),8760,1);
    PVenergy = sum(sum(PV_output(:,:,1)));
   WTenergy = sum(sum(WT_power_output(:,:,1)));
   % Linprog
   f = [((CRF*CC_PV)/PVenergy)+OM_PV; ((CRF*CC_WT)/WTenergy)+OM_WT];
   A(:,:) = [-PV  -WT];
   b(:,:)  = -0.25.*Demand(:);
   lb = zeros(2,1);
 ub = [max_PV_area/PV_area; max_WT_area/WT_area]';
   [x(:,K,M), fval, exitflag] = linprog(f,A,b,[],[],lb,ub)
    end
end

Где PV = 8760x2, WT = 8760x2 и x = 2x1. Когда я запускаю эту программу, оптимизация сходится с выходным флагом 1, но я либо получаю значение x1 = 0, либо значение x2, равное определенному целому числу.

Почему вывод не дает смесь результатов (т. е. ненулевое значение как x1, так и x2?


person user643469    schedule 19.06.2012    source источник


Ответы (1)


Потому что решатель линейного программирования вернет решение в вершине многогранника, определяемой ограничениями. В такой вершине всегда будет лежать оптимальное решение.

person Community    schedule 19.06.2012
comment
то есть, другими словами, вы говорите, что линейная программа может иметь ненулевое значение только одного из своих x?? вот в чем моя проблема - person user643469; 19.06.2012
comment
Нет. Я этого не говорил. Но, видимо, linprog нашел решение. Это решение обычно находится в вершине, а поскольку нижние границы ваших переменных равны 0, решение именно таково — в вершине. - person ; 19.06.2012
comment
Я попытался изменить фунт на фунт = единицы (2,1) - в этом случае есть ненулевые x1 и x2, но оптимизация не сходится (флаг выхода = -2) - person user643469; 19.06.2012
comment
+1 и еще немного: в вырожденном случае у вас может быть бесконечно много решений между вершинами, но даже в этом случае вершины оптимальны. (Я уверен, что щепка об этом знает, возможно, он не хотел упоминать об этом.) - person Ali; 20.06.2012
comment
Да, я поленился ответить. Я предполагаю, что решатель активного набора всегда должен находить вершину даже в вырожденном случае, но это не обязательно должно быть верно для решателя внутренних точек. - person ; 20.06.2012