Rev | Line | |
---|
[37] | 1 | randn('state',8342182); |
---|
| 2 | n = 5; |
---|
| 3 | m = 10; |
---|
| 4 | |
---|
| 5 | S = randn(n,m)>0; |
---|
| 6 | y = sign(randn(n,m)).*S; |
---|
| 7 | |
---|
| 8 | % 1) Standard primal model, very inefficient |
---|
| 9 | yalmip('clear') |
---|
| 10 | X = sdpvar(n,m); |
---|
| 11 | F = set(X(S).*y(S)>1); |
---|
| 12 | obj = tracenorm(X); |
---|
| 13 | solvesdp(F,obj); |
---|
| 14 | X1 = double(X); |
---|
| 15 | |
---|
| 16 | % 2) Try to dualize, will be better, but still not optimal |
---|
| 17 | [Fd,objd] = dualize(F,obj); |
---|
| 18 | assign(X,0*double(X)) |
---|
| 19 | solvesdp(Fd,-objd) |
---|
| 20 | X2 = double(X); |
---|
| 21 | |
---|
| 22 | % 3) Reduce problem after dualization (correspponds to imagemodel) |
---|
| 23 | assign(X,0*double(X)) |
---|
| 24 | solvesdp(Fd,-objd,sdpsettings('remove',2)); |
---|
| 25 | X3 = double(X); |
---|
| 26 | |
---|
| 27 | % 4) Manual |
---|
| 28 | [i,a] = find(S); |
---|
| 29 | q = sdpvar(1,length(i)); |
---|
| 30 | Q = sparse(i,a,q,n,m); |
---|
| 31 | spQ = set([eye(n) (Q.*y);(Q.*y)' eye(m)]>=0); |
---|
| 32 | solvesdp(spQ + set(Q>=0),-sum(Q(S))); |
---|
| 33 | optAXXB = dual(spQ); |
---|
| 34 | X4 = -optAXXB(1:n,(n+1):end)*2; |
---|
| 35 | |
---|
| 36 | |
---|
| 37 | |
---|
| 38 | |
---|
Note: See
TracBrowser
for help on using the repository browser.