Неравенства, вытекающие из системы линейных неравенств / равенств в Matlab: численные аргументы или контрпример?

У меня есть система линейных неравенств / равенств для решения в Matlab, и я использую linprog, Поскольку некоторые из неравенств являются строгими, я использую очень маленький eps чтобы получить строгое включение, как описано здесь

Функция solve ниже решает систему после предоставления значения для eps,

function pj=solve(eps)

%Inequalities
%x(1)-x(5)-x(9)-x(10)-x(11)-x(15)-x(16)-x(17)-x(19)<=0;
%x(2)-x(6)-x(9)-x(12)-x(13)-x(15)-x(17)-x(18)-x(19)<=0;
%x(3)-x(7)-x(10)-x(12)-x(14)-x(16)-x(17)-x(18)-x(19)<=0;
%x(4)-x(8)-x(11)-x(13)-x(14)-x(15)-x(16)-x(18)-x(19)<=0;

%x(1)+x(2)-x(5)-x(9)-x(10)-x(11)-x(15)-x(16)-x(17)-x(19)-...
%              x(6)-x(12)-x(13)-x(18)<=0;
%x(1)+x(3)-x(5)-x(9)-x(10)-x(11)-x(15)-x(16)-x(17)-x(19)-...
%              x(7)-x(12)-x(14)-x(18)<=0;
%x(1)+x(4)-x(5)-x(9)-x(10)-x(11)-x(15)-x(16)-x(17)-x(19)-...
%             x(8)-x(13)-x(14)-x(18)<=0;
%x(2)+x(3)-x(6)-x(9)-x(12)-x(13)-x(15)-x(17)-x(18)-x(19)-...
%              x(7)-x(10)-x(14)-x(16)<=0;
%x(2)+x(4)-x(6)-x(9)-x(12)-x(13)-x(15)-x(17)-x(18)-x(19)-...
%              x(8)-x(11)-x(14)-x(16)<=0;
%x(3)+x(4)-x(7)-x(10)-x(12)-x(14)-x(16)-x(17)-x(18)-x(19)-...
%              x(8)-x(11)-x(13)-x(15)<=0;


%x(1)+x(2)+x(3)-x(5)-x(9)-x(10)-x(11)-x(15)-x(16)-x(17)-x(19)-...
%                  x(6)-x(12)-x(13)-x(18)-...
%                  x(7)-x(14)<=0;  
%x(1)+x(2)+x(4)-x(5)-x(9)-x(10)-x(11)-x(15)-x(16)-x(17)-x(19)-...
%                  x(6)-x(12)-x(13)-x(18)-...
%                  x(8)-x(14)<=0;   
%x(1)+x(3)+x(4)-x(5)-x(9)-x(10)-x(11)-x(15)-x(16)-x(17)-x(19)-...
%                  x(7)-x(12)-x(14)-x(18)-...
%                  x(8)-x(13)<=0; 
%x(2)+x(3)+x(4)-x(6)-x(9)-x(12)-x(13)-x(15)-x(17)-x(18)-x(19)-...
%                  x(7)-x(10)-x(14)-x(16)-...
%                  x(8)-x(11)<=0; 


%Equalities
%x(1)+x(2)+x(3)+x(4)=1;
%x(5)+x(6)+x(7)+x(8)+x(9)+x(10)+x(11)+x(12)+x(13)+x(14)+x(15)+x(16)+x(17)+x(18)+x(19)=1;


%I also want each component of x to be different from 1 and 0 (strictly included between 1 and 0 given the equalities constraints)
%x(1)>0 ---> x(1)>=eps ---> -x(1)<=-eps
%...
%x(19)>0
%x(1)<1 ---> x(1)<=1-eps
%...
%x(19)<1

%52 inequalities (14+19+19)
%2 equalities
%19 unknowns

A=[1  0  0  0  -1  0  0  0  -1  -1  -1  0  0  0  -1  -1  -1  0  -1;...
   0  1  0  0   0 -1  0  0  -1   0   0 -1 -1  0  -1   0  -1  -1 -1;...
   0  0  1  0   0  0 -1  0   0  -1   0 -1  0 -1   0  -1  -1  -1 -1;...
   0  0  0  1   0  0  0 -1   0   0  -1  0 -1 -1  -1  -1   0  -1 -1;...

   1  1  0  0  -1 -1  0  0  -1  -1  -1 -1 -1  0  -1  -1  -1  -1 -1;...
   1  0  1  0  -1  0 -1  0  -1  -1  -1 -1  0 -1  -1  -1  -1  -1 -1;...
   1  0  0  1  -1  0  0 -1  -1  -1  -1  0 -1 -1  -1  -1  -1  -1 -1;...
   0  1  1  0   0 -1 -1  0  -1  -1   0 -1 -1 -1  -1  -1  -1  -1 -1;...
   0  1  0  1   0 -1  0 -1  -1   0  -1 -1 -1 -1  -1  -1  -1  -1 -1;...
   0  0  1  1   0  0 -1 -1   0  -1  -1 -1 -1 -1  -1  -1  -1  -1 -1;...

   1  1  1  0  -1 -1 -1  0  -1  -1  -1 -1 -1 -1  -1  -1  -1  -1 -1;...
   1  1  0  1  -1 -1  0 -1  -1  -1  -1 -1 -1  0  -1  -1  -1  -1 -1;...
   1  0  1  1  -1  0 -1 -1  -1  -1  -1 -1 -1 -1  -1  -1  -1  -1 -1;...
   0  1  1  1   0 -1 -1 -1  -1  -1  -1 -1 -1 -1  -1  -1  -1  -1 -1;...

  -1  0  0  0   0  0  0  0   0   0   0  0  0  0   0   0   0   0  0;...
   0 -1  0  0   0  0  0  0   0   0   0  0  0  0   0   0   0   0  0;...
   0  0 -1  0   0  0  0  0   0   0   0  0  0  0   0   0   0   0  0;...
   0  0  0 -1   0  0  0  0   0   0   0  0  0  0   0   0   0   0  0;...
   0  0  0  0  -1  0  0  0   0   0   0  0  0  0   0   0   0   0  0;...
   0  0  0  0   0 -1  0  0   0   0   0  0  0  0   0   0   0   0  0;...
   0  0  0  0   0  0 -1  0   0   0   0  0  0  0   0   0   0   0  0;...
   0  0  0  0   0  0  0 -1   0   0   0  0  0  0   0   0   0   0  0;...
   0  0  0  0   0  0  0  0  -1   0   0  0  0  0   0   0   0   0  0;...
   0  0  0  0   0  0  0  0   0  -1   0  0  0  0   0   0   0   0  0;...
   0  0  0  0   0  0  0  0   0   0  -1  0  0  0   0   0   0   0  0;...
   0  0  0  0   0  0  0  0   0   0   0 -1  0  0   0   0   0   0  0;...
   0  0  0  0   0  0  0  0   0   0   0  0 -1  0   0   0   0   0  0;...
   0  0  0  0   0  0  0  0   0   0   0  0  0 -1   0   0   0   0  0;...
   0  0  0  0   0  0  0  0   0   0   0  0  0  0  -1   0   0   0  0;...
   0  0  0  0   0  0  0  0   0   0   0  0  0  0   0  -1   0   0  0;...
   0  0  0  0   0  0  0  0   0   0   0  0  0  0   0   0  -1   0  0;...
   0  0  0  0   0  0  0  0   0   0   0  0  0  0   0   0   0  -1  0;...
   0  0  0  0   0  0  0  0   0   0   0  0  0  0   0   0   0   0 -1;...

   1  0  0  0   0  0  0  0   0   0   0  0  0  0   0   0   0   0  0;...
   0  1  0  0   0  0  0  0   0   0   0  0  0  0   0   0   0   0  0;...
   0  0  1  0   0  0  0  0   0   0   0  0  0  0   0   0   0   0  0;...
   0  0  0  1   0  0  0  0   0   0   0  0  0  0   0   0   0   0  0;...
   0  0  0  0   1  0  0  0   0   0   0  0  0  0   0   0   0   0  0;...
   0  0  0  0   0  1  0  0   0   0   0  0  0  0   0   0   0   0  0;...
   0  0  0  0   0  0  1  0   0   0   0  0  0  0   0   0   0   0  0;...
   0  0  0  0   0  0  0  1   0   0   0  0  0  0   0   0   0   0  0;...
   0  0  0  0   0  0  0  0   1   0   0  0  0  0   0   0   0   0  0;...
   0  0  0  0   0  0  0  0   0   1   0  0  0  0   0   0   0   0  0;...
   0  0  0  0   0  0  0  0   0   0   1  0  0  0   0   0   0   0  0;...
   0  0  0  0   0  0  0  0   0   0   0  1  0  0   0   0   0   0  0;...
   0  0  0  0   0  0  0  0   0   0   0  0  1  0   0   0   0   0  0;...
   0  0  0  0   0  0  0  0   0   0   0  0  0  1   0   0   0   0  0;...
   0  0  0  0   0  0  0  0   0   0   0  0  0  0   1   0   0   0  0;...
   0  0  0  0   0  0  0  0   0   0   0  0  0  0   0   1   0   0  0;...
   0  0  0  0   0  0  0  0   0   0   0  0  0  0   0   0   1   0  0;...
   0  0  0  0   0  0  0  0   0   0   0  0  0  0   0   0   0   1  0;...
   0  0  0  0   0  0  0  0   0   0   0  0  0  0   0   0   0   0  1]; %52x19

b=[zeros(1,14) -eps*ones(1,19) (1-eps)*ones(1,19)]; %1x52

Aeq=[1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;...
     0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]; %2x19
beq=[1 1]; %1x2

f=zeros(1,19); %1x19

x=linprog(f,A,b,Aeq,beq); 

if ~isempty(x)
    pj=x;
else
    pj=NaN;


end

Я верю (но я не знаю, как показать это аналитически), что неравенства / равенства, которые я вложил в linprogr алгоритм внутри функции solve таковы, что решение, которое производит Matlab, будет удовлетворять другому неравенству, как указано ниже:

clear
rng default

%solve system 
p1=solve(unifrnd(0,0.05));

%solve system
p2=solve(unifrnd(0,0.05));


%solve system
p3=solve(unifrnd(0,0.05));



if ~isnan(p1) & ~isnan(p2) & ~isnan(p3) %#ok<AND2>

%LHS
lhs=(p1(2)+p1(3)+p1(4))*1*1+...
     p1(1)*(p2(1)+p2(4))*1+...
     p1(1)*p2(2)*(p3(2)+p3(3)+p3(4))+...
     p1(1)*p2(3)*(p3(1)+p3(2)+p3(3)); 


%RHS 
 rhs=(1-(p1(5)+p1(9)+p1(10)+p1(11)+p1(15)+p1(16)+p1(17)+p1(19)))*...
      1*...
      1+... 
      ... +
     (p1(5)+p1(9)+p1(10)+p1(11)+p1(15)+p1(16)+p1(17)+p1(19))*...
     (p2(5)+p2(8)+p2(11))*...
      1+...
      ... +
     (p1(5)+p1(9)+p1(10)+p1(11)+p1(15)+p1(16)+p1(17)+p1(19))*...
     (p2(7)+p2(10)+p2(14)+p2(16))*...
     ((p3(5)+p3(9)+p3(10)+p3(17))+(p3(6)+p3(7)+p3(12)))+...
     ... +
     (p1(5)+p1(9)+p1(10)+p1(11)+p1(15)+p1(16)+p1(17)+p1(19))*...
     (p2(6)+p2(9)+p2(13)+p2(15))*...
     ((p3(8)+p3(13)+p3(14)+p3(18))+(p3(6)+p3(7)+p3(12)))+...
     ... +
     (p1(5)+p1(9)+p1(10)+p1(11)+p1(15)+p1(16)+p1(17)+p1(19))*...
     (p2(12)+p2(17)+p2(19))*...
     (p3(6)+p3(7)+p3(12)); 

check=(lhs>=rhs); %I expect check to be 1
else
end

Я считаю, что решения p1,p2,p3 будет доставлено check=1 ,

Вопрос: Как уже упоминалось выше, я не знаю, как показать это аналитически; Есть ли способ привести удовлетворительный числовой аргумент? Или вы можете убить мою веру и предложить решения p1,p2,p3 доставки check=0?

1 ответ

Решение

Что вы можете сделать, это расширить задачу с 19 параметров до 3x19 = 57 параметров, написать функцию, вычисляющую разницу между lhs и rhs, и попытаться минимизировать эту функцию с учетом ограничений. Если вы опускаетесь ниже нуля, это означает, что rhs> lhs. Расширение ограничений:

ACell = repmat({A}, 1, 3); % diagonal matrix with A repeated 3 times on diagonal
A = blkdiag(ACell{:}); % 156x57
b = [b b b]; % 1x156
AeqCell = repmat({Aeq}, 1, 3);
Aeq = blkdiag(AeqCell{:}); % 6x57
beq = [beq beq beq]; % 1x6

Функция для расчета ошибки:

function error = errorFun( p )

p1 = p(1:19);
p2 = p(20:38);
p3 = p(39:57);

if ~isnan(p1) & ~isnan(p2) & ~isnan(p3) %#ok<AND2>

    lhs= (...); 
    rhs= (...);
    error= lhs - rhs;

else
    error= 1;
end
end

Теперь вы можете использовать некоторый инструмент оптимизации, чтобы найти минимум errorFun, например, fmincon:

x = fmincon(@errorFun, zeros(57, 1), A, b, Aeq, beq, [], [], [], options);

Решение, которое я нашел, было положительным, что означает, что ваше предположение должно быть правильным.

Другие вопросы по тегам