Inscription / Connexion Nouveau Sujet
Niveau exercices
Partager :

Déplacements

Posté par
flight
25-07-23 à 19:21

Bonsoir, je vous propose l'exercice suivant :
On se donne un repère orthonormé et de sorte que-5x5 et-5y5.
Un mobile est initialement situé à l'origine du repère 0(0,0).
Celui ci peut se déplacer de façon aléatoire d'une unité à chaque fois soit vers le bas, soit vers le haut, soit vers la droite ou la gauche avec equiprobabilite' du choix.
Lorsque que ce mobile atteint les limites définies  par les encadrements de x et y, le mobile s'arrête.
A partir de sa position initiale, combien de déplacements en moyenne  va effectuer ce mobile  avant de s'arrêter ?

Posté par
dpi
re : Déplacements 26-07-23 à 08:29

Bonjour,

 Cliquez pour afficher

Posté par
flight
re : Déplacements 26-07-23 à 08:51

Bonjour dpi, quelque soit la réponse un minimum de developpement serait apprécié

Posté par
Imod
re : Déplacements 26-07-23 à 18:32

Bonsoir Flight

Qu'attends-tu exactement ? Le problème fait penser à une variante d'une marche aléatoire dans Z² . Le graphe des déplacements est déjà assez complexe si on se limite au carré [-3,+3] X [-3,+3] alors si on  passe à la 5ème dimension ... Si tu veux une simulation informatique , c'est autre chose

Imod

Posté par
jandri Correcteur
re : Déplacements 26-07-23 à 18:35

Bonjour flight,

en résolvant un système de 15 équations à 15 inconnues (avec l'aide d'un logiciel) j'ai trouvé la valeur exacte de l'espérance du nombre de déplacements :

 Cliquez pour afficher

On en déduit une valeur approchée :
 Cliquez pour afficher


Une simulation informatique me donne la même valeur approchée.

Posté par
jandri Correcteur
re : Déplacements 26-07-23 à 19:04

Le résultat trouvé par dpi correspond plutôt à n=6, c'est-à-dire à la sortie du carré -5\leq x \leq 5 et -5\leq y\leq5.

Posté par
dpi
re : Déplacements 26-07-23 à 19:21

Bonsoir,
Je suis parti de l'idée que le minimum est 5
il n'y a pas de maximum puisque  un mobile idiot peut faire exprès de ne pas sortir

Alors j' ai pensé à une spirale "carrée" de 81 segments comme parcours maximum logique...
Toutes les valeurs de 5 à 81 donnent une moyenne de 43 .

Posté par
jandri Correcteur
re : Déplacements 26-07-23 à 20:39

@dpi

je comprends ton approche mais cela ne donne pas du tout la moyenne demandée.

Posté par
flight
re : Déplacements 27-07-23 à 11:16

Bonjour à tous

@Jandri , j'ai une valeur pas trop voisine de la tienne ....voici mon code quand meme :

Function co(x As Double, y As Double, k As Integer) As Integer
Dim choix As String
Randomize
t = Array("H", "B", "G", "D")
If x = 5 Or x = -5 Or y = 5 Or y = -5 Then  'condition de sortie
    co = k     ' retourne le nombre de deplacements obtenus quand le
                        mobile atteint x=5 ou x=-5 ou y=5 ou y=-5
    Else
     choix = t(Int(Rnd * (UBound(t) + 1)))
     Select Case choix
        Case Is = "H"
          co = co(x, y + 1, k + 1) 'on monte d'une graduation
        Case Is = "B"
          co = co(x, y - 1, k + 1)  'on descend d'une graduation
        Case Is = "G"
          co = co(x - 1, y, k + 1) ' on va vers la gauche d'une graduation
        Case Is = "D"
          co = co(x + 1, y, k + 1) 'on va vers la droite d'une graduation
     End Select
End If
End Function
'****'ici je calcul la moyenne du nbr de déplacements dans la routine ci deesous:
Sub BCRE()
e = 0  'compteur de boucles
q = 0 'valeur qui cumule les déplacements "k"
do
e = e + 1
q = q + co(0, 0, 0)
Loop Until e = 100000
MsgBox q / e  ' me retourne  26.4
End Sub

Posté par
jandri Correcteur
re : Déplacements 27-07-23 à 19:07

@Flight

Je ne vois pas d'erreur dans ton code.
Essaie-le avec n=2 (arrêt quand on atteint x=\pm2 ou y=\pm2) : tu dois trouver 4,5

Voici le code Maple de la fonction que j'ai utilisée pour un calcul approché (pour une grille de côté 2n) :

x:=0: y:=0: c:=0:
while abs(x)<n and abs(y)<n do
c:=c+1:
k:=r(): # renvoie un entier aléatoire entre 1 et 4
if k=1 then x:=x+1
elif k=2 then x:=x-1
elif k=3 then y:=y+1
else y:=y-1 fi
od;
return(c)

Posté par
flight
re : Déplacements 27-07-23 à 19:58

Bonsoir Jandri , en prenant n =2 , j'obtiens exactement 4,329
(j'ai meme augmenté le nombre d'itérations à 1 million)

Posté par
jandri Correcteur
re : Déplacements 27-07-23 à 21:52

Flight

J'ai traduit ton programme en Maple (j'aurais pu le faire en Python) et pour n=5 et 1 million d'itérations je trouve 29,24 (exactement comme avec mon programme) donc ton programme marche bien pour moi.

Je ne connais pas Visual Basic mais j'ai un doute pour la fonction Ubound que tu utilises dans l'instruction :
choix = t(Int(Rnd * (UBound(t) + 1)))

Peux-tu faire des essais pour vérifier que cela donne bien les "H", "B", "G", "D" aléatoirement ?

Posté par
Imod
re : Déplacements 28-07-23 à 12:08

Il est clair que pour un cadre limité à 2 , la réponse est 4,5 mais il semble que l'estimation par essais successifs fluctue pas mal . Pour une limite à 5 , mon estimation à la louche donnerait plutôt une moyenne 29,36 , mais bon ...

Imod

Posté par
flight
re : Déplacements 28-07-23 à 15:14

Bonjour jandri , j'utilise assez couramment l'expression
Int(Rnd * (UBound(t) + 1))   ici cette quantité peux prendre de facon équiprobable ,  les valeurs {0,1,2,3}   , (le tableau t  ayant chacune de ses valeurs indexée aux  rangs :  0,1,2 et 3 . pour  "H", "B", "G", "D".
Aux premieres lignes du programme figure l'instruction "Randomize" qui justement rend ce choix equiprobable via l'instruction Rnd

Posté par
jandri Correcteur
re : Déplacements 28-07-23 à 16:55


Bonjour Flight

D'accord mais je ne vois pas du tout pourquoi tu ne trouves pas comme moi avec pratiquement le même programme !

Je suis à peu près sûr de mon résultat (29,24 pour n=5) car je l'obtiens par deux programmes différents et surtout c'est la valeur approchée du résultat exact que j'obtiens par résolution d'un système.

Pour n=2 ta valeur approchée 4,329 est trop loin du résultat exact 9/2=4,5.

Posté par
Imod
re : Déplacements 29-07-23 à 11:01

Le problème a viré sur l'aspect programmation mais je serais plutôt intéressé par une valeur exacte par exemple pour un cadre [-3 ; +3] X [-3 ; +3] .

Imod

Posté par
jandri Correcteur
re : Déplacements 29-07-23 à 11:32

Bonjour Imod

Pour le cas n=3 j'obtiens \dfrac{135}{13} en résolvant un système de 6 équations à 6 inconnues (c'est faisable à la main).

Si e(a,b) est l'espérance du temps d'atteinte du bord en partant du point (a,b) on a (avec les symétries) :

e(0,0)=1+e(1,0)
e(1,0)=1+\dfrac14e(0,0)+\dfrac12e(1,1)+\dfrac14e(2,0)
e(2,0)=1+\dfrac14e(1,0)+\dfrac12e(2,1)
e(1,1)=1+\dfrac12e(1,0)+\dfrac12e(2,1)
e(2,1)=1+\dfrac14e(1,1)+\dfrac14e(2,0)+\dfrac14e(2,2)
e(2,2)=1+\dfrac12e(2,1)

Posté par
Imod
re : Déplacements 29-07-23 à 17:49

D'accord , j'avais le graphe des probabilités mais je n'avais pas traduit en termes d'espérances . On obtient un simple système linéaire .

Imod

Posté par
flight
re : Déplacements 29-07-23 à 19:22

Bonjour ,

je ne m'explique pas ces ecarts dans nos simulations ....j'ai beau retourner la question dans tout les sens ...

Posté par
flight
re : Déplacements 29-07-23 à 19:37

une interrogation qu'il vient est qu'une simulation fournie systematiquement une valeur finie pour l'esperance alors qu'il est tout à fait possible que le mobile n'atteigne jamais les bord du grillage

Posté par
flight
re : Déplacements 29-07-23 à 19:39

il y a donc "du presque sûrement certain" que le mobile va atteindre une limite du grillage "

Posté par
derny
re : Déplacements 30-07-23 à 15:49

Bonjour
Le point (2,2) ne peut jamais être atteint (alors que .... message de 11h32) car à (2,1) on s'arrête.

Posté par
derny
re : Déplacements 30-07-23 à 16:06

Autour de l'origine il y a 4 points possibles d'égale valeur. Pour chacun de ces points (0,1 par exemple) on peut les atteindre en 1 déplacement avec 1chance sur 4 ou en 3d en 3/64 ou en 5d en 5/1024 ou ... soit :
1d/4 + 3d/64 + 5d/1024 + ...
Pour le point (1,1) (4 pts id), on obtient :
4d/16 + 8d/256 + 12d/4096 + ...
Pour le point (0,2) (4 pts id), limite atteinte, on obtient :
2d/16 + 4d/256 + 6d/1024 + ...
Pour le point (1,2) (8 pts id), limite atteinte, on obtient :
5d/64 + 9d/1024 + 13d/16384 + ...
Reste à calculer tout ça.

Posté par
jandri Correcteur
re : Déplacements 30-07-23 à 18:29

@Derny

Tu n'as pas bien lu ce que j'ai écrit le 29-07-23 à 11:32

Je me plaçais dans le cas n=3 donc on ne s'arrête pas à (2,1).

Posté par
derny
re : Déplacements 30-07-23 à 20:54

Excuse jandri
Pour le cas le plus "simple" (de -2 à +2), c'est déjà pas simple ...

Posté par
jandri Correcteur
re : Déplacements 31-07-23 à 10:04

@ flight

J'ai traduit ton programme en python, je trouve toujours environ 29,24 (pour n=5) :

import random

def co(x,y,k):
\dots if x==5 or x==-5 or y==5 or y==-5:return(k)
\dots c=random.randint(0, 3)
\dots if c==0:return(f(x, y + 1, k + 1))
\dots elif c==1:return(f(x, y - 1, k + 1))
\dots elif c==2:return(f(x+1, y, k + 1))
\dots else:return(f(x-1, y, k + 1))

q=0
e=100000
for i in range(0,e):
\dots q = q + f(0, 0, 0)
print(q/e)

Posté par
derny
re : Déplacements 31-07-23 à 17:01

Bonjour
Les valeurs données un peu vite le 30 à 16h06 ne sont pas bonnes : à revoir

Posté par
flight
re : Déplacements 31-07-23 à 17:27

Bonsoir Jandri , impossible pour moi d'expliquer cette difference ...
j'ai meme remodifié mon code en retirant le tableau et en ecrivant simplement :

Function co(x As Double, y As Double, k As Integer) As Integer
Dim choix As String
Randomize

If x = 5 Or x = -5 Or y = 5 Or y = -5 Then
    co = k
    Else
     choix = Int(Rnd * 4)
     Select Case choix
        Case Is = 0
          co = co(x, y + 1, k + 1)
        Case Is = 1
          co = co(x, y - 1, k + 1)
        Case Is = 2
          co = co(x - 1, y, k + 1)
        Case Is = 3
          co = co(x + 1, y, k + 1)
     End Select
End If
End Function
Sub BCRE()
Dim q, e As Double
e = 0
q = 0
Do
e = e + 1
q = q + co(0, 0, 0)
Loop Until e = 1000000
MsgBox q / e
End Sub

j'obtiens 26,9  .... :?

Posté par
jandri Correcteur
re : Déplacements 31-07-23 à 20:47

Flight

Je ne comprends pas pourquoi tu utilises le type "Double" pour x et y (ce sont des entiers). Le test d'égalité entre deux variables de type "Double" est approximatif.

Essaie plutôt avec le type "Integer".

Posté par
flight
re : Déplacements 31-07-23 à 20:55

Bonsoir Jandri j'ai effectué ce changement , la valeur obtenue est environ 26,9  en changeant les  les types de x et y en "integer"

Posté par
derny
re : Déplacements 31-07-23 à 21:05

Bonsoir
J'ai repris plus sérieusement mes chiffres et sommations.
Si cela peut "vous départager" je trouve exactement 4.5 d pour un carré de -2 à 2.

Posté par
jandri Correcteur
re : Déplacements 31-07-23 à 21:22

Flight

Merci d'avoir fait le test. Je n'ai donc pas trouvé d'explication.

Derny

Je suis d'accord : 4,5 est la valeur exacte pour n=2.

Posté par
derny
re : Déplacements 02-08-23 à 14:18

Bonjour
Je reviens sur ce problème. Coup de chapeau à jandri qui, outre la résolution par programme, à résolu élégamment hors programmation grâce à l'espérance.  C'est le type de problème qui se prête à ce genre de résolution. La méthode avec laquelle j'étais parti est beaucoup trop laborieuse.

Posté par
Imod
re : Déplacements 02-08-23 à 19:15

@Derny , tu peux maintenant utiliser les mêmes arguments pour répondre ( si tu le souhaites ) à Déplacements 2

Imod

Posté par
derny
re : Déplacements 04-08-23 à 11:21

Bonjour
Notons que la simple fonction N=n^2.1 donne une bonne approximation jusqu'à n=5. N'ayant pas les chiffres au-delà je ne peux pas dire si l'approximation continue.

Posté par
LittleFox
re : Déplacements 04-08-23 à 14:00


Voici des chiffres au-delà

Déplacements

J'ai comme approximation l^2(1+(d-1)*0.17) avec l la limite du repère et d le nombre de dimensions du repère.

Ça ne marche pas bien pour les petites limites mais ça marche bien pour l \ge 8.

Posté par
derny
re : Déplacements 04-08-23 à 18:36

Bonjour
Super LittleFox
Peut-on avoir les valeurs exactes pour quelques valeurs au-delà de 5 en dimension 2 puisque les programmes sont faits (Jandri ou ... ) ?

Posté par
jandri Correcteur
re : Déplacements 04-08-23 à 23:28

Bonsoir Derny

Les valeurs exactes sont des nombres rationnels avec des entiers qui deviennent vite grands.

Par exemple pour n=10 on trouve \dfrac{4348426643591351025}{36962985023820298}

Voici des valeurs approchées avec deux chiffres après la virgule.

Pour n de 2 à 10 : 4.50, 10.38, 18.63, 29.24, 42.20, 57.53, 75.21, 95.25, 117.64

Pour n de 11 à 20 : 142.40, 169.51, 198.98, 230.80, 264.99, 301.53, 340.42, 381.68, 425.29, 471.26

Pour n de 21 à 30 : 519.59, 570.28, 623.32, 678.72, 736.48, 796.60, 859.07, 923.90, 991.09, 1060.64

Pour n de 31 à 35 : 1132.54, 1206.80, 1283.42, 1362.39, 1443.73

Après les temps de calcul deviennent longs : pour n=35 c'est un système de 630 équations à 630 inconnues !

Posté par
derny
re : Déplacements 05-08-23 à 08:39

Bonjour
Merci Jandri. On peut même trouver la fonction qui donne le nombre d'équations en fonction de n (je n'ai pas cherché mais ce ne devrait pas être trop difficile).

Posté par
Imod
re : Déplacements 05-08-23 à 17:18

Pour des raisons de symétrie le nombre d'équations et d'inconnues est n(n+1)/2 .
Imod



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 !