Forum de mathématiques - Bibm@th.net
Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
Discussion fermée
#1 09-12-2018 11: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 13:10:58
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 16 988
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 15: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 15:59:42
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 16 988
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 18: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 18:23:24
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 16 988
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 20: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 21: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 21: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 22:39:34
- D_john
- Invité
Re : avec le logiciel Edupython-robot
AMHA ça fait 10!/5!/2^10
Sauf erreur !
#11 09-12-2018 22:49:33
- D_john
- Invité
Re : avec le logiciel Edupython-robot
Pardon !
Tout faux !!!
#12 09-12-2018 23:04:50
- D_john
- Invité
Re : avec le logiciel Edupython-robot
10!/(5!)^2/2^10 = 0.2461
Grrrrr !!!!!
#13 10-12-2018 13:12:32
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 16 988
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é...
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
Pages : 1
Discussion fermée