π
<-

État stable marche aléatoire

État stable marche aléatoire

Postby cpierquet » 26 Feb 2016, 14:56

Hello la communauté, je reviens "à la charge" avec les graphes probabilistes / chaînes de Markov et la recherche de l'éventuel état stable.

Ce matin avec les Spé on a fait un exo de recherche d'état stable en dimension 3 et un des élèves a remarqué que le procédé était assez mécanique, et que d'un point de vue algorithmique cela devait pouvoir se faire.

J'ai donc réfléchi un peu à la manière de précéder pour que cela puisse passer sur une calculatrice, en conservant l'esprit du programme en obtenant l'éventuel état stable par système.

Voilà donc les grandes lignes du procédé :
  1. on détermine la matrice de transition
    $mathjax$M$mathjax$
    carrée d'ordre
    $mathjax$n$mathjax$
    du graphe (qui admet une puissance dont aucun des coefficients n'est nul...)
  2. l'état stable
    $mathjax$\Pi$mathjax$
    vérifiant
    $mathjax$\Pi=\Pi \times M$mathjax$
    donne un système linéaire de
    $mathjax$n$mathjax$
    équations à
    $mathjax$n$mathjax$
    inconnues (en transposant...)
  3. ce système, tel quel, ne peut pas se résoudre car les équations sont "liées"
  4. on retire une équation (la première par exemple) que l'on remplace par celle venant du fait que la somme des coefficients de
    $mathjax$\Pi$mathjax$
    vaut 1
  5. le nouveau système se transforme matriciellement sous forme
    $mathjax$AX=B$mathjax$
  6. la solution du système est donnée par
    $mathjax$X=A^{-1} \times B$mathjax$

Prenons un petit exemple pour comprendre comment "construire" les matrices
$mathjax$A$mathjax$
et
$mathjax$B$mathjax$
:

  • on prend par exemple comme matrice de transition
    $mathjax$M=\begin{pmatrix} 0,1 & 0 & 0,9 \\ 0,9 & 0,1 & 0 \\ 0,3 & 0,1 & 0,6 \end{pmatrix}$mathjax$
  • on vérifie que
    $mathjax$M^2$mathjax$
    ne comporte aucun 0, et donc qu'il existe un état stable
    $mathjax$\Pi=\begin{pmatrix} x & y & z \end{pmatrix}$mathjax$
  • $mathjax$\Pi=\Pi \times M$mathjax$
    donne directement
    $mathjax$\begin{pmatrix} x & y & z \end{pmatrix}=\begin{pmatrix} 0,1x+0,9y+0,3z & 0x+0,1y+0,1z & 0,9x+0y+0,6z \end{pmatrix}$mathjax$
  • soit encore
    $mathjax$\begin{cases}0,1x+0,9y+0,3z=x \\ 0x+0,1y+0,1z=y \\ 0,9x+0y+0,6z=z \end{cases} \Leftrightarrow \begin{cases}-0,9x+0,9y+0,3z=0 \\ 0x-0,9y+0,1z=0 \\ 0,9x+0y-0,4z=0 \end{cases}$mathjax$
  • la matrice associée à ce système est
    $mathjax$\begin{pmatrix} -0,9 & 0,9 & 0,3 \\ 0 & -0,9& 0,1 \\ 0,9 & 0 & -0,4 \end{pmatrix}$mathjax$
    et le lecteur peut vérifier "facilement" qu'elle vaut
    $mathjax$(M-I_3)^\top$mathjax$
  • on remplace la première équation par
    $mathjax$x+y+z=1$mathjax$
    et on obtient
    $mathjax$\begin{cases}x+y+z=1 \\ 0x-0,9y+0,1z=0 \\ 0,9x+0y-0,4z=0 \end{cases}$mathjax$
  • ce nouveau système s'écrit
    $mathjax$AX=B$mathjax$
    avec
    $mathjax$A=\begin{pmatrix} 1 & 1 & 1 \\ 0 & -0,9& 0,1 \\ 0,9 & 0 & -0,4 \end{pmatrix}$mathjax$
    ,
    $mathjax$X=\begin{pmatrix} x \\ y \\ z \end{pmatrix}$mathjax$
    et
    $mathjax$B=\begin{pmatrix} 1 \\ 0 \\ 0 \end{pmatrix}$mathjax$
  • on fait travailler la calculatrice, et on obtient
    $mathjax$X=A^{-1}B=\begin{pmatrix} \frac27 \\ \frac{1}{14} \\ \frac{9}{14} \end{pmatrix}$mathjax$
    soit
    $mathjax$\Pi=\begin{pmatrix} \dfrac27 & \dfrac{1}{14} & \dfrac{9}{14} \end{pmatrix}$mathjax$

Il restait donc à programmer tout cela, ce n'est pas du tout optimisé, mais cela fonctionne !
Avec la matrice
$mathjax$M$mathjax$
définie coefficient par coefficient, on calcule
$mathjax$A=(M-I_n)^\top$mathjax$
puis on remplace la première ligne par des 1 ; la matrice
$mathjax$B$mathjax$
est quant à elle constituée d'un 1 et de 0 ensuite...
J'ai rajouté un petit test après la saisie d'une ligne pour vérifier une éventuelle erreur (je pense que le test est suffisant d'ailleurs...)

Code: Select all
Disp "MATRICE M CARREE ORDRE n"
Input "n=",N
{N,N}→dim([J])
For(I,1,N)
0→S
For(J,1,N)
Input "COEFF DANS [0,1]=",K
K→[J](I,J)
S+K→S
End
If S=1
Then
Disp "LIGNE OK"
Else
Disp "LIGNE PAS OK"
Stop
End
End
Disp "MATRICE M"
Pause [J]
([J]-unité(N))t→[I] (avec t la transposition !)
For(L,1,N)
1→[I](1,L)
End
Disp "SYSTEME AX=B"
Disp "A=",[I]
Pause
{N,1}→dim([H])
1→[H](1,1)
For(L,2,N)
0→[H](L,1)
End
Disp "B=",[H]
Pause
Disp "X="
Pause [I]^(-1])[H]>Frac
Disp "ETAT STABLE="
Disp [I]^(-1)[H]>Frac


Et voilà le déroulé sur TI83CE :
Capturer 1.png
Capturer 2.png
Capturer 3.png
Capturer 4.png
Capturer 5.png
Capturer 6.png
ETSTABLE.gif
You do not have the required permissions to view the files attached to this post.
Last edited by cpierquet on 26 Feb 2016, 17:48, edited 2 times in total.
User avatar
cpierquetPremium
Niveau 9: IC (Compteur Infatigable)
Niveau 9: IC (Compteur Infatigable)
Level up: 30.1%
 
Posts: 202
Joined: 10 Mar 2014, 18:34
Location: Chaumont (52)
Gender: Male
Calculator(s):
MyCalcs profile
Class: Prof de Maths [Lycée & BTS]

Re: État stable marche aléatoire

Postby critor » 26 Feb 2016, 15:05

Félicitations ! :bj:


A un moment j'avais pour projet de compléter le programme GraphMaster pour TI-Nspire avec la saisie d'un état initial et la recherche d'un état stable.

Mais plus la date fatidique du 1er janvier 2018 se rapproche (c'est-à-dire l'entrée en vigueur du mode examen détruisant tout programme non préchargé d'origine dans la calculatrice par le constructeur), moins j'en trouve la motivation.
Image
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 54.5%
 
Posts: 42500
Images: 17346
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
MyCalcs profile
YouTube: critor3000
Twitter: critor2000
GitHub: critor

Re: État stable marche aléatoire

Postby Bisam » 26 Feb 2016, 15:08

Il y a un problème si les 2 premières lignes de la transposée de M-In sont indépendantes et la 3ème proportionnelle à la seconde. En remplaçant la première, on n'obtient pas une matrice inversible.
Il vaut mieux chercher le noyau de la transposée de M-In puis diviser le vecteur directeur obtenu par la somme de ses coefficients pour le "normaliser".
Pour cela, on peut utiliser la méthode du pivot de Gauss (et la fonction "ref").
C'est un poil plus technique à écrire, cependant.

On peut aussi chercher quelle ligne on peut éliminer... en cherchant si elle est combinaison des autres... mais cela revient à chercher le noyau, donc on n'y gagne rien.
User avatar
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 69.6%
 
Posts: 5670
Joined: 11 Mar 2008, 00:00
Location: Lyon
Gender: Male
Calculator(s):
MyCalcs profile

Re: État stable marche aléatoire

Postby cpierquet » 26 Feb 2016, 15:52

Oui, merci Bisam pour les précisions, je n'avais pas aux différentes possibilités de "liaison" des lignes... erf... et pour le coup ce ne sont pas trop les élèves qui auraient pu me lancer sur cette piste...
Je n'avais pas assez réfléchi à ce problème éventuel :?

Du coup niveau TS cela devient difficilement programmable !
Ou alors commencer par remplacer la 1ère ligne, tester l'inversibilité, et tant qu'elle n'est pas inversible on remplace la ligne suivante... faisable je pense...
User avatar
cpierquetPremium
Niveau 9: IC (Compteur Infatigable)
Niveau 9: IC (Compteur Infatigable)
Level up: 30.1%
 
Posts: 202
Joined: 10 Mar 2014, 18:34
Location: Chaumont (52)
Gender: Male
Calculator(s):
MyCalcs profile
Class: Prof de Maths [Lycée & BTS]

Re: État stable marche aléatoire

Postby Bisam » 26 Feb 2016, 16:01

Si le but est de faire programmer les élèves, effectivement, ça risque d'être difficile... mais ça l'était déjà un peu.
On peut "tricher" en testant les lignes 1 par 1, jusqu'à obtenir celle que l'on peut remplacer par une liste de 1 pour avoir une matrice inversible. Il suffit d'expliquer aux élèves que la calculette connait une façon de tester si une matrice est inversible.
Algorithmiquement, c'est un peu moins efficace, mais plus facile à expliquer.

Sinon, tu peux aussi utiliser la méthode dite de "la boîte noire" en leur fournissant un bout de code qui renvoie un vecteur directeur de
$mathjax$\ker\left({}_{}^{t}(M-I_n)\right)$mathjax$
...

Par ailleurs, il faudrait aussi prévoir les cas où M-In est inversible... et où, par conséquent, il n'y a PAS d'état stable.
User avatar
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 69.6%
 
Posts: 5670
Joined: 11 Mar 2008, 00:00
Location: Lyon
Gender: Male
Calculator(s):
MyCalcs profile

Re: État stable marche aléatoire

Postby cpierquet » 26 Feb 2016, 16:08

Il y a un problème si les 2 premières lignes de la transposée de M-In sont indépendantes et la 3ème proportionnelle à la seconde. En remplaçant la première, on n'obtient pas une matrice inversible.


Je n'arrive pas - ça doit être le weekend qui approche... - à construire une
$mathjax$M$mathjax$
telle que
$mathjax$(M-I_n)^\top$mathjax$
donne les lignes 1 et 2 indépendantes et la 2 et la 3 proportionnelles...
User avatar
cpierquetPremium
Niveau 9: IC (Compteur Infatigable)
Niveau 9: IC (Compteur Infatigable)
Level up: 30.1%
 
Posts: 202
Joined: 10 Mar 2014, 18:34
Location: Chaumont (52)
Gender: Male
Calculator(s):
MyCalcs profile
Class: Prof de Maths [Lycée & BTS]

Re: État stable marche aléatoire

Postby Bisam » 26 Feb 2016, 16:17

J'ai répondu machinalement, sans me préoccuper du contexte des chaînes de Markov...
Du coup, je ne suis pas certain que l'on puisse effectivement rencontrer ce cas !

Je creuse...
User avatar
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 69.6%
 
Posts: 5670
Joined: 11 Mar 2008, 00:00
Location: Lyon
Gender: Male
Calculator(s):
MyCalcs profile

Re: État stable marche aléatoire

Postby Bisam » 26 Feb 2016, 16:38

Bon, après quelques minutes, il s'avère que le seul cas où cela pourrait survenir serait une matrice de la forme :
$mathjax$M=\begin{pmatrix}1&0&0\\
0&a&1-a\\
0&b&1-b\\
\end{pmatrix}$mathjax$

Mais tu excluais ce cas par ton 1)... et, en plus, dans ce cas, l'état stable n'est pas difficile à trouver !

Finalement, beaucoup de bruit pour rien.
Il faut juste envisager que l'élève puisse utiliser le programme dans ce cas aussi... ou, pire, dans le cas suivant :
$mathjax$M=\begin{pmatrix}0&1&0\\
0&0&1\\
1&0&0\\
\end{pmatrix}$mathjax$
.
User avatar
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 69.6%
 
Posts: 5670
Joined: 11 Mar 2008, 00:00
Location: Lyon
Gender: Male
Calculator(s):
MyCalcs profile

Re: État stable marche aléatoire

Postby cpierquet » 26 Feb 2016, 17:07

Merci pour la précision !

Par contre, je précise bien que j'utilise l'algorithme dans le cas où on a une puissance de M qui ne comporte aucun zéro, donc dans le cas
$mathjax$M=\begin{pmatrix}0&1&0\\ 1&0&0\\ 0&0&1\\ \end{pmatrix}$mathjax$
on "passe"...

Pour poursuivre quand même avec les éventuels cas particuliers, est-il possible de tomber dans un cas de lignes liées en dimension 4 (ou +) de telle sorte que ce ne soit pas la première qu'il faille remplacer ? J'avais fait un exemple de marche aléatoire avec mes élèves qui simulait un lancer de ballon entre eux 6 de manière "programmée", et le remplacement de la 1ère ligne marchait :)

Et puis sinon je n'ai pas demandé aux élèves de faire le programme, mais je leur ai montré le principe ;-) ils sont un peu curieux !!
User avatar
cpierquetPremium
Niveau 9: IC (Compteur Infatigable)
Niveau 9: IC (Compteur Infatigable)
Level up: 30.1%
 
Posts: 202
Joined: 10 Mar 2014, 18:34
Location: Chaumont (52)
Gender: Male
Calculator(s):
MyCalcs profile
Class: Prof de Maths [Lycée & BTS]

Re: État stable marche aléatoire

Postby Bisam » 26 Feb 2016, 17:17

Je pense que le calcul que j'ai effectué (sur ma feuille) prouve que le remplacement de la 1ère ligne ne marche pas seulement dans le cas où la 1ère colonne de M est un 1 suivi de plein de 0 (et du coup, la 1ère ligne aussi).
Cela est dû au fait que les coefficients sont entre 0 et 1... Je te laisse t'en convaincre.

Au fait, ton test sur S et P ne suffit pas pour contenir les coefficients entre 0 et 1 :
Contre-exemples : (2, -1/2, -1/2), ou encore (2, 0, -1) ou (1,1,1,-1,-1) passent le test...
User avatar
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 69.6%
 
Posts: 5670
Joined: 11 Mar 2008, 00:00
Location: Lyon
Gender: Male
Calculator(s):
MyCalcs profile

Next

Return to TI-Basic

Who is online

Users browsing this forum: No registered users and 7 guests

-
Search
-
Social TI-Planet
-
Featured topics
Ndless for CX 4.5.5 / CX II 6.2.0
Comparaisons des meilleurs prix pour acheter sa calculatrice !
"1 calculatrice pour tous", le programme solidaire de Texas Instruments. Reçois gratuitement et sans aucune obligation d'achat, 5 calculatrices couleur programmables en Python à donner aux élèves les plus nécessiteux de ton lycée. Tu peux recevoir au choix 5 TI-82 Advanced Edition Python ou bien 5 TI-83 Premium CE Edition Python.
Enseignant(e), reçois gratuitement 1 exemplaire de test de la TI-82 Advanced Edition Python. À demander d'ici le 31 décembre 2024.
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
12345
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...
Donate
Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
2936 utilisateurs:
>2917 invités
>9 membres
>10 robots
Record simultané (sur 6 mois):
32248 utilisateurs (le 01/09/2025)
-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)