Poster un nouveau sujet Poster une réponse
la fourmie
Auteur Message
monsalbert
Invité
Posté le : Ven 05 Avr 2013, 18:13   Citer 

bonjour linka ,

Sur les proba.(fourmie de Markov)

Soit une fourmie sur une pyramide ABCDS ( base carrée ABCD; sommet S)
A partir de:" pour tout nombre entier naturel n strictement positif, on note :
Sn l’événement « la fourmi est au sommet S après n pas », et pn la probabilité de cet événement. "

Il faudra calculer Pn mais le plus dur est de faire aller la fourmie de A ( point départ: au moment du lancement) au sommet S en acceptant tous les chemins possibles. Le nombre de pas n sera introduit à souhait dans l'introduction.
Envisagé :
A,B, C, D défini par 1,2,3,4 / le sommet S par 0 ( A = 1 au départ

_ entAleat de 0 à 4 dira ou le mobile va ex: 2 il est en B

1 - comment empêcher 2 valeurs identiques de suite ?
2- comment obliger le mobile à être an A ou B ou C ou D au (n-1)ième pas pour pouvoir être en S au n ième pas.

Merci linka.

  Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Ven 05 Avr 2013, 19:56   Citer 

La fourmie peut-elle revenir en des points déjà parcourus ? Je pense que oui.

La fourmi se déplace-t-elle sur les arrêtes ou de point en point ? (cela interdit tantôt les liens AC et BD ?)
Je pense que ce sont les arrêtes sinon c'est trop facile

EDIT : cela implique une différence topologique entre les points à cause des déplacements AC et BD qui sont interdits

Je suppose que chaque côté représente un pas.

Utilise une boucle pour recommencer l'aléatoire jusqu'à obtenir une valeur valide.

Les points ne sont pas topologiquement équivalents. EDIT: voir remarque sur les segments AC et BD interdits
Il faudra modifier l'aléatoire en perfectionnant la boucle qui interdit les mouvements invalides. (pour l'instant le seul invalide cité était l'abscence de déplacement, maintenant on interdira aussi les segments AC et BD)
SAUF si les déplacements sont libres de point en point.


Code
DelVar V
Prompt N,E
For(B,1,E // E expériences
1->A  // 1 car point A au début
For(C,1,N  // N pas
Repeat Ans-A and AnsA-3 and AnsA-8   // on a 3 ou 8 pour les segments AC et BD
randInt(0,4
End
Ans->A
End
If not(A   // point S
V+1->V
End
V/E // V expériences vraies et E expériences au total d'où p(Sn)=V/E


L'expérience aléatoire que tu proposes et que je dévelopai n'est pas forcément la meilleure approche.
Certes la loi des grands nombres permet d'approcher la probabilité par expérience répétée, mais je préfère utiliser un crible pour étudier toutes les possibilités.

Ce crible se ferait avec une imbrication de boucles décrivant toutes les positions possibles à chaque pas, et finalement tous les itinéraires.
Avec bien sûr les boucles de vérification de validité de la position par rapport à la précédente.

Une seule difficulté subsiste, celle du nombre de pas variable.
Je palierai à cela par de la récursivité.

Code
// programme FOURMI
Prompt N
DelVar VDelVar T
1->J // mon pointeur // commence à 1 car l'état de départ est fixé sans crible
1->A
{1->L1 // ma pile de mémoire
prgmFOURMREC
V/T // proba


Code
// programme FOURMREC
J+1->J
For(A,0,4

L1(J-1
If Ans-A and AnsA-3 and AnsA-8
Then

If J-N
Then
A->L1(J
prgmFOURMREC
J-1->J
L1(J->A

Else
T+1->T
If not(A
V+1->V

End

End

End

============
J'ai étudié le problème théoriquement.

Je dénombre les évènements du pas n avec tn et ceux en S au pas n avec xn et cherche les relations de récurrence. de x,t et p.

p=x/t
p0=0 puisqu'on commence au point A
x0=0
t0=1
x et t dépendent de la topologie

Si la topologie est uniforme, la probabilité est p[n+1]=(1-pn)/4 et p0=0
converge vers 1/5

x[n+1]=tn-xn
t[n+1]=4*tn
p[n+1]=x[n+1]/t[n+1]=(tn-xn)/(4*tn)=(tn-pn*tn)/(4*tn)=(1-pn)/4
https://imagizer.imageshack.com/a/img35/5223/fourmi1.png

Si la topologie suit les arrêtes, p[n+1]=(1-pn)/(3+pn)
converge vers 0.23607 = sqrt(5)-2

x[n+1]=tn-xn
t[n+1]=3*tn+xn
p[n+1]=x[n+1]/t[n+1]=(tn-xn)/(3*tn+xn)=(tn-tn*pn)/(3*tn+tn*pn)=(1-pn)/(3+pn)
https://imagizer.imageshack.com/a/img163/9846/fourmi2.png

----------------------
ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)

Pour tout le monde et surtout les débutants, quelques-uns des articles courants :
*Traductions Algorithmie/Ti-Basic.
*Caractères spéciaux sur Tout82
Les défauts du TI-Basic : Goto_versus_algo et DelVar/End/Lbl/guillemet/store
 Adresse email Haut de page Bas de page 
 
monsalbert
Invité
Posté le : Sam 06 Avr 2013, 15:49   Citer 

oui,

La fourmie peut revenir en des points déjà parcourus
chaque côté représente un pas.
La fourmi se déplace sur les arrêtes

" Les points ne sont pas topologiquement équivalents." que veux tu dire ? A,B,C,D sont pareils..S d'accord.

Il faut revoir tout ça.

  Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Sam 06 Avr 2013, 16:01   Citer 

Je veux dire qu'on ne peut pas se déplacer entre A et C d'une part ni entre B et D d'autre part. (je faisais directement le lien avec ma question des déplacements sur arrêtes)
Et cette différence de topologie par rapport au déplacement libre se répercute directement sur mes schémas théoriques.

J'ai édité mon premier message pour apporter plus de détails et faire le lien entre la topologie et les segments interdits.
J'ai aussi corrigé quelques conneries de mon premier programme.

SI ON CHANGE DE METHODE : (symétrie, changement de catégories,...)

On pourrait identifier les points en deux catégories : base ou sommet.
En effet partir du sommet implique de le quitter et partir d'un point de la base implique deux directions sur la base et une vers le sommet, quelque soit le point de la base.
Donc une variable de position 0 ou 1 et une probabilité de changement de catégorie 1/3 quand on est déjà sur la base et 1 quand on est au sommet S.
http://img820.imageshack.us/img820/7293/fourmi3.png
Code
Prompt N,E
DelVar V
For(B,1,E // E expériences
0 // départ sur la base
For(C,1,N  // N pas
not(Ans)not(randInt(0,2
End
If Ans
V+1->V
End
V/E

La théorie de cette méthode est cohérente avec mon autre théorie. (en gardant à l'esprit que la catégorie base contient en fait 4 points)
En notant x le nombre de possibilités au sommet et y lenombre à la base,
x[n+1]=yn
y[n+1]=2yn+4xn
t=x+y
p[n+1]=x[n+1]/(x[n+1]+y[n+1])=yn/(3yn+4xn)=(tn-xn)/(3(tn-xn)+4xn)=(tn-pn*tn)/(3tn+pn*tn)=(1-pn)/(3+pn)

Si les segments AC et BD sont autorisés, on a y[n+1]=2yn+4xn et on retombe sur la même formule de p que lorsque je distinguait les points.

----------------------
ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)

Pour tout le monde et surtout les débutants, quelques-uns des articles courants :
*Traductions Algorithmie/Ti-Basic.
*Caractères spéciaux sur Tout82
Les défauts du TI-Basic : Goto_versus_algo et DelVar/End/Lbl/guillemet/store
 Adresse email Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Lun 08 Avr 2013, 19:09   Citer 

Puisque tu as dis ici en ps avoir du mal et surtout avec Ans, je poste ce message.

Repeat execute le contenu puis effectue le test.

Comme les valeurs 0,1,2,3,4 sont équiprobables, empêcher certains états génère un nouvel aléatoire équiprobable pour les états qui restent.

Ans=Answer=Réponse=Rép
Elle contient le résultat du dernier calcul ou pause avec affichage. Je l'utilise pour l'aléatoire.
Ne pas commander de stockage dans la boucle Repeat est mon habitude pour optmiser la vitesse de cribles. (de toutes façon cela va dans Ans, alors j'économise autant d'affectation que d'execution de la boucle moins l'affectation après la boucle.)

La différence A-Ans me permet de détecter que les variables sont différentes, donc qu'on est bien en un nouveau point par rapport au point précédent.
En effet cela vaut zéro si Ans=A, ce qui correspond à l'information "faux", toute valeur non-nulle étant vraie.

Le produit Ans*A me permet de détecter les segments AC et BD. Expérimentalement on trouve les produits 3 et 8 pour chacun et aucun autre segment.
D'où la différence du produit avec 3 et 8.

randInt=entAléat
Sur ti82 c'est "int 5rand" pour "ent(5NbrAléat)" ou "entAléat(0,4)"

L'étude par simulation brute de tous les itinéraires sefait en imbriquant des boucles de cribles, ici ce sont des For.
Si je code chaque boucle dans un même programme la procédure est récurrente. On doit prévoir un certain nombre de boucle, une variable pour chaque boucle, et on ne peut pas en utiliser plus que prévu.
La récursivité consiste à imbriquer un programme dans lui même. Ici j'ai choisi de placer une boucle For par programme. L'imbrication de l'execution du programme me permet donc d'imbriquer les boucles.
Rappelons qu'arriver à la fin d'un programme (sortie de ma boucle For) provoque le retour au programme précédent.
La variable J me permet de savoir à quel niveau d'execution je me trouve : Suis-je en train d'executer pour la première fois ou la n-ième ?
La liste L1 me permet de récupérer les données (ici W) des précédentes executions du programme. En effet la calculatrice TI n'a qu'une seule variable W : la TI n'est pas conçue comme le language C qui déclare ses variables pour chaque fonction/programme, et s'en souvien même si on utilise le même nom de variable dans une autre execution de fonction, y compris quand la fonction s'execute elle même.
La récursivité a pour propriété de permettre très facilement de contrôler le nombre de boucles et sans maximum. (enfin tant qu'il reste de la mémoire)

Quant au principe de base du crible, il s'agit de générer tous les itinéraires jusqu'au pas n, de compter ce nombre d'itinéraires possibles (T) et de compter le nombre d'itinéraires qui se terminent au point S, l'évènement Sn dont on étudie la probabilité.
La fraction du nombre d'évènements vraies sur le nombre d'évènement au total donne la probabilité finale.

Mon second message propose un programme fonctionnant sur le même principe que mon premier programme.
J'ai changé la définition des évènements et les probabilités : je ne fait pas la différence entre les points de la base mais seulement entre le sommet et le reste.

not(Ans)not(randInt(0,2
Si Ans vaut 1, not(Ans) vaut 0 donc le résultat est 0.
Si Ans vaut 0, not(Ans) vaut 1, donc le résultat est not(randInt(0,2))
Si Ans vaut 0 et randInt(0,2) vaut 0, le résultat est 1.
Sinon le résultat est 0.
J'ai donc deux probabilités différentes selon l'état où je me trouve déjà :
-Si je suis déjà à l'état 1, probabilité 1 car je passerai obligatoirement à l'état 0. (je quitte le sommet pour aller sur la base)
-Si je suis déjà à l'état 0, j'ai deux chances (deux autres points de la base) de rester à 0 et une chance (un seul sommet) de passer à 1 d'où probabilités 2/3 et 1/3 respectivement.

----------------------
ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)

Pour tout le monde et surtout les débutants, quelques-uns des articles courants :
*Traductions Algorithmie/Ti-Basic.
*Caractères spéciaux sur Tout82
Les défauts du TI-Basic : Goto_versus_algo et DelVar/End/Lbl/guillemet/store
 Adresse email Haut de page Bas de page 
 
Poster un nouveau sujet Poster une réponse





  Page générée en 6 requêtes