Bibm@th

Forum de mathématiques - Bibm@th.net

Bienvenue dans les forums du site BibM@th, des forums où on dit Bonjour (Bonsoir), Merci, S'il vous plaît...

Vous n'êtes pas identifié(e).

#1 09-12-2018 10:42:54

erichof
Membre
Inscription : 26-08-2011
Messages : 29

avec le logiciel Edupython-robot

Bonjour,
voici un programme avec Python qui répond à la partie 2 d'un problème.

from random import *
def marchedurobot(n):
    Nbrereussites=0
    for k in range (n):
        D=0
        G=0
        for i in range (10):
            P=randint(0,1)
            if P==0:
                D=D+1
            else :
                G=G+1

        if D==5:
            Nbrereussites=Nbrereussites+1
    return("fréquence de réussite=",Nbrereussites/n )

Est-il juste ?
Si je mettais "for i in range(n)" en troisième ligne du programme je trouve une fréquence (environ 0,26) qui semble être différente à celle quand je mets, comme ici,  "for k in range(n)" ... qui est d'environ 0,24.
Est-ce normal ?
Le "i" a-t-il une importance ?
Merci.
C.

Hors ligne

#2 09-12-2018 12:10:58

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 907

Re : avec le logiciel Edupython-robot

Salut,

Si tu passes 10 pour n en paramètre, le résultat est le même...
Corrige donc range(10) en range(n)  et passe 100 en paramètre pour n à ta fonction : moi, j'ai eu une grosse surprise !
Peut-être toi pas. Je suis curieux de savoir : qq chose me paraît louche...
Peux-tu me dire quel est ton énoncé ?

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#3 09-12-2018 14:03:01

tibo
Membre expert
Inscription : 23-01-2008
Messages : 1 097

Re : avec le logiciel Edupython-robot

Salut,

Il y a trop peu d'informations pour en être vraiment sûr, mais je pense que ce script modélise la marche aléatoire d'un robot, avec une proba de 0.5 d'avancer de 1 dans une direction donnée (par exemple en abscisse) et 0.5 d'avancer de 1 dans une autre direction (par exemple en ordonnée).
Si le robot commence en (0;0), les variables D et G donne respectivement l'abscisse et l'ordonnée du robot au cours de sa progression.
Et l'objectif du script est de calculer une valeur approchée de la probabilité d'arriver à l'abscisse 5 après 10 déplacements.
Le paramètre n est le nombre d'essais que l'on fait ; plus n sera grand, plus la valeur retournée sera précise.

Du coup, je ne suis pas d'accord avec ton changement de "range(10)" en "range(n)".



Sinon pour répondre à la question d'erichof, si tu mets "for i in range(n)" en troisième ligne du programme, cela va poser des problèmes.
En effet la variable i est à nouveau utilisée trois lignes plus loin dans ta deuxième boucle "for i in range(10)".
Je ne sais pas trop comment Python gère ça, mais ce qui est sûr, c'est que ton programme ne fera plus ce que tu veux.

Il faut donc que tu utilises des variables différentes pour chaque boucle.


A quoi sert une hyperbole?
----- A boire de l'hypersoupe pardi !

Hors ligne

#4 09-12-2018 14:59:42

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 907

Re : avec le logiciel Edupython-robot

Salut tibo,

Bien vu ! Je n'avais pas vu, parce que mal lu...Oui, il faut utiliser deux compteurs de noms différents, sinon, c'est malsain...
Pourtant Python semble gérer cela :
Pour n=10, ci-dessous  les couples : (1er i, 2e i).
(0, 0), (0, 1), (0, 2), (0, 3), (0, 4), (0, 5), (0, 6), (0, 7), (0, 8), (0, 9),
(1, 0), (1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (1, 7), (1, 8), (1, 9),
(2, 0), (2, 1), (2, 2), (2, 3), (2, 4), (2, 5), (2, 6), (2, 7), (2, 8), (2, 9),
(3, 0), (3, 1), (3, 2), (3, 3), (3, 4), (3, 5), (3, 6), (3, 7), (3, 8), (3, 9),
(4, 0), (4, 1), (4, 2), (4, 3), (4, 4), (4, 5), (4, 6), (4, 7), (4, 8), (4, 9),
(5, 0), (5, 1), (5, 2), (5, 3), (5, 4), (5, 5), (5, 6), (5, 7), (5, 8), (5, 9),
(6, 0), (6, 1), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6), (6, 7), (6, 8), (6, 9),
(7, 0), (7, 1), (7, 2), (7, 3), (7, 4), (7, 5), (7, 6), (7, 7), (7, 8), (7, 9),
(8, 0), (8, 1), (8, 2), (8, 3), (8, 4), (8, 5), (8, 6), (8, 7), (8, 8), (8, 9),
(9, 0), (9, 1), (9, 2), (9, 3), (9, 4), (9, 5), (9, 6), (9, 7), (9, 8), (9, 9)

Même type de sortie avec k et i :
[(0, 0), (0, 1), (0, 2), (0, 3), (0, 4), (0, 5), (0, 6), (0, 7), (0, 8), (0, 9),
(1, 0), (1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (1, 7), (1, 8), (1, 9),
(2, 0), (2, 1), (2, 2), (2, 3), (2, 4), (2, 5), (2, 6), (2, 7), (2, 8), (2, 9),
(3, 0), (3, 1), (3, 2), (3, 3), (3, 4), (3, 5), (3, 6), (3, 7), (3, 8), (3, 9),
(4, 0), (4, 1), (4, 2), (4, 3), (4, 4), (4, 5), (4, 6), (4, 7), (4, 8), (4, 9),
(5, 0), (5, 1), (5, 2), (5, 3), (5, 4), (5, 5), (5, 6), (5, 7), (5, 8), (5, 9),
(6, 0), (6, 1), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6), (6, 7), (6, 8), (6, 9),
(7, 0), (7, 1), (7, 2), (7, 3), (7, 4), (7, 5), (7, 6), (7, 7), (7, 8), (7, 9),
(8, 0), (8, 1), (8, 2), (8, 3), (8, 4), (8, 5), (8, 6), (8, 7), (8, 8), (8, 9),
(9, 0), (9, 1), (9, 2), (9, 3), (9, 4), (9, 5), (9, 6), (9, 7), (9, 8), (9, 9)]

Alors, je ne vois pas où serait le dysfonctionnement du prg...

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#5 09-12-2018 17:12:11

tibo
Membre expert
Inscription : 23-01-2008
Messages : 1 097

Re : avec le logiciel Edupython-robot

Étonnant que Python arrive à gérer ça... et vraiment malsain en effet...

Sinon je ne vois pas de dysfonctionnement particulier.
C'est normal de trouver des valeurs différentes à chaque fois que l'on fait tourner le programme... c'est le principe de l'aléatoire...
surtout avec un échantillon de taille 10...


A quoi sert une hyperbole?
----- A boire de l'hypersoupe pardi !

Hors ligne

#6 09-12-2018 17:23:24

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 907

Re : avec le logiciel Edupython-robot

Oui,

Sauf que quand j'envoie n=100 j'obtiens 0

avec for k in range(n)  et for i in range(n)...
Donc stupéfaction...
Pourtant :

G :  4936    D : 5064   Nombre de réussites : 0
('fréquence de réussite=', 0.0)

Pas pris le temps d'approfondir...
Probablement compteur de réussite mal placé, voilà pourquoi je souhaite voir l'énoncé avant de me prononcer...

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#7 09-12-2018 19:36:22

tibo
Membre expert
Inscription : 23-01-2008
Messages : 1 097

Re : avec le logiciel Edupython-robot

Rien de bizarre là dedans.

L'abscisse du robot suit une loi binomiale $\mathcal{B}(n',p)$, avec $n'$ le nombre de déplacements et $p=0.5$.
Si tu choisis $n'=100$, la proba d'arriver sur 5 est quasi-nulle.

Le premier "for k in range(n)" permet de modéliser un échantillon de $n$ robots qui vont faire leur marche aléatoire.
Le second "for i in range(10)" permet de faire 10 déplacements à chaque robot.

Cela n'a pas tellement de sens de remplacer le 10 par un n.


A quoi sert une hyperbole?
----- A boire de l'hypersoupe pardi !

Hors ligne

#8 09-12-2018 20:11:49

D_john
Invité

Re : avec le logiciel Edupython-robot

Salut yoshi (et tous les autres aussi),
Le code initial calcule la fréquence de l'événement "Arriver sur la diagonale en 10 pas" pour n essais (càd 5 pas en x et donc aussi 5 pas en y).
Si tu remplaces 10 par n, tu n'obtiens plus la fréquence du même événement... mais pour n = 10, ça marche, avec une dispersion évidemment plus importante.
A+
PS : Très marrant Python !

#9 09-12-2018 20:15:28

C.
Invité

Re : avec le logiciel Edupython-robot

Voici l'énoncé.
Je n'arrive pas à copier la figure.
Un petit robot doit rentrer à sa base. Il fonctionne de façon aléatoire en diagonale vers la droite ou vers la gauche avec la même probabilité.
On suppose que le robot fait exactement 10 déplacements et que la distance parcourue à chaque déplacement est identique.
Au départ, le rebot est à 10 carreaux horizontaux de sa base.
Ce qui fait que s'il avance par exemple de 2 diagonales à gauche puis 3 diagonales à droite puis 4 diagonales à gauche puis 1 diagonale à droite, on arrive à 2 carreaux au-dessus de la base.
S'il avance par exemple de 5 diagonales vers la gauche et de 5 diagonales vers la droite, il arrive à sa base.
Merci.
Je crois que i ou k ne change rien et que la probabilité théorique est de 5 parmi 10/2^10, n'est-ce pas ?
Merci.

#10 09-12-2018 21:39:34

D_john
Invité

Re : avec le logiciel Edupython-robot

AMHA ça fait 10!/5!/2^10
Sauf erreur !

#11 09-12-2018 21:49:33

D_john
Invité

Re : avec le logiciel Edupython-robot

Pardon !
Tout faux !!!

#12 09-12-2018 22:04:50

D_john
Invité

Re : avec le logiciel Edupython-robot

10!/(5!)^2/2^10 = 0.2461

Grrrrr  !!!!!

#13 10-12-2018 12:12:32

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 907

Re : avec le logiciel Edupython-robot

Re,

Avec l'énoncé, c'est maintenant clair pour moi...
Donc, j'ai quelque peu élagué le script d'Erichof.
J'ai aussi remplacé randint (0,1) par randrange(0,2) qui, selon Python Docs serait plus approprié...

from random import randrange

def marchedurobot(n):
    Nbrereussites=0
    for k in range (n):
        D=0
        for i in range (10):
            P=randrange(0,2)
            D+=(P==0)
        Nbrereussites+=(D==5)
    return ("Fréquence de réussite =",Nbrereussites/n )

print(marchedurobot(100000))

Sortie :

('fréquence de réussite =', 0.24787)

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

Pied de page des forums