https://github.com/BrianCoyle/TPMScProject2017
Raw File
Tip revision: 6267b1ff72d4be26cba7bedf9764b4ba1d5c1305 authored by BrianCoyle on 09 August 2017, 17:14:31 UTC
Add files via upload
Tip revision: 6267b1f
GenerateSteeringFunctionalTwoRounds.m
function [F] = GenerateSteeringFunctionalTwoRounds(sigma)


%This function finds the steering weight of an assemblage via the dual
%problem, which also calculates the steering inequality, F which is maximally
%violated by the assemblage sigma{2}. It is based from steeringWeight.m in
%''Steering: a review with focus on semidefinite programming'', but adapted for two rounds of measurements


[dA(1),dA(1),ob(1),mb(1)] = size(sigma{1});
[dA(2),dA(2),~,ob(2),~, mb(2)] = size(sigma{2});

% Number of determinstic probability distributions is Ndetone x Ndettwo
Ndetone = ob(1)^mb(1);
Ndettwo = ob(2)^mb(2);

%GenerateDeterministicTwoRounds generates an array of the deterministic
%probability distributions that Eve can create
DeterministicTwoRound = GenerateDeterministicTwoRounds(ob,mb,dA);

%Solve SDP to find steering weight and Dual variables, F
cvx_begin sdp quiet
    
    variable F(dA(2),dA(2),ob(1),ob(2),mb(1),mb(2)) hermitian semidefinite
    % members of the steering functional


    maximise 1 - real(sum(reshape(F.*conj(sigma{2}),1,[])))
    % max 1 - sum_b1b2y1y2 trace(F_b1b2|y1y2*sigma_b1b2|y1y2)
    
    subject to
    
    %Constraint in SDP that checks given assemblage, sigma, against all
    %possible deterministic strategies.
    for i = 1:Ndetone
        for j = Ndettwo
               
    sum(sum(sum(sum(DeterministicTwoRound(:,:,:,:,:,:,i,j).*F,3),4),5),6) ...
        -eye(dA(2)) == hermitian_semidefinite(dA(2)); 
      
     
        end
    end

cvx_end
end
back to top