Probabilité et Tetris 99

Discussion générale entre passionnés et amateurs de mathématiques sur des sujets mathématiques variés
matio
Membre Naturel
Messages: 10
Enregistré le: 13 Oct 2017, 20:14

Probabilité et Tetris 99

par matio » 17 Déc 2020, 08:41

Bonjour!

Je joue beaucoup à Tetris 99 en ce moment. Un des défis à réaliser m'a amené à me poser une question de probabilité qui a l'air assez simple mais que je suis incapable de résoudre...

ça fait un bon moment que je n'ai pas refait de maths et et encore plus de probabilités, alors je me demandais si vous pouviez m'aider en me donnant les noms des outils mathématiques à utiliser dans ce cas là pour que je me remette dans le bain:

On a un 99 joueurs répartis aléatoirement en début de partie entre 4 équipes.

Quelle est la probabilité qu'au moins une équipe ait moins de n joueurs ?


Merci à vous! :)



lyceen95
Membre Complexe
Messages: 2255
Enregistré le: 15 Juin 2019, 00:42

Re: Probabilité et Tetris 99

par lyceen95 » 17 Déc 2020, 19:44

Je cherche depuis quelques minutes...
Une formule exacte, je ne vois pas.
Une approximation, je vois à peu près.
J'ai 4 équipes A B C D, et j'ai 99 joueurs répartis aléatoirement entre ces 4 équipes. Quelle est la probabilité que l'équipe A précisément ait moins de n joueurs ? Ca, c'est 'facile', c'est un exercice très classique, c'est une application de la loi binomiale.
Je n'en dis pas plus parce que tu demandais juste le nom d'un outil.

Ensuite, comment passer de ce résultat à ta question ?
Si n est relativement petit ( n inférieur à 8 par exemple), alors on peut tout simplement multiplier le résultat précédent par 4. C'est une approximation... mais une approximation tout à fait acceptable.
Mais is n est de l'ordre de 20 , 21, 22 ... , cette approximation n'est plus du tout valable, et ça va être compliqué.

En utilisant la loi binomiale, tu vas pouvoir trouver tout ça, mais ça va être très long et compliqué.
A ma connaissance, il n'y a pas une formule toute faite pour donner cette probabilité.

GaBuZoMeu
Habitué(e)
Messages: 6020
Enregistré le: 05 Mai 2019, 10:07

Re: Probabilité et Tetris 99

par GaBuZoMeu » 19 Déc 2020, 16:49

À défaut de formule toute faite, une procédure python :

Code: Tout sélectionner
from math import factorial
from fractions import Fraction

def proba(n) :
    S = Fraction(0)
    for a in range(n,100-3*n) :
        for b in range(n,100-a-2*n) :
            for c in range(n,100-a-b-n) :
                S += Fraction(1,factorial(a)*factorial(b)*\
                              factorial(c)*factorial(99-a-b-c))
    p = 1-Fraction(factorial(99)*S,4**99)
    print("probabilité d'avoir au moins une équipe avec moins de {} joueurs :\n\
{}/{}".format(n,p.numerator,p.denominator))
    print("soit à peu près {:.7%}".format(float(p)))


Par exemple, la commande
Code: Tout sélectionner
proba(19)

retourne
Code: Tout sélectionner
probabilité d'avoir au moins une équipe avec moins de 19 joueurs :
1712979134735506062654230385673189193269496290575658657693/6277101735386680763835789423207666416102355444464034512896
soit à peu près 27.2893320%

matio
Membre Naturel
Messages: 10
Enregistré le: 13 Oct 2017, 20:14

Re: Probabilité et Tetris 99

par matio » 21 Déc 2020, 15:44

Bonjour,

Merci lyceen95, c'est bien la loi binomiale que je cherchais! Je vais creuser quand j'aurais un moment.

Merci à toi GaBuZoMeu.
J'avais fait un script python aussi. La valeur qui m'intéressait en particulier était 10. J'ai trouvé 1.29% evirons avec 10 000 000 d'essais, mais je me demandais si il y avais moyen de faire ça de manière mathématique.

ça correspond à peut près à ce que j'ai pu voir dans le jeu. ;)

Le script:

Code: Tout sélectionner

import random
import math

numTries = 10000000
playersQtyMin = 10
successes = []

for tryNum in range(0, numTries):
    teams = [0, 0, 0, 0]
    for playerNum in range(0,99):
        teamNum = math.trunc(random.random()*10%4)
        teams[teamNum] = teams[teamNum]+1
   
    for team in range(0, len(teams)):
        if teams[team] <= playersQtyMin:
            successes.append({"tryNum" : tryNum,
                           "teamNum" : team,
                           "successPlayers" : teams[team],
                           "team1PLayers" : teams[0],
                           "team2PLayers" : teams[1],
                           "team3PLayers" : teams[2],
                           "team4PLayers" : teams[3]})

# for success in successes:
#     print("try number: ")
#     print(success["tryNum"])
#     print("qty of players")
#     print(success["successPlayers"])
#     print(" ")
   
luck = (len(successes)/numTries)*100

print("number of success :")
print(len(successes))
print("luck :")
print(str(luck)+"%")


GaBuZoMeu
Habitué(e)
Messages: 6020
Enregistré le: 05 Mai 2019, 10:07

Re: Probabilité et Tetris 99

par GaBuZoMeu » 21 Déc 2020, 17:03

Bonjour,

Ta procédure de test ne va pas, et ceci pour plusieurs raisons :

1°) La plus grave est ta façon de tirer au hasard le numéro de l'équipe pour chaque joueur.
random()*10 te rend un nombre suivant une loi uniforme sur [0,10[. Quand tu prend la partie entière du reste dans la division par 4, tu as 3 chances sur 10 de trouver 0, 3/10 de trouver 1, 1/5 de trouver 2 et 1/5 de trouver 3. Pas du tout équiprobable, donc.

2°) Tu interprètes "moins de 10" par "au plus 10" puisque ta condition est
if teams[team] <= playersQtyMin:

3°) Quand dans un essai tu as plus d'une équipe qui a au plus playersQtyMin joueurs, tu augmentes la longueur de ta liste de succès du nombre d'équipes vérifiant cette condition, au lieu de l'augmenter de 1.

Voici une procédure correcte :
Code: Tout sélectionner
import random as rd

def Test(nbEssais,minJoueurs) :
    nbMoins=0
    for essai in range(nbEssais) :
        Eq=[0,0,0,0]
        for joueur in range(99) :
            numEq=rd.randrange(4)
            Eq[numEq]+=1
        if min(Eq)<minJoueurs : nbMoins+=1
    print("Nombre d'essais : {0}\n\
Pourcentage des essais pour lesquels une équipe a moins de {1} joueurs :\n\
{2:.3%}".format(nbEssais,minJoueurs,nbMoins/nbEssais))


Quand tu essaies pour 10 joueurs :
Code: Tout sélectionner
Test(10**7,10)

Tu obtiens, au bout d'un certain temps :
Code: Tout sélectionner
Nombre d'essais : 10000000
Pourcentage des essais pour lesquels une équipe a moins de 10 joueurs :
0.020%


Ceci est tout à fait conforme au résultat théorique trouvé avec la procédure donnée plus haut :
Code: Tout sélectionner
probabilité d'avoir au moins une équipe avec moins de 10 joueurs :
1317761046901684365136107277304555426687426182921337095/6277101735386680763835789423207666416102355444464034512896
soit à peu près 0.0209931%

Ce résultat théorique s'obtient d'ailleurs beaucoup plus rapidement.

PS. Une précision qui t'a peut-être échappée : la procédure que j'ai écrite dans un précédent message n'est pas une simulation, contrairement à celle que je viens d'écrire. Elle donne un résultat mathématiquement exact.

matio
Membre Naturel
Messages: 10
Enregistré le: 13 Oct 2017, 20:14

Re: Probabilité et Tetris 99

par matio » 28 Jan 2021, 22:04

Merci pour ta réponse!

Merci pour les erreurs. J'avais codé ça vite fait, j'aurais dû faire plus attention.

Effectivement, désolé, j'avais pas compris ce que tu avais fait. Merci à toi du coup! :)

 

Retourner vers ⚜ Salon Mathématique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 46 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite