daily pastebin goal
65%
SHARE
TWEET

Untitled

a guest Oct 12th, 2017 47 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. % taille = 4;
  2. % connus = [1,2,2; 1,3,4; 2,4,2; 3,1,3; 4,2,1; 4,3,3];
  3.  
  4. taille = 9;
  5. connus = [1,2,2;
  6.     1,5,3;
  7.     1,8,4;
  8.     2,1,6;
  9.     2,9,3;
  10.     3,3,4;
  11.     3,7,5;
  12.     4,4,8;
  13.     4,6,6;
  14.     5,1,8;
  15.     5,5,1;
  16.     5,9,6;
  17.     6,4,7;
  18.     6,6,5;
  19.     7,3,7;
  20.     7,7,6;
  21.     8,1,4;
  22.     8,9,8;
  23.     9,2,3;
  24.     9,5,4;
  25.     9,8,2];
  26.  
  27. nbvariables = taille^3;
  28. nbconditions = (taille^(2))*4+length(connus);
  29.  
  30. Aeq = zeros(nbconditions,nbvariables);
  31. beq = ones(nbconditions,1);
  32.  
  33. condrow = 1;
  34. % =========== lignes ===========
  35. for i = 1:taille
  36.     for k = 1:taille
  37.         for j = 1:taille
  38.             Aeq(condrow, (i-1)*taille*taille+(j-1)*taille+k) = 1;
  39.         end
  40.         condrow = condrow + 1;
  41.     end
  42. end
  43. % =========== colonnes ===========
  44. for k = 1:taille
  45.     for j = 1:taille
  46.         for i = 1:taille
  47.             Aeq(condrow, (i-1)*taille*taille+(j-1)*taille+k) = 1;
  48.         end
  49.         condrow = condrow + 1;
  50.     end
  51. end
  52. % =========== carrés ===========
  53. for k = 1:taille
  54.     n = sqrt(taille);
  55.     for u = 0:n-1
  56.         p = u*n+1;
  57.         for v = 0:n-1
  58.             q = v*n+1;
  59.             for i = p:p+n-1
  60.                 for j = q:q+n-1
  61.                     Aeq(condrow, (i-1)*taille*taille+(j-1)*taille+k) = 1;
  62.                 end
  63.             end
  64.             condrow = condrow + 1;
  65.         end
  66.     end
  67. end
  68.  
  69. % unicité chiffres
  70. for i = 1:taille
  71.     for j = 1:taille
  72.         for k = 1:taille
  73.             Aeq(condrow, (i-1)*taille*taille+(j-1)*taille+k) = 1;
  74.         end
  75.         condrow = condrow + 1;
  76.     end
  77. end
  78.  
  79. % Nombres connus
  80. for n = 1:size(connus)
  81.     i = connus(n,1);
  82.     j = connus(n,2);
  83.     k = connus(n,3);
  84.     Aeq(condrow, (i-1)*taille*taille+(j-1)*taille+k) = 1;
  85.     condrow = condrow + 1;
  86. end
  87.  
  88. % matrice
  89. lb = zeros(nbvariables,1);
  90. ub = ones(nbvariables,1);
  91.  
  92. f = zeros(nbvariables,1);
  93. intcon = nbvariables;
  94.  
  95. A = [];
  96. B = [];
  97.  
  98. x = intlinprog(f,intcon,A,B,Aeq,beq,lb,ub);
  99.  
  100. grid = zeros(taille);
  101.  
  102. for i = 1:taille
  103.     for j = 1:taille
  104.         for k = 1:taille
  105.             index = (i-1)*taille*taille + (j-1)*taille + k;
  106.             if int8(x(index)) == 1
  107.                 grid(i,j) = k;
  108.                 break
  109.             end
  110.         end
  111.     end
  112. end
  113.  
  114. grid
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top