Inscription / Connexion Nouveau Sujet
Niveau exercices
Partager :

Atteindre 12 - Variante

Posté par
ty59847
05-11-21 à 15:52

Dans la suite de cette discussion
atteindre 12
On lance un dé, puis un deuxième, puis un troisième, autant de dés que nécessaire.

Quand j'ai lancé n dés, je cherche s'il y a une combinaison qui donne 12 (type le compte est bon, mais en se limitant aux additions et soustractions).
On  a l'obligation d'utiliser tous les dés.

Exemple :

dé n°1 : 6 ; impossible
dé n°2 : 3 : impossible
dé n°3 : 6 ; On pourrait être tenté de dire dé1+dé3= 12 ... mais il faut utiliser tous les dés.
Dé n°4 : 5 : impossible
Dé n°5 : 4 : gagné (6+3-6+5+4=12)

Autre exemple :

1 puis 4 puis 4 puis 1 puis 3 puis 2 puis 4 puis 2 puis 5 : gagné.
1+4+4+1+3+2+4-2-5=12

Questions ouvertes :
- En moyenne, au bout de combien de lancers on arrive à 12 ?
- On regarde le dernier dé lancer qui a permis d'arriver à 12.
Quelle est la probabilité que ce dernier dé soit un 1, un 2 .... un 6

C'est un exercice ouvert, je n'ai pas la solution.  
Mais pour la 2ème question ... j'ai un méga indice en tête.

Posté par
Vassillia
re : Atteindre 12 - Variante 05-11-21 à 17:00

Bonjour ty59847
Jolie question, là comme ça je ne sais pas du tout comment m'y prendre mais je vais y réfléchir quand j'aurai un peu de temps.

Posté par
Vassillia
re : Atteindre 12 - Variante 05-11-21 à 22:39

Pas vraiment d'idée lumineuse, en attendant j'ai tenté une simulation avec 10000 essais jusqu'à obtenir 12 si je ne me suis pas gourée dans mon programme ce qui est possible car j'ai cours toute la journée demain et ce ne serait pas raisonnable d'y passer plus de temps.

PS : Si Ulmiere passe par là, il va surement remarquer à juste titre que j'ai encore des progrès à faire...

import matplotlib.pyplot as plt

def verif(l,nb):
    n=len(l)
    if n==1:
        if l[0]==nb:return 1
        else:return 0
    else:
        return verif(l[:n-1],nb-l[n-1]) or verif(l[:n-1],nb+l[n-1])

def suite(nb):
    l=[randint(1,6)]
    while verif(l,nb)!=1:l.append(randint(1,6))
    return l

def test(compt,nb):
    n=[]
    d=[]
    for i in range(compt):
        l=suite(nb)
        n.append(len(l))
        d.append(l[len(l)-1])
    figure = plt.figure(figsize = (10, 10))
    plt.gcf().subplots_adjust(left = 0.1, bottom = 0.1, right = 0.9, top = 0.9, wspace = 0, hspace = 0.2)
    axes = figure.add_subplot(2, 1, 1)  
    plt.hist(n,bins = range(15))
    plt.title("Histogramme du nombre d'essais nécessaires avec pour moyenne {:.2f}".format(numerical_approx(mean(n))))
    axes = figure.add_subplot(2, 1, 2)
    plt.hist(d,bins = range(8))
    plt.title("Histogramme de la valeur du dernier essai")
    plt.show()
    return n,d
        
test(10000,12)
        


Atteindre 12 - Variante

Posté par
ty59847
re : Atteindre 12 - Variante 05-11-21 à 23:04

Pour la 1ère courbe, la forme générale paraît bonne.
Pour 8 lancers ou plus, on voit que la probabilité est divisée par 2 à chaque valeur. C'est complètement conforme à ce que j'avais en tête.

Sur le 2ème graphique, je m'attendais à avoir le 6 un peu plus bas (au même niveau ou plus bas que 2 ou 4), mais en fait, oui,  200 ou 300 de plus pour 6 que pour 2 ou 4 , ça s'explique.
Et des valeurs nettement plus hautes pour les nombres impairs, c'est surtout ça que j'attendais.

Posté par
ty59847
re : Atteindre 12 - Variante 05-11-21 à 23:08

Et  la simulation, c'est la seule méthode que j'imaginais en posant cette question.
Avec une petite voix qui me disait : " là, on ne va pas pouvoir utiliser les chaines de Markov "

Posté par
Vassillia
re : Atteindre 12 - Variante 05-11-21 à 23:25

Arf, je préfère les valeurs théoriques mais je ne sais pas comment les avoir... car je vois bien pourquoi les chaines de Markov vont être nettement moins utiles

Mais sinon quelles sont les propriétés pour la forme générale que l'on peut démontrer ? On peut toujours essayer de les recenser à défaut d'avoir les valeurs exactes.

Posté par
jarod128
re : Atteindre 12 - Variante 06-11-21 à 10:32

Hello,
je partage mon petit travail: j'ai déterminé pour les premières valeurs de n le nombre de tirages de n dés vérifiant les 2 propriétés (obtenir 12 et ne pas l'avoir obtenu "avant"). On obtient:
0, 1, 25, 253, 1881, 8835, 31143, 98267, 301223, 913552, 2758117

Posté par
jarod128
re : Atteindre 12 - Variante 06-11-21 à 14:58

Je continue. Mes valeurs précédentes permettent d'obtenir la loi de la va qui donne le nombre de lancers (en tout cas les premières valeurs)
On a alors P(X=k) pour k allant de 2 à 11 ce qui représente 99.2% des cas et on obtient 5,27984051502336 en moyenne. Je suis proche de la simulation en sachant que je la minore.

Posté par
jarod128
re : Atteindre 12 - Variante 06-11-21 à 15:00

Petite correction, je n'ai pas divisé par la somme des probas lors de la moyenne car elle devrait valoir 1 mais comme je n'ai que 99,2% des cas ma moyenne est plutôt de: 5,32051904357946

Posté par
jarod128
re : Atteindre 12 - Variante 06-11-21 à 20:06

Je continue j'ai le nombre de tirage ok à 12 Dés: 8336505
Du coup avec 99,617% des cas on obtient une moyenne de 5,34610497171326

Posté par
ty59847
re : Atteindre 12 - Variante 06-11-21 à 21:01

Waoww, il y a des gens courageux.
A partir de 12 ou 13 lancers, on peut 'mathématiser' la suite. Ou plutôt faire des impasses.
On a quelques cas très particuliers :
On a tiré 1 (ou 2 ou 4 ou 5), puis que des 3 ou des 6, et du coup, tant qu'on aura des 3 ou des 6, on ne pourra pas faire 12. Très marginal.
On a quelques cas comme ça, mais ça me paraît très marginal.
Et on a des cas un peu moins marginaux ( nos 100%-99.617%), c'est quand la somme de nos dés donne un nombre impair.
Si la somme donne un nombre impair, tant que les nouveaux tirages donnent des nombres pairs, on ne peut pas faire 12. Mais dès qu'un impair apparaît, on peut faire 12 (sauf les cas très particuliers déjà évoqués). Du coup, à chaque nouveau tour, on peut considérer qu'on solutionne la moitié des cas.
C'est déjà ce qui s'est passé en passant de 99.2 à 99.617
Donc estimations :
Pour 13 lancers : 99.809
14 lancers : 99.905
15 lancers : 99.953

Et le 2ème graphe de Vassilia confirmait cette mécanique ; on finit beaucoup plus souvent par un impair que par un pair.

Plus précisément, parmi les chemins qui aboutissent après 3 ou 4 ou 5 pas, il doit y avoir à peu près un équilibre entre les impairs et les pairs, et au-delà, on a une énorme majorité de chemins qui finissent par un impair.

Posté par
jarod128
re : Atteindre 12 - Variante 06-11-21 à 21:24

Mes résultats sont exacts (dans le sens pas de simulation mais un test exhaustif).  A partir de 13 l'ordi va mettre plusieurs heures.

Posté par
ty59847
re : Atteindre 12 - Variante 06-11-21 à 21:50

Oui, j'avais bien compris que c'était un recensement exhaustif.

Posté par
jarod128
re : Atteindre 12 - Variante 06-11-21 à 22:21

Je constate que le nombre de tirages "ok" à n+1 Dés est environ 3 fois le nombre de tirages à n Dés. On a un rapport décroissant vers 3.
En prenant 3 comme rapport à partir de 12 Dés j'obtiens comme valeur 5,37912745159058 comme Vassillia.

Posté par
ty59847
re : Atteindre 12 - Variante 06-11-21 à 23:24

Oui, tu peux le présenter comme ça aussi, mais tu te retrouves avec une approximation un peu moins bonne.
Au 9ème lancer, on 'solutionne' S_9=301223 cas (je m'appuie sur tes chiffres). Et si tu calcules le nombre de cas restants, il en reste R_9=305923.
Au dixième lancer, on solutionne S_{10}=913552 cas, et il en reste R_{10}=921986
Certes, on a en gros un rapport de 3 sur cette suite S (3.0328 ici), mais on a un rapport encore plus proche de 3 pour la suite R (3.0232 ici)

Posté par
jarod128
re : Atteindre 12 - Variante 07-11-21 à 01:14

Exact je me suis fait la même remarque !

Posté par
ty59847
re : Atteindre 12 - Variante 07-11-21 à 07:58

Accessoirement, en s'appuyant sur les cas qui restent non résolus, on fait quoi : on dit il reste R cas non aboutis. Avec un lancer supplémentaire, on passe à 6R cas. Et on suppose qu'on résout 3R cas parmi ces 6R cas.
On a l'assurance de ne pas résoudre plus de 100% des cas.
En s'appuyant sur le nombre de cas solutionnés à l'étape précédente, on pourrait dépasser ce cap de 100%
Ou converger vers un seuil plus bas que ce 100%

Posté par
LittleFox
re : Atteindre 12 - Variante 13-11-21 à 11:34


Citation :
PS : Si Ulmiere passe par là, il va surement remarquer à juste titre que j'ai encore des progrès à faire...


Je me suis permis de faire une petite revue du code de Vassillia

 Cliquez pour afficher


Ce faisant, j'ai découvert que vous avez fait une hypothèse que je ne pense être contraire à l'énoncé.

Avec les 5 dés [1,3,1,5,6] considérez-vous qu'on obtient 12 ou pas?
Pour moi oui: -1+3-1+5+6 = 12
Mais d'après le code de Vassillia et les résultats de jarod128 non. Soustraire le premier dé n'est pas autorisé.
Pourtant il n'y a pas d'ordre dans l'utilisation des nombres dans "le compte est bon".

En l'autorisant, j'obtiens une moyenne d'environ 5.25 au lieu de 5.37.

Qu'en pensez-vous?

Posté par
Vassillia
re : Atteindre 12 - Variante 13-11-21 à 11:56

Bonjour,

J'en pense qu'un jour, il va vraiment falloir que je me mette à optimiser mon code, les écarts de performance sont pour le moins significatifs
Merci LittleFox, je prends note de tes judicieux conseils pour une prochaine fois. En vrai, je n'y connais quasiment rien, j'ai juste suivi la mode comme ce langage est souvent utilisé. C'est sur que ce n'est pas comme ça que je vais prendre de bonnes habitudes.
Sinon, je dirai que tu as raison pour mettre un signe négatif pour le premier chiffre, aucune raison de l'interdire à priori, j'avoue que je ne me suis pas posée la question.

PS : Effectivement c'est Sagemaths mais je n'ai rien installé sur mon ordinateur même pas python (ordi de boulot sans droit admin) j'utilise

Posté par
LittleFox
re : Atteindre 12 - Variante 13-11-21 à 13:03

C'est mon boulot d'être expert Python (je suis consultant Ingénieur civil en informatique spécialisé en langage Python ) ça m'aurait fait mal de ne pas trouver l'une ou l'autre optimisation

Je suis tombé sur le même site Sage Math Cell en cherchant cette fonction numerical_approx. Je suis content que mon code tourne dedans

Si ça peut te rassurer, j'ai encore plus optimisé le code de jarod128

jarod128 @ 06-11-2021 à 21:24

Mes résultats sont exacts (dans le sens pas de simulation mais un test exhaustif).  A partir de 13 l'ordi va mettre plusieurs heures.

Je vais jusqu'à 25 en 0.4 seconde (55ms pour 13)

Voici le code:
 Cliquez pour afficher


Mais pour celui-ci, SageMathCell n'aime pas trop le formatage que je donne. En enlevant le formatage, c'est bon

Résultats:
 Cliquez pour afficher


On retrouve bien le même genre de courbes, la division par 2 du ratio à partir d'un certain nombre de lancé  et le nombre de lancés attendus correspond à la simulation



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !