Remplissage d’une grille pseudo-aléatoire sous contraintes type sudoku

Ca a l'air génial ! J'essaie de comprendre toutes vos explications et de prendre possession du programme, notamment en changeant des éléments pour voir ce que ça donne. Si je veux changer les valeurs fixes des lignes 22, 25, 26 et 29, on est d'accord que je dois les changer en colonnes C:F mais également en colonnes Q:T ?

D'autre part, je n'ai pas compris un élément fondamental de votre programme : a quoi correspondent tous ces nombres qui s'affichent dans les colonnes AI:AM et que l'on peut inscrire en G pour faire tourner la macro avec shift+ctrl+J ?

Et autre question : lorsqu'on fait tourner ctrl+shift+S, la macro écrase ce qu'il y a dans la feuille solutions pour y mettre les nouvelles grilles ?

Merci !!

re,

les colonnes Q:T y sont seulement pour le MFC pour colorer si le contenu d'une cellule en colonne C:F est différent que prévu (colonnes Q:T). Pour le moment les cellules des lignes 22,25, 26 et 29 sont fixe et dès que le contenu est différent, vous verrez des cages oranges, mais cela ne se voit pas dans la cellule AA1. Donc pour votre sécurité, vous changez les 2. Autrement vous devez ajouter cela aussi dans les contraintes des colonnes AC:AE.

J'avais caché la feuille "blad2". Les 4 premières lignes contiennent les 576 grilles4x4 valides et en dessous, la ligne 6, vous voyez l'index (le numéro de série) de cette grille. Par exemple pour la première solution (voir image) utilise la grille "144" (=VE1:VH4 de "blad2") pour bloc1, la grille "551" (= CFU1:CFX4 de "blad2") pour bloc2, etc.

image image

la macro avec CTRL+SHIFT+N n'écrase pas la feuille "Solutions", cela est fait par la macro avec CTRL+SHIFT+S (mais si vous voulez, cela peut se faire directement au bout de cette première macro en ajoutant une ligne avec "solutions" avant le "End Sub" dans la macro "Nouvelles_Solutions"

image

Merci pour les explications ! C'est plutôt clair pour moi, et le programme fonctionne très bien !

Je l'ai essayé en changeant les 16 valeurs fixes des lignes 22,25,26 et 29. Et les raccourcis fonctionnent ! Franchement bravo c'est vraiment super bien fait. Je suis très impressionné.

Si je peux me permettre de soulever un dernier point : Il est vrai que les deux derniers blocs n'avaient qu'une seule possibilité avec les valeurs fixes que je vous ai données. Mais en changeant ces valeurs fixes, je me rends compte que ce n'est pas forcément le cas.

J'ai essayé par exemple avec les valeurs de l'année dernière : 1243 (pour ligne 22), 4321 (pour ligne 25), 3421 (pour ligne 26) et 2143 (pour ligne 29). Et je me rends compte que pour ces valeurs là, il y a plusieurs possibilités pour les 2 blocs inférieurs. Mais toutes les grilles proposées par votre macro (il y en déjà 80 dans ce nouveau cas !!) ne gardent qu'une seule possibilité pour ces 2 blocs.

Est-ce que votre macro peut travailler avec ces 2 blocs comme avec les autres, en passant toutes les possibilités, ou alors ça serait un trop gros changement dans votre programme ? Comment la macro a-t-elle choisi les valeurs pour ces 2 blocs vu qu'il y avait plusieurs possibilités ? Je ne sais pas trop comment fonctionne la logique de votre programme pour les 2 blocs inférieurs ...

Merci !

merci pour les compléments.

voici une nouvelle version, qui utilise les 7 blocs. J'ai ajouté les contraintes AB30:AE33 pour vos lignes 22, 25, 26 et 29. Puis j'ai changé la séquence pour résoudre le problème, c'est prendre un pari , donc j'ai choisi les blocs 7, 6, 4, 3, 2, 1, 5 parce que je pensais que cela est en ligne descendante de difficulté. Je pense que c'était un bon choix, parce que le temps est beaucoup moins, mais je ne suis pas encore sûr de cela. Dans le statusbar, vous voyez maintenant les variables dans cette séquence (donc i7, i6, i4, i3, i2, i1, i4), le nombre de solutions et le nombre de solutions parfaites. Si vous êtes impatient et déjà satisfait avec le nombre de solutions, vous pouvez arrêter la macro avec CTRL+BREAK. (Normallement, au bout de la macro, c'est elle qui copie les solutions vers la feuille "solutions", si vous faites ce break, vous devez le faire vous-même !!!)

C'est à vous d'essayer avec les contraintes de l'année passée ...

Les formules en colonnes AB:AE sont enormément important !!! Le truc avec le bouton droite du souris, vous le comprenez ? Comme ça, vous pouvez vérifier l'origine d'une formule.

7nonoparadox3.xlsb (129.00 Ko)
image

Oui j'ai très bien compris, merci !! J'ai réessayé, ça m'a l'air vraiment parfait. Dernier essai que je ferai demain : je vais essayer de changer les matières, et donc les contraintes, pour voir si tout fonctionne toujours. Mais je suis sûr que oui !

Donc si j'ai bien compris, le raccourci ctrl+shift+S ne me sert plus à rien ?

(PS : par contre le raccourci ctrl+break, sur mon clavier j'imagine que c'est ctrl+Attn, ne fonctionne pas. Mais c'est pas grave, ne vous embêtez pas, car le programme est plus rapide, et même s'il dure 90 minutes, ce n'est pas très grave, car je le fais juste en début d'année une seule fois).

Je reviens vers vous si j'ai encore des interrogations (peut-être je teste en changeant les contraintes et ensuite je pourrai mettre la conversation en mode "résolu" ?), mais en tout cas, je vous répète que je suis très impressionné par ce programme que vous avez créé, et extrêmement reconnaissant de l'implication que vous y avez mise !! Et merci à @Optimix également ! Je ne sais comment vous remercier...

re,

apparament en français CTRL+BREAK est CTRL et la touche Pause (ou Arrêt Defil.)

Ce CTRL+SHIFT+S, non, elle ne sert plus à rien, parce que sa macro est directement exécuté après le CTRL+SHIFT+N.

succès ...

Re,

j'ai essayé le programme avec les contraintes de l'année dernière. Les numéros fixés au départ n'étaient pas les mêmes, et les matières n'étaient pas associées de la même manière. J'ai réussi sans problème à adapter les contraintes (d'ailleurs bravo pour les flèches bleues qui apparaissent en cliquant droit, c'est vraiment génial et super utile pour voir si on ne s'est pas trompé !!). Je n'ai pas vérifié chacune des grilles solutions (il y en a énormément) mais les quelques unes que j'ai regardées respectent bien les contraintes, et j'ai bien trouvé celle qu'on avait choisie l'an dernier (je l'ai surlignée en bleu dans l'onglet solutions).

Par contre, cette fois la macro a mis un temps fou à finir (j'ai dû laisser l'ordi tourner plus d'une journée !!), je ne sais pas pourquoi.

Je vous joins le fichier modifié si vous voulez voir (c'est d'ailleurs curieux si vous regardez les temps, car on dépasse les 27000 s et ensuite il part sur des temps négatifs !).

re,

le "Timer" vous dit les secondes depuis le dernier minuit et il y a 60*60*24 = 86.400 sec dans une journée. Dès que vous dépassez minuit, ligne 366, timer se remet à zéro, la dernière solution avant minuit était 27.837 et la dernière solution (ligne 865) était -31864, donc je pense que vous avez démarrez la macro a environ 16:15 et vous l'avez arrêté à 7:30 le lendemain.

Concernant le temps nécessaire, il y a donc 576 grilles possible sur ces 7 blocs, cela fait 576^7 = 21.000.000.000.000.000.000 possibilités = branches. C'est énormément important de bien réflechir sur la séquence des blocs pour éliminer aussi vite que possible les branches grandes avant d'arriver dans les branches latérales. Je n'ai pas encore bien regardé votre exemple pour voir s' une autre séquence est plus vite. Notre séquence était 7 6 4 3 2 1 5, votre dernière solution, ligne 865, dit que i7 = 428, donc était en train de tester la branche 429 (428+1) des 576 branches = il avait déjà 75%, mais alors on voit aussi qu'on n'a que 24 pour bloc6 et 428 pour bloc7, donc peut-être ce sont les seules possibilité, et alors on regarde i4 pour le bloc4 = 430 >>> 431/576, c'est aussi 75%. Vous avez déjà passé 16 heures >>> 16*4/3 >>> estimate brute (avec beaucoup de mise en garde) = 21.5 heures pour finir normallement.

image

Si on regarde la colonne AQ, il y a toujours 4 solutions parfaites presqu'au même moment, drôle, et vous aviez déjà 16 solutions parfaites après 15 minutes.

Peut-être arrêter la macro après une demie-heure, vérifier les solutions parfaites pour voir quelles contraintes supplémentaires vous pouvez ajouter pour recevoir des solutions encore plus valorisée et redémarrer la macro avec ces contraintes ajoutées et après une demie-heure répéter ce truc au lieu d'attendre 21 heures ???

(alors le CTRL+Pause a fonctionné )

Re,

Merci pour les explications, je vais les relire attentivement pour bien comprendre la logique du programme.

Par contre non ctrl+pause n’a pas fonctionné 😟

Vous avez raison qu’arrêter la macro est ce qu’il y aurait de mieux à faire, surtout que je n’ai besoin que d’une seule grille parfaite.

Donc ce que vous voyez là est le programme qui a fini par lui même (du coup, c’est curieux qu’il se soit arrêté à 75%…).

Pour l’ordre des séquences je pense en effet que sur cet exemple il aura fallu changer l’ordre. Est ce que je peux facilement changer ça dans la macro à l’avenir ?

Pour les blocs 6 et 7, mea culpa : je me suis rendu compte que je m’étais trompé et qu’il n’y avait bien, là aussi, qu’une seule possibilité…désolé !!

pardon, question simpliste mais … pourquoi 576 possibilités par bloc ? 24 permutations par ligne, mais pourquoi au carré ? Parce qu’à partir du moment où une ligne et une colonne sont fixées le bloc l’est aussi complètement ?

re,

correction sur mon dernier poste, je pense qu'il a trouvé sa dernière solution à 7:30 le lendemain, à mon estimate 75% des branches, mais je ne sais pas quand la macro est arrêtée, mais c'est un pari, à 13:00 le lendemain. Quand avez-vous vu que c'était fini ?

Changer l'ordre, c'est compliqué, je dois une fois vérifier les possibilités pour facilement parametriser ces 7 boucles.

Qu'il n'y a qu'une possibilité pour 6-7, heureusement, autrement cela ajouterait encore 21 heures à la macro ....

576 carrés, parce que c'est sudoku, on n'a qu'une fois le même chiffre par ligne et par colonne, donc ce n'est pas 24^4=332.000 carrés, vous les voyez tous dans la feuille "Blad2", lignes 1:4. Je pense, si vous avez rempli la première ligne et vous commencez la 2ième, le premier chiffre, vous n'avez que 6 des 24 possibilités.

re,

dans la feuille "blad2", la plage E11:E17, cela est la séquence pour la macro, d'abord on commence avec le premier, ici E11 = 7, si on suppose que bloc7 est le plus difficile. Le Raccourci pour cette macro est SHIFT+CTRL+Q

Je n'ai pas encore testé la conséquence en durée en choississant une séquence "mauvaise"

6nonoparadox3.xlsb (130.95 Ko)

re,

honnêtement je ne me souviens plus exactement des horaires... mais vous m'épatez à avoir réussi à déduire ça à partir des résultats du programme !!

Pas de problème si c'est compliqué de changer l'ordre. Si j'ai bien compris le nouveau petit changement que vous avez mis en place, je peux modifier l'ordre dans la colonne E11:E17, et en lançant ctrl+shift+Q ça fera comme ctrl+shift+N mais avec ce nouvel ordre ?

Du coup je n'utilise plus le raccourci ctrl+shift+N ?

Merci !!

Petite question : est-ce qu'il est possible d'ajouter facilement dans la macro le fait qu'elle copie-colle les colonnes A et B de la feuille 1 dans les colonnes A et B de la feuille solutions lorsqu'elle colle toutes les solutions ? Si c'est compliqué, aucun problème, ça se fait à la main en deux secondes...

PS : chez vous, le raccourci ctrl+break fonctionne ?

re,

oui, c'est ça, CTRL+SHIFT+N = la séquence fixe (7,6,4,3,2,1,5) et CTRL+SHIFT+Q = la séquence choisi dans la plage E11:E17. Donc CTRL+SHIFT+N est moins intéressant que l'autre !!!

Maintenant, il copie & colle aussi les 2 premières colonnes et il donne de l'information supplémentaire dans la plage B31-B37 = le nombre + l'index des grilles utilisé par bloc. C'est un pari, mais je pense que la séquence 1,2,3,5,4,6,7 serait le plus mauvais choix possible pour la séquence, normallement le nombre de solutions sera le même, mais le temps sera plusieurs fois plus grand... .

10nonoparadox3.xlsb (139.44 Ko)

re,

j'avais lancé la macro avec cette mauvaise séquence et après 3 heures encore rien trouvé ....

Je ne sais pas si vous l'avez vu, mais les grilles des blocs 2&3 sont des réflections d'eux.

Oui en fait commencer par le haut n'est pas bon je pense... Là j'ai essayé avec la séquence 7654321 et ça a bien fonctionné (50 minutes 38, si c'est bien le temps qui s'inscrit en haut à droite... merci pour cet n-ième ajout génial !!).

Oui les blocs 2 et 3 sont symétriques, à cause des égalités de cellules imposées.

Génial aussi pour l'ajout du copier coller des colonnes A et B et pour la liste des blocs dans la colonne B en bas !! Encore un énorme bravo et un énorme merci !!

Re,

j'ai trouvé ! C'est Fn+Attn qui permet d'arrêter l'exécution d'une macro !!

Rechercher des sujets similaires à "remplissage grille pseudo aleatoire contraintes type sudoku"