N = 4;
c0 = (1:N^2)';
c = zeros(N);
M = N^2+2;
BIG = N^2*(1 + N^2);
X = sdpvar(N^2,N^2,'full');
Y = sdpvar(M,M,'full');
%Небольшой трюк с заполнением матрицы L, чтобы она была класса sdpvar, а не
%double
L_ = zeros(M);
L_(1, 2) = 1;
L = repmat(BIG, M) + L_*(X(1,:)*c0);
%--
cnt = 1;
for i = 1:N
if (rem(i,2)>0)
for j=1:N
c(j,i) = cnt;
cnt = cnt + 1;
end
else
for j=N:-1:1
c(j,i) = cnt;
cnt = cnt + 1;
end
end
end
%c(i,j) = X(j + N*(i-1),:)*c0;
for i = 1:N
L(1, 2+(i-1)*N) = X(1 + N*(i-1),:)*c0;
L(1+N+(i-1)*N, end) = 0;
end
for i = 1:N
for j=1:N-1
for i_temp = i-1:1:i+1
if ((i_temp>=1)&&(i_temp<=N))
L(1+j+(i-1)*N, 1+(j+1)+(i_temp-1)*N) = X(j + 1 + N*(i_temp-1),:)*c0;
end
end
end
end
constr_X = [0<=X(:)<=1, sum(X,1)==1, sum(X,2)==1, uncertain(X)];
constr_Y = [0<=Y(:), sum(Y(1,:))==1, sum(Y(:,1))==0, sum(Y(end,:))==0, sum(Y(:,end))==1];
for i = 2:M-1
constr_Y = [constr_Y, sum(Y(i,:)) - sum(Y(:,i))==0];
end
obj = trace(L'*Y);
[rconstr, robj] = robustmodel([constr_X, constr_Y], obj, sdpsettings('robust.lplp','duality'));
optimize(rconstr, robj);
value(robj)%Выводим значение целевой функции