n_bs = 2;
n_files = 2;
canonical_mat = cell(8,1);
canonical_mat{1} = [1,0;0,1];
canonical_mat{2} = [0,1;1,0];
canonical_mat{3} = [1,1;1,0];
canonical_mat{4} = [1,1;0,1];
canonical_mat{5} = [1,0;1,1];
canonical_mat{6} = [0,1;1,1];
canonical_mat{7} = [1,1;1,1];
canonical_mat{8} = [0,0;0,0];
delay_mat = [3,3,2,2,2,2,1,100];
x = binvar(n_files,n_bs);
z = binvar(n_files,1);
y = binvar(n_files,n_bs);
C0 = [];
for i = 1:n_files
C0 = [C0, y(i,:) >= 1-z(i), y(i,:) >= x(i,:), implies(z(i),sum(x(i,:))>=1)];
end
obj = 0;
for ptr = 1:length(canonical_mat)
cur_mat = canonical_mat{ptr};
prod_ = 1;
for i = 1:n_files
for j = 1:n_bs
prod_ = prod_ * ((cur_mat(i,j)&y(i,j)) | ((1-cur_mat(i,j))&(1-y(i,j))));
end
end
obj = obj + delay_mat(ptr) * prod_;
end
ops = sdpsettings('solver','cplex');
sol = optimize(C0,obj,ops);
if sol.problem == 0
fprintf('\n value of x: \n');
disp(value(x));
fprintf('\n value of z: \n');
disp(value(z));
fprintf('\n value of y: \n');
disp(value(y));
end
prod_ * ((cur_mat(i,j)&y(i,j)) | ((1-cur_mat(i,j))&(1-y(i,j))))
prod_ = prod_ & ((cur_mat(i,j)&y(i,j)) | ((1-cur_mat(i,j))&(1-y(i,j))));