1 | function test_ndsdpvar |
---|
2 | |
---|
3 | S = [0,0,1,9,0,0,0,0,8;6,0,0,0,8,5,0,3,0;0,0,7,0,6,0,1,0,0;... |
---|
4 | 0,3,4,0,9,0,0,0,0;0,0,0,5,0,4,0,0,0;0,0,0,0,1,0,4,2,0;... |
---|
5 | 0,0,5,0,7,0,9,0,0;0,1,0,8,4,0,0,0,7;7,0,0,0,0,9,2,0,0]; |
---|
6 | |
---|
7 | p = 3; |
---|
8 | A = ndsdpvar(p^2,p^2,p^2,'full'); |
---|
9 | F = set(binary(A)); |
---|
10 | F = F + set(sum(A,1) == 1); |
---|
11 | F = F + set(sum(A,2) == 1); |
---|
12 | F = F + set(sum(A,3) == 1); |
---|
13 | |
---|
14 | for m = 1:p |
---|
15 | for n = 1:p |
---|
16 | for k = 1:9 |
---|
17 | % s = 0; |
---|
18 | s = sum(sum(A((m-1)*p+(1:p),(n-1)*p+(1:p),k))); |
---|
19 | % for i = 1:p |
---|
20 | % for j = 1:p |
---|
21 | % s = s + A((m-1)*p+i,(n-1)*p+j,k); |
---|
22 | % end |
---|
23 | % end |
---|
24 | F = F + set(s == 1); |
---|
25 | end |
---|
26 | end |
---|
27 | end |
---|
28 | |
---|
29 | for i = 1:p^2 |
---|
30 | for j = 1:p^2 |
---|
31 | if S(i,j) |
---|
32 | F = F + set(A(i,j,S(i,j)) == 1); |
---|
33 | end |
---|
34 | end |
---|
35 | end |
---|
36 | |
---|
37 | sol = solvesdp(F); |
---|
38 | |
---|
39 | Z = 0; |
---|
40 | for i = 1:p^2 |
---|
41 | Z = Z + i*double(A(:,:,i)); |
---|
42 | end |
---|
43 | mbg_asserttrue(sol.problem == 0); |
---|
44 | mbg_asserttolequal(norm(sort(Z(:,1)) - (1:p^2)'),0, 1e-4); |
---|
45 | |
---|