[37] | 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 | |
---|