A) PARTIE MATHEMATIQUE 1) Chaines de MARKOV a) Définitions

publicité
Groupe :
- MARRONE Fabien
- ZWILLINGER Damien
- MAIRE Thibault
Tuteur : Marietta Manolessou
Projet : 2A Groupe C
Date de création : Samedi 19 Janvier 2006
Date de modification : Mercredi 25 Janvier 2006
PROJET 2A – Groupe C
OPTIMISATION
-- Processus Stochastiques --
A)
PARTIE MATHEMATIQUE
1) Chaines de MARKOV
a) Définitions essentielles
o Chaine de Markov :

Soient :
- (Ω, F, P) un espace de probabilité
- T un ensemble quelconque
- (E, ℓ) un espace mesurable
- E = ensemble fini ou dénombrable : ensemble des états du système
- T = sous-ensemble de R+, ensemble des paramètres du temps
On appelle processus stochastique défini sur Ω, avec T ensemble des temps et E
espace des états, toute famille {X(t)}tЄT de variables aléatoires à valeurs dans E :
- la variable aléatoire X(t) est appelée : état à l’instant t.

Un processus stochastique défini sur un espace de probabilité (Ω, F, P) est
appelé Chaîne de Markov si l’égalité suivante entre probabilités
conditionnelles est bien vérifiée :
P[X t+s = j | Xt0 =i0, Xt1 =i1, …, Xtn =in, Xt =i] = P[Xt+s = j | Xt = i]
o Loi de probabilité d’état initial : П(0) = P[X0 = i] (i Є E)
o Vecteur de probabilité : u = {u1, u2, …, un} Є Rn
La somme des ui pour i=1 à i=n doit être égal à 1
o Matrice Stochastique P :
Une matrice carrée P = {pij} Є Mn( R ) est une matrice stochastique si chacune
de ses lignes est un vecteur de probabilité.
b) Graphe orienté d’une chaîne de Markov
Le graphe associé à une chaîne de Markov (et à sa matrice de transition P) est défini
par :
- Ses sommets qui représentent les états du système (i Є E)
- Ses arètes ( i -> j ) associées aux probabilités de transition : pij > 0
c) Régime du système
Le vecteur de probabilité des états du système à l’instant t = n (ligne de P à l’instant
n), : П(n) est appelé régime du système à l’instant n.
o Régime stationnaire :
Un régime П est stationnaire ssi : П.P = П , avec la somme des Пi = 1 et Пi >= 0
o
Régime permanent :
On appelle régime permanent, le vecteur de probabilité :
П t.q. Пi = lim n->∞ П(n)
ou lim n->∞ П(0). P(n) = П
o Ergodicité :
On dit qu’une chaîne de Markov est ergodique ssi il existe :
П
avec
П = lim n->∞ П(n)
pour tout régime initial П(0)
d) Propriétés des états dans une chaîne de Markov :
On considère l’application fi de l’ensemble des états E vers l’intervalle I = [0,1] :
E  [0,1]
fi : i  fi
fi = P[Xn = i |X0 = i] pour n>0
o Etat transitoire :
Si fi < 1
o Etat récurrent :
Si fi = 1
o Etat périodique :
Soit di = pgcd des longueurs de chemins partant de i et arrivant en i
Si di = 1
 L’état i est dit apériodique
Si di différent de 1
 L’état i est dit périodique de période di
o Etat absorbant :
Lorsque le système se trouve à l’état i et qu’il ne peut plus en sortir, on dit que
l’état est absorbant.
e) Classes d’équivalence d’une chaîne de Markov :
Voir états, les classes ont les mêmes propriétés que les états, ainsi il existe :
- des classes transitoires
- des classes récurrentes
- des classes absorbantes
2) Simplexe – Méthode des pénalités
B)
PARTIE INFORMATIQUE
1. Le package AWT (Abstract Windowing Toolkit)
Contient toutes les classes pour créer des interfaces utilisateur et pour dessiner des
graphiques et des images. Un objet d'interface utilisateur comme un bouton ou une barre
déroulante est appelé, dans la terminologie AWT, un composant.
La classe Component est la racine de tous les composants AWT. Quelques
composants renvoient des événements quand un utilisateur agit réciproquement avec les
composants (des listeners)
La classe AWT.Event et ses sous-classes sont utilisées pour représenter les
événements que les composants d’AWT peuvent renvoyer.
Un conteneur est un composant qui peut contenir des composants et d'autres
conteneurs. Un conteneur peut aussi avoir un manager de disposition (LayoutManager) qui
contrôle le placement visuel de composants dans le conteneur.
Le package AWT contient plusieurs manager de disposition des classes et une
interface pour construire le manager de disposition propre.
On appelle le package AWT ainsi dans notre programme :
-
import java.awt.*;
import java.awt.event.* ;
2. Le package SWING
Contrairement au package AWT, le package Swing met à disposition des composants
dont l'aspect est indépendant du système sur lequel les applications sont utilisées.
On y retrouve les composants classiques comme les boutons, les listes, les cases à
cocher, etc..., mais aussi un grand nombre de nouveaux composants comme :
Classes utilisées :
- JMenu : exécution d'un menu -- une fenêtre automatique contenant JMenuItems qui est
montré quand l'utilisateur choisit un article sur le JMenuBar
- JMenubar : barre de menu
- JMenuItem : bouton de menu.
- JDekstopPane : conteneur permettant de créer une interface de documents (ou fenêtres)
multiples sur un bureau virtuel.
- JTextPane : Un composant de texte qui peut être identifié par les attributs qui sont
représentés graphiquement.
- JScrollPane: vue déroulante pour un composant.
- JFrame: extension de java.awt.frame
- JLabel: petite zone de texte et/ou d’image.
- JButton: bouton cliquable.
- JTextField: composant qui permet l'édition d'une ligne simple de texte.
.
3. Le package JGRAPH
Dérivée de JComponent du package SWING, cette classe graphique permet de
dessiner les figures graphiques les plus complexes. Nous utilisons cette classe pour dessiner le
graphe orienté de la chaîne de Markov.
Petit mais totalement fonctionnel, JGraph est un composant Java qui facilite le
développement de représentations graphiques de réseau grâce aux principes de la théorie des
graphes. À l'aide de JGraph, il est possible de réaliser des projets allant d'un simple éditeur
graphique à la carte d'un réseau informatique, en passant par un programme de recherche du
plus court chemin.
JGraph, qui est dérivé de la classe Swing JComponent, il peut être utilisé pour afficher
un réseau d'objets associés à l'aide du paradigme bien connu que constitue un graphe
JGraph nous permet donc de :
- Créer un graphique.
- Adapter un graphique.
- Répondre à des interactions.
- Adapter l'affichage aux besoins du client d'un graphique.
- Changer dynamiquement un graphique.
C)
REALISATION
1. Les classes et fichiers de notre programme
Notre programme est composé des fichiers suivants :

cellule.java (nous parlerons de cellules en tant qu’états en mathématique)
Dans ce fichier, nous définissons la structure de l’objet cellule qui par défaut à ses
champs valeur et suivant nuls
Valeur donne le numéro de la cellule
Suivant renseigne sur la cellule suivante à la cellule de numéro valeur
public void cellule()
{
valeur=null;
suivant=null;
}
Nous définissions également toutes les opérations sur les cellules dans ce fichier
comme :
- affecter_valeur(Object o)
- affecter_suivant(cellule cel)
- recuperer_valeur()
- recuperer_suivant()

liste.java (définit un tableau de cellule)
Dans ce fichier nous définissons la structure de l’objet liste ainsi que les fonctions
décrivant les opérations sur les objets liste :
- ajouter_valeur(Object o)
- remplacer_valeur(Object old, Object new) : remplace la valeur old d’une cellule par la
valeur new
- recuperer_position(Object o)
- recuperer_position(int i) : surcharge de la fonction recuperer_position(Object o)
- contient(liste l) : fonction booléenne qui regarde si un object contient la liste l

matrice.java (définit la matrice stochastique et les opérations)
Nous définissons ici l’objet matrice stochastique et toutes les opérations sur les matrices :
- matrice : constructeur de l’objet matrice par défaut
- matrice(l,c) : constructeur de matrice carrée de nb_ligne = l
- ajouter_valeur() : ajout d’une valeur dans la matrice
- multiplication() : gère la multiplication entre deux matrices, entre un vecteur et une
matrice
- recuperer_valeur(int l, int c) : récupère la valeur à la ligne l et la colonne c
- recupere_nb_ligne() et recupere_nb_col() : récupère le nombre de ligne, colonne

Markov.java
Dans les fichiers précédents nous avons posé les bases des objets nécessaires pour les
chaînes de Markov.
Dans ce fichier, nous gèreront toutes les opérations relatives aux chaînes de Markov.
Voici les plus grosses fonctions du programme :
- verification()
Cette fonction vérifie que :
2) la somme des poids des arètes partant d’une cellule est bien égale à 1
3) que Π(0) a bien été donné
4) retourne « vraie » si 1) et 2) sont valides
public boolean verif(){
int i, j;
float total;
liste classes;
String str;
str = "Vérification des poids des cellules : \n";
for(i=0; i<nbS; i++)
{
total=0;
for(j=0; j<nbS; j++)
total+=((Float)P.rec_valeur(i,j)).floatValue();
str += "Cellule "+j+" : "+total+"\n";
if(total!=1) {
str += "ERREUR : au moins un poids d'une cellule est different de 1 \n";
return false;
}
}
// Vérification des poids de Pi0 : doit etre au moins égal à 1
total=0;
for(i=0; i<nbS; i++)
total+=((Float)Pi0.rec_valeur(i,0)).floatValue();
str += "Verification poids de pi0 : "+total+"\n";
if(total!=1)
{
str += "ERREUR : poids Pi0 different de 1";
return false;
}
Labelres.setText(Labelres.getText()+'\n'+str);
return true;
}
- atteind1(int S) : constitue l’ensemble des sommets atteignables à partir d’un sommet
donné S avec la fonction atteind1 qui renvoie la liste des sommets T tels que P( S, T) <> 0
public liste atteind1(int S){
int i;
liste res=new liste();
for(i=0; i<nbS; i++)
if(((Float)P.rec_valeur(S,i)).floatValue()!=0)
res.ajouter_valeur(new Integer(i));
return res;
}
- atteind(int S) : constitue la liste des sommets atteignables en partant d’un sommet S en un
nombre quelconque d'étapes.
- typeclasse(liste c) : calcule et retourne le type des classes trouvées dans le graphe.
public int typeclasse(liste c){
int res, tmp, i;
liste att;
res=-1;
if(c.rec_taille()==1)
{
tmp=((Integer)c.rec_valeur(0)).intValue();
if(((Float)P.rec_valeur(tmp,tmp)).floatValue()==1)
res=1;
else
res=3;
}
else
{
att=atteind1(((Integer)c.rec_valeur(0)).intValue());
for(i=1; i<c.rec_taille(); i++)
att=att.unionint(atteind1(((Integer)c.rec_valeur(i)).intValue()));
c.trieint();
att.trieint();
if(c.egalint(att))
res=2;
else
res=3;
}
return res;}
- affiche_classe() : fonction qui affiche les classes du graphe
- calculPiN(int n) : fonction qui calcule Π à l’instant n, cette fonction ne fait que transposé
Π à l’instant 0, multiplie par la matrice stochastique, retourne son résultat et le multiplie
par le multiplie par la matrice stochastique jusqu’au temps n
- ergodicite() : fonction booléenne qui retourne vrai ou faux.

graph.java
Ce fichier permet de définir l’objet graph composé d’une liste de sommets (objet liste).
Il permet de définir les opérations sur les sommets et sur les arètes de l’objet graph.

Graphique.java
Ce fichier sert à construire l’interface graphique du fichier et de définir les listeners
permettant de donner une action à un clic par exemple.
Nous utilisons les packages AWT et SWING pour créer l’interface graphique.
2. Aperçu du programme
Téléchargement