Advertisement
Guest User

Untitled

a guest
Oct 12th, 2017
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.09 KB | None | 0 0
  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
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement