Répartition VBA Quine Loto

J'ai remplacé tes noms de famille par des nombres (en supprimant le "fam"

Toute assemblage de familles dont la somme de ces N°de famille est 1011111111 devrait être valide. (il me semble)

Je vais tenter de travailler sur ces assemblages mais pour moi ce n'est pas intuitif. Je touche là visiblement à mes limites !

Je coince ... peut-être pour des problèmes de capacité du PC ? je ne comprends pas.

En tous cas voici les cartons de "familles de grille" MAIS avec la contrainte sur les colonnes 1, 5, 6, 7, 8, 9 seulement.

J'ai re-codifié les familles aussi en x.x.x.x.x.x.x.x.x pour faire des splits, et la somme des x fait bien 15.

Dès que j'ajoute une contrainte sur la colonne 4 le programme n produit plus rien. Curieux ! ou alors je suis sur une fausse piste et il n'y a pas de solution ? impossible ...

15algo-loto.zip (971.70 Ko)

Je suis en train de décortiquer la solution que tu avais mise en feuille1 et qui fonctionne ... alors pourquoi je n'arrive pas à la trouver ?

11111
11111
11111
11111
11111
11111
11111
11111
11111
11111
11111
11111
11111
11111
11111
11111
11111
11111

C'est-à-dire cette combinaison que tu as proposée

carton de familles (remis en ordre croissant) :
1.1.2.2.1.2.2.2.2
1.2.1.1.2.2.2.2.2
1.2.2.2.2.1.2.1.2
2.1.2.2.2.1.1.2.2
2.2.1.2.2.2.1.1.2
2.2.2.1.1.2.2.2.1

Je suis un peu perdu dans ton raisonnement d'autant que je suis parti dans une autre direction au lieu de spliter je vais essayer de travailler mon dico avec mid et le N° de famille. (enfin j'essaie... je ne suis pas aussi rapide que toi !)

On peut toujours utiliser ta grille et lui affecter toutes les grilles équivalentes, par exemple sur la première il y a 54 autres possibilités d'arriver aux totaux indiqués par colonne.

1 1 11 1
11 11 1
11 1 11
22211222154
11 11 1
1 11 1 1
1 11 11
12222121266
11 11 1
1 11 11
1 11 11
12112222236
1 11 1 1
11 111
11 1 11
11221222272
1 11 1 1
1 11 11
1 1 1 1 1
212221122108
1 1 11 1
11 11 1
1 1 11 1
221222112120

mais bon, j'aimerais bien aller au bout des choses.

On peut toujours utiliser ta grille et lui affecter toutes les grilles équivalentes, par exemple sur la première il y a 54 autres possibilités d'arriver aux totaux indiqués par colonne.

J'y ai bien pensé mais cette solution est un peu triviale et j'aimerai bien trouvé à algo convaincant. D'autant que ce problème revient assez périodiquement.

De plus seule la permutant des grilles entre elle est possible, pas la permutation des lignes dans une grille (car elle génèrerait des doublons au tirage)

Je viens de rentrer, j'ai repris mon code où il y avait quelques irrégularités ... et je touche au but.

J'ai bridé 2 variables pour tester, et j'en suis déjà à 1110 combinaisons de familles en moins d'une minute.

Je vais débloquer cette nuit ... cela va mettre des heures ! et je crains pour la taille de la feuille ...

12algo-loto.zip (969.53 Ko)

22 minutes plus tard : 107490 combinaisons de 6 familles de grille.

j'ai débridé une variable, reste la dernière ! mais je vais faire quelques vérifications à la volée.

fichier erroné effacé !

Arrête tout :

Si j'ai bien compris tu es à coté de la plaque : Dès la première ligne tu n'as que des 1 dans la première colonne alors que tu ne devrais en avoir que 3 :

En gros seule la 5ème colonne (4x2 + 2x1) et la dernière (5x2 +1) sont bonnes

Relevé de la première ligne :

111222222

111222222

111222222

121212222

122211222

122222121


Somme de contrôle :699312231
la somme de contrôle devrait être1011111111

regarde les <2 feuilles de ce classeur.

11assemblages.xlsm (14.92 Ko)

Ach zut, lors du déblocage de la variable i2 il y a eu un soucis, d'autant que j'avais inversé la présentation

Par contre le fichier de 17:18 était correct

capture d ecran 60

je vais regarder ton fichier et poursuivre ensuite en parallèle la généralisation de ma macro.

Ton calcul qui amène à 1011111111 est en effet très intéressant ! cela va simplifier la recherche et accélérer. Pas mal !

Bon il y a encore un peu de travail, mais on n'est pas si loin que cela !

Chaque assemblage doit comporter 1 (et un seul) item en jaune

on peut même ajouter comme tu le disais 3 items commençant pas 1 et 3 commençant par 2.


edit : je vais débrider i1 et i2 et voir comment cela se passe ... mais a priori j'ai remis le code au carré

11algo-loto.zip (0.98 Mo)

Bonjour,

Le problème n'était pas le code, mais la quantité de données qui fait qu'excel n'arrivait pas à transposer le tableau et répétait la première valeur !

J'ai donc procédé par paquets de 10.000 combinaisons. Je viens de relever les compteurs, et le programme s'est arrêté faute de place à 1 040 000 combinaisons de familles, ne sachant pas coller les 10.000 nouveaux cas. Tous ont bien la somme de 1011111111

J'ai donc changé la disposition pour afficher les autres résultats.

à tester pendant un certain temps !

14algo-loto.zip (923.97 Ko)

Bonjour !

J'ai lancé le prog avant même de chercher à l'analyser... Donc maintenant je suis un peu bloqué... pour en examiner la logique.

Je regarde en même temps le gestionnaire de tâches et après un court moment de progression normale de l'utilisation, le compteur s'est bloqué à 160 Mo et maintenant les échanges mémoire-disque dur son incessants. Je me demande si un autre paramètrage de l'utilisation mémoire n'aurai pas été bénéfique.

De même Firefox utilise plus de mémoire disponible qu'Excel (220 Mo) : Je meurs d'envie de lui-faire sa fête afin de libérer la mémoire. Je vais essayer dès que j'aurai terminé ce message...

Bon YAPUKA patienter... Je te dis plus tard !

EDIT : De retour dans Excel je suis très étonné : C'est déjà fini ! Bon je me retrousse les manches pour analyser toussa.

Merci infiniment en tout cas.

A+

En effet, une demi-heure et 2,5 millions de combinaisons de famille de 6 grilles ! Grâce à ta formule magique qui donne 1011111111 plus rapidement. J'ai aussi passé le code famille en numérique du coup.

Chaque famille ayant de 18 à 256 grilles possible, cela fait pas loin de 10^17 possibilités ou 100 peta possibilités, 100.000 tera ou 100.000.000 giga ! du délire ... sans compter ensuite ta répartition aléatoire des nombres de 1 à 90.

Pour l’algorithme final à partir des 84 familles ...

  1. je choisis 3 familles commençant par 1 (il y en a 28)
  2. je choisis ensuite 3 familles commençant par 2
  3. pour les 4 autres grilles, je balaye toutes les familles
  4. si la somme vaut ton chiffre miracle, c'est bon

Bonjour à tous,

joli travail d'équipe et solution très astucieuse (les familles et la somme magique qui permet de déterminer très rapidement les bonnes combinaisons !)

j'ai remarqué que parmi les paquets de 6 cartons générés, il y en a énormément qui ne sont que des permutations des mêmes cartons. Si on considère ces 6 cartons comme faisant partie d'un paquet, cela donne des paquets contenant les mêmes cartons.

je vous propose donc une petite amélioration pour ne retenir que les paquets différents (qui donne les solutions plus rapidement)

For i1 = 0 To nbUN - 3
        For i2 = i1 To nbUN - 2
        For i3 = i2 To nbUN - 1
        For i4 = nbUN To UBound(famille) - 2
        For i5 = i4 To UBound(famille) - 1
        For i6 = i5 To UBound(famille)

Bonjour h2so4

J'ai bien pensé à cela . mais il faut considérer ici que ce sont des familles, et que les exclusions devraient plutôt se faire quand pour chaque famille on choisira une grille qui n'est pas déjà sortie. A Galopin de décider ...

Bonjour Steelson,

je crois que je me suis mal exprimé.

ces 2 ensembles sont identiques à une permutation près (les 2 dernières lignes), non ? donc avec une sélection de 6 familles tu peux générer 720 regroupements de familles identiques aux permutations près (tu peux faire l'économie de ces générations et donc améliorer grandement les performances de ta macro).

112222122112222122
122122212122122212
122221122122221122
212112222212112222
221212212221212221
221221221221221212

Bonjour,

Ou j'ai bien vu qu'il y avait de nombreux doublons et je retiens la solutions de h2so4 (merci)

C'est la première chose que j'ai tenté d'éliminer mais malgré l'heure tardive je n'ai pas eu trop le temps de peaufiner.

Il faut absolument que j'y arrive, si je veux éviter l'écueil d'avoir de trop nombreuses combinaisons redondantes au final.

Pour cette dernière étape je compte faire des tirages sans remise, mais il me faut auparavant diminuer drastiquement tous ces mariages incestueux... et si possible les éliminer.

Je suis reparti de ta toute première version (avec Tri1) qui permet de travailler la première boucle :

For i1 = 0 To 27
For i2 = 28 To UBound(famille)

ça élimine en théorie déjà pas mal de boucles inutiles puisque il ne peut pas y avoir de mariage avec 2 famille qui ont la terminaison 1.

Donc tous les autres assemblages doivent se faire à partir du premier 2.
Mais le problème est que j'ai du me perdre un peu après... et je n'ai pas eu le temps de retester.

Donc au lieu de boucler sur i2, i3... je vais essayer de tester la aussi avec des tirages sans remise comme ça tout risque de doublon sera éliminé. Enfin si j'y arrive... Car c'est vrai que à ce niveau je plafonne souvent un peu et mes connexions deviennent parfois incertaines. Aloïs y est sans doute déjà pas pour rien !

Mon objectif étant au final si possible 84000 grilles sans doublons ce qui me permettrai d'éviter de travailler des permutations ensuite..

Ça ferai déjà 14000 cartons c'est déjà pas mal.

Je reviens dès que j'ai progressé significativement.

A+

Bonjour Steelson,

je crois que je me suis mal exprimé.

ces 2 ensembles sont identiques à une permutation près (les 2 dernières lignes), non ? donc avec une sélection de 6 familles tu peux générer 720 regroupements de familles identiques aux permutations près (tu peux faire l'économie de ces générations et donc améliorer grandement les performances de ta macro).

112222122112222122
122122212122122212
122221122122221122
212112222212112222
221212212221212221
221221221221221212

j'avais bien saisi la nuance ... mais quand on affectera une grille à la famille de grilles 112222122 on a le choix entre toutes ces grilles ...

212
232
406
420
2167
2214
2401
2434
2589
2618
3161
3170
3211
3215
3323
3357
4306
4405
4493
4550
4608
4656
5164
5173
5249
5253
5415
5471
6663
6705
6848
6855
6929
6968
7055
7061
7113
7138
7209
7212
7821
7944
7986
7999
8039
8052
8075
8175
8179
8205
8210
8217
8221
8247
8252
8258
8278
8287
8391
8395
8399
8466
8474
8477
8487
8490

et elles ne se ressemblent pas si ce n'est que les colonnes ont la même somme. Exemple pour les 5 premières

capture d ecran 62

Mais comme on parle de péta possibilités on peut en éliminer ...

Dans tous les cas je laisse la main à notre ami Galopin, c'était un excellent exercice d'agitation neuronale et de coopération (ce qui me parait souvent intéressant dans un forum). Tu me diras en aparté (mp) pour quelle maladie rare on a bossé, si cela peut contribuer à la guérir. Et un bonjour à Bourg-en-Bresse, il m'arrive de passer la nuit à Brou.

Ça ferai déjà 14000 cartons c'est déjà pas mal.

J'imaginais plus un seul onglet avec formules aléas pour

  1. choisir un carton parmi les 2.500.000
  2. choisir pour chacune des 5 familles du carton, une grille parmi les x possibilités
  3. affecter à chaque colonne les n°

et faire F9 et impression pour sortir un carton juste quand on en a besoin. Vu le nombre de possibilités, on ne trouveras jamais le même (proba < 10^-15).

C'est de la sécurité absolu, même en aéronautique on applique un principe de tolérance aux dommages, principe qu'il ne doit y avoir aucune rupture d'un élément structurel qui puisse conduire à une défaillance catastrophique de l'avion avec une probabilité ≤10^-9.

Rechercher des sujets similaires à "repartition vba quine loto"