Line | |
---|
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.